@ponythewhite/base-context 1.0.0 → 1.0.2

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.
Files changed (285) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/NOTICE +0 -5
  3. package/README.md +44 -27
  4. package/dist/NOTICE +0 -5
  5. package/dist/base-context-runtime/pyproject.toml +1 -1
  6. package/dist/base-context-runtime/src/rlm/__init__.py +7 -5
  7. package/dist/base-context-runtime/test/test_subagent_registry.py +28 -1
  8. package/dist/base-context-runtime/uv.lock +1 -1
  9. package/dist/build-info.json +1 -1
  10. package/dist/bundle/amazon-bedrock.js +21 -0
  11. package/dist/bundle/{anthropic-YY4S534V.js → anthropic-UV5GZDGU.js} +5 -5
  12. package/dist/bundle/{azure-openai-responses-JRP6MIM3.js → azure-openai-responses-WSNPXLYC.js} +6 -6
  13. package/dist/bundle/{bundled-modules-P5HARVZA.js → bundled-modules-PWOGKUQQ.js} +71 -16
  14. package/dist/bundle/chunk-27QCJ2AZ.js +2578 -0
  15. package/dist/bundle/{chunk-BYVP7LWV.js → chunk-44PEHPOG.js} +1916 -4689
  16. package/dist/bundle/{chunk-MZHTNNVA.js → chunk-4GXPNXOJ.js} +8 -0
  17. package/dist/bundle/{chunk-SC5KG5R4.js → chunk-DGNX7HQ3.js} +1 -7
  18. package/dist/bundle/{chunk-A53O363M.js → chunk-GRJFXLBM.js} +0 -1
  19. package/dist/bundle/chunk-HKINIBP4.js +29 -0
  20. package/dist/bundle/{chunk-73DCPU3D.js → chunk-IADCPVEI.js} +1019 -3427
  21. package/dist/bundle/{chunk-UDSW6FNG.js → chunk-KTNETTHI.js} +1 -1
  22. package/dist/bundle/{chunk-U7AUVG3B.js → chunk-VSIYFWYI.js} +24 -6
  23. package/dist/bundle/{chunk-IW77OXFS.js → chunk-W46VZFI6.js} +0 -2099
  24. package/dist/bundle/{cli-main-O4X7GFGY.js → cli-main-4DS7Y3PI.js} +8 -6
  25. package/dist/bundle/cli.js +2 -2
  26. package/dist/bundle/{google-AUTVGDGZ.js → google-T32FMD4G.js} +6 -6
  27. package/dist/bundle/{google-vertex-Q75D7RKS.js → google-vertex-56KP6I3B.js} +3 -3
  28. package/dist/bundle/{main-XKOW2BV6.js → main-SV7JLVEB.js} +7 -5
  29. package/dist/bundle/{mistral-7ESB7QUD.js → mistral-WGBMYIVU.js} +5 -5
  30. package/dist/bundle/{openai-codex-responses-LV3QRPN4.js → openai-codex-responses-PIV2RQ3G.js} +6 -6
  31. package/dist/bundle/{openai-completions-OJECLPXJ.js → openai-completions-64C3JPR4.js} +11 -22
  32. package/dist/bundle/{openai-responses-FN6HZMBC.js → openai-responses-UI7RSTDV.js} +6 -6
  33. package/dist/cli/args.d.ts.map +1 -1
  34. package/dist/cli/args.js +108 -59
  35. package/dist/cli/args.js.map +1 -1
  36. package/dist/cli/daemon-ps.d.ts +4 -3
  37. package/dist/cli/daemon-ps.d.ts.map +1 -1
  38. package/dist/cli/daemon-ps.js +6 -1
  39. package/dist/cli/daemon-ps.js.map +1 -1
  40. package/dist/cli/product-doctor.d.ts +0 -1
  41. package/dist/cli/product-doctor.d.ts.map +1 -1
  42. package/dist/cli/product-doctor.js +6 -3
  43. package/dist/cli/product-doctor.js.map +1 -1
  44. package/dist/config.d.ts +0 -3
  45. package/dist/config.d.ts.map +1 -1
  46. package/dist/config.js +0 -8
  47. package/dist/config.js.map +1 -1
  48. package/dist/core/agent-session-config.d.ts +1 -2
  49. package/dist/core/agent-session-config.d.ts.map +1 -1
  50. package/dist/core/agent-session-config.js +0 -3
  51. package/dist/core/agent-session-config.js.map +1 -1
  52. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  53. package/dist/core/agent-session-runtime.js +5 -4
  54. package/dist/core/agent-session-runtime.js.map +1 -1
  55. package/dist/core/agent-session-services.d.ts +5 -3
  56. package/dist/core/agent-session-services.d.ts.map +1 -1
  57. package/dist/core/agent-session-services.js +2 -27
  58. package/dist/core/agent-session-services.js.map +1 -1
  59. package/dist/core/agent-session.d.ts +10 -6
  60. package/dist/core/agent-session.d.ts.map +1 -1
  61. package/dist/core/agent-session.js +107 -107
  62. package/dist/core/agent-session.js.map +1 -1
  63. package/dist/core/auth-storage.d.ts +8 -35
  64. package/dist/core/auth-storage.d.ts.map +1 -1
  65. package/dist/core/auth-storage.js +33 -243
  66. package/dist/core/auth-storage.js.map +1 -1
  67. package/dist/core/cron-jobs.d.ts.map +1 -1
  68. package/dist/core/cron-jobs.js +7 -1
  69. package/dist/core/cron-jobs.js.map +1 -1
  70. package/dist/core/inference-coordinator.d.ts +6 -1
  71. package/dist/core/inference-coordinator.d.ts.map +1 -1
  72. package/dist/core/inference-coordinator.js +18 -2
  73. package/dist/core/inference-coordinator.js.map +1 -1
  74. package/dist/core/kernel/bootstrap.d.ts.map +1 -1
  75. package/dist/core/kernel/bootstrap.js +2 -2
  76. package/dist/core/kernel/bootstrap.js.map +1 -1
  77. package/dist/core/kernel/repl-manager.d.ts +2 -0
  78. package/dist/core/kernel/repl-manager.d.ts.map +1 -1
  79. package/dist/core/kernel/repl-manager.js +44 -1
  80. package/dist/core/kernel/repl-manager.js.map +1 -1
  81. package/dist/core/logging.d.ts +4 -3
  82. package/dist/core/logging.d.ts.map +1 -1
  83. package/dist/core/logging.js +6 -6
  84. package/dist/core/logging.js.map +1 -1
  85. package/dist/core/mcp/mcp-manager.d.ts.map +1 -1
  86. package/dist/core/mcp/mcp-manager.js +3 -3
  87. package/dist/core/mcp/mcp-manager.js.map +1 -1
  88. package/dist/core/model-registry.d.ts +1 -16
  89. package/dist/core/model-registry.d.ts.map +1 -1
  90. package/dist/core/model-registry.js +88 -196
  91. package/dist/core/model-registry.js.map +1 -1
  92. package/dist/core/model-resolver.d.ts +2 -19
  93. package/dist/core/model-resolver.d.ts.map +1 -1
  94. package/dist/core/model-resolver.js +36 -266
  95. package/dist/core/model-resolver.js.map +1 -1
  96. package/dist/core/provider-contracts.d.ts +5 -6
  97. package/dist/core/provider-contracts.d.ts.map +1 -1
  98. package/dist/core/provider-contracts.js +25 -36
  99. package/dist/core/provider-contracts.js.map +1 -1
  100. package/dist/core/provider-display-names.d.ts.map +1 -1
  101. package/dist/core/provider-display-names.js +0 -2
  102. package/dist/core/provider-display-names.js.map +1 -1
  103. package/dist/core/rlm-max-subagents.d.ts +32 -0
  104. package/dist/core/rlm-max-subagents.d.ts.map +1 -0
  105. package/dist/core/rlm-max-subagents.js +50 -0
  106. package/dist/core/rlm-max-subagents.js.map +1 -0
  107. package/dist/core/rlm-runtime.d.ts +3 -3
  108. package/dist/core/rlm-runtime.d.ts.map +1 -1
  109. package/dist/core/rlm-runtime.js.map +1 -1
  110. package/dist/core/sdk.d.ts +4 -3
  111. package/dist/core/sdk.d.ts.map +1 -1
  112. package/dist/core/sdk.js +27 -14
  113. package/dist/core/sdk.js.map +1 -1
  114. package/dist/core/settings-manager.d.ts +3 -16
  115. package/dist/core/settings-manager.d.ts.map +1 -1
  116. package/dist/core/settings-manager.js +12 -44
  117. package/dist/core/settings-manager.js.map +1 -1
  118. package/dist/core/slash-commands.d.ts.map +1 -1
  119. package/dist/core/slash-commands.js +6 -6
  120. package/dist/core/slash-commands.js.map +1 -1
  121. package/dist/index.d.ts +1 -1
  122. package/dist/index.d.ts.map +1 -1
  123. package/dist/index.js.map +1 -1
  124. package/dist/installer.mjs +2 -3
  125. package/dist/main.d.ts.map +1 -1
  126. package/dist/main.js +39 -34
  127. package/dist/main.js.map +1 -1
  128. package/dist/modes/acp/acp-mode.d.ts.map +1 -1
  129. package/dist/modes/acp/acp-mode.js +1 -1
  130. package/dist/modes/acp/acp-mode.js.map +1 -1
  131. package/dist/modes/agent-connection/daemon-agent-connection.d.ts +6 -2
  132. package/dist/modes/agent-connection/daemon-agent-connection.d.ts.map +1 -1
  133. package/dist/modes/agent-connection/daemon-agent-connection.js +13 -2
  134. package/dist/modes/agent-connection/daemon-agent-connection.js.map +1 -1
  135. package/dist/modes/agent-connection/in-process-agent-connection.d.ts +2 -0
  136. package/dist/modes/agent-connection/in-process-agent-connection.d.ts.map +1 -1
  137. package/dist/modes/agent-connection/in-process-agent-connection.js +6 -0
  138. package/dist/modes/agent-connection/in-process-agent-connection.js.map +1 -1
  139. package/dist/modes/agent-connection/types.d.ts +3 -0
  140. package/dist/modes/agent-connection/types.d.ts.map +1 -1
  141. package/dist/modes/agent-connection/types.js.map +1 -1
  142. package/dist/modes/agents-view/agents-view-mode.d.ts.map +1 -1
  143. package/dist/modes/agents-view/agents-view-mode.js +2 -19
  144. package/dist/modes/agents-view/agents-view-mode.js.map +1 -1
  145. package/dist/modes/daemon/daemon-mode.d.ts +5 -0
  146. package/dist/modes/daemon/daemon-mode.d.ts.map +1 -1
  147. package/dist/modes/daemon/daemon-mode.js +107 -12
  148. package/dist/modes/daemon/daemon-mode.js.map +1 -1
  149. package/dist/modes/daemon/daemon-protocol.d.ts +194 -165
  150. package/dist/modes/daemon/daemon-protocol.d.ts.map +1 -1
  151. package/dist/modes/daemon/daemon-protocol.js +16 -11
  152. package/dist/modes/daemon/daemon-protocol.js.map +1 -1
  153. package/dist/modes/daemon/daemon-rlm-capacity-coordinator.d.ts +19 -0
  154. package/dist/modes/daemon/daemon-rlm-capacity-coordinator.d.ts.map +1 -0
  155. package/dist/modes/daemon/daemon-rlm-capacity-coordinator.js +74 -0
  156. package/dist/modes/daemon/daemon-rlm-capacity-coordinator.js.map +1 -0
  157. package/dist/modes/daemon/daemon-rlm-capacity.d.ts +19 -0
  158. package/dist/modes/daemon/daemon-rlm-capacity.d.ts.map +1 -0
  159. package/dist/modes/daemon/daemon-rlm-capacity.js +85 -0
  160. package/dist/modes/daemon/daemon-rlm-capacity.js.map +1 -0
  161. package/dist/modes/daemon/daemon-session-summarizer.d.ts +2 -3
  162. package/dist/modes/daemon/daemon-session-summarizer.d.ts.map +1 -1
  163. package/dist/modes/daemon/daemon-session-summarizer.js +32 -23
  164. package/dist/modes/daemon/daemon-session-summarizer.js.map +1 -1
  165. package/dist/modes/daemon/daemon-state-root.d.ts +15 -0
  166. package/dist/modes/daemon/daemon-state-root.d.ts.map +1 -0
  167. package/dist/modes/daemon/daemon-state-root.js +40 -0
  168. package/dist/modes/daemon/daemon-state-root.js.map +1 -0
  169. package/dist/modes/daemon/daemon-supervisor-ownership.d.ts +2 -0
  170. package/dist/modes/daemon/daemon-supervisor-ownership.d.ts.map +1 -1
  171. package/dist/modes/daemon/daemon-supervisor-ownership.js +27 -0
  172. package/dist/modes/daemon/daemon-supervisor-ownership.js.map +1 -1
  173. package/dist/modes/daemon/daemon-supervisor.d.ts +10 -1
  174. package/dist/modes/daemon/daemon-supervisor.d.ts.map +1 -1
  175. package/dist/modes/daemon/daemon-supervisor.js +213 -20
  176. package/dist/modes/daemon/daemon-supervisor.js.map +1 -1
  177. package/dist/modes/daemon/daemon-worker-protocol.d.ts +28 -1
  178. package/dist/modes/daemon/daemon-worker-protocol.d.ts.map +1 -1
  179. package/dist/modes/daemon/daemon-worker-protocol.js +16 -2
  180. package/dist/modes/daemon/daemon-worker-protocol.js.map +1 -1
  181. package/dist/modes/daemon/saved-session-catalog.d.ts.map +1 -1
  182. package/dist/modes/daemon/saved-session-catalog.js +2 -0
  183. package/dist/modes/daemon/saved-session-catalog.js.map +1 -1
  184. package/dist/modes/interactive/auth-flows.d.ts +0 -6
  185. package/dist/modes/interactive/auth-flows.d.ts.map +1 -1
  186. package/dist/modes/interactive/auth-flows.js +6 -126
  187. package/dist/modes/interactive/auth-flows.js.map +1 -1
  188. package/dist/modes/interactive/components/configuration-menu.d.ts +3 -0
  189. package/dist/modes/interactive/components/configuration-menu.d.ts.map +1 -1
  190. package/dist/modes/interactive/components/configuration-menu.js +13 -2
  191. package/dist/modes/interactive/components/configuration-menu.js.map +1 -1
  192. package/dist/modes/interactive/components/footer.d.ts +1 -1
  193. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  194. package/dist/modes/interactive/components/footer.js +2 -2
  195. package/dist/modes/interactive/components/footer.js.map +1 -1
  196. package/dist/modes/interactive/components/index.d.ts +0 -1
  197. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  198. package/dist/modes/interactive/components/index.js +0 -1
  199. package/dist/modes/interactive/components/index.js.map +1 -1
  200. package/dist/modes/interactive/components/login-dialog.d.ts +0 -1
  201. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  202. package/dist/modes/interactive/components/login-dialog.js +3 -40
  203. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  204. package/dist/modes/interactive/components/model-selector.d.ts +2 -0
  205. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  206. package/dist/modes/interactive/components/model-selector.js +13 -2
  207. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  208. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  209. package/dist/modes/interactive/components/oauth-selector.js +2 -11
  210. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  211. package/dist/modes/interactive/feature-hints.d.ts.map +1 -1
  212. package/dist/modes/interactive/feature-hints.js +0 -4
  213. package/dist/modes/interactive/feature-hints.js.map +1 -1
  214. package/dist/modes/interactive/interactive-mode.d.ts +3 -12
  215. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  216. package/dist/modes/interactive/interactive-mode.js +81 -507
  217. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  218. package/dist/modes/interactive/onboarding.d.ts +0 -3
  219. package/dist/modes/interactive/onboarding.d.ts.map +1 -1
  220. package/dist/modes/interactive/onboarding.js +0 -17
  221. package/dist/modes/interactive/onboarding.js.map +1 -1
  222. package/dist/modes/rpc/rpc-client.d.ts +4 -1
  223. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  224. package/dist/modes/rpc/rpc-client.js +82 -42
  225. package/dist/modes/rpc/rpc-client.js.map +1 -1
  226. package/dist/node/amazon-bedrock.d.ts +2 -0
  227. package/dist/node/amazon-bedrock.d.ts.map +1 -0
  228. package/dist/node/amazon-bedrock.js +6 -0
  229. package/dist/node/amazon-bedrock.js.map +1 -0
  230. package/dist/product-identity.d.ts +0 -1
  231. package/dist/product-identity.d.ts.map +1 -1
  232. package/dist/product-identity.js +0 -1
  233. package/dist/product-identity.js.map +1 -1
  234. package/docs/development.md +1 -1
  235. package/docs/fork-philosophy.md +4 -8
  236. package/docs/installation.md +83 -62
  237. package/docs/providers.md +23 -25
  238. package/docs/quickstart.md +19 -10
  239. package/docs/rlm-runtime.md +13 -5
  240. package/docs/rpc.md +4 -4
  241. package/docs/sdk.md +20 -11
  242. package/docs/sessions.md +0 -1
  243. package/docs/settings.md +9 -42
  244. package/docs/skills.md +0 -1
  245. package/docs/upstream-0.9.5.md +171 -0
  246. package/docs/usage.md +14 -10
  247. package/package.json +4 -4
  248. package/dist/core/agent-traces.d.ts +0 -149
  249. package/dist/core/agent-traces.d.ts.map +0 -1
  250. package/dist/core/agent-traces.js +0 -904
  251. package/dist/core/agent-traces.js.map +0 -1
  252. package/dist/core/prime-inference-auth.d.ts +0 -70
  253. package/dist/core/prime-inference-auth.d.ts.map +0 -1
  254. package/dist/core/prime-inference-auth.js +0 -352
  255. package/dist/core/prime-inference-auth.js.map +0 -1
  256. package/dist/core/prime-inference-model-selection.d.ts +0 -16
  257. package/dist/core/prime-inference-model-selection.d.ts.map +0 -1
  258. package/dist/core/prime-inference-model-selection.js +0 -16
  259. package/dist/core/prime-inference-model-selection.js.map +0 -1
  260. package/dist/core/prime-inference-models.d.ts +0 -6
  261. package/dist/core/prime-inference-models.d.ts.map +0 -1
  262. package/dist/core/prime-inference-models.js +0 -62
  263. package/dist/core/prime-inference-models.js.map +0 -1
  264. package/dist/core/telemetry.d.ts +0 -95
  265. package/dist/core/telemetry.d.ts.map +0 -1
  266. package/dist/core/telemetry.js +0 -637
  267. package/dist/core/telemetry.js.map +0 -1
  268. package/dist/modes/interactive/components/prime-onboarding-splash.d.ts +0 -39
  269. package/dist/modes/interactive/components/prime-onboarding-splash.d.ts.map +0 -1
  270. package/dist/modes/interactive/components/prime-onboarding-splash.js +0 -286
  271. package/dist/modes/interactive/components/prime-onboarding-splash.js.map +0 -1
  272. package/dist/modes/interactive/components/prime-team-selector.d.ts +0 -30
  273. package/dist/modes/interactive/components/prime-team-selector.d.ts.map +0 -1
  274. package/dist/modes/interactive/components/prime-team-selector.js +0 -166
  275. package/dist/modes/interactive/components/prime-team-selector.js.map +0 -1
  276. package/dist/skills/prime-intellect/SKILL.md +0 -87
  277. package/dist/skills/prime-intellect/references/compute.md +0 -45
  278. package/dist/skills/prime-intellect/references/environments.md +0 -73
  279. package/dist/skills/prime-intellect/references/inference.md +0 -47
  280. package/dist/skills/prime-intellect/references/sandboxes.md +0 -75
  281. package/skills/prime-intellect/SKILL.md +0 -87
  282. package/skills/prime-intellect/references/compute.md +0 -45
  283. package/skills/prime-intellect/references/environments.md +0 -73
  284. package/skills/prime-intellect/references/inference.md +0 -47
  285. package/skills/prime-intellect/references/sandboxes.md +0 -75
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-runtime.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport type { AgentSession } from \"./agent-session.js\";\nimport type { AgentSessionRuntimeConfig } from \"./agent-session-config.js\";\nimport type {\n\tAgentSessionCreationOptions,\n\tAgentSessionRuntimeDiagnostic,\n\tAgentSessionServices,\n} from \"./agent-session-services.js\";\nimport { isNoModelsAvailableMessage } from \"./auth-guidance.js\";\nimport type { ReplacedSessionContext, SessionShutdownEvent, SessionStartEvent } from \"./extensions/index.js\";\nimport { emitSessionShutdownEvent } from \"./extensions/runner.js\";\nimport type {\n\tCreateRlmSubagentRuntimeOptions,\n\tRlmChildAdmission,\n\tRlmSubagentRuntime,\n\tSubagentRuntimeHost,\n} from \"./rlm-runtime.js\";\nimport type { CreateAgentSessionResult } from \"./sdk.js\";\nimport { assertSessionCwdExists } from \"./session-cwd.js\";\nimport { SessionImportFileNotFoundError } from \"./session-import-errors.js\";\nimport { acquireSessionLease, canonicalSessionPath, type SessionLease } from \"./session-lease.js\";\nimport { SessionManager } from \"./session-manager.js\";\n\nexport { SessionImportFileNotFoundError } from \"./session-import-errors.js\";\n\nexport interface CreateAgentSessionRuntimeResult extends CreateAgentSessionResult {\n\tservices: AgentSessionServices;\n\tdiagnostics: AgentSessionRuntimeDiagnostic[];\n}\n\nexport type CreateAgentSessionRuntimeFactory = (options: {\n\tcwd: string;\n\tagentDir: string;\n\tsessionManager: SessionManager;\n\tsessionStartEvent?: SessionStartEvent;\n\tsessionConfig?: AgentSessionRuntimeConfig;\n\tsessionOptions?: AgentSessionCreationOptions;\n}) => Promise<CreateAgentSessionRuntimeResult>;\n\nexport type AgentSessionRuntimeKind = \"top-level\" | \"subagent\";\n\nexport interface AgentSessionRuntimeMetadata {\n\tkind: AgentSessionRuntimeKind;\n\tcreatedAt: number;\n\tparentActiveSessionId?: string;\n\tparentSessionId?: string;\n\tparentSessionFile?: string;\n\trlmChildId?: string;\n\trlmParentNodeId?: string;\n\trehydratedCompleted?: boolean;\n\tprompt?: string;\n\tspawnCode?: string;\n\tsessionDir?: string;\n}\n\nfunction extractUserMessageText(content: string | Array<{ type: string; text?: string }>): string {\n\tif (typeof content === \"string\") {\n\t\treturn content;\n\t}\n\n\treturn content\n\t\t.filter((part): part is { type: \"text\"; text: string } => part.type === \"text\" && typeof part.text === \"string\")\n\t\t.map((part) => part.text)\n\t\t.join(\"\");\n}\n\nexport interface AgentSessionRuntimeDisposeOptions {\n\t/** Set false when the session's artifact dir is deleted right after disposal (default true). */\n\tkernelSnapshot?: boolean;\n}\n\nexport class AgentSessionRuntime implements SubagentRuntimeHost {\n\tprivate rebindSession?: (session: AgentSession) => Promise<void>;\n\tprivate readonly sessionReplacedListeners = new Set<(session: AgentSession) => void | Promise<void>>();\n\tprivate runtimeEnvScope?: <T>(fn: () => Promise<T>) => Promise<T>;\n\tprivate beforeSessionInvalidate?: () => void;\n\tprivate subagentRuntimeHost?: SubagentRuntimeHost;\n\tprivate subagentRuntimes = new Map<string, AgentSessionRuntime>();\n\tprivate disposePromise?: Promise<void>;\n\tprivate autoRefineAdmissionClosed = false;\n\n\tconstructor(\n\t\tprivate _session: AgentSession,\n\t\tprivate _services: AgentSessionServices,\n\t\tprivate readonly createRuntime: CreateAgentSessionRuntimeFactory,\n\t\tprivate _diagnostics: AgentSessionRuntimeDiagnostic[] = [],\n\t\tprivate _modelFallbackMessage?: string,\n\t\tprivate readonly sessionConfig?: AgentSessionRuntimeConfig,\n\t\tprivate readonly _metadata: AgentSessionRuntimeMetadata = {\n\t\t\tkind: \"top-level\",\n\t\t\tcreatedAt: Date.now(),\n\t\t},\n\t\tprivate _sessionLease?: SessionLease,\n\t) {\n\t\tthis.bindRuntimeHost();\n\t}\n\n\tget services(): AgentSessionServices {\n\t\treturn this._services;\n\t}\n\n\tget session(): AgentSession {\n\t\treturn this._session;\n\t}\n\n\tget requests() {\n\t\treturn this._session.requests;\n\t}\n\n\tget cwd(): string {\n\t\treturn this._services.cwd;\n\t}\n\n\tget diagnostics(): readonly AgentSessionRuntimeDiagnostic[] {\n\t\treturn this._diagnostics;\n\t}\n\n\tget modelFallbackMessage(): string | undefined {\n\t\t// The \"no models available\" warning describes session state, not a\n\t\t// startup event: once the session gains a model (set_model, /login,\n\t\t// onboarding), the stored snapshot is stale and must not reach clients.\n\t\tif (isNoModelsAvailableMessage(this._modelFallbackMessage) && this._session.model) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn this._modelFallbackMessage;\n\t}\n\n\tget metadata(): AgentSessionRuntimeMetadata {\n\t\treturn { ...this._metadata };\n\t}\n\n\tget runtimeConfig(): AgentSessionRuntimeConfig | undefined {\n\t\treturn this.sessionConfig ? { ...this.sessionConfig } : undefined;\n\t}\n\n\tsetRebindSession(rebindSession?: (session: AgentSession) => Promise<void>): void {\n\t\tthis.rebindSession = rebindSession;\n\t}\n\n\tonSessionReplaced(listener: (session: AgentSession) => void | Promise<void>): () => void {\n\t\tthis.sessionReplacedListeners.add(listener);\n\t\treturn () => this.sessionReplacedListeners.delete(listener);\n\t}\n\n\t/**\n\t * Host-installed scope wrapping every runtime rebuild (new/switch/fork/\n\t * import and subagent creation), during which extensions re-load. The\n\t * daemon uses it to apply the session's client env for load-time captures.\n\t */\n\tsetRuntimeEnvScope(scope?: <T>(fn: () => Promise<T>) => Promise<T>): void {\n\t\tthis.runtimeEnvScope = scope;\n\t}\n\n\tprivate scopedBuild<T>(fn: () => Promise<T>): Promise<T> {\n\t\treturn this.runtimeEnvScope ? this.runtimeEnvScope(fn) : fn();\n\t}\n\n\tsetSubagentRuntimeHost(host?: SubagentRuntimeHost): void {\n\t\tthis.subagentRuntimeHost = host;\n\t\tthis.bindRuntimeHost();\n\t}\n\n\t/**\n\t * Set a synchronous callback that runs after `session_shutdown` handlers finish\n\t * but before the current session is invalidated.\n\t *\n\t * This is for host-owned UI teardown that must not yield to the event loop,\n\t * such as detaching extension-provided TUI components before the old extension\n\t * context becomes stale.\n\t */\n\tsetBeforeSessionInvalidate(beforeSessionInvalidate?: () => void): void {\n\t\tthis.beforeSessionInvalidate = beforeSessionInvalidate;\n\t}\n\n\tprivate async emitBeforeSwitch(\n\t\treason: \"new\" | \"resume\",\n\t\ttargetSessionFile?: string,\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst runner = this.session.extensionRunner;\n\t\tif (!runner.hasHandlers(\"session_before_switch\")) {\n\t\t\treturn { cancelled: false };\n\t\t}\n\n\t\tconst result = await runner.emit({\n\t\t\ttype: \"session_before_switch\",\n\t\t\treason,\n\t\t\ttargetSessionFile,\n\t\t});\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate async emitBeforeFork(\n\t\trunner: AgentSession[\"extensionRunner\"],\n\t\tentryId: string,\n\t\toptions: { position: \"before\" | \"at\" },\n\t): Promise<{ cancelled: boolean }> {\n\t\tif (!runner.hasHandlers(\"session_before_fork\")) {\n\t\t\treturn { cancelled: false };\n\t\t}\n\n\t\tconst result = await runner.emit({\n\t\t\ttype: \"session_before_fork\",\n\t\t\tentryId,\n\t\t\t...options,\n\t\t});\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate async teardownCurrent(reason: SessionShutdownEvent[\"reason\"], targetSessionFile?: string): Promise<void> {\n\t\tawait emitSessionShutdownEvent(this.session.extensionRunner, {\n\t\t\ttype: \"session_shutdown\",\n\t\t\treason,\n\t\t\ttargetSessionFile,\n\t\t});\n\t\tthis.beforeSessionInvalidate?.();\n\t\t// Await the kernel's final snapshot flush before invalidating the session.\n\t\tawait this.session.disposeAsync();\n\t\tawait this.disposeHostedSubagentRuntimes();\n\t}\n\n\t/** Native EOF closes new opportunistic work, including a session replaced by an already accepted command. */\n\tcloseAutoRefineAdmission(): void {\n\t\tthis.autoRefineAdmissionClosed = true;\n\t\tthis._session.closeAutoRefineAdmission();\n\t}\n\n\tprivate bindRuntimeHost(): void {\n\t\tif (this.autoRefineAdmissionClosed) this._session.closeAutoRefineAdmission();\n\t\tthis._session.setSubagentRuntimeHost(this.subagentRuntimeHost ?? this);\n\t}\n\n\tprivate apply(result: CreateAgentSessionRuntimeResult): void {\n\t\tthis._session = result.session;\n\t\tthis._services = result.services;\n\t\tthis._diagnostics = result.diagnostics;\n\t\tthis._modelFallbackMessage = result.modelFallbackMessage;\n\t\tthis.bindRuntimeHost();\n\t}\n\n\tprivate acquireReplacementLease(sessionPath: string | undefined): SessionLease | undefined {\n\t\tif (sessionPath && this._sessionLease?.sessionPath === canonicalSessionPath(sessionPath)) {\n\t\t\treturn this._sessionLease;\n\t\t}\n\t\treturn acquireSessionLease(sessionPath, this.services.agentDir);\n\t}\n\n\tprivate releaseUncommittedLease(lease: SessionLease | undefined): void {\n\t\tif (lease !== this._sessionLease) {\n\t\t\tlease?.release();\n\t\t}\n\t}\n\n\tprivate releaseSessionLease(): void {\n\t\tthis._sessionLease?.release();\n\t\tthis._sessionLease = undefined;\n\t}\n\n\tprivate commitReplacementLease(lease: SessionLease | undefined): void {\n\t\tif (lease === this._sessionLease) {\n\t\t\treturn;\n\t\t}\n\t\tconst previous = this._sessionLease;\n\t\tthis._sessionLease = lease;\n\t\tprevious?.release();\n\t}\n\n\tprivate async replaceWithManager(\n\t\tsessionManager: SessionManager,\n\t\tsource: { session: AgentSession; sessionFile: string | undefined; agentDir: string },\n\t\treason: \"new\" | \"resume\" | \"fork\",\n\t\tteardown = true,\n\t\tsetup?: (manager: SessionManager) => Promise<void>,\n\t): Promise<void> {\n\t\tlet lease: SessionLease | undefined;\n\t\tlet result: CreateAgentSessionRuntimeResult | undefined;\n\t\ttry {\n\t\t\tif (this.session !== source.session) throw new Error(\"Session changed before replacement\");\n\t\t\tlease = this.acquireReplacementLease(sessionManager.getSessionFile());\n\t\t\tif (teardown) await this.teardownCurrent(reason, sessionManager.getSessionFile());\n\t\t\tresult = await this.scopedBuild(() =>\n\t\t\t\tthis.createRuntime({\n\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\tagentDir: source.agentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason, previousSessionFile: source.sessionFile },\n\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t}),\n\t\t\t);\n\t\t\tawait result.session.initialize();\n\t\t\tif (setup) {\n\t\t\t\tawait setup(sessionManager);\n\t\t\t\tawait sessionManager.flushNow();\n\t\t\t\tresult.session.agent.state.messages = (await result.session.buildSessionContext()).messages;\n\t\t\t}\n\t\t\tif (this.session !== source.session) throw new Error(\"Session changed during replacement\");\n\t\t\tthis.apply(result);\n\t\t\tthis.commitReplacementLease(lease);\n\t\t} catch (error) {\n\t\t\ttry {\n\t\t\t\tif (result) await result.session.disposeAsync();\n\t\t\t\telse await sessionManager.close();\n\t\t\t} finally {\n\t\t\t\tthis.releaseUncommittedLease(lease);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async disposeSubagentRuntimes(): Promise<void> {\n\t\tconst runtimes = [...this.subagentRuntimes.values()];\n\t\tthis.subagentRuntimes.clear();\n\t\tlet disposeError: unknown;\n\t\tfor (const runtime of runtimes) {\n\t\t\ttry {\n\t\t\t\tawait runtime.dispose();\n\t\t\t} catch (error) {\n\t\t\t\tdisposeError ??= error;\n\t\t\t}\n\t\t}\n\t\tif (disposeError) {\n\t\t\tthrow disposeError;\n\t\t}\n\t}\n\n\tprivate async disposeHostedSubagentRuntimes(): Promise<void> {\n\t\tlet disposeError: unknown;\n\t\ttry {\n\t\t\tawait this.subagentRuntimeHost?.disposeRlmSubagentRuntimes?.();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tawait this.disposeSubagentRuntimes();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\tif (disposeError) {\n\t\t\tthrow disposeError;\n\t\t}\n\t}\n\n\tlistSubagentRuntimes(): readonly AgentSessionRuntime[] {\n\t\treturn [...this.subagentRuntimes.values()];\n\t}\n\n\tasync createRlmSubagentRuntime(options: CreateRlmSubagentRuntimeOptions): Promise<RlmSubagentRuntime> {\n\t\toptions = { ...options, contextMode: options.contextMode ?? options.parentSession.contextMode };\n\t\tconst requestTokenBudget =\n\t\t\toptions.requestTokenBudget === undefined\n\t\t\t\t? options.parentSession.requests.getRequestTokenBudgetOptions()\n\t\t\t\t: structuredClone(options.requestTokenBudget);\n\t\tif (requestTokenBudget !== undefined) options = { ...options, requestTokenBudget };\n\t\tconst admission = options.admission ?? options.parentSession.reserveRlmChildAdmission();\n\t\ttry {\n\t\t\tif (admission.parent !== options.parentSession)\n\t\t\t\tthrow new Error(\"RLM child admission belongs to another parent\");\n\t\t\tadmission.assertCurrent();\n\t\t\tadmission.claimFactory();\n\t\t\treturn await this.createAdmittedRlmSubagentRuntime({ ...options, admission });\n\t\t} finally {\n\t\t\tif (!options.admission) admission.settle();\n\t\t}\n\t}\n\n\tprivate async createAdmittedRlmSubagentRuntime(\n\t\toptions: CreateRlmSubagentRuntimeOptions & { admission: RlmChildAdmission },\n\t): Promise<RlmSubagentRuntime> {\n\t\toptions.admission.assertCurrent();\n\t\tconst parent = options.parentSession;\n\t\tconst parentSessionFile = parent.sessionFile;\n\t\tconst parentSessionId = parent.sessionId;\n\t\tconst parentAgent = parent.sessionName ?? parentSessionId;\n\t\tconst agentDir = this.services.agentDir;\n\t\tconst sessionManager = await SessionManager.create(parent.sessionManager.getCwd(), options.sessionDir, {\n\t\t\tparentSession: parentSessionFile,\n\t\t\trlmDepth: options.rlmDepth,\n\t\t});\n\t\tlet runtime: AgentSessionRuntime;\n\t\tlet factoryStarted = false;\n\t\ttry {\n\t\t\toptions.admission.assertCurrent();\n\t\t\tfactoryStarted = true;\n\t\t\truntime = await this.scopedBuild(() =>\n\t\t\t\tcreateAgentSessionRuntime(this.createRuntime, {\n\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\tagentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"startup\" },\n\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\tsessionOptions: {\n\t\t\t\t\t\t...(options.requestTokenBudget === undefined\n\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t: { requestTokenBudget: options.requestTokenBudget }),\n\t\t\t\t\t\tcontextMode: options.contextMode,\n\t\t\t\t\t\tmodel: options.model,\n\t\t\t\t\t\tthinkingLevel: options.thinkingLevel,\n\t\t\t\t\t\tserviceTier: options.serviceTier,\n\t\t\t\t\t\tscopedModels: options.scopedModels,\n\t\t\t\t\t\tinitialActiveToolNames: options.activeToolNames,\n\t\t\t\t\t\tallowedToolNames: options.allowedToolNames,\n\t\t\t\t\t\tcustomTools: options.customTools,\n\t\t\t\t\t\tincludeGoals: options.includeGoals,\n\t\t\t\t\t\tincludeCompactSkill: options.includeCompactSkill,\n\t\t\t\t\t\trlmDepth: options.rlmDepth,\n\t\t\t\t\t\trlmMaxDepth: options.rlmMaxDepth,\n\t\t\t\t\t\trlmSessionDir: options.sessionDir,\n\t\t\t\t\t\trlmParentNodeId: options.rlmParentNodeId,\n\t\t\t\t\t\trlmParentAgent: parentAgent,\n\t\t\t\t\t\trlmChildAdmission: options.admission,\n\t\t\t\t\t\tsemanticParentSessionId: parentSessionId,\n\t\t\t\t\t\tsemanticSpawnedByRequestId: options.spawnedByRequestId,\n\t\t\t\t\t},\n\t\t\t\t\truntimeMetadata: {\n\t\t\t\t\t\tkind: \"subagent\",\n\t\t\t\t\t\tcreatedAt: Date.now(),\n\t\t\t\t\t\tparentSessionId: parentSessionId,\n\t\t\t\t\t\tparentSessionFile: parentSessionFile,\n\t\t\t\t\t\trlmChildId: options.id,\n\t\t\t\t\t\trlmParentNodeId: options.rlmParentNodeId,\n\t\t\t\t\t\tprompt: options.prompt,\n\t\t\t\t\t\tspawnCode: options.spawnCode,\n\t\t\t\t\t\tsessionDir: options.sessionDir,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\ttry {\n\t\t\t\tawait sessionManager.close();\n\t\t\t\tif (!factoryStarted) options.admission.confirmUnboundCleanup();\n\t\t\t} catch (cleanupError) {\n\t\t\t\tif (cleanupError === error || (error instanceof AggregateError && error.errors.includes(cleanupError)))\n\t\t\t\t\tthrow error;\n\t\t\t\tthrow new AggregateError([error, cleanupError], \"RLM startup and cleanup failed\");\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\tthis.subagentRuntimes.set(options.id, runtime);\n\t\ttry {\n\t\t\tawait runtime.session.bindExtensions({});\n\t\t\tif (options.parentSession.getRlmChildRunStatus(options.id) === \"cancelled\") {\n\t\t\t\tthrow new Error(\"RLM subagent startup was cancelled\");\n\t\t\t}\n\t\t\tif (runtime.session.sessionName !== options.sessionName) {\n\t\t\t\tawait runtime.session.setSessionName(options.sessionName);\n\t\t\t}\n\t\t\tif (parent.getRlmChildRunStatus(options.id) === \"cancelled\") {\n\t\t\t\tthrow new Error(\"RLM subagent startup was cancelled\");\n\t\t\t}\n\t\t\toptions.admission.bind(runtime.session);\n\t\t\toptions.admission.assertCurrent();\n\t\t\toptions.onSessionPublished?.(runtime.session);\n\t\t} catch (error) {\n\t\t\tthis.subagentRuntimes.delete(options.id);\n\t\t\ttry {\n\t\t\t\tawait runtime.dispose();\n\t\t\t} catch (cleanupError) {\n\t\t\t\tif (cleanupError === error || (error instanceof AggregateError && error.errors.includes(cleanupError)))\n\t\t\t\t\tthrow error;\n\t\t\t\tthrow new AggregateError([error, cleanupError], \"RLM startup and cleanup failed\");\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\treturn runtime;\n\t}\n\n\tasync deleteRlmSubagentRuntime(childId: string, session: AgentSession): Promise<void> {\n\t\tconst runtime = this.subagentRuntimes.get(childId);\n\t\tif (!runtime) {\n\t\t\tawait session.disposeAsync();\n\t\t\treturn;\n\t\t}\n\t\tthis.subagentRuntimes.delete(childId);\n\t\tconst shouldDisposeStaleSession = runtime.session !== session;\n\t\ttry {\n\t\t\tawait runtime.dispose();\n\t\t} finally {\n\t\t\tif (shouldDisposeStaleSession) {\n\t\t\t\tawait session.disposeAsync();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async finishSessionReplacement(withSession?: (ctx: ReplacedSessionContext) => Promise<void>): Promise<void> {\n\t\tif (this.rebindSession) {\n\t\t\tawait this.rebindSession(this.session);\n\t\t}\n\t\tfor (const listener of this.sessionReplacedListeners) {\n\t\t\tawait listener(this.session);\n\t\t}\n\t\tif (withSession) {\n\t\t\tawait withSession(this.session.createReplacedSessionContext());\n\t\t}\n\t}\n\n\tprivate assertCanReplaceSession(): void {\n\t\tif (this.metadata.kind === \"subagent\" || this.session.hasRlmParentAdmission) {\n\t\t\tthrow new Error(\"Owned child-runtime replacement is unavailable; dispose or passivate the child instead\");\n\t\t}\n\t}\n\n\tasync switchSession(\n\t\tsessionPath: string,\n\t\toptions?: { cwdOverride?: string; withSession?: (ctx: ReplacedSessionContext) => Promise<void> },\n\t): Promise<{ cancelled: boolean }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst fallbackCwd = this.cwd;\n\t\tconst cwdOverride = options?.cwdOverride;\n\t\tconst withSession = options?.withSession;\n\t\tconst samePath =\n\t\t\tsource.sessionFile !== undefined &&\n\t\t\tcanonicalSessionPath(source.sessionFile) === canonicalSessionPath(sessionPath);\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", sessionPath);\n\t\tif (beforeResult.cancelled) return beforeResult;\n\t\tif (this.session !== source.session) throw new Error(\"Session changed before replacement\");\n\n\t\tif (samePath) {\n\t\t\tconst view = await SessionManager.openReadOnly(sessionPath, undefined, cwdOverride);\n\t\t\ttry {\n\t\t\t\tassertSessionCwdExists(view, fallbackCwd);\n\t\t\t} finally {\n\t\t\t\tawait view.close();\n\t\t\t}\n\t\t\tawait this.teardownCurrent(\"resume\", sessionPath);\n\t\t}\n\t\tconst sessionManager = await SessionManager.open(sessionPath, undefined, cwdOverride);\n\t\ttry {\n\t\t\tassertSessionCwdExists(sessionManager, fallbackCwd);\n\t\t} catch (error) {\n\t\t\tawait sessionManager.close();\n\t\t\tthrow error;\n\t\t}\n\t\tawait this.replaceWithManager(sessionManager, source, \"resume\", !samePath);\n\t\tawait this.finishSessionReplacement(withSession);\n\t\treturn { cancelled: false };\n\t}\n\n\tasync newSession(options?: {\n\t\tparentSession?: string;\n\t\tsetup?: (sessionManager: SessionManager) => Promise<void>;\n\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t}): Promise<{ cancelled: boolean }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst cwd = this.cwd;\n\t\tconst sessionDir = source.session.sessionManager.getSessionDir();\n\t\tconst headerOptions = options?.parentSession\n\t\t\t? {\n\t\t\t\t\tparentSession: options.parentSession,\n\t\t\t\t\trlmDepth: source.session.sessionManager.getHeader()?.rlmDepth ?? source.session.rlmDepth,\n\t\t\t\t}\n\t\t\t: undefined;\n\t\tconst setup = options?.setup;\n\t\tconst withSession = options?.withSession;\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"new\");\n\t\tif (beforeResult.cancelled) return beforeResult;\n\t\tconst sessionManager = await SessionManager.create(cwd, sessionDir, headerOptions);\n\t\tawait this.replaceWithManager(sessionManager, source, \"new\", true, setup);\n\t\tawait this.finishSessionReplacement(withSession);\n\t\treturn { cancelled: false };\n\t}\n\n\tasync fork(\n\t\tentryId: string,\n\t\toptions?: {\n\t\t\tposition?: \"before\" | \"at\";\n\t\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t\t},\n\t): Promise<{ cancelled: boolean; selectedText?: string }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst rlmDepth = source.session.rlmDepth;\n\t\tconst withSession = options?.withSession;\n\t\tconst position = options?.position ?? \"before\";\n\t\tconst runner = source.session.extensionRunner;\n\t\tconst preparation = Promise.allSettled([\n\t\t\tsource.session.sessionManager.prepareFork(entryId, { position, rlmDepth }),\n\t\t]);\n\t\tconst [beforeResult] = await Promise.allSettled([\n\t\t\tthis.emitBeforeFork(runner, entryId, { position }),\n\t\t\tpreparation,\n\t\t]);\n\t\t// Join the independent source read before handling hook failure or cancellation.\n\t\tif (beforeResult.status === \"rejected\") throw beforeResult.reason;\n\t\tif (beforeResult.value.cancelled) {\n\t\t\treturn { cancelled: true };\n\t\t}\n\t\tconst [preparedResult] = await preparation;\n\t\tif (preparedResult.status === \"rejected\") throw preparedResult.reason;\n\t\tconst prepared = preparedResult.value;\n\t\tif (this.session !== source.session) throw new Error(\"Session changed before replacement\");\n\n\t\tlet selectedText: string | undefined;\n\t\tif (position === \"before\") {\n\t\t\tconst selectedEntry = prepared.selectedEntry;\n\t\t\tif (selectedEntry.type !== \"message\" || selectedEntry.message.role !== \"user\") {\n\t\t\t\tthrow new Error(\"Invalid entry ID for forking\");\n\t\t\t}\n\t\t\tselectedText = extractUserMessageText(selectedEntry.message.content);\n\t\t}\n\n\t\tconst sessionManager = await prepared.create();\n\t\tawait this.replaceWithManager(sessionManager, source, \"fork\");\n\t\tawait this.finishSessionReplacement(withSession);\n\t\treturn { cancelled: false, selectedText };\n\t}\n\n\t/**\n\t * Import a session JSONL file and switch runtime state to the imported session.\n\t *\n\t * @returns `{ cancelled: true }` when cancelled by `session_before_switch`, otherwise `{ cancelled: false }`.\n\t * @throws {SessionImportFileNotFoundError} When the input path does not exist.\n\t * @throws {MissingSessionCwdError} When the imported session cwd cannot be resolved and no override is provided.\n\t */\n\tasync importFromJsonl(inputPath: string, cwdOverride?: string): Promise<{ cancelled: boolean }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst resolvedPath = resolve(inputPath);\n\t\tif (!existsSync(resolvedPath)) throw new SessionImportFileNotFoundError(resolvedPath);\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst sessionDir = source.session.sessionManager.getSessionDir();\n\t\tconst fallbackCwd = this.cwd;\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", resolvedPath);\n\t\tif (beforeResult.cancelled) return beforeResult;\n\n\t\tconst view = await SessionManager.openReadOnly(resolvedPath, undefined, cwdOverride);\n\t\tlet targetCwd: string;\n\t\ttry {\n\t\t\tassertSessionCwdExists(view, fallbackCwd);\n\t\t\ttargetCwd = view.getCwd();\n\t\t} finally {\n\t\t\tawait view.close();\n\t\t}\n\t\tconst sessionManager = await SessionManager.importRetainedFrom(resolvedPath, targetCwd, sessionDir);\n\t\tawait this.replaceWithManager(sessionManager, source, \"resume\");\n\t\tawait this.finishSessionReplacement();\n\t\treturn { cancelled: false };\n\t}\n\n\tprivate async disposeOnce(options: AgentSessionRuntimeDisposeOptions): Promise<void> {\n\t\tlet disposeError: unknown;\n\t\ttry {\n\t\t\tawait emitSessionShutdownEvent(this.session.extensionRunner, {\n\t\t\t\ttype: \"session_shutdown\",\n\t\t\t\treason: \"quit\",\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tthis.beforeSessionInvalidate?.();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\t// Await the kernel's final snapshot flush before tearing the session down.\n\t\t\tawait this.session.disposeAsync({ kernelSnapshot: options.kernelSnapshot ?? true });\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tawait this.disposeHostedSubagentRuntimes();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tif (disposeError) {\n\t\t\t\tthrow disposeError;\n\t\t\t}\n\t\t} finally {\n\t\t\tthis.releaseSessionLease();\n\t\t}\n\t}\n\n\tasync dispose(options?: AgentSessionRuntimeDisposeOptions): Promise<void> {\n\t\tif (!this.disposePromise) {\n\t\t\tthis.disposePromise = this.disposeOnce(options ?? {});\n\t\t}\n\t\tawait this.disposePromise;\n\t}\n}\n\nexport async function createAgentSessionRuntime(\n\tcreateRuntime: CreateAgentSessionRuntimeFactory,\n\toptions: {\n\t\tcwd: string;\n\t\tagentDir: string;\n\t\tsessionManager: SessionManager;\n\t\tsessionStartEvent?: SessionStartEvent;\n\t\tsessionConfig?: AgentSessionRuntimeConfig;\n\t\tsessionOptions?: AgentSessionCreationOptions;\n\t\truntimeMetadata?: AgentSessionRuntimeMetadata;\n\t\tsessionLease?: SessionLease;\n\t},\n): Promise<AgentSessionRuntime> {\n\tconst { sessionLease, ...runtimeOptions } = options;\n\tlet lease: SessionLease | undefined;\n\tlet result: CreateAgentSessionRuntimeResult | undefined;\n\ttry {\n\t\tlease =\n\t\t\tsessionLease ?? acquireSessionLease(runtimeOptions.sessionManager.getSessionFile(), runtimeOptions.agentDir);\n\t\tassertSessionCwdExists(runtimeOptions.sessionManager, runtimeOptions.cwd);\n\t\tresult = await createRuntime(runtimeOptions);\n\t\tawait result.session.initialize();\n\t\treturn new AgentSessionRuntime(\n\t\t\tresult.session,\n\t\t\tresult.services,\n\t\t\tcreateRuntime,\n\t\t\tresult.diagnostics,\n\t\t\tresult.modelFallbackMessage,\n\t\t\truntimeOptions.sessionConfig,\n\t\t\truntimeOptions.runtimeMetadata,\n\t\t\tlease,\n\t\t);\n\t} catch (error) {\n\t\tconst errors: unknown[] = error instanceof AggregateError ? [...error.errors] : [error];\n\t\tconst initialErrorCount = errors.length;\n\t\ttry {\n\t\t\tconst admitted = runtimeOptions.sessionOptions?.rlmChildAdmission?.session;\n\t\t\tconst failedSession =\n\t\t\t\tresult?.session ?? (admitted?.sessionManager === runtimeOptions.sessionManager ? admitted : undefined);\n\t\t\tif (failedSession) await failedSession.disposeAsync();\n\t\t\telse await runtimeOptions.sessionManager.close();\n\t\t} catch (cleanupError) {\n\t\t\tif (!errors.includes(cleanupError)) errors.push(cleanupError);\n\t\t}\n\t\ttry {\n\t\t\tlease?.release();\n\t\t} catch (cleanupError) {\n\t\t\tif (!errors.includes(cleanupError)) errors.push(cleanupError);\n\t\t}\n\t\tif (errors.length === initialErrorCount) throw error;\n\t\tthrow new AggregateError(errors, \"Runtime creation and cleanup failed\");\n\t}\n}\n\nexport {\n\ttype AgentSessionRuntimeDiagnostic,\n\ttype AgentSessionServices,\n\ttype CreateAgentSessionFromServicesOptions,\n\ttype CreateAgentSessionServicesOptions,\n\tcreateAgentSessionFromServices,\n\tcreateAgentSessionServices,\n} from \"./agent-session-services.js\";\n"]}
1
+ {"version":3,"file":"agent-session-runtime.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-runtime.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,KAAK,EACX,2BAA2B,EAC3B,6BAA6B,EAC7B,oBAAoB,EACpB,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,sBAAsB,EAAwB,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE7G,OAAO,KAAK,EACX,+BAA+B,EAE/B,kBAAkB,EAClB,mBAAmB,EACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAGzD,OAAO,EAA6C,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClG,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAE5E,MAAM,WAAW,+BAAgC,SAAQ,wBAAwB;IAChF,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,WAAW,EAAE,6BAA6B,EAAE,CAAC;CAC7C;AAED,MAAM,MAAM,gCAAgC,GAAG,CAAC,OAAO,EAAE;IACxD,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,cAAc,CAAC;IAC/B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,aAAa,CAAC,EAAE,yBAAyB,CAAC;IAC1C,cAAc,CAAC,EAAE,2BAA2B,CAAC;CAC7C,KAAK,OAAO,CAAC,+BAA+B,CAAC,CAAC;AAE/C,MAAM,MAAM,uBAAuB,GAAG,WAAW,GAAG,UAAU,CAAC;AAE/D,MAAM,WAAW,2BAA2B;IAC3C,IAAI,EAAE,uBAAuB,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAaD,MAAM,WAAW,iCAAiC;IACjD,gGAAgG;IAChG,cAAc,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,qBAAa,mBAAoB,YAAW,mBAAmB;IAW7D,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,qBAAqB,CAAC;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAI1B,OAAO,CAAC,aAAa,CAAC;IApBvB,OAAO,CAAC,aAAa,CAAC,CAA2C;IACjE,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAA8D;IACvG,OAAO,CAAC,eAAe,CAAC,CAA0C;IAClE,OAAO,CAAC,uBAAuB,CAAC,CAAa;IAC7C,OAAO,CAAC,mBAAmB,CAAC,CAAsB;IAClD,OAAO,CAAC,gBAAgB,CAA0C;IAClE,OAAO,CAAC,cAAc,CAAC,CAAgB;IACvC,OAAO,CAAC,yBAAyB,CAAS;IAE1C,YACS,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAE,oBAAoB,EACtB,aAAa,EAAE,gCAAgC,EACxD,YAAY,GAAE,6BAA6B,EAAO,EAClD,qBAAqB,CAAC,oBAAQ,EACrB,aAAa,CAAC,uCAA2B,EACzC,SAAS,GAAE,2BAG3B,EACO,aAAa,CAAC,0BAAc,EAGpC;IAED,IAAI,QAAQ,IAAI,oBAAoB,CAEnC;IAED,IAAI,OAAO,IAAI,YAAY,CAE1B;IAED,IAAI,QAAQ,8DAEX;IAED,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,IAAI,WAAW,IAAI,SAAS,6BAA6B,EAAE,CAE1D;IAED,IAAI,oBAAoB,IAAI,MAAM,GAAG,SAAS,CAQ7C;IAED,IAAI,QAAQ,IAAI,2BAA2B,CAE1C;IAED,IAAI,aAAa,IAAI,yBAAyB,GAAG,SAAS,CAEzD;IAED,gBAAgB,CAAC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAE/E;IAED,iBAAiB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAGvF;IAED;;;;OAIG;IACH,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAExE;IAED,OAAO,CAAC,WAAW;IAInB,sBAAsB,CAAC,IAAI,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAGvD;IAED;;;;;;;OAOG;IACH,0BAA0B,CAAC,uBAAuB,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI,CAErE;YAEa,gBAAgB;YAiBhB,cAAc;YAiBd,eAAe;IAY7B,6GAA6G;IAC7G,wBAAwB,IAAI,IAAI,CAG/B;IAED,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,KAAK;IAQb,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,uBAAuB;IAM/B,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,sBAAsB;YAShB,kBAAkB;YA0ClB,uBAAuB;YAgBvB,6BAA6B;IAiB3C,oBAAoB,IAAI,SAAS,mBAAmB,EAAE,CAErD;IAEK,wBAAwB,CAAC,OAAO,EAAE,+BAA+B,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAiBpG;YAEa,gCAAgC;IAqGxC,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAepF;YAEa,wBAAwB;IAYtC,OAAO,CAAC,uBAAuB;IAMzB,aAAa,CAClB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,GAC9F,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAgCjC;IAEK,UAAU,CAAC,OAAO,CAAC,EAAE;QAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,KAAK,CAAC,EAAE,CAAC,cAAc,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1D,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KAC7D,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAmBlC;IAEK,IAAI,CACT,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QACT,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;QAC3B,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KAC7D,GACC,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAqCxD;IAED;;;;;;OAMG;IACG,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAsB9F;YAEa,WAAW;IAmCnB,OAAO,CAAC,OAAO,CAAC,EAAE,iCAAiC,GAAG,OAAO,CAAC,IAAI,CAAC,CAKxE;CACD;AAED,wBAAsB,yBAAyB,CAC9C,aAAa,EAAE,gCAAgC,EAC/C,OAAO,EAAE;IACR,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,cAAc,CAAC;IAC/B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,aAAa,CAAC,EAAE,yBAAyB,CAAC;IAC1C,cAAc,CAAC,EAAE,2BAA2B,CAAC;IAC7C,eAAe,CAAC,EAAE,2BAA2B,CAAC;IAC9C,YAAY,CAAC,EAAE,YAAY,CAAC;CAC5B,GACC,OAAO,CAAC,mBAAmB,CAAC,CA0C9B;AAED,OAAO,EACN,KAAK,6BAA6B,EAClC,KAAK,oBAAoB,EACzB,KAAK,qCAAqC,EAC1C,KAAK,iCAAiC,EACtC,8BAA8B,EAC9B,0BAA0B,GAC1B,MAAM,6BAA6B,CAAC","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport type { AgentSession } from \"./agent-session.js\";\nimport type { AgentSessionRuntimeConfig } from \"./agent-session-config.js\";\nimport type {\n\tAgentSessionCreationOptions,\n\tAgentSessionRuntimeDiagnostic,\n\tAgentSessionServices,\n} from \"./agent-session-services.js\";\nimport { isNoModelsAvailableMessage } from \"./auth-guidance.js\";\nimport type { ReplacedSessionContext, SessionShutdownEvent, SessionStartEvent } from \"./extensions/index.js\";\nimport { emitSessionShutdownEvent } from \"./extensions/runner.js\";\nimport type {\n\tCreateRlmSubagentRuntimeOptions,\n\tRlmChildAdmission,\n\tRlmSubagentRuntime,\n\tSubagentRuntimeHost,\n} from \"./rlm-runtime.js\";\nimport type { CreateAgentSessionResult } from \"./sdk.js\";\nimport { assertSessionCwdExists } from \"./session-cwd.js\";\nimport { SessionImportFileNotFoundError } from \"./session-import-errors.js\";\nimport { acquireSessionLease, canonicalSessionPath, type SessionLease } from \"./session-lease.js\";\nimport { SessionManager } from \"./session-manager.js\";\n\nexport { SessionImportFileNotFoundError } from \"./session-import-errors.js\";\n\nexport interface CreateAgentSessionRuntimeResult extends CreateAgentSessionResult {\n\tservices: AgentSessionServices;\n\tdiagnostics: AgentSessionRuntimeDiagnostic[];\n}\n\nexport type CreateAgentSessionRuntimeFactory = (options: {\n\tcwd: string;\n\tagentDir: string;\n\tsessionManager: SessionManager;\n\tsessionStartEvent?: SessionStartEvent;\n\tsessionConfig?: AgentSessionRuntimeConfig;\n\tsessionOptions?: AgentSessionCreationOptions;\n}) => Promise<CreateAgentSessionRuntimeResult>;\n\nexport type AgentSessionRuntimeKind = \"top-level\" | \"subagent\";\n\nexport interface AgentSessionRuntimeMetadata {\n\tkind: AgentSessionRuntimeKind;\n\tcreatedAt: number;\n\tparentActiveSessionId?: string;\n\tparentSessionId?: string;\n\tparentSessionFile?: string;\n\trlmChildId?: string;\n\trlmParentNodeId?: string;\n\trehydratedCompleted?: boolean;\n\tprompt?: string;\n\tspawnCode?: string;\n\tsessionDir?: string;\n}\n\nfunction extractUserMessageText(content: string | Array<{ type: string; text?: string }>): string {\n\tif (typeof content === \"string\") {\n\t\treturn content;\n\t}\n\n\treturn content\n\t\t.filter((part): part is { type: \"text\"; text: string } => part.type === \"text\" && typeof part.text === \"string\")\n\t\t.map((part) => part.text)\n\t\t.join(\"\");\n}\n\nexport interface AgentSessionRuntimeDisposeOptions {\n\t/** Set false when the session's artifact dir is deleted right after disposal (default true). */\n\tkernelSnapshot?: boolean;\n}\n\nexport class AgentSessionRuntime implements SubagentRuntimeHost {\n\tprivate rebindSession?: (session: AgentSession) => Promise<void>;\n\tprivate readonly sessionReplacedListeners = new Set<(session: AgentSession) => void | Promise<void>>();\n\tprivate runtimeEnvScope?: <T>(fn: () => Promise<T>) => Promise<T>;\n\tprivate beforeSessionInvalidate?: () => void;\n\tprivate subagentRuntimeHost?: SubagentRuntimeHost;\n\tprivate subagentRuntimes = new Map<string, AgentSessionRuntime>();\n\tprivate disposePromise?: Promise<void>;\n\tprivate autoRefineAdmissionClosed = false;\n\n\tconstructor(\n\t\tprivate _session: AgentSession,\n\t\tprivate _services: AgentSessionServices,\n\t\tprivate readonly createRuntime: CreateAgentSessionRuntimeFactory,\n\t\tprivate _diagnostics: AgentSessionRuntimeDiagnostic[] = [],\n\t\tprivate _modelFallbackMessage?: string,\n\t\tprivate readonly sessionConfig?: AgentSessionRuntimeConfig,\n\t\tprivate readonly _metadata: AgentSessionRuntimeMetadata = {\n\t\t\tkind: \"top-level\",\n\t\t\tcreatedAt: Date.now(),\n\t\t},\n\t\tprivate _sessionLease?: SessionLease,\n\t) {\n\t\tthis.bindRuntimeHost();\n\t}\n\n\tget services(): AgentSessionServices {\n\t\treturn this._services;\n\t}\n\n\tget session(): AgentSession {\n\t\treturn this._session;\n\t}\n\n\tget requests() {\n\t\treturn this._session.requests;\n\t}\n\n\tget cwd(): string {\n\t\treturn this._services.cwd;\n\t}\n\n\tget diagnostics(): readonly AgentSessionRuntimeDiagnostic[] {\n\t\treturn this._diagnostics;\n\t}\n\n\tget modelFallbackMessage(): string | undefined {\n\t\t// The \"no models available\" warning describes session state, not a\n\t\t// startup event: once the session gains a model (set_model, /login,\n\t\t// onboarding), the stored snapshot is stale and must not reach clients.\n\t\tif (isNoModelsAvailableMessage(this._modelFallbackMessage) && this._session.model) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn this._modelFallbackMessage;\n\t}\n\n\tget metadata(): AgentSessionRuntimeMetadata {\n\t\treturn { ...this._metadata };\n\t}\n\n\tget runtimeConfig(): AgentSessionRuntimeConfig | undefined {\n\t\treturn this.sessionConfig ? { ...this.sessionConfig } : undefined;\n\t}\n\n\tsetRebindSession(rebindSession?: (session: AgentSession) => Promise<void>): void {\n\t\tthis.rebindSession = rebindSession;\n\t}\n\n\tonSessionReplaced(listener: (session: AgentSession) => void | Promise<void>): () => void {\n\t\tthis.sessionReplacedListeners.add(listener);\n\t\treturn () => this.sessionReplacedListeners.delete(listener);\n\t}\n\n\t/**\n\t * Host-installed scope wrapping every runtime rebuild (new/switch/fork/\n\t * import and subagent creation), during which extensions re-load. The\n\t * daemon uses it to apply the session's client env for load-time captures.\n\t */\n\tsetRuntimeEnvScope(scope?: <T>(fn: () => Promise<T>) => Promise<T>): void {\n\t\tthis.runtimeEnvScope = scope;\n\t}\n\n\tprivate scopedBuild<T>(fn: () => Promise<T>): Promise<T> {\n\t\treturn this.runtimeEnvScope ? this.runtimeEnvScope(fn) : fn();\n\t}\n\n\tsetSubagentRuntimeHost(host?: SubagentRuntimeHost): void {\n\t\tthis.subagentRuntimeHost = host;\n\t\tthis.bindRuntimeHost();\n\t}\n\n\t/**\n\t * Set a synchronous callback that runs after `session_shutdown` handlers finish\n\t * but before the current session is invalidated.\n\t *\n\t * This is for host-owned UI teardown that must not yield to the event loop,\n\t * such as detaching extension-provided TUI components before the old extension\n\t * context becomes stale.\n\t */\n\tsetBeforeSessionInvalidate(beforeSessionInvalidate?: () => void): void {\n\t\tthis.beforeSessionInvalidate = beforeSessionInvalidate;\n\t}\n\n\tprivate async emitBeforeSwitch(\n\t\treason: \"new\" | \"resume\",\n\t\ttargetSessionFile?: string,\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst runner = this.session.extensionRunner;\n\t\tif (!runner.hasHandlers(\"session_before_switch\")) {\n\t\t\treturn { cancelled: false };\n\t\t}\n\n\t\tconst result = await runner.emit({\n\t\t\ttype: \"session_before_switch\",\n\t\t\treason,\n\t\t\ttargetSessionFile,\n\t\t});\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate async emitBeforeFork(\n\t\trunner: AgentSession[\"extensionRunner\"],\n\t\tentryId: string,\n\t\toptions: { position: \"before\" | \"at\" },\n\t): Promise<{ cancelled: boolean }> {\n\t\tif (!runner.hasHandlers(\"session_before_fork\")) {\n\t\t\treturn { cancelled: false };\n\t\t}\n\n\t\tconst result = await runner.emit({\n\t\t\ttype: \"session_before_fork\",\n\t\t\tentryId,\n\t\t\t...options,\n\t\t});\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate async teardownCurrent(reason: SessionShutdownEvent[\"reason\"], targetSessionFile?: string): Promise<void> {\n\t\tawait emitSessionShutdownEvent(this.session.extensionRunner, {\n\t\t\ttype: \"session_shutdown\",\n\t\t\treason,\n\t\t\ttargetSessionFile,\n\t\t});\n\t\tthis.beforeSessionInvalidate?.();\n\t\t// Await the kernel's final snapshot flush before invalidating the session.\n\t\tawait this.session.disposeAsync();\n\t\tawait this.disposeHostedSubagentRuntimes();\n\t}\n\n\t/** Native EOF closes new opportunistic work, including a session replaced by an already accepted command. */\n\tcloseAutoRefineAdmission(): void {\n\t\tthis.autoRefineAdmissionClosed = true;\n\t\tthis._session.closeAutoRefineAdmission();\n\t}\n\n\tprivate bindRuntimeHost(): void {\n\t\tif (this.autoRefineAdmissionClosed) this._session.closeAutoRefineAdmission();\n\t\tthis._session.setSubagentRuntimeHost(this.subagentRuntimeHost ?? this);\n\t}\n\n\tprivate apply(result: CreateAgentSessionRuntimeResult): void {\n\t\tthis._session = result.session;\n\t\tthis._services = result.services;\n\t\tthis._diagnostics = result.diagnostics;\n\t\tthis._modelFallbackMessage = result.modelFallbackMessage;\n\t\tthis.bindRuntimeHost();\n\t}\n\n\tprivate acquireReplacementLease(sessionPath: string | undefined): SessionLease | undefined {\n\t\tif (sessionPath && this._sessionLease?.sessionPath === canonicalSessionPath(sessionPath)) {\n\t\t\treturn this._sessionLease;\n\t\t}\n\t\treturn acquireSessionLease(sessionPath, this.services.agentDir);\n\t}\n\n\tprivate releaseUncommittedLease(lease: SessionLease | undefined): void {\n\t\tif (lease !== this._sessionLease) {\n\t\t\tlease?.release();\n\t\t}\n\t}\n\n\tprivate releaseSessionLease(): void {\n\t\tthis._sessionLease?.release();\n\t\tthis._sessionLease = undefined;\n\t}\n\n\tprivate commitReplacementLease(lease: SessionLease | undefined): void {\n\t\tif (lease === this._sessionLease) {\n\t\t\treturn;\n\t\t}\n\t\tconst previous = this._sessionLease;\n\t\tthis._sessionLease = lease;\n\t\tprevious?.release();\n\t}\n\n\tprivate async replaceWithManager(\n\t\tsessionManager: SessionManager,\n\t\tsource: { session: AgentSession; sessionFile: string | undefined; agentDir: string },\n\t\treason: \"new\" | \"resume\" | \"fork\",\n\t\tteardown = true,\n\t\tsetup?: (manager: SessionManager) => Promise<void>,\n\t): Promise<void> {\n\t\tlet lease: SessionLease | undefined;\n\t\tlet result: CreateAgentSessionRuntimeResult | undefined;\n\t\ttry {\n\t\t\tif (this.session !== source.session) throw new Error(\"Session changed before replacement\");\n\t\t\tlease = this.acquireReplacementLease(sessionManager.getSessionFile());\n\t\t\tif (teardown) await this.teardownCurrent(reason, sessionManager.getSessionFile());\n\t\t\tresult = await this.scopedBuild(() =>\n\t\t\t\tthis.createRuntime({\n\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\tagentDir: source.agentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason, previousSessionFile: source.sessionFile },\n\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t}),\n\t\t\t);\n\t\t\tawait result.session.initialize();\n\t\t\tif (setup) {\n\t\t\t\tawait setup(sessionManager);\n\t\t\t\tawait sessionManager.flushNow();\n\t\t\t\tresult.session.agent.state.messages = (await result.session.buildSessionContext()).messages;\n\t\t\t}\n\t\t\tif (this.session !== source.session) throw new Error(\"Session changed during replacement\");\n\t\t\tthis.apply(result);\n\t\t\tthis.commitReplacementLease(lease);\n\t\t} catch (error) {\n\t\t\ttry {\n\t\t\t\tif (result) await result.session.disposeAsync();\n\t\t\t\telse await sessionManager.close();\n\t\t\t} finally {\n\t\t\t\tthis.releaseUncommittedLease(lease);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async disposeSubagentRuntimes(): Promise<void> {\n\t\tconst runtimes = [...this.subagentRuntimes.values()];\n\t\tthis.subagentRuntimes.clear();\n\t\tlet disposeError: unknown;\n\t\tfor (const runtime of runtimes) {\n\t\t\ttry {\n\t\t\t\tawait runtime.dispose();\n\t\t\t} catch (error) {\n\t\t\t\tdisposeError ??= error;\n\t\t\t}\n\t\t}\n\t\tif (disposeError) {\n\t\t\tthrow disposeError;\n\t\t}\n\t}\n\n\tprivate async disposeHostedSubagentRuntimes(): Promise<void> {\n\t\tlet disposeError: unknown;\n\t\ttry {\n\t\t\tawait this.subagentRuntimeHost?.disposeRlmSubagentRuntimes?.();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tawait this.disposeSubagentRuntimes();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\tif (disposeError) {\n\t\t\tthrow disposeError;\n\t\t}\n\t}\n\n\tlistSubagentRuntimes(): readonly AgentSessionRuntime[] {\n\t\treturn [...this.subagentRuntimes.values()];\n\t}\n\n\tasync createRlmSubagentRuntime(options: CreateRlmSubagentRuntimeOptions): Promise<RlmSubagentRuntime> {\n\t\toptions = { ...options, contextMode: options.contextMode ?? options.parentSession.contextMode };\n\t\tconst requestTokenBudget =\n\t\t\toptions.requestTokenBudget === undefined\n\t\t\t\t? options.parentSession.requests.getRequestTokenBudgetOptions()\n\t\t\t\t: structuredClone(options.requestTokenBudget);\n\t\tif (requestTokenBudget !== undefined) options = { ...options, requestTokenBudget };\n\t\tconst admission = options.admission ?? (await options.parentSession.reserveRlmChildAdmission());\n\t\ttry {\n\t\t\tif (admission.parent !== options.parentSession)\n\t\t\t\tthrow new Error(\"RLM child admission belongs to another parent\");\n\t\t\tadmission.assertCurrent();\n\t\t\tadmission.claimFactory();\n\t\t\treturn await this.createAdmittedRlmSubagentRuntime({ ...options, admission });\n\t\t} finally {\n\t\t\tif (!options.admission) await admission.settle();\n\t\t}\n\t}\n\n\tprivate async createAdmittedRlmSubagentRuntime(\n\t\toptions: CreateRlmSubagentRuntimeOptions & { admission: RlmChildAdmission },\n\t): Promise<RlmSubagentRuntime> {\n\t\toptions.admission.assertCurrent();\n\t\tconst parent = options.parentSession;\n\t\tconst parentSessionFile = parent.sessionFile;\n\t\tconst parentSessionId = parent.sessionId;\n\t\tconst parentAgent = parent.sessionName ?? parentSessionId;\n\t\tconst agentDir = this.services.agentDir;\n\t\tconst sessionManager = await SessionManager.create(parent.sessionManager.getCwd(), options.sessionDir, {\n\t\t\tparentSession: parentSessionFile,\n\t\t\trlmDepth: options.rlmDepth,\n\t\t});\n\t\tlet runtime: AgentSessionRuntime;\n\t\tlet factoryStarted = false;\n\t\ttry {\n\t\t\toptions.admission.assertCurrent();\n\t\t\tfactoryStarted = true;\n\t\t\truntime = await this.scopedBuild(() =>\n\t\t\t\tcreateAgentSessionRuntime(this.createRuntime, {\n\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\tagentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"startup\" },\n\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\tsessionOptions: {\n\t\t\t\t\t\t...(options.requestTokenBudget === undefined\n\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t: { requestTokenBudget: options.requestTokenBudget }),\n\t\t\t\t\t\tcontextMode: options.contextMode,\n\t\t\t\t\t\tmodel: options.model,\n\t\t\t\t\t\tthinkingLevel: options.thinkingLevel,\n\t\t\t\t\t\tserviceTier: options.serviceTier,\n\t\t\t\t\t\tscopedModels: options.scopedModels,\n\t\t\t\t\t\tinitialActiveToolNames: options.activeToolNames,\n\t\t\t\t\t\tallowedToolNames: options.allowedToolNames,\n\t\t\t\t\t\tcustomTools: options.customTools,\n\t\t\t\t\t\tincludeGoals: options.includeGoals,\n\t\t\t\t\t\tincludeCompactSkill: options.includeCompactSkill,\n\t\t\t\t\t\trlmDepth: options.rlmDepth,\n\t\t\t\t\t\trlmMaxDepth: options.rlmMaxDepth,\n\t\t\t\t\t\trlmSessionDir: options.sessionDir,\n\t\t\t\t\t\trlmParentNodeId: options.rlmParentNodeId,\n\t\t\t\t\t\trlmParentAgent: parentAgent,\n\t\t\t\t\t\trlmChildAdmission: options.admission,\n\t\t\t\t\t\tsemanticParentSessionId: parentSessionId,\n\t\t\t\t\t\tsemanticSpawnedByRequestId: options.spawnedByRequestId,\n\t\t\t\t\t},\n\t\t\t\t\truntimeMetadata: {\n\t\t\t\t\t\tkind: \"subagent\",\n\t\t\t\t\t\tcreatedAt: Date.now(),\n\t\t\t\t\t\tparentSessionId: parentSessionId,\n\t\t\t\t\t\tparentSessionFile: parentSessionFile,\n\t\t\t\t\t\trlmChildId: options.id,\n\t\t\t\t\t\trlmParentNodeId: options.rlmParentNodeId,\n\t\t\t\t\t\tprompt: options.prompt,\n\t\t\t\t\t\tspawnCode: options.spawnCode,\n\t\t\t\t\t\tsessionDir: options.sessionDir,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\ttry {\n\t\t\t\tawait sessionManager.close();\n\t\t\t\tif (!factoryStarted) await options.admission.confirmUnboundCleanup();\n\t\t\t} catch (cleanupError) {\n\t\t\t\tif (cleanupError === error || (error instanceof AggregateError && error.errors.includes(cleanupError)))\n\t\t\t\t\tthrow error;\n\t\t\t\tthrow new AggregateError([error, cleanupError], \"RLM startup and cleanup failed\");\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\tthis.subagentRuntimes.set(options.id, runtime);\n\t\ttry {\n\t\t\tawait runtime.session.bindExtensions({});\n\t\t\tif (options.parentSession.getRlmChildRunStatus(options.id) === \"cancelled\") {\n\t\t\t\tthrow new Error(\"RLM subagent startup was cancelled\");\n\t\t\t}\n\t\t\tif (runtime.session.sessionName !== options.sessionName) {\n\t\t\t\tawait runtime.session.setSessionName(options.sessionName);\n\t\t\t}\n\t\t\tif (parent.getRlmChildRunStatus(options.id) === \"cancelled\") {\n\t\t\t\tthrow new Error(\"RLM subagent startup was cancelled\");\n\t\t\t}\n\t\t\toptions.admission.bind(runtime.session);\n\t\t\toptions.admission.assertCurrent();\n\t\t\toptions.onSessionPublished?.(runtime.session);\n\t\t} catch (error) {\n\t\t\tthis.subagentRuntimes.delete(options.id);\n\t\t\ttry {\n\t\t\t\tawait runtime.dispose();\n\t\t\t} catch (cleanupError) {\n\t\t\t\tif (cleanupError === error || (error instanceof AggregateError && error.errors.includes(cleanupError)))\n\t\t\t\t\tthrow error;\n\t\t\t\tthrow new AggregateError([error, cleanupError], \"RLM startup and cleanup failed\");\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\treturn runtime;\n\t}\n\n\tasync deleteRlmSubagentRuntime(childId: string, session: AgentSession): Promise<void> {\n\t\tconst runtime = this.subagentRuntimes.get(childId);\n\t\tif (!runtime) {\n\t\t\tawait session.disposeAsync();\n\t\t\treturn;\n\t\t}\n\t\tthis.subagentRuntimes.delete(childId);\n\t\tconst shouldDisposeStaleSession = runtime.session !== session;\n\t\ttry {\n\t\t\tawait runtime.dispose();\n\t\t} finally {\n\t\t\tif (shouldDisposeStaleSession) {\n\t\t\t\tawait session.disposeAsync();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async finishSessionReplacement(withSession?: (ctx: ReplacedSessionContext) => Promise<void>): Promise<void> {\n\t\tif (this.rebindSession) {\n\t\t\tawait this.rebindSession(this.session);\n\t\t}\n\t\tfor (const listener of this.sessionReplacedListeners) {\n\t\t\tawait listener(this.session);\n\t\t}\n\t\tif (withSession) {\n\t\t\tawait withSession(this.session.createReplacedSessionContext());\n\t\t}\n\t}\n\n\tprivate assertCanReplaceSession(): void {\n\t\tif (this.metadata.kind === \"subagent\" || this.session.hasRlmParentAdmission) {\n\t\t\tthrow new Error(\"Owned child-runtime replacement is unavailable; dispose or passivate the child instead\");\n\t\t}\n\t}\n\n\tasync switchSession(\n\t\tsessionPath: string,\n\t\toptions?: { cwdOverride?: string; withSession?: (ctx: ReplacedSessionContext) => Promise<void> },\n\t): Promise<{ cancelled: boolean }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst fallbackCwd = this.cwd;\n\t\tconst cwdOverride = options?.cwdOverride;\n\t\tconst withSession = options?.withSession;\n\t\tconst samePath =\n\t\t\tsource.sessionFile !== undefined &&\n\t\t\tcanonicalSessionPath(source.sessionFile) === canonicalSessionPath(sessionPath);\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", sessionPath);\n\t\tif (beforeResult.cancelled) return beforeResult;\n\t\tif (this.session !== source.session) throw new Error(\"Session changed before replacement\");\n\n\t\tif (samePath) {\n\t\t\tconst view = await SessionManager.openReadOnly(sessionPath, undefined, cwdOverride);\n\t\t\ttry {\n\t\t\t\tassertSessionCwdExists(view, fallbackCwd);\n\t\t\t} finally {\n\t\t\t\tawait view.close();\n\t\t\t}\n\t\t\tawait this.teardownCurrent(\"resume\", sessionPath);\n\t\t}\n\t\tconst sessionManager = await SessionManager.open(sessionPath, undefined, cwdOverride);\n\t\ttry {\n\t\t\tassertSessionCwdExists(sessionManager, fallbackCwd);\n\t\t} catch (error) {\n\t\t\tawait sessionManager.close();\n\t\t\tthrow error;\n\t\t}\n\t\tawait this.replaceWithManager(sessionManager, source, \"resume\", !samePath);\n\t\tawait this.finishSessionReplacement(withSession);\n\t\treturn { cancelled: false };\n\t}\n\n\tasync newSession(options?: {\n\t\tparentSession?: string;\n\t\tsetup?: (sessionManager: SessionManager) => Promise<void>;\n\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t}): Promise<{ cancelled: boolean }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst cwd = this.cwd;\n\t\tconst sessionDir = source.session.sessionManager.getSessionDir();\n\t\tconst headerOptions = options?.parentSession\n\t\t\t? {\n\t\t\t\t\tparentSession: options.parentSession,\n\t\t\t\t\trlmDepth: source.session.sessionManager.getHeader()?.rlmDepth ?? source.session.rlmDepth,\n\t\t\t\t}\n\t\t\t: undefined;\n\t\tconst setup = options?.setup;\n\t\tconst withSession = options?.withSession;\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"new\");\n\t\tif (beforeResult.cancelled) return beforeResult;\n\t\tconst sessionManager = await SessionManager.create(cwd, sessionDir, headerOptions);\n\t\tawait this.replaceWithManager(sessionManager, source, \"new\", true, setup);\n\t\tawait this.finishSessionReplacement(withSession);\n\t\treturn { cancelled: false };\n\t}\n\n\tasync fork(\n\t\tentryId: string,\n\t\toptions?: {\n\t\t\tposition?: \"before\" | \"at\";\n\t\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t\t},\n\t): Promise<{ cancelled: boolean; selectedText?: string }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst rlmDepth = source.session.rlmDepth;\n\t\tconst withSession = options?.withSession;\n\t\tconst position = options?.position ?? \"before\";\n\t\tconst runner = source.session.extensionRunner;\n\t\tconst preparation = Promise.allSettled([\n\t\t\tsource.session.sessionManager.prepareFork(entryId, { position, rlmDepth }),\n\t\t]);\n\t\tconst [beforeResult] = await Promise.allSettled([\n\t\t\tthis.emitBeforeFork(runner, entryId, { position }),\n\t\t\tpreparation,\n\t\t]);\n\t\t// Join the independent source read before handling hook failure or cancellation.\n\t\tif (beforeResult.status === \"rejected\") throw beforeResult.reason;\n\t\tif (beforeResult.value.cancelled) {\n\t\t\treturn { cancelled: true };\n\t\t}\n\t\tconst [preparedResult] = await preparation;\n\t\tif (preparedResult.status === \"rejected\") throw preparedResult.reason;\n\t\tconst prepared = preparedResult.value;\n\t\tif (this.session !== source.session) throw new Error(\"Session changed before replacement\");\n\n\t\tlet selectedText: string | undefined;\n\t\tif (position === \"before\") {\n\t\t\tconst selectedEntry = prepared.selectedEntry;\n\t\t\tif (selectedEntry.type !== \"message\" || selectedEntry.message.role !== \"user\") {\n\t\t\t\tthrow new Error(\"Invalid entry ID for forking\");\n\t\t\t}\n\t\t\tselectedText = extractUserMessageText(selectedEntry.message.content);\n\t\t}\n\n\t\tconst sessionManager = await prepared.create();\n\t\tawait this.replaceWithManager(sessionManager, source, \"fork\");\n\t\tawait this.finishSessionReplacement(withSession);\n\t\treturn { cancelled: false, selectedText };\n\t}\n\n\t/**\n\t * Import a session JSONL file and switch runtime state to the imported session.\n\t *\n\t * @returns `{ cancelled: true }` when cancelled by `session_before_switch`, otherwise `{ cancelled: false }`.\n\t * @throws {SessionImportFileNotFoundError} When the input path does not exist.\n\t * @throws {MissingSessionCwdError} When the imported session cwd cannot be resolved and no override is provided.\n\t */\n\tasync importFromJsonl(inputPath: string, cwdOverride?: string): Promise<{ cancelled: boolean }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst resolvedPath = resolve(inputPath);\n\t\tif (!existsSync(resolvedPath)) throw new SessionImportFileNotFoundError(resolvedPath);\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst sessionDir = source.session.sessionManager.getSessionDir();\n\t\tconst fallbackCwd = this.cwd;\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", resolvedPath);\n\t\tif (beforeResult.cancelled) return beforeResult;\n\n\t\tconst view = await SessionManager.openReadOnly(resolvedPath, undefined, cwdOverride);\n\t\tlet targetCwd: string;\n\t\ttry {\n\t\t\tassertSessionCwdExists(view, fallbackCwd);\n\t\t\ttargetCwd = view.getCwd();\n\t\t} finally {\n\t\t\tawait view.close();\n\t\t}\n\t\tconst sessionManager = await SessionManager.importRetainedFrom(resolvedPath, targetCwd, sessionDir);\n\t\tawait this.replaceWithManager(sessionManager, source, \"resume\");\n\t\tawait this.finishSessionReplacement();\n\t\treturn { cancelled: false };\n\t}\n\n\tprivate async disposeOnce(options: AgentSessionRuntimeDisposeOptions): Promise<void> {\n\t\tlet disposeError: unknown;\n\t\ttry {\n\t\t\tawait emitSessionShutdownEvent(this.session.extensionRunner, {\n\t\t\t\ttype: \"session_shutdown\",\n\t\t\t\treason: \"quit\",\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tthis.beforeSessionInvalidate?.();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\t// Await the kernel's final snapshot flush before tearing the session down.\n\t\t\tawait this.session.disposeAsync({ kernelSnapshot: options.kernelSnapshot ?? true });\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tawait this.disposeHostedSubagentRuntimes();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tif (disposeError) {\n\t\t\t\tthrow disposeError;\n\t\t\t}\n\t\t} finally {\n\t\t\tthis.releaseSessionLease();\n\t\t}\n\t}\n\n\tasync dispose(options?: AgentSessionRuntimeDisposeOptions): Promise<void> {\n\t\tif (!this.disposePromise) {\n\t\t\tthis.disposePromise = this.disposeOnce(options ?? {});\n\t\t}\n\t\tawait this.disposePromise;\n\t}\n}\n\nexport async function createAgentSessionRuntime(\n\tcreateRuntime: CreateAgentSessionRuntimeFactory,\n\toptions: {\n\t\tcwd: string;\n\t\tagentDir: string;\n\t\tsessionManager: SessionManager;\n\t\tsessionStartEvent?: SessionStartEvent;\n\t\tsessionConfig?: AgentSessionRuntimeConfig;\n\t\tsessionOptions?: AgentSessionCreationOptions;\n\t\truntimeMetadata?: AgentSessionRuntimeMetadata;\n\t\tsessionLease?: SessionLease;\n\t},\n): Promise<AgentSessionRuntime> {\n\tconst { sessionLease, ...runtimeOptions } = options;\n\tlet lease: SessionLease | undefined;\n\tlet result: CreateAgentSessionRuntimeResult | undefined;\n\ttry {\n\t\tlease =\n\t\t\tsessionLease ?? acquireSessionLease(runtimeOptions.sessionManager.getSessionFile(), runtimeOptions.agentDir);\n\t\tassertSessionCwdExists(runtimeOptions.sessionManager, runtimeOptions.cwd);\n\t\tresult = await createRuntime(runtimeOptions);\n\t\tawait result.session.initialize();\n\t\treturn new AgentSessionRuntime(\n\t\t\tresult.session,\n\t\t\tresult.services,\n\t\t\tcreateRuntime,\n\t\t\tresult.diagnostics,\n\t\t\tresult.modelFallbackMessage,\n\t\t\truntimeOptions.sessionConfig,\n\t\t\truntimeOptions.runtimeMetadata,\n\t\t\tlease,\n\t\t);\n\t} catch (error) {\n\t\tconst errors: unknown[] = error instanceof AggregateError ? [...error.errors] : [error];\n\t\tconst initialErrorCount = errors.length;\n\t\ttry {\n\t\t\tconst admitted =\n\t\t\t\truntimeOptions.sessionOptions?.rlmChildAdmission?.session ??\n\t\t\t\truntimeOptions.sessionOptions?.rlmRootAdmission?.session;\n\t\t\tconst failedSession =\n\t\t\t\tresult?.session ?? (admitted?.sessionManager === runtimeOptions.sessionManager ? admitted : undefined);\n\t\t\tif (failedSession) await failedSession.disposeAsync();\n\t\t\telse await runtimeOptions.sessionManager.close();\n\t\t} catch (cleanupError) {\n\t\t\tif (!errors.includes(cleanupError)) errors.push(cleanupError);\n\t\t}\n\t\ttry {\n\t\t\tlease?.release();\n\t\t} catch (cleanupError) {\n\t\t\tif (!errors.includes(cleanupError)) errors.push(cleanupError);\n\t\t}\n\t\tif (errors.length === initialErrorCount) throw error;\n\t\tthrow new AggregateError(errors, \"Runtime creation and cleanup failed\");\n\t}\n}\n\nexport {\n\ttype AgentSessionRuntimeDiagnostic,\n\ttype AgentSessionServices,\n\ttype CreateAgentSessionFromServicesOptions,\n\ttype CreateAgentSessionServicesOptions,\n\tcreateAgentSessionFromServices,\n\tcreateAgentSessionServices,\n} from \"./agent-session-services.js\";\n"]}
@@ -268,7 +268,7 @@ export class AgentSessionRuntime {
268
268
  : structuredClone(options.requestTokenBudget);
269
269
  if (requestTokenBudget !== undefined)
270
270
  options = { ...options, requestTokenBudget };
271
- const admission = options.admission ?? options.parentSession.reserveRlmChildAdmission();
271
+ const admission = options.admission ?? (await options.parentSession.reserveRlmChildAdmission());
272
272
  try {
273
273
  if (admission.parent !== options.parentSession)
274
274
  throw new Error("RLM child admission belongs to another parent");
@@ -278,7 +278,7 @@ export class AgentSessionRuntime {
278
278
  }
279
279
  finally {
280
280
  if (!options.admission)
281
- admission.settle();
281
+ await admission.settle();
282
282
  }
283
283
  }
284
284
  async createAdmittedRlmSubagentRuntime(options) {
@@ -343,7 +343,7 @@ export class AgentSessionRuntime {
343
343
  try {
344
344
  await sessionManager.close();
345
345
  if (!factoryStarted)
346
- options.admission.confirmUnboundCleanup();
346
+ await options.admission.confirmUnboundCleanup();
347
347
  }
348
348
  catch (cleanupError) {
349
349
  if (cleanupError === error || (error instanceof AggregateError && error.errors.includes(cleanupError)))
@@ -604,7 +604,8 @@ export async function createAgentSessionRuntime(createRuntime, options) {
604
604
  const errors = error instanceof AggregateError ? [...error.errors] : [error];
605
605
  const initialErrorCount = errors.length;
606
606
  try {
607
- const admitted = runtimeOptions.sessionOptions?.rlmChildAdmission?.session;
607
+ const admitted = runtimeOptions.sessionOptions?.rlmChildAdmission?.session ??
608
+ runtimeOptions.sessionOptions?.rlmRootAdmission?.session;
608
609
  const failedSession = result?.session ?? (admitted?.sessionManager === runtimeOptions.sessionManager ? admitted : undefined);
609
610
  if (failedSession)
610
611
  await failedSession.disposeAsync();
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-runtime.js","sourceRoot":"","sources":["../../src/core/agent-session-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport type { AgentSession } from \"./agent-session.js\";\nimport type { AgentSessionRuntimeConfig } from \"./agent-session-config.js\";\nimport type {\n\tAgentSessionCreationOptions,\n\tAgentSessionRuntimeDiagnostic,\n\tAgentSessionServices,\n} from \"./agent-session-services.js\";\nimport { isNoModelsAvailableMessage } from \"./auth-guidance.js\";\nimport type { ReplacedSessionContext, SessionShutdownEvent, SessionStartEvent } from \"./extensions/index.js\";\nimport { emitSessionShutdownEvent } from \"./extensions/runner.js\";\nimport type {\n\tCreateRlmSubagentRuntimeOptions,\n\tRlmChildAdmission,\n\tRlmSubagentRuntime,\n\tSubagentRuntimeHost,\n} from \"./rlm-runtime.js\";\nimport type { CreateAgentSessionResult } from \"./sdk.js\";\nimport { assertSessionCwdExists } from \"./session-cwd.js\";\nimport { SessionImportFileNotFoundError } from \"./session-import-errors.js\";\nimport { acquireSessionLease, canonicalSessionPath, type SessionLease } from \"./session-lease.js\";\nimport { SessionManager } from \"./session-manager.js\";\n\nexport { SessionImportFileNotFoundError } from \"./session-import-errors.js\";\n\nexport interface CreateAgentSessionRuntimeResult extends CreateAgentSessionResult {\n\tservices: AgentSessionServices;\n\tdiagnostics: AgentSessionRuntimeDiagnostic[];\n}\n\nexport type CreateAgentSessionRuntimeFactory = (options: {\n\tcwd: string;\n\tagentDir: string;\n\tsessionManager: SessionManager;\n\tsessionStartEvent?: SessionStartEvent;\n\tsessionConfig?: AgentSessionRuntimeConfig;\n\tsessionOptions?: AgentSessionCreationOptions;\n}) => Promise<CreateAgentSessionRuntimeResult>;\n\nexport type AgentSessionRuntimeKind = \"top-level\" | \"subagent\";\n\nexport interface AgentSessionRuntimeMetadata {\n\tkind: AgentSessionRuntimeKind;\n\tcreatedAt: number;\n\tparentActiveSessionId?: string;\n\tparentSessionId?: string;\n\tparentSessionFile?: string;\n\trlmChildId?: string;\n\trlmParentNodeId?: string;\n\trehydratedCompleted?: boolean;\n\tprompt?: string;\n\tspawnCode?: string;\n\tsessionDir?: string;\n}\n\nfunction extractUserMessageText(content: string | Array<{ type: string; text?: string }>): string {\n\tif (typeof content === \"string\") {\n\t\treturn content;\n\t}\n\n\treturn content\n\t\t.filter((part): part is { type: \"text\"; text: string } => part.type === \"text\" && typeof part.text === \"string\")\n\t\t.map((part) => part.text)\n\t\t.join(\"\");\n}\n\nexport interface AgentSessionRuntimeDisposeOptions {\n\t/** Set false when the session's artifact dir is deleted right after disposal (default true). */\n\tkernelSnapshot?: boolean;\n}\n\nexport class AgentSessionRuntime implements SubagentRuntimeHost {\n\tprivate rebindSession?: (session: AgentSession) => Promise<void>;\n\tprivate readonly sessionReplacedListeners = new Set<(session: AgentSession) => void | Promise<void>>();\n\tprivate runtimeEnvScope?: <T>(fn: () => Promise<T>) => Promise<T>;\n\tprivate beforeSessionInvalidate?: () => void;\n\tprivate subagentRuntimeHost?: SubagentRuntimeHost;\n\tprivate subagentRuntimes = new Map<string, AgentSessionRuntime>();\n\tprivate disposePromise?: Promise<void>;\n\tprivate autoRefineAdmissionClosed = false;\n\n\tconstructor(\n\t\tprivate _session: AgentSession,\n\t\tprivate _services: AgentSessionServices,\n\t\tprivate readonly createRuntime: CreateAgentSessionRuntimeFactory,\n\t\tprivate _diagnostics: AgentSessionRuntimeDiagnostic[] = [],\n\t\tprivate _modelFallbackMessage?: string,\n\t\tprivate readonly sessionConfig?: AgentSessionRuntimeConfig,\n\t\tprivate readonly _metadata: AgentSessionRuntimeMetadata = {\n\t\t\tkind: \"top-level\",\n\t\t\tcreatedAt: Date.now(),\n\t\t},\n\t\tprivate _sessionLease?: SessionLease,\n\t) {\n\t\tthis.bindRuntimeHost();\n\t}\n\n\tget services(): AgentSessionServices {\n\t\treturn this._services;\n\t}\n\n\tget session(): AgentSession {\n\t\treturn this._session;\n\t}\n\n\tget requests() {\n\t\treturn this._session.requests;\n\t}\n\n\tget cwd(): string {\n\t\treturn this._services.cwd;\n\t}\n\n\tget diagnostics(): readonly AgentSessionRuntimeDiagnostic[] {\n\t\treturn this._diagnostics;\n\t}\n\n\tget modelFallbackMessage(): string | undefined {\n\t\t// The \"no models available\" warning describes session state, not a\n\t\t// startup event: once the session gains a model (set_model, /login,\n\t\t// onboarding), the stored snapshot is stale and must not reach clients.\n\t\tif (isNoModelsAvailableMessage(this._modelFallbackMessage) && this._session.model) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn this._modelFallbackMessage;\n\t}\n\n\tget metadata(): AgentSessionRuntimeMetadata {\n\t\treturn { ...this._metadata };\n\t}\n\n\tget runtimeConfig(): AgentSessionRuntimeConfig | undefined {\n\t\treturn this.sessionConfig ? { ...this.sessionConfig } : undefined;\n\t}\n\n\tsetRebindSession(rebindSession?: (session: AgentSession) => Promise<void>): void {\n\t\tthis.rebindSession = rebindSession;\n\t}\n\n\tonSessionReplaced(listener: (session: AgentSession) => void | Promise<void>): () => void {\n\t\tthis.sessionReplacedListeners.add(listener);\n\t\treturn () => this.sessionReplacedListeners.delete(listener);\n\t}\n\n\t/**\n\t * Host-installed scope wrapping every runtime rebuild (new/switch/fork/\n\t * import and subagent creation), during which extensions re-load. The\n\t * daemon uses it to apply the session's client env for load-time captures.\n\t */\n\tsetRuntimeEnvScope(scope?: <T>(fn: () => Promise<T>) => Promise<T>): void {\n\t\tthis.runtimeEnvScope = scope;\n\t}\n\n\tprivate scopedBuild<T>(fn: () => Promise<T>): Promise<T> {\n\t\treturn this.runtimeEnvScope ? this.runtimeEnvScope(fn) : fn();\n\t}\n\n\tsetSubagentRuntimeHost(host?: SubagentRuntimeHost): void {\n\t\tthis.subagentRuntimeHost = host;\n\t\tthis.bindRuntimeHost();\n\t}\n\n\t/**\n\t * Set a synchronous callback that runs after `session_shutdown` handlers finish\n\t * but before the current session is invalidated.\n\t *\n\t * This is for host-owned UI teardown that must not yield to the event loop,\n\t * such as detaching extension-provided TUI components before the old extension\n\t * context becomes stale.\n\t */\n\tsetBeforeSessionInvalidate(beforeSessionInvalidate?: () => void): void {\n\t\tthis.beforeSessionInvalidate = beforeSessionInvalidate;\n\t}\n\n\tprivate async emitBeforeSwitch(\n\t\treason: \"new\" | \"resume\",\n\t\ttargetSessionFile?: string,\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst runner = this.session.extensionRunner;\n\t\tif (!runner.hasHandlers(\"session_before_switch\")) {\n\t\t\treturn { cancelled: false };\n\t\t}\n\n\t\tconst result = await runner.emit({\n\t\t\ttype: \"session_before_switch\",\n\t\t\treason,\n\t\t\ttargetSessionFile,\n\t\t});\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate async emitBeforeFork(\n\t\trunner: AgentSession[\"extensionRunner\"],\n\t\tentryId: string,\n\t\toptions: { position: \"before\" | \"at\" },\n\t): Promise<{ cancelled: boolean }> {\n\t\tif (!runner.hasHandlers(\"session_before_fork\")) {\n\t\t\treturn { cancelled: false };\n\t\t}\n\n\t\tconst result = await runner.emit({\n\t\t\ttype: \"session_before_fork\",\n\t\t\tentryId,\n\t\t\t...options,\n\t\t});\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate async teardownCurrent(reason: SessionShutdownEvent[\"reason\"], targetSessionFile?: string): Promise<void> {\n\t\tawait emitSessionShutdownEvent(this.session.extensionRunner, {\n\t\t\ttype: \"session_shutdown\",\n\t\t\treason,\n\t\t\ttargetSessionFile,\n\t\t});\n\t\tthis.beforeSessionInvalidate?.();\n\t\t// Await the kernel's final snapshot flush before invalidating the session.\n\t\tawait this.session.disposeAsync();\n\t\tawait this.disposeHostedSubagentRuntimes();\n\t}\n\n\t/** Native EOF closes new opportunistic work, including a session replaced by an already accepted command. */\n\tcloseAutoRefineAdmission(): void {\n\t\tthis.autoRefineAdmissionClosed = true;\n\t\tthis._session.closeAutoRefineAdmission();\n\t}\n\n\tprivate bindRuntimeHost(): void {\n\t\tif (this.autoRefineAdmissionClosed) this._session.closeAutoRefineAdmission();\n\t\tthis._session.setSubagentRuntimeHost(this.subagentRuntimeHost ?? this);\n\t}\n\n\tprivate apply(result: CreateAgentSessionRuntimeResult): void {\n\t\tthis._session = result.session;\n\t\tthis._services = result.services;\n\t\tthis._diagnostics = result.diagnostics;\n\t\tthis._modelFallbackMessage = result.modelFallbackMessage;\n\t\tthis.bindRuntimeHost();\n\t}\n\n\tprivate acquireReplacementLease(sessionPath: string | undefined): SessionLease | undefined {\n\t\tif (sessionPath && this._sessionLease?.sessionPath === canonicalSessionPath(sessionPath)) {\n\t\t\treturn this._sessionLease;\n\t\t}\n\t\treturn acquireSessionLease(sessionPath, this.services.agentDir);\n\t}\n\n\tprivate releaseUncommittedLease(lease: SessionLease | undefined): void {\n\t\tif (lease !== this._sessionLease) {\n\t\t\tlease?.release();\n\t\t}\n\t}\n\n\tprivate releaseSessionLease(): void {\n\t\tthis._sessionLease?.release();\n\t\tthis._sessionLease = undefined;\n\t}\n\n\tprivate commitReplacementLease(lease: SessionLease | undefined): void {\n\t\tif (lease === this._sessionLease) {\n\t\t\treturn;\n\t\t}\n\t\tconst previous = this._sessionLease;\n\t\tthis._sessionLease = lease;\n\t\tprevious?.release();\n\t}\n\n\tprivate async replaceWithManager(\n\t\tsessionManager: SessionManager,\n\t\tsource: { session: AgentSession; sessionFile: string | undefined; agentDir: string },\n\t\treason: \"new\" | \"resume\" | \"fork\",\n\t\tteardown = true,\n\t\tsetup?: (manager: SessionManager) => Promise<void>,\n\t): Promise<void> {\n\t\tlet lease: SessionLease | undefined;\n\t\tlet result: CreateAgentSessionRuntimeResult | undefined;\n\t\ttry {\n\t\t\tif (this.session !== source.session) throw new Error(\"Session changed before replacement\");\n\t\t\tlease = this.acquireReplacementLease(sessionManager.getSessionFile());\n\t\t\tif (teardown) await this.teardownCurrent(reason, sessionManager.getSessionFile());\n\t\t\tresult = await this.scopedBuild(() =>\n\t\t\t\tthis.createRuntime({\n\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\tagentDir: source.agentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason, previousSessionFile: source.sessionFile },\n\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t}),\n\t\t\t);\n\t\t\tawait result.session.initialize();\n\t\t\tif (setup) {\n\t\t\t\tawait setup(sessionManager);\n\t\t\t\tawait sessionManager.flushNow();\n\t\t\t\tresult.session.agent.state.messages = (await result.session.buildSessionContext()).messages;\n\t\t\t}\n\t\t\tif (this.session !== source.session) throw new Error(\"Session changed during replacement\");\n\t\t\tthis.apply(result);\n\t\t\tthis.commitReplacementLease(lease);\n\t\t} catch (error) {\n\t\t\ttry {\n\t\t\t\tif (result) await result.session.disposeAsync();\n\t\t\t\telse await sessionManager.close();\n\t\t\t} finally {\n\t\t\t\tthis.releaseUncommittedLease(lease);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async disposeSubagentRuntimes(): Promise<void> {\n\t\tconst runtimes = [...this.subagentRuntimes.values()];\n\t\tthis.subagentRuntimes.clear();\n\t\tlet disposeError: unknown;\n\t\tfor (const runtime of runtimes) {\n\t\t\ttry {\n\t\t\t\tawait runtime.dispose();\n\t\t\t} catch (error) {\n\t\t\t\tdisposeError ??= error;\n\t\t\t}\n\t\t}\n\t\tif (disposeError) {\n\t\t\tthrow disposeError;\n\t\t}\n\t}\n\n\tprivate async disposeHostedSubagentRuntimes(): Promise<void> {\n\t\tlet disposeError: unknown;\n\t\ttry {\n\t\t\tawait this.subagentRuntimeHost?.disposeRlmSubagentRuntimes?.();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tawait this.disposeSubagentRuntimes();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\tif (disposeError) {\n\t\t\tthrow disposeError;\n\t\t}\n\t}\n\n\tlistSubagentRuntimes(): readonly AgentSessionRuntime[] {\n\t\treturn [...this.subagentRuntimes.values()];\n\t}\n\n\tasync createRlmSubagentRuntime(options: CreateRlmSubagentRuntimeOptions): Promise<RlmSubagentRuntime> {\n\t\toptions = { ...options, contextMode: options.contextMode ?? options.parentSession.contextMode };\n\t\tconst requestTokenBudget =\n\t\t\toptions.requestTokenBudget === undefined\n\t\t\t\t? options.parentSession.requests.getRequestTokenBudgetOptions()\n\t\t\t\t: structuredClone(options.requestTokenBudget);\n\t\tif (requestTokenBudget !== undefined) options = { ...options, requestTokenBudget };\n\t\tconst admission = options.admission ?? options.parentSession.reserveRlmChildAdmission();\n\t\ttry {\n\t\t\tif (admission.parent !== options.parentSession)\n\t\t\t\tthrow new Error(\"RLM child admission belongs to another parent\");\n\t\t\tadmission.assertCurrent();\n\t\t\tadmission.claimFactory();\n\t\t\treturn await this.createAdmittedRlmSubagentRuntime({ ...options, admission });\n\t\t} finally {\n\t\t\tif (!options.admission) admission.settle();\n\t\t}\n\t}\n\n\tprivate async createAdmittedRlmSubagentRuntime(\n\t\toptions: CreateRlmSubagentRuntimeOptions & { admission: RlmChildAdmission },\n\t): Promise<RlmSubagentRuntime> {\n\t\toptions.admission.assertCurrent();\n\t\tconst parent = options.parentSession;\n\t\tconst parentSessionFile = parent.sessionFile;\n\t\tconst parentSessionId = parent.sessionId;\n\t\tconst parentAgent = parent.sessionName ?? parentSessionId;\n\t\tconst agentDir = this.services.agentDir;\n\t\tconst sessionManager = await SessionManager.create(parent.sessionManager.getCwd(), options.sessionDir, {\n\t\t\tparentSession: parentSessionFile,\n\t\t\trlmDepth: options.rlmDepth,\n\t\t});\n\t\tlet runtime: AgentSessionRuntime;\n\t\tlet factoryStarted = false;\n\t\ttry {\n\t\t\toptions.admission.assertCurrent();\n\t\t\tfactoryStarted = true;\n\t\t\truntime = await this.scopedBuild(() =>\n\t\t\t\tcreateAgentSessionRuntime(this.createRuntime, {\n\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\tagentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"startup\" },\n\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\tsessionOptions: {\n\t\t\t\t\t\t...(options.requestTokenBudget === undefined\n\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t: { requestTokenBudget: options.requestTokenBudget }),\n\t\t\t\t\t\tcontextMode: options.contextMode,\n\t\t\t\t\t\tmodel: options.model,\n\t\t\t\t\t\tthinkingLevel: options.thinkingLevel,\n\t\t\t\t\t\tserviceTier: options.serviceTier,\n\t\t\t\t\t\tscopedModels: options.scopedModels,\n\t\t\t\t\t\tinitialActiveToolNames: options.activeToolNames,\n\t\t\t\t\t\tallowedToolNames: options.allowedToolNames,\n\t\t\t\t\t\tcustomTools: options.customTools,\n\t\t\t\t\t\tincludeGoals: options.includeGoals,\n\t\t\t\t\t\tincludeCompactSkill: options.includeCompactSkill,\n\t\t\t\t\t\trlmDepth: options.rlmDepth,\n\t\t\t\t\t\trlmMaxDepth: options.rlmMaxDepth,\n\t\t\t\t\t\trlmSessionDir: options.sessionDir,\n\t\t\t\t\t\trlmParentNodeId: options.rlmParentNodeId,\n\t\t\t\t\t\trlmParentAgent: parentAgent,\n\t\t\t\t\t\trlmChildAdmission: options.admission,\n\t\t\t\t\t\tsemanticParentSessionId: parentSessionId,\n\t\t\t\t\t\tsemanticSpawnedByRequestId: options.spawnedByRequestId,\n\t\t\t\t\t},\n\t\t\t\t\truntimeMetadata: {\n\t\t\t\t\t\tkind: \"subagent\",\n\t\t\t\t\t\tcreatedAt: Date.now(),\n\t\t\t\t\t\tparentSessionId: parentSessionId,\n\t\t\t\t\t\tparentSessionFile: parentSessionFile,\n\t\t\t\t\t\trlmChildId: options.id,\n\t\t\t\t\t\trlmParentNodeId: options.rlmParentNodeId,\n\t\t\t\t\t\tprompt: options.prompt,\n\t\t\t\t\t\tspawnCode: options.spawnCode,\n\t\t\t\t\t\tsessionDir: options.sessionDir,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\ttry {\n\t\t\t\tawait sessionManager.close();\n\t\t\t\tif (!factoryStarted) options.admission.confirmUnboundCleanup();\n\t\t\t} catch (cleanupError) {\n\t\t\t\tif (cleanupError === error || (error instanceof AggregateError && error.errors.includes(cleanupError)))\n\t\t\t\t\tthrow error;\n\t\t\t\tthrow new AggregateError([error, cleanupError], \"RLM startup and cleanup failed\");\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\tthis.subagentRuntimes.set(options.id, runtime);\n\t\ttry {\n\t\t\tawait runtime.session.bindExtensions({});\n\t\t\tif (options.parentSession.getRlmChildRunStatus(options.id) === \"cancelled\") {\n\t\t\t\tthrow new Error(\"RLM subagent startup was cancelled\");\n\t\t\t}\n\t\t\tif (runtime.session.sessionName !== options.sessionName) {\n\t\t\t\tawait runtime.session.setSessionName(options.sessionName);\n\t\t\t}\n\t\t\tif (parent.getRlmChildRunStatus(options.id) === \"cancelled\") {\n\t\t\t\tthrow new Error(\"RLM subagent startup was cancelled\");\n\t\t\t}\n\t\t\toptions.admission.bind(runtime.session);\n\t\t\toptions.admission.assertCurrent();\n\t\t\toptions.onSessionPublished?.(runtime.session);\n\t\t} catch (error) {\n\t\t\tthis.subagentRuntimes.delete(options.id);\n\t\t\ttry {\n\t\t\t\tawait runtime.dispose();\n\t\t\t} catch (cleanupError) {\n\t\t\t\tif (cleanupError === error || (error instanceof AggregateError && error.errors.includes(cleanupError)))\n\t\t\t\t\tthrow error;\n\t\t\t\tthrow new AggregateError([error, cleanupError], \"RLM startup and cleanup failed\");\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\treturn runtime;\n\t}\n\n\tasync deleteRlmSubagentRuntime(childId: string, session: AgentSession): Promise<void> {\n\t\tconst runtime = this.subagentRuntimes.get(childId);\n\t\tif (!runtime) {\n\t\t\tawait session.disposeAsync();\n\t\t\treturn;\n\t\t}\n\t\tthis.subagentRuntimes.delete(childId);\n\t\tconst shouldDisposeStaleSession = runtime.session !== session;\n\t\ttry {\n\t\t\tawait runtime.dispose();\n\t\t} finally {\n\t\t\tif (shouldDisposeStaleSession) {\n\t\t\t\tawait session.disposeAsync();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async finishSessionReplacement(withSession?: (ctx: ReplacedSessionContext) => Promise<void>): Promise<void> {\n\t\tif (this.rebindSession) {\n\t\t\tawait this.rebindSession(this.session);\n\t\t}\n\t\tfor (const listener of this.sessionReplacedListeners) {\n\t\t\tawait listener(this.session);\n\t\t}\n\t\tif (withSession) {\n\t\t\tawait withSession(this.session.createReplacedSessionContext());\n\t\t}\n\t}\n\n\tprivate assertCanReplaceSession(): void {\n\t\tif (this.metadata.kind === \"subagent\" || this.session.hasRlmParentAdmission) {\n\t\t\tthrow new Error(\"Owned child-runtime replacement is unavailable; dispose or passivate the child instead\");\n\t\t}\n\t}\n\n\tasync switchSession(\n\t\tsessionPath: string,\n\t\toptions?: { cwdOverride?: string; withSession?: (ctx: ReplacedSessionContext) => Promise<void> },\n\t): Promise<{ cancelled: boolean }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst fallbackCwd = this.cwd;\n\t\tconst cwdOverride = options?.cwdOverride;\n\t\tconst withSession = options?.withSession;\n\t\tconst samePath =\n\t\t\tsource.sessionFile !== undefined &&\n\t\t\tcanonicalSessionPath(source.sessionFile) === canonicalSessionPath(sessionPath);\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", sessionPath);\n\t\tif (beforeResult.cancelled) return beforeResult;\n\t\tif (this.session !== source.session) throw new Error(\"Session changed before replacement\");\n\n\t\tif (samePath) {\n\t\t\tconst view = await SessionManager.openReadOnly(sessionPath, undefined, cwdOverride);\n\t\t\ttry {\n\t\t\t\tassertSessionCwdExists(view, fallbackCwd);\n\t\t\t} finally {\n\t\t\t\tawait view.close();\n\t\t\t}\n\t\t\tawait this.teardownCurrent(\"resume\", sessionPath);\n\t\t}\n\t\tconst sessionManager = await SessionManager.open(sessionPath, undefined, cwdOverride);\n\t\ttry {\n\t\t\tassertSessionCwdExists(sessionManager, fallbackCwd);\n\t\t} catch (error) {\n\t\t\tawait sessionManager.close();\n\t\t\tthrow error;\n\t\t}\n\t\tawait this.replaceWithManager(sessionManager, source, \"resume\", !samePath);\n\t\tawait this.finishSessionReplacement(withSession);\n\t\treturn { cancelled: false };\n\t}\n\n\tasync newSession(options?: {\n\t\tparentSession?: string;\n\t\tsetup?: (sessionManager: SessionManager) => Promise<void>;\n\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t}): Promise<{ cancelled: boolean }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst cwd = this.cwd;\n\t\tconst sessionDir = source.session.sessionManager.getSessionDir();\n\t\tconst headerOptions = options?.parentSession\n\t\t\t? {\n\t\t\t\t\tparentSession: options.parentSession,\n\t\t\t\t\trlmDepth: source.session.sessionManager.getHeader()?.rlmDepth ?? source.session.rlmDepth,\n\t\t\t\t}\n\t\t\t: undefined;\n\t\tconst setup = options?.setup;\n\t\tconst withSession = options?.withSession;\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"new\");\n\t\tif (beforeResult.cancelled) return beforeResult;\n\t\tconst sessionManager = await SessionManager.create(cwd, sessionDir, headerOptions);\n\t\tawait this.replaceWithManager(sessionManager, source, \"new\", true, setup);\n\t\tawait this.finishSessionReplacement(withSession);\n\t\treturn { cancelled: false };\n\t}\n\n\tasync fork(\n\t\tentryId: string,\n\t\toptions?: {\n\t\t\tposition?: \"before\" | \"at\";\n\t\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t\t},\n\t): Promise<{ cancelled: boolean; selectedText?: string }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst rlmDepth = source.session.rlmDepth;\n\t\tconst withSession = options?.withSession;\n\t\tconst position = options?.position ?? \"before\";\n\t\tconst runner = source.session.extensionRunner;\n\t\tconst preparation = Promise.allSettled([\n\t\t\tsource.session.sessionManager.prepareFork(entryId, { position, rlmDepth }),\n\t\t]);\n\t\tconst [beforeResult] = await Promise.allSettled([\n\t\t\tthis.emitBeforeFork(runner, entryId, { position }),\n\t\t\tpreparation,\n\t\t]);\n\t\t// Join the independent source read before handling hook failure or cancellation.\n\t\tif (beforeResult.status === \"rejected\") throw beforeResult.reason;\n\t\tif (beforeResult.value.cancelled) {\n\t\t\treturn { cancelled: true };\n\t\t}\n\t\tconst [preparedResult] = await preparation;\n\t\tif (preparedResult.status === \"rejected\") throw preparedResult.reason;\n\t\tconst prepared = preparedResult.value;\n\t\tif (this.session !== source.session) throw new Error(\"Session changed before replacement\");\n\n\t\tlet selectedText: string | undefined;\n\t\tif (position === \"before\") {\n\t\t\tconst selectedEntry = prepared.selectedEntry;\n\t\t\tif (selectedEntry.type !== \"message\" || selectedEntry.message.role !== \"user\") {\n\t\t\t\tthrow new Error(\"Invalid entry ID for forking\");\n\t\t\t}\n\t\t\tselectedText = extractUserMessageText(selectedEntry.message.content);\n\t\t}\n\n\t\tconst sessionManager = await prepared.create();\n\t\tawait this.replaceWithManager(sessionManager, source, \"fork\");\n\t\tawait this.finishSessionReplacement(withSession);\n\t\treturn { cancelled: false, selectedText };\n\t}\n\n\t/**\n\t * Import a session JSONL file and switch runtime state to the imported session.\n\t *\n\t * @returns `{ cancelled: true }` when cancelled by `session_before_switch`, otherwise `{ cancelled: false }`.\n\t * @throws {SessionImportFileNotFoundError} When the input path does not exist.\n\t * @throws {MissingSessionCwdError} When the imported session cwd cannot be resolved and no override is provided.\n\t */\n\tasync importFromJsonl(inputPath: string, cwdOverride?: string): Promise<{ cancelled: boolean }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst resolvedPath = resolve(inputPath);\n\t\tif (!existsSync(resolvedPath)) throw new SessionImportFileNotFoundError(resolvedPath);\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst sessionDir = source.session.sessionManager.getSessionDir();\n\t\tconst fallbackCwd = this.cwd;\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", resolvedPath);\n\t\tif (beforeResult.cancelled) return beforeResult;\n\n\t\tconst view = await SessionManager.openReadOnly(resolvedPath, undefined, cwdOverride);\n\t\tlet targetCwd: string;\n\t\ttry {\n\t\t\tassertSessionCwdExists(view, fallbackCwd);\n\t\t\ttargetCwd = view.getCwd();\n\t\t} finally {\n\t\t\tawait view.close();\n\t\t}\n\t\tconst sessionManager = await SessionManager.importRetainedFrom(resolvedPath, targetCwd, sessionDir);\n\t\tawait this.replaceWithManager(sessionManager, source, \"resume\");\n\t\tawait this.finishSessionReplacement();\n\t\treturn { cancelled: false };\n\t}\n\n\tprivate async disposeOnce(options: AgentSessionRuntimeDisposeOptions): Promise<void> {\n\t\tlet disposeError: unknown;\n\t\ttry {\n\t\t\tawait emitSessionShutdownEvent(this.session.extensionRunner, {\n\t\t\t\ttype: \"session_shutdown\",\n\t\t\t\treason: \"quit\",\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tthis.beforeSessionInvalidate?.();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\t// Await the kernel's final snapshot flush before tearing the session down.\n\t\t\tawait this.session.disposeAsync({ kernelSnapshot: options.kernelSnapshot ?? true });\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tawait this.disposeHostedSubagentRuntimes();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tif (disposeError) {\n\t\t\t\tthrow disposeError;\n\t\t\t}\n\t\t} finally {\n\t\t\tthis.releaseSessionLease();\n\t\t}\n\t}\n\n\tasync dispose(options?: AgentSessionRuntimeDisposeOptions): Promise<void> {\n\t\tif (!this.disposePromise) {\n\t\t\tthis.disposePromise = this.disposeOnce(options ?? {});\n\t\t}\n\t\tawait this.disposePromise;\n\t}\n}\n\nexport async function createAgentSessionRuntime(\n\tcreateRuntime: CreateAgentSessionRuntimeFactory,\n\toptions: {\n\t\tcwd: string;\n\t\tagentDir: string;\n\t\tsessionManager: SessionManager;\n\t\tsessionStartEvent?: SessionStartEvent;\n\t\tsessionConfig?: AgentSessionRuntimeConfig;\n\t\tsessionOptions?: AgentSessionCreationOptions;\n\t\truntimeMetadata?: AgentSessionRuntimeMetadata;\n\t\tsessionLease?: SessionLease;\n\t},\n): Promise<AgentSessionRuntime> {\n\tconst { sessionLease, ...runtimeOptions } = options;\n\tlet lease: SessionLease | undefined;\n\tlet result: CreateAgentSessionRuntimeResult | undefined;\n\ttry {\n\t\tlease =\n\t\t\tsessionLease ?? acquireSessionLease(runtimeOptions.sessionManager.getSessionFile(), runtimeOptions.agentDir);\n\t\tassertSessionCwdExists(runtimeOptions.sessionManager, runtimeOptions.cwd);\n\t\tresult = await createRuntime(runtimeOptions);\n\t\tawait result.session.initialize();\n\t\treturn new AgentSessionRuntime(\n\t\t\tresult.session,\n\t\t\tresult.services,\n\t\t\tcreateRuntime,\n\t\t\tresult.diagnostics,\n\t\t\tresult.modelFallbackMessage,\n\t\t\truntimeOptions.sessionConfig,\n\t\t\truntimeOptions.runtimeMetadata,\n\t\t\tlease,\n\t\t);\n\t} catch (error) {\n\t\tconst errors: unknown[] = error instanceof AggregateError ? [...error.errors] : [error];\n\t\tconst initialErrorCount = errors.length;\n\t\ttry {\n\t\t\tconst admitted = runtimeOptions.sessionOptions?.rlmChildAdmission?.session;\n\t\t\tconst failedSession =\n\t\t\t\tresult?.session ?? (admitted?.sessionManager === runtimeOptions.sessionManager ? admitted : undefined);\n\t\t\tif (failedSession) await failedSession.disposeAsync();\n\t\t\telse await runtimeOptions.sessionManager.close();\n\t\t} catch (cleanupError) {\n\t\t\tif (!errors.includes(cleanupError)) errors.push(cleanupError);\n\t\t}\n\t\ttry {\n\t\t\tlease?.release();\n\t\t} catch (cleanupError) {\n\t\t\tif (!errors.includes(cleanupError)) errors.push(cleanupError);\n\t\t}\n\t\tif (errors.length === initialErrorCount) throw error;\n\t\tthrow new AggregateError(errors, \"Runtime creation and cleanup failed\");\n\t}\n}\n\nexport {\n\ttype AgentSessionRuntimeDiagnostic,\n\ttype AgentSessionServices,\n\ttype CreateAgentSessionFromServicesOptions,\n\ttype CreateAgentSessionServicesOptions,\n\tcreateAgentSessionFromServices,\n\tcreateAgentSessionServices,\n} from \"./agent-session-services.js\";\n"]}
1
+ {"version":3,"file":"agent-session-runtime.js","sourceRoot":"","sources":["../../src/core/agent-session-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport type { AgentSession } from \"./agent-session.js\";\nimport type { AgentSessionRuntimeConfig } from \"./agent-session-config.js\";\nimport type {\n\tAgentSessionCreationOptions,\n\tAgentSessionRuntimeDiagnostic,\n\tAgentSessionServices,\n} from \"./agent-session-services.js\";\nimport { isNoModelsAvailableMessage } from \"./auth-guidance.js\";\nimport type { ReplacedSessionContext, SessionShutdownEvent, SessionStartEvent } from \"./extensions/index.js\";\nimport { emitSessionShutdownEvent } from \"./extensions/runner.js\";\nimport type {\n\tCreateRlmSubagentRuntimeOptions,\n\tRlmChildAdmission,\n\tRlmSubagentRuntime,\n\tSubagentRuntimeHost,\n} from \"./rlm-runtime.js\";\nimport type { CreateAgentSessionResult } from \"./sdk.js\";\nimport { assertSessionCwdExists } from \"./session-cwd.js\";\nimport { SessionImportFileNotFoundError } from \"./session-import-errors.js\";\nimport { acquireSessionLease, canonicalSessionPath, type SessionLease } from \"./session-lease.js\";\nimport { SessionManager } from \"./session-manager.js\";\n\nexport { SessionImportFileNotFoundError } from \"./session-import-errors.js\";\n\nexport interface CreateAgentSessionRuntimeResult extends CreateAgentSessionResult {\n\tservices: AgentSessionServices;\n\tdiagnostics: AgentSessionRuntimeDiagnostic[];\n}\n\nexport type CreateAgentSessionRuntimeFactory = (options: {\n\tcwd: string;\n\tagentDir: string;\n\tsessionManager: SessionManager;\n\tsessionStartEvent?: SessionStartEvent;\n\tsessionConfig?: AgentSessionRuntimeConfig;\n\tsessionOptions?: AgentSessionCreationOptions;\n}) => Promise<CreateAgentSessionRuntimeResult>;\n\nexport type AgentSessionRuntimeKind = \"top-level\" | \"subagent\";\n\nexport interface AgentSessionRuntimeMetadata {\n\tkind: AgentSessionRuntimeKind;\n\tcreatedAt: number;\n\tparentActiveSessionId?: string;\n\tparentSessionId?: string;\n\tparentSessionFile?: string;\n\trlmChildId?: string;\n\trlmParentNodeId?: string;\n\trehydratedCompleted?: boolean;\n\tprompt?: string;\n\tspawnCode?: string;\n\tsessionDir?: string;\n}\n\nfunction extractUserMessageText(content: string | Array<{ type: string; text?: string }>): string {\n\tif (typeof content === \"string\") {\n\t\treturn content;\n\t}\n\n\treturn content\n\t\t.filter((part): part is { type: \"text\"; text: string } => part.type === \"text\" && typeof part.text === \"string\")\n\t\t.map((part) => part.text)\n\t\t.join(\"\");\n}\n\nexport interface AgentSessionRuntimeDisposeOptions {\n\t/** Set false when the session's artifact dir is deleted right after disposal (default true). */\n\tkernelSnapshot?: boolean;\n}\n\nexport class AgentSessionRuntime implements SubagentRuntimeHost {\n\tprivate rebindSession?: (session: AgentSession) => Promise<void>;\n\tprivate readonly sessionReplacedListeners = new Set<(session: AgentSession) => void | Promise<void>>();\n\tprivate runtimeEnvScope?: <T>(fn: () => Promise<T>) => Promise<T>;\n\tprivate beforeSessionInvalidate?: () => void;\n\tprivate subagentRuntimeHost?: SubagentRuntimeHost;\n\tprivate subagentRuntimes = new Map<string, AgentSessionRuntime>();\n\tprivate disposePromise?: Promise<void>;\n\tprivate autoRefineAdmissionClosed = false;\n\n\tconstructor(\n\t\tprivate _session: AgentSession,\n\t\tprivate _services: AgentSessionServices,\n\t\tprivate readonly createRuntime: CreateAgentSessionRuntimeFactory,\n\t\tprivate _diagnostics: AgentSessionRuntimeDiagnostic[] = [],\n\t\tprivate _modelFallbackMessage?: string,\n\t\tprivate readonly sessionConfig?: AgentSessionRuntimeConfig,\n\t\tprivate readonly _metadata: AgentSessionRuntimeMetadata = {\n\t\t\tkind: \"top-level\",\n\t\t\tcreatedAt: Date.now(),\n\t\t},\n\t\tprivate _sessionLease?: SessionLease,\n\t) {\n\t\tthis.bindRuntimeHost();\n\t}\n\n\tget services(): AgentSessionServices {\n\t\treturn this._services;\n\t}\n\n\tget session(): AgentSession {\n\t\treturn this._session;\n\t}\n\n\tget requests() {\n\t\treturn this._session.requests;\n\t}\n\n\tget cwd(): string {\n\t\treturn this._services.cwd;\n\t}\n\n\tget diagnostics(): readonly AgentSessionRuntimeDiagnostic[] {\n\t\treturn this._diagnostics;\n\t}\n\n\tget modelFallbackMessage(): string | undefined {\n\t\t// The \"no models available\" warning describes session state, not a\n\t\t// startup event: once the session gains a model (set_model, /login,\n\t\t// onboarding), the stored snapshot is stale and must not reach clients.\n\t\tif (isNoModelsAvailableMessage(this._modelFallbackMessage) && this._session.model) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn this._modelFallbackMessage;\n\t}\n\n\tget metadata(): AgentSessionRuntimeMetadata {\n\t\treturn { ...this._metadata };\n\t}\n\n\tget runtimeConfig(): AgentSessionRuntimeConfig | undefined {\n\t\treturn this.sessionConfig ? { ...this.sessionConfig } : undefined;\n\t}\n\n\tsetRebindSession(rebindSession?: (session: AgentSession) => Promise<void>): void {\n\t\tthis.rebindSession = rebindSession;\n\t}\n\n\tonSessionReplaced(listener: (session: AgentSession) => void | Promise<void>): () => void {\n\t\tthis.sessionReplacedListeners.add(listener);\n\t\treturn () => this.sessionReplacedListeners.delete(listener);\n\t}\n\n\t/**\n\t * Host-installed scope wrapping every runtime rebuild (new/switch/fork/\n\t * import and subagent creation), during which extensions re-load. The\n\t * daemon uses it to apply the session's client env for load-time captures.\n\t */\n\tsetRuntimeEnvScope(scope?: <T>(fn: () => Promise<T>) => Promise<T>): void {\n\t\tthis.runtimeEnvScope = scope;\n\t}\n\n\tprivate scopedBuild<T>(fn: () => Promise<T>): Promise<T> {\n\t\treturn this.runtimeEnvScope ? this.runtimeEnvScope(fn) : fn();\n\t}\n\n\tsetSubagentRuntimeHost(host?: SubagentRuntimeHost): void {\n\t\tthis.subagentRuntimeHost = host;\n\t\tthis.bindRuntimeHost();\n\t}\n\n\t/**\n\t * Set a synchronous callback that runs after `session_shutdown` handlers finish\n\t * but before the current session is invalidated.\n\t *\n\t * This is for host-owned UI teardown that must not yield to the event loop,\n\t * such as detaching extension-provided TUI components before the old extension\n\t * context becomes stale.\n\t */\n\tsetBeforeSessionInvalidate(beforeSessionInvalidate?: () => void): void {\n\t\tthis.beforeSessionInvalidate = beforeSessionInvalidate;\n\t}\n\n\tprivate async emitBeforeSwitch(\n\t\treason: \"new\" | \"resume\",\n\t\ttargetSessionFile?: string,\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst runner = this.session.extensionRunner;\n\t\tif (!runner.hasHandlers(\"session_before_switch\")) {\n\t\t\treturn { cancelled: false };\n\t\t}\n\n\t\tconst result = await runner.emit({\n\t\t\ttype: \"session_before_switch\",\n\t\t\treason,\n\t\t\ttargetSessionFile,\n\t\t});\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate async emitBeforeFork(\n\t\trunner: AgentSession[\"extensionRunner\"],\n\t\tentryId: string,\n\t\toptions: { position: \"before\" | \"at\" },\n\t): Promise<{ cancelled: boolean }> {\n\t\tif (!runner.hasHandlers(\"session_before_fork\")) {\n\t\t\treturn { cancelled: false };\n\t\t}\n\n\t\tconst result = await runner.emit({\n\t\t\ttype: \"session_before_fork\",\n\t\t\tentryId,\n\t\t\t...options,\n\t\t});\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate async teardownCurrent(reason: SessionShutdownEvent[\"reason\"], targetSessionFile?: string): Promise<void> {\n\t\tawait emitSessionShutdownEvent(this.session.extensionRunner, {\n\t\t\ttype: \"session_shutdown\",\n\t\t\treason,\n\t\t\ttargetSessionFile,\n\t\t});\n\t\tthis.beforeSessionInvalidate?.();\n\t\t// Await the kernel's final snapshot flush before invalidating the session.\n\t\tawait this.session.disposeAsync();\n\t\tawait this.disposeHostedSubagentRuntimes();\n\t}\n\n\t/** Native EOF closes new opportunistic work, including a session replaced by an already accepted command. */\n\tcloseAutoRefineAdmission(): void {\n\t\tthis.autoRefineAdmissionClosed = true;\n\t\tthis._session.closeAutoRefineAdmission();\n\t}\n\n\tprivate bindRuntimeHost(): void {\n\t\tif (this.autoRefineAdmissionClosed) this._session.closeAutoRefineAdmission();\n\t\tthis._session.setSubagentRuntimeHost(this.subagentRuntimeHost ?? this);\n\t}\n\n\tprivate apply(result: CreateAgentSessionRuntimeResult): void {\n\t\tthis._session = result.session;\n\t\tthis._services = result.services;\n\t\tthis._diagnostics = result.diagnostics;\n\t\tthis._modelFallbackMessage = result.modelFallbackMessage;\n\t\tthis.bindRuntimeHost();\n\t}\n\n\tprivate acquireReplacementLease(sessionPath: string | undefined): SessionLease | undefined {\n\t\tif (sessionPath && this._sessionLease?.sessionPath === canonicalSessionPath(sessionPath)) {\n\t\t\treturn this._sessionLease;\n\t\t}\n\t\treturn acquireSessionLease(sessionPath, this.services.agentDir);\n\t}\n\n\tprivate releaseUncommittedLease(lease: SessionLease | undefined): void {\n\t\tif (lease !== this._sessionLease) {\n\t\t\tlease?.release();\n\t\t}\n\t}\n\n\tprivate releaseSessionLease(): void {\n\t\tthis._sessionLease?.release();\n\t\tthis._sessionLease = undefined;\n\t}\n\n\tprivate commitReplacementLease(lease: SessionLease | undefined): void {\n\t\tif (lease === this._sessionLease) {\n\t\t\treturn;\n\t\t}\n\t\tconst previous = this._sessionLease;\n\t\tthis._sessionLease = lease;\n\t\tprevious?.release();\n\t}\n\n\tprivate async replaceWithManager(\n\t\tsessionManager: SessionManager,\n\t\tsource: { session: AgentSession; sessionFile: string | undefined; agentDir: string },\n\t\treason: \"new\" | \"resume\" | \"fork\",\n\t\tteardown = true,\n\t\tsetup?: (manager: SessionManager) => Promise<void>,\n\t): Promise<void> {\n\t\tlet lease: SessionLease | undefined;\n\t\tlet result: CreateAgentSessionRuntimeResult | undefined;\n\t\ttry {\n\t\t\tif (this.session !== source.session) throw new Error(\"Session changed before replacement\");\n\t\t\tlease = this.acquireReplacementLease(sessionManager.getSessionFile());\n\t\t\tif (teardown) await this.teardownCurrent(reason, sessionManager.getSessionFile());\n\t\t\tresult = await this.scopedBuild(() =>\n\t\t\t\tthis.createRuntime({\n\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\tagentDir: source.agentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason, previousSessionFile: source.sessionFile },\n\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t}),\n\t\t\t);\n\t\t\tawait result.session.initialize();\n\t\t\tif (setup) {\n\t\t\t\tawait setup(sessionManager);\n\t\t\t\tawait sessionManager.flushNow();\n\t\t\t\tresult.session.agent.state.messages = (await result.session.buildSessionContext()).messages;\n\t\t\t}\n\t\t\tif (this.session !== source.session) throw new Error(\"Session changed during replacement\");\n\t\t\tthis.apply(result);\n\t\t\tthis.commitReplacementLease(lease);\n\t\t} catch (error) {\n\t\t\ttry {\n\t\t\t\tif (result) await result.session.disposeAsync();\n\t\t\t\telse await sessionManager.close();\n\t\t\t} finally {\n\t\t\t\tthis.releaseUncommittedLease(lease);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async disposeSubagentRuntimes(): Promise<void> {\n\t\tconst runtimes = [...this.subagentRuntimes.values()];\n\t\tthis.subagentRuntimes.clear();\n\t\tlet disposeError: unknown;\n\t\tfor (const runtime of runtimes) {\n\t\t\ttry {\n\t\t\t\tawait runtime.dispose();\n\t\t\t} catch (error) {\n\t\t\t\tdisposeError ??= error;\n\t\t\t}\n\t\t}\n\t\tif (disposeError) {\n\t\t\tthrow disposeError;\n\t\t}\n\t}\n\n\tprivate async disposeHostedSubagentRuntimes(): Promise<void> {\n\t\tlet disposeError: unknown;\n\t\ttry {\n\t\t\tawait this.subagentRuntimeHost?.disposeRlmSubagentRuntimes?.();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tawait this.disposeSubagentRuntimes();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\tif (disposeError) {\n\t\t\tthrow disposeError;\n\t\t}\n\t}\n\n\tlistSubagentRuntimes(): readonly AgentSessionRuntime[] {\n\t\treturn [...this.subagentRuntimes.values()];\n\t}\n\n\tasync createRlmSubagentRuntime(options: CreateRlmSubagentRuntimeOptions): Promise<RlmSubagentRuntime> {\n\t\toptions = { ...options, contextMode: options.contextMode ?? options.parentSession.contextMode };\n\t\tconst requestTokenBudget =\n\t\t\toptions.requestTokenBudget === undefined\n\t\t\t\t? options.parentSession.requests.getRequestTokenBudgetOptions()\n\t\t\t\t: structuredClone(options.requestTokenBudget);\n\t\tif (requestTokenBudget !== undefined) options = { ...options, requestTokenBudget };\n\t\tconst admission = options.admission ?? (await options.parentSession.reserveRlmChildAdmission());\n\t\ttry {\n\t\t\tif (admission.parent !== options.parentSession)\n\t\t\t\tthrow new Error(\"RLM child admission belongs to another parent\");\n\t\t\tadmission.assertCurrent();\n\t\t\tadmission.claimFactory();\n\t\t\treturn await this.createAdmittedRlmSubagentRuntime({ ...options, admission });\n\t\t} finally {\n\t\t\tif (!options.admission) await admission.settle();\n\t\t}\n\t}\n\n\tprivate async createAdmittedRlmSubagentRuntime(\n\t\toptions: CreateRlmSubagentRuntimeOptions & { admission: RlmChildAdmission },\n\t): Promise<RlmSubagentRuntime> {\n\t\toptions.admission.assertCurrent();\n\t\tconst parent = options.parentSession;\n\t\tconst parentSessionFile = parent.sessionFile;\n\t\tconst parentSessionId = parent.sessionId;\n\t\tconst parentAgent = parent.sessionName ?? parentSessionId;\n\t\tconst agentDir = this.services.agentDir;\n\t\tconst sessionManager = await SessionManager.create(parent.sessionManager.getCwd(), options.sessionDir, {\n\t\t\tparentSession: parentSessionFile,\n\t\t\trlmDepth: options.rlmDepth,\n\t\t});\n\t\tlet runtime: AgentSessionRuntime;\n\t\tlet factoryStarted = false;\n\t\ttry {\n\t\t\toptions.admission.assertCurrent();\n\t\t\tfactoryStarted = true;\n\t\t\truntime = await this.scopedBuild(() =>\n\t\t\t\tcreateAgentSessionRuntime(this.createRuntime, {\n\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\tagentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"startup\" },\n\t\t\t\t\tsessionConfig: this.sessionConfig,\n\t\t\t\t\tsessionOptions: {\n\t\t\t\t\t\t...(options.requestTokenBudget === undefined\n\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t: { requestTokenBudget: options.requestTokenBudget }),\n\t\t\t\t\t\tcontextMode: options.contextMode,\n\t\t\t\t\t\tmodel: options.model,\n\t\t\t\t\t\tthinkingLevel: options.thinkingLevel,\n\t\t\t\t\t\tserviceTier: options.serviceTier,\n\t\t\t\t\t\tscopedModels: options.scopedModels,\n\t\t\t\t\t\tinitialActiveToolNames: options.activeToolNames,\n\t\t\t\t\t\tallowedToolNames: options.allowedToolNames,\n\t\t\t\t\t\tcustomTools: options.customTools,\n\t\t\t\t\t\tincludeGoals: options.includeGoals,\n\t\t\t\t\t\tincludeCompactSkill: options.includeCompactSkill,\n\t\t\t\t\t\trlmDepth: options.rlmDepth,\n\t\t\t\t\t\trlmMaxDepth: options.rlmMaxDepth,\n\t\t\t\t\t\trlmSessionDir: options.sessionDir,\n\t\t\t\t\t\trlmParentNodeId: options.rlmParentNodeId,\n\t\t\t\t\t\trlmParentAgent: parentAgent,\n\t\t\t\t\t\trlmChildAdmission: options.admission,\n\t\t\t\t\t\tsemanticParentSessionId: parentSessionId,\n\t\t\t\t\t\tsemanticSpawnedByRequestId: options.spawnedByRequestId,\n\t\t\t\t\t},\n\t\t\t\t\truntimeMetadata: {\n\t\t\t\t\t\tkind: \"subagent\",\n\t\t\t\t\t\tcreatedAt: Date.now(),\n\t\t\t\t\t\tparentSessionId: parentSessionId,\n\t\t\t\t\t\tparentSessionFile: parentSessionFile,\n\t\t\t\t\t\trlmChildId: options.id,\n\t\t\t\t\t\trlmParentNodeId: options.rlmParentNodeId,\n\t\t\t\t\t\tprompt: options.prompt,\n\t\t\t\t\t\tspawnCode: options.spawnCode,\n\t\t\t\t\t\tsessionDir: options.sessionDir,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\ttry {\n\t\t\t\tawait sessionManager.close();\n\t\t\t\tif (!factoryStarted) await options.admission.confirmUnboundCleanup();\n\t\t\t} catch (cleanupError) {\n\t\t\t\tif (cleanupError === error || (error instanceof AggregateError && error.errors.includes(cleanupError)))\n\t\t\t\t\tthrow error;\n\t\t\t\tthrow new AggregateError([error, cleanupError], \"RLM startup and cleanup failed\");\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\tthis.subagentRuntimes.set(options.id, runtime);\n\t\ttry {\n\t\t\tawait runtime.session.bindExtensions({});\n\t\t\tif (options.parentSession.getRlmChildRunStatus(options.id) === \"cancelled\") {\n\t\t\t\tthrow new Error(\"RLM subagent startup was cancelled\");\n\t\t\t}\n\t\t\tif (runtime.session.sessionName !== options.sessionName) {\n\t\t\t\tawait runtime.session.setSessionName(options.sessionName);\n\t\t\t}\n\t\t\tif (parent.getRlmChildRunStatus(options.id) === \"cancelled\") {\n\t\t\t\tthrow new Error(\"RLM subagent startup was cancelled\");\n\t\t\t}\n\t\t\toptions.admission.bind(runtime.session);\n\t\t\toptions.admission.assertCurrent();\n\t\t\toptions.onSessionPublished?.(runtime.session);\n\t\t} catch (error) {\n\t\t\tthis.subagentRuntimes.delete(options.id);\n\t\t\ttry {\n\t\t\t\tawait runtime.dispose();\n\t\t\t} catch (cleanupError) {\n\t\t\t\tif (cleanupError === error || (error instanceof AggregateError && error.errors.includes(cleanupError)))\n\t\t\t\t\tthrow error;\n\t\t\t\tthrow new AggregateError([error, cleanupError], \"RLM startup and cleanup failed\");\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\treturn runtime;\n\t}\n\n\tasync deleteRlmSubagentRuntime(childId: string, session: AgentSession): Promise<void> {\n\t\tconst runtime = this.subagentRuntimes.get(childId);\n\t\tif (!runtime) {\n\t\t\tawait session.disposeAsync();\n\t\t\treturn;\n\t\t}\n\t\tthis.subagentRuntimes.delete(childId);\n\t\tconst shouldDisposeStaleSession = runtime.session !== session;\n\t\ttry {\n\t\t\tawait runtime.dispose();\n\t\t} finally {\n\t\t\tif (shouldDisposeStaleSession) {\n\t\t\t\tawait session.disposeAsync();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async finishSessionReplacement(withSession?: (ctx: ReplacedSessionContext) => Promise<void>): Promise<void> {\n\t\tif (this.rebindSession) {\n\t\t\tawait this.rebindSession(this.session);\n\t\t}\n\t\tfor (const listener of this.sessionReplacedListeners) {\n\t\t\tawait listener(this.session);\n\t\t}\n\t\tif (withSession) {\n\t\t\tawait withSession(this.session.createReplacedSessionContext());\n\t\t}\n\t}\n\n\tprivate assertCanReplaceSession(): void {\n\t\tif (this.metadata.kind === \"subagent\" || this.session.hasRlmParentAdmission) {\n\t\t\tthrow new Error(\"Owned child-runtime replacement is unavailable; dispose or passivate the child instead\");\n\t\t}\n\t}\n\n\tasync switchSession(\n\t\tsessionPath: string,\n\t\toptions?: { cwdOverride?: string; withSession?: (ctx: ReplacedSessionContext) => Promise<void> },\n\t): Promise<{ cancelled: boolean }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst fallbackCwd = this.cwd;\n\t\tconst cwdOverride = options?.cwdOverride;\n\t\tconst withSession = options?.withSession;\n\t\tconst samePath =\n\t\t\tsource.sessionFile !== undefined &&\n\t\t\tcanonicalSessionPath(source.sessionFile) === canonicalSessionPath(sessionPath);\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", sessionPath);\n\t\tif (beforeResult.cancelled) return beforeResult;\n\t\tif (this.session !== source.session) throw new Error(\"Session changed before replacement\");\n\n\t\tif (samePath) {\n\t\t\tconst view = await SessionManager.openReadOnly(sessionPath, undefined, cwdOverride);\n\t\t\ttry {\n\t\t\t\tassertSessionCwdExists(view, fallbackCwd);\n\t\t\t} finally {\n\t\t\t\tawait view.close();\n\t\t\t}\n\t\t\tawait this.teardownCurrent(\"resume\", sessionPath);\n\t\t}\n\t\tconst sessionManager = await SessionManager.open(sessionPath, undefined, cwdOverride);\n\t\ttry {\n\t\t\tassertSessionCwdExists(sessionManager, fallbackCwd);\n\t\t} catch (error) {\n\t\t\tawait sessionManager.close();\n\t\t\tthrow error;\n\t\t}\n\t\tawait this.replaceWithManager(sessionManager, source, \"resume\", !samePath);\n\t\tawait this.finishSessionReplacement(withSession);\n\t\treturn { cancelled: false };\n\t}\n\n\tasync newSession(options?: {\n\t\tparentSession?: string;\n\t\tsetup?: (sessionManager: SessionManager) => Promise<void>;\n\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t}): Promise<{ cancelled: boolean }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst cwd = this.cwd;\n\t\tconst sessionDir = source.session.sessionManager.getSessionDir();\n\t\tconst headerOptions = options?.parentSession\n\t\t\t? {\n\t\t\t\t\tparentSession: options.parentSession,\n\t\t\t\t\trlmDepth: source.session.sessionManager.getHeader()?.rlmDepth ?? source.session.rlmDepth,\n\t\t\t\t}\n\t\t\t: undefined;\n\t\tconst setup = options?.setup;\n\t\tconst withSession = options?.withSession;\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"new\");\n\t\tif (beforeResult.cancelled) return beforeResult;\n\t\tconst sessionManager = await SessionManager.create(cwd, sessionDir, headerOptions);\n\t\tawait this.replaceWithManager(sessionManager, source, \"new\", true, setup);\n\t\tawait this.finishSessionReplacement(withSession);\n\t\treturn { cancelled: false };\n\t}\n\n\tasync fork(\n\t\tentryId: string,\n\t\toptions?: {\n\t\t\tposition?: \"before\" | \"at\";\n\t\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t\t},\n\t): Promise<{ cancelled: boolean; selectedText?: string }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst rlmDepth = source.session.rlmDepth;\n\t\tconst withSession = options?.withSession;\n\t\tconst position = options?.position ?? \"before\";\n\t\tconst runner = source.session.extensionRunner;\n\t\tconst preparation = Promise.allSettled([\n\t\t\tsource.session.sessionManager.prepareFork(entryId, { position, rlmDepth }),\n\t\t]);\n\t\tconst [beforeResult] = await Promise.allSettled([\n\t\t\tthis.emitBeforeFork(runner, entryId, { position }),\n\t\t\tpreparation,\n\t\t]);\n\t\t// Join the independent source read before handling hook failure or cancellation.\n\t\tif (beforeResult.status === \"rejected\") throw beforeResult.reason;\n\t\tif (beforeResult.value.cancelled) {\n\t\t\treturn { cancelled: true };\n\t\t}\n\t\tconst [preparedResult] = await preparation;\n\t\tif (preparedResult.status === \"rejected\") throw preparedResult.reason;\n\t\tconst prepared = preparedResult.value;\n\t\tif (this.session !== source.session) throw new Error(\"Session changed before replacement\");\n\n\t\tlet selectedText: string | undefined;\n\t\tif (position === \"before\") {\n\t\t\tconst selectedEntry = prepared.selectedEntry;\n\t\t\tif (selectedEntry.type !== \"message\" || selectedEntry.message.role !== \"user\") {\n\t\t\t\tthrow new Error(\"Invalid entry ID for forking\");\n\t\t\t}\n\t\t\tselectedText = extractUserMessageText(selectedEntry.message.content);\n\t\t}\n\n\t\tconst sessionManager = await prepared.create();\n\t\tawait this.replaceWithManager(sessionManager, source, \"fork\");\n\t\tawait this.finishSessionReplacement(withSession);\n\t\treturn { cancelled: false, selectedText };\n\t}\n\n\t/**\n\t * Import a session JSONL file and switch runtime state to the imported session.\n\t *\n\t * @returns `{ cancelled: true }` when cancelled by `session_before_switch`, otherwise `{ cancelled: false }`.\n\t * @throws {SessionImportFileNotFoundError} When the input path does not exist.\n\t * @throws {MissingSessionCwdError} When the imported session cwd cannot be resolved and no override is provided.\n\t */\n\tasync importFromJsonl(inputPath: string, cwdOverride?: string): Promise<{ cancelled: boolean }> {\n\t\tthis.assertCanReplaceSession();\n\t\tconst resolvedPath = resolve(inputPath);\n\t\tif (!existsSync(resolvedPath)) throw new SessionImportFileNotFoundError(resolvedPath);\n\t\tconst source = { session: this.session, sessionFile: this.session.sessionFile, agentDir: this.services.agentDir };\n\t\tconst sessionDir = source.session.sessionManager.getSessionDir();\n\t\tconst fallbackCwd = this.cwd;\n\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", resolvedPath);\n\t\tif (beforeResult.cancelled) return beforeResult;\n\n\t\tconst view = await SessionManager.openReadOnly(resolvedPath, undefined, cwdOverride);\n\t\tlet targetCwd: string;\n\t\ttry {\n\t\t\tassertSessionCwdExists(view, fallbackCwd);\n\t\t\ttargetCwd = view.getCwd();\n\t\t} finally {\n\t\t\tawait view.close();\n\t\t}\n\t\tconst sessionManager = await SessionManager.importRetainedFrom(resolvedPath, targetCwd, sessionDir);\n\t\tawait this.replaceWithManager(sessionManager, source, \"resume\");\n\t\tawait this.finishSessionReplacement();\n\t\treturn { cancelled: false };\n\t}\n\n\tprivate async disposeOnce(options: AgentSessionRuntimeDisposeOptions): Promise<void> {\n\t\tlet disposeError: unknown;\n\t\ttry {\n\t\t\tawait emitSessionShutdownEvent(this.session.extensionRunner, {\n\t\t\t\ttype: \"session_shutdown\",\n\t\t\t\treason: \"quit\",\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tthis.beforeSessionInvalidate?.();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\t// Await the kernel's final snapshot flush before tearing the session down.\n\t\t\tawait this.session.disposeAsync({ kernelSnapshot: options.kernelSnapshot ?? true });\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tawait this.disposeHostedSubagentRuntimes();\n\t\t} catch (error) {\n\t\t\tdisposeError ??= error;\n\t\t}\n\t\ttry {\n\t\t\tif (disposeError) {\n\t\t\t\tthrow disposeError;\n\t\t\t}\n\t\t} finally {\n\t\t\tthis.releaseSessionLease();\n\t\t}\n\t}\n\n\tasync dispose(options?: AgentSessionRuntimeDisposeOptions): Promise<void> {\n\t\tif (!this.disposePromise) {\n\t\t\tthis.disposePromise = this.disposeOnce(options ?? {});\n\t\t}\n\t\tawait this.disposePromise;\n\t}\n}\n\nexport async function createAgentSessionRuntime(\n\tcreateRuntime: CreateAgentSessionRuntimeFactory,\n\toptions: {\n\t\tcwd: string;\n\t\tagentDir: string;\n\t\tsessionManager: SessionManager;\n\t\tsessionStartEvent?: SessionStartEvent;\n\t\tsessionConfig?: AgentSessionRuntimeConfig;\n\t\tsessionOptions?: AgentSessionCreationOptions;\n\t\truntimeMetadata?: AgentSessionRuntimeMetadata;\n\t\tsessionLease?: SessionLease;\n\t},\n): Promise<AgentSessionRuntime> {\n\tconst { sessionLease, ...runtimeOptions } = options;\n\tlet lease: SessionLease | undefined;\n\tlet result: CreateAgentSessionRuntimeResult | undefined;\n\ttry {\n\t\tlease =\n\t\t\tsessionLease ?? acquireSessionLease(runtimeOptions.sessionManager.getSessionFile(), runtimeOptions.agentDir);\n\t\tassertSessionCwdExists(runtimeOptions.sessionManager, runtimeOptions.cwd);\n\t\tresult = await createRuntime(runtimeOptions);\n\t\tawait result.session.initialize();\n\t\treturn new AgentSessionRuntime(\n\t\t\tresult.session,\n\t\t\tresult.services,\n\t\t\tcreateRuntime,\n\t\t\tresult.diagnostics,\n\t\t\tresult.modelFallbackMessage,\n\t\t\truntimeOptions.sessionConfig,\n\t\t\truntimeOptions.runtimeMetadata,\n\t\t\tlease,\n\t\t);\n\t} catch (error) {\n\t\tconst errors: unknown[] = error instanceof AggregateError ? [...error.errors] : [error];\n\t\tconst initialErrorCount = errors.length;\n\t\ttry {\n\t\t\tconst admitted =\n\t\t\t\truntimeOptions.sessionOptions?.rlmChildAdmission?.session ??\n\t\t\t\truntimeOptions.sessionOptions?.rlmRootAdmission?.session;\n\t\t\tconst failedSession =\n\t\t\t\tresult?.session ?? (admitted?.sessionManager === runtimeOptions.sessionManager ? admitted : undefined);\n\t\t\tif (failedSession) await failedSession.disposeAsync();\n\t\t\telse await runtimeOptions.sessionManager.close();\n\t\t} catch (cleanupError) {\n\t\t\tif (!errors.includes(cleanupError)) errors.push(cleanupError);\n\t\t}\n\t\ttry {\n\t\t\tlease?.release();\n\t\t} catch (cleanupError) {\n\t\t\tif (!errors.includes(cleanupError)) errors.push(cleanupError);\n\t\t}\n\t\tif (errors.length === initialErrorCount) throw error;\n\t\tthrow new AggregateError(errors, \"Runtime creation and cleanup failed\");\n\t}\n}\n\nexport {\n\ttype AgentSessionRuntimeDiagnostic,\n\ttype AgentSessionServices,\n\ttype CreateAgentSessionFromServicesOptions,\n\ttype CreateAgentSessionServicesOptions,\n\tcreateAgentSessionFromServices,\n\tcreateAgentSessionServices,\n} from \"./agent-session-services.js\";\n"]}
@@ -10,6 +10,7 @@ import type { SessionStartEvent, ToolDefinition } from "./extensions/index.js";
10
10
  import { McpManager } from "./mcp/mcp-manager.js";
11
11
  import { ModelRegistry } from "./model-registry.js";
12
12
  import { type DefaultResourceLoaderOptions, type ResourceLoader } from "./resource-loader.js";
13
+ import type { RlmRootAdmission, RlmSubagentCapacity } from "./rlm-max-subagents.js";
13
14
  import type { RlmChildAdmission, SubagentRuntimeHost } from "./rlm-runtime.js";
14
15
  import { type CreateAgentSessionResult } from "./sdk.js";
15
16
  import type { SessionManager } from "./session-manager.js";
@@ -33,13 +34,13 @@ export interface CreateAgentSessionServicesOptions {
33
34
  * would release the pane while the parent is still running.
34
35
  */
35
36
  noBuiltinHerdrReporter?: boolean;
36
- telemetryDisabled?: true;
37
37
  }
38
38
  export interface AgentSessionCreationOptions {
39
39
  /** Explicit native request-budget rollout; also forwarded by the services/runtime factory. */
40
40
  requestTokenBudget?: RequestTokenBudgetOptions;
41
41
  contextMode?: "on" | "off";
42
- model?: Model<any>;
42
+ /** Undefined restores a saved explicit choice; null creates a session without a selected model. */
43
+ model?: Model<any> | null;
43
44
  thinkingLevel?: ThinkingLevel;
44
45
  serviceTier?: ServiceTier;
45
46
  scopedModels?: Array<{
@@ -62,6 +63,8 @@ export interface AgentSessionCreationOptions {
62
63
  rlmParentAgent?: string;
63
64
  /** Live parent-owned setup admission; never restored from session metadata. */
64
65
  rlmChildAdmission?: RlmChildAdmission;
66
+ rlmSubagentCapacity?: RlmSubagentCapacity;
67
+ rlmRootAdmission?: RlmRootAdmission;
65
68
  semanticParentSessionId?: string;
66
69
  semanticSpawnedByRequestId?: string;
67
70
  subagentRuntimeHost?: SubagentRuntimeHost;
@@ -70,7 +73,6 @@ export interface AgentSessionCreationOptions {
70
73
  autonomous?: AgentAutonomousConfig;
71
74
  serializedRefine?: boolean;
72
75
  executionMode?: AgentExecutionMode;
73
- telemetryDisabled?: true;
74
76
  initialGoal?: {
75
77
  objective: string;
76
78
  tokenBudget?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-services.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-services.ts"],"names":[],"mappings":"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","sourcesContent":["import { join } from \"node:path\";\nimport type { ThinkingLevel } from \"@ponythewhite/base-context-agent\";\nimport type { Model, RequestTokenBudgetOptions, ServiceTier } from \"@ponythewhite/base-context-ai\";\nimport { getAgentDir } from \"../config.js\";\nimport type { AgentSessionMessageController } from \"./agent-messages.js\";\nimport type { AgentObserveController } from \"./agent-observe.js\";\nimport type { AgentExecutionMode } from \"./agent-session-config.js\";\nimport { installAgentTraceUpload } from \"./agent-traces.js\";\nimport { AuthStorage } from \"./auth-storage.js\";\nimport type { AgentAutonomousConfig } from \"./autonomous.js\";\nimport type { AgentRlmHeartbeatController } from \"./cron-jobs.js\";\nimport { createHerdrAgentStateExtension } from \"./extensions/builtin/herdr-agent-state.js\";\nimport type { SessionStartEvent, ToolDefinition } from \"./extensions/index.js\";\nimport { McpManager } from \"./mcp/mcp-manager.js\";\nimport { ModelRegistry } from \"./model-registry.js\";\nimport { DefaultResourceLoader, type DefaultResourceLoaderOptions, type ResourceLoader } from \"./resource-loader.js\";\nimport type { RlmChildAdmission, SubagentRuntimeHost } from \"./rlm-runtime.js\";\nimport { type CreateAgentSessionResult, createAgentSession } from \"./sdk.js\";\nimport { semanticEdgeLedgerPath } from \"./semantic-edges.js\";\nimport type { SessionManager } from \"./session-manager.js\";\nimport { SettingsManager } from \"./settings-manager.js\";\nimport { installAgentTelemetry, isTelemetryEnabled } from \"./telemetry.js\";\n\nexport interface AgentSessionRuntimeDiagnostic {\n\ttype: \"info\" | \"warning\" | \"error\";\n\tmessage: string;\n}\n\nexport interface CreateAgentSessionServicesOptions {\n\tcwd: string;\n\tagentDir?: string;\n\tauthStorage?: AuthStorage;\n\tsettingsManager?: SettingsManager;\n\tmodelRegistry?: ModelRegistry;\n\textensionFlagValues?: Map<string, boolean | string>;\n\tresourceLoaderOptions?: Omit<DefaultResourceLoaderOptions, \"cwd\" | \"agentDir\" | \"settingsManager\">;\n\t/**\n\t * Skip the built-in Herdr reporter for these services. Set for RLM subagent\n\t * runtimes: they inherit the parent's HERDR_* pane identity, so their own\n\t * reporter would race the parent's on the same pane and a subagent quit\n\t * would release the pane while the parent is still running.\n\t */\n\tnoBuiltinHerdrReporter?: boolean;\n\ttelemetryDisabled?: true;\n}\n\nexport interface AgentSessionCreationOptions {\n\t/** Explicit native request-budget rollout; also forwarded by the services/runtime factory. */\n\trequestTokenBudget?: RequestTokenBudgetOptions;\n\tcontextMode?: \"on\" | \"off\";\n\tmodel?: Model<any>;\n\tthinkingLevel?: ThinkingLevel;\n\tserviceTier?: ServiceTier;\n\tscopedModels?: Array<{ model: Model<any>; thinkingLevel?: ThinkingLevel }>;\n\ttools?: string[];\n\tnoTools?: \"all\" | \"builtin\";\n\tcustomTools?: ToolDefinition[];\n\tinitialActiveToolNames?: string[];\n\tallowedToolNames?: string[];\n\tincludeGoals?: boolean;\n\tincludeCompactSkill?: boolean;\n\tagentMessageController?: AgentSessionMessageController;\n\tagentObserveController?: AgentObserveController;\n\trlmDepth?: number;\n\trlmMaxDepth?: number;\n\trlmSessionDir?: string;\n\trlmParentNodeId?: string;\n\trlmParentAgent?: string;\n\t/** Live parent-owned setup admission; never restored from session metadata. */\n\trlmChildAdmission?: RlmChildAdmission;\n\tsemanticParentSessionId?: string;\n\tsemanticSpawnedByRequestId?: string;\n\tsubagentRuntimeHost?: SubagentRuntimeHost;\n\trlmHeartbeatController?: AgentRlmHeartbeatController;\n\tprewarmIpythonKernel?: boolean;\n\tautonomous?: AgentAutonomousConfig;\n\tserializedRefine?: boolean;\n\texecutionMode?: AgentExecutionMode;\n\ttelemetryDisabled?: true;\n\tinitialGoal?: { objective: string; tokenBudget?: number };\n}\n\nexport interface CreateAgentSessionFromServicesOptions extends AgentSessionCreationOptions {\n\tservices: AgentSessionServices;\n\tsessionManager: SessionManager;\n\tsessionStartEvent?: SessionStartEvent;\n}\n\nexport interface AgentSessionServices {\n\tcwd: string;\n\tagentDir: string;\n\tauthStorage: AuthStorage;\n\tsettingsManager: SettingsManager;\n\tmodelRegistry: ModelRegistry;\n\tresourceLoader: ResourceLoader;\n\tmcpManager: McpManager;\n\tdiagnostics: AgentSessionRuntimeDiagnostic[];\n}\n\nfunction applyExtensionFlagValues(\n\tresourceLoader: ResourceLoader,\n\textensionFlagValues: Map<string, boolean | string> | undefined,\n): AgentSessionRuntimeDiagnostic[] {\n\tif (!extensionFlagValues) {\n\t\treturn [];\n\t}\n\n\tconst diagnostics: AgentSessionRuntimeDiagnostic[] = [];\n\tconst extensionsResult = resourceLoader.getExtensions();\n\tconst registeredFlags = new Map<string, { type: \"boolean\" | \"string\" }>();\n\tfor (const extension of extensionsResult.extensions) {\n\t\tfor (const [name, flag] of extension.flags) {\n\t\t\tregisteredFlags.set(name, { type: flag.type });\n\t\t}\n\t}\n\n\tconst unknownFlags: string[] = [];\n\tfor (const [name, value] of extensionFlagValues) {\n\t\tconst flag = registeredFlags.get(name);\n\t\tif (!flag) {\n\t\t\tunknownFlags.push(name);\n\t\t\tcontinue;\n\t\t}\n\t\tif (flag.type === \"boolean\") {\n\t\t\textensionsResult.runtime.flagValues.set(name, true);\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\textensionsResult.runtime.flagValues.set(name, value);\n\t\t\tcontinue;\n\t\t}\n\t\tdiagnostics.push({\n\t\t\ttype: \"error\",\n\t\t\tmessage: `Extension flag \"--${name}\" requires a value`,\n\t\t});\n\t}\n\n\tif (unknownFlags.length > 0) {\n\t\tdiagnostics.push({\n\t\t\ttype: \"error\",\n\t\t\tmessage: `Unknown option${unknownFlags.length === 1 ? \"\" : \"s\"}: ${unknownFlags.map((name) => `--${name}`).join(\", \")}`,\n\t\t});\n\t}\n\n\treturn diagnostics;\n}\n\nexport async function createAgentSessionServices(\n\toptions: CreateAgentSessionServicesOptions,\n): Promise<AgentSessionServices> {\n\tconst cwd = options.cwd;\n\tconst agentDir = options.agentDir ?? getAgentDir();\n\tconst authStorage = options.authStorage ?? AuthStorage.create(join(agentDir, \"auth.json\"));\n\tconst settingsManager = options.settingsManager ?? SettingsManager.create(cwd, agentDir);\n\tconst modelRegistry = options.modelRegistry ?? ModelRegistry.create(authStorage, join(agentDir, \"models.json\"));\n\n\t// MCP integrations: registers OAuth providers and gates the built-in\n\t// integration skills by whether the user is logged in (enable-by-login).\n\tconst mcpManager = new McpManager({\n\t\tauthStorage,\n\t\tgetUserServers: () => settingsManager.getGlobalMcpServers(),\n\t});\n\t// refresh() resets the OAuth registry to built-ins; re-add user MCP providers too.\n\tmodelRegistry.setOnOAuthProvidersReset(() => mcpManager.registerUserProviders());\n\n\tconst userExtensionFactories = options.resourceLoaderOptions?.extensionFactories ?? [];\n\t// The built-in Herdr reporter defers to Herdr's own file-based integration\n\t// when the loader actually loaded it; two reporters would race on the same\n\t// pane. Deferral is late-bound to the loader's loaded paths (inline\n\t// factories run after file extensions load), so a file that exists but is\n\t// disabled or never discovered does not silence the built-in.\n\t// noExtensions is a full opt-out: it disables the built-in reporter too,\n\t// not just discovered extension files.\n\tconst skipHerdrReporter = options.noBuiltinHerdrReporter || options.resourceLoaderOptions?.noExtensions;\n\tconst builtinExtensionFactories = skipHerdrReporter\n\t\t? []\n\t\t: [createHerdrAgentStateExtension(() => resourceLoader.getLoadedExtensionPaths())];\n\tconst resourceLoader: DefaultResourceLoader = new DefaultResourceLoader({\n\t\t...(options.resourceLoaderOptions ?? {}),\n\t\textensionFactories: [...builtinExtensionFactories, ...userExtensionFactories],\n\t\tcwd,\n\t\tagentDir,\n\t\tsettingsManager,\n\t\textraBuiltinSkillOverrides: () => mcpManager.getDisabledBuiltinSkillOverrides(),\n\t});\n\tawait resourceLoader.reload();\n\n\tconst diagnostics: AgentSessionRuntimeDiagnostic[] = [];\n\tif (\n\t\t!options.telemetryDisabled &&\n\t\tisTelemetryEnabled(settingsManager) &&\n\t\t!settingsManager.getTelemetryNoticeShown()\n\t) {\n\t\tdiagnostics.push({\n\t\t\ttype: \"info\",\n\t\t\tmessage:\n\t\t\t\t\"Base Context analytics are opt-in. Remote export requires BASE_CONTEXT_TELEMETRY_ENDPOINT and a dedicated BASE_CONTEXT_TELEMETRY_API_KEY; inference credentials are never used. Disable with telemetry.enabled=false, BASE_CONTEXT_TELEMETRY=0, DO_NOT_TRACK=1, or offline mode.\",\n\t\t});\n\t\tsettingsManager.setTelemetryNoticeShown(true);\n\t}\n\tconst extensionsResult = resourceLoader.getExtensions();\n\tfor (const { name, config, extensionPath } of extensionsResult.runtime.pendingProviderRegistrations) {\n\t\ttry {\n\t\t\tmodelRegistry.registerProvider(name, config);\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tdiagnostics.push({\n\t\t\t\ttype: \"error\",\n\t\t\t\tmessage: `Extension \"${extensionPath}\" error: ${message}`,\n\t\t\t});\n\t\t}\n\t}\n\textensionsResult.runtime.pendingProviderRegistrations = [];\n\tdiagnostics.push(...applyExtensionFlagValues(resourceLoader, options.extensionFlagValues));\n\n\treturn {\n\t\tcwd,\n\t\tagentDir,\n\t\tauthStorage,\n\t\tsettingsManager,\n\t\tmodelRegistry,\n\t\tresourceLoader,\n\t\tmcpManager,\n\t\tdiagnostics,\n\t};\n}\n\nexport async function createAgentSessionFromServices(\n\toptions: CreateAgentSessionFromServicesOptions,\n): Promise<CreateAgentSessionResult> {\n\tinstallAgentTraceUpload(options.sessionManager, {\n\t\tauthStorage: options.services.authStorage,\n\t\tsettingsManager: options.services.settingsManager,\n\t\tsemanticEdgesLedgerPath: semanticEdgeLedgerPath({\n\t\t\trlmSessionDir: options.rlmSessionDir,\n\t\t\tsessionArtifactDir: options.sessionManager.getSessionArtifactDir(),\n\t\t}),\n\t});\n\tconst result = await createAgentSession({\n\t\tcwd: options.services.cwd,\n\t\tagentDir: options.services.agentDir,\n\t\tauthStorage: options.services.authStorage,\n\t\tsettingsManager: options.services.settingsManager,\n\t\tmodelRegistry: options.services.modelRegistry,\n\t\tresourceLoader: options.services.resourceLoader,\n\t\tmcpManager: options.services.mcpManager,\n\t\tsessionManager: options.sessionManager,\n\t\tmodel: options.model,\n\t\trequestTokenBudget: options.requestTokenBudget,\n\t\tcontextMode: options.contextMode,\n\t\tthinkingLevel: options.thinkingLevel,\n\t\tserviceTier: options.serviceTier,\n\t\tscopedModels: options.scopedModels,\n\t\ttools: options.tools,\n\t\tnoTools: options.noTools,\n\t\tcustomTools: options.customTools,\n\t\tinitialActiveToolNames: options.initialActiveToolNames,\n\t\tallowedToolNames: options.allowedToolNames,\n\t\tincludeGoals: options.includeGoals,\n\t\tincludeCompactSkill: options.includeCompactSkill,\n\t\tagentMessageController: options.agentMessageController,\n\t\tagentObserveController: options.agentObserveController,\n\t\trlmDepth: options.rlmDepth,\n\t\trlmMaxDepth: options.rlmMaxDepth,\n\t\trlmSessionDir: options.rlmSessionDir,\n\t\trlmParentNodeId: options.rlmParentNodeId,\n\t\trlmParentAgent: options.rlmParentAgent,\n\t\trlmChildAdmission: options.rlmChildAdmission,\n\t\tsemanticParentSessionId: options.semanticParentSessionId,\n\t\tsemanticSpawnedByRequestId: options.semanticSpawnedByRequestId,\n\t\tsubagentRuntimeHost: options.subagentRuntimeHost,\n\t\trlmHeartbeatController: options.rlmHeartbeatController,\n\t\tsessionStartEvent: options.sessionStartEvent,\n\t\tprewarmIpythonKernel: options.prewarmIpythonKernel,\n\t\tautonomous: options.autonomous,\n\t\tserializedRefine: options.serializedRefine,\n\t\tinitialGoal: options.initialGoal,\n\t});\n\tif (result.session.rlmDepth === 0 && !options.telemetryDisabled) {\n\t\tinstallAgentTelemetry(result.session, {\n\t\t\tagentDir: options.services.agentDir,\n\t\t\tsettingsManager: options.services.settingsManager,\n\t\t\texecutionMode: options.executionMode,\n\t\t});\n\t}\n\treturn result;\n}\n"]}
1
+ {"version":3,"file":"agent-session-services.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-services.ts"],"names":[],"mappings":"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","sourcesContent":["import { join } from \"node:path\";\nimport type { ThinkingLevel } from \"@ponythewhite/base-context-agent\";\nimport type { Model, RequestTokenBudgetOptions, ServiceTier } from \"@ponythewhite/base-context-ai\";\nimport { getAgentDir } from \"../config.js\";\nimport type { AgentSessionMessageController } from \"./agent-messages.js\";\nimport type { AgentObserveController } from \"./agent-observe.js\";\nimport type { AgentExecutionMode } from \"./agent-session-config.js\";\nimport { AuthStorage } from \"./auth-storage.js\";\nimport type { AgentAutonomousConfig } from \"./autonomous.js\";\nimport type { AgentRlmHeartbeatController } from \"./cron-jobs.js\";\nimport { createHerdrAgentStateExtension } from \"./extensions/builtin/herdr-agent-state.js\";\nimport type { SessionStartEvent, ToolDefinition } from \"./extensions/index.js\";\nimport { McpManager } from \"./mcp/mcp-manager.js\";\nimport { ModelRegistry } from \"./model-registry.js\";\nimport { DefaultResourceLoader, type DefaultResourceLoaderOptions, type ResourceLoader } from \"./resource-loader.js\";\nimport type { RlmRootAdmission, RlmSubagentCapacity } from \"./rlm-max-subagents.js\";\nimport type { RlmChildAdmission, SubagentRuntimeHost } from \"./rlm-runtime.js\";\nimport { type CreateAgentSessionResult, createAgentSession } from \"./sdk.js\";\nimport type { SessionManager } from \"./session-manager.js\";\nimport { SettingsManager } from \"./settings-manager.js\";\n\nexport interface AgentSessionRuntimeDiagnostic {\n\ttype: \"info\" | \"warning\" | \"error\";\n\tmessage: string;\n}\n\nexport interface CreateAgentSessionServicesOptions {\n\tcwd: string;\n\tagentDir?: string;\n\tauthStorage?: AuthStorage;\n\tsettingsManager?: SettingsManager;\n\tmodelRegistry?: ModelRegistry;\n\textensionFlagValues?: Map<string, boolean | string>;\n\tresourceLoaderOptions?: Omit<DefaultResourceLoaderOptions, \"cwd\" | \"agentDir\" | \"settingsManager\">;\n\t/**\n\t * Skip the built-in Herdr reporter for these services. Set for RLM subagent\n\t * runtimes: they inherit the parent's HERDR_* pane identity, so their own\n\t * reporter would race the parent's on the same pane and a subagent quit\n\t * would release the pane while the parent is still running.\n\t */\n\tnoBuiltinHerdrReporter?: boolean;\n}\n\nexport interface AgentSessionCreationOptions {\n\t/** Explicit native request-budget rollout; also forwarded by the services/runtime factory. */\n\trequestTokenBudget?: RequestTokenBudgetOptions;\n\tcontextMode?: \"on\" | \"off\";\n\t/** Undefined restores a saved explicit choice; null creates a session without a selected model. */\n\tmodel?: Model<any> | null;\n\tthinkingLevel?: ThinkingLevel;\n\tserviceTier?: ServiceTier;\n\tscopedModels?: Array<{ model: Model<any>; thinkingLevel?: ThinkingLevel }>;\n\ttools?: string[];\n\tnoTools?: \"all\" | \"builtin\";\n\tcustomTools?: ToolDefinition[];\n\tinitialActiveToolNames?: string[];\n\tallowedToolNames?: string[];\n\tincludeGoals?: boolean;\n\tincludeCompactSkill?: boolean;\n\tagentMessageController?: AgentSessionMessageController;\n\tagentObserveController?: AgentObserveController;\n\trlmDepth?: number;\n\trlmMaxDepth?: number;\n\trlmSessionDir?: string;\n\trlmParentNodeId?: string;\n\trlmParentAgent?: string;\n\t/** Live parent-owned setup admission; never restored from session metadata. */\n\trlmChildAdmission?: RlmChildAdmission;\n\trlmSubagentCapacity?: RlmSubagentCapacity;\n\trlmRootAdmission?: RlmRootAdmission;\n\tsemanticParentSessionId?: string;\n\tsemanticSpawnedByRequestId?: string;\n\tsubagentRuntimeHost?: SubagentRuntimeHost;\n\trlmHeartbeatController?: AgentRlmHeartbeatController;\n\tprewarmIpythonKernel?: boolean;\n\tautonomous?: AgentAutonomousConfig;\n\tserializedRefine?: boolean;\n\texecutionMode?: AgentExecutionMode;\n\tinitialGoal?: { objective: string; tokenBudget?: number };\n}\n\nexport interface CreateAgentSessionFromServicesOptions extends AgentSessionCreationOptions {\n\tservices: AgentSessionServices;\n\tsessionManager: SessionManager;\n\tsessionStartEvent?: SessionStartEvent;\n}\n\nexport interface AgentSessionServices {\n\tcwd: string;\n\tagentDir: string;\n\tauthStorage: AuthStorage;\n\tsettingsManager: SettingsManager;\n\tmodelRegistry: ModelRegistry;\n\tresourceLoader: ResourceLoader;\n\tmcpManager: McpManager;\n\tdiagnostics: AgentSessionRuntimeDiagnostic[];\n}\n\nfunction applyExtensionFlagValues(\n\tresourceLoader: ResourceLoader,\n\textensionFlagValues: Map<string, boolean | string> | undefined,\n): AgentSessionRuntimeDiagnostic[] {\n\tif (!extensionFlagValues) {\n\t\treturn [];\n\t}\n\n\tconst diagnostics: AgentSessionRuntimeDiagnostic[] = [];\n\tconst extensionsResult = resourceLoader.getExtensions();\n\tconst registeredFlags = new Map<string, { type: \"boolean\" | \"string\" }>();\n\tfor (const extension of extensionsResult.extensions) {\n\t\tfor (const [name, flag] of extension.flags) {\n\t\t\tregisteredFlags.set(name, { type: flag.type });\n\t\t}\n\t}\n\n\tconst unknownFlags: string[] = [];\n\tfor (const [name, value] of extensionFlagValues) {\n\t\tconst flag = registeredFlags.get(name);\n\t\tif (!flag) {\n\t\t\tunknownFlags.push(name);\n\t\t\tcontinue;\n\t\t}\n\t\tif (flag.type === \"boolean\") {\n\t\t\textensionsResult.runtime.flagValues.set(name, true);\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\textensionsResult.runtime.flagValues.set(name, value);\n\t\t\tcontinue;\n\t\t}\n\t\tdiagnostics.push({\n\t\t\ttype: \"error\",\n\t\t\tmessage: `Extension flag \"--${name}\" requires a value`,\n\t\t});\n\t}\n\n\tif (unknownFlags.length > 0) {\n\t\tdiagnostics.push({\n\t\t\ttype: \"error\",\n\t\t\tmessage: `Unknown option${unknownFlags.length === 1 ? \"\" : \"s\"}: ${unknownFlags.map((name) => `--${name}`).join(\", \")}`,\n\t\t});\n\t}\n\n\treturn diagnostics;\n}\n\nexport async function createAgentSessionServices(\n\toptions: CreateAgentSessionServicesOptions,\n): Promise<AgentSessionServices> {\n\tconst cwd = options.cwd;\n\tconst agentDir = options.agentDir ?? getAgentDir();\n\tconst authStorage = options.authStorage ?? AuthStorage.create(join(agentDir, \"auth.json\"));\n\tconst settingsManager = options.settingsManager ?? SettingsManager.create(cwd, agentDir);\n\tconst modelRegistry = options.modelRegistry ?? ModelRegistry.create(authStorage, join(agentDir, \"models.json\"));\n\n\t// MCP integrations: registers OAuth providers and gates the built-in\n\t// integration skills by whether the user is logged in (enable-by-login).\n\tconst mcpManager = new McpManager({\n\t\tauthStorage,\n\t\tgetUserServers: () => settingsManager.getGlobalMcpServers(),\n\t});\n\t// refresh() resets the OAuth registry to built-ins; re-add user MCP providers too.\n\tmodelRegistry.setOnOAuthProvidersReset(() => mcpManager.registerUserProviders());\n\n\tconst userExtensionFactories = options.resourceLoaderOptions?.extensionFactories ?? [];\n\t// The built-in Herdr reporter defers to Herdr's own file-based integration\n\t// when the loader actually loaded it; two reporters would race on the same\n\t// pane. Deferral is late-bound to the loader's loaded paths (inline\n\t// factories run after file extensions load), so a file that exists but is\n\t// disabled or never discovered does not silence the built-in.\n\t// noExtensions is a full opt-out: it disables the built-in reporter too,\n\t// not just discovered extension files.\n\tconst skipHerdrReporter = options.noBuiltinHerdrReporter || options.resourceLoaderOptions?.noExtensions;\n\tconst builtinExtensionFactories = skipHerdrReporter\n\t\t? []\n\t\t: [createHerdrAgentStateExtension(() => resourceLoader.getLoadedExtensionPaths())];\n\tconst resourceLoader: DefaultResourceLoader = new DefaultResourceLoader({\n\t\t...(options.resourceLoaderOptions ?? {}),\n\t\textensionFactories: [...builtinExtensionFactories, ...userExtensionFactories],\n\t\tcwd,\n\t\tagentDir,\n\t\tsettingsManager,\n\t\textraBuiltinSkillOverrides: () => mcpManager.getDisabledBuiltinSkillOverrides(),\n\t});\n\tawait resourceLoader.reload();\n\n\tconst diagnostics: AgentSessionRuntimeDiagnostic[] = [];\n\tconst extensionsResult = resourceLoader.getExtensions();\n\tfor (const { name, config, extensionPath } of extensionsResult.runtime.pendingProviderRegistrations) {\n\t\ttry {\n\t\t\tmodelRegistry.registerProvider(name, config);\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tdiagnostics.push({\n\t\t\t\ttype: \"error\",\n\t\t\t\tmessage: `Extension \"${extensionPath}\" error: ${message}`,\n\t\t\t});\n\t\t}\n\t}\n\textensionsResult.runtime.pendingProviderRegistrations = [];\n\tdiagnostics.push(...applyExtensionFlagValues(resourceLoader, options.extensionFlagValues));\n\n\treturn {\n\t\tcwd,\n\t\tagentDir,\n\t\tauthStorage,\n\t\tsettingsManager,\n\t\tmodelRegistry,\n\t\tresourceLoader,\n\t\tmcpManager,\n\t\tdiagnostics,\n\t};\n}\n\nexport async function createAgentSessionFromServices(\n\toptions: CreateAgentSessionFromServicesOptions,\n): Promise<CreateAgentSessionResult> {\n\tconst result = await createAgentSession({\n\t\tcwd: options.services.cwd,\n\t\tagentDir: options.services.agentDir,\n\t\tauthStorage: options.services.authStorage,\n\t\tsettingsManager: options.services.settingsManager,\n\t\tmodelRegistry: options.services.modelRegistry,\n\t\tresourceLoader: options.services.resourceLoader,\n\t\tmcpManager: options.services.mcpManager,\n\t\tsessionManager: options.sessionManager,\n\t\tmodel: options.model,\n\t\trequestTokenBudget: options.requestTokenBudget,\n\t\tcontextMode: options.contextMode,\n\t\tthinkingLevel: options.thinkingLevel,\n\t\tserviceTier: options.serviceTier,\n\t\tscopedModels: options.scopedModels,\n\t\ttools: options.tools,\n\t\tnoTools: options.noTools,\n\t\tcustomTools: options.customTools,\n\t\tinitialActiveToolNames: options.initialActiveToolNames,\n\t\tallowedToolNames: options.allowedToolNames,\n\t\tincludeGoals: options.includeGoals,\n\t\tincludeCompactSkill: options.includeCompactSkill,\n\t\tagentMessageController: options.agentMessageController,\n\t\tagentObserveController: options.agentObserveController,\n\t\trlmDepth: options.rlmDepth,\n\t\trlmMaxDepth: options.rlmMaxDepth,\n\t\trlmSessionDir: options.rlmSessionDir,\n\t\trlmParentNodeId: options.rlmParentNodeId,\n\t\trlmParentAgent: options.rlmParentAgent,\n\t\trlmChildAdmission: options.rlmChildAdmission,\n\t\trlmSubagentCapacity: options.rlmSubagentCapacity,\n\t\trlmRootAdmission: options.rlmRootAdmission,\n\t\tsemanticParentSessionId: options.semanticParentSessionId,\n\t\tsemanticSpawnedByRequestId: options.semanticSpawnedByRequestId,\n\t\tsubagentRuntimeHost: options.subagentRuntimeHost,\n\t\trlmHeartbeatController: options.rlmHeartbeatController,\n\t\tsessionStartEvent: options.sessionStartEvent,\n\t\tprewarmIpythonKernel: options.prewarmIpythonKernel,\n\t\tautonomous: options.autonomous,\n\t\tserializedRefine: options.serializedRefine,\n\t\tinitialGoal: options.initialGoal,\n\t});\n\treturn result;\n}\n"]}