fix: 主线 B3/B4 结构化工具调用与完成前验证
- 打通 Worker → WorkerManager → Provider 的 tools 传递链路,ProviderManager/adapter 返回结构化 tool_calls 给 WorkerRuntime - OpenAI-compatible/Anthropic adapter 发送工具 schema,并解析 provider 返回的 tool_calls/tool_use;OpenAI 工具名使用 fs.write ↔ fs__write 双向映射 - 修复独立复审发现的 OpenAI 协议隐患:assistant tool_use blocks 必须转换为 assistant.tool_calls,后续 role=tool 消息的 tool_call_id 必须匹配前一轮 tool_calls[].id;不再把 tool_use JSON 字符串化为普通文本 - ExecutorRole 优先消费原生 tool_calls,回灌 canonical tool_result block;移除 fs.write(...)/shell.run(...) 函数调用正则解析,只保留严格 JSON tool_call fallback 与 filename code block 兼容 - DONE 前执行 verification-before-completion:任务要求 build/compile/run/test/编译/ 运行/测试时必须实际 shell.run 验证,失败不 checkpoint、不返回 completed - fs.write 覆盖已有文件也强制 read-before-write,补齐 Claude Code 文件状态纪律 - 新增 packages/workers/test/executor-role.test.ts 行为测试:原生 tool_calls 执行、 verification 失败不得 completed 真实验收: - TSC=0 - bun test packages/workers/test/executor-role.test.ts: 2 pass / 0 fail - OpenAI converter 探针确认 assistant.tool_calls 与 role=tool 的 tool_call_id 匹配 - 真实 GLM Worker C++ 编译运行任务通过,worker verification 记录实际命令: c++ hello.cpp -o /tmp/aircoding-verify && /tmp/aircoding-verify Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -219,13 +219,15 @@ export class WorkerManager {
|
||||
const response = await this.provider_manager.complete_text(messages, {
|
||||
model: msg.payload.model as string,
|
||||
max_tokens: msg.payload.max_tokens as number,
|
||||
temperature: msg.payload.temperature as number
|
||||
temperature: msg.payload.temperature as number,
|
||||
tools: (msg.payload.tools as unknown[]) || this.tool_registry?.list?.() || []
|
||||
})
|
||||
|
||||
this.send_to_worker(agent_id, 'llm.response', {
|
||||
call_id,
|
||||
content: response.content,
|
||||
usage: response.usage
|
||||
usage: response.usage,
|
||||
tool_calls: response.tool_calls
|
||||
})
|
||||
} catch (e: any) {
|
||||
this.send_to_worker(agent_id, 'llm.response', {
|
||||
|
||||
Reference in New Issue
Block a user