6.7 KiB
6.7 KiB
issueRef, version, updatedBy, updatedAt
| issueRef | version | updatedBy | updatedAt | ||||
|---|---|---|---|---|---|---|---|
| #288 | 5 |
|
1788897533882 |
#288 — Tool MCP de redemarrage autonome d'un agent
Demande utilisateur
Ajouter un tool MCP permettant a un agent de demander son propre redemarrage apres ajout de capabilities/plugins, pour continuer le travail avec les nouveaux outils disponibles.
Cadrage UX
- CLI custom: afficher exactement
------- redemarrage de l'agent -------au call, puis------- redemarrage de l'agent termine -------apres injection reussie; en echec------- redemarrage de l'agent echoue -------+ message court. - TUI native: ne pas injecter ces separateurs; afficher un overlay avec phases
Redemarrage de l'agent...,Arret de l'agent en cours...,Relance de l'agent...,Reprise du travail...; garder les progress/messages dans l'overlay jusqu'a idle/fin de travail. - Le prompt/instruction de reprise interne est invisible dans l'UI humaine et le viewer transcript.
Cadrage Architecture
- Tool core
idea_restart_self({ reason?: string })self-only via requester MCP handshake, sans target fourni par le modele. - Retour MCP immediat:
{ restartId, status: "scheduled", message }; la relance est prouvee par events/UI car le process appelant est stoppe ensuite. - Use case atomique: snapshot reprise -> stop runtime -> relance via LaunchAgent avec
fresh_start=falseet memeconversation_id-> injection interne invisible -> events completed/failed. - Events:
AgentRestartRequested,AgentRestartPhaseChanged,AgentRestartCompleted,AgentRestartFailed. - Invariant: liberer Busy/mailbox meme si la connexion MCP disparait quand l'agent est tue.
- Memoire durable ajoutee:
ticket288-agent-self-restart-architecture.
DevBackend — livre
- Tool MCP
idea_restart_self({ reason? })implemente. - Identite issue du requester MCP; requester absent/malformed/non live refuse; restart concurrent refuse.
- Retour immediat
scheduledpuis orchestration detachee avec delai de flush avant arret du bridge. - Snapshot node/conversation/dimensions/mode structure; stop PTY/structured; nettoyage mailbox/Busy; relance via LaunchAgent avec meme conversation_id et fresh_start=false; injection interne invisible.
- Events frontend exposes sur
domain://event:agentRestartRequested,agentRestartPhaseChanged,agentRestartCompleted,agentRestartFailed; phasesstopping,releasingInput,launching,resuming. - Fichiers touches annonces:
crates/domain/src/{events,orchestrator}.rs,crates/application/src/{lib,orchestrator/mod,orchestrator/service}.rs,crates/infrastructure/src/orchestrator/mcp/tools.rs,crates/infrastructure/tests/mcp_server.rs,crates/backend/src/{lib,events}.rs,crates/app-tauri/src/commands.rs,crates/web-server/src/lib.rs. - Validations DevBackend: domaine orchestrateur 45/45, mapping MCP 27/27, serveur MCP 41/41, orchestrateur applicatif 81/81, backend 87 passants + 7 socket ignores, app-tauri 82 passants + 1 socket ignore,
cargo check --workspace,cargo fmt --check,git diff --checkverts. - Reserve: web-server 103/110 en serie; 7 echecs preexistants/fixture PTY
errorau lieu determinal.attached, hors #288 selon DevBackend; un lancement parallele a aussi toucheEMFILE.
Etat
Backend et frontend livres. En attente validation QA.
DevFrontend — livre
- Ajout des quatre events de restart au
DomainEventfrontend et de la phase typee. - Projection ephemere partagee dans le provider projet, conservee a travers le demontage/remontage de la cellule pendant la relance.
- CLI custom: separateurs UX exacts requested/completed/failed, message d'echec court, deduplication par
(restartId, event type)et verrouillage du composer durant le cycle. - TUI native: overlay prioritaire sans injection de separateur dans xterm, libelles de phase exacts et annonces/progress conserves jusqu'au signal idle. L'ordre
busy:falsepuiscompleteddu runtime structure est traite sans overlay bloque. - Aucun ajout au transcript: les marqueurs restent un etat de presentation frontend; le prompt interne de reprise n'est pas consomme ni projete par le frontend.
- Tests: provider/overlay (phases, reprise, idle, echec), CLI custom (separateurs, deduplication, echec), integration LayoutGrid (priorite du voile et absence de separateur TUI).
- Validations:
npm run test -- --run src/features/announcements/AnnouncementsProvider.test.tsx src/features/agents/CustomAgentChatView.test.tsx src/features/layout/LayoutGrid.cellControlsLayering.test.tsx-> 92/92;npm run build-> OK;git diff --check-> OK. - Reserve validation globale:
npm testtermine avec 34 echecs hors fichiers #288 (notamment suites web en timeout et tests agents lies au gateway pluginlistProjectSettingsdu chantier deja present); les 3 suites ciblees #288 restent vertes.
QA — validation independante
Verdict: VERT pour #288 sur feature/288-agent-self-restart-mcp, avec reserves hors perimetre confirmees.
Commandes executees depuis /home/anthony/Documents/Projects/IdeA:
git status --short --branch-> branchefeature/288-agent-self-restart-mcp, changements non committes dans le perimetre #288 + metadata ticket.cargo test -p infrastructure --test mcp_server restart_self-> 1/1 passant.cargo test -p infrastructure restart_self-> 3 tests restart-self passants: mapping/catalogue self-only, requester absent/malforme rejete, payload scheduled via handshake.cargo test -p backend self_restart_contract_tests-> 1/1 passant; relance conserveconversation_idetfresh_start=false.cargo test -p backend agent_restart_events_expose_stable_camel_case_contract-> 1/1 passant; events/phases wireagentRestartPhaseChanged,agentRestartFailed,releasingInput,launching.npm run test -- --run src/features/announcements/AnnouncementsProvider.test.tsx src/features/agents/CustomAgentChatView.test.tsx src/features/layout/LayoutGrid.cellControlsLayering.test.tsxdepuisfrontend-> 3 fichiers / 92 tests passants.npm run builddepuisfrontend-> OK.cargo check --workspace-> OK.cargo fmt --check-> OK.git diff --check-> OK.
Reserves verifiees:
cargo test -p web-serveren parallele a echoue avec EMFILE (Too many open files) sur 38 tests; ce run n'est pas probant pour #288.cargo test -p web-server -- --test-threads=1reproduit la reserve stable: 103/110, 7 echecs WebSocket/PTYleft: "error" right: "terminal.attached"; aucun test restart/self-restart dans la liste.npm testdepuisfrontendreproduit 34 echecs globaux hors fichiers #288:agents.test.tsx(listProjectSettingsabsent dans le mock),ProjectsView.ls7.test.tsx,WebAgentCell.test.tsx,WebApp.test.tsx,WebDesktopWorkspace.test.tsx,WebMenus.test.tsx,WebTicketsSprints.test.tsx. Les suites #288 ciblees restent vertes.