Files

1.9 KiB
Raw Permalink Blame History

技术设计:统一 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。

兼容边界

  • 新 SchemareplyMode 必填。
  • 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 除外)。