@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-session-context.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAExF,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,qBAAqB,GAAG;IAAE,OAAO,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAanH;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAInG;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAIhF;AAED,wBAAgB,0BAA0B,CACzC,OAAO,EAAE,qBAAqB,EAC9B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,OAAO,GAClB,OAAO,CAET;AAED,wBAAgB,8BAA8B,CAC7C,OAAO,EAAE,qBAAqB,EAC9B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,OAAO,GAClB,IAAI,CASN;AAED,wBAAgB,wBAAwB,CAAC,CAAC,EACzC,OAAO,EAAE,qBAAqB,EAC9B,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,EAC7D,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GACvD,OAAO,CAAC,CAAC,CAAC,CA6BZ;AAED,wBAAgB,mBAAmB,CAClC,KAAK,EAAE,OAAO,EACd,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,OAAO,GAAG,QAAQ,GAC3B,YAAY,EAAE,CA2BhB;AAED,kFAAkF;AAClF,wBAAgB,sBAAsB,CACrC,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,YAAY,EAAE,EACxB,MAAM,GAAE,uBAAuB,CAAC,QAAQ,CAAqB,EAC7D,MAAM,CAAC,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GACjC,OAAO,CAAC,YAAY,EAAE,CAAC,CAmCzB;AAED,wBAAgB,wBAAwB,CACvC,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,OAAO,EACjB,MAAM,EAAE,WAAW,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC,EACtD,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GACjC,OAAO,CAAC,YAAY,EAAE,CAAC,CAoBzB;AAED,kFAAkF;AAClF,wBAAsB,eAAe,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CAOtF;AAED,yDAAyD;AACzD,wBAAsB,cAAc,CAAC,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAG/G;AAED,wEAAwE;AACxE,wBAAsB,cAAc,CAAC,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAIrH","sourcesContent":["/**\n * Context transition pipeline for AgentSession: the strategy gate, the\n * transition fence, and the snapshot/restore/replace operations.\n *\n * Extracted from `agent-session.ts`. Every function here operates on the\n * internal session facade ({@link AgentSessionInternals}); `AgentSession`\n * keeps same-name delegates so call sites, dynamic dispatch, and test spies\n * keep working unchanged. Method-to-method calls that have a facade member go\n * through the session parameter (not direct function calls) to preserve that\n * dispatch — including `session._dispatchContextReplacedLifecycle`, whose\n * delegate stays on the class with the other lifecycle dispatchers and\n * forwards to `agent-session-lifecycle.ts`.\n */\n\nimport type { AgentMessage } from \"@agent-forge/agent-core\";\nimport type { AgentSessionInternals } from \"./agent-session-internal.ts\";\nimport type { CapabilityRuntime, ContextOperationOptions } from \"./extensions/index.ts\";\n\nexport function requireContextStrategy(session: AgentSessionInternals): { runtime: CapabilityRuntime; name: string } {\n\tconst name = session._contextStrategyName;\n\tif (!name) {\n\t\tthrow new Error(\"Context strategy is not configured\");\n\t}\n\tconst runtime = session._capabilityRuntime;\n\tif (!runtime) {\n\t\tthrow new Error(\"Capability runtime is not available\");\n\t}\n\tif (!runtime.hasContextStrategy(name)) {\n\t\tthrow new Error(`Configured context strategy is not registered: ${name}`);\n\t}\n\treturn { runtime, name };\n}\n\nexport function requireIdleContextOperation(session: AgentSessionInternals, operation: string): void {\n\tif (!session.isIdle) {\n\t\tthrow new Error(`Cannot ${operation} while the session is running`);\n\t}\n}\n\nexport function beginContextTransitionFence(session: AgentSessionInternals): void {\n\tsession._contextEpoch += 1;\n\tsession._contextTransitionAbortController.abort(\"context runtime replaced\");\n\tsession._contextTransitionAbortController = new AbortController();\n}\n\nexport function isContextTransitionCurrent(\n\tsession: AgentSessionInternals,\n\tepoch: number,\n\tallowReload: boolean,\n): boolean {\n\treturn !session.isDisposed && epoch === session._contextEpoch && (allowReload || !session._reloadInProgress);\n}\n\nexport function assertContextTransitionCurrent(\n\tsession: AgentSessionInternals,\n\tepoch: number,\n\tallowReload: boolean,\n): void {\n\tif (session._isContextTransitionCurrent(epoch, allowReload)) return;\n\tthrow new Error(\n\t\tsession.isDisposed\n\t\t\t? \"Session is disposed; context transition was cancelled\"\n\t\t\t: session._reloadInProgress\n\t\t\t\t? \"Session reload in progress; context transition was cancelled\"\n\t\t\t\t: \"Context transition was superseded\",\n\t);\n}\n\nexport function enqueueContextTransition<T>(\n\tsession: AgentSessionInternals,\n\toperation: (epoch: number, signal: AbortSignal) => Promise<T>,\n\toptions?: { signal?: AbortSignal; allowReload?: boolean },\n): Promise<T> {\n\tconst allowReload = options?.allowReload ?? false;\n\tif (session.isDisposed) {\n\t\treturn Promise.reject(new Error(\"Session is disposed; context transition is unavailable\"));\n\t}\n\tif (session._reloadInProgress && !allowReload) {\n\t\treturn Promise.reject(new Error(\"Session reload in progress; context transition is unavailable\"));\n\t}\n\tconst epoch = session._contextEpoch;\n\tconst fenceSignal = session._contextTransitionAbortController.signal;\n\tconst signal = options?.signal ? AbortSignal.any([fenceSignal, options.signal]) : fenceSignal;\n\tconst previous = session._activeContextTransition;\n\t// Keep the failure visible to its original caller, but do not poison the\n\t// serialized tail: a later independent context operation may still run.\n\tconst tail = previous?.catch(() => undefined);\n\tconst queued = (tail ?? Promise.resolve()).then(() => {\n\t\tsession._assertContextTransitionCurrent(epoch, allowReload);\n\t\treturn operation(epoch, signal);\n\t});\n\tsession._activeContextTransition = queued;\n\tvoid queued.then(\n\t\t() => {\n\t\t\tif (session._activeContextTransition === queued) session._activeContextTransition = undefined;\n\t\t},\n\t\t() => {\n\t\t\tif (session._activeContextTransition === queued) session._activeContextTransition = undefined;\n\t\t},\n\t);\n\treturn queued;\n}\n\nexport function copyContextMessages(\n\tvalue: unknown,\n\tstrategyName: string,\n\tdirection: \"input\" | \"result\",\n): AgentMessage[] {\n\tif (\n\t\t!Array.isArray(value) ||\n\t\tvalue.some(\n\t\t\t(message) =>\n\t\t\t\ttypeof message !== \"object\" ||\n\t\t\t\tmessage === null ||\n\t\t\t\t!(\"role\" in message) ||\n\t\t\t\ttypeof (message as { role?: unknown }).role !== \"string\",\n\t\t)\n\t) {\n\t\tthrow new Error(\n\t\t\tdirection === \"result\"\n\t\t\t\t? `Context strategy must return an AgentMessage array: ${strategyName}`\n\t\t\t\t: `Context transition requires an AgentMessage array: ${strategyName}`,\n\t\t);\n\t}\n\ttry {\n\t\treturn structuredClone(value) as AgentMessage[];\n\t} catch (error) {\n\t\tthrow new Error(\n\t\t\tdirection === \"result\"\n\t\t\t\t? `Context strategy must return structured-cloneable AgentMessage values: ${strategyName}`\n\t\t\t\t: `Context transition requires structured-cloneable AgentMessage values: ${strategyName}`,\n\t\t\t{ cause: error },\n\t\t);\n\t}\n}\n\n/** Apply a persisted-context transition, including strategy-owned projections. */\nexport function applyContextTransition(\n\tsession: AgentSessionInternals,\n\tmessages: AgentMessage[],\n\treason: ContextOperationOptions[\"reason\"] = \"session_replace\",\n\tsignal?: AbortSignal,\n\toptions?: { allowReload?: boolean },\n): Promise<AgentMessage[]> {\n\treturn session._enqueueContextTransition(\n\t\tasync (epoch, transitionSignal) => {\n\t\t\tconst name = session._contextStrategyName;\n\t\t\tconst runtime = session._capabilityRuntime;\n\t\t\tif (name) {\n\t\t\t\tif (!runtime) {\n\t\t\t\t\tthrow new Error(\"Capability runtime is not available\");\n\t\t\t\t}\n\t\t\t\tif (!runtime.hasContextStrategy(name)) {\n\t\t\t\t\tthrow new Error(`Configured context strategy is not registered: ${name}`);\n\t\t\t\t}\n\t\t\t\tconst replaced = await runtime.replaceContext(name, session._copyContextMessages(messages, name, \"input\"), {\n\t\t\t\t\tsignal: transitionSignal,\n\t\t\t\t\treason,\n\t\t\t\t\tsessionId: session.sessionId,\n\t\t\t\t});\n\t\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\t\tconst committed = session._copyContextMessages(replaced, name, \"result\");\n\t\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\t\tsession.agent.state.messages = committed;\n\t\t\t\tsession._contextRevision += 1;\n\t\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\t\tawait session._dispatchContextReplacedLifecycle(reason, name);\n\t\t\t\treturn committed;\n\t\t\t}\n\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\tsession.agent.state.messages = messages;\n\t\t\tsession._contextRevision += 1;\n\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\tawait session._dispatchContextReplacedLifecycle(reason);\n\t\t\treturn messages;\n\t\t},\n\t\t{ signal, allowReload: options?.allowReload },\n\t);\n}\n\nexport function restoreContextTransition(\n\tsession: AgentSessionInternals,\n\tsnapshot: unknown,\n\treason: NonNullable<ContextOperationOptions[\"reason\"]>,\n\toptions?: { allowReload?: boolean },\n): Promise<AgentMessage[]> {\n\treturn session._enqueueContextTransition(\n\t\tasync (epoch, signal) => {\n\t\t\tconst { runtime, name } = session._requireContextStrategy();\n\t\t\tconst restored = await runtime.restoreContext(name, snapshot, {\n\t\t\t\tsignal,\n\t\t\t\treason,\n\t\t\t\tsessionId: session.sessionId,\n\t\t\t});\n\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\tconst committed = session._copyContextMessages(restored, name, \"result\");\n\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\tsession.agent.state.messages = committed;\n\t\t\tsession._contextRevision += 1;\n\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\tawait session._dispatchContextReplacedLifecycle(reason, name);\n\t\t\treturn committed;\n\t\t},\n\t\t{ allowReload: options?.allowReload },\n\t);\n}\n\n/** Snapshot the current session messages with the configured context strategy. */\nexport async function snapshotContext(session: AgentSessionInternals): Promise<unknown> {\n\tsession._requireIdleContextOperation(\"snapshot context\");\n\tconst { runtime, name } = session._requireContextStrategy();\n\treturn runtime.snapshotContext(name, session._copyContextMessages(session.agent.state.messages, name, \"input\"), {\n\t\treason: \"reload\",\n\t\tsessionId: session.sessionId,\n\t});\n}\n\n/** Restore session messages from a strategy snapshot. */\nexport async function restoreContext(session: AgentSessionInternals, snapshot: unknown): Promise<AgentMessage[]> {\n\tsession._requireIdleContextOperation(\"restore context\");\n\treturn session._restoreContextTransition(snapshot, \"session_replace\");\n}\n\n/** Replace session messages through the configured context strategy. */\nexport async function replaceContext(session: AgentSessionInternals, context: AgentMessage[]): Promise<AgentMessage[]> {\n\tsession._requireIdleContextOperation(\"replace context\");\n\tconst { name } = session._requireContextStrategy();\n\treturn session._applyContextTransition(session._copyContextMessages(context, name, \"input\"), \"session_replace\");\n}\n"]}
1
+ {"version":3,"file":"agent-session-context.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAGxF,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,qBAAqB,GAAG;IAAE,OAAO,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAanH;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAInG;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAIhF;AAED,wBAAgB,0BAA0B,CACzC,OAAO,EAAE,qBAAqB,EAC9B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,OAAO,GAClB,OAAO,CAET;AAED,wBAAgB,8BAA8B,CAC7C,OAAO,EAAE,qBAAqB,EAC9B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,OAAO,GAClB,IAAI,CASN;AAED,wBAAgB,wBAAwB,CAAC,CAAC,EACzC,OAAO,EAAE,qBAAqB,EAC9B,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,EAC7D,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GACvD,OAAO,CAAC,CAAC,CAAC,CA6BZ;AAED,wBAAgB,mBAAmB,CAClC,KAAK,EAAE,OAAO,EACd,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,OAAO,GAAG,QAAQ,GAC3B,YAAY,EAAE,CA+BhB;AAED,kFAAkF;AAClF,wBAAgB,sBAAsB,CACrC,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,YAAY,EAAE,EACxB,MAAM,GAAE,uBAAuB,CAAC,QAAQ,CAAqB,EAC7D,MAAM,CAAC,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GACjC,OAAO,CAAC,YAAY,EAAE,CAAC,CAmCzB;AAED,wBAAgB,wBAAwB,CACvC,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,OAAO,EACjB,MAAM,EAAE,WAAW,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC,EACtD,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GACjC,OAAO,CAAC,YAAY,EAAE,CAAC,CAoBzB;AAED,kFAAkF;AAClF,wBAAsB,eAAe,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CAOtF;AAED,yDAAyD;AACzD,wBAAsB,cAAc,CAAC,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAG/G;AAED,wEAAwE;AACxE,wBAAsB,cAAc,CAAC,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAIrH","sourcesContent":["/**\n * Context transition pipeline for AgentSession: the strategy gate, the\n * transition fence, and the snapshot/restore/replace operations.\n *\n * Extracted from `agent-session.ts`. Every function here operates on the\n * internal session facade ({@link AgentSessionInternals}); `AgentSession`\n * keeps same-name delegates so call sites, dynamic dispatch, and test spies\n * keep working unchanged. Method-to-method calls that have a facade member go\n * through the session parameter (not direct function calls) to preserve that\n * dispatch — including `session._dispatchContextReplacedLifecycle`, whose\n * delegate stays on the class with the other lifecycle dispatchers and\n * forwards to `agent-session-lifecycle.ts`.\n */\n\nimport type { AgentMessage } from \"@agent-forge/agent-core\";\nimport type { AgentSessionInternals } from \"./agent-session-internal.ts\";\nimport type { CapabilityRuntime, ContextOperationOptions } from \"./extensions/index.ts\";\nimport { t } from \"./i18n/index.ts\";\n\nexport function requireContextStrategy(session: AgentSessionInternals): { runtime: CapabilityRuntime; name: string } {\n\tconst name = session._contextStrategyName;\n\tif (!name) {\n\t\tthrow new Error(t(\"Context strategy is not configured\"));\n\t}\n\tconst runtime = session._capabilityRuntime;\n\tif (!runtime) {\n\t\tthrow new Error(t(\"Capability runtime is not available\"));\n\t}\n\tif (!runtime.hasContextStrategy(name)) {\n\t\tthrow new Error(t(\"Configured context strategy is not registered: {name}\", { name }));\n\t}\n\treturn { runtime, name };\n}\n\nexport function requireIdleContextOperation(session: AgentSessionInternals, operation: string): void {\n\tif (!session.isIdle) {\n\t\tthrow new Error(t(\"Cannot {operation} while the session is running\", { operation }));\n\t}\n}\n\nexport function beginContextTransitionFence(session: AgentSessionInternals): void {\n\tsession._contextEpoch += 1;\n\tsession._contextTransitionAbortController.abort(\"context runtime replaced\");\n\tsession._contextTransitionAbortController = new AbortController();\n}\n\nexport function isContextTransitionCurrent(\n\tsession: AgentSessionInternals,\n\tepoch: number,\n\tallowReload: boolean,\n): boolean {\n\treturn !session.isDisposed && epoch === session._contextEpoch && (allowReload || !session._reloadInProgress);\n}\n\nexport function assertContextTransitionCurrent(\n\tsession: AgentSessionInternals,\n\tepoch: number,\n\tallowReload: boolean,\n): void {\n\tif (session._isContextTransitionCurrent(epoch, allowReload)) return;\n\tthrow new Error(\n\t\tsession.isDisposed\n\t\t\t? t(\"Session is disposed; context transition was cancelled\")\n\t\t\t: session._reloadInProgress\n\t\t\t\t? t(\"Session reload in progress; context transition was cancelled\")\n\t\t\t\t: t(\"Context transition was superseded\"),\n\t);\n}\n\nexport function enqueueContextTransition<T>(\n\tsession: AgentSessionInternals,\n\toperation: (epoch: number, signal: AbortSignal) => Promise<T>,\n\toptions?: { signal?: AbortSignal; allowReload?: boolean },\n): Promise<T> {\n\tconst allowReload = options?.allowReload ?? false;\n\tif (session.isDisposed) {\n\t\treturn Promise.reject(new Error(\"Session is disposed; context transition is unavailable\"));\n\t}\n\tif (session._reloadInProgress && !allowReload) {\n\t\treturn Promise.reject(new Error(\"Session reload in progress; context transition is unavailable\"));\n\t}\n\tconst epoch = session._contextEpoch;\n\tconst fenceSignal = session._contextTransitionAbortController.signal;\n\tconst signal = options?.signal ? AbortSignal.any([fenceSignal, options.signal]) : fenceSignal;\n\tconst previous = session._activeContextTransition;\n\t// Keep the failure visible to its original caller, but do not poison the\n\t// serialized tail: a later independent context operation may still run.\n\tconst tail = previous?.catch(() => undefined);\n\tconst queued = (tail ?? Promise.resolve()).then(() => {\n\t\tsession._assertContextTransitionCurrent(epoch, allowReload);\n\t\treturn operation(epoch, signal);\n\t});\n\tsession._activeContextTransition = queued;\n\tvoid queued.then(\n\t\t() => {\n\t\t\tif (session._activeContextTransition === queued) session._activeContextTransition = undefined;\n\t\t},\n\t\t() => {\n\t\t\tif (session._activeContextTransition === queued) session._activeContextTransition = undefined;\n\t\t},\n\t);\n\treturn queued;\n}\n\nexport function copyContextMessages(\n\tvalue: unknown,\n\tstrategyName: string,\n\tdirection: \"input\" | \"result\",\n): AgentMessage[] {\n\tif (\n\t\t!Array.isArray(value) ||\n\t\tvalue.some(\n\t\t\t(message) =>\n\t\t\t\ttypeof message !== \"object\" ||\n\t\t\t\tmessage === null ||\n\t\t\t\t!(\"role\" in message) ||\n\t\t\t\ttypeof (message as { role?: unknown }).role !== \"string\",\n\t\t)\n\t) {\n\t\tthrow new Error(\n\t\t\tdirection === \"result\"\n\t\t\t\t? t(\"Context strategy must return an AgentMessage array: {strategyName}\", { strategyName })\n\t\t\t\t: t(\"Context transition requires an AgentMessage array: {strategyName}\", { strategyName }),\n\t\t);\n\t}\n\ttry {\n\t\treturn structuredClone(value) as AgentMessage[];\n\t} catch (error) {\n\t\tthrow new Error(\n\t\t\tdirection === \"result\"\n\t\t\t\t? t(\"Context strategy must return structured-cloneable AgentMessage values: {strategyName}\", {\n\t\t\t\t\t\tstrategyName,\n\t\t\t\t\t})\n\t\t\t\t: t(\"Context transition requires structured-cloneable AgentMessage values: {strategyName}\", {\n\t\t\t\t\t\tstrategyName,\n\t\t\t\t\t}),\n\t\t\t{ cause: error },\n\t\t);\n\t}\n}\n\n/** Apply a persisted-context transition, including strategy-owned projections. */\nexport function applyContextTransition(\n\tsession: AgentSessionInternals,\n\tmessages: AgentMessage[],\n\treason: ContextOperationOptions[\"reason\"] = \"session_replace\",\n\tsignal?: AbortSignal,\n\toptions?: { allowReload?: boolean },\n): Promise<AgentMessage[]> {\n\treturn session._enqueueContextTransition(\n\t\tasync (epoch, transitionSignal) => {\n\t\t\tconst name = session._contextStrategyName;\n\t\t\tconst runtime = session._capabilityRuntime;\n\t\t\tif (name) {\n\t\t\t\tif (!runtime) {\n\t\t\t\t\tthrow new Error(t(\"Capability runtime is not available\"));\n\t\t\t\t}\n\t\t\t\tif (!runtime.hasContextStrategy(name)) {\n\t\t\t\t\tthrow new Error(t(\"Configured context strategy is not registered: {name}\", { name }));\n\t\t\t\t}\n\t\t\t\tconst replaced = await runtime.replaceContext(name, session._copyContextMessages(messages, name, \"input\"), {\n\t\t\t\t\tsignal: transitionSignal,\n\t\t\t\t\treason,\n\t\t\t\t\tsessionId: session.sessionId,\n\t\t\t\t});\n\t\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\t\tconst committed = session._copyContextMessages(replaced, name, \"result\");\n\t\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\t\tsession.agent.state.messages = committed;\n\t\t\t\tsession._contextRevision += 1;\n\t\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\t\tawait session._dispatchContextReplacedLifecycle(reason, name);\n\t\t\t\treturn committed;\n\t\t\t}\n\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\tsession.agent.state.messages = messages;\n\t\t\tsession._contextRevision += 1;\n\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\tawait session._dispatchContextReplacedLifecycle(reason);\n\t\t\treturn messages;\n\t\t},\n\t\t{ signal, allowReload: options?.allowReload },\n\t);\n}\n\nexport function restoreContextTransition(\n\tsession: AgentSessionInternals,\n\tsnapshot: unknown,\n\treason: NonNullable<ContextOperationOptions[\"reason\"]>,\n\toptions?: { allowReload?: boolean },\n): Promise<AgentMessage[]> {\n\treturn session._enqueueContextTransition(\n\t\tasync (epoch, signal) => {\n\t\t\tconst { runtime, name } = session._requireContextStrategy();\n\t\t\tconst restored = await runtime.restoreContext(name, snapshot, {\n\t\t\t\tsignal,\n\t\t\t\treason,\n\t\t\t\tsessionId: session.sessionId,\n\t\t\t});\n\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\tconst committed = session._copyContextMessages(restored, name, \"result\");\n\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\tsession.agent.state.messages = committed;\n\t\t\tsession._contextRevision += 1;\n\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\tawait session._dispatchContextReplacedLifecycle(reason, name);\n\t\t\treturn committed;\n\t\t},\n\t\t{ allowReload: options?.allowReload },\n\t);\n}\n\n/** Snapshot the current session messages with the configured context strategy. */\nexport async function snapshotContext(session: AgentSessionInternals): Promise<unknown> {\n\tsession._requireIdleContextOperation(\"snapshot context\");\n\tconst { runtime, name } = session._requireContextStrategy();\n\treturn runtime.snapshotContext(name, session._copyContextMessages(session.agent.state.messages, name, \"input\"), {\n\t\treason: \"reload\",\n\t\tsessionId: session.sessionId,\n\t});\n}\n\n/** Restore session messages from a strategy snapshot. */\nexport async function restoreContext(session: AgentSessionInternals, snapshot: unknown): Promise<AgentMessage[]> {\n\tsession._requireIdleContextOperation(\"restore context\");\n\treturn session._restoreContextTransition(snapshot, \"session_replace\");\n}\n\n/** Replace session messages through the configured context strategy. */\nexport async function replaceContext(session: AgentSessionInternals, context: AgentMessage[]): Promise<AgentMessage[]> {\n\tsession._requireIdleContextOperation(\"replace context\");\n\tconst { name } = session._requireContextStrategy();\n\treturn session._applyContextTransition(session._copyContextMessages(context, name, \"input\"), \"session_replace\");\n}\n"]}
@@ -11,23 +11,24 @@
11
11
  * delegate stays on the class with the other lifecycle dispatchers and
