feat(sandbox): 使用逐调用截止时间驱动原生 MCP 会话
This commit is contained in:
@@ -482,3 +482,16 @@ Core 的独立数据目录目前不等于已授权 Vault。Python 旧笔记写
|
||||
- 真实 AppContainer 笔记 RPC 测试已改走 Pump;正常请求、返回正文、关闭输入、最后响应和 EOF 均通过。新增真实双进程探针验证不读取输入以及 stdout / stderr 洪泛:本轮静默双进程 shutdown 至清空约 18.01 ms,两项洪泛检测后的 shutdown 至清空分别约 2.55 / 2.59 ms。后两项是检测之后的清理时间,不冒充从开始洪泛至检测的总耗时。
|
||||
- 59 项扩展回归通过,4 项 ignored 为三个父测试驱动 Job 辅助入口与显式 60 秒验收,本轮未重跑该长时项。desktop 全目标 Clippy -D warnings 通过。日志 `.build/extension-io-tests.log`、`.build/extension-io-regression.log`、`.build/extension-io-clippy.log`。API 依据 [Microsoft CancelSynchronousIo](https://learn.microsoft.com/en-us/windows/win32/api/ioapiset/nf-ioapiset-cancelsynchronousio)。
|
||||
- 尚未开放第三方执行:安装实例注册、JSON-RPC/MCP 工具派发、许可/在线信任原子复核、全部 Host 创建路径的继承审计、完整句柄安全写入、scratch/CPU 验收及远端部署问题继续推进。本轮证据不能单独证明 C-02 / C-04 或完整生产化达标。
|
||||
|
||||
|
||||
## 增量:原生 MCP 会话、协议生命周期与真实调用期限
|
||||
|
||||
- 新增 extension_mcp::Session,持有已授权 Running 的借用与专用 Pump,在后台串行执行 initialize → notifications/initialized → tools/list / tools/call。协议主版本及兼容集合与现有开发 Python bridge 一致(2025-11-25、2025-06-18、2025-03-26、2024-11-05),不会自动把未知新版本当作兼容版本。
|
||||
- 每个请求使用本会话不复用的字符串 ID;严格解码 JSON-RPC 2.0 顶层字段,拒绝重复字段、null ID、结果/错误混合、无效方法/参数与错误响应 ID。仅回应服务端 ping;未声明 sampling、roots、elicitation 等能力,对其他请求返回方法不支持,不提供额外 Host 权限。工具变更通知记录为待失效标记,进度等通知不会延长最大请求期限。
|
||||
- 初始化校验协议、serverInfo 和 capabilities;未完成初始化不可列举或调用工具。列表单页上限 500 项、游标上限 1024 字节;工具结果验证基础结构且上限 256 KiB。完整工具目录分页聚合、名称/输入输出 schema、权限与用户调用确认仍待上层接入,当前返回值不直接开放给 Core/renderer。
|
||||
- 派发前启动既有原生 ToolDeadline,调用全过程复核进程租约和期限,收到数据后也再次复核。初始化/列举等待上限 10 秒,工具调用最多 60 秒;取消后标记会话失败、终止 Job,并对非 initialize 请求尽力发送取消通知。有效远端 JSON-RPC 错误以稳定代码返回,不转发原始错误/数据,也不会误当作通信损坏杀死可继续使用的服务。
|
||||
- 修复串行协议紧邻发送 initialized 通知和下一请求时可能短暂碰到单槽输入队列的问题:增加最多 50 ms 的有界入队重试,复用原帧所有权,不扩展队列或复制大帧。原非阻塞 Pump.send 继续立即返回背压。shutdown 先关闭输入并给服务 200 ms 退出机会,再执行既有 Job 与 IO 清理。
|
||||
- 真实 AppContainer 探针覆盖初始化、工具列表、正常工具调用、服务端 ping、工具变更通知、错误协议版本、错误 ID、远端错误后再次调用成功和挂起调用取消;失败会话不能继续派发。回归中发现旧 IO 测试仅观察系统 IO 标志不足以确认首帧已出队,增加仅测试使用的写入阶段观察条件,继续保留实际 IO 等待、对端不关闭和全部线程回收要求;修正后常规扩展回归 60 项通过。
|
||||
- 协议依据 [MCP lifecycle](https://modelcontextprotocol.io/specification/2025-11-25/basic/lifecycle)、[MCP tools](https://modelcontextprotocol.io/specification/2025-11-25/server/tools)、[MCP cancellation](https://modelcontextprotocol.io/specification/2025-11-25/basic/utilities/cancellation)。此组件不是完整安装实例运行时,安装身份/在线信任/工具 schema 与授权路由、原生实例注册,以及全部沙箱资源策略仍须完成,第三方执行能力保持禁用。
|
||||
- 新增长时原生验收已显式执行:实际 tools/call 挂起 60.0015261 秒后得到 EXTENSION_TOOL_DEADLINE_EXCEEDED,服务及后代最终清空;Host 此后保存笔记并重新打开 Workspace 校验正文成功。该验收完整夹具总耗时 75.64 秒,包含握手/其他原生场景。日志 `.build/extension-mcp-sixty-seconds.log`。
|
||||
- 常规扩展回归为 60 passed / 5 ignored,其中三个 Job 辅助入口由父测试驱动,新 MCP 长时项已另行显式通过,旧底层 60 秒项本轮未重跑。desktop 全目标 Clippy -D warnings 通过。日志 `.build/extension-mcp-tests.log`、`.build/extension-mcp-clippy.log`。这些是工具期限及协议链路证据,仍不代替 C-04 中内存/scratch/CPU/进程及完整 Host 验收。
|
||||
|
||||
Reference in New Issue
Block a user