import { existsSync, readdirSync } from "node:fs"; import path from "node:path"; import { afterEach, describe, expect, it } from "vitest"; import { createTestSession, type TestSession } from "../test/harness.ts"; const repositoryRoot = path.resolve(import.meta.dirname, ".."); const extensionRoot = path.join(repositoryRoot, "extensions"); function extensionPaths(): string[] { const names = readdirSync(extensionRoot, { withFileTypes: true }) .filter((entry) => entry.isDirectory()) .map((entry) => entry.name) .filter((name) => existsSync(path.join(extensionRoot, name, "index.ts"))) .sort(); const ordered = [ "pfui", "footer", ...names.filter((name) => name !== "pfui" && name !== "footer"), ]; return ordered.map((name) => path.join(extensionRoot, name, "index.ts")); } describe("repository prompt composition", () => { let session: TestSession | undefined; afterEach(async () => { try { await session?.session.extensionRunner.emit({ type: "session_shutdown", reason: "quit", }); } finally { session?.dispose(); session = undefined; } await new Promise((resolve) => setTimeout(resolve, 75)); }); it("keeps the full extension pack on structured prompt options", async () => { session = await createTestSession({ extensions: extensionPaths() }); const result = await session.session.extensionRunner.emitBeforeAgentStart( "prompt", undefined, { cwd: session.cwd }, ); expect(result.systemPromptOptions.forceSystemPrompt).toBeUndefined(); }); });