Skip to content

feat(fs-mcp): autodescubrir columnas de Extension/Table de los plugins habilitados - #4

Open
Asermar wants to merge 1 commit into
FacturaScripts:mainfrom
Asermar:feat/autodiscover-extension-columns
Open

feat(fs-mcp): autodescubrir columnas de Extension/Table de los plugins habilitados#4
Asermar wants to merge 1 commit into
FacturaScripts:mainfrom
Asermar:feat/autodiscover-extension-columns

Conversation

@Asermar

@Asermar Asermar commented Jul 22, 2026

Copy link
Copy Markdown

Problema

El generador de metadata (server/src/scripts/generate-metadata.ts) solo carga tablas de Core/Table y, en modo plugin, de pluginPath/Table. No mira Extension/Table/, así que las columnas y claves foráneas que los plugins añaden a tablas ajenas (el mecanismo estándar de extensión de FacturaScripts) nunca llegan a la metadata del MCP.

Consecuencia: en cualquier instalación con plugins que extienden tablas, describe_model, los enum/maxLength y las relaciones que expone el MCP quedan incompletos respecto al esquema real de la base de datos.

Solución

Autodescubrimiento de extensiones usando la misma fuente de verdad que el framework (Core/Plugins.php):

  1. Leer la lista de plugins habilitados en <fsPath>/MyFiles/plugins.json, ordenados por su order.
  2. Para cada plugin activo, fusionar las columnas/FKs de <fsPath>/Plugins/<plugin>/Extension/Table/*.xml sobre las tablas ya cargadas.
  3. Solo se añade lo que no exista y únicamente a tablas ya conocidas (no crea tablas nuevas).

Características:

  • Cero configuración: no hay que declarar nada; refleja el conjunto real de plugins activos.
  • Solo habilitados: un plugin desactivado no añade columnas a la BD, así que tampoco a la metadata.
  • No-op en core limpio: si no hay MyFiles/plugins.json, no hace nada → la generación del core vanilla no cambia.
  • Aplica tanto en modo CORE como en modo PLUGIN.

Verificación

Ejecutado en modo core contra una instalación real con 39 plugins habilitados: se fusionan +224 columnas de extensión. Ejemplo concreto: el modelo cliente (tabla clientes, extendida por EnviarDocumentos, Notificaciones, Modelo347, Alias…) pasa a incluir emailto, emailcc, emailbcc, excluir347 y alias, que antes faltaban. Sin plugins.json el comportamiento es idéntico al actual.

…litados

El generador de metadata solo leía Core/Table y (en modo plugin) pluginPath/Table,
por lo que las columnas y FKs que los plugins añaden a tablas ajenas mediante
Extension/Table/*.xml nunca llegaban a la metadata del MCP: describe_model, los
enums/maxLength y las relaciones quedaban incompletos en instalaciones con plugins.

Se añade el autodescubrimiento de esas extensiones usando la misma fuente de verdad
que FacturaScripts: la lista de plugins habilitados en <fsPath>/MyFiles/plugins.json
(aplicados por su order). Para cada plugin activo se fusionan las columnas/FKs de
<fsPath>/Plugins/<plugin>/Extension/Table/*.xml sobre las tablas ya cargadas (solo
añade lo que no exista; no crea tablas nuevas). Sin plugins.json (instalación limpia)
es un no-op, así que no altera la generación del core vanilla.

Aplica tanto en modo CORE como en modo PLUGIN.

Probado contra una instalación real (39 plugins habilitados): +224 columnas de
extensión fusionadas; p. ej. el modelo cliente pasa a incluir emailto/emailcc/
emailbcc, excluir347 y alias, que antes faltaban.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant