9e80a2006315a6b556503a868c01e1f25891b205
- 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>
ArcaSuite
Monorepo per il sistema documentale personale+aziendale di Adriano e gli MCP server che lo supportano.
Cos'è
Due pezzi, stesso repo:
- Sistema Documentale — vault multi-wiki Markdown versionati su Gitea, pubblicati in sola lettura via Quartz, editabili da Obsidian + Claude Code. Vedi
docs/sistema-documentale.md. - MCP server — microservizi MCP riusabili dai wiki (e da altri client Claude). Ogni MCP vive in
services/mcp-<nome>/come membro del workspaceuv.
MCP previsti
| Servizio | Stato | Funzione |
|---|---|---|
mcp-docugen |
Design pronto, implementazione da iniziare | Genera Markdown formale da template + LLM (OpenRouter). Vedi docs/mcp-docugen-design.md + docs/mcp-docugen-implementation.md. |
mcp-convert |
Da progettare | Conversione Markdown → PDF / DOCX / HTML (pandoc/typst backend). |
mcp-inbox |
Da progettare | Ingest da Telegram (+ STT opzionale via Whisper) verso draft inbox consumati da Claude Code desktop. |
Ogni MCP ha il suo pyproject.toml, src/mcp_<nome>/, tests/ e Dockerfile. Viene registrato in pyproject.toml root come workspace member.
Layout
ArcaSuite/
├── docs/ # design + implementation plan per componente
│ ├── sistema-documentale.md
│ ├── mcp-docugen-design.md
│ └── mcp-docugen-implementation.md
├── services/ # workspace members uv (uno per MCP)
│ └── mcp-<nome>/ # src/ tests/ pyproject.toml Dockerfile
├── scripts/ # script operativi (provisioning, backup, smoke)
├── secrets/ # chiavi, token (gitignored)
├── docker-compose.yml # stack completo (TODO: arriverà con primo MCP)
├── pyproject.toml # workspace uv + ruff + pytest root
├── .env.example # config root stack
├── .mcp.json.example # template registrazione client MCP
└── .gitignore
Convenzioni
- Nomenclatura:
mcp-<nome>per tutti gli MCP (pattern Cerbero). Package Python:mcp_<nome>(snake_case). - Package manager:
uvworkspace. Nessunrequirements.txt.uv.lockcommittato. - Python: 3.11+, async-first, Pydantic v2 per ogni I/O.
- Testing:
pytest+pytest-asyncio,asyncio_mode = "auto", test sottoservices/<svc>/tests/. - Lint:
ruff(config root), line 100. - Config: ogni servizio ha un proprio
.env.example. Root.envsolo per cose cross-cutting (gateway port, dominio pubblico). - Secrets: mai committati.
.mcp.jsonlocale gitignored, solo.mcp.json.exampletracciato.
Riferimento spec Python
Servizi non-MCP (es. eventuali inbox-service REST) seguono /home/adriano/Documenti/Struttura_Progetti/2026-04-01-python-project-spec-design.md. Gli MCP server seguono la struttura specifica descritta nei rispettivi design doc (FastMCP come root ASGI).
Setup (quando ci sarà il primo MCP implementato)
cp .env.example .env
cp .mcp.json.example .mcp.json # compila con URL + API key
uv sync --all-groups
Remote
- Gitea:
ssh://git@git.tielogic.xyz:222/Adriano/ArcaSuite.git
Description
Languages
Python
92.6%
CSS
5.4%
Dockerfile
1.4%
HTML
0.6%