Skip to content

feat(acp): 支持父子会话多轮沟通与消息队列 - #1123

Open
leehom0123 wants to merge 5 commits into
spacering-net:mainfrom
leehom0123:feat/acp-subsession-messaging
Open

leehom0123 wants to merge 5 commits into
spacering-net:mainfrom
leehom0123:feat/acp-subsession-messaging

Conversation

@leehom0123

Copy link
Copy Markdown
Contributor

动机

父会话委派任务后,经常需要继续补充要求、调整执行方向,或者根据子会话的结果安排下一轮工作。这些沟通应当发生在原子会话中,保留已有上下文,让父会话能够与多个子会话长期协作。

多轮沟通还需要区分处理时机:有些要求需要立即生效,有些可以等当前任务完成后再处理;尚未执行的要求,也可能需要修改或取消。因此,本次在现有委派机制上增加后续消息和队列管理。

功能变化

  • 新增 send_to_subsession,父会话通过 child_conversation_id 向原子会话发送后续消息。默认排队,当前轮结束后按顺序执行。
  • 支持立即发送。代理支持原生 steering 时直接投递;不支持时,取消当前轮,等待请求和生命周期处理结束,再向原会话发送新消息。
  • 新增 manage_subsession_messages,支持查询消息状态和结果,以及修改、取消尚未执行的队列消息。
  • 消息、执行顺序和结果写入 SQLite,刷新页面后保留。系统校验父子会话归属,并通过数据库条件更新处理消息认领、编辑和取消之间的竞争。

实现与使用范围

本次沿用现有 ACP 会话、MCP 委派、共享业务逻辑和事件广播机制。后续消息必须续接原代理会话;续接失败时返回错误,不另建会话。

父代理通过 MCP 工具管理后续消息,本次不增加专用队列界面。首次委派结果仍由 get_delegation_status 查询,后续消息及结果由 manage_subsession_messages 查询。子会话完成后,父代理在当前执行流程中主动读取结果,不会自动唤醒空闲父会话。

验证结果

  • 真实模型 Web 验证:父代理实际调用委派、后续发送和结果查询工具。子会话第二轮正确回复先前记住的口令,确认原会话续接和上下文保留。
  • Web 页面交互验证:子会话展开与打开、队列编辑与取消、立即发送、刷新后历史记录保留均通过。
  • 协议联测:HTTP、WebSocket、MCP 和 ACP 联测的 47 项断言通过。
  • 自动测试:Server 全量测试 6079 项通过、0 失败、4 项忽略;前端工具测试 11 项通过。
  • 代码检查:前端构建、ESLint,以及 Server、MCP 的 Clippy 检查通过。

@leehom0123

Copy link
Copy Markdown
Contributor Author

@xintaofei 佬请审查

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant