出站会话镜像重构(Issue #1520)
状态
进行中。核心 + 插件频道路由已更新用于出站镜像。Gateway send 现在在 sessionKey 省略时派生目标会话。
背景
出站发送之前镜像到_当前_ agent 会话(工具 session key),而非目标频道会话。入站路由使用频道/peer session key,所以出站响应落到了错误的会话中,首次联系的目标经常缺少会话条目。
目标
- 将出站消息镜像到目标频道 session key
- 缺失时在出站时创建会话条目
- 保持线程/话题作用域与入站 session key 对齐
- 覆盖核心频道和捆绑扩展
实现摘要
- 新的出站会话路由辅助:
src/infra/outbound/outbound-session.ts runMessageAction(send)派生目标 sessionKey 并传给executeSendAction做镜像message-tool不再直接镜像;只从当前 session key 解析 agentId- 插件发送路径通过
appendAssistantMessageToSessionTranscript使用派生的 sessionKey 镜像 - Gateway send 在未提供 sessionKey 时派生目标会话 key 并确保会话条目
线程/话题处理
- Slack:replyTo/threadId ->
resolveThreadSessionKeys(后缀) - Discord:threadId/replyTo ->
resolveThreadSessionKeys,useSuffix=false - Telegram:话题 ID 通过
buildTelegramGroupPeerId映射为chatId:topic:<id>
覆盖的扩展
Matrix、MS Teams、Mattermost、BlueBubbles、Nextcloud Talk、Zalo、Zalo Personal、Nostr、Tlon。
决策
- Gateway send 会话派生:提供
sessionKey则使用,省略则派生。 - 会话条目创建:总是使用
recordSessionMetaFromInbound,对齐入站格式。 - Session key 大小写:写入和迁移时规范化为小写。
已添加/更新的测试
src/infra/outbound/outbound.test.tssrc/agents/tools/message-tool.test.tssrc/gateway/server-methods/send.test.ts