From f9659b592843387e49a291f0ecc357324312968a Mon Sep 17 00:00:00 2001 From: root Date: Fri, 10 Jul 2026 13:59:46 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BB=8E=E5=BD=93=E5=89=8D=E4=BC=9A?= =?UTF-8?q?=E8=AF=9D=E6=81=A2=E5=A4=8D=E8=B0=83=E8=AF=95=20trace?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/stores/workbench-isolated-kafka-debug.test.ts | 3 ++- .../src/stores/workbench-isolated-kafka-debug.ts | 9 +++++++-- .../src/views/workbench/CodeWorkbenchView.vue | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/web/hwlab-cloud-web/src/stores/workbench-isolated-kafka-debug.test.ts b/web/hwlab-cloud-web/src/stores/workbench-isolated-kafka-debug.test.ts index efc91299..9236fa79 100644 --- a/web/hwlab-cloud-web/src/stores/workbench-isolated-kafka-debug.test.ts +++ b/web/hwlab-cloud-web/src/stores/workbench-isolated-kafka-debug.test.ts @@ -93,7 +93,8 @@ test("current Workbench debug trace prefers the active agent turn", () => { { id: "msg_old", role: "agent", title: "Code Agent", text: "done", status: "completed", traceId: "trc_old", createdAt: "2026-07-10T10:00:00.000Z" }, { id: "msg_current", role: "agent", title: "Code Agent", text: "", status: "running", traceId: "trc_current", createdAt: "2026-07-10T10:01:00.000Z" } ] as ChatMessage[]; - assert.equal(workbenchCurrentDebugTraceId(messages), "trc_current"); + assert.equal(workbenchCurrentDebugTraceId(messages, "trc_session_fallback"), "trc_current"); + assert.equal(workbenchCurrentDebugTraceId([], "trc_session_fallback"), "trc_session_fallback"); }); function debugEnvelope(offset: string, value: Record) { diff --git a/web/hwlab-cloud-web/src/stores/workbench-isolated-kafka-debug.ts b/web/hwlab-cloud-web/src/stores/workbench-isolated-kafka-debug.ts index 288a8870..1fa059c7 100644 --- a/web/hwlab-cloud-web/src/stores/workbench-isolated-kafka-debug.ts +++ b/web/hwlab-cloud-web/src/stores/workbench-isolated-kafka-debug.ts @@ -61,10 +61,15 @@ export function applyWorkbenchIsolatedKafkaDebugEvent( return withLog({ ...base, message, appliedCount: state.appliedCount + 1, error: null }, event, traceId, reduced.action.type, plan.steps.map((step) => step.type), true, null); } -export function workbenchCurrentDebugTraceId(messages: ChatMessage[]): string | null { +export function workbenchCurrentDebugTraceId(messages: ChatMessage[], sessionLastTraceId?: string | null): string | null { const agentMessages = messages.filter((message) => message.role === "agent"); const running = [...agentMessages].reverse().find((message) => ["pending", "running"].includes(String(message.status ?? "").trim().toLowerCase()) && firstNonEmptyString(message.traceId, message.runnerTrace?.traceId)); - return firstNonEmptyString(running?.traceId, running?.runnerTrace?.traceId, ...[...agentMessages].reverse().flatMap((message) => [message.traceId, message.runnerTrace?.traceId])) ?? null; + return firstNonEmptyString( + running?.traceId, + running?.runnerTrace?.traceId, + ...[...agentMessages].reverse().flatMap((message) => [message.traceId, message.runnerTrace?.traceId]), + sessionLastTraceId + ) ?? null; } function projectDebugMessage(previous: ChatMessage | null, traceId: string, realtimeEvent: WorkbenchRealtimeEvent, event: TraceEvent): ChatMessage { diff --git a/web/hwlab-cloud-web/src/views/workbench/CodeWorkbenchView.vue b/web/hwlab-cloud-web/src/views/workbench/CodeWorkbenchView.vue index 328ccd83..3a6d0e72 100644 --- a/web/hwlab-cloud-web/src/views/workbench/CodeWorkbenchView.vue +++ b/web/hwlab-cloud-web/src/views/workbench/CodeWorkbenchView.vue @@ -31,7 +31,7 @@ const applyingRouteSession = ref(Boolean(rawRouteSessionId.value)); const componentActive = ref(false); const isolatedDebugOpen = ref(false); const isolatedDebugAvailable = computed(() => debugCapabilities.isolatedKafka && auth.isAdmin); -const isolatedDebugTraceId = computed(() => workbenchCurrentDebugTraceId(workbench.activeMessages)); +const isolatedDebugTraceId = computed(() => workbenchCurrentDebugTraceId(workbench.activeMessages, workbench.activeSession?.lastTraceId)); type LaunchContextRecord = { sourceId?: string | null; hwpodId?: string | null;