feat(mcp): 将单次调用审阅绑定到已验证实例

This commit is contained in:
2026-09-09 01:10:55 +08:00
parent 6373829243
commit 96778c02f3
8 changed files with 421 additions and 12 deletions
@@ -507,3 +507,15 @@ Core 的独立数据目录目前不等于已授权 Vault。Python 旧笔记写
- 单元测试覆盖分页、重复、循环、总量/页数限制,必填项/类型/额外参数、结构化结果、无效 base64、所有引用类型、未知方言/不支持正则/任务要求与过深输入。真实 AppContainer 测试新增两页目录、发现前/未知名/无效参数拒绝、错误 structuredContent、调用中及空闲时工具变更;全部经实际原生 Session/Pump 运行。
- 62 项扩展回归通过,5 项 ignored 为三个父测试驱动 Job 辅助入口及两个需显式执行的长时验收,本轮未重跑长时项;上一轮实际 MCP 60 秒验收仍为其当时提交的证据。desktop 全目标 Clippy -D warnings 通过。日志 `.build/extension-mcp-catalog-tests.log``.build/extension-mcp-catalog-clippy.log`。协议依据 [MCP tools](https://modelcontextprotocol.io/specification/2025-11-25/server/tools)。
- 工具发现和校验不等于用户批准执行。生产入口仍需完成实际安装实例注册、来源/活动版本/在线信任与工具目录摘要绑定、用户调用授权及 Core 路由;还需完成全部沙箱资源/并发攻击验证和其他生产化验收,第三方执行能力保持禁用。
## 增量:实例身份与一次性工具调用预览凭据
- Context.prepare 在现有许可、入口和上下文验证完成后生成独立实例 UUID,以及覆盖完整 Claims 的执行摘要;用于摘要的临时序列化字节由 Zeroizing 清理。公开身份预览只包含执行类型、来源/命名空间/包/版本、Vault、权限集和摘要,不包含环境秘密或原始启动参数。
- PreparedLaunch → LeasedSuspended → Running 持续携带该身份,带租约恢复方法收为 crate 内部。Session.new 要求运行实例具有这条准备链产生的身份,普通低层 resume 的受控测试进程不能直接进入该 MCP 会话入口。
- 新增内存 Gate,生成包含真实工具描述、冻结参数、实例身份和工具契约摘要的 Review;最多 64 条待确认预览、合计 2 MiB 待确认参数,120 秒单调时钟有效期。确认会消费预览 ID,不能重复确认;过期和目录失效清理待确认项,已确认对象也绑定原到期时间。
- 正式 Session.call_tool 现在只接受 ApprovedCall。该类型字段私有、不可 Clone、不可序列化/反序列化,工具名及参数不能在确认后另行替换;调用消费该对象并核对实例、目录代次和当前契约摘要,再进入参数/结果校验、运行租约及期限链路。按名称/参数直接调用的方法收为私有,只有 cfg(test) 辅助方法能模拟本测试用户确认。
- 目录刷新开始、已观察到工具变更及会话失败均作废旧预览和目录代次;即使工具名字和 schema 恢复成原值,旧已确认对象也不能重新使用。此处是 Host 观察和持有的目录版本绑定,不是对服务端执行语义永不变化或核验到发送间“零竞态”的证明。
- 单元测试覆盖预览对象被改写后实际参数仍冻结、重复确认、跨实例、目录代次、确认前/后过期、条数/字节上限及清理后复用。真实 AppContainer 测试核对预览来源/包/Vault,修改展示副本不会改变实际请求,旧目录凭据被拒绝;新增确认后锁定保险库导致 CREDENTIALS_LOCKED,重新解锁也不能恢复已失效会话。
- 64 项扩展回归通过,5 项 ignored 为三个父测试驱动 Job 辅助入口及两个显式长时验收,本轮未重跑长时项。desktop 全目标 Clippy -D warnings 通过。日志 `.build/extension-call-binding-tests.log``.build/extension-call-binding-clippy.log`
- 当前 confirm_call 仍只是 Host 内部组件接口,未登记为 renderer/Core 命令,也没有自动批准策略或真实用户确认 UI。完整产品入口必须通过经过认证的 Host 路由确认用户批准,再与活动安装/在线信任、实例注册和 Core 路由组合;全部沙箱资源与其他生产化验收仍未完成,第三方执行能力保持禁用。