---
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).