49 lines
1.9 KiB
Markdown
49 lines
1.9 KiB
Markdown
# 技术设计:统一 ccweb 消息回传接口
|
||
|
||
## 数据流
|
||
|
||
```text
|
||
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。
|
||
|
||
## 兼容边界
|
||
|
||
- 新 Schema:`replyMode` 必填。
|
||
- 旧 `send_message`:内部缺省归一为 `one_way`。
|
||
- 旧 `request_reply`:内部固定归一为 `return_and_continue`。
|
||
- 旧 MCP/dynamic 客户端:隐藏 allowlist 接受 `ccweb_request_reply`,但工具列表不公开。
|
||
- 旧 pending 数据:`originalRequest` 缺失时来源提示显示明确占位,不失败。
|
||
|
||
## 测试策略
|
||
|
||
先补失败断言,再实现:
|
||
|
||
1. 共享定义:send schema 必填 replyMode、enum 正确、旧工具不公开。
|
||
2. `one_way`:目标提示标注不自动回传,不创建 requestId。
|
||
3. `return_and_continue`:创建 requestId,目标提示禁止手工回传,来源收到结果并自动续跑。
|
||
4. 来源续跑:包含 requestId、目标信息、原始请求、完整性判断指令。
|
||
5. 兼容别名:内部 `ccweb_request_reply` 仍建立回传。
|
||
6. 隐藏入口:正式 MCP tools/call 与旧 dynamic call 接受旧名,tools/list 不包含旧名。
|
||
7. 双路径一致:正式 MCP 和 dynamic tools 的 send definition 深度一致(namespace 除外)。
|