GUI a chat con rendering markdown, sessioni e correzione del thread STA
Sostituisce la GUI a singola richiesta con una chat in stile claude.ai: conversazione in markdown (Markdig + WebView2) in alto, input in basso, contesto mantenuto con --session-id / --resume. La GUI ora gira su un thread STA, necessario a WebView2. Documentazione aggiornata. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
e4f75f5aa4
commit
5a18b9c23d
7 files changed
+190
-85
No files matched your search
@@ -20,17 +20,18 @@ LlmRun: eseguibile C# (.NET 10, Windows) che invoca Claude Code (`claude -p`) da
|
||||
|
||||
## Architettura
|
||||
|
||||
Tutto in [Program.cs](Program.cs): top-level statements per la CLI e la classe `Gui` (Form) per la GUI. Entrambe costruiscono un `ProcessStartInfo` per `claude -p <prompt>` con `ArgumentList` (niente quoting manuale). Nessuna dipendenza esterna.
|
||||
|
||||
- CLI: stdout/stderr ereditati (streaming), exit code propagato, 127 se `claude` non è nel PATH.
|
||||
- GUI: output rediretto e mostrato riga per riga. Barra impostazioni con ComboBox modello (editabile, voci "Nome versione (id)"; lista hardcoded in `Gui.Models`, da aggiornare quando escono nuovi modelli) ed effort → `--model` / `--effort`, omessi se "predefinito".
|
||||
- [Program.cs](Program.cs): top-level statements. Senza argomenti avvia `Gui`; con argomenti è la CLI (`claude -p <prompt>` con `ArgumentList`, stdout/stderr ereditati, exit code propagato, 127 se `claude` non è nel PATH).
|
||||
- [Gui.cs](Gui.cs): chat WinForms. WebView2 (conversazione, in alto) + pannello in basso (menu modello/effort, "Nuova chat", input, Invia). Ogni messaggio lancia `claude -p` con stdout/stderr rediretti; la risposta è convertita da markdown a HTML con Markdig (`DisableHtml`) e la pagina viene rigenerata per intero con `NavigateToString`. Contesto tra messaggi: `--session-id <guid>` al primo, `--resume <guid>` poi. `--model`/`--effort` omessi se "predefinito". Lista modelli hardcoded in `Gui.Models`, da aggiornare quando escono nuovi modelli.
|
||||
- Dipendenze NuGet (solo GUI): Markdig, Microsoft.Web.WebView2.
|
||||
|
||||
## Vincoli non ovvi
|
||||
|
||||
- La working directory di `claude` deve essere la cartella dell'exe: usare `AppContext.BaseDirectory`, mai `Environment.CurrentDirectory` né `Assembly.Location` (vuoto in single-file).
|
||||
- Lo stdin di `claude` va redirezionato e chiuso subito, altrimenti aspetta 3s.
|
||||
- `claude` è un .exe nativo (`~/.local/bin`), avviabile direttamente. Se fosse `claude.cmd` serve `cmd.exe /c`.
|
||||
- La logica di avvio processo è duplicata tra CLI e GUI (volutamente, per restare in un file solo): se cambia, modificarla in entrambi i punti.
|
||||
- La logica di avvio processo è duplicata tra CLI (`Program.cs`) e GUI (`Gui.cs`): se cambia (cartella di lavoro, stdin, flag), modificarla in entrambi i punti.
|
||||
- La GUI non mostra link né HTML della risposta nella finestra: i link `http(s)` vanno aperti nel browser di sistema.
|
||||
- La GUI deve girare su un thread STA (creato a mano in `Program.cs`, perché i top-level statements non hanno `[STAThread]`): senza, WebView2 fallisce con `RPC_E_CHANGED_MODE`.
|
||||
|
||||
## Skill del repo
|
||||
|
||||
|
||||
Reference in new issue
Block a user