import path from "node:path"; import { afterEach, describe, expect, it, vi } from "vitest"; import { createTestSession, type TestSession } from "../../../test/harness"; describe("continuity pi-test-harness", () => { let t: TestSession | undefined; afterEach(() => { t?.dispose(); t = undefined; }); it("loads through the real Pi extension runtime", async () => { const extensionPath = path.resolve(import.meta.dirname, "../index.ts"); t = await createTestSession({ extensions: [extensionPath] }); expect(t.session.extensionRunner.extensions).toHaveLength(1); expect(t.session.extensionRunner.extensions[0].path).toBe(extensionPath); }); it("dispatches a hidden follow-up through the real Pi binding", async () => { const extensionPath = path.resolve(import.meta.dirname, "../index.ts"); t = await createTestSession({ extensions: [extensionPath] }); const send = vi .spyOn(t.session, "sendCustomMessage") .mockResolvedValue(undefined); await t.session.extensionRunner.emit({ type: "session_compact", compactionEntry: { id: "compact-real" }, fromExtension: false, reason: "manual", willRetry: false, }); await new Promise((resolve) => setTimeout(resolve, 10)); expect(send).toHaveBeenCalledOnce(); expect(send).toHaveBeenCalledWith( expect.objectContaining({ customType: "continuity-resume", display: false, }), { triggerTurn: true, deliverAs: "followUp" }, ); }); });