本页内容
本页内容
工具
代码模式维护者注释
实现布局
- 配置契约:
tools.codeMode - 目录构建器:有效工具,用于压缩条目和 id 映射
- 模型表面适配器:用control/direct工具替换可见工具
- 执行合约:评估、继续、处置
- Node 执行器:工作线程和 VM 上下文在等待期间保留
- QuickJS 执行者:WASM 加载、评估、快照、恢复、处置
- 工作线程监管器:超时、终止、崩溃隔离
- bridge 适配器:JSON-safe 主机回调和结果传递
- 延续所有者:TTL、容量、run/session 范围、执行器固定
- 嵌套工具调用的轨迹投影
- 遥测计数器和诊断
共享目录和工具桥保留策略所有权。执行器拥有 JavaScript 执行和延续状态。 Node的node:vm是可信执行,不是沙箱安全边界。
重建 before_tool_call 挂钩必须按其原始顺序保留周围的执行包装器。调用者权限、取消、活动和运行生命周期检查包含准备和结果最终确定以及工具主体。执行包装器在复制工具元数据时注册其重建功能;仅模式副本保留该注册。
工具搜索将每个已发布的目录条目数组视为不可变的描述符快照。注册、限制和执行器重新绑定替换该数组;通过目录所有者发布架构或描述更改。每个快照都会延迟渲染搜索文本一次,而热搜索会重用内容寻址的词汇索引。每次搜索都会检查可见性,包括可变权限集,并且 BM25 统计数据仅使用该有效库存。缓存的词汇数据不包含工具执行器。
验证清单
代码模式覆盖应证明:
- 没有启用覆盖的禁用配置使现有工具暴露保持不变
- omited
enabled,包括设置其他字段的对象配置,保持禁用状态,除非代理或模型覆盖启用它 - per-model
true、false和未设置值保留激活优先级、后备模型选择和封闭选项的限制 - 启用的配置在运行期间工具处于激活状态时,会向模型暴露
exec、wait,以及仅必需的 direct-only 工具 - omited执行者选择Node;显式 QuickJS 选择捆绑的插件,并且不可用的执行器会失败而不会回退
- 显式旧版
runtime: "quickjs-wasi"迁移到executor: "quickjs" - 全局和每个代理执行器选择在每个
wait中保持固定 - 原始无工具运行、
disableTools和空允许列表不会触发代码模式载荷强制 - 每个符合目录资格的有效非 MCP 名称都有一名可调用的获胜者
- direct-only 工具保持模型可见,并且不会出现在
catalog中 - denied 工具没有全局或目录句柄
- 裸全局变量、可调用
catalog.search结果、catalog.all以及处理 OpenClaw 和客户端工具的describe()工作,而无需暴露确切的 ID API.list("mcp")和API.read("mcp/<server>.d.ts")公开 TypeScript-style MCP 声明,无需 bridge/tool 调用- MCP 命名空间
$api()作为架构的内联回退仍然可用 - MCP 命名空间调用适用于具有一个对象输入的可见 MCP 工具,而搜索句柄使用相同的命名空间调度程序,并且
catalog.all()保持本机 - Tool Search 控制工具对模型表面和隐藏目录都不可见
- 嵌套调用会保留审批和钩子行为
- 捕获和未捕获的嵌套故障仍然可以恢复,而不会重播之前执行的副作用
- 网络控制的故障保留不受信任的内容包装和清理
- shell
exec对模型隐藏,但在允许时可作为来宾全局调用 - 递归的代码模式
exec和wait不能从 guest 代码中调用 - 可执行单元接受普通 JavaScript,而类型化发现仍然可用
- TypeScript-only 语法和已停用的
language/typecheck参数在任何嵌套工具分派之前失败 - 预期的访客 API 省略了
import、require、文件系统、网络和环境访问; QuickJS 隔离与 Node 的编程约束分开进行测试 - 无限循环会超时,且不能阻塞 Gateway
- 执行器内存故障终止执行
- 输出上限适用于两个执行器;序列化快照上限适用于 QuickJS
wait恢复执行器继续并返回最终值- 过期、已中止、错误会话和未知的
runId值会失败 - 转录回放和持久化会保留代码模式控制调用
- 转录和遥测会清晰显示嵌套工具调用
E2E 测试计划
更改运行时时对两个执行器运行这些:
- 启动一个
tools.codeMode.enabled: false的 Gateway。 - 使用一个小型直接工具集发送一次 agent turn。
- 断言模型可见的工具未发生变化。
- 以
tools.codeMode.enabled: true重启。 - 使用 OpenClaw、plugin、MCP 和 client 测试工具发送一次 agent turn。
- 断言模型可见的工具列表为
exec、wait,外加仅配置的 direct-only 工具。 - 在
exec中,调用安全裸全局变量并断言规范化名称、保留名称和冲突名称与快速索引匹配。 - 搜索
catalog,检查句柄metadata/describe(),并调用OpenClaw/plugin/client句柄而不观察确切的id。 - 在
exec中,调用API.list("mcp")和API.read("mcp/<server>.d.ts"), 并断言声明文件描述了可见的 MCP 工具。 - 在
exec中,在本机和MCP工具中按任务意图搜索,检查MCP句柄的声明,并调用它。验证规范化名称冲突、精确的命名空间查找、有界远程元数据和不受信任的输出包装器。直接MCP.<server>.<tool>({ ...input })调用必须同意,并且catalog.all()搜索后必须保持本机。 - 断言被拒绝的工具不存在,并且无法通过猜测 id 来调用。
- 启动一个嵌套工具调用,该调用在
exec返回waiting后才解析完成。 - 调用
wait并断言持续上下文接收工具结果。 - 断言最终答案包含恢复后生成的输出,无需重播。
- Assert 超时、中止和继续到期清理运行时状态。
- 导出轨迹,并断言嵌套调用在父级代码模式调用下可见。
仅限文档的对此页面的更改仍应运行 pnpm check:docs。
本页有帮助吗?