feat(mcp-docugen): Task 4-6 template_store, llm_client, generation_store

- TemplateStore: CRUD filesystem + asset dir, frontmatter YAML roundtrip,
  path traversal rejection
- OpenRouterClient: async httpx con retry backoff esponenziale (5xx, 429,
  timeout), no-retry su 4xx, parse usage/cost
- GenerationStore: SQLite aiosqlite con schema generations + ephemeral_assets,
  cleanup TTL, stats aggregate

Root pyproject aggiornato con respx + pytest-cov dev deps.
19 + 11 + 9 + 6 = 45 test totali, tutti passed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-21 12:21:43 +02:00
parent d5c645bf17
commit 9e80a20063
8 changed files with 963 additions and 0 deletions
Generated
+2
View File
@@ -11,7 +11,9 @@ members = [
dev = [
{ name = "pytest", specifier = ">=8.0" },
{ name = "pytest-asyncio", specifier = ">=0.24" },
{ name = "pytest-cov", specifier = ">=5.0" },
{ name = "pytest-httpx", specifier = ">=0.30" },
{ name = "respx", specifier = ">=0.21" },
{ name = "ruff", specifier = ">=0.7" },
]