diff --git a/tools/src/hwlab-cli/trace-renderer.ts b/tools/src/hwlab-cli/trace-renderer.ts index 4c09fc8e..01d30c90 100644 --- a/tools/src/hwlab-cli/trace-renderer.ts +++ b/tools/src/hwlab-cli/trace-renderer.ts @@ -357,7 +357,9 @@ function isSetupTraceEvent(event: TraceEvent): boolean { const label = String(event.label ?? ""); return /^session:|^stdio:|^prompt:|^thread:|^turn:started|^turn:start|turn\/start|codex turn|tool:codex-app-server/iu.test(label) || /^agentrun:backend:(codex-app-server-starting|initialize:completed|thread\/start|thread\/resume|thread\/started|turn\/start|turn\/started)/iu.test(label) || - /^agentrun:(run|command|runner-job):(reuse-skipped|created)$/iu.test(label) || + /^agentrun:run:(reuse-skipped|reused)$/iu.test(label) || + /^agentrun:command:created$/iu.test(label) || + /^agentrun:runner-job:(created|ensured|reused)$/iu.test(label) || /^agentrun:session-storage-recover-warning$/iu.test(label); } diff --git a/web/hwlab-cloud-web/scripts/workbench-r1-parity.test.ts b/web/hwlab-cloud-web/scripts/workbench-r1-parity.test.ts index f6e89b36..9fc836b6 100644 --- a/web/hwlab-cloud-web/scripts/workbench-r1-parity.test.ts +++ b/web/hwlab-cloud-web/scripts/workbench-r1-parity.test.ts @@ -73,6 +73,17 @@ test("R1 shared trace renderer starts at the first user-meaningful event", () => assert.doesNotMatch(rows[0]?.header ?? "", /runner-job|resource-bundle/u); }); +test("R1 shared trace renderer suppresses AgentRun reuse diagnostics", () => { + const rows = traceDisplayRows({ traceId: "trc_reuse", status: "running" }, [ + { label: "agentrun:run:reused", status: "reused", message: "run reused" }, + { label: "agentrun:runner-job:ensured", status: "runner-job-ensured", message: "runner ensured" }, + { label: "agentrun:assistant:message", type: "assistant", message: "OK", source: "agentrun", sourceSeq: 3 } + ]); + assert.equal(rows.length, 1); + assert.equal(rows[0]?.body, "OK"); + assert.doesNotMatch(rows[0]?.header ?? "", /reused|ensured|runner-job/u); +}); + test("R1 trace API snapshots stay authoritative over compact result traces", () => { const previous = { traceId: "trc_merge", diff --git a/web/hwlab-cloud-web/src/components/agent/TraceTimeline.vue b/web/hwlab-cloud-web/src/components/agent/TraceTimeline.vue index b8d0cfb4..7c0901b6 100644 --- a/web/hwlab-cloud-web/src/components/agent/TraceTimeline.vue +++ b/web/hwlab-cloud-web/src/components/agent/TraceTimeline.vue @@ -69,6 +69,15 @@ function rowKey(row: TraceEventRow, index: number): string { return `${row.rowId}-${row.seq ?? "no-seq"}-${index}`; } +function onDisclosureToggle(event: Event): void { + const target = event.currentTarget; + if (target instanceof HTMLDetailsElement) expanded.value = target.open; +} + +function rowIsTool(row: TraceEventRow): boolean { + return row.rowId.startsWith("tool:") || /commandExecution/u.test(row.header); +} + function traceRecord(trace: RunnerTrace | null | undefined): Record { return trace && typeof trace === "object" ? trace as Record : {}; } @@ -81,44 +90,61 @@ function recordValue(value: unknown): Record | null { diff --git a/web/hwlab-cloud-web/src/components/workbench/ConversationPanel.vue b/web/hwlab-cloud-web/src/components/workbench/ConversationPanel.vue index a1422504..1ec4bf79 100644 --- a/web/hwlab-cloud-web/src/components/workbench/ConversationPanel.vue +++ b/web/hwlab-cloud-web/src/components/workbench/ConversationPanel.vue @@ -1,5 +1,5 @@