Luigit
repositories / pi-ext

pi-ext

bugabingas pi extensions

owned by admin

scripts/patch_pi_test_harness.mjs

Raw
import { readFileSync, writeFileSync } from "node:fs";

const files = [
	"node_modules/@marcfargas/pi-test-harness/dist/session.js",
	"node_modules/@marcfargas/pi-test-harness/src/session.ts",
];

for (const file of files) {
	let text = readFileSync(file, "utf8");
	text = text.replace(
		'import { getModel } from "@earendil-works/pi-ai";',
		'import { getModel } from "@earendil-works/pi-ai/compat";',
	);
	text = text.replace(
		/import \{ createAgentSession, DefaultResourceLoader, SessionManager, SettingsManager,? \} from "@earendil-works\/pi-coding-agent";/,
		'import { createAgentSession, DefaultResourceLoader, ModelRuntime, SessionManager, SettingsManager } from "@earendil-works/pi-coding-agent";',
	);
	text = text.replace(
		/import \{\n\s*createAgentSession,\n\s*DefaultResourceLoader,\n\s*SessionManager,\n\s*SettingsManager,\n\s*type AgentSessionEvent,\n\} from "@earendil-works\/pi-coding-agent";/,
		'import {\n\tcreateAgentSession,\n\tDefaultResourceLoader,\n\tModelRuntime,\n\tSessionManager,\n\tSettingsManager,\n\ttype AgentSessionEvent,\n} from "@earendil-works/pi-coding-agent";',
	);
	text = text.replace(
		"\t// Create real session with in-memory persistence\n\tconst { session, extensionsResult } = await createAgentSession({",
		'\tconst modelRuntime = await ModelRuntime.create({ refreshOnCreate: false });\n\tawait modelRuntime.setRuntimeApiKey("openai", "test-key");\n\n\t// Create real session with in-memory persistence\n\tconst { session, extensionsResult } = await createAgentSession({',
	);
	text = text.replace(
		"    // Create real session with in-memory persistence\n    const { session, extensionsResult } = await createAgentSession({",
		'    const modelRuntime = await ModelRuntime.create({ refreshOnCreate: false });\n    await modelRuntime.setRuntimeApiKey("openai", "test-key");\n\n    // Create real session with in-memory persistence\n    const { session, extensionsResult } = await createAgentSession({',
	);
	text = text.replace(
		"\t\tmodel: playbookModel,\n\t\tsessionManager: SessionManager.inMemory(),",
		"\t\tmodel: playbookModel,\n\t\tmodelRuntime,\n\t\tsessionManager: SessionManager.inMemory(),",
	);
	text = text.replace(
		"        model: playbookModel,\n        sessionManager: SessionManager.inMemory(),",
		"        model: playbookModel,\n        modelRuntime,\n        sessionManager: SessionManager.inMemory(),",
	);
	text = text.replace(
		'\t// Override getApiKey to bypass real auth checks (on both agent and session)\n\t(session.agent as any).getApiKey = async () => "test-key";',
		'\tObject.defineProperty(session.agent, "streamFn", {\n\t\tconfigurable: true,\n\t\tget() { return (this as any).streamFunction; },\n\t\tset(value) { (this as any).streamFunction = value; },\n\t});\n\n\t// Override getApiKey to bypass real auth checks (on both agent and session)\n\t(session.agent as any).getApiKey = async () => "test-key";',
	);
	text = text.replace(
		'    // Override getApiKey to bypass real auth checks (on both agent and session)\n    session.agent.getApiKey = async () => "test-key";',
		'    Object.defineProperty(session.agent, "streamFn", {\n        configurable: true,\n        get() { return this.streamFunction; },\n        set(value) { this.streamFunction = value; },\n    });\n\n    // Override getApiKey to bypass real auth checks (on both agent and session)\n    session.agent.getApiKey = async () => "test-key";',
	);
	if (!text.includes("@earendil-works/pi-ai/compat")) {
		throw new Error(`${file}: expected compat getModel import`);
	}
	if (!text.includes("ModelRuntime")) {
		throw new Error(`${file}: expected ModelRuntime patch`);
	}
	if (!text.includes("streamFunction")) {
		throw new Error(`${file}: expected streamFn alias patch`);
	}
	writeFileSync(file, text);
}