mirror of
https://github.com/badlogic/pi-mono.git
synced 2026-05-23 21:25:27 +00:00
67 lines
1.8 KiB
TypeScript
67 lines
1.8 KiB
TypeScript
/**
|
|
* Session runtime
|
|
*
|
|
* Use AgentSessionRuntime when you need to replace the active AgentSession,
|
|
* for example for new-session, resume, fork, or import flows.
|
|
*
|
|
* The important pattern is: after the runtime replaces the active session,
|
|
* rebind any session-local subscriptions and extension bindings to `runtime.session`.
|
|
*/
|
|
|
|
import {
|
|
type CreateAgentSessionRuntimeFactory,
|
|
createAgentSessionFromServices,
|
|
createAgentSessionRuntime,
|
|
createAgentSessionServices,
|
|
getAgentDir,
|
|
SessionManager,
|
|
} from "@earendil-works/pi-coding-agent";
|
|
|
|
const createRuntime: CreateAgentSessionRuntimeFactory = async ({ cwd, sessionManager, sessionStartEvent }) => {
|
|
const services = await createAgentSessionServices({ cwd });
|
|
return {
|
|
...(await createAgentSessionFromServices({
|
|
services,
|
|
sessionManager,
|
|
sessionStartEvent,
|
|
})),
|
|
services,
|
|
diagnostics: services.diagnostics,
|
|
};
|
|
};
|
|
const runtime = await createAgentSessionRuntime(createRuntime, {
|
|
cwd: process.cwd(),
|
|
agentDir: getAgentDir(),
|
|
sessionManager: SessionManager.create(process.cwd()),
|
|
});
|
|
|
|
let unsubscribe: (() => void) | undefined;
|
|
|
|
async function bindSession() {
|
|
unsubscribe?.();
|
|
const session = runtime.session;
|
|
await session.bindExtensions({});
|
|
unsubscribe = session.subscribe((event) => {
|
|
if (event.type === "queue_update") {
|
|
console.log("Queued:", event.steering.length + event.followUp.length);
|
|
}
|
|
});
|
|
return session;
|
|
}
|
|
|
|
let session = await bindSession();
|
|
const originalSessionFile = session.sessionFile;
|
|
console.log("Initial session:", originalSessionFile);
|
|
|
|
await runtime.newSession();
|
|
session = await bindSession();
|
|
console.log("After newSession():", session.sessionFile);
|
|
|
|
if (originalSessionFile) {
|
|
await runtime.switchSession(originalSessionFile);
|
|
session = await bindSession();
|
|
console.log("After switchSession():", session.sessionFile);
|
|
}
|
|
|
|
unsubscribe?.();
|
|
await runtime.dispose();
|