@bastani/atomic 0.9.40-alpha.2 → 0.9.41-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (296) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/README.md +1 -1
  3. package/dist/builtin/intercom/CHANGELOG.md +26 -0
  4. package/dist/builtin/intercom/README.md +1 -1
  5. package/dist/builtin/intercom/broker/broker.ts +24 -21
  6. package/dist/builtin/intercom/broker/client.ts +97 -6
  7. package/dist/builtin/intercom/broker/list-reply.ts +53 -0
  8. package/dist/builtin/intercom/index.bundle.mjs +278 -46
  9. package/dist/builtin/intercom/package.json +1 -1
  10. package/dist/builtin/intercom/recoverable-disconnect.ts +27 -1
  11. package/dist/builtin/intercom/types.ts +8 -1
  12. package/dist/builtin/mcp/package.json +1 -1
  13. package/dist/builtin/subagents/CHANGELOG.md +45 -0
  14. package/dist/builtin/subagents/README.md +14 -0
  15. package/dist/builtin/subagents/package.json +1 -1
  16. package/dist/builtin/subagents/src/extension/index.bundle.mjs +99 -19
  17. package/dist/builtin/web-access/CHANGELOG.md +6 -0
  18. package/dist/builtin/web-access/package.json +1 -1
  19. package/dist/builtin/workflows/CHANGELOG.md +44 -0
  20. package/dist/builtin/workflows/README.md +2 -0
  21. package/dist/builtin/workflows/package.json +1 -1
  22. package/dist/builtin/workflows/src/authoring.d.ts +1 -1
  23. package/dist/builtin/workflows/src/durable/journal/internal.d.ts +16 -0
  24. package/dist/builtin/workflows/src/durable/journal/legacy-journal-tables.d.ts +9 -0
  25. package/dist/builtin/workflows/src/durable/journal/sql-run-journal.d.ts +6 -0
  26. package/dist/builtin/workflows/src/extension/index.bundle.mjs +441 -90
  27. package/dist/builtin/workflows/src/index.js +226 -34
  28. package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +17 -1
  29. package/dist/cli/credential-print.d.ts.map +1 -1
  30. package/dist/cli/credential-print.js +1 -1
  31. package/dist/cli/credential-print.js.map +1 -1
  32. package/dist/config.d.ts +1 -0
  33. package/dist/config.d.ts.map +1 -1
  34. package/dist/config.js +1 -0
  35. package/dist/config.js.map +1 -1
  36. package/dist/core/agent-session-extension-bindings.d.ts +2 -1
  37. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  38. package/dist/core/agent-session-extension-bindings.js +33 -18
  39. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  40. package/dist/core/agent-session-methods.d.ts +2 -1
  41. package/dist/core/agent-session-methods.d.ts.map +1 -1
  42. package/dist/core/agent-session-methods.js.map +1 -1
  43. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  44. package/dist/core/agent-session-prompt.js +114 -21
  45. package/dist/core/agent-session-prompt.js.map +1 -1
  46. package/dist/core/agent-session-runtime.d.ts +1 -1
  47. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  48. package/dist/core/agent-session-runtime.js +6 -0
  49. package/dist/core/agent-session-runtime.js.map +1 -1
  50. package/dist/core/agent-session-state.d.ts +19 -1
  51. package/dist/core/agent-session-state.d.ts.map +1 -1
  52. package/dist/core/agent-session-state.js +41 -6
  53. package/dist/core/agent-session-state.js.map +1 -1
  54. package/dist/core/auth-storage-backends.d.ts +3 -1
  55. package/dist/core/auth-storage-backends.d.ts.map +1 -1
  56. package/dist/core/auth-storage-backends.js +79 -12
  57. package/dist/core/auth-storage-backends.js.map +1 -1
  58. package/dist/core/client-identity.d.ts +8 -0
  59. package/dist/core/client-identity.d.ts.map +1 -0
  60. package/dist/core/client-identity.js +16 -0
  61. package/dist/core/client-identity.js.map +1 -0
  62. package/dist/core/compaction/planner-outcome.d.ts.map +1 -1
  63. package/dist/core/compaction/planner-outcome.js +2 -1
  64. package/dist/core/compaction/planner-outcome.js.map +1 -1
  65. package/dist/core/execution-model-router.d.ts +18 -0
  66. package/dist/core/execution-model-router.d.ts.map +1 -1
  67. package/dist/core/execution-model-router.js +14 -8
  68. package/dist/core/execution-model-router.js.map +1 -1
  69. package/dist/core/extension-oauth-refresh-rejection.d.ts +12 -0
  70. package/dist/core/extension-oauth-refresh-rejection.d.ts.map +1 -0
  71. package/dist/core/extension-oauth-refresh-rejection.js +70 -0
  72. package/dist/core/extension-oauth-refresh-rejection.js.map +1 -0
  73. package/dist/core/extension-startup-failure.d.ts +30 -0
  74. package/dist/core/extension-startup-failure.d.ts.map +1 -0
  75. package/dist/core/extension-startup-failure.js +62 -0
  76. package/dist/core/extension-startup-failure.js.map +1 -0
  77. package/dist/core/extensions/context-types.d.ts +2 -0
  78. package/dist/core/extensions/context-types.d.ts.map +1 -1
  79. package/dist/core/extensions/context-types.js.map +1 -1
  80. package/dist/core/extensions/provider-types.d.ts +2 -0
  81. package/dist/core/extensions/provider-types.d.ts.map +1 -1
  82. package/dist/core/extensions/provider-types.js.map +1 -1
  83. package/dist/core/extensions/runner-context.d.ts +1 -0
  84. package/dist/core/extensions/runner-context.d.ts.map +1 -1
  85. package/dist/core/extensions/runner-context.js +8 -0
  86. package/dist/core/extensions/runner-context.js.map +1 -1
  87. package/dist/core/extensions/runner.d.ts +1 -0
  88. package/dist/core/extensions/runner.d.ts.map +1 -1
  89. package/dist/core/extensions/runner.js +3 -0
  90. package/dist/core/extensions/runner.js.map +1 -1
  91. package/dist/core/extensions/runtime-types.d.ts +1 -0
  92. package/dist/core/extensions/runtime-types.d.ts.map +1 -1
  93. package/dist/core/extensions/runtime-types.js.map +1 -1
  94. package/dist/core/extensions/workflow-run-control-hub.d.ts +1 -0
  95. package/dist/core/extensions/workflow-run-control-hub.d.ts.map +1 -1
  96. package/dist/core/extensions/workflow-run-control-hub.js +3 -0
  97. package/dist/core/extensions/workflow-run-control-hub.js.map +1 -1
  98. package/dist/core/extensions/workflow-run-control.d.ts +8 -0
  99. package/dist/core/extensions/workflow-run-control.d.ts.map +1 -1
  100. package/dist/core/extensions/workflow-run-control.js.map +1 -1
  101. package/dist/core/model-fallback-failures.d.ts.map +1 -1
  102. package/dist/core/model-fallback-failures.js +12 -0
  103. package/dist/core/model-fallback-failures.js.map +1 -1
  104. package/dist/core/model-resolver-defaults.js +1 -1
  105. package/dist/core/model-resolver-defaults.js.map +1 -1
  106. package/dist/core/model-runtime-streaming.d.ts.map +1 -1
  107. package/dist/core/model-runtime-streaming.js +9 -3
  108. package/dist/core/model-runtime-streaming.js.map +1 -1
  109. package/dist/core/model-runtime.d.ts +5 -0
  110. package/dist/core/model-runtime.d.ts.map +1 -1
  111. package/dist/core/model-runtime.js +6 -0
  112. package/dist/core/model-runtime.js.map +1 -1
  113. package/dist/core/provider-composer-internal.d.ts +6 -5
  114. package/dist/core/provider-composer-internal.d.ts.map +1 -1
  115. package/dist/core/provider-composer-internal.js +13 -2
  116. package/dist/core/provider-composer-internal.js.map +1 -1
  117. package/dist/core/sdk.d.ts.map +1 -1
  118. package/dist/core/sdk.js +12 -4
  119. package/dist/core/sdk.js.map +1 -1
  120. package/dist/core/storage/session/sql-session-store.d.ts +35 -0
  121. package/dist/core/storage/session/sql-session-store.d.ts.map +1 -1
  122. package/dist/core/storage/session/sql-session-store.js +158 -42
  123. package/dist/core/storage/session/sql-session-store.js.map +1 -1
  124. package/dist/core/structured-output/deadline.d.ts +40 -0
  125. package/dist/core/structured-output/deadline.d.ts.map +1 -0
  126. package/dist/core/structured-output/deadline.js +110 -0
  127. package/dist/core/structured-output/deadline.js.map +1 -0
  128. package/dist/core/structured-output/index.d.ts.map +1 -1
  129. package/dist/core/structured-output/index.js +103 -47
  130. package/dist/core/structured-output/index.js.map +1 -1
  131. package/dist/core/structured-output/rejection-detail.d.ts +9 -0
  132. package/dist/core/structured-output/rejection-detail.d.ts.map +1 -0
  133. package/dist/core/structured-output/rejection-detail.js +129 -0
  134. package/dist/core/structured-output/rejection-detail.js.map +1 -0
  135. package/dist/core/structured-output/types.d.ts +8 -1
  136. package/dist/core/structured-output/types.d.ts.map +1 -1
  137. package/dist/core/structured-output/types.js.map +1 -1
  138. package/dist/core/tasks/completion.d.ts +7 -1
  139. package/dist/core/tasks/completion.d.ts.map +1 -1
  140. package/dist/core/tasks/completion.js +28 -6
  141. package/dist/core/tasks/completion.js.map +1 -1
  142. package/dist/core/tasks/contracts.d.ts +6 -1
  143. package/dist/core/tasks/contracts.d.ts.map +1 -1
  144. package/dist/core/tasks/contracts.js.map +1 -1
  145. package/dist/core/tasks/pause.d.ts +2 -1
  146. package/dist/core/tasks/pause.d.ts.map +1 -1
  147. package/dist/core/tasks/pause.js +3 -2
  148. package/dist/core/tasks/pause.js.map +1 -1
  149. package/dist/core/tools/bash-pty-native.d.ts.map +1 -1
  150. package/dist/core/tools/bash-pty-native.js +10 -5
  151. package/dist/core/tools/bash-pty-native.js.map +1 -1
  152. package/dist/core/tools/bash.d.ts.map +1 -1
  153. package/dist/core/tools/bash.js +16 -32
  154. package/dist/core/tools/bash.js.map +1 -1
  155. package/dist/core/tools/kill.d.ts.map +1 -1
  156. package/dist/core/tools/kill.js +17 -3
  157. package/dist/core/tools/kill.js.map +1 -1
  158. package/dist/core/tools/shell-task-render.d.ts +55 -0
  159. package/dist/core/tools/shell-task-render.d.ts.map +1 -0
  160. package/dist/core/tools/shell-task-render.js +123 -0
  161. package/dist/core/tools/shell-task-render.js.map +1 -0
  162. package/dist/core/tools/shell-task-status.d.ts +52 -0
  163. package/dist/core/tools/shell-task-status.d.ts.map +1 -0
  164. package/dist/core/tools/shell-task-status.js +184 -0
  165. package/dist/core/tools/shell-task-status.js.map +1 -0
  166. package/dist/core/tools/structured-output.d.ts +5 -0
  167. package/dist/core/tools/structured-output.d.ts.map +1 -1
  168. package/dist/core/tools/structured-output.js +3 -0
  169. package/dist/core/tools/structured-output.js.map +1 -1
  170. package/dist/extensions/codemode/execute.d.ts.map +1 -1
  171. package/dist/extensions/codemode/execute.js +134 -57
  172. package/dist/extensions/codemode/execute.js.map +1 -1
  173. package/dist/extensions/mcp/config.d.ts.map +1 -1
  174. package/dist/extensions/mcp/config.js +3 -2
  175. package/dist/extensions/mcp/config.js.map +1 -1
  176. package/dist/index-extensions.d.ts +1 -0
  177. package/dist/index-extensions.d.ts.map +1 -1
  178. package/dist/index-extensions.js +3 -0
  179. package/dist/index-extensions.js.map +1 -1
  180. package/dist/index.d.ts +3 -1
  181. package/dist/index.d.ts.map +1 -1
  182. package/dist/index.js +3 -1
  183. package/dist/index.js.map +1 -1
  184. package/dist/main.d.ts.map +1 -1
  185. package/dist/main.js +19 -6
  186. package/dist/main.js.map +1 -1
  187. package/dist/modes/interactive/components/task-row.d.ts.map +1 -1
  188. package/dist/modes/interactive/components/task-row.js +11 -1
  189. package/dist/modes/interactive/components/task-row.js.map +1 -1
  190. package/dist/modes/interactive/interactive-auth-routing.js +12 -10
  191. package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
  192. package/dist/modes/interactive/interactive-extension-custom-ui.js +20 -30
  193. package/dist/modes/interactive/interactive-extension-custom-ui.js.map +1 -1
  194. package/dist/modes/interactive/interactive-extension-dialogs.js +23 -96
  195. package/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -1
  196. package/dist/modes/interactive/interactive-extension-runtime.js +7 -8
  197. package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
  198. package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
  199. package/dist/modes/interactive/interactive-input-handling.js +27 -4
  200. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  201. package/dist/modes/interactive/interactive-mode-base.d.ts +20 -10
  202. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  203. package/dist/modes/interactive/interactive-mode-base.js +40 -5
  204. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  205. package/dist/modes/interactive/interactive-mode-deps.d.ts +1 -1
  206. package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
  207. package/dist/modes/interactive/interactive-mode-deps.js +1 -1
  208. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
  209. package/dist/modes/interactive/interactive-mode-surface.d.ts +2 -4
  210. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  211. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  212. package/dist/modes/interactive/interactive-mode-types.d.ts +4 -1
  213. package/dist/modes/interactive/interactive-mode-types.d.ts.map +1 -1
  214. package/dist/modes/interactive/interactive-mode-types.js.map +1 -1
  215. package/dist/modes/interactive/interactive-prompt-restore.d.ts +3 -0
  216. package/dist/modes/interactive/interactive-prompt-restore.d.ts.map +1 -1
  217. package/dist/modes/interactive/interactive-prompt-restore.js +9 -1
  218. package/dist/modes/interactive/interactive-prompt-restore.js.map +1 -1
  219. package/dist/modes/interactive/interactive-prompt-turn.js +30 -2
  220. package/dist/modes/interactive/interactive-prompt-turn.js.map +1 -1
  221. package/dist/modes/interactive/interactive-queueing.js +43 -8
  222. package/dist/modes/interactive/interactive-queueing.js.map +1 -1
  223. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  224. package/dist/modes/interactive/interactive-startup.js +12 -3
  225. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  226. package/dist/modes/interactive/theme/color-utils.d.ts +6 -1
  227. package/dist/modes/interactive/theme/color-utils.d.ts.map +1 -1
  228. package/dist/modes/interactive/theme/color-utils.js +39 -17
  229. package/dist/modes/interactive/theme/color-utils.js.map +1 -1
  230. package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
  231. package/dist/modes/interactive/theme/theme-class.js +2 -2
  232. package/dist/modes/interactive/theme/theme-class.js.map +1 -1
  233. package/dist/modes/interactive/theme/theme-tokens.d.ts +6 -0
  234. package/dist/modes/interactive/theme/theme-tokens.d.ts.map +1 -1
  235. package/dist/modes/interactive/theme/theme-tokens.js +7 -3
  236. package/dist/modes/interactive/theme/theme-tokens.js.map +1 -1
  237. package/dist/modes/interactive-engine/isolated-auth.d.ts +3 -0
  238. package/dist/modes/interactive-engine/isolated-auth.d.ts.map +1 -1
  239. package/dist/modes/interactive-engine/isolated-auth.js +13 -1
  240. package/dist/modes/interactive-engine/isolated-auth.js.map +1 -1
  241. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
  242. package/dist/modes/interactive-engine/isolated-runtime.js +11 -2
  243. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  244. package/dist/modes/interactive-engine/remote-model-catalog.d.ts +8 -0
  245. package/dist/modes/interactive-engine/remote-model-catalog.d.ts.map +1 -1
  246. package/dist/modes/interactive-engine/remote-model-catalog.js +54 -0
  247. package/dist/modes/interactive-engine/remote-model-catalog.js.map +1 -1
  248. package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
  249. package/dist/modes/rpc/rpc-command-handler.js +4 -13
  250. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  251. package/dist/modes/rpc/rpc-model-catalog.d.ts +9 -0
  252. package/dist/modes/rpc/rpc-model-catalog.d.ts.map +1 -0
  253. package/dist/modes/rpc/rpc-model-catalog.js +19 -0
  254. package/dist/modes/rpc/rpc-model-catalog.js.map +1 -0
  255. package/dist/modes/rpc/rpc-provider-auth.d.ts.map +1 -1
  256. package/dist/modes/rpc/rpc-provider-auth.js +2 -6
  257. package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
  258. package/dist/modes/rpc/rpc-types.d.ts +6 -0
  259. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  260. package/dist/modes/rpc/rpc-types.js.map +1 -1
  261. package/dist/utils/changelog.d.ts +6 -0
  262. package/dist/utils/changelog.d.ts.map +1 -1
  263. package/dist/utils/changelog.js +11 -0
  264. package/dist/utils/changelog.js.map +1 -1
  265. package/dist/utils/clipboard.d.ts.map +1 -1
  266. package/dist/utils/clipboard.js +4 -0
  267. package/dist/utils/clipboard.js.map +1 -1
  268. package/dist/utils/tools-manager.d.ts.map +1 -1
  269. package/dist/utils/tools-manager.js +3 -2
  270. package/dist/utils/tools-manager.js.map +1 -1
  271. package/docs/background-tasks.md +5 -3
  272. package/docs/codemode.md +2 -2
  273. package/docs/custom-provider/oauth.md +42 -1
  274. package/docs/custom-provider/registration.md +2 -0
  275. package/docs/environment-variables.md +1 -0
  276. package/docs/extensions/api-reference.md +3 -4
  277. package/docs/extensions/authoring.md +1 -1
  278. package/docs/extensions/events.md +1 -1
  279. package/docs/providers.md +3 -3
  280. package/docs/rpc/protocol.md +4 -2
  281. package/docs/sdk/reference.md +2 -0
  282. package/docs/sdk/structured-decisions.md +7 -5
  283. package/docs/sdk.md +5 -2
  284. package/docs/settings.md +4 -2
  285. package/docs/subagents/reference.md +1 -1
  286. package/docs/subagents.md +15 -1
  287. package/docs/themes/reference.md +3 -1
  288. package/docs/usage.md +3 -1
  289. package/docs/workflows/api-reference.md +28 -0
  290. package/docs/workflows/operations.md +2 -2
  291. package/npm-shrinkwrap.json +32 -32
  292. package/package.json +3 -3
  293. package/dist/core/provider-attribution.d.ts +0 -4
  294. package/dist/core/provider-attribution.d.ts.map +0 -1
  295. package/dist/core/provider-attribution.js +0 -87
  296. package/dist/core/provider-attribution.js.map +0 -1
