1.9 KiB
1.9 KiB
技术设计:统一 ccweb 消息回传接口
数据流
MCP 工具 Schema
↓ replyMode
内部 dispatcher
↓ one_way / expectReply
sendCrossConversationMessage
├─ one_way → 目标运行,结果留在目标
└─ return_and_continue
↓ pending(requestId + originalRequest)
目标完成 → ready → 来源空闲
↓
写回展示消息 + 带关联信息的隐藏续跑消息
建议模块边界
lib/ccweb-mcp-server.js- 继续作为正式工具定义的单一来源。
- 导出 reply mode 常量;send schema 复用这些常量。
- 不再公开 request-reply definition。
server.js- dynamic tools 从已导入的
CCWEB_MCP_TOOLS按白名单筛选并添加 namespace。 - dispatcher 保留旧别名。
- 发送、pending、目标提示和来源续跑接入 reply mode。
- dynamic tools 从已导入的
兼容边界
- 新 Schema:
replyMode必填。 - 旧
send_message:内部缺省归一为one_way。 - 旧
request_reply:内部固定归一为return_and_continue。 - 旧 MCP/dynamic 客户端:隐藏 allowlist 接受
ccweb_request_reply,但工具列表不公开。 - 旧 pending 数据:
originalRequest缺失时来源提示显示明确占位,不失败。
测试策略
先补失败断言,再实现:
- 共享定义:send schema 必填 replyMode、enum 正确、旧工具不公开。
one_way:目标提示标注不自动回传,不创建 requestId。return_and_continue:创建 requestId,目标提示禁止手工回传,来源收到结果并自动续跑。- 来源续跑:包含 requestId、目标信息、原始请求、完整性判断指令。
- 兼容别名:内部
ccweb_request_reply仍建立回传。 - 隐藏入口:正式 MCP tools/call 与旧 dynamic call 接受旧名,tools/list 不包含旧名。
- 双路径一致:正式 MCP 和 dynamic tools 的 send definition 深度一致(namespace 除外)。