mirror of
https://github.com/badlogic/pi-mono.git
synced 2026-05-23 12:56:55 +00:00
58 lines
1.9 KiB
TypeScript
58 lines
1.9 KiB
TypeScript
import { describe, expect, test, vi } from "vitest";
|
|
import { InteractiveMode } from "../src/modes/interactive/interactive-mode.js";
|
|
|
|
describe("InteractiveMode compaction events", () => {
|
|
test("rebuilds chat and appends a synthetic compaction summary at the bottom", async () => {
|
|
const fakeThis = {
|
|
isInitialized: true,
|
|
footer: { invalidate: vi.fn() },
|
|
autoCompactionEscapeHandler: undefined as (() => void) | undefined,
|
|
autoCompactionLoader: undefined,
|
|
defaultEditor: {},
|
|
statusContainer: { clear: vi.fn() },
|
|
chatContainer: { clear: vi.fn() },
|
|
rebuildChatFromMessages: vi.fn(),
|
|
addMessageToChat: vi.fn(),
|
|
showError: vi.fn(),
|
|
showStatus: vi.fn(),
|
|
flushCompactionQueue: vi.fn().mockResolvedValue(undefined),
|
|
settingsManager: { getShowTerminalProgress: () => false },
|
|
ui: { requestRender: vi.fn(), terminal: { setProgress: vi.fn() } },
|
|
};
|
|
|
|
const handleEvent = Reflect.get(InteractiveMode.prototype, "handleEvent") as (
|
|
this: typeof fakeThis,
|
|
event: {
|
|
type: "compaction_end";
|
|
reason: "manual" | "threshold" | "overflow";
|
|
result: { tokensBefore: number; summary: string } | undefined;
|
|
aborted: boolean;
|
|
willRetry: boolean;
|
|
errorMessage?: string;
|
|
},
|
|
) => Promise<void>;
|
|
|
|
await handleEvent.call(fakeThis, {
|
|
type: "compaction_end",
|
|
reason: "manual",
|
|
result: {
|
|
tokensBefore: 123,
|
|
summary: "summary",
|
|
},
|
|
aborted: false,
|
|
willRetry: false,
|
|
});
|
|
|
|
expect(fakeThis.chatContainer.clear).toHaveBeenCalledTimes(1);
|
|
expect(fakeThis.rebuildChatFromMessages).toHaveBeenCalledTimes(1);
|
|
expect(fakeThis.addMessageToChat).toHaveBeenCalledTimes(1);
|
|
expect(fakeThis.addMessageToChat).toHaveBeenCalledWith(
|
|
expect.objectContaining({
|
|
role: "compactionSummary",
|
|
tokensBefore: 123,
|
|
summary: "summary",
|
|
}),
|
|
);
|
|
expect(fakeThis.flushCompactionQueue).toHaveBeenCalledWith({ willRetry: false });
|
|
});
|
|
});
|