@@ -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 { AsyncLocalStorage } from \"node:async_hooks\";\nimport { existsSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport type { AuthInteraction } from \"@bastani/pi-ai\";\nimport { type Api, type Model, modelsAreEqual } from \"@bastani/pi-ai/compat\";\nimport type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport type { AgentSession } from \"./agent-session.js\";\nimport type { AgentSessionInternalSurface } from \"./agent-session-methods.ts\";\nimport { type AtomicOAuthLoginCallbacks, loginRuntimeOAuthProvider } from \"./agent-session-runtime-auth.ts\";\nimport type { AgentSessionRuntimeDiagnostic, AgentSessionServices } from \"./agent-session-services.ts\";\nimport type {\n\tProjectTrustContext,\n\tReplacedSessionContext,\n\tSessionShutdownEvent,\n\tSessionStartEvent,\n} from \"./extensions/index.js\";\nimport { emitSessionShutdownEvent } from \"./extensions/runner.ts\";\nimport type { ModelFallbackReason } from \"./model-resolver-types.ts\";\nimport type { AuthStatus } from \"./provider-composer.ts\";\nimport type { CreateAgentSessionResult } from \"./sdk.ts\";\nimport { assertSessionCwdExists } from \"./session-cwd.ts\";\nimport { sessionLifecycleCreation, sessionLifecycleScopes } from \"./session-lifecycle-scope.ts\";\nimport {\n\tdrainSessionWork,\n\thasCallingSessionWork,\n\townedSessionManagerStores,\n\townedSessionStores,\n\tregisterSessionRetirement,\n\ttrackSessionWork,\n} from \"./session-lifecycle-work.ts\";\nimport { SessionEntryError, SessionManager } from \"./session-manager.ts\";\nimport { type StorageFailureCause, StorageRollbackError } from \"./storage/errors.js\";\nimport { JsonlSessionStore } from \"./storage/session/jsonl-session-store.js\";\nimport type { SessionStore } from \"./storage/session/types.js\";\n\n/**\n * Result returned by runtime creation.\n *\n * The caller gets the created session, its cwd-bound services, and all\n * diagnostics collected during setup.\n */\nexport interface CreateAgentSessionRuntimeResult extends CreateAgentSessionResult {\n\tservices: AgentSessionServices;\n\tdiagnostics: AgentSessionRuntimeDiagnostic[];\n}\n\nexport interface LogoutProviderResult {\n\tprovider: string;\n\tauthStatus: AuthStatus;\n\tmodels: Model<Api>[];\n\tscopedModels?: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n}\n\n/**\n * Creates a full runtime for a target cwd and session manager.\n *\n * The factory closes over process-global fixed inputs, recreates cwd-bound\n * services for the effective cwd, resolves session options against those\n * services, and finally creates the AgentSession.\n */\nexport interface CreateAgentSessionRuntimeOptions {\n\tcwd: string;\n\tagentDir: string;\n\tsessionManager: SessionManager;\n\tsessionStartEvent?: SessionStartEvent;\n\tprojectTrustContext?: ProjectTrustContext;\n}\n\nexport type CreateAgentSessionRuntimeFactory = {\n\t(options: CreateAgentSessionRuntimeOptions): Promise<CreateAgentSessionRuntimeResult>;\n\tprepareResume?: (\n\t\toptions: CreateAgentSessionRuntimeOptions,\n\t) => Promise<() => Promise<CreateAgentSessionRuntimeResult>>;\n};\n\nconst SESSION_REPLACEMENT_UI_PROMPT_SETTLEMENT_TIMEOUT_MS = 1_000;\n\n/**\n * Thrown when /import references a JSONL file path that does not exist.\n */\nexport class SessionImportFileNotFoundError extends Error {\n\treadonly filePath: string;\n\n\tconstructor(filePath: string) {\n\t\tsuper(`File not found: ${filePath}`);\n\t\tthis.name = \"SessionImportFileNotFoundError\";\n\t\tthis.filePath = filePath;\n\t}\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\n/**\n * Owns the current AgentSession plus its cwd-bound services.\n *\n * Session replacement methods tear down the current runtime first, then create\n * and apply the next runtime. If creation fails, the error is propagated to the\n * caller. The caller is responsible for user-facing error handling.\n */\nexport class AgentSessionRuntime {\n\tprivate rebindSession?: (session: AgentSession) => Promise<void>;\n\tprivate beforeSessionInvalidate?: () => void;\n\tprivate projectTrustContextFactory?: (cwd: string) => ProjectTrustContext;\n\tprivate closed = false;\n\tprivate endedBySignal = false;\n\tprivate closing?: Promise<void>;\n\tprivate readonly ownedStores = new Set<SessionStore>();\n\tprivate cleanupFailures: unknown[] = [];\n\tprivate candidates = new Set<AgentSession>();\n\tprivate replacements = 0;\n\tprivate publication: Promise<void> = Promise.resolve();\n\tprivate publicationContext = new AsyncLocalStorage<{ active: boolean }>();\n\tprivate retained = new Set<AgentSession>();\n\tprivate retirementCleanup = new Set<Promise<void>>();\n\n\tprivate retainRetirementCleanup(cleanup: Promise<void>): void {\n\t\tconst receipt = cleanup.catch((error) => {\n\t\t\tthis.cleanupFailures.push(error);\n\t\t});\n\t\tthis.retirementCleanup.add(receipt);\n\t\tvoid receipt.then(() => this.retirementCleanup.delete(receipt));\n\t}\n\n\tprivate async finalizeRetained(): Promise<void> {\n\t\tconst session = this.session;\n\t\tif (!this.retained.delete(session)) return;\n\t\tconst finalize = async () => {\n\t\t\tawait emitSessionShutdownEvent(session.extensionRunner, this.quitEvent());\n\t\t};\n\t\tif (hasCallingSessionWork(session)) {\n\t\t\tthis.retainRetirementCleanup(\n\t\t\t\tsession.dispose().then(finalize, async (error) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait finalize();\n\t\t\t\t\t} catch (failure) {\n\t\t\t\t\t\tthrow new AggregateError([error, failure], \"Retained cleanup failed\");\n\t\t\t\t\t}\n\t\t\t\t\tthrow error;\n\t\t\t\t}),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tawait finalize();\n\t}\n\n\tprivate replace<T>(operation: () => Promise<T>): Promise<T> {\n\t\tregisterSessionRetirement(this.session);\n\t\treturn this.admit(async () => {\n\t\t\tthis.replacements++;\n\t\t\tlet outcome: { value: T } | { error: unknown };\n\t\t\ttry {\n\t\t\t\toutcome = { value: await operation() };\n\t\t\t} catch (error) {\n\t\t\t\toutcome = { error };\n\t\t\t\tthis.retainCleanupFailures(error);\n\t\t\t}\n\t\t\tthis.replacements--;\n\t\t\tif (this.replacements === 0 && (this.session as unknown as AgentSessionInternalSurface)._disposed) {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.finalizeRetained();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.cleanupFailures.push(error);\n\t\t\t\t\tthrow Object.assign(\n\t\t\t\t\t\tnew AggregateError(\n\t\t\t\t\t\t\t\"error\" in outcome ? [outcome.error, error] : [error],\n\t\t\t\t\t\t\t\"Retained session cleanup failed\",\n\t\t\t\t\t\t),\n\t\t\t\t\t\t{ code: \"ShutdownFailed\" },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (\"error\" in outcome) throw outcome.error;\n\t\t\treturn outcome.value;\n\t\t});\n\t}\n\n\tprivate assertOpen(): void {\n\t\tif (this.closed) throw Object.assign(new Error(\"Session is closed\"), { code: \"SessionClosed\" });\n\t}\n\n\tprivate admit<T>(operation: () => Promise<T>): Promise<T> {\n\t\ttry {\n\t\t\tthis.assertOpen();\n\t\t} catch (error) {\n\t\t\treturn Promise.reject(error);\n\t\t}\n\t\treturn trackSessionWork(this, operation);\n\t}\n\n\t/** Bind a process-local trust UI; closures never cross the engine RPC boundary. */\n\tsetProjectTrustContextFactory(factory: (cwd: string) => ProjectTrustContext): void {\n\t\tthis.projectTrustContextFactory = factory;\n\t}\n\n\t/** Return false for ordinary startup; otherwise finish the safe session in place. */\n\tasync completeStartup(): Promise<boolean> {\n\t\treturn this.admit(async () => {\n\t\t\tconst complete = this.services.completeStartup;\n\t\t\tif (!complete) return false;\n\t\t\tif (!this.projectTrustContextFactory) throw new Error(\"Startup trust requires a bound session UI\");\n\t\t\tawait complete(this.projectTrustContextFactory(this.services.cwd));\n\t\t\treturn true;\n\t\t});\n\t}\n\n\tprivate declare _session: AgentSession;\n\tprivate declare _services: AgentSessionServices;\n\tprivate declare readonly createRuntime: CreateAgentSessionRuntimeFactory;\n\tprivate declare _diagnostics: AgentSessionRuntimeDiagnostic[];\n\tprivate declare _modelFallbackMessage?: string;\n\tprivate declare _modelFallbackReason?: ModelFallbackReason;\n\n\tconstructor(\n\t\t_session: AgentSession,\n\t\t_services: AgentSessionServices,\n\t\tcreateRuntime: CreateAgentSessionRuntimeFactory,\n\t\t_diagnostics: AgentSessionRuntimeDiagnostic[] = [],\n\t\t_modelFallbackMessage?: string,\n\t\t_modelFallbackReason?: ModelFallbackReason,\n\t) {\n\t\tthis._session = _session;\n\t\tthis.retainSessionStore(_session);\n\t\tthis._services = _services;\n\t\tconst scope = sessionLifecycleScopes.get(_session) ?? {};\n\t\tconst context = () => {\n\t\t\tconst current = this._session as unknown as AgentSessionInternalSurface;\n\t\t\treturn {\n\t\t\t\tscope,\n\t\t\t\treplacement: true,\n\t\t\t\tbindings: {\n\t\t\t\t\t...this._session.extensionRunner.getChildHostBindings(),\n\t\t\t\t\tuiContext: current._extensionUIContext,\n\t\t\t\t\tmode: current._extensionMode,\n\t\t\t\t\tcommandContextActions: current._extensionCommandContextActions,\n\t\t\t\t\tshutdownHandler: current._extensionShutdownHandler,\n\t\t\t\t\tonError: current._extensionErrorListener,\n\t\t\t\t},\n\t\t\t};\n\t\t};\n\t\tthis.createRuntime = (options) =>\n\t\t\tthis.createReplacement(() => sessionLifecycleCreation.run(context(), () => createRuntime(options)));\n\t\tthis.createRuntime.prepareResume = (options) =>\n\t\t\tsessionLifecycleCreation.run(context(), async () => {\n\t\t\t\tconst complete = createRuntime.prepareResume\n\t\t\t\t\t? await createRuntime.prepareResume(options)\n\t\t\t\t\t: () => createRuntime(options);\n\t\t\t\treturn () => this.createReplacement(() => sessionLifecycleCreation.run(context(), complete));\n\t\t\t});\n\t\tthis._diagnostics = _diagnostics;\n\t\tthis._modelFallbackMessage = _modelFallbackMessage;\n\t\tthis._modelFallbackReason = _modelFallbackReason;\n\t}\n\n\t/** A wrapping runtime replaces, rather than borrows, the local lifetime owner. */\n\tprotected adoptSessionStores(owner: AgentSessionRuntime): void {\n\t\tfor (const store of owner.ownedStores) this.ownedStores.add(store);\n\t\towner.ownedStores.clear();\n\t}\n\n\tprivate retainSessionStore(session: AgentSession): void {\n\t\tconst store = ownedSessionStores.get(session);\n\t\tif (store) {\n\t\t\townedSessionStores.delete(session);\n\t\t\tthis.ownedStores.add(store);\n\t\t}\n\t}\n\n\tprivate retainCleanupFailures(error: unknown): void {\n\t\tif (error instanceof Error && \"code\" in error && error.code === \"ShutdownFailed\") {\n\t\t\tthis.cleanupFailures.push(error);\n\t\t} else if (error instanceof AggregateError) {\n\t\t\tfor (const nested of error.errors) this.retainCleanupFailures(nested);\n\t\t}\n\t}\n\n\tprivate async createReplacement(\n\t\tcreate: () => Promise<CreateAgentSessionRuntimeResult>,\n\t): Promise<CreateAgentSessionRuntimeResult> {\n\t\ttry {\n\t\t\tthis.assertOpen();\n\t\t\tconst candidate = await create();\n\t\t\tthis.retainSessionStore(candidate.session);\n\t\t\tthis.candidates.add(candidate.session);\n\t\t\tif (this.closed) {\n\t\t\t\ttry {\n\t\t\t\t\tawait (candidate.session as unknown as AgentSessionInternalSurface)._close(this.quitEvent());\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.cleanupFailures.push(error);\n\t\t\t\t}\n\t\t\t\tthis.candidates.delete(candidate.session);\n\t\t\t\tthis.assertOpen();\n\t\t\t}\n\t\t\treturn candidate;\n\t\t} catch (cause) {\n\t\t\tthis.retainCleanupFailures(cause);\n\t\t\t// The last admitted replacement finalizes retained scope only if no\n\t\t\t// live successor exists. A failed peer must not shut down a winner.\n\t\t\tthrow cause;\n\t\t}\n\t}\n\n\tget services(): AgentSessionServices {\n\t\treturn this._services;\n\t}\n\n\tget session(): AgentSession {\n\t\treturn this._session;\n\t}\n\n\tget cwd(): string {\n\t\treturn this._services.cwd;\n\t}\n\n\tget diagnostics(): readonly AgentSessionRuntimeDiagnostic[] {\n\t\treturn this._diagnostics;\n\t}\n\n\tget modelFallbackMessage(): string | undefined {\n\t\treturn this._modelFallbackMessage;\n\t}\n\n\tget modelFallbackReason(): ModelFallbackReason | undefined {\n\t\treturn this._modelFallbackReason;\n\t}\n\n\treplaceModelFallback(message?: string, reason?: ModelFallbackReason): void {\n\t\tthis._modelFallbackMessage = message;\n\t\tthis._modelFallbackReason = reason;\n\t}\n\n\tresolveModelFallback(): void {\n\t\tthis.replaceModelFallback();\n\t}\n\n\tresolveModelFallbackAfterExplicitModelSelection(\n\t\tpreviousModel: Model<Api> | undefined,\n\t\tselectedModel: Model<Api> | null | undefined,\n\t): void {\n\t\tif (selectedModel && !modelsAreEqual(previousModel, selectedModel)) this.resolveModelFallback();\n\t}\n\n\tasync loginOAuthProvider(\n\t\tprovider: string,\n\t\tcallbacks: AtomicOAuthLoginCallbacks,\n\t): Promise<{ modelsRefreshed: boolean }> {\n\t\treturn this.admit(async () => {\n\t\t\tawait loginRuntimeOAuthProvider(this.session, provider, callbacks);\n\t\t\treturn { modelsRefreshed: true };\n\t\t});\n\t}\n\n\tasync loginApiKeyProvider(provider: string, interaction: AuthInteraction): Promise<{ modelsRefreshed: boolean }> {\n\t\treturn this.admit(async () => {\n\t\t\tawait this.session.modelRuntime.login(provider, \"api_key\", interaction);\n\t\t\treturn { modelsRefreshed: true };\n\t\t});\n\t}\n\n\tasync logoutProvider(provider: string): Promise<LogoutProviderResult> {\n\t\treturn this.admit(async () => {\n\t\t\tconst registry = this.session.modelRuntime;\n\t\t\tawait registry.logout(provider);\n\t\t\tconst availableIds = new Set(registry.getAvailableSnapshot().map((model) => `${model.provider}\\0${model.id}`));\n\t\t\tconst scopedModels = this.session.scopedModels.filter(({ model }) =>\n\t\t\t\tavailableIds.has(`${model.provider}\\0${model.id}`),\n\t\t\t);\n\t\t\tthis.session.setScopedModels([...scopedModels]);\n\t\t\tawait this.session.refreshCurrentModelFromRegistry();\n\t\t\treturn {\n\t\t\t\tprovider,\n\t\t\t\tauthStatus: registry.getProviderAuthStatus(provider),\n\t\t\t\tmodels: [...registry.getAvailableSnapshot()],\n\t\t\t\tscopedModels: [...scopedModels],\n\t\t\t};\n\t\t});\n\t}\n\n\tsetRebindSession(rebindSession?: (session: AgentSession) => Promise<void>): void {\n\t\tthis.rebindSession = rebindSession;\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 * When a replacement is requested from inside the outgoing session's own tracked\n\t * work (for example an extension command calling `ctx.switchSession()`), the\n\t * outgoing session finishes closing only after that work ends, which is after the\n\t * replacement is published. In that case the callback runs once when the outgoing\n\t * session's extension authority is retired, before the replacement binds and\n\t * before the outgoing `session_shutdown` handlers run, so it never resets UI that\n\t * the replacement session has already set.\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(reason: \"new\" | \"resume\", targetSessionId?: string): 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\ttargetSessionId,\n\t\t});\n\t\tthis.assertOpen();\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate async emitBeforeFork(\n\t\tentryId: string,\n\t\toptions: { position: \"before\" | \"at\" },\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst runner = this.session.extensionRunner;\n\t\tif (!runner.hasHandlers(\"session_before_fork\")) {\n\t\t\treturn { cancelled: false };\n\t\t}\n\n\t\tconst result = await runner.emit({\n\t\t\ttype: \"session_before_fork\",\n\t\t\tentryId,\n\t\t\t...options,\n\t\t});\n\t\tthis.assertOpen();\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate quitEvent(): SessionShutdownEvent {\n\t\treturn this.endedBySignal\n\t\t\t? { type: \"session_shutdown\", reason: \"quit\", fromSignal: true }\n\t\t\t: { type: \"session_shutdown\", reason: \"quit\" };\n\t}\n\n\tprivate disposeCurrentSession(event: SessionShutdownEvent): Promise<void> {\n\t\tconst session = this.session;\n\t\tthis.retainSessionStore(session);\n\t\tif (event.reason !== \"quit\") this.retained.add(session);\n\t\tconst receipt = (session as unknown as AgentSessionInternalSurface)._close(event, this.beforeSessionInvalidate);\n\t\tif (event.reason !== \"quit\" && hasCallingSessionWork(session)) this.retainRetirementCleanup(session.dispose());\n\t\treturn receipt;\n\t}\n\n\t/**\n\t * Settle an active response before the session it belongs to is replaced, so the\n\t * aborted turn (including its tool results) is persisted to the outgoing session\n\t * rather than stranded.\n\t *\n\t * Overridable because the isolated engine must not re-enter its cooperative\n\t * abort wait here: the child engine settles its own turn before it reports the\n\t * replacement, and the host facade's `abort()` is an unbounded round trip that\n\t * would hang teardown on an unresponsive or dead engine.\n\t */\n\tprotected async settleActiveResponseBeforeTeardown(): Promise<void> {\n\t\tif (!this.session.isStreaming) return;\n\t\tawait this.session.abort();\n\t}\n\n\tprivate async serializePublication(operation: () => Promise<void>): Promise<void> {\n\t\t// Host callbacks may themselves await another supported replacement.\n\t\tif (this.publicationContext.getStore()?.active) return operation();\n\t\tconst previous = this.publication;\n\t\tlet release!: () => void;\n\t\tthis.publication = new Promise<void>((resolve) => {\n\t\t\trelease = resolve;\n\t\t});\n\t\tconst context = { active: true };\n\t\ttry {\n\t\t\tawait previous;\n\t\t\tawait this.publicationContext.run(context, operation);\n\t\t} finally {\n\t\t\tcontext.active = false;\n\t\t\trelease();\n\t\t}\n\t}\n\tprivate async teardownCurrent(reason: SessionShutdownEvent[\"reason\"], targetSessionId?: string): Promise<void> {\n\t\treturn this.serializePublication(async () => {\n\t\t\tthis.assertOpen();\n\t\t\tawait this.settleActiveResponseBeforeTeardown();\n\t\t\tthis.assertOpen();\n\t\t\tconst { timedOut } = await this.session.extensionRunner.flushUIPromptNotifications(\n\t\t\t\tSESSION_REPLACEMENT_UI_PROMPT_SETTLEMENT_TIMEOUT_MS,\n\t\t\t);\n\t\t\tthis.assertOpen();\n\t\t\tif (timedOut) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t\"Warning: UI prompt observers did not settle within 1,000 ms; continuing session replacement.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait this.disposeCurrentSession({ type: \"session_shutdown\", reason, targetSessionId });\n\t\t});\n\t}\n\n\tprivate async apply(\n\t\tresult: CreateAgentSessionRuntimeResult,\n\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>,\n\t\tsetup?: (sessionManager: SessionManager) => Promise<void>,\n\t): Promise<void> {\n\t\treturn this.serializePublication(async () => {\n\t\t\ttry {\n\t\t\t\tthis.assertOpen();\n\t\t\t\t// A concurrently admitted factory may have published since preflight.\n\t\t\t\t// Retire that successor before displacing it, retaining workflow lineage.\n\t\t\t\tawait this.disposeCurrentSession({ type: \"session_shutdown\", reason: \"new\" });\n\t\t\t\tthis.assertOpen();\n\t\t\t\tthis.candidates.delete(result.session);\n\t\t\t\tthis.retained.delete(this.session);\n\t\t\t\tthis._session = result.session;\n\t\t\t\tthis._services = result.services;\n\t\t\t\tthis._diagnostics = result.diagnostics;\n\t\t\t\tthis._modelFallbackMessage = result.modelFallbackMessage;\n\t\t\t\tthis._modelFallbackReason = result.modelFallbackReason;\n\t\t\t\tif (setup) {\n\t\t\t\t\tawait setup(result.session.sessionManager);\n\t\t\t\t\tthis.assertOpen();\n\t\t\t\t\tif (this.session !== result.session) return;\n\t\t\t\t\tresult.session.refreshContext();\n\t\t\t\t}\n\t\t\t\tif (this.rebindSession) {\n\t\t\t\t\tawait this.rebindSession(result.session);\n\t\t\t\t\tthis.assertOpen();\n\t\t\t\t\tif (this.session !== result.session) return;\n\t\t\t\t}\n\t\t\t\tif (withSession) await withSession(result.session.createReplacedSessionContext());\n\t\t\t} catch (cause) {\n\t\t\t\tif (this.candidates.delete(result.session)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait (result.session as unknown as AgentSessionInternalSurface)._close(\n\t\t\t\t\t\t\tthis.closed ? this.quitEvent() : { type: \"session_shutdown\", reason: \"new\" },\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.cleanupFailures.push(error);\n\t\t\t\t\t\tthrow Object.assign(\n\t\t\t\t\t\t\tnew AggregateError([cause, error], \"Replacement publication and candidate cleanup failed\"),\n\t\t\t\t\t\t\t{ code: \"ShutdownFailed\" },\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow cause;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync switchSession(\n\t\tsessionId: string,\n\t\toptions?: {\n\t\t\tcwdOverride?: string;\n\t\t\tsessionDirectory?: string;\n\t\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t\t\tprojectTrustContextFactory?: (cwd: string) => ProjectTrustContext;\n\t\t},\n\t): Promise<{ cancelled: boolean }> {\n\t\treturn this.replace(async () => {\n\t\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", sessionId);\n\t\t\tthis.assertOpen();\n\t\t\tif (beforeResult.cancelled) {\n\t\t\t\treturn beforeResult;\n\t\t\t}\n\n\t\t\tconst previousSessionId = this.session.sessionId;\n\t\t\tconst sessionManager = await this.session.sessionManager.openSessionById(\n\t\t\t\tsessionId,\n\t\t\t\toptions?.cwdOverride,\n\t\t\t\toptions?.sessionDirectory,\n\t\t\t);\n\t\t\tassertSessionCwdExists(sessionManager, this.cwd);\n\t\t\tconst runtimeOptions: CreateAgentSessionRuntimeOptions = {\n\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\tsessionManager,\n\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"resume\", previousSessionId },\n\t\t\t\tprojectTrustContext: (options?.projectTrustContextFactory ?? this.projectTrustContextFactory)?.(\n\t\t\t\t\tsessionManager.getCwd(),\n\t\t\t\t),\n\t\t\t};\n\t\t\tawait this.settleActiveResponseBeforeTeardown();\n\t\t\tthis.assertOpen();\n\t\t\tconst complete = await this.createRuntime.prepareResume?.(runtimeOptions);\n\t\t\tthis.assertOpen();\n\t\t\tawait this.teardownCurrent(\"resume\", sessionManager.getSessionId());\n\t\t\tawait this.apply(await (complete ? complete() : this.createRuntime(runtimeOptions)), options?.withSession);\n\t\t\treturn { cancelled: false };\n\t\t});\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\treturn this.replace(async () => {\n\t\t\tconst beforeResult = await this.emitBeforeSwitch(\"new\");\n\t\t\tthis.assertOpen();\n\t\t\tif (beforeResult.cancelled) {\n\t\t\t\treturn beforeResult;\n\t\t\t}\n\n\t\t\tconst previousSessionId = this.session.sessionId;\n\t\t\tconst sessionManager = await SessionManager.create(this.session.sessionManager.getSessionStore(), this.cwd, {\n\t\t\t\tparentSession: options?.parentSession,\n\t\t\t});\n\n\t\t\tawait this.teardownCurrent(\"new\", sessionManager.getSessionId());\n\t\t\tawait this.apply(\n\t\t\t\tawait this.createRuntime({\n\t\t\t\t\tcwd: this.cwd,\n\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"new\", previousSessionId },\n\t\t\t\t}),\n\t\t\t\toptions?.withSession,\n\t\t\t\toptions?.setup,\n\t\t\t);\n\t\t\treturn { cancelled: false };\n\t\t});\n\t}\n\n\tasync fork(\n\t\tentryId: string,\n\t\toptions?: { position?: \"before\" | \"at\"; withSession?: (ctx: ReplacedSessionContext) => Promise<void> },\n\t): Promise<{ cancelled: boolean; selectedText?: string }> {\n\t\treturn this.replace(async () => {\n\t\t\tconst position = options?.position ?? \"before\";\n\t\t\tconst beforeResult = await this.emitBeforeFork(entryId, { position });\n\t\t\tthis.assertOpen();\n\t\t\tif (beforeResult.cancelled) {\n\t\t\t\treturn { cancelled: true };\n\t\t\t}\n\t\t\tlet targetLeafId: string | null;\n\t\t\tlet selectedText: string | undefined;\n\n\t\t\tconst selectedEntry = this.session.sessionManager.getEntry(entryId);\n\t\t\tif (!selectedEntry) {\n\t\t\t\tthrow new SessionEntryError(entryId, \"missing\");\n\t\t\t}\n\n\t\t\tif (position === \"at\") {\n\t\t\t\ttargetLeafId = selectedEntry.id;\n\t\t\t} else {\n\t\t\t\tif (selectedEntry.type !== \"message\" || selectedEntry.message.role !== \"user\") {\n\t\t\t\t\tthrow new SessionEntryError(entryId, \"not-forkable\");\n\t\t\t\t}\n\t\t\t\ttargetLeafId = selectedEntry.parentId;\n\t\t\t\tselectedText = extractUserMessageText(selectedEntry.message.content);\n\t\t\t}\n\n\t\t\tconst previousSessionId = this.session.sessionId;\n\t\t\tconst sessionManager = await this.session.sessionManager.openSessionById(previousSessionId);\n\t\t\tif (!targetLeafId) {\n\t\t\t\tawait sessionManager.newSession({ parentSession: previousSessionId });\n\t\t\t} else {\n\t\t\t\tawait sessionManager.createBranchedSession(targetLeafId);\n\t\t\t}\n\t\t\tawait this.teardownCurrent(\"fork\", sessionManager.getSessionId());\n\t\t\tawait this.apply(\n\t\t\t\tawait this.createRuntime({\n\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"fork\", previousSessionId },\n\t\t\t\t}),\n\t\t\t\toptions?.withSession,\n\t\t\t);\n\t\t\treturn { cancelled: false, selectedText };\n\t\t});\n\t}\n\n\t/** Import a format-4 JSONL export into the active session store. */\n\tasync importFromJsonl(inputPath: string, cwdOverride?: string): Promise<{ cancelled: boolean }> {\n\t\treturn this.replace(async () => {\n\t\t\tconst resolvedPath = resolvePath(inputPath);\n\t\t\tif (!existsSync(resolvedPath)) throw new SessionImportFileNotFoundError(resolvedPath);\n\t\t\tconst source = await JsonlSessionStore.open(dirname(resolvedPath), { scanExisting: false });\n\t\t\tlet targetSessionId: string;\n\t\t\ttry {\n\t\t\t\ttargetSessionId = (await source.loadFile(resolvedPath)).header.id;\n\t\t\t} finally {\n\t\t\t\tawait source.close();\n\t\t\t}\n\t\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", targetSessionId);\n\t\t\tthis.assertOpen();\n\t\t\tif (beforeResult.cancelled) return beforeResult;\n\t\t\tconst previousSessionId = this.session.sessionId;\n\t\t\tconst sessionManager = await this.session.sessionManager.importFromJsonl(resolvedPath, cwdOverride);\n\t\t\tassertSessionCwdExists(sessionManager, this.cwd);\n\t\t\tawait this.teardownCurrent(\"resume\", sessionManager.getSessionId());\n\t\t\tawait this.apply(\n\t\t\t\tawait this.createRuntime({\n\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"resume\", previousSessionId },\n\t\t\t\t}),\n\t\t\t);\n\t\t\treturn { cancelled: false };\n\t\t});\n\t}\n\n\tdispose(options?: { fromSignal?: boolean }): Promise<void> {\n\t\tif (this.closing) return this.closing;\n\t\tthis.closed = true;\n\t\tthis.endedBySignal = options?.fromSignal === true;\n\t\tconst current = this.disposeCurrentSession(this.quitEvent());\n\t\tvoid current.catch(() => {});\n\t\tthis.closing = (async () => {\n\t\t\tawait drainSessionWork(this);\n\t\t\tfor (const candidate of this.candidates) {\n\t\t\t\ttry {\n\t\t\t\t\tawait (candidate as unknown as AgentSessionInternalSurface)._close(this.quitEvent());\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.cleanupFailures.push(error);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.candidates.clear();\n\t\t\ttry {\n\t\t\t\tawait current;\n\t\t\t} catch (error) {\n\t\t\t\tthis.cleanupFailures.push(error);\n\t\t\t}\n\t\t\twhile (this.retirementCleanup.size) await Promise.all(this.retirementCleanup);\n\t\t\ttry {\n\t\t\t\tawait this.finalizeRetained();\n\t\t\t} catch (error) {\n\t\t\t\tthis.cleanupFailures.push(error);\n\t\t\t}\n\t\t\tfor (const store of this.ownedStores) {\n\t\t\t\ttry {\n\t\t\t\t\tawait store.close();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.cleanupFailures.push(error);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.ownedStores.clear();\n\t\t\tif (this.cleanupFailures.length)\n\t\t\t\tthrow Object.assign(new AggregateError(this.cleanupFailures, \"Runtime shutdown failed\"), {\n\t\t\t\t\tcode: \"ShutdownFailed\",\n\t\t\t\t});\n\t\t})();\n\t\treturn this.closing;\n\t}\n}\n\n/**\n * Create the initial runtime from a runtime factory and initial session target.\n *\n * The same factory is stored on the returned AgentSessionRuntime and reused for\n * later /new, /resume, /fork, and import flows.\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},\n): Promise<AgentSessionRuntime> {\n\ttry {\n\t\tassertSessionCwdExists(options.sessionManager, options.cwd);\n\t\tconst result = await sessionLifecycleCreation.run({ scope: {} }, () => createRuntime(options));\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\tresult.modelFallbackReason,\n\t\t);\n\t} catch (error) {\n\t\tconst store = ownedSessionManagerStores.get(options.sessionManager);\n\t\townedSessionManagerStores.delete(options.sessionManager);\n\t\ttry {\n\t\t\tawait store?.close();\n\t\t} catch (cause) {\n\t\t\tthrow new StorageRollbackError(error as StorageFailureCause, cause as StorageFailureCause);\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nexport {\n\ttype AgentSessionRuntimeDiagnostic,\n\ttype AgentSessionServices,\n\ttype CreateAgentSessionFromServicesOptions,\n\ttype CreateAgentSessionServicesOptions,\n\tcreateAgentSessionFromServices,\n\tcreateAgentSessionServices,\n} from \"./agent-session-services.ts\";\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 { AsyncLocalStorage } from \"node:async_hooks\";\nimport { existsSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport { type AuthInteraction, drainPendingOAuthRotations, OAUTH_SHUTDOWN_DRAIN_MS } from \"@bastani/pi-ai\";\nimport { type Api, type Model, modelsAreEqual } from \"@bastani/pi-ai/compat\";\nimport type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport type { AgentSession } from \"./agent-session.js\";\nimport type { AgentSessionInternalSurface } from \"./agent-session-methods.ts\";\nimport { type AtomicOAuthLoginCallbacks, loginRuntimeOAuthProvider } from \"./agent-session-runtime-auth.ts\";\nimport type { AgentSessionRuntimeDiagnostic, AgentSessionServices } from \"./agent-session-services.ts\";\nimport type {\n\tProjectTrustContext,\n\tReplacedSessionContext,\n\tSessionShutdownEvent,\n\tSessionStartEvent,\n} from \"./extensions/index.js\";\nimport { emitSessionShutdownEvent } from \"./extensions/runner.ts\";\nimport type { ModelFallbackReason } from \"./model-resolver-types.ts\";\nimport type { AuthStatus } from \"./provider-composer.ts\";\nimport type { CreateAgentSessionResult } from \"./sdk.ts\";\nimport { assertSessionCwdExists } from \"./session-cwd.ts\";\nimport { sessionLifecycleCreation, sessionLifecycleScopes } from \"./session-lifecycle-scope.ts\";\nimport {\n\tdrainSessionWork,\n\thasCallingSessionWork,\n\townedSessionManagerStores,\n\townedSessionStores,\n\tregisterSessionRetirement,\n\ttrackSessionWork,\n} from \"./session-lifecycle-work.ts\";\nimport { SessionEntryError, SessionManager } from \"./session-manager.ts\";\nimport { type StorageFailureCause, StorageRollbackError } from \"./storage/errors.js\";\nimport { JsonlSessionStore } from \"./storage/session/jsonl-session-store.js\";\nimport type { SessionStore } from \"./storage/session/types.js\";\n\n/**\n * Result returned by runtime creation.\n *\n * The caller gets the created session, its cwd-bound services, and all\n * diagnostics collected during setup.\n */\nexport interface CreateAgentSessionRuntimeResult extends CreateAgentSessionResult {\n\tservices: AgentSessionServices;\n\tdiagnostics: AgentSessionRuntimeDiagnostic[];\n}\n\nexport interface LogoutProviderResult {\n\tprovider: string;\n\tauthStatus: AuthStatus;\n\tmodels: Model<Api>[];\n\tscopedModels?: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n}\n\n/**\n * Creates a full runtime for a target cwd and session manager.\n *\n * The factory closes over process-global fixed inputs, recreates cwd-bound\n * services for the effective cwd, resolves session options against those\n * services, and finally creates the AgentSession.\n */\nexport interface CreateAgentSessionRuntimeOptions {\n\tcwd: string;\n\tagentDir: string;\n\tsessionManager: SessionManager;\n\tsessionStartEvent?: SessionStartEvent;\n\tprojectTrustContext?: ProjectTrustContext;\n}\n\nexport type CreateAgentSessionRuntimeFactory = {\n\t(options: CreateAgentSessionRuntimeOptions): Promise<CreateAgentSessionRuntimeResult>;\n\tprepareResume?: (\n\t\toptions: CreateAgentSessionRuntimeOptions,\n\t) => Promise<() => Promise<CreateAgentSessionRuntimeResult>>;\n};\n\nconst SESSION_REPLACEMENT_UI_PROMPT_SETTLEMENT_TIMEOUT_MS = 1_000;\n\n/**\n * Thrown when /import references a JSONL file path that does not exist.\n */\nexport class SessionImportFileNotFoundError extends Error {\n\treadonly filePath: string;\n\n\tconstructor(filePath: string) {\n\t\tsuper(`File not found: ${filePath}`);\n\t\tthis.name = \"SessionImportFileNotFoundError\";\n\t\tthis.filePath = filePath;\n\t}\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\n/**\n * Owns the current AgentSession plus its cwd-bound services.\n *\n * Session replacement methods tear down the current runtime first, then create\n * and apply the next runtime. If creation fails, the error is propagated to the\n * caller. The caller is responsible for user-facing error handling.\n */\nexport class AgentSessionRuntime {\n\tprivate rebindSession?: (session: AgentSession) => Promise<void>;\n\tprivate beforeSessionInvalidate?: () => void;\n\tprivate projectTrustContextFactory?: (cwd: string) => ProjectTrustContext;\n\tprivate closed = false;\n\tprivate endedBySignal = false;\n\tprivate closing?: Promise<void>;\n\tprivate readonly ownedStores = new Set<SessionStore>();\n\tprivate cleanupFailures: unknown[] = [];\n\tprivate candidates = new Set<AgentSession>();\n\tprivate replacements = 0;\n\tprivate publication: Promise<void> = Promise.resolve();\n\tprivate publicationContext = new AsyncLocalStorage<{ active: boolean }>();\n\tprivate retained = new Set<AgentSession>();\n\tprivate retirementCleanup = new Set<Promise<void>>();\n\n\tprivate retainRetirementCleanup(cleanup: Promise<void>): void {\n\t\tconst receipt = cleanup.catch((error) => {\n\t\t\tthis.cleanupFailures.push(error);\n\t\t});\n\t\tthis.retirementCleanup.add(receipt);\n\t\tvoid receipt.then(() => this.retirementCleanup.delete(receipt));\n\t}\n\n\tprivate async finalizeRetained(): Promise<void> {\n\t\tconst session = this.session;\n\t\tif (!this.retained.delete(session)) return;\n\t\tconst finalize = async () => {\n\t\t\tawait emitSessionShutdownEvent(session.extensionRunner, this.quitEvent());\n\t\t};\n\t\tif (hasCallingSessionWork(session)) {\n\t\t\tthis.retainRetirementCleanup(\n\t\t\t\tsession.dispose().then(finalize, async (error) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait finalize();\n\t\t\t\t\t} catch (failure) {\n\t\t\t\t\t\tthrow new AggregateError([error, failure], \"Retained cleanup failed\");\n\t\t\t\t\t}\n\t\t\t\t\tthrow error;\n\t\t\t\t}),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tawait finalize();\n\t}\n\n\tprivate replace<T>(operation: () => Promise<T>): Promise<T> {\n\t\tregisterSessionRetirement(this.session);\n\t\treturn this.admit(async () => {\n\t\t\tthis.replacements++;\n\t\t\tlet outcome: { value: T } | { error: unknown };\n\t\t\ttry {\n\t\t\t\toutcome = { value: await operation() };\n\t\t\t} catch (error) {\n\t\t\t\toutcome = { error };\n\t\t\t\tthis.retainCleanupFailures(error);\n\t\t\t}\n\t\t\tthis.replacements--;\n\t\t\tif (this.replacements === 0 && (this.session as unknown as AgentSessionInternalSurface)._disposed) {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.finalizeRetained();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.cleanupFailures.push(error);\n\t\t\t\t\tthrow Object.assign(\n\t\t\t\t\t\tnew AggregateError(\n\t\t\t\t\t\t\t\"error\" in outcome ? [outcome.error, error] : [error],\n\t\t\t\t\t\t\t\"Retained session cleanup failed\",\n\t\t\t\t\t\t),\n\t\t\t\t\t\t{ code: \"ShutdownFailed\" },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (\"error\" in outcome) throw outcome.error;\n\t\t\treturn outcome.value;\n\t\t});\n\t}\n\n\tprivate assertOpen(): void {\n\t\tif (this.closed) throw Object.assign(new Error(\"Session is closed\"), { code: \"SessionClosed\" });\n\t}\n\n\tprivate admit<T>(operation: () => Promise<T>): Promise<T> {\n\t\ttry {\n\t\t\tthis.assertOpen();\n\t\t} catch (error) {\n\t\t\treturn Promise.reject(error);\n\t\t}\n\t\treturn trackSessionWork(this, operation);\n\t}\n\n\t/** Bind a process-local trust UI; closures never cross the engine RPC boundary. */\n\tsetProjectTrustContextFactory(factory: (cwd: string) => ProjectTrustContext): void {\n\t\tthis.projectTrustContextFactory = factory;\n\t}\n\n\t/** Return false for ordinary startup; otherwise finish the safe session in place. */\n\tasync completeStartup(): Promise<boolean> {\n\t\treturn this.admit(async () => {\n\t\t\tconst complete = this.services.completeStartup;\n\t\t\tif (!complete) return false;\n\t\t\tif (!this.projectTrustContextFactory) throw new Error(\"Startup trust requires a bound session UI\");\n\t\t\tawait complete(this.projectTrustContextFactory(this.services.cwd));\n\t\t\treturn true;\n\t\t});\n\t}\n\n\tprivate declare _session: AgentSession;\n\tprivate declare _services: AgentSessionServices;\n\tprivate declare readonly createRuntime: CreateAgentSessionRuntimeFactory;\n\tprivate declare _diagnostics: AgentSessionRuntimeDiagnostic[];\n\tprivate declare _modelFallbackMessage?: string;\n\tprivate declare _modelFallbackReason?: ModelFallbackReason;\n\n\tconstructor(\n\t\t_session: AgentSession,\n\t\t_services: AgentSessionServices,\n\t\tcreateRuntime: CreateAgentSessionRuntimeFactory,\n\t\t_diagnostics: AgentSessionRuntimeDiagnostic[] = [],\n\t\t_modelFallbackMessage?: string,\n\t\t_modelFallbackReason?: ModelFallbackReason,\n\t) {\n\t\tthis._session = _session;\n\t\tthis.retainSessionStore(_session);\n\t\tthis._services = _services;\n\t\tconst scope = sessionLifecycleScopes.get(_session) ?? {};\n\t\tconst context = () => {\n\t\t\tconst current = this._session as unknown as AgentSessionInternalSurface;\n\t\t\treturn {\n\t\t\t\tscope,\n\t\t\t\treplacement: true,\n\t\t\t\tbindings: {\n\t\t\t\t\t...this._session.extensionRunner.getChildHostBindings(),\n\t\t\t\t\tuiContext: current._extensionUIContext,\n\t\t\t\t\tmode: current._extensionMode,\n\t\t\t\t\tcommandContextActions: current._extensionCommandContextActions,\n\t\t\t\t\tshutdownHandler: current._extensionShutdownHandler,\n\t\t\t\t\tonError: current._extensionErrorListener,\n\t\t\t\t},\n\t\t\t};\n\t\t};\n\t\tthis.createRuntime = (options) =>\n\t\t\tthis.createReplacement(() => sessionLifecycleCreation.run(context(), () => createRuntime(options)));\n\t\tthis.createRuntime.prepareResume = (options) =>\n\t\t\tsessionLifecycleCreation.run(context(), async () => {\n\t\t\t\tconst complete = createRuntime.prepareResume\n\t\t\t\t\t? await createRuntime.prepareResume(options)\n\t\t\t\t\t: () => createRuntime(options);\n\t\t\t\treturn () => this.createReplacement(() => sessionLifecycleCreation.run(context(), complete));\n\t\t\t});\n\t\tthis._diagnostics = _diagnostics;\n\t\tthis._modelFallbackMessage = _modelFallbackMessage;\n\t\tthis._modelFallbackReason = _modelFallbackReason;\n\t}\n\n\t/** A wrapping runtime replaces, rather than borrows, the local lifetime owner. */\n\tprotected adoptSessionStores(owner: AgentSessionRuntime): void {\n\t\tfor (const store of owner.ownedStores) this.ownedStores.add(store);\n\t\towner.ownedStores.clear();\n\t}\n\n\tprivate retainSessionStore(session: AgentSession): void {\n\t\tconst store = ownedSessionStores.get(session);\n\t\tif (store) {\n\t\t\townedSessionStores.delete(session);\n\t\t\tthis.ownedStores.add(store);\n\t\t}\n\t}\n\n\tprivate retainCleanupFailures(error: unknown): void {\n\t\tif (error instanceof Error && \"code\" in error && error.code === \"ShutdownFailed\") {\n\t\t\tthis.cleanupFailures.push(error);\n\t\t} else if (error instanceof AggregateError) {\n\t\t\tfor (const nested of error.errors) this.retainCleanupFailures(nested);\n\t\t}\n\t}\n\n\tprivate async createReplacement(\n\t\tcreate: () => Promise<CreateAgentSessionRuntimeResult>,\n\t): Promise<CreateAgentSessionRuntimeResult> {\n\t\ttry {\n\t\t\tthis.assertOpen();\n\t\t\tconst candidate = await create();\n\t\t\tthis.retainSessionStore(candidate.session);\n\t\t\tthis.candidates.add(candidate.session);\n\t\t\tif (this.closed) {\n\t\t\t\ttry {\n\t\t\t\t\tawait (candidate.session as unknown as AgentSessionInternalSurface)._close(this.quitEvent());\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.cleanupFailures.push(error);\n\t\t\t\t}\n\t\t\t\tthis.candidates.delete(candidate.session);\n\t\t\t\tthis.assertOpen();\n\t\t\t}\n\t\t\treturn candidate;\n\t\t} catch (cause) {\n\t\t\tthis.retainCleanupFailures(cause);\n\t\t\t// The last admitted replacement finalizes retained scope only if no\n\t\t\t// live successor exists. A failed peer must not shut down a winner.\n\t\t\tthrow cause;\n\t\t}\n\t}\n\n\tget services(): AgentSessionServices {\n\t\treturn this._services;\n\t}\n\n\tget session(): AgentSession {\n\t\treturn this._session;\n\t}\n\n\tget cwd(): string {\n\t\treturn this._services.cwd;\n\t}\n\n\tget diagnostics(): readonly AgentSessionRuntimeDiagnostic[] {\n\t\treturn this._diagnostics;\n\t}\n\n\tget modelFallbackMessage(): string | undefined {\n\t\treturn this._modelFallbackMessage;\n\t}\n\n\tget modelFallbackReason(): ModelFallbackReason | undefined {\n\t\treturn this._modelFallbackReason;\n\t}\n\n\treplaceModelFallback(message?: string, reason?: ModelFallbackReason): void {\n\t\tthis._modelFallbackMessage = message;\n\t\tthis._modelFallbackReason = reason;\n\t}\n\n\tresolveModelFallback(): void {\n\t\tthis.replaceModelFallback();\n\t}\n\n\tresolveModelFallbackAfterExplicitModelSelection(\n\t\tpreviousModel: Model<Api> | undefined,\n\t\tselectedModel: Model<Api> | null | undefined,\n\t): void {\n\t\tif (selectedModel && !modelsAreEqual(previousModel, selectedModel)) this.resolveModelFallback();\n\t}\n\n\tasync loginOAuthProvider(\n\t\tprovider: string,\n\t\tcallbacks: AtomicOAuthLoginCallbacks,\n\t): Promise<{ modelsRefreshed: boolean }> {\n\t\treturn this.admit(async () => {\n\t\t\tawait loginRuntimeOAuthProvider(this.session, provider, callbacks);\n\t\t\treturn { modelsRefreshed: true };\n\t\t});\n\t}\n\n\tasync loginApiKeyProvider(provider: string, interaction: AuthInteraction): Promise<{ modelsRefreshed: boolean }> {\n\t\treturn this.admit(async () => {\n\t\t\tawait this.session.modelRuntime.login(provider, \"api_key\", interaction);\n\t\t\treturn { modelsRefreshed: true };\n\t\t});\n\t}\n\n\tasync logoutProvider(provider: string): Promise<LogoutProviderResult> {\n\t\treturn this.admit(async () => {\n\t\t\tconst registry = this.session.modelRuntime;\n\t\t\tawait registry.logout(provider);\n\t\t\tconst availableIds = new Set(registry.getAvailableSnapshot().map((model) => `${model.provider}\\0${model.id}`));\n\t\t\tconst scopedModels = this.session.scopedModels.filter(({ model }) =>\n\t\t\t\tavailableIds.has(`${model.provider}\\0${model.id}`),\n\t\t\t);\n\t\t\tthis.session.setScopedModels([...scopedModels]);\n\t\t\tawait this.session.refreshCurrentModelFromRegistry();\n\t\t\treturn {\n\t\t\t\tprovider,\n\t\t\t\tauthStatus: registry.getProviderAuthStatus(provider),\n\t\t\t\tmodels: [...registry.getAvailableSnapshot()],\n\t\t\t\tscopedModels: [...scopedModels],\n\t\t\t};\n\t\t});\n\t}\n\n\tsetRebindSession(rebindSession?: (session: AgentSession) => Promise<void>): void {\n\t\tthis.rebindSession = rebindSession;\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 * When a replacement is requested from inside the outgoing session's own tracked\n\t * work (for example an extension command calling `ctx.switchSession()`), the\n\t * outgoing session finishes closing only after that work ends, which is after the\n\t * replacement is published. In that case the callback runs once when the outgoing\n\t * session's extension authority is retired, before the replacement binds and\n\t * before the outgoing `session_shutdown` handlers run, so it never resets UI that\n\t * the replacement session has already set.\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(reason: \"new\" | \"resume\", targetSessionId?: string): 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\ttargetSessionId,\n\t\t});\n\t\tthis.assertOpen();\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate async emitBeforeFork(\n\t\tentryId: string,\n\t\toptions: { position: \"before\" | \"at\" },\n\t): Promise<{ cancelled: boolean }> {\n\t\tconst runner = this.session.extensionRunner;\n\t\tif (!runner.hasHandlers(\"session_before_fork\")) {\n\t\t\treturn { cancelled: false };\n\t\t}\n\n\t\tconst result = await runner.emit({\n\t\t\ttype: \"session_before_fork\",\n\t\t\tentryId,\n\t\t\t...options,\n\t\t});\n\t\tthis.assertOpen();\n\t\treturn { cancelled: result?.cancel === true };\n\t}\n\n\tprivate quitEvent(): SessionShutdownEvent {\n\t\treturn this.endedBySignal\n\t\t\t? { type: \"session_shutdown\", reason: \"quit\", fromSignal: true }\n\t\t\t: { type: \"session_shutdown\", reason: \"quit\" };\n\t}\n\n\tprivate disposeCurrentSession(event: SessionShutdownEvent): Promise<void> {\n\t\tconst session = this.session;\n\t\tthis.retainSessionStore(session);\n\t\tif (event.reason !== \"quit\") this.retained.add(session);\n\t\tconst receipt = (session as unknown as AgentSessionInternalSurface)._close(event, this.beforeSessionInvalidate);\n\t\tif (event.reason !== \"quit\" && hasCallingSessionWork(session)) this.retainRetirementCleanup(session.dispose());\n\t\treturn receipt;\n\t}\n\n\t/**\n\t * Settle an active response before the session it belongs to is replaced, so the\n\t * aborted turn (including its tool results) is persisted to the outgoing session\n\t * rather than stranded.\n\t *\n\t * Overridable because the isolated engine must not re-enter its cooperative\n\t * abort wait here: the child engine settles its own turn before it reports the\n\t * replacement, and the host facade's `abort()` is an unbounded round trip that\n\t * would hang teardown on an unresponsive or dead engine.\n\t */\n\tprotected async settleActiveResponseBeforeTeardown(): Promise<void> {\n\t\tif (!this.session.isStreaming) return;\n\t\tawait this.session.abort();\n\t}\n\n\tprivate async serializePublication(operation: () => Promise<void>): Promise<void> {\n\t\t// Host callbacks may themselves await another supported replacement.\n\t\tif (this.publicationContext.getStore()?.active) return operation();\n\t\tconst previous = this.publication;\n\t\tlet release!: () => void;\n\t\tthis.publication = new Promise<void>((resolve) => {\n\t\t\trelease = resolve;\n\t\t});\n\t\tconst context = { active: true };\n\t\ttry {\n\t\t\tawait previous;\n\t\t\tawait this.publicationContext.run(context, operation);\n\t\t} finally {\n\t\t\tcontext.active = false;\n\t\t\trelease();\n\t\t}\n\t}\n\tprivate async teardownCurrent(reason: SessionShutdownEvent[\"reason\"], targetSessionId?: string): Promise<void> {\n\t\treturn this.serializePublication(async () => {\n\t\t\tthis.assertOpen();\n\t\t\tawait this.settleActiveResponseBeforeTeardown();\n\t\t\tthis.assertOpen();\n\t\t\tconst { timedOut } = await this.session.extensionRunner.flushUIPromptNotifications(\n\t\t\t\tSESSION_REPLACEMENT_UI_PROMPT_SETTLEMENT_TIMEOUT_MS,\n\t\t\t);\n\t\t\tthis.assertOpen();\n\t\t\tif (timedOut) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t\"Warning: UI prompt observers did not settle within 1,000 ms; continuing session replacement.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait this.disposeCurrentSession({ type: \"session_shutdown\", reason, targetSessionId });\n\t\t});\n\t}\n\n\tprivate async apply(\n\t\tresult: CreateAgentSessionRuntimeResult,\n\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>,\n\t\tsetup?: (sessionManager: SessionManager) => Promise<void>,\n\t): Promise<void> {\n\t\treturn this.serializePublication(async () => {\n\t\t\ttry {\n\t\t\t\tthis.assertOpen();\n\t\t\t\t// A concurrently admitted factory may have published since preflight.\n\t\t\t\t// Retire that successor before displacing it, retaining workflow lineage.\n\t\t\t\tawait this.disposeCurrentSession({ type: \"session_shutdown\", reason: \"new\" });\n\t\t\t\tthis.assertOpen();\n\t\t\t\tthis.candidates.delete(result.session);\n\t\t\t\tthis.retained.delete(this.session);\n\t\t\t\tthis._session = result.session;\n\t\t\t\tthis._services = result.services;\n\t\t\t\tthis._diagnostics = result.diagnostics;\n\t\t\t\tthis._modelFallbackMessage = result.modelFallbackMessage;\n\t\t\t\tthis._modelFallbackReason = result.modelFallbackReason;\n\t\t\t\tif (setup) {\n\t\t\t\t\tawait setup(result.session.sessionManager);\n\t\t\t\t\tthis.assertOpen();\n\t\t\t\t\tif (this.session !== result.session) return;\n\t\t\t\t\tresult.session.refreshContext();\n\t\t\t\t}\n\t\t\t\tif (this.rebindSession) {\n\t\t\t\t\tawait this.rebindSession(result.session);\n\t\t\t\t\tthis.assertOpen();\n\t\t\t\t\tif (this.session !== result.session) return;\n\t\t\t\t}\n\t\t\t\tif (withSession) await withSession(result.session.createReplacedSessionContext());\n\t\t\t} catch (cause) {\n\t\t\t\tif (this.candidates.delete(result.session)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait (result.session as unknown as AgentSessionInternalSurface)._close(\n\t\t\t\t\t\t\tthis.closed ? this.quitEvent() : { type: \"session_shutdown\", reason: \"new\" },\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.cleanupFailures.push(error);\n\t\t\t\t\t\tthrow Object.assign(\n\t\t\t\t\t\t\tnew AggregateError([cause, error], \"Replacement publication and candidate cleanup failed\"),\n\t\t\t\t\t\t\t{ code: \"ShutdownFailed\" },\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow cause;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync switchSession(\n\t\tsessionId: string,\n\t\toptions?: {\n\t\t\tcwdOverride?: string;\n\t\t\tsessionDirectory?: string;\n\t\t\twithSession?: (ctx: ReplacedSessionContext) => Promise<void>;\n\t\t\tprojectTrustContextFactory?: (cwd: string) => ProjectTrustContext;\n\t\t},\n\t): Promise<{ cancelled: boolean }> {\n\t\treturn this.replace(async () => {\n\t\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", sessionId);\n\t\t\tthis.assertOpen();\n\t\t\tif (beforeResult.cancelled) {\n\t\t\t\treturn beforeResult;\n\t\t\t}\n\n\t\t\tconst previousSessionId = this.session.sessionId;\n\t\t\tconst sessionManager = await this.session.sessionManager.openSessionById(\n\t\t\t\tsessionId,\n\t\t\t\toptions?.cwdOverride,\n\t\t\t\toptions?.sessionDirectory,\n\t\t\t);\n\t\t\tassertSessionCwdExists(sessionManager, this.cwd);\n\t\t\tconst runtimeOptions: CreateAgentSessionRuntimeOptions = {\n\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\tsessionManager,\n\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"resume\", previousSessionId },\n\t\t\t\tprojectTrustContext: (options?.projectTrustContextFactory ?? this.projectTrustContextFactory)?.(\n\t\t\t\t\tsessionManager.getCwd(),\n\t\t\t\t),\n\t\t\t};\n\t\t\tawait this.settleActiveResponseBeforeTeardown();\n\t\t\tthis.assertOpen();\n\t\t\tconst complete = await this.createRuntime.prepareResume?.(runtimeOptions);\n\t\t\tthis.assertOpen();\n\t\t\tawait this.teardownCurrent(\"resume\", sessionManager.getSessionId());\n\t\t\tawait this.apply(await (complete ? complete() : this.createRuntime(runtimeOptions)), options?.withSession);\n\t\t\treturn { cancelled: false };\n\t\t});\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\treturn this.replace(async () => {\n\t\t\tconst beforeResult = await this.emitBeforeSwitch(\"new\");\n\t\t\tthis.assertOpen();\n\t\t\tif (beforeResult.cancelled) {\n\t\t\t\treturn beforeResult;\n\t\t\t}\n\n\t\t\tconst previousSessionId = this.session.sessionId;\n\t\t\tconst sessionManager = await SessionManager.create(this.session.sessionManager.getSessionStore(), this.cwd, {\n\t\t\t\tparentSession: options?.parentSession,\n\t\t\t});\n\n\t\t\tawait this.teardownCurrent(\"new\", sessionManager.getSessionId());\n\t\t\tawait this.apply(\n\t\t\t\tawait this.createRuntime({\n\t\t\t\t\tcwd: this.cwd,\n\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"new\", previousSessionId },\n\t\t\t\t}),\n\t\t\t\toptions?.withSession,\n\t\t\t\toptions?.setup,\n\t\t\t);\n\t\t\treturn { cancelled: false };\n\t\t});\n\t}\n\n\tasync fork(\n\t\tentryId: string,\n\t\toptions?: { position?: \"before\" | \"at\"; withSession?: (ctx: ReplacedSessionContext) => Promise<void> },\n\t): Promise<{ cancelled: boolean; selectedText?: string }> {\n\t\treturn this.replace(async () => {\n\t\t\tconst position = options?.position ?? \"before\";\n\t\t\tconst beforeResult = await this.emitBeforeFork(entryId, { position });\n\t\t\tthis.assertOpen();\n\t\t\tif (beforeResult.cancelled) {\n\t\t\t\treturn { cancelled: true };\n\t\t\t}\n\t\t\tlet targetLeafId: string | null;\n\t\t\tlet selectedText: string | undefined;\n\n\t\t\tconst selectedEntry = this.session.sessionManager.getEntry(entryId);\n\t\t\tif (!selectedEntry) {\n\t\t\t\tthrow new SessionEntryError(entryId, \"missing\");\n\t\t\t}\n\n\t\t\tif (position === \"at\") {\n\t\t\t\ttargetLeafId = selectedEntry.id;\n\t\t\t} else {\n\t\t\t\tif (selectedEntry.type !== \"message\" || selectedEntry.message.role !== \"user\") {\n\t\t\t\t\tthrow new SessionEntryError(entryId, \"not-forkable\");\n\t\t\t\t}\n\t\t\t\ttargetLeafId = selectedEntry.parentId;\n\t\t\t\tselectedText = extractUserMessageText(selectedEntry.message.content);\n\t\t\t}\n\n\t\t\tconst previousSessionId = this.session.sessionId;\n\t\t\tconst sessionManager = await this.session.sessionManager.openSessionById(previousSessionId);\n\t\t\tif (!targetLeafId) {\n\t\t\t\tawait sessionManager.newSession({ parentSession: previousSessionId });\n\t\t\t} else {\n\t\t\t\tawait sessionManager.createBranchedSession(targetLeafId);\n\t\t\t}\n\t\t\tawait this.teardownCurrent(\"fork\", sessionManager.getSessionId());\n\t\t\tawait this.apply(\n\t\t\t\tawait this.createRuntime({\n\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"fork\", previousSessionId },\n\t\t\t\t}),\n\t\t\t\toptions?.withSession,\n\t\t\t);\n\t\t\treturn { cancelled: false, selectedText };\n\t\t});\n\t}\n\n\t/** Import a format-4 JSONL export into the active session store. */\n\tasync importFromJsonl(inputPath: string, cwdOverride?: string): Promise<{ cancelled: boolean }> {\n\t\treturn this.replace(async () => {\n\t\t\tconst resolvedPath = resolvePath(inputPath);\n\t\t\tif (!existsSync(resolvedPath)) throw new SessionImportFileNotFoundError(resolvedPath);\n\t\t\tconst source = await JsonlSessionStore.open(dirname(resolvedPath), { scanExisting: false });\n\t\t\tlet targetSessionId: string;\n\t\t\ttry {\n\t\t\t\ttargetSessionId = (await source.loadFile(resolvedPath)).header.id;\n\t\t\t} finally {\n\t\t\t\tawait source.close();\n\t\t\t}\n\t\t\tconst beforeResult = await this.emitBeforeSwitch(\"resume\", targetSessionId);\n\t\t\tthis.assertOpen();\n\t\t\tif (beforeResult.cancelled) return beforeResult;\n\t\t\tconst previousSessionId = this.session.sessionId;\n\t\t\tconst sessionManager = await this.session.sessionManager.importFromJsonl(resolvedPath, cwdOverride);\n\t\t\tassertSessionCwdExists(sessionManager, this.cwd);\n\t\t\tawait this.teardownCurrent(\"resume\", sessionManager.getSessionId());\n\t\t\tawait this.apply(\n\t\t\t\tawait this.createRuntime({\n\t\t\t\t\tcwd: sessionManager.getCwd(),\n\t\t\t\t\tagentDir: this.services.agentDir,\n\t\t\t\t\tsessionManager,\n\t\t\t\t\tsessionStartEvent: { type: \"session_start\", reason: \"resume\", previousSessionId },\n\t\t\t\t}),\n\t\t\t);\n\t\t\treturn { cancelled: false };\n\t\t});\n\t}\n\n\tdispose(options?: { fromSignal?: boolean }): Promise<void> {\n\t\tif (this.closing) return this.closing;\n\t\tthis.closed = true;\n\t\tthis.endedBySignal = options?.fromSignal === true;\n\t\t// Every graceful exit path (quit, signals, RPC shutdown, print mode) disposes the runtime before exiting.\n\t\tconst oauthDrainDeadline = Date.now() + OAUTH_SHUTDOWN_DRAIN_MS;\n\t\tconst current = this.disposeCurrentSession(this.quitEvent());\n\t\tvoid current.catch(() => {});\n\t\tthis.closing = (async () => {\n\t\t\tawait drainSessionWork(this);\n\t\t\tfor (const candidate of this.candidates) {\n\t\t\t\ttry {\n\t\t\t\t\tawait (candidate as unknown as AgentSessionInternalSurface)._close(this.quitEvent());\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.cleanupFailures.push(error);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.candidates.clear();\n\t\t\ttry {\n\t\t\t\tawait current;\n\t\t\t} catch (error) {\n\t\t\t\tthis.cleanupFailures.push(error);\n\t\t\t}\n\t\t\twhile (this.retirementCleanup.size) await Promise.all(this.retirementCleanup);\n\t\t\ttry {\n\t\t\t\tawait this.finalizeRetained();\n\t\t\t} catch (error) {\n\t\t\t\tthis.cleanupFailures.push(error);\n\t\t\t}\n\t\t\tfor (const store of this.ownedStores) {\n\t\t\t\ttry {\n\t\t\t\t\tawait store.close();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.cleanupFailures.push(error);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.ownedStores.clear();\n\t\t\t// A token exchange whose caller already gave up may have rotated the login server-side; persist it if it\n\t\t\t// completes within the drain bound, measured from the start of the shutdown.\n\t\t\tawait drainPendingOAuthRotations(Math.max(0, oauthDrainDeadline - Date.now()));\n\t\t\tif (this.cleanupFailures.length)\n\t\t\t\tthrow Object.assign(new AggregateError(this.cleanupFailures, \"Runtime shutdown failed\"), {\n\t\t\t\t\tcode: \"ShutdownFailed\",\n\t\t\t\t});\n\t\t})();\n\t\treturn this.closing;\n\t}\n}\n\n/**\n * Create the initial runtime from a runtime factory and initial session target.\n *\n * The same factory is stored on the returned AgentSessionRuntime and reused for\n * later /new, /resume, /fork, and import flows.\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},\n): Promise<AgentSessionRuntime> {\n\ttry {\n\t\tassertSessionCwdExists(options.sessionManager, options.cwd);\n\t\tconst result = await sessionLifecycleCreation.run({ scope: {} }, () => createRuntime(options));\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\tresult.modelFallbackReason,\n\t\t);\n\t} catch (error) {\n\t\tconst store = ownedSessionManagerStores.get(options.sessionManager);\n\t\townedSessionManagerStores.delete(options.sessionManager);\n\t\ttry {\n\t\t\tawait store?.close();\n\t\t} catch (cause) {\n\t\t\tthrow new StorageRollbackError(error as StorageFailureCause, cause as StorageFailureCause);\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nexport {\n\ttype AgentSessionRuntimeDiagnostic,\n\ttype AgentSessionServices,\n\ttype CreateAgentSessionFromServicesOptions,\n\ttype CreateAgentSessionServicesOptions,\n\tcreateAgentSessionFromServices,\n\tcreateAgentSessionServices,\n} from \"./agent-session-services.ts\";\n"]}
@@ -38,11 +38,29 @@ export declare function _refreshBaseSystemPromptFromActiveTools(this: AgentSessi
38
38
  /** Diff structured prompt state; executable tool changes are declared by the agent loop. */
39
39
  export declare function _preparePromptAndToolLoadout(this: AgentSession, options: NormalizedBuildSystemPromptOptions, messages?: AgentMessage[]): SystemMessage | undefined;
40
40
  export declare function preservesInitialToolLoadout(session: AgentSession): boolean;
41
+ /** The tools the selected transcript records, and every tool it ever added or removed. */
42
+ export interface RecordedToolLoadout {
43
+ readonly current: readonly string[];
44
+ readonly mentioned: ReadonlySet<string>;
45
+ }
46
+ /** The recorded loadout of the selected branch, or undefined when it recorded none. */
47
+ export declare function recordedToolLoadout(session: AgentSession): RecordedToolLoadout | undefined;
48
+ /**
49
+ * Whether restoring a transcript activates a registered tool it never mentioned. Such an extension tool
50
+ * was registered after the branch recorded its loadout, so it activates like a newly registered tool.
51
+ * Built-in tools follow `defaultTools` instead, and opt-in tools stay inactive until a selection names them.
52
+ */
53
+ export declare function activatesAfterRecordedLoadout(session: AgentSession, recorded: RecordedToolLoadout, name: string, definition: {
54
+ exposure?: string;
55
+ defaultActive?: boolean;
56
+ } | undefined): boolean;
41
57
  /**
42
58
  * Restore registered tools from the selected transcript, not another branch's live state.
43
59
  *
44
60
  * Explicit tool selections keep their built-in loadout while restoring dynamically registered tools.
45
- * Default selections restore the recorded loadout with any CLI modifiers applied.
61
+ * Default selections restore the recorded loadout with any CLI modifiers applied. Extension tools the
62
+ * branch never added or removed were registered after it recorded its loadout, so they are activated
63
+ * like newly registered tools.
46
64
  */
47
65
  export declare function _restoreToolsFromTranscript(this: AgentSession, options?: {
48
66
  startup?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-state.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,KAAK,EAAE,2BAA2B,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE9F,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGtE,OAAO,EAIN,KAAK,kCAAkC,EAEvC,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAIN,KAAK,gBAAgB,EACrB,MAAM,kBAAkB,CAAC;AAE1B,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE,CAE/D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE,CAEjE;AAED;;GAEG;AAEH,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,QAAQ,EAAE,CAc1D;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAE9F;AAUD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,gBAAgB,CAelE;AAED;;;;;GAKG;AAEH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAKlF;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAI7E;AAED,sEAAsE;AAEtE,wBAAgB,eAAe,CAC9B,IAAI,EAAE,YAAY,EAClB,YAAY,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAAC,aAAa,CAAC,EAAE,aAAa,CAAA;CAAE,CAAC,GACvE,IAAI,CAEN;AAED,kCAAkC;AAElC,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAOxG;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,EAAE,CAazG;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAmClF;AAED,wBAAgB,uCAAuC,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAEhF;AAED,4FAA4F;AAC5F,wBAAgB,4BAA4B,CAC3C,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,kCAAkC,EAC3C,QAAQ,GAAE,YAAY,EAA8B,GAClD,aAAa,GAAG,SAAS,CAS3B;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAM1E;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAkBrG;AAMD;;;;;;;;GAQG;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;CAepC,CAAC"}
1
+ {"version":3,"file":"agent-session-state.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-state.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- import { getCurrentSystemMessage } from "@bastani/pi-ai";
1
+ import { getCurrentSystemMessage, getCurrentTools } from "@bastani/pi-ai";
2
2
  import { getCallableTools } from "./agent-session-nested-tools.js";
3
3
  import { applyToolModifiers } from "./settings-merge.js";
4
4
  import { getSkillCatalog } from "./skill-catalog.js";
5
5
  import { buildSystemPrompt, buildSystemPromptSections, diffSystemPromptSections, normalizeBuildSystemPromptOptions, } from "./system-prompt.js";
6
6
  import { applyToolLoadout, isToolDeclarationHidden } from "./tool-loadout.js";
7
- import { selectedToolNames } from "./tool-selection.js";
7
+ import { activatesOnRegistration, selectedToolNames } from "./tool-selection.js";
8
8
  import { buildToolStatusReport, describeToolSelection, } from "./tool-status.js";
9
9
  export function getActiveToolNames() {
10
10
  return this.agent.state.tools.map((t) => t.name);
@@ -158,20 +158,55 @@ export function preservesInitialToolLoadout(session) {
158
158
  session._orchestrationContext?.kind === "workflow-stage" ||
159
159
  (session._subagentPolicy?.depth ?? 0) >= 1);
160
160
  }
161
+ /** The recorded loadout of the selected branch, or undefined when it recorded none. */
162
+ export function recordedToolLoadout(session) {
163
+ // All system messages on the branch, including those before a compaction, whose snapshot lists only
164
+ // the tools still added. Replaying them gives the current loadout and every tool the branch mentioned.
165
+ const systemMessages = session.sessionManager
166
+ .getBranch()
167
+ .flatMap((entry) => entry.type === "message" && entry.message.role === "system"
168
+ ? [entry.message]
169
+ : entry.type === "compaction" && entry.systemMessage
170
+ ? [entry.systemMessage]
171
+ : []);
172
+ if (systemMessages.length === 0)
173
+ return undefined;
174
+ return {
175
+ current: getCurrentTools(systemMessages).map((tool) => tool.name),
176
+ mentioned: new Set(systemMessages
177
+ .flatMap((message) => [...(message.toolsAdded ?? []), ...(message.toolsRemoved ?? [])])
178
+ .map((tool) => tool.name)),
179
+ };
180
+ }
181
+ /**
182
+ * Whether restoring a transcript activates a registered tool it never mentioned. Such an extension tool
183
+ * was registered after the branch recorded its loadout, so it activates like a newly registered tool.
184
+ * Built-in tools follow `defaultTools` instead, and opt-in tools stay inactive until a selection names them.
185
+ */
186
+ export function activatesAfterRecordedLoadout(session, recorded, name, definition) {
187
+ return (!recorded.mentioned.has(name) &&
188
+ !session._baseToolDefinitions.has(name) &&
189
+ activatesOnRegistration(session, name, definition, false));
190
+ }
161
191
  /**
162
192
  * Restore registered tools from the selected transcript, not another branch's live state.
163
193
  *
164
194
  * Explicit tool selections keep their built-in loadout while restoring dynamically registered tools.
165
- * Default selections restore the recorded loadout with any CLI modifiers applied.
195
+ * Default selections restore the recorded loadout with any CLI modifiers applied. Extension tools the
196
+ * branch never added or removed were registered after it recorded its loadout, so they are activated
197
+ * like newly registered tools.
166
198
  */
167
199
  export function _restoreToolsFromTranscript(options) {
168
200
  this._pendingToolNames.clear();
169
- const current = getCurrentSystemMessage(this.sessionManager.buildSessionContext().messages);
170
- if (!current)
201
+ const recorded = recordedToolLoadout(this);
202
+ // No recorded loadout: keep the current tools.
203
+ if (!recorded)
171
204
  return;
172
205
  const keepLoadout = options?.startup && preservesInitialToolLoadout(this);
173
206
  const modifiers = options?.startup && this._usesDefaultTools ? this._defaultToolModifiers : [];
174
- const declared = applyToolModifiers((current.toolsAdded ?? []).map((tool) => tool.name), modifiers);
207
+ // Removed tools are mentioned too, so they stay inactive.
208
+ const newTools = [...this._toolRegistry.keys()].filter((name) => activatesAfterRecordedLoadout(this, recorded, name, this._toolDefinitions.get(name)?.definition));
209
+ const declared = applyToolModifiers([...recorded.current, ...newTools], modifiers);
175
210
  if (!keepLoadout) {
176
211
  this._pendingToolNames = new Set(declared);
177
212
  this._setActiveTools(declared);
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-state.js","sourceRoot":"","sources":["../../src/core/agent-session-state.ts"],"names":[],"mappings":"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","sourcesContent":["import { getCurrentSystemMessage, type SystemMessage } from \"@bastani/pi-ai\";\nimport type { Api, Model } from \"@bastani/pi-ai/compat\";\nimport type { AgentMessage, ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { AgentSessionInternalSurface as AgentSession } from \"./agent-session-methods.ts\";\nimport { getCallableTools } from \"./agent-session-nested-tools.js\";\nimport type { ToolDefinition, ToolInfo } from \"./extensions/index.js\";\nimport { applyToolModifiers } from \"./settings-merge.js\";\nimport { getSkillCatalog } from \"./skill-catalog.ts\";\nimport {\n\tbuildSystemPrompt,\n\tbuildSystemPromptSections,\n\tdiffSystemPromptSections,\n\ttype NormalizedBuildSystemPromptOptions,\n\tnormalizeBuildSystemPromptOptions,\n} from \"./system-prompt.ts\";\nimport { applyToolLoadout, isToolDeclarationHidden } from \"./tool-loadout.js\";\nimport { selectedToolNames } from \"./tool-selection.ts\";\nimport {\n\tbuildToolStatusReport,\n\tdescribeToolSelection,\n\ttype ToolSelectionSource,\n\ttype ToolStatusReport,\n} from \"./tool-status.js\";\n\nexport function getActiveToolNames(this: AgentSession): string[] {\n\treturn this.agent.state.tools.map((t) => t.name);\n}\n\nexport function getCallableToolNames(this: AgentSession): string[] {\n\treturn getCallableTools(this).map((tool) => tool.name);\n}\n\n/**\n * Get all configured tools with name, description, parameter schema, and source metadata.\n */\n\nexport function getAllTools(this: AgentSession): ToolInfo[] {\n\treturn Array.from(this._toolDefinitions.values()).map(({ definition, sourceInfo }) => ({\n\t\tname: definition.name,\n\t\tdescription: definition.description,\n\t\tparameters: definition.parameters,\n\t\t...(Object.hasOwn(definition, \"constrainedSampling\")\n\t\t\t? { constrainedSampling: definition.constrainedSampling }\n\t\t\t: {}),\n\t\tpromptGuidelines: definition.promptGuidelines,\n\t\texposure: definition.exposure ?? \"direct\",\n\t\tnamespace: definition.namespace,\n\t\tannotations: definition.annotations,\n\t\tsourceInfo,\n\t}));\n}\n\nexport function getToolDefinition(this: AgentSession, name: string): ToolDefinition | undefined {\n\treturn this._toolDefinitions.get(name)?.definition;\n}\n\nfunction toolSelectionSource(session: AgentSession): ToolSelectionSource {\n\tif (session._usesDefaultTools) {\n\t\treturn session.settingsManager.getDefaultTools() === undefined ? \"built-in-defaults\" : \"default-tools-setting\";\n\t}\n\tif (session._allowedToolNames) return session._allowedToolNames.size === 0 ? \"no-tools\" : \"tools-allowlist\";\n\treturn (session._initialActiveToolNames?.length ?? 0) > 0 ? \"explicit-selection\" : \"no-built-in-tools\";\n}\n\n/**\n * Explain every registered tool (active or not, and why), where the tool selection came from,\n * and which selected names nothing registered. Format it with `formatToolStatus()`.\n */\nexport function getToolStatus(this: AgentSession): ToolStatusReport {\n\tconst source = toolSelectionSource(this);\n\tconst modifiers = [...this._defaultToolModifiers];\n\treturn buildToolStatusReport({\n\t\ttools: [...this._toolDefinitions.values()],\n\t\tactiveToolNames: this.getActiveToolNames(),\n\t\tselection: {\n\t\t\tsource,\n\t\t\tdescription: describeToolSelection(source, modifiers),\n\t\t\tnames: [...selectedToolNames(this)],\n\t\t\tmodifiers,\n\t\t},\n\t\tisExcluded: this._excludedTools,\n\t\tisAllowed: this._allowedTools,\n\t});\n}\n\n/**\n * Set active tools by name.\n * Only tools in the registry can be enabled. Unknown tool names are ignored.\n * Also rebuilds the system prompt to reflect the new tool set.\n * Changes take effect on the next agent turn.\n */\n\nexport function setActiveToolsByName(this: AgentSession, toolNames: string[]): void {\n\tconst previous = this.getActiveToolNames();\n\tthis._setActiveTools(toolNames);\n\tconst active = new Set(this.getActiveToolNames());\n\tif (previous.some((name) => !active.has(name))) this._pendingToolNames.clear();\n}\n\nexport function _setActiveTools(this: AgentSession, toolNames: string[]): void {\n\tconst tools = applyToolLoadout(this, toolNames);\n\tfor (const tool of tools) this._pendingToolNames.delete(tool.name);\n\tthis._rebuildSystemPrompt(tools.map((tool) => tool.name));\n}\n\n/** Whether compaction or branch summarization is currently running */\n\nexport function setScopedModels(\n\tthis: AgentSession,\n\tscopedModels: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>,\n): void {\n\tthis._scopedModels = scopedModels;\n}\n\n/** File-based prompt templates */\n\nexport function _normalizePromptSnippet(this: AgentSession, text: string | undefined): string | undefined {\n\tif (!text) return undefined;\n\tconst oneLine = text\n\t\t.replace(/[\\r\\n]+/g, \" \")\n\t\t.replace(/\\s+/g, \" \")\n\t\t.trim();\n\treturn oneLine.length > 0 ? oneLine : undefined;\n}\n\nexport function _normalizePromptGuidelines(this: AgentSession, guidelines: string[] | undefined): string[] {\n\tif (!guidelines || guidelines.length === 0) {\n\t\treturn [];\n\t}\n\n\tconst unique = new Set<string>();\n\tfor (const guideline of guidelines) {\n\t\tconst normalized = guideline.trim();\n\t\tif (normalized.length > 0) {\n\t\t\tunique.add(normalized);\n\t\t}\n\t}\n\treturn Array.from(unique);\n}\n\nexport function _rebuildSystemPrompt(this: AgentSession, toolNames: string[]): void {\n\tconst validToolNames = toolNames.filter((name) => this._toolRegistry.has(name));\n\tconst toolSnippets: Record<string, string> = {};\n\tfor (const name of this._toolRegistry.keys()) {\n\t\tconst snippet = this._toolPromptSnippets.get(name);\n\t\tif (snippet) {\n\t\t\ttoolSnippets[name] = snippet;\n\t\t}\n\t}\n\n\tconst loaderSystemPrompt = this._resourceLoader.getSystemPrompt();\n\tconst loaderAppendSystemPrompt = this._resourceLoader.getAppendSystemPrompt();\n\tconst appendSystemPrompt = loaderAppendSystemPrompt.length > 0 ? loaderAppendSystemPrompt.join(\"\\n\\n\") : undefined;\n\tconst loadedSkills = getSkillCatalog(this._resourceLoader).modelSkills();\n\tconst loadedContextFiles = this._resourceLoader.getAgentsFiles().agentsFiles;\n\n\tthis._baseSystemPromptOptions = normalizeBuildSystemPromptOptions({\n\t\tcwd: this._cwd,\n\t\tselectedModel: this.model,\n\t\tselectedThinkingLevel: this.thinkingLevel,\n\t\tskills: loadedSkills,\n\t\tcontextFiles: loadedContextFiles,\n\t\tcustomPrompt: loaderSystemPrompt,\n\t\tappendSystemPrompt,\n\t\tselectedTools: validToolNames,\n\t\thiddenTools: validToolNames.filter((name) => isToolDeclarationHidden(this, name)),\n\t\texcludedTools: this._excludedToolNames ? Array.from(this._excludedToolNames) : undefined,\n\t\ttoolSnippets,\n\t\ttoolGuidelines: Object.fromEntries(this._toolPromptGuidelines),\n\t});\n\tif (this._systemPromptTransform) {\n\t\tthis._baseSystemPromptOptions.forceSystemPrompt = this._systemPromptTransform(\n\t\t\tbuildSystemPrompt(this._baseSystemPromptOptions),\n\t\t);\n\t}\n}\n\nexport function _refreshBaseSystemPromptFromActiveTools(this: AgentSession): void {\n\tthis._rebuildSystemPrompt(this.getActiveToolNames());\n}\n\n/** Diff structured prompt state; executable tool changes are declared by the agent loop. */\nexport function _preparePromptAndToolLoadout(\n\tthis: AgentSession,\n\toptions: NormalizedBuildSystemPromptOptions,\n\tmessages: AgentMessage[] = this.agent.state.messages,\n): SystemMessage | undefined {\n\tconst current = getCurrentSystemMessage(messages);\n\tconst selected = [...new Set(options.selectedTools)].filter((name) => this._toolRegistry.has(name));\n\tconst recorded = (current?.toolsAdded ?? []).map((tool) => tool.name).filter((name) => selected.includes(name));\n\toptions.selectedTools = [...recorded, ...selected.filter((name) => !recorded.includes(name))];\n\toptions.selectedTools = applyToolLoadout(this, options.selectedTools).map((tool) => tool.name);\n\toptions.hiddenTools = options.selectedTools.filter((name) => isToolDeclarationHidden(this, name));\n\tconst sections = diffSystemPromptSections(current?.sections ?? {}, buildSystemPromptSections(options));\n\treturn sections ? { role: \"system\", content: \"\", sections, timestamp: Date.now() } : undefined;\n}\n\nexport function preservesInitialToolLoadout(session: AgentSession): boolean {\n\treturn (\n\t\t(!session._usesDefaultTools && session._initialActiveToolNames !== undefined) ||\n\t\tsession._orchestrationContext?.kind === \"workflow-stage\" ||\n\t\t(session._subagentPolicy?.depth ?? 0) >= 1\n\t);\n}\n\n/**\n * Restore registered tools from the selected transcript, not another branch's live state.\n *\n * Explicit tool selections keep their built-in loadout while restoring dynamically registered tools.\n * Default selections restore the recorded loadout with any CLI modifiers applied.\n */\nexport function _restoreToolsFromTranscript(this: AgentSession, options?: { startup?: boolean }): void {\n\tthis._pendingToolNames.clear();\n\tconst current = getCurrentSystemMessage(this.sessionManager.buildSessionContext().messages);\n\tif (!current) return;\n\tconst keepLoadout = options?.startup && preservesInitialToolLoadout(this);\n\tconst modifiers = options?.startup && this._usesDefaultTools ? this._defaultToolModifiers : [];\n\tconst declared = applyToolModifiers(\n\t\t(current.toolsAdded ?? []).map((tool) => tool.name),\n\t\tmodifiers,\n\t);\n\tif (!keepLoadout) {\n\t\tthis._pendingToolNames = new Set(declared);\n\t\tthis._setActiveTools(declared);\n\t\treturn;\n\t}\n\tconst restored = declared.filter((name) => !this._baseToolDefinitions.has(name));\n\tthis._pendingToolNames = new Set(restored);\n\tthis._setActiveTools(applyToolModifiers([...this.getActiveToolNames(), ...restored], modifiers));\n}\n\n// =========================================================================\n// Prompting\n// =========================================================================\n\n/**\n * Send a prompt to the agent.\n * - Handles extension commands (registered via pi.registerCommand) immediately, even during streaming\n * - Expands file-based prompt templates by default\n * - During streaming, queues via steer() or followUp() based on streamingBehavior option\n * - Validates model and API key before sending (when not streaming)\n * @throws Error if streaming and no streamingBehavior specified\n * @throws Error if no model selected or no API key available (when not streaming)\n */\n\nexport const agentSessionStateMethods = {\n\tgetActiveToolNames,\n\tgetCallableToolNames,\n\tgetAllTools,\n\tgetToolDefinition,\n\tgetToolStatus,\n\tsetActiveToolsByName,\n\t_setActiveTools,\n\tsetScopedModels,\n\t_normalizePromptSnippet,\n\t_normalizePromptGuidelines,\n\t_rebuildSystemPrompt,\n\t_preparePromptAndToolLoadout,\n\t_restoreToolsFromTranscript,\n\t_refreshBaseSystemPromptFromActiveTools,\n};\n"]}
1
+ {"version":3,"file":"agent-session-state.js","sourceRoot":"","sources":["../../src/core/agent-session-state.ts"],"names":[],"mappings":"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","sourcesContent":["import { getCurrentSystemMessage, getCurrentTools, type SystemMessage } from \"@bastani/pi-ai\";\nimport type { Api, Model } from \"@bastani/pi-ai/compat\";\nimport type { AgentMessage, ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { AgentSessionInternalSurface as AgentSession } from \"./agent-session-methods.ts\";\nimport { getCallableTools } from \"./agent-session-nested-tools.js\";\nimport type { ToolDefinition, ToolInfo } from \"./extensions/index.js\";\nimport { applyToolModifiers } from \"./settings-merge.js\";\nimport { getSkillCatalog } from \"./skill-catalog.ts\";\nimport {\n\tbuildSystemPrompt,\n\tbuildSystemPromptSections,\n\tdiffSystemPromptSections,\n\ttype NormalizedBuildSystemPromptOptions,\n\tnormalizeBuildSystemPromptOptions,\n} from \"./system-prompt.ts\";\nimport { applyToolLoadout, isToolDeclarationHidden } from \"./tool-loadout.js\";\nimport { activatesOnRegistration, selectedToolNames } from \"./tool-selection.ts\";\nimport {\n\tbuildToolStatusReport,\n\tdescribeToolSelection,\n\ttype ToolSelectionSource,\n\ttype ToolStatusReport,\n} from \"./tool-status.js\";\n\nexport function getActiveToolNames(this: AgentSession): string[] {\n\treturn this.agent.state.tools.map((t) => t.name);\n}\n\nexport function getCallableToolNames(this: AgentSession): string[] {\n\treturn getCallableTools(this).map((tool) => tool.name);\n}\n\n/**\n * Get all configured tools with name, description, parameter schema, and source metadata.\n */\n\nexport function getAllTools(this: AgentSession): ToolInfo[] {\n\treturn Array.from(this._toolDefinitions.values()).map(({ definition, sourceInfo }) => ({\n\t\tname: definition.name,\n\t\tdescription: definition.description,\n\t\tparameters: definition.parameters,\n\t\t...(Object.hasOwn(definition, \"constrainedSampling\")\n\t\t\t? { constrainedSampling: definition.constrainedSampling }\n\t\t\t: {}),\n\t\tpromptGuidelines: definition.promptGuidelines,\n\t\texposure: definition.exposure ?? \"direct\",\n\t\tnamespace: definition.namespace,\n\t\tannotations: definition.annotations,\n\t\tsourceInfo,\n\t}));\n}\n\nexport function getToolDefinition(this: AgentSession, name: string): ToolDefinition | undefined {\n\treturn this._toolDefinitions.get(name)?.definition;\n}\n\nfunction toolSelectionSource(session: AgentSession): ToolSelectionSource {\n\tif (session._usesDefaultTools) {\n\t\treturn session.settingsManager.getDefaultTools() === undefined ? \"built-in-defaults\" : \"default-tools-setting\";\n\t}\n\tif (session._allowedToolNames) return session._allowedToolNames.size === 0 ? \"no-tools\" : \"tools-allowlist\";\n\treturn (session._initialActiveToolNames?.length ?? 0) > 0 ? \"explicit-selection\" : \"no-built-in-tools\";\n}\n\n/**\n * Explain every registered tool (active or not, and why), where the tool selection came from,\n * and which selected names nothing registered. Format it with `formatToolStatus()`.\n */\nexport function getToolStatus(this: AgentSession): ToolStatusReport {\n\tconst source = toolSelectionSource(this);\n\tconst modifiers = [...this._defaultToolModifiers];\n\treturn buildToolStatusReport({\n\t\ttools: [...this._toolDefinitions.values()],\n\t\tactiveToolNames: this.getActiveToolNames(),\n\t\tselection: {\n\t\t\tsource,\n\t\t\tdescription: describeToolSelection(source, modifiers),\n\t\t\tnames: [...selectedToolNames(this)],\n\t\t\tmodifiers,\n\t\t},\n\t\tisExcluded: this._excludedTools,\n\t\tisAllowed: this._allowedTools,\n\t});\n}\n\n/**\n * Set active tools by name.\n * Only tools in the registry can be enabled. Unknown tool names are ignored.\n * Also rebuilds the system prompt to reflect the new tool set.\n * Changes take effect on the next agent turn.\n */\n\nexport function setActiveToolsByName(this: AgentSession, toolNames: string[]): void {\n\tconst previous = this.getActiveToolNames();\n\tthis._setActiveTools(toolNames);\n\tconst active = new Set(this.getActiveToolNames());\n\tif (previous.some((name) => !active.has(name))) this._pendingToolNames.clear();\n}\n\nexport function _setActiveTools(this: AgentSession, toolNames: string[]): void {\n\tconst tools = applyToolLoadout(this, toolNames);\n\tfor (const tool of tools) this._pendingToolNames.delete(tool.name);\n\tthis._rebuildSystemPrompt(tools.map((tool) => tool.name));\n}\n\n/** Whether compaction or branch summarization is currently running */\n\nexport function setScopedModels(\n\tthis: AgentSession,\n\tscopedModels: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>,\n): void {\n\tthis._scopedModels = scopedModels;\n}\n\n/** File-based prompt templates */\n\nexport function _normalizePromptSnippet(this: AgentSession, text: string | undefined): string | undefined {\n\tif (!text) return undefined;\n\tconst oneLine = text\n\t\t.replace(/[\\r\\n]+/g, \" \")\n\t\t.replace(/\\s+/g, \" \")\n\t\t.trim();\n\treturn oneLine.length > 0 ? oneLine : undefined;\n}\n\nexport function _normalizePromptGuidelines(this: AgentSession, guidelines: string[] | undefined): string[] {\n\tif (!guidelines || guidelines.length === 0) {\n\t\treturn [];\n\t}\n\n\tconst unique = new Set<string>();\n\tfor (const guideline of guidelines) {\n\t\tconst normalized = guideline.trim();\n\t\tif (normalized.length > 0) {\n\t\t\tunique.add(normalized);\n\t\t}\n\t}\n\treturn Array.from(unique);\n}\n\nexport function _rebuildSystemPrompt(this: AgentSession, toolNames: string[]): void {\n\tconst validToolNames = toolNames.filter((name) => this._toolRegistry.has(name));\n\tconst toolSnippets: Record<string, string> = {};\n\tfor (const name of this._toolRegistry.keys()) {\n\t\tconst snippet = this._toolPromptSnippets.get(name);\n\t\tif (snippet) {\n\t\t\ttoolSnippets[name] = snippet;\n\t\t}\n\t}\n\n\tconst loaderSystemPrompt = this._resourceLoader.getSystemPrompt();\n\tconst loaderAppendSystemPrompt = this._resourceLoader.getAppendSystemPrompt();\n\tconst appendSystemPrompt = loaderAppendSystemPrompt.length > 0 ? loaderAppendSystemPrompt.join(\"\\n\\n\") : undefined;\n\tconst loadedSkills = getSkillCatalog(this._resourceLoader).modelSkills();\n\tconst loadedContextFiles = this._resourceLoader.getAgentsFiles().agentsFiles;\n\n\tthis._baseSystemPromptOptions = normalizeBuildSystemPromptOptions({\n\t\tcwd: this._cwd,\n\t\tselectedModel: this.model,\n\t\tselectedThinkingLevel: this.thinkingLevel,\n\t\tskills: loadedSkills,\n\t\tcontextFiles: loadedContextFiles,\n\t\tcustomPrompt: loaderSystemPrompt,\n\t\tappendSystemPrompt,\n\t\tselectedTools: validToolNames,\n\t\thiddenTools: validToolNames.filter((name) => isToolDeclarationHidden(this, name)),\n\t\texcludedTools: this._excludedToolNames ? Array.from(this._excludedToolNames) : undefined,\n\t\ttoolSnippets,\n\t\ttoolGuidelines: Object.fromEntries(this._toolPromptGuidelines),\n\t});\n\tif (this._systemPromptTransform) {\n\t\tthis._baseSystemPromptOptions.forceSystemPrompt = this._systemPromptTransform(\n\t\t\tbuildSystemPrompt(this._baseSystemPromptOptions),\n\t\t);\n\t}\n}\n\nexport function _refreshBaseSystemPromptFromActiveTools(this: AgentSession): void {\n\tthis._rebuildSystemPrompt(this.getActiveToolNames());\n}\n\n/** Diff structured prompt state; executable tool changes are declared by the agent loop. */\nexport function _preparePromptAndToolLoadout(\n\tthis: AgentSession,\n\toptions: NormalizedBuildSystemPromptOptions,\n\tmessages: AgentMessage[] = this.agent.state.messages,\n): SystemMessage | undefined {\n\tconst current = getCurrentSystemMessage(messages);\n\tconst selected = [...new Set(options.selectedTools)].filter((name) => this._toolRegistry.has(name));\n\tconst recorded = (current?.toolsAdded ?? []).map((tool) => tool.name).filter((name) => selected.includes(name));\n\toptions.selectedTools = [...recorded, ...selected.filter((name) => !recorded.includes(name))];\n\toptions.selectedTools = applyToolLoadout(this, options.selectedTools).map((tool) => tool.name);\n\toptions.hiddenTools = options.selectedTools.filter((name) => isToolDeclarationHidden(this, name));\n\tconst sections = diffSystemPromptSections(current?.sections ?? {}, buildSystemPromptSections(options));\n\treturn sections ? { role: \"system\", content: \"\", sections, timestamp: Date.now() } : undefined;\n}\n\nexport function preservesInitialToolLoadout(session: AgentSession): boolean {\n\treturn (\n\t\t(!session._usesDefaultTools && session._initialActiveToolNames !== undefined) ||\n\t\tsession._orchestrationContext?.kind === \"workflow-stage\" ||\n\t\t(session._subagentPolicy?.depth ?? 0) >= 1\n\t);\n}\n\n/** The tools the selected transcript records, and every tool it ever added or removed. */\nexport interface RecordedToolLoadout {\n\treadonly current: readonly string[];\n\treadonly mentioned: ReadonlySet<string>;\n}\n\n/** The recorded loadout of the selected branch, or undefined when it recorded none. */\nexport function recordedToolLoadout(session: AgentSession): RecordedToolLoadout | undefined {\n\t// All system messages on the branch, including those before a compaction, whose snapshot lists only\n\t// the tools still added. Replaying them gives the current loadout and every tool the branch mentioned.\n\tconst systemMessages = session.sessionManager\n\t\t.getBranch()\n\t\t.flatMap((entry) =>\n\t\t\tentry.type === \"message\" && entry.message.role === \"system\"\n\t\t\t\t? [entry.message]\n\t\t\t\t: entry.type === \"compaction\" && entry.systemMessage\n\t\t\t\t\t? [entry.systemMessage]\n\t\t\t\t\t: [],\n\t\t);\n\tif (systemMessages.length === 0) return undefined;\n\treturn {\n\t\tcurrent: getCurrentTools(systemMessages).map((tool) => tool.name),\n\t\tmentioned: new Set(\n\t\t\tsystemMessages\n\t\t\t\t.flatMap((message) => [...(message.toolsAdded ?? []), ...(message.toolsRemoved ?? [])])\n\t\t\t\t.map((tool) => tool.name),\n\t\t),\n\t};\n}\n\n/**\n * Whether restoring a transcript activates a registered tool it never mentioned. Such an extension tool\n * was registered after the branch recorded its loadout, so it activates like a newly registered tool.\n * Built-in tools follow `defaultTools` instead, and opt-in tools stay inactive until a selection names them.\n */\nexport function activatesAfterRecordedLoadout(\n\tsession: AgentSession,\n\trecorded: RecordedToolLoadout,\n\tname: string,\n\tdefinition: { exposure?: string; defaultActive?: boolean } | undefined,\n): boolean {\n\treturn (\n\t\t!recorded.mentioned.has(name) &&\n\t\t!session._baseToolDefinitions.has(name) &&\n\t\tactivatesOnRegistration(session, name, definition, false)\n\t);\n}\n\n/**\n * Restore registered tools from the selected transcript, not another branch's live state.\n *\n * Explicit tool selections keep their built-in loadout while restoring dynamically registered tools.\n * Default selections restore the recorded loadout with any CLI modifiers applied. Extension tools the\n * branch never added or removed were registered after it recorded its loadout, so they are activated\n * like newly registered tools.\n */\nexport function _restoreToolsFromTranscript(this: AgentSession, options?: { startup?: boolean }): void {\n\tthis._pendingToolNames.clear();\n\tconst recorded = recordedToolLoadout(this);\n\t// No recorded loadout: keep the current tools.\n\tif (!recorded) return;\n\tconst keepLoadout = options?.startup && preservesInitialToolLoadout(this);\n\tconst modifiers = options?.startup && this._usesDefaultTools ? this._defaultToolModifiers : [];\n\t// Removed tools are mentioned too, so they stay inactive.\n\tconst newTools = [...this._toolRegistry.keys()].filter((name) =>\n\t\tactivatesAfterRecordedLoadout(this, recorded, name, this._toolDefinitions.get(name)?.definition),\n\t);\n\tconst declared = applyToolModifiers([...recorded.current, ...newTools], modifiers);\n\tif (!keepLoadout) {\n\t\tthis._pendingToolNames = new Set(declared);\n\t\tthis._setActiveTools(declared);\n\t\treturn;\n\t}\n\tconst restored = declared.filter((name) => !this._baseToolDefinitions.has(name));\n\tthis._pendingToolNames = new Set(restored);\n\tthis._setActiveTools(applyToolModifiers([...this.getActiveToolNames(), ...restored], modifiers));\n}\n\n// =========================================================================\n// Prompting\n// =========================================================================\n\n/**\n * Send a prompt to the agent.\n * - Handles extension commands (registered via pi.registerCommand) immediately, even during streaming\n * - Expands file-based prompt templates by default\n * - During streaming, queues via steer() or followUp() based on streamingBehavior option\n * - Validates model and API key before sending (when not streaming)\n * @throws Error if streaming and no streamingBehavior specified\n * @throws Error if no model selected or no API key available (when not streaming)\n */\n\nexport const agentSessionStateMethods = {\n\tgetActiveToolNames,\n\tgetCallableToolNames,\n\tgetAllTools,\n\tgetToolDefinition,\n\tgetToolStatus,\n\tsetActiveToolsByName,\n\t_setActiveTools,\n\tsetScopedModels,\n\t_normalizePromptSnippet,\n\t_normalizePromptGuidelines,\n\t_rebuildSystemPrompt,\n\t_preparePromptAndToolLoadout,\n\t_restoreToolsFromTranscript,\n\t_refreshBaseSystemPromptFromActiveTools,\n};\n"]}
@@ -1,4 +1,4 @@
1
- import type { Credential } from "@bastani/pi-ai";
1
+ import { type Credential } from "@bastani/pi-ai";
2
2
  export type LockResult<T> = {
3
3
  result: T;
4
4
  next?: string;
@@ -33,6 +33,8 @@ export declare class FileAuthStorageBackend implements AuthStorageBackend {
33
33
  private ensureParentDir;
34
34
  private ensureFileExists;
35
35
  private getRetryableLockErrorCode;
36
+ /** Takes a provider lock, waiting up to PROVIDER_LOCK_WAIT_MS for its holder; the caller's signal stops the wait. */
37
+ private acquireProviderLock;
36
38
  private acquireLockSyncWithRetry;
37
39
  private readMergedAuth;
38
40
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"auth-storage-backends.d.ts","sourceRoot":"","sources":["../../src/core/auth-storage-backends.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth-storage-backends.d.ts","sourceRoot":"","sources":["../../src/core/auth-storage-backends.ts"],"names":[],"mappings":"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"}