@ponythewhite/base-context 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -0
- package/NOTICE +0 -5
- package/README.md +44 -27
- package/dist/NOTICE +0 -5
- package/dist/base-context-runtime/pyproject.toml +1 -1
- package/dist/base-context-runtime/src/rlm/__init__.py +7 -5
- package/dist/base-context-runtime/test/test_subagent_registry.py +28 -1
- package/dist/base-context-runtime/uv.lock +1 -1
- package/dist/build-info.json +1 -1
- package/dist/bundle/amazon-bedrock.js +21 -0
- package/dist/bundle/{anthropic-YY4S534V.js → anthropic-UV5GZDGU.js} +5 -5
- package/dist/bundle/{azure-openai-responses-JRP6MIM3.js → azure-openai-responses-WSNPXLYC.js} +6 -6
- package/dist/bundle/{bundled-modules-P5HARVZA.js → bundled-modules-TXUMJ2XQ.js} +71 -16
- package/dist/bundle/chunk-27QCJ2AZ.js +2578 -0
- package/dist/bundle/{chunk-MZHTNNVA.js → chunk-4GXPNXOJ.js} +8 -0
- package/dist/bundle/{chunk-SC5KG5R4.js → chunk-DGNX7HQ3.js} +1 -7
- package/dist/bundle/{chunk-A53O363M.js → chunk-GRJFXLBM.js} +0 -1
- package/dist/bundle/chunk-HKINIBP4.js +29 -0
- package/dist/bundle/{chunk-UDSW6FNG.js → chunk-KTNETTHI.js} +1 -1
- package/dist/bundle/{chunk-BYVP7LWV.js → chunk-S3INFPZZ.js} +1861 -4662
- package/dist/bundle/{chunk-73DCPU3D.js → chunk-V3L54UD6.js} +1019 -3427
- package/dist/bundle/{chunk-U7AUVG3B.js → chunk-VSIYFWYI.js} +24 -6
- package/dist/bundle/{chunk-IW77OXFS.js → chunk-W46VZFI6.js} +0 -2099
- package/dist/bundle/{cli-main-O4X7GFGY.js → cli-main-BYMSRPH6.js} +8 -6
- package/dist/bundle/cli.js +2 -2
- package/dist/bundle/{google-AUTVGDGZ.js → google-T32FMD4G.js} +6 -6
- package/dist/bundle/{google-vertex-Q75D7RKS.js → google-vertex-56KP6I3B.js} +3 -3
- package/dist/bundle/{main-XKOW2BV6.js → main-ODOYCEQC.js} +7 -5
- package/dist/bundle/{mistral-7ESB7QUD.js → mistral-WGBMYIVU.js} +5 -5
- package/dist/bundle/{openai-codex-responses-LV3QRPN4.js → openai-codex-responses-PIV2RQ3G.js} +6 -6
- package/dist/bundle/{openai-completions-OJECLPXJ.js → openai-completions-64C3JPR4.js} +11 -22
- package/dist/bundle/{openai-responses-FN6HZMBC.js → openai-responses-UI7RSTDV.js} +6 -6
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +108 -59
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/daemon-ps.d.ts +4 -3
- package/dist/cli/daemon-ps.d.ts.map +1 -1
- package/dist/cli/daemon-ps.js +6 -1
- package/dist/cli/daemon-ps.js.map +1 -1
- package/dist/cli/product-doctor.d.ts +0 -1
- package/dist/cli/product-doctor.d.ts.map +1 -1
- package/dist/cli/product-doctor.js +6 -3
- package/dist/cli/product-doctor.js.map +1 -1
- package/dist/config.d.ts +0 -3
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +0 -8
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-config.d.ts +1 -2
- package/dist/core/agent-session-config.d.ts.map +1 -1
- package/dist/core/agent-session-config.js +0 -3
- package/dist/core/agent-session-config.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +5 -4
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +5 -3
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +2 -27
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +10 -6
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +107 -107
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-storage.d.ts +8 -35
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +33 -243
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/cron-jobs.d.ts.map +1 -1
- package/dist/core/cron-jobs.js +7 -1
- package/dist/core/cron-jobs.js.map +1 -1
- package/dist/core/inference-coordinator.d.ts +6 -1
- package/dist/core/inference-coordinator.d.ts.map +1 -1
- package/dist/core/inference-coordinator.js +18 -2
- package/dist/core/inference-coordinator.js.map +1 -1
- package/dist/core/kernel/bootstrap.d.ts.map +1 -1
- package/dist/core/kernel/bootstrap.js +2 -2
- package/dist/core/kernel/bootstrap.js.map +1 -1
- package/dist/core/kernel/repl-manager.d.ts +2 -0
- package/dist/core/kernel/repl-manager.d.ts.map +1 -1
- package/dist/core/kernel/repl-manager.js +44 -1
- package/dist/core/kernel/repl-manager.js.map +1 -1
- package/dist/core/logging.d.ts +4 -3
- package/dist/core/logging.d.ts.map +1 -1
- package/dist/core/logging.js +6 -6
- package/dist/core/logging.js.map +1 -1
- package/dist/core/mcp/mcp-manager.d.ts.map +1 -1
- package/dist/core/mcp/mcp-manager.js +3 -3
- package/dist/core/mcp/mcp-manager.js.map +1 -1
- package/dist/core/model-registry.d.ts +1 -16
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +88 -196
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts +2 -19
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +36 -266
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/provider-contracts.d.ts +5 -6
- package/dist/core/provider-contracts.d.ts.map +1 -1
- package/dist/core/provider-contracts.js +25 -36
- package/dist/core/provider-contracts.js.map +1 -1
- package/dist/core/provider-display-names.d.ts.map +1 -1
- package/dist/core/provider-display-names.js +0 -2
- package/dist/core/provider-display-names.js.map +1 -1
- package/dist/core/rlm-max-subagents.d.ts +32 -0
- package/dist/core/rlm-max-subagents.d.ts.map +1 -0
- package/dist/core/rlm-max-subagents.js +50 -0
- package/dist/core/rlm-max-subagents.js.map +1 -0
- package/dist/core/rlm-runtime.d.ts +3 -3
- package/dist/core/rlm-runtime.d.ts.map +1 -1
- package/dist/core/rlm-runtime.js.map +1 -1
- package/dist/core/sdk.d.ts +4 -3
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +27 -14
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/settings-manager.d.ts +3 -16
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +12 -44
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +6 -6
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/installer.mjs +2 -3
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +39 -34
- package/dist/main.js.map +1 -1
- package/dist/modes/acp/acp-mode.d.ts.map +1 -1
- package/dist/modes/acp/acp-mode.js +1 -1
- package/dist/modes/acp/acp-mode.js.map +1 -1
- package/dist/modes/agent-connection/daemon-agent-connection.d.ts +6 -2
- package/dist/modes/agent-connection/daemon-agent-connection.d.ts.map +1 -1
- package/dist/modes/agent-connection/daemon-agent-connection.js +13 -2
- package/dist/modes/agent-connection/daemon-agent-connection.js.map +1 -1
- package/dist/modes/agent-connection/in-process-agent-connection.d.ts +2 -0
- package/dist/modes/agent-connection/in-process-agent-connection.d.ts.map +1 -1
- package/dist/modes/agent-connection/in-process-agent-connection.js +6 -0
- package/dist/modes/agent-connection/in-process-agent-connection.js.map +1 -1
- package/dist/modes/agent-connection/types.d.ts +3 -0
- package/dist/modes/agent-connection/types.d.ts.map +1 -1
- package/dist/modes/agent-connection/types.js.map +1 -1
- package/dist/modes/agents-view/agents-view-mode.d.ts.map +1 -1
- package/dist/modes/agents-view/agents-view-mode.js +2 -19
- package/dist/modes/agents-view/agents-view-mode.js.map +1 -1
- package/dist/modes/daemon/daemon-mode.d.ts +5 -0
- package/dist/modes/daemon/daemon-mode.d.ts.map +1 -1
- package/dist/modes/daemon/daemon-mode.js +107 -12
- package/dist/modes/daemon/daemon-mode.js.map +1 -1
- package/dist/modes/daemon/daemon-protocol.d.ts +194 -165
- package/dist/modes/daemon/daemon-protocol.d.ts.map +1 -1
- package/dist/modes/daemon/daemon-protocol.js +16 -11
- package/dist/modes/daemon/daemon-protocol.js.map +1 -1
- package/dist/modes/daemon/daemon-rlm-capacity-coordinator.d.ts +19 -0
- package/dist/modes/daemon/daemon-rlm-capacity-coordinator.d.ts.map +1 -0
- package/dist/modes/daemon/daemon-rlm-capacity-coordinator.js +74 -0
- package/dist/modes/daemon/daemon-rlm-capacity-coordinator.js.map +1 -0
- package/dist/modes/daemon/daemon-rlm-capacity.d.ts +19 -0
- package/dist/modes/daemon/daemon-rlm-capacity.d.ts.map +1 -0
- package/dist/modes/daemon/daemon-rlm-capacity.js +85 -0
- package/dist/modes/daemon/daemon-rlm-capacity.js.map +1 -0
- package/dist/modes/daemon/daemon-session-summarizer.d.ts +2 -3
- package/dist/modes/daemon/daemon-session-summarizer.d.ts.map +1 -1
- package/dist/modes/daemon/daemon-session-summarizer.js +32 -23
- package/dist/modes/daemon/daemon-session-summarizer.js.map +1 -1
- package/dist/modes/daemon/daemon-state-root.d.ts +15 -0
- package/dist/modes/daemon/daemon-state-root.d.ts.map +1 -0
- package/dist/modes/daemon/daemon-state-root.js +40 -0
- package/dist/modes/daemon/daemon-state-root.js.map +1 -0
- package/dist/modes/daemon/daemon-supervisor-ownership.d.ts +2 -0
- package/dist/modes/daemon/daemon-supervisor-ownership.d.ts.map +1 -1
- package/dist/modes/daemon/daemon-supervisor-ownership.js +27 -0
- package/dist/modes/daemon/daemon-supervisor-ownership.js.map +1 -1
- package/dist/modes/daemon/daemon-supervisor.d.ts +10 -1
- package/dist/modes/daemon/daemon-supervisor.d.ts.map +1 -1
- package/dist/modes/daemon/daemon-supervisor.js +213 -20
- package/dist/modes/daemon/daemon-supervisor.js.map +1 -1
- package/dist/modes/daemon/daemon-worker-protocol.d.ts +28 -1
- package/dist/modes/daemon/daemon-worker-protocol.d.ts.map +1 -1
- package/dist/modes/daemon/daemon-worker-protocol.js +16 -2
- package/dist/modes/daemon/daemon-worker-protocol.js.map +1 -1
- package/dist/modes/daemon/saved-session-catalog.d.ts.map +1 -1
- package/dist/modes/daemon/saved-session-catalog.js +2 -0
- package/dist/modes/daemon/saved-session-catalog.js.map +1 -1
- package/dist/modes/interactive/auth-flows.d.ts +0 -6
- package/dist/modes/interactive/auth-flows.d.ts.map +1 -1
- package/dist/modes/interactive/auth-flows.js +6 -126
- package/dist/modes/interactive/auth-flows.js.map +1 -1
- package/dist/modes/interactive/components/configuration-menu.d.ts +3 -0
- package/dist/modes/interactive/components/configuration-menu.d.ts.map +1 -1
- package/dist/modes/interactive/components/configuration-menu.js +13 -2
- package/dist/modes/interactive/components/configuration-menu.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +2 -2
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/index.d.ts +0 -1
- package/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/index.js +0 -1
- package/dist/modes/interactive/components/index.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts +0 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +3 -40
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +2 -0
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +13 -2
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +2 -11
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/feature-hints.d.ts.map +1 -1
- package/dist/modes/interactive/feature-hints.js +0 -4
- package/dist/modes/interactive/feature-hints.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +3 -12
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +81 -507
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/onboarding.d.ts +0 -3
- package/dist/modes/interactive/onboarding.d.ts.map +1 -1
- package/dist/modes/interactive/onboarding.js +0 -17
- package/dist/modes/interactive/onboarding.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +2 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +24 -11
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/node/amazon-bedrock.d.ts +2 -0
- package/dist/node/amazon-bedrock.d.ts.map +1 -0
- package/dist/node/amazon-bedrock.js +6 -0
- package/dist/node/amazon-bedrock.js.map +1 -0
- package/dist/product-identity.d.ts +0 -1
- package/dist/product-identity.d.ts.map +1 -1
- package/dist/product-identity.js +0 -1
- package/dist/product-identity.js.map +1 -1
- package/docs/development.md +1 -1
- package/docs/fork-philosophy.md +4 -8
- package/docs/installation.md +83 -62
- package/docs/providers.md +23 -25
- package/docs/quickstart.md +19 -10
- package/docs/rlm-runtime.md +13 -5
- package/docs/rpc.md +4 -4
- package/docs/sdk.md +20 -11
- package/docs/sessions.md +0 -1
- package/docs/settings.md +9 -42
- package/docs/skills.md +0 -1
- package/docs/upstream-0.9.5.md +171 -0
- package/docs/usage.md +14 -10
- package/package.json +4 -4
- package/dist/core/agent-traces.d.ts +0 -149
- package/dist/core/agent-traces.d.ts.map +0 -1
- package/dist/core/agent-traces.js +0 -904
- package/dist/core/agent-traces.js.map +0 -1
- package/dist/core/prime-inference-auth.d.ts +0 -70
- package/dist/core/prime-inference-auth.d.ts.map +0 -1
- package/dist/core/prime-inference-auth.js +0 -352
- package/dist/core/prime-inference-auth.js.map +0 -1
- package/dist/core/prime-inference-model-selection.d.ts +0 -16
- package/dist/core/prime-inference-model-selection.d.ts.map +0 -1
- package/dist/core/prime-inference-model-selection.js +0 -16
- package/dist/core/prime-inference-model-selection.js.map +0 -1
- package/dist/core/prime-inference-models.d.ts +0 -6
- package/dist/core/prime-inference-models.d.ts.map +0 -1
- package/dist/core/prime-inference-models.js +0 -62
- package/dist/core/prime-inference-models.js.map +0 -1
- package/dist/core/telemetry.d.ts +0 -95
- package/dist/core/telemetry.d.ts.map +0 -1
- package/dist/core/telemetry.js +0 -637
- package/dist/core/telemetry.js.map +0 -1
- package/dist/modes/interactive/components/prime-onboarding-splash.d.ts +0 -39
- package/dist/modes/interactive/components/prime-onboarding-splash.d.ts.map +0 -1
- package/dist/modes/interactive/components/prime-onboarding-splash.js +0 -286
- package/dist/modes/interactive/components/prime-onboarding-splash.js.map +0 -1
- package/dist/modes/interactive/components/prime-team-selector.d.ts +0 -30
- package/dist/modes/interactive/components/prime-team-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/prime-team-selector.js +0 -166
- package/dist/modes/interactive/components/prime-team-selector.js.map +0 -1
- package/dist/skills/prime-intellect/SKILL.md +0 -87
- package/dist/skills/prime-intellect/references/compute.md +0 -45
- package/dist/skills/prime-intellect/references/environments.md +0 -73
- package/dist/skills/prime-intellect/references/inference.md +0 -47
- package/dist/skills/prime-intellect/references/sandboxes.md +0 -75
- package/skills/prime-intellect/SKILL.md +0 -87
- package/skills/prime-intellect/references/compute.md +0 -45
- package/skills/prime-intellect/references/environments.md +0 -73
- package/skills/prime-intellect/references/inference.md +0 -47
- package/skills/prime-intellect/references/sandboxes.md +0 -75
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-session-runtime.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport type { AgentSession } from \"./agent-session.js\";\nimport type { AgentSessionRuntimeConfig } from \"./agent-session-config.js\";\nimport type {\n\tAgentSessionCreationOptions,\n\tAgentSessionRuntimeDiagnostic,\n\tAgentSessionServices,\n} from \"./agent-session-services.js\";\nimport { isNoModelsAvailableMessage } from \"./auth-guidance.js\";\nimport type { ReplacedSessionContext, SessionShutdownEvent, SessionStartEvent } from \"./extensions/index.js\";\nimport { emitSessionShutdownEvent } from \"./extensions/runner.js\";\nimport type {\n\tCreateRlmSubagentRuntimeOptions,\n\tRlmChildAdmission,\n\tRlmSubagentRuntime,\n\tSubagentRuntimeHost,\n} from \"./rlm-runtime.js\";\nimport type { CreateAgentSessionResult } from \"./sdk.js\";\nimport { assertSessionCwdExists } from \"./session-cwd.js\";\nimport { SessionImportFileNotFoundError } from \"./session-import-errors.js\";\nimport { acquireSessionLease, canonicalSessionPath, type SessionLease } from \"./session-lease.js\";\nimport { SessionManager } from \"./session-manager.js\";\n\nexport { SessionImportFileNotFoundError } from \"./session-import-errors.js\";\n\nexport interface CreateAgentSessionRuntimeResult extends CreateAgentSessionResult {\n\tservices: AgentSessionServices;\n\tdiagnostics: AgentSessionRuntimeDiagnostic[];\n}\n\nexport type CreateAgentSessionRuntimeFactory = (options: {\n\tcwd: string;\n\tagentDir: string;\n\tsessionManager: SessionManager;\n\tsessionStartEvent?: SessionStartEvent;\n\tsessionConfig?: AgentSessionRuntimeConfig;\n\tsessionOptions?: AgentSessionCreationOptions;\n}) => Promise<CreateAgentSessionRuntimeResult>;\n\nexport type AgentSessionRuntimeKind = \"top-level\" | \"subagent\";\n\nexport interface AgentSessionRuntimeMetadata {\n\tkind: AgentSessionRuntimeKind;\n\tcreatedAt: number;\n\tparentActiveSessionId?: string;\n\tparentSessionId?: string;\n\tparentSessionFile?: string;\n\trlmChildId?: string;\n\trlmParentNodeId?: string;\n\trehydratedCompleted?: boolean;\n\tprompt?: string;\n\tspawnCode?: string;\n\tsessionDir?: string;\n}\n\nfunction extractUserMessageText(content: string | Array<{ type: string; text?: string }>): string {\n\tif (typeof content === \"string\") {\n\t\treturn content;\n\t}\n\n\treturn content\n\t\t.filter((part): part is { type: \"text\"; text: string } => part.type === \"text\" && typeof part.text === \"string\")\n\t\t.map((part) => part.text)\n\t\t.join(\"\");\n}\n\nexport interface AgentSessionRuntimeDisposeOptions {\n\t/** Set false when the session's artifact dir is deleted right after disposal (default true). */\n\tkernelSnapshot?: boolean;\n}\n\nexport class AgentSessionRuntime implements SubagentRuntimeHost {\n\tprivate rebindSession?: (session: AgentSession) => Promise<void>;\n\tprivate readonly sessionReplacedListeners = new Set<(session: AgentSession) => void | Promise<void>>();\n\tprivate runtimeEnvScope?: <T>(fn: () => Promise<T>) => Promise<T>;\n\tprivate beforeSessionInvalidate?: () => void;\n\tprivate subagentRuntimeHost?: SubagentRuntimeHost;\n\tprivate subagentRuntimes = new Map<string, AgentSessionRuntime>();\n\tprivate disposePromise?: Promise<void>;\n\tprivate autoRefineAdmissionClosed = false;\n\n\tconstructor(\n\t\tprivate _session: AgentSession,\n\t\tprivate _services: AgentSessionServices,\n\t\tprivate readonly createRuntime: CreateAgentSessionRuntimeFactory,\n\t\tprivate _diagnostics: AgentSessionRuntimeDiagnostic[] = [],\n\t\tprivate _modelFallbackMessage?: string,\n\t\tprivate readonly sessionConfig?: AgentSessionRuntimeConfig,\n\t\tprivate readonly _metadata: AgentSessionRuntimeMetadata = {\n\t\t\tkind: \"top-level\",\n\t\t\tcreatedAt: Date.now(),\n\t\t},\n\t\tprivate _sessionLease?: SessionLease,\n\t) {\n\t\tthis.bindRuntimeHost();\n\t}\n\n\tget services(): AgentSessionServices {\n\t\treturn this._services;\n\t}\n\n\tget session(): AgentSession {\n\t\treturn this._session;\n\t}\n\n\tget requests() {\n\t\treturn this._session.requests;\n\t}\n\n\tget cwd(): string {\n\t\treturn this._services.cwd;\n\t}\n\n\tget diagnostics(): readonly AgentSessionRuntimeDiagnostic[] {\n\t\treturn this._diagnostics;\n\t}\n\n\tget modelFallbackMessage(): string | undefined {\n\t\t// The \"no models available\" warning describes session state, not a\n\t\t// startup event: once the session gains a model (set_model, /login,\n\t\t// onboarding), the stored snapshot is stale and must not reach clients.\n\t\tif (isNoModelsAvailableMessage(this._modelFallbackMessage) && this._session.model) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn this._modelFallbackMessage;\n\t}\n\n\tget metadata(): AgentSessionRuntimeMetadata {\n\t\treturn { ...this._metadata };\n\t}\n\n\tget runtimeConfig(): AgentSessionRuntimeConfig | undefined {\n\t\treturn this.sessionConfig ? { ...this.sessionConfig } : undefined;\n\t}\n\n\tsetRebindSession(rebindSession?: (session: AgentSession) => Promise<void>): void {\n\t\tthis.rebindSession = rebindSession;\n\t}\n\n\tonSessionReplaced(listener: (session: AgentSession) => void | Promise<void>): () => void {\n\t\tthis.sessionReplacedListeners.add(listener);\n\t\treturn () => this.sessionReplacedListeners.delete(listener);\n\t}\n\n\t/**\n\t * Host-installed scope wrapping every runtime rebuild (new/switch/fork/\n\t * import and subagent creation), during which extensions re-load. The\n\t * daemon uses it to apply the session's client env for load-time captures.\n\t */\n\tsetRuntimeEnvScope(scope?: <T>(fn: () => Promise<T>) => Promise<T>): void {\n\t\tthis.runtimeEnvScope = scope;\n\t}\n\n\tprivate scopedBuild<T>(fn: () => Promise<T>): Promise<T> {\n\t\treturn this.runtimeEnvScope ? this.runtimeEnvScope(fn) : fn();\n\t}\n\n\tsetSubagentRuntimeHost(host?: SubagentRuntimeHost): void {\n\t\tthis.subagentRuntimeHost = host;\n\t\tthis.bindRuntimeHost();\n\t}\n\n\t/**\n\t * Set a synchronous callback that runs after `session_shutdown` handlers finish\n\t * but before the current session is invalidated.\n\t *\n\t * This is for host-owned UI teardown that must not yield to the event loop,\n\t * such as detaching extension-provided TUI components before the old extension\n\t * context becomes stale.\n\t */\n\tsetBeforeSessionInvalidate(beforeSessionInvalidate?: () => void): void {\n\t\tthis.beforeSessionInvalidate = beforeSessionInvalidate;\n\t}\n\n\tprivate async emitBeforeSwitch(\n\t\treason: \"new\" | \"resume\",\n\t\ttargetSessionFile?: string,\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst runner = this.session.extensionRunner;\n\t\tif (!runner.hasHandlers(\"session_before_switch\")) {\n\t\t\treturn { cancelled: false };\n\t\t}\n\n\t\tconst result = await runner.emit({\n\t\t\ttype: \"session_before_switch\",\n\t\t\treason,\n\t\t\ttargetSessionFile,\n\t\t});\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate async emitBeforeFork(\n\t\trunner: AgentSession[\"extensionRunner\"],\n\t\tentryId: string,\n\t\toptions: { position: \"before\" | \"at\" },\n\t): Promise<{ cancelled: boolean }> {\n\t\tif (!runner.hasHandlers(\"session_before_fork\")) {\n\t\t\treturn { cancelled: false };\n\t\t}\n\n\t\tconst result = await runner.emit({\n\t\t\ttype: \"session_before_fork\",\n\t\t\tentryId,\n\t\t\t...options,\n\t\t});\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate async teardownCurrent(reason: SessionShutdownEvent[\"reason\"], targetSessionFile?: string): Promise<void> {\n\t\tawait emitSessionShutdownEvent(this.session.extensionRunner, {\n\t\t\ttype: \"session_shutdown\",\n\t\t\treason,\n\t\t\ttargetSessionFile,\n\t\t});\n\t\tthis.beforeSessionInvalidate?.();\n\t\t// Await the kernel's final snapshot flush before invalidating the session.\n\t\tawait this.session.disposeAsync();\n\t\tawait this.disposeHostedSubagentRuntimes();\n\t}\n\n\t/** Native EOF closes new opportunistic work, including a session replaced by an already accepted command. */\n\tcloseAutoRefineAdmission(): void {\n\t\tthis.autoRefineAdmissionClosed = true;\n\t\tthis._session.closeAutoRefineAdmission();\n\t}\n\n\tprivate bindRuntimeHost(): void {\n\t\tif (this.autoRefineAdmissionClosed) this._session.closeAutoRefineAdmission();\n\t\tthis._session.setSubagentRuntimeHost(this.subagentRuntimeHost ?? this);\n\t}\n\n\tprivate apply(result: CreateAgentSessionRuntimeResult): void {\n\t\tthis._session = result.session;\n\t\tthis._services = result.services;\n\t\tthis._diagnostics = result.diagnostics;\n\t\tthis._modelFallbackMessage = result.modelFallbackMessage;\n\t\tthis.bindRuntimeHost();\n\t}\n\n\tprivate acquireReplacementLease(sessionPath: string | undefined): SessionLease | undefined {\n\t\tif (sessionPath && this._sessionLease?.sessionPath === canonicalSessionPath(sessionPath)) {\n\t\t\treturn this._sessionLease;\n\t\t}\n\t\treturn acquireSessionLease(sessionPath, this.services.agentDir);\n\t}\n\n\tprivate releaseUncommittedLease(lease: SessionLease | undefined): void {\n\t\tif (lease !== this._sessionLease) {\n\t\t\tlease?.release();\n\t\t}\n\t}\n\n\tprivate releaseSessionLease(): void {\n\t\tthis._sessionLease?.release();\n\t\tthis._sessionLease = undefined;\n\t}\n\n\tprivate commitReplacementLease(lease: SessionLease | undefined): void {\n\t\tif (lease === this._sessionLease) {\n\t\t\treturn;\n\t\t}\n\t\tconst previous = this._sessionLease;\n\t\tthis._sessionLease = lease;\n\t\tprevious?.release();\n\t}\n\n\tprivate async replaceWithManager(\n\t\tsessionManager: SessionManager,\n\t\tsource: { session: AgentSession; sessionFile: string | undefined; agentDir: string },\n\t\treason: \"new\" | \"resume\" | \"fork\",\n\t\tteardown = true,\n\t\tsetup?: (manager: SessionManager) => Promise<void>,\n\t): Promise<void> {\n\t\tlet lease: SessionLease | undefined;\n\t\tlet result: CreateAgentSessionRuntimeResult | undefined;\n\t\ttry {\n\t\t\tif (this.session !== source.session) throw new Error(\"Session changed before replacement\");\n\t\t\tlease = this.acquireReplacementLease(sessionManager.getSessionFile());\n\t\t\tif (teardown) await this.teardownCurrent(reason, sessionManager.getSessionFile());\n\t\t\tresult = await this.scopedBuild(() =>\n\t\t\t\tthis.createRuntime({\n\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\tagentDir: source.agentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason, previousSessionFile: source.sessionFile },\n\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t}),\n\t\t\t);\n\t\t\tawait result.session.initialize();\n\t\t\tif (setup) {\n\t\t\t\tawait setup(sessionManager);\n\t\t\t\tawait sessionManager.flushNow();\n\t\t\t\tresult.session.agent.state.messages = (await result.session.buildSessionContext()).messages;\n\t\t\t}\n\t\t\tif (this.session !== source.session) throw new Error(\"Session changed during replacement\");\n\t\t\tthis.apply(result);\n\t\t\tthis.commitReplacementLease(lease);\n\t\t} catch (error) {\n\t\t\ttry {\n\t\t\t\tif (result) await result.session.disposeAsync();\n\t\t\t\telse await sessionManager.close();\n\t\t\t} finally {\n\t\t\t\tthis.releaseUncommittedLease(lease);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async disposeSubagentRuntimes(): Promise<void> {\n\t\tconst runtimes = [...this.subagentRuntimes.values()];\n\t\tthis.subagentRuntimes.clear();\n\t\tlet disposeError: unknown;\n\t\tfor (const runtime of runtimes) {\n\t\t\ttry {\n\t\t\t\tawait runtime.dispose();\n\t\t\t} catch (error) {\n\t\t\t\tdisposeError ??= error;\n\t\t\t}\n\t\t}\n\t\tif (disposeError) {\n\t\t\tthrow disposeError;\n\t\t}\n\t}\n\n\tprivate async disposeHostedSubagentRuntimes(): Promise<void> {\n\t\tlet disposeError: unknown;\n\t\ttry {\n\t\t\tawait this.subagentRuntimeHost?.disposeRlmSubagentRuntimes?.();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tawait this.disposeSubagentRuntimes();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\tif (disposeError) {\n\t\t\tthrow disposeError;\n\t\t}\n\t}\n\n\tlistSubagentRuntimes(): readonly AgentSessionRuntime[] {\n\t\treturn [...this.subagentRuntimes.values()];\n\t}\n\n\tasync createRlmSubagentRuntime(options: CreateRlmSubagentRuntimeOptions): Promise<RlmSubagentRuntime> {\n\t\toptions = { ...options, contextMode: options.contextMode ?? options.parentSession.contextMode };\n\t\tconst requestTokenBudget =\n\t\t\toptions.requestTokenBudget === undefined\n\t\t\t\t? options.parentSession.requests.getRequestTokenBudgetOptions()\n\t\t\t\t: structuredClone(options.requestTokenBudget);\n\t\tif (requestTokenBudget !== undefined) options = { ...options, requestTokenBudget };\n\t\tconst admission = options.admission ?? options.parentSession.reserveRlmChildAdmission();\n\t\ttry {\n\t\t\tif (admission.parent !== options.parentSession)\n\t\t\t\tthrow new Error(\"RLM child admission belongs to another parent\");\n\t\t\tadmission.assertCurrent();\n\t\t\tadmission.claimFactory();\n\t\t\treturn await this.createAdmittedRlmSubagentRuntime({ ...options, admission });\n\t\t} finally {\n\t\t\tif (!options.admission) admission.settle();\n\t\t}\n\t}\n\n\tprivate async createAdmittedRlmSubagentRuntime(\n\t\toptions: CreateRlmSubagentRuntimeOptions & { admission: RlmChildAdmission },\n\t): Promise<RlmSubagentRuntime> {\n\t\toptions.admission.assertCurrent();\n\t\tconst parent = options.parentSession;\n\t\tconst parentSessionFile = parent.sessionFile;\n\t\tconst parentSessionId = parent.sessionId;\n\t\tconst parentAgent = parent.sessionName ?? parentSessionId;\n\t\tconst agentDir = this.services.agentDir;\n\t\tconst sessionManager = await SessionManager.create(parent.sessionManager.getCwd(), options.sessionDir, {\n\t\t\tparentSession: parentSessionFile,\n\t\t\trlmDepth: options.rlmDepth,\n\t\t});\n\t\tlet runtime: AgentSessionRuntime;\n\t\tlet factoryStarted = false;\n\t\ttry {\n\t\t\toptions.admission.assertCurrent();\n\t\t\tfactoryStarted = true;\n\t\t\truntime = await this.scopedBuild(() =>\n\t\t\t\tcreateAgentSessionRuntime(this.createRuntime, {\n\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\tagentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"startup\" },\n\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\tsessionOptions: {\n\t\t\t\t\t\t...(options.requestTokenBudget === undefined\n\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t: { requestTokenBudget: options.requestTokenBudget }),\n\t\t\t\t\t\tcontextMode: options.contextMode,\n\t\t\t\t\t\tmodel: options.model,\n\t\t\t\t\t\tthinkingLevel: options.thinkingLevel,\n\t\t\t\t\t\tserviceTier: options.serviceTier,\n\t\t\t\t\t\tscopedModels: options.scopedModels,\n\t\t\t\t\t\tinitialActiveToolNames: options.activeToolNames,\n\t\t\t\t\t\tallowedToolNames: options.allowedToolNames,\n\t\t\t\t\t\tcustomTools: options.customTools,\n\t\t\t\t\t\tincludeGoals: options.includeGoals,\n\t\t\t\t\t\tincludeCompactSkill: options.includeCompactSkill,\n\t\t\t\t\t\trlmDepth: options.rlmDepth,\n\t\t\t\t\t\trlmMaxDepth: options.rlmMaxDepth,\n\t\t\t\t\t\trlmSessionDir: options.sessionDir,\n\t\t\t\t\t\trlmParentNodeId: options.rlmParentNodeId,\n\t\t\t\t\t\trlmParentAgent: parentAgent,\n\t\t\t\t\t\trlmChildAdmission: options.admission,\n\t\t\t\t\t\tsemanticParentSessionId: parentSessionId,\n\t\t\t\t\t\tsemanticSpawnedByRequestId: options.spawnedByRequestId,\n\t\t\t\t\t},\n\t\t\t\t\truntimeMetadata: {\n\t\t\t\t\t\tkind: \"subagent\",\n\t\t\t\t\t\tcreatedAt: Date.now(),\n\t\t\t\t\t\tparentSessionId: parentSessionId,\n\t\t\t\t\t\tparentSessionFile: parentSessionFile,\n\t\t\t\t\t\trlmChildId: options.id,\n\t\t\t\t\t\trlmParentNodeId: options.rlmParentNodeId,\n\t\t\t\t\t\tprompt: options.prompt,\n\t\t\t\t\t\tspawnCode: options.spawnCode,\n\t\t\t\t\t\tsessionDir: options.sessionDir,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\ttry {\n\t\t\t\tawait sessionManager.close();\n\t\t\t\tif (!factoryStarted) options.admission.confirmUnboundCleanup();\n\t\t\t} catch (cleanupError) {\n\t\t\t\tif (cleanupError === error || (error instanceof AggregateError && error.errors.includes(cleanupError)))\n\t\t\t\t\tthrow error;\n\t\t\t\tthrow new AggregateError([error, cleanupError], \"RLM startup and cleanup failed\");\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\tthis.subagentRuntimes.set(options.id, runtime);\n\t\ttry {\n\t\t\tawait runtime.session.bindExtensions({});\n\t\t\tif (options.parentSession.getRlmChildRunStatus(options.id) === \"cancelled\") {\n\t\t\t\tthrow new Error(\"RLM subagent startup was cancelled\");\n\t\t\t}\n\t\t\tif (runtime.session.sessionName !== options.sessionName) {\n\t\t\t\tawait runtime.session.setSessionName(options.sessionName);\n\t\t\t}\n\t\t\tif (parent.getRlmChildRunStatus(options.id) === \"cancelled\") {\n\t\t\t\tthrow new Error(\"RLM subagent startup was cancelled\");\n\t\t\t}\n\t\t\toptions.admission.bind(runtime.session);\n\t\t\toptions.admission.assertCurrent();\n\t\t\toptions.onSessionPublished?.(runtime.session);\n\t\t} catch (error) {\n\t\t\tthis.subagentRuntimes.delete(options.id);\n\t\t\ttry {\n\t\t\t\tawait runtime.dispose();\n\t\t\t} catch (cleanupError) {\n\t\t\t\tif (cleanupError === error || (error instanceof AggregateError && error.errors.includes(cleanupError)))\n\t\t\t\t\tthrow error;\n\t\t\t\tthrow new AggregateError([error, cleanupError], \"RLM startup and cleanup failed\");\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\treturn runtime;\n\t}\n\n\tasync deleteRlmSubagentRuntime(childId: string, session: AgentSession): Promise<void> {\n\t\tconst runtime = this.subagentRuntimes.get(childId);\n\t\tif (!runtime) {\n\t\t\tawait session.disposeAsync();\n\t\t\treturn;\n\t\t}\n\t\tthis.subagentRuntimes.delete(childId);\n\t\tconst shouldDisposeStaleSession = runtime.session !== session;\n\t\ttry {\n\t\t\tawait runtime.dispose();\n\t\t} finally {\n\t\t\tif (shouldDisposeStaleSession) {\n\t\t\t\tawait session.disposeAsync();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async finishSessionReplacement(withSession?: (ctx: ReplacedSessionContext) => Promise<void>): Promise<void> {\n\t\tif (this.rebindSession) {\n\t\t\tawait this.rebindSession(this.session);\n\t\t}\n\t\tfor (const listener of this.sessionReplacedListeners) {\n\t\t\tawait listener(this.session);\n\t\t}\n\t\tif (withSession) {\n\t\t\tawait withSession(this.session.createReplacedSessionContext());\n\t\t}\n\t}\n\n\tprivate assertCanReplaceSession(): void {\n\t\tif (this.metadata.kind === \"subagent\" || this.session.hasRlmParentAdmission) {\n\t\t\tthrow new Error(\"Owned child-runtime replacement is unavailable; dispose or passivate the child instead\");\n\t\t}\n\t}\n\n\tasync switchSession(\n\t\tsessionPath: string,\n\t\toptions?: { cwdOverride?: string; withSession?: (ctx: ReplacedSessionContext) => Promise<void> },\n\t): Promise<{ cancelled: boolean }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst fallbackCwd = this.cwd;\n\t\tconst cwdOverride = options?.cwdOverride;\n\t\tconst withSession = options?.withSession;\n\t\tconst samePath =\n\t\t\tsource.sessionFile !== undefined &&\n\t\t\tcanonicalSessionPath(source.sessionFile) === canonicalSessionPath(sessionPath);\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", sessionPath);\n\t\tif (beforeResult.cancelled) return beforeResult;\n\t\tif (this.session !== source.session) throw new Error(\"Session changed before replacement\");\n\n\t\tif (samePath) {\n\t\t\tconst view = await SessionManager.openReadOnly(sessionPath, undefined, cwdOverride);\n\t\t\ttry {\n\t\t\t\tassertSessionCwdExists(view, fallbackCwd);\n\t\t\t} finally {\n\t\t\t\tawait view.close();\n\t\t\t}\n\t\t\tawait this.teardownCurrent(\"resume\", sessionPath);\n\t\t}\n\t\tconst sessionManager = await SessionManager.open(sessionPath, undefined, cwdOverride);\n\t\ttry {\n\t\t\tassertSessionCwdExists(sessionManager, fallbackCwd);\n\t\t} catch (error) {\n\t\t\tawait sessionManager.close();\n\t\t\tthrow error;\n\t\t}\n\t\tawait this.replaceWithManager(sessionManager, source, \"resume\", !samePath);\n\t\tawait this.finishSessionReplacement(withSession);\n\t\treturn { cancelled: false };\n\t}\n\n\tasync newSession(options?: {\n\t\tparentSession?: string;\n\t\tsetup?: (sessionManager: SessionManager) => Promise<void>;\n\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t}): Promise<{ cancelled: boolean }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst cwd = this.cwd;\n\t\tconst sessionDir = source.session.sessionManager.getSessionDir();\n\t\tconst headerOptions = options?.parentSession\n\t\t\t? {\n\t\t\t\t\tparentSession: options.parentSession,\n\t\t\t\t\trlmDepth: source.session.sessionManager.getHeader()?.rlmDepth ?? source.session.rlmDepth,\n\t\t\t\t}\n\t\t\t: undefined;\n\t\tconst setup = options?.setup;\n\t\tconst withSession = options?.withSession;\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"new\");\n\t\tif (beforeResult.cancelled) return beforeResult;\n\t\tconst sessionManager = await SessionManager.create(cwd, sessionDir, headerOptions);\n\t\tawait this.replaceWithManager(sessionManager, source, \"new\", true, setup);\n\t\tawait this.finishSessionReplacement(withSession);\n\t\treturn { cancelled: false };\n\t}\n\n\tasync fork(\n\t\tentryId: string,\n\t\toptions?: {\n\t\t\tposition?: \"before\" | \"at\";\n\t\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t\t},\n\t): Promise<{ cancelled: boolean; selectedText?: string }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst rlmDepth = source.session.rlmDepth;\n\t\tconst withSession = options?.withSession;\n\t\tconst position = options?.position ?? \"before\";\n\t\tconst runner = source.session.extensionRunner;\n\t\tconst preparation = Promise.allSettled([\n\t\t\tsource.session.sessionManager.prepareFork(entryId, { position, rlmDepth }),\n\t\t]);\n\t\tconst [beforeResult] = await Promise.allSettled([\n\t\t\tthis.emitBeforeFork(runner, entryId, { position }),\n\t\t\tpreparation,\n\t\t]);\n\t\t// Join the independent source read before handling hook failure or cancellation.\n\t\tif (beforeResult.status === \"rejected\") throw beforeResult.reason;\n\t\tif (beforeResult.value.cancelled) {\n\t\t\treturn { cancelled: true };\n\t\t}\n\t\tconst [preparedResult] = await preparation;\n\t\tif (preparedResult.status === \"rejected\") throw preparedResult.reason;\n\t\tconst prepared = preparedResult.value;\n\t\tif (this.session !== source.session) throw new Error(\"Session changed before replacement\");\n\n\t\tlet selectedText: string | undefined;\n\t\tif (position === \"before\") {\n\t\t\tconst selectedEntry = prepared.selectedEntry;\n\t\t\tif (selectedEntry.type !== \"message\" || selectedEntry.message.role !== \"user\") {\n\t\t\t\tthrow new Error(\"Invalid entry ID for forking\");\n\t\t\t}\n\t\t\tselectedText = extractUserMessageText(selectedEntry.message.content);\n\t\t}\n\n\t\tconst sessionManager = await prepared.create();\n\t\tawait this.replaceWithManager(sessionManager, source, \"fork\");\n\t\tawait this.finishSessionReplacement(withSession);\n\t\treturn { cancelled: false, selectedText };\n\t}\n\n\t/**\n\t * Import a session JSONL file and switch runtime state to the imported session.\n\t *\n\t * @returns `{ cancelled: true }` when cancelled by `session_before_switch`, otherwise `{ cancelled: false }`.\n\t * @throws {SessionImportFileNotFoundError} When the input path does not exist.\n\t * @throws {MissingSessionCwdError} When the imported session cwd cannot be resolved and no override is provided.\n\t */\n\tasync importFromJsonl(inputPath: string, cwdOverride?: string): Promise<{ cancelled: boolean }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst resolvedPath = resolve(inputPath);\n\t\tif (!existsSync(resolvedPath)) throw new SessionImportFileNotFoundError(resolvedPath);\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst sessionDir = source.session.sessionManager.getSessionDir();\n\t\tconst fallbackCwd = this.cwd;\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", resolvedPath);\n\t\tif (beforeResult.cancelled) return beforeResult;\n\n\t\tconst view = await SessionManager.openReadOnly(resolvedPath, undefined, cwdOverride);\n\t\tlet targetCwd: string;\n\t\ttry {\n\t\t\tassertSessionCwdExists(view, fallbackCwd);\n\t\t\ttargetCwd = view.getCwd();\n\t\t} finally {\n\t\t\tawait view.close();\n\t\t}\n\t\tconst sessionManager = await SessionManager.importRetainedFrom(resolvedPath, targetCwd, sessionDir);\n\t\tawait this.replaceWithManager(sessionManager, source, \"resume\");\n\t\tawait this.finishSessionReplacement();\n\t\treturn { cancelled: false };\n\t}\n\n\tprivate async disposeOnce(options: AgentSessionRuntimeDisposeOptions): Promise<void> {\n\t\tlet disposeError: unknown;\n\t\ttry {\n\t\t\tawait emitSessionShutdownEvent(this.session.extensionRunner, {\n\t\t\t\ttype: \"session_shutdown\",\n\t\t\t\treason: \"quit\",\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tthis.beforeSessionInvalidate?.();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\t// Await the kernel's final snapshot flush before tearing the session down.\n\t\t\tawait this.session.disposeAsync({ kernelSnapshot: options.kernelSnapshot ?? true });\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tawait this.disposeHostedSubagentRuntimes();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tif (disposeError) {\n\t\t\t\tthrow disposeError;\n\t\t\t}\n\t\t} finally {\n\t\t\tthis.releaseSessionLease();\n\t\t}\n\t}\n\n\tasync dispose(options?: AgentSessionRuntimeDisposeOptions): Promise<void> {\n\t\tif (!this.disposePromise) {\n\t\t\tthis.disposePromise = this.disposeOnce(options ?? {});\n\t\t}\n\t\tawait this.disposePromise;\n\t}\n}\n\nexport async function createAgentSessionRuntime(\n\tcreateRuntime: CreateAgentSessionRuntimeFactory,\n\toptions: {\n\t\tcwd: string;\n\t\tagentDir: string;\n\t\tsessionManager: SessionManager;\n\t\tsessionStartEvent?: SessionStartEvent;\n\t\tsessionConfig?: AgentSessionRuntimeConfig;\n\t\tsessionOptions?: AgentSessionCreationOptions;\n\t\truntimeMetadata?: AgentSessionRuntimeMetadata;\n\t\tsessionLease?: SessionLease;\n\t},\n): Promise<AgentSessionRuntime> {\n\tconst { sessionLease, ...runtimeOptions } = options;\n\tlet lease: SessionLease | undefined;\n\tlet result: CreateAgentSessionRuntimeResult | undefined;\n\ttry {\n\t\tlease =\n\t\t\tsessionLease ?? acquireSessionLease(runtimeOptions.sessionManager.getSessionFile(), runtimeOptions.agentDir);\n\t\tassertSessionCwdExists(runtimeOptions.sessionManager, runtimeOptions.cwd);\n\t\tresult = await createRuntime(runtimeOptions);\n\t\tawait result.session.initialize();\n\t\treturn new AgentSessionRuntime(\n\t\t\tresult.session,\n\t\t\tresult.services,\n\t\t\tcreateRuntime,\n\t\t\tresult.diagnostics,\n\t\t\tresult.modelFallbackMessage,\n\t\t\truntimeOptions.sessionConfig,\n\t\t\truntimeOptions.runtimeMetadata,\n\t\t\tlease,\n\t\t);\n\t} catch (error) {\n\t\tconst errors: unknown[] = error instanceof AggregateError ? [...error.errors] : [error];\n\t\tconst initialErrorCount = errors.length;\n\t\ttry {\n\t\t\tconst admitted = runtimeOptions.sessionOptions?.rlmChildAdmission?.session;\n\t\t\tconst failedSession =\n\t\t\t\tresult?.session ?? (admitted?.sessionManager === runtimeOptions.sessionManager ? admitted : undefined);\n\t\t\tif (failedSession) await failedSession.disposeAsync();\n\t\t\telse await runtimeOptions.sessionManager.close();\n\t\t} catch (cleanupError) {\n\t\t\tif (!errors.includes(cleanupError)) errors.push(cleanupError);\n\t\t}\n\t\ttry {\n\t\t\tlease?.release();\n\t\t} catch (cleanupError) {\n\t\t\tif (!errors.includes(cleanupError)) errors.push(cleanupError);\n\t\t}\n\t\tif (errors.length === initialErrorCount) throw error;\n\t\tthrow new AggregateError(errors, \"Runtime creation and cleanup failed\");\n\t}\n}\n\nexport {\n\ttype AgentSessionRuntimeDiagnostic,\n\ttype AgentSessionServices,\n\ttype CreateAgentSessionFromServicesOptions,\n\ttype CreateAgentSessionServicesOptions,\n\tcreateAgentSessionFromServices,\n\tcreateAgentSessionServices,\n} from \"./agent-session-services.js\";\n"]}
|
|
1
|
+
{"version":3,"file":"agent-session-runtime.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport type { AgentSession } from \"./agent-session.js\";\nimport type { AgentSessionRuntimeConfig } from \"./agent-session-config.js\";\nimport type {\n\tAgentSessionCreationOptions,\n\tAgentSessionRuntimeDiagnostic,\n\tAgentSessionServices,\n} from \"./agent-session-services.js\";\nimport { isNoModelsAvailableMessage } from \"./auth-guidance.js\";\nimport type { ReplacedSessionContext, SessionShutdownEvent, SessionStartEvent } from \"./extensions/index.js\";\nimport { emitSessionShutdownEvent } from \"./extensions/runner.js\";\nimport type {\n\tCreateRlmSubagentRuntimeOptions,\n\tRlmChildAdmission,\n\tRlmSubagentRuntime,\n\tSubagentRuntimeHost,\n} from \"./rlm-runtime.js\";\nimport type { CreateAgentSessionResult } from \"./sdk.js\";\nimport { assertSessionCwdExists } from \"./session-cwd.js\";\nimport { SessionImportFileNotFoundError } from \"./session-import-errors.js\";\nimport { acquireSessionLease, canonicalSessionPath, type SessionLease } from \"./session-lease.js\";\nimport { SessionManager } from \"./session-manager.js\";\n\nexport { SessionImportFileNotFoundError } from \"./session-import-errors.js\";\n\nexport interface CreateAgentSessionRuntimeResult extends CreateAgentSessionResult {\n\tservices: AgentSessionServices;\n\tdiagnostics: AgentSessionRuntimeDiagnostic[];\n}\n\nexport type CreateAgentSessionRuntimeFactory = (options: {\n\tcwd: string;\n\tagentDir: string;\n\tsessionManager: SessionManager;\n\tsessionStartEvent?: SessionStartEvent;\n\tsessionConfig?: AgentSessionRuntimeConfig;\n\tsessionOptions?: AgentSessionCreationOptions;\n}) => Promise<CreateAgentSessionRuntimeResult>;\n\nexport type AgentSessionRuntimeKind = \"top-level\" | \"subagent\";\n\nexport interface AgentSessionRuntimeMetadata {\n\tkind: AgentSessionRuntimeKind;\n\tcreatedAt: number;\n\tparentActiveSessionId?: string;\n\tparentSessionId?: string;\n\tparentSessionFile?: string;\n\trlmChildId?: string;\n\trlmParentNodeId?: string;\n\trehydratedCompleted?: boolean;\n\tprompt?: string;\n\tspawnCode?: string;\n\tsessionDir?: string;\n}\n\nfunction extractUserMessageText(content: string | Array<{ type: string; text?: string }>): string {\n\tif (typeof content === \"string\") {\n\t\treturn content;\n\t}\n\n\treturn content\n\t\t.filter((part): part is { type: \"text\"; text: string } => part.type === \"text\" && typeof part.text === \"string\")\n\t\t.map((part) => part.text)\n\t\t.join(\"\");\n}\n\nexport interface AgentSessionRuntimeDisposeOptions {\n\t/** Set false when the session's artifact dir is deleted right after disposal (default true). */\n\tkernelSnapshot?: boolean;\n}\n\nexport class AgentSessionRuntime implements SubagentRuntimeHost {\n\tprivate rebindSession?: (session: AgentSession) => Promise<void>;\n\tprivate readonly sessionReplacedListeners = new Set<(session: AgentSession) => void | Promise<void>>();\n\tprivate runtimeEnvScope?: <T>(fn: () => Promise<T>) => Promise<T>;\n\tprivate beforeSessionInvalidate?: () => void;\n\tprivate subagentRuntimeHost?: SubagentRuntimeHost;\n\tprivate subagentRuntimes = new Map<string, AgentSessionRuntime>();\n\tprivate disposePromise?: Promise<void>;\n\tprivate autoRefineAdmissionClosed = false;\n\n\tconstructor(\n\t\tprivate _session: AgentSession,\n\t\tprivate _services: AgentSessionServices,\n\t\tprivate readonly createRuntime: CreateAgentSessionRuntimeFactory,\n\t\tprivate _diagnostics: AgentSessionRuntimeDiagnostic[] = [],\n\t\tprivate _modelFallbackMessage?: string,\n\t\tprivate readonly sessionConfig?: AgentSessionRuntimeConfig,\n\t\tprivate readonly _metadata: AgentSessionRuntimeMetadata = {\n\t\t\tkind: \"top-level\",\n\t\t\tcreatedAt: Date.now(),\n\t\t},\n\t\tprivate _sessionLease?: SessionLease,\n\t) {\n\t\tthis.bindRuntimeHost();\n\t}\n\n\tget services(): AgentSessionServices {\n\t\treturn this._services;\n\t}\n\n\tget session(): AgentSession {\n\t\treturn this._session;\n\t}\n\n\tget requests() {\n\t\treturn this._session.requests;\n\t}\n\n\tget cwd(): string {\n\t\treturn this._services.cwd;\n\t}\n\n\tget diagnostics(): readonly AgentSessionRuntimeDiagnostic[] {\n\t\treturn this._diagnostics;\n\t}\n\n\tget modelFallbackMessage(): string | undefined {\n\t\t// The \"no models available\" warning describes session state, not a\n\t\t// startup event: once the session gains a model (set_model, /login,\n\t\t// onboarding), the stored snapshot is stale and must not reach clients.\n\t\tif (isNoModelsAvailableMessage(this._modelFallbackMessage) && this._session.model) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn this._modelFallbackMessage;\n\t}\n\n\tget metadata(): AgentSessionRuntimeMetadata {\n\t\treturn { ...this._metadata };\n\t}\n\n\tget runtimeConfig(): AgentSessionRuntimeConfig | undefined {\n\t\treturn this.sessionConfig ? { ...this.sessionConfig } : undefined;\n\t}\n\n\tsetRebindSession(rebindSession?: (session: AgentSession) => Promise<void>): void {\n\t\tthis.rebindSession = rebindSession;\n\t}\n\n\tonSessionReplaced(listener: (session: AgentSession) => void | Promise<void>): () => void {\n\t\tthis.sessionReplacedListeners.add(listener);\n\t\treturn () => this.sessionReplacedListeners.delete(listener);\n\t}\n\n\t/**\n\t * Host-installed scope wrapping every runtime rebuild (new/switch/fork/\n\t * import and subagent creation), during which extensions re-load. The\n\t * daemon uses it to apply the session's client env for load-time captures.\n\t */\n\tsetRuntimeEnvScope(scope?: <T>(fn: () => Promise<T>) => Promise<T>): void {\n\t\tthis.runtimeEnvScope = scope;\n\t}\n\n\tprivate scopedBuild<T>(fn: () => Promise<T>): Promise<T> {\n\t\treturn this.runtimeEnvScope ? this.runtimeEnvScope(fn) : fn();\n\t}\n\n\tsetSubagentRuntimeHost(host?: SubagentRuntimeHost): void {\n\t\tthis.subagentRuntimeHost = host;\n\t\tthis.bindRuntimeHost();\n\t}\n\n\t/**\n\t * Set a synchronous callback that runs after `session_shutdown` handlers finish\n\t * but before the current session is invalidated.\n\t *\n\t * This is for host-owned UI teardown that must not yield to the event loop,\n\t * such as detaching extension-provided TUI components before the old extension\n\t * context becomes stale.\n\t */\n\tsetBeforeSessionInvalidate(beforeSessionInvalidate?: () => void): void {\n\t\tthis.beforeSessionInvalidate = beforeSessionInvalidate;\n\t}\n\n\tprivate async emitBeforeSwitch(\n\t\treason: \"new\" | \"resume\",\n\t\ttargetSessionFile?: string,\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst runner = this.session.extensionRunner;\n\t\tif (!runner.hasHandlers(\"session_before_switch\")) {\n\t\t\treturn { cancelled: false };\n\t\t}\n\n\t\tconst result = await runner.emit({\n\t\t\ttype: \"session_before_switch\",\n\t\t\treason,\n\t\t\ttargetSessionFile,\n\t\t});\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate async emitBeforeFork(\n\t\trunner: AgentSession[\"extensionRunner\"],\n\t\tentryId: string,\n\t\toptions: { position: \"before\" | \"at\" },\n\t): Promise<{ cancelled: boolean }> {\n\t\tif (!runner.hasHandlers(\"session_before_fork\")) {\n\t\t\treturn { cancelled: false };\n\t\t}\n\n\t\tconst result = await runner.emit({\n\t\t\ttype: \"session_before_fork\",\n\t\t\tentryId,\n\t\t\t...options,\n\t\t});\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate async teardownCurrent(reason: SessionShutdownEvent[\"reason\"], targetSessionFile?: string): Promise<void> {\n\t\tawait emitSessionShutdownEvent(this.session.extensionRunner, {\n\t\t\ttype: \"session_shutdown\",\n\t\t\treason,\n\t\t\ttargetSessionFile,\n\t\t});\n\t\tthis.beforeSessionInvalidate?.();\n\t\t// Await the kernel's final snapshot flush before invalidating the session.\n\t\tawait this.session.disposeAsync();\n\t\tawait this.disposeHostedSubagentRuntimes();\n\t}\n\n\t/** Native EOF closes new opportunistic work, including a session replaced by an already accepted command. */\n\tcloseAutoRefineAdmission(): void {\n\t\tthis.autoRefineAdmissionClosed = true;\n\t\tthis._session.closeAutoRefineAdmission();\n\t}\n\n\tprivate bindRuntimeHost(): void {\n\t\tif (this.autoRefineAdmissionClosed) this._session.closeAutoRefineAdmission();\n\t\tthis._session.setSubagentRuntimeHost(this.subagentRuntimeHost ?? this);\n\t}\n\n\tprivate apply(result: CreateAgentSessionRuntimeResult): void {\n\t\tthis._session = result.session;\n\t\tthis._services = result.services;\n\t\tthis._diagnostics = result.diagnostics;\n\t\tthis._modelFallbackMessage = result.modelFallbackMessage;\n\t\tthis.bindRuntimeHost();\n\t}\n\n\tprivate acquireReplacementLease(sessionPath: string | undefined): SessionLease | undefined {\n\t\tif (sessionPath && this._sessionLease?.sessionPath === canonicalSessionPath(sessionPath)) {\n\t\t\treturn this._sessionLease;\n\t\t}\n\t\treturn acquireSessionLease(sessionPath, this.services.agentDir);\n\t}\n\n\tprivate releaseUncommittedLease(lease: SessionLease | undefined): void {\n\t\tif (lease !== this._sessionLease) {\n\t\t\tlease?.release();\n\t\t}\n\t}\n\n\tprivate releaseSessionLease(): void {\n\t\tthis._sessionLease?.release();\n\t\tthis._sessionLease = undefined;\n\t}\n\n\tprivate commitReplacementLease(lease: SessionLease | undefined): void {\n\t\tif (lease === this._sessionLease) {\n\t\t\treturn;\n\t\t}\n\t\tconst previous = this._sessionLease;\n\t\tthis._sessionLease = lease;\n\t\tprevious?.release();\n\t}\n\n\tprivate async replaceWithManager(\n\t\tsessionManager: SessionManager,\n\t\tsource: { session: AgentSession; sessionFile: string | undefined; agentDir: string },\n\t\treason: \"new\" | \"resume\" | \"fork\",\n\t\tteardown = true,\n\t\tsetup?: (manager: SessionManager) => Promise<void>,\n\t): Promise<void> {\n\t\tlet lease: SessionLease | undefined;\n\t\tlet result: CreateAgentSessionRuntimeResult | undefined;\n\t\ttry {\n\t\t\tif (this.session !== source.session) throw new Error(\"Session changed before replacement\");\n\t\t\tlease = this.acquireReplacementLease(sessionManager.getSessionFile());\n\t\t\tif (teardown) await this.teardownCurrent(reason, sessionManager.getSessionFile());\n\t\t\tresult = await this.scopedBuild(() =>\n\t\t\t\tthis.createRuntime({\n\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\tagentDir: source.agentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason, previousSessionFile: source.sessionFile },\n\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t}),\n\t\t\t);\n\t\t\tawait result.session.initialize();\n\t\t\tif (setup) {\n\t\t\t\tawait setup(sessionManager);\n\t\t\t\tawait sessionManager.flushNow();\n\t\t\t\tresult.session.agent.state.messages = (await result.session.buildSessionContext()).messages;\n\t\t\t}\n\t\t\tif (this.session !== source.session) throw new Error(\"Session changed during replacement\");\n\t\t\tthis.apply(result);\n\t\t\tthis.commitReplacementLease(lease);\n\t\t} catch (error) {\n\t\t\ttry {\n\t\t\t\tif (result) await result.session.disposeAsync();\n\t\t\t\telse await sessionManager.close();\n\t\t\t} finally {\n\t\t\t\tthis.releaseUncommittedLease(lease);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async disposeSubagentRuntimes(): Promise<void> {\n\t\tconst runtimes = [...this.subagentRuntimes.values()];\n\t\tthis.subagentRuntimes.clear();\n\t\tlet disposeError: unknown;\n\t\tfor (const runtime of runtimes) {\n\t\t\ttry {\n\t\t\t\tawait runtime.dispose();\n\t\t\t} catch (error) {\n\t\t\t\tdisposeError ??= error;\n\t\t\t}\n\t\t}\n\t\tif (disposeError) {\n\t\t\tthrow disposeError;\n\t\t}\n\t}\n\n\tprivate async disposeHostedSubagentRuntimes(): Promise<void> {\n\t\tlet disposeError: unknown;\n\t\ttry {\n\t\t\tawait this.subagentRuntimeHost?.disposeRlmSubagentRuntimes?.();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tawait this.disposeSubagentRuntimes();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\tif (disposeError) {\n\t\t\tthrow disposeError;\n\t\t}\n\t}\n\n\tlistSubagentRuntimes(): readonly AgentSessionRuntime[] {\n\t\treturn [...this.subagentRuntimes.values()];\n\t}\n\n\tasync createRlmSubagentRuntime(options: CreateRlmSubagentRuntimeOptions): Promise<RlmSubagentRuntime> {\n\t\toptions = { ...options, contextMode: options.contextMode ?? options.parentSession.contextMode };\n\t\tconst requestTokenBudget =\n\t\t\toptions.requestTokenBudget === undefined\n\t\t\t\t? options.parentSession.requests.getRequestTokenBudgetOptions()\n\t\t\t\t: structuredClone(options.requestTokenBudget);\n\t\tif (requestTokenBudget !== undefined) options = { ...options, requestTokenBudget };\n\t\tconst admission = options.admission ?? (await options.parentSession.reserveRlmChildAdmission());\n\t\ttry {\n\t\t\tif (admission.parent !== options.parentSession)\n\t\t\t\tthrow new Error(\"RLM child admission belongs to another parent\");\n\t\t\tadmission.assertCurrent();\n\t\t\tadmission.claimFactory();\n\t\t\treturn await this.createAdmittedRlmSubagentRuntime({ ...options, admission });\n\t\t} finally {\n\t\t\tif (!options.admission) await admission.settle();\n\t\t}\n\t}\n\n\tprivate async createAdmittedRlmSubagentRuntime(\n\t\toptions: CreateRlmSubagentRuntimeOptions & { admission: RlmChildAdmission },\n\t): Promise<RlmSubagentRuntime> {\n\t\toptions.admission.assertCurrent();\n\t\tconst parent = options.parentSession;\n\t\tconst parentSessionFile = parent.sessionFile;\n\t\tconst parentSessionId = parent.sessionId;\n\t\tconst parentAgent = parent.sessionName ?? parentSessionId;\n\t\tconst agentDir = this.services.agentDir;\n\t\tconst sessionManager = await SessionManager.create(parent.sessionManager.getCwd(), options.sessionDir, {\n\t\t\tparentSession: parentSessionFile,\n\t\t\trlmDepth: options.rlmDepth,\n\t\t});\n\t\tlet runtime: AgentSessionRuntime;\n\t\tlet factoryStarted = false;\n\t\ttry {\n\t\t\toptions.admission.assertCurrent();\n\t\t\tfactoryStarted = true;\n\t\t\truntime = await this.scopedBuild(() =>\n\t\t\t\tcreateAgentSessionRuntime(this.createRuntime, {\n\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\tagentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"startup\" },\n\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\tsessionOptions: {\n\t\t\t\t\t\t...(options.requestTokenBudget === undefined\n\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t: { requestTokenBudget: options.requestTokenBudget }),\n\t\t\t\t\t\tcontextMode: options.contextMode,\n\t\t\t\t\t\tmodel: options.model,\n\t\t\t\t\t\tthinkingLevel: options.thinkingLevel,\n\t\t\t\t\t\tserviceTier: options.serviceTier,\n\t\t\t\t\t\tscopedModels: options.scopedModels,\n\t\t\t\t\t\tinitialActiveToolNames: options.activeToolNames,\n\t\t\t\t\t\tallowedToolNames: options.allowedToolNames,\n\t\t\t\t\t\tcustomTools: options.customTools,\n\t\t\t\t\t\tincludeGoals: options.includeGoals,\n\t\t\t\t\t\tincludeCompactSkill: options.includeCompactSkill,\n\t\t\t\t\t\trlmDepth: options.rlmDepth,\n\t\t\t\t\t\trlmMaxDepth: options.rlmMaxDepth,\n\t\t\t\t\t\trlmSessionDir: options.sessionDir,\n\t\t\t\t\t\trlmParentNodeId: options.rlmParentNodeId,\n\t\t\t\t\t\trlmParentAgent: parentAgent,\n\t\t\t\t\t\trlmChildAdmission: options.admission,\n\t\t\t\t\t\tsemanticParentSessionId: parentSessionId,\n\t\t\t\t\t\tsemanticSpawnedByRequestId: options.spawnedByRequestId,\n\t\t\t\t\t},\n\t\t\t\t\truntimeMetadata: {\n\t\t\t\t\t\tkind: \"subagent\",\n\t\t\t\t\t\tcreatedAt: Date.now(),\n\t\t\t\t\t\tparentSessionId: parentSessionId,\n\t\t\t\t\t\tparentSessionFile: parentSessionFile,\n\t\t\t\t\t\trlmChildId: options.id,\n\t\t\t\t\t\trlmParentNodeId: options.rlmParentNodeId,\n\t\t\t\t\t\tprompt: options.prompt,\n\t\t\t\t\t\tspawnCode: options.spawnCode,\n\t\t\t\t\t\tsessionDir: options.sessionDir,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\ttry {\n\t\t\t\tawait sessionManager.close();\n\t\t\t\tif (!factoryStarted) await options.admission.confirmUnboundCleanup();\n\t\t\t} catch (cleanupError) {\n\t\t\t\tif (cleanupError === error || (error instanceof AggregateError && error.errors.includes(cleanupError)))\n\t\t\t\t\tthrow error;\n\t\t\t\tthrow new AggregateError([error, cleanupError], \"RLM startup and cleanup failed\");\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\tthis.subagentRuntimes.set(options.id, runtime);\n\t\ttry {\n\t\t\tawait runtime.session.bindExtensions({});\n\t\t\tif (options.parentSession.getRlmChildRunStatus(options.id) === \"cancelled\") {\n\t\t\t\tthrow new Error(\"RLM subagent startup was cancelled\");\n\t\t\t}\n\t\t\tif (runtime.session.sessionName !== options.sessionName) {\n\t\t\t\tawait runtime.session.setSessionName(options.sessionName);\n\t\t\t}\n\t\t\tif (parent.getRlmChildRunStatus(options.id) === \"cancelled\") {\n\t\t\t\tthrow new Error(\"RLM subagent startup was cancelled\");\n\t\t\t}\n\t\t\toptions.admission.bind(runtime.session);\n\t\t\toptions.admission.assertCurrent();\n\t\t\toptions.onSessionPublished?.(runtime.session);\n\t\t} catch (error) {\n\t\t\tthis.subagentRuntimes.delete(options.id);\n\t\t\ttry {\n\t\t\t\tawait runtime.dispose();\n\t\t\t} catch (cleanupError) {\n\t\t\t\tif (cleanupError === error || (error instanceof AggregateError && error.errors.includes(cleanupError)))\n\t\t\t\t\tthrow error;\n\t\t\t\tthrow new AggregateError([error, cleanupError], \"RLM startup and cleanup failed\");\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\treturn runtime;\n\t}\n\n\tasync deleteRlmSubagentRuntime(childId: string, session: AgentSession): Promise<void> {\n\t\tconst runtime = this.subagentRuntimes.get(childId);\n\t\tif (!runtime) {\n\t\t\tawait session.disposeAsync();\n\t\t\treturn;\n\t\t}\n\t\tthis.subagentRuntimes.delete(childId);\n\t\tconst shouldDisposeStaleSession = runtime.session !== session;\n\t\ttry {\n\t\t\tawait runtime.dispose();\n\t\t} finally {\n\t\t\tif (shouldDisposeStaleSession) {\n\t\t\t\tawait session.disposeAsync();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async finishSessionReplacement(withSession?: (ctx: ReplacedSessionContext) => Promise<void>): Promise<void> {\n\t\tif (this.rebindSession) {\n\t\t\tawait this.rebindSession(this.session);\n\t\t}\n\t\tfor (const listener of this.sessionReplacedListeners) {\n\t\t\tawait listener(this.session);\n\t\t}\n\t\tif (withSession) {\n\t\t\tawait withSession(this.session.createReplacedSessionContext());\n\t\t}\n\t}\n\n\tprivate assertCanReplaceSession(): void {\n\t\tif (this.metadata.kind === \"subagent\" || this.session.hasRlmParentAdmission) {\n\t\t\tthrow new Error(\"Owned child-runtime replacement is unavailable; dispose or passivate the child instead\");\n\t\t}\n\t}\n\n\tasync switchSession(\n\t\tsessionPath: string,\n\t\toptions?: { cwdOverride?: string; withSession?: (ctx: ReplacedSessionContext) => Promise<void> },\n\t): Promise<{ cancelled: boolean }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst fallbackCwd = this.cwd;\n\t\tconst cwdOverride = options?.cwdOverride;\n\t\tconst withSession = options?.withSession;\n\t\tconst samePath =\n\t\t\tsource.sessionFile !== undefined &&\n\t\t\tcanonicalSessionPath(source.sessionFile) === canonicalSessionPath(sessionPath);\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", sessionPath);\n\t\tif (beforeResult.cancelled) return beforeResult;\n\t\tif (this.session !== source.session) throw new Error(\"Session changed before replacement\");\n\n\t\tif (samePath) {\n\t\t\tconst view = await SessionManager.openReadOnly(sessionPath, undefined, cwdOverride);\n\t\t\ttry {\n\t\t\t\tassertSessionCwdExists(view, fallbackCwd);\n\t\t\t} finally {\n\t\t\t\tawait view.close();\n\t\t\t}\n\t\t\tawait this.teardownCurrent(\"resume\", sessionPath);\n\t\t}\n\t\tconst sessionManager = await SessionManager.open(sessionPath, undefined, cwdOverride);\n\t\ttry {\n\t\t\tassertSessionCwdExists(sessionManager, fallbackCwd);\n\t\t} catch (error) {\n\t\t\tawait sessionManager.close();\n\t\t\tthrow error;\n\t\t}\n\t\tawait this.replaceWithManager(sessionManager, source, \"resume\", !samePath);\n\t\tawait this.finishSessionReplacement(withSession);\n\t\treturn { cancelled: false };\n\t}\n\n\tasync newSession(options?: {\n\t\tparentSession?: string;\n\t\tsetup?: (sessionManager: SessionManager) => Promise<void>;\n\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t}): Promise<{ cancelled: boolean }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst cwd = this.cwd;\n\t\tconst sessionDir = source.session.sessionManager.getSessionDir();\n\t\tconst headerOptions = options?.parentSession\n\t\t\t? {\n\t\t\t\t\tparentSession: options.parentSession,\n\t\t\t\t\trlmDepth: source.session.sessionManager.getHeader()?.rlmDepth ?? source.session.rlmDepth,\n\t\t\t\t}\n\t\t\t: undefined;\n\t\tconst setup = options?.setup;\n\t\tconst withSession = options?.withSession;\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"new\");\n\t\tif (beforeResult.cancelled) return beforeResult;\n\t\tconst sessionManager = await SessionManager.create(cwd, sessionDir, headerOptions);\n\t\tawait this.replaceWithManager(sessionManager, source, \"new\", true, setup);\n\t\tawait this.finishSessionReplacement(withSession);\n\t\treturn { cancelled: false };\n\t}\n\n\tasync fork(\n\t\tentryId: string,\n\t\toptions?: {\n\t\t\tposition?: \"before\" | \"at\";\n\t\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t\t},\n\t): Promise<{ cancelled: boolean; selectedText?: string }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst rlmDepth = source.session.rlmDepth;\n\t\tconst withSession = options?.withSession;\n\t\tconst position = options?.position ?? \"before\";\n\t\tconst runner = source.session.extensionRunner;\n\t\tconst preparation = Promise.allSettled([\n\t\t\tsource.session.sessionManager.prepareFork(entryId, { position, rlmDepth }),\n\t\t]);\n\t\tconst [beforeResult] = await Promise.allSettled([\n\t\t\tthis.emitBeforeFork(runner, entryId, { position }),\n\t\t\tpreparation,\n\t\t]);\n\t\t// Join the independent source read before handling hook failure or cancellation.\n\t\tif (beforeResult.status === \"rejected\") throw beforeResult.reason;\n\t\tif (beforeResult.value.cancelled) {\n\t\t\treturn { cancelled: true };\n\t\t}\n\t\tconst [preparedResult] = await preparation;\n\t\tif (preparedResult.status === \"rejected\") throw preparedResult.reason;\n\t\tconst prepared = preparedResult.value;\n\t\tif (this.session !== source.session) throw new Error(\"Session changed before replacement\");\n\n\t\tlet selectedText: string | undefined;\n\t\tif (position === \"before\") {\n\t\t\tconst selectedEntry = prepared.selectedEntry;\n\t\t\tif (selectedEntry.type !== \"message\" || selectedEntry.message.role !== \"user\") {\n\t\t\t\tthrow new Error(\"Invalid entry ID for forking\");\n\t\t\t}\n\t\t\tselectedText = extractUserMessageText(selectedEntry.message.content);\n\t\t}\n\n\t\tconst sessionManager = await prepared.create();\n\t\tawait this.replaceWithManager(sessionManager, source, \"fork\");\n\t\tawait this.finishSessionReplacement(withSession);\n\t\treturn { cancelled: false, selectedText };\n\t}\n\n\t/**\n\t * Import a session JSONL file and switch runtime state to the imported session.\n\t *\n\t * @returns `{ cancelled: true }` when cancelled by `session_before_switch`, otherwise `{ cancelled: false }`.\n\t * @throws {SessionImportFileNotFoundError} When the input path does not exist.\n\t * @throws {MissingSessionCwdError} When the imported session cwd cannot be resolved and no override is provided.\n\t */\n\tasync importFromJsonl(inputPath: string, cwdOverride?: string): Promise<{ cancelled: boolean }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst resolvedPath = resolve(inputPath);\n\t\tif (!existsSync(resolvedPath)) throw new SessionImportFileNotFoundError(resolvedPath);\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst sessionDir = source.session.sessionManager.getSessionDir();\n\t\tconst fallbackCwd = this.cwd;\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", resolvedPath);\n\t\tif (beforeResult.cancelled) return beforeResult;\n\n\t\tconst view = await SessionManager.openReadOnly(resolvedPath, undefined, cwdOverride);\n\t\tlet targetCwd: string;\n\t\ttry {\n\t\t\tassertSessionCwdExists(view, fallbackCwd);\n\t\t\ttargetCwd = view.getCwd();\n\t\t} finally {\n\t\t\tawait view.close();\n\t\t}\n\t\tconst sessionManager = await SessionManager.importRetainedFrom(resolvedPath, targetCwd, sessionDir);\n\t\tawait this.replaceWithManager(sessionManager, source, \"resume\");\n\t\tawait this.finishSessionReplacement();\n\t\treturn { cancelled: false };\n\t}\n\n\tprivate async disposeOnce(options: AgentSessionRuntimeDisposeOptions): Promise<void> {\n\t\tlet disposeError: unknown;\n\t\ttry {\n\t\t\tawait emitSessionShutdownEvent(this.session.extensionRunner, {\n\t\t\t\ttype: \"session_shutdown\",\n\t\t\t\treason: \"quit\",\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tthis.beforeSessionInvalidate?.();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\t// Await the kernel's final snapshot flush before tearing the session down.\n\t\t\tawait this.session.disposeAsync({ kernelSnapshot: options.kernelSnapshot ?? true });\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tawait this.disposeHostedSubagentRuntimes();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tif (disposeError) {\n\t\t\t\tthrow disposeError;\n\t\t\t}\n\t\t} finally {\n\t\t\tthis.releaseSessionLease();\n\t\t}\n\t}\n\n\tasync dispose(options?: AgentSessionRuntimeDisposeOptions): Promise<void> {\n\t\tif (!this.disposePromise) {\n\t\t\tthis.disposePromise = this.disposeOnce(options ?? {});\n\t\t}\n\t\tawait this.disposePromise;\n\t}\n}\n\nexport async function createAgentSessionRuntime(\n\tcreateRuntime: CreateAgentSessionRuntimeFactory,\n\toptions: {\n\t\tcwd: string;\n\t\tagentDir: string;\n\t\tsessionManager: SessionManager;\n\t\tsessionStartEvent?: SessionStartEvent;\n\t\tsessionConfig?: AgentSessionRuntimeConfig;\n\t\tsessionOptions?: AgentSessionCreationOptions;\n\t\truntimeMetadata?: AgentSessionRuntimeMetadata;\n\t\tsessionLease?: SessionLease;\n\t},\n): Promise<AgentSessionRuntime> {\n\tconst { sessionLease, ...runtimeOptions } = options;\n\tlet lease: SessionLease | undefined;\n\tlet result: CreateAgentSessionRuntimeResult | undefined;\n\ttry {\n\t\tlease =\n\t\t\tsessionLease ?? acquireSessionLease(runtimeOptions.sessionManager.getSessionFile(), runtimeOptions.agentDir);\n\t\tassertSessionCwdExists(runtimeOptions.sessionManager, runtimeOptions.cwd);\n\t\tresult = await createRuntime(runtimeOptions);\n\t\tawait result.session.initialize();\n\t\treturn new AgentSessionRuntime(\n\t\t\tresult.session,\n\t\t\tresult.services,\n\t\t\tcreateRuntime,\n\t\t\tresult.diagnostics,\n\t\t\tresult.modelFallbackMessage,\n\t\t\truntimeOptions.sessionConfig,\n\t\t\truntimeOptions.runtimeMetadata,\n\t\t\tlease,\n\t\t);\n\t} catch (error) {\n\t\tconst errors: unknown[] = error instanceof AggregateError ? [...error.errors] : [error];\n\t\tconst initialErrorCount = errors.length;\n\t\ttry {\n\t\t\tconst admitted =\n\t\t\t\truntimeOptions.sessionOptions?.rlmChildAdmission?.session ??\n\t\t\t\truntimeOptions.sessionOptions?.rlmRootAdmission?.session;\n\t\t\tconst failedSession =\n\t\t\t\tresult?.session ?? (admitted?.sessionManager === runtimeOptions.sessionManager ? admitted : undefined);\n\t\t\tif (failedSession) await failedSession.disposeAsync();\n\t\t\telse await runtimeOptions.sessionManager.close();\n\t\t} catch (cleanupError) {\n\t\t\tif (!errors.includes(cleanupError)) errors.push(cleanupError);\n\t\t}\n\t\ttry {\n\t\t\tlease?.release();\n\t\t} catch (cleanupError) {\n\t\t\tif (!errors.includes(cleanupError)) errors.push(cleanupError);\n\t\t}\n\t\tif (errors.length === initialErrorCount) throw error;\n\t\tthrow new AggregateError(errors, \"Runtime creation and cleanup failed\");\n\t}\n}\n\nexport {\n\ttype AgentSessionRuntimeDiagnostic,\n\ttype AgentSessionServices,\n\ttype CreateAgentSessionFromServicesOptions,\n\ttype CreateAgentSessionServicesOptions,\n\tcreateAgentSessionFromServices,\n\tcreateAgentSessionServices,\n} from \"./agent-session-services.js\";\n"]}
|
|
@@ -268,7 +268,7 @@ export class AgentSessionRuntime {
|
|
|
268
268
|
: structuredClone(options.requestTokenBudget);
|
|
269
269
|
if (requestTokenBudget !== undefined)
|
|
270
270
|
options = { ...options, requestTokenBudget };
|
|
271
|
-
const admission = options.admission ?? options.parentSession.reserveRlmChildAdmission();
|
|
271
|
+
const admission = options.admission ?? (await options.parentSession.reserveRlmChildAdmission());
|
|
272
272
|
try {
|
|
273
273
|
if (admission.parent !== options.parentSession)
|
|
274
274
|
throw new Error("RLM child admission belongs to another parent");
|
|
@@ -278,7 +278,7 @@ export class AgentSessionRuntime {
|
|
|
278
278
|
}
|
|
279
279
|
finally {
|
|
280
280
|
if (!options.admission)
|
|
281
|
-
admission.settle();
|
|
281
|
+
await admission.settle();
|
|
282
282
|
}
|
|
283
283
|
}
|
|
284
284
|
async createAdmittedRlmSubagentRuntime(options) {
|
|
@@ -343,7 +343,7 @@ export class AgentSessionRuntime {
|
|
|
343
343
|
try {
|
|
344
344
|
await sessionManager.close();
|
|
345
345
|
if (!factoryStarted)
|
|
346
|
-
options.admission.confirmUnboundCleanup();
|
|
346
|
+
await options.admission.confirmUnboundCleanup();
|
|
347
347
|
}
|
|
348
348
|
catch (cleanupError) {
|
|
349
349
|
if (cleanupError === error || (error instanceof AggregateError && error.errors.includes(cleanupError)))
|
|
@@ -604,7 +604,8 @@ export async function createAgentSessionRuntime(createRuntime, options) {
|
|
|
604
604
|
const errors = error instanceof AggregateError ? [...error.errors] : [error];
|
|
605
605
|
const initialErrorCount = errors.length;
|
|
606
606
|
try {
|
|
607
|
-
const admitted = runtimeOptions.sessionOptions?.rlmChildAdmission?.session
|
|
607
|
+
const admitted = runtimeOptions.sessionOptions?.rlmChildAdmission?.session ??
|
|
608
|
+
runtimeOptions.sessionOptions?.rlmRootAdmission?.session;
|
|
608
609
|
const failedSession = result?.session ?? (admitted?.sessionManager === runtimeOptions.sessionManager ? admitted : undefined);
|
|
609
610
|
if (failedSession)
|
|
610
611
|
await failedSession.disposeAsync();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-session-runtime.js","sourceRoot":"","sources":["../../src/core/agent-session-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport type { AgentSession } from \"./agent-session.js\";\nimport type { AgentSessionRuntimeConfig } from \"./agent-session-config.js\";\nimport type {\n\tAgentSessionCreationOptions,\n\tAgentSessionRuntimeDiagnostic,\n\tAgentSessionServices,\n} from \"./agent-session-services.js\";\nimport { isNoModelsAvailableMessage } from \"./auth-guidance.js\";\nimport type { ReplacedSessionContext, SessionShutdownEvent, SessionStartEvent } from \"./extensions/index.js\";\nimport { emitSessionShutdownEvent } from \"./extensions/runner.js\";\nimport type {\n\tCreateRlmSubagentRuntimeOptions,\n\tRlmChildAdmission,\n\tRlmSubagentRuntime,\n\tSubagentRuntimeHost,\n} from \"./rlm-runtime.js\";\nimport type { CreateAgentSessionResult } from \"./sdk.js\";\nimport { assertSessionCwdExists } from \"./session-cwd.js\";\nimport { SessionImportFileNotFoundError } from \"./session-import-errors.js\";\nimport { acquireSessionLease, canonicalSessionPath, type SessionLease } from \"./session-lease.js\";\nimport { SessionManager } from \"./session-manager.js\";\n\nexport { SessionImportFileNotFoundError } from \"./session-import-errors.js\";\n\nexport interface CreateAgentSessionRuntimeResult extends CreateAgentSessionResult {\n\tservices: AgentSessionServices;\n\tdiagnostics: AgentSessionRuntimeDiagnostic[];\n}\n\nexport type CreateAgentSessionRuntimeFactory = (options: {\n\tcwd: string;\n\tagentDir: string;\n\tsessionManager: SessionManager;\n\tsessionStartEvent?: SessionStartEvent;\n\tsessionConfig?: AgentSessionRuntimeConfig;\n\tsessionOptions?: AgentSessionCreationOptions;\n}) => Promise<CreateAgentSessionRuntimeResult>;\n\nexport type AgentSessionRuntimeKind = \"top-level\" | \"subagent\";\n\nexport interface AgentSessionRuntimeMetadata {\n\tkind: AgentSessionRuntimeKind;\n\tcreatedAt: number;\n\tparentActiveSessionId?: string;\n\tparentSessionId?: string;\n\tparentSessionFile?: string;\n\trlmChildId?: string;\n\trlmParentNodeId?: string;\n\trehydratedCompleted?: boolean;\n\tprompt?: string;\n\tspawnCode?: string;\n\tsessionDir?: string;\n}\n\nfunction extractUserMessageText(content: string | Array<{ type: string; text?: string }>): string {\n\tif (typeof content === \"string\") {\n\t\treturn content;\n\t}\n\n\treturn content\n\t\t.filter((part): part is { type: \"text\"; text: string } => part.type === \"text\" && typeof part.text === \"string\")\n\t\t.map((part) => part.text)\n\t\t.join(\"\");\n}\n\nexport interface AgentSessionRuntimeDisposeOptions {\n\t/** Set false when the session's artifact dir is deleted right after disposal (default true). */\n\tkernelSnapshot?: boolean;\n}\n\nexport class AgentSessionRuntime implements SubagentRuntimeHost {\n\tprivate rebindSession?: (session: AgentSession) => Promise<void>;\n\tprivate readonly sessionReplacedListeners = new Set<(session: AgentSession) => void | Promise<void>>();\n\tprivate runtimeEnvScope?: <T>(fn: () => Promise<T>) => Promise<T>;\n\tprivate beforeSessionInvalidate?: () => void;\n\tprivate subagentRuntimeHost?: SubagentRuntimeHost;\n\tprivate subagentRuntimes = new Map<string, AgentSessionRuntime>();\n\tprivate disposePromise?: Promise<void>;\n\tprivate autoRefineAdmissionClosed = false;\n\n\tconstructor(\n\t\tprivate _session: AgentSession,\n\t\tprivate _services: AgentSessionServices,\n\t\tprivate readonly createRuntime: CreateAgentSessionRuntimeFactory,\n\t\tprivate _diagnostics: AgentSessionRuntimeDiagnostic[] = [],\n\t\tprivate _modelFallbackMessage?: string,\n\t\tprivate readonly sessionConfig?: AgentSessionRuntimeConfig,\n\t\tprivate readonly _metadata: AgentSessionRuntimeMetadata = {\n\t\t\tkind: \"top-level\",\n\t\t\tcreatedAt: Date.now(),\n\t\t},\n\t\tprivate _sessionLease?: SessionLease,\n\t) {\n\t\tthis.bindRuntimeHost();\n\t}\n\n\tget services(): AgentSessionServices {\n\t\treturn this._services;\n\t}\n\n\tget session(): AgentSession {\n\t\treturn this._session;\n\t}\n\n\tget requests() {\n\t\treturn this._session.requests;\n\t}\n\n\tget cwd(): string {\n\t\treturn this._services.cwd;\n\t}\n\n\tget diagnostics(): readonly AgentSessionRuntimeDiagnostic[] {\n\t\treturn this._diagnostics;\n\t}\n\n\tget modelFallbackMessage(): string | undefined {\n\t\t// The \"no models available\" warning describes session state, not a\n\t\t// startup event: once the session gains a model (set_model, /login,\n\t\t// onboarding), the stored snapshot is stale and must not reach clients.\n\t\tif (isNoModelsAvailableMessage(this._modelFallbackMessage) && this._session.model) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn this._modelFallbackMessage;\n\t}\n\n\tget metadata(): AgentSessionRuntimeMetadata {\n\t\treturn { ...this._metadata };\n\t}\n\n\tget runtimeConfig(): AgentSessionRuntimeConfig | undefined {\n\t\treturn this.sessionConfig ? { ...this.sessionConfig } : undefined;\n\t}\n\n\tsetRebindSession(rebindSession?: (session: AgentSession) => Promise<void>): void {\n\t\tthis.rebindSession = rebindSession;\n\t}\n\n\tonSessionReplaced(listener: (session: AgentSession) => void | Promise<void>): () => void {\n\t\tthis.sessionReplacedListeners.add(listener);\n\t\treturn () => this.sessionReplacedListeners.delete(listener);\n\t}\n\n\t/**\n\t * Host-installed scope wrapping every runtime rebuild (new/switch/fork/\n\t * import and subagent creation), during which extensions re-load. The\n\t * daemon uses it to apply the session's client env for load-time captures.\n\t */\n\tsetRuntimeEnvScope(scope?: <T>(fn: () => Promise<T>) => Promise<T>): void {\n\t\tthis.runtimeEnvScope = scope;\n\t}\n\n\tprivate scopedBuild<T>(fn: () => Promise<T>): Promise<T> {\n\t\treturn this.runtimeEnvScope ? this.runtimeEnvScope(fn) : fn();\n\t}\n\n\tsetSubagentRuntimeHost(host?: SubagentRuntimeHost): void {\n\t\tthis.subagentRuntimeHost = host;\n\t\tthis.bindRuntimeHost();\n\t}\n\n\t/**\n\t * Set a synchronous callback that runs after `session_shutdown` handlers finish\n\t * but before the current session is invalidated.\n\t *\n\t * This is for host-owned UI teardown that must not yield to the event loop,\n\t * such as detaching extension-provided TUI components before the old extension\n\t * context becomes stale.\n\t */\n\tsetBeforeSessionInvalidate(beforeSessionInvalidate?: () => void): void {\n\t\tthis.beforeSessionInvalidate = beforeSessionInvalidate;\n\t}\n\n\tprivate async emitBeforeSwitch(\n\t\treason: \"new\" | \"resume\",\n\t\ttargetSessionFile?: string,\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst runner = this.session.extensionRunner;\n\t\tif (!runner.hasHandlers(\"session_before_switch\")) {\n\t\t\treturn { cancelled: false };\n\t\t}\n\n\t\tconst result = await runner.emit({\n\t\t\ttype: \"session_before_switch\",\n\t\t\treason,\n\t\t\ttargetSessionFile,\n\t\t});\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate async emitBeforeFork(\n\t\trunner: AgentSession[\"extensionRunner\"],\n\t\tentryId: string,\n\t\toptions: { position: \"before\" | \"at\" },\n\t): Promise<{ cancelled: boolean }> {\n\t\tif (!runner.hasHandlers(\"session_before_fork\")) {\n\t\t\treturn { cancelled: false };\n\t\t}\n\n\t\tconst result = await runner.emit({\n\t\t\ttype: \"session_before_fork\",\n\t\t\tentryId,\n\t\t\t...options,\n\t\t});\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate async teardownCurrent(reason: SessionShutdownEvent[\"reason\"], targetSessionFile?: string): Promise<void> {\n\t\tawait emitSessionShutdownEvent(this.session.extensionRunner, {\n\t\t\ttype: \"session_shutdown\",\n\t\t\treason,\n\t\t\ttargetSessionFile,\n\t\t});\n\t\tthis.beforeSessionInvalidate?.();\n\t\t// Await the kernel's final snapshot flush before invalidating the session.\n\t\tawait this.session.disposeAsync();\n\t\tawait this.disposeHostedSubagentRuntimes();\n\t}\n\n\t/** Native EOF closes new opportunistic work, including a session replaced by an already accepted command. */\n\tcloseAutoRefineAdmission(): void {\n\t\tthis.autoRefineAdmissionClosed = true;\n\t\tthis._session.closeAutoRefineAdmission();\n\t}\n\n\tprivate bindRuntimeHost(): void {\n\t\tif (this.autoRefineAdmissionClosed) this._session.closeAutoRefineAdmission();\n\t\tthis._session.setSubagentRuntimeHost(this.subagentRuntimeHost ?? this);\n\t}\n\n\tprivate apply(result: CreateAgentSessionRuntimeResult): void {\n\t\tthis._session = result.session;\n\t\tthis._services = result.services;\n\t\tthis._diagnostics = result.diagnostics;\n\t\tthis._modelFallbackMessage = result.modelFallbackMessage;\n\t\tthis.bindRuntimeHost();\n\t}\n\n\tprivate acquireReplacementLease(sessionPath: string | undefined): SessionLease | undefined {\n\t\tif (sessionPath && this._sessionLease?.sessionPath === canonicalSessionPath(sessionPath)) {\n\t\t\treturn this._sessionLease;\n\t\t}\n\t\treturn acquireSessionLease(sessionPath, this.services.agentDir);\n\t}\n\n\tprivate releaseUncommittedLease(lease: SessionLease | undefined): void {\n\t\tif (lease !== this._sessionLease) {\n\t\t\tlease?.release();\n\t\t}\n\t}\n\n\tprivate releaseSessionLease(): void {\n\t\tthis._sessionLease?.release();\n\t\tthis._sessionLease = undefined;\n\t}\n\n\tprivate commitReplacementLease(lease: SessionLease | undefined): void {\n\t\tif (lease === this._sessionLease) {\n\t\t\treturn;\n\t\t}\n\t\tconst previous = this._sessionLease;\n\t\tthis._sessionLease = lease;\n\t\tprevious?.release();\n\t}\n\n\tprivate async replaceWithManager(\n\t\tsessionManager: SessionManager,\n\t\tsource: { session: AgentSession; sessionFile: string | undefined; agentDir: string },\n\t\treason: \"new\" | \"resume\" | \"fork\",\n\t\tteardown = true,\n\t\tsetup?: (manager: SessionManager) => Promise<void>,\n\t): Promise<void> {\n\t\tlet lease: SessionLease | undefined;\n\t\tlet result: CreateAgentSessionRuntimeResult | undefined;\n\t\ttry {\n\t\t\tif (this.session !== source.session) throw new Error(\"Session changed before replacement\");\n\t\t\tlease = this.acquireReplacementLease(sessionManager.getSessionFile());\n\t\t\tif (teardown) await this.teardownCurrent(reason, sessionManager.getSessionFile());\n\t\t\tresult = await this.scopedBuild(() =>\n\t\t\t\tthis.createRuntime({\n\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\tagentDir: source.agentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason, previousSessionFile: source.sessionFile },\n\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t}),\n\t\t\t);\n\t\t\tawait result.session.initialize();\n\t\t\tif (setup) {\n\t\t\t\tawait setup(sessionManager);\n\t\t\t\tawait sessionManager.flushNow();\n\t\t\t\tresult.session.agent.state.messages = (await result.session.buildSessionContext()).messages;\n\t\t\t}\n\t\t\tif (this.session !== source.session) throw new Error(\"Session changed during replacement\");\n\t\t\tthis.apply(result);\n\t\t\tthis.commitReplacementLease(lease);\n\t\t} catch (error) {\n\t\t\ttry {\n\t\t\t\tif (result) await result.session.disposeAsync();\n\t\t\t\telse await sessionManager.close();\n\t\t\t} finally {\n\t\t\t\tthis.releaseUncommittedLease(lease);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async disposeSubagentRuntimes(): Promise<void> {\n\t\tconst runtimes = [...this.subagentRuntimes.values()];\n\t\tthis.subagentRuntimes.clear();\n\t\tlet disposeError: unknown;\n\t\tfor (const runtime of runtimes) {\n\t\t\ttry {\n\t\t\t\tawait runtime.dispose();\n\t\t\t} catch (error) {\n\t\t\t\tdisposeError ??= error;\n\t\t\t}\n\t\t}\n\t\tif (disposeError) {\n\t\t\tthrow disposeError;\n\t\t}\n\t}\n\n\tprivate async disposeHostedSubagentRuntimes(): Promise<void> {\n\t\tlet disposeError: unknown;\n\t\ttry {\n\t\t\tawait this.subagentRuntimeHost?.disposeRlmSubagentRuntimes?.();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tawait this.disposeSubagentRuntimes();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\tif (disposeError) {\n\t\t\tthrow disposeError;\n\t\t}\n\t}\n\n\tlistSubagentRuntimes(): readonly AgentSessionRuntime[] {\n\t\treturn [...this.subagentRuntimes.values()];\n\t}\n\n\tasync createRlmSubagentRuntime(options: CreateRlmSubagentRuntimeOptions): Promise<RlmSubagentRuntime> {\n\t\toptions = { ...options, contextMode: options.contextMode ?? options.parentSession.contextMode };\n\t\tconst requestTokenBudget =\n\t\t\toptions.requestTokenBudget === undefined\n\t\t\t\t? options.parentSession.requests.getRequestTokenBudgetOptions()\n\t\t\t\t: structuredClone(options.requestTokenBudget);\n\t\tif (requestTokenBudget !== undefined) options = { ...options, requestTokenBudget };\n\t\tconst admission = options.admission ?? options.parentSession.reserveRlmChildAdmission();\n\t\ttry {\n\t\t\tif (admission.parent !== options.parentSession)\n\t\t\t\tthrow new Error(\"RLM child admission belongs to another parent\");\n\t\t\tadmission.assertCurrent();\n\t\t\tadmission.claimFactory();\n\t\t\treturn await this.createAdmittedRlmSubagentRuntime({ ...options, admission });\n\t\t} finally {\n\t\t\tif (!options.admission) admission.settle();\n\t\t}\n\t}\n\n\tprivate async createAdmittedRlmSubagentRuntime(\n\t\toptions: CreateRlmSubagentRuntimeOptions & { admission: RlmChildAdmission },\n\t): Promise<RlmSubagentRuntime> {\n\t\toptions.admission.assertCurrent();\n\t\tconst parent = options.parentSession;\n\t\tconst parentSessionFile = parent.sessionFile;\n\t\tconst parentSessionId = parent.sessionId;\n\t\tconst parentAgent = parent.sessionName ?? parentSessionId;\n\t\tconst agentDir = this.services.agentDir;\n\t\tconst sessionManager = await SessionManager.create(parent.sessionManager.getCwd(), options.sessionDir, {\n\t\t\tparentSession: parentSessionFile,\n\t\t\trlmDepth: options.rlmDepth,\n\t\t});\n\t\tlet runtime: AgentSessionRuntime;\n\t\tlet factoryStarted = false;\n\t\ttry {\n\t\t\toptions.admission.assertCurrent();\n\t\t\tfactoryStarted = true;\n\t\t\truntime = await this.scopedBuild(() =>\n\t\t\t\tcreateAgentSessionRuntime(this.createRuntime, {\n\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\tagentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"startup\" },\n\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\tsessionOptions: {\n\t\t\t\t\t\t...(options.requestTokenBudget === undefined\n\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t: { requestTokenBudget: options.requestTokenBudget }),\n\t\t\t\t\t\tcontextMode: options.contextMode,\n\t\t\t\t\t\tmodel: options.model,\n\t\t\t\t\t\tthinkingLevel: options.thinkingLevel,\n\t\t\t\t\t\tserviceTier: options.serviceTier,\n\t\t\t\t\t\tscopedModels: options.scopedModels,\n\t\t\t\t\t\tinitialActiveToolNames: options.activeToolNames,\n\t\t\t\t\t\tallowedToolNames: options.allowedToolNames,\n\t\t\t\t\t\tcustomTools: options.customTools,\n\t\t\t\t\t\tincludeGoals: options.includeGoals,\n\t\t\t\t\t\tincludeCompactSkill: options.includeCompactSkill,\n\t\t\t\t\t\trlmDepth: options.rlmDepth,\n\t\t\t\t\t\trlmMaxDepth: options.rlmMaxDepth,\n\t\t\t\t\t\trlmSessionDir: options.sessionDir,\n\t\t\t\t\t\trlmParentNodeId: options.rlmParentNodeId,\n\t\t\t\t\t\trlmParentAgent: parentAgent,\n\t\t\t\t\t\trlmChildAdmission: options.admission,\n\t\t\t\t\t\tsemanticParentSessionId: parentSessionId,\n\t\t\t\t\t\tsemanticSpawnedByRequestId: options.spawnedByRequestId,\n\t\t\t\t\t},\n\t\t\t\t\truntimeMetadata: {\n\t\t\t\t\t\tkind: \"subagent\",\n\t\t\t\t\t\tcreatedAt: Date.now(),\n\t\t\t\t\t\tparentSessionId: parentSessionId,\n\t\t\t\t\t\tparentSessionFile: parentSessionFile,\n\t\t\t\t\t\trlmChildId: options.id,\n\t\t\t\t\t\trlmParentNodeId: options.rlmParentNodeId,\n\t\t\t\t\t\tprompt: options.prompt,\n\t\t\t\t\t\tspawnCode: options.spawnCode,\n\t\t\t\t\t\tsessionDir: options.sessionDir,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\ttry {\n\t\t\t\tawait sessionManager.close();\n\t\t\t\tif (!factoryStarted) options.admission.confirmUnboundCleanup();\n\t\t\t} catch (cleanupError) {\n\t\t\t\tif (cleanupError === error || (error instanceof AggregateError && error.errors.includes(cleanupError)))\n\t\t\t\t\tthrow error;\n\t\t\t\tthrow new AggregateError([error, cleanupError], \"RLM startup and cleanup failed\");\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\tthis.subagentRuntimes.set(options.id, runtime);\n\t\ttry {\n\t\t\tawait runtime.session.bindExtensions({});\n\t\t\tif (options.parentSession.getRlmChildRunStatus(options.id) === \"cancelled\") {\n\t\t\t\tthrow new Error(\"RLM subagent startup was cancelled\");\n\t\t\t}\n\t\t\tif (runtime.session.sessionName !== options.sessionName) {\n\t\t\t\tawait runtime.session.setSessionName(options.sessionName);\n\t\t\t}\n\t\t\tif (parent.getRlmChildRunStatus(options.id) === \"cancelled\") {\n\t\t\t\tthrow new Error(\"RLM subagent startup was cancelled\");\n\t\t\t}\n\t\t\toptions.admission.bind(runtime.session);\n\t\t\toptions.admission.assertCurrent();\n\t\t\toptions.onSessionPublished?.(runtime.session);\n\t\t} catch (error) {\n\t\t\tthis.subagentRuntimes.delete(options.id);\n\t\t\ttry {\n\t\t\t\tawait runtime.dispose();\n\t\t\t} catch (cleanupError) {\n\t\t\t\tif (cleanupError === error || (error instanceof AggregateError && error.errors.includes(cleanupError)))\n\t\t\t\t\tthrow error;\n\t\t\t\tthrow new AggregateError([error, cleanupError], \"RLM startup and cleanup failed\");\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\treturn runtime;\n\t}\n\n\tasync deleteRlmSubagentRuntime(childId: string, session: AgentSession): Promise<void> {\n\t\tconst runtime = this.subagentRuntimes.get(childId);\n\t\tif (!runtime) {\n\t\t\tawait session.disposeAsync();\n\t\t\treturn;\n\t\t}\n\t\tthis.subagentRuntimes.delete(childId);\n\t\tconst shouldDisposeStaleSession = runtime.session !== session;\n\t\ttry {\n\t\t\tawait runtime.dispose();\n\t\t} finally {\n\t\t\tif (shouldDisposeStaleSession) {\n\t\t\t\tawait session.disposeAsync();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async finishSessionReplacement(withSession?: (ctx: ReplacedSessionContext) => Promise<void>): Promise<void> {\n\t\tif (this.rebindSession) {\n\t\t\tawait this.rebindSession(this.session);\n\t\t}\n\t\tfor (const listener of this.sessionReplacedListeners) {\n\t\t\tawait listener(this.session);\n\t\t}\n\t\tif (withSession) {\n\t\t\tawait withSession(this.session.createReplacedSessionContext());\n\t\t}\n\t}\n\n\tprivate assertCanReplaceSession(): void {\n\t\tif (this.metadata.kind === \"subagent\" || this.session.hasRlmParentAdmission) {\n\t\t\tthrow new Error(\"Owned child-runtime replacement is unavailable; dispose or passivate the child instead\");\n\t\t}\n\t}\n\n\tasync switchSession(\n\t\tsessionPath: string,\n\t\toptions?: { cwdOverride?: string; withSession?: (ctx: ReplacedSessionContext) => Promise<void> },\n\t): Promise<{ cancelled: boolean }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst fallbackCwd = this.cwd;\n\t\tconst cwdOverride = options?.cwdOverride;\n\t\tconst withSession = options?.withSession;\n\t\tconst samePath =\n\t\t\tsource.sessionFile !== undefined &&\n\t\t\tcanonicalSessionPath(source.sessionFile) === canonicalSessionPath(sessionPath);\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", sessionPath);\n\t\tif (beforeResult.cancelled) return beforeResult;\n\t\tif (this.session !== source.session) throw new Error(\"Session changed before replacement\");\n\n\t\tif (samePath) {\n\t\t\tconst view = await SessionManager.openReadOnly(sessionPath, undefined, cwdOverride);\n\t\t\ttry {\n\t\t\t\tassertSessionCwdExists(view, fallbackCwd);\n\t\t\t} finally {\n\t\t\t\tawait view.close();\n\t\t\t}\n\t\t\tawait this.teardownCurrent(\"resume\", sessionPath);\n\t\t}\n\t\tconst sessionManager = await SessionManager.open(sessionPath, undefined, cwdOverride);\n\t\ttry {\n\t\t\tassertSessionCwdExists(sessionManager, fallbackCwd);\n\t\t} catch (error) {\n\t\t\tawait sessionManager.close();\n\t\t\tthrow error;\n\t\t}\n\t\tawait this.replaceWithManager(sessionManager, source, \"resume\", !samePath);\n\t\tawait this.finishSessionReplacement(withSession);\n\t\treturn { cancelled: false };\n\t}\n\n\tasync newSession(options?: {\n\t\tparentSession?: string;\n\t\tsetup?: (sessionManager: SessionManager) => Promise<void>;\n\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t}): Promise<{ cancelled: boolean }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst cwd = this.cwd;\n\t\tconst sessionDir = source.session.sessionManager.getSessionDir();\n\t\tconst headerOptions = options?.parentSession\n\t\t\t? {\n\t\t\t\t\tparentSession: options.parentSession,\n\t\t\t\t\trlmDepth: source.session.sessionManager.getHeader()?.rlmDepth ?? source.session.rlmDepth,\n\t\t\t\t}\n\t\t\t: undefined;\n\t\tconst setup = options?.setup;\n\t\tconst withSession = options?.withSession;\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"new\");\n\t\tif (beforeResult.cancelled) return beforeResult;\n\t\tconst sessionManager = await SessionManager.create(cwd, sessionDir, headerOptions);\n\t\tawait this.replaceWithManager(sessionManager, source, \"new\", true, setup);\n\t\tawait this.finishSessionReplacement(withSession);\n\t\treturn { cancelled: false };\n\t}\n\n\tasync fork(\n\t\tentryId: string,\n\t\toptions?: {\n\t\t\tposition?: \"before\" | \"at\";\n\t\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t\t},\n\t): Promise<{ cancelled: boolean; selectedText?: string }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst rlmDepth = source.session.rlmDepth;\n\t\tconst withSession = options?.withSession;\n\t\tconst position = options?.position ?? \"before\";\n\t\tconst runner = source.session.extensionRunner;\n\t\tconst preparation = Promise.allSettled([\n\t\t\tsource.session.sessionManager.prepareFork(entryId, { position, rlmDepth }),\n\t\t]);\n\t\tconst [beforeResult] = await Promise.allSettled([\n\t\t\tthis.emitBeforeFork(runner, entryId, { position }),\n\t\t\tpreparation,\n\t\t]);\n\t\t// Join the independent source read before handling hook failure or cancellation.\n\t\tif (beforeResult.status === \"rejected\") throw beforeResult.reason;\n\t\tif (beforeResult.value.cancelled) {\n\t\t\treturn { cancelled: true };\n\t\t}\n\t\tconst [preparedResult] = await preparation;\n\t\tif (preparedResult.status === \"rejected\") throw preparedResult.reason;\n\t\tconst prepared = preparedResult.value;\n\t\tif (this.session !== source.session) throw new Error(\"Session changed before replacement\");\n\n\t\tlet selectedText: string | undefined;\n\t\tif (position === \"before\") {\n\t\t\tconst selectedEntry = prepared.selectedEntry;\n\t\t\tif (selectedEntry.type !== \"message\" || selectedEntry.message.role !== \"user\") {\n\t\t\t\tthrow new Error(\"Invalid entry ID for forking\");\n\t\t\t}\n\t\t\tselectedText = extractUserMessageText(selectedEntry.message.content);\n\t\t}\n\n\t\tconst sessionManager = await prepared.create();\n\t\tawait this.replaceWithManager(sessionManager, source, \"fork\");\n\t\tawait this.finishSessionReplacement(withSession);\n\t\treturn { cancelled: false, selectedText };\n\t}\n\n\t/**\n\t * Import a session JSONL file and switch runtime state to the imported session.\n\t *\n\t * @returns `{ cancelled: true }` when cancelled by `session_before_switch`, otherwise `{ cancelled: false }`.\n\t * @throws {SessionImportFileNotFoundError} When the input path does not exist.\n\t * @throws {MissingSessionCwdError} When the imported session cwd cannot be resolved and no override is provided.\n\t */\n\tasync importFromJsonl(inputPath: string, cwdOverride?: string): Promise<{ cancelled: boolean }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst resolvedPath = resolve(inputPath);\n\t\tif (!existsSync(resolvedPath)) throw new SessionImportFileNotFoundError(resolvedPath);\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst sessionDir = source.session.sessionManager.getSessionDir();\n\t\tconst fallbackCwd = this.cwd;\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", resolvedPath);\n\t\tif (beforeResult.cancelled) return beforeResult;\n\n\t\tconst view = await SessionManager.openReadOnly(resolvedPath, undefined, cwdOverride);\n\t\tlet targetCwd: string;\n\t\ttry {\n\t\t\tassertSessionCwdExists(view, fallbackCwd);\n\t\t\ttargetCwd = view.getCwd();\n\t\t} finally {\n\t\t\tawait view.close();\n\t\t}\n\t\tconst sessionManager = await SessionManager.importRetainedFrom(resolvedPath, targetCwd, sessionDir);\n\t\tawait this.replaceWithManager(sessionManager, source, \"resume\");\n\t\tawait this.finishSessionReplacement();\n\t\treturn { cancelled: false };\n\t}\n\n\tprivate async disposeOnce(options: AgentSessionRuntimeDisposeOptions): Promise<void> {\n\t\tlet disposeError: unknown;\n\t\ttry {\n\t\t\tawait emitSessionShutdownEvent(this.session.extensionRunner, {\n\t\t\t\ttype: \"session_shutdown\",\n\t\t\t\treason: \"quit\",\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tthis.beforeSessionInvalidate?.();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\t// Await the kernel's final snapshot flush before tearing the session down.\n\t\t\tawait this.session.disposeAsync({ kernelSnapshot: options.kernelSnapshot ?? true });\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tawait this.disposeHostedSubagentRuntimes();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tif (disposeError) {\n\t\t\t\tthrow disposeError;\n\t\t\t}\n\t\t} finally {\n\t\t\tthis.releaseSessionLease();\n\t\t}\n\t}\n\n\tasync dispose(options?: AgentSessionRuntimeDisposeOptions): Promise<void> {\n\t\tif (!this.disposePromise) {\n\t\t\tthis.disposePromise = this.disposeOnce(options ?? {});\n\t\t}\n\t\tawait this.disposePromise;\n\t}\n}\n\nexport async function createAgentSessionRuntime(\n\tcreateRuntime: CreateAgentSessionRuntimeFactory,\n\toptions: {\n\t\tcwd: string;\n\t\tagentDir: string;\n\t\tsessionManager: SessionManager;\n\t\tsessionStartEvent?: SessionStartEvent;\n\t\tsessionConfig?: AgentSessionRuntimeConfig;\n\t\tsessionOptions?: AgentSessionCreationOptions;\n\t\truntimeMetadata?: AgentSessionRuntimeMetadata;\n\t\tsessionLease?: SessionLease;\n\t},\n): Promise<AgentSessionRuntime> {\n\tconst { sessionLease, ...runtimeOptions } = options;\n\tlet lease: SessionLease | undefined;\n\tlet result: CreateAgentSessionRuntimeResult | undefined;\n\ttry {\n\t\tlease =\n\t\t\tsessionLease ?? acquireSessionLease(runtimeOptions.sessionManager.getSessionFile(), runtimeOptions.agentDir);\n\t\tassertSessionCwdExists(runtimeOptions.sessionManager, runtimeOptions.cwd);\n\t\tresult = await createRuntime(runtimeOptions);\n\t\tawait result.session.initialize();\n\t\treturn new AgentSessionRuntime(\n\t\t\tresult.session,\n\t\t\tresult.services,\n\t\t\tcreateRuntime,\n\t\t\tresult.diagnostics,\n\t\t\tresult.modelFallbackMessage,\n\t\t\truntimeOptions.sessionConfig,\n\t\t\truntimeOptions.runtimeMetadata,\n\t\t\tlease,\n\t\t);\n\t} catch (error) {\n\t\tconst errors: unknown[] = error instanceof AggregateError ? [...error.errors] : [error];\n\t\tconst initialErrorCount = errors.length;\n\t\ttry {\n\t\t\tconst admitted = runtimeOptions.sessionOptions?.rlmChildAdmission?.session;\n\t\t\tconst failedSession =\n\t\t\t\tresult?.session ?? (admitted?.sessionManager === runtimeOptions.sessionManager ? admitted : undefined);\n\t\t\tif (failedSession) await failedSession.disposeAsync();\n\t\t\telse await runtimeOptions.sessionManager.close();\n\t\t} catch (cleanupError) {\n\t\t\tif (!errors.includes(cleanupError)) errors.push(cleanupError);\n\t\t}\n\t\ttry {\n\t\t\tlease?.release();\n\t\t} catch (cleanupError) {\n\t\t\tif (!errors.includes(cleanupError)) errors.push(cleanupError);\n\t\t}\n\t\tif (errors.length === initialErrorCount) throw error;\n\t\tthrow new AggregateError(errors, \"Runtime creation and cleanup failed\");\n\t}\n}\n\nexport {\n\ttype AgentSessionRuntimeDiagnostic,\n\ttype AgentSessionServices,\n\ttype CreateAgentSessionFromServicesOptions,\n\ttype CreateAgentSessionServicesOptions,\n\tcreateAgentSessionFromServices,\n\tcreateAgentSessionServices,\n} from \"./agent-session-services.js\";\n"]}
|
|
1
|
+
{"version":3,"file":"agent-session-runtime.js","sourceRoot":"","sources":["../../src/core/agent-session-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport type { AgentSession } from \"./agent-session.js\";\nimport type { AgentSessionRuntimeConfig } from \"./agent-session-config.js\";\nimport type {\n\tAgentSessionCreationOptions,\n\tAgentSessionRuntimeDiagnostic,\n\tAgentSessionServices,\n} from \"./agent-session-services.js\";\nimport { isNoModelsAvailableMessage } from \"./auth-guidance.js\";\nimport type { ReplacedSessionContext, SessionShutdownEvent, SessionStartEvent } from \"./extensions/index.js\";\nimport { emitSessionShutdownEvent } from \"./extensions/runner.js\";\nimport type {\n\tCreateRlmSubagentRuntimeOptions,\n\tRlmChildAdmission,\n\tRlmSubagentRuntime,\n\tSubagentRuntimeHost,\n} from \"./rlm-runtime.js\";\nimport type { CreateAgentSessionResult } from \"./sdk.js\";\nimport { assertSessionCwdExists } from \"./session-cwd.js\";\nimport { SessionImportFileNotFoundError } from \"./session-import-errors.js\";\nimport { acquireSessionLease, canonicalSessionPath, type SessionLease } from \"./session-lease.js\";\nimport { SessionManager } from \"./session-manager.js\";\n\nexport { SessionImportFileNotFoundError } from \"./session-import-errors.js\";\n\nexport interface CreateAgentSessionRuntimeResult extends CreateAgentSessionResult {\n\tservices: AgentSessionServices;\n\tdiagnostics: AgentSessionRuntimeDiagnostic[];\n}\n\nexport type CreateAgentSessionRuntimeFactory = (options: {\n\tcwd: string;\n\tagentDir: string;\n\tsessionManager: SessionManager;\n\tsessionStartEvent?: SessionStartEvent;\n\tsessionConfig?: AgentSessionRuntimeConfig;\n\tsessionOptions?: AgentSessionCreationOptions;\n}) => Promise<CreateAgentSessionRuntimeResult>;\n\nexport type AgentSessionRuntimeKind = \"top-level\" | \"subagent\";\n\nexport interface AgentSessionRuntimeMetadata {\n\tkind: AgentSessionRuntimeKind;\n\tcreatedAt: number;\n\tparentActiveSessionId?: string;\n\tparentSessionId?: string;\n\tparentSessionFile?: string;\n\trlmChildId?: string;\n\trlmParentNodeId?: string;\n\trehydratedCompleted?: boolean;\n\tprompt?: string;\n\tspawnCode?: string;\n\tsessionDir?: string;\n}\n\nfunction extractUserMessageText(content: string | Array<{ type: string; text?: string }>): string {\n\tif (typeof content === \"string\") {\n\t\treturn content;\n\t}\n\n\treturn content\n\t\t.filter((part): part is { type: \"text\"; text: string } => part.type === \"text\" && typeof part.text === \"string\")\n\t\t.map((part) => part.text)\n\t\t.join(\"\");\n}\n\nexport interface AgentSessionRuntimeDisposeOptions {\n\t/** Set false when the session's artifact dir is deleted right after disposal (default true). */\n\tkernelSnapshot?: boolean;\n}\n\nexport class AgentSessionRuntime implements SubagentRuntimeHost {\n\tprivate rebindSession?: (session: AgentSession) => Promise<void>;\n\tprivate readonly sessionReplacedListeners = new Set<(session: AgentSession) => void | Promise<void>>();\n\tprivate runtimeEnvScope?: <T>(fn: () => Promise<T>) => Promise<T>;\n\tprivate beforeSessionInvalidate?: () => void;\n\tprivate subagentRuntimeHost?: SubagentRuntimeHost;\n\tprivate subagentRuntimes = new Map<string, AgentSessionRuntime>();\n\tprivate disposePromise?: Promise<void>;\n\tprivate autoRefineAdmissionClosed = false;\n\n\tconstructor(\n\t\tprivate _session: AgentSession,\n\t\tprivate _services: AgentSessionServices,\n\t\tprivate readonly createRuntime: CreateAgentSessionRuntimeFactory,\n\t\tprivate _diagnostics: AgentSessionRuntimeDiagnostic[] = [],\n\t\tprivate _modelFallbackMessage?: string,\n\t\tprivate readonly sessionConfig?: AgentSessionRuntimeConfig,\n\t\tprivate readonly _metadata: AgentSessionRuntimeMetadata = {\n\t\t\tkind: \"top-level\",\n\t\t\tcreatedAt: Date.now(),\n\t\t},\n\t\tprivate _sessionLease?: SessionLease,\n\t) {\n\t\tthis.bindRuntimeHost();\n\t}\n\n\tget services(): AgentSessionServices {\n\t\treturn this._services;\n\t}\n\n\tget session(): AgentSession {\n\t\treturn this._session;\n\t}\n\n\tget requests() {\n\t\treturn this._session.requests;\n\t}\n\n\tget cwd(): string {\n\t\treturn this._services.cwd;\n\t}\n\n\tget diagnostics(): readonly AgentSessionRuntimeDiagnostic[] {\n\t\treturn this._diagnostics;\n\t}\n\n\tget modelFallbackMessage(): string | undefined {\n\t\t// The \"no models available\" warning describes session state, not a\n\t\t// startup event: once the session gains a model (set_model, /login,\n\t\t// onboarding), the stored snapshot is stale and must not reach clients.\n\t\tif (isNoModelsAvailableMessage(this._modelFallbackMessage) && this._session.model) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn this._modelFallbackMessage;\n\t}\n\n\tget metadata(): AgentSessionRuntimeMetadata {\n\t\treturn { ...this._metadata };\n\t}\n\n\tget runtimeConfig(): AgentSessionRuntimeConfig | undefined {\n\t\treturn this.sessionConfig ? { ...this.sessionConfig } : undefined;\n\t}\n\n\tsetRebindSession(rebindSession?: (session: AgentSession) => Promise<void>): void {\n\t\tthis.rebindSession = rebindSession;\n\t}\n\n\tonSessionReplaced(listener: (session: AgentSession) => void | Promise<void>): () => void {\n\t\tthis.sessionReplacedListeners.add(listener);\n\t\treturn () => this.sessionReplacedListeners.delete(listener);\n\t}\n\n\t/**\n\t * Host-installed scope wrapping every runtime rebuild (new/switch/fork/\n\t * import and subagent creation), during which extensions re-load. The\n\t * daemon uses it to apply the session's client env for load-time captures.\n\t */\n\tsetRuntimeEnvScope(scope?: <T>(fn: () => Promise<T>) => Promise<T>): void {\n\t\tthis.runtimeEnvScope = scope;\n\t}\n\n\tprivate scopedBuild<T>(fn: () => Promise<T>): Promise<T> {\n\t\treturn this.runtimeEnvScope ? this.runtimeEnvScope(fn) : fn();\n\t}\n\n\tsetSubagentRuntimeHost(host?: SubagentRuntimeHost): void {\n\t\tthis.subagentRuntimeHost = host;\n\t\tthis.bindRuntimeHost();\n\t}\n\n\t/**\n\t * Set a synchronous callback that runs after `session_shutdown` handlers finish\n\t * but before the current session is invalidated.\n\t *\n\t * This is for host-owned UI teardown that must not yield to the event loop,\n\t * such as detaching extension-provided TUI components before the old extension\n\t * context becomes stale.\n\t */\n\tsetBeforeSessionInvalidate(beforeSessionInvalidate?: () => void): void {\n\t\tthis.beforeSessionInvalidate = beforeSessionInvalidate;\n\t}\n\n\tprivate async emitBeforeSwitch(\n\t\treason: \"new\" | \"resume\",\n\t\ttargetSessionFile?: string,\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst runner = this.session.extensionRunner;\n\t\tif (!runner.hasHandlers(\"session_before_switch\")) {\n\t\t\treturn { cancelled: false };\n\t\t}\n\n\t\tconst result = await runner.emit({\n\t\t\ttype: \"session_before_switch\",\n\t\t\treason,\n\t\t\ttargetSessionFile,\n\t\t});\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate async emitBeforeFork(\n\t\trunner: AgentSession[\"extensionRunner\"],\n\t\tentryId: string,\n\t\toptions: { position: \"before\" | \"at\" },\n\t): Promise<{ cancelled: boolean }> {\n\t\tif (!runner.hasHandlers(\"session_before_fork\")) {\n\t\t\treturn { cancelled: false };\n\t\t}\n\n\t\tconst result = await runner.emit({\n\t\t\ttype: \"session_before_fork\",\n\t\t\tentryId,\n\t\t\t...options,\n\t\t});\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate async teardownCurrent(reason: SessionShutdownEvent[\"reason\"], targetSessionFile?: string): Promise<void> {\n\t\tawait emitSessionShutdownEvent(this.session.extensionRunner, {\n\t\t\ttype: \"session_shutdown\",\n\t\t\treason,\n\t\t\ttargetSessionFile,\n\t\t});\n\t\tthis.beforeSessionInvalidate?.();\n\t\t// Await the kernel's final snapshot flush before invalidating the session.\n\t\tawait this.session.disposeAsync();\n\t\tawait this.disposeHostedSubagentRuntimes();\n\t}\n\n\t/** Native EOF closes new opportunistic work, including a session replaced by an already accepted command. */\n\tcloseAutoRefineAdmission(): void {\n\t\tthis.autoRefineAdmissionClosed = true;\n\t\tthis._session.closeAutoRefineAdmission();\n\t}\n\n\tprivate bindRuntimeHost(): void {\n\t\tif (this.autoRefineAdmissionClosed) this._session.closeAutoRefineAdmission();\n\t\tthis._session.setSubagentRuntimeHost(this.subagentRuntimeHost ?? this);\n\t}\n\n\tprivate apply(result: CreateAgentSessionRuntimeResult): void {\n\t\tthis._session = result.session;\n\t\tthis._services = result.services;\n\t\tthis._diagnostics = result.diagnostics;\n\t\tthis._modelFallbackMessage = result.modelFallbackMessage;\n\t\tthis.bindRuntimeHost();\n\t}\n\n\tprivate acquireReplacementLease(sessionPath: string | undefined): SessionLease | undefined {\n\t\tif (sessionPath && this._sessionLease?.sessionPath === canonicalSessionPath(sessionPath)) {\n\t\t\treturn this._sessionLease;\n\t\t}\n\t\treturn acquireSessionLease(sessionPath, this.services.agentDir);\n\t}\n\n\tprivate releaseUncommittedLease(lease: SessionLease | undefined): void {\n\t\tif (lease !== this._sessionLease) {\n\t\t\tlease?.release();\n\t\t}\n\t}\n\n\tprivate releaseSessionLease(): void {\n\t\tthis._sessionLease?.release();\n\t\tthis._sessionLease = undefined;\n\t}\n\n\tprivate commitReplacementLease(lease: SessionLease | undefined): void {\n\t\tif (lease === this._sessionLease) {\n\t\t\treturn;\n\t\t}\n\t\tconst previous = this._sessionLease;\n\t\tthis._sessionLease = lease;\n\t\tprevious?.release();\n\t}\n\n\tprivate async replaceWithManager(\n\t\tsessionManager: SessionManager,\n\t\tsource: { session: AgentSession; sessionFile: string | undefined; agentDir: string },\n\t\treason: \"new\" | \"resume\" | \"fork\",\n\t\tteardown = true,\n\t\tsetup?: (manager: SessionManager) => Promise<void>,\n\t): Promise<void> {\n\t\tlet lease: SessionLease | undefined;\n\t\tlet result: CreateAgentSessionRuntimeResult | undefined;\n\t\ttry {\n\t\t\tif (this.session !== source.session) throw new Error(\"Session changed before replacement\");\n\t\t\tlease = this.acquireReplacementLease(sessionManager.getSessionFile());\n\t\t\tif (teardown) await this.teardownCurrent(reason, sessionManager.getSessionFile());\n\t\t\tresult = await this.scopedBuild(() =>\n\t\t\t\tthis.createRuntime({\n\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\tagentDir: source.agentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason, previousSessionFile: source.sessionFile },\n\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t}),\n\t\t\t);\n\t\t\tawait result.session.initialize();\n\t\t\tif (setup) {\n\t\t\t\tawait setup(sessionManager);\n\t\t\t\tawait sessionManager.flushNow();\n\t\t\t\tresult.session.agent.state.messages = (await result.session.buildSessionContext()).messages;\n\t\t\t}\n\t\t\tif (this.session !== source.session) throw new Error(\"Session changed during replacement\");\n\t\t\tthis.apply(result);\n\t\t\tthis.commitReplacementLease(lease);\n\t\t} catch (error) {\n\t\t\ttry {\n\t\t\t\tif (result) await result.session.disposeAsync();\n\t\t\t\telse await sessionManager.close();\n\t\t\t} finally {\n\t\t\t\tthis.releaseUncommittedLease(lease);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async disposeSubagentRuntimes(): Promise<void> {\n\t\tconst runtimes = [...this.subagentRuntimes.values()];\n\t\tthis.subagentRuntimes.clear();\n\t\tlet disposeError: unknown;\n\t\tfor (const runtime of runtimes) {\n\t\t\ttry {\n\t\t\t\tawait runtime.dispose();\n\t\t\t} catch (error) {\n\t\t\t\tdisposeError ??= error;\n\t\t\t}\n\t\t}\n\t\tif (disposeError) {\n\t\t\tthrow disposeError;\n\t\t}\n\t}\n\n\tprivate async disposeHostedSubagentRuntimes(): Promise<void> {\n\t\tlet disposeError: unknown;\n\t\ttry {\n\t\t\tawait this.subagentRuntimeHost?.disposeRlmSubagentRuntimes?.();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tawait this.disposeSubagentRuntimes();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\tif (disposeError) {\n\t\t\tthrow disposeError;\n\t\t}\n\t}\n\n\tlistSubagentRuntimes(): readonly AgentSessionRuntime[] {\n\t\treturn [...this.subagentRuntimes.values()];\n\t}\n\n\tasync createRlmSubagentRuntime(options: CreateRlmSubagentRuntimeOptions): Promise<RlmSubagentRuntime> {\n\t\toptions = { ...options, contextMode: options.contextMode ?? options.parentSession.contextMode };\n\t\tconst requestTokenBudget =\n\t\t\toptions.requestTokenBudget === undefined\n\t\t\t\t? options.parentSession.requests.getRequestTokenBudgetOptions()\n\t\t\t\t: structuredClone(options.requestTokenBudget);\n\t\tif (requestTokenBudget !== undefined) options = { ...options, requestTokenBudget };\n\t\tconst admission = options.admission ?? (await options.parentSession.reserveRlmChildAdmission());\n\t\ttry {\n\t\t\tif (admission.parent !== options.parentSession)\n\t\t\t\tthrow new Error(\"RLM child admission belongs to another parent\");\n\t\t\tadmission.assertCurrent();\n\t\t\tadmission.claimFactory();\n\t\t\treturn await this.createAdmittedRlmSubagentRuntime({ ...options, admission });\n\t\t} finally {\n\t\t\tif (!options.admission) await admission.settle();\n\t\t}\n\t}\n\n\tprivate async createAdmittedRlmSubagentRuntime(\n\t\toptions: CreateRlmSubagentRuntimeOptions & { admission: RlmChildAdmission },\n\t): Promise<RlmSubagentRuntime> {\n\t\toptions.admission.assertCurrent();\n\t\tconst parent = options.parentSession;\n\t\tconst parentSessionFile = parent.sessionFile;\n\t\tconst parentSessionId = parent.sessionId;\n\t\tconst parentAgent = parent.sessionName ?? parentSessionId;\n\t\tconst agentDir = this.services.agentDir;\n\t\tconst sessionManager = await SessionManager.create(parent.sessionManager.getCwd(), options.sessionDir, {\n\t\t\tparentSession: parentSessionFile,\n\t\t\trlmDepth: options.rlmDepth,\n\t\t});\n\t\tlet runtime: AgentSessionRuntime;\n\t\tlet factoryStarted = false;\n\t\ttry {\n\t\t\toptions.admission.assertCurrent();\n\t\t\tfactoryStarted = true;\n\t\t\truntime = await this.scopedBuild(() =>\n\t\t\t\tcreateAgentSessionRuntime(this.createRuntime, {\n\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\tagentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"startup\" },\n\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\tsessionOptions: {\n\t\t\t\t\t\t...(options.requestTokenBudget === undefined\n\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t: { requestTokenBudget: options.requestTokenBudget }),\n\t\t\t\t\t\tcontextMode: options.contextMode,\n\t\t\t\t\t\tmodel: options.model,\n\t\t\t\t\t\tthinkingLevel: options.thinkingLevel,\n\t\t\t\t\t\tserviceTier: options.serviceTier,\n\t\t\t\t\t\tscopedModels: options.scopedModels,\n\t\t\t\t\t\tinitialActiveToolNames: options.activeToolNames,\n\t\t\t\t\t\tallowedToolNames: options.allowedToolNames,\n\t\t\t\t\t\tcustomTools: options.customTools,\n\t\t\t\t\t\tincludeGoals: options.includeGoals,\n\t\t\t\t\t\tincludeCompactSkill: options.includeCompactSkill,\n\t\t\t\t\t\trlmDepth: options.rlmDepth,\n\t\t\t\t\t\trlmMaxDepth: options.rlmMaxDepth,\n\t\t\t\t\t\trlmSessionDir: options.sessionDir,\n\t\t\t\t\t\trlmParentNodeId: options.rlmParentNodeId,\n\t\t\t\t\t\trlmParentAgent: parentAgent,\n\t\t\t\t\t\trlmChildAdmission: options.admission,\n\t\t\t\t\t\tsemanticParentSessionId: parentSessionId,\n\t\t\t\t\t\tsemanticSpawnedByRequestId: options.spawnedByRequestId,\n\t\t\t\t\t},\n\t\t\t\t\truntimeMetadata: {\n\t\t\t\t\t\tkind: \"subagent\",\n\t\t\t\t\t\tcreatedAt: Date.now(),\n\t\t\t\t\t\tparentSessionId: parentSessionId,\n\t\t\t\t\t\tparentSessionFile: parentSessionFile,\n\t\t\t\t\t\trlmChildId: options.id,\n\t\t\t\t\t\trlmParentNodeId: options.rlmParentNodeId,\n\t\t\t\t\t\tprompt: options.prompt,\n\t\t\t\t\t\tspawnCode: options.spawnCode,\n\t\t\t\t\t\tsessionDir: options.sessionDir,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\ttry {\n\t\t\t\tawait sessionManager.close();\n\t\t\t\tif (!factoryStarted) await options.admission.confirmUnboundCleanup();\n\t\t\t} catch (cleanupError) {\n\t\t\t\tif (cleanupError === error || (error instanceof AggregateError && error.errors.includes(cleanupError)))\n\t\t\t\t\tthrow error;\n\t\t\t\tthrow new AggregateError([error, cleanupError], \"RLM startup and cleanup failed\");\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\tthis.subagentRuntimes.set(options.id, runtime);\n\t\ttry {\n\t\t\tawait runtime.session.bindExtensions({});\n\t\t\tif (options.parentSession.getRlmChildRunStatus(options.id) === \"cancelled\") {\n\t\t\t\tthrow new Error(\"RLM subagent startup was cancelled\");\n\t\t\t}\n\t\t\tif (runtime.session.sessionName !== options.sessionName) {\n\t\t\t\tawait runtime.session.setSessionName(options.sessionName);\n\t\t\t}\n\t\t\tif (parent.getRlmChildRunStatus(options.id) === \"cancelled\") {\n\t\t\t\tthrow new Error(\"RLM subagent startup was cancelled\");\n\t\t\t}\n\t\t\toptions.admission.bind(runtime.session);\n\t\t\toptions.admission.assertCurrent();\n\t\t\toptions.onSessionPublished?.(runtime.session);\n\t\t} catch (error) {\n\t\t\tthis.subagentRuntimes.delete(options.id);\n\t\t\ttry {\n\t\t\t\tawait runtime.dispose();\n\t\t\t} catch (cleanupError) {\n\t\t\t\tif (cleanupError === error || (error instanceof AggregateError && error.errors.includes(cleanupError)))\n\t\t\t\t\tthrow error;\n\t\t\t\tthrow new AggregateError([error, cleanupError], \"RLM startup and cleanup failed\");\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\treturn runtime;\n\t}\n\n\tasync deleteRlmSubagentRuntime(childId: string, session: AgentSession): Promise<void> {\n\t\tconst runtime = this.subagentRuntimes.get(childId);\n\t\tif (!runtime) {\n\t\t\tawait session.disposeAsync();\n\t\t\treturn;\n\t\t}\n\t\tthis.subagentRuntimes.delete(childId);\n\t\tconst shouldDisposeStaleSession = runtime.session !== session;\n\t\ttry {\n\t\t\tawait runtime.dispose();\n\t\t} finally {\n\t\t\tif (shouldDisposeStaleSession) {\n\t\t\t\tawait session.disposeAsync();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async finishSessionReplacement(withSession?: (ctx: ReplacedSessionContext) => Promise<void>): Promise<void> {\n\t\tif (this.rebindSession) {\n\t\t\tawait this.rebindSession(this.session);\n\t\t}\n\t\tfor (const listener of this.sessionReplacedListeners) {\n\t\t\tawait listener(this.session);\n\t\t}\n\t\tif (withSession) {\n\t\t\tawait withSession(this.session.createReplacedSessionContext());\n\t\t}\n\t}\n\n\tprivate assertCanReplaceSession(): void {\n\t\tif (this.metadata.kind === \"subagent\" || this.session.hasRlmParentAdmission) {\n\t\t\tthrow new Error(\"Owned child-runtime replacement is unavailable; dispose or passivate the child instead\");\n\t\t}\n\t}\n\n\tasync switchSession(\n\t\tsessionPath: string,\n\t\toptions?: { cwdOverride?: string; withSession?: (ctx: ReplacedSessionContext) => Promise<void> },\n\t): Promise<{ cancelled: boolean }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst fallbackCwd = this.cwd;\n\t\tconst cwdOverride = options?.cwdOverride;\n\t\tconst withSession = options?.withSession;\n\t\tconst samePath =\n\t\t\tsource.sessionFile !== undefined &&\n\t\t\tcanonicalSessionPath(source.sessionFile) === canonicalSessionPath(sessionPath);\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", sessionPath);\n\t\tif (beforeResult.cancelled) return beforeResult;\n\t\tif (this.session !== source.session) throw new Error(\"Session changed before replacement\");\n\n\t\tif (samePath) {\n\t\t\tconst view = await SessionManager.openReadOnly(sessionPath, undefined, cwdOverride);\n\t\t\ttry {\n\t\t\t\tassertSessionCwdExists(view, fallbackCwd);\n\t\t\t} finally {\n\t\t\t\tawait view.close();\n\t\t\t}\n\t\t\tawait this.teardownCurrent(\"resume\", sessionPath);\n\t\t}\n\t\tconst sessionManager = await SessionManager.open(sessionPath, undefined, cwdOverride);\n\t\ttry {\n\t\t\tassertSessionCwdExists(sessionManager, fallbackCwd);\n\t\t} catch (error) {\n\t\t\tawait sessionManager.close();\n\t\t\tthrow error;\n\t\t}\n\t\tawait this.replaceWithManager(sessionManager, source, \"resume\", !samePath);\n\t\tawait this.finishSessionReplacement(withSession);\n\t\treturn { cancelled: false };\n\t}\n\n\tasync newSession(options?: {\n\t\tparentSession?: string;\n\t\tsetup?: (sessionManager: SessionManager) => Promise<void>;\n\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t}): Promise<{ cancelled: boolean }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst cwd = this.cwd;\n\t\tconst sessionDir = source.session.sessionManager.getSessionDir();\n\t\tconst headerOptions = options?.parentSession\n\t\t\t? {\n\t\t\t\t\tparentSession: options.parentSession,\n\t\t\t\t\trlmDepth: source.session.sessionManager.getHeader()?.rlmDepth ?? source.session.rlmDepth,\n\t\t\t\t}\n\t\t\t: undefined;\n\t\tconst setup = options?.setup;\n\t\tconst withSession = options?.withSession;\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"new\");\n\t\tif (beforeResult.cancelled) return beforeResult;\n\t\tconst sessionManager = await SessionManager.create(cwd, sessionDir, headerOptions);\n\t\tawait this.replaceWithManager(sessionManager, source, \"new\", true, setup);\n\t\tawait this.finishSessionReplacement(withSession);\n\t\treturn { cancelled: false };\n\t}\n\n\tasync fork(\n\t\tentryId: string,\n\t\toptions?: {\n\t\t\tposition?: \"before\" | \"at\";\n\t\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t\t},\n\t): Promise<{ cancelled: boolean; selectedText?: string }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst rlmDepth = source.session.rlmDepth;\n\t\tconst withSession = options?.withSession;\n\t\tconst position = options?.position ?? \"before\";\n\t\tconst runner = source.session.extensionRunner;\n\t\tconst preparation = Promise.allSettled([\n\t\t\tsource.session.sessionManager.prepareFork(entryId, { position, rlmDepth }),\n\t\t]);\n\t\tconst [beforeResult] = await Promise.allSettled([\n\t\t\tthis.emitBeforeFork(runner, entryId, { position }),\n\t\t\tpreparation,\n\t\t]);\n\t\t// Join the independent source read before handling hook failure or cancellation.\n\t\tif (beforeResult.status === \"rejected\") throw beforeResult.reason;\n\t\tif (beforeResult.value.cancelled) {\n\t\t\treturn { cancelled: true };\n\t\t}\n\t\tconst [preparedResult] = await preparation;\n\t\tif (preparedResult.status === \"rejected\") throw preparedResult.reason;\n\t\tconst prepared = preparedResult.value;\n\t\tif (this.session !== source.session) throw new Error(\"Session changed before replacement\");\n\n\t\tlet selectedText: string | undefined;\n\t\tif (position === \"before\") {\n\t\t\tconst selectedEntry = prepared.selectedEntry;\n\t\t\tif (selectedEntry.type !== \"message\" || selectedEntry.message.role !== \"user\") {\n\t\t\t\tthrow new Error(\"Invalid entry ID for forking\");\n\t\t\t}\n\t\t\tselectedText = extractUserMessageText(selectedEntry.message.content);\n\t\t}\n\n\t\tconst sessionManager = await prepared.create();\n\t\tawait this.replaceWithManager(sessionManager, source, \"fork\");\n\t\tawait this.finishSessionReplacement(withSession);\n\t\treturn { cancelled: false, selectedText };\n\t}\n\n\t/**\n\t * Import a session JSONL file and switch runtime state to the imported session.\n\t *\n\t * @returns `{ cancelled: true }` when cancelled by `session_before_switch`, otherwise `{ cancelled: false }`.\n\t * @throws {SessionImportFileNotFoundError} When the input path does not exist.\n\t * @throws {MissingSessionCwdError} When the imported session cwd cannot be resolved and no override is provided.\n\t */\n\tasync importFromJsonl(inputPath: string, cwdOverride?: string): Promise<{ cancelled: boolean }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst resolvedPath = resolve(inputPath);\n\t\tif (!existsSync(resolvedPath)) throw new SessionImportFileNotFoundError(resolvedPath);\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst sessionDir = source.session.sessionManager.getSessionDir();\n\t\tconst fallbackCwd = this.cwd;\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", resolvedPath);\n\t\tif (beforeResult.cancelled) return beforeResult;\n\n\t\tconst view = await SessionManager.openReadOnly(resolvedPath, undefined, cwdOverride);\n\t\tlet targetCwd: string;\n\t\ttry {\n\t\t\tassertSessionCwdExists(view, fallbackCwd);\n\t\t\ttargetCwd = view.getCwd();\n\t\t} finally {\n\t\t\tawait view.close();\n\t\t}\n\t\tconst sessionManager = await SessionManager.importRetainedFrom(resolvedPath, targetCwd, sessionDir);\n\t\tawait this.replaceWithManager(sessionManager, source, \"resume\");\n\t\tawait this.finishSessionReplacement();\n\t\treturn { cancelled: false };\n\t}\n\n\tprivate async disposeOnce(options: AgentSessionRuntimeDisposeOptions): Promise<void> {\n\t\tlet disposeError: unknown;\n\t\ttry {\n\t\t\tawait emitSessionShutdownEvent(this.session.extensionRunner, {\n\t\t\t\ttype: \"session_shutdown\",\n\t\t\t\treason: \"quit\",\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tthis.beforeSessionInvalidate?.();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\t// Await the kernel's final snapshot flush before tearing the session down.\n\t\t\tawait this.session.disposeAsync({ kernelSnapshot: options.kernelSnapshot ?? true });\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tawait this.disposeHostedSubagentRuntimes();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tif (disposeError) {\n\t\t\t\tthrow disposeError;\n\t\t\t}\n\t\t} finally {\n\t\t\tthis.releaseSessionLease();\n\t\t}\n\t}\n\n\tasync dispose(options?: AgentSessionRuntimeDisposeOptions): Promise<void> {\n\t\tif (!this.disposePromise) {\n\t\t\tthis.disposePromise = this.disposeOnce(options ?? {});\n\t\t}\n\t\tawait this.disposePromise;\n\t}\n}\n\nexport async function createAgentSessionRuntime(\n\tcreateRuntime: CreateAgentSessionRuntimeFactory,\n\toptions: {\n\t\tcwd: string;\n\t\tagentDir: string;\n\t\tsessionManager: SessionManager;\n\t\tsessionStartEvent?: SessionStartEvent;\n\t\tsessionConfig?: AgentSessionRuntimeConfig;\n\t\tsessionOptions?: AgentSessionCreationOptions;\n\t\truntimeMetadata?: AgentSessionRuntimeMetadata;\n\t\tsessionLease?: SessionLease;\n\t},\n): Promise<AgentSessionRuntime> {\n\tconst { sessionLease, ...runtimeOptions } = options;\n\tlet lease: SessionLease | undefined;\n\tlet result: CreateAgentSessionRuntimeResult | undefined;\n\ttry {\n\t\tlease =\n\t\t\tsessionLease ?? acquireSessionLease(runtimeOptions.sessionManager.getSessionFile(), runtimeOptions.agentDir);\n\t\tassertSessionCwdExists(runtimeOptions.sessionManager, runtimeOptions.cwd);\n\t\tresult = await createRuntime(runtimeOptions);\n\t\tawait result.session.initialize();\n\t\treturn new AgentSessionRuntime(\n\t\t\tresult.session,\n\t\t\tresult.services,\n\t\t\tcreateRuntime,\n\t\t\tresult.diagnostics,\n\t\t\tresult.modelFallbackMessage,\n\t\t\truntimeOptions.sessionConfig,\n\t\t\truntimeOptions.runtimeMetadata,\n\t\t\tlease,\n\t\t);\n\t} catch (error) {\n\t\tconst errors: unknown[] = error instanceof AggregateError ? [...error.errors] : [error];\n\t\tconst initialErrorCount = errors.length;\n\t\ttry {\n\t\t\tconst admitted =\n\t\t\t\truntimeOptions.sessionOptions?.rlmChildAdmission?.session ??\n\t\t\t\truntimeOptions.sessionOptions?.rlmRootAdmission?.session;\n\t\t\tconst failedSession =\n\t\t\t\tresult?.session ?? (admitted?.sessionManager === runtimeOptions.sessionManager ? admitted : undefined);\n\t\t\tif (failedSession) await failedSession.disposeAsync();\n\t\t\telse await runtimeOptions.sessionManager.close();\n\t\t} catch (cleanupError) {\n\t\t\tif (!errors.includes(cleanupError)) errors.push(cleanupError);\n\t\t}\n\t\ttry {\n\t\t\tlease?.release();\n\t\t} catch (cleanupError) {\n\t\t\tif (!errors.includes(cleanupError)) errors.push(cleanupError);\n\t\t}\n\t\tif (errors.length === initialErrorCount) throw error;\n\t\tthrow new AggregateError(errors, \"Runtime creation and cleanup failed\");\n\t}\n}\n\nexport {\n\ttype AgentSessionRuntimeDiagnostic,\n\ttype AgentSessionServices,\n\ttype CreateAgentSessionFromServicesOptions,\n\ttype CreateAgentSessionServicesOptions,\n\tcreateAgentSessionFromServices,\n\tcreateAgentSessionServices,\n} from \"./agent-session-services.js\";\n"]}
|
|
@@ -10,6 +10,7 @@ import type { SessionStartEvent, ToolDefinition } from "./extensions/index.js";
|
|
|
10
10
|
import { McpManager } from "./mcp/mcp-manager.js";
|
|
11
11
|
import { ModelRegistry } from "./model-registry.js";
|
|
12
12
|
import { type DefaultResourceLoaderOptions, type ResourceLoader } from "./resource-loader.js";
|
|
13
|
+
import type { RlmRootAdmission, RlmSubagentCapacity } from "./rlm-max-subagents.js";
|
|
13
14
|
import type { RlmChildAdmission, SubagentRuntimeHost } from "./rlm-runtime.js";
|
|
14
15
|
import { type CreateAgentSessionResult } from "./sdk.js";
|
|
15
16
|
import type { SessionManager } from "./session-manager.js";
|
|
@@ -33,13 +34,13 @@ export interface CreateAgentSessionServicesOptions {
|
|
|
33
34
|
* would release the pane while the parent is still running.
|
|
34
35
|
*/
|
|
35
36
|
noBuiltinHerdrReporter?: boolean;
|
|
36
|
-
telemetryDisabled?: true;
|
|
37
37
|
}
|
|
38
38
|
export interface AgentSessionCreationOptions {
|
|
39
39
|
/** Explicit native request-budget rollout; also forwarded by the services/runtime factory. */
|
|
40
40
|
requestTokenBudget?: RequestTokenBudgetOptions;
|
|
41
41
|
contextMode?: "on" | "off";
|
|
42
|
-
model
|
|
42
|
+
/** Undefined restores a saved explicit choice; null creates a session without a selected model. */
|
|
43
|
+
model?: Model<any> | null;
|
|
43
44
|
thinkingLevel?: ThinkingLevel;
|
|
44
45
|
serviceTier?: ServiceTier;
|
|
45
46
|
scopedModels?: Array<{
|
|
@@ -62,6 +63,8 @@ export interface AgentSessionCreationOptions {
|
|
|
62
63
|
rlmParentAgent?: string;
|
|
63
64
|
/** Live parent-owned setup admission; never restored from session metadata. */
|
|
64
65
|
rlmChildAdmission?: RlmChildAdmission;
|
|
66
|
+
rlmSubagentCapacity?: RlmSubagentCapacity;
|
|
67
|
+
rlmRootAdmission?: RlmRootAdmission;
|
|
65
68
|
semanticParentSessionId?: string;
|
|
66
69
|
semanticSpawnedByRequestId?: string;
|
|
67
70
|
subagentRuntimeHost?: SubagentRuntimeHost;
|
|
@@ -70,7 +73,6 @@ export interface AgentSessionCreationOptions {
|
|
|
70
73
|
autonomous?: AgentAutonomousConfig;
|
|
71
74
|
serializedRefine?: boolean;
|
|
72
75
|
executionMode?: AgentExecutionMode;
|
|
73
|
-
telemetryDisabled?: true;
|
|
74
76
|
initialGoal?: {
|
|
75
77
|
objective: string;
|
|
76
78
|
tokenBudget?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-session-services.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-services.ts"],"names":[],"mappings":"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","sourcesContent":["import { join } from \"node:path\";\nimport type { ThinkingLevel } from \"@ponythewhite/base-context-agent\";\nimport type { Model, RequestTokenBudgetOptions, ServiceTier } from \"@ponythewhite/base-context-ai\";\nimport { getAgentDir } from \"../config.js\";\nimport type { AgentSessionMessageController } from \"./agent-messages.js\";\nimport type { AgentObserveController } from \"./agent-observe.js\";\nimport type { AgentExecutionMode } from \"./agent-session-config.js\";\nimport { installAgentTraceUpload } from \"./agent-traces.js\";\nimport { AuthStorage } from \"./auth-storage.js\";\nimport type { AgentAutonomousConfig } from \"./autonomous.js\";\nimport type { AgentRlmHeartbeatController } from \"./cron-jobs.js\";\nimport { createHerdrAgentStateExtension } from \"./extensions/builtin/herdr-agent-state.js\";\nimport type { SessionStartEvent, ToolDefinition } from \"./extensions/index.js\";\nimport { McpManager } from \"./mcp/mcp-manager.js\";\nimport { ModelRegistry } from \"./model-registry.js\";\nimport { DefaultResourceLoader, type DefaultResourceLoaderOptions, type ResourceLoader } from \"./resource-loader.js\";\nimport type { RlmChildAdmission, SubagentRuntimeHost } from \"./rlm-runtime.js\";\nimport { type CreateAgentSessionResult, createAgentSession } from \"./sdk.js\";\nimport { semanticEdgeLedgerPath } from \"./semantic-edges.js\";\nimport type { SessionManager } from \"./session-manager.js\";\nimport { SettingsManager } from \"./settings-manager.js\";\nimport { installAgentTelemetry, isTelemetryEnabled } from \"./telemetry.js\";\n\nexport interface AgentSessionRuntimeDiagnostic {\n\ttype: \"info\" | \"warning\" | \"error\";\n\tmessage: string;\n}\n\nexport interface CreateAgentSessionServicesOptions {\n\tcwd: string;\n\tagentDir?: string;\n\tauthStorage?: AuthStorage;\n\tsettingsManager?: SettingsManager;\n\tmodelRegistry?: ModelRegistry;\n\textensionFlagValues?: Map<string, boolean | string>;\n\tresourceLoaderOptions?: Omit<DefaultResourceLoaderOptions, \"cwd\" | \"agentDir\" | \"settingsManager\">;\n\t/**\n\t * Skip the built-in Herdr reporter for these services. Set for RLM subagent\n\t * runtimes: they inherit the parent's HERDR_* pane identity, so their own\n\t * reporter would race the parent's on the same pane and a subagent quit\n\t * would release the pane while the parent is still running.\n\t */\n\tnoBuiltinHerdrReporter?: boolean;\n\ttelemetryDisabled?: true;\n}\n\nexport interface AgentSessionCreationOptions {\n\t/** Explicit native request-budget rollout; also forwarded by the services/runtime factory. */\n\trequestTokenBudget?: RequestTokenBudgetOptions;\n\tcontextMode?: \"on\" | \"off\";\n\tmodel?: Model<any>;\n\tthinkingLevel?: ThinkingLevel;\n\tserviceTier?: ServiceTier;\n\tscopedModels?: Array<{ model: Model<any>; thinkingLevel?: ThinkingLevel }>;\n\ttools?: string[];\n\tnoTools?: \"all\" | \"builtin\";\n\tcustomTools?: ToolDefinition[];\n\tinitialActiveToolNames?: string[];\n\tallowedToolNames?: string[];\n\tincludeGoals?: boolean;\n\tincludeCompactSkill?: boolean;\n\tagentMessageController?: AgentSessionMessageController;\n\tagentObserveController?: AgentObserveController;\n\trlmDepth?: number;\n\trlmMaxDepth?: number;\n\trlmSessionDir?: string;\n\trlmParentNodeId?: string;\n\trlmParentAgent?: string;\n\t/** Live parent-owned setup admission; never restored from session metadata. */\n\trlmChildAdmission?: RlmChildAdmission;\n\tsemanticParentSessionId?: string;\n\tsemanticSpawnedByRequestId?: string;\n\tsubagentRuntimeHost?: SubagentRuntimeHost;\n\trlmHeartbeatController?: AgentRlmHeartbeatController;\n\tprewarmIpythonKernel?: boolean;\n\tautonomous?: AgentAutonomousConfig;\n\tserializedRefine?: boolean;\n\texecutionMode?: AgentExecutionMode;\n\ttelemetryDisabled?: true;\n\tinitialGoal?: { objective: string; tokenBudget?: number };\n}\n\nexport interface CreateAgentSessionFromServicesOptions extends AgentSessionCreationOptions {\n\tservices: AgentSessionServices;\n\tsessionManager: SessionManager;\n\tsessionStartEvent?: SessionStartEvent;\n}\n\nexport interface AgentSessionServices {\n\tcwd: string;\n\tagentDir: string;\n\tauthStorage: AuthStorage;\n\tsettingsManager: SettingsManager;\n\tmodelRegistry: ModelRegistry;\n\tresourceLoader: ResourceLoader;\n\tmcpManager: McpManager;\n\tdiagnostics: AgentSessionRuntimeDiagnostic[];\n}\n\nfunction applyExtensionFlagValues(\n\tresourceLoader: ResourceLoader,\n\textensionFlagValues: Map<string, boolean | string> | undefined,\n): AgentSessionRuntimeDiagnostic[] {\n\tif (!extensionFlagValues) {\n\t\treturn [];\n\t}\n\n\tconst diagnostics: AgentSessionRuntimeDiagnostic[] = [];\n\tconst extensionsResult = resourceLoader.getExtensions();\n\tconst registeredFlags = new Map<string, { type: \"boolean\" | \"string\" }>();\n\tfor (const extension of extensionsResult.extensions) {\n\t\tfor (const [name, flag] of extension.flags) {\n\t\t\tregisteredFlags.set(name, { type: flag.type });\n\t\t}\n\t}\n\n\tconst unknownFlags: string[] = [];\n\tfor (const [name, value] of extensionFlagValues) {\n\t\tconst flag = registeredFlags.get(name);\n\t\tif (!flag) {\n\t\t\tunknownFlags.push(name);\n\t\t\tcontinue;\n\t\t}\n\t\tif (flag.type === \"boolean\") {\n\t\t\textensionsResult.runtime.flagValues.set(name, true);\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\textensionsResult.runtime.flagValues.set(name, value);\n\t\t\tcontinue;\n\t\t}\n\t\tdiagnostics.push({\n\t\t\ttype: \"error\",\n\t\t\tmessage: `Extension flag \"--${name}\" requires a value`,\n\t\t});\n\t}\n\n\tif (unknownFlags.length > 0) {\n\t\tdiagnostics.push({\n\t\t\ttype: \"error\",\n\t\t\tmessage: `Unknown option${unknownFlags.length === 1 ? \"\" : \"s\"}: ${unknownFlags.map((name) => `--${name}`).join(\", \")}`,\n\t\t});\n\t}\n\n\treturn diagnostics;\n}\n\nexport async function createAgentSessionServices(\n\toptions: CreateAgentSessionServicesOptions,\n): Promise<AgentSessionServices> {\n\tconst cwd = options.cwd;\n\tconst agentDir = options.agentDir ?? getAgentDir();\n\tconst authStorage = options.authStorage ?? AuthStorage.create(join(agentDir, \"auth.json\"));\n\tconst settingsManager = options.settingsManager ?? SettingsManager.create(cwd, agentDir);\n\tconst modelRegistry = options.modelRegistry ?? ModelRegistry.create(authStorage, join(agentDir, \"models.json\"));\n\n\t// MCP integrations: registers OAuth providers and gates the built-in\n\t// integration skills by whether the user is logged in (enable-by-login).\n\tconst mcpManager = new McpManager({\n\t\tauthStorage,\n\t\tgetUserServers: () => settingsManager.getGlobalMcpServers(),\n\t});\n\t// refresh() resets the OAuth registry to built-ins; re-add user MCP providers too.\n\tmodelRegistry.setOnOAuthProvidersReset(() => mcpManager.registerUserProviders());\n\n\tconst userExtensionFactories = options.resourceLoaderOptions?.extensionFactories ?? [];\n\t// The built-in Herdr reporter defers to Herdr's own file-based integration\n\t// when the loader actually loaded it; two reporters would race on the same\n\t// pane. Deferral is late-bound to the loader's loaded paths (inline\n\t// factories run after file extensions load), so a file that exists but is\n\t// disabled or never discovered does not silence the built-in.\n\t// noExtensions is a full opt-out: it disables the built-in reporter too,\n\t// not just discovered extension files.\n\tconst skipHerdrReporter = options.noBuiltinHerdrReporter || options.resourceLoaderOptions?.noExtensions;\n\tconst builtinExtensionFactories = skipHerdrReporter\n\t\t? []\n\t\t: [createHerdrAgentStateExtension(() => resourceLoader.getLoadedExtensionPaths())];\n\tconst resourceLoader: DefaultResourceLoader = new DefaultResourceLoader({\n\t\t...(options.resourceLoaderOptions ?? {}),\n\t\textensionFactories: [...builtinExtensionFactories, ...userExtensionFactories],\n\t\tcwd,\n\t\tagentDir,\n\t\tsettingsManager,\n\t\textraBuiltinSkillOverrides: () => mcpManager.getDisabledBuiltinSkillOverrides(),\n\t});\n\tawait resourceLoader.reload();\n\n\tconst diagnostics: AgentSessionRuntimeDiagnostic[] = [];\n\tif (\n\t\t!options.telemetryDisabled &&\n\t\tisTelemetryEnabled(settingsManager) &&\n\t\t!settingsManager.getTelemetryNoticeShown()\n\t) {\n\t\tdiagnostics.push({\n\t\t\ttype: \"info\",\n\t\t\tmessage:\n\t\t\t\t\"Base Context analytics are opt-in. Remote export requires BASE_CONTEXT_TELEMETRY_ENDPOINT and a dedicated BASE_CONTEXT_TELEMETRY_API_KEY; inference credentials are never used. Disable with telemetry.enabled=false, BASE_CONTEXT_TELEMETRY=0, DO_NOT_TRACK=1, or offline mode.\",\n\t\t});\n\t\tsettingsManager.setTelemetryNoticeShown(true);\n\t}\n\tconst extensionsResult = resourceLoader.getExtensions();\n\tfor (const { name, config, extensionPath } of extensionsResult.runtime.pendingProviderRegistrations) {\n\t\ttry {\n\t\t\tmodelRegistry.registerProvider(name, config);\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tdiagnostics.push({\n\t\t\t\ttype: \"error\",\n\t\t\t\tmessage: `Extension \"${extensionPath}\" error: ${message}`,\n\t\t\t});\n\t\t}\n\t}\n\textensionsResult.runtime.pendingProviderRegistrations = [];\n\tdiagnostics.push(...applyExtensionFlagValues(resourceLoader, options.extensionFlagValues));\n\n\treturn {\n\t\tcwd,\n\t\tagentDir,\n\t\tauthStorage,\n\t\tsettingsManager,\n\t\tmodelRegistry,\n\t\tresourceLoader,\n\t\tmcpManager,\n\t\tdiagnostics,\n\t};\n}\n\nexport async function createAgentSessionFromServices(\n\toptions: CreateAgentSessionFromServicesOptions,\n): Promise<CreateAgentSessionResult> {\n\tinstallAgentTraceUpload(options.sessionManager, {\n\t\tauthStorage: options.services.authStorage,\n\t\tsettingsManager: options.services.settingsManager,\n\t\tsemanticEdgesLedgerPath: semanticEdgeLedgerPath({\n\t\t\trlmSessionDir: options.rlmSessionDir,\n\t\t\tsessionArtifactDir: options.sessionManager.getSessionArtifactDir(),\n\t\t}),\n\t});\n\tconst result = await createAgentSession({\n\t\tcwd: options.services.cwd,\n\t\tagentDir: options.services.agentDir,\n\t\tauthStorage: options.services.authStorage,\n\t\tsettingsManager: options.services.settingsManager,\n\t\tmodelRegistry: options.services.modelRegistry,\n\t\tresourceLoader: options.services.resourceLoader,\n\t\tmcpManager: options.services.mcpManager,\n\t\tsessionManager: options.sessionManager,\n\t\tmodel: options.model,\n\t\trequestTokenBudget: options.requestTokenBudget,\n\t\tcontextMode: options.contextMode,\n\t\tthinkingLevel: options.thinkingLevel,\n\t\tserviceTier: options.serviceTier,\n\t\tscopedModels: options.scopedModels,\n\t\ttools: options.tools,\n\t\tnoTools: options.noTools,\n\t\tcustomTools: options.customTools,\n\t\tinitialActiveToolNames: options.initialActiveToolNames,\n\t\tallowedToolNames: options.allowedToolNames,\n\t\tincludeGoals: options.includeGoals,\n\t\tincludeCompactSkill: options.includeCompactSkill,\n\t\tagentMessageController: options.agentMessageController,\n\t\tagentObserveController: options.agentObserveController,\n\t\trlmDepth: options.rlmDepth,\n\t\trlmMaxDepth: options.rlmMaxDepth,\n\t\trlmSessionDir: options.rlmSessionDir,\n\t\trlmParentNodeId: options.rlmParentNodeId,\n\t\trlmParentAgent: options.rlmParentAgent,\n\t\trlmChildAdmission: options.rlmChildAdmission,\n\t\tsemanticParentSessionId: options.semanticParentSessionId,\n\t\tsemanticSpawnedByRequestId: options.semanticSpawnedByRequestId,\n\t\tsubagentRuntimeHost: options.subagentRuntimeHost,\n\t\trlmHeartbeatController: options.rlmHeartbeatController,\n\t\tsessionStartEvent: options.sessionStartEvent,\n\t\tprewarmIpythonKernel: options.prewarmIpythonKernel,\n\t\tautonomous: options.autonomous,\n\t\tserializedRefine: options.serializedRefine,\n\t\tinitialGoal: options.initialGoal,\n\t});\n\tif (result.session.rlmDepth === 0 && !options.telemetryDisabled) {\n\t\tinstallAgentTelemetry(result.session, {\n\t\t\tagentDir: options.services.agentDir,\n\t\t\tsettingsManager: options.services.settingsManager,\n\t\t\texecutionMode: options.executionMode,\n\t\t});\n\t}\n\treturn result;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"agent-session-services.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-services.ts"],"names":[],"mappings":"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","sourcesContent":["import { join } from \"node:path\";\nimport type { ThinkingLevel } from \"@ponythewhite/base-context-agent\";\nimport type { Model, RequestTokenBudgetOptions, ServiceTier } from \"@ponythewhite/base-context-ai\";\nimport { getAgentDir } from \"../config.js\";\nimport type { AgentSessionMessageController } from \"./agent-messages.js\";\nimport type { AgentObserveController } from \"./agent-observe.js\";\nimport type { AgentExecutionMode } from \"./agent-session-config.js\";\nimport { AuthStorage } from \"./auth-storage.js\";\nimport type { AgentAutonomousConfig } from \"./autonomous.js\";\nimport type { AgentRlmHeartbeatController } from \"./cron-jobs.js\";\nimport { createHerdrAgentStateExtension } from \"./extensions/builtin/herdr-agent-state.js\";\nimport type { SessionStartEvent, ToolDefinition } from \"./extensions/index.js\";\nimport { McpManager } from \"./mcp/mcp-manager.js\";\nimport { ModelRegistry } from \"./model-registry.js\";\nimport { DefaultResourceLoader, type DefaultResourceLoaderOptions, type ResourceLoader } from \"./resource-loader.js\";\nimport type { RlmRootAdmission, RlmSubagentCapacity } from \"./rlm-max-subagents.js\";\nimport type { RlmChildAdmission, SubagentRuntimeHost } from \"./rlm-runtime.js\";\nimport { type CreateAgentSessionResult, createAgentSession } from \"./sdk.js\";\nimport type { SessionManager } from \"./session-manager.js\";\nimport { SettingsManager } from \"./settings-manager.js\";\n\nexport interface AgentSessionRuntimeDiagnostic {\n\ttype: \"info\" | \"warning\" | \"error\";\n\tmessage: string;\n}\n\nexport interface CreateAgentSessionServicesOptions {\n\tcwd: string;\n\tagentDir?: string;\n\tauthStorage?: AuthStorage;\n\tsettingsManager?: SettingsManager;\n\tmodelRegistry?: ModelRegistry;\n\textensionFlagValues?: Map<string, boolean | string>;\n\tresourceLoaderOptions?: Omit<DefaultResourceLoaderOptions, \"cwd\" | \"agentDir\" | \"settingsManager\">;\n\t/**\n\t * Skip the built-in Herdr reporter for these services. Set for RLM subagent\n\t * runtimes: they inherit the parent's HERDR_* pane identity, so their own\n\t * reporter would race the parent's on the same pane and a subagent quit\n\t * would release the pane while the parent is still running.\n\t */\n\tnoBuiltinHerdrReporter?: boolean;\n}\n\nexport interface AgentSessionCreationOptions {\n\t/** Explicit native request-budget rollout; also forwarded by the services/runtime factory. */\n\trequestTokenBudget?: RequestTokenBudgetOptions;\n\tcontextMode?: \"on\" | \"off\";\n\t/** Undefined restores a saved explicit choice; null creates a session without a selected model. */\n\tmodel?: Model<any> | null;\n\tthinkingLevel?: ThinkingLevel;\n\tserviceTier?: ServiceTier;\n\tscopedModels?: Array<{ model: Model<any>; thinkingLevel?: ThinkingLevel }>;\n\ttools?: string[];\n\tnoTools?: \"all\" | \"builtin\";\n\tcustomTools?: ToolDefinition[];\n\tinitialActiveToolNames?: string[];\n\tallowedToolNames?: string[];\n\tincludeGoals?: boolean;\n\tincludeCompactSkill?: boolean;\n\tagentMessageController?: AgentSessionMessageController;\n\tagentObserveController?: AgentObserveController;\n\trlmDepth?: number;\n\trlmMaxDepth?: number;\n\trlmSessionDir?: string;\n\trlmParentNodeId?: string;\n\trlmParentAgent?: string;\n\t/** Live parent-owned setup admission; never restored from session metadata. */\n\trlmChildAdmission?: RlmChildAdmission;\n\trlmSubagentCapacity?: RlmSubagentCapacity;\n\trlmRootAdmission?: RlmRootAdmission;\n\tsemanticParentSessionId?: string;\n\tsemanticSpawnedByRequestId?: string;\n\tsubagentRuntimeHost?: SubagentRuntimeHost;\n\trlmHeartbeatController?: AgentRlmHeartbeatController;\n\tprewarmIpythonKernel?: boolean;\n\tautonomous?: AgentAutonomousConfig;\n\tserializedRefine?: boolean;\n\texecutionMode?: AgentExecutionMode;\n\tinitialGoal?: { objective: string; tokenBudget?: number };\n}\n\nexport interface CreateAgentSessionFromServicesOptions extends AgentSessionCreationOptions {\n\tservices: AgentSessionServices;\n\tsessionManager: SessionManager;\n\tsessionStartEvent?: SessionStartEvent;\n}\n\nexport interface AgentSessionServices {\n\tcwd: string;\n\tagentDir: string;\n\tauthStorage: AuthStorage;\n\tsettingsManager: SettingsManager;\n\tmodelRegistry: ModelRegistry;\n\tresourceLoader: ResourceLoader;\n\tmcpManager: McpManager;\n\tdiagnostics: AgentSessionRuntimeDiagnostic[];\n}\n\nfunction applyExtensionFlagValues(\n\tresourceLoader: ResourceLoader,\n\textensionFlagValues: Map<string, boolean | string> | undefined,\n): AgentSessionRuntimeDiagnostic[] {\n\tif (!extensionFlagValues) {\n\t\treturn [];\n\t}\n\n\tconst diagnostics: AgentSessionRuntimeDiagnostic[] = [];\n\tconst extensionsResult = resourceLoader.getExtensions();\n\tconst registeredFlags = new Map<string, { type: \"boolean\" | \"string\" }>();\n\tfor (const extension of extensionsResult.extensions) {\n\t\tfor (const [name, flag] of extension.flags) {\n\t\t\tregisteredFlags.set(name, { type: flag.type });\n\t\t}\n\t}\n\n\tconst unknownFlags: string[] = [];\n\tfor (const [name, value] of extensionFlagValues) {\n\t\tconst flag = registeredFlags.get(name);\n\t\tif (!flag) {\n\t\t\tunknownFlags.push(name);\n\t\t\tcontinue;\n\t\t}\n\t\tif (flag.type === \"boolean\") {\n\t\t\textensionsResult.runtime.flagValues.set(name, true);\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\textensionsResult.runtime.flagValues.set(name, value);\n\t\t\tcontinue;\n\t\t}\n\t\tdiagnostics.push({\n\t\t\ttype: \"error\",\n\t\t\tmessage: `Extension flag \"--${name}\" requires a value`,\n\t\t});\n\t}\n\n\tif (unknownFlags.length > 0) {\n\t\tdiagnostics.push({\n\t\t\ttype: \"error\",\n\t\t\tmessage: `Unknown option${unknownFlags.length === 1 ? \"\" : \"s\"}: ${unknownFlags.map((name) => `--${name}`).join(\", \")}`,\n\t\t});\n\t}\n\n\treturn diagnostics;\n}\n\nexport async function createAgentSessionServices(\n\toptions: CreateAgentSessionServicesOptions,\n): Promise<AgentSessionServices> {\n\tconst cwd = options.cwd;\n\tconst agentDir = options.agentDir ?? getAgentDir();\n\tconst authStorage = options.authStorage ?? AuthStorage.create(join(agentDir, \"auth.json\"));\n\tconst settingsManager = options.settingsManager ?? SettingsManager.create(cwd, agentDir);\n\tconst modelRegistry = options.modelRegistry ?? ModelRegistry.create(authStorage, join(agentDir, \"models.json\"));\n\n\t// MCP integrations: registers OAuth providers and gates the built-in\n\t// integration skills by whether the user is logged in (enable-by-login).\n\tconst mcpManager = new McpManager({\n\t\tauthStorage,\n\t\tgetUserServers: () => settingsManager.getGlobalMcpServers(),\n\t});\n\t// refresh() resets the OAuth registry to built-ins; re-add user MCP providers too.\n\tmodelRegistry.setOnOAuthProvidersReset(() => mcpManager.registerUserProviders());\n\n\tconst userExtensionFactories = options.resourceLoaderOptions?.extensionFactories ?? [];\n\t// The built-in Herdr reporter defers to Herdr's own file-based integration\n\t// when the loader actually loaded it; two reporters would race on the same\n\t// pane. Deferral is late-bound to the loader's loaded paths (inline\n\t// factories run after file extensions load), so a file that exists but is\n\t// disabled or never discovered does not silence the built-in.\n\t// noExtensions is a full opt-out: it disables the built-in reporter too,\n\t// not just discovered extension files.\n\tconst skipHerdrReporter = options.noBuiltinHerdrReporter || options.resourceLoaderOptions?.noExtensions;\n\tconst builtinExtensionFactories = skipHerdrReporter\n\t\t? []\n\t\t: [createHerdrAgentStateExtension(() => resourceLoader.getLoadedExtensionPaths())];\n\tconst resourceLoader: DefaultResourceLoader = new DefaultResourceLoader({\n\t\t...(options.resourceLoaderOptions ?? {}),\n\t\textensionFactories: [...builtinExtensionFactories, ...userExtensionFactories],\n\t\tcwd,\n\t\tagentDir,\n\t\tsettingsManager,\n\t\textraBuiltinSkillOverrides: () => mcpManager.getDisabledBuiltinSkillOverrides(),\n\t});\n\tawait resourceLoader.reload();\n\n\tconst diagnostics: AgentSessionRuntimeDiagnostic[] = [];\n\tconst extensionsResult = resourceLoader.getExtensions();\n\tfor (const { name, config, extensionPath } of extensionsResult.runtime.pendingProviderRegistrations) {\n\t\ttry {\n\t\t\tmodelRegistry.registerProvider(name, config);\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tdiagnostics.push({\n\t\t\t\ttype: \"error\",\n\t\t\t\tmessage: `Extension \"${extensionPath}\" error: ${message}`,\n\t\t\t});\n\t\t}\n\t}\n\textensionsResult.runtime.pendingProviderRegistrations = [];\n\tdiagnostics.push(...applyExtensionFlagValues(resourceLoader, options.extensionFlagValues));\n\n\treturn {\n\t\tcwd,\n\t\tagentDir,\n\t\tauthStorage,\n\t\tsettingsManager,\n\t\tmodelRegistry,\n\t\tresourceLoader,\n\t\tmcpManager,\n\t\tdiagnostics,\n\t};\n}\n\nexport async function createAgentSessionFromServices(\n\toptions: CreateAgentSessionFromServicesOptions,\n): Promise<CreateAgentSessionResult> {\n\tconst result = await createAgentSession({\n\t\tcwd: options.services.cwd,\n\t\tagentDir: options.services.agentDir,\n\t\tauthStorage: options.services.authStorage,\n\t\tsettingsManager: options.services.settingsManager,\n\t\tmodelRegistry: options.services.modelRegistry,\n\t\tresourceLoader: options.services.resourceLoader,\n\t\tmcpManager: options.services.mcpManager,\n\t\tsessionManager: options.sessionManager,\n\t\tmodel: options.model,\n\t\trequestTokenBudget: options.requestTokenBudget,\n\t\tcontextMode: options.contextMode,\n\t\tthinkingLevel: options.thinkingLevel,\n\t\tserviceTier: options.serviceTier,\n\t\tscopedModels: options.scopedModels,\n\t\ttools: options.tools,\n\t\tnoTools: options.noTools,\n\t\tcustomTools: options.customTools,\n\t\tinitialActiveToolNames: options.initialActiveToolNames,\n\t\tallowedToolNames: options.allowedToolNames,\n\t\tincludeGoals: options.includeGoals,\n\t\tincludeCompactSkill: options.includeCompactSkill,\n\t\tagentMessageController: options.agentMessageController,\n\t\tagentObserveController: options.agentObserveController,\n\t\trlmDepth: options.rlmDepth,\n\t\trlmMaxDepth: options.rlmMaxDepth,\n\t\trlmSessionDir: options.rlmSessionDir,\n\t\trlmParentNodeId: options.rlmParentNodeId,\n\t\trlmParentAgent: options.rlmParentAgent,\n\t\trlmChildAdmission: options.rlmChildAdmission,\n\t\trlmSubagentCapacity: options.rlmSubagentCapacity,\n\t\trlmRootAdmission: options.rlmRootAdmission,\n\t\tsemanticParentSessionId: options.semanticParentSessionId,\n\t\tsemanticSpawnedByRequestId: options.semanticSpawnedByRequestId,\n\t\tsubagentRuntimeHost: options.subagentRuntimeHost,\n\t\trlmHeartbeatController: options.rlmHeartbeatController,\n\t\tsessionStartEvent: options.sessionStartEvent,\n\t\tprewarmIpythonKernel: options.prewarmIpythonKernel,\n\t\tautonomous: options.autonomous,\n\t\tserializedRefine: options.serializedRefine,\n\t\tinitialGoal: options.initialGoal,\n\t});\n\treturn result;\n}\n"]}
|