fix(tier2): C1 trace 抓对工具名字段(tool_call_name/tool_call_id/state)

008 真跑实证:C1 trace 工作(119 行/28 工具调用捕获),但 TOOL_CALL 事件没记到工具名——
_compact_sse_event 误取 tool_name/name/id,而 2.0.2 真实字段是 tool_call_name(START 带)+
tool_call_id + state(TOOL_RESULT_END 的结果态)。修正取这三个真字段:trace 现在能看清
「agent 调了 scaffold_init→write_source→build→run_gates… 哪一步、成没成」——这才是"看见卡在哪"。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
zizi 2026-06-24 12:54:11 +00:00
parent 21472811be
commit 3156a2a9db

View File

@ -238,8 +238,10 @@ def _compact_sse_event(event: dict) -> dict:
"""把一个 SSE 事件压成 trace 行的精简形(只留有意义字段,长文本截断;绝不抛)。"""
etype = event.get("type")
out: dict = {"type": etype, "reply_id": event.get("reply_id")}
# 工具调用:记工具名(看 agent 调了哪些工具、按什么顺序——卡在哪一目了然)。
for k in ("tool_name", "name", "id"):
# 工具调用:记工具名 + call-id + 结果态(看 agent 调了哪些工具、按什么顺序、成没成——卡在哪一目了然)。
# 2.0.2 真实字段名(源码核实 event/_event.py):TOOL_CALL_START 带 tool_call_name + tool_call_id;
# TOOL_CALL_END / TOOL_RESULT_END 带 tool_call_id(+ state=结果态)。此前误取 tool_name/name/id → 抓不到名。
for k in ("tool_call_name", "tool_call_id", "tool_name", "name", "state"):
if event.get(k):
out[k] = event.get(k)
# 截断可能的长文本字段(text/delta/output/content 的字符串形),只留前 200 字。