--- issueRef: "#95" version: 6 updatedBy: {"kind":"user"} updatedAt: 1784934174326 --- ## Cause racine RÉELLE (2026-07-24, après investigation code) ### Ce qui se passe 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 avec l'erreur `-32001: Request timed out`. **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. ### Emplacements du hardcoded 15000 (4 occurrences) 1. `application/src/agent/lifecycle.rs:2728` — `opencode_config_json()` 2. `application/src/agent/lifecycle.rs:2811` — `opencode_provider_config_json()` 3. `infrastructure/src/assistant/mod.rs:410` — `opencode_config_json()` (duplicate) 4. `infrastructure/src/assistant/mod.rs:495` — `opencode_provider_config_json()` (duplicate) ### Fix appliqué (feature/ticket95-opencode-mcp-timeout) - Constante `DEFAULT_OPENCODE_MCP_TIMEOUT_MS` = 4h (14_400_000 ms), alignée sur `DEFAULT_RENDEZVOUS_CEILING` — le client MCP ne expire jamais avant le watchdog serveur. - Fonction `resolve_opencode_mcp_timeout_ms()` — overridable via `IDEA_OPENCODE_MCP_TIMEOUT_MS`, fallback sûr sur 0/parse-error. - Les 4 occurrences remplacées par `resolve_opencode_mcp_timeout_ms()`. - Exporté depuis `application::agent` pour réutilisation par `infrastructure`. - **Claude/Codex non touchés** : aucune modification de leur config MCP. ### Tests - Application : 115 passed, 0 failed - Infrastructure : 313 passed, 0 failed - Compilation : OK, aucun nouveau warning ### Note déploiement Le `opencode.json` est régénéré à chaque lancement d'agent par le code lifecycle. Nécessite rebuild AppImage pour que le binaire qui tourne génère la nouvelle config.