Files
Genarrative/apps
lhk229 a021f18b98 plan 根工具面按阶段开放,只读调用不再清零空转计数
run 18:Supervisor 冻结目标合同后一次也没委派,改成反复调 agent.run_status 去查
一个根本不存在的委派,24 轮里 58 次 agent.run_status、0 次 agent.delegate,烧到
超时。两道防线各自失效:

  · 空转闸门(AGENT_RUNTIME_PLAN_UPDATE_IDLE_LIMIT=4)只在裸 update_agent_plan 且
    步骤没变化时累加,而任意非空 actions 都清零。于是「裸计划更新被 blocked →
    调一次只读工具 → 计数归零」是一个结构上永远关不上的闸。
  · Runtime 其实有一条精准提示「调用 agent.delegate 派出策划子 Agent」,但它在
    plan.actions.is_empty() 分支里——模型一调 run_status 就有了动作,提示不再出现,
    取而代之的是一份看起来像进展的「已读取 11 个 Agent 状态」。

本地原型没有这个问题,不是因为阈值,是因为它的 Supervisor 只有四个工具且每一个都
推进链路:「调了工具」和「推进了链路」在那边是同一件事,按前者计数就是准的。生产
把两者拆开了却还在按前者计数,工具也是全程可见。

三处改动:

1. 工具面按 durable 阶段开放。合同未冻结 → 只有 agent.goal_contract;合同已冻结
   但本根 run 尚无委派 → 只有 agent.delegate;已有委派 → 取证/返工/审批那几个。
   run 18 卡死的正是第二档,那一档模型连 run_status 都调不出来。阶段只按 durable
   事实判定,不看 Provider 说了什么。

2. 砍掉 user.input_request。这条链路上它是死的:子 Agent 以信封退出后,Runtime 在
   parent-wake 屏障处自己按信封原文构造 pending 且不恢复父 run,Supervisor 永远收不
   到 needs-user-input observation。广告出去只会让它在别的时点调一次,撞上 Runtime
   已装好的那份 pending 而硬失败。playbook 第 4 步与转达提问那条一并改写。

3. 空转判据改成看「本轮有没有能推进 durable 状态的动作」,只读工具不清零。纯只读
   调查不受影响——不发裸计划更新就根本不会累加。这条对做游戏那条链路同样有效。

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