47 lines
3.8 KiB
Markdown
47 lines
3.8 KiB
Markdown
# ADR-0002 — Più motori CLI (Claude Code, Codex, Antigravity) su Windows e Linux
|
|||
|
|
|
||
|
|
- **Stato**: Proposta
|
||
|
|
- **Data**: 2026-10-15
|
||
|
|
- **Collegato a**: [ADR-0001](0001-gui-multipiattaforma-avalonia.md) (GUI e piattaforme)
|
||
|
|
|
||
|
|
## Contesto
|
||
|
|
L'app lancia solo `claude -p`. Si vuole usare dalla stessa chat anche **OpenAI Codex CLI** e **Antigravity CLI** (`agy`), così come `claude` già installati da terminale dall'utente, su Windows e Linux. L'app non li installa e non gestisce login: sono programmi esterni, autenticati a parte.
|
||
|
|
|
||
|
|
## Criteri di decisione
|
||
|
|
1. Aggiungere un motore costa una definizione dichiarativa, non nuova logica sparsa.
|
||
|
|
2. Funziona uguale su Windows e Linux: i motori si trovano nel PATH come da terminale.
|
||
|
|
3. Un solo punto di avvio processo (cartella dell'exe, stdin chiuso, `ArgumentList`), condiviso da CLI e GUI.
|
||
|
|
4. Nessuna scorciatoia che disattivi i controlli di permesso senza una scelta esplicita dell'utente.
|
||
|
|
|
||
|
|
## Decisione
|
||
|
|
- **Astrazione "motore"** in C#. Ogni motore descrive: nome e eseguibile, argomenti per il primo messaggio e per la ripresa, elenco modelli, supporto effort, modo per ottenere l'id di sessione. `RunClaude` diventa `RunEngine(engine, …)`.
|
||
|
|
- **Rilevamento** dei motori cercando l'eseguibile nel PATH (su Windows anche le estensioni di PATHEXT). I motori assenti sono disabilitati nelle Impostazioni, con messaggio chiaro; la CLI esce con 127 come oggi.
|
||
|
|
- **Una chat = un motore**. Il file JSON della chat memorizza il motore; il contesto di sessione non passa da un motore all'altro, quindi cambiare motore apre una nuova chat.
|
||
|
|
- **Impostazioni** nella GUI: motore attivo, modello, effort (solo se supportato), persistite su disco accanto alla cronologia. La CLI ottiene `--engine`.
|
||
|
|
- **Permessi**: di default sola lettura / nessun bypass dei controlli; concedere di più è un'opzione esplicita.
|
||
|
|
- **Output**: ogni motore ha un parser che lo normalizza in testo markdown prima del rendering.
|
||
|
|
|
||
|
|
## Comandi dei motori
|
||
|
|
Da verificare con `--help` delle versioni installate: derivano da documentazione e ricerche, non da prove su questo PC, dove `codex` e `agy` non sono installati.
|
||
|
|
|
||
|
|
| | Claude Code | Codex CLI | Antigravity CLI |
|
||
|
|
|---|---|---|---|
|
||
|
|
| Comando | `claude -p <prompt>` | `codex exec <prompt>` | `agy -p <prompt>` |
|
||
|
|
| Continuare | `--session-id <guid>` poi `--resume <guid>` | `codex exec resume <id> <prompt>` | da verificare |
|
||
|
|
| Modello | `--model` | `-m` / `--model` | da verificare |
|
||
|
|
| Effort | `--effort` | via `--config` (da verificare) | non noto |
|
||
|
|
|
||
|
|
## Conseguenze
|
||
|
|
**Positive**: un solo flusso di avvio; nuovi motori aggiungibili con una definizione; elimina la duplicazione CLI/GUI.
|
||
|
|
**Negative**: i flag delle CLI cambiano nel tempo e vanno mantenuti; le sessioni non si trasferiscono tra motori; più superficie da testare su due sistemi operativi.
|
||
|
|
|
||
|
|
## Rischi e da verificare
|
||
|
|
- [ ] **Codex**: l'id di sessione lo genera Codex e non l'app; va letto dall'output (probabilmente con output JSON) per riprendere la chat.
|
||
|
|
- [ ] **Antigravity**: segnalato un blocco di `agy -p` da sottoprocesso con output rediretto su Windows ([issue #318](https://github.com/google-antigravity/antigravity-cli/issues/318)). Provare con `--print-timeout` e prevedere un messaggio d'errore. I flag vanno messi prima di `-p`. Da provare anche su Linux.
|
||
|
|
- [ ] **Forma dell'eseguibile**: `claude` è un .exe nativo avviabile direttamente; Codex e Antigravity, se installati con un gestore di pacchetti (es. npm), su Windows possono essere script `.cmd` che richiedono `cmd.exe /c`. Su Linux sono normali eseguibili o script con shebang. Verificare e gestire per motore.
|
||
|
|
- [ ] Autenticazione: ogni CLI deve essere già autenticata; l'app mostra l'errore del motore senza gestire login.
|
||
|
|
- [ ] Formato dell'output (testo o JSON) e normalizzazione per ciascun motore.
|
||
|
|
- [ ] Mappatura effort e modelli per motore, con elenco modelli aggiornabile.
|
||
|
|
|
||
|
|
## Riferimenti
|
||
|
|
- Passi: [ROADMAP.md](../ROADMAP.md), Fase 4.
|