feat(chat): livre la CLI custom de chat agent (#147) et corrige Cancel
Implémente la vue chat structurée par cellule agent (toggle TUI/CLI custom, préférence persistée `preferred_view`, reattach live, composer + pièces jointes) avec le socle backend AgentSession/ChatBridge (UserPrompt, cancel_current_turn, routage interrupt_agent, commande cancel_agent_chat). Corrige le bug bloquant relevé par QA : le bouton Cancel de CustomAgentChatView interrompait tout le tour via closeAgentChat au lieu de n'annuler que le tour courant via cancelAgentChat, ce qui tuait la session contrairement au contrat produit validé. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -1,8 +1,8 @@
|
||||
---
|
||||
issueRef: "#147"
|
||||
version: 6
|
||||
version: 7
|
||||
updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"}
|
||||
updatedAt: 1785880207496
|
||||
updatedAt: 1785882543204
|
||||
---
|
||||
## Cadrage consolidé
|
||||
|
||||
@ -43,3 +43,52 @@ Ce ticket ne doit pas être traité comme un simple ticket UI : il implique un v
|
||||
- Comportement exact du staging temporaire des fichiers joints : durée de vie, nettoyage, taille max, comportement si le fichier source change.
|
||||
- UX précise du warning de bascule de mode et du redémarrage de session.
|
||||
- Stratégie de dégradation contrôlée selon la richesse réellement exposée par chaque agent headless.
|
||||
|
||||
## Exécution du cycle au 4 août 2026
|
||||
|
||||
### Architect
|
||||
- Architect a revu le code réel et a conclu qu'il existe déjà un socle backend de chat structuré (`AgentSession`, `ChatBridge`, `ReplyChunk`, `reattach_agent_chat`) ; le ticket est donc une réintégration de la vue chat avec quelques compléments ciblés, pas une reconstruction complète.
|
||||
- Contrats proposés : `preferred_view` persistant par cellule, `cancel_current_turn()` côté `AgentSession`, `ReplyChunk::UserPrompt`, toggle par cellule agent, vue live seulement, pas de transcript persistant secondaire.
|
||||
|
||||
### Git
|
||||
- Branche de travail locale décidée par Git : `feature/ticket147-custom-chat-cli`.
|
||||
- Base choisie : `develop`.
|
||||
- Commit de bookkeeping déjà posé par Git : `efbd56a1 chore(tickets): sync carnets/issues #102/#141-#147 + agent glmopencode`.
|
||||
|
||||
### DevBackend — état réel livré
|
||||
- Livré :
|
||||
- `LeafCell.preferred_view` avec migration douce (`Tui` par défaut).
|
||||
- mutation layout pour persister cette préférence.
|
||||
- `ReplyChunk::UserPrompt` + ajout du prompt user dans le scrollback live.
|
||||
- `AgentSession::cancel_current_turn()` avec défaut no-op.
|
||||
- implémentation concrète best-effort du cancel pour `OpenCodeSession`.
|
||||
- routage `interrupt_agent` selon `preferred_view`.
|
||||
- commande Tauri `cancel_agent_chat(session_id)`.
|
||||
- Limites explicitement laissées :
|
||||
- pas de staging backend structuré des pièces jointes ; le frontend injecte actuellement le chemin dans le prompt.
|
||||
- cancel concret non généralisé à tous les adapters.
|
||||
- pas de nouvelle persistance de transcript hors session vivante.
|
||||
- Tests annoncés verts par DevBackend : `cargo test -p domain`, tests `application` ciblés layout, tests `infrastructure opencode`, tests `app-tauri` ciblés `dto_chat` / `chat_bridge`, `cargo fmt`.
|
||||
|
||||
### DevFrontend — état réel livré
|
||||
- Livré :
|
||||
- toggle `TUI native` / `CLI custom` par cellule agent seulement, selon compatibilité structured/headless.
|
||||
- modale de confirmation de switch avec arrêt + relance et wording dynamique.
|
||||
- vue `CustomAgentChatView` live en bulles user/agent, rendu défensif, mise en avant du `Final` via `Task Complete`.
|
||||
- composer texte + pièce jointe via `pickFile()` + bouton `Cancel`.
|
||||
- reattach live de session structurée si elle est encore vivante.
|
||||
- câblage TS des méthodes `launchAgentChat`, `reattachAgentChat`, `sendAgentChat`, `closeAgentChat` côté ports/adapters/mock.
|
||||
- Limites explicitement laissées :
|
||||
- pas de payload structuré pour les attachments ; chemin injecté dans le prompt.
|
||||
- rendu limité aux chunks réellement exposés (`textDelta`, `toolActivity`, `final`, `error`, `userPrompt`).
|
||||
|
||||
### QA — verdict actuel
|
||||
- Verdict QA au 4 août 2026 : **ROUGE** pour le MVP réellement livré.
|
||||
- Finding bloquant principal : dans `CustomAgentChatView`, le bouton `Cancel` ferme la session structurée via `closeAgentChat` au lieu d'interrompre seulement le tour courant. Cela viole explicitement le contrat produit validé avec l'utilisateur.
|
||||
- Finding secondaire : absence de test de non-régression couvrant ce comportement `Cancel`.
|
||||
- Côté frontend, `npx vitest run` a été exécuté par QA et est vert (`115` fichiers / `1083` tests).
|
||||
- Côté Rust, QA n'a pas obtenu de preuve globale exploitable dans le sandbox à cause de contraintes d'environnement (`Read-only file system`, verrous `cargo`, saturation temporaire `/tmp`).
|
||||
|
||||
### État d'avancement
|
||||
- Le cycle a été lancé et exécuté jusqu'à QA.
|
||||
- Le ticket n'est pas encore validé parce qu'il reste un correctif frontend ciblé à livrer sur `Cancel`, suivi d'une revalidation QA.
|
||||
|
||||
Reference in New Issue
Block a user