6ba86f5061
- 新增 agent/direct_tool_calls.rs:把 Codex item 投影成结构化 DirectToolCall(command / file_change / mcp_tool / web_search / context_compaction / other),标题按 kind 固定(`编辑 N 个文件` 按去重路径数) - 新增 agent/direct_tool_calls.rs:独立文件 `.agent/conversations/tool-calls.jsonl` 的幂等 upsert (同 id 只落一行、completed 覆盖 started、startedAt 取最早非零值)与 200 条上限裁剪 - 新增 agent/direct_tool_calls.rs:command/output 截断 4000 字符、summary 截断 120 字符, 先抹绝对路径再抹密钥(复用 redact_absolute_path_tokens / redact_secret_tokens) - 新增 agent/direct_tool_calls.rs:回读按时间正序、单行损坏跳过、文件缺失返回空数组 - 新增 agent/direct_tool_calls.rs 单测 8 条:幂等 upsert、非 0 退出码判 failed、截断、脱敏、 坏行跳过、上限裁剪与排序、file_change 标题与摘要、非工具 item 不产卡片 - agent/codex_app_server.rs:DirectCodexTurnObservation 增加 ToolCall 变体;item/started 与 item/completed 各采一次,turnId 沿用 AGC 客户端回合 id - agent/direct_runtime.rs:观察者采集到工具调用时增量下发,回合结束整批落盘(一次锁、一次重写) - agent/direct_runtime.rs:单项落盘走阻塞线程池,落盘失败不影响回合结果 - agent/runtime_driver/entrypoints.rs:DirectGameCreatorTurnUpdateEmitter::emit 增加可选 toolCalls 参数 - main.rs:GameCreatorDirectTurnUpdateEvent 增加可选 toolCalls 字段,skip_serializing_if 保证 老事件序列化结果不变 - commands.rs / main.rs:新增 read_direct_tool_calls(projectPath) 命令并注册到 invoke_handler