12
12
  * forwards to `agent-session-lifecycle.ts`.
13
13
  */
14
+ import { t } from "./i18n/index.js";
14
15
  export function requireContextStrategy(session) {
15
16
  const name = session._contextStrategyName;
16
17
  if (!name) {
17
- throw new Error("Context strategy is not configured");
18
+ throw new Error(t("Context strategy is not configured"));
18
19
  }
19
20
  const runtime = session._capabilityRuntime;
20
21
  if (!runtime) {
21
- throw new Error("Capability runtime is not available");
22
+ throw new Error(t("Capability runtime is not available"));
22
23
  }
23
24
  if (!runtime.hasContextStrategy(name)) {
24
- throw new Error(`Configured context strategy is not registered: ${name}`);
25
+ throw new Error(t("Configured context strategy is not registered: {name}", { name }));
25
26
  }
26
27
  return { runtime, name };
27
28
  }
28
29
  export function requireIdleContextOperation(session, operation) {
29
30
  if (!session.isIdle) {
30
- throw new Error(`Cannot ${operation} while the session is running`);
31
+ throw new Error(t("Cannot {operation} while the session is running", { operation }));
31
32
  }
32
33
  }
33
34
  export function beginContextTransitionFence(session) {
@@ -42,10 +43,10 @@ export function assertContextTransitionCurrent(session, epoch, allowReload) {
42
43
  if (session._isContextTransitionCurrent(epoch, allowReload))
43
44
  return;
44
45
  throw new Error(session.isDisposed
45
- ? "Session is disposed; context transition was cancelled"
46
+ ? t("Session is disposed; context transition was cancelled")
46
47
  : session._reloadInProgress
47
- ? "Session reload in progress; context transition was cancelled"
48
- : "Context transition was superseded");
48
+ ? t("Session reload in progress; context transition was cancelled")
49
+ : t("Context transition was superseded"));
49
50
  }
50
51
  export function enqueueContextTransition(session, operation, options) {
51
52
  const allowReload = options?.allowReload ?? false;
@@ -83,16 +84,20 @@ export function copyContextMessages(value, strategyName, direction) {
83
84
  !("role" in message) ||
84
85
  typeof message.role !== "string")) {
85
86
  throw new Error(direction === "result"
86
- ? `Context strategy must return an AgentMessage array: ${strategyName}`
87
- : `Context transition requires an AgentMessage array: ${strategyName}`);
87
+ ? t("Context strategy must return an AgentMessage array: {strategyName}", { strategyName })
88
+ : t("Context transition requires an AgentMessage array: {strategyName}", { strategyName }));
88
89
  }
89
90
  try {
90
91
  return structuredClone(value);
91
92
  }
92
93
  catch (error) {
93
94
  throw new Error(direction === "result"
94
- ? `Context strategy must return structured-cloneable AgentMessage values: ${strategyName}`
95
- : `Context transition requires structured-cloneable AgentMessage values: ${strategyName}`, { cause: error });
95
+ ? t("Context strategy must return structured-cloneable AgentMessage values: {strategyName}", {
96
+ strategyName,
97
+ })
98
+ : t("Context transition requires structured-cloneable AgentMessage values: {strategyName}", {
99
+ strategyName,
100
+ }), { cause: error });
96
101
  }
97
102
  }
98
103
  /** Apply a persisted-context transition, including strategy-owned projections. */
