Files
agent-wiki-ui/docs/adr/0001-gui-multipiattaforma-avalonia.md
T
davideandClaude Sonnet 5.5 c4c1ad4520 Documentazione: ADR su GUI Avalonia multipiattaforma e motori CLI
Introduce docs/adr con ADR-0001 (GUI in solo C# con Avalonia per Windows e
Linux) e ADR-0002 (Codex e Antigravity oltre a Claude Code), entrambi in
stato Proposta. Aggiunge docs/README.md come indice unico con regole SSOT e
checklist di rinomina, perché il nome del progetto non è ancora deciso.
La roadmap ha la nuova Fase 5 e la Fase 4 ora contiene solo i passi, con le
motivazioni spostate negli ADR.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-15 11:06:44 +02:00

4.5 KiB

ADR-0001 — GUI multipiattaforma in solo C# con Avalonia

  • Stato: Proposta
  • Data: 2026-10-15
  • Sostituisce: la parte "GUI WinForms + WebView2 + ui.html" di MVP.md (le sezioni interessate rimandano a questo ADR)

Contesto

L'app nasce per Windows: GUI WinForms con un solo WebView2 che carica ui.html (HTML/CSS/JS), CLI in Program.cs. L'obiettivo ora è avere un eseguibile standalone per Windows e Linux nel modo più semplice, scritto interamente in C#, senza HTML.

Oggi non è possibile: WinForms e WebView2 sono solo Windows, il csproj punta a net10.0-windows, la cronologia usa %LOCALAPPDATA%. La CLI invece è già portabile.

Criteri di decisione

  1. Un solo codice sorgente, compilabile per win-x64 e linux-x64.
  2. Standalone: publish single-file self-contained, senza runtime né librerie da installare oltre a quanto offre un normale desktop.
  3. Solo C# (e XAML per il layout): niente HTML/CSS/JS.
  4. Mantenere la GUI a finestra (chat con barra laterale, markdown, selettori modello/effort).
  5. Riuso massimo della logica esistente (claude -p, sessioni, cronologia JSON, Markdig).

Opzioni considerate

Opzione Esito Motivo
Mantenere WinForms + WebView2 Scartata Solo Windows, e richiede HTML.
Photino / WebView nativa Scartata Richiede HTML e, su Linux, webkit2gtk da installare: non standalone.
Server HTTP locale (Kestrel) + browser Scartata Portabile e semplice, ma la UI resta HTML e non è una finestra propria.
MAUI Scartata Nessun supporto desktop Linux ufficiale.
Terminal.Gui (TUI) Alternativa Puro C#, binario leggero, ma è un'interfaccia da terminale, non una finestra.
Avalonia UI Scelta GUI nativa, C# + XAML, render Skia, Windows e Linux, publish single-file self-contained.

Decisione

La GUI viene riscritta con Avalonia UI:

  • Layout in XAML, logica in C# con ViewModel e binding. ui.html, il protocollo WebMessage e le dipendenze WinForms/WebView2 spariscono.
  • Rendering markdown con una libreria Avalonia basata su Markdig, al posto della conversione in HTML. I link http(s) si aprono nel browser di sistema.
  • Un solo progetto con target net10.0 (non più net10.0-windows). Due publish single-file self-contained: win-x64 e linux-x64.
  • La CLI (Program.cs con argomenti) resta com'è e funziona su entrambi i sistemi.
  • La cronologia usa Environment.SpecialFolder.LocalApplicationData (%LOCALAPPDATA% su Windows, ~/.local/share su Linux), sottocartella <nome-app>/chats. Il nome viene da un'unica costante (vedi Nome del progetto).
  • La logica di avvio del processo (cartella dell'exe, stdin chiuso, ArgumentList) viene estratta in un solo punto condiviso da CLI e GUI, eliminando la duplicazione oggi segnalata in CLAUDE.md. Si lega all'astrazione "motore" di ADR-0002.
  • L'aspetto (token di colore, tipografia, accessibilità) resta definito in MVP.md → "Design (UI/UX)", tradotto in risorse/stili Avalonia. Il tema segue il sistema (chiaro/scuro) tramite ThemeVariant.

Conseguenze

Positive

  • Un solo eseguibile per sistema, senza dipendenze di runtime.
  • Nessun HTML/JS da mantenere; il vincolo STA di WinForms/WebView2 non c'è più.
  • Pulizia della duplicazione CLI/GUI.

Negative / costi

  • Riscrittura della sola parte GUI (Gui.cs + ui.html), più ampia di una soluzione basata sul browser.
  • Eseguibile più pesante (include Avalonia/Skia).
  • Perdita di alcune comodità del web: la resa del markdown (tabelle, blocchi di codice, pulsante Copia) dipende dalla libreria scelta e va riprodotta o adattata.
  • Su Linux serve un desktop con X11 o XWayland e le librerie di base (fontconfig ecc.).

Da verificare (prima di passare a "Accettata")

  • La libreria markdown per Avalonia scelta è compatibile con la versione di Avalonia usata e con net10.0, e rende tabelle, citazioni e blocchi di codice in modo accettabile.
  • Il publish single-file linux-x64 parte su una distribuzione pulita (nessuna libreria nativa mancante oltre a quelle di desktop).
  • claude viene trovato nel PATH su Linux e la CLI mantiene exit code e codice 127.
  • Il tema chiaro/scuro segue il sistema anche su Linux.
  • Le chat esistenti restano leggibili (stesso formato JSON). Se il nome cambia cambia anche la cartella dati: prevedere la migrazione della vecchia cartella.

Riferimenti