feat(mcp-docugen): templates seed versionati + auto-seed all'avvio

- templates_seed/{offerta,report-analisi}/template.md: template Tielogic
  ufficiali versionati come sorgente di verità nel repo
- template_seed.py: copia idempotente seed→volume al boot, mai
  sovrascrive template esistenti (preserva edit fatti via MCP runtime)
- config.py: nuova Settings.templates_seed_dir
  (default /app/services/mcp-docugen/templates_seed)
- main.py: chiamata seed_templates() in build_app dopo TemplateStore init
- 4 nuovi test unit (idempotenza, skip se seed_dir mancante,
  no-op su entry non valide). 72 test verde totali

Workflow: edit del template nel repo → rebuild image → al primo boot
il volume vuoto riceve i template; se il template esiste già nel
volume (es. modificato dall'utente via tool MCP) viene preservato.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-25 12:19:29 +02:00
parent b4c2935c53
commit 419c1acc7a
8 changed files with 625 additions and 0 deletions
@@ -15,6 +15,7 @@ from mcp_docugen.http_routes import build_http_app
from mcp_docugen.llm_client import OpenRouterClient
from mcp_docugen.mcp_tools import build_mcp_server
from mcp_docugen.renderer import Renderer
from mcp_docugen.template_seed import seed_templates
from mcp_docugen.template_store import TemplateStore
logger = logging.getLogger("mcp_docugen")
@@ -28,6 +29,7 @@ async def build_app(settings: Settings | None = None) -> FastAPI:
db_path = settings.data_dir / "mcp_docugen.db"
template_store = TemplateStore(base_dir=templates_dir)
seed_templates(settings.templates_seed_dir, templates_dir)
generation_store = GenerationStore(
db_path=db_path, generated_dir=generated_dir
)