@bastani/atomic 0.9.17-alpha.1 → 0.9.18-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (311) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/builtin/intercom/CHANGELOG.md +8 -0
  3. package/dist/builtin/intercom/index.bundle.mjs +349 -57517
  4. package/dist/builtin/intercom/package.json +1 -1
  5. package/dist/builtin/mcp/index.bundle.mjs +28948 -58339
  6. package/dist/builtin/mcp/package.json +1 -1
  7. package/dist/builtin/mcp/xdg-open +1267 -0
  8. package/dist/builtin/subagents/package.json +1 -1
  9. package/dist/builtin/subagents/src/extension/index.bundle.mjs +7929 -78021
  10. package/dist/builtin/web-access/index.bundle.mjs +70791 -57707
  11. package/dist/builtin/web-access/package.json +1 -1
  12. package/dist/builtin/workflows/builtin/adversarial-verification.js +0 -1
  13. package/dist/builtin/workflows/builtin/{chunk-3y1hmzw6.js → chunk-6v0yv8tj.js} +1 -1
  14. package/dist/builtin/workflows/builtin/{chunk-w9c7rkrk.js → chunk-brerg33r.js} +5 -7
  15. package/dist/builtin/workflows/builtin/{chunk-bz1c9732.js → chunk-ngffz3y8.js} +1 -1
  16. package/dist/builtin/workflows/builtin/{chunk-6rbajjf5.js → chunk-szz1ajz9.js} +1 -3
  17. package/dist/builtin/workflows/builtin/classify-and-act.js +0 -1
  18. package/dist/builtin/workflows/builtin/fan-out-and-synthesize.js +0 -1
  19. package/dist/builtin/workflows/builtin/generate-and-filter.js +0 -1
  20. package/dist/builtin/workflows/builtin/goal.js +2 -5
  21. package/dist/builtin/workflows/builtin/index.js +4 -7
  22. package/dist/builtin/workflows/builtin/loop-until-done.js +0 -1
  23. package/dist/builtin/workflows/builtin/open-claude-design.js +1 -4
  24. package/dist/builtin/workflows/builtin/ralph.js +2 -5
  25. package/dist/builtin/workflows/builtin/steering-context.js +0 -1
  26. package/dist/builtin/workflows/builtin/tournament.js +0 -1
  27. package/dist/builtin/workflows/package.json +1 -1
  28. package/dist/builtin/workflows/src/extension/index.bundle.mjs +39989 -81500
  29. package/dist/builtin/workflows/src/index.js +1253 -58524
  30. package/dist/bun/cli.js.map +1 -1
  31. package/dist/bun/split-loader.js +2 -0
  32. package/dist/bun/split-loader.js.map +1 -1
  33. package/dist/cli/args.js.map +1 -1
  34. package/dist/cli/auth-command.js.map +1 -1
  35. package/dist/cli/session-picker.js.map +1 -1
  36. package/dist/cli/startup-ui.js.map +1 -1
  37. package/dist/cli.js +5 -2
  38. package/dist/cli.js.map +1 -1
  39. package/dist/core/agent-session-extension-bindings.d.ts +19 -2
  40. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  41. package/dist/core/agent-session-extension-bindings.js +253 -74
  42. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  43. package/dist/core/agent-session-methods.d.ts +8 -3
  44. package/dist/core/agent-session-methods.d.ts.map +1 -1
  45. package/dist/core/agent-session-methods.js.map +1 -1
  46. package/dist/core/agent-session-prompt.d.ts +2 -7
  47. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  48. package/dist/core/agent-session-prompt.js +1 -35
  49. package/dist/core/agent-session-prompt.js.map +1 -1
  50. package/dist/core/agent-session-services.d.ts.map +1 -1
  51. package/dist/core/agent-session-services.js +2 -0
  52. package/dist/core/agent-session-services.js.map +1 -1
  53. package/dist/core/agent-session-types.d.ts +2 -0
  54. package/dist/core/agent-session-types.d.ts.map +1 -1
  55. package/dist/core/agent-session-types.js.map +1 -1
  56. package/dist/core/agent-session.d.ts +1 -0
  57. package/dist/core/agent-session.d.ts.map +1 -1
  58. package/dist/core/agent-session.js +2 -0
  59. package/dist/core/agent-session.js.map +1 -1
  60. package/dist/core/auth-guidance.js.map +1 -1
  61. package/dist/core/auth-storage-backends.js.map +1 -1
  62. package/dist/core/auth-storage.js.map +1 -1
  63. package/dist/core/bash-executor.js.map +1 -1
  64. package/dist/core/builtin-packages.d.ts +8 -0
  65. package/dist/core/builtin-packages.d.ts.map +1 -1
  66. package/dist/core/builtin-packages.js +11 -5
  67. package/dist/core/builtin-packages.js.map +1 -1
  68. package/dist/core/event-bus.d.ts +11 -0
  69. package/dist/core/event-bus.d.ts.map +1 -1
  70. package/dist/core/event-bus.js +96 -0
  71. package/dist/core/event-bus.js.map +1 -1
  72. package/dist/core/experimental.js.map +1 -1
  73. package/dist/core/export-html/index.js.map +1 -1
  74. package/dist/core/extensions/builtin-extension-entry-labels.d.ts +6 -0
  75. package/dist/core/extensions/builtin-extension-entry-labels.d.ts.map +1 -0
  76. package/dist/core/extensions/builtin-extension-entry-labels.js +22 -0
  77. package/dist/core/extensions/builtin-extension-entry-labels.js.map +1 -0
  78. package/dist/core/extensions/host-module-bridge.d.ts +22 -0
  79. package/dist/core/extensions/host-module-bridge.d.ts.map +1 -0
  80. package/dist/core/extensions/host-module-bridge.js +39 -0
  81. package/dist/core/extensions/host-module-bridge.js.map +1 -0
  82. package/dist/core/extensions/loader-api.d.ts.map +1 -1
  83. package/dist/core/extensions/loader-api.js +2 -2
  84. package/dist/core/extensions/loader-api.js.map +1 -1
  85. package/dist/core/extensions/loader-core.js.map +1 -1
  86. package/dist/core/extensions/loader-discovery.js.map +1 -1
  87. package/dist/core/extensions/loader-host-modules.d.ts +10 -0
  88. package/dist/core/extensions/loader-host-modules.d.ts.map +1 -0
  89. package/dist/core/extensions/loader-host-modules.js +88 -0
  90. package/dist/core/extensions/loader-host-modules.js.map +1 -0
  91. package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
  92. package/dist/core/extensions/loader-runtime.js +1 -0
  93. package/dist/core/extensions/loader-runtime.js.map +1 -1
  94. package/dist/core/extensions/loader-virtual-modules.d.ts +5 -2
  95. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  96. package/dist/core/extensions/loader-virtual-modules.js +51 -71
  97. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  98. package/dist/core/extensions/loader.d.ts +1 -1
  99. package/dist/core/extensions/loader.js.map +1 -1
  100. package/dist/core/extensions/native-builtin-entries.d.ts +6 -0
  101. package/dist/core/extensions/native-builtin-entries.d.ts.map +1 -0
  102. package/dist/core/extensions/native-builtin-entries.js +23 -0
  103. package/dist/core/extensions/native-builtin-entries.js.map +1 -0
  104. package/dist/core/extensions/runtime-types.d.ts +2 -0
  105. package/dist/core/extensions/runtime-types.d.ts.map +1 -1
  106. package/dist/core/extensions/runtime-types.js.map +1 -1
  107. package/dist/core/keybindings.js.map +1 -1
  108. package/dist/core/lifecycle-timings.d.ts +21 -0
  109. package/dist/core/lifecycle-timings.d.ts.map +1 -0
  110. package/dist/core/lifecycle-timings.js +57 -0
  111. package/dist/core/lifecycle-timings.js.map +1 -0
  112. package/dist/core/mandatory-resource-loader.d.ts.map +1 -1
  113. package/dist/core/mandatory-resource-loader.js +43 -0
  114. package/dist/core/mandatory-resource-loader.js.map +1 -1
  115. package/dist/core/model-runtime.d.ts +8 -0
  116. package/dist/core/model-runtime.d.ts.map +1 -1
  117. package/dist/core/model-runtime.js +82 -0
  118. package/dist/core/model-runtime.js.map +1 -1
  119. package/dist/core/models-store.js.map +1 -1
  120. package/dist/core/package-manager-auto-resources.js.map +1 -1
  121. package/dist/core/package-manager-env.js.map +1 -1
  122. package/dist/core/package-manager-git.js.map +1 -1
  123. package/dist/core/package-manager-manifest.js.map +1 -1
  124. package/dist/core/package-manager-npm.js.map +1 -1
  125. package/dist/core/package-manager-paths.js.map +1 -1
  126. package/dist/core/package-manager-resolver.js.map +1 -1
  127. package/dist/core/project-trust.js.map +1 -1
  128. package/dist/core/prompt-templates-async.js.map +1 -1
  129. package/dist/core/prompt-templates.js.map +1 -1
  130. package/dist/core/provider-attribution.js.map +1 -1
  131. package/dist/core/remote-catalog-provider.js.map +1 -1
  132. package/dist/core/resource-loader-assets.js.map +1 -1
  133. package/dist/core/resource-loader-context-files.js.map +1 -1
  134. package/dist/core/resource-loader-core.d.ts +5 -1
  135. package/dist/core/resource-loader-core.d.ts.map +1 -1
  136. package/dist/core/resource-loader-core.js +90 -1
  137. package/dist/core/resource-loader-core.js.map +1 -1
  138. package/dist/core/resource-loader-discovery.js.map +1 -1
  139. package/dist/core/resource-loader-paths.js.map +1 -1
  140. package/dist/core/resource-loader-source-info.js.map +1 -1
  141. package/dist/core/resource-loader-types.d.ts +16 -0
  142. package/dist/core/resource-loader-types.d.ts.map +1 -1
  143. package/dist/core/resource-loader-types.js.map +1 -1
  144. package/dist/core/sdk.d.ts.map +1 -1
  145. package/dist/core/sdk.js +4 -1
  146. package/dist/core/sdk.js.map +1 -1
  147. package/dist/core/session-manager-core.js.map +1 -1
  148. package/dist/core/session-manager-list.js.map +1 -1
  149. package/dist/core/session-manager-paths.js.map +1 -1
  150. package/dist/core/settings-manager-core.d.ts +6 -0
  151. package/dist/core/settings-manager-core.d.ts.map +1 -1
  152. package/dist/core/settings-manager-core.js +24 -0
  153. package/dist/core/settings-manager-core.js.map +1 -1
  154. package/dist/core/settings-manager-ui-accessors.js.map +1 -1
  155. package/dist/core/settings-storage.js.map +1 -1
  156. package/dist/core/skills-async.js.map +1 -1
  157. package/dist/core/skills.js.map +1 -1
  158. package/dist/core/slash-commands.d.ts.map +1 -1
  159. package/dist/core/slash-commands.js +0 -6
  160. package/dist/core/slash-commands.js.map +1 -1
  161. package/dist/core/system-prompt.js.map +1 -1
  162. package/dist/core/telemetry.js.map +1 -1
  163. package/dist/core/timings.js.map +1 -1
  164. package/dist/core/tools/bash.js.map +1 -1
  165. package/dist/core/tools/output-accumulator.js.map +1 -1
  166. package/dist/core/tools/powershell.js.map +1 -1
  167. package/dist/core/tools/read.js.map +1 -1
  168. package/dist/core/tools/session-temp-cleanup.js.map +1 -1
  169. package/dist/core/tools/session-temp-dir.js.map +1 -1
  170. package/dist/core/tools/todos-paths.js.map +1 -1
  171. package/dist/core/trust-manager.js.map +1 -1
  172. package/dist/index.d.ts +1 -1
  173. package/dist/index.js.map +1 -1
  174. package/dist/main-deferred-startup.d.ts +16 -0
  175. package/dist/main-deferred-startup.d.ts.map +1 -1
  176. package/dist/main-deferred-startup.js +14 -0
  177. package/dist/main-deferred-startup.js.map +1 -1
  178. package/dist/main-session.js.map +1 -1
  179. package/dist/main.d.ts.map +1 -1
  180. package/dist/main.js +41 -22
  181. package/dist/main.js.map +1 -1
  182. package/dist/migrations.js.map +1 -1
  183. package/dist/modes/interactive/chat-input-actions.js.map +1 -1
  184. package/dist/modes/interactive/components/config-selector-list.js.map +1 -1
  185. package/dist/modes/interactive/components/config-selector-project-scope.js.map +1 -1
  186. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  187. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
  188. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  189. package/dist/modes/interactive/components/startup-identity.d.ts.map +1 -1
  190. package/dist/modes/interactive/components/startup-identity.js +4 -0
  191. package/dist/modes/interactive/components/startup-identity.js.map +1 -1
  192. package/dist/modes/interactive/external-editor.js.map +1 -1
  193. package/dist/modes/interactive/interactive-editor-actions.js +13 -5
  194. package/dist/modes/interactive/interactive-editor-actions.js.map +1 -1
  195. package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
  196. package/dist/modes/interactive/interactive-input-handling.js +2 -5
  197. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  198. package/dist/modes/interactive/interactive-mode-deps.d.ts +1 -1
  199. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
  200. package/dist/modes/interactive/interactive-mode-surface.d.ts +8 -8
  201. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  202. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  203. package/dist/modes/interactive/interactive-onboarding.js +1 -1
  204. package/dist/modes/interactive/interactive-onboarding.js.map +1 -1
  205. package/dist/modes/interactive/interactive-prompt-restore.d.ts.map +1 -1
  206. package/dist/modes/interactive/interactive-prompt-restore.js +2 -1
  207. package/dist/modes/interactive/interactive-prompt-restore.js.map +1 -1
  208. package/dist/modes/interactive/interactive-prompt-turn.js.map +1 -1
  209. package/dist/modes/interactive/interactive-render-chat.js +2 -0
  210. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  211. package/dist/modes/interactive/interactive-resource-disclosure.js +21 -53
  212. package/dist/modes/interactive/interactive-resource-disclosure.js.map +1 -1
  213. package/dist/modes/interactive/interactive-resource-paths.js +29 -5
  214. package/dist/modes/interactive/interactive-resource-paths.js.map +1 -1
  215. package/dist/modes/interactive/interactive-resource-rendering.js +66 -69
  216. package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -1
  217. package/dist/modes/interactive/interactive-startup-chat-container.d.ts.map +1 -1
  218. package/dist/modes/interactive/interactive-startup-chat-container.js +2 -0
  219. package/dist/modes/interactive/interactive-startup-chat-container.js.map +1 -1
  220. package/dist/modes/interactive/interactive-startup.d.ts +2 -0
  221. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  222. package/dist/modes/interactive/interactive-startup.js +30 -10
  223. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  224. package/dist/modes/interactive/interactive-tui.d.ts.map +1 -1
  225. package/dist/modes/interactive/interactive-tui.js +12 -2
  226. package/dist/modes/interactive/interactive-tui.js.map +1 -1
  227. package/dist/modes/interactive/theme/global-theme.js.map +1 -1
  228. package/dist/modes/interactive/theme/theme-loading.js.map +1 -1
  229. package/dist/modes/interactive-engine/create-isolated-runtime.js.map +1 -1
  230. package/dist/modes/interactive-engine/engine-child-liveness.d.ts +2 -0
  231. package/dist/modes/interactive-engine/engine-child-liveness.d.ts.map +1 -1
  232. package/dist/modes/interactive-engine/engine-child-liveness.js +16 -2
  233. package/dist/modes/interactive-engine/engine-child-liveness.js.map +1 -1
  234. package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
  235. package/dist/modes/interactive-engine/engine-monitor.d.ts +5 -0
  236. package/dist/modes/interactive-engine/engine-monitor.d.ts.map +1 -1
  237. package/dist/modes/interactive-engine/engine-monitor.js +24 -0
  238. package/dist/modes/interactive-engine/engine-monitor.js.map +1 -1
  239. package/dist/modes/interactive-engine/engine-render-service.js.map +1 -1
  240. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts +3 -1
  241. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts.map +1 -1
  242. package/dist/modes/interactive-engine/extension-ui-bridge.js +6 -0
  243. package/dist/modes/interactive-engine/extension-ui-bridge.js.map +1 -1
  244. package/dist/modes/interactive-engine/isolated-runtime.d.ts +21 -2
  245. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
  246. package/dist/modes/interactive-engine/isolated-runtime.js +160 -7
  247. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  248. package/dist/modes/interactive-engine/protocol.d.ts +9 -4
  249. package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
  250. package/dist/modes/interactive-engine/protocol.js +8 -4
  251. package/dist/modes/interactive-engine/protocol.js.map +1 -1
  252. package/dist/modes/interactive-engine/resource-readiness-error.d.ts +6 -0
  253. package/dist/modes/interactive-engine/resource-readiness-error.d.ts.map +1 -0
  254. package/dist/modes/interactive-engine/resource-readiness-error.js +11 -0
  255. package/dist/modes/interactive-engine/resource-readiness-error.js.map +1 -0
  256. package/dist/modes/rpc/rpc-client-process.d.ts.map +1 -1
  257. package/dist/modes/rpc/rpc-client-process.js +3 -0
  258. package/dist/modes/rpc/rpc-client-process.js.map +1 -1
  259. package/dist/modes/rpc/rpc-client.d.ts +1 -0
  260. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  261. package/dist/modes/rpc/rpc-client.js +5 -1
  262. package/dist/modes/rpc/rpc-client.js.map +1 -1
  263. package/dist/modes/rpc/rpc-command-handler.d.ts +4 -1
  264. package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
  265. package/dist/modes/rpc/rpc-command-handler.js +59 -18
  266. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  267. package/dist/modes/rpc/rpc-mode.d.ts +4 -13
  268. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  269. package/dist/modes/rpc/rpc-mode.js +31 -2
  270. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  271. package/dist/modes/rpc/rpc-resource-readiness.d.ts +11 -0
  272. package/dist/modes/rpc/rpc-resource-readiness.d.ts.map +1 -0
  273. package/dist/modes/rpc/rpc-resource-readiness.js +51 -0
  274. package/dist/modes/rpc/rpc-resource-readiness.js.map +1 -0
  275. package/dist/modes/rpc/rpc-session-binding.d.ts +2 -0
  276. package/dist/modes/rpc/rpc-session-binding.d.ts.map +1 -1
  277. package/dist/modes/rpc/rpc-session-binding.js +21 -0
  278. package/dist/modes/rpc/rpc-session-binding.js.map +1 -1
  279. package/dist/modes/rpc/rpc-types.d.ts +7 -0
  280. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  281. package/dist/modes/rpc/rpc-types.js.map +1 -1
  282. package/dist/package-manager-cli-parser.js.map +1 -1
  283. package/dist/package-manager-cli.js.map +1 -1
  284. package/dist/rpc-entry.js.map +1 -1
  285. package/dist/self-update-plan.js.map +1 -1
  286. package/dist/utils/changelog.d.ts +1 -1
  287. package/dist/utils/changelog.js.map +1 -1
  288. package/dist/utils/module-require.js.map +1 -1
  289. package/dist/utils/pi-user-agent.js.map +1 -1
  290. package/dist/utils/shell.js.map +1 -1
  291. package/dist/utils/tools-manager.js.map +1 -1
  292. package/dist/utils/version-check.js.map +1 -1
  293. package/dist/utils/windows-self-update.js.map +1 -1
  294. package/docs/development.md +28 -1
  295. package/docs/extensions.md +5 -3
  296. package/docs/quickstart.md +1 -3
  297. package/docs/sdk.md +2 -0
  298. package/docs/usage.md +3 -1
  299. package/docs/windows.md +8 -0
  300. package/npm-shrinkwrap.json +32 -32
  301. package/package.json +4 -4
  302. package/dist/builtin/workflows/builtin/chunk-4febxsv4.js +0 -264
  303. package/dist/builtin/workflows/builtin/chunk-5wgwscd0.js +0 -4
  304. package/dist/builtin/workflows/builtin/chunk-dattsgxg.js +0 -529
  305. package/dist/builtin/workflows/builtin/chunk-gdx0avpx.js +0 -70082
  306. package/dist/builtin/workflows/builtin/chunk-qx2ptjs3.js +0 -215
  307. package/dist/builtin/workflows/builtin/chunk-x2ghn0je.js +0 -4110
  308. package/dist/core/atomic-guide-command.d.ts +0 -41
  309. package/dist/core/atomic-guide-command.d.ts.map +0 -1
  310. package/dist/core/atomic-guide-command.js +0 -311
  311. package/dist/core/atomic-guide-command.js.map +0 -1
