@ai-agent-forge/agent-forge 0.86.7 → 0.88.0

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 (717) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/README.md +10 -11
  3. package/dist/artifacts/artifact-store.d.ts.map +1 -1
  4. package/dist/artifacts/artifact-store.js +9 -5
  5. package/dist/artifacts/artifact-store.js.map +1 -1
  6. package/dist/bundle/.build-manifest.json +430 -413
  7. package/dist/bundle/chunks/{chunk-A7GUOX2H.js → chunk-6ZKDNZHA.js} +5 -1
  8. package/dist/bundle/chunks/chunk-HLJEVRWP.js +13 -0
  9. package/dist/bundle/chunks/chunk-YGHQME4V.js +1456 -0
  10. package/dist/bundle/chunks/image-resize-worker.js +12 -1
  11. package/dist/bundle/chunks/{virtual-modules-3IZ4MYSQ.js → virtual-modules-KZ5DRH7Q.js} +1 -1
  12. package/dist/bundle/cli.js +1 -1
  13. package/dist/bundle/client.js +1 -1
  14. package/dist/bundle/index.js +2 -2
  15. package/dist/bundle/rpc-entry.js +1 -1
  16. package/dist/cli/args.d.ts.map +1 -1
  17. package/dist/cli/args.js +231 -185
  18. package/dist/cli/args.js.map +1 -1
  19. package/dist/cli/auth-check.d.ts.map +1 -1
  20. package/dist/cli/auth-check.js +17 -4
  21. package/dist/cli/auth-check.js.map +1 -1
  22. package/dist/cli/auth-command.d.ts.map +1 -1
  23. package/dist/cli/auth-command.js +15 -9
  24. package/dist/cli/auth-command.js.map +1 -1
  25. package/dist/cli/credential-print.d.ts.map +1 -1
  26. package/dist/cli/credential-print.js +14 -7
  27. package/dist/cli/credential-print.js.map +1 -1
  28. package/dist/cli/experimental/command.d.ts.map +1 -1
  29. package/dist/cli/experimental/command.js +6 -5
  30. package/dist/cli/experimental/command.js.map +1 -1
  31. package/dist/cli/list-models.d.ts.map +1 -1
  32. package/dist/cli/list-models.js +9 -8
  33. package/dist/cli/list-models.js.map +1 -1
  34. package/dist/cli/plugin-manager-controller.d.ts.map +1 -1
  35. package/dist/cli/plugin-manager-controller.js +2 -1
  36. package/dist/cli/plugin-manager-controller.js.map +1 -1
  37. package/dist/cli/serve.d.ts.map +1 -1
  38. package/dist/cli/serve.js +8 -5
  39. package/dist/cli/serve.js.map +1 -1
  40. package/dist/client/remote-session.d.ts.map +1 -1
  41. package/dist/client/remote-session.js +16 -9
  42. package/dist/client/remote-session.js.map +1 -1
  43. package/dist/config.d.ts.map +1 -1
  44. package/dist/config.js +5 -3
  45. package/dist/config.js.map +1 -1
  46. package/dist/core/agent-capability-contract.d.ts +0 -7
  47. package/dist/core/agent-capability-contract.d.ts.map +1 -1
  48. package/dist/core/agent-capability-contract.js +72 -68
  49. package/dist/core/agent-capability-contract.js.map +1 -1
  50. package/dist/core/agent-session-bash.d.ts.map +1 -1
  51. package/dist/core/agent-session-bash.js +5 -4
  52. package/dist/core/agent-session-bash.js.map +1 -1
  53. package/dist/core/agent-session-compaction.d.ts +6 -10
  54. package/dist/core/agent-session-compaction.d.ts.map +1 -1
  55. package/dist/core/agent-session-compaction.js +35 -133
  56. package/dist/core/agent-session-compaction.js.map +1 -1
  57. package/dist/core/agent-session-context.d.ts.map +1 -1
  58. package/dist/core/agent-session-context.js +18 -13
  59. package/dist/core/agent-session-context.js.map +1 -1
  60. package/dist/core/agent-session-internal.d.ts +0 -6
  61. package/dist/core/agent-session-internal.d.ts.map +1 -1
  62. package/dist/core/agent-session-internal.js.map +1 -1
  63. package/dist/core/agent-session-model.d.ts.map +1 -1
  64. package/dist/core/agent-session-model.js +2 -1
  65. package/dist/core/agent-session-model.js.map +1 -1
  66. package/dist/core/agent-session-retry.d.ts.map +1 -1
  67. package/dist/core/agent-session-retry.js +3 -3
  68. package/dist/core/agent-session-retry.js.map +1 -1
  69. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  70. package/dist/core/agent-session-runtime.js +7 -6
  71. package/dist/core/agent-session-runtime.js.map +1 -1
  72. package/dist/core/agent-session-services.d.ts +1 -1
  73. package/dist/core/agent-session-services.d.ts.map +1 -1
  74. package/dist/core/agent-session-services.js.map +1 -1
  75. package/dist/core/agent-session-tools.d.ts.map +1 -1
  76. package/dist/core/agent-session-tools.js +3 -2
  77. package/dist/core/agent-session-tools.js.map +1 -1
  78. package/dist/core/agent-session.d.ts +40 -22
  79. package/dist/core/agent-session.d.ts.map +1 -1
  80. package/dist/core/agent-session.js +147 -67
  81. package/dist/core/agent-session.js.map +1 -1
  82. package/dist/core/auth-guidance.d.ts.map +1 -1
  83. package/dist/core/auth-guidance.js +11 -5
  84. package/dist/core/auth-guidance.js.map +1 -1
  85. package/dist/core/auth-storage.d.ts.map +1 -1
  86. package/dist/core/auth-storage.js +9 -6
  87. package/dist/core/auth-storage.js.map +1 -1
  88. package/dist/core/compaction/compaction.d.ts.map +1 -1
  89. package/dist/core/compaction/compaction.js +2 -1
  90. package/dist/core/compaction/compaction.js.map +1 -1
  91. package/dist/core/embedded-sdk.d.ts.map +1 -1
  92. package/dist/core/embedded-sdk.js +10 -6
  93. package/dist/core/embedded-sdk.js.map +1 -1
  94. package/dist/core/export-html/index.d.ts.map +1 -1
  95. package/dist/core/export-html/index.js +9 -4
  96. package/dist/core/export-html/index.js.map +1 -1
  97. package/dist/core/extensions/agent-composition.d.ts.map +1 -1
  98. package/dist/core/extensions/agent-composition.js +26 -19
  99. package/dist/core/extensions/agent-composition.js.map +1 -1
  100. package/dist/core/extensions/bootstrap-agent-loop.d.ts.map +1 -1
  101. package/dist/core/extensions/bootstrap-agent-loop.js +3 -2
  102. package/dist/core/extensions/bootstrap-agent-loop.js.map +1 -1
  103. package/dist/core/extensions/bootstrap-compaction-policy.d.ts.map +1 -1
  104. package/dist/core/extensions/bootstrap-compaction-policy.js +0 -34
  105. package/dist/core/extensions/bootstrap-compaction-policy.js.map +1 -1
  106. package/dist/core/extensions/bootstrap-lifecycle.d.ts.map +1 -1
  107. package/dist/core/extensions/bootstrap-lifecycle.js +20 -17
  108. package/dist/core/extensions/bootstrap-lifecycle.js.map +1 -1
  109. package/dist/core/extensions/bootstrap-overflow-policy.d.ts.map +1 -1
  110. package/dist/core/extensions/bootstrap-overflow-policy.js +2 -1
  111. package/dist/core/extensions/bootstrap-overflow-policy.js.map +1 -1
  112. package/dist/core/extensions/bootstrap-retry-policy.d.ts.map +1 -1
  113. package/dist/core/extensions/bootstrap-retry-policy.js +4 -3
  114. package/dist/core/extensions/bootstrap-retry-policy.js.map +1 -1
  115. package/dist/core/extensions/bootstrap-skills.d.ts.map +1 -1
  116. package/dist/core/extensions/bootstrap-skills.js +7 -6
  117. package/dist/core/extensions/bootstrap-skills.js.map +1 -1
  118. package/dist/core/extensions/bootstrap-tools.d.ts.map +1 -1
  119. package/dist/core/extensions/bootstrap-tools.js +2 -1
  120. package/dist/core/extensions/bootstrap-tools.js.map +1 -1
  121. package/dist/core/extensions/capability-plugin.d.ts.map +1 -1
  122. package/dist/core/extensions/capability-plugin.js +37 -13
  123. package/dist/core/extensions/capability-plugin.js.map +1 -1
  124. package/dist/core/extensions/capability-runtime-events.d.ts.map +1 -1
  125. package/dist/core/extensions/capability-runtime-events.js +17 -13
  126. package/dist/core/extensions/capability-runtime-events.js.map +1 -1
  127. package/dist/core/extensions/capability-runtime-guards.d.ts.map +1 -1
  128. package/dist/core/extensions/capability-runtime-guards.js +16 -15
  129. package/dist/core/extensions/capability-runtime-guards.js.map +1 -1
  130. package/dist/core/extensions/capability-runtime-manifest.d.ts.map +1 -1
  131. package/dist/core/extensions/capability-runtime-manifest.js +52 -30
  132. package/dist/core/extensions/capability-runtime-manifest.js.map +1 -1
  133. package/dist/core/extensions/capability-runtime-validation.d.ts.map +1 -1
  134. package/dist/core/extensions/capability-runtime-validation.js +66 -65
  135. package/dist/core/extensions/capability-runtime-validation.js.map +1 -1
  136. package/dist/core/extensions/capability-runtime.d.ts.map +1 -1
  137. package/dist/core/extensions/capability-runtime.js +147 -127
  138. package/dist/core/extensions/capability-runtime.js.map +1 -1
  139. package/dist/core/extensions/compaction-memory-failure-mode.d.ts.map +1 -1
  140. package/dist/core/extensions/compaction-memory-failure-mode.js +3 -2
  141. package/dist/core/extensions/compaction-memory-failure-mode.js.map +1 -1
  142. package/dist/core/extensions/context-strategy-binding.d.ts.map +1 -1
  143. package/dist/core/extensions/context-strategy-binding.js +7 -4
  144. package/dist/core/extensions/context-strategy-binding.js.map +1 -1
  145. package/dist/core/extensions/lifecycle-catalog.d.ts.map +1 -1
  146. package/dist/core/extensions/lifecycle-catalog.js +290 -279
  147. package/dist/core/extensions/lifecycle-catalog.js.map +1 -1
  148. package/dist/core/extensions/lifecycle-delivery-queue.d.ts.map +1 -1
  149. package/dist/core/extensions/lifecycle-delivery-queue.js +3 -2
  150. package/dist/core/extensions/lifecycle-delivery-queue.js.map +1 -1
  151. package/dist/core/extensions/provider-failover.d.ts +7 -3
  152. package/dist/core/extensions/provider-failover.d.ts.map +1 -1
  153. package/dist/core/extensions/provider-failover.js +9 -8
  154. package/dist/core/extensions/provider-failover.js.map +1 -1
  155. package/dist/core/facade/coding-agent-facade.d.ts +6 -6
  156. package/dist/core/facade/coding-agent-facade.d.ts.map +1 -1
  157. package/dist/core/facade/coding-agent-facade.js +2 -3
  158. package/dist/core/facade/coding-agent-facade.js.map +1 -1
  159. package/dist/core/http-dispatcher.d.ts.map +1 -1
  160. package/dist/core/http-dispatcher.js +2 -1
  161. package/dist/core/http-dispatcher.js.map +1 -1
  162. package/dist/core/i18n/index.d.ts +14 -0
  163. package/dist/core/i18n/index.d.ts.map +1 -0
  164. package/dist/core/i18n/index.js +67 -0
  165. package/dist/core/i18n/index.js.map +1 -0
  166. package/dist/core/i18n/locales/en/example.d.ts +7 -0
  167. package/dist/core/i18n/locales/en/example.d.ts.map +1 -0
  168. package/dist/core/i18n/locales/en/example.js +7 -0
  169. package/dist/core/i18n/locales/en/example.js.map +1 -0
  170. package/dist/core/i18n/locales/zh-cn/cli.d.ts +8 -0
  171. package/dist/core/i18n/locales/zh-cn/cli.d.ts.map +1 -0
  172. package/dist/core/i18n/locales/zh-cn/cli.js +229 -0
  173. package/dist/core/i18n/locales/zh-cn/cli.js.map +1 -0
  174. package/dist/core/i18n/locales/zh-cn/common.d.ts +6 -0
  175. package/dist/core/i18n/locales/zh-cn/common.d.ts.map +1 -0
  176. package/dist/core/i18n/locales/zh-cn/common.js +6 -0
  177. package/dist/core/i18n/locales/zh-cn/common.js.map +1 -0
  178. package/dist/core/i18n/locales/zh-cn/core-contract-core.d.ts +13 -0
  179. package/dist/core/i18n/locales/zh-cn/core-contract-core.d.ts.map +1 -0
  180. package/dist/core/i18n/locales/zh-cn/core-contract-core.js +173 -0
  181. package/dist/core/i18n/locales/zh-cn/core-contract-core.js.map +1 -0
  182. package/dist/core/i18n/locales/zh-cn/core-contract-extensions.d.ts +12 -0
  183. package/dist/core/i18n/locales/zh-cn/core-contract-extensions.d.ts.map +1 -0
  184. package/dist/core/i18n/locales/zh-cn/core-contract-extensions.js +582 -0
  185. package/dist/core/i18n/locales/zh-cn/core-contract-extensions.js.map +1 -0
  186. package/dist/core/i18n/locales/zh-cn/core-contract-final.d.ts +9 -0
  187. package/dist/core/i18n/locales/zh-cn/core-contract-final.d.ts.map +1 -0
  188. package/dist/core/i18n/locales/zh-cn/core-contract-final.js +55 -0
  189. package/dist/core/i18n/locales/zh-cn/core-contract-final.js.map +1 -0
  190. package/dist/core/i18n/locales/zh-cn/core-contract-plugins.d.ts +11 -0
  191. package/dist/core/i18n/locales/zh-cn/core-contract-plugins.d.ts.map +1 -0
  192. package/dist/core/i18n/locales/zh-cn/core-contract-plugins.js +455 -0
  193. package/dist/core/i18n/locales/zh-cn/core-contract-plugins.js.map +1 -0
  194. package/dist/core/i18n/locales/zh-cn/core-errors.d.ts +9 -0
  195. package/dist/core/i18n/locales/zh-cn/core-errors.d.ts.map +1 -0
  196. package/dist/core/i18n/locales/zh-cn/core-errors.js +191 -0
  197. package/dist/core/i18n/locales/zh-cn/core-errors.js.map +1 -0
  198. package/dist/core/i18n/locales/zh-cn/example.d.ts +7 -0
  199. package/dist/core/i18n/locales/zh-cn/example.d.ts.map +1 -0
  200. package/dist/core/i18n/locales/zh-cn/example.js +10 -0
  201. package/dist/core/i18n/locales/zh-cn/example.js.map +1 -0
  202. package/dist/core/i18n/locales/zh-cn/index.d.ts +2 -0
  203. package/dist/core/i18n/locales/zh-cn/index.d.ts.map +1 -0
  204. package/dist/core/i18n/locales/zh-cn/index.js +41 -0
  205. package/dist/core/i18n/locales/zh-cn/index.js.map +1 -0
  206. package/dist/core/i18n/locales/zh-cn/interactive-mode.d.ts +10 -0
  207. package/dist/core/i18n/locales/zh-cn/interactive-mode.d.ts.map +1 -0
  208. package/dist/core/i18n/locales/zh-cn/interactive-mode.js +267 -0
  209. package/dist/core/i18n/locales/zh-cn/interactive-mode.js.map +1 -0
  210. package/dist/core/i18n/locales/zh-cn/keybindings.d.ts +11 -0
  211. package/dist/core/i18n/locales/zh-cn/keybindings.d.ts.map +1 -0
  212. package/dist/core/i18n/locales/zh-cn/keybindings.js +67 -0
  213. package/dist/core/i18n/locales/zh-cn/keybindings.js.map +1 -0
  214. package/dist/core/i18n/locales/zh-cn/slash-commands.d.ts +7 -0
  215. package/dist/core/i18n/locales/zh-cn/slash-commands.d.ts.map +1 -0
  216. package/dist/core/i18n/locales/zh-cn/slash-commands.js +39 -0
  217. package/dist/core/i18n/locales/zh-cn/slash-commands.js.map +1 -0
  218. package/dist/core/i18n/locales/zh-cn/tui-builtin.d.ts +10 -0
  219. package/dist/core/i18n/locales/zh-cn/tui-builtin.d.ts.map +1 -0
  220. package/dist/core/i18n/locales/zh-cn/tui-builtin.js +15 -0
  221. package/dist/core/i18n/locales/zh-cn/tui-builtin.js.map +1 -0
  222. package/dist/core/i18n/locales/zh-cn/tui-components-misc.d.ts +13 -0
  223. package/dist/core/i18n/locales/zh-cn/tui-components-misc.d.ts.map +1 -0
  224. package/dist/core/i18n/locales/zh-cn/tui-components-misc.js +102 -0
  225. package/dist/core/i18n/locales/zh-cn/tui-components-misc.js.map +1 -0
  226. package/dist/core/i18n/locales/zh-cn/tui-components-selectors.d.ts +12 -0
  227. package/dist/core/i18n/locales/zh-cn/tui-components-selectors.d.ts.map +1 -0
  228. package/dist/core/i18n/locales/zh-cn/tui-components-selectors.js +286 -0
  229. package/dist/core/i18n/locales/zh-cn/tui-components-selectors.js.map +1 -0
  230. package/dist/core/i18n/locales/zh-cn/tui-interactive-misc.d.ts +9 -0
  231. package/dist/core/i18n/locales/zh-cn/tui-interactive-misc.d.ts.map +1 -0
  232. package/dist/core/i18n/locales/zh-cn/tui-interactive-misc.js +79 -0
  233. package/dist/core/i18n/locales/zh-cn/tui-interactive-misc.js.map +1 -0
  234. package/dist/core/i18n/locales/zh-cn/tui-self-owned.d.ts +8 -0
  235. package/dist/core/i18n/locales/zh-cn/tui-self-owned.d.ts.map +1 -0
  236. package/dist/core/i18n/locales/zh-cn/tui-self-owned.js +72 -0
  237. package/dist/core/i18n/locales/zh-cn/tui-self-owned.js.map +1 -0
  238. package/dist/core/keybindings.d.ts +15 -0
  239. package/dist/core/keybindings.d.ts.map +1 -1
  240. package/dist/core/keybindings.js +18 -0
  241. package/dist/core/keybindings.js.map +1 -1
  242. package/dist/core/logger.d.ts.map +1 -1
  243. package/dist/core/logger.js +5 -1
  244. package/dist/core/logger.js.map +1 -1
  245. package/dist/core/model-config.d.ts +0 -1
  246. package/dist/core/model-config.d.ts.map +1 -1
  247. package/dist/core/model-config.js +9 -1
  248. package/dist/core/model-config.js.map +1 -1
  249. package/dist/core/model-registry.d.ts.map +1 -1
  250. package/dist/core/model-registry.js +2 -1
  251. package/dist/core/model-registry.js.map +1 -1
  252. package/dist/core/model-runtime.d.ts.map +1 -1
  253. package/dist/core/model-runtime.js +11 -7
  254. package/dist/core/model-runtime.js.map +1 -1
  255. package/dist/core/package-install-host.d.ts.map +1 -1
  256. package/dist/core/package-install-host.js +4 -3
  257. package/dist/core/package-install-host.js.map +1 -1
  258. package/dist/core/package-manager.d.ts.map +1 -1
  259. package/dist/core/package-manager.js +15 -10
  260. package/dist/core/package-manager.js.map +1 -1
  261. package/dist/core/package-resource-collection.d.ts.map +1 -1
  262. package/dist/core/package-resource-collection.js +2 -1
  263. package/dist/core/package-resource-collection.js.map +1 -1
  264. package/dist/core/package-source.d.ts.map +1 -1
  265. package/dist/core/package-source.js +3 -2
  266. package/dist/core/package-source.js.map +1 -1
  267. package/dist/core/provider-composer.d.ts +2 -2
  268. package/dist/core/provider-composer.d.ts.map +1 -1
  269. package/dist/core/provider-composer.js +29 -21
  270. package/dist/core/provider-composer.js.map +1 -1
  271. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  272. package/dist/core/remote-catalog-provider.js +6 -2
  273. package/dist/core/remote-catalog-provider.js.map +1 -1
  274. package/dist/core/resolve-config-value.d.ts.map +1 -1
  275. package/dist/core/resolve-config-value.js +15 -5
  276. package/dist/core/resolve-config-value.js.map +1 -1
  277. package/dist/core/sdk.d.ts +27 -5
  278. package/dist/core/sdk.d.ts.map +1 -1
  279. package/dist/core/sdk.js +80 -55
  280. package/dist/core/sdk.js.map +1 -1
  281. package/dist/core/session-cwd.d.ts.map +1 -1
  282. package/dist/core/session-cwd.js +5 -2
  283. package/dist/core/session-cwd.js.map +1 -1
  284. package/dist/core/session-export.d.ts.map +1 -1
  285. package/dist/core/session-export.js +2 -1
  286. package/dist/core/session-export.js.map +1 -1
  287. package/dist/core/session-manager.d.ts.map +1 -1
  288. package/dist/core/session-manager.js +39 -29
  289. package/dist/core/session-manager.js.map +1 -1
  290. package/dist/core/session-storage.d.ts.map +1 -1
  291. package/dist/core/session-storage.js +3 -3
  292. package/dist/core/session-storage.js.map +1 -1
  293. package/dist/core/settings-manager.d.ts +20 -20
  294. package/dist/core/settings-manager.d.ts.map +1 -1
  295. package/dist/core/settings-manager.js +47 -59
  296. package/dist/core/settings-manager.js.map +1 -1
  297. package/dist/core/slash-commands.d.ts.map +1 -1
  298. package/dist/core/slash-commands.js +53 -32
  299. package/dist/core/slash-commands.js.map +1 -1
  300. package/dist/core/system-prompt.d.ts.map +1 -1
  301. package/dist/core/system-prompt.js +25 -2
  302. package/dist/core/system-prompt.js.map +1 -1
  303. package/dist/core/tools/bash.d.ts.map +1 -1
  304. package/dist/core/tools/bash.js +11 -7
  305. package/dist/core/tools/bash.js.map +1 -1
  306. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  307. package/dist/core/tools/edit-diff.js +9 -4
  308. package/dist/core/tools/edit-diff.js.map +1 -1
  309. package/dist/core/tools/edit.d.ts.map +1 -1
  310. package/dist/core/tools/edit.js +4 -3
  311. package/dist/core/tools/edit.js.map +1 -1
  312. package/dist/core/tools/index.d.ts.map +1 -1
  313. package/dist/core/tools/index.js +3 -2
  314. package/dist/core/tools/index.js.map +1 -1
  315. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  316. package/dist/core/tools/output-accumulator.js +2 -1
  317. package/dist/core/tools/output-accumulator.js.map +1 -1
  318. package/dist/core/tools/read.d.ts.map +1 -1
  319. package/dist/core/tools/read.js +6 -2
  320. package/dist/core/tools/read.js.map +1 -1
  321. package/dist/core/tools/write.d.ts.map +1 -1
  322. package/dist/core/tools/write.js +2 -1
  323. package/dist/core/tools/write.js.map +1 -1
  324. package/dist/durable/durable-service.d.ts.map +1 -1
  325. package/dist/durable/durable-service.js +25 -18
  326. package/dist/durable/durable-service.js.map +1 -1
  327. package/dist/host/checkpoint-commit.d.ts.map +1 -1
  328. package/dist/host/checkpoint-commit.js +2 -1
  329. package/dist/host/checkpoint-commit.js.map +1 -1
  330. package/dist/host/manual-compaction.d.ts.map +1 -1
  331. package/dist/host/manual-compaction.js +2 -1
  332. package/dist/host/manual-compaction.js.map +1 -1
  333. package/dist/host/output-projection.d.ts +0 -13
  334. package/dist/host/output-projection.d.ts.map +1 -1
  335. package/dist/host/output-projection.js +16 -2
  336. package/dist/host/output-projection.js.map +1 -1
  337. package/dist/host/summary-retry.d.ts.map +1 -1
  338. package/dist/host/summary-retry.js +3 -2
  339. package/dist/host/summary-retry.js.map +1 -1
  340. package/dist/main.d.ts.map +1 -1
  341. package/dist/main.js +97 -60
  342. package/dist/main.js.map +1 -1
  343. package/dist/modes/interactive/components/agents-view.d.ts.map +1 -1
  344. package/dist/modes/interactive/components/agents-view.js +18 -15
  345. package/dist/modes/interactive/components/agents-view.js.map +1 -1
  346. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  347. package/dist/modes/interactive/components/assistant-message.js +6 -5
  348. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  349. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  350. package/dist/modes/interactive/components/bash-execution.js +12 -7
  351. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  352. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  353. package/dist/modes/interactive/components/bordered-loader.js +2 -1
  354. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  355. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  356. package/dist/modes/interactive/components/branch-summary-message.js +6 -5
  357. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  358. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  359. package/dist/modes/interactive/components/compaction-summary-message.js +9 -5
  360. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  361. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  362. package/dist/modes/interactive/components/config-selector.js +18 -15
  363. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  364. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
  365. package/dist/modes/interactive/components/custom-entry.js +2 -1
  366. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  367. package/dist/modes/interactive/components/dialog-editor.d.ts.map +1 -1
  368. package/dist/modes/interactive/components/dialog-editor.js +5 -4
  369. package/dist/modes/interactive/components/dialog-editor.js.map +1 -1
  370. package/dist/modes/interactive/components/dialog-input.d.ts.map +1 -1
  371. package/dist/modes/interactive/components/dialog-input.js +2 -1
  372. package/dist/modes/interactive/components/dialog-input.js.map +1 -1
  373. package/dist/modes/interactive/components/dialog-selector.d.ts.map +1 -1
  374. package/dist/modes/interactive/components/dialog-selector.js +4 -3
  375. package/dist/modes/interactive/components/dialog-selector.js.map +1 -1
  376. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  377. package/dist/modes/interactive/components/first-time-setup.js +11 -10
  378. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  379. package/dist/modes/interactive/components/footer.d.ts +0 -2
  380. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  381. package/dist/modes/interactive/components/footer.js +8 -10
  382. package/dist/modes/interactive/components/footer.js.map +1 -1
  383. package/dist/modes/interactive/components/index.d.ts +1 -0
  384. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  385. package/dist/modes/interactive/components/index.js +1 -0
  386. package/dist/modes/interactive/components/index.js.map +1 -1
  387. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  388. package/dist/modes/interactive/components/keybinding-hints.js +3 -2
  389. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  390. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  391. package/dist/modes/interactive/components/login-dialog.js +12 -11
  392. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  393. package/dist/modes/interactive/components/mermaid.d.ts.map +1 -1
  394. package/dist/modes/interactive/components/mermaid.js +6 -2
  395. package/dist/modes/interactive/components/mermaid.js.map +1 -1
  396. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  397. package/dist/modes/interactive/components/model-selector.js +28 -16
  398. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  399. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  400. package/dist/modes/interactive/components/oauth-selector.js +10 -9
  401. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  402. package/dist/modes/interactive/components/plugin-manager-entry.d.ts.map +1 -1
  403. package/dist/modes/interactive/components/plugin-manager-entry.js +22 -13
  404. package/dist/modes/interactive/components/plugin-manager-entry.js.map +1 -1
  405. package/dist/modes/interactive/components/plugin-selection-entry.d.ts.map +1 -1
  406. package/dist/modes/interactive/components/plugin-selection-entry.js +27 -12
  407. package/dist/modes/interactive/components/plugin-selection-entry.js.map +1 -1
  408. package/dist/modes/interactive/components/queue-manager-selector.d.ts +60 -0
  409. package/dist/modes/interactive/components/queue-manager-selector.d.ts.map +1 -0
  410. package/dist/modes/interactive/components/queue-manager-selector.js +166 -0
  411. package/dist/modes/interactive/components/queue-manager-selector.js.map +1 -0
  412. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  413. package/dist/modes/interactive/components/scoped-models-selector.js +16 -14
  414. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  415. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  416. package/dist/modes/interactive/components/session-selector.js +43 -31
  417. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  418. package/dist/modes/interactive/components/settings-selector.d.ts +4 -6
  419. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  420. package/dist/modes/interactive/components/settings-selector.js +115 -120
  421. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  422. package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -1
  423. package/dist/modes/interactive/components/settings-submenu.js +5 -4
  424. package/dist/modes/interactive/components/settings-submenu.js.map +1 -1
  425. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  426. package/dist/modes/interactive/components/show-images-selector.js +3 -2
  427. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  428. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  429. package/dist/modes/interactive/components/skill-invocation-message.js +4 -3
  430. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  431. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
  432. package/dist/modes/interactive/components/status-indicator.js +14 -5
  433. package/dist/modes/interactive/components/status-indicator.js.map +1 -1
  434. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  435. package/dist/modes/interactive/components/theme-selector.js +2 -1
  436. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  437. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  438. package/dist/modes/interactive/components/thinking-selector.js +11 -4
  439. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  440. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  441. package/dist/modes/interactive/components/tool-execution.js +8 -3
  442. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  443. package/dist/modes/interactive/components/tree-list.d.ts.map +1 -1
  444. package/dist/modes/interactive/components/tree-list.js +7 -6
  445. package/dist/modes/interactive/components/tree-list.js.map +1 -1
  446. package/dist/modes/interactive/components/tree-render.d.ts.map +1 -1
  447. package/dist/modes/interactive/components/tree-render.js +28 -23
  448. package/dist/modes/interactive/components/tree-render.js.map +1 -1
  449. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  450. package/dist/modes/interactive/components/tree-selector.js +9 -7
  451. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  452. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  453. package/dist/modes/interactive/components/user-message-selector.js +5 -4
  454. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  455. package/dist/modes/interactive/components/workflow-view.d.ts.map +1 -1
  456. package/dist/modes/interactive/components/workflow-view.js +36 -21
  457. package/dist/modes/interactive/components/workflow-view.js.map +1 -1
  458. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  459. package/dist/modes/interactive/external-editor.js +2 -1
  460. package/dist/modes/interactive/external-editor.js.map +1 -1
  461. package/dist/modes/interactive/interactive-auth.d.ts.map +1 -1
  462. package/dist/modes/interactive/interactive-auth.js +71 -40
  463. package/dist/modes/interactive/interactive-auth.js.map +1 -1
  464. package/dist/modes/interactive/interactive-commands.d.ts +1 -0
  465. package/dist/modes/interactive/interactive-commands.d.ts.map +1 -1
  466. package/dist/modes/interactive/interactive-commands.js +3 -0
  467. package/dist/modes/interactive/interactive-commands.js.map +1 -1
  468. package/dist/modes/interactive/interactive-dialog-ui.d.ts.map +1 -1
  469. package/dist/modes/interactive/interactive-dialog-ui.js +5 -5
  470. package/dist/modes/interactive/interactive-dialog-ui.js.map +1 -1
  471. package/dist/modes/interactive/interactive-format.d.ts.map +1 -1
  472. package/dist/modes/interactive/interactive-format.js +34 -18
  473. package/dist/modes/interactive/interactive-format.js.map +1 -1
  474. package/dist/modes/interactive/interactive-helpers.d.ts.map +1 -1
  475. package/dist/modes/interactive/interactive-helpers.js +7 -2
  476. package/dist/modes/interactive/interactive-helpers.js.map +1 -1
  477. package/dist/modes/interactive/interactive-mode.d.ts +4 -2
  478. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  479. package/dist/modes/interactive/interactive-mode.js +350 -279
  480. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  481. package/dist/modes/interactive/interactive-selectors.d.ts +9 -0
  482. package/dist/modes/interactive/interactive-selectors.d.ts.map +1 -1
  483. package/dist/modes/interactive/interactive-selectors.js +79 -25
  484. package/dist/modes/interactive/interactive-selectors.js.map +1 -1
  485. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  486. package/dist/modes/interactive/theme/theme-controller.js +5 -1
  487. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  488. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  489. package/dist/modes/interactive/theme/theme.js +26 -23
  490. package/dist/modes/interactive/theme/theme.js.map +1 -1
  491. package/dist/modes/json-event.d.ts.map +1 -1
  492. package/dist/modes/json-event.js +3 -2
  493. package/dist/modes/json-event.js.map +1 -1
  494. package/dist/modes/print-mode.d.ts.map +1 -1
  495. package/dist/modes/print-mode.js +3 -2
  496. package/dist/modes/print-mode.js.map +1 -1
  497. package/dist/modes/rpc/rpc-client.d.ts +0 -8
  498. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  499. package/dist/modes/rpc/rpc-client.js +3 -14
  500. package/dist/modes/rpc/rpc-client.js.map +1 -1
  501. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  502. package/dist/modes/rpc/rpc-mode.js +0 -9
  503. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  504. package/dist/modes/rpc/rpc-types.d.ts +0 -19
  505. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  506. package/dist/modes/rpc/rpc-types.js.map +1 -1
  507. package/dist/package-manager-cli.d.ts.map +1 -1
  508. package/dist/package-manager-cli.js +28 -13
  509. package/dist/package-manager-cli.js.map +1 -1
  510. package/dist/plugins/ecosystem/catalog.d.ts.map +1 -1
  511. package/dist/plugins/ecosystem/catalog.js +3 -2
  512. package/dist/plugins/ecosystem/catalog.js.map +1 -1
  513. package/dist/plugins/ecosystem/cli.d.ts.map +1 -1
  514. package/dist/plugins/ecosystem/cli.js +2 -1
  515. package/dist/plugins/ecosystem/cli.js.map +1 -1
  516. package/dist/plugins/ecosystem/default-plugin-market.d.ts.map +1 -1
  517. package/dist/plugins/ecosystem/default-plugin-market.js +3 -2
  518. package/dist/plugins/ecosystem/default-plugin-market.js.map +1 -1
  519. package/dist/plugins/ecosystem/distribution.d.ts.map +1 -1
  520. package/dist/plugins/ecosystem/distribution.js +2 -1
  521. package/dist/plugins/ecosystem/distribution.js.map +1 -1
  522. package/dist/plugins/ecosystem/installer.d.ts.map +1 -1
  523. package/dist/plugins/ecosystem/installer.js +3 -2
  524. package/dist/plugins/ecosystem/installer.js.map +1 -1
  525. package/dist/plugins/ecosystem/node-disk-registry-source.d.ts.map +1 -1
  526. package/dist/plugins/ecosystem/node-disk-registry-source.js +20 -17
  527. package/dist/plugins/ecosystem/node-disk-registry-source.js.map +1 -1
  528. package/dist/plugins/ecosystem/node-distribution-host.d.ts.map +1 -1
  529. package/dist/plugins/ecosystem/node-distribution-host.js +35 -34
  530. package/dist/plugins/ecosystem/node-distribution-host.js.map +1 -1
  531. package/dist/plugins/ecosystem/node-npm-registry-source.d.ts.map +1 -1
  532. package/dist/plugins/ecosystem/node-npm-registry-source.js +35 -34
  533. package/dist/plugins/ecosystem/node-npm-registry-source.js.map +1 -1
  534. package/dist/plugins/ecosystem/node-package-install-host.d.ts.map +1 -1
  535. package/dist/plugins/ecosystem/node-package-install-host.js +9 -8
  536. package/dist/plugins/ecosystem/node-package-install-host.js.map +1 -1
  537. package/dist/plugins/ecosystem/node-package-install-persistence.d.ts.map +1 -1
  538. package/dist/plugins/ecosystem/node-package-install-persistence.js +4 -3
  539. package/dist/plugins/ecosystem/node-package-install-persistence.js.map +1 -1
  540. package/dist/plugins/ecosystem/node-plugin-bootstrap.d.ts +9 -2
  541. package/dist/plugins/ecosystem/node-plugin-bootstrap.d.ts.map +1 -1
  542. package/dist/plugins/ecosystem/node-plugin-bootstrap.js +44 -5
  543. package/dist/plugins/ecosystem/node-plugin-bootstrap.js.map +1 -1
  544. package/dist/plugins/ecosystem/node-plugin-trust-root.d.ts.map +1 -1
  545. package/dist/plugins/ecosystem/node-plugin-trust-root.js +10 -9
  546. package/dist/plugins/ecosystem/node-plugin-trust-root.js.map +1 -1
  547. package/dist/plugins/ecosystem/node-registry-source.d.ts.map +1 -1
  548. package/dist/plugins/ecosystem/node-registry-source.js +31 -30
  549. package/dist/plugins/ecosystem/node-registry-source.js.map +1 -1
  550. package/dist/plugins/ecosystem/node-release-package-source.d.ts.map +1 -1
  551. package/dist/plugins/ecosystem/node-release-package-source.js +30 -29
  552. package/dist/plugins/ecosystem/node-release-package-source.js.map +1 -1
  553. package/dist/plugins/ecosystem/node-tar-writer.d.ts.map +1 -1
  554. package/dist/plugins/ecosystem/node-tar-writer.js +11 -10
  555. package/dist/plugins/ecosystem/node-tar-writer.js.map +1 -1
  556. package/dist/plugins/ecosystem/node-url-package-source.d.ts.map +1 -1
  557. package/dist/plugins/ecosystem/node-url-package-source.js +21 -20
  558. package/dist/plugins/ecosystem/node-url-package-source.js.map +1 -1
  559. package/dist/plugins/ecosystem/plugin-acquisition.d.ts.map +1 -1
  560. package/dist/plugins/ecosystem/plugin-acquisition.js +3 -2
  561. package/dist/plugins/ecosystem/plugin-acquisition.js.map +1 -1
  562. package/dist/plugins/ecosystem/plugin-bootstrap.d.ts +9 -1
  563. package/dist/plugins/ecosystem/plugin-bootstrap.d.ts.map +1 -1
  564. package/dist/plugins/ecosystem/plugin-bootstrap.js +5 -0
  565. package/dist/plugins/ecosystem/plugin-bootstrap.js.map +1 -1
  566. package/dist/plugins/ecosystem/registry-cli-adapter.d.ts.map +1 -1
  567. package/dist/plugins/ecosystem/registry-cli-adapter.js +2 -1
  568. package/dist/plugins/ecosystem/registry-cli-adapter.js.map +1 -1
  569. package/dist/plugins/ecosystem/registry.d.ts.map +1 -1
  570. package/dist/plugins/ecosystem/registry.js +35 -32
  571. package/dist/plugins/ecosystem/registry.js.map +1 -1
  572. package/dist/plugins/ecosystem/resolver.d.ts.map +1 -1
  573. package/dist/plugins/ecosystem/resolver.js +3 -2
  574. package/dist/plugins/ecosystem/resolver.js.map +1 -1
  575. package/dist/plugins/ecosystem/selection-store.d.ts.map +1 -1
  576. package/dist/plugins/ecosystem/selection-store.js +11 -10
  577. package/dist/plugins/ecosystem/selection-store.js.map +1 -1
  578. package/dist/plugins/ecosystem/selection.d.ts.map +1 -1
  579. package/dist/plugins/ecosystem/selection.js +8 -7
  580. package/dist/plugins/ecosystem/selection.js.map +1 -1
  581. package/dist/plugins/ecosystem/state.d.ts.map +1 -1
  582. package/dist/plugins/ecosystem/state.js +24 -23
  583. package/dist/plugins/ecosystem/state.js.map +1 -1
  584. package/dist/plugins/ecosystem/updates.d.ts.map +1 -1
  585. package/dist/plugins/ecosystem/updates.js +5 -4
  586. package/dist/plugins/ecosystem/updates.js.map +1 -1
  587. package/dist/plugins/mcp-http.d.ts +0 -17
  588. package/dist/plugins/mcp-http.d.ts.map +1 -1
  589. package/dist/plugins/mcp-http.js +30 -7
  590. package/dist/plugins/mcp-http.js.map +1 -1
  591. package/dist/plugins/plugin-supervisor.d.ts.map +1 -1
  592. package/dist/plugins/plugin-supervisor.js +19 -1
  593. package/dist/plugins/plugin-supervisor.js.map +1 -1
  594. package/dist/profile/first-roles.d.ts.map +1 -1
  595. package/dist/profile/first-roles.js +10 -1
  596. package/dist/profile/first-roles.js.map +1 -1
  597. package/dist/profile/goal-plugin.d.ts.map +1 -1
  598. package/dist/profile/goal-plugin.js +24 -5
  599. package/dist/profile/goal-plugin.js.map +1 -1
  600. package/dist/profile/identity.d.ts.map +1 -1
  601. package/dist/profile/identity.js +7 -6
  602. package/dist/profile/identity.js.map +1 -1
  603. package/dist/profile/lock.d.ts.map +1 -1
  604. package/dist/profile/lock.js +15 -1
  605. package/dist/profile/lock.js.map +1 -1
  606. package/dist/profile/plan-plugin.d.ts.map +1 -1
  607. package/dist/profile/plan-plugin.js +26 -13
  608. package/dist/profile/plan-plugin.js.map +1 -1
  609. package/dist/profile/plugin-profiles.d.ts.map +1 -1
  610. package/dist/profile/plugin-profiles.js +2 -1
  611. package/dist/profile/plugin-profiles.js.map +1 -1
  612. package/dist/profile/policy-manifest.d.ts.map +1 -1
  613. package/dist/profile/policy-manifest.js +5 -4
  614. package/dist/profile/policy-manifest.js.map +1 -1
  615. package/dist/profile/profile-registry.d.ts +0 -12
  616. package/dist/profile/profile-registry.d.ts.map +1 -1
  617. package/dist/profile/profile-registry.js +14 -1
  618. package/dist/profile/profile-registry.js.map +1 -1
  619. package/dist/profile/role-catalog.d.ts +0 -1
  620. package/dist/profile/role-catalog.d.ts.map +1 -1
  621. package/dist/profile/role-catalog.js +17 -15
  622. package/dist/profile/role-catalog.js.map +1 -1
  623. package/dist/profile/role-orchestrator.d.ts.map +1 -1
  624. package/dist/profile/role-orchestrator.js +8 -7
  625. package/dist/profile/role-orchestrator.js.map +1 -1
  626. package/dist/profile/role-runner.d.ts.map +1 -1
  627. package/dist/profile/role-runner.js +3 -2
  628. package/dist/profile/role-runner.js.map +1 -1
  629. package/dist/profile/root-facade.d.ts.map +1 -1
  630. package/dist/profile/root-facade.js +2 -1
  631. package/dist/profile/root-facade.js.map +1 -1
  632. package/dist/profile/skill-discovery-wiring.d.ts.map +1 -1
  633. package/dist/profile/skill-discovery-wiring.js +7 -2
  634. package/dist/profile/skill-discovery-wiring.js.map +1 -1
  635. package/dist/profile/state-store.d.ts.map +1 -1
  636. package/dist/profile/state-store.js +13 -9
  637. package/dist/profile/state-store.js.map +1 -1
  638. package/dist/profile/todo-plugin.d.ts.map +1 -1
  639. package/dist/profile/todo-plugin.js +9 -4
  640. package/dist/profile/todo-plugin.js.map +1 -1
  641. package/dist/profiles/builtin-suites.d.ts +13 -6
  642. package/dist/profiles/builtin-suites.d.ts.map +1 -1
  643. package/dist/profiles/builtin-suites.js +15 -6
  644. package/dist/profiles/builtin-suites.js.map +1 -1
  645. package/dist/profiles/suite-loader.d.ts +25 -1
  646. package/dist/profiles/suite-loader.d.ts.map +1 -1
  647. package/dist/profiles/suite-loader.js +34 -9
  648. package/dist/profiles/suite-loader.js.map +1 -1
  649. package/dist/remote/server-entry.d.ts.map +1 -1
  650. package/dist/remote/server-entry.js +3 -2
  651. package/dist/remote/server-entry.js.map +1 -1
  652. package/dist/remote/session-source.d.ts.map +1 -1
  653. package/dist/remote/session-source.js +8 -4
  654. package/dist/remote/session-source.js.map +1 -1
  655. package/dist/share/session-share.d.ts.map +1 -1
  656. package/dist/share/session-share.js +14 -2
  657. package/dist/share/session-share.js.map +1 -1
  658. package/dist/testing/plugin-testkit.d.ts.map +1 -1
  659. package/dist/testing/plugin-testkit.js +4 -3
  660. package/dist/testing/plugin-testkit.js.map +1 -1
  661. package/dist/testing/runtime-delivery-queue.d.ts.map +1 -1
  662. package/dist/testing/runtime-delivery-queue.js +2 -1
  663. package/dist/testing/runtime-delivery-queue.js.map +1 -1
  664. package/dist/testing/session-plugin-testkit.d.ts.map +1 -1
  665. package/dist/testing/session-plugin-testkit.js +10 -7
  666. package/dist/testing/session-plugin-testkit.js.map +1 -1
  667. package/dist/utils/ansi.d.ts.map +1 -1
  668. package/dist/utils/ansi.js +2 -1
  669. package/dist/utils/ansi.js.map +1 -1
  670. package/dist/utils/clipboard.d.ts.map +1 -1
  671. package/dist/utils/clipboard.js +7 -6
  672. package/dist/utils/clipboard.js.map +1 -1
  673. package/dist/utils/image-resize-worker.d.ts.map +1 -1
  674. package/dist/utils/image-resize-worker.js +3 -2
  675. package/dist/utils/image-resize-worker.js.map +1 -1
  676. package/dist/utils/photon.d.ts +2 -2
  677. package/dist/utils/photon.d.ts.map +1 -1
  678. package/dist/utils/photon.js +2 -2
  679. package/dist/utils/photon.js.map +1 -1
  680. package/dist/utils/shell.d.ts.map +1 -1
  681. package/dist/utils/shell.js +9 -8
  682. package/dist/utils/shell.js.map +1 -1
  683. package/dist/utils/tools-manager.d.ts.map +1 -1
  684. package/dist/utils/tools-manager.js +23 -13
  685. package/dist/utils/tools-manager.js.map +1 -1
  686. package/dist/utils/version-check.d.ts.map +1 -1
  687. package/dist/utils/version-check.js +5 -1
  688. package/dist/utils/version-check.js.map +1 -1
  689. package/docs/compaction.md +1 -3
  690. package/docs/docs.json +4 -0
  691. package/docs/index.md +1 -0
  692. package/docs/keybindings.md +3 -0
  693. package/docs/mcp.md +103 -0
  694. package/docs/models.md +14 -22
  695. package/docs/providers.md +0 -1
  696. package/docs/quickstart.md +1 -1
  697. package/docs/rpc.md +1 -26
  698. package/docs/sdk.md +4 -6
  699. package/docs/settings.md +10 -12
  700. package/docs/skills.md +1 -9
  701. package/docs/terminal-setup.md +2 -3
  702. package/docs/usage.md +7 -6
  703. package/examples/extensions/with-deps/package-lock.json +2 -2
  704. package/examples/extensions/with-deps/package.json +1 -1
  705. package/examples/extensions/with-deps/plugin.json +1 -1
  706. package/examples/sdk/10-settings.ts +2 -4
  707. package/examples/sdk/12-full-control.ts +1 -2
  708. package/package.json +1 -3
  709. package/dist/bundle/chunks/chunk-EALJ5DDX.js +0 -1452
  710. package/dist/core/extensions/microcompact.d.ts +0 -80
  711. package/dist/core/extensions/microcompact.d.ts.map +0 -1
  712. package/dist/core/extensions/microcompact.js +0 -134
  713. package/dist/core/extensions/microcompact.js.map +0 -1
  714. package/dist/server/create-harness.d.ts +0 -26
  715. package/dist/server/create-harness.d.ts.map +0 -1
  716. package/dist/server/create-harness.js +0 -106
  717. package/dist/server/create-harness.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"agent-composition.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/agent-composition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,mBAAmB,EACnB,iCAAiC,EACjC,2BAA2B,EAC3B,iCAAiC,EAKjC,eAAe,EAEf,0BAA0B,EAE1B,aAAa,EAEb,qBAAqB,EASrB,iBAAiB,EAOjB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,8BAA8B;IAC9C,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACrC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qBAAqB,CAAC,EAAE,0BAA0B,CAAC;CACnD;AAED,MAAM,MAAM,kCAAkC,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AACrF,MAAM,MAAM,uCAAuC,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE3F,MAAM,WAAW,8BAA8B;IAC9C,QAAQ,CAAC,KAAK,EAAE,kCAAkC,CAAC;IACnD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,uCAAuC,CAAC;IAC1D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CACtC;AAED,MAAM,MAAM,mCAAmC,GAAG,CAAC,KAAK,EAAE,8BAA8B,KAAK,IAAI,CAAC;AAElG,qFAAqF;AACrF,MAAM,WAAW,gCAAgC;IAChD,sBAAsB,CAAC,UAAU,CAAC,EAAE,mCAAmC,GAAG,IAAI,CAAC;CAC/E;AAED;;;;;GAKG;AACH,MAAM,WAAW,oCAAoC;IACpD,kHAAkH;IAClH,uBAAuB,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAC3E;AAED,KAAK,aAAa,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AA4vBrD,qBAAa,uBACZ,YACC,mBAAmB,EACnB,2BAA2B,EAC3B,iCAAiC,EACjC,iCAAiC,EACjC,oCAAoC;IAErC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwD;IACpF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6D;IACvF,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA2C;IACjF,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;IAClD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAS;IAC5C,OAAO,CAAC,qBAAqB,CAAC,CAA6B;IAC3D,OAAO,CAAC,mBAAmB,CAAC,CAAsC;IAElE,YAAY,OAAO,GAAE,8BAAmC,EAIvD;IAED,wBAAwB,CAAC,OAAO,CAAC,EAAE,0BAA0B,GAAG,IAAI,CAEnE;IAED,sBAAsB,CAAC,UAAU,CAAC,EAAE,mCAAmC,GAAG,IAAI,CAE7E;IAED,uBAAuB,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI,CAKzE;IAED,kBAAkB,CAAC,WAAW,EAAE,SAAS,eAAe,EAAE,GAAG,IAAI,CAUhE;IAED,MAAM,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EACzC,UAAU,EAAE,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,GAC1C,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAWlC;IAED,GAAG,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAItG;IAED,MAAM,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EACzC,UAAU,EAAE,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,EAC5D,OAAO,GAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAO,GACtD,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAEhC;IAED,wBAAwB,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EAC3D,UAAU,EAAE,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,EAC5D,OAAO,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,EAC/D,qBAAqB,EAAE,0BAA0B,EACjD,mBAAmB,CAAC,EAAE,mCAAmC,GACvD,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAUhC;IAED,OAAO,CAAC,cAAc;IAiCtB,aAAa,IAAI,SAAS,qBAAqB,EAAE,CAEhD;IAED,OAAO,CAAC,aAAa;CAGrB;AAED,wBAAgB,6BAA6B,CAAC,OAAO,GAAE,8BAAmC,GAAG,uBAAuB,CAEnH","sourcesContent":["import type {\n\tAgentCompositionAPI,\n\tAgentCompositionDefinitionBinding,\n\tAgentCompositionHostBinding,\n\tAgentCompositionScopedHostBinding,\n\tAgentContextCommitRequestV1,\n\tAgentContextCommitResultV1,\n\tAgentContextFacadeV1,\n\tAgentControllerLease,\n\tAgentDefinition,\n\tAgentExecutionContext,\n\tAgentHostPrimitivesFactory,\n\tAgentHostPrimitivesV1,\n\tAgentInstance,\n\tAgentInstanceResult,\n\tAgentInstanceSnapshot,\n\tAgentInstanceStatus,\n\tAgentModelFacadeV1,\n\tAgentModelInvocationV1,\n\tAgentOperationFacadeV1,\n\tAgentSessionFacadeV1,\n\tAgentToolFacadeV1,\n\tDisposableRegistration,\n\tOperationHandle,\n\tOperationProgress,\n\tOperationStatus,\n\tOutputArtifactAPI,\n\tOutputArtifactChunk,\n\tOutputArtifactRef,\n\tStateAPI,\n\tStateChange,\n} from \"./public-api.ts\";\n\nexport interface AgentCompositionRuntimeOptions {\n\tidFactory?: (kind: string) => string;\n\tdefaultLeaseOwner?: string;\n\thostPrimitivesFactory?: AgentHostPrimitivesFactory;\n}\n\nexport type AgentCompositionLifecycleEventName = \"start\" | \"step\" | \"cancel\" | \"end\";\nexport type AgentCompositionLifecycleTerminalStatus = \"succeeded\" | \"failed\" | \"cancelled\";\n\nexport interface AgentCompositionLifecycleEvent {\n\treadonly event: AgentCompositionLifecycleEventName;\n\treadonly operationId: string;\n\treadonly operationKind: string;\n\treadonly owner?: string;\n\treadonly status?: AgentCompositionLifecycleTerminalStatus;\n\treadonly step?: number;\n\treadonly progress?: OperationProgress;\n}\n\nexport type AgentCompositionLifecycleDispatcher = (event: AgentCompositionLifecycleEvent) => void;\n\n/** Host-only binding used by CapabilityRuntime to observe composition operations. */\nexport interface AgentCompositionLifecycleBinding {\n\tsetLifecycleDispatcher(dispatcher?: AgentCompositionLifecycleDispatcher): void;\n}\n\n/**\n * Host-only binding used by CapabilityRuntime to clear instance-scoped state\n * when an instance is disposed. Instance ids are unique per composition\n * runtime, so every registered clearer is invoked on each disposal and\n * resolves by id whether the disposed instance belongs to it.\n */\nexport interface AgentCompositionInstanceStateBinding {\n\t/** Registers a clearer invoked after a disposed instance's execution drained. Returns an unsubscribe function. */\n\taddInstanceStateClearer(clearer: (instanceId: string) => void): () => void;\n}\n\ntype DefinitionRef = { id: string; version: number };\n\nconst terminalStatuses = new Set<AgentInstanceStatus>([\"succeeded\", \"failed\", \"cancelled\", \"disposed\"]);\n\nfunction abortError(reason?: unknown): Error {\n\tif (reason instanceof Error) return reason;\n\tconst error = new Error(reason === undefined ? \"Agent operation cancelled\" : String(reason));\n\terror.name = \"AbortError\";\n\treturn error;\n}\n\nfunction combinedAbortSignal(...signals: readonly (AbortSignal | undefined)[]): {\n\tsignal: AbortSignal;\n\tdispose(): void;\n} {\n\tconst controller = new AbortController();\n\tconst listeners: Array<{ signal: AbortSignal; listener: () => void }> = [];\n\tfor (const signal of new Set(signals.filter((signal): signal is AbortSignal => signal !== undefined))) {\n\t\tconst abort = () => {\n\t\t\tif (!controller.signal.aborted) controller.abort(signal.reason);\n\t\t};\n\t\tif (signal.aborted) {\n\t\t\tabort();\n\t\t\tbreak;\n\t\t}\n\t\tsignal.addEventListener(\"abort\", abort, { once: true });\n\t\tlisteners.push({ signal, listener: abort });\n\t}\n\treturn {\n\t\tsignal: controller.signal,\n\t\tdispose: () => {\n\t\t\tfor (const { signal, listener } of listeners) signal.removeEventListener(\"abort\", listener);\n\t\t},\n\t};\n}\n\nfunction freezeSnapshot(snapshot: AgentInstanceSnapshot): AgentInstanceSnapshot {\n\treturn Object.freeze({ ...snapshot });\n}\n\nfunction validateAgentDefinition<TInput, TResult>(\n\tdefinition: AgentDefinition<TInput, TResult>,\n): AgentDefinition<TInput, TResult> {\n\tif (!definition || typeof definition !== \"object\") {\n\t\tthrow new Error(\"Agent definition is required\");\n\t}\n\tif (typeof definition.id !== \"string\" || !definition.id.trim()) {\n\t\tthrow new Error(\"Agent definition requires a non-empty id\");\n\t}\n\tif (!Number.isSafeInteger(definition.version) || definition.version < 1) {\n\t\tthrow new Error(\"Agent definition version must be a positive safe integer\");\n\t}\n\tif (definition.role !== \"root-agent-controller\" && definition.role !== \"child-agent-controller\") {\n\t\tthrow new Error(\"Agent definition role must be root-agent-controller or child-agent-controller\");\n\t}\n\tif (typeof definition.run !== \"function\") {\n\t\tthrow new Error(\"Agent definition requires a run function\");\n\t}\n\tif (definition.owner !== undefined && (typeof definition.owner !== \"string\" || !definition.owner.trim())) {\n\t\tthrow new Error(\"Agent definition owner must be a non-empty string when provided\");\n\t}\n\treturn definition;\n}\n\nfunction detachedFreeze<T>(value: T, seen = new WeakMap<object, unknown>()): T {\n\tif (value === null || typeof value !== \"object\") return value;\n\tif (value instanceof Uint8Array) return new Uint8Array(value) as T;\n\tconst existing = seen.get(value);\n\tif (existing) return existing as T;\n\tconst result: Record<string, unknown> | unknown[] = Array.isArray(value) ? [] : {};\n\tseen.set(value, result);\n\tfor (const [key, item] of Object.entries(value as Record<string, unknown>)) {\n\t\t(result as Record<string, unknown>)[key] = detachedFreeze(item, seen);\n\t}\n\treturn Object.freeze(result) as T;\n}\n\nfunction disposable(dispose: () => void | Promise<void>): DisposableRegistration {\n\tlet disposed = false;\n\treturn {\n\t\tid: \"agent-host-registration\",\n\t\tkind: \"agent-host\",\n\t\tdispose: () => {\n\t\t\tif (disposed) return;\n\t\t\tdisposed = true;\n\t\t\treturn dispose();\n\t\t},\n\t};\n}\n\nfunction revokedError(instanceId: string): Error {\n\treturn new Error(`Agent host primitives are revoked: ${instanceId}`);\n}\n\ninterface RevocableHost {\n\treadonly value: AgentHostPrimitivesV1;\n\trevoke(): void;\n}\n\nfunction createOperationFacade<TResult>(\n\toperation: OperationRuntime<TResult>,\n\tinstanceId: string,\n\tactive: () => boolean,\n): AgentOperationFacadeV1 {\n\treturn Object.freeze({\n\t\tversion: 1 as const,\n\t\tid: operation.id,\n\t\tsignal: operation.signal,\n\t\tstatus: () => {\n\t\t\tif (!active()) return \"cancelled\" as OperationStatus;\n\t\t\treturn operation.status();\n\t\t},\n\t\tisActive: () => active() && operation.status() === \"running\",\n\t\treportProgress: (progress: OperationProgress) => active() && operation.reportProgress(progress),\n\t\tonCancel: (handler: (reason: unknown) => void | Promise<void>) => {\n\t\t\tif (!active()) throw revokedError(instanceId);\n\t\t\tconst listener = () => {\n\t\t\t\tvoid handler(operation.signal.reason);\n\t\t\t};\n\t\t\toperation.signal.addEventListener(\"abort\", listener, { once: true });\n\t\t\treturn disposable(() => operation.signal.removeEventListener(\"abort\", listener));\n\t\t},\n\t\tcancel: async (reason?: string) => {\n\t\t\tif (!active()) throw revokedError(instanceId);\n\t\t\tawait operation.cancel(reason);\n\t\t},\n\t});\n}\n\nfunction createRevocableHostPrimitives(\n\traw: AgentHostPrimitivesV1,\n\toperation: OperationRuntime<unknown>,\n\tinstance: AgentInstanceSnapshot,\n): RevocableHost {\n\tlet active = true;\n\tconst cleanups: Array<() => void | Promise<void>> = [];\n\tconst track = (registration: DisposableRegistration): DisposableRegistration => {\n\t\tlet released = false;\n\t\tconst dispose = async () => {\n\t\t\tif (released) return;\n\t\t\treleased = true;\n\t\t\tconst index = cleanups.indexOf(cleanup);\n\t\t\tif (index >= 0) cleanups.splice(index, 1);\n\t\t\tawait registration.dispose();\n\t\t};\n\t\tconst cleanup = dispose;\n\t\tcleanups.push(cleanup);\n\t\treturn {\n\t\t\tid: registration.id,\n\t\t\tkind: registration.kind,\n\t\t\tdispose,\n\t\t};\n\t};\n\tconst assertActive = () => {\n\t\tif (!active) throw revokedError(instance.id);\n\t\tif (operation.signal.aborted) throw abortError(operation.signal.reason);\n\t};\n\n\tconst session = raw.session\n\t\t? (Object.freeze({\n\t\t\t\tversion: 1 as const,\n\t\t\t\tgetSessionId: () => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn raw.session!.getSessionId();\n\t\t\t\t},\n\t\t\t\tgetRevision: raw.session.getRevision\n\t\t\t\t\t? () => {\n\t\t\t\t\t\t\tassertActive();\n\t\t\t\t\t\t\treturn detachedFreeze(raw.session!.getRevision!());\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined,\n\t\t\t\tgetMessages: () => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn detachedFreeze(raw.session!.getMessages());\n\t\t\t\t},\n\t\t\t\tgetBranchEntries: () => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn detachedFreeze(raw.session!.getBranchEntries());\n\t\t\t\t},\n\t\t\t\tisIdle: () => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn raw.session!.isIdle();\n\t\t\t\t},\n\t\t\t\twaitForIdle: async () => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\tawait raw.session!.waitForIdle();\n\t\t\t\t\tassertActive();\n\t\t\t\t},\n\t\t\t\tappendEntry: (customType: string, data?: unknown) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn raw.session!.appendEntry(customType, detachedFreeze(data));\n\t\t\t\t},\n\t\t\t}) as AgentSessionFacadeV1)\n\t\t: undefined;\n\n\tconst context = raw.context\n\t\t? (Object.freeze({\n\t\t\t\tversion: 1 as const,\n\t\t\t\tget: <TValue = unknown>() => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn detachedFreeze(raw.context!.get<TValue>());\n\t\t\t\t},\n\t\t\t\tcommit: async <TValue = unknown>(request: AgentContextCommitRequestV1<TValue>) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\tif (request.signal?.aborted) throw abortError(request.signal.reason);\n\t\t\t\t\tconst result = await raw.context!.commit({\n\t\t\t\t\t\t...request,\n\t\t\t\t\t\tvalue: detachedFreeze(request.value),\n\t\t\t\t\t});\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn detachedFreeze(result) as AgentContextCommitResultV1<TValue>;\n\t\t\t\t},\n\t\t\t}) as AgentContextFacadeV1)\n\t\t: undefined;\n\n\t// One guarded StateAPI facade shared by the owner namespace and the\n\t// instance-private namespace: same revocation gating and detached snapshots.\n\tconst guardedStateFacade = (source: StateAPI): StateAPI =>\n\t\tObject.freeze({\n\t\t\tget: (key: string) => {\n\t\t\t\tassertActive();\n\t\t\t\treturn detachedFreeze(source.get(key));\n\t\t\t},\n\t\t\tset: (key: string, value: Parameters<StateAPI[\"set\"]>[1], options?: Parameters<StateAPI[\"set\"]>[2]) => {\n\t\t\t\tassertActive();\n\t\t\t\treturn source.set(key, detachedFreeze(value), options);\n\t\t\t},\n\t\t\tdelete: (key: string, options?: Parameters<StateAPI[\"delete\"]>[1]) => {\n\t\t\t\tassertActive();\n\t\t\t\treturn source.delete(key, options);\n\t\t\t},\n\t\t\tlist: (prefix?: string) => {\n\t\t\t\tassertActive();\n\t\t\t\treturn detachedFreeze(source.list(prefix));\n\t\t\t},\n\t\t\twatch: (prefix: string | undefined, handler: (change: StateChange) => void | Promise<void>) => {\n\t\t\t\tassertActive();\n\t\t\t\treturn track(\n\t\t\t\t\tsource.watch(prefix, (change: StateChange) => {\n\t\t\t\t\t\tif (!active || operation.signal.aborted) return;\n\t\t\t\t\t\tvoid handler(detachedFreeze(change));\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t},\n\t\t}) as StateAPI;\n\n\tconst state = raw.state ? guardedStateFacade(raw.state) : undefined;\n\tconst instanceState = raw.instanceState ? guardedStateFacade(raw.instanceState) : undefined;\n\n\tconst artifact = raw.artifact\n\t\t? (Object.freeze({\n\t\t\t\tput: async (\n\t\t\t\t\tinput: Parameters<OutputArtifactAPI[\"put\"]>[0],\n\t\t\t\t\toptions?: Parameters<OutputArtifactAPI[\"put\"]>[1],\n\t\t\t\t) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\tconst data = input.data instanceof Uint8Array ? new Uint8Array(input.data) : input.data;\n\t\t\t\t\tconst abort = combinedAbortSignal(operation.signal, options?.signal);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst ref = await raw.artifact!.put({ ...input, data }, { ...options, signal: abort.signal });\n\t\t\t\t\t\tassertActive();\n\t\t\t\t\t\treturn detachedFreeze(ref) as OutputArtifactRef;\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tabort.dispose();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tstat: async (ref: OutputArtifactRef) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\tconst result = await raw.artifact!.stat(detachedFreeze(ref));\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn detachedFreeze(result);\n\t\t\t\t},\n\t\t\t\tread: async (ref: OutputArtifactRef, options?: Parameters<OutputArtifactAPI[\"read\"]>[1]) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\tconst chunk = await raw.artifact!.read(detachedFreeze(ref), options);\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn detachedFreeze({\n\t\t\t\t\t\t...chunk,\n\t\t\t\t\t\tdata: new Uint8Array(chunk.data),\n\t\t\t\t\t}) as OutputArtifactChunk;\n\t\t\t\t},\n\t\t\t}) as OutputArtifactAPI)\n\t\t: undefined;\n\n\tconst operationFacade = raw.operation\n\t\t? Object.freeze({\n\t\t\t\tversion: 1 as const,\n\t\t\t\tid: raw.operation.id,\n\t\t\t\tsignal: raw.operation.signal,\n\t\t\t\tstatus: () => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn raw.operation!.status();\n\t\t\t\t},\n\t\t\t\tisActive: () => active && raw.operation!.isActive(),\n\t\t\t\treportProgress: (progress: OperationProgress) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn raw.operation!.reportProgress(progress);\n\t\t\t\t},\n\t\t\t\tonCancel: (handler: (reason: unknown) => void | Promise<void>) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn track(raw.operation!.onCancel(handler));\n\t\t\t\t},\n\t\t\t\tcancel: async (reason?: string) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\tawait raw.operation!.cancel(reason);\n\t\t\t\t},\n\t\t\t})\n\t\t: createOperationFacade(operation, instance.id, () => active);\n\n\tconst value = Object.freeze({\n\t\tversion: 1 as const,\n\t\t...(session ? { session } : {}),\n\t\t...(context ? { context } : {}),\n\t\t...(state ? { state } : {}),\n\t\t...(instanceState ? { instanceState } : {}),\n\t\t...(artifact ? { artifact } : {}),\n\t\t...(operationFacade ? { operation: operationFacade } : {}),\n\t\t...(raw.model\n\t\t\t? {\n\t\t\t\t\tmodel: Object.freeze({\n\t\t\t\t\t\tversion: 1 as const,\n\t\t\t\t\t\tget facts() {\n\t\t\t\t\t\t\tassertActive();\n\t\t\t\t\t\t\treturn raw.model!.facts;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinvocation: {\n\t\t\t\t\t\t\tinvoke: async (input: Parameters<AgentModelInvocationV1[\"invoke\"]>[0], signal: AbortSignal) => {\n\t\t\t\t\t\t\t\tassertActive();\n\t\t\t\t\t\t\t\tconst result = await raw.model!.invocation.invoke(input, signal);\n\t\t\t\t\t\t\t\tassertActive();\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t}) satisfies AgentModelFacadeV1,\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(raw.tool\n\t\t\t? {\n\t\t\t\t\ttool: Object.freeze({\n\t\t\t\t\t\tversion: 1 as const,\n\t\t\t\t\t\tlistTools: () => {\n\t\t\t\t\t\t\tassertActive();\n\t\t\t\t\t\t\treturn raw.tool!.listTools();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinvokeTool: (name: string, input: unknown, invokeOptions?: { readonly signal?: AbortSignal }) => {\n\t\t\t\t\t\t\tassertActive();\n\t\t\t\t\t\t\treturn raw.tool!.invokeTool(name, input, invokeOptions);\n\t\t\t\t\t\t},\n\t\t\t\t\t}) satisfies AgentToolFacadeV1,\n\t\t\t\t}\n\t\t\t: {}),\n\t});\n\treturn {\n\t\tvalue,\n\t\trevoke: () => {\n\t\t\tif (!active) return;\n\t\t\tactive = false;\n\t\t\tfor (const cleanup of [...cleanups]) void cleanup();\n\t\t},\n\t};\n}\n\nclass AgentInstanceRuntime<TInput, TResult> implements AgentInstance<TInput, TResult> {\n\treadonly id: string;\n\treadonly definition: AgentDefinition<TInput, TResult>;\n\n\tprivate statusValue: AgentInstanceStatus = \"created\";\n\tprivate revisionValue = 0;\n\tprivate activeLease?: ControllerLeaseRuntime;\n\tprivate activeOperation?: OperationRuntime<TResult>;\n\tprivate activeExecution?: Promise<void>;\n\tprivate completion: Promise<AgentInstanceResult<TResult>>;\n\tprivate resolveCompletion!: (result: AgentInstanceResult<TResult>) => void;\n\tprivate completionResolved = false;\n\tprivate readonly parentInstanceId: string | undefined;\n\tprivate readonly nextId: (kind: string) => string;\n\tprivate readonly defaultLeaseOwner: string;\n\tprivate readonly hostPrimitivesFactory?: AgentHostPrimitivesFactory;\n\tprivate readonly lifecycleDispatcher?: AgentCompositionLifecycleDispatcher;\n\tprivate readonly clearInstanceState?: (instanceId: string) => void;\n\n\tconstructor(\n\t\tdefinition: AgentDefinition<TInput, TResult>,\n\t\tid: string,\n\t\tparentInstanceId: string | undefined,\n\t\tnextId: (kind: string) => string,\n\t\tdefaultLeaseOwner: string,\n\t\thostPrimitivesFactory: AgentHostPrimitivesFactory | undefined,\n\t\tlifecycleDispatcher: AgentCompositionLifecycleDispatcher | undefined,\n\t\tclearInstanceState: ((instanceId: string) => void) | undefined,\n\t) {\n\t\tthis.id = id;\n\t\tthis.definition = definition;\n\t\tthis.parentInstanceId = parentInstanceId;\n\t\tthis.nextId = nextId;\n\t\tthis.defaultLeaseOwner = defaultLeaseOwner;\n\t\tthis.hostPrimitivesFactory = hostPrimitivesFactory;\n\t\tthis.lifecycleDispatcher = lifecycleDispatcher;\n\t\tthis.clearInstanceState = clearInstanceState;\n\t\tthis.completion = new Promise<AgentInstanceResult<TResult>>((resolve) => {\n\t\t\tthis.resolveCompletion = resolve;\n\t\t});\n\t}\n\n\tsnapshot(): AgentInstanceSnapshot {\n\t\treturn freezeSnapshot({\n\t\t\tid: this.id,\n\t\t\tdefinitionId: this.definition.id,\n\t\t\tdefinitionVersion: this.definition.version,\n\t\t\trole: this.definition.role,\n\t\t\t...(this.parentInstanceId ? { parentInstanceId: this.parentInstanceId } : {}),\n\t\t\tstatus: this.statusValue,\n\t\t\trevision: this.revisionValue,\n\t\t\t...(this.activeLease?.isActive() ? { leaseOwner: this.activeLease.owner } : {}),\n\t\t});\n\t}\n\n\tasync acquireControllerLease(\n\t\towner = this.definition.owner ?? this.defaultLeaseOwner,\n\t): Promise<AgentControllerLease> {\n\t\tthis.assertNotDisposed();\n\t\tif (this.activeLease?.isActive())\n\t\t\tthrow new Error(`Agent instance already has an active controller lease: ${this.id}`);\n\t\tconst lease = new ControllerLeaseRuntime(this, this.nextId(\"agent-lease\"), owner, this.revisionValue + 1);\n\t\tthis.activeLease = lease;\n\t\treturn lease;\n\t}\n\n\trun(input: TInput, options: { lease?: AgentControllerLease; signal?: AbortSignal } = {}): OperationHandle<TResult> {\n\t\tthis.assertNotDisposed();\n\t\tif (this.statusValue !== \"created\")\n\t\t\tthrow new Error(`Agent instance cannot run from status ${this.statusValue}: ${this.id}`);\n\t\tconst lease = this.activeLease;\n\t\tif (!lease?.isActive()) throw new Error(`Agent instance requires an active controller lease: ${this.id}`);\n\t\tif (options.lease !== lease || !this.isLeaseUsable(options.lease)) {\n\t\t\tthrow new Error(`Agent controller lease is not valid for instance: ${this.id}`);\n\t\t}\n\n\t\tthis.statusValue = \"running\";\n\t\tconst controller = new AbortController();\n\t\tconst externalSignal = options.signal;\n\t\tlet externalAbortListener: (() => void) | undefined;\n\t\tif (externalSignal) {\n\t\t\texternalAbortListener = () => {\n\t\t\t\tcontroller.abort(externalSignal.reason);\n\t\t\t\tvoid this.cancel(externalSignal.reason === undefined ? undefined : String(externalSignal.reason));\n\t\t\t};\n\t\t\tif (!externalSignal.aborted) externalSignal.addEventListener(\"abort\", externalAbortListener, { once: true });\n\t\t}\n\n\t\tlet operation!: OperationRuntime<TResult>;\n\t\toperation = new OperationRuntime<TResult>(\n\t\t\tthis.nextId(\"agent-operation\"),\n\t\t\tcontroller,\n\t\t\t() => this.cancel(controller.signal.reason),\n\t\t\t(progress, step) => this.reportLifecycle(\"step\", operation, undefined, progress, step),\n\t\t);\n\t\tthis.activeOperation = operation;\n\t\tif (externalSignal?.aborted) {\n\t\t\tcontroller.abort(externalSignal.reason);\n\t\t} else {\n\t\t\tthis.reportLifecycle(\"start\", operation);\n\t\t}\n\t\tthis.activeExecution = this.execute(input, lease, operation, externalSignal, externalAbortListener);\n\t\tif (externalSignal?.aborted) {\n\t\t\t// Trigger cancellation only after the execution is tracked, so the\n\t\t\t// pre-aborted path drains like every other cancellation path instead\n\t\t\t// of resolving completion ahead of the execution body.\n\t\t\tvoid this.cancel(externalSignal.reason === undefined ? undefined : String(externalSignal.reason));\n\t\t}\n\t\treturn operation;\n\t}\n\n\tasync wait(): Promise<AgentInstanceResult<TResult>> {\n\t\treturn this.completion;\n\t}\n\n\tasync cancel(reason?: string): Promise<void> {\n\t\tif (this.statusValue === \"disposed\" || terminalStatuses.has(this.statusValue)) return;\n\t\tthis.statusValue = \"cancelled\";\n\t\tthis.revisionValue += 1;\n\t\tconst operation = this.activeOperation;\n\t\tif (operation) {\n\t\t\tthis.reportLifecycle(\"cancel\", operation);\n\t\t\tthis.reportLifecycle(\"end\", operation, \"cancelled\");\n\t\t\toperation.cancelFromInstance(reason);\n\t\t}\n\t\t// The run body must eventually observe the abort signal: cancellation only\n\t\t// settles after the execution drained, so wait() and lease disposal never\n\t\t// race side effects still in flight. There is deliberately no timeout. A run\n\t\t// body that awaits this cancel(), dispose(), or its own lease release\n\t\t// self-deadlocks by contract.\n\t\tawait this.drainExecution();\n\t\tthis.resolveCompletionOnce({ status: \"cancelled\", revision: this.revisionValue, error: abortError(reason) });\n\t}\n\n\tasync dispose(): Promise<void> {\n\t\tif (this.statusValue === \"disposed\") return;\n\t\tif (this.statusValue === \"created\") {\n\t\t\tawait this.activeLease?.release();\n\t\t\tthis.statusValue = \"disposed\";\n\t\t\tthis.revisionValue += 1;\n\t\t\tthis.clearInstanceState?.(this.id);\n\t\t\tthis.resolveCompletionOnce({ status: \"disposed\", revision: this.revisionValue });\n\t\t\treturn;\n\t\t}\n\t\tif (!terminalStatuses.has(this.statusValue)) await this.cancel(\"Agent instance disposed\");\n\t\t// A concurrent cancel() may still be draining; release the lease only after\n\t\t// the execution has settled.\n\t\tawait this.drainExecution();\n\t\tawait this.activeLease?.release();\n\t\tthis.statusValue = \"disposed\";\n\t\tthis.revisionValue += 1;\n\t\t// The instance-private state namespace (and its watchers) dies with the\n\t\t// instance, after every drain the run body could still rely on.\n\t\tthis.clearInstanceState?.(this.id);\n\t\tthis.resolveCompletionOnce({ status: \"disposed\", revision: this.revisionValue });\n\t}\n\n\tasync deactivateLease(lease: ControllerLeaseRuntime): Promise<void> {\n\t\tif (this.activeLease !== lease) return;\n\t\tthis.activeLease = undefined;\n\t\tif (this.statusValue === \"running\") {\n\t\t\tawait this.cancel(\"Controller lease released\");\n\t\t\treturn;\n\t\t}\n\t\t// A cancel() from another path may still be draining the execution.\n\t\tawait this.drainExecution();\n\t}\n\n\tisLeaseUsable(lease: AgentControllerLease | undefined): lease is ControllerLeaseRuntime {\n\t\treturn (\n\t\t\tlease instanceof ControllerLeaseRuntime &&\n\t\t\tlease.instanceId === this.id &&\n\t\t\tlease.isActive() &&\n\t\t\tthis.activeLease === lease\n\t\t);\n\t}\n\n\tprivate async execute(\n\t\tinput: TInput,\n\t\tlease: ControllerLeaseRuntime,\n\t\toperation: OperationRuntime<TResult>,\n\t\texternalSignal: AbortSignal | undefined,\n\t\texternalAbortListener: (() => void) | undefined,\n\t): Promise<void> {\n\t\tconst instanceSnapshot = this.snapshot();\n\t\tlet hostScope: RevocableHost | undefined;\n\t\tconst revokeHost = () => hostScope?.revoke();\n\t\toperation.signal.addEventListener(\"abort\", revokeHost, { once: true });\n\t\ttry {\n\t\t\tif (operation.signal.aborted) throw abortError(operation.signal.reason);\n\t\t\tif (this.hostPrimitivesFactory) {\n\t\t\t\tconst raw = await this.hostPrimitivesFactory({\n\t\t\t\t\tinstance: instanceSnapshot,\n\t\t\t\t\toperationId: operation.id,\n\t\t\t\t\tsignal: operation.signal,\n\t\t\t\t\tleaseOwner: lease.owner,\n\t\t\t\t});\n\t\t\t\tif (raw !== undefined) {\n\t\t\t\t\tif (raw.version !== 1) throw new Error(\"Unsupported Agent host primitives version\");\n\t\t\t\t\tif (raw.operation && (raw.operation.id !== operation.id || raw.operation.signal !== operation.signal))\n\t\t\t\t\t\tthrow new Error(`Agent host operation does not match active operation: ${operation.id}`);\n\t\t\t\t\thostScope = createRevocableHostPrimitives(\n\t\t\t\t\t\t{ ...raw, operation: raw.operation ?? createOperationFacade(operation, this.id, () => true) },\n\t\t\t\t\t\toperation as OperationRuntime<unknown>,\n\t\t\t\t\t\tinstanceSnapshot,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (operation.signal.aborted) throw abortError(operation.signal.reason);\n\t\t\tconst context: AgentExecutionContext = Object.freeze({\n\t\t\t\tinstance: instanceSnapshot,\n\t\t\t\tsignal: operation.signal,\n\t\t\t\tinputRevision: this.revisionValue,\n\t\t\t\t...(hostScope ? { host: hostScope.value } : {}),\n\t\t\t});\n\t\t\tconst output = await this.definition.run(input, context);\n\t\t\tif (operation.signal.aborted || !this.isLeaseUsable(lease) || this.statusValue !== \"running\") return;\n\t\t\tthis.statusValue = \"succeeded\";\n\t\t\tthis.revisionValue += 1;\n\t\t\toperation.resolve(output);\n\t\t\tthis.reportLifecycle(\"end\", operation, \"succeeded\");\n\t\t\tthis.resolveCompletionOnce({ status: \"succeeded\", revision: this.revisionValue, output });\n\t\t} catch (error) {\n\t\t\tif (operation.signal.aborted || this.statusValue === \"cancelled\" || this.statusValue === \"disposed\") {\n\t\t\t\t// Instance-level cancellation marks the handle cancelled before this\n\t\t\t\t// catch runs; the pre-aborted run() path gets here first, so settle\n\t\t\t\t// the handle as cancelled instead of failed.\n\t\t\t\toperation.cancelFromInstance(operation.signal.reason);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.statusValue = \"failed\";\n\t\t\tthis.revisionValue += 1;\n\t\t\toperation.reject(error);\n\t\t\tthis.reportLifecycle(\"end\", operation, \"failed\");\n\t\t\tthis.resolveCompletionOnce({ status: \"failed\", revision: this.revisionValue, error });\n\t\t} finally {\n\t\t\thostScope?.revoke();\n\t\t\toperation.signal.removeEventListener(\"abort\", revokeHost);\n\t\t\tif (externalSignal && externalAbortListener)\n\t\t\t\texternalSignal.removeEventListener(\"abort\", externalAbortListener);\n\t\t\tif (this.activeOperation === operation) this.activeOperation = undefined;\n\t\t\t// run() requires status \"created\", so at most one execution ever exists\n\t\t\t// per instance and clearing the field unconditionally is safe.\n\t\t\tthis.activeExecution = undefined;\n\t\t}\n\t}\n\n\tprivate async drainExecution(): Promise<void> {\n\t\t// Capture the reference before awaiting: execute()'s finally clears the\n\t\t// field while drainers still need the promise.\n\t\tconst execution = this.activeExecution;\n\t\tif (!execution) return;\n\t\tawait execution;\n\t}\n\n\tprivate assertNotDisposed(): void {\n\t\tif (this.statusValue === \"disposed\") throw new Error(`Agent instance is disposed: ${this.id}`);\n\t}\n\n\tprivate resolveCompletionOnce(result: AgentInstanceResult<TResult>): void {\n\t\tif (this.completionResolved) return;\n\t\tthis.completionResolved = true;\n\t\tthis.resolveCompletion(result);\n\t}\n\n\tprivate reportLifecycle(\n\t\tevent: AgentCompositionLifecycleEventName,\n\t\toperation: OperationRuntime<TResult>,\n\t\tstatus?: AgentCompositionLifecycleTerminalStatus,\n\t\tprogress?: OperationProgress,\n\t\tstep?: number,\n\t): void {\n\t\tif (!this.lifecycleDispatcher) return;\n\t\ttry {\n\t\t\tthis.lifecycleDispatcher({\n\t\t\t\tevent,\n\t\t\t\toperationId: operation.id,\n\t\t\t\toperationKind: `agent:${this.definition.id}@${this.definition.version}`,\n\t\t\t\t...(this.definition.owner === undefined ? {} : { owner: this.definition.owner }),\n\t\t\t\t...(status === undefined ? {} : { status }),\n\t\t\t\t...(progress === undefined ? {} : { progress }),\n\t\t\t\t...(step === undefined ? {} : { step }),\n\t\t\t});\n\t\t} catch {\n\t\t\t// Lifecycle delivery is observational and must not affect the operation.\n\t\t}\n\t}\n}\n\ninterface LeaseOwner {\n\tid: string;\n\tdeactivateLease(lease: ControllerLeaseRuntime): Promise<void>;\n}\n\nclass ControllerLeaseRuntime implements AgentControllerLease {\n\tprivate active = true;\n\tprivate readonly instance: LeaseOwner;\n\treadonly id: string;\n\treadonly owner: string;\n\treadonly revision: number;\n\n\tconstructor(instance: LeaseOwner, id: string, owner: string, revision: number) {\n\t\tthis.instance = instance;\n\t\tthis.id = id;\n\t\tthis.owner = owner;\n\t\tthis.revision = revision;\n\t}\n\n\tget instanceId(): string {\n\t\treturn this.instance.id;\n\t}\n\n\tisActive(): boolean {\n\t\treturn this.active;\n\t}\n\n\tasync release(): Promise<void> {\n\t\tif (!this.active) return;\n\t\tthis.active = false;\n\t\tawait this.instance.deactivateLease(this);\n\t}\n}\n\nclass OperationRuntime<TResult> implements OperationHandle<TResult> {\n\tprivate statusValue: OperationStatus = \"queued\";\n\tprivate resolveResult!: (result: TResult) => void;\n\tprivate rejectResult!: (error: unknown) => void;\n\treadonly result: Promise<TResult>;\n\treadonly id: string;\n\tprivate readonly controller: AbortController;\n\tprivate readonly cancelCallback: () => Promise<void>;\n\tprivate readonly reportProgressCallback: (progress: OperationProgress, step: number) => void;\n\tprivate progressSequence = 0;\n\n\tconstructor(\n\t\tid: string,\n\t\tcontroller: AbortController,\n\t\tcancelCallback: () => Promise<void>,\n\t\treportProgress: (progress: OperationProgress, step: number) => void,\n\t) {\n\t\tthis.id = id;\n\t\tthis.controller = controller;\n\t\tthis.cancelCallback = cancelCallback;\n\t\tthis.reportProgressCallback = reportProgress;\n\t\tthis.signal = controller.signal;\n\t\tthis.result = new Promise<TResult>((resolve, reject) => {\n\t\t\tthis.resolveResult = resolve;\n\t\t\tthis.rejectResult = reject;\n\t\t});\n\t\tthis.statusValue = \"running\";\n\t}\n\n\treadonly signal: AbortSignal;\n\n\tstatus(): OperationStatus {\n\t\treturn this.statusValue;\n\t}\n\n\treportProgress(progress: OperationProgress): boolean {\n\t\tif (this.statusValue !== \"running\" || this.signal.aborted) return false;\n\t\tthis.reportProgressCallback(progress, ++this.progressSequence);\n\t\treturn true;\n\t}\n\n\tasync cancel(reason?: string): Promise<void> {\n\t\tif (this.statusValue === \"succeeded\" || this.statusValue === \"failed\" || this.statusValue === \"cancelled\") return;\n\t\tthis.controller.abort(reason);\n\t\t// The handle must settle cancellation without waiting for an uncooperative\n\t\t// run body. AgentInstanceRuntime.cancel() still drains the body when the\n\t\t// caller explicitly cancels/releases the instance, but OperationHandle is\n\t\t// the non-blocking public fence used by callers that cannot coordinate the\n\t\t// plugin's private awaits. The callback synchronously marks the operation\n\t\t// cancelled before its first await; any later drain is best-effort here.\n\t\ttry {\n\t\t\tvoid this.cancelCallback().catch(() => undefined);\n\t\t} catch {\n\t\t\t// A cancellation request is already reflected by this operation's\n\t\t\t// aborted signal and terminal status; callback failures must not turn\n\t\t\t// cancel() into an unbounded or rejected wait.\n\t\t}\n\t}\n\n\tcancelFromInstance(reason?: string): void {\n\t\tif (this.statusValue === \"succeeded\" || this.statusValue === \"failed\" || this.statusValue === \"cancelled\") return;\n\t\tthis.statusValue = \"cancelled\";\n\t\tthis.controller.abort(reason);\n\t\tthis.rejectResult(abortError(reason));\n\t}\n\n\tresolve(value: TResult): void {\n\t\tif (this.statusValue === \"cancelled\" || this.statusValue === \"failed\") return;\n\t\tthis.statusValue = \"succeeded\";\n\t\tthis.resolveResult(value);\n\t}\n\n\treject(error: unknown): void {\n\t\tif (this.statusValue === \"cancelled\") return;\n\t\tthis.statusValue = \"failed\";\n\t\tthis.rejectResult(error);\n\t}\n}\n\nexport class AgentCompositionRuntime\n\timplements\n\t\tAgentCompositionAPI,\n\t\tAgentCompositionHostBinding,\n\t\tAgentCompositionDefinitionBinding,\n\t\tAgentCompositionScopedHostBinding,\n\t\tAgentCompositionInstanceStateBinding\n{\n\tprivate readonly definitions = new Map<string, AgentDefinition<unknown, unknown>>();\n\tprivate readonly instances = new Map<string, AgentInstanceRuntime<unknown, unknown>>();\n\tprivate readonly instanceStateClearers = new Set<(instanceId: string) => void>();\n\tprivate sequence = 0;\n\tprivate readonly nextId: (kind: string) => string;\n\tprivate readonly defaultLeaseOwner?: string;\n\tprivate hostPrimitivesFactory?: AgentHostPrimitivesFactory;\n\tprivate lifecycleDispatcher?: AgentCompositionLifecycleDispatcher;\n\n\tconstructor(options: AgentCompositionRuntimeOptions = {}) {\n\t\tthis.defaultLeaseOwner = options.defaultLeaseOwner;\n\t\tthis.hostPrimitivesFactory = options.hostPrimitivesFactory;\n\t\tthis.nextId = options.idFactory ?? ((kind: string) => `${kind}-${++this.sequence}`);\n\t}\n\n\tsetHostPrimitivesFactory(factory?: AgentHostPrimitivesFactory): void {\n\t\tthis.hostPrimitivesFactory = factory;\n\t}\n\n\tsetLifecycleDispatcher(dispatcher?: AgentCompositionLifecycleDispatcher): void {\n\t\tthis.lifecycleDispatcher = dispatcher;\n\t}\n\n\taddInstanceStateClearer(clearer: (instanceId: string) => void): () => void {\n\t\tthis.instanceStateClearers.add(clearer);\n\t\treturn () => {\n\t\t\tthis.instanceStateClearers.delete(clearer);\n\t\t};\n\t}\n\n\tdisposeDefinitions(definitions: readonly AgentDefinition[]): void {\n\t\tconst owned = new Set(definitions);\n\t\tfor (const [key, definition] of this.definitions) {\n\t\t\tif (owned.has(definition)) this.definitions.delete(key);\n\t\t}\n\t\tfor (const [id, instance] of this.instances) {\n\t\t\tif (!owned.has(instance.definition)) continue;\n\t\t\tthis.instances.delete(id);\n\t\t\tvoid instance.dispose();\n\t\t}\n\t}\n\n\tdefine<TInput = unknown, TResult = unknown>(\n\t\tdefinition: AgentDefinition<TInput, TResult>,\n\t): AgentDefinition<TInput, TResult> {\n\t\tvalidateAgentDefinition(definition);\n\t\tif (this.definitions.has(this.definitionKey(definition.id, definition.version))) {\n\t\t\tthrow new Error(`Agent definition already registered: ${definition.id}@${definition.version}`);\n\t\t}\n\t\tconst frozen = Object.freeze({ ...definition });\n\t\tthis.definitions.set(\n\t\t\tthis.definitionKey(definition.id, definition.version),\n\t\t\tfrozen as AgentDefinition<unknown, unknown>,\n\t\t);\n\t\treturn frozen;\n\t}\n\n\tget<TInput = unknown, TResult = unknown>(id: string, version: number): AgentDefinition<TInput, TResult> {\n\t\tconst definition = this.definitions.get(this.definitionKey(id, version));\n\t\tif (!definition) throw new Error(`Unknown Agent definition: ${id}@${version}`);\n\t\treturn definition as AgentDefinition<TInput, TResult>;\n\t}\n\n\tcreate<TInput = unknown, TResult = unknown>(\n\t\tdefinition: AgentDefinition<TInput, TResult> | DefinitionRef,\n\t\toptions: { id?: string; parentInstanceId?: string } = {},\n\t): AgentInstance<TInput, TResult> {\n\t\treturn this.createInternal(definition, options, this.hostPrimitivesFactory);\n\t}\n\n\tcreateWithHostPrimitives<TInput = unknown, TResult = unknown>(\n\t\tdefinition: AgentDefinition<TInput, TResult> | DefinitionRef,\n\t\toptions: { id?: string; parentInstanceId?: string } | undefined,\n\t\thostPrimitivesFactory: AgentHostPrimitivesFactory,\n\t\tlifecycleDispatcher?: AgentCompositionLifecycleDispatcher,\n\t): AgentInstance<TInput, TResult> {\n\t\t// A CapabilityRuntime supplies a complete, session-bound factory for this\n\t\t// plugin invocation. Do not merge the runtime-wide factory here: one\n\t\t// composition runtime may be shared by more than one AgentSession.\n\t\treturn this.createInternal(\n\t\t\tdefinition,\n\t\t\toptions ?? {},\n\t\t\thostPrimitivesFactory,\n\t\t\tlifecycleDispatcher ?? this.lifecycleDispatcher,\n\t\t);\n\t}\n\n\tprivate createInternal<TInput = unknown, TResult = unknown>(\n\t\tdefinition: AgentDefinition<TInput, TResult> | DefinitionRef,\n\t\toptions: { id?: string; parentInstanceId?: string },\n\t\thostPrimitivesFactory: AgentHostPrimitivesFactory | undefined,\n\t\tlifecycleDispatcher: AgentCompositionLifecycleDispatcher | undefined = this.lifecycleDispatcher,\n\t): AgentInstance<TInput, TResult> {\n\t\tif (!definition || typeof definition !== \"object\") throw new Error(\"Agent definition or reference is required\");\n\t\tconst resolved =\n\t\t\t\"run\" in definition\n\t\t\t\t? validateAgentDefinition(definition as AgentDefinition<TInput, TResult>)\n\t\t\t\t: this.get<TInput, TResult>(definition.id, definition.version);\n\t\tif (options.parentInstanceId !== undefined && !this.instances.has(options.parentInstanceId)) {\n\t\t\tthrow new Error(`Unknown parent Agent instance: ${options.parentInstanceId}`);\n\t\t}\n\t\tif (this.instances.has(options.id ?? \"\")) throw new Error(`Agent instance id already exists: ${options.id}`);\n\t\tconst id = options.id ?? this.nextId(\"agent-instance\");\n\t\tif (this.instances.has(id)) throw new Error(`Agent instance id already exists: ${id}`);\n\t\tconst instance = new AgentInstanceRuntime(\n\t\t\tresolved,\n\t\t\tid,\n\t\t\toptions.parentInstanceId,\n\t\t\tthis.nextId,\n\t\t\tthis.defaultLeaseOwner ?? resolved.owner ?? \"agent-composition\",\n\t\t\thostPrimitivesFactory,\n\t\t\tlifecycleDispatcher,\n\t\t\t(instanceId: string) => {\n\t\t\t\tfor (const clearer of this.instanceStateClearers) clearer(instanceId);\n\t\t\t},\n\t\t);\n\t\tthis.instances.set(id, instance as AgentInstanceRuntime<unknown, unknown>);\n\t\treturn instance;\n\t}\n\n\tlistInstances(): readonly AgentInstanceSnapshot[] {\n\t\treturn Object.freeze([...this.instances.values()].map((instance) => instance.snapshot()));\n\t}\n\n\tprivate definitionKey(id: string, version: number): string {\n\t\treturn `${id}@${version}`;\n\t}\n}\n\nexport function createAgentCompositionRuntime(options: AgentCompositionRuntimeOptions = {}): AgentCompositionRuntime {\n\treturn new AgentCompositionRuntime(options);\n}\n"]}