@@ -102,10 +107,10 @@ export function applyContextTransition(session, messages, reason = "session_repl
102
107
  const runtime = session._capabilityRuntime;
103
108
  if (name) {
104
109
  if (!runtime) {
105
- throw new Error("Capability runtime is not available");
110
+ throw new Error(t("Capability runtime is not available"));
106
111
  }
107
112
  if (!runtime.hasContextStrategy(name)) {
108
- throw new Error(`Configured context strategy is not registered: ${name}`);
113
+ throw new Error(t("Configured context strategy is not registered: {name}", { name }));
109
114
  }
110
115
  const replaced = await runtime.replaceContext(name, session._copyContextMessages(messages, name, "input"), {
111
116
  signal: transitionSignal,
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-context.js","sourceRoot":"","sources":["../../src/core/agent-session-context.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Context transition pipeline for AgentSession: the strategy gate, the\n * transition fence, and the snapshot/restore/replace operations.\n *\n * Extracted from `agent-session.ts`. Every function here operates on the\n * internal session facade ({@link AgentSessionInternals}); `AgentSession`\n * keeps same-name delegates so call sites, dynamic dispatch, and test spies\n * keep working unchanged. Method-to-method calls that have a facade member go\n * through the session parameter (not direct function calls) to preserve that\n * dispatch — including `session._dispatchContextReplacedLifecycle`, whose\n * delegate stays on the class with the other lifecycle dispatchers and\n * forwards to `agent-session-lifecycle.ts`.\n */\n\nimport type { AgentMessage } from \"@agent-forge/agent-core\";\nimport type { AgentSessionInternals } from \"./agent-session-internal.ts\";\nimport type { CapabilityRuntime, ContextOperationOptions } from \"./extensions/index.ts\";\n\nexport function requireContextStrategy(session: AgentSessionInternals): { runtime: CapabilityRuntime; name: string } {\n\tconst name = session._contextStrategyName;\n\tif (!name) {\n\t\tthrow new Error(\"Context strategy is not configured\");\n\t}\n\tconst runtime = session._capabilityRuntime;\n\tif (!runtime) {\n\t\tthrow new Error(\"Capability runtime is not available\");\n\t}\n\tif (!runtime.hasContextStrategy(name)) {\n\t\tthrow new Error(`Configured context strategy is not registered: ${name}`);\n\t}\n\treturn { runtime, name };\n}\n\nexport function requireIdleContextOperation(session: AgentSessionInternals, operation: string): void {\n\tif (!session.isIdle) {\n\t\tthrow new Error(`Cannot ${operation} while the session is running`);\n\t}\n}\n\nexport function beginContextTransitionFence(session: AgentSessionInternals): void {\n\tsession._contextEpoch += 1;\n\tsession._contextTransitionAbortController.abort(\"context runtime replaced\");\n\tsession._contextTransitionAbortController = new AbortController();\n}\n\nexport function isContextTransitionCurrent(\n\tsession: AgentSessionInternals,\n\tepoch: number,\n\tallowReload: boolean,\n): boolean {\n\treturn !session.isDisposed && epoch === session._contextEpoch && (allowReload || !session._reloadInProgress);\n}\n\nexport function assertContextTransitionCurrent(\n\tsession: AgentSessionInternals,\n\tepoch: number,\n\tallowReload: boolean,\n): void {\n\tif (session._isContextTransitionCurrent(epoch, allowReload)) return;\n\tthrow new Error(\n\t\tsession.isDisposed\n\t\t\t? \"Session is disposed; context transition was cancelled\"\n\t\t\t: session._reloadInProgress\n\t\t\t\t? \"Session reload in progress; context transition was cancelled\"\n\t\t\t\t: \"Context transition was superseded\",\n\t);\n}\n\nexport function enqueueContextTransition<T>(\n\tsession: AgentSessionInternals,\n\toperation: (epoch: number, signal: AbortSignal) => Promise<T>,\n\toptions?: { signal?: AbortSignal; allowReload?: boolean },\n): Promise<T> {\n\tconst allowReload = options?.allowReload ?? false;\n\tif (session.isDisposed) {\n\t\treturn Promise.reject(new Error(\"Session is disposed; context transition is unavailable\"));\n\t}\n\tif (session._reloadInProgress && !allowReload) {\n\t\treturn Promise.reject(new Error(\"Session reload in progress; context transition is unavailable\"));\n\t}\n\tconst epoch = session._contextEpoch;\n\tconst fenceSignal = session._contextTransitionAbortController.signal;\n\tconst signal = options?.signal ? AbortSignal.any([fenceSignal, options.signal]) : fenceSignal;\n\tconst previous = session._activeContextTransition;\n\t// Keep the failure visible to its original caller, but do not poison the\n\t// serialized tail: a later independent context operation may still run.\n\tconst tail = previous?.catch(() => undefined);\n\tconst queued = (tail ?? Promise.resolve()).then(() => {\n\t\tsession._assertContextTransitionCurrent(epoch, allowReload);\n\t\treturn operation(epoch, signal);\n\t});\n\tsession._activeContextTransition = queued;\n\tvoid queued.then(\n\t\t() => {\n\t\t\tif (session._activeContextTransition === queued) session._activeContextTransition = undefined;\n\t\t},\n\t\t() => {\n\t\t\tif (session._activeContextTransition === queued) session._activeContextTransition = undefined;\n\t\t},\n\t);\n\treturn queued;\n}\n\nexport function copyContextMessages(\n\tvalue: unknown,\n\tstrategyName: string,\n\tdirection: \"input\" | \"result\",\n): AgentMessage[] {\n\tif (\n\t\t!Array.isArray(value) ||\n\t\tvalue.some(\n\t\t\t(message) =>\n\t\t\t\ttypeof message !== \"object\" ||\n\t\t\t\tmessage === null ||\n\t\t\t\t!(\"role\" in message) ||\n\t\t\t\ttypeof (message as { role?: unknown }).role !== \"string\",\n\t\t)\n\t) {\n\t\tthrow new Error(\n\t\t\tdirection === \"result\"\n\t\t\t\t? `Context strategy must return an AgentMessage array: ${strategyName}`\n\t\t\t\t: `Context transition requires an AgentMessage array: ${strategyName}`,\n\t\t);\n\t}\n\ttry {\n\t\treturn structuredClone(value) as AgentMessage[];\n\t} catch (error) {\n\t\tthrow new Error(\n\t\t\tdirection === \"result\"\n\t\t\t\t? `Context strategy must return structured-cloneable AgentMessage values: ${strategyName}`\n\t\t\t\t: `Context transition requires structured-cloneable AgentMessage values: ${strategyName}`,\n\t\t\t{ cause: error },\n\t\t);\n\t}\n}\n\n/** Apply a persisted-context transition, including strategy-owned projections. */\nexport function applyContextTransition(\n\tsession: AgentSessionInternals,\n\tmessages: AgentMessage[],\n\treason: ContextOperationOptions[\"reason\"] = \"session_replace\",\n\tsignal?: AbortSignal,\n\toptions?: { allowReload?: boolean },\n): Promise<AgentMessage[]> {\n\treturn session._enqueueContextTransition(\n\t\tasync (epoch, transitionSignal) => {\n\t\t\tconst name = session._contextStrategyName;\n\t\t\tconst runtime = session._capabilityRuntime;\n\t\t\tif (name) {\n\t\t\t\tif (!runtime) {\n\t\t\t\t\tthrow new Error(\"Capability runtime is not available\");\n\t\t\t\t}\n\t\t\t\tif (!runtime.hasContextStrategy(name)) {\n\t\t\t\t\tthrow new Error(`Configured context strategy is not registered: ${name}`);\n\t\t\t\t}\n\t\t\t\tconst replaced = await runtime.replaceContext(name, session._copyContextMessages(messages, name, \"input\"), {\n\t\t\t\t\tsignal: transitionSignal,\n\t\t\t\t\treason,\n\t\t\t\t\tsessionId: session.sessionId,\n\t\t\t\t});\n\t\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\t\tconst committed = session._copyContextMessages(replaced, name, \"result\");\n\t\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\t\tsession.agent.state.messages = committed;\n\t\t\t\tsession._contextRevision += 1;\n\t\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\t\tawait session._dispatchContextReplacedLifecycle(reason, name);\n\t\t\t\treturn committed;\n\t\t\t}\n\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\tsession.agent.state.messages = messages;\n\t\t\tsession._contextRevision += 1;\n\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\tawait session._dispatchContextReplacedLifecycle(reason);\n\t\t\treturn messages;\n\t\t},\n\t\t{ signal, allowReload: options?.allowReload },\n\t);\n}\n\nexport function restoreContextTransition(\n\tsession: AgentSessionInternals,\n\tsnapshot: unknown,\n\treason: NonNullable<ContextOperationOptions[\"reason\"]>,\n\toptions?: { allowReload?: boolean },\n): Promise<AgentMessage[]> {\n\treturn session._enqueueContextTransition(\n\t\tasync (epoch, signal) => {\n\t\t\tconst { runtime, name } = session._requireContextStrategy();\n\t\t\tconst restored = await runtime.restoreContext(name, snapshot, {\n\t\t\t\tsignal,\n\t\t\t\treason,\n\t\t\t\tsessionId: session.sessionId,\n\t\t\t});\n\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\tconst committed = session._copyContextMessages(restored, name, \"result\");\n\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\tsession.agent.state.messages = committed;\n\t\t\tsession._contextRevision += 1;\n\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\tawait session._dispatchContextReplacedLifecycle(reason, name);\n\t\t\treturn committed;\n\t\t},\n\t\t{ allowReload: options?.allowReload },\n\t);\n}\n\n/** Snapshot the current session messages with the configured context strategy. */\nexport async function snapshotContext(session: AgentSessionInternals): Promise<unknown> {\n\tsession._requireIdleContextOperation(\"snapshot context\");\n\tconst { runtime, name } = session._requireContextStrategy();\n\treturn runtime.snapshotContext(name, session._copyContextMessages(session.agent.state.messages, name, \"input\"), {\n\t\treason: \"reload\",\n\t\tsessionId: session.sessionId,\n\t});\n}\n\n/** Restore session messages from a strategy snapshot. */\nexport async function restoreContext(session: AgentSessionInternals, snapshot: unknown): Promise<AgentMessage[]> {\n\tsession._requireIdleContextOperation(\"restore context\");\n\treturn session._restoreContextTransition(snapshot, \"session_replace\");\n}\n\n/** Replace session messages through the configured context strategy. */\nexport async function replaceContext(session: AgentSessionInternals, context: AgentMessage[]): Promise<AgentMessage[]> {\n\tsession._requireIdleContextOperation(\"replace context\");\n\tconst { name } = session._requireContextStrategy();\n\treturn session._applyContextTransition(session._copyContextMessages(context, name, \"input\"), \"session_replace\");\n}\n"]}
1
+ {"version":3,"file":"agent-session-context.js","sourceRoot":"","sources":["../../src/core/agent-session-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,EAAE,CAAC,EAAE,MAAM,iBAAiB,CAAC;AAEpC,MAAM,UAAU,sBAAsB,CAAC,OAA8B,EAAgD;IACpH,MAAM,IAAI,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,uDAAuD,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAAA,CACzB;AAED,MAAM,UAAU,2BAA2B,CAAC,OAA8B,EAAE,SAAiB,EAAQ;IACpG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,iDAAiD,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IACtF,CAAC;AAAA,CACD;AAED,MAAM,UAAU,2BAA2B,CAAC,OAA8B,EAAQ;IACjF,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC;IAC3B,OAAO,CAAC,iCAAiC,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC5E,OAAO,CAAC,iCAAiC,GAAG,IAAI,eAAe,EAAE,CAAC;AAAA,CAClE;AAED,MAAM,UAAU,0BAA0B,CACzC,OAA8B,EAC9B,KAAa,EACb,WAAoB,EACV;IACV,OAAO,CAAC,OAAO,CAAC,UAAU,IAAI,KAAK,KAAK,OAAO,CAAC,aAAa,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAAA,CAC7G;AAED,MAAM,UAAU,8BAA8B,CAC7C,OAA8B,EAC9B,KAAa,EACb,WAAoB,EACb;IACP,IAAI,OAAO,CAAC,2BAA2B,CAAC,KAAK,EAAE,WAAW,CAAC;QAAE,OAAO;IACpE,MAAM,IAAI,KAAK,CACd,OAAO,CAAC,UAAU;QACjB,CAAC,CAAC,CAAC,CAAC,uDAAuD,CAAC;QAC5D,CAAC,CAAC,OAAO,CAAC,iBAAiB;YAC1B,CAAC,CAAC,CAAC,CAAC,8DAA8D,CAAC;YACnE,CAAC,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAC1C,CAAC;AAAA,CACF;AAED,MAAM,UAAU,wBAAwB,CACvC,OAA8B,EAC9B,SAA6D,EAC7D,OAAyD,EAC5C;IACb,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,KAAK,CAAC;IAClD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC,CAAC;IAC5F,CAAC;IACD,IAAI,OAAO,CAAC,iBAAiB,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/C,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC,CAAC;IACnG,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC;IACpC,MAAM,WAAW,GAAG,OAAO,CAAC,iCAAiC,CAAC,MAAM,CAAC;IACrE,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IAC9F,MAAM,QAAQ,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAClD,yEAAyE;IACzE,wEAAwE;IACxE,MAAM,IAAI,GAAG,QAAQ,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACrD,OAAO,CAAC,+BAA+B,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC5D,OAAO,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAAA,CAChC,CAAC,CAAC;IACH,OAAO,CAAC,wBAAwB,GAAG,MAAM,CAAC;IAC1C,KAAK,MAAM,CAAC,IAAI,CACf,GAAG,EAAE,CAAC;QACL,IAAI,OAAO,CAAC,wBAAwB,KAAK,MAAM;YAAE,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC;IAAA,CAC9F,EACD,GAAG,EAAE,CAAC;QACL,IAAI,OAAO,CAAC,wBAAwB,KAAK,MAAM;YAAE,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC;IAAA,CAC9F,CACD,CAAC;IACF,OAAO,MAAM,CAAC;AAAA,CACd;AAED,MAAM,UAAU,mBAAmB,CAClC,KAAc,EACd,YAAoB,EACpB,SAA6B,EACZ;IACjB,IACC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,KAAK,CAAC,IAAI,CACT,CAAC,OAAO,EAAE,EAAE,CACX,OAAO,OAAO,KAAK,QAAQ;YAC3B,OAAO,KAAK,IAAI;YAChB,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC;YACpB,OAAQ,OAA8B,CAAC,IAAI,KAAK,QAAQ,CACzD,EACA,CAAC;QACF,MAAM,IAAI,KAAK,CACd,SAAS,KAAK,QAAQ;YACrB,CAAC,CAAC,CAAC,CAAC,oEAAoE,EAAE,EAAE,YAAY,EAAE,CAAC;YAC3F,CAAC,CAAC,CAAC,CAAC,mEAAmE,EAAE,EAAE,YAAY,EAAE,CAAC,CAC3F,CAAC;IACH,CAAC;IACD,IAAI,CAAC;QACJ,OAAO,eAAe,CAAC,KAAK,CAAmB,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CACd,SAAS,KAAK,QAAQ;YACrB,CAAC,CAAC,CAAC,CAAC,uFAAuF,EAAE;gBAC3F,YAAY;aACZ,CAAC;YACH,CAAC,CAAC,CAAC,CAAC,sFAAsF,EAAE;gBAC1F,YAAY;aACZ,CAAC,EACJ,EAAE,KAAK,EAAE,KAAK,EAAE,CAChB,CAAC;IACH,CAAC;AAAA,CACD;AAED,kFAAkF;AAClF,MAAM,UAAU,sBAAsB,CACrC,OAA8B,EAC9B,QAAwB,EACxB,MAAM,GAAsC,iBAAiB,EAC7D,MAAoB,EACpB,OAAmC,EACT;IAC1B,OAAO,OAAO,CAAC,yBAAyB,CACvC,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,OAAO,CAAC,oBAAoB,CAAC;QAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC;QAC3C,IAAI,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,OAAO,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAC;YAC3D,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,uDAAuD,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACvF,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,oBAAoB,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE;gBAC1G,MAAM,EAAE,gBAAgB;gBACxB,MAAM;gBACN,SAAS,EAAE,OAAO,CAAC,SAAS;aAC5B,CAAC,CAAC;YACH,OAAO,CAAC,+BAA+B,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,IAAI,KAAK,CAAC,CAAC;YAC9E,MAAM,SAAS,GAAG,OAAO,CAAC,oBAAoB,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YACzE,OAAO,CAAC,+BAA+B,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,IAAI,KAAK,CAAC,CAAC;YAC9E,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC;YACzC,OAAO,CAAC,gBAAgB,IAAI,CAAC,CAAC;YAC9B,OAAO,CAAC,+BAA+B,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,IAAI,KAAK,CAAC,CAAC;YAC9E,MAAM,OAAO,CAAC,iCAAiC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC9D,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,+BAA+B,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,IAAI,KAAK,CAAC,CAAC;QAC9E,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACxC,OAAO,CAAC,gBAAgB,IAAI,CAAC,CAAC;QAC9B,OAAO,CAAC,+BAA+B,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,IAAI,KAAK,CAAC,CAAC;QAC9E,MAAM,OAAO,CAAC,iCAAiC,CAAC,MAAM,CAAC,CAAC;QACxD,OAAO,QAAQ,CAAC;IAAA,CAChB,EACD,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,CAC7C,CAAC;AAAA,CACF;AAED,MAAM,UAAU,wBAAwB,CACvC,OAA8B,EAC9B,QAAiB,EACjB,MAAsD,EACtD,OAAmC,EACT;IAC1B,OAAO,OAAO,CAAC,yBAAyB,CACvC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;QACxB,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC;QAC5D,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE;YAC7D,MAAM;YACN,MAAM;YACN,SAAS,EAAE,OAAO,CAAC,SAAS;SAC5B,CAAC,CAAC;QACH,OAAO,CAAC,+BAA+B,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,IAAI,KAAK,CAAC,CAAC;QAC9E,MAAM,SAAS,GAAG,OAAO,CAAC,oBAAoB,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QACzE,OAAO,CAAC,+BAA+B,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,IAAI,KAAK,CAAC,CAAC;QAC9E,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC;QACzC,OAAO,CAAC,gBAAgB,IAAI,CAAC,CAAC;QAC9B,OAAO,CAAC,+BAA+B,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,IAAI,KAAK,CAAC,CAAC;QAC9E,MAAM,OAAO,CAAC,iCAAiC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9D,OAAO,SAAS,CAAC;IAAA,CACjB,EACD,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,CACrC,CAAC;AAAA,CACF;AAED,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAA8B,EAAoB;IACvF,OAAO,CAAC,4BAA4B,CAAC,kBAAkB,CAAC,CAAC;IACzD,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAC5D,OAAO,OAAO,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE;QAC/G,MAAM,EAAE,QAAQ;QAChB,SAAS,EAAE,OAAO,CAAC,SAAS;KAC5B,CAAC,CAAC;AAAA,CACH;AAED,yDAAyD;AACzD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAA8B,EAAE,QAAiB,EAA2B;IAChH,OAAO,CAAC,4BAA4B,CAAC,iBAAiB,CAAC,CAAC;IACxD,OAAO,OAAO,CAAC,yBAAyB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;AAAA,CACtE;AAED,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAA8B,EAAE,OAAuB,EAA2B;IACtH,OAAO,CAAC,4BAA4B,CAAC,iBAAiB,CAAC,CAAC;IACxD,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC;IACnD,OAAO,OAAO,CAAC,uBAAuB,CAAC,OAAO,CAAC,oBAAoB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAAA,CAChH","sourcesContent":["/**\n * Context transition pipeline for AgentSession: the strategy gate, the\n * transition fence, and the snapshot/restore/replace operations.\n *\n * Extracted from `agent-session.ts`. Every function here operates on the\n * internal session facade ({@link AgentSessionInternals}); `AgentSession`\n * keeps same-name delegates so call sites, dynamic dispatch, and test spies\n * keep working unchanged. Method-to-method calls that have a facade member go\n * through the session parameter (not direct function calls) to preserve that\n * dispatch — including `session._dispatchContextReplacedLifecycle`, whose\n * delegate stays on the class with the other lifecycle dispatchers and\n * forwards to `agent-session-lifecycle.ts`.\n */\n\nimport type { AgentMessage } from \"@agent-forge/agent-core\";\nimport type { AgentSessionInternals } from \"./agent-session-internal.ts\";\nimport type { CapabilityRuntime, ContextOperationOptions } from \"./extensions/index.ts\";\nimport { t } from \"./i18n/index.ts\";\n\nexport function requireContextStrategy(session: AgentSessionInternals): { runtime: CapabilityRuntime; name: string } {\n\tconst name = session._contextStrategyName;\n\tif (!name) {\n\t\tthrow new Error(t(\"Context strategy is not configured\"));\n\t}\n\tconst runtime = session._capabilityRuntime;\n\tif (!runtime) {\n\t\tthrow new Error(t(\"Capability runtime is not available\"));\n\t}\n\tif (!runtime.hasContextStrategy(name)) {\n\t\tthrow new Error(t(\"Configured context strategy is not registered: {name}\", { name }));\n\t}\n\treturn { runtime, name };\n}\n\nexport function requireIdleContextOperation(session: AgentSessionInternals, operation: string): void {\n\tif (!session.isIdle) {\n\t\tthrow new Error(t(\"Cannot {operation} while the session is running\", { operation }));\n\t}\n}\n\nexport function beginContextTransitionFence(session: AgentSessionInternals): void {\n\tsession._contextEpoch += 1;\n\tsession._contextTransitionAbortController.abort(\"context runtime replaced\");\n\tsession._contextTransitionAbortController = new AbortController();\n}\n\nexport function isContextTransitionCurrent(\n\tsession: AgentSessionInternals,\n\tepoch: number,\n\tallowReload: boolean,\n): boolean {\n\treturn !session.isDisposed && epoch === session._contextEpoch && (allowReload || !session._reloadInProgress);\n}\n\nexport function assertContextTransitionCurrent(\n\tsession: AgentSessionInternals,\n\tepoch: number,\n\tallowReload: boolean,\n): void {\n\tif (session._isContextTransitionCurrent(epoch, allowReload)) return;\n\tthrow new Error(\n\t\tsession.isDisposed\n\t\t\t? t(\"Session is disposed; context transition was cancelled\")\n\t\t\t: session._reloadInProgress\n\t\t\t\t? t(\"Session reload in progress; context transition was cancelled\")\n\t\t\t\t: t(\"Context transition was superseded\"),\n\t);\n}\n\nexport function enqueueContextTransition<T>(\n\tsession: AgentSessionInternals,\n\toperation: (epoch: number, signal: AbortSignal) => Promise<T>,\n\toptions?: { signal?: AbortSignal; allowReload?: boolean },\n): Promise<T> {\n\tconst allowReload = options?.allowReload ?? false;\n\tif (session.isDisposed) {\n\t\treturn Promise.reject(new Error(\"Session is disposed; context transition is unavailable\"));\n\t}\n\tif (session._reloadInProgress && !allowReload) {\n\t\treturn Promise.reject(new Error(\"Session reload in progress; context transition is unavailable\"));\n\t}\n\tconst epoch = session._contextEpoch;\n\tconst fenceSignal = session._contextTransitionAbortController.signal;\n\tconst signal = options?.signal ? AbortSignal.any([fenceSignal, options.signal]) : fenceSignal;\n\tconst previous = session._activeContextTransition;\n\t// Keep the failure visible to its original caller, but do not poison the\n\t// serialized tail: a later independent context operation may still run.\n\tconst tail = previous?.catch(() => undefined);\n\tconst queued = (tail ?? Promise.resolve()).then(() => {\n\t\tsession._assertContextTransitionCurrent(epoch, allowReload);\n\t\treturn operation(epoch, signal);\n\t});\n\tsession._activeContextTransition = queued;\n\tvoid queued.then(\n\t\t() => {\n\t\t\tif (session._activeContextTransition === queued) session._activeContextTransition = undefined;\n\t\t},\n\t\t() => {\n\t\t\tif (session._activeContextTransition === queued) session._activeContextTransition = undefined;\n\t\t},\n\t);\n\treturn queued;\n}\n\nexport function copyContextMessages(\n\tvalue: unknown,\n\tstrategyName: string,\n\tdirection: \"input\" | \"result\",\n): AgentMessage[] {\n\tif (\n\t\t!Array.isArray(value) ||\n\t\tvalue.some(\n\t\t\t(message) =>\n\t\t\t\ttypeof message !== \"object\" ||\n\t\t\t\tmessage === null ||\n\t\t\t\t!(\"role\" in message) ||\n\t\t\t\ttypeof (message as { role?: unknown }).role !== \"string\",\n\t\t)\n\t) {\n\t\tthrow new Error(\n\t\t\tdirection === \"result\"\n\t\t\t\t? t(\"Context strategy must return an AgentMessage array: {strategyName}\", { strategyName })\n\t\t\t\t: t(\"Context transition requires an AgentMessage array: {strategyName}\", { strategyName }),\n\t\t);\n\t}\n\ttry {\n\t\treturn structuredClone(value) as AgentMessage[];\n\t} catch (error) {\n\t\tthrow new Error(\n\t\t\tdirection === \"result\"\n\t\t\t\t? t(\"Context strategy must return structured-cloneable AgentMessage values: {strategyName}\", {\n\t\t\t\t\t\tstrategyName,\n\t\t\t\t\t})\n\t\t\t\t: t(\"Context transition requires structured-cloneable AgentMessage values: {strategyName}\", {\n\t\t\t\t\t\tstrategyName,\n\t\t\t\t\t}),\n\t\t\t{ cause: error },\n\t\t);\n\t}\n}\n\n/** Apply a persisted-context transition, including strategy-owned projections. */\nexport function applyContextTransition(\n\tsession: AgentSessionInternals,\n\tmessages: AgentMessage[],\n\treason: ContextOperationOptions[\"reason\"] = \"session_replace\",\n\tsignal?: AbortSignal,\n\toptions?: { allowReload?: boolean },\n): Promise<AgentMessage[]> {\n\treturn session._enqueueContextTransition(\n\t\tasync (epoch, transitionSignal) => {\n\t\t\tconst name = session._contextStrategyName;\n\t\t\tconst runtime = session._capabilityRuntime;\n\t\t\tif (name) {\n\t\t\t\tif (!runtime) {\n\t\t\t\t\tthrow new Error(t(\"Capability runtime is not available\"));\n\t\t\t\t}\n\t\t\t\tif (!runtime.hasContextStrategy(name)) {\n\t\t\t\t\tthrow new Error(t(\"Configured context strategy is not registered: {name}\", { name }));\n\t\t\t\t}\n\t\t\t\tconst replaced = await runtime.replaceContext(name, session._copyContextMessages(messages, name, \"input\"), {\n\t\t\t\t\tsignal: transitionSignal,\n\t\t\t\t\treason,\n\t\t\t\t\tsessionId: session.sessionId,\n\t\t\t\t});\n\t\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\t\tconst committed = session._copyContextMessages(replaced, name, \"result\");\n\t\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\t\tsession.agent.state.messages = committed;\n\t\t\t\tsession._contextRevision += 1;\n\t\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\t\tawait session._dispatchContextReplacedLifecycle(reason, name);\n\t\t\t\treturn committed;\n\t\t\t}\n\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\tsession.agent.state.messages = messages;\n\t\t\tsession._contextRevision += 1;\n\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\tawait session._dispatchContextReplacedLifecycle(reason);\n\t\t\treturn messages;\n\t\t},\n\t\t{ signal, allowReload: options?.allowReload },\n\t);\n}\n\nexport function restoreContextTransition(\n\tsession: AgentSessionInternals,\n\tsnapshot: unknown,\n\treason: NonNullable<ContextOperationOptions[\"reason\"]>,\n\toptions?: { allowReload?: boolean },\n): Promise<AgentMessage[]> {\n\treturn session._enqueueContextTransition(\n\t\tasync (epoch, signal) => {\n\t\t\tconst { runtime, name } = session._requireContextStrategy();\n\t\t\tconst restored = await runtime.restoreContext(name, snapshot, {\n\t\t\t\tsignal,\n\t\t\t\treason,\n\t\t\t\tsessionId: session.sessionId,\n\t\t\t});\n\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\tconst committed = session._copyContextMessages(restored, name, \"result\");\n\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\tsession.agent.state.messages = committed;\n\t\t\tsession._contextRevision += 1;\n\t\t\tsession._assertContextTransitionCurrent(epoch, options?.allowReload ?? false);\n\t\t\tawait session._dispatchContextReplacedLifecycle(reason, name);\n\t\t\treturn committed;\n\t\t},\n\t\t{ allowReload: options?.allowReload },\n\t);\n}\n\n/** Snapshot the current session messages with the configured context strategy. */\nexport async function snapshotContext(session: AgentSessionInternals): Promise<unknown> {\n\tsession._requireIdleContextOperation(\"snapshot context\");\n\tconst { runtime, name } = session._requireContextStrategy();\n\treturn runtime.snapshotContext(name, session._copyContextMessages(session.agent.state.messages, name, \"input\"), {\n\t\treason: \"reload\",\n\t\tsessionId: session.sessionId,\n\t});\n}\n\n/** Restore session messages from a strategy snapshot. */\nexport async function restoreContext(session: AgentSessionInternals, snapshot: unknown): Promise<AgentMessage[]> {\n\tsession._requireIdleContextOperation(\"restore context\");\n\treturn session._restoreContextTransition(snapshot, \"session_replace\");\n}\n\n/** Replace session messages through the configured context strategy. */\nexport async function replaceContext(session: AgentSessionInternals, context: AgentMessage[]): Promise<AgentMessage[]> {\n\tsession._requireIdleContextOperation(\"replace context\");\n\tconst { name } = session._requireContextStrategy();\n\treturn session._applyContextTransition(session._copyContextMessages(context, name, \"input\"), \"session_replace\");\n}\n"]}
@@ -74,12 +74,6 @@ export interface AgentSessionInternals {
74
74
  _overflowRecoveryAttempted: boolean;
75
75
  /** 已完成的溢出裁剪级数(0 = 未裁剪);与 `_overflowRecoveryAttempted` 同点位复位。 */
76
76
  _overflowTrimStage: number;
77
- /**
78
- * microcompact 冷却(按模型请求计数,0 = 不冷却):relief 落地时置满,
79
- * 每次 assistant message_end 减 1(下限 0);冷却期内阈值 decide 以
80
- * `microcompactEnabled: false` 关闭便宜缓解(背景注释见 agent-session.ts)。
81
- */
82
- _microcompactCooldown: number;
83
77
  _activeCompactionPromise: Promise<unknown> | undefined;
84
78
  _branchSummaryAbortController: AbortController | undefined;
85
79
  _branchSummaryPromise: Promise<unknown> | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-internal.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-internal.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shared internal contract and snapshot helpers for the agent-session\n * submodules (agent-session-bash.ts, agent-session-compaction.ts,\n * agent-session-context.ts, agent-session-lifecycle.ts, agent-session-loop.ts,\n * agent-session-retry.ts, agent-session-tools.ts, agent-session-model.ts;\n * agent-session-runtime.ts consumes the class directly).\n *\n * `AgentSession` satisfies {@link AgentSessionInternals} structurally through a\n * single internal cast; members mirror the private state and helpers that moved\n * into the submodules. Same-name delegates stay on the class so call sites,\n * dynamic dispatch, and test spies keep working unchanged.\n */\n\nimport type {\n\tAgent,\n\tAgentContext,\n\tAgentEvent,\n\tAgentLoopTurnUpdate,\n\tAgentMessage,\n\tAgentTool,\n\tPrepareNextTurnContext,\n\tThinkingLevel,\n} from \"@agent-forge/agent-core\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tImageContent,\n\tModel,\n\tTextContent,\n\tToolResultMessage,\n} from \"@agent-forge/ai/compat\";\nimport type {\n\tAgentSessionEvent,\n\tModelCycleResult,\n\tModelMutationOptions,\n\tSessionStats,\n\tTurnAbortReason,\n} from \"./agent-session.ts\";\nimport type { CompactionCancelledResult } from \"./agent-session-compaction.ts\";\nimport type { LoopExecutor } from \"./agent-session-loop-runner.ts\";\nimport type { ForkableUserMessage } from \"./agent-session-projection.ts\";\nimport type { BashResult } from \"./bash-executor.ts\";\nimport type { CompactionResult } from \"./compaction/index.ts\";\nimport type { CapabilityPluginHandle, CapabilityRuntime, ContextOperationOptions } from \"./extensions/index.ts\";\nimport type { ModelStreamEventDataV1 } from \"./extensions/lifecycle-catalog.ts\";\nimport type { ContextUsage, ExecutionFactsV1 } from \"./extensions/public-api.ts\";\nimport type { HostLogger } from \"./logger.ts\";\nimport type { BashExecutionMessage, CustomMessage } from \"./messages.ts\";\nimport type { ModelRuntime } from \"./model-runtime.ts\";\nimport type { PromptTemplate } from \"./prompt-templates.ts\";\nimport type { ResourceLoader } from \"./resource-loader.ts\";\nimport type { BranchSummaryEntry, SessionManager } from \"./session-manager.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\nimport type { Skill } from \"./skills.ts\";\nimport type { SourceInfo } from \"./source-info.ts\";\nimport type { BuildSystemPromptOptions } from \"./system-prompt.ts\";\nimport type { BashOperations } from \"./tools/bash.ts\";\nimport type { ToolDefinition, ToolInfo } from \"./tools/tool-definition.ts\";\n\n/** Registry entry for one tool definition with its source metadata. */\nexport interface ToolDefinitionEntry {\n\tdefinition: ToolDefinition;\n\tsourceInfo: SourceInfo;\n}\n\n/**\n * A session operation was cancelled by user intent (abort, reload barrier) — a\n * normal outcome, never a failure. Host boundaries resolve with structured\n * cancelled results instead of surfacing this as an error.\n */\nexport class SessionCancelledError extends Error {\n\treadonly reason: \"reload\" | \"signal\";\n\n\tconstructor(reason: SessionCancelledError[\"reason\"]) {\n\t\tsuper(`Session operation cancelled: ${reason}`);\n\t\tthis.name = \"SessionCancelledError\";\n\t\tthis.reason = reason;\n\t}\n}\n\n/**\n * Deep-clone a session value and freeze the clone so lifecycle payloads cannot\n * be mutated in place. The implementation lives on the public extension face\n * (`./extensions/public-api.ts`) so first-party and third-party plugins share\n * the same payload-projection contract; re-exported here for the host-internal\n * session submodules.\n */\nexport { detachedSessionSnapshot } from \"./extensions/public-api.ts\";\n\n/** JSON-safe clone for lifecycle payloads that must survive structured clone failures. */\nexport function jsonSafeSessionSnapshot<T>(value: T): T {\n\tconst serialized = JSON.stringify(value);\n\t// v8 ignore next -- 对象消息序列化永远返回字符串,undefined 分支不可达\n\treturn serialized === undefined ? (null as T) : (JSON.parse(serialized) as T);\n}\n\nexport interface AgentSessionInternals {\n\treadonly agent: Agent;\n\treadonly sessionManager: SessionManager;\n\treadonly settingsManager: SettingsManager;\n\treadonly _modelRuntime: ModelRuntime;\n\treadonly model: Model<Api> | undefined;\n\treadonly thinkingLevel: ThinkingLevel;\n\treadonly sessionId: string;\n\treadonly isStreaming: boolean;\n\t/** Idle gate for public context operations (compile-time private getter on AgentSession). */\n\treadonly isIdle: boolean;\n\n\t// Internal session state (compile-time private on AgentSession)\n\t_compactionQueue: Promise<void>;\n\t_compactionAbortController: AbortController | undefined;\n\t_autoCompactionAbortController: AbortController | undefined;\n\t_overflowRecoveryAttempted: boolean;\n\t/** 已完成的溢出裁剪级数(0 = 未裁剪);与 `_overflowRecoveryAttempted` 同点位复位。 */\n\t_overflowTrimStage: number;\n\t/**\n\t * microcompact 冷却(按模型请求计数,0 = 不冷却):relief 落地时置满,\n\t * 每次 assistant message_end 减 1(下限 0);冷却期内阈值 decide 以\n\t * `microcompactEnabled: false` 关闭便宜缓解(背景注释见 agent-session.ts)。\n\t */\n\t_microcompactCooldown: number;\n\t_activeCompactionPromise: Promise<unknown> | undefined;\n\t_branchSummaryAbortController: AbortController | undefined;\n\t_branchSummaryPromise: Promise<unknown> | undefined;\n\t_resolveBranchSummaryPromise: (() => void) | undefined;\n\t_reloadInProgress: boolean;\n\t_policyDecisionAbortController: AbortController | undefined;\n\t_retryAbortController: AbortController | undefined;\n\t_retryAttempt: number;\n\t_pendingRetryDecision:\n\t\t| { message: AssistantMessage; decision: Awaited<ReturnType<CapabilityRuntime[\"decideRetry\"]>> }\n\t\t| undefined;\n\t_isAgentRunActive: boolean;\n\t_currentRunAborted: boolean;\n\t_lastAbortReason: TurnAbortReason | undefined;\n\t_lastAssistantMessage: AssistantMessage | undefined;\n\n\t// Lifecycle dispatch state (compile-time private on AgentSession)\n\treadonly _modelStreamState: { streamId: string; sequence: number } | undefined;\n\t/** Correlation id for the active prompt run's lifecycle dispatches; written by the loop-runner via this facade. */\n\t_turnCorrelationId: string | undefined;\n\t_turnCorrelationCounter: number;\n\t/**\n\t * Host-process logger seam (会话轨迹第 2 期,设计 §5.2): one-line process log\n\t * beside lifecycle dispatches that report genuine failures (compaction\n\t * failed). Undefined when no hostLogger was configured; call sites treat it\n\t * as a no-op.\n\t */\n\treadonly _hostLogger?: HostLogger;\n\n\t// Bash execution state (compile-time private on AgentSession)\n\treadonly _bashAbortControllers: Set<AbortController>;\n\treadonly _activeBashPromises: Set<Promise<unknown>>;\n\t_bashEpoch: number;\n\t_pendingBashMessages: BashExecutionMessage[];\n\treadonly isDisposed: boolean;\n\n\t_capabilityRuntime: CapabilityRuntime | undefined;\n\t_compactionPolicyName: string;\n\t_overflowPolicyName: string;\n\t_branchSummaryPolicyName: string;\n\t_retryPolicyName: string;\n\t_runLoopStrategyName: string;\n\t/** Internal loop-executor seam (D-043 G3): set to replace the default prompt/continue drive. No public config; distinct from `_runLoopStrategyName` (a per-continuation veto policy). */\n\t_loopExecutor: LoopExecutor | undefined;\n\n\t// Helpers that remain on AgentSession\n\t_emit(event: AgentSessionEvent): void;\n\t_resolveIdleWaitIfIdle(): void;\n\t_flushPendingCustomMessages(): void;\n\t_emitAgentSettled(): Promise<void>;\n\t_observeLifecycleDeliveryError(error: unknown, extensionPath: string, event: string): void;\n\tabort(): Promise<void>;\n\t_abortInternal(): Promise<void>;\n\n\t// Context-transition state and delegates forwarding to agent-session-context.ts\n\t/** Generation fence for context projections that may outlive a runtime replacement. */\n\t_contextEpoch: number;\n\t_contextTransitionAbortController: AbortController;\n\t/** Serializes context transitions and lets reload/dispose drain them before teardown. */\n\t_activeContextTransition: Promise<unknown> | undefined;\n\t/** Monotonic revision for the public context snapshot/commit facade. */\n\t_contextRevision: number;\n\t/** Serializes public context commits so expectedRevision is a real CAS fence. */\n\t_contextCommitQueue: Promise<void>;\n\t/** Configured external context strategy name, written only by the constructor. */\n\treadonly _contextStrategyName: string | undefined;\n\t_requireContextStrategy(): { runtime: CapabilityRuntime; name: string };\n\t_requireIdleContextOperation(operation: string): void;\n\t_beginContextTransitionFence(): void;\n\t_isContextTransitionCurrent(epoch: number, allowReload: boolean): boolean;\n\t_assertContextTransitionCurrent(epoch: number, allowReload: boolean): void;\n\t_enqueueContextTransition<T>(\n\t\toperation: (epoch: number, signal: AbortSignal) => Promise<T>,\n\t\toptions?: { signal?: AbortSignal; allowReload?: boolean },\n\t): Promise<T>;\n\t_copyContextMessages(value: unknown, strategyName: string, direction: \"input\" | \"result\"): AgentMessage[];\n\t_applyContextTransition(\n\t\tmessages: AgentMessage[],\n\t\treason?: ContextOperationOptions[\"reason\"],\n\t\tsignal?: AbortSignal,\n\t\toptions?: { allowReload?: boolean },\n\t): Promise<AgentMessage[]>;\n\t_restoreContextTransition(\n\t\tsnapshot: unknown,\n\t\treason: NonNullable<ContextOperationOptions[\"reason\"]>,\n\t\toptions?: { allowReload?: boolean },\n\t): Promise<AgentMessage[]>;\n\tsnapshotContext(): Promise<unknown>;\n\trestoreContext(snapshot: unknown): Promise<AgentMessage[]>;\n\treplaceContext(context: AgentMessage[]): Promise<AgentMessage[]>;\n\n\t// Model-scope state and delegates forwarding to agent-session-model.ts\n\t_scopedModels: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n\t/** Public scoped-models getter (Legacy 迁移 R1): submodules read via this instead of the private field. */\n\treadonly scopedModels: ReadonlyArray<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n\tsetModel(model: Model<Api>, options?: ModelMutationOptions): Promise<void>;\n\tsetThinkingLevel(level: ThinkingLevel, options?: ModelMutationOptions): void;\n\t_emitModelSelect(\n\t\tnextModel: Model<Api>,\n\t\tpreviousModel: Model<Api> | undefined,\n\t\tsource: \"set\" | \"cycle\" | \"restore\",\n\t): Promise<void>;\n\t_addPersistedDefaultToNonEmptyScope(model: Model<Api>): void;\n\t_getThinkingLevelForModelSwitch(targetModel?: Model<Api>, explicitLevel?: ThinkingLevel): ThinkingLevel;\n\t_cycleScopedModel(\n\t\tdirection: \"forward\" | \"backward\",\n\t\toptions: ModelMutationOptions,\n\t): Promise<ModelCycleResult | undefined>;\n\t_cycleAvailableModel(\n\t\tdirection: \"forward\" | \"backward\",\n\t\toptions: ModelMutationOptions,\n\t): Promise<ModelCycleResult | undefined>;\n\n\t// Run-loop wiring state and delegates forwarding to agent-session-loop.ts\n\t/** The agent's construction-time prepare adapter, captured once by the loop wiring install. */\n\t_initialPrepareNextTurn:\n\t\t| ((\n\t\t\t\tcontext: PrepareNextTurnContext,\n\t\t\t\tsignal?: AbortSignal,\n\t\t ) => Promise<AgentLoopTurnUpdate | undefined> | AgentLoopTurnUpdate | undefined)\n\t\t| undefined;\n\n\t// Delegates forwarding to the submodule functions\n\t_compactBeforeNextAssistantResponse(context: AgentContext, signal?: AbortSignal): Promise<AgentContext>;\n\t_enqueueCompaction<T>(operation: () => Promise<T>): Promise<T>;\n\t_compactInternal(customInstructions?: string): Promise<CompactionResult>;\n\t_checkCompaction(\n\t\tassistantMessage: AssistantMessage,\n\t\tskipAbortedCheck?: boolean,\n\t\tsignal?: AbortSignal,\n\t): Promise<boolean>;\n\t_runAutoCompaction(reason: \"overflow\" | \"threshold\", willRetry: boolean): Promise<boolean>;\n\t_willRetryAfterAgentEnd(event: Extract<AgentEvent, { type: \"agent_end\" }>, signal?: AbortSignal): Promise<boolean>;\n\t_isRetryableError(message: AssistantMessage, execution?: ExecutionFactsV1, signal?: AbortSignal): Promise<boolean>;\n\t_prepareRetry(\n\t\tmessage: AssistantMessage,\n\t\tprecomputedDecision?: Awaited<ReturnType<CapabilityRuntime[\"decideRetry\"]>>,\n\t): Promise<boolean>;\n\tnavigateTree(\n\t\ttargetId: string,\n\t\toptions?: { summarize?: boolean; customInstructions?: string; replaceInstructions?: boolean; label?: string },\n\t): Promise<{ editorText?: string; cancelled: boolean; aborted?: boolean; summaryEntry?: BranchSummaryEntry }>;\n\n\t// Lifecycle delegates forwarding to agent-session-lifecycle.ts\n\t_dispatchModelStreamLifecycle(\n\t\tmessage: AgentMessage,\n\t\teventName: ModelStreamEventDataV1[\"event\"],\n\t\tphase: ModelStreamEventDataV1[\"phase\"],\n\t): Promise<void>;\n\t_dispatchContextReplacedLifecycle(\n\t\treason: NonNullable<ContextOperationOptions[\"reason\"]>,\n\t\tstrategyName?: string,\n\t): Promise<void>;\n\t_dispatchModelResponseLifecycle(message: AssistantMessage, entryId: string): Promise<void>;\n\t_dispatchToolCommitLifecycle(message: ToolResultMessage, entryId: string): Promise<void>;\n\t_dispatchToolResultLifecycle(message: ToolResultMessage, entryId: string): Promise<void>;\n\t_dispatchSessionReloadLifecycle(generation: number): Promise<void>;\n\n\t// Bash delegates forwarding to agent-session-bash.ts\n\tcaptureBashEpoch(): number;\n\tisBashEpochCurrent(epoch: number): boolean;\n\temitUserBash(excludeFromContext: boolean): void;\n\texecuteBash(\n\t\tcommand: string,\n\t\tonChunk?: (chunk: string) => void,\n\t\toptions?: { excludeFromContext?: boolean; id?: string; operations?: BashOperations },\n\t): Promise<BashResult>;\n\trecordBashResult(\n\t\tcommand: string,\n\t\tresult: BashResult,\n\t\toptions?: { excludeFromContext?: boolean; epoch?: number },\n\t): void;\n\tabortBash(): void;\n\t_flushPendingBashMessages(): void;\n\n\t// Tool registry state (compile-time private on AgentSession)\n\t_resourceLoader: ResourceLoader;\n\t_customTools: ToolDefinition[];\n\t_deferredToolPluginIds: ReadonlySet<string>;\n\t_baseToolDefinitions: Map<string, ToolDefinition>;\n\t_baseToolSources: Map<string, SourceInfo>;\n\t_toolRegistry: Map<string, AgentTool>;\n\t_toolDefinitions: Map<string, ToolDefinitionEntry>;\n\t_toolPromptSnippets: Map<string, string>;\n\t_toolPromptGuidelines: Map<string, string[]>;\n\t_allowedToolNames: Set<string> | undefined;\n\t_excludedToolNames: Set<string> | undefined;\n\t_baseSystemPrompt: string;\n\t_baseSystemPromptOptions: BuildSystemPromptOptions;\n\t_systemPromptOverride: string | undefined;\n\t_orientationPrompt: string | undefined;\n\t_preferenceCard: string | undefined;\n\t_capabilitySkillsFilter: ((skills: Skill[]) => Skill[]) | undefined;\n\t_bootstrapSkillsHandle: CapabilityPluginHandle | undefined;\n\t_cwd: string;\n\n\tgetActiveToolNames(): string[];\n\n\t// Tool registry delegates forwarding to agent-session-tools.ts\n\tgetAllTools(): ToolInfo[];\n\tgetToolDefinition(name: string): ToolDefinition | undefined;\n\tsetActiveToolsByName(toolNames: string[]): void;\n\t_rebuildSystemPrompt(toolNames: string[]): string;\n\t_refreshToolRegistry(options?: { activeToolNames?: string[]; includeAllExtensionTools?: boolean }): void;\n\t_syncCapabilityTools(): void;\n\t_getCapabilitySkills(): Skill[];\n\t_getAvailableSkills(): Skill[];\n\t_validateCapabilitySkillConflicts(): void;\n\t_refreshBootstrapSkills(): Promise<void>;\n\n\t// Read-only projections and delegates forwarding to agent-session-projection.ts\n\treadonly sessionFile: string | undefined;\n\treadonly messages: AgentMessage[];\n\treadonly systemPrompt: string;\n\treadonly promptTemplates: ReadonlyArray<PromptTemplate>;\n\treadonly pendingMessageCount: number;\n\tgetSessionStats(): SessionStats;\n\tgetContextUsage(): ContextUsage | undefined;\n\tgetUserMessagesForForking(): ForkableUserMessage[];\n\texportToHtml(outputPath?: string, options?: { themeName?: string }): Promise<string>;\n\texportToJsonl(outputPath?: string): string;\n\tgetLastAssistantText(): string | undefined;\n\n\t// Resource-discovery delegates forwarding to agent-session-extensions.ts\n\textendResourcesFromExtensions(reason: \"startup\" | \"reload\"): Promise<void>;\n\tbuildExtensionResourcePaths(entries: Array<{ path: string; extensionPath: string }>): Array<{\n\t\tpath: string;\n\t\tmetadata: { source: string; scope: \"temporary\"; origin: \"top-level\"; baseDir?: string };\n\t}>;\n\tgetExtensionSourceLabel(extensionPath: string): string;\n\n\t// Prompt/queue surface consumed by the extension binding closures\n\tsendCustomMessage<T = unknown>(\n\t\tmessage: Pick<CustomMessage<T>, \"customType\" | \"content\" | \"display\" | \"details\">,\n\t\toptions?: { triggerTurn?: boolean; deliverAs?: \"steer\" | \"followUp\" | \"nextTurn\" },\n\t): Promise<void>;\n\tsendUserMessage(\n\t\tcontent: string | (TextContent | ImageContent)[],\n\t\toptions?: { deliverAs?: \"steer\" | \"followUp\"; expandPromptTemplates?: boolean },\n\t): Promise<void>;\n\tsetSessionName(name: string): void;\n\tcompact(customInstructions?: string): Promise<CompactionResult | CompactionCancelledResult>;\n}\n"]}
1
+ {"version":3,"file":"agent-session-internal.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-internal.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shared internal contract and snapshot helpers for the agent-session\n * submodules (agent-session-bash.ts, agent-session-compaction.ts,\n * agent-session-context.ts, agent-session-lifecycle.ts, agent-session-loop.ts,\n * agent-session-retry.ts, agent-session-tools.ts, agent-session-model.ts;\n * agent-session-runtime.ts consumes the class directly).\n *\n * `AgentSession` satisfies {@link AgentSessionInternals} structurally through a\n * single internal cast; members mirror the private state and helpers that moved\n * into the submodules. Same-name delegates stay on the class so call sites,\n * dynamic dispatch, and test spies keep working unchanged.\n */\n\nimport type {\n\tAgent,\n\tAgentContext,\n\tAgentEvent,\n\tAgentLoopTurnUpdate,\n\tAgentMessage,\n\tAgentTool,\n\tPrepareNextTurnContext,\n\tThinkingLevel,\n} from \"@agent-forge/agent-core\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tImageContent,\n\tModel,\n\tTextContent,\n\tToolResultMessage,\n} from \"@agent-forge/ai/compat\";\nimport type {\n\tAgentSessionEvent,\n\tModelCycleResult,\n\tModelMutationOptions,\n\tSessionStats,\n\tTurnAbortReason,\n} from \"./agent-session.ts\";\nimport type { CompactionCancelledResult } from \"./agent-session-compaction.ts\";\nimport type { LoopExecutor } from \"./agent-session-loop-runner.ts\";\nimport type { ForkableUserMessage } from \"./agent-session-projection.ts\";\nimport type { BashResult } from \"./bash-executor.ts\";\nimport type { CompactionResult } from \"./compaction/index.ts\";\nimport type { CapabilityPluginHandle, CapabilityRuntime, ContextOperationOptions } from \"./extensions/index.ts\";\nimport type { ModelStreamEventDataV1 } from \"./extensions/lifecycle-catalog.ts\";\nimport type { ContextUsage, ExecutionFactsV1 } from \"./extensions/public-api.ts\";\nimport type { HostLogger } from \"./logger.ts\";\nimport type { BashExecutionMessage, CustomMessage } from \"./messages.ts\";\nimport type { ModelRuntime } from \"./model-runtime.ts\";\nimport type { PromptTemplate } from \"./prompt-templates.ts\";\nimport type { ResourceLoader } from \"./resource-loader.ts\";\nimport type { BranchSummaryEntry, SessionManager } from \"./session-manager.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\nimport type { Skill } from \"./skills.ts\";\nimport type { SourceInfo } from \"./source-info.ts\";\nimport type { BuildSystemPromptOptions } from \"./system-prompt.ts\";\nimport type { BashOperations } from \"./tools/bash.ts\";\nimport type { ToolDefinition, ToolInfo } from \"./tools/tool-definition.ts\";\n\n/** Registry entry for one tool definition with its source metadata. */\nexport interface ToolDefinitionEntry {\n\tdefinition: ToolDefinition;\n\tsourceInfo: SourceInfo;\n}\n\n/**\n * A session operation was cancelled by user intent (abort, reload barrier) — a\n * normal outcome, never a failure. Host boundaries resolve with structured\n * cancelled results instead of surfacing this as an error.\n */\nexport class SessionCancelledError extends Error {\n\treadonly reason: \"reload\" | \"signal\";\n\n\tconstructor(reason: SessionCancelledError[\"reason\"]) {\n\t\tsuper(`Session operation cancelled: ${reason}`);\n\t\tthis.name = \"SessionCancelledError\";\n\t\tthis.reason = reason;\n\t}\n}\n\n/**\n * Deep-clone a session value and freeze the clone so lifecycle payloads cannot\n * be mutated in place. The implementation lives on the public extension face\n * (`./extensions/public-api.ts`) so first-party and third-party plugins share\n * the same payload-projection contract; re-exported here for the host-internal\n * session submodules.\n */\nexport { detachedSessionSnapshot } from \"./extensions/public-api.ts\";\n\n/** JSON-safe clone for lifecycle payloads that must survive structured clone failures. */\nexport function jsonSafeSessionSnapshot<T>(value: T): T {\n\tconst serialized = JSON.stringify(value);\n\t// v8 ignore next -- 对象消息序列化永远返回字符串,undefined 分支不可达\n\treturn serialized === undefined ? (null as T) : (JSON.parse(serialized) as T);\n}\n\nexport interface AgentSessionInternals {\n\treadonly agent: Agent;\n\treadonly sessionManager: SessionManager;\n\treadonly settingsManager: SettingsManager;\n\treadonly _modelRuntime: ModelRuntime;\n\treadonly model: Model<Api> | undefined;\n\treadonly thinkingLevel: ThinkingLevel;\n\treadonly sessionId: string;\n\treadonly isStreaming: boolean;\n\t/** Idle gate for public context operations (compile-time private getter on AgentSession). */\n\treadonly isIdle: boolean;\n\n\t// Internal session state (compile-time private on AgentSession)\n\t_compactionQueue: Promise<void>;\n\t_compactionAbortController: AbortController | undefined;\n\t_autoCompactionAbortController: AbortController | undefined;\n\t_overflowRecoveryAttempted: boolean;\n\t/** 已完成的溢出裁剪级数(0 = 未裁剪);与 `_overflowRecoveryAttempted` 同点位复位。 */\n\t_overflowTrimStage: number;\n\t_activeCompactionPromise: Promise<unknown> | undefined;\n\t_branchSummaryAbortController: AbortController | undefined;\n\t_branchSummaryPromise: Promise<unknown> | undefined;\n\t_resolveBranchSummaryPromise: (() => void) | undefined;\n\t_reloadInProgress: boolean;\n\t_policyDecisionAbortController: AbortController | undefined;\n\t_retryAbortController: AbortController | undefined;\n\t_retryAttempt: number;\n\t_pendingRetryDecision:\n\t\t| { message: AssistantMessage; decision: Awaited<ReturnType<CapabilityRuntime[\"decideRetry\"]>> }\n\t\t| undefined;\n\t_isAgentRunActive: boolean;\n\t_currentRunAborted: boolean;\n\t_lastAbortReason: TurnAbortReason | undefined;\n\t_lastAssistantMessage: AssistantMessage | undefined;\n\n\t// Lifecycle dispatch state (compile-time private on AgentSession)\n\treadonly _modelStreamState: { streamId: string; sequence: number } | undefined;\n\t/** Correlation id for the active prompt run's lifecycle dispatches; written by the loop-runner via this facade. */\n\t_turnCorrelationId: string | undefined;\n\t_turnCorrelationCounter: number;\n\t/**\n\t * Host-process logger seam (会话轨迹第 2 期,设计 §5.2): one-line process log\n\t * beside lifecycle dispatches that report genuine failures (compaction\n\t * failed). Undefined when no hostLogger was configured; call sites treat it\n\t * as a no-op.\n\t */\n\treadonly _hostLogger?: HostLogger;\n\n\t// Bash execution state (compile-time private on AgentSession)\n\treadonly _bashAbortControllers: Set<AbortController>;\n\treadonly _activeBashPromises: Set<Promise<unknown>>;\n\t_bashEpoch: number;\n\t_pendingBashMessages: BashExecutionMessage[];\n\treadonly isDisposed: boolean;\n\n\t_capabilityRuntime: CapabilityRuntime | undefined;\n\t_compactionPolicyName: string;\n\t_overflowPolicyName: string;\n\t_branchSummaryPolicyName: string;\n\t_retryPolicyName: string;\n\t_runLoopStrategyName: string;\n\t/** Internal loop-executor seam (D-043 G3): set to replace the default prompt/continue drive. No public config; distinct from `_runLoopStrategyName` (a per-continuation veto policy). */\n\t_loopExecutor: LoopExecutor | undefined;\n\n\t// Helpers that remain on AgentSession\n\t_emit(event: AgentSessionEvent): void;\n\t_resolveIdleWaitIfIdle(): void;\n\t_flushPendingCustomMessages(): void;\n\t_emitAgentSettled(): Promise<void>;\n\t_observeLifecycleDeliveryError(error: unknown, extensionPath: string, event: string): void;\n\tabort(): Promise<void>;\n\t_abortInternal(): Promise<void>;\n\n\t// Context-transition state and delegates forwarding to agent-session-context.ts\n\t/** Generation fence for context projections that may outlive a runtime replacement. */\n\t_contextEpoch: number;\n\t_contextTransitionAbortController: AbortController;\n\t/** Serializes context transitions and lets reload/dispose drain them before teardown. */\n\t_activeContextTransition: Promise<unknown> | undefined;\n\t/** Monotonic revision for the public context snapshot/commit facade. */\n\t_contextRevision: number;\n\t/** Serializes public context commits so expectedRevision is a real CAS fence. */\n\t_contextCommitQueue: Promise<void>;\n\t/** Configured external context strategy name, written only by the constructor. */\n\treadonly _contextStrategyName: string | undefined;\n\t_requireContextStrategy(): { runtime: CapabilityRuntime; name: string };\n\t_requireIdleContextOperation(operation: string): void;\n\t_beginContextTransitionFence(): void;\n\t_isContextTransitionCurrent(epoch: number, allowReload: boolean): boolean;\n\t_assertContextTransitionCurrent(epoch: number, allowReload: boolean): void;\n\t_enqueueContextTransition<T>(\n\t\toperation: (epoch: number, signal: AbortSignal) => Promise<T>,\n\t\toptions?: { signal?: AbortSignal; allowReload?: boolean },\n\t): Promise<T>;\n\t_copyContextMessages(value: unknown, strategyName: string, direction: \"input\" | \"result\"): AgentMessage[];\n\t_applyContextTransition(\n\t\tmessages: AgentMessage[],\n\t\treason?: ContextOperationOptions[\"reason\"],\n\t\tsignal?: AbortSignal,\n\t\toptions?: { allowReload?: boolean },\n\t): Promise<AgentMessage[]>;\n\t_restoreContextTransition(\n\t\tsnapshot: unknown,\n\t\treason: NonNullable<ContextOperationOptions[\"reason\"]>,\n\t\toptions?: { allowReload?: boolean },\n\t): Promise<AgentMessage[]>;\n\tsnapshotContext(): Promise<unknown>;\n\trestoreContext(snapshot: unknown): Promise<AgentMessage[]>;\n\treplaceContext(context: AgentMessage[]): Promise<AgentMessage[]>;\n\n\t// Model-scope state and delegates forwarding to agent-session-model.ts\n\t_scopedModels: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n\t/** Public scoped-models getter (Legacy 迁移 R1): submodules read via this instead of the private field. */\n\treadonly scopedModels: ReadonlyArray<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n\tsetModel(model: Model<Api>, options?: ModelMutationOptions): Promise<void>;\n\tsetThinkingLevel(level: ThinkingLevel, options?: ModelMutationOptions): void;\n\t_emitModelSelect(\n\t\tnextModel: Model<Api>,\n\t\tpreviousModel: Model<Api> | undefined,\n\t\tsource: \"set\" | \"cycle\" | \"restore\",\n\t): Promise<void>;\n\t_addPersistedDefaultToNonEmptyScope(model: Model<Api>): void;\n\t_getThinkingLevelForModelSwitch(targetModel?: Model<Api>, explicitLevel?: ThinkingLevel): ThinkingLevel;\n\t_cycleScopedModel(\n\t\tdirection: \"forward\" | \"backward\",\n\t\toptions: ModelMutationOptions,\n\t): Promise<ModelCycleResult | undefined>;\n\t_cycleAvailableModel(\n\t\tdirection: \"forward\" | \"backward\",\n\t\toptions: ModelMutationOptions,\n\t): Promise<ModelCycleResult | undefined>;\n\n\t// Run-loop wiring state and delegates forwarding to agent-session-loop.ts\n\t/** The agent's construction-time prepare adapter, captured once by the loop wiring install. */\n\t_initialPrepareNextTurn:\n\t\t| ((\n\t\t\t\tcontext: PrepareNextTurnContext,\n\t\t\t\tsignal?: AbortSignal,\n\t\t ) => Promise<AgentLoopTurnUpdate | undefined> | AgentLoopTurnUpdate | undefined)\n\t\t| undefined;\n\n\t// Delegates forwarding to the submodule functions\n\t_compactBeforeNextAssistantResponse(context: AgentContext, signal?: AbortSignal): Promise<AgentContext>;\n\t_enqueueCompaction<T>(operation: () => Promise<T>): Promise<T>;\n\t_compactInternal(customInstructions?: string): Promise<CompactionResult>;\n\t_checkCompaction(\n\t\tassistantMessage: AssistantMessage,\n\t\tskipAbortedCheck?: boolean,\n\t\tsignal?: AbortSignal,\n\t): Promise<boolean>;\n\t_runAutoCompaction(reason: \"overflow\" | \"threshold\", willRetry: boolean): Promise<boolean>;\n\t_willRetryAfterAgentEnd(event: Extract<AgentEvent, { type: \"agent_end\" }>, signal?: AbortSignal): Promise<boolean>;\n\t_isRetryableError(message: AssistantMessage, execution?: ExecutionFactsV1, signal?: AbortSignal): Promise<boolean>;\n\t_prepareRetry(\n\t\tmessage: AssistantMessage,\n\t\tprecomputedDecision?: Awaited<ReturnType<CapabilityRuntime[\"decideRetry\"]>>,\n\t): Promise<boolean>;\n\tnavigateTree(\n\t\ttargetId: string,\n\t\toptions?: { summarize?: boolean; customInstructions?: string; replaceInstructions?: boolean; label?: string },\n\t): Promise<{ editorText?: string; cancelled: boolean; aborted?: boolean; summaryEntry?: BranchSummaryEntry }>;\n\n\t// Lifecycle delegates forwarding to agent-session-lifecycle.ts\n\t_dispatchModelStreamLifecycle(\n\t\tmessage: AgentMessage,\n\t\teventName: ModelStreamEventDataV1[\"event\"],\n\t\tphase: ModelStreamEventDataV1[\"phase\"],\n\t): Promise<void>;\n\t_dispatchContextReplacedLifecycle(\n\t\treason: NonNullable<ContextOperationOptions[\"reason\"]>,\n\t\tstrategyName?: string,\n\t): Promise<void>;\n\t_dispatchModelResponseLifecycle(message: AssistantMessage, entryId: string): Promise<void>;\n\t_dispatchToolCommitLifecycle(message: ToolResultMessage, entryId: string): Promise<void>;\n\t_dispatchToolResultLifecycle(message: ToolResultMessage, entryId: string): Promise<void>;\n\t_dispatchSessionReloadLifecycle(generation: number): Promise<void>;\n\n\t// Bash delegates forwarding to agent-session-bash.ts\n\tcaptureBashEpoch(): number;\n\tisBashEpochCurrent(epoch: number): boolean;\n\temitUserBash(excludeFromContext: boolean): void;\n\texecuteBash(\n\t\tcommand: string,\n\t\tonChunk?: (chunk: string) => void,\n\t\toptions?: { excludeFromContext?: boolean; id?: string; operations?: BashOperations },\n\t): Promise<BashResult>;\n\trecordBashResult(\n\t\tcommand: string,\n\t\tresult: BashResult,\n\t\toptions?: { excludeFromContext?: boolean; epoch?: number },\n\t): void;\n\tabortBash(): void;\n\t_flushPendingBashMessages(): void;\n\n\t// Tool registry state (compile-time private on AgentSession)\n\t_resourceLoader: ResourceLoader;\n\t_customTools: ToolDefinition[];\n\t_deferredToolPluginIds: ReadonlySet<string>;\n\t_baseToolDefinitions: Map<string, ToolDefinition>;\n\t_baseToolSources: Map<string, SourceInfo>;\n\t_toolRegistry: Map<string, AgentTool>;\n\t_toolDefinitions: Map<string, ToolDefinitionEntry>;\n\t_toolPromptSnippets: Map<string, string>;\n\t_toolPromptGuidelines: Map<string, string[]>;\n\t_allowedToolNames: Set<string> | undefined;\n\t_excludedToolNames: Set<string> | undefined;\n\t_baseSystemPrompt: string;\n\t_baseSystemPromptOptions: BuildSystemPromptOptions;\n\t_systemPromptOverride: string | undefined;\n\t_orientationPrompt: string | undefined;\n\t_preferenceCard: string | undefined;\n\t_capabilitySkillsFilter: ((skills: Skill[]) => Skill[]) | undefined;\n\t_bootstrapSkillsHandle: CapabilityPluginHandle | undefined;\n\t_cwd: string;\n\n\tgetActiveToolNames(): string[];\n\n\t// Tool registry delegates forwarding to agent-session-tools.ts\n\tgetAllTools(): ToolInfo[];\n\tgetToolDefinition(name: string): ToolDefinition | undefined;\n\tsetActiveToolsByName(toolNames: string[]): void;\n\t_rebuildSystemPrompt(toolNames: string[]): string;\n\t_refreshToolRegistry(options?: { activeToolNames?: string[]; includeAllExtensionTools?: boolean }): void;\n\t_syncCapabilityTools(): void;\n\t_getCapabilitySkills(): Skill[];\n\t_getAvailableSkills(): Skill[];\n\t_validateCapabilitySkillConflicts(): void;\n\t_refreshBootstrapSkills(): Promise<void>;\n\n\t// Read-only projections and delegates forwarding to agent-session-projection.ts\n\treadonly sessionFile: string | undefined;\n\treadonly messages: AgentMessage[];\n\treadonly systemPrompt: string;\n\treadonly promptTemplates: ReadonlyArray<PromptTemplate>;\n\treadonly pendingMessageCount: number;\n\tgetSessionStats(): SessionStats;\n\tgetContextUsage(): ContextUsage | undefined;\n\tgetUserMessagesForForking(): ForkableUserMessage[];\n\texportToHtml(outputPath?: string, options?: { themeName?: string }): Promise<string>;\n\texportToJsonl(outputPath?: string): string;\n\tgetLastAssistantText(): string | undefined;\n\n\t// Resource-discovery delegates forwarding to agent-session-extensions.ts\n\textendResourcesFromExtensions(reason: \"startup\" | \"reload\"): Promise<void>;\n\tbuildExtensionResourcePaths(entries: Array<{ path: string; extensionPath: string }>): Array<{\n\t\tpath: string;\n\t\tmetadata: { source: string; scope: \"temporary\"; origin: \"top-level\"; baseDir?: string };\n\t}>;\n\tgetExtensionSourceLabel(extensionPath: string): string;\n\n\t// Prompt/queue surface consumed by the extension binding closures\n\tsendCustomMessage<T = unknown>(\n\t\tmessage: Pick<CustomMessage<T>, \"customType\" | \"content\" | \"display\" | \"details\">,\n\t\toptions?: { triggerTurn?: boolean; deliverAs?: \"steer\" | \"followUp\" | \"nextTurn\" },\n\t): Promise<void>;\n\tsendUserMessage(\n\t\tcontent: string | (TextContent | ImageContent)[],\n\t\toptions?: { deliverAs?: \"steer\" | \"followUp\"; expandPromptTemplates?: boolean },\n\t): Promise<void>;\n\tsetSessionName(name: string): void;\n\tcompact(customInstructions?: string): Promise<CompactionResult | CompactionCancelledResult>;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-internal.js","sourceRoot":"","sources":["../../src/core/agent-session-internal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAsDH;;;;GAIG;AACH,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACtC,MAAM,CAAsB;IAErC,YAAY,MAAuC,EAAE;QACpD,KAAK,CAAC,gCAAgC,MAAM,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IAAA,CACrB;CACD;AAED;;;;;;GAMG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAErE,0FAA0F;AAC1F,MAAM,UAAU,uBAAuB,CAAI,KAAQ,EAAK;IACvD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACzC,2FAAmD;IACnD,OAAO,UAAU,KAAK,SAAS,CAAC,CAAC,CAAE,IAAU,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAO,CAAC;AAAA,CAC9E","sourcesContent":["/**\n * Shared internal contract and snapshot helpers for the agent-session\n * submodules (agent-session-bash.ts, agent-session-compaction.ts,\n * agent-session-context.ts, agent-session-lifecycle.ts, agent-session-loop.ts,\n * agent-session-retry.ts, agent-session-tools.ts, agent-session-model.ts;\n * agent-session-runtime.ts consumes the class directly).\n *\n * `AgentSession` satisfies {@link AgentSessionInternals} structurally through a\n * single internal cast; members mirror the private state and helpers that moved\n * into the submodules. Same-name delegates stay on the class so call sites,\n * dynamic dispatch, and test spies keep working unchanged.\n */\n\nimport type {\n\tAgent,\n\tAgentContext,\n\tAgentEvent,\n\tAgentLoopTurnUpdate,\n\tAgentMessage,\n\tAgentTool,\n\tPrepareNextTurnContext,\n\tThinkingLevel,\n} from \"@agent-forge/agent-core\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tImageContent,\n\tModel,\n\tTextContent,\n\tToolResultMessage,\n} from \"@agent-forge/ai/compat\";\nimport type {\n\tAgentSessionEvent,\n\tModelCycleResult,\n\tModelMutationOptions,\n\tSessionStats,\n\tTurnAbortReason,\n} from \"./agent-session.ts\";\nimport type { CompactionCancelledResult } from \"./agent-session-compaction.ts\";\nimport type { LoopExecutor } from \"./agent-session-loop-runner.ts\";\nimport type { ForkableUserMessage } from \"./agent-session-projection.ts\";\nimport type { BashResult } from \"./bash-executor.ts\";\nimport type { CompactionResult } from \"./compaction/index.ts\";\nimport type { CapabilityPluginHandle, CapabilityRuntime, ContextOperationOptions } from \"./extensions/index.ts\";\nimport type { ModelStreamEventDataV1 } from \"./extensions/lifecycle-catalog.ts\";\nimport type { ContextUsage, ExecutionFactsV1 } from \"./extensions/public-api.ts\";\nimport type { HostLogger } from \"./logger.ts\";\nimport type { BashExecutionMessage, CustomMessage } from \"./messages.ts\";\nimport type { ModelRuntime } from \"./model-runtime.ts\";\nimport type { PromptTemplate } from \"./prompt-templates.ts\";\nimport type { ResourceLoader } from \"./resource-loader.ts\";\nimport type { BranchSummaryEntry, SessionManager } from \"./session-manager.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\nimport type { Skill } from \"./skills.ts\";\nimport type { SourceInfo } from \"./source-info.ts\";\nimport type { BuildSystemPromptOptions } from \"./system-prompt.ts\";\nimport type { BashOperations } from \"./tools/bash.ts\";\nimport type { ToolDefinition, ToolInfo } from \"./tools/tool-definition.ts\";\n\n/** Registry entry for one tool definition with its source metadata. */\nexport interface ToolDefinitionEntry {\n\tdefinition: ToolDefinition;\n\tsourceInfo: SourceInfo;\n}\n\n/**\n * A session operation was cancelled by user intent (abort, reload barrier) — a\n * normal outcome, never a failure. Host boundaries resolve with structured\n * cancelled results instead of surfacing this as an error.\n */\nexport class SessionCancelledError extends Error {\n\treadonly reason: \"reload\" | \"signal\";\n\n\tconstructor(reason: SessionCancelledError[\"reason\"]) {\n\t\tsuper(`Session operation cancelled: ${reason}`);\n\t\tthis.name = \"SessionCancelledError\";\n\t\tthis.reason = reason;\n\t}\n}\n\n/**\n * Deep-clone a session value and freeze the clone so lifecycle payloads cannot\n * be mutated in place. The implementation lives on the public extension face\n * (`./extensions/public-api.ts`) so first-party and third-party plugins share\n * the same payload-projection contract; re-exported here for the host-internal\n * session submodules.\n */\nexport { detachedSessionSnapshot } from \"./extensions/public-api.ts\";\n\n/** JSON-safe clone for lifecycle payloads that must survive structured clone failures. */\nexport function jsonSafeSessionSnapshot<T>(value: T): T {\n\tconst serialized = JSON.stringify(value);\n\t// v8 ignore next -- 对象消息序列化永远返回字符串,undefined 分支不可达\n\treturn serialized === undefined ? (null as T) : (JSON.parse(serialized) as T);\n}\n\nexport interface AgentSessionInternals {\n\treadonly agent: Agent;\n\treadonly sessionManager: SessionManager;\n\treadonly settingsManager: SettingsManager;\n\treadonly _modelRuntime: ModelRuntime;\n\treadonly model: Model<Api> | undefined;\n\treadonly thinkingLevel: ThinkingLevel;\n\treadonly sessionId: string;\n\treadonly isStreaming: boolean;\n\t/** Idle gate for public context operations (compile-time private getter on AgentSession). */\n\treadonly isIdle: boolean;\n\n\t// Internal session state (compile-time private on AgentSession)\n\t_compactionQueue: Promise<void>;\n\t_compactionAbortController: AbortController | undefined;\n\t_autoCompactionAbortController: AbortController | undefined;\n\t_overflowRecoveryAttempted: boolean;\n\t/** 已完成的溢出裁剪级数(0 = 未裁剪);与 `_overflowRecoveryAttempted` 同点位复位。 */\n\t_overflowTrimStage: number;\n\t/**\n\t * microcompact 冷却(按模型请求计数,0 = 不冷却):relief 落地时置满,\n\t * 每次 assistant message_end 减 1(下限 0);冷却期内阈值 decide 以\n\t * `microcompactEnabled: false` 关闭便宜缓解(背景注释见 agent-session.ts)。\n\t */\n\t_microcompactCooldown: number;\n\t_activeCompactionPromise: Promise<unknown> | undefined;\n\t_branchSummaryAbortController: AbortController | undefined;\n\t_branchSummaryPromise: Promise<unknown> | undefined;\n\t_resolveBranchSummaryPromise: (() => void) | undefined;\n\t_reloadInProgress: boolean;\n\t_policyDecisionAbortController: AbortController | undefined;\n\t_retryAbortController: AbortController | undefined;\n\t_retryAttempt: number;\n\t_pendingRetryDecision:\n\t\t| { message: AssistantMessage; decision: Awaited<ReturnType<CapabilityRuntime[\"decideRetry\"]>> }\n\t\t| undefined;\n\t_isAgentRunActive: boolean;\n\t_currentRunAborted: boolean;\n\t_lastAbortReason: TurnAbortReason | undefined;\n\t_lastAssistantMessage: AssistantMessage | undefined;\n\n\t// Lifecycle dispatch state (compile-time private on AgentSession)\n\treadonly _modelStreamState: { streamId: string; sequence: number } | undefined;\n\t/** Correlation id for the active prompt run's lifecycle dispatches; written by the loop-runner via this facade. */\n\t_turnCorrelationId: string | undefined;\n\t_turnCorrelationCounter: number;\n\t/**\n\t * Host-process logger seam (会话轨迹第 2 期,设计 §5.2): one-line process log\n\t * beside lifecycle dispatches that report genuine failures (compaction\n\t * failed). Undefined when no hostLogger was configured; call sites treat it\n\t * as a no-op.\n\t */\n\treadonly _hostLogger?: HostLogger;\n\n\t// Bash execution state (compile-time private on AgentSession)\n\treadonly _bashAbortControllers: Set<AbortController>;\n\treadonly _activeBashPromises: Set<Promise<unknown>>;\n\t_bashEpoch: number;\n\t_pendingBashMessages: BashExecutionMessage[];\n\treadonly isDisposed: boolean;\n\n\t_capabilityRuntime: CapabilityRuntime | undefined;\n\t_compactionPolicyName: string;\n\t_overflowPolicyName: string;\n\t_branchSummaryPolicyName: string;\n\t_retryPolicyName: string;\n\t_runLoopStrategyName: string;\n\t/** Internal loop-executor seam (D-043 G3): set to replace the default prompt/continue drive. No public config; distinct from `_runLoopStrategyName` (a per-continuation veto policy). */\n\t_loopExecutor: LoopExecutor | undefined;\n\n\t// Helpers that remain on AgentSession\n\t_emit(event: AgentSessionEvent): void;\n\t_resolveIdleWaitIfIdle(): void;\n\t_flushPendingCustomMessages(): void;\n\t_emitAgentSettled(): Promise<void>;\n\t_observeLifecycleDeliveryError(error: unknown, extensionPath: string, event: string): void;\n\tabort(): Promise<void>;\n\t_abortInternal(): Promise<void>;\n\n\t// Context-transition state and delegates forwarding to agent-session-context.ts\n\t/** Generation fence for context projections that may outlive a runtime replacement. */\n\t_contextEpoch: number;\n\t_contextTransitionAbortController: AbortController;\n\t/** Serializes context transitions and lets reload/dispose drain them before teardown. */\n\t_activeContextTransition: Promise<unknown> | undefined;\n\t/** Monotonic revision for the public context snapshot/commit facade. */\n\t_contextRevision: number;\n\t/** Serializes public context commits so expectedRevision is a real CAS fence. */\n\t_contextCommitQueue: Promise<void>;\n\t/** Configured external context strategy name, written only by the constructor. */\n\treadonly _contextStrategyName: string | undefined;\n\t_requireContextStrategy(): { runtime: CapabilityRuntime; name: string };\n\t_requireIdleContextOperation(operation: string): void;\n\t_beginContextTransitionFence(): void;\n\t_isContextTransitionCurrent(epoch: number, allowReload: boolean): boolean;\n\t_assertContextTransitionCurrent(epoch: number, allowReload: boolean): void;\n\t_enqueueContextTransition<T>(\n\t\toperation: (epoch: number, signal: AbortSignal) => Promise<T>,\n\t\toptions?: { signal?: AbortSignal; allowReload?: boolean },\n\t): Promise<T>;\n\t_copyContextMessages(value: unknown, strategyName: string, direction: \"input\" | \"result\"): AgentMessage[];\n\t_applyContextTransition(\n\t\tmessages: AgentMessage[],\n\t\treason?: ContextOperationOptions[\"reason\"],\n\t\tsignal?: AbortSignal,\n\t\toptions?: { allowReload?: boolean },\n\t): Promise<AgentMessage[]>;\n\t_restoreContextTransition(\n\t\tsnapshot: unknown,\n\t\treason: NonNullable<ContextOperationOptions[\"reason\"]>,\n\t\toptions?: { allowReload?: boolean },\n\t): Promise<AgentMessage[]>;\n\tsnapshotContext(): Promise<unknown>;\n\trestoreContext(snapshot: unknown): Promise<AgentMessage[]>;\n\treplaceContext(context: AgentMessage[]): Promise<AgentMessage[]>;\n\n\t// Model-scope state and delegates forwarding to agent-session-model.ts\n\t_scopedModels: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n\t/** Public scoped-models getter (Legacy 迁移 R1): submodules read via this instead of the private field. */\n\treadonly scopedModels: ReadonlyArray<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n\tsetModel(model: Model<Api>, options?: ModelMutationOptions): Promise<void>;\n\tsetThinkingLevel(level: ThinkingLevel, options?: ModelMutationOptions): void;\n\t_emitModelSelect(\n\t\tnextModel: Model<Api>,\n\t\tpreviousModel: Model<Api> | undefined,\n\t\tsource: \"set\" | \"cycle\" | \"restore\",\n\t): Promise<void>;\n\t_addPersistedDefaultToNonEmptyScope(model: Model<Api>): void;\n\t_getThinkingLevelForModelSwitch(targetModel?: Model<Api>, explicitLevel?: ThinkingLevel): ThinkingLevel;\n\t_cycleScopedModel(\n\t\tdirection: \"forward\" | \"backward\",\n\t\toptions: ModelMutationOptions,\n\t): Promise<ModelCycleResult | undefined>;\n\t_cycleAvailableModel(\n\t\tdirection: \"forward\" | \"backward\",\n\t\toptions: ModelMutationOptions,\n\t): Promise<ModelCycleResult | undefined>;\n\n\t// Run-loop wiring state and delegates forwarding to agent-session-loop.ts\n\t/** The agent's construction-time prepare adapter, captured once by the loop wiring install. */\n\t_initialPrepareNextTurn:\n\t\t| ((\n\t\t\t\tcontext: PrepareNextTurnContext,\n\t\t\t\tsignal?: AbortSignal,\n\t\t ) => Promise<AgentLoopTurnUpdate | undefined> | AgentLoopTurnUpdate | undefined)\n\t\t| undefined;\n\n\t// Delegates forwarding to the submodule functions\n\t_compactBeforeNextAssistantResponse(context: AgentContext, signal?: AbortSignal): Promise<AgentContext>;\n\t_enqueueCompaction<T>(operation: () => Promise<T>): Promise<T>;\n\t_compactInternal(customInstructions?: string): Promise<CompactionResult>;\n\t_checkCompaction(\n\t\tassistantMessage: AssistantMessage,\n\t\tskipAbortedCheck?: boolean,\n\t\tsignal?: AbortSignal,\n\t): Promise<boolean>;\n\t_runAutoCompaction(reason: \"overflow\" | \"threshold\", willRetry: boolean): Promise<boolean>;\n\t_willRetryAfterAgentEnd(event: Extract<AgentEvent, { type: \"agent_end\" }>, signal?: AbortSignal): Promise<boolean>;\n\t_isRetryableError(message: AssistantMessage, execution?: ExecutionFactsV1, signal?: AbortSignal): Promise<boolean>;\n\t_prepareRetry(\n\t\tmessage: AssistantMessage,\n\t\tprecomputedDecision?: Awaited<ReturnType<CapabilityRuntime[\"decideRetry\"]>>,\n\t): Promise<boolean>;\n\tnavigateTree(\n\t\ttargetId: string,\n\t\toptions?: { summarize?: boolean; customInstructions?: string; replaceInstructions?: boolean; label?: string },\n\t): Promise<{ editorText?: string; cancelled: boolean; aborted?: boolean; summaryEntry?: BranchSummaryEntry }>;\n\n\t// Lifecycle delegates forwarding to agent-session-lifecycle.ts\n\t_dispatchModelStreamLifecycle(\n\t\tmessage: AgentMessage,\n\t\teventName: ModelStreamEventDataV1[\"event\"],\n\t\tphase: ModelStreamEventDataV1[\"phase\"],\n\t): Promise<void>;\n\t_dispatchContextReplacedLifecycle(\n\t\treason: NonNullable<ContextOperationOptions[\"reason\"]>,\n\t\tstrategyName?: string,\n\t): Promise<void>;\n\t_dispatchModelResponseLifecycle(message: AssistantMessage, entryId: string): Promise<void>;\n\t_dispatchToolCommitLifecycle(message: ToolResultMessage, entryId: string): Promise<void>;\n\t_dispatchToolResultLifecycle(message: ToolResultMessage, entryId: string): Promise<void>;\n\t_dispatchSessionReloadLifecycle(generation: number): Promise<void>;\n\n\t// Bash delegates forwarding to agent-session-bash.ts\n\tcaptureBashEpoch(): number;\n\tisBashEpochCurrent(epoch: number): boolean;\n\temitUserBash(excludeFromContext: boolean): void;\n\texecuteBash(\n\t\tcommand: string,\n\t\tonChunk?: (chunk: string) => void,\n\t\toptions?: { excludeFromContext?: boolean; id?: string; operations?: BashOperations },\n\t): Promise<BashResult>;\n\trecordBashResult(\n\t\tcommand: string,\n\t\tresult: BashResult,\n\t\toptions?: { excludeFromContext?: boolean; epoch?: number },\n\t): void;\n\tabortBash(): void;\n\t_flushPendingBashMessages(): void;\n\n\t// Tool registry state (compile-time private on AgentSession)\n\t_resourceLoader: ResourceLoader;\n\t_customTools: ToolDefinition[];\n\t_deferredToolPluginIds: ReadonlySet<string>;\n\t_baseToolDefinitions: Map<string, ToolDefinition>;\n\t_baseToolSources: Map<string, SourceInfo>;\n\t_toolRegistry: Map<string, AgentTool>;\n\t_toolDefinitions: Map<string, ToolDefinitionEntry>;\n\t_toolPromptSnippets: Map<string, string>;\n\t_toolPromptGuidelines: Map<string, string[]>;\n\t_allowedToolNames: Set<string> | undefined;\n\t_excludedToolNames: Set<string> | undefined;\n\t_baseSystemPrompt: string;\n\t_baseSystemPromptOptions: BuildSystemPromptOptions;\n\t_systemPromptOverride: string | undefined;\n\t_orientationPrompt: string | undefined;\n\t_preferenceCard: string | undefined;\n\t_capabilitySkillsFilter: ((skills: Skill[]) => Skill[]) | undefined;\n\t_bootstrapSkillsHandle: CapabilityPluginHandle | undefined;\n\t_cwd: string;\n\n\tgetActiveToolNames(): string[];\n\n\t// Tool registry delegates forwarding to agent-session-tools.ts\n\tgetAllTools(): ToolInfo[];\n\tgetToolDefinition(name: string): ToolDefinition | undefined;\n\tsetActiveToolsByName(toolNames: string[]): void;\n\t_rebuildSystemPrompt(toolNames: string[]): string;\n\t_refreshToolRegistry(options?: { activeToolNames?: string[]; includeAllExtensionTools?: boolean }): void;\n\t_syncCapabilityTools(): void;\n\t_getCapabilitySkills(): Skill[];\n\t_getAvailableSkills(): Skill[];\n\t_validateCapabilitySkillConflicts(): void;\n\t_refreshBootstrapSkills(): Promise<void>;\n\n\t// Read-only projections and delegates forwarding to agent-session-projection.ts\n\treadonly sessionFile: string | undefined;\n\treadonly messages: AgentMessage[];\n\treadonly systemPrompt: string;\n\treadonly promptTemplates: ReadonlyArray<PromptTemplate>;\n\treadonly pendingMessageCount: number;\n\tgetSessionStats(): SessionStats;\n\tgetContextUsage(): ContextUsage | undefined;\n\tgetUserMessagesForForking(): ForkableUserMessage[];\n\texportToHtml(outputPath?: string, options?: { themeName?: string }): Promise<string>;\n\texportToJsonl(outputPath?: string): string;\n\tgetLastAssistantText(): string | undefined;\n\n\t// Resource-discovery delegates forwarding to agent-session-extensions.ts\n\textendResourcesFromExtensions(reason: \"startup\" | \"reload\"): Promise<void>;\n\tbuildExtensionResourcePaths(entries: Array<{ path: string; extensionPath: string }>): Array<{\n\t\tpath: string;\n\t\tmetadata: { source: string; scope: \"temporary\"; origin: \"top-level\"; baseDir?: string };\n\t}>;\n\tgetExtensionSourceLabel(extensionPath: string): string;\n\n\t// Prompt/queue surface consumed by the extension binding closures\n\tsendCustomMessage<T = unknown>(\n\t\tmessage: Pick<CustomMessage<T>, \"customType\" | \"content\" | \"display\" | \"details\">,\n\t\toptions?: { triggerTurn?: boolean; deliverAs?: \"steer\" | \"followUp\" | \"nextTurn\" },\n\t): Promise<void>;\n\tsendUserMessage(\n\t\tcontent: string | (TextContent | ImageContent)[],\n\t\toptions?: { deliverAs?: \"steer\" | \"followUp\"; expandPromptTemplates?: boolean },\n\t): Promise<void>;\n\tsetSessionName(name: string): void;\n\tcompact(customInstructions?: string): Promise<CompactionResult | CompactionCancelledResult>;\n}\n"]}
1
+ {"version":3,"file":"agent-session-internal.js","sourceRoot":"","sources":["../../src/core/agent-session-internal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAsDH;;;;GAIG;AACH,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACtC,MAAM,CAAsB;IAErC,YAAY,MAAuC,EAAE;QACpD,KAAK,CAAC,gCAAgC,MAAM,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IAAA,CACrB;CACD;AAED;;;;;;GAMG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAErE,0FAA0F;AAC1F,MAAM,UAAU,uBAAuB,CAAI,KAAQ,EAAK;IACvD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACzC,2FAAmD;IACnD,OAAO,UAAU,KAAK,SAAS,CAAC,CAAC,CAAE,IAAU,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAO,CAAC;AAAA,CAC9E","sourcesContent":["/**\n * Shared internal contract and snapshot helpers for the agent-session\n * submodules (agent-session-bash.ts, agent-session-compaction.ts,\n * agent-session-context.ts, agent-session-lifecycle.ts, agent-session-loop.ts,\n * agent-session-retry.ts, agent-session-tools.ts, agent-session-model.ts;\n * agent-session-runtime.ts consumes the class directly).\n *\n * `AgentSession` satisfies {@link AgentSessionInternals} structurally through a\n * single internal cast; members mirror the private state and helpers that moved\n * into the submodules. Same-name delegates stay on the class so call sites,\n * dynamic dispatch, and test spies keep working unchanged.\n */\n\nimport type {\n\tAgent,\n\tAgentContext,\n\tAgentEvent,\n\tAgentLoopTurnUpdate,\n\tAgentMessage,\n\tAgentTool,\n\tPrepareNextTurnContext,\n\tThinkingLevel,\n} from \"@agent-forge/agent-core\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tImageContent,\n\tModel,\n\tTextContent,\n\tToolResultMessage,\n} from \"@agent-forge/ai/compat\";\nimport type {\n\tAgentSessionEvent,\n\tModelCycleResult,\n\tModelMutationOptions,\n\tSessionStats,\n\tTurnAbortReason,\n} from \"./agent-session.ts\";\nimport type { CompactionCancelledResult } from \"./agent-session-compaction.ts\";\nimport type { LoopExecutor } from \"./agent-session-loop-runner.ts\";\nimport type { ForkableUserMessage } from \"./agent-session-projection.ts\";\nimport type { BashResult } from \"./bash-executor.ts\";\nimport type { CompactionResult } from \"./compaction/index.ts\";\nimport type { CapabilityPluginHandle, CapabilityRuntime, ContextOperationOptions } from \"./extensions/index.ts\";\nimport type { ModelStreamEventDataV1 } from \"./extensions/lifecycle-catalog.ts\";\nimport type { ContextUsage, ExecutionFactsV1 } from \"./extensions/public-api.ts\";\nimport type { HostLogger } from \"./logger.ts\";\nimport type { BashExecutionMessage, CustomMessage } from \"./messages.ts\";\nimport type { ModelRuntime } from \"./model-runtime.ts\";\nimport type { PromptTemplate } from \"./prompt-templates.ts\";\nimport type { ResourceLoader } from \"./resource-loader.ts\";\nimport type { BranchSummaryEntry, SessionManager } from \"./session-manager.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\nimport type { Skill } from \"./skills.ts\";\nimport type { SourceInfo } from \"./source-info.ts\";\nimport type { BuildSystemPromptOptions } from \"./system-prompt.ts\";\nimport type { BashOperations } from \"./tools/bash.ts\";\nimport type { ToolDefinition, ToolInfo } from \"./tools/tool-definition.ts\";\n\n/** Registry entry for one tool definition with its source metadata. */\nexport interface ToolDefinitionEntry {\n\tdefinition: ToolDefinition;\n\tsourceInfo: SourceInfo;\n}\n\n/**\n * A session operation was cancelled by user intent (abort, reload barrier) — a\n * normal outcome, never a failure. Host boundaries resolve with structured\n * cancelled results instead of surfacing this as an error.\n */\nexport class SessionCancelledError extends Error {\n\treadonly reason: \"reload\" | \"signal\";\n\n\tconstructor(reason: SessionCancelledError[\"reason\"]) {\n\t\tsuper(`Session operation cancelled: ${reason}`);\n\t\tthis.name = \"SessionCancelledError\";\n\t\tthis.reason = reason;\n\t}\n}\n\n/**\n * Deep-clone a session value and freeze the clone so lifecycle payloads cannot\n * be mutated in place. The implementation lives on the public extension face\n * (`./extensions/public-api.ts`) so first-party and third-party plugins share\n * the same payload-projection contract; re-exported here for the host-internal\n * session submodules.\n */\nexport { detachedSessionSnapshot } from \"./extensions/public-api.ts\";\n\n/** JSON-safe clone for lifecycle payloads that must survive structured clone failures. */\nexport function jsonSafeSessionSnapshot<T>(value: T): T {\n\tconst serialized = JSON.stringify(value);\n\t// v8 ignore next -- 对象消息序列化永远返回字符串,undefined 分支不可达\n\treturn serialized === undefined ? (null as T) : (JSON.parse(serialized) as T);\n}\n\nexport interface AgentSessionInternals {\n\treadonly agent: Agent;\n\treadonly sessionManager: SessionManager;\n\treadonly settingsManager: SettingsManager;\n\treadonly _modelRuntime: ModelRuntime;\n\treadonly model: Model<Api> | undefined;\n\treadonly thinkingLevel: ThinkingLevel;\n\treadonly sessionId: string;\n\treadonly isStreaming: boolean;\n\t/** Idle gate for public context operations (compile-time private getter on AgentSession). */\n\treadonly isIdle: boolean;\n\n\t// Internal session state (compile-time private on AgentSession)\n\t_compactionQueue: Promise<void>;\n\t_compactionAbortController: AbortController | undefined;\n\t_autoCompactionAbortController: AbortController | undefined;\n\t_overflowRecoveryAttempted: boolean;\n\t/** 已完成的溢出裁剪级数(0 = 未裁剪);与 `_overflowRecoveryAttempted` 同点位复位。 */\n\t_overflowTrimStage: number;\n\t_activeCompactionPromise: Promise<unknown> | undefined;\n\t_branchSummaryAbortController: AbortController | undefined;\n\t_branchSummaryPromise: Promise<unknown> | undefined;\n\t_resolveBranchSummaryPromise: (() => void) | undefined;\n\t_reloadInProgress: boolean;\n\t_policyDecisionAbortController: AbortController | undefined;\n\t_retryAbortController: AbortController | undefined;\n\t_retryAttempt: number;\n\t_pendingRetryDecision:\n\t\t| { message: AssistantMessage; decision: Awaited<ReturnType<CapabilityRuntime[\"decideRetry\"]>> }\n\t\t| undefined;\n\t_isAgentRunActive: boolean;\n\t_currentRunAborted: boolean;\n\t_lastAbortReason: TurnAbortReason | undefined;\n\t_lastAssistantMessage: AssistantMessage | undefined;\n\n\t// Lifecycle dispatch state (compile-time private on AgentSession)\n\treadonly _modelStreamState: { streamId: string; sequence: number } | undefined;\n\t/** Correlation id for the active prompt run's lifecycle dispatches; written by the loop-runner via this facade. */\n\t_turnCorrelationId: string | undefined;\n\t_turnCorrelationCounter: number;\n\t/**\n\t * Host-process logger seam (会话轨迹第 2 期,设计 §5.2): one-line process log\n\t * beside lifecycle dispatches that report genuine failures (compaction\n\t * failed). Undefined when no hostLogger was configured; call sites treat it\n\t * as a no-op.\n\t */\n\treadonly _hostLogger?: HostLogger;\n\n\t// Bash execution state (compile-time private on AgentSession)\n\treadonly _bashAbortControllers: Set<AbortController>;\n\treadonly _activeBashPromises: Set<Promise<unknown>>;\n\t_bashEpoch: number;\n\t_pendingBashMessages: BashExecutionMessage[];\n\treadonly isDisposed: boolean;\n\n\t_capabilityRuntime: CapabilityRuntime | undefined;\n\t_compactionPolicyName: string;\n\t_overflowPolicyName: string;\n\t_branchSummaryPolicyName: string;\n\t_retryPolicyName: string;\n\t_runLoopStrategyName: string;\n\t/** Internal loop-executor seam (D-043 G3): set to replace the default prompt/continue drive. No public config; distinct from `_runLoopStrategyName` (a per-continuation veto policy). */\n\t_loopExecutor: LoopExecutor | undefined;\n\n\t// Helpers that remain on AgentSession\n\t_emit(event: AgentSessionEvent): void;\n\t_resolveIdleWaitIfIdle(): void;\n\t_flushPendingCustomMessages(): void;\n\t_emitAgentSettled(): Promise<void>;\n\t_observeLifecycleDeliveryError(error: unknown, extensionPath: string, event: string): void;\n\tabort(): Promise<void>;\n\t_abortInternal(): Promise<void>;\n\n\t// Context-transition state and delegates forwarding to agent-session-context.ts\n\t/** Generation fence for context projections that may outlive a runtime replacement. */\n\t_contextEpoch: number;\n\t_contextTransitionAbortController: AbortController;\n\t/** Serializes context transitions and lets reload/dispose drain them before teardown. */\n\t_activeContextTransition: Promise<unknown> | undefined;\n\t/** Monotonic revision for the public context snapshot/commit facade. */\n\t_contextRevision: number;\n\t/** Serializes public context commits so expectedRevision is a real CAS fence. */\n\t_contextCommitQueue: Promise<void>;\n\t/** Configured external context strategy name, written only by the constructor. */\n\treadonly _contextStrategyName: string | undefined;\n\t_requireContextStrategy(): { runtime: CapabilityRuntime; name: string };\n\t_requireIdleContextOperation(operation: string): void;\n\t_beginContextTransitionFence(): void;\n\t_isContextTransitionCurrent(epoch: number, allowReload: boolean): boolean;\n\t_assertContextTransitionCurrent(epoch: number, allowReload: boolean): void;\n\t_enqueueContextTransition<T>(\n\t\toperation: (epoch: number, signal: AbortSignal) => Promise<T>,\n\t\toptions?: { signal?: AbortSignal; allowReload?: boolean },\n\t): Promise<T>;\n\t_copyContextMessages(value: unknown, strategyName: string, direction: \"input\" | \"result\"): AgentMessage[];\n\t_applyContextTransition(\n\t\tmessages: AgentMessage[],\n\t\treason?: ContextOperationOptions[\"reason\"],\n\t\tsignal?: AbortSignal,\n\t\toptions?: { allowReload?: boolean },\n\t): Promise<AgentMessage[]>;\n\t_restoreContextTransition(\n\t\tsnapshot: unknown,\n\t\treason: NonNullable<ContextOperationOptions[\"reason\"]>,\n\t\toptions?: { allowReload?: boolean },\n\t): Promise<AgentMessage[]>;\n\tsnapshotContext(): Promise<unknown>;\n\trestoreContext(snapshot: unknown): Promise<AgentMessage[]>;\n\treplaceContext(context: AgentMessage[]): Promise<AgentMessage[]>;\n\n\t// Model-scope state and delegates forwarding to agent-session-model.ts\n\t_scopedModels: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n\t/** Public scoped-models getter (Legacy 迁移 R1): submodules read via this instead of the private field. */\n\treadonly scopedModels: ReadonlyArray<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n\tsetModel(model: Model<Api>, options?: ModelMutationOptions): Promise<void>;\n\tsetThinkingLevel(level: ThinkingLevel, options?: ModelMutationOptions): void;\n\t_emitModelSelect(\n\t\tnextModel: Model<Api>,\n\t\tpreviousModel: Model<Api> | undefined,\n\t\tsource: \"set\" | \"cycle\" | \"restore\",\n\t): Promise<void>;\n\t_addPersistedDefaultToNonEmptyScope(model: Model<Api>): void;\n\t_getThinkingLevelForModelSwitch(targetModel?: Model<Api>, explicitLevel?: ThinkingLevel): ThinkingLevel;\n\t_cycleScopedModel(\n\t\tdirection: \"forward\" | \"backward\",\n\t\toptions: ModelMutationOptions,\n\t): Promise<ModelCycleResult | undefined>;\n\t_cycleAvailableModel(\n\t\tdirection: \"forward\" | \"backward\",\n\t\toptions: ModelMutationOptions,\n\t): Promise<ModelCycleResult | undefined>;\n\n\t// Run-loop wiring state and delegates forwarding to agent-session-loop.ts\n\t/** The agent's construction-time prepare adapter, captured once by the loop wiring install. */\n\t_initialPrepareNextTurn:\n\t\t| ((\n\t\t\t\tcontext: PrepareNextTurnContext,\n\t\t\t\tsignal?: AbortSignal,\n\t\t ) => Promise<AgentLoopTurnUpdate | undefined> | AgentLoopTurnUpdate | undefined)\n\t\t| undefined;\n\n\t// Delegates forwarding to the submodule functions\n\t_compactBeforeNextAssistantResponse(context: AgentContext, signal?: AbortSignal): Promise<AgentContext>;\n\t_enqueueCompaction<T>(operation: () => Promise<T>): Promise<T>;\n\t_compactInternal(customInstructions?: string): Promise<CompactionResult>;\n\t_checkCompaction(\n\t\tassistantMessage: AssistantMessage,\n\t\tskipAbortedCheck?: boolean,\n\t\tsignal?: AbortSignal,\n\t): Promise<boolean>;\n\t_runAutoCompaction(reason: \"overflow\" | \"threshold\", willRetry: boolean): Promise<boolean>;\n\t_willRetryAfterAgentEnd(event: Extract<AgentEvent, { type: \"agent_end\" }>, signal?: AbortSignal): Promise<boolean>;\n\t_isRetryableError(message: AssistantMessage, execution?: ExecutionFactsV1, signal?: AbortSignal): Promise<boolean>;\n\t_prepareRetry(\n\t\tmessage: AssistantMessage,\n\t\tprecomputedDecision?: Awaited<ReturnType<CapabilityRuntime[\"decideRetry\"]>>,\n\t): Promise<boolean>;\n\tnavigateTree(\n\t\ttargetId: string,\n\t\toptions?: { summarize?: boolean; customInstructions?: string; replaceInstructions?: boolean; label?: string },\n\t): Promise<{ editorText?: string; cancelled: boolean; aborted?: boolean; summaryEntry?: BranchSummaryEntry }>;\n\n\t// Lifecycle delegates forwarding to agent-session-lifecycle.ts\n\t_dispatchModelStreamLifecycle(\n\t\tmessage: AgentMessage,\n\t\teventName: ModelStreamEventDataV1[\"event\"],\n\t\tphase: ModelStreamEventDataV1[\"phase\"],\n\t): Promise<void>;\n\t_dispatchContextReplacedLifecycle(\n\t\treason: NonNullable<ContextOperationOptions[\"reason\"]>,\n\t\tstrategyName?: string,\n\t): Promise<void>;\n\t_dispatchModelResponseLifecycle(message: AssistantMessage, entryId: string): Promise<void>;\n\t_dispatchToolCommitLifecycle(message: ToolResultMessage, entryId: string): Promise<void>;\n\t_dispatchToolResultLifecycle(message: ToolResultMessage, entryId: string): Promise<void>;\n\t_dispatchSessionReloadLifecycle(generation: number): Promise<void>;\n\n\t// Bash delegates forwarding to agent-session-bash.ts\n\tcaptureBashEpoch(): number;\n\tisBashEpochCurrent(epoch: number): boolean;\n\temitUserBash(excludeFromContext: boolean): void;\n\texecuteBash(\n\t\tcommand: string,\n\t\tonChunk?: (chunk: string) => void,\n\t\toptions?: { excludeFromContext?: boolean; id?: string; operations?: BashOperations },\n\t): Promise<BashResult>;\n\trecordBashResult(\n\t\tcommand: string,\n\t\tresult: BashResult,\n\t\toptions?: { excludeFromContext?: boolean; epoch?: number },\n\t): void;\n\tabortBash(): void;\n\t_flushPendingBashMessages(): void;\n\n\t// Tool registry state (compile-time private on AgentSession)\n\t_resourceLoader: ResourceLoader;\n\t_customTools: ToolDefinition[];\n\t_deferredToolPluginIds: ReadonlySet<string>;\n\t_baseToolDefinitions: Map<string, ToolDefinition>;\n\t_baseToolSources: Map<string, SourceInfo>;\n\t_toolRegistry: Map<string, AgentTool>;\n\t_toolDefinitions: Map<string, ToolDefinitionEntry>;\n\t_toolPromptSnippets: Map<string, string>;\n\t_toolPromptGuidelines: Map<string, string[]>;\n\t_allowedToolNames: Set<string> | undefined;\n\t_excludedToolNames: Set<string> | undefined;\n\t_baseSystemPrompt: string;\n\t_baseSystemPromptOptions: BuildSystemPromptOptions;\n\t_systemPromptOverride: string | undefined;\n\t_orientationPrompt: string | undefined;\n\t_preferenceCard: string | undefined;\n\t_capabilitySkillsFilter: ((skills: Skill[]) => Skill[]) | undefined;\n\t_bootstrapSkillsHandle: CapabilityPluginHandle | undefined;\n\t_cwd: string;\n\n\tgetActiveToolNames(): string[];\n\n\t// Tool registry delegates forwarding to agent-session-tools.ts\n\tgetAllTools(): ToolInfo[];\n\tgetToolDefinition(name: string): ToolDefinition | undefined;\n\tsetActiveToolsByName(toolNames: string[]): void;\n\t_rebuildSystemPrompt(toolNames: string[]): string;\n\t_refreshToolRegistry(options?: { activeToolNames?: string[]; includeAllExtensionTools?: boolean }): void;\n\t_syncCapabilityTools(): void;\n\t_getCapabilitySkills(): Skill[];\n\t_getAvailableSkills(): Skill[];\n\t_validateCapabilitySkillConflicts(): void;\n\t_refreshBootstrapSkills(): Promise<void>;\n\n\t// Read-only projections and delegates forwarding to agent-session-projection.ts\n\treadonly sessionFile: string | undefined;\n\treadonly messages: AgentMessage[];\n\treadonly systemPrompt: string;\n\treadonly promptTemplates: ReadonlyArray<PromptTemplate>;\n\treadonly pendingMessageCount: number;\n\tgetSessionStats(): SessionStats;\n\tgetContextUsage(): ContextUsage | undefined;\n\tgetUserMessagesForForking(): ForkableUserMessage[];\n\texportToHtml(outputPath?: string, options?: { themeName?: string }): Promise<string>;\n\texportToJsonl(outputPath?: string): string;\n\tgetLastAssistantText(): string | undefined;\n\n\t// Resource-discovery delegates forwarding to agent-session-extensions.ts\n\textendResourcesFromExtensions(reason: \"startup\" | \"reload\"): Promise<void>;\n\tbuildExtensionResourcePaths(entries: Array<{ path: string; extensionPath: string }>): Array<{\n\t\tpath: string;\n\t\tmetadata: { source: string; scope: \"temporary\"; origin: \"top-level\"; baseDir?: string };\n\t}>;\n\tgetExtensionSourceLabel(extensionPath: string): string;\n\n\t// Prompt/queue surface consumed by the extension binding closures\n\tsendCustomMessage<T = unknown>(\n\t\tmessage: Pick<CustomMessage<T>, \"customType\" | \"content\" | \"display\" | \"details\">,\n\t\toptions?: { triggerTurn?: boolean; deliverAs?: \"steer\" | \"followUp\" | \"nextTurn\" },\n\t): Promise<void>;\n\tsendUserMessage(\n\t\tcontent: string | (TextContent | ImageContent)[],\n\t\toptions?: { deliverAs?: \"steer\" | \"followUp\"; expandPromptTemplates?: boolean },\n\t): Promise<void>;\n\tsetSessionName(name: string): void;\n\tcompact(customInstructions?: string): Promise<CompactionResult | CompactionCancelledResult>;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-model.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAGzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,wBAAsB,eAAe,CACpC,OAAO,EAAE,qBAAqB,EAC9B,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,EACrB,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,EACrC,MAAM,EAAE,KAAK,GAAG,OAAO,GAAG,SAAS,GACjC,OAAO,CAAC,IAAI,CAAC,CAGf;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAC7B,OAAO,EAAE,qBAAqB,EAC9B,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EACjB,OAAO,GAAE,oBAAyB,GAChC,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAY1G;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAC/B,OAAO,EAAE,qBAAqB,EAC9B,SAAS,GAAE,SAAS,GAAG,UAAsB,EAC7C,OAAO,GAAE,oBAAyB,GAChC,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAKvC;AAED,wBAAsB,gBAAgB,CACrC,OAAO,EAAE,qBAAqB,EAC9B,SAAS,EAAE,SAAS,GAAG,UAAU,EACjC,OAAO,EAAE,oBAAoB,GAC3B,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAoCvC;AAED,wBAAsB,mBAAmB,CACxC,OAAO,EAAE,qBAAqB,EAC9B,SAAS,EAAE,SAAS,GAAG,UAAU,EACjC,OAAO,EAAE,oBAAoB,GAC3B,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CA2BvC;AAED,sDAAsD;AACtD,wBAAgB,eAAe,CAC9B,OAAO,EAAE,qBAAqB,GAC5B,aAAa,CAAC;IAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAAC,aAAa,CAAC,EAAE,aAAa,CAAA;CAAE,CAAC,CAErE;AAED,+FAA+F;AAC/F,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAQlE;AAED,wCAAwC;AACxC,wBAAgB,eAAe,CAC9B,OAAO,EAAE,qBAAqB,EAC9B,YAAY,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAAC,aAAa,CAAC,EAAE,aAAa,CAAA;CAAE,CAAC,GACvE,IAAI,CAEN;AAED,wBAAgB,8BAA8B,CAC7C,OAAO,EAAE,qBAAqB,EAC9B,WAAW,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EACxB,aAAa,CAAC,EAAE,aAAa,GAC3B,aAAa,CAYf","sourcesContent":["/**\n * Model selection and thinking-level resolution for AgentSession.\n *\n * Extracted from `agent-session.ts`. Every function here operates on the\n * internal session facade ({@link AgentSessionInternals}); `AgentSession`\n * keeps same-name delegates so call sites, dynamic dispatch, and test spies\n * keep working unchanged. Method-to-method calls that have a facade member go\n * through the session parameter (not direct function calls) to preserve that\n * dispatch. `setModel` and `cycleModel` stay parallel implementations: each\n * keeps its own apply/persist/thinking/model_select sequence and never calls\n * the other.\n */\n\nimport type { ThinkingLevel } from \"@agent-forge/agent-core\";\nimport type { Api, Model } from \"@agent-forge/ai/compat\";\nimport { modelsAreEqual } from \"@agent-forge/ai/compat\";\nimport type { ModelCycleResult, ModelMutationOptions } from \"./agent-session.ts\";\nimport type { AgentSessionInternals } from \"./agent-session-internal.ts\";\nimport { dispatchModelSelectLifecycle } from \"./agent-session-lifecycle.ts\";\nimport { DEFAULT_THINKING_LEVEL } from \"./defaults.ts\";\nimport type { ModelFactsViewV1 } from \"./extensions/public-api.ts\";\n\nexport async function emitModelSelect(\n\tsession: AgentSessionInternals,\n\tnextModel: Model<Api>,\n\tpreviousModel: Model<Api> | undefined,\n\tsource: \"set\" | \"cycle\" | \"restore\",\n): Promise<void> {\n\tif (modelsAreEqual(previousModel, nextModel)) return;\n\tawait dispatchModelSelectLifecycle(session, { provider: nextModel.provider, id: nextModel.id }, source);\n}\n\n/**\n * Set model directly.\n * Validates that auth is configured and saves to the session transcript.\n * Persists to global defaults only when options.persist is true.\n * @throws Error if no auth is configured for the model\n */\nexport async function setModel(\n\tsession: AgentSessionInternals,\n\tmodel: Model<Api>,\n\toptions: ModelMutationOptions = {},\n): Promise<void> {\n\tif (!(await session._modelRuntime.checkAuth(model.provider))) {\n\t\tthrow new Error(`No API key for ${model.provider}/${model.id}`);\n\t}\n\n\tconst previousModel = session.model;\n\tconst thinkingLevel = session._getThinkingLevelForModelSwitch(model);\n\tsession.agent.state.model = model;\n\tsession.sessionManager.appendModelChange(model.provider, model.id);\n\tif (options.persist) {\n\t\tsession.settingsManager.setDefaultModelAndProvider(model.provider, model.id);\n\t\tsession._addPersistedDefaultToNonEmptyScope(model);\n\t}\n\n\t// Apply thinking level for the new model.\n\t// Per-model thinking level overrides take priority over the global default.\n\t// Model persistence does not implicitly rewrite the global thinking default.\n\tsession.setThinkingLevel(thinkingLevel);\n\n\tawait session._emitModelSelect(model, previousModel, \"set\");\n}\n\nexport function addPersistedDefaultToNonEmptyScope(session: AgentSessionInternals, model: Model<Api>): void {\n\tif (session._scopedModels.length === 0) return;\n\tif (session._scopedModels.some((scoped) => modelsAreEqual(scoped.model, model))) return;\n\n\tsession._scopedModels = [...session._scopedModels, { model }];\n\n\tconst enabledModels = session.settingsManager.getEnabledModels();\n\tif (!enabledModels?.length) return;\n\n\tconst modelReference = `${model.provider}/${model.id}`;\n\tif (enabledModels.some((pattern) => pattern.toLowerCase() === modelReference.toLowerCase())) return;\n\tsession.settingsManager.setEnabledModels([...enabledModels, modelReference]);\n}\n\n/**\n * Cycle to next/previous model.\n * Uses scoped models (from --models flag) if available, otherwise all available models.\n * @param direction - \"forward\" (default) or \"backward\"\n * @returns The new model info, or undefined if only one model available\n */\nexport async function cycleModel(\n\tsession: AgentSessionInternals,\n\tdirection: \"forward\" | \"backward\" = \"forward\",\n\toptions: ModelMutationOptions = {},\n): Promise<ModelCycleResult | undefined> {\n\tif (session._scopedModels.length > 0) {\n\t\treturn session._cycleScopedModel(direction, options);\n\t}\n\treturn session._cycleAvailableModel(direction, options);\n}\n\nexport async function cycleScopedModel(\n\tsession: AgentSessionInternals,\n\tdirection: \"forward\" | \"backward\",\n\toptions: ModelMutationOptions,\n): Promise<ModelCycleResult | undefined> {\n\tconst availableIds = new Set(\n\t\tsession._modelRuntime.getAvailableSnapshot().map((model) => `${model.provider}\\0${model.id}`),\n\t);\n\tconst scopedModels = session._scopedModels.filter((scoped) =>\n\t\tavailableIds.has(`${scoped.model.provider}\\0${scoped.model.id}`),\n\t);\n\tif (scopedModels.length <= 1) return undefined;\n\n\tconst currentModel = session.model;\n\tlet currentIndex = scopedModels.findIndex((sm) => modelsAreEqual(sm.model, currentModel));\n\n\tif (currentIndex === -1) currentIndex = 0;\n\tconst len = scopedModels.length;\n\tconst nextIndex = direction === \"forward\" ? (currentIndex + 1) % len : (currentIndex - 1 + len) % len;\n\tconst next = scopedModels[nextIndex];\n\tconst thinkingLevel = session._getThinkingLevelForModelSwitch(next.model, next.thinkingLevel);\n\n\t// Apply model\n\tsession.agent.state.model = next.model;\n\tsession.sessionManager.appendModelChange(next.model.provider, next.model.id);\n\tif (options.persist) {\n\t\tsession.settingsManager.setDefaultModelAndProvider(next.model.provider, next.model.id);\n\t\tsession._addPersistedDefaultToNonEmptyScope(next.model);\n\t}\n\n\t// Apply thinking level for the new model.\n\t// - Explicit scoped model thinking level overrides defaults\n\t// - Per-model thinking level overrides take priority over the global default\n\t// setThinkingLevel clamps to model capabilities.\n\t// Model persistence does not implicitly rewrite the global thinking default.\n\tsession.setThinkingLevel(thinkingLevel);\n\n\tawait session._emitModelSelect(next.model, currentModel, \"cycle\");\n\n\treturn { model: next.model, thinkingLevel: session.thinkingLevel, isScoped: true };\n}\n\nexport async function cycleAvailableModel(\n\tsession: AgentSessionInternals,\n\tdirection: \"forward\" | \"backward\",\n\toptions: ModelMutationOptions,\n): Promise<ModelCycleResult | undefined> {\n\tconst availableModels = session._modelRuntime.getAvailableSnapshot();\n\tif (availableModels.length <= 1) return undefined;\n\n\tconst currentModel = session.model;\n\tlet currentIndex = availableModels.findIndex((m) => modelsAreEqual(m, currentModel));\n\n\tif (currentIndex === -1) currentIndex = 0;\n\tconst len = availableModels.length;\n\tconst nextIndex = direction === \"forward\" ? (currentIndex + 1) % len : (currentIndex - 1 + len) % len;\n\tconst nextModel = availableModels[nextIndex];\n\n\tconst thinkingLevel = session._getThinkingLevelForModelSwitch(nextModel);\n\tsession.agent.state.model = nextModel;\n\tsession.sessionManager.appendModelChange(nextModel.provider, nextModel.id);\n\tif (options.persist) {\n\t\tsession.settingsManager.setDefaultModelAndProvider(nextModel.provider, nextModel.id);\n\t\tsession._addPersistedDefaultToNonEmptyScope(nextModel);\n\t}\n\n\t// Apply thinking level for the new model.\n\t// Model persistence does not implicitly rewrite the global thinking default.\n\tsession.setThinkingLevel(thinkingLevel);\n\n\tawait session._emitModelSelect(nextModel, currentModel, \"cycle\");\n\n\treturn { model: nextModel, thinkingLevel: session.thinkingLevel, isScoped: false };\n}\n\n/** Scoped models for cycling (from --models flag). */\nexport function getScopedModels(\n\tsession: AgentSessionInternals,\n): ReadonlyArray<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }> {\n\treturn session._scopedModels;\n}\n\n/** Project provider-agnostic facts off a Model without exposing api/headers/cost internals. */\nexport function modelFactsView(model: Model<Api>): ModelFactsViewV1 {\n\treturn {\n\t\tprovider: model.provider,\n\t\tid: model.id,\n\t\tcontextWindow: model.contextWindow,\n\t\tmaxTokens: model.maxTokens,\n\t\treasoning: model.reasoning,\n\t};\n}\n\n/** Update scoped models for cycling. */\nexport function setScopedModels(\n\tsession: AgentSessionInternals,\n\tscopedModels: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>,\n): void {\n\tsession._scopedModels = scopedModels;\n}\n\nexport function getThinkingLevelForModelSwitch(\n\tsession: AgentSessionInternals,\n\ttargetModel?: Model<Api>,\n\texplicitLevel?: ThinkingLevel,\n): ThinkingLevel {\n\tif (explicitLevel !== undefined) {\n\t\treturn explicitLevel;\n\t}\n\t// Per-model default takes priority when switching to a model that has one\n\tif (targetModel) {\n\t\tconst perModel = session.settingsManager.getModelThinkingLevel(targetModel.provider, targetModel.id);\n\t\tif (perModel !== undefined) {\n\t\t\treturn perModel;\n\t\t}\n\t}\n\treturn session.settingsManager.getDefaultThinkingLevel() ?? session.thinkingLevel ?? DEFAULT_THINKING_LEVEL;\n}\n"]}
1
+ {"version":3,"file":"agent-session-model.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAGzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAGnE,wBAAsB,eAAe,CACpC,OAAO,EAAE,qBAAqB,EAC9B,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,EACrB,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,EACrC,MAAM,EAAE,KAAK,GAAG,OAAO,GAAG,SAAS,GACjC,OAAO,CAAC,IAAI,CAAC,CAGf;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAC7B,OAAO,EAAE,qBAAqB,EAC9B,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EACjB,OAAO,GAAE,oBAAyB,GAChC,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAY1G;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAC/B,OAAO,EAAE,qBAAqB,EAC9B,SAAS,GAAE,SAAS,GAAG,UAAsB,EAC7C,OAAO,GAAE,oBAAyB,GAChC,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAKvC;AAED,wBAAsB,gBAAgB,CACrC,OAAO,EAAE,qBAAqB,EAC9B,SAAS,EAAE,SAAS,GAAG,UAAU,EACjC,OAAO,EAAE,oBAAoB,GAC3B,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAoCvC;AAED,wBAAsB,mBAAmB,CACxC,OAAO,EAAE,qBAAqB,EAC9B,SAAS,EAAE,SAAS,GAAG,UAAU,EACjC,OAAO,EAAE,oBAAoB,GAC3B,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CA2BvC;AAED,sDAAsD;AACtD,wBAAgB,eAAe,CAC9B,OAAO,EAAE,qBAAqB,GAC5B,aAAa,CAAC;IAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAAC,aAAa,CAAC,EAAE,aAAa,CAAA;CAAE,CAAC,CAErE;AAED,+FAA+F;AAC/F,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAQlE;AAED,wCAAwC;AACxC,wBAAgB,eAAe,CAC9B,OAAO,EAAE,qBAAqB,EAC9B,YAAY,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAAC,aAAa,CAAC,EAAE,aAAa,CAAA;CAAE,CAAC,GACvE,IAAI,CAEN;AAED,wBAAgB,8BAA8B,CAC7C,OAAO,EAAE,qBAAqB,EAC9B,WAAW,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EACxB,aAAa,CAAC,EAAE,aAAa,GAC3B,aAAa,CAYf","sourcesContent":["/**\n * Model selection and thinking-level resolution for AgentSession.\n *\n * Extracted from `agent-session.ts`. Every function here operates on the\n * internal session facade ({@link AgentSessionInternals}); `AgentSession`\n * keeps same-name delegates so call sites, dynamic dispatch, and test spies\n * keep working unchanged. Method-to-method calls that have a facade member go\n * through the session parameter (not direct function calls) to preserve that\n * dispatch. `setModel` and `cycleModel` stay parallel implementations: each\n * keeps its own apply/persist/thinking/model_select sequence and never calls\n * the other.\n */\n\nimport type { ThinkingLevel } from \"@agent-forge/agent-core\";\nimport type { Api, Model } from \"@agent-forge/ai/compat\";\nimport { modelsAreEqual } from \"@agent-forge/ai/compat\";\nimport type { ModelCycleResult, ModelMutationOptions } from \"./agent-session.ts\";\nimport type { AgentSessionInternals } from \"./agent-session-internal.ts\";\nimport { dispatchModelSelectLifecycle } from \"./agent-session-lifecycle.ts\";\nimport { DEFAULT_THINKING_LEVEL } from \"./defaults.ts\";\nimport type { ModelFactsViewV1 } from \"./extensions/public-api.ts\";\nimport { t } from \"./i18n/index.ts\";\n\nexport async function emitModelSelect(\n\tsession: AgentSessionInternals,\n\tnextModel: Model<Api>,\n\tpreviousModel: Model<Api> | undefined,\n\tsource: \"set\" | \"cycle\" | \"restore\",\n): Promise<void> {\n\tif (modelsAreEqual(previousModel, nextModel)) return;\n\tawait dispatchModelSelectLifecycle(session, { provider: nextModel.provider, id: nextModel.id }, source);\n}\n\n/**\n * Set model directly.\n * Validates that auth is configured and saves to the session transcript.\n * Persists to global defaults only when options.persist is true.\n * @throws Error if no auth is configured for the model\n */\nexport async function setModel(\n\tsession: AgentSessionInternals,\n\tmodel: Model<Api>,\n\toptions: ModelMutationOptions = {},\n): Promise<void> {\n\tif (!(await session._modelRuntime.checkAuth(model.provider))) {\n\t\tthrow new Error(t(\"No API key for {provider}/{model}\", { provider: model.provider, model: model.id }));\n\t}\n\n\tconst previousModel = session.model;\n\tconst thinkingLevel = session._getThinkingLevelForModelSwitch(model);\n\tsession.agent.state.model = model;\n\tsession.sessionManager.appendModelChange(model.provider, model.id);\n\tif (options.persist) {\n\t\tsession.settingsManager.setDefaultModelAndProvider(model.provider, model.id);\n\t\tsession._addPersistedDefaultToNonEmptyScope(model);\n\t}\n\n\t// Apply thinking level for the new model.\n\t// Per-model thinking level overrides take priority over the global default.\n\t// Model persistence does not implicitly rewrite the global thinking default.\n\tsession.setThinkingLevel(thinkingLevel);\n\n\tawait session._emitModelSelect(model, previousModel, \"set\");\n}\n\nexport function addPersistedDefaultToNonEmptyScope(session: AgentSessionInternals, model: Model<Api>): void {\n\tif (session._scopedModels.length === 0) return;\n\tif (session._scopedModels.some((scoped) => modelsAreEqual(scoped.model, model))) return;\n\n\tsession._scopedModels = [...session._scopedModels, { model }];\n\n\tconst enabledModels = session.settingsManager.getEnabledModels();\n\tif (!enabledModels?.length) return;\n\n\tconst modelReference = `${model.provider}/${model.id}`;\n\tif (enabledModels.some((pattern) => pattern.toLowerCase() === modelReference.toLowerCase())) return;\n\tsession.settingsManager.setEnabledModels([...enabledModels, modelReference]);\n}\n\n/**\n * Cycle to next/previous model.\n * Uses scoped models (from --models flag) if available, otherwise all available models.\n * @param direction - \"forward\" (default) or \"backward\"\n * @returns The new model info, or undefined if only one model available\n */\nexport async function cycleModel(\n\tsession: AgentSessionInternals,\n\tdirection: \"forward\" | \"backward\" = \"forward\",\n\toptions: ModelMutationOptions = {},\n): Promise<ModelCycleResult | undefined> {\n\tif (session._scopedModels.length > 0) {\n\t\treturn session._cycleScopedModel(direction, options);\n\t}\n\treturn session._cycleAvailableModel(direction, options);\n}\n\nexport async function cycleScopedModel(\n\tsession: AgentSessionInternals,\n\tdirection: \"forward\" | \"backward\",\n\toptions: ModelMutationOptions,\n): Promise<ModelCycleResult | undefined> {\n\tconst availableIds = new Set(\n\t\tsession._modelRuntime.getAvailableSnapshot().map((model) => `${model.provider}\\0${model.id}`),\n\t);\n\tconst scopedModels = session._scopedModels.filter((scoped) =>\n\t\tavailableIds.has(`${scoped.model.provider}\\0${scoped.model.id}`),\n\t);\n\tif (scopedModels.length <= 1) return undefined;\n\n\tconst currentModel = session.model;\n\tlet currentIndex = scopedModels.findIndex((sm) => modelsAreEqual(sm.model, currentModel));\n\n\tif (currentIndex === -1) currentIndex = 0;\n\tconst len = scopedModels.length;\n\tconst nextIndex = direction === \"forward\" ? (currentIndex + 1) % len : (currentIndex - 1 + len) % len;\n\tconst next = scopedModels[nextIndex];\n\tconst thinkingLevel = session._getThinkingLevelForModelSwitch(next.model, next.thinkingLevel);\n\n\t// Apply model\n\tsession.agent.state.model = next.model;\n\tsession.sessionManager.appendModelChange(next.model.provider, next.model.id);\n\tif (options.persist) {\n\t\tsession.settingsManager.setDefaultModelAndProvider(next.model.provider, next.model.id);\n\t\tsession._addPersistedDefaultToNonEmptyScope(next.model);\n\t}\n\n\t// Apply thinking level for the new model.\n\t// - Explicit scoped model thinking level overrides defaults\n\t// - Per-model thinking level overrides take priority over the global default\n\t// setThinkingLevel clamps to model capabilities.\n\t// Model persistence does not implicitly rewrite the global thinking default.\n\tsession.setThinkingLevel(thinkingLevel);\n\n\tawait session._emitModelSelect(next.model, currentModel, \"cycle\");\n\n\treturn { model: next.model, thinkingLevel: session.thinkingLevel, isScoped: true };\n}\n\nexport async function cycleAvailableModel(\n\tsession: AgentSessionInternals,\n\tdirection: \"forward\" | \"backward\",\n\toptions: ModelMutationOptions,\n): Promise<ModelCycleResult | undefined> {\n\tconst availableModels = session._modelRuntime.getAvailableSnapshot();\n\tif (availableModels.length <= 1) return undefined;\n\n\tconst currentModel = session.model;\n\tlet currentIndex = availableModels.findIndex((m) => modelsAreEqual(m, currentModel));\n\n\tif (currentIndex === -1) currentIndex = 0;\n\tconst len = availableModels.length;\n\tconst nextIndex = direction === \"forward\" ? (currentIndex + 1) % len : (currentIndex - 1 + len) % len;\n\tconst nextModel = availableModels[nextIndex];\n\n\tconst thinkingLevel = session._getThinkingLevelForModelSwitch(nextModel);\n\tsession.agent.state.model = nextModel;\n\tsession.sessionManager.appendModelChange(nextModel.provider, nextModel.id);\n\tif (options.persist) {\n\t\tsession.settingsManager.setDefaultModelAndProvider(nextModel.provider, nextModel.id);\n\t\tsession._addPersistedDefaultToNonEmptyScope(nextModel);\n\t}\n\n\t// Apply thinking level for the new model.\n\t// Model persistence does not implicitly rewrite the global thinking default.\n\tsession.setThinkingLevel(thinkingLevel);\n\n\tawait session._emitModelSelect(nextModel, currentModel, \"cycle\");\n\n\treturn { model: nextModel, thinkingLevel: session.thinkingLevel, isScoped: false };\n}\n\n/** Scoped models for cycling (from --models flag). */\nexport function getScopedModels(\n\tsession: AgentSessionInternals,\n): ReadonlyArray<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }> {\n\treturn session._scopedModels;\n}\n\n/** Project provider-agnostic facts off a Model without exposing api/headers/cost internals. */\nexport function modelFactsView(model: Model<Api>): ModelFactsViewV1 {\n\treturn {\n\t\tprovider: model.provider,\n\t\tid: model.id,\n\t\tcontextWindow: model.contextWindow,\n\t\tmaxTokens: model.maxTokens,\n\t\treasoning: model.reasoning,\n\t};\n}\n\n/** Update scoped models for cycling. */\nexport function setScopedModels(\n\tsession: AgentSessionInternals,\n\tscopedModels: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>,\n): void {\n\tsession._scopedModels = scopedModels;\n}\n\nexport function getThinkingLevelForModelSwitch(\n\tsession: AgentSessionInternals,\n\ttargetModel?: Model<Api>,\n\texplicitLevel?: ThinkingLevel,\n): ThinkingLevel {\n\tif (explicitLevel !== undefined) {\n\t\treturn explicitLevel;\n\t}\n\t// Per-model default takes priority when switching to a model that has one\n\tif (targetModel) {\n\t\tconst perModel = session.settingsManager.getModelThinkingLevel(targetModel.provider, targetModel.id);\n\t\tif (perModel !== undefined) {\n\t\t\treturn perModel;\n\t\t}\n\t}\n\treturn session.settingsManager.getDefaultThinkingLevel() ?? session.thinkingLevel ?? DEFAULT_THINKING_LEVEL;\n}\n"]}
@@ -13,6 +13,7 @@
13
13
  import { modelsAreEqual } from "@agent-forge/ai/compat";
14
14
  import { dispatchModelSelectLifecycle } from "./agent-session-lifecycle.js";
15
15
  import { DEFAULT_THINKING_LEVEL } from "./defaults.js";
16
+ import { t } from "./i18n/index.js";
16
17
  export async function emitModelSelect(session, nextModel, previousModel, source) {
17
18
  if (modelsAreEqual(previousModel, nextModel))
18
19
  return;
@@ -26,7 +27,7 @@ export async function emitModelSelect(session, nextModel, previousModel, source)
26
27
  */
27
28
  export async function setModel(session, model, options = {}) {
28
29
  if (!(await session._modelRuntime.checkAuth(model.provider))) {
29
- throw new Error(`No API key for ${model.provider}/${model.id}`);
30
+ throw new Error(t("No API key for {provider}/{model}", { provider: model.provider, model: model.id }));
30
31
  }
31
32
  const previousModel = session.model;
32
33
  const thinkingLevel = session._getThinkingLevelForModelSwitch(model);