Files
Genarrative/apps
lhk229 2e6c0e7ac2 立项策划根 run 的工具面收窄成 7 个原生工具的 exact allowlist
plan 根 Supervisor 此前拿到的是未按身份收窄的全量注册表:43 个原生工具外加
项目 MCP 目录。其中约 36 个在这条链路上根本执行不了——写入、补丁、删除、
命令、预览、画布、任务图、记忆、黑板、agent.spawn_isolated、
agent.route_manifest、agent.schedule_ready 都会被执行层拒绝。

广告一个执行不了的工具不是中性的。M1A-4 已经实测到同类后果:上下文里残留的
专业角色目录让 Supervisor 照着发起 agent.delegate,被拒后再没能自行改回
project-planning,整个 run 空转到预算耗尽。工具面同理——本链路的策划内容全部
由 project-planning 子 Agent 生产,Supervisor 手里多一个写文件或跑命令的入口,
就多一条它自己下场干活的诱导路径。

allowlist 定为 user.input_request、file.read、agent.delegate、
agent.goal_contract、agent.acceptance_update、agent.action_history、
agent.run_status,加上两个协议控制函数。后三个原生工具只为 §13.0 的审批前置
取证门存在(分页读 game/fast_gdd.md 并列出全部分页 actionId);file.list 一并
砍掉,取证路径是固定的,不需要列目录。

实现沿用 restrict_plan_root_goal_contract_schema 已有的后置收窄形状,而不是给
build_agent_runtime_native_function_tools_for_agent 加参数:两处调用点本来就在
`if plan_root` 里,改动面更小,也不会波及其它 lane 的目录构建。

收窄写成交集而非断言。协议修复路径会先整份重建目录再按场景收窄,其中
restrict_agent_runtime_supervisor_collaboration_repair_tools 硬要求目录里存在
agent.spawn_isolated;plan 根这一遍必须排在所有分支收窄之后取交集,早于分支
会让那条检查失败,晚于分支才能保证任何修复轮都不把被裁掉的 36 个工具重新广告
回去。

回归断言写成精确集合而不是「不包含某几个」,将来往注册表加工具不会静默漏进
plan 根;同时断言 MCP 前缀工具不残留、收窄确实裁掉了东西(否则测试是空跑)。
已变异验证。

本次只改广告目录。提示词头部仍按全量注册表拼工具清单,二者的一致性由紧随其后
的 prompt 提交收口——单独看这一笔存在「合同说有、请求里没有」的过渡态。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 04:49:48 +00:00
..
2026-07-17 16:56:46 +08:00