repositories / pi-ext
pi-ext
bugabingas pi extensions
owned by admin
scripts/prompt-composition.test.ts
Rawimport { 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();
});
});