@bastani/atomic 0.9.17 → 0.9.18-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/builtin/intercom/index.bundle.mjs +349 -57517
  3. package/dist/builtin/intercom/package.json +1 -1
  4. package/dist/builtin/mcp/index.bundle.mjs +28948 -58339
  5. package/dist/builtin/mcp/package.json +1 -1
  6. package/dist/builtin/mcp/xdg-open +1267 -0
  7. package/dist/builtin/subagents/package.json +1 -1
  8. package/dist/builtin/subagents/src/extension/index.bundle.mjs +7929 -78021
  9. package/dist/builtin/web-access/index.bundle.mjs +70791 -57707
  10. package/dist/builtin/web-access/package.json +1 -1
  11. package/dist/builtin/workflows/builtin/adversarial-verification.js +0 -1
  12. package/dist/builtin/workflows/builtin/{chunk-3y1hmzw6.js → chunk-6v0yv8tj.js} +1 -1
  13. package/dist/builtin/workflows/builtin/{chunk-w9c7rkrk.js → chunk-brerg33r.js} +5 -7
  14. package/dist/builtin/workflows/builtin/{chunk-bz1c9732.js → chunk-ngffz3y8.js} +1 -1
  15. package/dist/builtin/workflows/builtin/{chunk-6rbajjf5.js → chunk-szz1ajz9.js} +1 -3
  16. package/dist/builtin/workflows/builtin/classify-and-act.js +0 -1
  17. package/dist/builtin/workflows/builtin/fan-out-and-synthesize.js +0 -1
  18. package/dist/builtin/workflows/builtin/generate-and-filter.js +0 -1
  19. package/dist/builtin/workflows/builtin/goal.js +2 -5
  20. package/dist/builtin/workflows/builtin/index.js +4 -7
  21. package/dist/builtin/workflows/builtin/loop-until-done.js +0 -1
  22. package/dist/builtin/workflows/builtin/open-claude-design.js +1 -4
  23. package/dist/builtin/workflows/builtin/ralph.js +2 -5
  24. package/dist/builtin/workflows/builtin/steering-context.js +0 -1
  25. package/dist/builtin/workflows/builtin/tournament.js +0 -1
  26. package/dist/builtin/workflows/package.json +1 -1
  27. package/dist/builtin/workflows/src/extension/index.bundle.mjs +39989 -81500
  28. package/dist/builtin/workflows/src/index.js +1253 -58524
  29. package/dist/bun/cli.js.map +1 -1
  30. package/dist/bun/split-loader.js +2 -0
  31. package/dist/bun/split-loader.js.map +1 -1
  32. package/dist/cli/args.js.map +1 -1
  33. package/dist/cli/auth-command.js.map +1 -1
  34. package/dist/cli/session-picker.js.map +1 -1
  35. package/dist/cli/startup-ui.js.map +1 -1
  36. package/dist/cli.js +5 -2
  37. package/dist/cli.js.map +1 -1
  38. package/dist/core/agent-session-extension-bindings.d.ts +19 -2
  39. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  40. package/dist/core/agent-session-extension-bindings.js +253 -74
  41. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  42. package/dist/core/agent-session-methods.d.ts +8 -3
  43. package/dist/core/agent-session-methods.d.ts.map +1 -1
  44. package/dist/core/agent-session-methods.js.map +1 -1
  45. package/dist/core/agent-session-prompt.d.ts +2 -7
  46. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  47. package/dist/core/agent-session-prompt.js +1 -35
  48. package/dist/core/agent-session-prompt.js.map +1 -1
  49. package/dist/core/agent-session-services.d.ts.map +1 -1
  50. package/dist/core/agent-session-services.js +2 -0
  51. package/dist/core/agent-session-services.js.map +1 -1
  52. package/dist/core/agent-session-types.d.ts +2 -0
  53. package/dist/core/agent-session-types.d.ts.map +1 -1
  54. package/dist/core/agent-session-types.js.map +1 -1
  55. package/dist/core/agent-session.d.ts +1 -0
  56. package/dist/core/agent-session.d.ts.map +1 -1
  57. package/dist/core/agent-session.js +2 -0
  58. package/dist/core/agent-session.js.map +1 -1
  59. package/dist/core/auth-guidance.js.map +1 -1
  60. package/dist/core/auth-storage-backends.js.map +1 -1
  61. package/dist/core/auth-storage.js.map +1 -1
  62. package/dist/core/bash-executor.js.map +1 -1
  63. package/dist/core/builtin-packages.d.ts +8 -0
  64. package/dist/core/builtin-packages.d.ts.map +1 -1
  65. package/dist/core/builtin-packages.js +11 -5
  66. package/dist/core/builtin-packages.js.map +1 -1
  67. package/dist/core/event-bus.d.ts +11 -0
  68. package/dist/core/event-bus.d.ts.map +1 -1
  69. package/dist/core/event-bus.js +96 -0
  70. package/dist/core/event-bus.js.map +1 -1
  71. package/dist/core/experimental.js.map +1 -1
  72. package/dist/core/export-html/index.js.map +1 -1
  73. package/dist/core/extensions/builtin-extension-entry-labels.d.ts +6 -0
  74. package/dist/core/extensions/builtin-extension-entry-labels.d.ts.map +1 -0
  75. package/dist/core/extensions/builtin-extension-entry-labels.js +22 -0
  76. package/dist/core/extensions/builtin-extension-entry-labels.js.map +1 -0
  77. package/dist/core/extensions/host-module-bridge.d.ts +22 -0
  78. package/dist/core/extensions/host-module-bridge.d.ts.map +1 -0
  79. package/dist/core/extensions/host-module-bridge.js +39 -0
  80. package/dist/core/extensions/host-module-bridge.js.map +1 -0
  81. package/dist/core/extensions/loader-api.d.ts.map +1 -1
  82. package/dist/core/extensions/loader-api.js +2 -2
  83. package/dist/core/extensions/loader-api.js.map +1 -1
  84. package/dist/core/extensions/loader-core.js.map +1 -1
  85. package/dist/core/extensions/loader-discovery.js.map +1 -1
  86. package/dist/core/extensions/loader-host-modules.d.ts +10 -0
  87. package/dist/core/extensions/loader-host-modules.d.ts.map +1 -0
  88. package/dist/core/extensions/loader-host-modules.js +88 -0
  89. package/dist/core/extensions/loader-host-modules.js.map +1 -0
  90. package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
  91. package/dist/core/extensions/loader-runtime.js +1 -0
  92. package/dist/core/extensions/loader-runtime.js.map +1 -1
  93. package/dist/core/extensions/loader-virtual-modules.d.ts +5 -2
  94. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  95. package/dist/core/extensions/loader-virtual-modules.js +51 -71
  96. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  97. package/dist/core/extensions/loader.d.ts +1 -1
  98. package/dist/core/extensions/loader.js.map +1 -1
  99. package/dist/core/extensions/native-builtin-entries.d.ts +6 -0
  100. package/dist/core/extensions/native-builtin-entries.d.ts.map +1 -0
  101. package/dist/core/extensions/native-builtin-entries.js +23 -0
  102. package/dist/core/extensions/native-builtin-entries.js.map +1 -0
  103. package/dist/core/extensions/runtime-types.d.ts +2 -0
  104. package/dist/core/extensions/runtime-types.d.ts.map +1 -1
  105. package/dist/core/extensions/runtime-types.js.map +1 -1
  106. package/dist/core/keybindings.js.map +1 -1
  107. package/dist/core/lifecycle-timings.d.ts +21 -0
  108. package/dist/core/lifecycle-timings.d.ts.map +1 -0
  109. package/dist/core/lifecycle-timings.js +57 -0
  110. package/dist/core/lifecycle-timings.js.map +1 -0
  111. package/dist/core/mandatory-resource-loader.d.ts.map +1 -1
  112. package/dist/core/mandatory-resource-loader.js +43 -0
  113. package/dist/core/mandatory-resource-loader.js.map +1 -1
  114. package/dist/core/model-runtime.d.ts +8 -0
  115. package/dist/core/model-runtime.d.ts.map +1 -1
  116. package/dist/core/model-runtime.js +82 -0
  117. package/dist/core/model-runtime.js.map +1 -1
  118. package/dist/core/models-store.js.map +1 -1
  119. package/dist/core/package-manager-auto-resources.js.map +1 -1
  120. package/dist/core/package-manager-env.js.map +1 -1
  121. package/dist/core/package-manager-git.js.map +1 -1
  122. package/dist/core/package-manager-manifest.js.map +1 -1
  123. package/dist/core/package-manager-npm.js.map +1 -1
  124. package/dist/core/package-manager-paths.js.map +1 -1
  125. package/dist/core/package-manager-resolver.js.map +1 -1
  126. package/dist/core/project-trust.js.map +1 -1
  127. package/dist/core/prompt-templates-async.js.map +1 -1
  128. package/dist/core/prompt-templates.js.map +1 -1
  129. package/dist/core/provider-attribution.js.map +1 -1
  130. package/dist/core/remote-catalog-provider.js.map +1 -1
  131. package/dist/core/resource-loader-assets.js.map +1 -1
  132. package/dist/core/resource-loader-context-files.js.map +1 -1
  133. package/dist/core/resource-loader-core.d.ts +5 -1
  134. package/dist/core/resource-loader-core.d.ts.map +1 -1
  135. package/dist/core/resource-loader-core.js +90 -1
  136. package/dist/core/resource-loader-core.js.map +1 -1
  137. package/dist/core/resource-loader-discovery.js.map +1 -1
  138. package/dist/core/resource-loader-paths.js.map +1 -1
  139. package/dist/core/resource-loader-source-info.js.map +1 -1
  140. package/dist/core/resource-loader-types.d.ts +16 -0
  141. package/dist/core/resource-loader-types.d.ts.map +1 -1
  142. package/dist/core/resource-loader-types.js.map +1 -1
  143. package/dist/core/sdk.d.ts.map +1 -1
  144. package/dist/core/sdk.js +4 -1
  145. package/dist/core/sdk.js.map +1 -1
  146. package/dist/core/session-manager-core.js.map +1 -1
  147. package/dist/core/session-manager-list.js.map +1 -1
  148. package/dist/core/session-manager-paths.js.map +1 -1
  149. package/dist/core/settings-manager-core.d.ts +6 -0
  150. package/dist/core/settings-manager-core.d.ts.map +1 -1
  151. package/dist/core/settings-manager-core.js +24 -0
  152. package/dist/core/settings-manager-core.js.map +1 -1
  153. package/dist/core/settings-manager-ui-accessors.js.map +1 -1
  154. package/dist/core/settings-storage.js.map +1 -1
  155. package/dist/core/skills-async.js.map +1 -1
  156. package/dist/core/skills.js.map +1 -1
  157. package/dist/core/slash-commands.d.ts.map +1 -1
  158. package/dist/core/slash-commands.js +0 -6
  159. package/dist/core/slash-commands.js.map +1 -1
  160. package/dist/core/system-prompt.js.map +1 -1
  161. package/dist/core/telemetry.js.map +1 -1
  162. package/dist/core/timings.js.map +1 -1
  163. package/dist/core/tools/bash.js.map +1 -1
  164. package/dist/core/tools/output-accumulator.js.map +1 -1
  165. package/dist/core/tools/powershell.js.map +1 -1
  166. package/dist/core/tools/read.js.map +1 -1
  167. package/dist/core/tools/session-temp-cleanup.js.map +1 -1
  168. package/dist/core/tools/session-temp-dir.js.map +1 -1
  169. package/dist/core/tools/todos-paths.js.map +1 -1
  170. package/dist/core/trust-manager.js.map +1 -1
  171. package/dist/index.d.ts +1 -1
  172. package/dist/index.js.map +1 -1
  173. package/dist/main-deferred-startup.d.ts +16 -0
  174. package/dist/main-deferred-startup.d.ts.map +1 -1
  175. package/dist/main-deferred-startup.js +14 -0
  176. package/dist/main-deferred-startup.js.map +1 -1
  177. package/dist/main-session.js.map +1 -1
  178. package/dist/main.d.ts.map +1 -1
  179. package/dist/main.js +41 -22
  180. package/dist/main.js.map +1 -1
  181. package/dist/migrations.js.map +1 -1
  182. package/dist/modes/interactive/chat-input-actions.js.map +1 -1
  183. package/dist/modes/interactive/components/config-selector-list.js.map +1 -1
  184. package/dist/modes/interactive/components/config-selector-project-scope.js.map +1 -1
  185. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  186. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
  187. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  188. package/dist/modes/interactive/components/startup-identity.d.ts.map +1 -1
  189. package/dist/modes/interactive/components/startup-identity.js +4 -0
  190. package/dist/modes/interactive/components/startup-identity.js.map +1 -1
  191. package/dist/modes/interactive/external-editor.js.map +1 -1
  192. package/dist/modes/interactive/interactive-editor-actions.js +13 -5
  193. package/dist/modes/interactive/interactive-editor-actions.js.map +1 -1
  194. package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
  195. package/dist/modes/interactive/interactive-input-handling.js +2 -5
  196. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  197. package/dist/modes/interactive/interactive-mode-deps.d.ts +1 -1
  198. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
  199. package/dist/modes/interactive/interactive-mode-surface.d.ts +8 -8
  200. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  201. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  202. package/dist/modes/interactive/interactive-onboarding.js +1 -1
  203. package/dist/modes/interactive/interactive-onboarding.js.map +1 -1
  204. package/dist/modes/interactive/interactive-prompt-restore.d.ts.map +1 -1
  205. package/dist/modes/interactive/interactive-prompt-restore.js +2 -1
  206. package/dist/modes/interactive/interactive-prompt-restore.js.map +1 -1
  207. package/dist/modes/interactive/interactive-prompt-turn.js.map +1 -1
  208. package/dist/modes/interactive/interactive-render-chat.js +2 -0
  209. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  210. package/dist/modes/interactive/interactive-resource-disclosure.js +21 -53
  211. package/dist/modes/interactive/interactive-resource-disclosure.js.map +1 -1
  212. package/dist/modes/interactive/interactive-resource-paths.js +29 -5
  213. package/dist/modes/interactive/interactive-resource-paths.js.map +1 -1
  214. package/dist/modes/interactive/interactive-resource-rendering.js +66 -69
  215. package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -1
  216. package/dist/modes/interactive/interactive-startup-chat-container.d.ts.map +1 -1
  217. package/dist/modes/interactive/interactive-startup-chat-container.js +2 -0
  218. package/dist/modes/interactive/interactive-startup-chat-container.js.map +1 -1
  219. package/dist/modes/interactive/interactive-startup.d.ts +2 -0
  220. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  221. package/dist/modes/interactive/interactive-startup.js +30 -10
  222. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  223. package/dist/modes/interactive/interactive-tui.d.ts.map +1 -1
  224. package/dist/modes/interactive/interactive-tui.js +12 -2
  225. package/dist/modes/interactive/interactive-tui.js.map +1 -1
  226. package/dist/modes/interactive/theme/global-theme.js.map +1 -1
  227. package/dist/modes/interactive/theme/theme-loading.js.map +1 -1
  228. package/dist/modes/interactive-engine/create-isolated-runtime.js.map +1 -1
  229. package/dist/modes/interactive-engine/engine-child-liveness.d.ts +2 -0
  230. package/dist/modes/interactive-engine/engine-child-liveness.d.ts.map +1 -1
  231. package/dist/modes/interactive-engine/engine-child-liveness.js +16 -2
  232. package/dist/modes/interactive-engine/engine-child-liveness.js.map +1 -1
  233. package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
  234. package/dist/modes/interactive-engine/engine-monitor.d.ts +5 -0
  235. package/dist/modes/interactive-engine/engine-monitor.d.ts.map +1 -1
  236. package/dist/modes/interactive-engine/engine-monitor.js +24 -0
  237. package/dist/modes/interactive-engine/engine-monitor.js.map +1 -1
  238. package/dist/modes/interactive-engine/engine-render-service.js.map +1 -1
  239. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts +3 -1
  240. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts.map +1 -1
  241. package/dist/modes/interactive-engine/extension-ui-bridge.js +6 -0
  242. package/dist/modes/interactive-engine/extension-ui-bridge.js.map +1 -1
  243. package/dist/modes/interactive-engine/isolated-runtime.d.ts +21 -2
  244. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
  245. package/dist/modes/interactive-engine/isolated-runtime.js +160 -7
  246. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  247. package/dist/modes/interactive-engine/protocol.d.ts +9 -4
  248. package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
  249. package/dist/modes/interactive-engine/protocol.js +8 -4
  250. package/dist/modes/interactive-engine/protocol.js.map +1 -1
  251. package/dist/modes/interactive-engine/resource-readiness-error.d.ts +6 -0
  252. package/dist/modes/interactive-engine/resource-readiness-error.d.ts.map +1 -0
  253. package/dist/modes/interactive-engine/resource-readiness-error.js +11 -0
  254. package/dist/modes/interactive-engine/resource-readiness-error.js.map +1 -0
  255. package/dist/modes/rpc/rpc-client-process.d.ts.map +1 -1
  256. package/dist/modes/rpc/rpc-client-process.js +3 -0
  257. package/dist/modes/rpc/rpc-client-process.js.map +1 -1
  258. package/dist/modes/rpc/rpc-client.d.ts +1 -0
  259. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  260. package/dist/modes/rpc/rpc-client.js +5 -1
  261. package/dist/modes/rpc/rpc-client.js.map +1 -1
  262. package/dist/modes/rpc/rpc-command-handler.d.ts +4 -1
  263. package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
  264. package/dist/modes/rpc/rpc-command-handler.js +59 -18
  265. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  266. package/dist/modes/rpc/rpc-mode.d.ts +4 -13
  267. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  268. package/dist/modes/rpc/rpc-mode.js +31 -2
  269. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  270. package/dist/modes/rpc/rpc-resource-readiness.d.ts +11 -0
  271. package/dist/modes/rpc/rpc-resource-readiness.d.ts.map +1 -0
  272. package/dist/modes/rpc/rpc-resource-readiness.js +51 -0
  273. package/dist/modes/rpc/rpc-resource-readiness.js.map +1 -0
  274. package/dist/modes/rpc/rpc-session-binding.d.ts +2 -0
  275. package/dist/modes/rpc/rpc-session-binding.d.ts.map +1 -1
  276. package/dist/modes/rpc/rpc-session-binding.js +21 -0
  277. package/dist/modes/rpc/rpc-session-binding.js.map +1 -1
  278. package/dist/modes/rpc/rpc-types.d.ts +7 -0
  279. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  280. package/dist/modes/rpc/rpc-types.js.map +1 -1
  281. package/dist/package-manager-cli-parser.js.map +1 -1
  282. package/dist/package-manager-cli.js.map +1 -1
  283. package/dist/rpc-entry.js.map +1 -1
  284. package/dist/self-update-plan.js.map +1 -1
  285. package/dist/utils/changelog.d.ts +1 -1
  286. package/dist/utils/changelog.js.map +1 -1
  287. package/dist/utils/module-require.js.map +1 -1
  288. package/dist/utils/pi-user-agent.js.map +1 -1
  289. package/dist/utils/shell.js.map +1 -1
  290. package/dist/utils/tools-manager.js.map +1 -1
  291. package/dist/utils/version-check.js.map +1 -1
  292. package/dist/utils/windows-self-update.js.map +1 -1
  293. package/docs/development.md +28 -1
  294. package/docs/extensions.md +5 -3
  295. package/docs/quickstart.md +1 -3
  296. package/docs/sdk.md +2 -0
  297. package/docs/usage.md +3 -1
  298. package/docs/windows.md +8 -0
  299. package/npm-shrinkwrap.json +32 -32
  300. package/package.json +4 -4
  301. package/dist/builtin/workflows/builtin/chunk-4febxsv4.js +0 -264
  302. package/dist/builtin/workflows/builtin/chunk-5wgwscd0.js +0 -4
  303. package/dist/builtin/workflows/builtin/chunk-dattsgxg.js +0 -529
  304. package/dist/builtin/workflows/builtin/chunk-gdx0avpx.js +0 -70082
  305. package/dist/builtin/workflows/builtin/chunk-qx2ptjs3.js +0 -215
  306. package/dist/builtin/workflows/builtin/chunk-x2ghn0je.js +0 -4110
  307. package/dist/core/atomic-guide-command.d.ts +0 -41
  308. package/dist/core/atomic-guide-command.d.ts.map +0 -1
  309. package/dist/core/atomic-guide-command.js +0 -311
  310. package/dist/core/atomic-guide-command.js.map +0 -1
