[bug] ToolArgsError 不带工具名,code 模式下 run_code/bash 同名 description 死循环 — 附可 cherry-pick 修复 #581
Replies: 4 comments
|
我是外面看这条的开发者,看了
两点想确认:
|
|
谢谢,两点都对。
|
|
Verified that |
|
run_code 和 bash 都把 description 标成 required,校验失败走同一句 invalid arguments: missing required property "description"。Code Mode 里模型把内层 bash.description 当成已经传过,外层只剩 {"code":"..."},两边报错字节级相同。给 ToolArgsError 加上 for ${toolName},并在 code-mode.spec.ts 做对照断言,这是最小消歧义。description 还要不要 required,不该绑在这条里。 代价:构造函数从 (violations) 改成 (toolName, violations),对仓库外直接 new ToolArgsError 的代码是源码破坏。rc 阶段可接受,发版 changelog 写一行即可。若想更软,第二个参数可选、旧签名保留一段时间也行,但没必要为 rc 做。 |
Uh oh!
There was an error while loading. Please reload this page.
摘要 / Summary
run_code和bash都把 UI 摘要字段叫description且标成 required。校验失败时两边都报同一句invalid arguments: missing required property "description"。Code Mode 下模型常把内层bash.description当成已经传过,外层 JSON 只剩{"code":"..."},然后按「harness 丢了字段」死循环重试。Same class as #558. Minimal fix: put the tool name in
ToolArgsError.复现 / Repro
codepreset 下让模型跑需要bash的诊断。失败调用几乎都是:{"code":"const out = await tools.bash({\n command: \"...\",\n description: \"Check port listeners\"\n});\nreturn out.stdout.text;"}外层没有
description。报错:Error: invalid arguments: missing required property "description"。内层缺字段时文案完全一样。根因 / Root cause
ToolArgsError只拼 violations,不带工具名。defineTool的run_code与bash校验失败走同一句话。模型无法区分「外层缺字段」和「内层缺字段」,reminder 回显规范化后的{"code":"..."},于是换 command 重试,成功率极低。修复 / Fix (cherry-pick ready)
b5de96e5de—fix(tools): name the tool in ToolArgsError messages消息改为
invalid arguments for <tool>: …。外层缺字段报run_code,内层报bash。structured_output同步带上工具名。未改
description是否 required(那是更大的产品决策)。本补丁只消歧义,打破错误归因。验收 / Acceptance
pnpm exec vitest run packages/core/tools/tests/tools.spec.ts packages/subagent/subagent-in-process-driver/tests通过。缺run_code.description与缺bash.description的报错不再相同。All reactions