diff --git a/docs/MVP.md b/docs/MVP.md index 8d75eff..a89e052 100644 --- a/docs/MVP.md +++ b/docs/MVP.md @@ -51,7 +51,7 @@ Sorgente di verità per l'aspetto, derivato dalla skill `ui-ux-pro-max` (stile " - Working dir: `AppContext.BaseDirectory`, non la cwd del chiamante. ## Fuori scope (MVP) -Streaming token-per-token nella GUI, annullamento di una risposta in corso, rinomina/ricerca delle chat, config file, logging su file, test automatici, supporto Linux/macOS. +Streaming token-per-token nella GUI, annullamento di una risposta in corso, rinomina/ricerca delle chat, config file, altri motori oltre a Claude Code (Codex, Antigravity: vedi [ROADMAP.md](ROADMAP.md), Fase 4), logging su file, test automatici, supporto Linux/macOS. ## Criteri di accettazione - [ ] Eseguito da un'altra cartella, `claude` parte nella cartella dell'exe (verificabile chiedendo "pwd"). diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 1150288..70ca0a6 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -24,3 +24,34 @@ Dettagli dell'MVP in [MVP.md](MVP.md). - [ ] GUI: streaming della risposta (`--output-format stream-json`), stop, rinomina/ricerca chat - [ ] Config file accanto all'exe - [ ] Test automatici e CI + +## Fase 4 — Più motori (Claude Code, Codex, Antigravity) +Obiettivo: oltre a Claude Code, usare **OpenAI Codex CLI** e **Antigravity CLI** (`agy`) dalla stessa chat, scegliendo il motore da una nuova schermata **Impostazioni** della GUI. + +Flag delle tre CLI (da verificare con `--help` delle versioni installate: derivano da documentazione e ricerche, non da prove su questo PC, dove `codex` e `agy` non sono ancora installati): + +| | Claude Code | Codex CLI | Antigravity CLI | +|---|---|---|---| +| Comando | `claude -p ` | `codex exec ` | `agy -p ` | +| Continuare | `--session-id ` poi `--resume ` | `codex exec resume ` | da verificare | +| Modello | `--model` | `-m` / `--model` | da verificare | +| Effort | `--effort` | via `--config` (da verificare) | non noto | + +**Architettura** +- [ ] Un'astrazione "motore" in C#: per ogni motore, eseguibile, argomenti per primo messaggio e per ripresa, elenco modelli, supporto effort, lettura dell'id di sessione. `RunClaude` diventa `RunEngine(engine, ...)`; la logica di avvio (cartella dell'exe, stdin chiuso) resta in un solo punto, eliminando la duplicazione CLI/GUI. +- [ ] Rilevamento dei motori installati (PATH) e messaggio chiaro se mancano; i motori assenti sono disabilitati nelle Impostazioni. +- [ ] Il file JSON di ogni chat memorizza il **motore**; riaprendo una chat si usa il suo motore. Il contesto di sessione non passa da un motore all'altro: cambiare motore apre una nuova chat. + +**GUI: Impostazioni** +- [ ] Schermata/pannello Impostazioni (icona nella barra laterale) con selettore del **motore** attivo. +- [ ] Il selettore Modello mostra solo i modelli del motore scelto; Effort compare solo se il motore lo supporta. +- [ ] Impostazioni persistite su disco (motore, modello, effort), così si ritrovano alla riapertura. Si lega al "config file" della Fase 3. +- [ ] Il motore della chat aperta è indicato nell'interfaccia (etichetta sull'intestazione o sulla voce in elenco). + +**Rischi e punti da verificare** +- [ ] **Codex**: l'id di sessione non lo sceglie l'app (lo genera Codex): va letto dall'output (probabilmente con l'output JSON) per poter riprendere la chat. +- [ ] **Antigravity**: segnalato un blocco di `agy -p` quando lanciato da sottoprocesso con output rediretto su Windows ([issue #318](https://github.com/google-antigravity/antigravity-cli/issues/318)); provare con un timeout (`--print-timeout`) e prevedere un messaggio d'errore. I flag vanno messi prima di `-p`. +- [ ] **Permessi**: Codex e Antigravity chiedono conferma per le azioni; in modalità non interattiva serve decidere una politica (sola lettura di default, opzione esplicita per concedere di più) invece di usare flag che saltano ogni controllo. +- [ ] Formato dell'output di ciascun motore (testo semplice o JSON) e normalizzazione prima del rendering markdown. +- [ ] Autenticazione: ogni CLI deve essere già autenticata; l'app non gestisce login. +- [ ] CLI (`LlmRun "prompt"`): opzione `--engine`, coerente con la GUI.