diff --git a/web/hwlab-cloud-web/src/components/agent/TraceTimeline.test.ts b/web/hwlab-cloud-web/src/components/agent/TraceTimeline.test.ts index 271341b0..41c80bc3 100644 --- a/web/hwlab-cloud-web/src/components/agent/TraceTimeline.test.ts +++ b/web/hwlab-cloud-web/src/components/agent/TraceTimeline.test.ts @@ -1,3 +1,4 @@ +// SPEC: PJ2026-0106050514 Workbench实时运行面 draft-2026-06-30-p0-1297-spec-first; PJ2026-010401080313 Workbench实时权威 draft-2026-07-14-p0-pure-kafka-authority. // @vitest-environment jsdom import { beforeEach, describe, expect, it } from "vitest"; @@ -270,6 +271,42 @@ describe("TraceTimeline sequence authority", () => { expect(completedSummary.text()).not.toMatch(/\b(?:ok|fail|run|running)\b|total=|duration=|exit=|工具调用成功/u); wrapper.unmount(); }); + + it("bounds renderer input and DOM rows for a long Kafka Trace", async () => { + const events = Array.from({ length: 1_000 }, (_, index) => ({ + sourceEventId: `evt_long_${index + 1}`, + runId: "run_long_trace", + sourceSeq: index + 1, + source: "agentrun.kafka", + type: "assistant", + label: "agentrun:assistant:message", + message: `long trace event ${index + 1}` + })); + const wrapper = mount(TraceTimeline, { + props: { + autoExpanded: true, + trace: { + traceId: "trc_long_timeline", + eventSource: "hwlab-kafka-sse", + status: "running", + eventCount: events.length, + events + } + } + }); + await nextTick(); + + const disclosure = wrapper.get(".trace-disclosure"); + expect(disclosure.attributes("data-event-count")).toBe("1000"); + expect(disclosure.attributes("data-render-input-count")).toBe("240"); + expect(disclosure.attributes("data-row-windowed")).toBe("true"); + const rows = wrapper.findAll('[data-testid="trace-render-row"]'); + expect(rows).toHaveLength(120); + expect(Number(rows[0]?.attributes("data-event-seq"))).toBeGreaterThanOrEqual(881); + expect(rows.at(-1)?.attributes("data-event-seq")).toBe("1000"); + expect(wrapper.text()).toContain("共 1000 events"); + wrapper.unmount(); + }); }); function liveTrace(status: "running" | "completed") { diff --git a/web/hwlab-cloud-web/src/components/agent/TraceTimeline.vue b/web/hwlab-cloud-web/src/components/agent/TraceTimeline.vue index 69b09840..8873aafc 100644 --- a/web/hwlab-cloud-web/src/components/agent/TraceTimeline.vue +++ b/web/hwlab-cloud-web/src/components/agent/TraceTimeline.vue @@ -1,3 +1,4 @@ +