--- name: inter-agent-live-context-shared-per-agent description: memory note inter-agent-live-context-shared-per-agent metadata: type: project --- # Contexte live inter-agent : PAR AGENT (partagé), pas par paire — DÉCISION FIGÉE **Type :** decision d'architecture / produit — validée utilisateur le 2026-07-02. ## Décision Le contexte live d'un agent IdeA est porté **par l'agent cible**, partagé entre TOUS les demandeurs. Pour un `AgentId` donné, IdeA maintient **au plus une** session headless/structurée vivante ; tous les `idea_ask_agent(requester, target)` vers le même `target` réutilisent cette session, quel que soit le demandeur. Ce partage est **intentionnel et souhaité**, pas un bug ni une fuite : tous les agents du projet sont dans le même domaine de confiance (même utilisateur, même projet). Le contexte live d'un agent = mémoire de travail d'équipe / tableau blanc partagé. On NE veut PAS d'isolation par paire. La paire `(requester, target)` n'est **pas** une frontière d'isolation du contexte moteur : elle sert uniquement à l'attribution, la corrélation requête/réponse, les vues UI et les filtres de transcript. ## Preuve empirique (2026-07-02) Main a confié à QA le token `IDEA-TOKEN-7F3A-BLEEDCHECK` ; Architect a ensuite pu le récupérer auprès de QA **sans que Main le lui transmette**. Cause : `ensure_structured_session` (`crates/application/src/orchestrator/service.rs:1948`) fait un early-return sur `session_for_agent(&agent_id)` → une seule session vivante par agent, réutilisée. ## Modèle de transcript cible (cadré par Architect) **Log canonique PAR AGENT + vues par paire dérivées.** Abandon du transcript canonique par paire comme source de vérité (il promet une isolation qui n'existe pas en live). - Arbo cible : `.ideai/conversations/agents//{log.jsonl, handoff.md, providers.json, log.N.jsonl}` - Chaque tour porte l'attribution : `thread_id=Agent(target)`, `requester`, `target`, `correlation_id`, `role`, `source`. - Vues = projections filtrées (`ForAgent`, `ForPair`, `ForCorrelation`), pas des logs séparés. Impacts à traiter : - `resolve_conversation` → `resolve_agent_thread(target)` + `resolve_conversation_view(requester,target)`. - `bind_conversation_session` → bind sur `targetAgentId` ; réutiliser la session existante. - `ConversationRegistry` → index primaire `targetAgentId`, secondaires `requester`/`correlation_id` ; interdire 2 fils live pour le même target. - `ProviderSessionStore` clé `(agent_thread_id, provider_id)` au lieu de `(pair_id, provider_id)`. - `LeafCell.conversation_id` = désormais **id de fil agent**, plus « id de paire ». - Viewer LS7 : défaut = fil agent complet ; vue par paire = vue filtrée/partielle libellée comme telle. ## Garde-fou efficience (rotation multi-demandeurs) Le design LS5/LS6 tient, mais un fil agent partagé **croît plus vite** (agrège les demandes de plusieurs requesters). Ajustements : la rotation s'applique au fil agent canonique (pas aux vues) ; le résumé/handoff doit conserver l'attribution minimale (`Objectif courant`, `Demandes actives par requester`, `Décisions récentes`, `Blocages`, `Dernière réponse corrélée`) ; transcript brut jamais réinjecté (humain-only) ; handoff borné à `HANDOFF_SUMMARY_MAX_CHARS=4096`. Risque principal : dilution si demandeurs poussent des objectifs contradictoires → mitigé par les rubriques stables du handoff. ## Découpage dev recommandé (Architect) 1. `ARCHITECTURE.md` §19.7 : remplacer « id de paire » par « fil agent partagé » (+ §16/§17/§21). 2. Introduire `ConversationThreadId` / `ConversationViewId`. 3. Adapter `resolve_conversation`, `bind_conversation_session`, `ConversationRegistry`. 4. Compatibiliser les anciens chemins `for_pair(requester,target)` comme vues historiques. 5. LS7 viewer : fil agent complet + filtres. 6. Test QA : un fait confié à QA par Main est visible quand Architect interroge QA. ## État Décision figée. Cadrage architectural livré par Architect. Reste à : intégrer la proposition dans `ARCHITECTURE.md`, puis planifier le dev (cycle normal Architect→Git→Dev→QA). Liens : [[conversation-rotation-safety-design]], [[handoff-ls5-summary-bound-and-llm-seam]], [[conversation-log-ls6-rotation-and-paginated-read]], [[conversation-viewer-ls7-frontend]], [[headless-interagent-conversation-objective]].