feat(tray): gestione progetti del servizio dal tray (74770) #20

Merged
claudia merged 1 commit from feat/tray-gestione-progetti into main 2026-10-06 09:42:06 +00:00
Owner

Ticket ]po[ 74770 — richiesta di Marcello del 06/10/2026.

Cosa fa

Voce Gestisci progetti… nel menu della tray icon: finestra WebView2 per aggiungere, modificare ed eliminare i progetti gestiti dal servizio.

Decisioni concordate con Marcello: il tray scrive direttamente config.json e forza il servizio a rileggerlo; eliminazione inclusa.

Come

  • tray (cmd/tray/projects.go, projects.html): valida (ID univoco, path assoluto ed esistente, almeno un progetto), riscrive solo projects in config.json (chiavi e ordine preservati, backup config.json.bak, scrittura atomica), poi POST /api/reload. Se il worker è fermo il file viene salvato comunque e vale dal prossimo avvio. Senza WebView2 apre config.json nel blocco note.
  • worker: Config.ReloadProjects (mutex sui progetti), config_path pubblicato in status.json, endpoint POST /api/reload (token, solo POST). Segnala restart_required se nel file sono cambiati campi letti solo all'avvio.
  • protocollo: projects.update → projects.updated sulla connessione già aperta. Niente riconnessione: il gateway chiuderebbe le sessioni in corso. Una sessione su un progetto tolto arriva in fondo (path fissato a task.start).
  • runner 0.6.11.

Compatibilità

  • Gateway vecchio + runner nuovo: il frame viene ignorato, i progetti arrivano alla riconnessione successiva → deployare prima il gateway.
  • Tray nuovo + worker vecchio: 404 su /api/reload → la finestra chiede di riavviare il servizio.

Test

  • go vet (linux + windows), go test -race ./... verdi; nuovi test su config (scrittura/reload), status server, agent, editor del tray con worker in-process.
  • gateway: pytest 102 verdi (di cui 2 nuovi e2e: sessione viva durante l'update, frame malformato).
  • ⚠️ GUI non verificabile da Linux: serve smoke test sulla VM (apertura finestra, salvataggio, permessi di scrittura su config.json).
Ticket ]po[ **74770** — richiesta di Marcello del 06/10/2026. ## Cosa fa Voce **Gestisci progetti…** nel menu della tray icon: finestra WebView2 per aggiungere, modificare ed eliminare i progetti gestiti dal servizio. Decisioni concordate con Marcello: il **tray scrive direttamente** `config.json` e **forza il servizio a rileggerlo**; eliminazione inclusa. ## Come - **tray** (`cmd/tray/projects.go`, `projects.html`): valida (ID univoco, path assoluto ed esistente, almeno un progetto), riscrive solo `projects` in `config.json` (chiavi e ordine preservati, backup `config.json.bak`, scrittura atomica), poi `POST /api/reload`. Se il worker è fermo il file viene salvato comunque e vale dal prossimo avvio. Senza WebView2 apre `config.json` nel blocco note. - **worker**: `Config.ReloadProjects` (mutex sui progetti), `config_path` pubblicato in `status.json`, endpoint `POST /api/reload` (token, solo POST). Segnala `restart_required` se nel file sono cambiati campi letti solo all'avvio. - **protocollo**: `projects.update` → `projects.updated` sulla connessione già aperta. Niente riconnessione: il gateway chiuderebbe le sessioni in corso. Una sessione su un progetto tolto arriva in fondo (path fissato a `task.start`). - runner **0.6.11**. ## Compatibilità - Gateway vecchio + runner nuovo: il frame viene ignorato, i progetti arrivano alla riconnessione successiva → **deployare prima il gateway**. - Tray nuovo + worker vecchio: 404 su `/api/reload` → la finestra chiede di riavviare il servizio. ## Test - `go vet` (linux + windows), `go test -race ./...` verdi; nuovi test su config (scrittura/reload), status server, agent, editor del tray con worker in-process. - gateway: `pytest` 102 verdi (di cui 2 nuovi e2e: sessione viva durante l'update, frame malformato). - ⚠️ **GUI non verificabile da Linux**: serve smoke test sulla VM (apertura finestra, salvataggio, permessi di scrittura su `config.json`).
Voce 'Gestisci progetti...' nel menu dell'icona: finestra WebView2 per
aggiungere, modificare ed eliminare i progetti di config.json.

- tray: scrive direttamente config.json (solo la lista projects, ordine e
  altre chiavi preservati, backup .bak, scrittura atomica), valida id univoci
  e cartelle esistenti, poi chiede al worker di rileggere (POST /api/reload)
- worker: reload a caldo dei progetti (Config.ReloadProjects, mutex sui
  progetti), config_path pubblicato in status.json, path del progetto fissato
  a task.start cosi' una sessione su un progetto tolto arriva in fondo
- protocollo: projects.update/projects.updated sulla connessione aperta, niente
  riconnessione (il gateway chiuderebbe le sessioni in corso); bad_frame se
  la lista e' malformata, progetti precedenti invariati
- runner 0.6.11
claudia deleted branch feat/tray-gestione-progetti 2026-10-06 09:42:06 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Soltea-org/soltea-agent-gateway!20
No description provided.