Skip to content

feat: 统一 Agent Inbox 自动注册与寻址,打通父子、兄弟通信及 IOA 投递 #126

Description

@M09Ic

问题

每个 Agent(包括父 Agent 和所有模式的 subagent)都应拥有独立 Inbox,并在创建时自动注册。父子之间、兄弟 subagent 之间应通过同一套可寻址的投递机制通信;经 IOA 收到的消息也应送入目标 Inbox,由运行时负责消费和调度。

目前兄弟 subagent 可以通过 IOA 共享空间主动 send/read 完成通信,但还没有形成“发送到目标 Agent → 自动进入目标 Inbox → 消费或唤醒 → 回复”的闭环。

当前实现

  • agent/subagent.go 为 async / fork 子任务创建独立 Inbox,并登记在 SubAgentTool.runningsubagentaction=message 按名字投递到运行中的子任务;结束后移除登记。sync 子任务没有进入这个消息登记表。
  • 父子共享工具实例,兄弟在工具可用时可以通过上述入口互发,但父 Agent 没有进入同一套寻址表,不能形成统一的双向通信入口。
  • 父子共享 IOA Client、Node ID 和当前 Space。pkg/runtime/ioa.go 的自动订阅过滤本节点消息;pushAsync 将外部消息送到主 Session,未按目标 subagent 分发。
  • 子任务通过 subagent_completion 自动通知父 Inbox;IOA delegate / return handoff 是过程记录,不承担目标 Inbox 的投递。
  • harness/subagent_ioa_test.go 已验证真实父 Agent 派发两个真实子 Agent、子 Agent 主动读写 IOA、父 Agent 收到完成通知。该用例没有覆盖兄弟 Inbox 自动接收或空闲唤醒。

预期行为

  1. 统一身份与自动注册:父 Agent 与所有模式的子 Agent 创建时拥有独立 Inbox,并在所属运行时作用域内自动注册;用唯一 Agent / Session ID 寻址,名字只作展示或查找,处理重名与作用域边界。
  2. 统一双向投递:支持父 → 子、子 → 父、兄弟 → 兄弟。保留发送者、接收者、消息 ID 和回复关联;调用方不能冒用其他 Agent 身份。复用现有 Inbox 与 Session 调度能力,收敛现有 message / completion 路径。
  3. 消费与唤醒:运行中在轮次边界消费消息;空闲且仍可接收消息的 Agent 由调度器唤醒。同一个 Agent 不得出现并行模型循环。明确一次任务完成、会话空闲、Agent 关闭的区别,以及子任务何时保留或关闭接收能力。
  4. IOA 接入:明确逻辑 Agent 身份与 IOA Node / 消息目标的映射,将消息投递到正确 Inbox;解决共享 Node ID 导致的自发消息过滤问题,同时避免重复投递和回环。无需预设每个子 Agent 都建立独立网络连接。
  5. 生命周期与结果语义:关闭时注销并清理资源;取消、父会话关闭和投递并发时行为确定。明确区分已入队与已消费,对未知目标、已关闭目标、队列已满给出可观察结果。补充消息顺序和重连重复消息的处理语义。
  6. 可追踪性:通过现有事件和证据关联发送、投递、消费、唤醒及回复,能区分真实消息消费与模型文字声称已收到。

Harness 验收

使用隔离的本地通信环境,保留无 LLM 与真实 LLM 两类验证,并接入 CI:

  • 真实父 Agent 通过 subagent 工具创建 A、B;A 获得本次随机内容,B 的初始任务不包含该内容。
  • A 自主向 B 发送;B 从自己的 Inbox 自动收到并回复;A 消费回复后确认;两个子 Agent 向父 Agent 汇报,父 Agent 消费结果后完成。
  • 分别验证本地投递和 IOA 接入;自动接收用例不能依赖兄弟反复调用 ioa read 或父 Agent 代为转述。
  • 使用实际身份、消息关联和运行时消费事件断言全过程,不能仅检查模型最后说“成功”。
  • 覆盖运行中追加输入、空闲唤醒、双向并发发送、重名/跨作用域隔离、未知或关闭目标、队列满、取消和关闭期间投递,以及 IOA 重连重复消息处理。
  • 真实模型用例设置请求、时间和输出预算;使用仅支持该通信任务的工具范围。保留现有共享空间主动读写测试作为另一种通信方式的验证。

完成标准

父子和兄弟可以通过统一 Inbox 寻址与投递;IOA 消息可自动到达指定子 Agent;任务完成与接收生命周期有明确契约;运行时确保单一执行循环;上述真实场景在 CI 中有可核验的通过证据。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions