Files
IdeA/.ideai/memory/inter-agent-live-context-shared-per-agent.md
Blomios ebd992e41a docs(memory): notes projet tâches de fond, tickets V1 et checkpoints ticket #1
Capitalise la mémoire projet accumulée pendant les chantiers B7/B8
(tâches de fond first-class), le système de tickets V1 et le ticket #1 :
design, cadrages d'archi, checkpoints d'avancement et verdicts QA/frontend.
Mise à jour de l'index MEMORY.md.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 00:21:43 +02:00

4.3 KiB

name, description, metadata
name description metadata
inter-agent-live-context-shared-per-agent memory note inter-agent-live-context-shared-per-agent
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/<targetAgentId>/{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_conversationresolve_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.