refactor(coding-agent): replace AgentSessionRuntimeHost with closure-based AgentSessionRuntime
- Replace AgentSessionRuntimeHost and bootstrap abstractions with AgentSessionRuntime - Runtime creation is now closure-based via CreateAgentSessionRuntimeFactory - Factory closes over process-global fixed inputs, recreates cwd-bound services per effective cwd - Session config (model, thinking, tools, scoped models) re-resolved per target cwd - CLI resource paths resolved once at startup as absolute paths - Swap lifecycle: teardown old, create next, apply next (hard fail on creation error) - Unified diagnostics model (info/warning/error) for args, services, session resolution, resources - No logging or process exits inside creation/parsing logic - Removed session_directory support - Removed session_switch and session_fork extension events (use session_start with reason) - Moved package/config CLI to package-manager-cli.ts - Fixed theme init for --resume session picker - Fixed flaky reftable footer test (content-based polling) - Fixed silent drop of unknown single-dash CLI flags - Added error diagnostics for missing explicit CLI resource paths - Updated SDK docs, examples, plans, exports, tests, changelog fixes #2753
This commit is contained in:
@@ -1,27 +1,45 @@
|
||||
/**
|
||||
* Session Runtime Host
|
||||
* Session runtime
|
||||
*
|
||||
* Use the runtime host when you need to replace the active AgentSession,
|
||||
* 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 host replaces the runtime, rebind any
|
||||
* session-local subscriptions and extension bindings to `runtimeHost.session`.
|
||||
* The important pattern is: after the runtime replaces the active session,
|
||||
* rebind any session-local subscriptions and extension bindings to `runtime.session`.
|
||||
*/
|
||||
|
||||
import { AgentSessionRuntimeHost, createAgentSessionRuntime, SessionManager } from "@mariozechner/pi-coding-agent";
|
||||
import {
|
||||
type CreateAgentSessionRuntimeFactory,
|
||||
createAgentSessionFromServices,
|
||||
createAgentSessionRuntime,
|
||||
createAgentSessionServices,
|
||||
getAgentDir,
|
||||
SessionManager,
|
||||
} from "@mariozechner/pi-coding-agent";
|
||||
|
||||
const bootstrap = {};
|
||||
const runtime = await createAgentSessionRuntime(bootstrap, {
|
||||
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()),
|
||||
});
|
||||
const runtimeHost = new AgentSessionRuntimeHost(bootstrap, runtime);
|
||||
|
||||
let unsubscribe: (() => void) | undefined;
|
||||
|
||||
async function bindSession() {
|
||||
unsubscribe?.();
|
||||
const session = runtimeHost.session;
|
||||
const session = runtime.session;
|
||||
await session.bindExtensions({});
|
||||
unsubscribe = session.subscribe((event) => {
|
||||
if (event.type === "queue_update") {
|
||||
@@ -35,15 +53,15 @@ let session = await bindSession();
|
||||
const originalSessionFile = session.sessionFile;
|
||||
console.log("Initial session:", originalSessionFile);
|
||||
|
||||
await runtimeHost.newSession();
|
||||
await runtime.newSession();
|
||||
session = await bindSession();
|
||||
console.log("After newSession():", session.sessionFile);
|
||||
|
||||
if (originalSessionFile) {
|
||||
await runtimeHost.switchSession(originalSessionFile);
|
||||
await runtime.switchSession(originalSessionFile);
|
||||
session = await bindSession();
|
||||
console.log("After switchSession():", session.sessionFile);
|
||||
}
|
||||
|
||||
unsubscribe?.();
|
||||
await runtimeHost.dispose();
|
||||
await runtime.dispose();
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
Programmatic usage of pi-coding-agent via `createAgentSession()` and `createAgentSessionRuntime()`.
|
||||
|
||||
The runtime example shows how to build a recreate function that closes over process-global fixed inputs and recreates cwd-bound services and sessions as the active session cwd changes.
|
||||
|
||||
## Examples
|
||||
|
||||
| File | Description |
|
||||
|
||||
Reference in New Issue
Block a user