@@ -2,13 +2,14 @@ import type { AgentSession } from "../../core/agent-session.ts";
2
2
  import { AgentSessionRuntime, type CreateAgentSessionRuntimeFactory } from "../../core/agent-session-runtime.ts";
3
3
  import type { ResourceOverlap } from "../../core/diagnostics.ts";
4
4
  import type { RpcClient } from "../rpc/rpc-client.ts";
5
- import type { RpcAutocompleteItem, RpcExtensionUIRequest, RpcExtensionUIResponse, RpcSlashCommand } from "../rpc/rpc-types.ts";
5
+ import type { RpcAutocompleteItem, RpcExtensionUIRequest, RpcExtensionUIResponse, RpcResourceExtension, RpcSlashCommand } from "../rpc/rpc-types.ts";
6
6
  import type { ActivityWatchdogDiagnostic } from "./activity-watchdog.ts";
7
7
  import type { InteractiveEngineGenerationEndedListener } from "./engine-generation.ts";
8
8
  import { type EngineDiagnosticListener } from "./engine-health.ts";
9
9
  import { type AtomicOAuthLoginCallbacks } from "./isolated-auth.ts";
10
10
  import type { EngineKeybindingState, InteractiveEngineCommand, InteractiveEngineMessage } from "./protocol.ts";
11
11
  import { type RemoteCommandsListener } from "./remote-command-catalog.ts";
12
+ type ResourceExtensionsListener = (extensions: readonly RpcResourceExtension[]) => void;
12
13
  /**
13
14
  * Owns Atomic's local interactive host facade and child-process engine.
14
15
  *
@@ -43,9 +44,19 @@ export declare class IsolatedInteractiveRuntime extends AgentSessionRuntime {
43
44
  private disposePromise;
44
45
  private readonly remoteModelCatalog;
45
46
  private resourceOverlaps;
47
+ private readonly resourceExtensionsListeners;
48
+ private resourceExtensions;
49
+ private resourcesInitializedGeneration;
50
+ private resourceInitialization;
51
+ private readonly retiredResourceGenerations;
52
+ private readonly reportedResourceFailureGenerations;
53
+ private initializationTail;
54
+ private engineRecoveryFailure;
55
+ private promptCancellationEpoch;
46
56
  constructor(localRuntime: AgentSessionRuntime, createRuntime: CreateAgentSessionRuntimeFactory, client: RpcClient);
47
57
  get session(): AgentSession;
48
- initializeFromEngine(): Promise<void>;
58
+ initializeFromEngine(generation?: number): Promise<void>;
59
+ private initializeFromEngineGeneration;
49
60
  loginOAuthProvider(provider: string, callbacks: AtomicOAuthLoginCallbacks): Promise<{
50
61
  modelsRefreshed: true;
51
62
  }>;
@@ -59,6 +70,10 @@ export declare class IsolatedInteractiveRuntime extends AgentSessionRuntime {
59
70
  getRemoteCommandCompletions(commandName: string, argumentPrefix: string): Promise<RpcAutocompleteItem[] | null>;
60
71
  invokeRemoteShortcut(key: string): Promise<void>;
61
72
  waitUntilBound(): Promise<void>;
73
+ waitUntilResourcesReady(): Promise<void>;
74
+ private isCurrentResourceGeneration;
75
+ private waitForReplacementGeneration;
76
+ private throwIfUnavailable;
62
77
  getEnginePid(): number | undefined;
63
78
  getEngineGeneration(): number;
64
79
  isRecovering(): boolean;
@@ -76,6 +91,9 @@ export declare class IsolatedInteractiveRuntime extends AgentSessionRuntime {
76
91
  /** Explicit user-driven engine termination and recovery (Ctrl+C escape hatch). */
77
92
  terminateAndRecover(): Promise<void>;
78
93
  getResourceOverlaps(): readonly ResourceOverlap[];
94
+ getResourceExtensions(): readonly RpcResourceExtension[];
95
+ onResourceExtensionsChanged(listener: ResourceExtensionsListener): () => void;
96
+ private updateResourceExtensions;
79
97
  synchronize(): Promise<void>;
80
98
  setEngineCallbackActive(active: boolean): void;
81
99
  interruptBlockedCallback(): boolean;
@@ -124,4 +142,5 @@ export declare class IsolatedInteractiveRuntime extends AgentSessionRuntime {
124
142
  private refreshSessionView;
125
143
  private observeEvent;
126
144
  }
145
+ export {};
127
146
  //# sourceMappingURL=isolated-runtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"isolated-runtime.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive-engine/isolated-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"isolated-runtime.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive-engine/isolated-runtime.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,14 @@
1
1
  import { clampThinkingLevel } from "@bastani/pi-ai/compat";
2
2
  import { AgentSessionRuntime } from "../../core/agent-session-runtime.js";
3
3
  import { SessionManager } from "../../core/session-manager.js";
4
- import { isRpcTransportFailure } from "../rpc/rpc-transport-error.js";
4
+ import { sleep } from "../../utils/sleep.js";
5
+ import { isRpcTransportFailure, markRpcTransportFailure, rpcTransportError } from "../rpc/rpc-transport-error.js";
5
6
  import { EngineHealthController } from "./engine-health.js";
6
7
  import { loginIsolatedOAuthProvider } from "./isolated-auth.js";
7
8
  import { RemoteCommandCatalog } from "./remote-command-catalog.js";
8
9
  import { RemoteModelCatalog } from "./remote-model-catalog.js";
9
10
  import { RemoteQueuePause } from "./remote-queue-pause.js";
