diff --git a/web/hwlab-cloud-web/src/components/conversation/ConversationPanel.test.ts b/web/hwlab-cloud-web/src/components/conversation/ConversationPanel.test.ts index 4500b386..4c701860 100644 --- a/web/hwlab-cloud-web/src/components/conversation/ConversationPanel.test.ts +++ b/web/hwlab-cloud-web/src/components/conversation/ConversationPanel.test.ts @@ -23,6 +23,7 @@ const baseAgentMessage: ChatMessage = { test("conversation panel auto replays compact historical traces", () => { assert.equal(shouldAutoReplayTrace(baseAgentMessage), true); + assert.equal(shouldAutoReplayTrace({ ...baseAgentMessage, runnerTrace: { ...baseAgentMessage.runnerTrace, fullTraceLoaded: true, events: [] } }), true); }); test("conversation panel does not auto replay loaded, empty, or running traces", () => { @@ -30,5 +31,5 @@ test("conversation panel does not auto replay loaded, empty, or running traces", assert.equal(shouldAutoReplayTrace({ ...baseAgentMessage, runnerTrace: { ...baseAgentMessage.runnerTrace, eventCount: 0 } }), false); assert.equal(shouldAutoReplayTrace({ ...baseAgentMessage, status: "running" }), false); assert.equal(shouldAutoReplayTrace({ ...baseAgentMessage, traceReplayStatus: "完整 trace 已回放:49 个原始 event" }), false); - assert.equal(shouldAutoReplayTrace({ ...baseAgentMessage, runnerTrace: { ...baseAgentMessage.runnerTrace, fullTraceLoaded: true } }), false); + assert.equal(shouldAutoReplayTrace({ ...baseAgentMessage, runnerTrace: { ...baseAgentMessage.runnerTrace, fullTraceLoaded: true, events: [{ seq: 1, label: "assistant:message" }] } }), false); }); diff --git a/web/hwlab-cloud-web/src/components/conversation/ConversationPanel.tsx b/web/hwlab-cloud-web/src/components/conversation/ConversationPanel.tsx index d57b5d64..76b6dc6b 100644 --- a/web/hwlab-cloud-web/src/components/conversation/ConversationPanel.tsx +++ b/web/hwlab-cloud-web/src/components/conversation/ConversationPanel.tsx @@ -107,8 +107,8 @@ export function shouldAutoReplayTrace(message: ChatMessage): boolean { if (!traceId) return false; if (message.status === "running" || trace?.status === "running") return false; if (message.traceReplayStatus) return false; - if (trace?.fullTraceLoaded === true) return false; const events = Array.isArray(trace?.events) ? trace.events : []; + if (trace?.fullTraceLoaded === true && events.length > 0) return false; const declaredCount = Number(trace?.eventCount ?? 0); return events.length === 0 && declaredCount > 0; }