1
+ {"version":3,"file":"agent-composition.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/agent-composition.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,mBAAmB,EACnB,iCAAiC,EACjC,2BAA2B,EAC3B,iCAAiC,EAKjC,eAAe,EAEf,0BAA0B,EAE1B,aAAa,EAEb,qBAAqB,EASrB,iBAAiB,EAOjB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,8BAA8B;IAC9C,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACrC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qBAAqB,CAAC,EAAE,0BAA0B,CAAC;CACnD;AAED,MAAM,MAAM,kCAAkC,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AACrF,MAAM,MAAM,uCAAuC,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE3F,MAAM,WAAW,8BAA8B;IAC9C,QAAQ,CAAC,KAAK,EAAE,kCAAkC,CAAC;IACnD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,uCAAuC,CAAC;IAC1D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CACtC;AAED,MAAM,MAAM,mCAAmC,GAAG,CAAC,KAAK,EAAE,8BAA8B,KAAK,IAAI,CAAC;AAElG,qFAAqF;AACrF,MAAM,WAAW,gCAAgC;IAChD,sBAAsB,CAAC,UAAU,CAAC,EAAE,mCAAmC,GAAG,IAAI,CAAC;CAC/E;AAED;;;;;GAKG;AACH,MAAM,WAAW,oCAAoC;IACpD,kHAAkH;IAClH,uBAAuB,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAC3E;AAED,KAAK,aAAa,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAowBrD,qBAAa,uBACZ,YACC,mBAAmB,EACnB,2BAA2B,EAC3B,iCAAiC,EACjC,iCAAiC,EACjC,oCAAoC;IAErC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwD;IACpF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6D;IACvF,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA2C;IACjF,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;IAClD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAS;IAC5C,OAAO,CAAC,qBAAqB,CAAC,CAA6B;IAC3D,OAAO,CAAC,mBAAmB,CAAC,CAAsC;IAElE,YAAY,OAAO,GAAE,8BAAmC,EAIvD;IAED,wBAAwB,CAAC,OAAO,CAAC,EAAE,0BAA0B,GAAG,IAAI,CAEnE;IAED,sBAAsB,CAAC,UAAU,CAAC,EAAE,mCAAmC,GAAG,IAAI,CAE7E;IAED,uBAAuB,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI,CAKzE;IAED,kBAAkB,CAAC,WAAW,EAAE,SAAS,eAAe,EAAE,GAAG,IAAI,CAUhE;IAED,MAAM,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EACzC,UAAU,EAAE,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,GAC1C,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAgBlC;IAED,GAAG,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAItG;IAED,MAAM,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EACzC,UAAU,EAAE,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,EAC5D,OAAO,GAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAO,GACtD,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAEhC;IAED,wBAAwB,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EAC3D,UAAU,EAAE,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,EAC5D,OAAO,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,EAC/D,qBAAqB,EAAE,0BAA0B,EACjD,mBAAmB,CAAC,EAAE,mCAAmC,GACvD,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAUhC;IAED,OAAO,CAAC,cAAc;IAqCtB,aAAa,IAAI,SAAS,qBAAqB,EAAE,CAEhD;IAED,OAAO,CAAC,aAAa;CAGrB;AAED,wBAAgB,6BAA6B,CAAC,OAAO,GAAE,8BAAmC,GAAG,uBAAuB,CAEnH","sourcesContent":["import { t } from \"../i18n/index.ts\";\nimport type {\n\tAgentCompositionAPI,\n\tAgentCompositionDefinitionBinding,\n\tAgentCompositionHostBinding,\n\tAgentCompositionScopedHostBinding,\n\tAgentContextCommitRequestV1,\n\tAgentContextCommitResultV1,\n\tAgentContextFacadeV1,\n\tAgentControllerLease,\n\tAgentDefinition,\n\tAgentExecutionContext,\n\tAgentHostPrimitivesFactory,\n\tAgentHostPrimitivesV1,\n\tAgentInstance,\n\tAgentInstanceResult,\n\tAgentInstanceSnapshot,\n\tAgentInstanceStatus,\n\tAgentModelFacadeV1,\n\tAgentModelInvocationV1,\n\tAgentOperationFacadeV1,\n\tAgentSessionFacadeV1,\n\tAgentToolFacadeV1,\n\tDisposableRegistration,\n\tOperationHandle,\n\tOperationProgress,\n\tOperationStatus,\n\tOutputArtifactAPI,\n\tOutputArtifactChunk,\n\tOutputArtifactRef,\n\tStateAPI,\n\tStateChange,\n} from \"./public-api.ts\";\n\nexport interface AgentCompositionRuntimeOptions {\n\tidFactory?: (kind: string) => string;\n\tdefaultLeaseOwner?: string;\n\thostPrimitivesFactory?: AgentHostPrimitivesFactory;\n}\n\nexport type AgentCompositionLifecycleEventName = \"start\" | \"step\" | \"cancel\" | \"end\";\nexport type AgentCompositionLifecycleTerminalStatus = \"succeeded\" | \"failed\" | \"cancelled\";\n\nexport interface AgentCompositionLifecycleEvent {\n\treadonly event: AgentCompositionLifecycleEventName;\n\treadonly operationId: string;\n\treadonly operationKind: string;\n\treadonly owner?: string;\n\treadonly status?: AgentCompositionLifecycleTerminalStatus;\n\treadonly step?: number;\n\treadonly progress?: OperationProgress;\n}\n\nexport type AgentCompositionLifecycleDispatcher = (event: AgentCompositionLifecycleEvent) => void;\n\n/** Host-only binding used by CapabilityRuntime to observe composition operations. */\nexport interface AgentCompositionLifecycleBinding {\n\tsetLifecycleDispatcher(dispatcher?: AgentCompositionLifecycleDispatcher): void;\n}\n\n/**\n * Host-only binding used by CapabilityRuntime to clear instance-scoped state\n * when an instance is disposed. Instance ids are unique per composition\n * runtime, so every registered clearer is invoked on each disposal and\n * resolves by id whether the disposed instance belongs to it.\n */\nexport interface AgentCompositionInstanceStateBinding {\n\t/** Registers a clearer invoked after a disposed instance's execution drained. Returns an unsubscribe function. */\n\taddInstanceStateClearer(clearer: (instanceId: string) => void): () => void;\n}\n\ntype DefinitionRef = { id: string; version: number };\n\nconst terminalStatuses = new Set<AgentInstanceStatus>([\"succeeded\", \"failed\", \"cancelled\", \"disposed\"]);\n\nfunction abortError(reason?: unknown): Error {\n\tif (reason instanceof Error) return reason;\n\tconst error = new Error(reason === undefined ? \"Agent operation cancelled\" : String(reason));\n\terror.name = \"AbortError\";\n\treturn error;\n}\n\nfunction combinedAbortSignal(...signals: readonly (AbortSignal | undefined)[]): {\n\tsignal: AbortSignal;\n\tdispose(): void;\n} {\n\tconst controller = new AbortController();\n\tconst listeners: Array<{ signal: AbortSignal; listener: () => void }> = [];\n\tfor (const signal of new Set(signals.filter((signal): signal is AbortSignal => signal !== undefined))) {\n\t\tconst abort = () => {\n\t\t\tif (!controller.signal.aborted) controller.abort(signal.reason);\n\t\t};\n\t\tif (signal.aborted) {\n\t\t\tabort();\n\t\t\tbreak;\n\t\t}\n\t\tsignal.addEventListener(\"abort\", abort, { once: true });\n\t\tlisteners.push({ signal, listener: abort });\n\t}\n\treturn {\n\t\tsignal: controller.signal,\n\t\tdispose: () => {\n\t\t\tfor (const { signal, listener } of listeners) signal.removeEventListener(\"abort\", listener);\n\t\t},\n\t};\n}\n\nfunction freezeSnapshot(snapshot: AgentInstanceSnapshot): AgentInstanceSnapshot {\n\treturn Object.freeze({ ...snapshot });\n}\n\nfunction validateAgentDefinition<TInput, TResult>(\n\tdefinition: AgentDefinition<TInput, TResult>,\n): AgentDefinition<TInput, TResult> {\n\tif (!definition || typeof definition !== \"object\") {\n\t\tthrow new Error(t(\"Agent definition is required\"));\n\t}\n\tif (typeof definition.id !== \"string\" || !definition.id.trim()) {\n\t\tthrow new Error(t(\"Agent definition requires a non-empty id\"));\n\t}\n\tif (!Number.isSafeInteger(definition.version) || definition.version < 1) {\n\t\tthrow new Error(t(\"Agent definition version must be a positive safe integer\"));\n\t}\n\tif (definition.role !== \"root-agent-controller\" && definition.role !== \"child-agent-controller\") {\n\t\tthrow new Error(t(\"Agent definition role must be root-agent-controller or child-agent-controller\"));\n\t}\n\tif (typeof definition.run !== \"function\") {\n\t\tthrow new Error(t(\"Agent definition requires a run function\"));\n\t}\n\tif (definition.owner !== undefined && (typeof definition.owner !== \"string\" || !definition.owner.trim())) {\n\t\tthrow new Error(t(\"Agent definition owner must be a non-empty string when provided\"));\n\t}\n\treturn definition;\n}\n\nfunction detachedFreeze<T>(value: T, seen = new WeakMap<object, unknown>()): T {\n\tif (value === null || typeof value !== \"object\") return value;\n\tif (value instanceof Uint8Array) return new Uint8Array(value) as T;\n\tconst existing = seen.get(value);\n\tif (existing) return existing as T;\n\tconst result: Record<string, unknown> | unknown[] = Array.isArray(value) ? [] : {};\n\tseen.set(value, result);\n\tfor (const [key, item] of Object.entries(value as Record<string, unknown>)) {\n\t\t(result as Record<string, unknown>)[key] = detachedFreeze(item, seen);\n\t}\n\treturn Object.freeze(result) as T;\n}\n\nfunction disposable(dispose: () => void | Promise<void>): DisposableRegistration {\n\tlet disposed = false;\n\treturn {\n\t\tid: \"agent-host-registration\",\n\t\tkind: \"agent-host\",\n\t\tdispose: () => {\n\t\t\tif (disposed) return;\n\t\t\tdisposed = true;\n\t\t\treturn dispose();\n\t\t},\n\t};\n}\n\nfunction revokedError(instanceId: string): Error {\n\treturn new Error(`Agent host primitives are revoked: ${instanceId}`);\n}\n\ninterface RevocableHost {\n\treadonly value: AgentHostPrimitivesV1;\n\trevoke(): void;\n}\n\nfunction createOperationFacade<TResult>(\n\toperation: OperationRuntime<TResult>,\n\tinstanceId: string,\n\tactive: () => boolean,\n): AgentOperationFacadeV1 {\n\treturn Object.freeze({\n\t\tversion: 1 as const,\n\t\tid: operation.id,\n\t\tsignal: operation.signal,\n\t\tstatus: () => {\n\t\t\tif (!active()) return \"cancelled\" as OperationStatus;\n\t\t\treturn operation.status();\n\t\t},\n\t\tisActive: () => active() && operation.status() === \"running\",\n\t\treportProgress: (progress: OperationProgress) => active() && operation.reportProgress(progress),\n\t\tonCancel: (handler: (reason: unknown) => void | Promise<void>) => {\n\t\t\tif (!active()) throw revokedError(instanceId);\n\t\t\tconst listener = () => {\n\t\t\t\tvoid handler(operation.signal.reason);\n\t\t\t};\n\t\t\toperation.signal.addEventListener(\"abort\", listener, { once: true });\n\t\t\treturn disposable(() => operation.signal.removeEventListener(\"abort\", listener));\n\t\t},\n\t\tcancel: async (reason?: string) => {\n\t\t\tif (!active()) throw revokedError(instanceId);\n\t\t\tawait operation.cancel(reason);\n\t\t},\n\t});\n}\n\nfunction createRevocableHostPrimitives(\n\traw: AgentHostPrimitivesV1,\n\toperation: OperationRuntime<unknown>,\n\tinstance: AgentInstanceSnapshot,\n): RevocableHost {\n\tlet active = true;\n\tconst cleanups: Array<() => void | Promise<void>> = [];\n\tconst track = (registration: DisposableRegistration): DisposableRegistration => {\n\t\tlet released = false;\n\t\tconst dispose = async () => {\n\t\t\tif (released) return;\n\t\t\treleased = true;\n\t\t\tconst index = cleanups.indexOf(cleanup);\n\t\t\tif (index >= 0) cleanups.splice(index, 1);\n\t\t\tawait registration.dispose();\n\t\t};\n\t\tconst cleanup = dispose;\n\t\tcleanups.push(cleanup);\n\t\treturn {\n\t\t\tid: registration.id,\n\t\t\tkind: registration.kind,\n\t\t\tdispose,\n\t\t};\n\t};\n\tconst assertActive = () => {\n\t\tif (!active) throw revokedError(instance.id);\n\t\tif (operation.signal.aborted) throw abortError(operation.signal.reason);\n\t};\n\n\tconst session = raw.session\n\t\t? (Object.freeze({\n\t\t\t\tversion: 1 as const,\n\t\t\t\tgetSessionId: () => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn raw.session!.getSessionId();\n\t\t\t\t},\n\t\t\t\tgetRevision: raw.session.getRevision\n\t\t\t\t\t? () => {\n\t\t\t\t\t\t\tassertActive();\n\t\t\t\t\t\t\treturn detachedFreeze(raw.session!.getRevision!());\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined,\n\t\t\t\tgetMessages: () => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn detachedFreeze(raw.session!.getMessages());\n\t\t\t\t},\n\t\t\t\tgetBranchEntries: () => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn detachedFreeze(raw.session!.getBranchEntries());\n\t\t\t\t},\n\t\t\t\tisIdle: () => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn raw.session!.isIdle();\n\t\t\t\t},\n\t\t\t\twaitForIdle: async () => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\tawait raw.session!.waitForIdle();\n\t\t\t\t\tassertActive();\n\t\t\t\t},\n\t\t\t\tappendEntry: (customType: string, data?: unknown) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn raw.session!.appendEntry(customType, detachedFreeze(data));\n\t\t\t\t},\n\t\t\t}) as AgentSessionFacadeV1)\n\t\t: undefined;\n\n\tconst context = raw.context\n\t\t? (Object.freeze({\n\t\t\t\tversion: 1 as const,\n\t\t\t\tget: <TValue = unknown>() => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn detachedFreeze(raw.context!.get<TValue>());\n\t\t\t\t},\n\t\t\t\tcommit: async <TValue = unknown>(request: AgentContextCommitRequestV1<TValue>) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\tif (request.signal?.aborted) throw abortError(request.signal.reason);\n\t\t\t\t\tconst result = await raw.context!.commit({\n\t\t\t\t\t\t...request,\n\t\t\t\t\t\tvalue: detachedFreeze(request.value),\n\t\t\t\t\t});\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn detachedFreeze(result) as AgentContextCommitResultV1<TValue>;\n\t\t\t\t},\n\t\t\t}) as AgentContextFacadeV1)\n\t\t: undefined;\n\n\t// One guarded StateAPI facade shared by the owner namespace and the\n\t// instance-private namespace: same revocation gating and detached snapshots.\n\tconst guardedStateFacade = (source: StateAPI): StateAPI =>\n\t\tObject.freeze({\n\t\t\tget: (key: string) => {\n\t\t\t\tassertActive();\n\t\t\t\treturn detachedFreeze(source.get(key));\n\t\t\t},\n\t\t\tset: (key: string, value: Parameters<StateAPI[\"set\"]>[1], options?: Parameters<StateAPI[\"set\"]>[2]) => {\n\t\t\t\tassertActive();\n\t\t\t\treturn source.set(key, detachedFreeze(value), options);\n\t\t\t},\n\t\t\tdelete: (key: string, options?: Parameters<StateAPI[\"delete\"]>[1]) => {\n\t\t\t\tassertActive();\n\t\t\t\treturn source.delete(key, options);\n\t\t\t},\n\t\t\tlist: (prefix?: string) => {\n\t\t\t\tassertActive();\n\t\t\t\treturn detachedFreeze(source.list(prefix));\n\t\t\t},\n\t\t\twatch: (prefix: string | undefined, handler: (change: StateChange) => void | Promise<void>) => {\n\t\t\t\tassertActive();\n\t\t\t\treturn track(\n\t\t\t\t\tsource.watch(prefix, (change: StateChange) => {\n\t\t\t\t\t\tif (!active || operation.signal.aborted) return;\n\t\t\t\t\t\tvoid handler(detachedFreeze(change));\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t},\n\t\t}) as StateAPI;\n\n\tconst state = raw.state ? guardedStateFacade(raw.state) : undefined;\n\tconst instanceState = raw.instanceState ? guardedStateFacade(raw.instanceState) : undefined;\n\n\tconst artifact = raw.artifact\n\t\t? (Object.freeze({\n\t\t\t\tput: async (\n\t\t\t\t\tinput: Parameters<OutputArtifactAPI[\"put\"]>[0],\n\t\t\t\t\toptions?: Parameters<OutputArtifactAPI[\"put\"]>[1],\n\t\t\t\t) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\tconst data = input.data instanceof Uint8Array ? new Uint8Array(input.data) : input.data;\n\t\t\t\t\tconst abort = combinedAbortSignal(operation.signal, options?.signal);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst ref = await raw.artifact!.put({ ...input, data }, { ...options, signal: abort.signal });\n\t\t\t\t\t\tassertActive();\n\t\t\t\t\t\treturn detachedFreeze(ref) as OutputArtifactRef;\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tabort.dispose();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tstat: async (ref: OutputArtifactRef) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\tconst result = await raw.artifact!.stat(detachedFreeze(ref));\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn detachedFreeze(result);\n\t\t\t\t},\n\t\t\t\tread: async (ref: OutputArtifactRef, options?: Parameters<OutputArtifactAPI[\"read\"]>[1]) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\tconst chunk = await raw.artifact!.read(detachedFreeze(ref), options);\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn detachedFreeze({\n\t\t\t\t\t\t...chunk,\n\t\t\t\t\t\tdata: new Uint8Array(chunk.data),\n\t\t\t\t\t}) as OutputArtifactChunk;\n\t\t\t\t},\n\t\t\t}) as OutputArtifactAPI)\n\t\t: undefined;\n\n\tconst operationFacade = raw.operation\n\t\t? Object.freeze({\n\t\t\t\tversion: 1 as const,\n\t\t\t\tid: raw.operation.id,\n\t\t\t\tsignal: raw.operation.signal,\n\t\t\t\tstatus: () => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn raw.operation!.status();\n\t\t\t\t},\n\t\t\t\tisActive: () => active && raw.operation!.isActive(),\n\t\t\t\treportProgress: (progress: OperationProgress) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn raw.operation!.reportProgress(progress);\n\t\t\t\t},\n\t\t\t\tonCancel: (handler: (reason: unknown) => void | Promise<void>) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn track(raw.operation!.onCancel(handler));\n\t\t\t\t},\n\t\t\t\tcancel: async (reason?: string) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\tawait raw.operation!.cancel(reason);\n\t\t\t\t},\n\t\t\t})\n\t\t: createOperationFacade(operation, instance.id, () => active);\n\n\tconst value = Object.freeze({\n\t\tversion: 1 as const,\n\t\t...(session ? { session } : {}),\n\t\t...(context ? { context } : {}),\n\t\t...(state ? { state } : {}),\n\t\t...(instanceState ? { instanceState } : {}),\n\t\t...(artifact ? { artifact } : {}),\n\t\t...(operationFacade ? { operation: operationFacade } : {}),\n\t\t...(raw.model\n\t\t\t? {\n\t\t\t\t\tmodel: Object.freeze({\n\t\t\t\t\t\tversion: 1 as const,\n\t\t\t\t\t\tget facts() {\n\t\t\t\t\t\t\tassertActive();\n\t\t\t\t\t\t\treturn raw.model!.facts;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinvocation: {\n\t\t\t\t\t\t\tinvoke: async (input: Parameters<AgentModelInvocationV1[\"invoke\"]>[0], signal: AbortSignal) => {\n\t\t\t\t\t\t\t\tassertActive();\n\t\t\t\t\t\t\t\tconst result = await raw.model!.invocation.invoke(input, signal);\n\t\t\t\t\t\t\t\tassertActive();\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t}) satisfies AgentModelFacadeV1,\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(raw.tool\n\t\t\t? {\n\t\t\t\t\ttool: Object.freeze({\n\t\t\t\t\t\tversion: 1 as const,\n\t\t\t\t\t\tlistTools: () => {\n\t\t\t\t\t\t\tassertActive();\n\t\t\t\t\t\t\treturn raw.tool!.listTools();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinvokeTool: (name: string, input: unknown, invokeOptions?: { readonly signal?: AbortSignal }) => {\n\t\t\t\t\t\t\tassertActive();\n\t\t\t\t\t\t\treturn raw.tool!.invokeTool(name, input, invokeOptions);\n\t\t\t\t\t\t},\n\t\t\t\t\t}) satisfies AgentToolFacadeV1,\n\t\t\t\t}\n\t\t\t: {}),\n\t});\n\treturn {\n\t\tvalue,\n\t\trevoke: () => {\n\t\t\tif (!active) return;\n\t\t\tactive = false;\n\t\t\tfor (const cleanup of [...cleanups]) void cleanup();\n\t\t},\n\t};\n}\n\nclass AgentInstanceRuntime<TInput, TResult> implements AgentInstance<TInput, TResult> {\n\treadonly id: string;\n\treadonly definition: AgentDefinition<TInput, TResult>;\n\n\tprivate statusValue: AgentInstanceStatus = \"created\";\n\tprivate revisionValue = 0;\n\tprivate activeLease?: ControllerLeaseRuntime;\n\tprivate activeOperation?: OperationRuntime<TResult>;\n\tprivate activeExecution?: Promise<void>;\n\tprivate completion: Promise<AgentInstanceResult<TResult>>;\n\tprivate resolveCompletion!: (result: AgentInstanceResult<TResult>) => void;\n\tprivate completionResolved = false;\n\tprivate readonly parentInstanceId: string | undefined;\n\tprivate readonly nextId: (kind: string) => string;\n\tprivate readonly defaultLeaseOwner: string;\n\tprivate readonly hostPrimitivesFactory?: AgentHostPrimitivesFactory;\n\tprivate readonly lifecycleDispatcher?: AgentCompositionLifecycleDispatcher;\n\tprivate readonly clearInstanceState?: (instanceId: string) => void;\n\n\tconstructor(\n\t\tdefinition: AgentDefinition<TInput, TResult>,\n\t\tid: string,\n\t\tparentInstanceId: string | undefined,\n\t\tnextId: (kind: string) => string,\n\t\tdefaultLeaseOwner: string,\n\t\thostPrimitivesFactory: AgentHostPrimitivesFactory | undefined,\n\t\tlifecycleDispatcher: AgentCompositionLifecycleDispatcher | undefined,\n\t\tclearInstanceState: ((instanceId: string) => void) | undefined,\n\t) {\n\t\tthis.id = id;\n\t\tthis.definition = definition;\n\t\tthis.parentInstanceId = parentInstanceId;\n\t\tthis.nextId = nextId;\n\t\tthis.defaultLeaseOwner = defaultLeaseOwner;\n\t\tthis.hostPrimitivesFactory = hostPrimitivesFactory;\n\t\tthis.lifecycleDispatcher = lifecycleDispatcher;\n\t\tthis.clearInstanceState = clearInstanceState;\n\t\tthis.completion = new Promise<AgentInstanceResult<TResult>>((resolve) => {\n\t\t\tthis.resolveCompletion = resolve;\n\t\t});\n\t}\n\n\tsnapshot(): AgentInstanceSnapshot {\n\t\treturn freezeSnapshot({\n\t\t\tid: this.id,\n\t\t\tdefinitionId: this.definition.id,\n\t\t\tdefinitionVersion: this.definition.version,\n\t\t\trole: this.definition.role,\n\t\t\t...(this.parentInstanceId ? { parentInstanceId: this.parentInstanceId } : {}),\n\t\t\tstatus: this.statusValue,\n\t\t\trevision: this.revisionValue,\n\t\t\t...(this.activeLease?.isActive() ? { leaseOwner: this.activeLease.owner } : {}),\n\t\t});\n\t}\n\n\tasync acquireControllerLease(\n\t\towner = this.definition.owner ?? this.defaultLeaseOwner,\n\t): Promise<AgentControllerLease> {\n\t\tthis.assertNotDisposed();\n\t\tif (this.activeLease?.isActive())\n\t\t\tthrow new Error(t(\"Agent instance already has an active controller lease: {id}\", { id: this.id }));\n\t\tconst lease = new ControllerLeaseRuntime(this, this.nextId(\"agent-lease\"), owner, this.revisionValue + 1);\n\t\tthis.activeLease = lease;\n\t\treturn lease;\n\t}\n\n\trun(input: TInput, options: { lease?: AgentControllerLease; signal?: AbortSignal } = {}): OperationHandle<TResult> {\n\t\tthis.assertNotDisposed();\n\t\tif (this.statusValue !== \"created\")\n\t\t\tthrow new Error(\n\t\t\t\tt(\"Agent instance cannot run from status {statusValue}: {id}\", {\n\t\t\t\t\tstatusValue: this.statusValue,\n\t\t\t\t\tid: this.id,\n\t\t\t\t}),\n\t\t\t);\n\t\tconst lease = this.activeLease;\n\t\tif (!lease?.isActive())\n\t\t\tthrow new Error(t(\"Agent instance requires an active controller lease: {id}\", { id: this.id }));\n\t\tif (options.lease !== lease || !this.isLeaseUsable(options.lease)) {\n\t\t\tthrow new Error(t(\"Agent controller lease is not valid for instance: {id}\", { id: this.id }));\n\t\t}\n\n\t\tthis.statusValue = \"running\";\n\t\tconst controller = new AbortController();\n\t\tconst externalSignal = options.signal;\n\t\tlet externalAbortListener: (() => void) | undefined;\n\t\tif (externalSignal) {\n\t\t\texternalAbortListener = () => {\n\t\t\t\tcontroller.abort(externalSignal.reason);\n\t\t\t\tvoid this.cancel(externalSignal.reason === undefined ? undefined : String(externalSignal.reason));\n\t\t\t};\n\t\t\tif (!externalSignal.aborted) externalSignal.addEventListener(\"abort\", externalAbortListener, { once: true });\n\t\t}\n\n\t\tlet operation!: OperationRuntime<TResult>;\n\t\toperation = new OperationRuntime<TResult>(\n\t\t\tthis.nextId(\"agent-operation\"),\n\t\t\tcontroller,\n\t\t\t() => this.cancel(controller.signal.reason),\n\t\t\t(progress, step) => this.reportLifecycle(\"step\", operation, undefined, progress, step),\n\t\t);\n\t\tthis.activeOperation = operation;\n\t\tif (externalSignal?.aborted) {\n\t\t\tcontroller.abort(externalSignal.reason);\n\t\t} else {\n\t\t\tthis.reportLifecycle(\"start\", operation);\n\t\t}\n\t\tthis.activeExecution = this.execute(input, lease, operation, externalSignal, externalAbortListener);\n\t\tif (externalSignal?.aborted) {\n\t\t\t// Trigger cancellation only after the execution is tracked, so the\n\t\t\t// pre-aborted path drains like every other cancellation path instead\n\t\t\t// of resolving completion ahead of the execution body.\n\t\t\tvoid this.cancel(externalSignal.reason === undefined ? undefined : String(externalSignal.reason));\n\t\t}\n\t\treturn operation;\n\t}\n\n\tasync wait(): Promise<AgentInstanceResult<TResult>> {\n\t\treturn this.completion;\n\t}\n\n\tasync cancel(reason?: string): Promise<void> {\n\t\tif (this.statusValue === \"disposed\" || terminalStatuses.has(this.statusValue)) return;\n\t\tthis.statusValue = \"cancelled\";\n\t\tthis.revisionValue += 1;\n\t\tconst operation = this.activeOperation;\n\t\tif (operation) {\n\t\t\tthis.reportLifecycle(\"cancel\", operation);\n\t\t\tthis.reportLifecycle(\"end\", operation, \"cancelled\");\n\t\t\toperation.cancelFromInstance(reason);\n\t\t}\n\t\t// The run body must eventually observe the abort signal: cancellation only\n\t\t// settles after the execution drained, so wait() and lease disposal never\n\t\t// race side effects still in flight. There is deliberately no timeout. A run\n\t\t// body that awaits this cancel(), dispose(), or its own lease release\n\t\t// self-deadlocks by contract.\n\t\tawait this.drainExecution();\n\t\tthis.resolveCompletionOnce({ status: \"cancelled\", revision: this.revisionValue, error: abortError(reason) });\n\t}\n\n\tasync dispose(): Promise<void> {\n\t\tif (this.statusValue === \"disposed\") return;\n\t\tif (this.statusValue === \"created\") {\n\t\t\tawait this.activeLease?.release();\n\t\t\tthis.statusValue = \"disposed\";\n\t\t\tthis.revisionValue += 1;\n\t\t\tthis.clearInstanceState?.(this.id);\n\t\t\tthis.resolveCompletionOnce({ status: \"disposed\", revision: this.revisionValue });\n\t\t\treturn;\n\t\t}\n\t\tif (!terminalStatuses.has(this.statusValue)) await this.cancel(\"Agent instance disposed\");\n\t\t// A concurrent cancel() may still be draining; release the lease only after\n\t\t// the execution has settled.\n\t\tawait this.drainExecution();\n\t\tawait this.activeLease?.release();\n\t\tthis.statusValue = \"disposed\";\n\t\tthis.revisionValue += 1;\n\t\t// The instance-private state namespace (and its watchers) dies with the\n\t\t// instance, after every drain the run body could still rely on.\n\t\tthis.clearInstanceState?.(this.id);\n\t\tthis.resolveCompletionOnce({ status: \"disposed\", revision: this.revisionValue });\n\t}\n\n\tasync deactivateLease(lease: ControllerLeaseRuntime): Promise<void> {\n\t\tif (this.activeLease !== lease) return;\n\t\tthis.activeLease = undefined;\n\t\tif (this.statusValue === \"running\") {\n\t\t\tawait this.cancel(\"Controller lease released\");\n\t\t\treturn;\n\t\t}\n\t\t// A cancel() from another path may still be draining the execution.\n\t\tawait this.drainExecution();\n\t}\n\n\tisLeaseUsable(lease: AgentControllerLease | undefined): lease is ControllerLeaseRuntime {\n\t\treturn (\n\t\t\tlease instanceof ControllerLeaseRuntime &&\n\t\t\tlease.instanceId === this.id &&\n\t\t\tlease.isActive() &&\n\t\t\tthis.activeLease === lease\n\t\t);\n\t}\n\n\tprivate async execute(\n\t\tinput: TInput,\n\t\tlease: ControllerLeaseRuntime,\n\t\toperation: OperationRuntime<TResult>,\n\t\texternalSignal: AbortSignal | undefined,\n\t\texternalAbortListener: (() => void) | undefined,\n\t): Promise<void> {\n\t\tconst instanceSnapshot = this.snapshot();\n\t\tlet hostScope: RevocableHost | undefined;\n\t\tconst revokeHost = () => hostScope?.revoke();\n\t\toperation.signal.addEventListener(\"abort\", revokeHost, { once: true });\n\t\ttry {\n\t\t\tif (operation.signal.aborted) throw abortError(operation.signal.reason);\n\t\t\tif (this.hostPrimitivesFactory) {\n\t\t\t\tconst raw = await this.hostPrimitivesFactory({\n\t\t\t\t\tinstance: instanceSnapshot,\n\t\t\t\t\toperationId: operation.id,\n\t\t\t\t\tsignal: operation.signal,\n\t\t\t\t\tleaseOwner: lease.owner,\n\t\t\t\t});\n\t\t\t\tif (raw !== undefined) {\n\t\t\t\t\tif (raw.version !== 1) throw new Error(t(\"Unsupported Agent host primitives version\"));\n\t\t\t\t\tif (raw.operation && (raw.operation.id !== operation.id || raw.operation.signal !== operation.signal))\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\tt(\"Agent host operation does not match active operation: {id}\", { id: operation.id }),\n\t\t\t\t\t\t);\n\t\t\t\t\thostScope = createRevocableHostPrimitives(\n\t\t\t\t\t\t{ ...raw, operation: raw.operation ?? createOperationFacade(operation, this.id, () => true) },\n\t\t\t\t\t\toperation as OperationRuntime<unknown>,\n\t\t\t\t\t\tinstanceSnapshot,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (operation.signal.aborted) throw abortError(operation.signal.reason);\n\t\t\tconst context: AgentExecutionContext = Object.freeze({\n\t\t\t\tinstance: instanceSnapshot,\n\t\t\t\tsignal: operation.signal,\n\t\t\t\tinputRevision: this.revisionValue,\n\t\t\t\t...(hostScope ? { host: hostScope.value } : {}),\n\t\t\t});\n\t\t\tconst output = await this.definition.run(input, context);\n\t\t\tif (operation.signal.aborted || !this.isLeaseUsable(lease) || this.statusValue !== \"running\") return;\n\t\t\tthis.statusValue = \"succeeded\";\n\t\t\tthis.revisionValue += 1;\n\t\t\toperation.resolve(output);\n\t\t\tthis.reportLifecycle(\"end\", operation, \"succeeded\");\n\t\t\tthis.resolveCompletionOnce({ status: \"succeeded\", revision: this.revisionValue, output });\n\t\t} catch (error) {\n\t\t\tif (operation.signal.aborted || this.statusValue === \"cancelled\" || this.statusValue === \"disposed\") {\n\t\t\t\t// Instance-level cancellation marks the handle cancelled before this\n\t\t\t\t// catch runs; the pre-aborted run() path gets here first, so settle\n\t\t\t\t// the handle as cancelled instead of failed.\n\t\t\t\toperation.cancelFromInstance(operation.signal.reason);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.statusValue = \"failed\";\n\t\t\tthis.revisionValue += 1;\n\t\t\toperation.reject(error);\n\t\t\tthis.reportLifecycle(\"end\", operation, \"failed\");\n\t\t\tthis.resolveCompletionOnce({ status: \"failed\", revision: this.revisionValue, error });\n\t\t} finally {\n\t\t\thostScope?.revoke();\n\t\t\toperation.signal.removeEventListener(\"abort\", revokeHost);\n\t\t\tif (externalSignal && externalAbortListener)\n\t\t\t\texternalSignal.removeEventListener(\"abort\", externalAbortListener);\n\t\t\tif (this.activeOperation === operation) this.activeOperation = undefined;\n\t\t\t// run() requires status \"created\", so at most one execution ever exists\n\t\t\t// per instance and clearing the field unconditionally is safe.\n\t\t\tthis.activeExecution = undefined;\n\t\t}\n\t}\n\n\tprivate async drainExecution(): Promise<void> {\n\t\t// Capture the reference before awaiting: execute()'s finally clears the\n\t\t// field while drainers still need the promise.\n\t\tconst execution = this.activeExecution;\n\t\tif (!execution) return;\n\t\tawait execution;\n\t}\n\n\tprivate assertNotDisposed(): void {\n\t\tif (this.statusValue === \"disposed\") throw new Error(t(\"Agent instance is disposed: {id}\", { id: this.id }));\n\t}\n\n\tprivate resolveCompletionOnce(result: AgentInstanceResult<TResult>): void {\n\t\tif (this.completionResolved) return;\n\t\tthis.completionResolved = true;\n\t\tthis.resolveCompletion(result);\n\t}\n\n\tprivate reportLifecycle(\n\t\tevent: AgentCompositionLifecycleEventName,\n\t\toperation: OperationRuntime<TResult>,\n\t\tstatus?: AgentCompositionLifecycleTerminalStatus,\n\t\tprogress?: OperationProgress,\n\t\tstep?: number,\n\t): void {\n\t\tif (!this.lifecycleDispatcher) return;\n\t\ttry {\n\t\t\tthis.lifecycleDispatcher({\n\t\t\t\tevent,\n\t\t\t\toperationId: operation.id,\n\t\t\t\toperationKind: `agent:${this.definition.id}@${this.definition.version}`,\n\t\t\t\t...(this.definition.owner === undefined ? {} : { owner: this.definition.owner }),\n\t\t\t\t...(status === undefined ? {} : { status }),\n\t\t\t\t...(progress === undefined ? {} : { progress }),\n\t\t\t\t...(step === undefined ? {} : { step }),\n\t\t\t});\n\t\t} catch {\n\t\t\t// Lifecycle delivery is observational and must not affect the operation.\n\t\t}\n\t}\n}\n\ninterface LeaseOwner {\n\tid: string;\n\tdeactivateLease(lease: ControllerLeaseRuntime): Promise<void>;\n}\n\nclass ControllerLeaseRuntime implements AgentControllerLease {\n\tprivate active = true;\n\tprivate readonly instance: LeaseOwner;\n\treadonly id: string;\n\treadonly owner: string;\n\treadonly revision: number;\n\n\tconstructor(instance: LeaseOwner, id: string, owner: string, revision: number) {\n\t\tthis.instance = instance;\n\t\tthis.id = id;\n\t\tthis.owner = owner;\n\t\tthis.revision = revision;\n\t}\n\n\tget instanceId(): string {\n\t\treturn this.instance.id;\n\t}\n\n\tisActive(): boolean {\n\t\treturn this.active;\n\t}\n\n\tasync release(): Promise<void> {\n\t\tif (!this.active) return;\n\t\tthis.active = false;\n\t\tawait this.instance.deactivateLease(this);\n\t}\n}\n\nclass OperationRuntime<TResult> implements OperationHandle<TResult> {\n\tprivate statusValue: OperationStatus = \"queued\";\n\tprivate resolveResult!: (result: TResult) => void;\n\tprivate rejectResult!: (error: unknown) => void;\n\treadonly result: Promise<TResult>;\n\treadonly id: string;\n\tprivate readonly controller: AbortController;\n\tprivate readonly cancelCallback: () => Promise<void>;\n\tprivate readonly reportProgressCallback: (progress: OperationProgress, step: number) => void;\n\tprivate progressSequence = 0;\n\n\tconstructor(\n\t\tid: string,\n\t\tcontroller: AbortController,\n\t\tcancelCallback: () => Promise<void>,\n\t\treportProgress: (progress: OperationProgress, step: number) => void,\n\t) {\n\t\tthis.id = id;\n\t\tthis.controller = controller;\n\t\tthis.cancelCallback = cancelCallback;\n\t\tthis.reportProgressCallback = reportProgress;\n\t\tthis.signal = controller.signal;\n\t\tthis.result = new Promise<TResult>((resolve, reject) => {\n\t\t\tthis.resolveResult = resolve;\n\t\t\tthis.rejectResult = reject;\n\t\t});\n\t\tthis.statusValue = \"running\";\n\t}\n\n\treadonly signal: AbortSignal;\n\n\tstatus(): OperationStatus {\n\t\treturn this.statusValue;\n\t}\n\n\treportProgress(progress: OperationProgress): boolean {\n\t\tif (this.statusValue !== \"running\" || this.signal.aborted) return false;\n\t\tthis.reportProgressCallback(progress, ++this.progressSequence);\n\t\treturn true;\n\t}\n\n\tasync cancel(reason?: string): Promise<void> {\n\t\tif (this.statusValue === \"succeeded\" || this.statusValue === \"failed\" || this.statusValue === \"cancelled\") return;\n\t\tthis.controller.abort(reason);\n\t\t// The handle must settle cancellation without waiting for an uncooperative\n\t\t// run body. AgentInstanceRuntime.cancel() still drains the body when the\n\t\t// caller explicitly cancels/releases the instance, but OperationHandle is\n\t\t// the non-blocking public fence used by callers that cannot coordinate the\n\t\t// plugin's private awaits. The callback synchronously marks the operation\n\t\t// cancelled before its first await; any later drain is best-effort here.\n\t\ttry {\n\t\t\tvoid this.cancelCallback().catch(() => undefined);\n\t\t} catch {\n\t\t\t// A cancellation request is already reflected by this operation's\n\t\t\t// aborted signal and terminal status; callback failures must not turn\n\t\t\t// cancel() into an unbounded or rejected wait.\n\t\t}\n\t}\n\n\tcancelFromInstance(reason?: string): void {\n\t\tif (this.statusValue === \"succeeded\" || this.statusValue === \"failed\" || this.statusValue === \"cancelled\") return;\n\t\tthis.statusValue = \"cancelled\";\n\t\tthis.controller.abort(reason);\n\t\tthis.rejectResult(abortError(reason));\n\t}\n\n\tresolve(value: TResult): void {\n\t\tif (this.statusValue === \"cancelled\" || this.statusValue === \"failed\") return;\n\t\tthis.statusValue = \"succeeded\";\n\t\tthis.resolveResult(value);\n\t}\n\n\treject(error: unknown): void {\n\t\tif (this.statusValue === \"cancelled\") return;\n\t\tthis.statusValue = \"failed\";\n\t\tthis.rejectResult(error);\n\t}\n}\n\nexport class AgentCompositionRuntime\n\timplements\n\t\tAgentCompositionAPI,\n\t\tAgentCompositionHostBinding,\n\t\tAgentCompositionDefinitionBinding,\n\t\tAgentCompositionScopedHostBinding,\n\t\tAgentCompositionInstanceStateBinding\n{\n\tprivate readonly definitions = new Map<string, AgentDefinition<unknown, unknown>>();\n\tprivate readonly instances = new Map<string, AgentInstanceRuntime<unknown, unknown>>();\n\tprivate readonly instanceStateClearers = new Set<(instanceId: string) => void>();\n\tprivate sequence = 0;\n\tprivate readonly nextId: (kind: string) => string;\n\tprivate readonly defaultLeaseOwner?: string;\n\tprivate hostPrimitivesFactory?: AgentHostPrimitivesFactory;\n\tprivate lifecycleDispatcher?: AgentCompositionLifecycleDispatcher;\n\n\tconstructor(options: AgentCompositionRuntimeOptions = {}) {\n\t\tthis.defaultLeaseOwner = options.defaultLeaseOwner;\n\t\tthis.hostPrimitivesFactory = options.hostPrimitivesFactory;\n\t\tthis.nextId = options.idFactory ?? ((kind: string) => `${kind}-${++this.sequence}`);\n\t}\n\n\tsetHostPrimitivesFactory(factory?: AgentHostPrimitivesFactory): void {\n\t\tthis.hostPrimitivesFactory = factory;\n\t}\n\n\tsetLifecycleDispatcher(dispatcher?: AgentCompositionLifecycleDispatcher): void {\n\t\tthis.lifecycleDispatcher = dispatcher;\n\t}\n\n\taddInstanceStateClearer(clearer: (instanceId: string) => void): () => void {\n\t\tthis.instanceStateClearers.add(clearer);\n\t\treturn () => {\n\t\t\tthis.instanceStateClearers.delete(clearer);\n\t\t};\n\t}\n\n\tdisposeDefinitions(definitions: readonly AgentDefinition[]): void {\n\t\tconst owned = new Set(definitions);\n\t\tfor (const [key, definition] of this.definitions) {\n\t\t\tif (owned.has(definition)) this.definitions.delete(key);\n\t\t}\n\t\tfor (const [id, instance] of this.instances) {\n\t\t\tif (!owned.has(instance.definition)) continue;\n\t\t\tthis.instances.delete(id);\n\t\t\tvoid instance.dispose();\n\t\t}\n\t}\n\n\tdefine<TInput = unknown, TResult = unknown>(\n\t\tdefinition: AgentDefinition<TInput, TResult>,\n\t): AgentDefinition<TInput, TResult> {\n\t\tvalidateAgentDefinition(definition);\n\t\tif (this.definitions.has(this.definitionKey(definition.id, definition.version))) {\n\t\t\tthrow new Error(\n\t\t\t\tt(\"Agent definition already registered: {id}@{version}\", {\n\t\t\t\t\tid: definition.id,\n\t\t\t\t\tversion: definition.version,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tconst frozen = Object.freeze({ ...definition });\n\t\tthis.definitions.set(\n\t\t\tthis.definitionKey(definition.id, definition.version),\n\t\t\tfrozen as AgentDefinition<unknown, unknown>,\n\t\t);\n\t\treturn frozen;\n\t}\n\n\tget<TInput = unknown, TResult = unknown>(id: string, version: number): AgentDefinition<TInput, TResult> {\n\t\tconst definition = this.definitions.get(this.definitionKey(id, version));\n\t\tif (!definition) throw new Error(t(\"Unknown Agent definition: {id}@{version}\", { id, version }));\n\t\treturn definition as AgentDefinition<TInput, TResult>;\n\t}\n\n\tcreate<TInput = unknown, TResult = unknown>(\n\t\tdefinition: AgentDefinition<TInput, TResult> | DefinitionRef,\n\t\toptions: { id?: string; parentInstanceId?: string } = {},\n\t): AgentInstance<TInput, TResult> {\n\t\treturn this.createInternal(definition, options, this.hostPrimitivesFactory);\n\t}\n\n\tcreateWithHostPrimitives<TInput = unknown, TResult = unknown>(\n\t\tdefinition: AgentDefinition<TInput, TResult> | DefinitionRef,\n\t\toptions: { id?: string; parentInstanceId?: string } | undefined,\n\t\thostPrimitivesFactory: AgentHostPrimitivesFactory,\n\t\tlifecycleDispatcher?: AgentCompositionLifecycleDispatcher,\n\t): AgentInstance<TInput, TResult> {\n\t\t// A CapabilityRuntime supplies a complete, session-bound factory for this\n\t\t// plugin invocation. Do not merge the runtime-wide factory here: one\n\t\t// composition runtime may be shared by more than one AgentSession.\n\t\treturn this.createInternal(\n\t\t\tdefinition,\n\t\t\toptions ?? {},\n\t\t\thostPrimitivesFactory,\n\t\t\tlifecycleDispatcher ?? this.lifecycleDispatcher,\n\t\t);\n\t}\n\n\tprivate createInternal<TInput = unknown, TResult = unknown>(\n\t\tdefinition: AgentDefinition<TInput, TResult> | DefinitionRef,\n\t\toptions: { id?: string; parentInstanceId?: string },\n\t\thostPrimitivesFactory: AgentHostPrimitivesFactory | undefined,\n\t\tlifecycleDispatcher: AgentCompositionLifecycleDispatcher | undefined = this.lifecycleDispatcher,\n\t): AgentInstance<TInput, TResult> {\n\t\tif (!definition || typeof definition !== \"object\")\n\t\t\tthrow new Error(t(\"Agent definition or reference is required\"));\n\t\tconst resolved =\n\t\t\t\"run\" in definition\n\t\t\t\t? validateAgentDefinition(definition as AgentDefinition<TInput, TResult>)\n\t\t\t\t: this.get<TInput, TResult>(definition.id, definition.version);\n\t\tif (options.parentInstanceId !== undefined && !this.instances.has(options.parentInstanceId)) {\n\t\t\tthrow new Error(\n\t\t\t\tt(\"Unknown parent Agent instance: {parentInstanceId}\", { parentInstanceId: options.parentInstanceId }),\n\t\t\t);\n\t\t}\n\t\tif (this.instances.has(options.id ?? \"\"))\n\t\t\tthrow new Error(t(\"Agent instance id already exists: {id}\", { id: options.id ?? \"\" }));\n\t\tconst id = options.id ?? this.nextId(\"agent-instance\");\n\t\tif (this.instances.has(id)) throw new Error(t(\"Agent instance id already exists: {id}\", { id }));\n\t\tconst instance = new AgentInstanceRuntime(\n\t\t\tresolved,\n\t\t\tid,\n\t\t\toptions.parentInstanceId,\n\t\t\tthis.nextId,\n\t\t\tthis.defaultLeaseOwner ?? resolved.owner ?? \"agent-composition\",\n\t\t\thostPrimitivesFactory,\n\t\t\tlifecycleDispatcher,\n\t\t\t(instanceId: string) => {\n\t\t\t\tfor (const clearer of this.instanceStateClearers) clearer(instanceId);\n\t\t\t},\n\t\t);\n\t\tthis.instances.set(id, instance as AgentInstanceRuntime<unknown, unknown>);\n\t\treturn instance;\n\t}\n\n\tlistInstances(): readonly AgentInstanceSnapshot[] {\n\t\treturn Object.freeze([...this.instances.values()].map((instance) => instance.snapshot()));\n\t}\n\n\tprivate definitionKey(id: string, version: number): string {\n\t\treturn `${id}@${version}`;\n\t}\n}\n\nexport function createAgentCompositionRuntime(options: AgentCompositionRuntimeOptions = {}): AgentCompositionRuntime {\n\treturn new AgentCompositionRuntime(options);\n}\n"]}
@@ -1,3 +1,4 @@
1
+ import { t } from "../i18n/index.js";
1
2
  const terminalStatuses = new Set(["succeeded", "failed", "cancelled", "disposed"]);