11
+ import { InteractiveEngineResourceReadinessError } from "./resource-readiness-error.js";
10
12
  function applyPersistedModelDefault(session, model, alreadyInScope) {
11
13
  session.settingsManager.setDefaultModelAndProvider(model.provider, model.id);
12
14
  if (alreadyInScope || session.scopedModels.length === 0)
@@ -56,6 +58,12 @@ export class IsolatedInteractiveRuntime extends AgentSessionRuntime {
56
58
  this.autoRetryEnabled = true;
57
59
  this.disposed = false;
58
60
  this.resourceOverlaps = [];
61
+ this.resourceExtensionsListeners = [];
62
+ this.resourceExtensions = [];
63
+ this.resourcesInitializedGeneration = 0;
64
+ this.retiredResourceGenerations = new Set();
65
+ this.reportedResourceFailureGenerations = new Set();
66
+ this.promptCancellationEpoch = 0;
59
67
  this.client = client;
60
68
  this.remoteCommands = new RemoteCommandCatalog(client);
61
69
  this.remoteModelCatalog = new RemoteModelCatalog(client);
@@ -63,8 +71,16 @@ export class IsolatedInteractiveRuntime extends AgentSessionRuntime {
63
71
  this.health = new EngineHealthController({
64
72
  stop: () => this.client.stop(),
65
73
  restart: async () => {
66
- await this.client.restart(this.remoteSessionFile);
67
- await this.initializeFromEngine();
74
+ this.engineRecoveryFailure = undefined;
75
+ try {
76
+ await this.client.restart(this.remoteSessionFile);
77
+ await this.initializeFromEngine();
78
+ }
79
+ catch (error) {
80
+ const failure = markRpcTransportFailure(error);
81
+ this.engineRecoveryFailure = failure;
82
+ throw failure;
83
+ }
68
84
  },
69
85
  clearActivity: () => {
70
86
  this.streaming = false;
@@ -76,21 +92,61 @@ export class IsolatedInteractiveRuntime extends AgentSessionRuntime {
76
92
  },
77
93
  });
78
94
  this.client.onEvent((event) => this.observeEvent(event));
79
- this.client.onGenerationEnded((event) => this.health.handleGenerationEnded(event));
95
+ this.client.onGenerationEnded((event) => {
96
+ this.retiredResourceGenerations.add(event.generation);
97
+ if (event.generation === this.client.getGeneration())
98
+ this.updateResourceExtensions([]);
99
+ this.health.handleGenerationEnded(event);
100
+ });
101
+ // Production RpcClient instances expose engine lifecycle messages. Keep the
102
+ // subscription optional so focused runtime test doubles that exercise only
103
+ // session/model/bash behavior do not need to implement unrelated transport
104
+ // surfaces.
105
+ this.client.onInteractiveEngineMessage?.((message) => {
106
+ if (message.type !== "engine_resources_ready" && message.type !== "engine_resources_failed")
107
+ return;
108
+ const observedGeneration = this.client.getGeneration();
109
+ void this.waitUntilResourcesReady().catch((error) => {
110
+ const generation = error instanceof InteractiveEngineResourceReadinessError ? error.generation : observedGeneration;
111
+ if (this.reportedResourceFailureGenerations.has(generation))
112
+ return;
113
+ this.reportedResourceFailureGenerations.add(generation);
114
+ this.emitDiagnostic({
115
+ activity: undefined,
116
+ elapsedMs: 0,
117
+ level: "unresponsive",
118
+ message: error.message,
119
+ });
120
+ });
121
+ });
80
122
  }
81
123
  get session() {
82
124
  const session = super.session;
83
125
  this.patchSession(session);
84
126
  return session;
85
127
  }
86
- async initializeFromEngine() {
87
- if (this.disposed)
128
+ async initializeFromEngine(generation = this.client.getGeneration?.()) {
129
+ const run = this.initializationTail
130
+ ? this.initializationTail.then(() => this.initializeFromEngineGeneration(generation))
131
+ : this.initializeFromEngineGeneration(generation);
132
+ this.initializationTail = run.catch(() => { });
133
+ return run;
134
+ }
135
+ async initializeFromEngineGeneration(generation) {
136
+ if (this.disposed || (generation !== undefined && !this.isCurrentResourceGeneration(generation)))
88
137
  return;
89
138
  try {
90
139
  const state = await this.client.getState();
91
- const catalog = await this.client.requestInternal({ type: "get_available_models" });
140
+ const catalog = await this.client.requestInternal({
141
+ type: "get_available_models",
142
+ allowPartialResources: true,
143
+ });
144
+ if (generation !== undefined && !this.isCurrentResourceGeneration(generation))
145
+ return;
92
146
  if (state.sessionFile && super.session.sessionManager.getSessionFile() !== state.sessionFile) {
93
147
  await super.switchSession(state.sessionFile);
148
+ if (generation !== undefined && !this.isCurrentResourceGeneration(generation))
149
+ return;
94
150
  }
95
151
  const session = super.session;
96
152
  this.remoteModelCatalog.apply(catalog);
@@ -101,6 +157,7 @@ export class IsolatedInteractiveRuntime extends AgentSessionRuntime {
101
157
  session.agent.followUpMode = state.followUpMode;
102
158
  this.autoCompactionEnabled = state.autoCompactionEnabled;
103
159
  this.resourceOverlaps = state.resourceOverlaps ?? [];
160
+ this.updateResourceExtensions(state.resourceExtensions ?? []);
104
161
  this.remoteSessionName = state.sessionName;
105
162
  this.remoteSessionFile = state.sessionFile;
106
163
  this.streaming = state.isStreaming;
@@ -167,6 +224,77 @@ export class IsolatedInteractiveRuntime extends AgentSessionRuntime {
167
224
  throw error;
168
225
  }
169
226
  }
227
+ async waitUntilResourcesReady() {
228
+ while (true) {
229
+ this.throwIfUnavailable();
230
+ const generation = this.client.getGeneration();
231
+ if (this.retiredResourceGenerations.has(generation)) {
232
+ await this.waitForReplacementGeneration(generation);
233
+ continue;
234
+ }
235
+ try {
236
+ await this.client.waitForInteractiveEngineResources();
237
+ }
238
+ catch (error) {
239
+ this.throwIfUnavailable();
240
+ if (!this.isCurrentResourceGeneration(generation)) {
241
+ await this.waitForReplacementGeneration(generation);
242
+ continue;
243
+ }
244
+ if (isRpcTransportFailure(error))
245
+ throw error;
246
+ throw new InteractiveEngineResourceReadinessError(generation, error instanceof Error ? error : new Error(String(error)));
247
+ }
248
+ if (!this.isCurrentResourceGeneration(generation)) {
249
+ await this.waitForReplacementGeneration(generation);
250
+ continue;
251
+ }
252
+ if (this.resourcesInitializedGeneration === generation)
253
+ return;
254
+ let initialization = this.resourceInitialization;
255
+ if (initialization?.generation !== generation) {
256
+ const promise = this.initializeFromEngine(generation).finally(() => {
257
+ if (this.resourceInitialization?.generation === generation)
258
+ this.resourceInitialization = undefined;
259
+ });
260
+ initialization = { generation, promise };
261
+ this.resourceInitialization = initialization;
262
+ }
263
+ try {
264
+ await initialization.promise;
265
+ }
266
+ catch (error) {
267
+ this.throwIfUnavailable();
268
+ if (!this.isCurrentResourceGeneration(generation)) {
269
+ await this.waitForReplacementGeneration(generation);
270
+ continue;
271
+ }
272
+ throw error;
273
+ }
274
+ this.throwIfUnavailable();
275
+ if (!this.isCurrentResourceGeneration(generation)) {
276
+ await this.waitForReplacementGeneration(generation);
277
+ continue;
278
+ }
279
+ this.resourcesInitializedGeneration = generation;
280
+ return;
281
+ }
282
+ }
283
+ isCurrentResourceGeneration(generation) {
284
+ return generation === this.client.getGeneration() && !this.retiredResourceGenerations.has(generation);
285
+ }
286
+ async waitForReplacementGeneration(generation) {
287
+ while (generation === this.client.getGeneration()) {
288
+ this.throwIfUnavailable();
289
+ await sleep(1);
290
+ }
291
+ }
292
+ throwIfUnavailable() {
293
+ if (this.disposed)
294
+ throw rpcTransportError("Interactive engine runtime is disposed");
295
+ if (this.engineRecoveryFailure)
296
+ throw this.engineRecoveryFailure;
297
+ }
170
298
  getEnginePid() {
171
299
  return this.client.getEnginePid();
172
300
  }
@@ -200,11 +328,31 @@ export class IsolatedInteractiveRuntime extends AgentSessionRuntime {
200
328
  getResourceOverlaps() {
201
329
  return this.resourceOverlaps;
202
330
  }
331
+ getResourceExtensions() {
332
+ return this.resourceExtensions;
333
+ }
334
+ onResourceExtensionsChanged(listener) {
335
+ this.resourceExtensionsListeners.push(listener);
336
+ return () => {
337
+ const index = this.resourceExtensionsListeners.indexOf(listener);
338
+ if (index !== -1)
339
+ this.resourceExtensionsListeners.splice(index, 1);
340
+ };
341
+ }
342
+ updateResourceExtensions(extensions) {
343
+ this.resourceExtensions = [...extensions];
344
+ for (const listener of [...this.resourceExtensionsListeners])
345
+ listener(this.resourceExtensions);
346
+ }
203
347
  async synchronize() {
348
+ const generation = this.client.getGeneration();
204
349
  const state = await this.client.getState();
350
+ if (!this.isCurrentResourceGeneration(generation))
351
+ return;
205
352
  this.remoteSessionFile = state.sessionFile;
206
353
  this.remoteSessionName = state.sessionName;
207
354
  this.resourceOverlaps = state.resourceOverlaps ?? [];
355
+ this.updateResourceExtensions(state.resourceExtensions ?? []);
208
356
  }
209
357
  setEngineCallbackActive(active) {
210
358
  this.engineCallbackActive = active;
@@ -333,6 +481,10 @@ export class IsolatedInteractiveRuntime extends AgentSessionRuntime {
333
481
  prompt: {
334
482
  configurable: true,
335
483
  value: async (text, options) => {
484
+ const cancellationEpoch = this.promptCancellationEpoch;
485
+ await this.waitUntilResourcesReady();
486
+ if (cancellationEpoch !== this.promptCancellationEpoch)
487
+ return;
336
488
  await this.client.prompt(text, options?.images, options?.streamingBehavior);
337
489
  options?.preflightResult?.(true);
338
490
  },
@@ -526,6 +678,7 @@ export class IsolatedInteractiveRuntime extends AgentSessionRuntime {
526
678
  * automatic consequence of pressing Escape.
527
679
  */
528
680
  async abortAndRecover() {
681
+ this.promptCancellationEpoch += 1;
529
682
  await this.queuePause.settleBeforeAbort();
530
683
  this.health.markCooperativeAbortStarted();
531
684
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"isolated-runtime.js","sourceRoot":"","sources":["../../../src/modes/interactive-engine/isolated-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Api, clampThinkingLevel, type Model } from \"@bastani/pi-ai/compat\";\nimport type { AgentSession, CompactionReason } from \"../../core/agent-session.ts\";\nimport { AgentSessionRuntime, type CreateAgentSessionRuntimeFactory } from \"../../core/agent-session-runtime.ts\";\nimport type { ModelMutationOptions, PromptOptions } from \"../../core/agent-session-types.ts\";\nimport type { ResourceOverlap } from \"../../core/diagnostics.ts\";\nimport { SessionManager } from \"../../core/session-manager.ts\";\nimport type { JsonAgentSessionEvent } from \"../json-event.ts\";\nimport type { RpcClient } from \"../rpc/rpc-client.ts\";\nimport { isRpcTransportFailure } from \"../rpc/rpc-transport-error.ts\";\nimport type {\n\tRpcAutocompleteItem,\n\tRpcEvent,\n\tRpcExtensionUIRequest,\n\tRpcExtensionUIResponse,\n\tRpcModelCatalog,\n\tRpcSlashCommand,\n} from \"../rpc/rpc-types.ts\";\nimport type { ActivityWatchdogDiagnostic } from \"./activity-watchdog.ts\";\nimport type { InteractiveEngineGenerationEndedListener } from \"./engine-generation.ts\";\nimport { type EngineDiagnosticListener, EngineHealthController } from \"./engine-health.ts\";\nimport { type AtomicOAuthLoginCallbacks, loginIsolatedOAuthProvider } from \"./isolated-auth.ts\";\nimport type { EngineKeybindingState, InteractiveEngineCommand, InteractiveEngineMessage } from \"./protocol.ts\";\nimport { RemoteCommandCatalog, type RemoteCommandsListener } from \"./remote-command-catalog.ts\";\nimport { RemoteModelCatalog } from \"./remote-model-catalog.ts\";\nimport { RemoteQueuePause } from \"./remote-queue-pause.js\";\n\ntype QueueSnapshot = { steering: string[]; followUp: string[] };\n\nfunction applyPersistedModelDefault(session: AgentSession, model: Model<Api>, alreadyInScope: boolean): void {\n\tsession.settingsManager.setDefaultModelAndProvider(model.provider, model.id);\n\tif (alreadyInScope || session.scopedModels.length === 0) return;\n\tconst enabledModels = session.settingsManager.getEnabledModels();\n\tif (!enabledModels?.length) return;\n\tconst modelReference = `${model.provider}/${model.id}`;\n\tif (enabledModels.some((pattern) => pattern.toLowerCase() === modelReference.toLowerCase())) return;\n\tsession.settingsManager.setEnabledModels([...enabledModels, modelReference]);\n}\n\nfunction thinkingPersistTarget(result: {\n\tprovider?: string;\n\tmodelId?: string;\n}): { provider: string; modelId: string } | undefined {\n\tif (!result.provider || !result.modelId) return undefined;\n\treturn { provider: result.provider, modelId: result.modelId };\n}\n\nfunction applyPersistedThinkingDefault(\n\tsession: AgentSession,\n\tlevel: AgentSession[\"thinkingLevel\"],\n\ttarget?: { provider: string; modelId: string },\n): void {\n\tif (target) {\n\t\tsession.settingsManager.setModelThinkingLevel(target.provider, target.modelId, level);\n\t\treturn;\n\t}\n\tsession.settingsManager.setDefaultThinkingLevel(level);\n}\n\ntype PendingQueueClear = {\n\tsnapshot: QueueSnapshot;\n\tqueueUpdateGeneration: number;\n\tcount: number;\n\tsucceeded: boolean;\n};\n\n/**\n * Owns Atomic's local interactive host facade and child-process engine.\n *\n * This runtime is deliberately not a RemoteSession adapter. Its JSONL RPC,\n * rendering, custom UI, and recovery lifecycle stay separate from pi-client's\n * protocol lease lifecycle.\n */\nexport class IsolatedInteractiveRuntime extends AgentSessionRuntime {\n\tprivate readonly client: RpcClient;\n\tprivate readonly patchedSessions = new WeakSet<AgentSession>();\n\tprivate streaming = false;\n\tprivate compacting = false;\n\tprivate compactionReason: CompactionReason | undefined;\n\tprivate readonly activeBashRequestIds = new Map<string | symbol, string>();\n\tprivate steeringMessages: string[] = [];\n\tprivate followUpMessages: string[] = [];\n\t/** Bumped by every authoritative queue_update. */\n\tprivate queueUpdateGeneration = 0;\n\t/** Bumped by local thinking mutations and thinking_level_changed events. */\n\tprivate thinkingEpoch = 0;\n\t/** Clears started before the next queue_update share one rollback snapshot. */\n\tprivate pendingQueueClear: PendingQueueClear | undefined;\n\tprivate engineCallbackActive = false;\n\tprivate readonly queuePause: RemoteQueuePause;\n\tprivate autoCompactionEnabled = true;\n\tprivate autoRetryEnabled = true;\n\tprivate remoteSessionName: string | undefined;\n\tprivate remoteSessionFile: string | undefined;\n\tprivate readonly health: EngineHealthController;\n\tprivate readonly remoteCommands: RemoteCommandCatalog;\n\tprivate disposed = false;\n\tprivate disposePromise: Promise<void> | undefined;\n\tprivate readonly remoteModelCatalog: RemoteModelCatalog;\n\tprivate resourceOverlaps: ResourceOverlap[] = [];\n\n\tconstructor(localRuntime: AgentSessionRuntime, createRuntime: CreateAgentSessionRuntimeFactory, client: RpcClient) {\n\t\tsuper(\n\t\t\tlocalRuntime.session,\n\t\t\tlocalRuntime.services,\n\t\t\tcreateRuntime,\n\t\t\t[...localRuntime.diagnostics],\n\t\t\tlocalRuntime.modelFallbackMessage,\n\t\t\tlocalRuntime.modelFallbackReason,\n\t\t);\n\t\tthis.client = client;\n\t\tthis.remoteCommands = new RemoteCommandCatalog(client);\n\t\tthis.remoteModelCatalog = new RemoteModelCatalog(client);\n\t\tthis.queuePause = new RemoteQueuePause(client);\n\t\tthis.health = new EngineHealthController({\n\t\t\tstop: () => this.client.stop(),\n\t\t\trestart: async () => {\n\t\t\t\tawait this.client.restart(this.remoteSessionFile);\n\t\t\t\tawait this.initializeFromEngine();\n\t\t\t},\n\t\t\tclearActivity: () => {\n\t\t\t\tthis.streaming = false;\n\t\t\t\tthis.compacting = false;\n\t\t\t\tthis.compactionReason = undefined;\n\t\t\t\tthis.pendingQueueClear = undefined;\n\t\t\t\tthis.engineCallbackActive = false;\n\t\t\t\tthis.health.markCooperativeAbortSettled();\n\t\t\t},\n\t\t});\n\t\tthis.client.onEvent((event) => this.observeEvent(event));\n\t\tthis.client.onGenerationEnded((event) => this.health.handleGenerationEnded(event));\n\t}\n\n\toverride get session(): AgentSession {\n\t\tconst session = super.session;\n\t\tthis.patchSession(session);\n\t\treturn session;\n\t}\n\tasync initializeFromEngine(): Promise<void> {\n\t\tif (this.disposed) return;\n\t\ttry {\n\t\t\tconst state = await this.client.getState();\n\t\t\tconst catalog = await this.client.requestInternal<RpcModelCatalog>({ type: \"get_available_models\" });\n\t\t\tif (state.sessionFile && super.session.sessionManager.getSessionFile() !== state.sessionFile) {\n\t\t\t\tawait super.switchSession(state.sessionFile);\n\t\t\t}\n\t\t\tconst session = super.session;\n\t\t\tthis.remoteModelCatalog.apply(catalog);\n\t\t\tthis.remoteModelCatalog.patch(session);\n\t\t\t(session.agent.state as { model?: Model<Api> }).model = state.model;\n\t\t\tsession.agent.state.thinkingLevel = state.thinkingLevel;\n\t\t\tsession.agent.steeringMode = state.steeringMode;\n\t\t\tsession.agent.followUpMode = state.followUpMode;\n\t\t\tthis.autoCompactionEnabled = state.autoCompactionEnabled;\n\t\t\tthis.resourceOverlaps = state.resourceOverlaps ?? [];\n\t\t\tthis.remoteSessionName = state.sessionName;\n\t\t\tthis.remoteSessionFile = state.sessionFile;\n\t\t\tthis.streaming = state.isStreaming;\n\t\t\tthis.compacting = state.isCompacting;\n\t\t\tthis.compactionReason = state.isCompacting ? state.compactionReason : undefined;\n\t\t\tthis.queuePause.synchronize(state.queuedMessagesPaused === true);\n\t\t\tthis.replaceModelFallback(state.modelFallbackMessage, state.modelFallbackReason);\n\t\t\tthis.refreshSessionView();\n\t\t\tthis.engineCallbackActive = false;\n\t\t\tthis.health.clearUnresponsive();\n\t\t\tthis.health.markCooperativeAbortSettled();\n\t\t\t// Non-blocking refresh so isolated autocomplete lists engine-only extension\n\t\t\t// commands after bind/restart/reload/new/resume/fork. See RemoteCommandCatalog.\n\t\t\tthis.remoteCommands.refresh();\n\t\t} catch (error) {\n\t\t\tif (this.disposed && isRpcTransportFailure(error)) return;\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\toverride async loginOAuthProvider(provider: string, callbacks: AtomicOAuthLoginCallbacks) {\n\t\treturn loginIsolatedOAuthProvider(super.session, this.client, this.remoteModelCatalog, provider, callbacks);\n\t}\n\n\toverride async logoutProvider(provider: string) {\n\t\tconst result = await this.client.logoutProvider(provider);\n\t\tthis.remoteModelCatalog.applyModels({ models: result.models, scopedModels: result.scopedModels ?? [] });\n\t\tawait super.session.modelRuntime.reloadCredentials({ refreshAvailability: false });\n\t\tsuper.session.modelRuntime.applyExternalProviderAuthStatus(provider, result.authStatus);\n\t\tsuper.session.refreshCurrentModelFromRegistry();\n\t\treturn result;\n\t}\n\n\tonDiagnostic(listener: EngineDiagnosticListener): () => void {\n\t\treturn this.health.onDiagnostic(listener);\n\t}\n\n\tonEngineMessage(listener: (message: InteractiveEngineMessage) => void): () => void {\n\t\treturn this.client.onInteractiveEngineMessage(listener);\n\t}\n\tonKeybindingState(listener: (state: EngineKeybindingState) => void): () => void {\n\t\treturn this.client.onInteractiveEngineKeybindingState(listener);\n\t}\n\n\tsendEngineCommand(command: InteractiveEngineCommand): void {\n\t\tthis.client.sendInteractiveEngineCommand(command);\n\t}\n\n\tgetRemoteCommands(): readonly RpcSlashCommand[] {\n\t\treturn this.remoteCommands.getCommands();\n\t}\n\tonRemoteCommandsChanged(listener: RemoteCommandsListener): () => void {\n\t\treturn this.remoteCommands.onChange(listener);\n\t}\n\tgetRemoteCommandCompletions(commandName: string, argumentPrefix: string): Promise<RpcAutocompleteItem[] | null> {\n\t\treturn this.client.getCommandCompletions(commandName, argumentPrefix);\n\t}\n\n\tasync invokeRemoteShortcut(key: string): Promise<void> {\n\t\tawait this.client.requestInternal<void>({ type: \"invoke_shortcut\", key });\n\t}\n\n\tasync waitUntilBound(): Promise<void> {\n\t\ttry {\n\t\t\tawait this.client.waitForInteractiveEngineBound();\n\t\t} catch (error) {\n\t\t\tif (this.disposed && isRpcTransportFailure(error)) return;\n\t\t\tthrow error;\n\t\t}\n\t}\n\tgetEnginePid(): number | undefined {\n\t\treturn this.client.getEnginePid();\n\t}\n\tgetEngineGeneration(): number {\n\t\treturn this.client.getGeneration();\n\t}\n\tisRecovering(): boolean {\n\t\treturn this.health.isRecovering();\n\t}\n\t/** Subscribe to host-local engine generation death (see engine-generation.ts). */\n\tonGenerationEnded(listener: InteractiveEngineGenerationEndedListener): () => void {\n\t\treturn this.client.onGenerationEnded(listener);\n\t}\n\t/**\n\t * A heartbeat proves the child's event loop is turning again, so a stall the\n\t * watchdog already reported must stop arming the Ctrl+C escape hatch. Fed by a\n\t * dedicated client callback rather than a generic engine-message subscriber,\n\t * which would consume buffered startup custom-UI messages.\n\t */\n\tnoteEngineHeartbeat(): void {\n\t\tthis.health.clearUnresponsive();\n\t}\n\t/** True only when the engine is provably not answering (see EngineHealthController). */\n\tneedsExplicitTermination(): boolean {\n\t\treturn this.health.needsExplicitTermination();\n\t}\n\t/** Explicit user-driven engine termination and recovery (Ctrl+C escape hatch). */\n\tterminateAndRecover(): Promise<void> {\n\t\treturn this.health.terminate();\n\t}\n\tgetResourceOverlaps(): readonly ResourceOverlap[] {\n\t\treturn this.resourceOverlaps;\n\t}\n\tasync synchronize(): Promise<void> {\n\t\tconst state = await this.client.getState();\n\t\tthis.remoteSessionFile = state.sessionFile;\n\t\tthis.remoteSessionName = state.sessionName;\n\t\tthis.resourceOverlaps = state.resourceOverlaps ?? [];\n\t}\n\n\tsetEngineCallbackActive(active: boolean): void {\n\t\tthis.engineCallbackActive = active;\n\t}\n\n\tinterruptBlockedCallback(): boolean {\n\t\tif (!this.engineCallbackActive) return false;\n\t\tthis.dispatchBestEffort(\"interrupt\", this.session.abort());\n\t\treturn true;\n\t}\n\n\tsetExtensionUIHandler(\n\t\thandler: (request: RpcExtensionUIRequest) => Promise<RpcExtensionUIResponse | undefined>,\n\t): () => void {\n\t\treturn this.client.onExtensionUIRequest((request) => {\n\t\t\tvoid handler(request)\n\t\t\t\t.then(async (response) => {\n\t\t\t\t\tif (response) await this.client.respondExtensionUI(response);\n\t\t\t\t})\n\t\t\t\t.catch((error: Error) => {\n\t\t\t\t\tthis.emitDiagnostic({\n\t\t\t\t\t\tactivity: undefined,\n\t\t\t\t\t\telapsedMs: 0,\n\t\t\t\t\t\tlevel: \"unresponsive\",\n\t\t\t\t\t\tmessage: `Interactive engine UI bridge failed: ${error.message}`,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t});\n\t}\n\n\temitDiagnostic(diagnostic: ActivityWatchdogDiagnostic): void {\n\t\tthis.engineCallbackActive = true;\n\t\tthis.health.publish(diagnostic);\n\t}\n\n\toverride async switchSession(sessionPath: string): Promise<{ cancelled: boolean }> {\n\t\tconst result = await this.client.switchSession(sessionPath);\n\t\tif (!result.cancelled) {\n\t\t\tawait super.switchSession(sessionPath);\n\t\t\tawait this.initializeFromEngine();\n\t\t}\n\t\treturn result;\n\t}\n\n\toverride async newSession(options?: { parentSession?: string }): Promise<{ cancelled: boolean }> {\n\t\tconst result = await this.client.newSession(options?.parentSession);\n\t\tif (result.cancelled) return result;\n\t\tconst state = await this.client.getState();\n\t\tif (state.sessionFile) await super.switchSession(state.sessionFile);\n\t\telse this.resetUnpersistedSessionView();\n\t\tawait this.initializeFromEngine();\n\t\treturn result;\n\t}\n\n\toverride async importFromJsonl(inputPath: string, cwdOverride?: string): Promise<{ cancelled: boolean }> {\n\t\tconst result = await this.client.requestInternal<{ cancelled: boolean }>({\n\t\t\ttype: \"import_session\",\n\t\t\tinputPath,\n\t\t\tcwdOverride,\n\t\t});\n\t\tif (result.cancelled) return result;\n\t\tconst state = await this.client.getState();\n\t\tif (state.sessionFile) await super.switchSession(state.sessionFile);\n\t\tawait this.initializeFromEngine();\n\t\treturn result;\n\t}\n\n\toverride async fork(\n\t\tentryId: string,\n\t\toptions?: { position?: \"before\" | \"at\" },\n\t): Promise<{ cancelled: boolean; selectedText?: string }> {\n\t\tlet selectedText: string | undefined;\n\t\tlet cancelled: boolean;\n\t\tif (options?.position === \"at\") {\n\t\t\tcancelled = (await this.client.clone()).cancelled;\n\t\t} else {\n\t\t\tconst result = await this.client.fork(entryId);\n\t\t\tcancelled = result.cancelled;\n\t\t\tselectedText = result.text;\n\t\t}\n\t\tif (cancelled) return { cancelled: true };\n\t\tconst state = await this.client.getState();\n\t\tif (state.sessionFile) await super.switchSession(state.sessionFile);\n\t\tawait this.initializeFromEngine();\n\t\treturn { cancelled: false, selectedText };\n\t}\n\n\t/**\n\t * The child engine already settled (and persisted) its own turn before it\n\t * reported the replacement, and the host facade's `abort()` is `abortAndRecover()`\n\t * — an unbounded cooperative round trip. Re-entering it during teardown would\n\t * hang session replacement on an unresponsive or dead engine, which is exactly\n\t * what engine recovery exists to survive.\n\t */\n\tprotected override async settleActiveResponseBeforeTeardown(): Promise<void> {}\n\n\toverride dispose(): Promise<void> {\n\t\tif (this.disposePromise) return this.disposePromise;\n\t\tthis.disposed = true;\n\t\tthis.disposePromise = (async () => {\n\t\t\t// EngineHealthController owns the first client stop and joins recovery.\n\t\t\tawait this.health.shutdown();\n\t\t\t// A replacement may have spawned while shutdown joined recovery; the\n\t\t\t// idempotent trailing stop closes that child before disposal returns.\n\t\t\tawait this.client.stop();\n\t\t\tawait super.dispose();\n\t\t})();\n\t\treturn this.disposePromise;\n\t}\n\n\tprivate patchSession(session: AgentSession): void {\n\t\tif (this.patchedSessions.has(session)) return;\n\t\tthis.patchedSessions.add(session);\n\t\tthis.patchSessionManager(session.sessionManager);\n\t\tObject.defineProperties(session, {\n\t\t\tisStreaming: { configurable: true, get: () => this.streaming },\n\t\t\tisCompacting: { configurable: true, get: () => this.compacting },\n\t\t\tcompactionReason: { configurable: true, get: () => this.compactionReason },\n\t\t\tisBashRunning: { configurable: true, get: () => this.activeBashRequestIds.size > 0 },\n\t\t\tsessionName: { configurable: true, get: () => this.remoteSessionName },\n\t\t\tsessionFile: { configurable: true, get: () => this.remoteSessionFile },\n\t\t\tautoCompactionEnabled: { configurable: true, get: () => this.autoCompactionEnabled },\n\t\t\tautoRetryEnabled: { configurable: true, get: () => this.autoRetryEnabled },\n\t\t\tqueuedMessagesPaused: { configurable: true, get: () => this.queuePause.isPaused },\n\t\t\tsubscribe: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (listener: (event: JsonAgentSessionEvent) => void) => this.client.onEvent(listener),\n\t\t\t},\n\t\t\tprompt: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async (text: string, options?: PromptOptions) => {\n\t\t\t\t\tawait this.client.prompt(text, options?.images, options?.streamingBehavior);\n\t\t\t\t\toptions?.preflightResult?.(true);\n\t\t\t\t},\n\t\t\t},\n\t\t\tsteer: { configurable: true, value: (text: string) => this.client.steer(text) },\n\t\t\tfollowUp: { configurable: true, value: (text: string) => this.client.followUp(text) },\n\t\t\tabort: { configurable: true, value: () => this.abortAndRecover() },\n\t\t\texecuteBash: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async (\n\t\t\t\t\tcommand: string,\n\t\t\t\t\tonChunk?: Parameters<AgentSession[\"executeBash\"]>[1],\n\t\t\t\t\toptions?: Parameters<AgentSession[\"executeBash\"]>[2],\n\t\t\t\t) => {\n\t\t\t\t\tconst key = options?.id ?? Symbol(\"isolated-bash-request\");\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn await this.client.userBashWithUpdates(command, (delta, channel) => onChunk?.(delta, channel), {\n\t\t\t\t\t\t\texcludeFromContext: options?.excludeFromContext,\n\t\t\t\t\t\t\tonRequestId: (requestId) => this.activeBashRequestIds.set(key, requestId),\n\t\t\t\t\t\t});\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tthis.activeBashRequestIds.delete(key);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\trecordBashResult: { configurable: true, value: () => {} },\n\t\t\tabortBash: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (id?: string) => {\n\t\t\t\t\tif (id === undefined) this.dispatchBestEffort(\"abort bash\", this.client.abortBash());\n\t\t\t\t\telse {\n\t\t\t\t\t\tconst requestId = this.activeBashRequestIds.get(id);\n\t\t\t\t\t\tif (requestId) this.dispatchBestEffort(\"abort bash\", this.client.abortBash(requestId));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\tcompact: { configurable: true, value: () => this.client.compact() },\n\t\t\tabortCompaction: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () =>\n\t\t\t\t\tthis.dispatchBestEffort(\n\t\t\t\t\t\t\"abort compaction\",\n\t\t\t\t\t\tthis.client.requestInternal<void>({ type: \"abort_compaction\" }),\n\t\t\t\t\t),\n\t\t\t},\n\t\t\tabortRetry: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => this.dispatchBestEffort(\"abort retry\", this.client.abortRetry()),\n\t\t\t},\n\t\t\tnavigateTree: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async (targetId: string, options?: Parameters<AgentSession[\"navigateTree\"]>[1]) =>\n\t\t\t\t\tthis.client.requestInternal<Awaited<ReturnType<AgentSession[\"navigateTree\"]>>>({\n\t\t\t\t\t\ttype: \"navigate_tree\",\n\t\t\t\t\t\ttargetId,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t}),\n\t\t\t},\n\t\t\treload: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async () => {\n\t\t\t\t\tawait this.client.requestInternal<void>({ type: \"reload\" });\n\t\t\t\t\tawait this.initializeFromEngine();\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetSessionName: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (name: string) => {\n\t\t\t\t\tthis.remoteSessionName = name;\n\t\t\t\t\tthis.dispatchBestEffort(\n\t\t\t\t\t\t\"set session name\",\n\t\t\t\t\t\tthis.client.setSessionName(name).then(() => this.refreshSessionView()),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t},\n\t\t\tgetSteeringMessages: { configurable: true, value: () => [...this.steeringMessages] },\n\t\t\tgetFollowUpMessages: { configurable: true, value: () => [...this.followUpMessages] },\n\t\t\tclearQueue: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tconst queued: QueueSnapshot = {\n\t\t\t\t\t\tsteering: [...this.steeringMessages],\n\t\t\t\t\t\tfollowUp: [...this.followUpMessages],\n\t\t\t\t\t};\n\t\t\t\t\tconst pendingClear = this.pendingQueueClear ?? {\n\t\t\t\t\t\tsnapshot: queued,\n\t\t\t\t\t\tqueueUpdateGeneration: this.queueUpdateGeneration,\n\t\t\t\t\t\tcount: 0,\n\t\t\t\t\t\tsucceeded: false,\n\t\t\t\t\t};\n\t\t\t\t\tthis.pendingQueueClear = pendingClear;\n\t\t\t\t\tpendingClear.count += 1;\n\t\t\t\t\tthis.steeringMessages = [];\n\t\t\t\t\tthis.followUpMessages = [];\n\t\t\t\t\tthis.dispatchBestEffort(\n\t\t\t\t\t\t\"clear queue\",\n\t\t\t\t\t\tthis.client.requestInternal({ type: \"clear_queue\" }).then(\n\t\t\t\t\t\t\t() => this.settleQueueClear(pendingClear, true),\n\t\t\t\t\t\t\t(error: Error) => {\n\t\t\t\t\t\t\t\tthis.settleQueueClear(pendingClear, false);\n\t\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\treturn queued;\n\t\t\t\t},\n\t\t\t},\n\t\t\tpauseQueuedMessages: { configurable: true, value: () => this.queuePause.pause() },\n\t\t\tresumeQueuedMessages: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (beforeRelease?: () => void) => this.queuePause.resume(beforeRelease),\n\t\t\t},\n\t\t\tsetModel: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async (model: Model<Api>, options?: ModelMutationOptions) => {\n\t\t\t\t\tconst selected = await this.client.setModel(model.provider, model.id, options);\n\t\t\t\t\tconst nextModel = session.modelRuntime.getModel(selected.provider, selected.id) ?? model;\n\t\t\t\t\tsession.agent.state.model = nextModel;\n\t\t\t\t\tthis.resolveModelFallback();\n\t\t\t\t\tif (options?.persist === true) await this.syncPersistedModelCatalog(session, nextModel);\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetThinkingLevel: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (level: AgentSession[\"thinkingLevel\"], options?: ModelMutationOptions) => {\n\t\t\t\t\tconst availableLevels = session.getAvailableThinkingLevels();\n\t\t\t\t\tconst effectiveLevel = availableLevels.includes(level)\n\t\t\t\t\t\t? level\n\t\t\t\t\t\t: session.model\n\t\t\t\t\t\t\t? clampThinkingLevel(session.model, level)\n\t\t\t\t\t\t\t: \"off\";\n\t\t\t\t\tsession.agent.state.thinkingLevel = effectiveLevel;\n\t\t\t\t\tconst epoch = ++this.thinkingEpoch;\n\t\t\t\t\tthis.dispatchBestEffort(\n\t\t\t\t\t\t\"set thinking level\",\n\t\t\t\t\t\tthis.client.setThinkingLevelAck(level, options).then((result) => {\n\t\t\t\t\t\t\tthis.applyThinkingAck(session, epoch, result, options?.persist === true);\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t},\n\t\t\tcycleModel: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async (direction?: \"forward\" | \"backward\", options?: ModelMutationOptions) => {\n\t\t\t\t\tconst previousModel = session.model;\n\t\t\t\t\tconst result = await this.client.cycleModel(direction, options);\n\t\t\t\t\tif (!result) return undefined;\n\t\t\t\t\tconst model = session.modelRuntime.getModel(result.model.provider, result.model.id) ?? result.model;\n\t\t\t\t\tsession.agent.state.model = model;\n\t\t\t\t\tsession.agent.state.thinkingLevel = result.thinkingLevel;\n\t\t\t\t\tthis.resolveModelFallbackAfterExplicitModelSelection(previousModel, model);\n\t\t\t\t\tif (options?.persist === true) await this.syncPersistedModelCatalog(session, model);\n\t\t\t\t\treturn { ...result, model };\n\t\t\t\t},\n\t\t\t},\n\t\t\tcycleThinkingLevel: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (options?: ModelMutationOptions) => {\n\t\t\t\t\tconst levels = session.getAvailableThinkingLevels();\n\t\t\t\t\tif (levels.length <= 1) return undefined;\n\t\t\t\t\tconst current = levels.indexOf(session.thinkingLevel);\n\t\t\t\t\tconst level = levels[(current + 1) % levels.length]!;\n\t\t\t\t\tsession.agent.state.thinkingLevel = level;\n\t\t\t\t\tconst epoch = ++this.thinkingEpoch;\n\t\t\t\t\tthis.dispatchBestEffort(\n\t\t\t\t\t\t\"cycle thinking level\",\n\t\t\t\t\t\tthis.client.setThinkingLevelAck(level, options).then((result) => {\n\t\t\t\t\t\t\tthis.applyThinkingAck(session, epoch, result, options?.persist === true);\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t\treturn level;\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetSteeringMode: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (mode: \"all\" | \"one-at-a-time\") => {\n\t\t\t\t\tsession.agent.steeringMode = mode;\n\t\t\t\t\tthis.dispatchBestEffort(\"set steering mode\", this.client.setSteeringMode(mode));\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetFollowUpMode: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (mode: \"all\" | \"one-at-a-time\") => {\n\t\t\t\t\tsession.agent.followUpMode = mode;\n\t\t\t\t\tthis.dispatchBestEffort(\"set follow-up mode\", this.client.setFollowUpMode(mode));\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetAutoCompactionEnabled: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (enabled: boolean) => {\n\t\t\t\t\tthis.autoCompactionEnabled = enabled;\n\t\t\t\t\tthis.dispatchBestEffort(\"set auto compaction\", this.client.setAutoCompaction(enabled));\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetAutoRetryEnabled: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (enabled: boolean) => {\n\t\t\t\t\tthis.autoRetryEnabled = enabled;\n\t\t\t\t\tthis.dispatchBestEffort(\"set auto retry\", this.client.setAutoRetry(enabled));\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * Cooperative interrupt. Requests the engine's own abort and waits for it —\n\t * no timeout, no termination, no restart. A genuinely wedged engine is the\n\t * user's call to terminate with Ctrl+C (see terminateAndRecover), never an\n\t * automatic consequence of pressing Escape.\n\t */\n\tprivate async abortAndRecover(): Promise<void> {\n\t\tawait this.queuePause.settleBeforeAbort();\n\t\tthis.health.markCooperativeAbortStarted();\n\t\ttry {\n\t\t\tawait this.client.abort();\n\t\t} finally {\n\t\t\tthis.health.markCooperativeAbortSettled();\n\t\t\tthis.engineCallbackActive = false;\n\t\t}\n\t}\n\n\tprivate applyThinkingAck(\n\t\tsession: AgentSession,\n\t\tepoch: number,\n\t\tresult: { level: AgentSession[\"thinkingLevel\"]; provider?: string; modelId?: string },\n\t\tpersist: boolean,\n\t): void {\n\t\tif (persist) {\n\t\t\tapplyPersistedThinkingDefault(session, result.level, thinkingPersistTarget(result));\n\t\t}\n\t\tif (epoch === this.thinkingEpoch) {\n\t\t\tsession.agent.state.thinkingLevel = result.level;\n\t\t}\n\t}\n\n\tprivate dispatchBestEffort(label: string, operation: Promise<unknown>): void {\n\t\tvoid operation.catch((error: Error) => {\n\t\t\tif (this.health.isRecovering()) return;\n\t\t\tthis.emitDiagnostic({\n\t\t\t\tactivity: undefined,\n\t\t\t\telapsedMs: 0,\n\t\t\t\tlevel: \"unresponsive\",\n\t\t\t\tmessage: `Interactive engine ${label} failed: ${error.message}`,\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate settleQueueClear(pendingClear: PendingQueueClear, succeeded: boolean): void {\n\t\tif (this.pendingQueueClear !== pendingClear) return;\n\n\t\tpendingClear.count -= 1;\n\t\tpendingClear.succeeded ||= succeeded;\n\t\tif (pendingClear.count > 0) return;\n\n\t\tthis.pendingQueueClear = undefined;\n\t\tif (pendingClear.succeeded || this.queueUpdateGeneration !== pendingClear.queueUpdateGeneration) return;\n\n\t\tthis.steeringMessages = [...pendingClear.snapshot.steering];\n\t\tthis.followUpMessages = [...pendingClear.snapshot.followUp];\n\t}\n\n\tprivate resetUnpersistedSessionView(): void {\n\t\tconst session = super.session;\n\t\tconst manager = SessionManager.create(session.sessionManager.getCwd(), session.sessionManager.getSessionDir());\n\t\tObject.defineProperty(session, \"sessionManager\", { configurable: true, value: manager });\n\t\tthis.patchSessionManager(manager);\n\t\tsession.agent.state.messages = [];\n\t}\n\n\tprivate patchSessionManager(manager: SessionManager): void {\n\t\tObject.defineProperty(manager, \"appendLabelChange\", {\n\t\t\tconfigurable: true,\n\t\t\tvalue: (entryId: string, label?: string) => {\n\t\t\t\tthis.dispatchBestEffort(\n\t\t\t\t\t\"set label\",\n\t\t\t\t\tthis.client\n\t\t\t\t\t\t.requestInternal<void>({ type: \"set_label\", entryId, label })\n\t\t\t\t\t\t.then(() => this.refreshSessionView()),\n\t\t\t\t);\n\t\t\t},\n\t\t});\n\t}\n\n\tprivate async syncPersistedModelCatalog(session: AgentSession, model: Model<Api>): Promise<void> {\n\t\tconst alreadyInScope = session.scopedModels.some(\n\t\t\t(scoped) => scoped.model.provider === model.provider && scoped.model.id === model.id,\n\t\t);\n\t\tconst catalog = await this.client.requestInternal<RpcModelCatalog>({ type: \"get_available_models\" });\n\t\tthis.remoteModelCatalog.apply(catalog);\n\t\tapplyPersistedModelDefault(session, model, alreadyInScope);\n\t}\n\n\tprivate refreshSessionView(): void {\n\t\tconst session = super.session;\n\t\tconst sessionFile = session.sessionFile;\n\t\tif (!sessionFile) return;\n\t\tconst currentManager = session.sessionManager;\n\t\tconst refreshed = SessionManager.open(sessionFile, currentManager.getSessionDir(), currentManager.getCwd());\n\t\tObject.defineProperty(session, \"sessionManager\", { configurable: true, value: refreshed });\n\t\tthis.patchSessionManager(refreshed);\n\t\tsession.agent.state.messages = refreshed.buildSessionContext().messages;\n\t}\n\n\tprivate observeEvent(event: RpcEvent): void {\n\t\tconst session = super.session;\n\t\tswitch (event.type) {\n\t\t\tcase \"agent_start\":\n\t\t\t\tthis.streaming = true;\n\t\t\t\tbreak;\n\t\t\tcase \"agent_end\":\n\t\t\t\tthis.streaming = false;\n\t\t\t\tthis.refreshSessionView();\n\t\t\t\tbreak;\n\t\t\tcase \"compaction_start\":\n\t\t\t\tthis.compacting = true;\n\t\t\t\tthis.compactionReason = event.reason;\n\t\t\t\tbreak;\n\t\t\tcase \"compaction_end\":\n\t\t\t\tthis.compacting = false;\n\t\t\t\tthis.compactionReason = undefined;\n\t\t\t\tbreak;\n\t\t\tcase \"queue_update\":\n\t\t\t\tthis.queueUpdateGeneration += 1;\n\t\t\t\tthis.pendingQueueClear = undefined;\n\t\t\t\tthis.steeringMessages = [...event.steering];\n\t\t\t\tthis.followUpMessages = [...event.followUp];\n\t\t\t\tbreak;\n\t\t\tcase \"model_changed\":\n\t\t\t\tsession.agent.state.model = event.model;\n\t\t\t\tbreak;\n\t\t\tcase \"thinking_level_changed\":\n\t\t\t\tthis.thinkingEpoch += 1;\n\t\t\t\tsession.agent.state.thinkingLevel = event.level;\n\t\t\t\tbreak;\n\t\t\tcase \"session_info_changed\":\n\t\t\t\tthis.remoteSessionName = event.name;\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"isolated-runtime.js","sourceRoot":"","sources":["../../../src/modes/interactive-engine/isolated-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Api, clampThinkingLevel, type Model } from \"@bastani/pi-ai/compat\";\nimport type { AgentSession, CompactionReason } from \"../../core/agent-session.ts\";\nimport { AgentSessionRuntime, type CreateAgentSessionRuntimeFactory } from \"../../core/agent-session-runtime.ts\";\nimport type { ModelMutationOptions, PromptOptions } from \"../../core/agent-session-types.ts\";\nimport type { ResourceOverlap } from \"../../core/diagnostics.ts\";\nimport { SessionManager } from \"../../core/session-manager.ts\";\nimport { sleep } from \"../../utils/sleep.ts\";\nimport type { JsonAgentSessionEvent } from \"../json-event.ts\";\nimport type { RpcClient } from \"../rpc/rpc-client.ts\";\nimport { isRpcTransportFailure, markRpcTransportFailure, rpcTransportError } from \"../rpc/rpc-transport-error.ts\";\nimport type {\n\tRpcAutocompleteItem,\n\tRpcEvent,\n\tRpcExtensionUIRequest,\n\tRpcExtensionUIResponse,\n\tRpcModelCatalog,\n\tRpcResourceExtension,\n\tRpcSlashCommand,\n} from \"../rpc/rpc-types.ts\";\nimport type { ActivityWatchdogDiagnostic } from \"./activity-watchdog.ts\";\nimport type { InteractiveEngineGenerationEndedListener } from \"./engine-generation.ts\";\nimport { type EngineDiagnosticListener, EngineHealthController } from \"./engine-health.ts\";\nimport { type AtomicOAuthLoginCallbacks, loginIsolatedOAuthProvider } from \"./isolated-auth.ts\";\nimport type { EngineKeybindingState, InteractiveEngineCommand, InteractiveEngineMessage } from \"./protocol.ts\";\nimport { RemoteCommandCatalog, type RemoteCommandsListener } from \"./remote-command-catalog.ts\";\nimport { RemoteModelCatalog } from \"./remote-model-catalog.ts\";\nimport { RemoteQueuePause } from \"./remote-queue-pause.js\";\nimport { InteractiveEngineResourceReadinessError } from \"./resource-readiness-error.ts\";\n\ntype ResourceExtensionsListener = (extensions: readonly RpcResourceExtension[]) => void;\ntype QueueSnapshot = { steering: string[]; followUp: string[] };\n\nfunction applyPersistedModelDefault(session: AgentSession, model: Model<Api>, alreadyInScope: boolean): void {\n\tsession.settingsManager.setDefaultModelAndProvider(model.provider, model.id);\n\tif (alreadyInScope || session.scopedModels.length === 0) return;\n\tconst enabledModels = session.settingsManager.getEnabledModels();\n\tif (!enabledModels?.length) return;\n\tconst modelReference = `${model.provider}/${model.id}`;\n\tif (enabledModels.some((pattern) => pattern.toLowerCase() === modelReference.toLowerCase())) return;\n\tsession.settingsManager.setEnabledModels([...enabledModels, modelReference]);\n}\n\nfunction thinkingPersistTarget(result: {\n\tprovider?: string;\n\tmodelId?: string;\n}): { provider: string; modelId: string } | undefined {\n\tif (!result.provider || !result.modelId) return undefined;\n\treturn { provider: result.provider, modelId: result.modelId };\n}\n\nfunction applyPersistedThinkingDefault(\n\tsession: AgentSession,\n\tlevel: AgentSession[\"thinkingLevel\"],\n\ttarget?: { provider: string; modelId: string },\n): void {\n\tif (target) {\n\t\tsession.settingsManager.setModelThinkingLevel(target.provider, target.modelId, level);\n\t\treturn;\n\t}\n\tsession.settingsManager.setDefaultThinkingLevel(level);\n}\n\ntype PendingQueueClear = {\n\tsnapshot: QueueSnapshot;\n\tqueueUpdateGeneration: number;\n\tcount: number;\n\tsucceeded: boolean;\n};\n\n/**\n * Owns Atomic's local interactive host facade and child-process engine.\n *\n * This runtime is deliberately not a RemoteSession adapter. Its JSONL RPC,\n * rendering, custom UI, and recovery lifecycle stay separate from pi-client's\n * protocol lease lifecycle.\n */\nexport class IsolatedInteractiveRuntime extends AgentSessionRuntime {\n\tprivate readonly client: RpcClient;\n\tprivate readonly patchedSessions = new WeakSet<AgentSession>();\n\tprivate streaming = false;\n\tprivate compacting = false;\n\tprivate compactionReason: CompactionReason | undefined;\n\tprivate readonly activeBashRequestIds = new Map<string | symbol, string>();\n\tprivate steeringMessages: string[] = [];\n\tprivate followUpMessages: string[] = [];\n\t/** Bumped by every authoritative queue_update. */\n\tprivate queueUpdateGeneration = 0;\n\t/** Bumped by local thinking mutations and thinking_level_changed events. */\n\tprivate thinkingEpoch = 0;\n\t/** Clears started before the next queue_update share one rollback snapshot. */\n\tprivate pendingQueueClear: PendingQueueClear | undefined;\n\tprivate engineCallbackActive = false;\n\tprivate readonly queuePause: RemoteQueuePause;\n\tprivate autoCompactionEnabled = true;\n\tprivate autoRetryEnabled = true;\n\tprivate remoteSessionName: string | undefined;\n\tprivate remoteSessionFile: string | undefined;\n\tprivate readonly health: EngineHealthController;\n\tprivate readonly remoteCommands: RemoteCommandCatalog;\n\tprivate disposed = false;\n\tprivate disposePromise: Promise<void> | undefined;\n\tprivate readonly remoteModelCatalog: RemoteModelCatalog;\n\tprivate resourceOverlaps: ResourceOverlap[] = [];\n\tprivate readonly resourceExtensionsListeners: ResourceExtensionsListener[] = [];\n\tprivate resourceExtensions: RpcResourceExtension[] = [];\n\tprivate resourcesInitializedGeneration = 0;\n\tprivate resourceInitialization: { generation: number; promise: Promise<void> } | undefined;\n\tprivate readonly retiredResourceGenerations = new Set<number>();\n\tprivate readonly reportedResourceFailureGenerations = new Set<number>();\n\tprivate initializationTail: Promise<void> | undefined;\n\tprivate engineRecoveryFailure: Error | undefined;\n\tprivate promptCancellationEpoch = 0;\n\n\tconstructor(localRuntime: AgentSessionRuntime, createRuntime: CreateAgentSessionRuntimeFactory, client: RpcClient) {\n\t\tsuper(\n\t\t\tlocalRuntime.session,\n\t\t\tlocalRuntime.services,\n\t\t\tcreateRuntime,\n\t\t\t[...localRuntime.diagnostics],\n\t\t\tlocalRuntime.modelFallbackMessage,\n\t\t\tlocalRuntime.modelFallbackReason,\n\t\t);\n\t\tthis.client = client;\n\t\tthis.remoteCommands = new RemoteCommandCatalog(client);\n\t\tthis.remoteModelCatalog = new RemoteModelCatalog(client);\n\t\tthis.queuePause = new RemoteQueuePause(client);\n\t\tthis.health = new EngineHealthController({\n\t\t\tstop: () => this.client.stop(),\n\t\t\trestart: async () => {\n\t\t\t\tthis.engineRecoveryFailure = undefined;\n\t\t\t\ttry {\n\t\t\t\t\tawait this.client.restart(this.remoteSessionFile);\n\t\t\t\t\tawait this.initializeFromEngine();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst failure = markRpcTransportFailure(error);\n\t\t\t\t\tthis.engineRecoveryFailure = failure;\n\t\t\t\t\tthrow failure;\n\t\t\t\t}\n\t\t\t},\n\t\t\tclearActivity: () => {\n\t\t\t\tthis.streaming = false;\n\t\t\t\tthis.compacting = false;\n\t\t\t\tthis.compactionReason = undefined;\n\t\t\t\tthis.pendingQueueClear = undefined;\n\t\t\t\tthis.engineCallbackActive = false;\n\t\t\t\tthis.health.markCooperativeAbortSettled();\n\t\t\t},\n\t\t});\n\t\tthis.client.onEvent((event) => this.observeEvent(event));\n\t\tthis.client.onGenerationEnded((event) => {\n\t\t\tthis.retiredResourceGenerations.add(event.generation);\n\t\t\tif (event.generation === this.client.getGeneration()) this.updateResourceExtensions([]);\n\t\t\tthis.health.handleGenerationEnded(event);\n\t\t});\n\t\t// Production RpcClient instances expose engine lifecycle messages. Keep the\n\t\t// subscription optional so focused runtime test doubles that exercise only\n\t\t// session/model/bash behavior do not need to implement unrelated transport\n\t\t// surfaces.\n\t\tthis.client.onInteractiveEngineMessage?.((message) => {\n\t\t\tif (message.type !== \"engine_resources_ready\" && message.type !== \"engine_resources_failed\") return;\n\t\t\tconst observedGeneration = this.client.getGeneration();\n\t\t\tvoid this.waitUntilResourcesReady().catch((error: Error) => {\n\t\t\t\tconst generation =\n\t\t\t\t\terror instanceof InteractiveEngineResourceReadinessError ? error.generation : observedGeneration;\n\t\t\t\tif (this.reportedResourceFailureGenerations.has(generation)) return;\n\t\t\t\tthis.reportedResourceFailureGenerations.add(generation);\n\t\t\t\tthis.emitDiagnostic({\n\t\t\t\t\tactivity: undefined,\n\t\t\t\t\telapsedMs: 0,\n\t\t\t\t\tlevel: \"unresponsive\",\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n\n\toverride get session(): AgentSession {\n\t\tconst session = super.session;\n\t\tthis.patchSession(session);\n\t\treturn session;\n\t}\n\tasync initializeFromEngine(generation = this.client.getGeneration?.()): Promise<void> {\n\t\tconst run = this.initializationTail\n\t\t\t? this.initializationTail.then(() => this.initializeFromEngineGeneration(generation))\n\t\t\t: this.initializeFromEngineGeneration(generation);\n\t\tthis.initializationTail = run.catch(() => {});\n\t\treturn run;\n\t}\n\n\tprivate async initializeFromEngineGeneration(generation: number | undefined): Promise<void> {\n\t\tif (this.disposed || (generation !== undefined && !this.isCurrentResourceGeneration(generation))) return;\n\t\ttry {\n\t\t\tconst state = await this.client.getState();\n\t\t\tconst catalog = await this.client.requestInternal<RpcModelCatalog>({\n\t\t\t\ttype: \"get_available_models\",\n\t\t\t\tallowPartialResources: true,\n\t\t\t});\n\t\t\tif (generation !== undefined && !this.isCurrentResourceGeneration(generation)) return;\n\t\t\tif (state.sessionFile && super.session.sessionManager.getSessionFile() !== state.sessionFile) {\n\t\t\t\tawait super.switchSession(state.sessionFile);\n\t\t\t\tif (generation !== undefined && !this.isCurrentResourceGeneration(generation)) return;\n\t\t\t}\n\t\t\tconst session = super.session;\n\t\t\tthis.remoteModelCatalog.apply(catalog);\n\t\t\tthis.remoteModelCatalog.patch(session);\n\t\t\t(session.agent.state as { model?: Model<Api> }).model = state.model;\n\t\t\tsession.agent.state.thinkingLevel = state.thinkingLevel;\n\t\t\tsession.agent.steeringMode = state.steeringMode;\n\t\t\tsession.agent.followUpMode = state.followUpMode;\n\t\t\tthis.autoCompactionEnabled = state.autoCompactionEnabled;\n\t\t\tthis.resourceOverlaps = state.resourceOverlaps ?? [];\n\t\t\tthis.updateResourceExtensions(state.resourceExtensions ?? []);\n\t\t\tthis.remoteSessionName = state.sessionName;\n\t\t\tthis.remoteSessionFile = state.sessionFile;\n\t\t\tthis.streaming = state.isStreaming;\n\t\t\tthis.compacting = state.isCompacting;\n\t\t\tthis.compactionReason = state.isCompacting ? state.compactionReason : undefined;\n\t\t\tthis.queuePause.synchronize(state.queuedMessagesPaused === true);\n\t\t\tthis.replaceModelFallback(state.modelFallbackMessage, state.modelFallbackReason);\n\t\t\tthis.refreshSessionView();\n\t\t\tthis.engineCallbackActive = false;\n\t\t\tthis.health.clearUnresponsive();\n\t\t\tthis.health.markCooperativeAbortSettled();\n\t\t\t// Non-blocking refresh so isolated autocomplete lists engine-only extension\n\t\t\t// commands after bind/restart/reload/new/resume/fork. See RemoteCommandCatalog.\n\t\t\tthis.remoteCommands.refresh();\n\t\t} catch (error) {\n\t\t\tif (this.disposed && isRpcTransportFailure(error)) return;\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\toverride async loginOAuthProvider(provider: string, callbacks: AtomicOAuthLoginCallbacks) {\n\t\treturn loginIsolatedOAuthProvider(super.session, this.client, this.remoteModelCatalog, provider, callbacks);\n\t}\n\n\toverride async logoutProvider(provider: string) {\n\t\tconst result = await this.client.logoutProvider(provider);\n\t\tthis.remoteModelCatalog.applyModels({ models: result.models, scopedModels: result.scopedModels ?? [] });\n\t\tawait super.session.modelRuntime.reloadCredentials({ refreshAvailability: false });\n\t\tsuper.session.modelRuntime.applyExternalProviderAuthStatus(provider, result.authStatus);\n\t\tsuper.session.refreshCurrentModelFromRegistry();\n\t\treturn result;\n\t}\n\n\tonDiagnostic(listener: EngineDiagnosticListener): () => void {\n\t\treturn this.health.onDiagnostic(listener);\n\t}\n\n\tonEngineMessage(listener: (message: InteractiveEngineMessage) => void): () => void {\n\t\treturn this.client.onInteractiveEngineMessage(listener);\n\t}\n\tonKeybindingState(listener: (state: EngineKeybindingState) => void): () => void {\n\t\treturn this.client.onInteractiveEngineKeybindingState(listener);\n\t}\n\n\tsendEngineCommand(command: InteractiveEngineCommand): void {\n\t\tthis.client.sendInteractiveEngineCommand(command);\n\t}\n\n\tgetRemoteCommands(): readonly RpcSlashCommand[] {\n\t\treturn this.remoteCommands.getCommands();\n\t}\n\tonRemoteCommandsChanged(listener: RemoteCommandsListener): () => void {\n\t\treturn this.remoteCommands.onChange(listener);\n\t}\n\tgetRemoteCommandCompletions(commandName: string, argumentPrefix: string): Promise<RpcAutocompleteItem[] | null> {\n\t\treturn this.client.getCommandCompletions(commandName, argumentPrefix);\n\t}\n\n\tasync invokeRemoteShortcut(key: string): Promise<void> {\n\t\tawait this.client.requestInternal<void>({ type: \"invoke_shortcut\", key });\n\t}\n\n\tasync waitUntilBound(): Promise<void> {\n\t\ttry {\n\t\t\tawait this.client.waitForInteractiveEngineBound();\n\t\t} catch (error) {\n\t\t\tif (this.disposed && isRpcTransportFailure(error)) return;\n\t\t\tthrow error;\n\t\t}\n\t}\n\tasync waitUntilResourcesReady(): Promise<void> {\n\t\twhile (true) {\n\t\t\tthis.throwIfUnavailable();\n\t\t\tconst generation = this.client.getGeneration();\n\t\t\tif (this.retiredResourceGenerations.has(generation)) {\n\t\t\t\tawait this.waitForReplacementGeneration(generation);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait this.client.waitForInteractiveEngineResources();\n\t\t\t} catch (error) {\n\t\t\t\tthis.throwIfUnavailable();\n\t\t\t\tif (!this.isCurrentResourceGeneration(generation)) {\n\t\t\t\t\tawait this.waitForReplacementGeneration(generation);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (isRpcTransportFailure(error)) throw error;\n\t\t\t\tthrow new InteractiveEngineResourceReadinessError(\n\t\t\t\t\tgeneration,\n\t\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (!this.isCurrentResourceGeneration(generation)) {\n\t\t\t\tawait this.waitForReplacementGeneration(generation);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (this.resourcesInitializedGeneration === generation) return;\n\n\t\t\tlet initialization = this.resourceInitialization;\n\t\t\tif (initialization?.generation !== generation) {\n\t\t\t\tconst promise = this.initializeFromEngine(generation).finally(() => {\n\t\t\t\t\tif (this.resourceInitialization?.generation === generation) this.resourceInitialization = undefined;\n\t\t\t\t});\n\t\t\t\tinitialization = { generation, promise };\n\t\t\t\tthis.resourceInitialization = initialization;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait initialization.promise;\n\t\t\t} catch (error) {\n\t\t\t\tthis.throwIfUnavailable();\n\t\t\t\tif (!this.isCurrentResourceGeneration(generation)) {\n\t\t\t\t\tawait this.waitForReplacementGeneration(generation);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthis.throwIfUnavailable();\n\t\t\tif (!this.isCurrentResourceGeneration(generation)) {\n\t\t\t\tawait this.waitForReplacementGeneration(generation);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.resourcesInitializedGeneration = generation;\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate isCurrentResourceGeneration(generation: number): boolean {\n\t\treturn generation === this.client.getGeneration() && !this.retiredResourceGenerations.has(generation);\n\t}\n\n\tprivate async waitForReplacementGeneration(generation: number): Promise<void> {\n\t\twhile (generation === this.client.getGeneration()) {\n\t\t\tthis.throwIfUnavailable();\n\t\t\tawait sleep(1);\n\t\t}\n\t}\n\n\tprivate throwIfUnavailable(): void {\n\t\tif (this.disposed) throw rpcTransportError(\"Interactive engine runtime is disposed\");\n\t\tif (this.engineRecoveryFailure) throw this.engineRecoveryFailure;\n\t}\n\tgetEnginePid(): number | undefined {\n\t\treturn this.client.getEnginePid();\n\t}\n\tgetEngineGeneration(): number {\n\t\treturn this.client.getGeneration();\n\t}\n\tisRecovering(): boolean {\n\t\treturn this.health.isRecovering();\n\t}\n\t/** Subscribe to host-local engine generation death (see engine-generation.ts). */\n\tonGenerationEnded(listener: InteractiveEngineGenerationEndedListener): () => void {\n\t\treturn this.client.onGenerationEnded(listener);\n\t}\n\t/**\n\t * A heartbeat proves the child's event loop is turning again, so a stall the\n\t * watchdog already reported must stop arming the Ctrl+C escape hatch. Fed by a\n\t * dedicated client callback rather than a generic engine-message subscriber,\n\t * which would consume buffered startup custom-UI messages.\n\t */\n\tnoteEngineHeartbeat(): void {\n\t\tthis.health.clearUnresponsive();\n\t}\n\t/** True only when the engine is provably not answering (see EngineHealthController). */\n\tneedsExplicitTermination(): boolean {\n\t\treturn this.health.needsExplicitTermination();\n\t}\n\t/** Explicit user-driven engine termination and recovery (Ctrl+C escape hatch). */\n\tterminateAndRecover(): Promise<void> {\n\t\treturn this.health.terminate();\n\t}\n\tgetResourceOverlaps(): readonly ResourceOverlap[] {\n\t\treturn this.resourceOverlaps;\n\t}\n\tgetResourceExtensions(): readonly RpcResourceExtension[] {\n\t\treturn this.resourceExtensions;\n\t}\n\tonResourceExtensionsChanged(listener: ResourceExtensionsListener): () => void {\n\t\tthis.resourceExtensionsListeners.push(listener);\n\t\treturn () => {\n\t\t\tconst index = this.resourceExtensionsListeners.indexOf(listener);\n\t\t\tif (index !== -1) this.resourceExtensionsListeners.splice(index, 1);\n\t\t};\n\t}\n\tprivate updateResourceExtensions(extensions: readonly RpcResourceExtension[]): void {\n\t\tthis.resourceExtensions = [...extensions];\n\t\tfor (const listener of [...this.resourceExtensionsListeners]) listener(this.resourceExtensions);\n\t}\n\tasync synchronize(): Promise<void> {\n\t\tconst generation = this.client.getGeneration();\n\t\tconst state = await this.client.getState();\n\t\tif (!this.isCurrentResourceGeneration(generation)) return;\n\t\tthis.remoteSessionFile = state.sessionFile;\n\t\tthis.remoteSessionName = state.sessionName;\n\t\tthis.resourceOverlaps = state.resourceOverlaps ?? [];\n\t\tthis.updateResourceExtensions(state.resourceExtensions ?? []);\n\t}\n\n\tsetEngineCallbackActive(active: boolean): void {\n\t\tthis.engineCallbackActive = active;\n\t}\n\n\tinterruptBlockedCallback(): boolean {\n\t\tif (!this.engineCallbackActive) return false;\n\t\tthis.dispatchBestEffort(\"interrupt\", this.session.abort());\n\t\treturn true;\n\t}\n\n\tsetExtensionUIHandler(\n\t\thandler: (request: RpcExtensionUIRequest) => Promise<RpcExtensionUIResponse | undefined>,\n\t): () => void {\n\t\treturn this.client.onExtensionUIRequest((request) => {\n\t\t\tvoid handler(request)\n\t\t\t\t.then(async (response) => {\n\t\t\t\t\tif (response) await this.client.respondExtensionUI(response);\n\t\t\t\t})\n\t\t\t\t.catch((error: Error) => {\n\t\t\t\t\tthis.emitDiagnostic({\n\t\t\t\t\t\tactivity: undefined,\n\t\t\t\t\t\telapsedMs: 0,\n\t\t\t\t\t\tlevel: \"unresponsive\",\n\t\t\t\t\t\tmessage: `Interactive engine UI bridge failed: ${error.message}`,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t});\n\t}\n\n\temitDiagnostic(diagnostic: ActivityWatchdogDiagnostic): void {\n\t\tthis.engineCallbackActive = true;\n\t\tthis.health.publish(diagnostic);\n\t}\n\n\toverride async switchSession(sessionPath: string): Promise<{ cancelled: boolean }> {\n\t\tconst result = await this.client.switchSession(sessionPath);\n\t\tif (!result.cancelled) {\n\t\t\tawait super.switchSession(sessionPath);\n\t\t\tawait this.initializeFromEngine();\n\t\t}\n\t\treturn result;\n\t}\n\n\toverride async newSession(options?: { parentSession?: string }): Promise<{ cancelled: boolean }> {\n\t\tconst result = await this.client.newSession(options?.parentSession);\n\t\tif (result.cancelled) return result;\n\t\tconst state = await this.client.getState();\n\t\tif (state.sessionFile) await super.switchSession(state.sessionFile);\n\t\telse this.resetUnpersistedSessionView();\n\t\tawait this.initializeFromEngine();\n\t\treturn result;\n\t}\n\n\toverride async importFromJsonl(inputPath: string, cwdOverride?: string): Promise<{ cancelled: boolean }> {\n\t\tconst result = await this.client.requestInternal<{ cancelled: boolean }>({\n\t\t\ttype: \"import_session\",\n\t\t\tinputPath,\n\t\t\tcwdOverride,\n\t\t});\n\t\tif (result.cancelled) return result;\n\t\tconst state = await this.client.getState();\n\t\tif (state.sessionFile) await super.switchSession(state.sessionFile);\n\t\tawait this.initializeFromEngine();\n\t\treturn result;\n\t}\n\n\toverride async fork(\n\t\tentryId: string,\n\t\toptions?: { position?: \"before\" | \"at\" },\n\t): Promise<{ cancelled: boolean; selectedText?: string }> {\n\t\tlet selectedText: string | undefined;\n\t\tlet cancelled: boolean;\n\t\tif (options?.position === \"at\") {\n\t\t\tcancelled = (await this.client.clone()).cancelled;\n\t\t} else {\n\t\t\tconst result = await this.client.fork(entryId);\n\t\t\tcancelled = result.cancelled;\n\t\t\tselectedText = result.text;\n\t\t}\n\t\tif (cancelled) return { cancelled: true };\n\t\tconst state = await this.client.getState();\n\t\tif (state.sessionFile) await super.switchSession(state.sessionFile);\n\t\tawait this.initializeFromEngine();\n\t\treturn { cancelled: false, selectedText };\n\t}\n\n\t/**\n\t * The child engine already settled (and persisted) its own turn before it\n\t * reported the replacement, and the host facade's `abort()` is `abortAndRecover()`\n\t * — an unbounded cooperative round trip. Re-entering it during teardown would\n\t * hang session replacement on an unresponsive or dead engine, which is exactly\n\t * what engine recovery exists to survive.\n\t */\n\tprotected override async settleActiveResponseBeforeTeardown(): Promise<void> {}\n\n\toverride dispose(): Promise<void> {\n\t\tif (this.disposePromise) return this.disposePromise;\n\t\tthis.disposed = true;\n\t\tthis.disposePromise = (async () => {\n\t\t\t// EngineHealthController owns the first client stop and joins recovery.\n\t\t\tawait this.health.shutdown();\n\t\t\t// A replacement may have spawned while shutdown joined recovery; the\n\t\t\t// idempotent trailing stop closes that child before disposal returns.\n\t\t\tawait this.client.stop();\n\t\t\tawait super.dispose();\n\t\t})();\n\t\treturn this.disposePromise;\n\t}\n\n\tprivate patchSession(session: AgentSession): void {\n\t\tif (this.patchedSessions.has(session)) return;\n\t\tthis.patchedSessions.add(session);\n\t\tthis.patchSessionManager(session.sessionManager);\n\t\tObject.defineProperties(session, {\n\t\t\tisStreaming: { configurable: true, get: () => this.streaming },\n\t\t\tisCompacting: { configurable: true, get: () => this.compacting },\n\t\t\tcompactionReason: { configurable: true, get: () => this.compactionReason },\n\t\t\tisBashRunning: { configurable: true, get: () => this.activeBashRequestIds.size > 0 },\n\t\t\tsessionName: { configurable: true, get: () => this.remoteSessionName },\n\t\t\tsessionFile: { configurable: true, get: () => this.remoteSessionFile },\n\t\t\tautoCompactionEnabled: { configurable: true, get: () => this.autoCompactionEnabled },\n\t\t\tautoRetryEnabled: { configurable: true, get: () => this.autoRetryEnabled },\n\t\t\tqueuedMessagesPaused: { configurable: true, get: () => this.queuePause.isPaused },\n\t\t\tsubscribe: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (listener: (event: JsonAgentSessionEvent) => void) => this.client.onEvent(listener),\n\t\t\t},\n\t\t\tprompt: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async (text: string, options?: PromptOptions) => {\n\t\t\t\t\tconst cancellationEpoch = this.promptCancellationEpoch;\n\t\t\t\t\tawait this.waitUntilResourcesReady();\n\t\t\t\t\tif (cancellationEpoch !== this.promptCancellationEpoch) return;\n\t\t\t\t\tawait this.client.prompt(text, options?.images, options?.streamingBehavior);\n\t\t\t\t\toptions?.preflightResult?.(true);\n\t\t\t\t},\n\t\t\t},\n\t\t\tsteer: { configurable: true, value: (text: string) => this.client.steer(text) },\n\t\t\tfollowUp: { configurable: true, value: (text: string) => this.client.followUp(text) },\n\t\t\tabort: { configurable: true, value: () => this.abortAndRecover() },\n\t\t\texecuteBash: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async (\n\t\t\t\t\tcommand: string,\n\t\t\t\t\tonChunk?: Parameters<AgentSession[\"executeBash\"]>[1],\n\t\t\t\t\toptions?: Parameters<AgentSession[\"executeBash\"]>[2],\n\t\t\t\t) => {\n\t\t\t\t\tconst key = options?.id ?? Symbol(\"isolated-bash-request\");\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn await this.client.userBashWithUpdates(command, (delta, channel) => onChunk?.(delta, channel), {\n\t\t\t\t\t\t\texcludeFromContext: options?.excludeFromContext,\n\t\t\t\t\t\t\tonRequestId: (requestId) => this.activeBashRequestIds.set(key, requestId),\n\t\t\t\t\t\t});\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tthis.activeBashRequestIds.delete(key);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\trecordBashResult: { configurable: true, value: () => {} },\n\t\t\tabortBash: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (id?: string) => {\n\t\t\t\t\tif (id === undefined) this.dispatchBestEffort(\"abort bash\", this.client.abortBash());\n\t\t\t\t\telse {\n\t\t\t\t\t\tconst requestId = this.activeBashRequestIds.get(id);\n\t\t\t\t\t\tif (requestId) this.dispatchBestEffort(\"abort bash\", this.client.abortBash(requestId));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\tcompact: { configurable: true, value: () => this.client.compact() },\n\t\t\tabortCompaction: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () =>\n\t\t\t\t\tthis.dispatchBestEffort(\n\t\t\t\t\t\t\"abort compaction\",\n\t\t\t\t\t\tthis.client.requestInternal<void>({ type: \"abort_compaction\" }),\n\t\t\t\t\t),\n\t\t\t},\n\t\t\tabortRetry: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => this.dispatchBestEffort(\"abort retry\", this.client.abortRetry()),\n\t\t\t},\n\t\t\tnavigateTree: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async (targetId: string, options?: Parameters<AgentSession[\"navigateTree\"]>[1]) =>\n\t\t\t\t\tthis.client.requestInternal<Awaited<ReturnType<AgentSession[\"navigateTree\"]>>>({\n\t\t\t\t\t\ttype: \"navigate_tree\",\n\t\t\t\t\t\ttargetId,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t}),\n\t\t\t},\n\t\t\treload: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async () => {\n\t\t\t\t\tawait this.client.requestInternal<void>({ type: \"reload\" });\n\t\t\t\t\tawait this.initializeFromEngine();\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetSessionName: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (name: string) => {\n\t\t\t\t\tthis.remoteSessionName = name;\n\t\t\t\t\tthis.dispatchBestEffort(\n\t\t\t\t\t\t\"set session name\",\n\t\t\t\t\t\tthis.client.setSessionName(name).then(() => this.refreshSessionView()),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t},\n\t\t\tgetSteeringMessages: { configurable: true, value: () => [...this.steeringMessages] },\n\t\t\tgetFollowUpMessages: { configurable: true, value: () => [...this.followUpMessages] },\n\t\t\tclearQueue: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tconst queued: QueueSnapshot = {\n\t\t\t\t\t\tsteering: [...this.steeringMessages],\n\t\t\t\t\t\tfollowUp: [...this.followUpMessages],\n\t\t\t\t\t};\n\t\t\t\t\tconst pendingClear = this.pendingQueueClear ?? {\n\t\t\t\t\t\tsnapshot: queued,\n\t\t\t\t\t\tqueueUpdateGeneration: this.queueUpdateGeneration,\n\t\t\t\t\t\tcount: 0,\n\t\t\t\t\t\tsucceeded: false,\n\t\t\t\t\t};\n\t\t\t\t\tthis.pendingQueueClear = pendingClear;\n\t\t\t\t\tpendingClear.count += 1;\n\t\t\t\t\tthis.steeringMessages = [];\n\t\t\t\t\tthis.followUpMessages = [];\n\t\t\t\t\tthis.dispatchBestEffort(\n\t\t\t\t\t\t\"clear queue\",\n\t\t\t\t\t\tthis.client.requestInternal({ type: \"clear_queue\" }).then(\n\t\t\t\t\t\t\t() => this.settleQueueClear(pendingClear, true),\n\t\t\t\t\t\t\t(error: Error) => {\n\t\t\t\t\t\t\t\tthis.settleQueueClear(pendingClear, false);\n\t\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\treturn queued;\n\t\t\t\t},\n\t\t\t},\n\t\t\tpauseQueuedMessages: { configurable: true, value: () => this.queuePause.pause() },\n\t\t\tresumeQueuedMessages: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (beforeRelease?: () => void) => this.queuePause.resume(beforeRelease),\n\t\t\t},\n\t\t\tsetModel: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async (model: Model<Api>, options?: ModelMutationOptions) => {\n\t\t\t\t\tconst selected = await this.client.setModel(model.provider, model.id, options);\n\t\t\t\t\tconst nextModel = session.modelRuntime.getModel(selected.provider, selected.id) ?? model;\n\t\t\t\t\tsession.agent.state.model = nextModel;\n\t\t\t\t\tthis.resolveModelFallback();\n\t\t\t\t\tif (options?.persist === true) await this.syncPersistedModelCatalog(session, nextModel);\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetThinkingLevel: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (level: AgentSession[\"thinkingLevel\"], options?: ModelMutationOptions) => {\n\t\t\t\t\tconst availableLevels = session.getAvailableThinkingLevels();\n\t\t\t\t\tconst effectiveLevel = availableLevels.includes(level)\n\t\t\t\t\t\t? level\n\t\t\t\t\t\t: session.model\n\t\t\t\t\t\t\t? clampThinkingLevel(session.model, level)\n\t\t\t\t\t\t\t: \"off\";\n\t\t\t\t\tsession.agent.state.thinkingLevel = effectiveLevel;\n\t\t\t\t\tconst epoch = ++this.thinkingEpoch;\n\t\t\t\t\tthis.dispatchBestEffort(\n\t\t\t\t\t\t\"set thinking level\",\n\t\t\t\t\t\tthis.client.setThinkingLevelAck(level, options).then((result) => {\n\t\t\t\t\t\t\tthis.applyThinkingAck(session, epoch, result, options?.persist === true);\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t},\n\t\t\tcycleModel: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: async (direction?: \"forward\" | \"backward\", options?: ModelMutationOptions) => {\n\t\t\t\t\tconst previousModel = session.model;\n\t\t\t\t\tconst result = await this.client.cycleModel(direction, options);\n\t\t\t\t\tif (!result) return undefined;\n\t\t\t\t\tconst model = session.modelRuntime.getModel(result.model.provider, result.model.id) ?? result.model;\n\t\t\t\t\tsession.agent.state.model = model;\n\t\t\t\t\tsession.agent.state.thinkingLevel = result.thinkingLevel;\n\t\t\t\t\tthis.resolveModelFallbackAfterExplicitModelSelection(previousModel, model);\n\t\t\t\t\tif (options?.persist === true) await this.syncPersistedModelCatalog(session, model);\n\t\t\t\t\treturn { ...result, model };\n\t\t\t\t},\n\t\t\t},\n\t\t\tcycleThinkingLevel: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (options?: ModelMutationOptions) => {\n\t\t\t\t\tconst levels = session.getAvailableThinkingLevels();\n\t\t\t\t\tif (levels.length <= 1) return undefined;\n\t\t\t\t\tconst current = levels.indexOf(session.thinkingLevel);\n\t\t\t\t\tconst level = levels[(current + 1) % levels.length]!;\n\t\t\t\t\tsession.agent.state.thinkingLevel = level;\n\t\t\t\t\tconst epoch = ++this.thinkingEpoch;\n\t\t\t\t\tthis.dispatchBestEffort(\n\t\t\t\t\t\t\"cycle thinking level\",\n\t\t\t\t\t\tthis.client.setThinkingLevelAck(level, options).then((result) => {\n\t\t\t\t\t\t\tthis.applyThinkingAck(session, epoch, result, options?.persist === true);\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t\treturn level;\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetSteeringMode: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (mode: \"all\" | \"one-at-a-time\") => {\n\t\t\t\t\tsession.agent.steeringMode = mode;\n\t\t\t\t\tthis.dispatchBestEffort(\"set steering mode\", this.client.setSteeringMode(mode));\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetFollowUpMode: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (mode: \"all\" | \"one-at-a-time\") => {\n\t\t\t\t\tsession.agent.followUpMode = mode;\n\t\t\t\t\tthis.dispatchBestEffort(\"set follow-up mode\", this.client.setFollowUpMode(mode));\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetAutoCompactionEnabled: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (enabled: boolean) => {\n\t\t\t\t\tthis.autoCompactionEnabled = enabled;\n\t\t\t\t\tthis.dispatchBestEffort(\"set auto compaction\", this.client.setAutoCompaction(enabled));\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetAutoRetryEnabled: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (enabled: boolean) => {\n\t\t\t\t\tthis.autoRetryEnabled = enabled;\n\t\t\t\t\tthis.dispatchBestEffort(\"set auto retry\", this.client.setAutoRetry(enabled));\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * Cooperative interrupt. Requests the engine's own abort and waits for it —\n\t * no timeout, no termination, no restart. A genuinely wedged engine is the\n\t * user's call to terminate with Ctrl+C (see terminateAndRecover), never an\n\t * automatic consequence of pressing Escape.\n\t */\n\tprivate async abortAndRecover(): Promise<void> {\n\t\tthis.promptCancellationEpoch += 1;\n\t\tawait this.queuePause.settleBeforeAbort();\n\t\tthis.health.markCooperativeAbortStarted();\n\t\ttry {\n\t\t\tawait this.client.abort();\n\t\t} finally {\n\t\t\tthis.health.markCooperativeAbortSettled();\n\t\t\tthis.engineCallbackActive = false;\n\t\t}\n\t}\n\n\tprivate applyThinkingAck(\n\t\tsession: AgentSession,\n\t\tepoch: number,\n\t\tresult: { level: AgentSession[\"thinkingLevel\"]; provider?: string; modelId?: string },\n\t\tpersist: boolean,\n\t): void {\n\t\tif (persist) {\n\t\t\tapplyPersistedThinkingDefault(session, result.level, thinkingPersistTarget(result));\n\t\t}\n\t\tif (epoch === this.thinkingEpoch) {\n\t\t\tsession.agent.state.thinkingLevel = result.level;\n\t\t}\n\t}\n\n\tprivate dispatchBestEffort(label: string, operation: Promise<unknown>): void {\n\t\tvoid operation.catch((error: Error) => {\n\t\t\tif (this.health.isRecovering()) return;\n\t\t\tthis.emitDiagnostic({\n\t\t\t\tactivity: undefined,\n\t\t\t\telapsedMs: 0,\n\t\t\t\tlevel: \"unresponsive\",\n\t\t\t\tmessage: `Interactive engine ${label} failed: ${error.message}`,\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate settleQueueClear(pendingClear: PendingQueueClear, succeeded: boolean): void {\n\t\tif (this.pendingQueueClear !== pendingClear) return;\n\n\t\tpendingClear.count -= 1;\n\t\tpendingClear.succeeded ||= succeeded;\n\t\tif (pendingClear.count > 0) return;\n\n\t\tthis.pendingQueueClear = undefined;\n\t\tif (pendingClear.succeeded || this.queueUpdateGeneration !== pendingClear.queueUpdateGeneration) return;\n\n\t\tthis.steeringMessages = [...pendingClear.snapshot.steering];\n\t\tthis.followUpMessages = [...pendingClear.snapshot.followUp];\n\t}\n\n\tprivate resetUnpersistedSessionView(): void {\n\t\tconst session = super.session;\n\t\tconst manager = SessionManager.create(session.sessionManager.getCwd(), session.sessionManager.getSessionDir());\n\t\tObject.defineProperty(session, \"sessionManager\", { configurable: true, value: manager });\n\t\tthis.patchSessionManager(manager);\n\t\tsession.agent.state.messages = [];\n\t}\n\n\tprivate patchSessionManager(manager: SessionManager): void {\n\t\tObject.defineProperty(manager, \"appendLabelChange\", {\n\t\t\tconfigurable: true,\n\t\t\tvalue: (entryId: string, label?: string) => {\n\t\t\t\tthis.dispatchBestEffort(\n\t\t\t\t\t\"set label\",\n\t\t\t\t\tthis.client\n\t\t\t\t\t\t.requestInternal<void>({ type: \"set_label\", entryId, label })\n\t\t\t\t\t\t.then(() => this.refreshSessionView()),\n\t\t\t\t);\n\t\t\t},\n\t\t});\n\t}\n\n\tprivate async syncPersistedModelCatalog(session: AgentSession, model: Model<Api>): Promise<void> {\n\t\tconst alreadyInScope = session.scopedModels.some(\n\t\t\t(scoped) => scoped.model.provider === model.provider && scoped.model.id === model.id,\n\t\t);\n\t\tconst catalog = await this.client.requestInternal<RpcModelCatalog>({ type: \"get_available_models\" });\n\t\tthis.remoteModelCatalog.apply(catalog);\n\t\tapplyPersistedModelDefault(session, model, alreadyInScope);\n\t}\n\n\tprivate refreshSessionView(): void {\n\t\tconst session = super.session;\n\t\tconst sessionFile = session.sessionFile;\n\t\tif (!sessionFile) return;\n\t\tconst currentManager = session.sessionManager;\n\t\tconst refreshed = SessionManager.open(sessionFile, currentManager.getSessionDir(), currentManager.getCwd());\n\t\tObject.defineProperty(session, \"sessionManager\", { configurable: true, value: refreshed });\n\t\tthis.patchSessionManager(refreshed);\n\t\tsession.agent.state.messages = refreshed.buildSessionContext().messages;\n\t}\n\n\tprivate observeEvent(event: RpcEvent): void {\n\t\tconst session = super.session;\n\t\tswitch (event.type) {\n\t\t\tcase \"agent_start\":\n\t\t\t\tthis.streaming = true;\n\t\t\t\tbreak;\n\t\t\tcase \"agent_end\":\n\t\t\t\tthis.streaming = false;\n\t\t\t\tthis.refreshSessionView();\n\t\t\t\tbreak;\n\t\t\tcase \"compaction_start\":\n\t\t\t\tthis.compacting = true;\n\t\t\t\tthis.compactionReason = event.reason;\n\t\t\t\tbreak;\n\t\t\tcase \"compaction_end\":\n\t\t\t\tthis.compacting = false;\n\t\t\t\tthis.compactionReason = undefined;\n\t\t\t\tbreak;\n\t\t\tcase \"queue_update\":\n\t\t\t\tthis.queueUpdateGeneration += 1;\n\t\t\t\tthis.pendingQueueClear = undefined;\n\t\t\t\tthis.steeringMessages = [...event.steering];\n\t\t\t\tthis.followUpMessages = [...event.followUp];\n\t\t\t\tbreak;\n\t\t\tcase \"model_changed\":\n\t\t\t\tsession.agent.state.model = event.model;\n\t\t\t\tbreak;\n\t\t\tcase \"thinking_level_changed\":\n\t\t\t\tthis.thinkingEpoch += 1;\n\t\t\t\tsession.agent.state.thinkingLevel = event.level;\n\t\t\t\tbreak;\n\t\t\tcase \"session_info_changed\":\n\t\t\t\tthis.remoteSessionName = event.name;\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n"]}