54 lines
2.7 KiB
Markdown
54 lines
2.7 KiB
Markdown
---
|
|
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). |