Arquitectura SPI de plugins¶
Entry points¶
| Entry point | Rol |
|---|---|
cortex.plugins | Plugin de dominio o plataforma (create_plugin → PluginDescriptor) |
cortex.panels | configure_panel opcional para namespaces dedicados (accounting, trainer, …) |
Discovery: entry points instalados → escaneo plugins/ en monorepo → sideload (PLUGIN_DIRS).
Installed vs enabled¶
| Estado | Significado |
|---|---|
| Installed | Paquete pip presente; aparece en catálogo |
| Enabled | Subconjunto activo en state store PG (/control/plugins); expone API y módulos UI |
El framework registra hooks (register_resources, register_mcp_tools, register_listeners, …) solo para plugins enabled.
Hooks de bootstrap¶
| Hook | Uso |
|---|---|
register_resources | Módulos CUS y CRUD declarativo |
register_forms | Formularios JSON Forms |
register_configuration | Segmentos del panel configuration |
register_mcp_tools | Tools para agentes (ADR 006) |
register_listeners | Suscripción a events de dominio (ADR 021) |
register_observers | Ciclo de vida de entidades locales |
Paneles¶
- Generativos:
operations,admin— el framework materializa conensure_panel()cuando plugins aportan módulos. - Dedicados:
accounting,trainer—configure_panelopcional víacortex.panels. - Plataforma:
control— embebido en framework.
Bundles pip vs activación¶
pip install "cortex-product-unosportclub[operations-core]" instala wheels; no activa plugins. La activación es decisión del superadmin en /control/plugins.
Regla de oro¶
Un plugin nunca importa otro cortex_plugin_*. Integración: HTTP y/o events nombrados.
Ver ADR 023 y integración.