



























@@ -53,6 +53,29 @@ vi.mock("../chat/build-chat-items.ts", () => ({
5353stream: string | null;
5454streamStartedAt: number | null;
5555}) => {
56+if (
57+props.messages.some(
58+(message) =>
59+typeof message === "object" &&
60+message !== null &&
61+(message as { __testDivider?: unknown }).__testDivider === true,
62+)
63+) {
64+return [
65+{
66+kind: "divider",
67+key: "divider:compaction:test",
68+label: "Compacted history",
69+description:
70+"Earlier turns are preserved in a compaction checkpoint. Open session checkpoints to branch or restore that pre-compaction view.",
71+action: {
72+kind: "session-checkpoints",
73+label: "Open checkpoints",
74+},
75+timestamp: 1,
76+},
77+];
78+}
5679if (props.messages.length > 0) {
5780return [
5881{
@@ -372,6 +395,7 @@ function renderChatView(overrides: Partial<Parameters<typeof renderChat>[0]> = {
372395onDismissSideResult: () => undefined,
373396onNewSession: () => undefined,
374397onClearHistory: () => undefined,
398+onOpenSessionCheckpoints: () => undefined,
375399agentsList: null,
376400currentAgentId: "main",
377401onAgentChange: () => undefined,
@@ -389,6 +413,25 @@ function renderChatView(overrides: Partial<Parameters<typeof renderChat>[0]> = {
389413return container;
390414}
391415416+describe("chat compaction divider", () => {
417+it("renders checkpoint recovery copy and action", () => {
418+const onOpenSessionCheckpoints = vi.fn();
419+const container = renderChatView({
420+messages: [{ __testDivider: true }],
421+ onOpenSessionCheckpoints,
422+});
423+424+expect(container.textContent).toContain("Compacted history");
425+expect(container.textContent).toContain("Earlier turns are preserved");
426+const button = container.querySelector<HTMLButtonElement>(".chat-divider__action");
427+expect(button?.textContent).toContain("Open checkpoints");
428+429+button?.click();
430+431+expect(onOpenSessionCheckpoints).toHaveBeenCalledTimes(1);
432+});
433+});
434+392435afterEach(() => {
393436loadSessionsMock.mockClear();
394437refreshVisibleToolsEffectiveForCurrentSessionMock.mockClear();
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。