# Roadmap Dettagli dell'MVP in [MVP.md](MVP.md). Stadio attuale e debiti: [PROJECT_STATE.md](PROJECT_STATE.md) (siamo in fase di **MVP**). ## Fase 0 — Doc-first - [x] Scrivere MVP.md e ROADMAP.md - [ ] Chiudere le domande aperte in MVP.md ## Fase 1 — MVP - [x] `dotnet new console`, `Program.cs` unico - [x] Lancio di `claude -p` nella cartella dell'exe, streaming, exit code - [ ] Publish single-file win-x64 e verifica dei criteri di accettazione - [x] GUI a chat: conversazione markdown in alto, input in basso, sessione con `--session-id`/`--resume` ## Fase 2 — Robustezza - [ ] Input del prompt da stdin e da file - [ ] Timeout e cancellazione (Ctrl+C propagato al figlio) - [x] GUI: scelta di modello (`--model`) ed effort (`--effort`) - [ ] CLI: stesse opzioni; inoltre `--allowedTools`, `--output-format` ## Fase 3 — Oltre - [x] GUI: cronologia chat (salvataggio JSON, barra laterale, riapertura con `--resume`, eliminazione) - [ ] GUI: streaming della risposta (`--output-format stream-json`), stop, rinomina/ricerca chat - [x] GUI: immagini nel markdown da percorso locale, con ripiego sul testo alternativo ([ADR-0006](adr/0006-immagini-nel-markdown.md); test MD-14, MD-19…MD-30); immagini remote rimandate - [x] Schema di una wiki interrogabile con immagini: convenzione per le istruzioni solo-query, l'indice e il catalogo ([ADR-0007](adr/0007-schema-wiki-per-query-con-immagini.md)); da provare con la chat reale su una wiki di esempio - [x] GUI: formule LaTeX nel markdown, inline `$…$` e a blocco `$$…$$`, con ripiego sul sorgente ([ADR-0008](adr/0008-formule-latex-nel-markdown.md); test MD-31…MD-38) - [ ] Config file accanto all'exe - [ ] Test automatici e CI (vedi Fase 6) ## Fase 4 — Più motori (Claude Code, Codex, Antigravity) Decisione, tabella dei comandi e rischi: [ADR-0002](adr/0002-motori-cli-claude-codex-antigravity.md). Qui solo i passi. Il punto unico di avvio processo l'ha estratto la Fase 5. - [x] Verificare i flag reali di `codex` e `agy` (provati su Linux/WSL, ADR-0002 accettata per Claude Code, Codex e Antigravity); Windows da verificare - [x] Astrazione "motore" in C# (`src/agent-wiki-ui/Core/Engine.cs`, `src/agent-wiki-ui/Core/EngineRunner.cs`) - [x] Rilevamento dei motori nel PATH; motori assenti disabilitati, messaggio chiaro - [x] Il JSON di ogni chat memorizza il motore e l'id di sessione; cambiare motore apre una nuova chat - [x] GUI: interruttore CLI nel riquadro Impostazioni; modelli ed effort in base al motore; motore della chat indicato nell'interfaccia - [ ] Impostazioni (motore, modello, effort) persistite su disco - [x] Motore Codex: lettura dell'id di sessione dall'output (`thread_id`) per la ripresa - [x] Motore Antigravity: gestione del blocco con output rediretto (`--print-timeout 120s` prima di `-p`, chiusura immediata di stdin) - [x] Motore Antigravity: lettura dell'id di sessione dall'output (`conversation_id`) e ripresa con `--conversation` - [x] Permessi di Codex e Antigravity in sola lettura (`sandbox_mode="read-only"` per Codex; per Antigravity in headless mode `-p` sola lettura garantita dalla modalità di default senza `--mode`; nessun flag che salta i controlli) - [ ] Opzione esplicita per concedere permessi di scrittura - [x] CLI: opzione `--engine`, coerente con la GUI (supporta `claude`, `codex`, `agy`) - [x] Aggiornamento dei CLI dalle Impostazioni, un pulsante per CLI con `update` ufficiale ed esito leggibile ([ADR-0004](adr/0004-aggiornamento-dei-cli.md)) - [x] Controllo preventivo della versione più recente (sorgenti ufficiali, cache di 5 minuti); pulsante Aggiorna evidenziato e puntino sul pulsante Impostazioni solo se c'è una versione nuova - [ ] Provare gli aggiornamenti reali (finora provati solo con CLI finti, e rilevamento del metodo di installazione sui percorsi reali; provato `agy update`) su Linux e Windows (installazione nativa e npm) e portare l'ADR-0004 ad "Accettata" ## Fase 5 — Multipiattaforma (Windows + Linux), GUI in solo C# Decisione e motivazioni: [ADR-0001](adr/0001-gui-multipiattaforma-avalonia.md). Qui solo i passi. - [x] Chiudere le verifiche dell'ADR-0001 con un prototipo e portarlo a "Accettata" (restano due verifiche indicate nell'ADR) - [x] Nome dell'app in un solo punto: `AssemblyName` nel csproj, letto da `Core/AppInfo.cs`; la rinomina segue la checklist di docs/README.md - [x] Rinomina in `agent-wiki-ui` (csproj, namespace) e migrazione automatica della cartella dati `LlmRun` → `agent-wiki-ui` - [x] Target `net10.0` (non più `net10.0-windows`); rimossi WinForms e WebView2 - [x] Estrarre in un solo punto la logica di avvio dei motori (`Core/EngineRunner.cs`: cartella dell'exe, stdin chiuso), prima duplicata tra `Program.cs` e `Gui.cs` - [x] Cronologia in `Environment.SpecialFolder.LocalApplicationData` (stesso formato JSON, chat esistenti ancora leggibili) - [x] GUI Avalonia: finestra, barra laterale delle chat, conversazione, composer con modello ed effort - [x] Rendering markdown in Avalonia (titoli, liste, tabelle, citazioni, codice), pulsante Copia, link nel browser di sistema - [x] Tema chiaro/scuro che segue il sistema, con i token di MVP.md → "Design (UI/UX)" (da provare su un desktop Linux reale) - [x] Eliminare `ui.html` e il protocollo `WebMessage` - [x] Windows: eseguibile senza finestra di console, la CLI riaggancia il terminale padre ([ADR-0005](adr/0005-windows-senza-console.md)); da provare su Windows nativo - [ ] Publish single-file self-contained `win-x64` e `linux-x64`: compilano e partono (Linux: CLI e GUI su WSLg; Windows: solo CLI, via WSL); da provare la GUI su Windows nativo e su una distribuzione Linux pulita - [x] Aggiornare README.md e AGENT.md (già CLAUDE.md: comandi, architettura, vincoli) a migrazione conclusa ## Fase 6 — Test e copertura completa Decisione: [ADR-0003](adr/0003-strategia-di-test.md). Piano, soglie e matrice: [TESTING.md](TESTING.md). Da questa fase in poi vale la regola: ogni nuova funzione arriva con i suoi test. - [ ] Verificare le compatibilità dell'ADR-0003 (xUnit, Avalonia.Headless, coverlet, `dotnet test`) e portarlo ad "Accettata" - [x] Ristrutturare in `src/` e `tests/` con soluzione unica e `InternalsVisibleTo` - [ ] Predisposizioni di testabilità: `ChatStore` a istanza, `IClaudeRunner` - [x] `FakeClaude`: eseguibile finto per i test di processo (`tests/FakeClaude`, prove FK-01…FK-05) - [ ] Test `Core/` (CL, ST) e `MainViewModel` (VM) - [ ] Test del renderer markdown (MD) e della GUI headless (UI) - [ ] Test end-to-end e smoke di publish per `win-x64` e `linux-x64` (PUB) - [ ] Soglie di copertura che fanno fallire la build - [ ] CI con matrice Windows + Linux (fornitore da scegliere) - [ ] Batteria di contratto per ogni motore (EN), insieme alla Fase 4