From d7122a13d3e5cac53214ddbb0084ed6da31101b2 Mon Sep 17 00:00:00 2001 From: Wayne Heng Date: Mon, 18 May 2026 17:55:28 +0800 Subject: [PATCH] fix(webui): accept end/error phases in tool trace rendering Tool call events only displayed at phase=start, but progress_hook sends end/error phases after agent execution. Accept all three phases with call_id deduplication to prevent duplicate rendering. Co-authored-by: Sisyphus --- webui/src/lib/tool-traces.ts | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/webui/src/lib/tool-traces.ts b/webui/src/lib/tool-traces.ts index 0cd966763..a3949caae 100644 --- a/webui/src/lib/tool-traces.ts +++ b/webui/src/lib/tool-traces.ts @@ -39,12 +39,24 @@ export function formatToolCallTrace(call: unknown): string | null { return `${name}()`; } +const VALID_PHASES = new Set(["start", "end", "error"]); + export function toolTraceLinesFromEvents(events: unknown): string[] { if (!Array.isArray(events)) return []; + const seen = new Set(); return events .filter((event) => { if (!event || typeof event !== "object") return false; - return (event as { phase?: unknown }).phase === "start"; + const phase = (event as { phase?: unknown }).phase; + if (!(phase && typeof phase === "string" && VALID_PHASES.has(phase))) { + return false; + } + const callId = (event as { call_id?: unknown }).call_id; + if (callId && typeof callId === "string") { + if (seen.has(callId)) return false; + seen.add(callId); + } + return true; }) .map(formatToolCallTrace) .filter((trace): trace is string => !!trace);