Files
86eb885bfe refactor(catalog): split OpenAPI spec into per-plugin files with independent generation (#2735)
* feat(catalog): split OpenAPI spec into per-plugin files

Restructure the monolithic catalog.yaml source into per-plugin specs
so each plugin can independently define its own API paths and schemas
while sharing common types from common.yaml.

- Slim api/openapi/src/catalog.yaml to core (sources, labels, preview)
- Add catalog/plugins/model/api/openapi/ (model paths + schemas)
- Add catalog/plugins/mcp/api/openapi/ (MCP paths + schemas)
- Add scripts/merge_catalog_specs.sh to combine core + plugins + lib
- Update Makefile to use merge_catalog_specs.sh for catalog.yaml

The merged output is semantically identical to the previous monolithic
spec — generated code, validation, and tests are unchanged.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Alessio Pragliola <seth.pro@gmail.com>

* feat(catalog): per-plugin server stub generation

Generate server stubs (controllers, interfaces) per-plugin instead of
from the unified spec, while keeping client models in catalog/pkg/openapi/.

- Add scripts/assemble_plugin_spec.sh to build standalone specs per plugin
- Add catalog/plugins/{model,mcp}/scripts/gen_openapi_server.sh for
  independent per-plugin code generation
- Add per-plugin .openapi-generator-ignore files
- Split api.go into api_model.go + api_mcp.go (same package, no breaking change)
- Refactor catalog/scripts/gen_openapi_server.sh into orchestrator
- Update catalog/Makefile with per-plugin targets and dependency isolation

Changing a plugin's spec only regenerates that plugin's controller.
Generated output is identical to the previous unified generation.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Alessio Pragliola <seth.pro@gmail.com>

* refactor: move plugin OpenAPI specs to api/openapi/src/plugins/

Co-locate plugin specs with other OpenAPI sources under api/openapi/src/
instead of catalog/plugins/*/api/openapi/.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Alessio Pragliola <seth.pro@gmail.com>

* refactor: consolidate plugin OpenAPI specs into single files

Flatten per-plugin directory structure (openapi.yaml + components.yaml)
into single files (model.yaml, mcp.yaml) under api/openapi/src/plugins/.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Alessio Pragliola <seth.pro@gmail.com>

* fix: update .gitattributes and clean target for per-plugin generation

Regenerate .gitattributes to reflect api.go → api_model.go/api_mcp.go
rename. Fix clean-internal-server-openapi to also delete per-plugin
output files so both plugins regenerate after a clean.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Alessio Pragliola <seth.pro@gmail.com>

* fix: remove generator boilerplate after per-plugin generation

Clean up README.md, api/openapi.yaml, and .openapi-generator-ignore
after each plugin generation run to prevent untracked files in CI.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Alessio Pragliola <seth.pro@gmail.com>

---------

Signed-off-by: Alessio Pragliola <seth.pro@gmail.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-26 18:50:06 +00:00
..