@@ -1,8 +1,82 @@
1
1
  import { basename, dirname } from "node:path";
2
2
  import { resetApiProviders } from "@bastani/pi-ai/compat";
3
3
  import { recoverProtectedStreamingCustomMessages } from "./agent-session-persistent-custom-messages.js";
4
+ import { ExtensionRunner } from "./extensions/index.js";
4
5
  import { emitSessionShutdownEvent } from "./extensions/runner.js";
6
+ import { ModelRegistry } from "./model-registry.js";
5
7
  import { getSkillCatalog } from "./skill-catalog.js";
8
+ class ExtensionPublicationGate {
9
+ constructor(resourceLoader, runner, modelRuntime, replacedProviderIds) {
10
+ this.effects = [];
11
+ this.providerIds = new Set();
12
+ this.discarded = false;
13
+ this.resourceLoader = resourceLoader;
14
+ this.runner = runner;
15
+ this.providerTransaction = modelRuntime.createExtensionProviderTransaction(replacedProviderIds);
16
+ }
17
+ defer(effect) {
18
+ if (!this.discarded)
19
+ this.effects.push(effect);
20
+ }
21
+ async publishProviders() {
22
+ await this.providerTransaction.commit();
23
+ }
24
+ discard() {
25
+ this.discarded = true;
26
+ this.effects.length = 0;
27
+ }
28
+ async release() {
29
+ const effects = this.effects.splice(0);
30
+ for (const effect of effects) {
31
+ try {
32
+ await effect();
33
+ }
34
+ catch (error) {
35
+ this.report(error, "session_start");
36
+ }
37
+ }
38
+ }
39
+ report(error, event) {
40
+ this.runner.emitError({
41
+ extensionPath: "<runtime>",
42
+ event,
43
+ error: error instanceof Error ? error.message : String(error),
44
+ });
45
+ }
46
+ }
47
+ function buildExtensionResourcePathsForLoader(session, loader, entries) {
48
+ return entries.map((entry) => {
49
+ const extension = loader
50
+ .getExtensions()
51
+ .extensions.find((candidate) => candidate.path === entry.extensionPath ||
52
+ candidate.resolvedPath === entry.extensionPath ||
53
+ candidate.sourceInfo.path === entry.extensionPath);
54
+ const sourceInfo = extension?.sourceInfo;
55
+ return {
56
+ path: entry.path,
57
+ metadata: {
58
+ source: sourceInfo?.source ?? session.getExtensionSourceLabel(entry.extensionPath),
59
+ scope: sourceInfo?.scope ?? "temporary",
60
+ origin: sourceInfo?.origin ?? "top-level",
61
+ baseDir: sourceInfo?.baseDir ?? (entry.extensionPath.startsWith("<") ? undefined : dirname(entry.extensionPath)),
62
+ configurationOrigin: sourceInfo?.configurationOrigin,
63
+ },
64
+ };
65
+ });
66
+ }
67
+ async function extendRunnerResources(session, runner, loader, reason) {
68
+ if (!runner.hasHandlers("resources_discover"))
69
+ return;
70
+ const { skillPaths, promptPaths, themePaths } = await runner.emitResourcesDiscover(session._cwd, reason);
71
+ if (skillPaths.length === 0 && promptPaths.length === 0 && themePaths.length === 0)
72
+ return;
73
+ const extensionPaths = {
74
+ skillPaths: buildExtensionResourcePathsForLoader(session, loader, skillPaths),
75
+ promptPaths: buildExtensionResourcePathsForLoader(session, loader, promptPaths),
76
+ themePaths: buildExtensionResourcePathsForLoader(session, loader, themePaths),
77
+ };
78
+ await loader.extendResources(extensionPaths);
79
+ }
6
80
  export async function bindExtensions(bindings) {
7
81
  if (bindings.uiContext !== undefined) {
8
82
  this._extensionUIContext = bindings.uiContext;
@@ -27,42 +101,12 @@ export async function bindExtensions(bindings) {
27
101
  }
28
102
  }
29
103
  export async function extendResourcesFromExtensions(reason) {
30
- if (!this._extensionRunner.hasHandlers("resources_discover")) {
31
- return;
32
- }
33
- const { skillPaths, promptPaths, themePaths } = await this._extensionRunner.emitResourcesDiscover(this._cwd, reason);
34
- if (skillPaths.length === 0 && promptPaths.length === 0 && themePaths.length === 0) {
35
- return;
36
- }
37
- const extensionPaths = {
38
- skillPaths: this.buildExtensionResourcePaths(skillPaths),
39
- promptPaths: this.buildExtensionResourcePaths(promptPaths),
40
- themePaths: this.buildExtensionResourcePaths(themePaths),
41
- };
42
- await this._resourceLoader.extendResources(extensionPaths);
104
+ await extendRunnerResources(this, this._extensionRunner, this._resourceLoader, reason);
43
105
  this._baseSystemPrompt = this._rebuildSystemPrompt(this.getActiveToolNames());
44
106
  this.agent.state.systemPrompt = this._systemPromptOverride ?? this._baseSystemPrompt;
45
107
  }
46
108
  export function buildExtensionResourcePaths(entries) {
47
- return entries.map((entry) => {
48
- const extensions = this._resourceLoader?.getExtensions().extensions ?? [];
49
- const extension = extensions.find((candidate) => candidate.path === entry.extensionPath ||
50
- candidate.resolvedPath === entry.extensionPath ||
51
- candidate.sourceInfo.path === entry.extensionPath);
52
- const sourceInfo = extension?.sourceInfo;
53
- const source = sourceInfo?.source ?? this.getExtensionSourceLabel(entry.extensionPath);
54
- const baseDir = sourceInfo?.baseDir ?? (entry.extensionPath.startsWith("<") ? undefined : dirname(entry.extensionPath));
55
- return {
56
- path: entry.path,
57
- metadata: {
58
- source,
59
- scope: sourceInfo?.scope ?? "temporary",
60
- origin: sourceInfo?.origin ?? "top-level",
61
- baseDir,
62
- configurationOrigin: sourceInfo?.configurationOrigin,
63
- },
64
- };
65
- });
109
+ return buildExtensionResourcePathsForLoader(this, this._resourceLoader, entries);
66
110
  }
67
111
  export function getExtensionSourceLabel(extensionPath) {
68
112
  if (extensionPath.startsWith("<")) {
@@ -99,7 +143,7 @@ export function _refreshCurrentModelFromRegistry() {
99
143
  this._refreshBaseSystemPromptFromActiveTools();
100
144
  this._emit({ type: "model_changed", model: refreshedModel, previousModel, source: "restore" });
101
145
  }
102
- export function _bindExtensionCore(runner) {
146
+ export function _bindExtensionCore(runner, publication) {
103
147
  const getCommands = () => {
104
148
  const extensionCommands = runner.getRegisteredCommands().map((command) => ({
105
149
  name: command.invocationName,
@@ -113,7 +157,7 @@ export function _bindExtensionCore(runner) {
113
157
  source: "prompt",
114
158
  sourceInfo: template.sourceInfo,
115
159
  }));
116
- const skills = getSkillCatalog(this._resourceLoader).commands.map((command) => ({
160
+ const skills = getSkillCatalog(publication?.resourceLoader ?? this._resourceLoader).commands.map((command) => ({
117
161
  name: `skill:${command.name}`,
118
162
  description: command.description,
119
163
  source: "skill",
@@ -123,6 +167,10 @@ export function _bindExtensionCore(runner) {
123
167
  };
124
168
  runner.bindCore({
125
169
  sendMessage: (message, options) => {
170
+ if (publication) {
171
+ publication.defer(() => this.sendCustomMessage(message, options));
172
+ return Promise.resolve();
173
+ }
126
174
  const delivery = this.sendCustomMessage(message, options);
127
175
  void delivery.catch((err) => {
128
176
  runner.emitError({
@@ -134,6 +182,10 @@ export function _bindExtensionCore(runner) {
134
182
  return delivery;
135
183
  },
136
184
  sendMessages: (messages, options) => {
185
+ if (publication) {
186
+ publication.defer(() => this.sendCustomMessages(messages, options));
187
+ return Promise.resolve();
188
+ }
137
189
  const delivery = this.sendCustomMessages(messages, options);
138
190
  void delivery.catch((err) => {
139
191
  runner.emitError({
@@ -145,42 +197,79 @@ export function _bindExtensionCore(runner) {
145
197
  return delivery;
146
198
  },
147
199
  sendUserMessage: (content, options) => {
148
- this.sendUserMessage(content, options).catch((err) => {
200
+ const send = () => this.sendUserMessage(content, options).catch((err) => {
149
201
  runner.emitError({
150
202
  extensionPath: "<runtime>",
151
203
  event: "send_user_message",
152
204
  error: err instanceof Error ? err.message : String(err),
153
205
  });
154
206
  });
207
+ if (publication)
208
+ publication.defer(send);
209
+ else
210
+ void send();
155
211
  },
156
212
  appendEntry: (customType, data) => {
157
- const id = this.sessionManager.appendCustomEntry(customType, data);
158
- const entry = this.sessionManager.getEntry(id);
159
- if (entry)
160
- this._emit({ type: "entry_appended", entry });
213
+ const append = () => {
214
+ const id = this.sessionManager.appendCustomEntry(customType, data);
215
+ const entry = this.sessionManager.getEntry(id);
216
+ if (entry)
217
+ this._emit({ type: "entry_appended", entry });
218
+ };
219
+ if (publication)
220
+ publication.defer(append);
221
+ else
222
+ append();
161
223
  },
162
224
  setSessionName: (name) => {
163
- this.setSessionName(name);
225
+ if (publication)
226
+ publication.defer(() => this.setSessionName(name));
227
+ else
228
+ this.setSessionName(name);
164
229
  },
165
230
  getSessionName: () => {
166
231
  return this.sessionManager.getSessionName();
167
232
  },
168
233
  setLabel: (entryId, label) => {
169
- this.sessionManager.appendLabelChange(entryId, label);
234
+ if (publication) {
235
+ publication.defer(() => {
236
+ this.sessionManager.appendLabelChange(entryId, label);
237
+ });
238
+ }
239
+ else
240
+ this.sessionManager.appendLabelChange(entryId, label);
170
241
  },
171
242
  getActiveTools: () => this.getActiveToolNames(),
172
243
  getAllTools: () => this.getAllTools(),
173
- setActiveTools: (toolNames) => this.setActiveToolsByName(toolNames),
174
- refreshTools: () => this._refreshToolRegistry(),
244
+ setActiveTools: (toolNames) => {
245
+ if (publication)
246
+ publication.defer(() => this.setActiveToolsByName(toolNames));
247
+ else
248
+ this.setActiveToolsByName(toolNames);
249
+ },
250
+ refreshTools: () => {
251
+ if (!publication)
252
+ this._refreshToolRegistry();
253
+ },
175
254
  getCommands,
176
255
  setModel: async (model) => {
177
- if (!this.modelRuntime.hasConfiguredAuth(model.provider))
256
+ const hasConfiguredAuth = publication?.providerTransaction.hasConfiguredAuth(model.provider) ??
257
+ this.modelRuntime.hasConfiguredAuth(model.provider);
258
+ if (!hasConfiguredAuth)
178
259
  return false;
179
- await this.setModel(model);
260
+ if (publication)
261
+ publication.defer(() => this.setModel(model));
262
+ else
263
+ await this.setModel(model);
180
264
  return true;
181
265
  },
182
266
  getThinkingLevel: () => this.thinkingLevel,
183
- setThinkingLevel: (level) => this.setThinkingLevel(level),
267
+ setThinkingLevel: (level) => {
268
+ if (publication)
269
+ publication.defer(() => this.setThinkingLevel(level));
270
+ else
271
+ this.setThinkingLevel(level);
272
+ },
184
273
  }, {
185
274
  getModel: () => this.model,
186
275
  // Read through the public accessor, not `_scopedModels`: in the isolated
@@ -192,14 +281,22 @@ export function _bindExtensionCore(runner) {
192
281
  isIdle: () => !this.isStreaming,
193
282
  isProjectTrusted: () => this.settingsManager.isProjectTrusted(),
194
283
  getSignal: () => this.agent.signal,
195
- abort: () => this.abort(),
284
+ abort: () => {
285
+ if (publication)
286
+ publication.defer(() => this.abort());
287
+ else
288
+ this.abort();
289
+ },
196
290
  hasPendingMessages: () => this.pendingMessageCount > 0,
197
291
  shutdown: () => {
198
- this._extensionShutdownHandler?.();
292
+ if (publication)
293
+ publication.defer(() => this._extensionShutdownHandler?.());
294
+ else
295
+ this._extensionShutdownHandler?.();
199
296
  },
200
297
  getContextUsage: () => this.getContextUsage(),
201
298
  compact: (options) => {
202
- void (async () => {
299
+ const compact = async () => {
203
300
  try {
204
301
  const result = await this.compact({
205
302
  ...(options?.compression_ratio === undefined
@@ -214,13 +311,29 @@ export function _bindExtensionCore(runner) {
214
311
  const err = error instanceof Error ? error : new Error(String(error));
215
312
  options?.onError?.(err);
216
313
  }
217
- })();
314
+ };
315
+ if (publication)
316
+ publication.defer(compact);
317
+ else
318
+ void compact();
218
319
  },
219
320
  getSystemPrompt: () => this.systemPrompt,
220
- getSkillCatalog: () => getSkillCatalog(this._resourceLoader),
321
+ getSkillCatalog: () => getSkillCatalog(publication?.resourceLoader ?? this._resourceLoader),
221
322
  getSystemPromptOptions: () => this._baseSystemPromptOptions,
222
323
  }, {
223
324
  registerProvider: (providerOrName, config) => {
325
+ const providerId = typeof providerOrName === "string" ? providerOrName : providerOrName.id;
326
+ if (publication) {
327
+ publication.providerIds.add(providerId);
328
+ if (typeof providerOrName === "string") {
329
+ publication.providerTransaction.registerProvider(providerOrName, config);
330
+ }
331
+ else
332
+ publication.providerTransaction.registerNativeProvider(providerOrName);
333
+ return;
334
+ }
335
+ this._extensionProviderIds.add(providerId);
336
+ this._resourceLoader.getExtensions().runtime.extensionProviderIds.add(providerId);
224
337
  if (typeof providerOrName === "string")
225
338
  this._modelRuntime.registerProvider(providerOrName, config);
226
339
  else
@@ -228,8 +341,16 @@ export function _bindExtensionCore(runner) {
228
341
  this.refreshCurrentModelFromRegistry();
229
342
  },
230
343
  unregisterProvider: (name) => {
231
- this._modelRuntime.unregisterProvider(name);
232
- this.refreshCurrentModelFromRegistry();
344
+ if (publication) {
345
+ publication.providerIds.delete(name);
346
+ publication.providerTransaction.unregisterProvider(name);
347
+ }
348
+ else {
349
+ this._extensionProviderIds.delete(name);
350
+ this._resourceLoader.getExtensions().runtime.extensionProviderIds.delete(name);
351
+ this._modelRuntime.unregisterProvider(name);
352
+ this.refreshCurrentModelFromRegistry();
353
+ }
233
354
  },
234
355
  });
235
356
  }
@@ -237,29 +358,87 @@ export async function reload(options) {
237
358
  const reason = options?.reason ?? "reload";
238
359
  const oldRunner = this._extensionRunner;
239
360
  const previousFlagValues = oldRunner.getExplicitFlagValues();
240
- if (reason === "reload") {
241
- await emitSessionShutdownEvent(oldRunner, { type: "session_shutdown", reason: "reload" });
361
+ const activeToolNames = this.getActiveToolNames();
362
+ const prepareResourceReload = this._resourceLoader.prepareReload?.bind(this._resourceLoader);
363
+ if (prepareResourceReload === undefined || this._resourceLoader.supportsTransactionalReload?.() === false) {
364
+ if (options?.failOnExtensionErrors) {
365
+ throw new Error("Strict extension reload requires a transactional resource loader");
366
+ }
367
+ if (reason === "reload")
368
+ await emitSessionShutdownEvent(oldRunner, { type: "session_shutdown", reason: "reload" });
369
+ oldRunner.invalidate();
370
+ await this.settingsManager.reload();
371
+ resetApiProviders();
372
+ await this._resourceLoader.reload();
373
+ this._buildRuntime({ activeToolNames, flagValues: previousFlagValues, includeAllExtensionTools: true });
374
+ await options?.beforeSessionStart?.();
375
+ const hasBindings = this._extensionUIContext ||
376
+ this._extensionCommandContextActions ||
377
+ this._extensionShutdownHandler ||
378
+ this._extensionErrorListener;
379
+ if (hasBindings) {
380
+ await this._extensionRunner.emit({ type: "session_start", reason });
381
+ await this.extendResourcesFromExtensions(reason);
382
+ }
383
+ return;
242
384
  }
243
- oldRunner.invalidate();
244
- await this.settingsManager.reload();
245
- resetApiProviders();
246
- await this._resourceLoader.reload();
247
- this._buildRuntime({
248
- activeToolNames: this.getActiveToolNames(),
249
- flagValues: previousFlagValues,
250
- includeAllExtensionTools: true,
251
- });
252
- // Runtime-dependent state must be refreshed here so newly loaded extensions
253
- // observe it during session_start rather than only after reload() resolves.
254
- await options?.beforeSessionStart?.();
255
- const hasBindings = this._extensionUIContext ||
256
- this._extensionCommandContextActions ||
257
- this._extensionShutdownHandler ||
258
- this._extensionErrorListener;
259
- if (hasBindings) {
260
- await this._extensionRunner.emit({ type: "session_start", reason });
261
- await this.extendResourcesFromExtensions(reason);
385
+ const settingsTransaction = await this.settingsManager.prepareReload();
386
+ const resourceTransaction = await prepareResourceReload(settingsTransaction.settingsManager);
387
+ const errors = resourceTransaction.loader.getExtensions().errors;
388
+ if (options?.failOnExtensionErrors && errors.length > 0) {
389
+ throw new Error(`Failed to load extensions: ${errors.map(({ path, error }) => `${path}: ${error}`).join("; ")}`);
390
+ }
391
+ const extensionsResult = resourceTransaction.loader.getExtensions();
392
+ for (const [name, value] of previousFlagValues) {
393
+ extensionsResult.runtime.flagValues.set(name, value);
394
+ extensionsResult.runtime.explicitFlagNames ??= new Set();
395
+ extensionsResult.runtime.explicitFlagNames.add(name);
396
+ }
397
+ const candidateRunner = new ExtensionRunner(extensionsResult.extensions, extensionsResult.runtime, this._cwd, this.sessionManager, new ModelRegistry(this._modelRuntime), this._orchestrationContext, this._subagentPolicy);
398
+ const publication = new ExtensionPublicationGate(resourceTransaction.loader, candidateRunner, this._modelRuntime, this._extensionProviderIds);
399
+ let commitPreparedResources;
400
+ let rollbackPreparedResources;
401
+ try {
402
+ this._bindExtensionCore(candidateRunner, publication);
403
+ candidateRunner.setUIContext(this._extensionUIContext, this._extensionMode);
404
+ candidateRunner.bindCommandContext(this._extensionCommandContextActions);
405
+ await options?.beforeSessionStart?.();
406
+ const hasBindings = this._extensionUIContext ||
407
+ this._extensionCommandContextActions ||
408
+ this._extensionShutdownHandler ||
409
+ this._extensionErrorListener;
410
+ if (hasBindings) {
411
+ await candidateRunner.emit({ type: "session_start", reason });
412
+ await extendRunnerResources(this, candidateRunner, resourceTransaction.loader, reason);
413
+ }
414
+ const preparedResources = resourceTransaction.prepareCommit?.();
415
+ if (preparedResources) {
416
+ commitPreparedResources = () => preparedResources.commit();
417
+ rollbackPreparedResources = () => preparedResources.rollback();
418
+ }
419
+ await publication.publishProviders();
262
420
  }
421
+ catch (error) {
422
+ rollbackPreparedResources?.();
423
+ publication.discard();
424
+ candidateRunner.invalidate();
425
+ throw error;
426
+ }
427
+ settingsTransaction.commit();
428
+ resourceTransaction.activate(this.settingsManager);
429
+ if (commitPreparedResources)
430
+ commitPreparedResources();
431
+ else
432
+ resourceTransaction.commit();
433
+ resetApiProviders();
434
+ this._extensionProviderIds = new Set(publication.providerIds);
435
+ extensionsResult.runtime.extensionProviderIds = new Set(publication.providerIds);
436
+ this.refreshCurrentModelFromRegistry();
437
+ this._buildRuntime({ activeToolNames, flagValues: previousFlagValues, includeAllExtensionTools: true });
438
+ if (reason === "reload")
439
+ await emitSessionShutdownEvent(oldRunner, { type: "session_shutdown", reason: "reload" });
440
+ oldRunner.invalidate();
441
+ await publication.release();
263
442
  }
264
443
  // =========================================================================
265
444
  // Auto-Retry
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-extension-bindings.js","sourceRoot":"","sources":["../../src/core/agent-session-extension-bindings.ts"],"names":[],"mappings":"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","sourcesContent":["import { basename, dirname } from \"node:path\";\nimport { resetApiProviders } from \"@bastani/pi-ai/compat\";\nimport type { AgentSessionInternalSurface as AgentSession } from \"./agent-session-methods.ts\";\nimport { recoverProtectedStreamingCustomMessages } from \"./agent-session-persistent-custom-messages.ts\";\nimport type { AgentSessionReloadOptions, ExtensionBindings } from \"./agent-session-types.ts\";\nimport type { ExtensionRunner } from \"./extensions/index.ts\";\nimport { emitSessionShutdownEvent } from \"./extensions/runner.ts\";\nimport type { PathMetadata } from \"./package-manager.ts\";\nimport type { ResourceExtensionPaths } from \"./resource-loader.ts\";\nimport { getSkillCatalog } from \"./skill-catalog.ts\";\nimport type { SlashCommandInfo } from \"./slash-commands.ts\";\n\nexport async function bindExtensions(this: AgentSession, bindings: ExtensionBindings): Promise<void> {\n\tif (bindings.uiContext !== undefined) {\n\t\tthis._extensionUIContext = bindings.uiContext;\n\t}\n\tif (bindings.mode !== undefined) {\n\t\tthis._extensionMode = bindings.mode;\n\t}\n\tif (bindings.commandContextActions !== undefined) {\n\t\tthis._extensionCommandContextActions = bindings.commandContextActions;\n\t}\n\tif (bindings.shutdownHandler !== undefined) {\n\t\tthis._extensionShutdownHandler = bindings.shutdownHandler;\n\t}\n\tif (bindings.onError !== undefined) {\n\t\tthis._extensionErrorListener = bindings.onError;\n\t}\n\n\tthis._applyExtensionBindings(this._extensionRunner);\n\tawait this._extensionRunner.emit(this._sessionStartEvent);\n\tawait this.extendResourcesFromExtensions(this._sessionStartEvent.reason === \"reload\" ? \"reload\" : \"startup\");\n\tif (recoverProtectedStreamingCustomMessages(this) > 0) {\n\t\tawait this._continueQueuedAgentMessages();\n\t}\n}\n\nexport async function extendResourcesFromExtensions(this: AgentSession, reason: \"startup\" | \"reload\"): Promise<void> {\n\tif (!this._extensionRunner.hasHandlers(\"resources_discover\")) {\n\t\treturn;\n\t}\n\n\tconst { skillPaths, promptPaths, themePaths } = await this._extensionRunner.emitResourcesDiscover(this._cwd, reason);\n\n\tif (skillPaths.length === 0 && promptPaths.length === 0 && themePaths.length === 0) {\n\t\treturn;\n\t}\n\n\tconst extensionPaths: ResourceExtensionPaths = {\n\t\tskillPaths: this.buildExtensionResourcePaths(skillPaths),\n\t\tpromptPaths: this.buildExtensionResourcePaths(promptPaths),\n\t\tthemePaths: this.buildExtensionResourcePaths(themePaths),\n\t};\n\n\tawait this._resourceLoader.extendResources(extensionPaths);\n\tthis._baseSystemPrompt = this._rebuildSystemPrompt(this.getActiveToolNames());\n\tthis.agent.state.systemPrompt = this._systemPromptOverride ?? this._baseSystemPrompt;\n}\n\nexport function buildExtensionResourcePaths(\n\tthis: AgentSession,\n\tentries: Array<{ path: string; extensionPath: string }>,\n): Array<{\n\tpath: string;\n\tmetadata: PathMetadata;\n}> {\n\treturn entries.map((entry) => {\n\t\tconst extensions = this._resourceLoader?.getExtensions().extensions ?? [];\n\t\tconst extension = extensions.find(\n\t\t\t(candidate) =>\n\t\t\t\tcandidate.path === entry.extensionPath ||\n\t\t\t\tcandidate.resolvedPath === entry.extensionPath ||\n\t\t\t\tcandidate.sourceInfo.path === entry.extensionPath,\n\t\t);\n\t\tconst sourceInfo = extension?.sourceInfo;\n\t\tconst source = sourceInfo?.source ?? this.getExtensionSourceLabel(entry.extensionPath);\n\t\tconst baseDir =\n\t\t\tsourceInfo?.baseDir ?? (entry.extensionPath.startsWith(\"<\") ? undefined : dirname(entry.extensionPath));\n\t\treturn {\n\t\t\tpath: entry.path,\n\t\t\tmetadata: {\n\t\t\t\tsource,\n\t\t\t\tscope: sourceInfo?.scope ?? \"temporary\",\n\t\t\t\torigin: sourceInfo?.origin ?? \"top-level\",\n\t\t\t\tbaseDir,\n\t\t\t\tconfigurationOrigin: sourceInfo?.configurationOrigin,\n\t\t\t},\n\t\t};\n\t});\n}\n\nexport function getExtensionSourceLabel(this: AgentSession, extensionPath: string): string {\n\tif (extensionPath.startsWith(\"<\")) {\n\t\treturn `extension:${extensionPath.replace(/[<>]/g, \"\")}`;\n\t}\n\tconst base = basename(extensionPath);\n\tconst name = base.replace(/\\.(ts|js)$/, \"\");\n\treturn `extension:${name}`;\n}\n\nexport function _applyExtensionBindings(this: AgentSession, runner: ExtensionRunner): void {\n\trunner.setUIContext(this._extensionUIContext, this._extensionMode);\n\trunner.bindCommandContext(this._extensionCommandContextActions);\n\n\tthis._extensionErrorUnsubscriber?.();\n\tthis._extensionErrorUnsubscriber = this._extensionErrorListener\n\t\t? runner.onError(this._extensionErrorListener)\n\t\t: undefined;\n}\n\nexport function refreshCurrentModelFromRegistry(this: AgentSession): void {\n\tthis._refreshCurrentModelFromRegistry();\n}\n\nexport function _refreshCurrentModelFromRegistry(this: AgentSession): void {\n\tconst currentModel = this.model;\n\tif (!currentModel) {\n\t\treturn;\n\t}\n\n\tconst refreshedModel = this._modelRuntime.getModel(currentModel.provider, currentModel.id);\n\tif (!refreshedModel || refreshedModel === currentModel) {\n\t\treturn;\n\t}\n\n\tconst previousModel = currentModel;\n\tconst previousThinkingLevel = this.thinkingLevel;\n\tthis.agent.state.model = refreshedModel;\n\tthis.setThinkingLevel(previousThinkingLevel);\n\tthis._refreshBaseSystemPromptFromActiveTools();\n\tthis._emit({ type: \"model_changed\", model: refreshedModel, previousModel, source: \"restore\" });\n}\n\nexport function _bindExtensionCore(this: AgentSession, runner: ExtensionRunner): void {\n\tconst getCommands = (): SlashCommandInfo[] => {\n\t\tconst extensionCommands: SlashCommandInfo[] = runner.getRegisteredCommands().map((command) => ({\n\t\t\tname: command.invocationName,\n\t\t\tdescription: command.description,\n\t\t\tsource: \"extension\",\n\t\t\tsourceInfo: command.sourceInfo,\n\t\t}));\n\n\t\tconst templates: SlashCommandInfo[] = this.promptTemplates.map((template) => ({\n\t\t\tname: template.name,\n\t\t\tdescription: template.description,\n\t\t\tsource: \"prompt\",\n\t\t\tsourceInfo: template.sourceInfo,\n\t\t}));\n\n\t\tconst skills: SlashCommandInfo[] = getSkillCatalog(this._resourceLoader).commands.map((command) => ({\n\t\t\tname: `skill:${command.name}`,\n\t\t\tdescription: command.description,\n\t\t\tsource: \"skill\",\n\t\t\tsourceInfo: command.sourceInfo,\n\t\t}));\n\n\t\treturn [...extensionCommands, ...templates, ...skills];\n\t};\n\n\trunner.bindCore(\n\t\t{\n\t\t\tsendMessage: (message, options) => {\n\t\t\t\tconst delivery = this.sendCustomMessage(message, options);\n\t\t\t\tvoid delivery.catch((err) => {\n\t\t\t\t\trunner.emitError({\n\t\t\t\t\t\textensionPath: \"<runtime>\",\n\t\t\t\t\t\tevent: \"send_message\",\n\t\t\t\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\treturn delivery;\n\t\t\t},\n\t\t\tsendMessages: (messages, options) => {\n\t\t\t\tconst delivery = this.sendCustomMessages(messages, options);\n\t\t\t\tvoid delivery.catch((err) => {\n\t\t\t\t\trunner.emitError({\n\t\t\t\t\t\textensionPath: \"<runtime>\",\n\t\t\t\t\t\tevent: \"send_messages\",\n\t\t\t\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\treturn delivery;\n\t\t\t},\n\t\t\tsendUserMessage: (content, options) => {\n\t\t\t\tthis.sendUserMessage(content, options).catch((err) => {\n\t\t\t\t\trunner.emitError({\n\t\t\t\t\t\textensionPath: \"<runtime>\",\n\t\t\t\t\t\tevent: \"send_user_message\",\n\t\t\t\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tappendEntry: (customType, data) => {\n\t\t\t\tconst id = this.sessionManager.appendCustomEntry(customType, data);\n\t\t\t\tconst entry = this.sessionManager.getEntry(id);\n\t\t\t\tif (entry) this._emit({ type: \"entry_appended\", entry });\n\t\t\t},\n\t\t\tsetSessionName: (name) => {\n\t\t\t\tthis.setSessionName(name);\n\t\t\t},\n\t\t\tgetSessionName: () => {\n\t\t\t\treturn this.sessionManager.getSessionName();\n\t\t\t},\n\t\t\tsetLabel: (entryId, label) => {\n\t\t\t\tthis.sessionManager.appendLabelChange(entryId, label);\n\t\t\t},\n\t\t\tgetActiveTools: () => this.getActiveToolNames(),\n\t\t\tgetAllTools: () => this.getAllTools(),\n\t\t\tsetActiveTools: (toolNames) => this.setActiveToolsByName(toolNames),\n\t\t\trefreshTools: () => this._refreshToolRegistry(),\n\t\t\tgetCommands,\n\t\t\tsetModel: async (model) => {\n\t\t\t\tif (!this.modelRuntime.hasConfiguredAuth(model.provider)) return false;\n\t\t\t\tawait this.setModel(model);\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tgetThinkingLevel: () => this.thinkingLevel,\n\t\t\tsetThinkingLevel: (level) => this.setThinkingLevel(level),\n\t\t},\n\t\t{\n\t\t\tgetModel: () => this.model,\n\t\t\t// Read through the public accessor, not `_scopedModels`: in the isolated\n\t\t\t// engine the host-side facade session has `scopedModels` redefined by\n\t\t\t// RemoteModelCatalog to the engine's catalogue, and the private field it\n\t\t\t// shadows is never refreshed.\n\t\t\tgetScopedModels: () => this.scopedModels,\n\t\t\tgetThinkingLevel: () => this.thinkingLevel,\n\t\t\tisIdle: () => !this.isStreaming,\n\t\t\tisProjectTrusted: () => this.settingsManager.isProjectTrusted(),\n\t\t\tgetSignal: () => this.agent.signal,\n\t\t\tabort: () => this.abort(),\n\t\t\thasPendingMessages: () => this.pendingMessageCount > 0,\n\t\t\tshutdown: () => {\n\t\t\t\tthis._extensionShutdownHandler?.();\n\t\t\t},\n\t\t\tgetContextUsage: () => this.getContextUsage(),\n\t\t\tcompact: (options) => {\n\t\t\t\tvoid (async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await this.compact({\n\t\t\t\t\t\t\t...(options?.compression_ratio === undefined\n\t\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t\t: { compression_ratio: options.compression_ratio }),\n\t\t\t\t\t\t\t...(options?.preserve_recent === undefined ? {} : { preserve_recent: options.preserve_recent }),\n\t\t\t\t\t\t\t...(options?.query === undefined ? {} : { query: options.query }),\n\t\t\t\t\t\t});\n\t\t\t\t\t\toptions?.onComplete?.(result);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst err = error instanceof Error ? error : new Error(String(error));\n\t\t\t\t\t\toptions?.onError?.(err);\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t},\n\t\t\tgetSystemPrompt: () => this.systemPrompt,\n\t\t\tgetSkillCatalog: () => getSkillCatalog(this._resourceLoader),\n\t\t\tgetSystemPromptOptions: () => this._baseSystemPromptOptions,\n\t\t},\n\t\t{\n\t\t\tregisterProvider: (providerOrName, config) => {\n\t\t\t\tif (typeof providerOrName === \"string\") this._modelRuntime.registerProvider(providerOrName, config!);\n\t\t\t\telse this._modelRuntime.registerNativeProvider(providerOrName);\n\t\t\t\tthis.refreshCurrentModelFromRegistry();\n\t\t\t},\n\t\t\tunregisterProvider: (name) => {\n\t\t\t\tthis._modelRuntime.unregisterProvider(name);\n\t\t\t\tthis.refreshCurrentModelFromRegistry();\n\t\t\t},\n\t\t},\n\t);\n}\n\nexport async function reload(this: AgentSession, options?: AgentSessionReloadOptions): Promise<void> {\n\tconst reason = options?.reason ?? \"reload\";\n\tconst oldRunner = this._extensionRunner;\n\tconst previousFlagValues = oldRunner.getExplicitFlagValues();\n\tif (reason === \"reload\") {\n\t\tawait emitSessionShutdownEvent(oldRunner, { type: \"session_shutdown\", reason: \"reload\" });\n\t}\n\toldRunner.invalidate();\n\tawait this.settingsManager.reload();\n\tresetApiProviders();\n\tawait this._resourceLoader.reload();\n\tthis._buildRuntime({\n\t\tactiveToolNames: this.getActiveToolNames(),\n\t\tflagValues: previousFlagValues,\n\t\tincludeAllExtensionTools: true,\n\t});\n\n\t// Runtime-dependent state must be refreshed here so newly loaded extensions\n\t// observe it during session_start rather than only after reload() resolves.\n\tawait options?.beforeSessionStart?.();\n\n\tconst hasBindings =\n\t\tthis._extensionUIContext ||\n\t\tthis._extensionCommandContextActions ||\n\t\tthis._extensionShutdownHandler ||\n\t\tthis._extensionErrorListener;\n\tif (hasBindings) {\n\t\tawait this._extensionRunner.emit({ type: \"session_start\", reason });\n\t\tawait this.extendResourcesFromExtensions(reason);\n\t}\n}\n\n// =========================================================================\n// Auto-Retry\n// =========================================================================\n\n/**\n * Check if an error is retryable (overloaded, rate limit, server errors).\n * Context overflow errors are NOT retryable (handled by compaction instead).\n */\n\nexport const agentSessionExtensionBindingsMethods = {\n\tbindExtensions,\n\textendResourcesFromExtensions,\n\tbuildExtensionResourcePaths,\n\tgetExtensionSourceLabel,\n\t_applyExtensionBindings,\n\trefreshCurrentModelFromRegistry,\n\t_refreshCurrentModelFromRegistry,\n\t_bindExtensionCore,\n\treload,\n};\n"]}
1
+ {"version":3,"file":"agent-session-extension-bindings.js","sourceRoot":"","sources":["../../src/core/agent-session-extension-bindings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,EAAE,uCAAuC,EAAE,MAAM,+CAA+C,CAAC;AAExG,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIpD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,MAAM,wBAAwB;IAQ7B,YACC,cAA8B,EAC9B,MAAuB,EACvB,YAA0B,EAC1B,mBAAqC;QAVrB,YAAO,GAAsC,EAAE,CAAC;QAExD,gBAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QAEjC,cAAS,GAAG,KAAK,CAAC;QAQzB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,mBAAmB,GAAG,YAAY,CAAC,kCAAkC,CAAC,mBAAmB,CAAC,CAAC;IACjG,CAAC;IAED,KAAK,CAAC,MAAkC;QACvC,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,gBAAgB;QACrB,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC;IACzC,CAAC;IAED,OAAO;QACN,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,OAAO;QACZ,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACJ,MAAM,MAAM,EAAE,CAAC;YAChB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;YACrC,CAAC;QACF,CAAC;IACF,CAAC;IAEO,MAAM,CAAC,KAAc,EAAE,KAAa;QAC3C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YACrB,aAAa,EAAE,WAAW;YAC1B,KAAK;YACL,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC7D,CAAC,CAAC;IACJ,CAAC;CACD;AAED,SAAS,oCAAoC,CAC5C,OAAqB,EACrB,MAAsB,EACtB,OAAuD;IAEvD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC5B,MAAM,SAAS,GAAG,MAAM;aACtB,aAAa,EAAE;aACf,UAAU,CAAC,IAAI,CACf,CAAC,SAAS,EAAE,EAAE,CACb,SAAS,CAAC,IAAI,KAAK,KAAK,CAAC,aAAa;YACtC,SAAS,CAAC,YAAY,KAAK,KAAK,CAAC,aAAa;YAC9C,SAAS,CAAC,UAAU,CAAC,IAAI,KAAK,KAAK,CAAC,aAAa,CAClD,CAAC;QACH,MAAM,UAAU,GAAG,SAAS,EAAE,UAAU,CAAC;QACzC,OAAO;YACN,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,QAAQ,EAAE;gBACT,MAAM,EAAE,UAAU,EAAE,MAAM,IAAI,OAAO,CAAC,uBAAuB,CAAC,KAAK,CAAC,aAAa,CAAC;gBAClF,KAAK,EAAE,UAAU,EAAE,KAAK,IAAI,WAAW;gBACvC,MAAM,EAAE,UAAU,EAAE,MAAM,IAAI,WAAW;gBACzC,OAAO,EACN,UAAU,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBACxG,mBAAmB,EAAE,UAAU,EAAE,mBAAmB;aACpD;SACD,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,qBAAqB,CACnC,OAAqB,EACrB,MAAuB,EACvB,MAAsB,EACtB,MAA4B;IAE5B,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC;QAAE,OAAO;IACtD,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACzG,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC3F,MAAM,cAAc,GAA2B;QAC9C,UAAU,EAAE,oCAAoC,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC;QAC7E,WAAW,EAAE,oCAAoC,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC;QAC/E,UAAU,EAAE,oCAAoC,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC;KAC7E,CAAC;IACF,MAAM,MAAM,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAqB,QAA2B;IACnF,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACtC,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC,SAAS,CAAC;IAC/C,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC;IACrC,CAAC;IACD,IAAI,QAAQ,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;QAClD,IAAI,CAAC,+BAA+B,GAAG,QAAQ,CAAC,qBAAqB,CAAC;IACvE,CAAC;IACD,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QAC5C,IAAI,CAAC,yBAAyB,GAAG,QAAQ,CAAC,eAAe,CAAC;IAC3D,CAAC;IACD,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACpC,IAAI,CAAC,uBAAuB,GAAG,QAAQ,CAAC,OAAO,CAAC;IACjD,CAAC;IAED,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACpD,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC1D,MAAM,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC7G,IAAI,uCAAuC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,CAAC,4BAA4B,EAAE,CAAC;IAC3C,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAqB,MAA4B;IACnG,MAAM,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IACvF,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC9E,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,iBAAiB,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,2BAA2B,CAE1C,OAAuD;IAKvD,OAAO,oCAAoC,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAqB,aAAqB;IAChF,IAAI,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO,aAAa,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;IAC1D,CAAC;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAC5C,OAAO,aAAa,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAqB,MAAuB;IAClF,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IACnE,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAEhE,IAAI,CAAC,2BAA2B,EAAE,EAAE,CAAC;IACrC,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,uBAAuB;QAC9D,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC;QAC9C,CAAC,CAAC,SAAS,CAAC;AACd,CAAC;AAED,MAAM,UAAU,+BAA+B;IAC9C,IAAI,CAAC,gCAAgC,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,gCAAgC;IAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;IAChC,IAAI,CAAC,YAAY,EAAE,CAAC;QACnB,OAAO;IACR,CAAC;IAED,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;IAC3F,IAAI,CAAC,cAAc,IAAI,cAAc,KAAK,YAAY,EAAE,CAAC;QACxD,OAAO;IACR,CAAC;IAED,MAAM,aAAa,GAAG,YAAY,CAAC;IACnC,MAAM,qBAAqB,GAAG,IAAI,CAAC,aAAa,CAAC;IACjD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,cAAc,CAAC;IACxC,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;IAC7C,IAAI,CAAC,uCAAuC,EAAE,CAAC;IAC/C,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;AAChG,CAAC;AAED,MAAM,UAAU,kBAAkB,CAEjC,MAAuB,EACvB,WAAsC;IAEtC,MAAM,WAAW,GAAG,GAAuB,EAAE;QAC5C,MAAM,iBAAiB,GAAuB,MAAM,CAAC,qBAAqB,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC9F,IAAI,EAAE,OAAO,CAAC,cAAc;YAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,MAAM,EAAE,WAAW;YACnB,UAAU,EAAE,OAAO,CAAC,UAAU;SAC9B,CAAC,CAAC,CAAC;QAEJ,MAAM,SAAS,GAAuB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC7E,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,QAAQ,CAAC,UAAU;SAC/B,CAAC,CAAC,CAAC;QAEJ,MAAM,MAAM,GAAuB,eAAe,CACjD,WAAW,EAAE,cAAc,IAAI,IAAI,CAAC,eAAe,CACnD,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC5B,IAAI,EAAE,SAAS,OAAO,CAAC,IAAI,EAAE;YAC7B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,MAAM,EAAE,OAAO;YACf,UAAU,EAAE,OAAO,CAAC,UAAU;SAC9B,CAAC,CAAC,CAAC;QAEJ,OAAO,CAAC,GAAG,iBAAiB,EAAE,GAAG,SAAS,EAAE,GAAG,MAAM,CAAC,CAAC;IACxD,CAAC,CAAC;IAEF,MAAM,CAAC,QAAQ,CACd;QACC,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;YACjC,IAAI,WAAW,EAAE,CAAC;gBACjB,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;gBAClE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;YAC1B,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC1D,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC3B,MAAM,CAAC,SAAS,CAAC;oBAChB,aAAa,EAAE,WAAW;oBAC1B,KAAK,EAAE,cAAc;oBACrB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBACvD,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC;QACjB,CAAC;QACD,YAAY,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE;YACnC,IAAI,WAAW,EAAE,CAAC;gBACjB,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;gBACpE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;YAC1B,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC5D,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC3B,MAAM,CAAC,SAAS,CAAC;oBAChB,aAAa,EAAE,WAAW;oBAC1B,KAAK,EAAE,eAAe;oBACtB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBACvD,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC;QACjB,CAAC;QACD,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG,GAAG,EAAE,CACjB,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACpD,MAAM,CAAC,SAAS,CAAC;oBAChB,aAAa,EAAE,WAAW;oBAC1B,KAAK,EAAE,mBAAmB;oBAC1B,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBACvD,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;YACJ,IAAI,WAAW;gBAAE,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;gBACpC,KAAK,IAAI,EAAE,CAAC;QAClB,CAAC;QACD,WAAW,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE;YACjC,MAAM,MAAM,GAAG,GAAG,EAAE;gBACnB,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;gBACnE,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC/C,IAAI,KAAK;oBAAE,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1D,CAAC,CAAC;YACF,IAAI,WAAW;gBAAE,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;;gBACtC,MAAM,EAAE,CAAC;QACf,CAAC;QACD,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,WAAW;gBAAE,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;;gBAC/D,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,cAAc,EAAE,GAAG,EAAE;YACpB,OAAO,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC;QAC7C,CAAC;QACD,QAAQ,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;YAC5B,IAAI,WAAW,EAAE,CAAC;gBACjB,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE;oBACtB,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACvD,CAAC,CAAC,CAAC;YACJ,CAAC;;gBAAM,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC9D,CAAC;QACD,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE;QAC/C,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE;QACrC,cAAc,EAAE,CAAC,SAAS,EAAE,EAAE;YAC7B,IAAI,WAAW;gBAAE,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC;;gBAC1E,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAC3C,CAAC;QACD,YAAY,EAAE,GAAG,EAAE;YAClB,IAAI,CAAC,WAAW;gBAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC/C,CAAC;QACD,WAAW;QACX,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACzB,MAAM,iBAAiB,GACtB,WAAW,EAAE,mBAAmB,CAAC,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAClE,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACrD,IAAI,CAAC,iBAAiB;gBAAE,OAAO,KAAK,CAAC;YACrC,IAAI,WAAW;gBAAE,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;;gBAC1D,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChC,OAAO,IAAI,CAAC;QACb,CAAC;QACD,gBAAgB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa;QAC1C,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE;YAC3B,IAAI,WAAW;gBAAE,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;;gBAClE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;KACD,EACD;QACC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK;QAC1B,yEAAyE;QACzE,sEAAsE;QACtE,yEAAyE;QACzE,8BAA8B;QAC9B,eAAe,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY;QACxC,gBAAgB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa;QAC1C,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW;QAC/B,gBAAgB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE;QAC/D,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;QAClC,KAAK,EAAE,GAAG,EAAE;YACX,IAAI,WAAW;gBAAE,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;;gBAClD,IAAI,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;QACD,kBAAkB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,GAAG,CAAC;QACtD,QAAQ,EAAE,GAAG,EAAE;YACd,IAAI,WAAW;gBAAE,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC;;gBACxE,IAAI,CAAC,yBAAyB,EAAE,EAAE,CAAC;QACzC,CAAC;QACD,eAAe,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE;QAC7C,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE;YACpB,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;gBAC1B,IAAI,CAAC;oBACJ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC;wBACjC,GAAG,CAAC,OAAO,EAAE,iBAAiB,KAAK,SAAS;4BAC3C,CAAC,CAAC,EAAE;4BACJ,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC;wBACpD,GAAG,CAAC,OAAO,EAAE,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC;wBAC/F,GAAG,CAAC,OAAO,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;qBACjE,CAAC,CAAC;oBACH,OAAO,EAAE,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;gBAC/B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;oBACtE,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;gBACzB,CAAC;YACF,CAAC,CAAC;YACF,IAAI,WAAW;gBAAE,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;;gBACvC,KAAK,OAAO,EAAE,CAAC;QACrB,CAAC;QACD,eAAe,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY;QACxC,eAAe,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,WAAW,EAAE,cAAc,IAAI,IAAI,CAAC,eAAe,CAAC;QAC3F,sBAAsB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,wBAAwB;KAC3D,EACD;QACC,gBAAgB,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE;YAC5C,MAAM,UAAU,GAAG,OAAO,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC;YAC3F,IAAI,WAAW,EAAE,CAAC;gBACjB,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBACxC,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;oBACxC,WAAW,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,cAAc,EAAE,MAAO,CAAC,CAAC;gBAC3E,CAAC;;oBAAM,WAAW,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAC;gBAC9E,OAAO;YACR,CAAC;YACD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC3C,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAClF,IAAI,OAAO,cAAc,KAAK,QAAQ;gBAAE,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,cAAc,EAAE,MAAO,CAAC,CAAC;;gBAChG,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAC;YAC/D,IAAI,CAAC,+BAA+B,EAAE,CAAC;QACxC,CAAC;QACD,kBAAkB,EAAE,CAAC,IAAI,EAAE,EAAE;YAC5B,IAAI,WAAW,EAAE,CAAC;gBACjB,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACrC,WAAW,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC1D,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACxC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC/E,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;gBAC5C,IAAI,CAAC,+BAA+B,EAAE,CAAC;YACxC,CAAC;QACF,CAAC;KACD,CACD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAqB,OAAmC;IACnF,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,QAAQ,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC;IACxC,MAAM,kBAAkB,GAAG,SAAS,CAAC,qBAAqB,EAAE,CAAC;IAC7D,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAClD,MAAM,qBAAqB,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC7F,IAAI,qBAAqB,KAAK,SAAS,IAAI,IAAI,CAAC,eAAe,CAAC,2BAA2B,EAAE,EAAE,KAAK,KAAK,EAAE,CAAC;QAC3G,IAAI,OAAO,EAAE,qBAAqB,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,MAAM,KAAK,QAAQ;YACtB,MAAM,wBAAwB,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC3F,SAAS,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;QACpC,iBAAiB,EAAE,CAAC;QACpB,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;QACpC,IAAI,CAAC,aAAa,CAAC,EAAE,eAAe,EAAE,UAAU,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,IAAI,EAAE,CAAC,CAAC;QACxG,MAAM,OAAO,EAAE,kBAAkB,EAAE,EAAE,CAAC;QACtC,MAAM,WAAW,GAChB,IAAI,CAAC,mBAAmB;YACxB,IAAI,CAAC,+BAA+B;YACpC,IAAI,CAAC,yBAAyB;YAC9B,IAAI,CAAC,uBAAuB,CAAC;QAC9B,IAAI,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,CAAC;YACpE,MAAM,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC;QACD,OAAO;IACR,CAAC;IAED,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;IACvE,MAAM,mBAAmB,GAAG,MAAM,qBAAqB,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;IAC7F,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC;IACjE,IAAI,OAAO,EAAE,qBAAqB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClH,CAAC;IACD,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;IACpE,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,kBAAkB,EAAE,CAAC;QAChD,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACrD,gBAAgB,CAAC,OAAO,CAAC,iBAAiB,KAAK,IAAI,GAAG,EAAE,CAAC;QACzD,gBAAgB,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,eAAe,GAAG,IAAI,eAAe,CAC1C,gBAAgB,CAAC,UAAU,EAC3B,gBAAgB,CAAC,OAAO,EACxB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,cAAc,EACnB,IAAI,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,EACrC,IAAI,CAAC,qBAAqB,EAC1B,IAAI,CAAC,eAAe,CACpB,CAAC;IACF,MAAM,WAAW,GAAG,IAAI,wBAAwB,CAC/C,mBAAmB,CAAC,MAAM,EAC1B,eAAe,EACf,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,qBAAqB,CAC1B,CAAC;IACF,IAAI,uBAAiD,CAAC;IACtD,IAAI,yBAAmD,CAAC;IACxD,IAAI,CAAC;QACJ,IAAI,CAAC,kBAAkB,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;QACtD,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5E,eAAe,CAAC,kBAAkB,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QACzE,MAAM,OAAO,EAAE,kBAAkB,EAAE,EAAE,CAAC;QACtC,MAAM,WAAW,GAChB,IAAI,CAAC,mBAAmB;YACxB,IAAI,CAAC,+BAA+B;YACpC,IAAI,CAAC,yBAAyB;YAC9B,IAAI,CAAC,uBAAuB,CAAC;QAC9B,IAAI,WAAW,EAAE,CAAC;YACjB,MAAM,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,CAAC;YAC9D,MAAM,qBAAqB,CAAC,IAAI,EAAE,eAAe,EAAE,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxF,CAAC;QACD,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,aAAa,EAAE,EAAE,CAAC;QAChE,IAAI,iBAAiB,EAAE,CAAC;YACvB,uBAAuB,GAAG,GAAG,EAAE,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;YAC3D,yBAAyB,GAAG,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC;QAChE,CAAC;QACD,MAAM,WAAW,CAAC,gBAAgB,EAAE,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,yBAAyB,EAAE,EAAE,CAAC;QAC9B,WAAW,CAAC,OAAO,EAAE,CAAC;QACtB,eAAe,CAAC,UAAU,EAAE,CAAC;QAC7B,MAAM,KAAK,CAAC;IACb,CAAC;IAED,mBAAmB,CAAC,MAAM,EAAE,CAAC;IAC7B,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACnD,IAAI,uBAAuB;QAAE,uBAAuB,EAAE,CAAC;;QAClD,mBAAmB,CAAC,MAAM,EAAE,CAAC;IAClC,iBAAiB,EAAE,CAAC;IACpB,IAAI,CAAC,qBAAqB,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAC9D,gBAAgB,CAAC,OAAO,CAAC,oBAAoB,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACjF,IAAI,CAAC,+BAA+B,EAAE,CAAC;IACvC,IAAI,CAAC,aAAa,CAAC,EAAE,eAAe,EAAE,UAAU,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,IAAI,EAAE,CAAC,CAAC;IACxG,IAAI,MAAM,KAAK,QAAQ;QAAE,MAAM,wBAAwB,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACnH,SAAS,CAAC,UAAU,EAAE,CAAC;IACvB,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;AAC7B,CAAC;AAED,4EAA4E;AAC5E,aAAa;AACb,4EAA4E;AAE5E;;;GAGG;AAEH,MAAM,CAAC,MAAM,oCAAoC,GAAG;IACnD,cAAc;IACd,6BAA6B;IAC7B,2BAA2B;IAC3B,uBAAuB;IACvB,uBAAuB;IACvB,+BAA+B;IAC/B,gCAAgC;IAChC,kBAAkB;IAClB,MAAM;CACN,CAAC","sourcesContent":["import { basename, dirname } from \"node:path\";\nimport { resetApiProviders } from \"@bastani/pi-ai/compat\";\nimport type { AgentSessionInternalSurface as AgentSession } from \"./agent-session-methods.ts\";\nimport { recoverProtectedStreamingCustomMessages } from \"./agent-session-persistent-custom-messages.ts\";\nimport type { AgentSessionReloadOptions, ExtensionBindings } from \"./agent-session-types.ts\";\nimport { ExtensionRunner } from \"./extensions/index.ts\";\nimport { emitSessionShutdownEvent } from \"./extensions/runner.ts\";\nimport { ModelRegistry } from \"./model-registry.ts\";\nimport type { ExtensionProviderTransaction, ModelRuntime } from \"./model-runtime.js\";\nimport type { PathMetadata } from \"./package-manager.ts\";\nimport type { ResourceExtensionPaths, ResourceLoader } from \"./resource-loader.ts\";\nimport { getSkillCatalog } from \"./skill-catalog.ts\";\nimport type { SlashCommandInfo } from \"./slash-commands.ts\";\n\nclass ExtensionPublicationGate {\n\treadonly resourceLoader: ResourceLoader;\n\tprivate readonly effects: Array<() => void | Promise<void>> = [];\n\treadonly providerTransaction: ExtensionProviderTransaction;\n\treadonly providerIds = new Set<string>();\n\tprivate readonly runner: ExtensionRunner;\n\tprivate discarded = false;\n\n\tconstructor(\n\t\tresourceLoader: ResourceLoader,\n\t\trunner: ExtensionRunner,\n\t\tmodelRuntime: ModelRuntime,\n\t\treplacedProviderIds: Iterable<string>,\n\t) {\n\t\tthis.resourceLoader = resourceLoader;\n\t\tthis.runner = runner;\n\t\tthis.providerTransaction = modelRuntime.createExtensionProviderTransaction(replacedProviderIds);\n\t}\n\n\tdefer(effect: () => void | Promise<void>): void {\n\t\tif (!this.discarded) this.effects.push(effect);\n\t}\n\n\tasync publishProviders(): Promise<void> {\n\t\tawait this.providerTransaction.commit();\n\t}\n\n\tdiscard(): void {\n\t\tthis.discarded = true;\n\t\tthis.effects.length = 0;\n\t}\n\n\tasync release(): Promise<void> {\n\t\tconst effects = this.effects.splice(0);\n\t\tfor (const effect of effects) {\n\t\t\ttry {\n\t\t\t\tawait effect();\n\t\t\t} catch (error) {\n\t\t\t\tthis.report(error, \"session_start\");\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate report(error: unknown, event: string): void {\n\t\tthis.runner.emitError({\n\t\t\textensionPath: \"<runtime>\",\n\t\t\tevent,\n\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t});\n\t}\n}\n\nfunction buildExtensionResourcePathsForLoader(\n\tsession: AgentSession,\n\tloader: ResourceLoader,\n\tentries: Array<{ path: string; extensionPath: string }>,\n): Array<{ path: string; metadata: PathMetadata }> {\n\treturn entries.map((entry) => {\n\t\tconst extension = loader\n\t\t\t.getExtensions()\n\t\t\t.extensions.find(\n\t\t\t\t(candidate) =>\n\t\t\t\t\tcandidate.path === entry.extensionPath ||\n\t\t\t\t\tcandidate.resolvedPath === entry.extensionPath ||\n\t\t\t\t\tcandidate.sourceInfo.path === entry.extensionPath,\n\t\t\t);\n\t\tconst sourceInfo = extension?.sourceInfo;\n\t\treturn {\n\t\t\tpath: entry.path,\n\t\t\tmetadata: {\n\t\t\t\tsource: sourceInfo?.source ?? session.getExtensionSourceLabel(entry.extensionPath),\n\t\t\t\tscope: sourceInfo?.scope ?? \"temporary\",\n\t\t\t\torigin: sourceInfo?.origin ?? \"top-level\",\n\t\t\t\tbaseDir:\n\t\t\t\t\tsourceInfo?.baseDir ?? (entry.extensionPath.startsWith(\"<\") ? undefined : dirname(entry.extensionPath)),\n\t\t\t\tconfigurationOrigin: sourceInfo?.configurationOrigin,\n\t\t\t},\n\t\t};\n\t});\n}\n\nasync function extendRunnerResources(\n\tsession: AgentSession,\n\trunner: ExtensionRunner,\n\tloader: ResourceLoader,\n\treason: \"startup\" | \"reload\",\n): Promise<void> {\n\tif (!runner.hasHandlers(\"resources_discover\")) return;\n\tconst { skillPaths, promptPaths, themePaths } = await runner.emitResourcesDiscover(session._cwd, reason);\n\tif (skillPaths.length === 0 && promptPaths.length === 0 && themePaths.length === 0) return;\n\tconst extensionPaths: ResourceExtensionPaths = {\n\t\tskillPaths: buildExtensionResourcePathsForLoader(session, loader, skillPaths),\n\t\tpromptPaths: buildExtensionResourcePathsForLoader(session, loader, promptPaths),\n\t\tthemePaths: buildExtensionResourcePathsForLoader(session, loader, themePaths),\n\t};\n\tawait loader.extendResources(extensionPaths);\n}\n\nexport async function bindExtensions(this: AgentSession, bindings: ExtensionBindings): Promise<void> {\n\tif (bindings.uiContext !== undefined) {\n\t\tthis._extensionUIContext = bindings.uiContext;\n\t}\n\tif (bindings.mode !== undefined) {\n\t\tthis._extensionMode = bindings.mode;\n\t}\n\tif (bindings.commandContextActions !== undefined) {\n\t\tthis._extensionCommandContextActions = bindings.commandContextActions;\n\t}\n\tif (bindings.shutdownHandler !== undefined) {\n\t\tthis._extensionShutdownHandler = bindings.shutdownHandler;\n\t}\n\tif (bindings.onError !== undefined) {\n\t\tthis._extensionErrorListener = bindings.onError;\n\t}\n\n\tthis._applyExtensionBindings(this._extensionRunner);\n\tawait this._extensionRunner.emit(this._sessionStartEvent);\n\tawait this.extendResourcesFromExtensions(this._sessionStartEvent.reason === \"reload\" ? \"reload\" : \"startup\");\n\tif (recoverProtectedStreamingCustomMessages(this) > 0) {\n\t\tawait this._continueQueuedAgentMessages();\n\t}\n}\n\nexport async function extendResourcesFromExtensions(this: AgentSession, reason: \"startup\" | \"reload\"): Promise<void> {\n\tawait extendRunnerResources(this, this._extensionRunner, this._resourceLoader, reason);\n\tthis._baseSystemPrompt = this._rebuildSystemPrompt(this.getActiveToolNames());\n\tthis.agent.state.systemPrompt = this._systemPromptOverride ?? this._baseSystemPrompt;\n}\n\nexport function buildExtensionResourcePaths(\n\tthis: AgentSession,\n\tentries: Array<{ path: string; extensionPath: string }>,\n): Array<{\n\tpath: string;\n\tmetadata: PathMetadata;\n}> {\n\treturn buildExtensionResourcePathsForLoader(this, this._resourceLoader, entries);\n}\n\nexport function getExtensionSourceLabel(this: AgentSession, extensionPath: string): string {\n\tif (extensionPath.startsWith(\"<\")) {\n\t\treturn `extension:${extensionPath.replace(/[<>]/g, \"\")}`;\n\t}\n\tconst base = basename(extensionPath);\n\tconst name = base.replace(/\\.(ts|js)$/, \"\");\n\treturn `extension:${name}`;\n}\n\nexport function _applyExtensionBindings(this: AgentSession, runner: ExtensionRunner): void {\n\trunner.setUIContext(this._extensionUIContext, this._extensionMode);\n\trunner.bindCommandContext(this._extensionCommandContextActions);\n\n\tthis._extensionErrorUnsubscriber?.();\n\tthis._extensionErrorUnsubscriber = this._extensionErrorListener\n\t\t? runner.onError(this._extensionErrorListener)\n\t\t: undefined;\n}\n\nexport function refreshCurrentModelFromRegistry(this: AgentSession): void {\n\tthis._refreshCurrentModelFromRegistry();\n}\n\nexport function _refreshCurrentModelFromRegistry(this: AgentSession): void {\n\tconst currentModel = this.model;\n\tif (!currentModel) {\n\t\treturn;\n\t}\n\n\tconst refreshedModel = this._modelRuntime.getModel(currentModel.provider, currentModel.id);\n\tif (!refreshedModel || refreshedModel === currentModel) {\n\t\treturn;\n\t}\n\n\tconst previousModel = currentModel;\n\tconst previousThinkingLevel = this.thinkingLevel;\n\tthis.agent.state.model = refreshedModel;\n\tthis.setThinkingLevel(previousThinkingLevel);\n\tthis._refreshBaseSystemPromptFromActiveTools();\n\tthis._emit({ type: \"model_changed\", model: refreshedModel, previousModel, source: \"restore\" });\n}\n\nexport function _bindExtensionCore(\n\tthis: AgentSession,\n\trunner: ExtensionRunner,\n\tpublication?: ExtensionPublicationGate,\n): void {\n\tconst getCommands = (): SlashCommandInfo[] => {\n\t\tconst extensionCommands: SlashCommandInfo[] = runner.getRegisteredCommands().map((command) => ({\n\t\t\tname: command.invocationName,\n\t\t\tdescription: command.description,\n\t\t\tsource: \"extension\",\n\t\t\tsourceInfo: command.sourceInfo,\n\t\t}));\n\n\t\tconst templates: SlashCommandInfo[] = this.promptTemplates.map((template) => ({\n\t\t\tname: template.name,\n\t\t\tdescription: template.description,\n\t\t\tsource: \"prompt\",\n\t\t\tsourceInfo: template.sourceInfo,\n\t\t}));\n\n\t\tconst skills: SlashCommandInfo[] = getSkillCatalog(\n\t\t\tpublication?.resourceLoader ?? this._resourceLoader,\n\t\t).commands.map((command) => ({\n\t\t\tname: `skill:${command.name}`,\n\t\t\tdescription: command.description,\n\t\t\tsource: \"skill\",\n\t\t\tsourceInfo: command.sourceInfo,\n\t\t}));\n\n\t\treturn [...extensionCommands, ...templates, ...skills];\n\t};\n\n\trunner.bindCore(\n\t\t{\n\t\t\tsendMessage: (message, options) => {\n\t\t\t\tif (publication) {\n\t\t\t\t\tpublication.defer(() => this.sendCustomMessage(message, options));\n\t\t\t\t\treturn Promise.resolve();\n\t\t\t\t}\n\t\t\t\tconst delivery = this.sendCustomMessage(message, options);\n\t\t\t\tvoid delivery.catch((err) => {\n\t\t\t\t\trunner.emitError({\n\t\t\t\t\t\textensionPath: \"<runtime>\",\n\t\t\t\t\t\tevent: \"send_message\",\n\t\t\t\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\treturn delivery;\n\t\t\t},\n\t\t\tsendMessages: (messages, options) => {\n\t\t\t\tif (publication) {\n\t\t\t\t\tpublication.defer(() => this.sendCustomMessages(messages, options));\n\t\t\t\t\treturn Promise.resolve();\n\t\t\t\t}\n\t\t\t\tconst delivery = this.sendCustomMessages(messages, options);\n\t\t\t\tvoid delivery.catch((err) => {\n\t\t\t\t\trunner.emitError({\n\t\t\t\t\t\textensionPath: \"<runtime>\",\n\t\t\t\t\t\tevent: \"send_messages\",\n\t\t\t\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\treturn delivery;\n\t\t\t},\n\t\t\tsendUserMessage: (content, options) => {\n\t\t\t\tconst send = () =>\n\t\t\t\t\tthis.sendUserMessage(content, options).catch((err) => {\n\t\t\t\t\t\trunner.emitError({\n\t\t\t\t\t\t\textensionPath: \"<runtime>\",\n\t\t\t\t\t\t\tevent: \"send_user_message\",\n\t\t\t\t\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\tif (publication) publication.defer(send);\n\t\t\t\telse void send();\n\t\t\t},\n\t\t\tappendEntry: (customType, data) => {\n\t\t\t\tconst append = () => {\n\t\t\t\t\tconst id = this.sessionManager.appendCustomEntry(customType, data);\n\t\t\t\t\tconst entry = this.sessionManager.getEntry(id);\n\t\t\t\t\tif (entry) this._emit({ type: \"entry_appended\", entry });\n\t\t\t\t};\n\t\t\t\tif (publication) publication.defer(append);\n\t\t\t\telse append();\n\t\t\t},\n\t\t\tsetSessionName: (name) => {\n\t\t\t\tif (publication) publication.defer(() => this.setSessionName(name));\n\t\t\t\telse this.setSessionName(name);\n\t\t\t},\n\t\t\tgetSessionName: () => {\n\t\t\t\treturn this.sessionManager.getSessionName();\n\t\t\t},\n\t\t\tsetLabel: (entryId, label) => {\n\t\t\t\tif (publication) {\n\t\t\t\t\tpublication.defer(() => {\n\t\t\t\t\t\tthis.sessionManager.appendLabelChange(entryId, label);\n\t\t\t\t\t});\n\t\t\t\t} else this.sessionManager.appendLabelChange(entryId, label);\n\t\t\t},\n\t\t\tgetActiveTools: () => this.getActiveToolNames(),\n\t\t\tgetAllTools: () => this.getAllTools(),\n\t\t\tsetActiveTools: (toolNames) => {\n\t\t\t\tif (publication) publication.defer(() => this.setActiveToolsByName(toolNames));\n\t\t\t\telse this.setActiveToolsByName(toolNames);\n\t\t\t},\n\t\t\trefreshTools: () => {\n\t\t\t\tif (!publication) this._refreshToolRegistry();\n\t\t\t},\n\t\t\tgetCommands,\n\t\t\tsetModel: async (model) => {\n\t\t\t\tconst hasConfiguredAuth =\n\t\t\t\t\tpublication?.providerTransaction.hasConfiguredAuth(model.provider) ??\n\t\t\t\t\tthis.modelRuntime.hasConfiguredAuth(model.provider);\n\t\t\t\tif (!hasConfiguredAuth) return false;\n\t\t\t\tif (publication) publication.defer(() => this.setModel(model));\n\t\t\t\telse await this.setModel(model);\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tgetThinkingLevel: () => this.thinkingLevel,\n\t\t\tsetThinkingLevel: (level) => {\n\t\t\t\tif (publication) publication.defer(() => this.setThinkingLevel(level));\n\t\t\t\telse this.setThinkingLevel(level);\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tgetModel: () => this.model,\n\t\t\t// Read through the public accessor, not `_scopedModels`: in the isolated\n\t\t\t// engine the host-side facade session has `scopedModels` redefined by\n\t\t\t// RemoteModelCatalog to the engine's catalogue, and the private field it\n\t\t\t// shadows is never refreshed.\n\t\t\tgetScopedModels: () => this.scopedModels,\n\t\t\tgetThinkingLevel: () => this.thinkingLevel,\n\t\t\tisIdle: () => !this.isStreaming,\n\t\t\tisProjectTrusted: () => this.settingsManager.isProjectTrusted(),\n\t\t\tgetSignal: () => this.agent.signal,\n\t\t\tabort: () => {\n\t\t\t\tif (publication) publication.defer(() => this.abort());\n\t\t\t\telse this.abort();\n\t\t\t},\n\t\t\thasPendingMessages: () => this.pendingMessageCount > 0,\n\t\t\tshutdown: () => {\n\t\t\t\tif (publication) publication.defer(() => this._extensionShutdownHandler?.());\n\t\t\t\telse this._extensionShutdownHandler?.();\n\t\t\t},\n\t\t\tgetContextUsage: () => this.getContextUsage(),\n\t\t\tcompact: (options) => {\n\t\t\t\tconst compact = async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await this.compact({\n\t\t\t\t\t\t\t...(options?.compression_ratio === undefined\n\t\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t\t: { compression_ratio: options.compression_ratio }),\n\t\t\t\t\t\t\t...(options?.preserve_recent === undefined ? {} : { preserve_recent: options.preserve_recent }),\n\t\t\t\t\t\t\t...(options?.query === undefined ? {} : { query: options.query }),\n\t\t\t\t\t\t});\n\t\t\t\t\t\toptions?.onComplete?.(result);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst err = error instanceof Error ? error : new Error(String(error));\n\t\t\t\t\t\toptions?.onError?.(err);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tif (publication) publication.defer(compact);\n\t\t\t\telse void compact();\n\t\t\t},\n\t\t\tgetSystemPrompt: () => this.systemPrompt,\n\t\t\tgetSkillCatalog: () => getSkillCatalog(publication?.resourceLoader ?? this._resourceLoader),\n\t\t\tgetSystemPromptOptions: () => this._baseSystemPromptOptions,\n\t\t},\n\t\t{\n\t\t\tregisterProvider: (providerOrName, config) => {\n\t\t\t\tconst providerId = typeof providerOrName === \"string\" ? providerOrName : providerOrName.id;\n\t\t\t\tif (publication) {\n\t\t\t\t\tpublication.providerIds.add(providerId);\n\t\t\t\t\tif (typeof providerOrName === \"string\") {\n\t\t\t\t\t\tpublication.providerTransaction.registerProvider(providerOrName, config!);\n\t\t\t\t\t} else publication.providerTransaction.registerNativeProvider(providerOrName);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._extensionProviderIds.add(providerId);\n\t\t\t\tthis._resourceLoader.getExtensions().runtime.extensionProviderIds.add(providerId);\n\t\t\t\tif (typeof providerOrName === \"string\") this._modelRuntime.registerProvider(providerOrName, config!);\n\t\t\t\telse this._modelRuntime.registerNativeProvider(providerOrName);\n\t\t\t\tthis.refreshCurrentModelFromRegistry();\n\t\t\t},\n\t\t\tunregisterProvider: (name) => {\n\t\t\t\tif (publication) {\n\t\t\t\t\tpublication.providerIds.delete(name);\n\t\t\t\t\tpublication.providerTransaction.unregisterProvider(name);\n\t\t\t\t} else {\n\t\t\t\t\tthis._extensionProviderIds.delete(name);\n\t\t\t\t\tthis._resourceLoader.getExtensions().runtime.extensionProviderIds.delete(name);\n\t\t\t\t\tthis._modelRuntime.unregisterProvider(name);\n\t\t\t\t\tthis.refreshCurrentModelFromRegistry();\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t);\n}\n\nexport async function reload(this: AgentSession, options?: AgentSessionReloadOptions): Promise<void> {\n\tconst reason = options?.reason ?? \"reload\";\n\tconst oldRunner = this._extensionRunner;\n\tconst previousFlagValues = oldRunner.getExplicitFlagValues();\n\tconst activeToolNames = this.getActiveToolNames();\n\tconst prepareResourceReload = this._resourceLoader.prepareReload?.bind(this._resourceLoader);\n\tif (prepareResourceReload === undefined || this._resourceLoader.supportsTransactionalReload?.() === false) {\n\t\tif (options?.failOnExtensionErrors) {\n\t\t\tthrow new Error(\"Strict extension reload requires a transactional resource loader\");\n\t\t}\n\t\tif (reason === \"reload\")\n\t\t\tawait emitSessionShutdownEvent(oldRunner, { type: \"session_shutdown\", reason: \"reload\" });\n\t\toldRunner.invalidate();\n\t\tawait this.settingsManager.reload();\n\t\tresetApiProviders();\n\t\tawait this._resourceLoader.reload();\n\t\tthis._buildRuntime({ activeToolNames, flagValues: previousFlagValues, includeAllExtensionTools: true });\n\t\tawait options?.beforeSessionStart?.();\n\t\tconst hasBindings =\n\t\t\tthis._extensionUIContext ||\n\t\t\tthis._extensionCommandContextActions ||\n\t\t\tthis._extensionShutdownHandler ||\n\t\t\tthis._extensionErrorListener;\n\t\tif (hasBindings) {\n\t\t\tawait this._extensionRunner.emit({ type: \"session_start\", reason });\n\t\t\tawait this.extendResourcesFromExtensions(reason);\n\t\t}\n\t\treturn;\n\t}\n\n\tconst settingsTransaction = await this.settingsManager.prepareReload();\n\tconst resourceTransaction = await prepareResourceReload(settingsTransaction.settingsManager);\n\tconst errors = resourceTransaction.loader.getExtensions().errors;\n\tif (options?.failOnExtensionErrors && errors.length > 0) {\n\t\tthrow new Error(`Failed to load extensions: ${errors.map(({ path, error }) => `${path}: ${error}`).join(\"; \")}`);\n\t}\n\tconst extensionsResult = resourceTransaction.loader.getExtensions();\n\tfor (const [name, value] of previousFlagValues) {\n\t\textensionsResult.runtime.flagValues.set(name, value);\n\t\textensionsResult.runtime.explicitFlagNames ??= new Set();\n\t\textensionsResult.runtime.explicitFlagNames.add(name);\n\t}\n\tconst candidateRunner = new ExtensionRunner(\n\t\textensionsResult.extensions,\n\t\textensionsResult.runtime,\n\t\tthis._cwd,\n\t\tthis.sessionManager,\n\t\tnew ModelRegistry(this._modelRuntime),\n\t\tthis._orchestrationContext,\n\t\tthis._subagentPolicy,\n\t);\n\tconst publication = new ExtensionPublicationGate(\n\t\tresourceTransaction.loader,\n\t\tcandidateRunner,\n\t\tthis._modelRuntime,\n\t\tthis._extensionProviderIds,\n\t);\n\tlet commitPreparedResources: (() => void) | undefined;\n\tlet rollbackPreparedResources: (() => void) | undefined;\n\ttry {\n\t\tthis._bindExtensionCore(candidateRunner, publication);\n\t\tcandidateRunner.setUIContext(this._extensionUIContext, this._extensionMode);\n\t\tcandidateRunner.bindCommandContext(this._extensionCommandContextActions);\n\t\tawait options?.beforeSessionStart?.();\n\t\tconst hasBindings =\n\t\t\tthis._extensionUIContext ||\n\t\t\tthis._extensionCommandContextActions ||\n\t\t\tthis._extensionShutdownHandler ||\n\t\t\tthis._extensionErrorListener;\n\t\tif (hasBindings) {\n\t\t\tawait candidateRunner.emit({ type: \"session_start\", reason });\n\t\t\tawait extendRunnerResources(this, candidateRunner, resourceTransaction.loader, reason);\n\t\t}\n\t\tconst preparedResources = resourceTransaction.prepareCommit?.();\n\t\tif (preparedResources) {\n\t\t\tcommitPreparedResources = () => preparedResources.commit();\n\t\t\trollbackPreparedResources = () => preparedResources.rollback();\n\t\t}\n\t\tawait publication.publishProviders();\n\t} catch (error) {\n\t\trollbackPreparedResources?.();\n\t\tpublication.discard();\n\t\tcandidateRunner.invalidate();\n\t\tthrow error;\n\t}\n\n\tsettingsTransaction.commit();\n\tresourceTransaction.activate(this.settingsManager);\n\tif (commitPreparedResources) commitPreparedResources();\n\telse resourceTransaction.commit();\n\tresetApiProviders();\n\tthis._extensionProviderIds = new Set(publication.providerIds);\n\textensionsResult.runtime.extensionProviderIds = new Set(publication.providerIds);\n\tthis.refreshCurrentModelFromRegistry();\n\tthis._buildRuntime({ activeToolNames, flagValues: previousFlagValues, includeAllExtensionTools: true });\n\tif (reason === \"reload\") await emitSessionShutdownEvent(oldRunner, { type: \"session_shutdown\", reason: \"reload\" });\n\toldRunner.invalidate();\n\tawait publication.release();\n}\n\n// =========================================================================\n// Auto-Retry\n// =========================================================================\n\n/**\n * Check if an error is retryable (overloaded, rate limit, server errors).\n * Context overflow errors are NOT retryable (handled by compaction instead).\n */\n\nexport const agentSessionExtensionBindingsMethods = {\n\tbindExtensions,\n\textendResourcesFromExtensions,\n\tbuildExtensionResourcePaths,\n\tgetExtensionSourceLabel,\n\t_applyExtensionBindings,\n\trefreshCurrentModelFromRegistry,\n\t_refreshCurrentModelFromRegistry,\n\t_bindExtensionCore,\n\treload,\n};\n"]}
@@ -7,7 +7,7 @@ import type { BashResult } from "./bash-executor.ts";
7
7
  import type { CompactionUrgency, PlannerAuth, VerbatimCompactionParameters, VerbatimCompactionResult } from "./compaction/index.ts";
8
8
  import type { ContextUsage, ExtensionCommandContextActions, ExtensionErrorListener, ExtensionMode, ExtensionRunner, ExtensionUIContext, OrchestrationContext, ReplacedSessionContext, SendMessageOptions, SendMessagesOptions, SessionStartEvent, ToolDefinition, ToolInfo } from "./extensions/index.ts";
9
9
  import type { BashExecutionMessage, CustomMessage } from "./messages.ts";
10
- import type { ModelRuntime } from "./model-runtime.js";
10
+ import type { ExtensionProviderTransaction, ModelRuntime } from "./model-runtime.js";
11
11
  import type { PathMetadata } from "./package-manager.ts";
12
12
  import type { PromptTemplate } from "./prompt-templates.ts";
13
13
  import type { ResourceLoader } from "./resource-loader.ts";
@@ -129,7 +129,6 @@ export interface AgentSessionMethodSurface extends AgentSessionQueuePauseControl
129
129
  _runAgentPrompt(messages: AgentMessage | AgentMessage[], promptStarted?: () => void): Promise<void>;
130
130
  _runAgentContinue(): Promise<void>;
131
131
  _continueQueuedAgentMessages(): Promise<void>;
132
- _tryExecuteBuiltinSlashCommand(text: string): Promise<boolean>;
133
132
  _tryExecuteExtensionCommand(text: string): Promise<boolean>;
134
133
  _expandSkillCommand(text: string): string;
135
134
  steer(text: string, images?: ImageContent[]): Promise<void>;
@@ -198,7 +197,12 @@ export interface AgentSessionMethodSurface extends AgentSessionQueuePauseControl
198
197
  _applyExtensionBindings(runner: ExtensionRunner): void;
199
198
  _refreshCurrentModelFromRegistry(): void;
200
199
  refreshCurrentModelFromRegistry(): void;
201
- _bindExtensionCore(runner: ExtensionRunner): void;
200
+ _bindExtensionCore(runner: ExtensionRunner, publication?: {
201
+ resourceLoader: ResourceLoader;
202
+ providerTransaction: ExtensionProviderTransaction;
203
+ providerIds: Set<string>;
204
+ defer(effect: () => void | Promise<void>): void;
205
+ }): void;
202
206
  _refreshToolRegistry(options?: {
203
207
  activeToolNames?: string[];
204
208
  includeAllExtensionTools?: boolean;
@@ -357,6 +361,7 @@ export interface AgentSessionInternalSurface extends AgentSessionMethodSurface,
357
361
  _extensionErrorListener?: ExtensionErrorListener;
358
362
  _extensionErrorUnsubscriber?: () => void;
359
363
  _modelRuntime: ModelRuntime;
364
+ _extensionProviderIds: Set<string>;
360
365
  _toolRegistry: Map<string, AgentTool>;
361
366
  _toolDefinitions: Map<string, ToolDefinitionEntry>;
362
367
  _toolPromptSnippets: Map<string, string>;