--- issueRef: "#257" version: 8 updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"} updatedAt: 1787950677814 --- 2026-08-28 Main Contexte initial - Le bouton stop de la custom CLI ne fonctionne pas et doit annuler le travail courant sans fermer la session. - L’annulation doit cascader sur tous les agents délégués par ce travail courant, transitivement. - Les tools/processus/travaux en cours doivent aussi être interrompus. Cadrage UX - `Stop` signifie uniquement `Arrêter la demande en cours`. - La session et le contexte doivent être conservés. - Etat attendu: `Stopping...` pendant la propagation, puis `Stopped`/`Request stopped` quand tout le sous-arbre courant est effectivement annulé. - Ne jamais afficher un état stoppé si un tool ou un sous-agent du même tour tourne encore. Cadrage Architect - Le bug vient du fait que la UI/commande stoppe la session structurée au lieu d’annuler l’exécution courante. - Cible: source de vérité du travail courant = task racine persistée; chaque délégation/tool long du tour courant est chaîné via `parent_task_id`. - Le cancel doit suivre l’arbre de tâches, avec séparation claire entre `annuler le travail` et `fermer la session`. - Port recommandé côté app/infra pour annuler la ressource runtime associée à un task/execution; état `Cancelling` puis terminal cohérent. Etat implémentation observé - Backend modifié dans `crates/application`, `crates/domain`, `crates/infrastructure/session` et `orchestrator/mcp/tools`. - Frontend modifié dans `CustomAgentChatView.tsx` + tests associés. - Backend: sessions structurées conservées, `cancel_current_turn()` introduit, cascade sur dépendances actives + préemption runtime, autorisation requester/sous-arbre sur `idea_stop_agent`, `TurnCancel` pour couper le process du tour courant. - Frontend: bouton `Stop` rebranché sur l’annulation de chat courante, état `Stopping...`, anti double-clic, session réutilisable. Verdict QA final - `cargo test -p application --test workstate_actions stop_structured -- --nocapture` => vert. - `cargo test -p application --test orchestrator_service stop_agent -- --nocapture` => vert. - `cargo test -p infrastructure --test mcp_server stop_agent -- --nocapture` => vert. - `npm --prefix frontend test -- --run src/features/agents/CustomAgentChatView.test.tsx -t "cancels only the current request and keeps the structured session usable|treats NOT_FOUND during request cancel as an already-stopped request"` => vert. - `cargo test -p app-tauri --test dto_agents -- --nocapture` => vert. Risque résiduel - Pas de scénario live end-to-end multi-agents + vrais tools externes exécuté par QA; couverture transitive validée surtout via tests backend ciblés. Prochaine étape - Git décide/pose le commit local du ticket #257.