@asm-agent/coding-agent 0.8.8 → 0.9.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 +19 -0
- package/README.md +2 -7
- package/dist/asm-agent-runtime/src/__pycache__/asm_cm_driver.cpython-313.pyc +0 -0
- package/dist/asm-agent-runtime/src/__pycache__/phase76_address_head.cpython-313.pyc +0 -0
- package/dist/asm-agent-runtime/src/rlm/__init__.py +1 -1
- package/dist/asm-agent-runtime/src/rlm/__pycache__/__init__.cpython-312.pyc +0 -0
- package/dist/asm-agent-runtime/src/rlm/__pycache__/__init__.cpython-313.pyc +0 -0
- package/dist/asm-agent-runtime/src/rlm/__pycache__/bash.cpython-312.pyc +0 -0
- package/dist/asm-agent-runtime/src/rlm/__pycache__/bash.cpython-313.pyc +0 -0
- package/dist/asm-agent-runtime/src/rlm/__pycache__/mcp.cpython-312.pyc +0 -0
- package/dist/asm-agent-runtime/src/rlm/__pycache__/mcp_base.cpython-312.pyc +0 -0
- package/dist/asm-agent-runtime/src/rlm/__pycache__/repl.cpython-312.pyc +0 -0
- package/dist/asm-agent-runtime/src/rlm/__pycache__/repl.cpython-313.pyc +0 -0
- package/dist/asm-agent-runtime/src/rlm/__pycache__/skill.cpython-313.pyc +0 -0
- package/dist/asm-agent-runtime/src/rlm/bash.py +94 -31
- package/dist/asm-agent-runtime/src/rlm/repl.md +3 -3
- package/dist/asm-agent-runtime/src/rlm/repl.py +46 -45
- package/dist/asm-agent-runtime/test/__pycache__/test_bash.cpython-313.pyc +0 -0
- package/dist/asm-agent-runtime/test/__pycache__/test_repl.cpython-313.pyc +0 -0
- package/dist/asm-agent-runtime/test/test_bash.py +74 -19
- package/dist/asm-agent-runtime/test/test_repl.py +67 -3
- package/dist/asm-agent-runtime/uv.lock +446 -155
- package/dist/bundle/{anthropic-OFECORE7.js → anthropic-2VRH36LG.js} +2 -2
- package/dist/bundle/{azure-openai-responses-AOVTLR6N.js → azure-openai-responses-COYWHJPT.js} +2 -2
- package/dist/bundle/{bundled-modules-JQCJDEIY.js → bundled-modules-YKMFOFDW.js} +3 -3
- package/dist/bundle/{chunk-JC2TT4MZ.js → chunk-JBR32RCG.js} +4943 -1917
- package/dist/bundle/{chunk-M67RGWDQ.js → chunk-US4QGESM.js} +43 -44
- package/dist/bundle/{chunk-A65OM3TZ.js → chunk-V3BASDCN.js} +1 -1
- package/dist/bundle/{chunk-7TB7CGPV.js → chunk-YL37EJB6.js} +978 -1821
- package/dist/bundle/{cli-main-FNHDQGQD.js → cli-main-D7CFAHKG.js} +3 -3
- package/dist/bundle/cli.js +1 -1
- package/dist/bundle/{google-RVJL6RIQ.js → google-CSTXROSV.js} +1 -1
- package/dist/bundle/{google-vertex-EZTRRRH6.js → google-vertex-MEAR43KB.js} +1 -1
- package/dist/bundle/{main-IYXIIAJN.js → main-NKNJEUDP.js} +3 -3
- package/dist/bundle/{mistral-FSGKSMA7.js → mistral-VAF7JADB.js} +1 -1
- package/dist/bundle/{openai-codex-responses-VM5Y564D.js → openai-codex-responses-RWZ6P4I3.js} +2 -2
- package/dist/bundle/{openai-completions-X46FOQDN.js → openai-completions-CFB3BOTU.js} +3 -3
- package/dist/bundle/{openai-responses-SOQNEPBE.js → openai-responses-4OPGGCBI.js} +2 -2
- package/dist/config.d.ts +0 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +0 -3
- 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 +0 -8
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +0 -2
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +0 -22
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +8 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +100 -22
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/kernel/bootstrap.d.ts.map +1 -1
- package/dist/core/kernel/bootstrap.js +1 -1
- package/dist/core/kernel/bootstrap.js.map +1 -1
- package/dist/core/kernel/repl-manager.d.ts +32 -8
- package/dist/core/kernel/repl-manager.d.ts.map +1 -1
- package/dist/core/kernel/repl-manager.js +401 -102
- package/dist/core/kernel/repl-manager.js.map +1 -1
- package/dist/core/kernel/shared.d.ts +11 -7
- package/dist/core/kernel/shared.d.ts.map +1 -1
- package/dist/core/kernel/shared.js +2 -5
- package/dist/core/kernel/shared.js.map +1 -1
- package/dist/core/mcp/mcp-manager.d.ts +4 -2
- package/dist/core/mcp/mcp-manager.d.ts.map +1 -1
- package/dist/core/mcp/mcp-manager.js +9 -7
- package/dist/core/mcp/mcp-manager.js.map +1 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +1 -1
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/prime-inference-auth.d.ts +0 -9
- package/dist/core/prime-inference-auth.d.ts.map +1 -1
- package/dist/core/prime-inference-auth.js +0 -50
- package/dist/core/prime-inference-auth.js.map +1 -1
- package/dist/core/provider-display-names.d.ts.map +1 -1
- package/dist/core/provider-display-names.js +0 -1
- package/dist/core/provider-display-names.js.map +1 -1
- package/dist/core/session-manager.d.ts +0 -4
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +0 -22
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +4 -16
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +13 -43
- 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 +0 -5
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/tools/acp-mcp.d.ts +6 -0
- package/dist/core/tools/acp-mcp.d.ts.map +1 -0
- package/dist/core/tools/acp-mcp.js +86 -0
- package/dist/core/tools/acp-mcp.js.map +1 -0
- package/dist/core/tools/index.d.ts +1 -0
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +1 -0
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/ipython.d.ts.map +1 -1
- package/dist/core/tools/ipython.js +9 -4
- package/dist/core/tools/ipython.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +2 -11
- 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 +0 -2
- package/dist/modes/agent-connection/daemon-agent-connection.d.ts.map +1 -1
- package/dist/modes/agent-connection/daemon-agent-connection.js +0 -2
- package/dist/modes/agent-connection/daemon-agent-connection.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 +0 -19
- package/dist/modes/agents-view/agents-view-mode.js.map +1 -1
- package/dist/modes/daemon/daemon-mode.d.ts +1 -10
- package/dist/modes/daemon/daemon-mode.d.ts.map +1 -1
- package/dist/modes/daemon/daemon-mode.js +134 -274
- package/dist/modes/daemon/daemon-mode.js.map +1 -1
- package/dist/modes/daemon/daemon-protocol.d.ts +11 -5
- package/dist/modes/daemon/daemon-protocol.d.ts.map +1 -1
- package/dist/modes/daemon/daemon-protocol.js +6 -8
- package/dist/modes/daemon/daemon-protocol.js.map +1 -1
- package/dist/modes/daemon/daemon-supervisor.d.ts +0 -3
- package/dist/modes/daemon/daemon-supervisor.d.ts.map +1 -1
- package/dist/modes/daemon/daemon-supervisor.js +18 -52
- package/dist/modes/daemon/daemon-supervisor.js.map +1 -1
- package/dist/modes/daemon/daemon-worker-protocol.d.ts +1 -6
- package/dist/modes/daemon/daemon-worker-protocol.d.ts.map +1 -1
- package/dist/modes/daemon/daemon-worker-protocol.js +0 -2
- package/dist/modes/daemon/daemon-worker-protocol.js.map +1 -1
- package/dist/modes/interactive/auth-flows.d.ts +0 -2
- package/dist/modes/interactive/auth-flows.d.ts.map +1 -1
- package/dist/modes/interactive/auth-flows.js +1 -101
- package/dist/modes/interactive/auth-flows.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +6 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +13 -3
- package/dist/modes/interactive/components/assistant-message.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/mermaid.d.ts +12 -0
- package/dist/modes/interactive/components/mermaid.d.ts.map +1 -0
- package/dist/modes/interactive/components/mermaid.js +63 -0
- package/dist/modes/interactive/components/mermaid.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +3 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +10 -0
- package/dist/modes/interactive/components/settings-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 +1 -7
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +23 -279
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js +1 -1
- package/dist/utils/version-check.js.map +1 -1
- package/docs/settings.md +1 -31
- package/docs/usage.md +1 -4
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/gpt-6-astra.models.json +24 -0
- package/package.json +6 -5
- package/dist/core/agent-traces.d.ts +0 -130
- package/dist/core/agent-traces.d.ts.map +0 -1
- package/dist/core/agent-traces.js +0 -746
- package/dist/core/agent-traces.js.map +0 -1
- package/dist/core/telemetry.d.ts +0 -92
- package/dist/core/telemetry.d.ts.map +0 -1
- package/dist/core/telemetry.js +0 -633
- package/dist/core/telemetry.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-session-config.js","sourceRoot":"","sources":["../../src/core/agent-session-config.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ThinkingLevel } from \"@asm-agent/agent\";\nimport type { AgentAutonomousConfig } from \"./autonomous.js\";\n\nexport type AgentExecutionMode = \"interactive\" | \"print\" | \"json\" | \"rpc\" | \"acp\";\n\nexport interface AgentSessionRuntimeConfig {\n\tcwd?: string;\n\tagentDir?: string;\n\tsessionDir?: string;\n\tprovider?: string;\n\tmodel?: string;\n\tapiKey?: string;\n\tsystemPrompt?: string;\n\tappendSystemPrompt?: string[];\n\tthinking?: ThinkingLevel;\n\tmodels?: string[];\n\ttools?: string[];\n\tnoTools?: boolean;\n\tnoBuiltinTools?: boolean;\n\textensions?: string[];\n\tnoExtensions?: boolean;\n\tskills?: string[];\n\tnoSkills?: boolean;\n\tpromptTemplates?: string[];\n\tnoPromptTemplates?: boolean;\n\tthemes?: string[];\n\tnoThemes?: boolean;\n\tnoContextFiles?: boolean;\n\tautonomous?: AgentAutonomousConfig;\n\textensionFlagValues?: Record<string, boolean | string>;\n\t/**\n\t * When true, auto-refine runs synchronously between turns at the\n\t * shouldStopAfterTurn boundary instead of in the background after\n\t * agent_end. Passed from the JSON/print client to the daemon worker\n\t * so it survives the appMode=\"daemon\" context switch.\n\t */\n\tserializedRefine?: boolean;\n\texecutionMode?: AgentExecutionMode;\n\ttelemetryDisabled?: true;\n\t/**\n\t * Initial goal to seed when creating a new top-level session (rlmDepth 0).\n\t * Ignored for subagent sessions and when the branch already has a persisted\n\t * thread_goal_state entry (idempotent restart/rehydration).\n\t */\n\tinitialGoal?: { objective: string; tokenBudget?: number };\n}\n\nexport type DurableAgentSessionRuntimeConfig = Pick<\n\tAgentSessionRuntimeConfig,\n\t\"cwd\" | \"agentDir\" | \"sessionDir\" | \"telemetryDisabled\"\n>;\n\n/** Only non-secret host settings needed to locate and govern durable daemon state. */\nexport function durableAgentSessionRuntimeConfig(config: AgentSessionRuntimeConfig): DurableAgentSessionRuntimeConfig {\n\treturn {\n\t\t...(typeof config.cwd === \"string\" ? { cwd: config.cwd } : {}),\n\t\t...(typeof config.agentDir === \"string\" ? { agentDir: config.agentDir } : {}),\n\t\t...(typeof config.sessionDir === \"string\" ? { sessionDir: config.sessionDir } : {}),\n\t\t...(config.telemetryDisabled === true ? { telemetryDisabled: true as const } : {}),\n\t};\n}\n\nexport function mergeAgentSessionRuntimeConfig(\n\tbase: AgentSessionRuntimeConfig,\n\toverride?: AgentSessionRuntimeConfig,\n): AgentSessionRuntimeConfig {\n\tif (!override) {\n\t\treturn cloneAgentSessionRuntimeConfig(base);\n\t}\n\treturn {\n\t\tcwd: override.cwd ?? base.cwd,\n\t\tagentDir: override.agentDir ?? base.agentDir,\n\t\tsessionDir: override.sessionDir ?? base.sessionDir,\n\t\tprovider: override.provider ?? base.provider,\n\t\tmodel: override.model ?? base.model,\n\t\tapiKey: override.apiKey ?? base.apiKey,\n\t\tsystemPrompt: override.systemPrompt ?? base.systemPrompt,\n\t\tappendSystemPrompt: cloneArray(override.appendSystemPrompt ?? base.appendSystemPrompt),\n\t\tthinking: override.thinking ?? base.thinking,\n\t\tmodels: cloneArray(override.models ?? base.models),\n\t\ttools: cloneArray(override.tools ?? base.tools),\n\t\tnoTools: override.noTools ?? base.noTools,\n\t\tnoBuiltinTools: override.noBuiltinTools ?? base.noBuiltinTools,\n\t\textensions: cloneArray(override.extensions ?? base.extensions),\n\t\tnoExtensions: override.noExtensions ?? base.noExtensions,\n\t\tskills: cloneArray(override.skills ?? base.skills),\n\t\tnoSkills: override.noSkills ?? base.noSkills,\n\t\tpromptTemplates: cloneArray(override.promptTemplates ?? base.promptTemplates),\n\t\tnoPromptTemplates: override.noPromptTemplates ?? base.noPromptTemplates,\n\t\tthemes: cloneArray(override.themes ?? base.themes),\n\t\tnoThemes: override.noThemes ?? base.noThemes,\n\t\tnoContextFiles: override.noContextFiles ?? base.noContextFiles,\n\t\tautonomous: mergeAutonomousConfig(base.autonomous, override.autonomous),\n\t\textensionFlagValues:\n\t\t\tbase.extensionFlagValues || override.extensionFlagValues\n\t\t\t\t? { ...(base.extensionFlagValues ?? {}), ...(override.extensionFlagValues ?? {}) }\n\t\t\t\t: undefined,\n\t\tserializedRefine: override.serializedRefine ?? base.serializedRefine,\n\t\texecutionMode: override.executionMode ?? base.executionMode,\n\t\ttelemetryDisabled: base.telemetryDisabled || override.telemetryDisabled ? true : undefined,\n\t\tinitialGoal: override.initialGoal ?? base.initialGoal,\n\t};\n}\n\nfunction cloneAgentSessionRuntimeConfig(config: AgentSessionRuntimeConfig): AgentSessionRuntimeConfig {\n\treturn {\n\t\t...config,\n\t\tappendSystemPrompt: cloneArray(config.appendSystemPrompt),\n\t\tmodels: cloneArray(config.models),\n\t\ttools: cloneArray(config.tools),\n\t\textensions: cloneArray(config.extensions),\n\t\tskills: cloneArray(config.skills),\n\t\tpromptTemplates: cloneArray(config.promptTemplates),\n\t\tthemes: cloneArray(config.themes),\n\t\tautonomous: mergeAutonomousConfig(undefined, config.autonomous),\n\t\textensionFlagValues: config.extensionFlagValues ? { ...config.extensionFlagValues } : undefined,\n\t\tserializedRefine: config.serializedRefine,\n\t\texecutionMode: config.executionMode,\n\t\ttelemetryDisabled: config.telemetryDisabled,\n\t\tinitialGoal: config.initialGoal ? { ...config.initialGoal } : undefined,\n\t};\n}\n\nexport function mergeAutonomousConfig(\n\tbase: AgentAutonomousConfig | undefined,\n\toverride: AgentAutonomousConfig | undefined,\n): AgentAutonomousConfig | undefined {\n\tif (!base && !override) {\n\t\treturn undefined;\n\t}\n\tconst gates = mergeAutonomousGateConfig(base?.gates, override?.gates);\n\treturn {\n\t\t...(base ?? {}),\n\t\t...(override ?? {}),\n\t\t...(gates ? { gates } : {}),\n\t};\n}\n\nfunction mergeAutonomousGateConfig(\n\tbase: AgentAutonomousConfig[\"gates\"] | undefined,\n\toverride: AgentAutonomousConfig[\"gates\"] | undefined,\n): AgentAutonomousConfig[\"gates\"] | undefined {\n\tif (!base && !override) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\t...(base ?? {}),\n\t\t...(override ?? {}),\n\t\t...(override?.commands !== undefined || base?.commands !== undefined\n\t\t\t? { commands: cloneArray(override?.commands ?? base?.commands) }\n\t\t\t: {}),\n\t};\n}\n\nfunction cloneArray<T>(value: T[] | undefined): T[] | undefined {\n\treturn value ? [...value] : undefined;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"agent-session-config.js","sourceRoot":"","sources":["../../src/core/agent-session-config.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ThinkingLevel } from \"@asm-agent/agent\";\nimport type { AgentAutonomousConfig } from \"./autonomous.js\";\n\nexport type AgentExecutionMode = \"interactive\" | \"print\" | \"json\" | \"rpc\" | \"acp\";\n\nexport interface AgentSessionRuntimeConfig {\n\tcwd?: string;\n\tagentDir?: string;\n\tsessionDir?: string;\n\tprovider?: string;\n\tmodel?: string;\n\tapiKey?: string;\n\tsystemPrompt?: string;\n\tappendSystemPrompt?: string[];\n\tthinking?: ThinkingLevel;\n\tmodels?: string[];\n\ttools?: string[];\n\tnoTools?: boolean;\n\tnoBuiltinTools?: boolean;\n\textensions?: string[];\n\tnoExtensions?: boolean;\n\tskills?: string[];\n\tnoSkills?: boolean;\n\tpromptTemplates?: string[];\n\tnoPromptTemplates?: boolean;\n\tthemes?: string[];\n\tnoThemes?: boolean;\n\tnoContextFiles?: boolean;\n\tautonomous?: AgentAutonomousConfig;\n\textensionFlagValues?: Record<string, boolean | string>;\n\t/**\n\t * When true, auto-refine runs synchronously between turns at the\n\t * shouldStopAfterTurn boundary instead of in the background after\n\t * agent_end. Passed from the JSON/print client to the daemon worker\n\t * so it survives the appMode=\"daemon\" context switch.\n\t */\n\tserializedRefine?: boolean;\n\texecutionMode?: AgentExecutionMode;\n\t/**\n\t * Initial goal to seed when creating a new top-level session (rlmDepth 0).\n\t * Ignored for subagent sessions and when the branch already has a persisted\n\t * thread_goal_state entry (idempotent restart/rehydration).\n\t */\n\tinitialGoal?: { objective: string; tokenBudget?: number };\n}\n\nexport type DurableAgentSessionRuntimeConfig = Pick<AgentSessionRuntimeConfig, \"cwd\" | \"agentDir\" | \"sessionDir\">;\n\n/** Only non-secret host settings needed to locate and govern durable daemon state. */\nexport function durableAgentSessionRuntimeConfig(config: AgentSessionRuntimeConfig): DurableAgentSessionRuntimeConfig {\n\treturn {\n\t\t...(typeof config.cwd === \"string\" ? { cwd: config.cwd } : {}),\n\t\t...(typeof config.agentDir === \"string\" ? { agentDir: config.agentDir } : {}),\n\t\t...(typeof config.sessionDir === \"string\" ? { sessionDir: config.sessionDir } : {}),\n\t};\n}\n\nexport function mergeAgentSessionRuntimeConfig(\n\tbase: AgentSessionRuntimeConfig,\n\toverride?: AgentSessionRuntimeConfig,\n): AgentSessionRuntimeConfig {\n\tif (!override) {\n\t\treturn cloneAgentSessionRuntimeConfig(base);\n\t}\n\treturn {\n\t\tcwd: override.cwd ?? base.cwd,\n\t\tagentDir: override.agentDir ?? base.agentDir,\n\t\tsessionDir: override.sessionDir ?? base.sessionDir,\n\t\tprovider: override.provider ?? base.provider,\n\t\tmodel: override.model ?? base.model,\n\t\tapiKey: override.apiKey ?? base.apiKey,\n\t\tsystemPrompt: override.systemPrompt ?? base.systemPrompt,\n\t\tappendSystemPrompt: cloneArray(override.appendSystemPrompt ?? base.appendSystemPrompt),\n\t\tthinking: override.thinking ?? base.thinking,\n\t\tmodels: cloneArray(override.models ?? base.models),\n\t\ttools: cloneArray(override.tools ?? base.tools),\n\t\tnoTools: override.noTools ?? base.noTools,\n\t\tnoBuiltinTools: override.noBuiltinTools ?? base.noBuiltinTools,\n\t\textensions: cloneArray(override.extensions ?? base.extensions),\n\t\tnoExtensions: override.noExtensions ?? base.noExtensions,\n\t\tskills: cloneArray(override.skills ?? base.skills),\n\t\tnoSkills: override.noSkills ?? base.noSkills,\n\t\tpromptTemplates: cloneArray(override.promptTemplates ?? base.promptTemplates),\n\t\tnoPromptTemplates: override.noPromptTemplates ?? base.noPromptTemplates,\n\t\tthemes: cloneArray(override.themes ?? base.themes),\n\t\tnoThemes: override.noThemes ?? base.noThemes,\n\t\tnoContextFiles: override.noContextFiles ?? base.noContextFiles,\n\t\tautonomous: mergeAutonomousConfig(base.autonomous, override.autonomous),\n\t\textensionFlagValues:\n\t\t\tbase.extensionFlagValues || override.extensionFlagValues\n\t\t\t\t? { ...(base.extensionFlagValues ?? {}), ...(override.extensionFlagValues ?? {}) }\n\t\t\t\t: undefined,\n\t\tserializedRefine: override.serializedRefine ?? base.serializedRefine,\n\t\texecutionMode: override.executionMode ?? base.executionMode,\n\t\tinitialGoal: override.initialGoal ?? base.initialGoal,\n\t};\n}\n\nfunction cloneAgentSessionRuntimeConfig(config: AgentSessionRuntimeConfig): AgentSessionRuntimeConfig {\n\treturn {\n\t\t...config,\n\t\tappendSystemPrompt: cloneArray(config.appendSystemPrompt),\n\t\tmodels: cloneArray(config.models),\n\t\ttools: cloneArray(config.tools),\n\t\textensions: cloneArray(config.extensions),\n\t\tskills: cloneArray(config.skills),\n\t\tpromptTemplates: cloneArray(config.promptTemplates),\n\t\tthemes: cloneArray(config.themes),\n\t\tautonomous: mergeAutonomousConfig(undefined, config.autonomous),\n\t\textensionFlagValues: config.extensionFlagValues ? { ...config.extensionFlagValues } : undefined,\n\t\tserializedRefine: config.serializedRefine,\n\t\texecutionMode: config.executionMode,\n\t\tinitialGoal: config.initialGoal ? { ...config.initialGoal } : undefined,\n\t};\n}\n\nexport function mergeAutonomousConfig(\n\tbase: AgentAutonomousConfig | undefined,\n\toverride: AgentAutonomousConfig | undefined,\n): AgentAutonomousConfig | undefined {\n\tif (!base && !override) {\n\t\treturn undefined;\n\t}\n\tconst gates = mergeAutonomousGateConfig(base?.gates, override?.gates);\n\treturn {\n\t\t...(base ?? {}),\n\t\t...(override ?? {}),\n\t\t...(gates ? { gates } : {}),\n\t};\n}\n\nfunction mergeAutonomousGateConfig(\n\tbase: AgentAutonomousConfig[\"gates\"] | undefined,\n\toverride: AgentAutonomousConfig[\"gates\"] | undefined,\n): AgentAutonomousConfig[\"gates\"] | undefined {\n\tif (!base && !override) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\t...(base ?? {}),\n\t\t...(override ?? {}),\n\t\t...(override?.commands !== undefined || base?.commands !== undefined\n\t\t\t? { commands: cloneArray(override?.commands ?? base?.commands) }\n\t\t\t: {}),\n\t};\n}\n\nfunction cloneArray<T>(value: T[] | undefined): T[] | undefined {\n\treturn value ? [...value] : undefined;\n}\n"]}
|
|
@@ -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 { copyFileSync, existsSync, mkdirSync } from \"node:fs\";\nimport { basename, join, 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 { flushAgentTraceUpload } from \"./agent-traces.js\";\nimport { isNoModelsAvailableMessage } from \"./auth-guidance.js\";\nimport type { ReplacedSessionContext, SessionShutdownEvent, SessionStartEvent } from \"./extensions/index.js\";\nimport { emitSessionShutdownEvent } from \"./extensions/runner.js\";\nimport type { CreateRlmSubagentRuntimeOptions, RlmSubagentRuntime, SubagentRuntimeHost } 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 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\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 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\tentryId: string,\n\t\toptions: { position: \"before\" | \"at\" },\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst runner = this.session.extensionRunner;\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\tawait flushAgentTraceUpload(this.session.sessionManager).catch(() => undefined);\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\tprivate bindRuntimeHost(): void {\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 buildAndApplyReplacement(\n\t\tbuild: () => Promise<CreateAgentSessionRuntimeResult>,\n\t\tlease: SessionLease | undefined,\n\t): Promise<void> {\n\t\tlet result: CreateAgentSessionRuntimeResult;\n\t\ttry {\n\t\t\tresult = await build();\n\t\t} catch (error) {\n\t\t\tthis.releaseUncommittedLease(lease);\n\t\t\tthrow error;\n\t\t}\n\t\tthis.apply(result);\n\t\tthis.commitReplacementLease(lease);\n\t}\n\n\tprivate async teardownForReplacement(\n\t\treason: SessionShutdownEvent[\"reason\"],\n\t\ttargetSessionFile: string | undefined,\n\t\tlease: SessionLease | undefined,\n\t): Promise<void> {\n\t\ttry {\n\t\t\tawait this.teardownCurrent(reason, targetSessionFile);\n\t\t} catch (error) {\n\t\t\tthis.releaseUncommittedLease(lease);\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\tconst sessionManager = SessionManager.create(options.parentSession.sessionManager.getCwd(), options.sessionDir);\n\t\tif (options.parentSession.sessionFile) {\n\t\t\tsessionManager.newSession({\n\t\t\t\tparentSession: options.parentSession.sessionFile,\n\t\t\t\trlmDepth: options.rlmDepth,\n\t\t\t});\n\t\t}\n\t\tconst runtime = await this.scopedBuild(() =>\n\t\t\tcreateAgentSessionRuntime(this.createRuntime, {\n\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\tsessionManager,\n\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"startup\" },\n\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\tsessionOptions: {\n\t\t\t\t\tmodel: options.model,\n\t\t\t\t\tthinkingLevel: options.thinkingLevel,\n\t\t\t\t\tserviceTier: options.serviceTier,\n\t\t\t\t\tscopedModels: options.scopedModels,\n\t\t\t\t\tinitialActiveToolNames: options.activeToolNames,\n\t\t\t\t\tallowedToolNames: options.allowedToolNames,\n\t\t\t\t\tcustomTools: options.customTools,\n\t\t\t\t\tincludeGoals: options.includeGoals,\n\t\t\t\t\tincludeCompactSkill: options.includeCompactSkill,\n\t\t\t\t\trlmDepth: options.rlmDepth,\n\t\t\t\t\trlmMaxDepth: options.rlmMaxDepth,\n\t\t\t\t\trlmSessionDir: options.sessionDir,\n\t\t\t\t\trlmParentNodeId: options.rlmParentNodeId,\n\t\t\t\t\trlmParentAgent: options.parentSession.sessionName ?? options.parentSession.sessionId,\n\t\t\t\t},\n\t\t\t\truntimeMetadata: {\n\t\t\t\t\tkind: \"subagent\",\n\t\t\t\t\tcreatedAt: Date.now(),\n\t\t\t\t\tparentSessionId: options.parentSession.sessionId,\n\t\t\t\t\tparentSessionFile: options.parentSession.sessionFile,\n\t\t\t\t\trlmChildId: options.id,\n\t\t\t\t\trlmParentNodeId: options.rlmParentNodeId,\n\t\t\t\t\tprompt: options.prompt,\n\t\t\t\t\tspawnCode: options.spawnCode,\n\t\t\t\t\tsessionDir: options.sessionDir,\n\t\t\t\t},\n\t\t\t}),\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\truntime.session.setSessionName(options.sessionName);\n\t\t\t}\n\t\t\toptions.onSessionPublished?.(runtime.session);\n\t\t} catch (error) {\n\t\t\tthis.subagentRuntimes.delete(options.id);\n\t\t\tawait runtime.dispose();\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\tasync switchSession(\n\t\tsessionPath: string,\n\t\toptions?: {\n\t\t\tcwdOverride?: string;\n\t\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t\t},\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", sessionPath);\n\t\tif (beforeResult.cancelled) {\n\t\t\treturn beforeResult;\n\t\t}\n\n\t\tconst previousSessionFile = this.session.sessionFile;\n\t\tconst lease = this.acquireReplacementLease(sessionPath);\n\t\tlet sessionManager: SessionManager;\n\t\ttry {\n\t\t\tsessionManager = SessionManager.open(sessionPath, undefined, options?.cwdOverride);\n\t\t\tassertSessionCwdExists(sessionManager, this.cwd);\n\t\t} catch (error) {\n\t\t\tthis.releaseUncommittedLease(lease);\n\t\t\tthrow error;\n\t\t}\n\t\tawait this.teardownForReplacement(\"resume\", sessionManager.getSessionFile(), lease);\n\t\tawait this.buildAndApplyReplacement(\n\t\t\t() =>\n\t\t\t\tthis.scopedBuild(() =>\n\t\t\t\t\tthis.createRuntime({\n\t\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\tsessionStartEvent: {\n\t\t\t\t\t\t\ttype: \"session_start\",\n\t\t\t\t\t\t\treason: \"resume\",\n\t\t\t\t\t\t\tpreviousSessionFile,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\tlease,\n\t\t);\n\t\tawait this.finishSessionReplacement(options?.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\tconst beforeResult = await this.emitBeforeSwitch(\"new\");\n\t\tif (beforeResult.cancelled) {\n\t\t\treturn beforeResult;\n\t\t}\n\n\t\tconst previousSessionFile = this.session.sessionFile;\n\t\tconst sessionDir = this.session.sessionManager.getSessionDir();\n\t\tconst sessionManager = SessionManager.create(this.cwd, sessionDir);\n\t\tif (options?.parentSession) {\n\t\t\tsessionManager.newSession({\n\t\t\t\tparentSession: options.parentSession,\n\t\t\t\trlmDepth: this.session.sessionManager.getHeader()?.rlmDepth ?? this.session.rlmDepth,\n\t\t\t});\n\t\t}\n\t\tconst lease = this.acquireReplacementLease(sessionManager.getSessionFile());\n\n\t\tawait this.teardownForReplacement(\"new\", sessionManager.getSessionFile(), lease);\n\t\tawait this.buildAndApplyReplacement(\n\t\t\t() =>\n\t\t\t\tthis.scopedBuild(() =>\n\t\t\t\t\tthis.createRuntime({\n\t\t\t\t\t\tcwd: this.cwd,\n\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\tsessionStartEvent: {\n\t\t\t\t\t\t\ttype: \"session_start\",\n\t\t\t\t\t\t\treason: \"new\",\n\t\t\t\t\t\t\tpreviousSessionFile,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\tlease,\n\t\t);\n\t\tif (options?.setup) {\n\t\t\tawait options.setup(this.session.sessionManager);\n\t\t\tthis.session.agent.state.messages = this.session.sessionManager.buildSessionContext().messages;\n\t\t}\n\t\tawait this.finishSessionReplacement(options?.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\tconst position = options?.position ?? \"before\";\n\t\tconst beforeResult = await this.emitBeforeFork(entryId, { position });\n\t\tif (beforeResult.cancelled) {\n\t\t\treturn { cancelled: true };\n\t\t}\n\t\tlet targetLeafId: string | null;\n\t\tlet selectedText: string | undefined;\n\n\t\tconst selectedEntry = this.session.sessionManager.getEntry(entryId);\n\t\tif (!selectedEntry) {\n\t\t\tthrow new Error(\"Invalid entry ID for forking\");\n\t\t}\n\n\t\tif (position === \"at\") {\n\t\t\ttargetLeafId = selectedEntry.id;\n\t\t} else {\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\ttargetLeafId = selectedEntry.parentId;\n\t\t\tselectedText = extractUserMessageText(selectedEntry.message.content);\n\t\t}\n\n\t\tconst previousSessionFile = this.session.sessionFile;\n\t\tif (this.session.sessionManager.isPersisted()) {\n\t\t\tconst currentSessionFile = this.session.sessionFile;\n\t\t\tif (!currentSessionFile) {\n\t\t\t\tthrow new Error(\"Persisted session is missing a session file\");\n\t\t\t}\n\t\t\tconst sessionDir = this.session.sessionManager.getSessionDir();\n\t\t\tif (!targetLeafId) {\n\t\t\t\tconst sourceHeader = this.session.sessionManager.getHeader();\n\t\t\t\tconst sessionManager = SessionManager.create(this.cwd, sessionDir);\n\t\t\t\tsessionManager.newSession({\n\t\t\t\t\tparentSession: currentSessionFile,\n\t\t\t\t\trlmDepth: sourceHeader?.rlmDepth ?? this.session.rlmDepth,\n\t\t\t\t});\n\t\t\t\tconst lease = this.acquireReplacementLease(sessionManager.getSessionFile());\n\t\t\t\tawait this.teardownForReplacement(\"fork\", sessionManager.getSessionFile(), lease);\n\t\t\t\tawait this.buildAndApplyReplacement(\n\t\t\t\t\t() =>\n\t\t\t\t\t\tthis.scopedBuild(() =>\n\t\t\t\t\t\t\tthis.createRuntime({\n\t\t\t\t\t\t\t\tcwd: this.cwd,\n\t\t\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\t\t\tsessionStartEvent: {\n\t\t\t\t\t\t\t\t\ttype: \"session_start\",\n\t\t\t\t\t\t\t\t\treason: \"fork\",\n\t\t\t\t\t\t\t\t\tpreviousSessionFile,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\tlease,\n\t\t\t\t);\n\t\t\t\tawait this.finishSessionReplacement(options?.withSession);\n\t\t\t\treturn { cancelled: false, selectedText };\n\t\t\t}\n\n\t\t\tconst sourceManager = SessionManager.open(currentSessionFile, sessionDir);\n\t\t\tconst forkedSessionPath = sourceManager.createBranchedSession(targetLeafId);\n\t\t\tif (!forkedSessionPath) {\n\t\t\t\tthrow new Error(\"Failed to create forked session\");\n\t\t\t}\n\t\t\tconst sessionManager = SessionManager.open(forkedSessionPath, sessionDir);\n\t\t\tconst lease = this.acquireReplacementLease(sessionManager.getSessionFile());\n\t\t\tawait this.teardownForReplacement(\"fork\", sessionManager.getSessionFile(), lease);\n\t\t\tawait this.buildAndApplyReplacement(\n\t\t\t\t() =>\n\t\t\t\t\tthis.scopedBuild(() =>\n\t\t\t\t\t\tthis.createRuntime({\n\t\t\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\t\tsessionStartEvent: {\n\t\t\t\t\t\t\t\ttype: \"session_start\",\n\t\t\t\t\t\t\t\treason: \"fork\",\n\t\t\t\t\t\t\t\tpreviousSessionFile,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\tlease,\n\t\t\t);\n\t\t\tawait this.finishSessionReplacement(options?.withSession);\n\t\t\treturn { cancelled: false, selectedText };\n\t\t}\n\n\t\tconst sessionManager = this.session.sessionManager;\n\t\tif (!targetLeafId) {\n\t\t\tconst sourceHeader = sessionManager.getHeader();\n\t\t\tsessionManager.newSession({\n\t\t\t\tparentSession: this.session.sessionFile,\n\t\t\t\trlmDepth: sourceHeader?.rlmDepth ?? this.session.rlmDepth,\n\t\t\t});\n\t\t} else {\n\t\t\tsessionManager.createBranchedSession(targetLeafId);\n\t\t}\n\t\tconst lease = this.acquireReplacementLease(sessionManager.getSessionFile());\n\t\tawait this.teardownForReplacement(\"fork\", sessionManager.getSessionFile(), lease);\n\t\tawait this.buildAndApplyReplacement(\n\t\t\t() =>\n\t\t\t\tthis.scopedBuild(() =>\n\t\t\t\t\tthis.createRuntime({\n\t\t\t\t\t\tcwd: this.cwd,\n\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\tsessionStartEvent: {\n\t\t\t\t\t\t\ttype: \"session_start\",\n\t\t\t\t\t\t\treason: \"fork\",\n\t\t\t\t\t\t\tpreviousSessionFile,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\tlease,\n\t\t);\n\t\tawait this.finishSessionReplacement(options?.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\tconst resolvedPath = resolve(inputPath);\n\t\tif (!existsSync(resolvedPath)) {\n\t\t\tthrow new SessionImportFileNotFoundError(resolvedPath);\n\t\t}\n\n\t\tconst sessionDir = this.session.sessionManager.getSessionDir();\n\t\tif (!existsSync(sessionDir)) {\n\t\t\tmkdirSync(sessionDir, { recursive: true });\n\t\t}\n\n\t\tconst destinationPath = join(sessionDir, basename(resolvedPath));\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", destinationPath);\n\t\tif (beforeResult.cancelled) {\n\t\t\treturn beforeResult;\n\t\t}\n\n\t\tconst previousSessionFile = this.session.sessionFile;\n\t\tconst lease = this.acquireReplacementLease(destinationPath);\n\t\tlet sessionManager: SessionManager;\n\t\ttry {\n\t\t\tif (resolve(destinationPath) !== resolvedPath) {\n\t\t\t\tcopyFileSync(resolvedPath, destinationPath);\n\t\t\t}\n\n\t\t\tsessionManager = SessionManager.open(destinationPath, sessionDir, cwdOverride);\n\t\t\tassertSessionCwdExists(sessionManager, this.cwd);\n\t\t} catch (error) {\n\t\t\tthis.releaseUncommittedLease(lease);\n\t\t\tthrow error;\n\t\t}\n\t\tawait this.teardownForReplacement(\"resume\", sessionManager.getSessionFile(), lease);\n\t\tawait this.buildAndApplyReplacement(\n\t\t\t() =>\n\t\t\t\tthis.scopedBuild(() =>\n\t\t\t\t\tthis.createRuntime({\n\t\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\tsessionStartEvent: {\n\t\t\t\t\t\t\ttype: \"session_start\",\n\t\t\t\t\t\t\treason: \"resume\",\n\t\t\t\t\t\t\tpreviousSessionFile,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\tlease,\n\t\t);\n\t\tawait this.finishSessionReplacement();\n\t\treturn { cancelled: false };\n\t}\n\n\tprivate async disposeOnce(): 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\tawait flushAgentTraceUpload(this.session.sessionManager);\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();\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(): Promise<void> {\n\t\tif (!this.disposePromise) {\n\t\t\tthis.disposePromise = this.disposeOnce();\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\tconst lease =\n\t\tsessionLease ?? acquireSessionLease(runtimeOptions.sessionManager.getSessionFile(), runtimeOptions.agentDir);\n\ttry {\n\t\tassertSessionCwdExists(runtimeOptions.sessionManager, runtimeOptions.cwd);\n\t\tconst result = await createRuntime(runtimeOptions);\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\tlease?.release();\n\t\tthrow error;\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 { copyFileSync, existsSync, mkdirSync } from \"node:fs\";\nimport { basename, join, 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 { CreateRlmSubagentRuntimeOptions, RlmSubagentRuntime, SubagentRuntimeHost } 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 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\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 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\tentryId: string,\n\t\toptions: { position: \"before\" | \"at\" },\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst runner = this.session.extensionRunner;\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\tprivate bindRuntimeHost(): void {\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 buildAndApplyReplacement(\n\t\tbuild: () => Promise<CreateAgentSessionRuntimeResult>,\n\t\tlease: SessionLease | undefined,\n\t): Promise<void> {\n\t\tlet result: CreateAgentSessionRuntimeResult;\n\t\ttry {\n\t\t\tresult = await build();\n\t\t} catch (error) {\n\t\t\tthis.releaseUncommittedLease(lease);\n\t\t\tthrow error;\n\t\t}\n\t\tthis.apply(result);\n\t\tthis.commitReplacementLease(lease);\n\t}\n\n\tprivate async teardownForReplacement(\n\t\treason: SessionShutdownEvent[\"reason\"],\n\t\ttargetSessionFile: string | undefined,\n\t\tlease: SessionLease | undefined,\n\t): Promise<void> {\n\t\ttry {\n\t\t\tawait this.teardownCurrent(reason, targetSessionFile);\n\t\t} catch (error) {\n\t\t\tthis.releaseUncommittedLease(lease);\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\tconst sessionManager = SessionManager.create(options.parentSession.sessionManager.getCwd(), options.sessionDir);\n\t\tif (options.parentSession.sessionFile) {\n\t\t\tsessionManager.newSession({\n\t\t\t\tparentSession: options.parentSession.sessionFile,\n\t\t\t\trlmDepth: options.rlmDepth,\n\t\t\t});\n\t\t}\n\t\tconst runtime = await this.scopedBuild(() =>\n\t\t\tcreateAgentSessionRuntime(this.createRuntime, {\n\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\tsessionManager,\n\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"startup\" },\n\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\tsessionOptions: {\n\t\t\t\t\tmodel: options.model,\n\t\t\t\t\tthinkingLevel: options.thinkingLevel,\n\t\t\t\t\tserviceTier: options.serviceTier,\n\t\t\t\t\tscopedModels: options.scopedModels,\n\t\t\t\t\tinitialActiveToolNames: options.activeToolNames,\n\t\t\t\t\tallowedToolNames: options.allowedToolNames,\n\t\t\t\t\tcustomTools: options.customTools,\n\t\t\t\t\tincludeGoals: options.includeGoals,\n\t\t\t\t\tincludeCompactSkill: options.includeCompactSkill,\n\t\t\t\t\trlmDepth: options.rlmDepth,\n\t\t\t\t\trlmMaxDepth: options.rlmMaxDepth,\n\t\t\t\t\trlmSessionDir: options.sessionDir,\n\t\t\t\t\trlmParentNodeId: options.rlmParentNodeId,\n\t\t\t\t\trlmParentAgent: options.parentSession.sessionName ?? options.parentSession.sessionId,\n\t\t\t\t},\n\t\t\t\truntimeMetadata: {\n\t\t\t\t\tkind: \"subagent\",\n\t\t\t\t\tcreatedAt: Date.now(),\n\t\t\t\t\tparentSessionId: options.parentSession.sessionId,\n\t\t\t\t\tparentSessionFile: options.parentSession.sessionFile,\n\t\t\t\t\trlmChildId: options.id,\n\t\t\t\t\trlmParentNodeId: options.rlmParentNodeId,\n\t\t\t\t\tprompt: options.prompt,\n\t\t\t\t\tspawnCode: options.spawnCode,\n\t\t\t\t\tsessionDir: options.sessionDir,\n\t\t\t\t},\n\t\t\t}),\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\truntime.session.setSessionName(options.sessionName);\n\t\t\t}\n\t\t\toptions.onSessionPublished?.(runtime.session);\n\t\t} catch (error) {\n\t\t\tthis.subagentRuntimes.delete(options.id);\n\t\t\tawait runtime.dispose();\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\tasync switchSession(\n\t\tsessionPath: string,\n\t\toptions?: {\n\t\t\tcwdOverride?: string;\n\t\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t\t},\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", sessionPath);\n\t\tif (beforeResult.cancelled) {\n\t\t\treturn beforeResult;\n\t\t}\n\n\t\tconst previousSessionFile = this.session.sessionFile;\n\t\tconst lease = this.acquireReplacementLease(sessionPath);\n\t\tlet sessionManager: SessionManager;\n\t\ttry {\n\t\t\tsessionManager = SessionManager.open(sessionPath, undefined, options?.cwdOverride);\n\t\t\tassertSessionCwdExists(sessionManager, this.cwd);\n\t\t} catch (error) {\n\t\t\tthis.releaseUncommittedLease(lease);\n\t\t\tthrow error;\n\t\t}\n\t\tawait this.teardownForReplacement(\"resume\", sessionManager.getSessionFile(), lease);\n\t\tawait this.buildAndApplyReplacement(\n\t\t\t() =>\n\t\t\t\tthis.scopedBuild(() =>\n\t\t\t\t\tthis.createRuntime({\n\t\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\tsessionStartEvent: {\n\t\t\t\t\t\t\ttype: \"session_start\",\n\t\t\t\t\t\t\treason: \"resume\",\n\t\t\t\t\t\t\tpreviousSessionFile,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\tlease,\n\t\t);\n\t\tawait this.finishSessionReplacement(options?.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\tconst beforeResult = await this.emitBeforeSwitch(\"new\");\n\t\tif (beforeResult.cancelled) {\n\t\t\treturn beforeResult;\n\t\t}\n\n\t\tconst previousSessionFile = this.session.sessionFile;\n\t\tconst sessionDir = this.session.sessionManager.getSessionDir();\n\t\tconst sessionManager = SessionManager.create(this.cwd, sessionDir);\n\t\tif (options?.parentSession) {\n\t\t\tsessionManager.newSession({\n\t\t\t\tparentSession: options.parentSession,\n\t\t\t\trlmDepth: this.session.sessionManager.getHeader()?.rlmDepth ?? this.session.rlmDepth,\n\t\t\t});\n\t\t}\n\t\tconst lease = this.acquireReplacementLease(sessionManager.getSessionFile());\n\n\t\tawait this.teardownForReplacement(\"new\", sessionManager.getSessionFile(), lease);\n\t\tawait this.buildAndApplyReplacement(\n\t\t\t() =>\n\t\t\t\tthis.scopedBuild(() =>\n\t\t\t\t\tthis.createRuntime({\n\t\t\t\t\t\tcwd: this.cwd,\n\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\tsessionStartEvent: {\n\t\t\t\t\t\t\ttype: \"session_start\",\n\t\t\t\t\t\t\treason: \"new\",\n\t\t\t\t\t\t\tpreviousSessionFile,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\tlease,\n\t\t);\n\t\tif (options?.setup) {\n\t\t\tawait options.setup(this.session.sessionManager);\n\t\t\tthis.session.agent.state.messages = this.session.sessionManager.buildSessionContext().messages;\n\t\t}\n\t\tawait this.finishSessionReplacement(options?.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\tconst position = options?.position ?? \"before\";\n\t\tconst beforeResult = await this.emitBeforeFork(entryId, { position });\n\t\tif (beforeResult.cancelled) {\n\t\t\treturn { cancelled: true };\n\t\t}\n\t\tlet targetLeafId: string | null;\n\t\tlet selectedText: string | undefined;\n\n\t\tconst selectedEntry = this.session.sessionManager.getEntry(entryId);\n\t\tif (!selectedEntry) {\n\t\t\tthrow new Error(\"Invalid entry ID for forking\");\n\t\t}\n\n\t\tif (position === \"at\") {\n\t\t\ttargetLeafId = selectedEntry.id;\n\t\t} else {\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\ttargetLeafId = selectedEntry.parentId;\n\t\t\tselectedText = extractUserMessageText(selectedEntry.message.content);\n\t\t}\n\n\t\tconst previousSessionFile = this.session.sessionFile;\n\t\tif (this.session.sessionManager.isPersisted()) {\n\t\t\tconst currentSessionFile = this.session.sessionFile;\n\t\t\tif (!currentSessionFile) {\n\t\t\t\tthrow new Error(\"Persisted session is missing a session file\");\n\t\t\t}\n\t\t\tconst sessionDir = this.session.sessionManager.getSessionDir();\n\t\t\tif (!targetLeafId) {\n\t\t\t\tconst sourceHeader = this.session.sessionManager.getHeader();\n\t\t\t\tconst sessionManager = SessionManager.create(this.cwd, sessionDir);\n\t\t\t\tsessionManager.newSession({\n\t\t\t\t\tparentSession: currentSessionFile,\n\t\t\t\t\trlmDepth: sourceHeader?.rlmDepth ?? this.session.rlmDepth,\n\t\t\t\t});\n\t\t\t\tconst lease = this.acquireReplacementLease(sessionManager.getSessionFile());\n\t\t\t\tawait this.teardownForReplacement(\"fork\", sessionManager.getSessionFile(), lease);\n\t\t\t\tawait this.buildAndApplyReplacement(\n\t\t\t\t\t() =>\n\t\t\t\t\t\tthis.scopedBuild(() =>\n\t\t\t\t\t\t\tthis.createRuntime({\n\t\t\t\t\t\t\t\tcwd: this.cwd,\n\t\t\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\t\t\tsessionStartEvent: {\n\t\t\t\t\t\t\t\t\ttype: \"session_start\",\n\t\t\t\t\t\t\t\t\treason: \"fork\",\n\t\t\t\t\t\t\t\t\tpreviousSessionFile,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\tlease,\n\t\t\t\t);\n\t\t\t\tawait this.finishSessionReplacement(options?.withSession);\n\t\t\t\treturn { cancelled: false, selectedText };\n\t\t\t}\n\n\t\t\tconst sourceManager = SessionManager.open(currentSessionFile, sessionDir);\n\t\t\tconst forkedSessionPath = sourceManager.createBranchedSession(targetLeafId);\n\t\t\tif (!forkedSessionPath) {\n\t\t\t\tthrow new Error(\"Failed to create forked session\");\n\t\t\t}\n\t\t\tconst sessionManager = SessionManager.open(forkedSessionPath, sessionDir);\n\t\t\tconst lease = this.acquireReplacementLease(sessionManager.getSessionFile());\n\t\t\tawait this.teardownForReplacement(\"fork\", sessionManager.getSessionFile(), lease);\n\t\t\tawait this.buildAndApplyReplacement(\n\t\t\t\t() =>\n\t\t\t\t\tthis.scopedBuild(() =>\n\t\t\t\t\t\tthis.createRuntime({\n\t\t\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\t\tsessionStartEvent: {\n\t\t\t\t\t\t\t\ttype: \"session_start\",\n\t\t\t\t\t\t\t\treason: \"fork\",\n\t\t\t\t\t\t\t\tpreviousSessionFile,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\tlease,\n\t\t\t);\n\t\t\tawait this.finishSessionReplacement(options?.withSession);\n\t\t\treturn { cancelled: false, selectedText };\n\t\t}\n\n\t\tconst sessionManager = this.session.sessionManager;\n\t\tif (!targetLeafId) {\n\t\t\tconst sourceHeader = sessionManager.getHeader();\n\t\t\tsessionManager.newSession({\n\t\t\t\tparentSession: this.session.sessionFile,\n\t\t\t\trlmDepth: sourceHeader?.rlmDepth ?? this.session.rlmDepth,\n\t\t\t});\n\t\t} else {\n\t\t\tsessionManager.createBranchedSession(targetLeafId);\n\t\t}\n\t\tconst lease = this.acquireReplacementLease(sessionManager.getSessionFile());\n\t\tawait this.teardownForReplacement(\"fork\", sessionManager.getSessionFile(), lease);\n\t\tawait this.buildAndApplyReplacement(\n\t\t\t() =>\n\t\t\t\tthis.scopedBuild(() =>\n\t\t\t\t\tthis.createRuntime({\n\t\t\t\t\t\tcwd: this.cwd,\n\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\tsessionStartEvent: {\n\t\t\t\t\t\t\ttype: \"session_start\",\n\t\t\t\t\t\t\treason: \"fork\",\n\t\t\t\t\t\t\tpreviousSessionFile,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\tlease,\n\t\t);\n\t\tawait this.finishSessionReplacement(options?.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\tconst resolvedPath = resolve(inputPath);\n\t\tif (!existsSync(resolvedPath)) {\n\t\t\tthrow new SessionImportFileNotFoundError(resolvedPath);\n\t\t}\n\n\t\tconst sessionDir = this.session.sessionManager.getSessionDir();\n\t\tif (!existsSync(sessionDir)) {\n\t\t\tmkdirSync(sessionDir, { recursive: true });\n\t\t}\n\n\t\tconst destinationPath = join(sessionDir, basename(resolvedPath));\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", destinationPath);\n\t\tif (beforeResult.cancelled) {\n\t\t\treturn beforeResult;\n\t\t}\n\n\t\tconst previousSessionFile = this.session.sessionFile;\n\t\tconst lease = this.acquireReplacementLease(destinationPath);\n\t\tlet sessionManager: SessionManager;\n\t\ttry {\n\t\t\tif (resolve(destinationPath) !== resolvedPath) {\n\t\t\t\tcopyFileSync(resolvedPath, destinationPath);\n\t\t\t}\n\n\t\t\tsessionManager = SessionManager.open(destinationPath, sessionDir, cwdOverride);\n\t\t\tassertSessionCwdExists(sessionManager, this.cwd);\n\t\t} catch (error) {\n\t\t\tthis.releaseUncommittedLease(lease);\n\t\t\tthrow error;\n\t\t}\n\t\tawait this.teardownForReplacement(\"resume\", sessionManager.getSessionFile(), lease);\n\t\tawait this.buildAndApplyReplacement(\n\t\t\t() =>\n\t\t\t\tthis.scopedBuild(() =>\n\t\t\t\t\tthis.createRuntime({\n\t\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\tsessionStartEvent: {\n\t\t\t\t\t\t\ttype: \"session_start\",\n\t\t\t\t\t\t\treason: \"resume\",\n\t\t\t\t\t\t\tpreviousSessionFile,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\tlease,\n\t\t);\n\t\tawait this.finishSessionReplacement();\n\t\treturn { cancelled: false };\n\t}\n\n\tprivate async disposeOnce(): 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();\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(): Promise<void> {\n\t\tif (!this.disposePromise) {\n\t\t\tthis.disposePromise = this.disposeOnce();\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\tconst lease =\n\t\tsessionLease ?? acquireSessionLease(runtimeOptions.sessionManager.getSessionFile(), runtimeOptions.agentDir);\n\ttry {\n\t\tassertSessionCwdExists(runtimeOptions.sessionManager, runtimeOptions.cwd);\n\t\tconst result = await createRuntime(runtimeOptions);\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\tlease?.release();\n\t\tthrow error;\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,6 +1,5 @@
|
|
|
1
1
|
import { copyFileSync, existsSync, mkdirSync } from "node:fs";
|
|
2
2
|
import { basename, join, resolve } from "node:path";
|
|
3
|
-
import { flushAgentTraceUpload } from "./agent-traces.js";
|
|
4
3
|
import { isNoModelsAvailableMessage } from "./auth-guidance.js";
|
|
5
4
|
import { emitSessionShutdownEvent } from "./extensions/runner.js";
|
|
6
5
|
import { assertSessionCwdExists } from "./session-cwd.js";
|
|
@@ -137,7 +136,6 @@ export class AgentSessionRuntime {
|
|
|
137
136
|
reason,
|
|
138
137
|
targetSessionFile,
|
|
139
138
|
});
|
|
140
|
-
await flushAgentTraceUpload(this.session.sessionManager).catch(() => undefined);
|
|
141
139
|
this.beforeSessionInvalidate?.();
|
|
142
140
|
// Await the kernel's final snapshot flush before invalidating the session.
|
|
143
141
|
await this.session.disposeAsync();
|
|
@@ -549,12 +547,6 @@ export class AgentSessionRuntime {
|
|
|
549
547
|
catch (error) {
|
|
550
548
|
disposeError ??= error;
|
|
551
549
|
}
|
|
552
|
-
try {
|
|
553
|
-
await flushAgentTraceUpload(this.session.sessionManager);
|
|
554
|
-
}
|
|
555
|
-
catch (error) {
|
|
556
|
-
disposeError ??= error;
|
|
557
|
-
}
|
|
558
550
|
try {
|
|
559
551
|
this.beforeSessionInvalidate?.();
|
|
560
552
|
}
|
|
@@ -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 { copyFileSync, existsSync, mkdirSync } from \"node:fs\";\nimport { basename, join, 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 { flushAgentTraceUpload } from \"./agent-traces.js\";\nimport { isNoModelsAvailableMessage } from \"./auth-guidance.js\";\nimport type { ReplacedSessionContext, SessionShutdownEvent, SessionStartEvent } from \"./extensions/index.js\";\nimport { emitSessionShutdownEvent } from \"./extensions/runner.js\";\nimport type { CreateRlmSubagentRuntimeOptions, RlmSubagentRuntime, SubagentRuntimeHost } 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 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\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 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\tentryId: string,\n\t\toptions: { position: \"before\" | \"at\" },\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst runner = this.session.extensionRunner;\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\tawait flushAgentTraceUpload(this.session.sessionManager).catch(() => undefined);\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\tprivate bindRuntimeHost(): void {\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 buildAndApplyReplacement(\n\t\tbuild: () => Promise<CreateAgentSessionRuntimeResult>,\n\t\tlease: SessionLease | undefined,\n\t): Promise<void> {\n\t\tlet result: CreateAgentSessionRuntimeResult;\n\t\ttry {\n\t\t\tresult = await build();\n\t\t} catch (error) {\n\t\t\tthis.releaseUncommittedLease(lease);\n\t\t\tthrow error;\n\t\t}\n\t\tthis.apply(result);\n\t\tthis.commitReplacementLease(lease);\n\t}\n\n\tprivate async teardownForReplacement(\n\t\treason: SessionShutdownEvent[\"reason\"],\n\t\ttargetSessionFile: string | undefined,\n\t\tlease: SessionLease | undefined,\n\t): Promise<void> {\n\t\ttry {\n\t\t\tawait this.teardownCurrent(reason, targetSessionFile);\n\t\t} catch (error) {\n\t\t\tthis.releaseUncommittedLease(lease);\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\tconst sessionManager = SessionManager.create(options.parentSession.sessionManager.getCwd(), options.sessionDir);\n\t\tif (options.parentSession.sessionFile) {\n\t\t\tsessionManager.newSession({\n\t\t\t\tparentSession: options.parentSession.sessionFile,\n\t\t\t\trlmDepth: options.rlmDepth,\n\t\t\t});\n\t\t}\n\t\tconst runtime = await this.scopedBuild(() =>\n\t\t\tcreateAgentSessionRuntime(this.createRuntime, {\n\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\tsessionManager,\n\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"startup\" },\n\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\tsessionOptions: {\n\t\t\t\t\tmodel: options.model,\n\t\t\t\t\tthinkingLevel: options.thinkingLevel,\n\t\t\t\t\tserviceTier: options.serviceTier,\n\t\t\t\t\tscopedModels: options.scopedModels,\n\t\t\t\t\tinitialActiveToolNames: options.activeToolNames,\n\t\t\t\t\tallowedToolNames: options.allowedToolNames,\n\t\t\t\t\tcustomTools: options.customTools,\n\t\t\t\t\tincludeGoals: options.includeGoals,\n\t\t\t\t\tincludeCompactSkill: options.includeCompactSkill,\n\t\t\t\t\trlmDepth: options.rlmDepth,\n\t\t\t\t\trlmMaxDepth: options.rlmMaxDepth,\n\t\t\t\t\trlmSessionDir: options.sessionDir,\n\t\t\t\t\trlmParentNodeId: options.rlmParentNodeId,\n\t\t\t\t\trlmParentAgent: options.parentSession.sessionName ?? options.parentSession.sessionId,\n\t\t\t\t},\n\t\t\t\truntimeMetadata: {\n\t\t\t\t\tkind: \"subagent\",\n\t\t\t\t\tcreatedAt: Date.now(),\n\t\t\t\t\tparentSessionId: options.parentSession.sessionId,\n\t\t\t\t\tparentSessionFile: options.parentSession.sessionFile,\n\t\t\t\t\trlmChildId: options.id,\n\t\t\t\t\trlmParentNodeId: options.rlmParentNodeId,\n\t\t\t\t\tprompt: options.prompt,\n\t\t\t\t\tspawnCode: options.spawnCode,\n\t\t\t\t\tsessionDir: options.sessionDir,\n\t\t\t\t},\n\t\t\t}),\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\truntime.session.setSessionName(options.sessionName);\n\t\t\t}\n\t\t\toptions.onSessionPublished?.(runtime.session);\n\t\t} catch (error) {\n\t\t\tthis.subagentRuntimes.delete(options.id);\n\t\t\tawait runtime.dispose();\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\tasync switchSession(\n\t\tsessionPath: string,\n\t\toptions?: {\n\t\t\tcwdOverride?: string;\n\t\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t\t},\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", sessionPath);\n\t\tif (beforeResult.cancelled) {\n\t\t\treturn beforeResult;\n\t\t}\n\n\t\tconst previousSessionFile = this.session.sessionFile;\n\t\tconst lease = this.acquireReplacementLease(sessionPath);\n\t\tlet sessionManager: SessionManager;\n\t\ttry {\n\t\t\tsessionManager = SessionManager.open(sessionPath, undefined, options?.cwdOverride);\n\t\t\tassertSessionCwdExists(sessionManager, this.cwd);\n\t\t} catch (error) {\n\t\t\tthis.releaseUncommittedLease(lease);\n\t\t\tthrow error;\n\t\t}\n\t\tawait this.teardownForReplacement(\"resume\", sessionManager.getSessionFile(), lease);\n\t\tawait this.buildAndApplyReplacement(\n\t\t\t() =>\n\t\t\t\tthis.scopedBuild(() =>\n\t\t\t\t\tthis.createRuntime({\n\t\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\tsessionStartEvent: {\n\t\t\t\t\t\t\ttype: \"session_start\",\n\t\t\t\t\t\t\treason: \"resume\",\n\t\t\t\t\t\t\tpreviousSessionFile,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\tlease,\n\t\t);\n\t\tawait this.finishSessionReplacement(options?.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\tconst beforeResult = await this.emitBeforeSwitch(\"new\");\n\t\tif (beforeResult.cancelled) {\n\t\t\treturn beforeResult;\n\t\t}\n\n\t\tconst previousSessionFile = this.session.sessionFile;\n\t\tconst sessionDir = this.session.sessionManager.getSessionDir();\n\t\tconst sessionManager = SessionManager.create(this.cwd, sessionDir);\n\t\tif (options?.parentSession) {\n\t\t\tsessionManager.newSession({\n\t\t\t\tparentSession: options.parentSession,\n\t\t\t\trlmDepth: this.session.sessionManager.getHeader()?.rlmDepth ?? this.session.rlmDepth,\n\t\t\t});\n\t\t}\n\t\tconst lease = this.acquireReplacementLease(sessionManager.getSessionFile());\n\n\t\tawait this.teardownForReplacement(\"new\", sessionManager.getSessionFile(), lease);\n\t\tawait this.buildAndApplyReplacement(\n\t\t\t() =>\n\t\t\t\tthis.scopedBuild(() =>\n\t\t\t\t\tthis.createRuntime({\n\t\t\t\t\t\tcwd: this.cwd,\n\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\tsessionStartEvent: {\n\t\t\t\t\t\t\ttype: \"session_start\",\n\t\t\t\t\t\t\treason: \"new\",\n\t\t\t\t\t\t\tpreviousSessionFile,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\tlease,\n\t\t);\n\t\tif (options?.setup) {\n\t\t\tawait options.setup(this.session.sessionManager);\n\t\t\tthis.session.agent.state.messages = this.session.sessionManager.buildSessionContext().messages;\n\t\t}\n\t\tawait this.finishSessionReplacement(options?.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\tconst position = options?.position ?? \"before\";\n\t\tconst beforeResult = await this.emitBeforeFork(entryId, { position });\n\t\tif (beforeResult.cancelled) {\n\t\t\treturn { cancelled: true };\n\t\t}\n\t\tlet targetLeafId: string | null;\n\t\tlet selectedText: string | undefined;\n\n\t\tconst selectedEntry = this.session.sessionManager.getEntry(entryId);\n\t\tif (!selectedEntry) {\n\t\t\tthrow new Error(\"Invalid entry ID for forking\");\n\t\t}\n\n\t\tif (position === \"at\") {\n\t\t\ttargetLeafId = selectedEntry.id;\n\t\t} else {\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\ttargetLeafId = selectedEntry.parentId;\n\t\t\tselectedText = extractUserMessageText(selectedEntry.message.content);\n\t\t}\n\n\t\tconst previousSessionFile = this.session.sessionFile;\n\t\tif (this.session.sessionManager.isPersisted()) {\n\t\t\tconst currentSessionFile = this.session.sessionFile;\n\t\t\tif (!currentSessionFile) {\n\t\t\t\tthrow new Error(\"Persisted session is missing a session file\");\n\t\t\t}\n\t\t\tconst sessionDir = this.session.sessionManager.getSessionDir();\n\t\t\tif (!targetLeafId) {\n\t\t\t\tconst sourceHeader = this.session.sessionManager.getHeader();\n\t\t\t\tconst sessionManager = SessionManager.create(this.cwd, sessionDir);\n\t\t\t\tsessionManager.newSession({\n\t\t\t\t\tparentSession: currentSessionFile,\n\t\t\t\t\trlmDepth: sourceHeader?.rlmDepth ?? this.session.rlmDepth,\n\t\t\t\t});\n\t\t\t\tconst lease = this.acquireReplacementLease(sessionManager.getSessionFile());\n\t\t\t\tawait this.teardownForReplacement(\"fork\", sessionManager.getSessionFile(), lease);\n\t\t\t\tawait this.buildAndApplyReplacement(\n\t\t\t\t\t() =>\n\t\t\t\t\t\tthis.scopedBuild(() =>\n\t\t\t\t\t\t\tthis.createRuntime({\n\t\t\t\t\t\t\t\tcwd: this.cwd,\n\t\t\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\t\t\tsessionStartEvent: {\n\t\t\t\t\t\t\t\t\ttype: \"session_start\",\n\t\t\t\t\t\t\t\t\treason: \"fork\",\n\t\t\t\t\t\t\t\t\tpreviousSessionFile,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\tlease,\n\t\t\t\t);\n\t\t\t\tawait this.finishSessionReplacement(options?.withSession);\n\t\t\t\treturn { cancelled: false, selectedText };\n\t\t\t}\n\n\t\t\tconst sourceManager = SessionManager.open(currentSessionFile, sessionDir);\n\t\t\tconst forkedSessionPath = sourceManager.createBranchedSession(targetLeafId);\n\t\t\tif (!forkedSessionPath) {\n\t\t\t\tthrow new Error(\"Failed to create forked session\");\n\t\t\t}\n\t\t\tconst sessionManager = SessionManager.open(forkedSessionPath, sessionDir);\n\t\t\tconst lease = this.acquireReplacementLease(sessionManager.getSessionFile());\n\t\t\tawait this.teardownForReplacement(\"fork\", sessionManager.getSessionFile(), lease);\n\t\t\tawait this.buildAndApplyReplacement(\n\t\t\t\t() =>\n\t\t\t\t\tthis.scopedBuild(() =>\n\t\t\t\t\t\tthis.createRuntime({\n\t\t\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\t\tsessionStartEvent: {\n\t\t\t\t\t\t\t\ttype: \"session_start\",\n\t\t\t\t\t\t\t\treason: \"fork\",\n\t\t\t\t\t\t\t\tpreviousSessionFile,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\tlease,\n\t\t\t);\n\t\t\tawait this.finishSessionReplacement(options?.withSession);\n\t\t\treturn { cancelled: false, selectedText };\n\t\t}\n\n\t\tconst sessionManager = this.session.sessionManager;\n\t\tif (!targetLeafId) {\n\t\t\tconst sourceHeader = sessionManager.getHeader();\n\t\t\tsessionManager.newSession({\n\t\t\t\tparentSession: this.session.sessionFile,\n\t\t\t\trlmDepth: sourceHeader?.rlmDepth ?? this.session.rlmDepth,\n\t\t\t});\n\t\t} else {\n\t\t\tsessionManager.createBranchedSession(targetLeafId);\n\t\t}\n\t\tconst lease = this.acquireReplacementLease(sessionManager.getSessionFile());\n\t\tawait this.teardownForReplacement(\"fork\", sessionManager.getSessionFile(), lease);\n\t\tawait this.buildAndApplyReplacement(\n\t\t\t() =>\n\t\t\t\tthis.scopedBuild(() =>\n\t\t\t\t\tthis.createRuntime({\n\t\t\t\t\t\tcwd: this.cwd,\n\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\tsessionStartEvent: {\n\t\t\t\t\t\t\ttype: \"session_start\",\n\t\t\t\t\t\t\treason: \"fork\",\n\t\t\t\t\t\t\tpreviousSessionFile,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\tlease,\n\t\t);\n\t\tawait this.finishSessionReplacement(options?.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\tconst resolvedPath = resolve(inputPath);\n\t\tif (!existsSync(resolvedPath)) {\n\t\t\tthrow new SessionImportFileNotFoundError(resolvedPath);\n\t\t}\n\n\t\tconst sessionDir = this.session.sessionManager.getSessionDir();\n\t\tif (!existsSync(sessionDir)) {\n\t\t\tmkdirSync(sessionDir, { recursive: true });\n\t\t}\n\n\t\tconst destinationPath = join(sessionDir, basename(resolvedPath));\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", destinationPath);\n\t\tif (beforeResult.cancelled) {\n\t\t\treturn beforeResult;\n\t\t}\n\n\t\tconst previousSessionFile = this.session.sessionFile;\n\t\tconst lease = this.acquireReplacementLease(destinationPath);\n\t\tlet sessionManager: SessionManager;\n\t\ttry {\n\t\t\tif (resolve(destinationPath) !== resolvedPath) {\n\t\t\t\tcopyFileSync(resolvedPath, destinationPath);\n\t\t\t}\n\n\t\t\tsessionManager = SessionManager.open(destinationPath, sessionDir, cwdOverride);\n\t\t\tassertSessionCwdExists(sessionManager, this.cwd);\n\t\t} catch (error) {\n\t\t\tthis.releaseUncommittedLease(lease);\n\t\t\tthrow error;\n\t\t}\n\t\tawait this.teardownForReplacement(\"resume\", sessionManager.getSessionFile(), lease);\n\t\tawait this.buildAndApplyReplacement(\n\t\t\t() =>\n\t\t\t\tthis.scopedBuild(() =>\n\t\t\t\t\tthis.createRuntime({\n\t\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\tsessionStartEvent: {\n\t\t\t\t\t\t\ttype: \"session_start\",\n\t\t\t\t\t\t\treason: \"resume\",\n\t\t\t\t\t\t\tpreviousSessionFile,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\tlease,\n\t\t);\n\t\tawait this.finishSessionReplacement();\n\t\treturn { cancelled: false };\n\t}\n\n\tprivate async disposeOnce(): 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\tawait flushAgentTraceUpload(this.session.sessionManager);\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();\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(): Promise<void> {\n\t\tif (!this.disposePromise) {\n\t\t\tthis.disposePromise = this.disposeOnce();\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\tconst lease =\n\t\tsessionLease ?? acquireSessionLease(runtimeOptions.sessionManager.getSessionFile(), runtimeOptions.agentDir);\n\ttry {\n\t\tassertSessionCwdExists(runtimeOptions.sessionManager, runtimeOptions.cwd);\n\t\tconst result = await createRuntime(runtimeOptions);\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\tlease?.release();\n\t\tthrow error;\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 { copyFileSync, existsSync, mkdirSync } from \"node:fs\";\nimport { basename, join, 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 { CreateRlmSubagentRuntimeOptions, RlmSubagentRuntime, SubagentRuntimeHost } 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 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\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 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\tentryId: string,\n\t\toptions: { position: \"before\" | \"at\" },\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst runner = this.session.extensionRunner;\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\tprivate bindRuntimeHost(): void {\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 buildAndApplyReplacement(\n\t\tbuild: () => Promise<CreateAgentSessionRuntimeResult>,\n\t\tlease: SessionLease | undefined,\n\t): Promise<void> {\n\t\tlet result: CreateAgentSessionRuntimeResult;\n\t\ttry {\n\t\t\tresult = await build();\n\t\t} catch (error) {\n\t\t\tthis.releaseUncommittedLease(lease);\n\t\t\tthrow error;\n\t\t}\n\t\tthis.apply(result);\n\t\tthis.commitReplacementLease(lease);\n\t}\n\n\tprivate async teardownForReplacement(\n\t\treason: SessionShutdownEvent[\"reason\"],\n\t\ttargetSessionFile: string | undefined,\n\t\tlease: SessionLease | undefined,\n\t): Promise<void> {\n\t\ttry {\n\t\t\tawait this.teardownCurrent(reason, targetSessionFile);\n\t\t} catch (error) {\n\t\t\tthis.releaseUncommittedLease(lease);\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\tconst sessionManager = SessionManager.create(options.parentSession.sessionManager.getCwd(), options.sessionDir);\n\t\tif (options.parentSession.sessionFile) {\n\t\t\tsessionManager.newSession({\n\t\t\t\tparentSession: options.parentSession.sessionFile,\n\t\t\t\trlmDepth: options.rlmDepth,\n\t\t\t});\n\t\t}\n\t\tconst runtime = await this.scopedBuild(() =>\n\t\t\tcreateAgentSessionRuntime(this.createRuntime, {\n\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\tsessionManager,\n\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"startup\" },\n\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\tsessionOptions: {\n\t\t\t\t\tmodel: options.model,\n\t\t\t\t\tthinkingLevel: options.thinkingLevel,\n\t\t\t\t\tserviceTier: options.serviceTier,\n\t\t\t\t\tscopedModels: options.scopedModels,\n\t\t\t\t\tinitialActiveToolNames: options.activeToolNames,\n\t\t\t\t\tallowedToolNames: options.allowedToolNames,\n\t\t\t\t\tcustomTools: options.customTools,\n\t\t\t\t\tincludeGoals: options.includeGoals,\n\t\t\t\t\tincludeCompactSkill: options.includeCompactSkill,\n\t\t\t\t\trlmDepth: options.rlmDepth,\n\t\t\t\t\trlmMaxDepth: options.rlmMaxDepth,\n\t\t\t\t\trlmSessionDir: options.sessionDir,\n\t\t\t\t\trlmParentNodeId: options.rlmParentNodeId,\n\t\t\t\t\trlmParentAgent: options.parentSession.sessionName ?? options.parentSession.sessionId,\n\t\t\t\t},\n\t\t\t\truntimeMetadata: {\n\t\t\t\t\tkind: \"subagent\",\n\t\t\t\t\tcreatedAt: Date.now(),\n\t\t\t\t\tparentSessionId: options.parentSession.sessionId,\n\t\t\t\t\tparentSessionFile: options.parentSession.sessionFile,\n\t\t\t\t\trlmChildId: options.id,\n\t\t\t\t\trlmParentNodeId: options.rlmParentNodeId,\n\t\t\t\t\tprompt: options.prompt,\n\t\t\t\t\tspawnCode: options.spawnCode,\n\t\t\t\t\tsessionDir: options.sessionDir,\n\t\t\t\t},\n\t\t\t}),\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\truntime.session.setSessionName(options.sessionName);\n\t\t\t}\n\t\t\toptions.onSessionPublished?.(runtime.session);\n\t\t} catch (error) {\n\t\t\tthis.subagentRuntimes.delete(options.id);\n\t\t\tawait runtime.dispose();\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\tasync switchSession(\n\t\tsessionPath: string,\n\t\toptions?: {\n\t\t\tcwdOverride?: string;\n\t\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t\t},\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", sessionPath);\n\t\tif (beforeResult.cancelled) {\n\t\t\treturn beforeResult;\n\t\t}\n\n\t\tconst previousSessionFile = this.session.sessionFile;\n\t\tconst lease = this.acquireReplacementLease(sessionPath);\n\t\tlet sessionManager: SessionManager;\n\t\ttry {\n\t\t\tsessionManager = SessionManager.open(sessionPath, undefined, options?.cwdOverride);\n\t\t\tassertSessionCwdExists(sessionManager, this.cwd);\n\t\t} catch (error) {\n\t\t\tthis.releaseUncommittedLease(lease);\n\t\t\tthrow error;\n\t\t}\n\t\tawait this.teardownForReplacement(\"resume\", sessionManager.getSessionFile(), lease);\n\t\tawait this.buildAndApplyReplacement(\n\t\t\t() =>\n\t\t\t\tthis.scopedBuild(() =>\n\t\t\t\t\tthis.createRuntime({\n\t\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\tsessionStartEvent: {\n\t\t\t\t\t\t\ttype: \"session_start\",\n\t\t\t\t\t\t\treason: \"resume\",\n\t\t\t\t\t\t\tpreviousSessionFile,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\tlease,\n\t\t);\n\t\tawait this.finishSessionReplacement(options?.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\tconst beforeResult = await this.emitBeforeSwitch(\"new\");\n\t\tif (beforeResult.cancelled) {\n\t\t\treturn beforeResult;\n\t\t}\n\n\t\tconst previousSessionFile = this.session.sessionFile;\n\t\tconst sessionDir = this.session.sessionManager.getSessionDir();\n\t\tconst sessionManager = SessionManager.create(this.cwd, sessionDir);\n\t\tif (options?.parentSession) {\n\t\t\tsessionManager.newSession({\n\t\t\t\tparentSession: options.parentSession,\n\t\t\t\trlmDepth: this.session.sessionManager.getHeader()?.rlmDepth ?? this.session.rlmDepth,\n\t\t\t});\n\t\t}\n\t\tconst lease = this.acquireReplacementLease(sessionManager.getSessionFile());\n\n\t\tawait this.teardownForReplacement(\"new\", sessionManager.getSessionFile(), lease);\n\t\tawait this.buildAndApplyReplacement(\n\t\t\t() =>\n\t\t\t\tthis.scopedBuild(() =>\n\t\t\t\t\tthis.createRuntime({\n\t\t\t\t\t\tcwd: this.cwd,\n\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\tsessionStartEvent: {\n\t\t\t\t\t\t\ttype: \"session_start\",\n\t\t\t\t\t\t\treason: \"new\",\n\t\t\t\t\t\t\tpreviousSessionFile,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\tlease,\n\t\t);\n\t\tif (options?.setup) {\n\t\t\tawait options.setup(this.session.sessionManager);\n\t\t\tthis.session.agent.state.messages = this.session.sessionManager.buildSessionContext().messages;\n\t\t}\n\t\tawait this.finishSessionReplacement(options?.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\tconst position = options?.position ?? \"before\";\n\t\tconst beforeResult = await this.emitBeforeFork(entryId, { position });\n\t\tif (beforeResult.cancelled) {\n\t\t\treturn { cancelled: true };\n\t\t}\n\t\tlet targetLeafId: string | null;\n\t\tlet selectedText: string | undefined;\n\n\t\tconst selectedEntry = this.session.sessionManager.getEntry(entryId);\n\t\tif (!selectedEntry) {\n\t\t\tthrow new Error(\"Invalid entry ID for forking\");\n\t\t}\n\n\t\tif (position === \"at\") {\n\t\t\ttargetLeafId = selectedEntry.id;\n\t\t} else {\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\ttargetLeafId = selectedEntry.parentId;\n\t\t\tselectedText = extractUserMessageText(selectedEntry.message.content);\n\t\t}\n\n\t\tconst previousSessionFile = this.session.sessionFile;\n\t\tif (this.session.sessionManager.isPersisted()) {\n\t\t\tconst currentSessionFile = this.session.sessionFile;\n\t\t\tif (!currentSessionFile) {\n\t\t\t\tthrow new Error(\"Persisted session is missing a session file\");\n\t\t\t}\n\t\t\tconst sessionDir = this.session.sessionManager.getSessionDir();\n\t\t\tif (!targetLeafId) {\n\t\t\t\tconst sourceHeader = this.session.sessionManager.getHeader();\n\t\t\t\tconst sessionManager = SessionManager.create(this.cwd, sessionDir);\n\t\t\t\tsessionManager.newSession({\n\t\t\t\t\tparentSession: currentSessionFile,\n\t\t\t\t\trlmDepth: sourceHeader?.rlmDepth ?? this.session.rlmDepth,\n\t\t\t\t});\n\t\t\t\tconst lease = this.acquireReplacementLease(sessionManager.getSessionFile());\n\t\t\t\tawait this.teardownForReplacement(\"fork\", sessionManager.getSessionFile(), lease);\n\t\t\t\tawait this.buildAndApplyReplacement(\n\t\t\t\t\t() =>\n\t\t\t\t\t\tthis.scopedBuild(() =>\n\t\t\t\t\t\t\tthis.createRuntime({\n\t\t\t\t\t\t\t\tcwd: this.cwd,\n\t\t\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\t\t\tsessionStartEvent: {\n\t\t\t\t\t\t\t\t\ttype: \"session_start\",\n\t\t\t\t\t\t\t\t\treason: \"fork\",\n\t\t\t\t\t\t\t\t\tpreviousSessionFile,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\tlease,\n\t\t\t\t);\n\t\t\t\tawait this.finishSessionReplacement(options?.withSession);\n\t\t\t\treturn { cancelled: false, selectedText };\n\t\t\t}\n\n\t\t\tconst sourceManager = SessionManager.open(currentSessionFile, sessionDir);\n\t\t\tconst forkedSessionPath = sourceManager.createBranchedSession(targetLeafId);\n\t\t\tif (!forkedSessionPath) {\n\t\t\t\tthrow new Error(\"Failed to create forked session\");\n\t\t\t}\n\t\t\tconst sessionManager = SessionManager.open(forkedSessionPath, sessionDir);\n\t\t\tconst lease = this.acquireReplacementLease(sessionManager.getSessionFile());\n\t\t\tawait this.teardownForReplacement(\"fork\", sessionManager.getSessionFile(), lease);\n\t\t\tawait this.buildAndApplyReplacement(\n\t\t\t\t() =>\n\t\t\t\t\tthis.scopedBuild(() =>\n\t\t\t\t\t\tthis.createRuntime({\n\t\t\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\t\tsessionStartEvent: {\n\t\t\t\t\t\t\t\ttype: \"session_start\",\n\t\t\t\t\t\t\t\treason: \"fork\",\n\t\t\t\t\t\t\t\tpreviousSessionFile,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\tlease,\n\t\t\t);\n\t\t\tawait this.finishSessionReplacement(options?.withSession);\n\t\t\treturn { cancelled: false, selectedText };\n\t\t}\n\n\t\tconst sessionManager = this.session.sessionManager;\n\t\tif (!targetLeafId) {\n\t\t\tconst sourceHeader = sessionManager.getHeader();\n\t\t\tsessionManager.newSession({\n\t\t\t\tparentSession: this.session.sessionFile,\n\t\t\t\trlmDepth: sourceHeader?.rlmDepth ?? this.session.rlmDepth,\n\t\t\t});\n\t\t} else {\n\t\t\tsessionManager.createBranchedSession(targetLeafId);\n\t\t}\n\t\tconst lease = this.acquireReplacementLease(sessionManager.getSessionFile());\n\t\tawait this.teardownForReplacement(\"fork\", sessionManager.getSessionFile(), lease);\n\t\tawait this.buildAndApplyReplacement(\n\t\t\t() =>\n\t\t\t\tthis.scopedBuild(() =>\n\t\t\t\t\tthis.createRuntime({\n\t\t\t\t\t\tcwd: this.cwd,\n\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\tsessionStartEvent: {\n\t\t\t\t\t\t\ttype: \"session_start\",\n\t\t\t\t\t\t\treason: \"fork\",\n\t\t\t\t\t\t\tpreviousSessionFile,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\tlease,\n\t\t);\n\t\tawait this.finishSessionReplacement(options?.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\tconst resolvedPath = resolve(inputPath);\n\t\tif (!existsSync(resolvedPath)) {\n\t\t\tthrow new SessionImportFileNotFoundError(resolvedPath);\n\t\t}\n\n\t\tconst sessionDir = this.session.sessionManager.getSessionDir();\n\t\tif (!existsSync(sessionDir)) {\n\t\t\tmkdirSync(sessionDir, { recursive: true });\n\t\t}\n\n\t\tconst destinationPath = join(sessionDir, basename(resolvedPath));\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", destinationPath);\n\t\tif (beforeResult.cancelled) {\n\t\t\treturn beforeResult;\n\t\t}\n\n\t\tconst previousSessionFile = this.session.sessionFile;\n\t\tconst lease = this.acquireReplacementLease(destinationPath);\n\t\tlet sessionManager: SessionManager;\n\t\ttry {\n\t\t\tif (resolve(destinationPath) !== resolvedPath) {\n\t\t\t\tcopyFileSync(resolvedPath, destinationPath);\n\t\t\t}\n\n\t\t\tsessionManager = SessionManager.open(destinationPath, sessionDir, cwdOverride);\n\t\t\tassertSessionCwdExists(sessionManager, this.cwd);\n\t\t} catch (error) {\n\t\t\tthis.releaseUncommittedLease(lease);\n\t\t\tthrow error;\n\t\t}\n\t\tawait this.teardownForReplacement(\"resume\", sessionManager.getSessionFile(), lease);\n\t\tawait this.buildAndApplyReplacement(\n\t\t\t() =>\n\t\t\t\tthis.scopedBuild(() =>\n\t\t\t\t\tthis.createRuntime({\n\t\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\t\tsessionManager,\n\t\t\t\t\t\tsessionStartEvent: {\n\t\t\t\t\t\t\ttype: \"session_start\",\n\t\t\t\t\t\t\treason: \"resume\",\n\t\t\t\t\t\t\tpreviousSessionFile,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\tlease,\n\t\t);\n\t\tawait this.finishSessionReplacement();\n\t\treturn { cancelled: false };\n\t}\n\n\tprivate async disposeOnce(): 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();\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(): Promise<void> {\n\t\tif (!this.disposePromise) {\n\t\t\tthis.disposePromise = this.disposeOnce();\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\tconst lease =\n\t\tsessionLease ?? acquireSessionLease(runtimeOptions.sessionManager.getSessionFile(), runtimeOptions.agentDir);\n\ttry {\n\t\tassertSessionCwdExists(runtimeOptions.sessionManager, runtimeOptions.cwd);\n\t\tconst result = await createRuntime(runtimeOptions);\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\tlease?.release();\n\t\tthrow error;\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"]}
|
|
@@ -33,7 +33,6 @@ export interface CreateAgentSessionServicesOptions {
|
|
|
33
33
|
* would release the pane while the parent is still running.
|
|
34
34
|
*/
|
|
35
35
|
noBuiltinHerdrReporter?: boolean;
|
|
36
|
-
telemetryDisabled?: true;
|
|
37
36
|
}
|
|
38
37
|
export interface AgentSessionCreationOptions {
|
|
39
38
|
model?: Model<any>;
|
|
@@ -63,7 +62,6 @@ export interface AgentSessionCreationOptions {
|
|
|
63
62
|
autonomous?: AgentAutonomousConfig;
|
|
64
63
|
serializedRefine?: boolean;
|
|
65
64
|
executionMode?: AgentExecutionMode;
|
|
66
|
-
telemetryDisabled?: true;
|
|
67
65
|
initialGoal?: {
|
|
68
66
|
objective: string;
|
|
69
67
|
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 \"@asm-agent/agent\";\nimport type { Model, ServiceTier } from \"@asm-agent/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 { 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\";\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\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\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\"ASM Agent sends pseudonymous usage and performance metrics without prompts, responses, tool content, file paths, or repository data. Disable this with telemetry.enabled=false, ASM_AGENT_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});\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\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\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 \"@asm-agent/agent\";\nimport type { Model, ServiceTier } from \"@asm-agent/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 { 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\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\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\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\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"]}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
2
|
import { getAgentDir } from "../config.js";
|
|
3
|
-
import { installAgentTraceUpload } from "./agent-traces.js";
|
|
4
3
|
import { AuthStorage } from "./auth-storage.js";
|
|
5
4
|
import { createHerdrAgentStateExtension } from "./extensions/builtin/herdr-agent-state.js";
|
|
6
5
|
import { McpManager } from "./mcp/mcp-manager.js";
|
|
@@ -8,7 +7,6 @@ import { ModelRegistry } from "./model-registry.js";
|
|
|
8
7
|
import { DefaultResourceLoader } from "./resource-loader.js";
|
|
9
8
|
import { createAgentSession } from "./sdk.js";
|
|
10
9
|
import { SettingsManager } from "./settings-manager.js";
|
|
11
|
-
import { installAgentTelemetry, isTelemetryEnabled } from "./telemetry.js";
|
|
12
10
|
function applyExtensionFlagValues(resourceLoader, extensionFlagValues) {
|
|
13
11
|
if (!extensionFlagValues) {
|
|
14
12
|
return [];
|
|
@@ -85,15 +83,6 @@ export async function createAgentSessionServices(options) {
|
|
|
85
83
|
});
|
|
86
84
|
await resourceLoader.reload();
|
|
87
85
|
const diagnostics = [];
|
|
88
|
-
if (!options.telemetryDisabled &&
|
|
89
|
-
isTelemetryEnabled(settingsManager) &&
|
|
90
|
-
!settingsManager.getTelemetryNoticeShown()) {
|
|
91
|
-
diagnostics.push({
|
|
92
|
-
type: "info",
|
|
93
|
-
message: "ASM Agent sends pseudonymous usage and performance metrics without prompts, responses, tool content, file paths, or repository data. Disable this with telemetry.enabled=false, ASM_AGENT_TELEMETRY=0, DO_NOT_TRACK=1, or offline mode.",
|
|
94
|
-
});
|
|
95
|
-
settingsManager.setTelemetryNoticeShown(true);
|
|
96
|
-
}
|
|
97
86
|
const extensionsResult = resourceLoader.getExtensions();
|
|
98
87
|
for (const { name, config, extensionPath } of extensionsResult.runtime.pendingProviderRegistrations) {
|
|
99
88
|
try {
|
|
@@ -121,10 +110,6 @@ export async function createAgentSessionServices(options) {
|
|
|
121
110
|
};
|
|
122
111
|
}
|
|
123
112
|
export async function createAgentSessionFromServices(options) {
|
|
124
|
-
installAgentTraceUpload(options.sessionManager, {
|
|
125
|
-
authStorage: options.services.authStorage,
|
|
126
|
-
settingsManager: options.services.settingsManager,
|
|
127
|
-
});
|
|
128
113
|
const result = await createAgentSession({
|
|
129
114
|
cwd: options.services.cwd,
|
|
130
115
|
agentDir: options.services.agentDir,
|
|
@@ -160,13 +145,6 @@ export async function createAgentSessionFromServices(options) {
|
|
|
160
145
|
serializedRefine: options.serializedRefine,
|
|
161
146
|
initialGoal: options.initialGoal,
|
|
162
147
|
});
|
|
163
|
-
if (result.session.rlmDepth === 0 && !options.telemetryDisabled) {
|
|
164
|
-
installAgentTelemetry(result.session, {
|
|
165
|
-
agentDir: options.services.agentDir,
|
|
166
|
-
settingsManager: options.services.settingsManager,
|
|
167
|
-
executionMode: options.executionMode,
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
148
|
return result;
|
|
171
149
|
}
|
|
172
150
|
//# sourceMappingURL=agent-session-services.js.map
|