Luigit
repositories / pi-ext

pi-ext

bugabingas pi extensions

owned by admin

scripts/prompt-composition.test.ts

Raw
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();
	});
});