--- id: "611077a6-f703-44b9-935b-64f8301085bb" number: 95 title: "Rendez-vous idea_ask_agent : timeout MCP OpenCode trop court (15s), le demandeur OpenCode ne reçoit jamais la réponse" status: "closed" priority: "high" sprint: null links: [] agentRefs: [] createdBy: {"kind":"agent","agent_id":"a6ced819-b893-4213-b003-9e9dc79b9641"} updatedBy: {"kind":"user"} createdAt: 1784822537740 updatedAt: 1784934174326 version: 6 --- ## Bug Une délégation `idea_ask_agent` depuis un agent sous profil **OpenCode** (le **demandeur**) échoue systématiquement en `timeout` (-32001 « Request timed out »), peu importe la cible (Claude, Codex, ou OpenCode). Les agents cibles terminent bien leurs tâches (visible dans le workstate = done), mais leurs réponses ne sont jamais livrées au demandeur OpenCode. Claude et Codex ne sont **pas** affectés, qu'ils soient demandeur ou cible. ## Cause racine (vérifiée dans les sources) Le `"timeout": 15000` (15 secondes) **hardcoded** dans le bloc `mcp.idea` de l'`opencode.json` généré par IdeA. OpenCode applique ce timeout **par appel `tools/call`** à ses serveurs MCP. `idea_ask_agent` bloque pendant que l'agent cible travaille (potentiellement des minutes) → OpenCode tue la requête à 15s. **Pourquoi Claude/Codex ne sont pas affectés** : leur config MCP (`.mcp.json` / `config.toml`) n'a **pas** de champ `timeout`. Ce champ est spécifique à la config OpenCode (`opencode.json` → `mcp.idea.timeout`). ### Emplacements (4 occurrences de `15000`) 1. `crates/application/src/agent/lifecycle.rs` — `opencode_config_json()` 2. `crates/application/src/agent/lifecycle.rs` — `opencode_provider_config_json()` 3. `crates/infrastructure/src/assistant/mod.rs` — `opencode_config_json()` (duplicate) 4. `crates/infrastructure/src/assistant/mod.rs` — `opencode_provider_config_json()` (duplicate) ## Ce qui n'est PAS la cause - Ce n'est pas un problème de sonde de vivacité du rendez-vous (la description originale pointait la sonde Claude-only côté cible — mauvaise piste). - Ce n'est pas un problème de permissions, de sandbox, ou de taille de payload. - Ce n'est pas lié au modèle : tout profil `structuredAdapter: "openCode"` est touché en tant que demandeur. ## Fix appliqué (feature/ticket95-opencode-mcp-timeout) - Constante `DEFAULT_OPENCODE_MCP_TIMEOUT_MS` = 4h (14_400_000 ms), alignée sur `DEFAULT_RENDEZVOUS_CEILING`. - Fonction `resolve_opencode_mcp_timeout_ms()` — overridable via `IDEA_OPENCODE_MCP_TIMEOUT_MS`, fallback sûr. - Les 4 occurrences remplacées. - **Claude/Codex non touchés**. ## Tests Application : 115 passed. Infrastructure : 313 passed. 0 failed. ## Déploiement Nécessite rebuild AppImage (l'`opencode.json` est régénéré à chaque lancement d'agent).