2
3
  function abortError(reason) {
3
4
  if (reason instanceof Error)
@@ -34,22 +35,22 @@ function freezeSnapshot(snapshot) {
34
35
  }
35
36
  function validateAgentDefinition(definition) {
36
37
  if (!definition || typeof definition !== "object") {
37
- throw new Error("Agent definition is required");
38
+ throw new Error(t("Agent definition is required"));
38
39
  }
39
40
  if (typeof definition.id !== "string" || !definition.id.trim()) {
40
- throw new Error("Agent definition requires a non-empty id");
41
+ throw new Error(t("Agent definition requires a non-empty id"));
41
42
  }
42
43
  if (!Number.isSafeInteger(definition.version) || definition.version < 1) {
43
- throw new Error("Agent definition version must be a positive safe integer");
44
+ throw new Error(t("Agent definition version must be a positive safe integer"));
44
45
  }
45
46
  if (definition.role !== "root-agent-controller" && definition.role !== "child-agent-controller") {
46
- throw new Error("Agent definition role must be root-agent-controller or child-agent-controller");
47
+ throw new Error(t("Agent definition role must be root-agent-controller or child-agent-controller"));
47
48
  }
48
49
  if (typeof definition.run !== "function") {
49
- throw new Error("Agent definition requires a run function");
50
+ throw new Error(t("Agent definition requires a run function"));
50
51
  }
51
52
  if (definition.owner !== undefined && (typeof definition.owner !== "string" || !definition.owner.trim())) {
52
- throw new Error("Agent definition owner must be a non-empty string when provided");
53
+ throw new Error(t("Agent definition owner must be a non-empty string when provided"));
53
54
  }
54
55
  return definition;
55
56
  }
@@ -381,7 +382,7 @@ class AgentInstanceRuntime {
381
382
  async acquireControllerLease(owner = this.definition.owner ?? this.defaultLeaseOwner) {
382
383
  this.assertNotDisposed();
383
384
  if (this.activeLease?.isActive())
384
- throw new Error(`Agent instance already has an active controller lease: ${this.id}`);
385
+ throw new Error(t("Agent instance already has an active controller lease: {id}", { id: this.id }));
385
386
  const lease = new ControllerLeaseRuntime(this, this.nextId("agent-lease"), owner, this.revisionValue + 1);
386
387
  this.activeLease = lease;
387
388
  return lease;
@@ -389,12 +390,15 @@ class AgentInstanceRuntime {
389
390
  run(input, options = {}) {
390
391
  this.assertNotDisposed();
391
392
  if (this.statusValue !== "created")
392
- throw new Error(`Agent instance cannot run from status ${this.statusValue}: ${this.id}`);
393
+ throw new Error(t("Agent instance cannot run from status {statusValue}: {id}", {
394
+ statusValue: this.statusValue,
395
+ id: this.id,
396
+ }));
393
397
  const lease = this.activeLease;
394
398
  if (!lease?.isActive())
395
- throw new Error(`Agent instance requires an active controller lease: ${this.id}`);
399
+ throw new Error(t("Agent instance requires an active controller lease: {id}", { id: this.id }));
396
400
  if (options.lease !== lease || !this.isLeaseUsable(options.lease)) {
397
- throw new Error(`Agent controller lease is not valid for instance: ${this.id}`);
401
+ throw new Error(t("Agent controller lease is not valid for instance: {id}", { id: this.id }));
398
402
  }
399
403
  this.statusValue = "running";
400
404
  const controller = new AbortController();
@@ -506,9 +510,9 @@ class AgentInstanceRuntime {
506
510
  });
507
511
  if (raw !== undefined) {
508
512
  if (raw.version !== 1)
509
- throw new Error("Unsupported Agent host primitives version");
513
+ throw new Error(t("Unsupported Agent host primitives version"));
510
514
  if (raw.operation && (raw.operation.id !== operation.id || raw.operation.signal !== operation.signal))
511
- throw new Error(`Agent host operation does not match active operation: ${operation.id}`);
515
+ throw new Error(t("Agent host operation does not match active operation: {id}", { id: operation.id }));
512
516
  hostScope = createRevocableHostPrimitives({ ...raw, operation: raw.operation ?? createOperationFacade(operation, this.id, () => true) }, operation, instanceSnapshot);
513
517
  }
514
518
  }
@@ -565,7 +569,7 @@ class AgentInstanceRuntime {
565
569
  }
566
570
  assertNotDisposed() {
567
571
  if (this.statusValue === "disposed")
568
- throw new Error(`Agent instance is disposed: ${this.id}`);
572
+ throw new Error(t("Agent instance is disposed: {id}", { id: this.id }));
569
573
  }
570
574
  resolveCompletionOnce(result) {
571
575
  if (this.completionResolved)
@@ -730,7 +734,10 @@ export class AgentCompositionRuntime {
730
734
  define(definition) {
731
735
  validateAgentDefinition(definition);
732
736
  if (this.definitions.has(this.definitionKey(definition.id, definition.version))) {
733
- throw new Error(`Agent definition already registered: ${definition.id}@${definition.version}`);
737
+ throw new Error(t("Agent definition already registered: {id}@{version}", {
738
+ id: definition.id,
739
+ version: definition.version,
740
+ }));
734
741
  }
735
742
  const frozen = Object.freeze({ ...definition });
736
743
  this.definitions.set(this.definitionKey(definition.id, definition.version), frozen);
@@ -739,7 +746,7 @@ export class AgentCompositionRuntime {
739
746
  get(id, version) {
740
747
  const definition = this.definitions.get(this.definitionKey(id, version));
741
748
  if (!definition)
742
- throw new Error(`Unknown Agent definition: ${id}@${version}`);
749
+ throw new Error(t("Unknown Agent definition: {id}@{version}", { id, version }));
743
750
  return definition;
744
751
  }
745
752
  create(definition, options = {}) {
@@ -753,18 +760,18 @@ export class AgentCompositionRuntime {
753
760
  }
754
761
  createInternal(definition, options, hostPrimitivesFactory, lifecycleDispatcher = this.lifecycleDispatcher) {
755
762
  if (!definition || typeof definition !== "object")
756
- throw new Error("Agent definition or reference is required");
763
+ throw new Error(t("Agent definition or reference is required"));
757
764
  const resolved = "run" in definition
758
765
  ? validateAgentDefinition(definition)
759
766
  : this.get(definition.id, definition.version);
760
767
  if (options.parentInstanceId !== undefined && !this.instances.has(options.parentInstanceId)) {
761
- throw new Error(`Unknown parent Agent instance: ${options.parentInstanceId}`);
768
+ throw new Error(t("Unknown parent Agent instance: {parentInstanceId}", { parentInstanceId: options.parentInstanceId }));
762
769
  }
763
770
  if (this.instances.has(options.id ?? ""))
764
- throw new Error(`Agent instance id already exists: ${options.id}`);
771
+ throw new Error(t("Agent instance id already exists: {id}", { id: options.id ?? "" }));
765
772
  const id = options.id ?? this.nextId("agent-instance");
766
773
  if (this.instances.has(id))
767
- throw new Error(`Agent instance id already exists: ${id}`);
774
+ throw new Error(t("Agent instance id already exists: {id}", { id }));
768
775
  const instance = new AgentInstanceRuntime(resolved, id, options.parentInstanceId, this.nextId, this.defaultLeaseOwner ?? resolved.owner ?? "agent-composition", hostPrimitivesFactory, lifecycleDispatcher, (instanceId) => {
769
776
  for (const clearer of this.instanceStateClearers)
770
777
  clearer(instanceId);