repositories / pi-ext
pi-ext
bugabingas pi extensions
owned by admin
scripts/patch_pi_test_harness.mjs
Rawimport { 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);
}