@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":"bootstrap-agent-loop.js","sourceRoot":"","sources":["../../../src/core/extensions/bootstrap-agent-loop.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Default agent-loop bootstrap executor (W3).\n *\n/**\n * Registers the default main-loop capabilities through the public extension\n * face so the default loop stays a replaceable first-party plugin:\n * - the five default loop-hook links (capability lifecycle dispatch, image\n * normalization, context strategy, compaction + next-turn refresh, and the\n * repeated-tool-call guard: shouldStopAfterTurn decision + transformContext\n * warn-reminder injection), and\n * - the default post-run continuation strategy (the host's own candidate\n * decision).\n *\n * The default links need session-bound host state (session id, revision,\n * correlation id, error observation, settings). That state is injected as\n * {@link AgentLoopWiringV1} — host wiring, not a plugin capability. Third-party\n * plugins register additional links through `api.registerLoopHook`; they run\n * after the default links in registration order.\n */\n\nimport { createHash } from \"node:crypto\";\nimport type {\n\tAgentContext,\n\tAgentLoopTurnUpdate,\n\tAgentMessage,\n\tAgentTool,\n\tPrepareNextTurnContext,\n\tShouldStopAfterTurnContext,\n\tThinkingLevel,\n} from \"@agent-forge/agent-core\";\nimport type { ToolCall, ToolResultMessage } from \"@agent-forge/ai\";\nimport type { Api, ImageContent, Model, TextContent, Usage } from \"@agent-forge/ai/compat\";\nimport { normalizeToolResultImages } from \"../../utils/tool-result-images.ts\";\nimport type { CustomMessage } from \"../messages.ts\";\nimport { type CapabilityPluginHandle, loadCapabilityPluginSync } from \"./capability-plugin.ts\";\nimport type { CapabilityRuntime } from \"./capability-runtime.ts\";\nimport { applyCapabilityContextStrategy } from \"./context-strategy-binding.ts\";\nimport {\n\tTOOL_CALL_EVENT_ID,\n\tTOOL_CALL_EVENT_VERSION,\n\tTOOL_EXECUTE_EVENT_ID,\n\tTOOL_EXECUTE_EVENT_VERSION,\n\tTOOL_RESULT_RAW_EVENT_ID,\n\tTOOL_RESULT_RAW_EVENT_VERSION,\n\tTOOL_RESULT_TRANSFORM_EVENT_ID,\n\tTOOL_RESULT_TRANSFORM_EVENT_VERSION,\n\ttype ToolCallEventDataV1,\n\ttype ToolExecuteEventDataV1,\n\ttype ToolResultRawEventDataV1,\n\ttype ToolResultTransformEventDataV1,\n} from \"./lifecycle-catalog.ts\";\nimport {\n\ttype AgentLoopAfterToolCallHookV1,\n\ttype AgentLoopBeforeToolCallHookV1,\n\ttype AgentLoopPrepareNextTurnHookV1,\n\ttype AgentLoopTransformContextHookV1,\n\tdetachedSessionSnapshot,\n\tEXPERIMENTAL_PUBLIC_API_VERSION,\n\ttype SessionRevisionV1,\n} from \"./public-api.ts\";\n\nexport const BOOTSTRAP_AGENT_LOOP_PLUGIN_ID = \"agent-forge.bootstrap-agent-loop\";\nexport const DEFAULT_RUN_LOOP_STRATEGY_NAME = \"default\";\n\n/** 滑动窗口大小:护栏只回看最近 N 个工具调用签名(跨回合累计)。 */\nexport const REPEATED_TOOL_CALL_WINDOW_SIZE = 6;\n/** 提醒阈值:窗口尾部连续相同签名达到该次数时提醒模型(不停机,两级响应第一级)。 */\nexport const REPEATED_TOOL_CALL_WARN_THRESHOLD = 3;\n/** 停机阈值:提醒后仍连续相同达到该次数才请求停机(两级响应第二级兜底)。 */\nexport const REPEATED_TOOL_CALL_STOP_THRESHOLD = 5;\n/** 停机提示消息的 customType(用户可见面,随 agent_end 的 messages 带出)。 */\nexport const REPEATED_TOOL_CALL_STOP_CUSTOM_TYPE = \"loop_guard_stop\";\n/** 提醒消息的 customType(用户可见面经 sendMessage 持久化+渲染;模型面注入复用同一标记)。 */\nexport const REPEATED_TOOL_CALL_WARN_CUSTOM_TYPE = \"loop_guard_warn\";\n/** 提示消息中参数串的最大长度,超出截断(只影响提示文本,不影响检测签名)。 */\nexport const REPEATED_TOOL_CALL_NOTICE_MAX_ARGS_CHARS = 200;\n\n/** {@link createRepeatedToolCallStopPolicy} 的窗口与两级阈值参数(缺省用上方命名常量)。 */\nexport interface RepeatedToolCallStopPolicyOptions {\n\t/** 滑动窗口大小,缺省 {@link REPEATED_TOOL_CALL_WINDOW_SIZE}。 */\n\twindowSize?: number;\n\t/** 提醒阈值(第一级,不停机),缺省 {@link REPEATED_TOOL_CALL_WARN_THRESHOLD}。 */\n\twarnThreshold?: number;\n\t/** 停机阈值(第二级兜底),缺省 {@link REPEATED_TOOL_CALL_STOP_THRESHOLD}。显式设为不大于提醒阈值时停机优先。 */\n\tstopThreshold?: number;\n\t/**\n\t * 提醒时的日志面回调(与 {@link onStop} 同纪律:info 只携带脱敏后的事实——\n\t * 工具名、截断参数摘要、提醒阈值,不含完整工具参数)。只在第一级实际提醒的\n\t * 回合调用一次;缺省不接 = 行为不变。\n\t */\n\tonWarn?: (info: RepeatedToolCallWarnInfo) => void;\n\t/**\n\t * 停机时的日志面回调(D-072 治理纪律 6(a):用户可见 + 日志可见双通道)。\n\t * 只在策略实际请求停机的回合调用一次;缺省不接 = 行为不变。info 只携带\n\t * 脱敏后的事实(工具名、截断参数摘要、阈值),不含完整工具参数。\n\t */\n\tonStop?: (info: RepeatedToolCallStopInfo) => void;\n\t/**\n\t * 提醒通知投递缝:策略把提醒消息交给宿主选定的公共面。默认安装把它接到\n\t * `SessionAPI.sendMessage`(持久化 + message_start 实时渲染);缺席时提醒\n\t * 仍经 transformContext 注入模型请求(模型面不依赖该缝)。\n\t */\n\tdeliverWarn?: (notice: CustomMessage) => void;\n\t/**\n\t * 停机通知投递缝:策略把停机提示消息交给宿主选定的公共面。默认安装把它接到\n\t * `SessionAPI.sendMessage`(运行中排队、run 收尾 flush 落为 custom_message\n\t * 条目——持久化 + message_start 实时渲染);缺席时停机事实仅随 agent_end 的\n\t * newMessages 带出(行为不变)。\n\t */\n\tdeliverNotice?: (notice: CustomMessage) => void;\n}\n\n/** 提醒事实(脱敏):{@link RepeatedToolCallStopPolicyOptions.onWarn} 的载荷。 */\nexport interface RepeatedToolCallWarnInfo {\n\t/** 触发提醒的最后一个工具名。 */\n\ttoolName: string;\n\t/** 截断后的参数稳定序列化摘要(复用 {@link REPEATED_TOOL_CALL_NOTICE_MAX_ARGS_CHARS})。 */\n\targsSummary: string;\n\t/** 达到的连续重复提醒阈值。 */\n\twarnThreshold: number;\n}\n\n/** 停机事实(脱敏):{@link RepeatedToolCallStopPolicyOptions.onStop} 的载荷。 */\nexport interface RepeatedToolCallStopInfo {\n\t/** 触发停机的最后一个工具名。 */\n\ttoolName: string;\n\t/** 截断后的参数稳定序列化摘要(复用 {@link REPEATED_TOOL_CALL_NOTICE_MAX_ARGS_CHARS})。 */\n\targsSummary: string;\n\t/** 达到的连续重复停机阈值。 */\n\tstopThreshold: number;\n}\n\n/**\n * 参数稳定字符串化:对象键递归排序后逐层拼接(数组保持顺序),循环引用输出\n * 固定占位。只用于签名比较与提示文本,不是通用 JSON 序列化器。\n */\nexport function stableSerializeValue(value: unknown, seen: WeakSet<object> = new WeakSet()): string {\n\tif (value === null) return \"null\";\n\tswitch (typeof value) {\n\t\tcase \"string\":\n\t\t\treturn JSON.stringify(value);\n\t\tcase \"number\":\n\t\t\treturn String(value);\n\t\tcase \"boolean\":\n\t\t\treturn String(value);\n\t\tcase \"undefined\":\n\t\t\treturn \"undefined\";\n\t\tcase \"bigint\":\n\t\t\treturn `bigint:${String(value)}`;\n\t\tcase \"function\":\n\t\t\treturn \"function\";\n\t\tcase \"symbol\":\n\t\t\treturn \"symbol\";\n\t\tcase \"object\":\n\t\t\tbreak;\n\t\tdefault:\n\t\t\treturn \"unknown\";\n\t}\n\tif (seen.has(value)) return '\"[cycle]\"';\n\tseen.add(value);\n\tconst serialized = Array.isArray(value)\n\t\t? `[${value.map((item) => stableSerializeValue(item, seen)).join(\",\")}]`\n\t\t: (() => {\n\t\t\t\tconst record = value as Record<string, unknown>;\n\t\t\t\tconst keys = Object.keys(record).sort();\n\t\t\t\treturn `{${keys.map((key) => `${JSON.stringify(key)}:${stableSerializeValue(record[key], seen)}`).join(\",\")}}`;\n\t\t\t})();\n\tseen.delete(value);\n\treturn serialized;\n}\n\n/**\n * 工具结果哈希(签名第三要素):拼接结果的 text 内容后做全量 SHA-256(十六进制),\n * isError 一并纳入(同参同果且同错误状态才计重复)。任何字节差异都产生不同哈希,\n * 因此长结果(前缀稳定、尾部变化)的合法轮询不会被误判成\"同果\"——签名不受任何\n * 截断影响。无文本结果(纯图像等)与结果缺席都返回空串占位:签名退化为两要素\n * (工具名 + 参数),这是已知局限——无文本的同参结果彼此不可区分。\n * 调用与结果按 toolCallId 对应,正常流程中每个调用都有结果;无结果返回空串。\n */\nexport function toolResultHash(result: ToolResultMessage | undefined): string {\n\tif (!result) return \"\";\n\tconst text = result.content\n\t\t.filter((block): block is TextContent => block.type === \"text\")\n\t\t.map((block) => block.text)\n\t\t.join(\"\\n\");\n\tif (text === \"\") return \"\";\n\treturn `${result.isError ? \"error\" : \"ok\"}:${createHash(\"sha256\").update(text).digest(\"hex\")}`;\n}\n\n/** 工具调用签名:工具名 + 参数稳定字符串化 + 结果哈希。 */\nexport function repeatedToolCallSignature(toolName: string, args: unknown, resultHash: string): string {\n\treturn `${JSON.stringify(toolName)}:${stableSerializeValue(args)}:${resultHash}`;\n}\n\n/** 参数摘要截断:超出 {@link REPEATED_TOOL_CALL_NOTICE_MAX_ARGS_CHARS} 打截断标记(用户可见消息与日志通道共用)。 */\nfunction truncateNoticeArgs(argsText: string): string {\n\treturn argsText.length > REPEATED_TOOL_CALL_NOTICE_MAX_ARGS_CHARS\n\t\t? `${argsText.slice(0, REPEATED_TOOL_CALL_NOTICE_MAX_ARGS_CHARS)}...(truncated)`\n\t\t: argsText;\n}\n\n/** 停机提示消息:随停机回合的 newMessages 带出(agent_end 可见),并经 deliverNotice 投递到宿主公共面。 */\nexport function createRepeatedToolCallStopNotice(\n\ttoolName: string,\n\targsText: string,\n\tstopThreshold: number,\n): CustomMessage {\n\tconst truncated = truncateNoticeArgs(argsText);\n\treturn {\n\t\trole: \"custom\",\n\t\tcustomType: REPEATED_TOOL_CALL_STOP_CUSTOM_TYPE,\n\t\tcontent: `Loop guard: stopped after the same tool call (${toolName}) was repeated ${stopThreshold} times in a row. Args: ${truncated}`,\n\t\tdisplay: true,\n\t\ttimestamp: Date.now(),\n\t};\n}\n\n/**\n * 提醒通知消息(用户可见面,loop_guard_warn):经 deliverWarn 投递(默认安装接\n * `SessionAPI.sendMessage`,持久化 + 实时渲染),与停机通知(loop_guard_stop)\n * 的 customType 区分。提醒不进入 newMessages——模型面提醒由 transformContext\n * 注入承担,用户面提醒由本消息的持久化+渲染承担。\n */\nexport function createRepeatedToolCallWarnNotice(\n\ttoolName: string,\n\targsText: string,\n\twarnThreshold: number,\n): CustomMessage {\n\tconst truncated = truncateNoticeArgs(argsText);\n\treturn {\n\t\trole: \"custom\",\n\t\tcustomType: REPEATED_TOOL_CALL_WARN_CUSTOM_TYPE,\n\t\tcontent: `Loop guard: the same tool call (${toolName}) was repeated ${warnThreshold} times in a row with the same result. Args: ${truncated}`,\n\t\tdisplay: true,\n\t\ttimestamp: Date.now(),\n\t};\n}\n\n/**\n * 模型面提醒消息(transformContext 注入用):display:false 的 custom 消息,\n * 经 convertToLlm 转为 user 文本进入下一次模型请求。只存在于该次请求视图\n * (不写 context.messages、不进 newMessages,故不持久化);customType 复用\n * loop_guard_warn 标记来源。\n */\nexport function createRepeatedToolCallWarnReminder(warnThreshold: number): CustomMessage {\n\treturn {\n\t\trole: \"custom\",\n\t\tcustomType: REPEATED_TOOL_CALL_WARN_CUSTOM_TYPE,\n\t\tcontent: `You have repeated the identical tool call with an identical result ${warnThreshold} times. If you are waiting for external state to change, change your approach instead of retrying the same call.`,\n\t\tdisplay: false,\n\t\ttimestamp: Date.now(),\n\t};\n}\n\n/** {@link createRepeatedToolCallStopPolicy} 返回的两条链路(共享同一滑动窗口与两级状态)。 */\nexport interface RepeatedToolCallGuard {\n\t/**\n\t * \"shouldStopAfterTurn\" 链路:两级判定的决策面(返回 true 即请求停机)。\n\t */\n\tshouldStopAfterTurn: (context: ShouldStopAfterTurnContext) => boolean;\n\t/**\n\t * \"transformContext\" 链路:提醒注入面。有待注入提醒时返回追加了提醒消息的\n\t * 新数组(进入下一次模型请求视图),否则返回 undefined(保留输入)。\n\t */\n\ttransformContext: (messages: readonly unknown[], signal?: AbortSignal) => Promise<readonly unknown[] | undefined>;\n}\n\n/**\n * 默认重复工具调用护栏(主对话循环护栏切片A,两级响应)。\n *\n * 每个完成的回合从 assistant 消息中按序取出工具调用,签名(工具名 + 键序参数\n * + 本轮结果哈希,结果按 toolCallId 对应)追加进滑动窗口并裁剪到 windowSize;\n * 然后按窗口尾部连续相同签名段(含同一回合内多次相同调用)做两级响应:\n *\n * - 第一级(达到 warnThreshold,缺省 3):返回 false 不停机,改为提醒——内部\n * 标记 pendingWarn,由本工厂返回的 transformContext 链路在下一轮请求前把提醒\n * 消息追加到请求视图尾部(agent-loop 的 runLoop 在每次 shouldStopAfterTurn\n * 之后、下一次 streamAssistantResponse 之前消费 transformContext,故提醒必然\n * 进入下一次请求);同时把用户可见提醒经 deliverWarn 投递、事实经 onWarn 记\n * 日志。同一连续重复段只提醒一次(warnedForRun 闩);连续段断开(模型改变\n * 行为)即复位,后续新的连续段可再次提醒。\n * - 第二级(达到 stopThreshold,缺省 5):返回 true 请求停机——先向\n * {@link ShouldStopAfterTurnContext} 的 newMessages 追加一条用户可见的停机消\n * 息并交给 deliverNotice(禁止静默停机),再经 onStop 记日志。判据不可能完\n * 美,因此不可逆停机不是第一响应。\n *\n * 同参不同果(合法轮询,如等待外部状态就绪)不计重复:结果要素是全量哈希,\n * 任何字节差异(包括 >200 字符长结果仅尾部变化)都产生不同签名;无文本结果\n * 退化为两要素(见 {@link toolResultHash} 局限声明)。无工具调用或结果缺席的\n * 轮次不进窗口。\n *\n * 挂载点说明:两条链路都由 {@link installBootstrapAgentLoop} 经公共扩展面\n * `api.registerLoopHook` 注册为默认链路(transformContext 注入链注册在默认上\n * 下文策略链之后,提醒落到最终请求视图尾部);disabledBootstrapPlugins 跳过本\n * 插件时均不注册,护栏随之关闭。wireDefaultLoop 只消费链,不直接安装本策略。\n */\nexport function createRepeatedToolCallStopPolicy(\n\toptions: RepeatedToolCallStopPolicyOptions = {},\n): RepeatedToolCallGuard {\n\tconst windowSize = options.windowSize ?? REPEATED_TOOL_CALL_WINDOW_SIZE;\n\tconst warnThreshold = options.warnThreshold ?? REPEATED_TOOL_CALL_WARN_THRESHOLD;\n\tconst stopThreshold = options.stopThreshold ?? REPEATED_TOOL_CALL_STOP_THRESHOLD;\n\tconst window: string[] = [];\n\tlet lastToolName = \"\";\n\tlet lastArgsText = \"\";\n\t/** 待注入的提醒事实:warn 时置位,transformContext 消费即清除(只注入一次)。 */\n\tlet pendingWarn: RepeatedToolCallWarnInfo | undefined;\n\t/** 当前连续重复段已提醒闩:同段不重复提醒;段断开(尾部连续段短于提醒阈值)时复位。 */\n\tlet warnedForRun = false;\n\n\t/** 窗口尾部连续相同签名的段长。 */\n\tconst trailingRunLength = (): number => {\n\t\tconst last = window[window.length - 1];\n\t\tif (last === undefined) return 0;\n\t\tlet run = 0;\n\t\tfor (let i = window.length - 1; i >= 0 && window[i] === last; i -= 1) run += 1;\n\t\treturn run;\n\t};\n\n\tconst shouldStopAfterTurn = (context: ShouldStopAfterTurnContext): boolean => {\n\t\tconst toolCalls = context.message.content.filter((block): block is ToolCall => block.type === \"toolCall\");\n\t\t// 三要素签名需要本轮工具结果:结果缺席时无法判定\"同果\",该轮不进窗口,\n\t\t// 避免把合法轮询误判成重复。\n\t\tif (toolCalls.length > 0 && context.toolResults.length > 0) {\n\t\t\tconst resultById = new Map(context.toolResults.map((result) => [result.toolCallId, result]));\n\t\t\tfor (const call of toolCalls) {\n\t\t\t\twindow.push(repeatedToolCallSignature(call.name, call.arguments, toolResultHash(resultById.get(call.id))));\n\t\t\t\tlastToolName = call.name;\n\t\t\t\tlastArgsText = stableSerializeValue(call.arguments);\n\t\t\t}\n\t\t}\n\t\tif (window.length > windowSize) {\n\t\t\twindow.splice(0, window.length - windowSize);\n\t\t}\n\t\tconst run = trailingRunLength();\n\t\tif (run >= stopThreshold) {\n\t\t\t// 第二级兜底:硬停,走停机全通道(newMessages + deliverNotice + onStop)。\n\t\t\t// 先于提醒判定:stopThreshold 被显式覆盖到不大于 warnThreshold 时停机优先。\n\t\t\tpendingWarn = undefined;\n\t\t\tconst notice = createRepeatedToolCallStopNotice(lastToolName, lastArgsText, stopThreshold);\n\t\t\tcontext.newMessages.push(notice);\n\t\t\toptions.deliverNotice?.(notice);\n\t\t\t// 日志可见通道(D-072 6(a)):与用户可见提示成对发出;onStop 属宿主接线,\n\t\t\t// 策略本身不知道任何具体日志实现。\n\t\t\toptions.onStop?.({ toolName: lastToolName, argsSummary: truncateNoticeArgs(lastArgsText), stopThreshold });\n\t\t\treturn true;\n\t\t}\n\t\tif (run < warnThreshold) {\n\t\t\t// 连续段断开:模型改变行为。复位已提醒闩并丢弃未消费的待注入提醒\n\t\t\t// (正常流程中它已在下一轮请求前被消费;此处只兜底运行中断的残留)。\n\t\t\twarnedForRun = false;\n\t\t\tpendingWarn = undefined;\n\t\t\treturn false;\n\t\t}\n\t\t// 第一级:提醒不停机。标记待注入(transformContext 链路消费),经\n\t\t// deliverWarn/onWarn 双通道可见;同一连续段只提醒一次。\n\t\tif (!warnedForRun) {\n\t\t\twarnedForRun = true;\n\t\t\tpendingWarn = { toolName: lastToolName, argsSummary: truncateNoticeArgs(lastArgsText), warnThreshold };\n\t\t\toptions.deliverWarn?.(createRepeatedToolCallWarnNotice(lastToolName, lastArgsText, warnThreshold));\n\t\t\toptions.onWarn?.(pendingWarn);\n\t\t}\n\t\treturn false;\n\t};\n\n\tconst transformContext = async (\n\t\tmessages: readonly unknown[],\n\t\t_signal?: AbortSignal,\n\t): Promise<readonly unknown[] | undefined> => {\n\t\tconst info = pendingWarn;\n\t\tif (!info) return undefined;\n\t\t// 消费即清除:提醒只注入一次;重复继续发生不重复注入。非变异地追加到\n\t\t// 请求视图尾部(不写 context.messages,故不持久化、不进 newMessages)。\n\t\tpendingWarn = undefined;\n\t\treturn [...messages, createRepeatedToolCallWarnReminder(info.warnThreshold)];\n\t};\n\n\treturn { shouldStopAfterTurn, transformContext };\n}\n\n/**\n * Session-bound host state the default loop links read at execution time.\n * Host wiring injected into the bootstrap executor; not part of the plugin\n * capability surface.\n */\nexport interface AgentLoopWiringV1 {\n\t/** Canonical session id for lifecycle payloads. */\n\tgetSessionId(): string;\n\t/** Detached revision snapshot captured at payload build time. */\n\tgetRevision(): SessionRevisionV1;\n\t/** Correlation id of the current prompt run, if any. */\n\tgetTurnCorrelationId(): string | undefined;\n\t/** Non-fatal delivery error sink (same surface as session-level observation). */\n\tobserveError(error: unknown, extensionPath: string, event: string): void;\n\t/** Image auto-resize setting for tool-result normalization. */\n\tgetImageAutoResize(): boolean;\n\t/** Compaction hook chained first inside the default prepareNextTurn link. */\n\tcompactBeforeNextAssistantResponse(context: AgentContext, signal?: AbortSignal): Promise<AgentContext>;\n\t/** Next-turn refresh snapshot applied last inside the default prepareNextTurn link. */\n\tgetTurnRefresh(): {\n\t\tsystemPrompt: string;\n\t\ttools: AgentTool[];\n\t\tmodel: Model<Api>;\n\t\tthinkingLevel: ThinkingLevel;\n\t};\n\t/** The agent's construction-time prepare adapter, chained after compaction. */\n\tgetInitialPrepareNextTurn():\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\t/** Configured external context strategy name, if any. */\n\tgetContextStrategyName(): string | undefined;\n}\n\ninterface LifecycleFailureReport {\n\treport?: { failures?: readonly { error: unknown; pluginId: string; kind: string }[] };\n}\n\n/**\n * Default beforeToolCall link: the `tool.call@1` candidate dispatch with\n * identity/revision checks. Moved from the AgentSession tool-hook wiring.\n */\nfunction createDefaultBeforeToolCallLink(\n\truntime: CapabilityRuntime,\n\twiring: AgentLoopWiringV1,\n): AgentLoopBeforeToolCallHookV1 {\n\treturn async ({ toolCallId, toolName, args, signal }) => {\n\t\t// v8 ignore next -- bootstrap lifecycle 恒定义全部生命周期事件,其 token 在 dispose 前恒活跃,提前返回不可达\n\t\tif (!runtime.hasLifecycleEvent(TOOL_CALL_EVENT_ID, TOOL_CALL_EVENT_VERSION)) return undefined;\n\t\tconst data: ToolCallEventDataV1 = {\n\t\t\tversion: 1,\n\t\t\tsessionId: wiring.getSessionId(),\n\t\t\trevision: wiring.getRevision(),\n\t\t\ttoolCallId,\n\t\t\ttoolName,\n\t\t\tinput: detachedSessionSnapshot(args),\n\t\t};\n\t\ttry {\n\t\t\tconst delivery = await runtime.dispatchLifecycle({\n\t\t\t\ttype: TOOL_CALL_EVENT_ID,\n\t\t\t\tversion: TOOL_CALL_EVENT_VERSION,\n\t\t\t\tphase: \"candidate\",\n\t\t\t\tdata,\n\t\t\t\tsource: \"agent-session\",\n\t\t\t\tcorrelationId: wiring.getTurnCorrelationId(),\n\t\t\t\tsignal,\n\t\t\t});\n\t\t\tfor (const failure of delivery.report.failures) {\n\t\t\t\twiring.observeError(\n\t\t\t\t\tfailure.error,\n\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t`${TOOL_CALL_EVENT_ID}@${TOOL_CALL_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst transformed = delivery.data;\n\t\t\tconst revision = transformed.revision;\n\t\t\tif (\n\t\t\t\ttransformed.sessionId !== data.sessionId ||\n\t\t\t\ttransformed.toolCallId !== data.toolCallId ||\n\t\t\t\ttransformed.toolName !== data.toolName ||\n\t\t\t\trevision.version !== data.revision.version ||\n\t\t\t\trevision.sessionId !== data.revision.sessionId ||\n\t\t\t\trevision.sequence !== data.revision.sequence ||\n\t\t\t\trevision.leafId !== data.revision.leafId\n\t\t\t) {\n\t\t\t\tthrow new Error(`${TOOL_CALL_EVENT_ID} transform cannot change call identity or revision`);\n\t\t\t}\n\t\t\treturn { args: transformed.input };\n\t\t} catch (error) {\n\t\t\tconst report = (error as LifecycleFailureReport).report;\n\t\t\tif (report?.failures) {\n\t\t\t\tfor (const failure of report.failures) {\n\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\tfailure.error,\n\t\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t\t`${TOOL_CALL_EVENT_ID}@${TOOL_CALL_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t};\n}\n\n/**\n * Default afterToolCall link: `tool.execute@1` committed, `tool.result.raw@1`\n * raw, the legacy `tool_result` extension hook (via wiring), image\n * normalization, and the `tool.result.transform@1` candidate dispatch — in the\n * exact order the previous single AgentSession hook used. Moved from the\n * AgentSession tool-hook wiring.\n */\nfunction createDefaultAfterToolCallLink(\n\truntime: CapabilityRuntime,\n\twiring: AgentLoopWiringV1,\n): AgentLoopAfterToolCallHookV1 {\n\treturn async ({ toolCallId, toolName, args, result, isError, signal }) => {\n\t\tconst toolResult = result as {\n\t\t\tcontent?: (TextContent | ImageContent)[];\n\t\t\tdetails?: unknown;\n\t\t\tisError?: boolean;\n\t\t\tusage?: Usage;\n\t\t};\n\t\tif (runtime.hasLifecycleEvent(TOOL_EXECUTE_EVENT_ID, TOOL_EXECUTE_EVENT_VERSION)) {\n\t\t\ttry {\n\t\t\t\tconst data: ToolExecuteEventDataV1 = {\n\t\t\t\t\tversion: 1,\n\t\t\t\t\tsessionId: wiring.getSessionId(),\n\t\t\t\t\trevision: wiring.getRevision(),\n\t\t\t\t\ttoolCallId,\n\t\t\t\t\ttoolName,\n\t\t\t\t\tinput: detachedSessionSnapshot(args),\n\t\t\t\t\tisError,\n\t\t\t\t\tcontent: detachedSessionSnapshot(toolResult.content ?? []),\n\t\t\t\t};\n\t\t\t\tconst delivery = await runtime.dispatchLifecycle({\n\t\t\t\t\ttype: TOOL_EXECUTE_EVENT_ID,\n\t\t\t\t\tversion: TOOL_EXECUTE_EVENT_VERSION,\n\t\t\t\t\tphase: \"committed\",\n\t\t\t\t\tdata,\n\t\t\t\t\tsource: \"agent-session\",\n\t\t\t\t\tcorrelationId: wiring.getTurnCorrelationId(),\n\t\t\t\t});\n\t\t\t\tfor (const failure of delivery.report.failures) {\n\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\tfailure.error,\n\t\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t\t`${TOOL_EXECUTE_EVENT_ID}@${TOOL_EXECUTE_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconst report = (error as LifecycleFailureReport).report;\n\t\t\t\tif (report?.failures) {\n\t\t\t\t\tfor (const failure of report.failures) {\n\t\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\t\tfailure.error,\n\t\t\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t\t\t`${TOOL_EXECUTE_EVENT_ID}@${TOOL_EXECUTE_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\terror,\n\t\t\t\t\t\t\"<capability-lifecycle>\",\n\t\t\t\t\t\t`${TOOL_EXECUTE_EVENT_ID}@${TOOL_EXECUTE_EVENT_VERSION}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (runtime.hasLifecycleEvent(TOOL_RESULT_RAW_EVENT_ID, TOOL_RESULT_RAW_EVENT_VERSION) && !signal?.aborted) {\n\t\t\ttry {\n\t\t\t\tconst data: ToolResultRawEventDataV1 = {\n\t\t\t\t\tversion: 1,\n\t\t\t\t\tsessionId: wiring.getSessionId(),\n\t\t\t\t\trevision: wiring.getRevision(),\n\t\t\t\t\ttoolCallId,\n\t\t\t\t\ttoolName,\n\t\t\t\t\tisError,\n\t\t\t\t\tcontent: detachedSessionSnapshot(toolResult.content ?? []),\n\t\t\t\t};\n\t\t\t\tconst delivery = await runtime.dispatchLifecycle({\n\t\t\t\t\ttype: TOOL_RESULT_RAW_EVENT_ID,\n\t\t\t\t\tversion: TOOL_RESULT_RAW_EVENT_VERSION,\n\t\t\t\t\tphase: \"raw\",\n\t\t\t\t\tdata,\n\t\t\t\t\tsource: \"agent-session\",\n\t\t\t\t\tcorrelationId: wiring.getTurnCorrelationId(),\n\t\t\t\t\tsignal,\n\t\t\t\t});\n\t\t\t\tfor (const failure of delivery.report.failures) {\n\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\tfailure.error,\n\t\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t\t`${TOOL_RESULT_RAW_EVENT_ID}@${TOOL_RESULT_RAW_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (!signal?.aborted) {\n\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\terror,\n\t\t\t\t\t\t\"host\",\n\t\t\t\t\t\t`${TOOL_RESULT_RAW_EVENT_ID}@${TOOL_RESULT_RAW_EVENT_VERSION}/dispatch`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst content = toolResult.content ?? [];\n\t\t// Images are normalized before the transform dispatch so injected or\n\t\t// replaced images are normalized too.\n\t\tconst normalizedContent = await normalizeToolResultImages(content, {\n\t\t\tautoResizeImages: wiring.getImageAutoResize(),\n\t\t});\n\t\tconst legacyIsError = isError;\n\n\t\t// Standard tool.result.transform@1 candidate dispatch runs on the\n\t\t// normalized result candidate, after the legacy tool_result hook and\n\t\t// before the result is returned for session commit. Transform output is\n\t\t// schema-validated and identity-checked; failures propagate to the\n\t\t// agent loop's existing afterToolCall error isolation.\n\t\tlet finalContent: (typeof normalizedContent)[number][] = normalizedContent;\n\t\tlet finalIsError = legacyIsError;\n\t\tif (\n\t\t\truntime.hasLifecycleEvent(TOOL_RESULT_TRANSFORM_EVENT_ID, TOOL_RESULT_TRANSFORM_EVENT_VERSION) &&\n\t\t\t!signal?.aborted\n\t\t) {\n\t\t\tconst data: ToolResultTransformEventDataV1 = {\n\t\t\t\tversion: 1,\n\t\t\t\tsessionId: wiring.getSessionId(),\n\t\t\t\trevision: wiring.getRevision(),\n\t\t\t\ttoolCallId,\n\t\t\t\ttoolName,\n\t\t\t\tisError: legacyIsError,\n\t\t\t\tcontent: detachedSessionSnapshot(normalizedContent),\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tconst delivery = await runtime.dispatchLifecycle({\n\t\t\t\t\ttype: TOOL_RESULT_TRANSFORM_EVENT_ID,\n\t\t\t\t\tversion: TOOL_RESULT_TRANSFORM_EVENT_VERSION,\n\t\t\t\t\tphase: \"candidate\",\n\t\t\t\t\tdata,\n\t\t\t\t\tsource: \"agent-session\",\n\t\t\t\t\tcorrelationId: wiring.getTurnCorrelationId(),\n\t\t\t\t\tsignal,\n\t\t\t\t});\n\t\t\t\tfor (const failure of delivery.report.failures) {\n\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\tfailure.error,\n\t\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t\t`${TOOL_RESULT_TRANSFORM_EVENT_ID}@${TOOL_RESULT_TRANSFORM_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst transformed = delivery.data;\n\t\t\t\tconst revision = transformed.revision;\n\t\t\t\tif (\n\t\t\t\t\ttransformed.sessionId !== data.sessionId ||\n\t\t\t\t\ttransformed.toolCallId !== data.toolCallId ||\n\t\t\t\t\ttransformed.toolName !== data.toolName ||\n\t\t\t\t\trevision.version !== data.revision.version ||\n\t\t\t\t\trevision.sessionId !== data.revision.sessionId ||\n\t\t\t\t\trevision.sequence !== data.revision.sequence ||\n\t\t\t\t\trevision.leafId !== data.revision.leafId\n\t\t\t\t) {\n\t\t\t\t\tthrow new Error(`${TOOL_RESULT_TRANSFORM_EVENT_ID} transform cannot change result identity or revision`);\n\t\t\t\t}\n\t\t\t\tfinalContent = transformed.content as (typeof normalizedContent)[number][];\n\t\t\t\tfinalIsError = transformed.isError;\n\t\t\t} catch (error) {\n\t\t\t\tconst report = (error as LifecycleFailureReport).report;\n\t\t\t\tif (report?.failures) {\n\t\t\t\t\tfor (const failure of report.failures) {\n\t\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\t\tfailure.error,\n\t\t\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t\t\t`${TOOL_RESULT_TRANSFORM_EVENT_ID}@${TOOL_RESULT_TRANSFORM_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tif (finalContent === content && finalIsError === isError) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn {\n\t\t\tcontent: finalContent,\n\t\t\tdetails: toolResult.details,\n\t\t\tisError: finalIsError,\n\t\t\tusage: toolResult.usage,\n\t\t};\n\t};\n}\n\n/**\n * Default transformContext link: the explicitly selected capability context\n * strategy. Moved from the AgentSession context-transform wiring (the legacy\n * chaining wrapper keeps composing it for the pre-chain path).\n */\nfunction createDefaultTransformContextLink(\n\truntime: CapabilityRuntime,\n\twiring: AgentLoopWiringV1,\n): AgentLoopTransformContextHookV1 {\n\treturn async (messages, signal) => {\n\t\tconst strategyName = wiring.getContextStrategyName();\n\t\tif (!strategyName) return undefined;\n\t\treturn applyCapabilityContextStrategy(\n\t\t\tmessages as AgentMessage[],\n\t\t\truntime,\n\t\t\tstrategyName,\n\t\t\twiring.getSessionId(),\n\t\t\tsignal,\n\t\t);\n\t};\n}\n\n/**\n * Default prepareNextTurn link: compaction first, then the agent's\n * construction-time prepare adapter, then the system-prompt/tools/model/\n * thinking-level refresh. Moved from the AgentSession next-turn wiring.\n */\nfunction createDefaultPrepareNextTurnLink(wiring: AgentLoopWiringV1): AgentLoopPrepareNextTurnHookV1 {\n\treturn async (turn, signal) => {\n\t\tconst turnContext = turn as PrepareNextTurnContext;\n\t\tconst context = await wiring.compactBeforeNextAssistantResponse(turnContext.context, signal);\n\t\tconst previousSnapshot = await wiring.getInitialPrepareNextTurn()?.({ ...turnContext, context }, signal);\n\t\tconst nextContext = previousSnapshot?.context ?? context;\n\t\tconst refresh = wiring.getTurnRefresh();\n\n\t\treturn {\n\t\t\t...previousSnapshot,\n\t\t\tcontext: {\n\t\t\t\t...nextContext,\n\t\t\t\tsystemPrompt: refresh.systemPrompt,\n\t\t\t\ttools: refresh.tools,\n\t\t\t},\n\t\t\tmodel: refresh.model,\n\t\t\tthinkingLevel: refresh.thinkingLevel,\n\t\t};\n\t};\n}\n\n/**\n * Install the default agent-loop executor as a first-party plugin. Default\n * links register first, so third-party links registered later chain after\n * them in registration order.\n */\nexport function installBootstrapAgentLoop(\n\truntime: CapabilityRuntime,\n\twiring: AgentLoopWiringV1,\n): CapabilityPluginHandle {\n\treturn loadCapabilityPluginSync(\n\t\truntime,\n\t\t{\n\t\t\tid: BOOTSTRAP_AGENT_LOOP_PLUGIN_ID,\n\t\t\tversion: \"0.0.0\",\n\t\t\tapiVersion: EXPERIMENTAL_PUBLIC_API_VERSION,\n\t\t\tentry: \"<embedded:bootstrap-agent-loop>\",\n\t\t},\n\t\t(api) => {\n\t\t\tapi.registerLoopHook(\"beforeToolCall\", createDefaultBeforeToolCallLink(runtime, wiring));\n\t\t\tapi.registerLoopHook(\"afterToolCall\", createDefaultAfterToolCallLink(runtime, wiring));\n\t\t\tapi.registerLoopHook(\"transformContext\", createDefaultTransformContextLink(runtime, wiring));\n\t\t\tapi.registerLoopHook(\"prepareNextTurn\", createDefaultPrepareNextTurnLink(wiring));\n\t\t\t// The default repeated-tool-call guard rides the public loop-hook\n\t\t\t// chains like any other first-party link; disabling this plugin\n\t\t\t// removes both of its links. It answers with two levels (judgments\n\t\t\t// can be wrong, so an irreversible stop is never the first response):\n\t\t\t// - warn (third identical call): the shouldStopAfterTurn link votes\n\t\t\t// false and the transformContext link below injects a reminder into\n\t\t\t// the next request view (runLoop consumes transformContext after\n\t\t\t// shouldStopAfterTurn and before the next model call); the user-\n\t\t\t// facing warn notice is delivered through the public SessionAPI\n\t\t\t// sendMessage face (persisted custom_message entry with live\n\t\t\t// message_start/message_end rendering), plus a warn log through\n\t\t\t// the public LoggerAPI.\n\t\t\t// - stop (fifth identical call): the shouldStopAfterTurn link votes\n\t\t\t// true; the stop notice rides agent_end newMessages, sendMessage\n\t\t\t// persistence + rendering, and a warn log — all channels on.\n\t\t\t// Absent host features (session/logger) degrade to the remaining\n\t\t\t// channels instead of blocking the guard.\n\t\t\tconst loopGuard = createRepeatedToolCallStopPolicy({\n\t\t\t\tdeliverWarn: (notice) => {\n\t\t\t\t\tvoid api.session?.sendMessage?.(notice, { triggerTurn: false });\n\t\t\t\t},\n\t\t\t\tonWarn: (info) => {\n\t\t\t\t\tapi.logger?.warn(\"Loop guard warned the model\", {\n\t\t\t\t\t\ttool: info.toolName,\n\t\t\t\t\t\trepeats: info.warnThreshold,\n\t\t\t\t\t\targsSummary: info.argsSummary,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tdeliverNotice: (notice) => {\n\t\t\t\t\tvoid api.session?.sendMessage?.(notice, { triggerTurn: false });\n\t\t\t\t},\n\t\t\t\tonStop: (info) => {\n\t\t\t\t\tapi.logger?.warn(\"Loop guard stopped the turn\", {\n\t\t\t\t\t\ttool: info.toolName,\n\t\t\t\t\t\trepeats: info.stopThreshold,\n\t\t\t\t\t\targsSummary: info.argsSummary,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t});\n\t\t\tapi.registerLoopHook(\"shouldStopAfterTurn\", loopGuard.shouldStopAfterTurn);\n\t\t\t// Registered after the default context-strategy link, so the reminder\n\t\t\t// is appended to the final post-strategy request view (survives any\n\t\t\t// strategy pruning) at its tail.\n\t\t\tapi.registerLoopHook(\"transformContext\", loopGuard.transformContext);\n\t\t\t// The default continuation strategy reproduces the host's own\n\t\t\t// post-run decision byte for byte; a replacement strategy overrides\n\t\t\t// the continue/stop call through registerRunLoopStrategy.\n\t\t\tapi.registerRunLoopStrategy(DEFAULT_RUN_LOOP_STRATEGY_NAME, {\n\t\t\t\tdecideNextCycle: (request) => ({ continueLoop: request.hostWillContinue }),\n\t\t\t});\n\t\t},\n\t);\n}\n"]}
1
+ {"version":3,"file":"bootstrap-agent-loop.js","sourceRoot":"","sources":["../../../src/core/extensions/bootstrap-agent-loop.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Default agent-loop bootstrap executor (W3).\n *\n/**\n * Registers the default main-loop capabilities through the public extension\n * face so the default loop stays a replaceable first-party plugin:\n * - the five default loop-hook links (capability lifecycle dispatch, image\n * normalization, context strategy, compaction + next-turn refresh, and the\n * repeated-tool-call guard: shouldStopAfterTurn decision + transformContext\n * warn-reminder injection), and\n * - the default post-run continuation strategy (the host's own candidate\n * decision).\n *\n * The default links need session-bound host state (session id, revision,\n * correlation id, error observation, settings). That state is injected as\n * {@link AgentLoopWiringV1} — host wiring, not a plugin capability. Third-party\n * plugins register additional links through `api.registerLoopHook`; they run\n * after the default links in registration order.\n */\n\nimport { createHash } from \"node:crypto\";\nimport type {\n\tAgentContext,\n\tAgentLoopTurnUpdate,\n\tAgentMessage,\n\tAgentTool,\n\tPrepareNextTurnContext,\n\tShouldStopAfterTurnContext,\n\tThinkingLevel,\n} from \"@agent-forge/agent-core\";\nimport type { ToolCall, ToolResultMessage } from \"@agent-forge/ai\";\nimport type { Api, ImageContent, Model, TextContent, Usage } from \"@agent-forge/ai/compat\";\nimport { normalizeToolResultImages } from \"../../utils/tool-result-images.ts\";\nimport { t } from \"../i18n/index.ts\";\nimport type { CustomMessage } from \"../messages.ts\";\nimport { type CapabilityPluginHandle, loadCapabilityPluginSync } from \"./capability-plugin.ts\";\nimport type { CapabilityRuntime } from \"./capability-runtime.ts\";\nimport { applyCapabilityContextStrategy } from \"./context-strategy-binding.ts\";\nimport {\n\tTOOL_CALL_EVENT_ID,\n\tTOOL_CALL_EVENT_VERSION,\n\tTOOL_EXECUTE_EVENT_ID,\n\tTOOL_EXECUTE_EVENT_VERSION,\n\tTOOL_RESULT_RAW_EVENT_ID,\n\tTOOL_RESULT_RAW_EVENT_VERSION,\n\tTOOL_RESULT_TRANSFORM_EVENT_ID,\n\tTOOL_RESULT_TRANSFORM_EVENT_VERSION,\n\ttype ToolCallEventDataV1,\n\ttype ToolExecuteEventDataV1,\n\ttype ToolResultRawEventDataV1,\n\ttype ToolResultTransformEventDataV1,\n} from \"./lifecycle-catalog.ts\";\nimport {\n\ttype AgentLoopAfterToolCallHookV1,\n\ttype AgentLoopBeforeToolCallHookV1,\n\ttype AgentLoopPrepareNextTurnHookV1,\n\ttype AgentLoopTransformContextHookV1,\n\tdetachedSessionSnapshot,\n\tEXPERIMENTAL_PUBLIC_API_VERSION,\n\ttype SessionRevisionV1,\n} from \"./public-api.ts\";\n\nexport const BOOTSTRAP_AGENT_LOOP_PLUGIN_ID = \"agent-forge.bootstrap-agent-loop\";\nexport const DEFAULT_RUN_LOOP_STRATEGY_NAME = \"default\";\n\n/** 滑动窗口大小:护栏只回看最近 N 个工具调用签名(跨回合累计)。 */\nexport const REPEATED_TOOL_CALL_WINDOW_SIZE = 6;\n/** 提醒阈值:窗口尾部连续相同签名达到该次数时提醒模型(不停机,两级响应第一级)。 */\nexport const REPEATED_TOOL_CALL_WARN_THRESHOLD = 3;\n/** 停机阈值:提醒后仍连续相同达到该次数才请求停机(两级响应第二级兜底)。 */\nexport const REPEATED_TOOL_CALL_STOP_THRESHOLD = 5;\n/** 停机提示消息的 customType(用户可见面,随 agent_end 的 messages 带出)。 */\nexport const REPEATED_TOOL_CALL_STOP_CUSTOM_TYPE = \"loop_guard_stop\";\n/** 提醒消息的 customType(用户可见面经 sendMessage 持久化+渲染;模型面注入复用同一标记)。 */\nexport const REPEATED_TOOL_CALL_WARN_CUSTOM_TYPE = \"loop_guard_warn\";\n/** 提示消息中参数串的最大长度,超出截断(只影响提示文本,不影响检测签名)。 */\nexport const REPEATED_TOOL_CALL_NOTICE_MAX_ARGS_CHARS = 200;\n\n/** {@link createRepeatedToolCallStopPolicy} 的窗口与两级阈值参数(缺省用上方命名常量)。 */\nexport interface RepeatedToolCallStopPolicyOptions {\n\t/** 滑动窗口大小,缺省 {@link REPEATED_TOOL_CALL_WINDOW_SIZE}。 */\n\twindowSize?: number;\n\t/** 提醒阈值(第一级,不停机),缺省 {@link REPEATED_TOOL_CALL_WARN_THRESHOLD}。 */\n\twarnThreshold?: number;\n\t/** 停机阈值(第二级兜底),缺省 {@link REPEATED_TOOL_CALL_STOP_THRESHOLD}。显式设为不大于提醒阈值时停机优先。 */\n\tstopThreshold?: number;\n\t/**\n\t * 提醒时的日志面回调(与 {@link onStop} 同纪律:info 只携带脱敏后的事实——\n\t * 工具名、截断参数摘要、提醒阈值,不含完整工具参数)。只在第一级实际提醒的\n\t * 回合调用一次;缺省不接 = 行为不变。\n\t */\n\tonWarn?: (info: RepeatedToolCallWarnInfo) => void;\n\t/**\n\t * 停机时的日志面回调(D-072 治理纪律 6(a):用户可见 + 日志可见双通道)。\n\t * 只在策略实际请求停机的回合调用一次;缺省不接 = 行为不变。info 只携带\n\t * 脱敏后的事实(工具名、截断参数摘要、阈值),不含完整工具参数。\n\t */\n\tonStop?: (info: RepeatedToolCallStopInfo) => void;\n\t/**\n\t * 提醒通知投递缝:策略把提醒消息交给宿主选定的公共面。默认安装把它接到\n\t * `SessionAPI.sendMessage`(持久化 + message_start 实时渲染);缺席时提醒\n\t * 仍经 transformContext 注入模型请求(模型面不依赖该缝)。\n\t */\n\tdeliverWarn?: (notice: CustomMessage) => void;\n\t/**\n\t * 停机通知投递缝:策略把停机提示消息交给宿主选定的公共面。默认安装把它接到\n\t * `SessionAPI.sendMessage`(运行中排队、run 收尾 flush 落为 custom_message\n\t * 条目——持久化 + message_start 实时渲染);缺席时停机事实仅随 agent_end 的\n\t * newMessages 带出(行为不变)。\n\t */\n\tdeliverNotice?: (notice: CustomMessage) => void;\n}\n\n/** 提醒事实(脱敏):{@link RepeatedToolCallStopPolicyOptions.onWarn} 的载荷。 */\nexport interface RepeatedToolCallWarnInfo {\n\t/** 触发提醒的最后一个工具名。 */\n\ttoolName: string;\n\t/** 截断后的参数稳定序列化摘要(复用 {@link REPEATED_TOOL_CALL_NOTICE_MAX_ARGS_CHARS})。 */\n\targsSummary: string;\n\t/** 达到的连续重复提醒阈值。 */\n\twarnThreshold: number;\n}\n\n/** 停机事实(脱敏):{@link RepeatedToolCallStopPolicyOptions.onStop} 的载荷。 */\nexport interface RepeatedToolCallStopInfo {\n\t/** 触发停机的最后一个工具名。 */\n\ttoolName: string;\n\t/** 截断后的参数稳定序列化摘要(复用 {@link REPEATED_TOOL_CALL_NOTICE_MAX_ARGS_CHARS})。 */\n\targsSummary: string;\n\t/** 达到的连续重复停机阈值。 */\n\tstopThreshold: number;\n}\n\n/**\n * 参数稳定字符串化:对象键递归排序后逐层拼接(数组保持顺序),循环引用输出\n * 固定占位。只用于签名比较与提示文本,不是通用 JSON 序列化器。\n */\nexport function stableSerializeValue(value: unknown, seen: WeakSet<object> = new WeakSet()): string {\n\tif (value === null) return \"null\";\n\tswitch (typeof value) {\n\t\tcase \"string\":\n\t\t\treturn JSON.stringify(value);\n\t\tcase \"number\":\n\t\t\treturn String(value);\n\t\tcase \"boolean\":\n\t\t\treturn String(value);\n\t\tcase \"undefined\":\n\t\t\treturn \"undefined\";\n\t\tcase \"bigint\":\n\t\t\treturn `bigint:${String(value)}`;\n\t\tcase \"function\":\n\t\t\treturn \"function\";\n\t\tcase \"symbol\":\n\t\t\treturn \"symbol\";\n\t\tcase \"object\":\n\t\t\tbreak;\n\t\tdefault:\n\t\t\treturn \"unknown\";\n\t}\n\tif (seen.has(value)) return '\"[cycle]\"';\n\tseen.add(value);\n\tconst serialized = Array.isArray(value)\n\t\t? `[${value.map((item) => stableSerializeValue(item, seen)).join(\",\")}]`\n\t\t: (() => {\n\t\t\t\tconst record = value as Record<string, unknown>;\n\t\t\t\tconst keys = Object.keys(record).sort();\n\t\t\t\treturn `{${keys.map((key) => `${JSON.stringify(key)}:${stableSerializeValue(record[key], seen)}`).join(\",\")}}`;\n\t\t\t})();\n\tseen.delete(value);\n\treturn serialized;\n}\n\n/**\n * 工具结果哈希(签名第三要素):拼接结果的 text 内容后做全量 SHA-256(十六进制),\n * isError 一并纳入(同参同果且同错误状态才计重复)。任何字节差异都产生不同哈希,\n * 因此长结果(前缀稳定、尾部变化)的合法轮询不会被误判成\"同果\"——签名不受任何\n * 截断影响。无文本结果(纯图像等)与结果缺席都返回空串占位:签名退化为两要素\n * (工具名 + 参数),这是已知局限——无文本的同参结果彼此不可区分。\n * 调用与结果按 toolCallId 对应,正常流程中每个调用都有结果;无结果返回空串。\n */\nexport function toolResultHash(result: ToolResultMessage | undefined): string {\n\tif (!result) return \"\";\n\tconst text = result.content\n\t\t.filter((block): block is TextContent => block.type === \"text\")\n\t\t.map((block) => block.text)\n\t\t.join(\"\\n\");\n\tif (text === \"\") return \"\";\n\treturn `${result.isError ? \"error\" : \"ok\"}:${createHash(\"sha256\").update(text).digest(\"hex\")}`;\n}\n\n/** 工具调用签名:工具名 + 参数稳定字符串化 + 结果哈希。 */\nexport function repeatedToolCallSignature(toolName: string, args: unknown, resultHash: string): string {\n\treturn `${JSON.stringify(toolName)}:${stableSerializeValue(args)}:${resultHash}`;\n}\n\n/** 参数摘要截断:超出 {@link REPEATED_TOOL_CALL_NOTICE_MAX_ARGS_CHARS} 打截断标记(用户可见消息与日志通道共用)。 */\nfunction truncateNoticeArgs(argsText: string): string {\n\treturn argsText.length > REPEATED_TOOL_CALL_NOTICE_MAX_ARGS_CHARS\n\t\t? `${argsText.slice(0, REPEATED_TOOL_CALL_NOTICE_MAX_ARGS_CHARS)}...(truncated)`\n\t\t: argsText;\n}\n\n/** 停机提示消息:随停机回合的 newMessages 带出(agent_end 可见),并经 deliverNotice 投递到宿主公共面。 */\nexport function createRepeatedToolCallStopNotice(\n\ttoolName: string,\n\targsText: string,\n\tstopThreshold: number,\n): CustomMessage {\n\tconst truncated = truncateNoticeArgs(argsText);\n\treturn {\n\t\trole: \"custom\",\n\t\tcustomType: REPEATED_TOOL_CALL_STOP_CUSTOM_TYPE,\n\t\tcontent: `Loop guard: stopped after the same tool call (${toolName}) was repeated ${stopThreshold} times in a row. Args: ${truncated}`,\n\t\tdisplay: true,\n\t\ttimestamp: Date.now(),\n\t};\n}\n\n/**\n * 提醒通知消息(用户可见面,loop_guard_warn):经 deliverWarn 投递(默认安装接\n * `SessionAPI.sendMessage`,持久化 + 实时渲染),与停机通知(loop_guard_stop)\n * 的 customType 区分。提醒不进入 newMessages——模型面提醒由 transformContext\n * 注入承担,用户面提醒由本消息的持久化+渲染承担。\n */\nexport function createRepeatedToolCallWarnNotice(\n\ttoolName: string,\n\targsText: string,\n\twarnThreshold: number,\n): CustomMessage {\n\tconst truncated = truncateNoticeArgs(argsText);\n\treturn {\n\t\trole: \"custom\",\n\t\tcustomType: REPEATED_TOOL_CALL_WARN_CUSTOM_TYPE,\n\t\tcontent: `Loop guard: the same tool call (${toolName}) was repeated ${warnThreshold} times in a row with the same result. Args: ${truncated}`,\n\t\tdisplay: true,\n\t\ttimestamp: Date.now(),\n\t};\n}\n\n/**\n * 模型面提醒消息(transformContext 注入用):display:false 的 custom 消息,\n * 经 convertToLlm 转为 user 文本进入下一次模型请求。只存在于该次请求视图\n * (不写 context.messages、不进 newMessages,故不持久化);customType 复用\n * loop_guard_warn 标记来源。\n */\nexport function createRepeatedToolCallWarnReminder(warnThreshold: number): CustomMessage {\n\treturn {\n\t\trole: \"custom\",\n\t\tcustomType: REPEATED_TOOL_CALL_WARN_CUSTOM_TYPE,\n\t\tcontent: `You have repeated the identical tool call with an identical result ${warnThreshold} times. If you are waiting for external state to change, change your approach instead of retrying the same call.`,\n\t\tdisplay: false,\n\t\ttimestamp: Date.now(),\n\t};\n}\n\n/** {@link createRepeatedToolCallStopPolicy} 返回的两条链路(共享同一滑动窗口与两级状态)。 */\nexport interface RepeatedToolCallGuard {\n\t/**\n\t * \"shouldStopAfterTurn\" 链路:两级判定的决策面(返回 true 即请求停机)。\n\t */\n\tshouldStopAfterTurn: (context: ShouldStopAfterTurnContext) => boolean;\n\t/**\n\t * \"transformContext\" 链路:提醒注入面。有待注入提醒时返回追加了提醒消息的\n\t * 新数组(进入下一次模型请求视图),否则返回 undefined(保留输入)。\n\t */\n\ttransformContext: (messages: readonly unknown[], signal?: AbortSignal) => Promise<readonly unknown[] | undefined>;\n}\n\n/**\n * 默认重复工具调用护栏(主对话循环护栏切片A,两级响应)。\n *\n * 每个完成的回合从 assistant 消息中按序取出工具调用,签名(工具名 + 键序参数\n * + 本轮结果哈希,结果按 toolCallId 对应)追加进滑动窗口并裁剪到 windowSize;\n * 然后按窗口尾部连续相同签名段(含同一回合内多次相同调用)做两级响应:\n *\n * - 第一级(达到 warnThreshold,缺省 3):返回 false 不停机,改为提醒——内部\n * 标记 pendingWarn,由本工厂返回的 transformContext 链路在下一轮请求前把提醒\n * 消息追加到请求视图尾部(agent-loop 的 runLoop 在每次 shouldStopAfterTurn\n * 之后、下一次 streamAssistantResponse 之前消费 transformContext,故提醒必然\n * 进入下一次请求);同时把用户可见提醒经 deliverWarn 投递、事实经 onWarn 记\n * 日志。同一连续重复段只提醒一次(warnedForRun 闩);连续段断开(模型改变\n * 行为)即复位,后续新的连续段可再次提醒。\n * - 第二级(达到 stopThreshold,缺省 5):返回 true 请求停机——先向\n * {@link ShouldStopAfterTurnContext} 的 newMessages 追加一条用户可见的停机消\n * 息并交给 deliverNotice(禁止静默停机),再经 onStop 记日志。判据不可能完\n * 美,因此不可逆停机不是第一响应。\n *\n * 同参不同果(合法轮询,如等待外部状态就绪)不计重复:结果要素是全量哈希,\n * 任何字节差异(包括 >200 字符长结果仅尾部变化)都产生不同签名;无文本结果\n * 退化为两要素(见 {@link toolResultHash} 局限声明)。无工具调用或结果缺席的\n * 轮次不进窗口。\n *\n * 挂载点说明:两条链路都由 {@link installBootstrapAgentLoop} 经公共扩展面\n * `api.registerLoopHook` 注册为默认链路(transformContext 注入链注册在默认上\n * 下文策略链之后,提醒落到最终请求视图尾部);disabledBootstrapPlugins 跳过本\n * 插件时均不注册,护栏随之关闭。wireDefaultLoop 只消费链,不直接安装本策略。\n */\nexport function createRepeatedToolCallStopPolicy(\n\toptions: RepeatedToolCallStopPolicyOptions = {},\n): RepeatedToolCallGuard {\n\tconst windowSize = options.windowSize ?? REPEATED_TOOL_CALL_WINDOW_SIZE;\n\tconst warnThreshold = options.warnThreshold ?? REPEATED_TOOL_CALL_WARN_THRESHOLD;\n\tconst stopThreshold = options.stopThreshold ?? REPEATED_TOOL_CALL_STOP_THRESHOLD;\n\tconst window: string[] = [];\n\tlet lastToolName = \"\";\n\tlet lastArgsText = \"\";\n\t/** 待注入的提醒事实:warn 时置位,transformContext 消费即清除(只注入一次)。 */\n\tlet pendingWarn: RepeatedToolCallWarnInfo | undefined;\n\t/** 当前连续重复段已提醒闩:同段不重复提醒;段断开(尾部连续段短于提醒阈值)时复位。 */\n\tlet warnedForRun = false;\n\n\t/** 窗口尾部连续相同签名的段长。 */\n\tconst trailingRunLength = (): number => {\n\t\tconst last = window[window.length - 1];\n\t\tif (last === undefined) return 0;\n\t\tlet run = 0;\n\t\tfor (let i = window.length - 1; i >= 0 && window[i] === last; i -= 1) run += 1;\n\t\treturn run;\n\t};\n\n\tconst shouldStopAfterTurn = (context: ShouldStopAfterTurnContext): boolean => {\n\t\tconst toolCalls = context.message.content.filter((block): block is ToolCall => block.type === \"toolCall\");\n\t\t// 三要素签名需要本轮工具结果:结果缺席时无法判定\"同果\",该轮不进窗口,\n\t\t// 避免把合法轮询误判成重复。\n\t\tif (toolCalls.length > 0 && context.toolResults.length > 0) {\n\t\t\tconst resultById = new Map(context.toolResults.map((result) => [result.toolCallId, result]));\n\t\t\tfor (const call of toolCalls) {\n\t\t\t\twindow.push(repeatedToolCallSignature(call.name, call.arguments, toolResultHash(resultById.get(call.id))));\n\t\t\t\tlastToolName = call.name;\n\t\t\t\tlastArgsText = stableSerializeValue(call.arguments);\n\t\t\t}\n\t\t}\n\t\tif (window.length > windowSize) {\n\t\t\twindow.splice(0, window.length - windowSize);\n\t\t}\n\t\tconst run = trailingRunLength();\n\t\tif (run >= stopThreshold) {\n\t\t\t// 第二级兜底:硬停,走停机全通道(newMessages + deliverNotice + onStop)。\n\t\t\t// 先于提醒判定:stopThreshold 被显式覆盖到不大于 warnThreshold 时停机优先。\n\t\t\tpendingWarn = undefined;\n\t\t\tconst notice = createRepeatedToolCallStopNotice(lastToolName, lastArgsText, stopThreshold);\n\t\t\tcontext.newMessages.push(notice);\n\t\t\toptions.deliverNotice?.(notice);\n\t\t\t// 日志可见通道(D-072 6(a)):与用户可见提示成对发出;onStop 属宿主接线,\n\t\t\t// 策略本身不知道任何具体日志实现。\n\t\t\toptions.onStop?.({ toolName: lastToolName, argsSummary: truncateNoticeArgs(lastArgsText), stopThreshold });\n\t\t\treturn true;\n\t\t}\n\t\tif (run < warnThreshold) {\n\t\t\t// 连续段断开:模型改变行为。复位已提醒闩并丢弃未消费的待注入提醒\n\t\t\t// (正常流程中它已在下一轮请求前被消费;此处只兜底运行中断的残留)。\n\t\t\twarnedForRun = false;\n\t\t\tpendingWarn = undefined;\n\t\t\treturn false;\n\t\t}\n\t\t// 第一级:提醒不停机。标记待注入(transformContext 链路消费),经\n\t\t// deliverWarn/onWarn 双通道可见;同一连续段只提醒一次。\n\t\tif (!warnedForRun) {\n\t\t\twarnedForRun = true;\n\t\t\tpendingWarn = { toolName: lastToolName, argsSummary: truncateNoticeArgs(lastArgsText), warnThreshold };\n\t\t\toptions.deliverWarn?.(createRepeatedToolCallWarnNotice(lastToolName, lastArgsText, warnThreshold));\n\t\t\toptions.onWarn?.(pendingWarn);\n\t\t}\n\t\treturn false;\n\t};\n\n\tconst transformContext = async (\n\t\tmessages: readonly unknown[],\n\t\t_signal?: AbortSignal,\n\t): Promise<readonly unknown[] | undefined> => {\n\t\tconst info = pendingWarn;\n\t\tif (!info) return undefined;\n\t\t// 消费即清除:提醒只注入一次;重复继续发生不重复注入。非变异地追加到\n\t\t// 请求视图尾部(不写 context.messages,故不持久化、不进 newMessages)。\n\t\tpendingWarn = undefined;\n\t\treturn [...messages, createRepeatedToolCallWarnReminder(info.warnThreshold)];\n\t};\n\n\treturn { shouldStopAfterTurn, transformContext };\n}\n\n/**\n * Session-bound host state the default loop links read at execution time.\n * Host wiring injected into the bootstrap executor; not part of the plugin\n * capability surface.\n */\nexport interface AgentLoopWiringV1 {\n\t/** Canonical session id for lifecycle payloads. */\n\tgetSessionId(): string;\n\t/** Detached revision snapshot captured at payload build time. */\n\tgetRevision(): SessionRevisionV1;\n\t/** Correlation id of the current prompt run, if any. */\n\tgetTurnCorrelationId(): string | undefined;\n\t/** Non-fatal delivery error sink (same surface as session-level observation). */\n\tobserveError(error: unknown, extensionPath: string, event: string): void;\n\t/** Image auto-resize setting for tool-result normalization. */\n\tgetImageAutoResize(): boolean;\n\t/** Compaction hook chained first inside the default prepareNextTurn link. */\n\tcompactBeforeNextAssistantResponse(context: AgentContext, signal?: AbortSignal): Promise<AgentContext>;\n\t/** Next-turn refresh snapshot applied last inside the default prepareNextTurn link. */\n\tgetTurnRefresh(): {\n\t\tsystemPrompt: string;\n\t\ttools: AgentTool[];\n\t\tmodel: Model<Api>;\n\t\tthinkingLevel: ThinkingLevel;\n\t};\n\t/** The agent's construction-time prepare adapter, chained after compaction. */\n\tgetInitialPrepareNextTurn():\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\t/** Configured external context strategy name, if any. */\n\tgetContextStrategyName(): string | undefined;\n}\n\ninterface LifecycleFailureReport {\n\treport?: { failures?: readonly { error: unknown; pluginId: string; kind: string }[] };\n}\n\n/**\n * Default beforeToolCall link: the `tool.call@1` candidate dispatch with\n * identity/revision checks. Moved from the AgentSession tool-hook wiring.\n */\nfunction createDefaultBeforeToolCallLink(\n\truntime: CapabilityRuntime,\n\twiring: AgentLoopWiringV1,\n): AgentLoopBeforeToolCallHookV1 {\n\treturn async ({ toolCallId, toolName, args, signal }) => {\n\t\t// v8 ignore next -- bootstrap lifecycle 恒定义全部生命周期事件,其 token 在 dispose 前恒活跃,提前返回不可达\n\t\tif (!runtime.hasLifecycleEvent(TOOL_CALL_EVENT_ID, TOOL_CALL_EVENT_VERSION)) return undefined;\n\t\tconst data: ToolCallEventDataV1 = {\n\t\t\tversion: 1,\n\t\t\tsessionId: wiring.getSessionId(),\n\t\t\trevision: wiring.getRevision(),\n\t\t\ttoolCallId,\n\t\t\ttoolName,\n\t\t\tinput: detachedSessionSnapshot(args),\n\t\t};\n\t\ttry {\n\t\t\tconst delivery = await runtime.dispatchLifecycle({\n\t\t\t\ttype: TOOL_CALL_EVENT_ID,\n\t\t\t\tversion: TOOL_CALL_EVENT_VERSION,\n\t\t\t\tphase: \"candidate\",\n\t\t\t\tdata,\n\t\t\t\tsource: \"agent-session\",\n\t\t\t\tcorrelationId: wiring.getTurnCorrelationId(),\n\t\t\t\tsignal,\n\t\t\t});\n\t\t\tfor (const failure of delivery.report.failures) {\n\t\t\t\twiring.observeError(\n\t\t\t\t\tfailure.error,\n\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t`${TOOL_CALL_EVENT_ID}@${TOOL_CALL_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst transformed = delivery.data;\n\t\t\tconst revision = transformed.revision;\n\t\t\tif (\n\t\t\t\ttransformed.sessionId !== data.sessionId ||\n\t\t\t\ttransformed.toolCallId !== data.toolCallId ||\n\t\t\t\ttransformed.toolName !== data.toolName ||\n\t\t\t\trevision.version !== data.revision.version ||\n\t\t\t\trevision.sessionId !== data.revision.sessionId ||\n\t\t\t\trevision.sequence !== data.revision.sequence ||\n\t\t\t\trevision.leafId !== data.revision.leafId\n\t\t\t) {\n\t\t\t\tthrow new Error(t(\"tool.call transform cannot change call identity or revision\"));\n\t\t\t}\n\t\t\treturn { args: transformed.input };\n\t\t} catch (error) {\n\t\t\tconst report = (error as LifecycleFailureReport).report;\n\t\t\tif (report?.failures) {\n\t\t\t\tfor (const failure of report.failures) {\n\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\tfailure.error,\n\t\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t\t`${TOOL_CALL_EVENT_ID}@${TOOL_CALL_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t};\n}\n\n/**\n * Default afterToolCall link: `tool.execute@1` committed, `tool.result.raw@1`\n * raw, the legacy `tool_result` extension hook (via wiring), image\n * normalization, and the `tool.result.transform@1` candidate dispatch — in the\n * exact order the previous single AgentSession hook used. Moved from the\n * AgentSession tool-hook wiring.\n */\nfunction createDefaultAfterToolCallLink(\n\truntime: CapabilityRuntime,\n\twiring: AgentLoopWiringV1,\n): AgentLoopAfterToolCallHookV1 {\n\treturn async ({ toolCallId, toolName, args, result, isError, signal }) => {\n\t\tconst toolResult = result as {\n\t\t\tcontent?: (TextContent | ImageContent)[];\n\t\t\tdetails?: unknown;\n\t\t\tisError?: boolean;\n\t\t\tusage?: Usage;\n\t\t};\n\t\tif (runtime.hasLifecycleEvent(TOOL_EXECUTE_EVENT_ID, TOOL_EXECUTE_EVENT_VERSION)) {\n\t\t\ttry {\n\t\t\t\tconst data: ToolExecuteEventDataV1 = {\n\t\t\t\t\tversion: 1,\n\t\t\t\t\tsessionId: wiring.getSessionId(),\n\t\t\t\t\trevision: wiring.getRevision(),\n\t\t\t\t\ttoolCallId,\n\t\t\t\t\ttoolName,\n\t\t\t\t\tinput: detachedSessionSnapshot(args),\n\t\t\t\t\tisError,\n\t\t\t\t\tcontent: detachedSessionSnapshot(toolResult.content ?? []),\n\t\t\t\t};\n\t\t\t\tconst delivery = await runtime.dispatchLifecycle({\n\t\t\t\t\ttype: TOOL_EXECUTE_EVENT_ID,\n\t\t\t\t\tversion: TOOL_EXECUTE_EVENT_VERSION,\n\t\t\t\t\tphase: \"committed\",\n\t\t\t\t\tdata,\n\t\t\t\t\tsource: \"agent-session\",\n\t\t\t\t\tcorrelationId: wiring.getTurnCorrelationId(),\n\t\t\t\t});\n\t\t\t\tfor (const failure of delivery.report.failures) {\n\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\tfailure.error,\n\t\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t\t`${TOOL_EXECUTE_EVENT_ID}@${TOOL_EXECUTE_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconst report = (error as LifecycleFailureReport).report;\n\t\t\t\tif (report?.failures) {\n\t\t\t\t\tfor (const failure of report.failures) {\n\t\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\t\tfailure.error,\n\t\t\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t\t\t`${TOOL_EXECUTE_EVENT_ID}@${TOOL_EXECUTE_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\terror,\n\t\t\t\t\t\t\"<capability-lifecycle>\",\n\t\t\t\t\t\t`${TOOL_EXECUTE_EVENT_ID}@${TOOL_EXECUTE_EVENT_VERSION}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (runtime.hasLifecycleEvent(TOOL_RESULT_RAW_EVENT_ID, TOOL_RESULT_RAW_EVENT_VERSION) && !signal?.aborted) {\n\t\t\ttry {\n\t\t\t\tconst data: ToolResultRawEventDataV1 = {\n\t\t\t\t\tversion: 1,\n\t\t\t\t\tsessionId: wiring.getSessionId(),\n\t\t\t\t\trevision: wiring.getRevision(),\n\t\t\t\t\ttoolCallId,\n\t\t\t\t\ttoolName,\n\t\t\t\t\tisError,\n\t\t\t\t\tcontent: detachedSessionSnapshot(toolResult.content ?? []),\n\t\t\t\t};\n\t\t\t\tconst delivery = await runtime.dispatchLifecycle({\n\t\t\t\t\ttype: TOOL_RESULT_RAW_EVENT_ID,\n\t\t\t\t\tversion: TOOL_RESULT_RAW_EVENT_VERSION,\n\t\t\t\t\tphase: \"raw\",\n\t\t\t\t\tdata,\n\t\t\t\t\tsource: \"agent-session\",\n\t\t\t\t\tcorrelationId: wiring.getTurnCorrelationId(),\n\t\t\t\t\tsignal,\n\t\t\t\t});\n\t\t\t\tfor (const failure of delivery.report.failures) {\n\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\tfailure.error,\n\t\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t\t`${TOOL_RESULT_RAW_EVENT_ID}@${TOOL_RESULT_RAW_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (!signal?.aborted) {\n\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\terror,\n\t\t\t\t\t\t\"host\",\n\t\t\t\t\t\t`${TOOL_RESULT_RAW_EVENT_ID}@${TOOL_RESULT_RAW_EVENT_VERSION}/dispatch`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst content = toolResult.content ?? [];\n\t\t// Images are normalized before the transform dispatch so injected or\n\t\t// replaced images are normalized too.\n\t\tconst normalizedContent = await normalizeToolResultImages(content, {\n\t\t\tautoResizeImages: wiring.getImageAutoResize(),\n\t\t});\n\t\tconst legacyIsError = isError;\n\n\t\t// Standard tool.result.transform@1 candidate dispatch runs on the\n\t\t// normalized result candidate, after the legacy tool_result hook and\n\t\t// before the result is returned for session commit. Transform output is\n\t\t// schema-validated and identity-checked; failures propagate to the\n\t\t// agent loop's existing afterToolCall error isolation.\n\t\tlet finalContent: (typeof normalizedContent)[number][] = normalizedContent;\n\t\tlet finalIsError = legacyIsError;\n\t\tif (\n\t\t\truntime.hasLifecycleEvent(TOOL_RESULT_TRANSFORM_EVENT_ID, TOOL_RESULT_TRANSFORM_EVENT_VERSION) &&\n\t\t\t!signal?.aborted\n\t\t) {\n\t\t\tconst data: ToolResultTransformEventDataV1 = {\n\t\t\t\tversion: 1,\n\t\t\t\tsessionId: wiring.getSessionId(),\n\t\t\t\trevision: wiring.getRevision(),\n\t\t\t\ttoolCallId,\n\t\t\t\ttoolName,\n\t\t\t\tisError: legacyIsError,\n\t\t\t\tcontent: detachedSessionSnapshot(normalizedContent),\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tconst delivery = await runtime.dispatchLifecycle({\n\t\t\t\t\ttype: TOOL_RESULT_TRANSFORM_EVENT_ID,\n\t\t\t\t\tversion: TOOL_RESULT_TRANSFORM_EVENT_VERSION,\n\t\t\t\t\tphase: \"candidate\",\n\t\t\t\t\tdata,\n\t\t\t\t\tsource: \"agent-session\",\n\t\t\t\t\tcorrelationId: wiring.getTurnCorrelationId(),\n\t\t\t\t\tsignal,\n\t\t\t\t});\n\t\t\t\tfor (const failure of delivery.report.failures) {\n\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\tfailure.error,\n\t\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t\t`${TOOL_RESULT_TRANSFORM_EVENT_ID}@${TOOL_RESULT_TRANSFORM_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst transformed = delivery.data;\n\t\t\t\tconst revision = transformed.revision;\n\t\t\t\tif (\n\t\t\t\t\ttransformed.sessionId !== data.sessionId ||\n\t\t\t\t\ttransformed.toolCallId !== data.toolCallId ||\n\t\t\t\t\ttransformed.toolName !== data.toolName ||\n\t\t\t\t\trevision.version !== data.revision.version ||\n\t\t\t\t\trevision.sessionId !== data.revision.sessionId ||\n\t\t\t\t\trevision.sequence !== data.revision.sequence ||\n\t\t\t\t\trevision.leafId !== data.revision.leafId\n\t\t\t\t) {\n\t\t\t\t\tthrow new Error(t(\"tool.result.transform transform cannot change result identity or revision\"));\n\t\t\t\t}\n\t\t\t\tfinalContent = transformed.content as (typeof normalizedContent)[number][];\n\t\t\t\tfinalIsError = transformed.isError;\n\t\t\t} catch (error) {\n\t\t\t\tconst report = (error as LifecycleFailureReport).report;\n\t\t\t\tif (report?.failures) {\n\t\t\t\t\tfor (const failure of report.failures) {\n\t\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\t\tfailure.error,\n\t\t\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t\t\t`${TOOL_RESULT_TRANSFORM_EVENT_ID}@${TOOL_RESULT_TRANSFORM_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tif (finalContent === content && finalIsError === isError) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn {\n\t\t\tcontent: finalContent,\n\t\t\tdetails: toolResult.details,\n\t\t\tisError: finalIsError,\n\t\t\tusage: toolResult.usage,\n\t\t};\n\t};\n}\n\n/**\n * Default transformContext link: the explicitly selected capability context\n * strategy. Moved from the AgentSession context-transform wiring (the legacy\n * chaining wrapper keeps composing it for the pre-chain path).\n */\nfunction createDefaultTransformContextLink(\n\truntime: CapabilityRuntime,\n\twiring: AgentLoopWiringV1,\n): AgentLoopTransformContextHookV1 {\n\treturn async (messages, signal) => {\n\t\tconst strategyName = wiring.getContextStrategyName();\n\t\tif (!strategyName) return undefined;\n\t\treturn applyCapabilityContextStrategy(\n\t\t\tmessages as AgentMessage[],\n\t\t\truntime,\n\t\t\tstrategyName,\n\t\t\twiring.getSessionId(),\n\t\t\tsignal,\n\t\t);\n\t};\n}\n\n/**\n * Default prepareNextTurn link: compaction first, then the agent's\n * construction-time prepare adapter, then the system-prompt/tools/model/\n * thinking-level refresh. Moved from the AgentSession next-turn wiring.\n */\nfunction createDefaultPrepareNextTurnLink(wiring: AgentLoopWiringV1): AgentLoopPrepareNextTurnHookV1 {\n\treturn async (turn, signal) => {\n\t\tconst turnContext = turn as PrepareNextTurnContext;\n\t\tconst context = await wiring.compactBeforeNextAssistantResponse(turnContext.context, signal);\n\t\tconst previousSnapshot = await wiring.getInitialPrepareNextTurn()?.({ ...turnContext, context }, signal);\n\t\tconst nextContext = previousSnapshot?.context ?? context;\n\t\tconst refresh = wiring.getTurnRefresh();\n\n\t\treturn {\n\t\t\t...previousSnapshot,\n\t\t\tcontext: {\n\t\t\t\t...nextContext,\n\t\t\t\tsystemPrompt: refresh.systemPrompt,\n\t\t\t\ttools: refresh.tools,\n\t\t\t},\n\t\t\tmodel: refresh.model,\n\t\t\tthinkingLevel: refresh.thinkingLevel,\n\t\t};\n\t};\n}\n\n/**\n * Install the default agent-loop executor as a first-party plugin. Default\n * links register first, so third-party links registered later chain after\n * them in registration order.\n */\nexport function installBootstrapAgentLoop(\n\truntime: CapabilityRuntime,\n\twiring: AgentLoopWiringV1,\n): CapabilityPluginHandle {\n\treturn loadCapabilityPluginSync(\n\t\truntime,\n\t\t{\n\t\t\tid: BOOTSTRAP_AGENT_LOOP_PLUGIN_ID,\n\t\t\tversion: \"0.0.0\",\n\t\t\tapiVersion: EXPERIMENTAL_PUBLIC_API_VERSION,\n\t\t\tentry: \"<embedded:bootstrap-agent-loop>\",\n\t\t},\n\t\t(api) => {\n\t\t\tapi.registerLoopHook(\"beforeToolCall\", createDefaultBeforeToolCallLink(runtime, wiring));\n\t\t\tapi.registerLoopHook(\"afterToolCall\", createDefaultAfterToolCallLink(runtime, wiring));\n\t\t\tapi.registerLoopHook(\"transformContext\", createDefaultTransformContextLink(runtime, wiring));\n\t\t\tapi.registerLoopHook(\"prepareNextTurn\", createDefaultPrepareNextTurnLink(wiring));\n\t\t\t// The default repeated-tool-call guard rides the public loop-hook\n\t\t\t// chains like any other first-party link; disabling this plugin\n\t\t\t// removes both of its links. It answers with two levels (judgments\n\t\t\t// can be wrong, so an irreversible stop is never the first response):\n\t\t\t// - warn (third identical call): the shouldStopAfterTurn link votes\n\t\t\t// false and the transformContext link below injects a reminder into\n\t\t\t// the next request view (runLoop consumes transformContext after\n\t\t\t// shouldStopAfterTurn and before the next model call); the user-\n\t\t\t// facing warn notice is delivered through the public SessionAPI\n\t\t\t// sendMessage face (persisted custom_message entry with live\n\t\t\t// message_start/message_end rendering), plus a warn log through\n\t\t\t// the public LoggerAPI.\n\t\t\t// - stop (fifth identical call): the shouldStopAfterTurn link votes\n\t\t\t// true; the stop notice rides agent_end newMessages, sendMessage\n\t\t\t// persistence + rendering, and a warn log — all channels on.\n\t\t\t// Absent host features (session/logger) degrade to the remaining\n\t\t\t// channels instead of blocking the guard.\n\t\t\tconst loopGuard = createRepeatedToolCallStopPolicy({\n\t\t\t\tdeliverWarn: (notice) => {\n\t\t\t\t\tvoid api.session?.sendMessage?.(notice, { triggerTurn: false });\n\t\t\t\t},\n\t\t\t\tonWarn: (info) => {\n\t\t\t\t\tapi.logger?.warn(\"Loop guard warned the model\", {\n\t\t\t\t\t\ttool: info.toolName,\n\t\t\t\t\t\trepeats: info.warnThreshold,\n\t\t\t\t\t\targsSummary: info.argsSummary,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tdeliverNotice: (notice) => {\n\t\t\t\t\tvoid api.session?.sendMessage?.(notice, { triggerTurn: false });\n\t\t\t\t},\n\t\t\t\tonStop: (info) => {\n\t\t\t\t\tapi.logger?.warn(\"Loop guard stopped the turn\", {\n\t\t\t\t\t\ttool: info.toolName,\n\t\t\t\t\t\trepeats: info.stopThreshold,\n\t\t\t\t\t\targsSummary: info.argsSummary,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t});\n\t\t\tapi.registerLoopHook(\"shouldStopAfterTurn\", loopGuard.shouldStopAfterTurn);\n\t\t\t// Registered after the default context-strategy link, so the reminder\n\t\t\t// is appended to the final post-strategy request view (survives any\n\t\t\t// strategy pruning) at its tail.\n\t\t\tapi.registerLoopHook(\"transformContext\", loopGuard.transformContext);\n\t\t\t// The default continuation strategy reproduces the host's own\n\t\t\t// post-run decision byte for byte; a replacement strategy overrides\n\t\t\t// the continue/stop call through registerRunLoopStrategy.\n\t\t\tapi.registerRunLoopStrategy(DEFAULT_RUN_LOOP_STRATEGY_NAME, {\n\t\t\t\tdecideNextCycle: (request) => ({ continueLoop: request.hostWillContinue }),\n\t\t\t});\n\t\t},\n\t);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap-compaction-policy.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/bootstrap-compaction-policy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,sBAAsB,EAA4B,MAAM,wBAAwB,CAAC;AAC/F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAUjE,eAAO,MAAM,8BAA8B,qCAAqC,CAAC;AACjF,eAAO,MAAM,8BAA8B,YAAY,CAAC;AASxD,8FAA8F;AAC9F,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,iBAAiB,GAAG,sBAAsB,CAkFnG","sourcesContent":["import { type CompactionPreparation, compact, prepareCompaction } from \"../compaction/index.ts\";\nimport { type CapabilityPluginHandle, loadCapabilityPluginSync } from \"./capability-plugin.ts\";\nimport type { CapabilityRuntime } from \"./capability-runtime.ts\";\nimport {\n\tapplyMicrocompactElision,\n\tDEFAULT_MIN_ELIDE_CHARS,\n\tMICROCOMPACT_CUSTOM_TYPE,\n\tplanMicrocompact,\n} from \"./microcompact.ts\";\nimport type { CompactionPolicyRequest, CompactionSummaryRequest } from \"./public-api.ts\";\nimport { EXPERIMENTAL_PUBLIC_API_VERSION } from \"./public-api.ts\";\n\nexport const BOOTSTRAP_COMPACTION_PLUGIN_ID = \"agent-forge.bootstrap-compaction\";\nexport const DEFAULT_COMPACTION_POLICY_NAME = \"default\";\n\n/**\n * 会话宿主经 threshold decide 请求透传的 microcompact 门控事实(settings 的\n * `compaction.microcompactEnabled` 与会话冷却的合取)。请求缺省视为 false,\n * 与 2026-10-01 默认值裁决一致:relief 为 opt-in experimental。\n */\ntype DecisionRequestWithMicrocompact = CompactionPolicyRequest & { microcompactEnabled?: boolean };\n\n/** Register the current automatic-compaction decision as a replaceable first-party policy. */\nexport function installBootstrapCompactionPolicy(runtime: CapabilityRuntime): CapabilityPluginHandle {\n\treturn loadCapabilityPluginSync(\n\t\truntime,\n\t\t{\n\t\t\tid: BOOTSTRAP_COMPACTION_PLUGIN_ID,\n\t\t\tversion: \"0.0.0\",\n\t\t\tapiVersion: EXPERIMENTAL_PUBLIC_API_VERSION,\n\t\t\tentry: \"<embedded:bootstrap-compaction>\",\n\t\t\trequiredCapabilities: [\"compaction-policy\"],\n\t\t},\n\t\t(api) => {\n\t\t\t// Microcompact 投影(宪法 §4/§5):经公共 registerEntryProjection 通道\n\t\t\t// 注册——内核按注册顺序应用投影、不解释语义;第三方上下文策略走同一\n\t\t\t// 通道。策略被禁用/替换时,本投影随插件卸载一并消失。\n\t\t\tapi.registerEntryProjection({\n\t\t\t\tcustomType: MICROCOMPACT_CUSTOM_TYPE,\n\t\t\t\tproject: (entries) => applyMicrocompactElision(entries as never) as never,\n\t\t\t});\n\t\t\tapi.registerCompactionPolicy(DEFAULT_COMPACTION_POLICY_NAME, {\n\t\t\t\tprepare: (request) =>\n\t\t\t\t\tprepareCompaction(\n\t\t\t\t\t\trequest.entries as Parameters<typeof prepareCompaction>[0],\n\t\t\t\t\t\trequest.settings as Parameters<typeof prepareCompaction>[1],\n\t\t\t\t\t),\n\t\t\t\tdecide: (request) => {\n\t\t\t\t\tif (!request.enabled) return { compact: false };\n\t\t\t\t\tif (request.reason === \"threshold\") {\n\t\t\t\t\t\tconst usage = request.contextUsage;\n\t\t\t\t\t\tconst overBudget =\n\t\t\t\t\t\t\tusage !== undefined &&\n\t\t\t\t\t\t\tusage.contextWindow > 0 &&\n\t\t\t\t\t\t\tusage.contextTokens > usage.contextWindow - usage.reserveTokens;\n\t\t\t\t\t\t// 便宜缓解优先(microcompact):阈值命中先尝试零成本的本地\n\t\t\t\t\t\t// 变换——把老的粗大 tool result 从模型可见上下文中替换为占位\n\t\t\t\t\t\t// 符——释放达标则以 relief 条目落地并跳过 LLM 摘要;不足则照常\n\t\t\t\t\t\t// 走全量压缩。条目语义完全属于本策略,投影也由本策略注册。\n\t\t\t\t\t\t// 宿主在设置关闭或会话冷却期内传 microcompactEnabled:false,\n\t\t\t\t\t\t// planMicrocompact 据此拒绝规划,自然落到下方全量压缩分支。\n\t\t\t\t\t\tif (overBudget && request.branchEntries !== undefined) {\n\t\t\t\t\t\t\tconst plan = planMicrocompact(request.branchEntries as Parameters<typeof planMicrocompact>[0], {\n\t\t\t\t\t\t\t\tenabled: (request as DecisionRequestWithMicrocompact).microcompactEnabled === true,\n\t\t\t\t\t\t\t\tkeepRecentTokens: request.keepRecentTokens ?? 0,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (plan) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tcompact: false,\n\t\t\t\t\t\t\t\t\trelief: {\n\t\t\t\t\t\t\t\t\t\tcustomType: MICROCOMPACT_CUSTOM_TYPE,\n\t\t\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t\t\telideBeforeEntryId: plan.elideBeforeEntryId,\n\t\t\t\t\t\t\t\t\t\t\tminChars: DEFAULT_MIN_ELIDE_CHARS,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { compact: overBudget, retry: false };\n\t\t\t\t\t}\n\t\t\t\t\tif (request.recoveryAttempted) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcompact: false,\n\t\t\t\t\t\t\tfailureMessage: request.contextOverflow\n\t\t\t\t\t\t\t\t? \"Context overflow recovery failed after one compact-and-retry attempt. Try reducing context or switching to a larger-context model.\"\n\t\t\t\t\t\t\t\t: \"Truncated response recovery failed after one compact-and-retry attempt.\",\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcompact: request.contextOverflow || request.recoverableLength,\n\t\t\t\t\t\tretry: request.canContinue,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tsummarize: async (request: CompactionSummaryRequest) =>\n\t\t\t\t\tcompact(request.preparation as CompactionPreparation, {\n\t\t\t\t\t\tinvocation: request.invocation,\n\t\t\t\t\t\tmodel: request.model,\n\t\t\t\t\t\tcustomInstructions: request.customInstructions,\n\t\t\t\t\t\tthinkingLevel: request.thinkingLevel,\n\t\t\t\t\t\tsignal: request.signal,\n\t\t\t\t\t}),\n\t\t\t});\n\t\t},\n\t);\n}\n"]}
1
+ {"version":3,"file":"bootstrap-compaction-policy.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/bootstrap-compaction-policy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,sBAAsB,EAA4B,MAAM,wBAAwB,CAAC;AAC/F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAIjE,eAAO,MAAM,8BAA8B,qCAAqC,CAAC;AACjF,eAAO,MAAM,8BAA8B,YAAY,CAAC;AAExD,8FAA8F;AAC9F,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,iBAAiB,GAAG,sBAAsB,CAkDnG","sourcesContent":["import { type CompactionPreparation, compact, prepareCompaction } from \"../compaction/index.ts\";\nimport { type CapabilityPluginHandle, loadCapabilityPluginSync } from \"./capability-plugin.ts\";\nimport type { CapabilityRuntime } from \"./capability-runtime.ts\";\nimport type { CompactionSummaryRequest } from \"./public-api.ts\";\nimport { EXPERIMENTAL_PUBLIC_API_VERSION } from \"./public-api.ts\";\n\nexport const BOOTSTRAP_COMPACTION_PLUGIN_ID = \"agent-forge.bootstrap-compaction\";\nexport const DEFAULT_COMPACTION_POLICY_NAME = \"default\";\n\n/** Register the current automatic-compaction decision as a replaceable first-party policy. */\nexport function installBootstrapCompactionPolicy(runtime: CapabilityRuntime): CapabilityPluginHandle {\n\treturn loadCapabilityPluginSync(\n\t\truntime,\n\t\t{\n\t\t\tid: BOOTSTRAP_COMPACTION_PLUGIN_ID,\n\t\t\tversion: \"0.0.0\",\n\t\t\tapiVersion: EXPERIMENTAL_PUBLIC_API_VERSION,\n\t\t\tentry: \"<embedded:bootstrap-compaction>\",\n\t\t\trequiredCapabilities: [\"compaction-policy\"],\n\t\t},\n\t\t(api) => {\n\t\t\tapi.registerCompactionPolicy(DEFAULT_COMPACTION_POLICY_NAME, {\n\t\t\t\tprepare: (request) =>\n\t\t\t\t\tprepareCompaction(\n\t\t\t\t\t\trequest.entries as Parameters<typeof prepareCompaction>[0],\n\t\t\t\t\t\trequest.settings as Parameters<typeof prepareCompaction>[1],\n\t\t\t\t\t),\n\t\t\t\tdecide: (request) => {\n\t\t\t\t\tif (request.reason === \"threshold\") {\n\t\t\t\t\t\tconst usage = request.contextUsage;\n\t\t\t\t\t\tconst overBudget =\n\t\t\t\t\t\t\tusage !== undefined &&\n\t\t\t\t\t\t\tusage.contextWindow > 0 &&\n\t\t\t\t\t\t\tusage.contextTokens > usage.contextWindow - usage.reserveTokens;\n\t\t\t\t\t\treturn { compact: overBudget, retry: false };\n\t\t\t\t\t}\n\t\t\t\t\tif (request.recoveryAttempted) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcompact: false,\n\t\t\t\t\t\t\tfailureMessage: request.contextOverflow\n\t\t\t\t\t\t\t\t? \"Context overflow recovery failed after one compact-and-retry attempt. Try reducing context or switching to a larger-context model.\"\n\t\t\t\t\t\t\t\t: \"Truncated response recovery failed after one compact-and-retry attempt.\",\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcompact: request.contextOverflow || request.recoverableLength,\n\t\t\t\t\t\tretry: request.canContinue,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tsummarize: async (request: CompactionSummaryRequest) =>\n\t\t\t\t\tcompact(request.preparation as CompactionPreparation, {\n\t\t\t\t\t\tinvocation: request.invocation,\n\t\t\t\t\t\tmodel: request.model,\n\t\t\t\t\t\tcustomInstructions: request.customInstructions,\n\t\t\t\t\t\tthinkingLevel: request.thinkingLevel,\n\t\t\t\t\t\tsignal: request.signal,\n\t\t\t\t\t}),\n\t\t\t});\n\t\t},\n\t);\n}\n"]}
@@ -1,6 +1,5 @@
1
1
  import { compact, prepareCompaction } from "../compaction/index.js";
2
2
  import { loadCapabilityPluginSync } from "./capability-plugin.js";
3
- import { applyMicrocompactElision, DEFAULT_MIN_ELIDE_CHARS, MICROCOMPACT_CUSTOM_TYPE, planMicrocompact, } from "./microcompact.js";
4
3
  import { EXPERIMENTAL_PUBLIC_API_VERSION } from "./public-api.js";
5
4
  export const BOOTSTRAP_COMPACTION_PLUGIN_ID = "agent-forge.bootstrap-compaction";
6
5
  export const DEFAULT_COMPACTION_POLICY_NAME = "default";
@@ -13,47 +12,14 @@ export function installBootstrapCompactionPolicy(runtime) {
13
12
  entry: "<embedded:bootstrap-compaction>",
14
13
  requiredCapabilities: ["compaction-policy"],
15
14
  }, (api) => {
16
- // Microcompact 投影(宪法 §4/§5):经公共 registerEntryProjection 通道
17
- // 注册——内核按注册顺序应用投影、不解释语义;第三方上下文策略走同一
18
- // 通道。策略被禁用/替换时,本投影随插件卸载一并消失。
19
- api.registerEntryProjection({
20
- customType: MICROCOMPACT_CUSTOM_TYPE,
21
- project: (entries) => applyMicrocompactElision(entries),
22
- });
23
15
  api.registerCompactionPolicy(DEFAULT_COMPACTION_POLICY_NAME, {
24
16
  prepare: (request) => prepareCompaction(request.entries, request.settings),
25
17
  decide: (request) => {
26
- if (!request.enabled)
27
- return { compact: false };
28
18
  if (request.reason === "threshold") {
29
19
  const usage = request.contextUsage;
30
20
  const overBudget = usage !== undefined &&
31
21
  usage.contextWindow > 0 &&
32
22
  usage.contextTokens > usage.contextWindow - usage.reserveTokens;
33
- // 便宜缓解优先(microcompact):阈值命中先尝试零成本的本地
34
- // 变换——把老的粗大 tool result 从模型可见上下文中替换为占位
35
- // 符——释放达标则以 relief 条目落地并跳过 LLM 摘要;不足则照常
36
- // 走全量压缩。条目语义完全属于本策略,投影也由本策略注册。
37
- // 宿主在设置关闭或会话冷却期内传 microcompactEnabled:false,
38
- // planMicrocompact 据此拒绝规划,自然落到下方全量压缩分支。
39
- if (overBudget && request.branchEntries !== undefined) {
40
- const plan = planMicrocompact(request.branchEntries, {
41
- enabled: request.microcompactEnabled === true,
42
- keepRecentTokens: request.keepRecentTokens ?? 0,
43
- });
44
- if (plan) {
45
- return {
46
- compact: false,
47
- relief: {
48
- customType: MICROCOMPACT_CUSTOM_TYPE,
49
- data: {
50
- elideBeforeEntryId: plan.elideBeforeEntryId,
51
- minChars: DEFAULT_MIN_ELIDE_CHARS,
52
- },
53
- },
54
- };
55
- }
56
- }
57
23
  return { compact: overBudget, retry: false };
58
24
  }
59
25
  if (request.recoveryAttempted) {
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap-compaction-policy.js","sourceRoot":"","sources":["../../../src/core/extensions/bootstrap-compaction-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAA+B,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAE/F,OAAO,EACN,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,gBAAgB,GAChB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AAElE,MAAM,CAAC,MAAM,8BAA8B,GAAG,kCAAkC,CAAC;AACjF,MAAM,CAAC,MAAM,8BAA8B,GAAG,SAAS,CAAC;AASxD,8FAA8F;AAC9F,MAAM,UAAU,gCAAgC,CAAC,OAA0B,EAA0B;IACpG,OAAO,wBAAwB,CAC9B,OAAO,EACP;QACC,EAAE,EAAE,8BAA8B;QAClC,OAAO,EAAE,OAAO;QAChB,UAAU,EAAE,+BAA+B;QAC3C,KAAK,EAAE,iCAAiC;QACxC,oBAAoB,EAAE,CAAC,mBAAmB,CAAC;KAC3C,EACD,CAAC,GAAG,EAAE,EAAE,CAAC;QACR,qFAA2D;QAC3D,sGAAoC;QACpC,+EAA6B;QAC7B,GAAG,CAAC,uBAAuB,CAAC;YAC3B,UAAU,EAAE,wBAAwB;YACpC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,wBAAwB,CAAC,OAAgB,CAAU;SACzE,CAAC,CAAC;QACH,GAAG,CAAC,wBAAwB,CAAC,8BAA8B,EAAE;YAC5D,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CACpB,iBAAiB,CAChB,OAAO,CAAC,OAAkD,EAC1D,OAAO,CAAC,QAAmD,CAC3D;YACF,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;gBACpB,IAAI,CAAC,OAAO,CAAC,OAAO;oBAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;gBAChD,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;oBACpC,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC;oBACnC,MAAM,UAAU,GACf,KAAK,KAAK,SAAS;wBACnB,KAAK,CAAC,aAAa,GAAG,CAAC;wBACvB,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;oBACjE,iFAAqC;oBACrC,qFAAuC;oBACvC,wFAAwC;oBACxC,uFAA+B;oBAC/B,6EAA6C;oBAC7C,gFAAwC;oBACxC,IAAI,UAAU,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;wBACvD,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC,aAAuD,EAAE;4BAC9F,OAAO,EAAG,OAA2C,CAAC,mBAAmB,KAAK,IAAI;4BAClF,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,CAAC;yBAC/C,CAAC,CAAC;wBACH,IAAI,IAAI,EAAE,CAAC;4BACV,OAAO;gCACN,OAAO,EAAE,KAAK;gCACd,MAAM,EAAE;oCACP,UAAU,EAAE,wBAAwB;oCACpC,IAAI,EAAE;wCACL,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;wCAC3C,QAAQ,EAAE,uBAAuB;qCACjC;iCACD;6BACD,CAAC;wBACH,CAAC;oBACF,CAAC;oBACD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;gBAC9C,CAAC;gBACD,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;oBAC/B,OAAO;wBACN,OAAO,EAAE,KAAK;wBACd,cAAc,EAAE,OAAO,CAAC,eAAe;4BACtC,CAAC,CAAC,oIAAoI;4BACtI,CAAC,CAAC,yEAAyE;qBAC5E,CAAC;gBACH,CAAC;gBACD,OAAO;oBACN,OAAO,EAAE,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,iBAAiB;oBAC7D,KAAK,EAAE,OAAO,CAAC,WAAW;iBAC1B,CAAC;YAAA,CACF;YACD,SAAS,EAAE,KAAK,EAAE,OAAiC,EAAE,EAAE,CACtD,OAAO,CAAC,OAAO,CAAC,WAAoC,EAAE;gBACrD,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;gBAC9C,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,MAAM,EAAE,OAAO,CAAC,MAAM;aACtB,CAAC;SACH,CAAC,CAAC;IAAA,CACH,CACD,CAAC;AAAA,CACF","sourcesContent":["import { type CompactionPreparation, compact, prepareCompaction } from \"../compaction/index.ts\";\nimport { type CapabilityPluginHandle, loadCapabilityPluginSync } from \"./capability-plugin.ts\";\nimport type { CapabilityRuntime } from \"./capability-runtime.ts\";\nimport {\n\tapplyMicrocompactElision,\n\tDEFAULT_MIN_ELIDE_CHARS,\n\tMICROCOMPACT_CUSTOM_TYPE,\n\tplanMicrocompact,\n} from \"./microcompact.ts\";\nimport type { CompactionPolicyRequest, CompactionSummaryRequest } from \"./public-api.ts\";\nimport { EXPERIMENTAL_PUBLIC_API_VERSION } from \"./public-api.ts\";\n\nexport const BOOTSTRAP_COMPACTION_PLUGIN_ID = \"agent-forge.bootstrap-compaction\";\nexport const DEFAULT_COMPACTION_POLICY_NAME = \"default\";\n\n/**\n * 会话宿主经 threshold decide 请求透传的 microcompact 门控事实(settings 的\n * `compaction.microcompactEnabled` 与会话冷却的合取)。请求缺省视为 false,\n * 与 2026-10-01 默认值裁决一致:relief 为 opt-in experimental。\n */\ntype DecisionRequestWithMicrocompact = CompactionPolicyRequest & { microcompactEnabled?: boolean };\n\n/** Register the current automatic-compaction decision as a replaceable first-party policy. */\nexport function installBootstrapCompactionPolicy(runtime: CapabilityRuntime): CapabilityPluginHandle {\n\treturn loadCapabilityPluginSync(\n\t\truntime,\n\t\t{\n\t\t\tid: BOOTSTRAP_COMPACTION_PLUGIN_ID,\n\t\t\tversion: \"0.0.0\",\n\t\t\tapiVersion: EXPERIMENTAL_PUBLIC_API_VERSION,\n\t\t\tentry: \"<embedded:bootstrap-compaction>\",\n\t\t\trequiredCapabilities: [\"compaction-policy\"],\n\t\t},\n\t\t(api) => {\n\t\t\t// Microcompact 投影(宪法 §4/§5):经公共 registerEntryProjection 通道\n\t\t\t// 注册——内核按注册顺序应用投影、不解释语义;第三方上下文策略走同一\n\t\t\t// 通道。策略被禁用/替换时,本投影随插件卸载一并消失。\n\t\t\tapi.registerEntryProjection({\n\t\t\t\tcustomType: MICROCOMPACT_CUSTOM_TYPE,\n\t\t\t\tproject: (entries) => applyMicrocompactElision(entries as never) as never,\n\t\t\t});\n\t\t\tapi.registerCompactionPolicy(DEFAULT_COMPACTION_POLICY_NAME, {\n\t\t\t\tprepare: (request) =>\n\t\t\t\t\tprepareCompaction(\n\t\t\t\t\t\trequest.entries as Parameters<typeof prepareCompaction>[0],\n\t\t\t\t\t\trequest.settings as Parameters<typeof prepareCompaction>[1],\n\t\t\t\t\t),\n\t\t\t\tdecide: (request) => {\n\t\t\t\t\tif (!request.enabled) return { compact: false };\n\t\t\t\t\tif (request.reason === \"threshold\") {\n\t\t\t\t\t\tconst usage = request.contextUsage;\n\t\t\t\t\t\tconst overBudget =\n\t\t\t\t\t\t\tusage !== undefined &&\n\t\t\t\t\t\t\tusage.contextWindow > 0 &&\n\t\t\t\t\t\t\tusage.contextTokens > usage.contextWindow - usage.reserveTokens;\n\t\t\t\t\t\t// 便宜缓解优先(microcompact):阈值命中先尝试零成本的本地\n\t\t\t\t\t\t// 变换——把老的粗大 tool result 从模型可见上下文中替换为占位\n\t\t\t\t\t\t// 符——释放达标则以 relief 条目落地并跳过 LLM 摘要;不足则照常\n\t\t\t\t\t\t// 走全量压缩。条目语义完全属于本策略,投影也由本策略注册。\n\t\t\t\t\t\t// 宿主在设置关闭或会话冷却期内传 microcompactEnabled:false,\n\t\t\t\t\t\t// planMicrocompact 据此拒绝规划,自然落到下方全量压缩分支。\n\t\t\t\t\t\tif (overBudget && request.branchEntries !== undefined) {\n\t\t\t\t\t\t\tconst plan = planMicrocompact(request.branchEntries as Parameters<typeof planMicrocompact>[0], {\n\t\t\t\t\t\t\t\tenabled: (request as DecisionRequestWithMicrocompact).microcompactEnabled === true,\n\t\t\t\t\t\t\t\tkeepRecentTokens: request.keepRecentTokens ?? 0,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (plan) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tcompact: false,\n\t\t\t\t\t\t\t\t\trelief: {\n\t\t\t\t\t\t\t\t\t\tcustomType: MICROCOMPACT_CUSTOM_TYPE,\n\t\t\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t\t\telideBeforeEntryId: plan.elideBeforeEntryId,\n\t\t\t\t\t\t\t\t\t\t\tminChars: DEFAULT_MIN_ELIDE_CHARS,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { compact: overBudget, retry: false };\n\t\t\t\t\t}\n\t\t\t\t\tif (request.recoveryAttempted) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcompact: false,\n\t\t\t\t\t\t\tfailureMessage: request.contextOverflow\n\t\t\t\t\t\t\t\t? \"Context overflow recovery failed after one compact-and-retry attempt. Try reducing context or switching to a larger-context model.\"\n\t\t\t\t\t\t\t\t: \"Truncated response recovery failed after one compact-and-retry attempt.\",\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcompact: request.contextOverflow || request.recoverableLength,\n\t\t\t\t\t\tretry: request.canContinue,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tsummarize: async (request: CompactionSummaryRequest) =>\n\t\t\t\t\tcompact(request.preparation as CompactionPreparation, {\n\t\t\t\t\t\tinvocation: request.invocation,\n\t\t\t\t\t\tmodel: request.model,\n\t\t\t\t\t\tcustomInstructions: request.customInstructions,\n\t\t\t\t\t\tthinkingLevel: request.thinkingLevel,\n\t\t\t\t\t\tsignal: request.signal,\n\t\t\t\t\t}),\n\t\t\t});\n\t\t},\n\t);\n}\n"]}
1
+ {"version":3,"file":"bootstrap-compaction-policy.js","sourceRoot":"","sources":["../../../src/core/extensions/bootstrap-compaction-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAA+B,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAG/F,OAAO,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AAElE,MAAM,CAAC,MAAM,8BAA8B,GAAG,kCAAkC,CAAC;AACjF,MAAM,CAAC,MAAM,8BAA8B,GAAG,SAAS,CAAC;AAExD,8FAA8F;AAC9F,MAAM,UAAU,gCAAgC,CAAC,OAA0B,EAA0B;IACpG,OAAO,wBAAwB,CAC9B,OAAO,EACP;QACC,EAAE,EAAE,8BAA8B;QAClC,OAAO,EAAE,OAAO;QAChB,UAAU,EAAE,+BAA+B;QAC3C,KAAK,EAAE,iCAAiC;QACxC,oBAAoB,EAAE,CAAC,mBAAmB,CAAC;KAC3C,EACD,CAAC,GAAG,EAAE,EAAE,CAAC;QACR,GAAG,CAAC,wBAAwB,CAAC,8BAA8B,EAAE;YAC5D,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CACpB,iBAAiB,CAChB,OAAO,CAAC,OAAkD,EAC1D,OAAO,CAAC,QAAmD,CAC3D;YACF,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;gBACpB,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;oBACpC,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC;oBACnC,MAAM,UAAU,GACf,KAAK,KAAK,SAAS;wBACnB,KAAK,CAAC,aAAa,GAAG,CAAC;wBACvB,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;oBACjE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;gBAC9C,CAAC;gBACD,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;oBAC/B,OAAO;wBACN,OAAO,EAAE,KAAK;wBACd,cAAc,EAAE,OAAO,CAAC,eAAe;4BACtC,CAAC,CAAC,oIAAoI;4BACtI,CAAC,CAAC,yEAAyE;qBAC5E,CAAC;gBACH,CAAC;gBACD,OAAO;oBACN,OAAO,EAAE,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,iBAAiB;oBAC7D,KAAK,EAAE,OAAO,CAAC,WAAW;iBAC1B,CAAC;YAAA,CACF;YACD,SAAS,EAAE,KAAK,EAAE,OAAiC,EAAE,EAAE,CACtD,OAAO,CAAC,OAAO,CAAC,WAAoC,EAAE;gBACrD,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;gBAC9C,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,MAAM,EAAE,OAAO,CAAC,MAAM;aACtB,CAAC;SACH,CAAC,CAAC;IAAA,CACH,CACD,CAAC;AAAA,CACF","sourcesContent":["import { type CompactionPreparation, compact, prepareCompaction } from \"../compaction/index.ts\";\nimport { type CapabilityPluginHandle, loadCapabilityPluginSync } from \"./capability-plugin.ts\";\nimport type { CapabilityRuntime } from \"./capability-runtime.ts\";\nimport type { CompactionSummaryRequest } from \"./public-api.ts\";\nimport { EXPERIMENTAL_PUBLIC_API_VERSION } from \"./public-api.ts\";\n\nexport const BOOTSTRAP_COMPACTION_PLUGIN_ID = \"agent-forge.bootstrap-compaction\";\nexport const DEFAULT_COMPACTION_POLICY_NAME = \"default\";\n\n/** Register the current automatic-compaction decision as a replaceable first-party policy. */\nexport function installBootstrapCompactionPolicy(runtime: CapabilityRuntime): CapabilityPluginHandle {\n\treturn loadCapabilityPluginSync(\n\t\truntime,\n\t\t{\n\t\t\tid: BOOTSTRAP_COMPACTION_PLUGIN_ID,\n\t\t\tversion: \"0.0.0\",\n\t\t\tapiVersion: EXPERIMENTAL_PUBLIC_API_VERSION,\n\t\t\tentry: \"<embedded:bootstrap-compaction>\",\n\t\t\trequiredCapabilities: [\"compaction-policy\"],\n\t\t},\n\t\t(api) => {\n\t\t\tapi.registerCompactionPolicy(DEFAULT_COMPACTION_POLICY_NAME, {\n\t\t\t\tprepare: (request) =>\n\t\t\t\t\tprepareCompaction(\n\t\t\t\t\t\trequest.entries as Parameters<typeof prepareCompaction>[0],\n\t\t\t\t\t\trequest.settings as Parameters<typeof prepareCompaction>[1],\n\t\t\t\t\t),\n\t\t\t\tdecide: (request) => {\n\t\t\t\t\tif (request.reason === \"threshold\") {\n\t\t\t\t\t\tconst usage = request.contextUsage;\n\t\t\t\t\t\tconst overBudget =\n\t\t\t\t\t\t\tusage !== undefined &&\n\t\t\t\t\t\t\tusage.contextWindow > 0 &&\n\t\t\t\t\t\t\tusage.contextTokens > usage.contextWindow - usage.reserveTokens;\n\t\t\t\t\t\treturn { compact: overBudget, retry: false };\n\t\t\t\t\t}\n\t\t\t\t\tif (request.recoveryAttempted) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcompact: false,\n\t\t\t\t\t\t\tfailureMessage: request.contextOverflow\n\t\t\t\t\t\t\t\t? \"Context overflow recovery failed after one compact-and-retry attempt. Try reducing context or switching to a larger-context model.\"\n\t\t\t\t\t\t\t\t: \"Truncated response recovery failed after one compact-and-retry attempt.\",\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcompact: request.contextOverflow || request.recoverableLength,\n\t\t\t\t\t\tretry: request.canContinue,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tsummarize: async (request: CompactionSummaryRequest) =>\n\t\t\t\t\tcompact(request.preparation as CompactionPreparation, {\n\t\t\t\t\t\tinvocation: request.invocation,\n\t\t\t\t\t\tmodel: request.model,\n\t\t\t\t\t\tcustomInstructions: request.customInstructions,\n\t\t\t\t\t\tthinkingLevel: request.thinkingLevel,\n\t\t\t\t\t\tsignal: request.signal,\n\t\t\t\t\t}),\n\t\t\t});\n\t\t},\n\t);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/bootstrap-lifecycle.ts"],"names":[],"mappings":"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","sourcesContent":["import { type CapabilityPluginHandle, loadCapabilityPluginSync } from \"./capability-plugin.ts\";\nimport type { CapabilityRuntime } from \"./capability-runtime.ts\";\nimport {\n\ttype AgentEndEventDataV1,\n\ttype AgentLifecycleEventDataV1,\n\ttype AgentTaskSettledEventDataV1,\n\tagentEndEventDefinition,\n\tagentSettledEventDefinition,\n\tagentStartEventDefinition,\n\tagentTaskSettledEventDefinition,\n\ttype BeforeAgentStartEventDataV1,\n\ttype BeforeAgentStartEventDataV2,\n\tbeforeAgentStartEventDefinition,\n\tbeforeAgentStartV2EventDefinition,\n\ttype CapabilityCallEventDataV1,\n\ttype ContextAssembledEventDataV1,\n\tcapabilityCallEventDefinition,\n\tcontextAssembledEventDefinition,\n\ttype InputGateBlockedEventDataV1,\n\ttype InputReceivedEventDataV1,\n\tinputGateBlockedEventDefinition,\n\tinputReceivedEventDefinition,\n\ttype MessageBoundaryEventDataV1,\n\ttype ModelResponseEventDataV1,\n\ttype ModelSelectEventDataV1,\n\ttype ModelStreamEventDataV1,\n\tmessageEndEventDefinition,\n\tmessageStartEventDefinition,\n\tmodelResponseEventDefinition,\n\tmodelSelectEventDefinition,\n\tmodelStreamEventDefinition,\n\ttype OperationCancelEventDataV1,\n\ttype OperationEndEventDataV1,\n\ttype OperationStartEventDataV1,\n\ttype OperationStepEventDataV1,\n\toperationCancelEventDefinition,\n\toperationEndEventDefinition,\n\toperationStartEventDefinition,\n\toperationStepEventDefinition,\n\ttype PluginDisposeEventDataV1,\n\ttype PluginReadyEventDataV1,\n\ttype PluginRejectedEventDataV1,\n\ttype ProviderFailoverProbeFailedEventDataV1,\n\ttype ProviderFailoverRecoveredEventDataV1,\n\ttype ProviderFailoverSwitchedEventDataV1,\n\tpluginDisposeEventDefinition,\n\tpluginReadyEventDefinition,\n\tpluginRejectedEventDefinition,\n\tproviderFailoverProbeFailedEventDefinition,\n\tproviderFailoverRecoveredEventDefinition,\n\tproviderFailoverSwitchedEventDefinition,\n\ttype ResourcesDiscoverEventDataV1,\n\ttype ResourcesDiscoverEventDataV2,\n\tresourcesDiscoverEventDefinition,\n\tresourcesDiscoverV2EventDefinition,\n\ttype SessionAutoRetryEventDataV1,\n\ttype SessionCompactionDecisionEventDataV1,\n\ttype SessionCompactionFailedEventDataV1,\n\ttype SessionContextReplacedEventDataV1,\n\ttype SessionEndEventDataV1,\n\ttype SessionEntryAppendedEventDataV1,\n\ttype SessionInfoChangedEventDataV1,\n\ttype SessionReloadEventDataV1,\n\ttype SessionStartEventDataV1,\n\tsessionAutoRetryEventDefinition,\n\tsessionCompactionDecisionEventDefinition,\n\tsessionCompactionFailedEventDefinition,\n\tsessionContextReplacedEventDefinition,\n\tsessionEndEventDefinition,\n\tsessionEntryAppendedEventDefinition,\n\tsessionInfoChangedEventDefinition,\n\tsessionReloadEventDefinition,\n\tsessionStartEventDefinition,\n\ttype ThinkingLevelSelectEventDataV1,\n\ttype ToolCallEventDataV1,\n\ttype ToolCommitEventDataV1,\n\ttype ToolExecuteEventDataV1,\n\ttype ToolExecutionStartEventDataV1,\n\ttype ToolGateBlockedEventDataV1,\n\ttype ToolResultEventDataV1,\n\ttype ToolResultRawEventDataV1,\n\ttype ToolResultTransformEventDataV1,\n\ttype TurnEndEventDataV1,\n\ttype TurnStartEventDataV1,\n\tthinkingLevelSelectEventDefinition,\n\ttoolCallEventDefinition,\n\ttoolCommitEventDefinition,\n\ttoolExecuteEventDefinition,\n\ttoolExecutionStartEventDefinition,\n\ttoolGateBlockedEventDefinition,\n\ttoolResultEventDefinition,\n\ttoolResultRawEventDefinition,\n\ttoolResultTransformEventDefinition,\n\tturnEndEventDefinition,\n\tturnStartEventDefinition,\n\ttype UIPromptBoundaryEventDataV1,\n\ttype UserBashEventDataV1,\n\tuiPromptEndEventDefinition,\n\tuiPromptStartEventDefinition,\n\tuserBashEventDefinition,\n} from \"./lifecycle-catalog.ts\";\n\nexport type { CapabilityCallEventNameV1, CapabilityCallStatusV1, ModelStreamEventNameV1 } from \"./lifecycle-catalog.ts\";\n\nimport type { SessionRevisionV1 } from \"./public-api.ts\";\nimport { EXPERIMENTAL_PUBLIC_API_VERSION } from \"./public-api.ts\";\n\nexport {\n\tAGENT_END_EVENT_ID,\n\tAGENT_END_EVENT_VERSION,\n\tAGENT_SETTLED_EVENT_ID,\n\tAGENT_SETTLED_EVENT_VERSION,\n\tAGENT_START_EVENT_ID,\n\tAGENT_START_EVENT_VERSION,\n\tAGENT_TASK_SETTLED_EVENT_ID,\n\tAGENT_TASK_SETTLED_EVENT_VERSION,\n\ttype AgentEndEventDataV1,\n\ttype AgentLifecycleEventDataV1,\n\ttype AgentTaskSettledEventDataV1,\n\tagentEndEventDefinition,\n\tagentSettledEventDefinition,\n\tagentStartEventDefinition,\n\tagentTaskSettledEventDefinition,\n\tBEFORE_AGENT_START_EVENT_ID,\n\tBEFORE_AGENT_START_EVENT_VERSION,\n\tBEFORE_AGENT_START_EVENT_VERSION_V2,\n\ttype BeforeAgentStartEventDataV1,\n\ttype BeforeAgentStartEventDataV2,\n\tbeforeAgentStartEventDefinition,\n\tbeforeAgentStartV2EventDefinition,\n\tCAPABILITY_CALL_EVENT_ID,\n\tCAPABILITY_CALL_EVENT_VERSION,\n\ttype CapabilityCallEventDataV1,\n\tCONTEXT_ASSEMBLED_EVENT_ID,\n\tCONTEXT_ASSEMBLED_EVENT_VERSION,\n\ttype ContextAssembledEventDataV1,\n\tcontextAssembledEventDefinition,\n\tINPUT_GATE_BLOCKED_EVENT_ID,\n\tINPUT_GATE_BLOCKED_EVENT_VERSION,\n\tINPUT_RECEIVED_EVENT_ID,\n\tINPUT_RECEIVED_EVENT_VERSION,\n\ttype InputGateBlockedEventDataV1,\n\ttype InputReceivedEventDataV1,\n\tinputGateBlockedEventDefinition,\n\tinputReceivedEventDefinition,\n\tMESSAGE_END_EVENT_ID,\n\tMESSAGE_END_EVENT_VERSION,\n\tMESSAGE_START_EVENT_ID,\n\tMESSAGE_START_EVENT_VERSION,\n\ttype MessageBoundaryEventDataV1,\n\tMODEL_RESPONSE_EVENT_ID,\n\tMODEL_RESPONSE_EVENT_VERSION,\n\tMODEL_SELECT_EVENT_ID,\n\tMODEL_SELECT_EVENT_VERSION,\n\tMODEL_STREAM_EVENT_ID,\n\tMODEL_STREAM_EVENT_VERSION,\n\ttype ModelResponseEventDataV1,\n\ttype ModelSelectEventDataV1,\n\ttype ModelStreamEventDataV1,\n\tmessageEndEventDefinition,\n\tmessageStartEventDefinition,\n\tmodelSelectEventDefinition,\n\tOPERATION_CANCEL_EVENT_ID,\n\tOPERATION_CANCEL_EVENT_VERSION,\n\tOPERATION_END_EVENT_ID,\n\tOPERATION_END_EVENT_VERSION,\n\tOPERATION_START_EVENT_ID,\n\tOPERATION_START_EVENT_VERSION,\n\tOPERATION_STEP_EVENT_ID,\n\tOPERATION_STEP_EVENT_VERSION,\n\ttype OperationCancelEventDataV1,\n\ttype OperationEndEventDataV1,\n\ttype OperationStartEventDataV1,\n\ttype OperationStepEventDataV1,\n\tPLUGIN_DISPOSE_EVENT_ID,\n\tPLUGIN_DISPOSE_EVENT_VERSION,\n\tPLUGIN_READY_EVENT_ID,\n\tPLUGIN_READY_EVENT_VERSION,\n\tPLUGIN_REJECTED_EVENT_ID,\n\tPLUGIN_REJECTED_EVENT_VERSION,\n\ttype PluginDisposeEventDataV1,\n\ttype PluginReadyEventDataV1,\n\ttype PluginRejectedEventDataV1,\n\tPROVIDER_FAILOVER_PROBE_FAILED_EVENT_ID,\n\tPROVIDER_FAILOVER_PROBE_FAILED_EVENT_VERSION,\n\tPROVIDER_FAILOVER_RECOVERED_EVENT_ID,\n\tPROVIDER_FAILOVER_RECOVERED_EVENT_VERSION,\n\tPROVIDER_FAILOVER_SWITCHED_EVENT_ID,\n\tPROVIDER_FAILOVER_SWITCHED_EVENT_VERSION,\n\ttype ProviderFailoverProbeFailedEventDataV1,\n\ttype ProviderFailoverRecoveredEventDataV1,\n\ttype ProviderFailoverSwitchedEventDataV1,\n\tproviderFailoverProbeFailedEventDefinition,\n\tproviderFailoverRecoveredEventDefinition,\n\tproviderFailoverSwitchedEventDefinition,\n\tRESOURCES_DISCOVER_EVENT_ID,\n\tRESOURCES_DISCOVER_EVENT_VERSION,\n\tRESOURCES_DISCOVER_EVENT_VERSION_V2,\n\ttype ResourcesDiscoverEventDataV1,\n\ttype ResourcesDiscoverEventDataV2,\n\tresourcesDiscoverEventDefinition,\n\tresourcesDiscoverV2EventDefinition,\n\tSESSION_AUTO_RETRY_EVENT_ID,\n\tSESSION_AUTO_RETRY_EVENT_VERSION,\n\tSESSION_COMPACTION_DECISION_EVENT_ID,\n\tSESSION_COMPACTION_DECISION_EVENT_VERSION,\n\tSESSION_COMPACTION_FAILED_EVENT_ID,\n\tSESSION_COMPACTION_FAILED_EVENT_VERSION,\n\tSESSION_CONTEXT_REPLACED_EVENT_ID,\n\tSESSION_CONTEXT_REPLACED_EVENT_VERSION,\n\tSESSION_END_EVENT_ID,\n\tSESSION_END_EVENT_VERSION,\n\tSESSION_ENTRY_APPENDED_EVENT_ID,\n\tSESSION_ENTRY_APPENDED_EVENT_VERSION,\n\tSESSION_INFO_CHANGED_EVENT_ID,\n\tSESSION_INFO_CHANGED_EVENT_VERSION,\n\tSESSION_RELOAD_EVENT_ID,\n\tSESSION_RELOAD_EVENT_VERSION,\n\tSESSION_START_EVENT_ID,\n\tSESSION_START_EVENT_VERSION,\n\ttype SessionAutoRetryEventDataV1,\n\ttype SessionCompactionDecisionEventDataV1,\n\ttype SessionCompactionFailedEventDataV1,\n\ttype SessionContextReplacedEventDataV1,\n\ttype SessionEndEventDataV1,\n\ttype SessionEntryAppendedEventDataV1,\n\ttype SessionInfoChangedEventDataV1,\n\ttype SessionReloadEventDataV1,\n\ttype SessionStartEventDataV1,\n\tsessionAutoRetryEventDefinition,\n\tsessionCompactionDecisionEventDefinition,\n\tsessionCompactionFailedEventDefinition,\n\tsessionEndEventDefinition,\n\tsessionEntryAppendedEventDefinition,\n\tsessionInfoChangedEventDefinition,\n\tsessionStartEventDefinition,\n\tTHINKING_LEVEL_SELECT_EVENT_ID,\n\tTHINKING_LEVEL_SELECT_EVENT_VERSION,\n\ttype ThinkingLevelSelectEventDataV1,\n\tTOOL_CALL_EVENT_ID,\n\tTOOL_CALL_EVENT_VERSION,\n\tTOOL_COMMIT_EVENT_ID,\n\tTOOL_COMMIT_EVENT_VERSION,\n\tTOOL_EXECUTE_EVENT_ID,\n\tTOOL_EXECUTE_EVENT_VERSION,\n\tTOOL_EXECUTION_START_EVENT_ID,\n\tTOOL_EXECUTION_START_EVENT_VERSION,\n\tTOOL_GATE_BLOCKED_EVENT_ID,\n\tTOOL_GATE_BLOCKED_EVENT_VERSION,\n\tTOOL_RESULT_EVENT_ID,\n\tTOOL_RESULT_EVENT_VERSION,\n\tTOOL_RESULT_RAW_EVENT_ID,\n\tTOOL_RESULT_RAW_EVENT_VERSION,\n\tTOOL_RESULT_TRANSFORM_EVENT_ID,\n\tTOOL_RESULT_TRANSFORM_EVENT_VERSION,\n\ttype ToolCallEventDataV1,\n\ttype ToolCommitEventDataV1,\n\ttype ToolExecuteEventDataV1,\n\ttype ToolExecutionStartEventDataV1,\n\ttype ToolGateBlockedEventDataV1,\n\ttype ToolResultEventDataV1,\n\ttype ToolResultRawEventDataV1,\n\ttype ToolResultTransformEventDataV1,\n\tTURN_END_EVENT_ID,\n\tTURN_END_EVENT_VERSION,\n\tTURN_START_EVENT_ID,\n\tTURN_START_EVENT_VERSION,\n\ttype TurnEndEventDataV1,\n\ttype TurnStartEventDataV1,\n\tthinkingLevelSelectEventDefinition,\n\ttoolExecutionStartEventDefinition,\n\ttoolGateBlockedEventDefinition,\n\tturnEndEventDefinition,\n\tturnStartEventDefinition,\n\tUI_PROMPT_END_EVENT_ID,\n\tUI_PROMPT_END_EVENT_VERSION,\n\tUI_PROMPT_START_EVENT_ID,\n\tUI_PROMPT_START_EVENT_VERSION,\n\ttype UIPromptBoundaryEventDataV1,\n\tUSER_BASH_EVENT_ID,\n\tUSER_BASH_EVENT_VERSION,\n\ttype UserBashEventDataV1,\n\tuiPromptEndEventDefinition,\n\tuiPromptStartEventDefinition,\n\tuserBashEventDefinition,\n\tvalidateAgentEndEventDataV1,\n\tvalidateAgentLifecycleEventDataV1,\n\tvalidateAgentTaskSettledEventDataV1,\n\tvalidateBeforeAgentStartEventDataV1,\n\tvalidateBeforeAgentStartEventDataV2,\n\tvalidateCapabilityCallEventDataV1,\n\tvalidateContextAssembledEventDataV1,\n\tvalidateInputReceivedEventDataV1,\n\tvalidateMessageBoundaryEventDataV1,\n\tvalidateModelResponseEventDataV1,\n\tvalidateModelSelectEventDataV1,\n\tvalidateModelStreamEventDataV1,\n\tvalidateOperationCancelEventDataV1,\n\tvalidateOperationEndEventDataV1,\n\tvalidateOperationStartEventDataV1,\n\tvalidateOperationStepEventDataV1,\n\tvalidatePluginDisposeEventDataV1,\n\tvalidatePluginReadyEventDataV1,\n\tvalidateProviderFailoverProbeFailedEventDataV1,\n\tvalidateProviderFailoverRecoveredEventDataV1,\n\tvalidateProviderFailoverSwitchedEventDataV1,\n\tvalidateResourcesDiscoverEventDataV1,\n\tvalidateResourcesDiscoverEventDataV2,\n\tvalidateSessionAutoRetryEventDataV1,\n\tvalidateSessionCompactionDecisionEventDataV1,\n\tvalidateSessionCompactionFailedEventDataV1,\n\tvalidateSessionContextReplacedEventDataV1,\n\tvalidateSessionEndEventDataV1,\n\tvalidateSessionEntryAppendedEventDataV1,\n\tvalidateSessionInfoChangedEventDataV1,\n\tvalidateSessionReloadEventDataV1,\n\tvalidateSessionStartEventDataV1,\n\tvalidateThinkingLevelSelectEventDataV1,\n\tvalidateToolCallEventDataV1,\n\tvalidateToolCommitEventDataV1,\n\tvalidateToolExecuteEventDataV1,\n\tvalidateToolExecutionStartEventDataV1,\n\tvalidateToolGateBlockedEventDataV1,\n\tvalidateToolResultEventDataV1,\n\tvalidateToolResultRawEventDataV1,\n\tvalidateToolResultTransformEventDataV1,\n\tvalidateTurnEndEventDataV1,\n\tvalidateTurnStartEventDataV1,\n\tvalidateUIPromptBoundaryEventDataV1,\n\tvalidateUserBashEventDataV1,\n} from \"./lifecycle-catalog.ts\";\n\nexport const BOOTSTRAP_LIFECYCLE_PLUGIN_ID = \"agent-forge.bootstrap-lifecycle\";\nexport const SESSION_COMPACTION_COMMIT_EVENT_ID = \"session.compaction.commit\";\nexport const SESSION_COMPACTION_COMMIT_EVENT_VERSION = 1;\n\nexport interface SessionCompactionCommitEventDataV1 {\n\tversion: 1;\n\tstatus: \"committed\" | \"replayed\";\n\tentryId: string;\n\toperationId: string;\n\trevision: SessionRevisionV1;\n\treason: \"manual\" | \"threshold\" | \"overflow\";\n\tsummary: string;\n\tfirstKeptEntryId: string;\n\ttokensBefore: number;\n\tfromHook: boolean;\n\tusage?: unknown;\n\tdetails?: unknown;\n}\n\nconst isPlainRecord = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === \"object\" && value !== null && Object.getPrototypeOf(value) === Object.prototype;\n\nfunction assertJsonSafe(value: unknown, label: string, seen = new Set<object>()): void {\n\tif (value === null || typeof value === \"string\" || typeof value === \"boolean\") return;\n\tif (typeof value === \"number\") {\n\t\tif (Number.isFinite(value)) return;\n\t\tthrow new Error(`${label} must contain only finite JSON numbers`);\n\t}\n\tif (typeof value !== \"object\") throw new Error(`${label} must be JSON-safe`);\n\tif (seen.has(value)) throw new Error(`${label} must not contain cycles`);\n\tseen.add(value);\n\tif (Array.isArray(value)) {\n\t\tfor (const [index, entry] of value.entries()) assertJsonSafe(entry, `${label}[${index}]`, seen);\n\t} else if (isPlainRecord(value)) {\n\t\tfor (const [key, entry] of Object.entries(value)) assertJsonSafe(entry, `${label}.${key}`, seen);\n\t} else {\n\t\tthrow new Error(`${label} must contain only JSON arrays and plain objects`);\n\t}\n\tseen.delete(value);\n}\n\nfunction assertString(value: unknown, label: string): asserts value is string {\n\tif (typeof value !== \"string\" || value.trim() === \"\") throw new Error(`${label} must be a non-empty string`);\n}\n\nfunction assertRevision(value: unknown): asserts value is SessionRevisionV1 {\n\tif (!isPlainRecord(value)) throw new Error(\"session.compaction.commit.revision must be a plain object\");\n\tconst keys = Object.keys(value).sort();\n\tif (keys.join(\",\") !== \"leafId,sequence,sessionId,version\") {\n\t\tthrow new Error(\"session.compaction.commit.revision has unsupported fields\");\n\t}\n\tif (value.version !== 1) throw new Error(\"session.compaction.commit.revision.version must be 1\");\n\tassertString(value.sessionId, \"session.compaction.commit.revision.sessionId\");\n\tconst sequence = value.sequence;\n\tif (typeof sequence !== \"number\" || !Number.isSafeInteger(sequence) || sequence < 0) {\n\t\tthrow new Error(\"session.compaction.commit.revision.sequence must be a non-negative safe integer\");\n\t}\n\tif (value.leafId !== null) assertString(value.leafId, \"session.compaction.commit.revision.leafId\");\n}\n\n/** Strict validator for the committed compaction lifecycle payload. */\nexport function validateSessionCompactionCommitEventDataV1(value: unknown): SessionCompactionCommitEventDataV1 {\n\tif (!isPlainRecord(value)) throw new Error(\"session.compaction.commit data must be a plain object\");\n\tconst allowed = new Set([\n\t\t\"version\",\n\t\t\"status\",\n\t\t\"entryId\",\n\t\t\"operationId\",\n\t\t\"revision\",\n\t\t\"reason\",\n\t\t\"summary\",\n\t\t\"firstKeptEntryId\",\n\t\t\"tokensBefore\",\n\t\t\"fromHook\",\n\t\t\"usage\",\n\t\t\"details\",\n\t]);\n\tconst unsupported = Object.keys(value).filter((key) => !allowed.has(key));\n\tif (unsupported.length > 0) {\n\t\tthrow new Error(`session.compaction.commit data has unsupported fields: ${unsupported.join(\", \")}`);\n\t}\n\tfor (const key of [\n\t\t\"version\",\n\t\t\"status\",\n\t\t\"entryId\",\n\t\t\"operationId\",\n\t\t\"revision\",\n\t\t\"reason\",\n\t\t\"summary\",\n\t\t\"firstKeptEntryId\",\n\t\t\"tokensBefore\",\n\t\t\"fromHook\",\n\t]) {\n\t\tif (!(key in value)) throw new Error(`session.compaction.commit data is missing required field: ${key}`);\n\t}\n\tif (value.version !== 1) throw new Error(\"session.compaction.commit data.version must be 1\");\n\tif (value.status !== \"committed\" && value.status !== \"replayed\") {\n\t\tthrow new Error(\"session.compaction.commit data.status is invalid\");\n\t}\n\tassertString(value.entryId, \"session.compaction.commit data.entryId\");\n\tassertString(value.operationId, \"session.compaction.commit data.operationId\");\n\tassertRevision(value.revision);\n\tif (value.reason !== \"manual\" && value.reason !== \"threshold\" && value.reason !== \"overflow\") {\n\t\tthrow new Error(\"session.compaction.commit data.reason is invalid\");\n\t}\n\tassertString(value.summary, \"session.compaction.commit data.summary\");\n\tassertString(value.firstKeptEntryId, \"session.compaction.commit data.firstKeptEntryId\");\n\tif (typeof value.tokensBefore !== \"number\" || !Number.isFinite(value.tokensBefore) || value.tokensBefore < 0) {\n\t\tthrow new Error(\"session.compaction.commit data.tokensBefore must be a non-negative finite number\");\n\t}\n\tif (typeof value.fromHook !== \"boolean\") throw new Error(\"session.compaction.commit data.fromHook must be boolean\");\n\tif (\"usage\" in value) assertJsonSafe(value.usage, \"session.compaction.commit data.usage\");\n\tif (\"details\" in value) assertJsonSafe(value.details, \"session.compaction.commit data.details\");\n\treturn value as unknown as SessionCompactionCommitEventDataV1;\n}\n\nexport function installBootstrapLifecycle(runtime: CapabilityRuntime): CapabilityPluginHandle {\n\treturn loadCapabilityPluginSync(\n\t\truntime,\n\t\t{\n\t\t\tid: BOOTSTRAP_LIFECYCLE_PLUGIN_ID,\n\t\t\tversion: \"0.0.0\",\n\t\t\tapiVersion: EXPERIMENTAL_PUBLIC_API_VERSION,\n\t\t\tentry: \"<embedded:bootstrap-lifecycle>\",\n\t\t},\n\t\t(api) => {\n\t\t\tapi.lifecycle.define<SessionCompactionCommitEventDataV1>({\n\t\t\t\tid: SESSION_COMPACTION_COMMIT_EVENT_ID,\n\t\t\t\tversion: SESSION_COMPACTION_COMMIT_EVENT_VERSION,\n\t\t\t\tphase: \"committed\",\n\t\t\t\tschema: \"agent-forge/session.compaction.commit@1\",\n\t\t\t\tallowedRegistrationKinds: [\"observe\", \"after-commit\"],\n\t\t\t\tvalidate: validateSessionCompactionCommitEventDataV1,\n\t\t\t});\n\t\t\tapi.lifecycle.define<SessionAutoRetryEventDataV1>(sessionAutoRetryEventDefinition());\n\t\t\tapi.lifecycle.define<SessionCompactionDecisionEventDataV1>(sessionCompactionDecisionEventDefinition());\n\t\t\tapi.lifecycle.define<SessionCompactionFailedEventDataV1>(sessionCompactionFailedEventDefinition());\n\t\t\tapi.lifecycle.define<SessionEndEventDataV1>(sessionEndEventDefinition());\n\t\t\tapi.lifecycle.define<AgentTaskSettledEventDataV1>(agentTaskSettledEventDefinition());\n\t\t\tapi.lifecycle.define<ToolGateBlockedEventDataV1>(toolGateBlockedEventDefinition());\n\t\t\tapi.lifecycle.define<InputGateBlockedEventDataV1>(inputGateBlockedEventDefinition());\n\t\t\tapi.lifecycle.define<ProviderFailoverSwitchedEventDataV1>(providerFailoverSwitchedEventDefinition());\n\t\t\tapi.lifecycle.define<ProviderFailoverRecoveredEventDataV1>(providerFailoverRecoveredEventDefinition());\n\t\t\tapi.lifecycle.define<ProviderFailoverProbeFailedEventDataV1>(providerFailoverProbeFailedEventDefinition());\n\t\t\tapi.lifecycle.define<PluginDisposeEventDataV1>(pluginDisposeEventDefinition());\n\t\t\tapi.lifecycle.define<PluginReadyEventDataV1>(pluginReadyEventDefinition());\n\t\t\tapi.lifecycle.define<PluginRejectedEventDataV1>(pluginRejectedEventDefinition());\n\t\t\tapi.lifecycle.define<SessionContextReplacedEventDataV1>(sessionContextReplacedEventDefinition());\n\t\t\tapi.lifecycle.define<SessionReloadEventDataV1>(sessionReloadEventDefinition());\n\t\t\tapi.lifecycle.define<AgentLifecycleEventDataV1>(agentStartEventDefinition());\n\t\t\tapi.lifecycle.define<AgentLifecycleEventDataV1>(agentSettledEventDefinition());\n\t\t\tapi.lifecycle.define<TurnStartEventDataV1>(turnStartEventDefinition());\n\t\t\tapi.lifecycle.define<TurnEndEventDataV1>(turnEndEventDefinition());\n\t\t\tapi.lifecycle.define<MessageBoundaryEventDataV1>(messageStartEventDefinition());\n\t\t\tapi.lifecycle.define<MessageBoundaryEventDataV1>(messageEndEventDefinition());\n\t\t\tapi.lifecycle.define<ToolExecutionStartEventDataV1>(toolExecutionStartEventDefinition());\n\t\t\tapi.lifecycle.define<ModelSelectEventDataV1>(modelSelectEventDefinition());\n\t\t\tapi.lifecycle.define<ThinkingLevelSelectEventDataV1>(thinkingLevelSelectEventDefinition());\n\t\t\tapi.lifecycle.define<SessionInfoChangedEventDataV1>(sessionInfoChangedEventDefinition());\n\t\t\tapi.lifecycle.define<SessionEntryAppendedEventDataV1>(sessionEntryAppendedEventDefinition());\n\t\t\tapi.lifecycle.define<AgentEndEventDataV1>(agentEndEventDefinition());\n\t\t\tapi.lifecycle.define<BeforeAgentStartEventDataV1>(beforeAgentStartEventDefinition());\n\t\t\tapi.lifecycle.define<BeforeAgentStartEventDataV2>(beforeAgentStartV2EventDefinition());\n\t\t\tapi.lifecycle.define<UIPromptBoundaryEventDataV1>(uiPromptStartEventDefinition());\n\t\t\tapi.lifecycle.define<UIPromptBoundaryEventDataV1>(uiPromptEndEventDefinition());\n\t\t\tapi.lifecycle.define<ResourcesDiscoverEventDataV1>(resourcesDiscoverEventDefinition());\n\t\t\tapi.lifecycle.define<ResourcesDiscoverEventDataV2>(resourcesDiscoverV2EventDefinition());\n\t\t\tapi.lifecycle.define<ContextAssembledEventDataV1>(contextAssembledEventDefinition());\n\t\t\tapi.lifecycle.define<InputReceivedEventDataV1>(inputReceivedEventDefinition());\n\t\t\tapi.lifecycle.define<UserBashEventDataV1>(userBashEventDefinition());\n\t\t\tapi.lifecycle.define<SessionStartEventDataV1>(sessionStartEventDefinition());\n\t\t\tapi.lifecycle.define<ModelResponseEventDataV1>(modelResponseEventDefinition());\n\t\t\tapi.lifecycle.define<ModelStreamEventDataV1>(modelStreamEventDefinition());\n\t\t\tapi.lifecycle.define<CapabilityCallEventDataV1>(capabilityCallEventDefinition());\n\t\t\tapi.lifecycle.define<ToolCallEventDataV1>(toolCallEventDefinition());\n\t\t\tapi.lifecycle.define<ToolExecuteEventDataV1>(toolExecuteEventDefinition());\n\t\t\tapi.lifecycle.define<ToolCommitEventDataV1>(toolCommitEventDefinition());\n\t\t\tapi.lifecycle.define<ToolResultRawEventDataV1>(toolResultRawEventDefinition());\n\t\t\tapi.lifecycle.define<ToolResultEventDataV1>(toolResultEventDefinition());\n\t\t\tapi.lifecycle.define<ToolResultTransformEventDataV1>(toolResultTransformEventDefinition());\n\t\t\tapi.lifecycle.define<OperationEndEventDataV1>(operationEndEventDefinition());\n\t\t\tapi.lifecycle.define<OperationStartEventDataV1>(operationStartEventDefinition());\n\t\t\tapi.lifecycle.define<OperationStepEventDataV1>(operationStepEventDefinition());\n\t\t\tapi.lifecycle.define<OperationCancelEventDataV1>(operationCancelEventDefinition());\n\t\t},\n\t);\n}\n"]}
1
+ {"version":3,"file":"bootstrap-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/bootstrap-lifecycle.ts"],"names":[],"mappings":"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","sourcesContent":["import { t } from \"../i18n/index.ts\";\nimport { type CapabilityPluginHandle, loadCapabilityPluginSync } from \"./capability-plugin.ts\";\nimport type { CapabilityRuntime } from \"./capability-runtime.ts\";\nimport {\n\ttype AgentEndEventDataV1,\n\ttype AgentLifecycleEventDataV1,\n\ttype AgentTaskSettledEventDataV1,\n\tagentEndEventDefinition,\n\tagentSettledEventDefinition,\n\tagentStartEventDefinition,\n\tagentTaskSettledEventDefinition,\n\ttype BeforeAgentStartEventDataV1,\n\ttype BeforeAgentStartEventDataV2,\n\tbeforeAgentStartEventDefinition,\n\tbeforeAgentStartV2EventDefinition,\n\ttype CapabilityCallEventDataV1,\n\ttype ContextAssembledEventDataV1,\n\tcapabilityCallEventDefinition,\n\tcontextAssembledEventDefinition,\n\ttype InputGateBlockedEventDataV1,\n\ttype InputReceivedEventDataV1,\n\tinputGateBlockedEventDefinition,\n\tinputReceivedEventDefinition,\n\ttype MessageBoundaryEventDataV1,\n\ttype ModelResponseEventDataV1,\n\ttype ModelSelectEventDataV1,\n\ttype ModelStreamEventDataV1,\n\tmessageEndEventDefinition,\n\tmessageStartEventDefinition,\n\tmodelResponseEventDefinition,\n\tmodelSelectEventDefinition,\n\tmodelStreamEventDefinition,\n\ttype OperationCancelEventDataV1,\n\ttype OperationEndEventDataV1,\n\ttype OperationStartEventDataV1,\n\ttype OperationStepEventDataV1,\n\toperationCancelEventDefinition,\n\toperationEndEventDefinition,\n\toperationStartEventDefinition,\n\toperationStepEventDefinition,\n\ttype PluginDisposeEventDataV1,\n\ttype PluginReadyEventDataV1,\n\ttype PluginRejectedEventDataV1,\n\ttype ProviderFailoverProbeFailedEventDataV1,\n\ttype ProviderFailoverRecoveredEventDataV1,\n\ttype ProviderFailoverSwitchedEventDataV1,\n\tpluginDisposeEventDefinition,\n\tpluginReadyEventDefinition,\n\tpluginRejectedEventDefinition,\n\tproviderFailoverProbeFailedEventDefinition,\n\tproviderFailoverRecoveredEventDefinition,\n\tproviderFailoverSwitchedEventDefinition,\n\ttype ResourcesDiscoverEventDataV1,\n\ttype ResourcesDiscoverEventDataV2,\n\tresourcesDiscoverEventDefinition,\n\tresourcesDiscoverV2EventDefinition,\n\ttype SessionAutoRetryEventDataV1,\n\ttype SessionCompactionDecisionEventDataV1,\n\ttype SessionCompactionFailedEventDataV1,\n\ttype SessionContextReplacedEventDataV1,\n\ttype SessionEndEventDataV1,\n\ttype SessionEntryAppendedEventDataV1,\n\ttype SessionInfoChangedEventDataV1,\n\ttype SessionReloadEventDataV1,\n\ttype SessionStartEventDataV1,\n\tsessionAutoRetryEventDefinition,\n\tsessionCompactionDecisionEventDefinition,\n\tsessionCompactionFailedEventDefinition,\n\tsessionContextReplacedEventDefinition,\n\tsessionEndEventDefinition,\n\tsessionEntryAppendedEventDefinition,\n\tsessionInfoChangedEventDefinition,\n\tsessionReloadEventDefinition,\n\tsessionStartEventDefinition,\n\ttype ThinkingLevelSelectEventDataV1,\n\ttype ToolCallEventDataV1,\n\ttype ToolCommitEventDataV1,\n\ttype ToolExecuteEventDataV1,\n\ttype ToolExecutionStartEventDataV1,\n\ttype ToolGateBlockedEventDataV1,\n\ttype ToolResultEventDataV1,\n\ttype ToolResultRawEventDataV1,\n\ttype ToolResultTransformEventDataV1,\n\ttype TurnEndEventDataV1,\n\ttype TurnStartEventDataV1,\n\tthinkingLevelSelectEventDefinition,\n\ttoolCallEventDefinition,\n\ttoolCommitEventDefinition,\n\ttoolExecuteEventDefinition,\n\ttoolExecutionStartEventDefinition,\n\ttoolGateBlockedEventDefinition,\n\ttoolResultEventDefinition,\n\ttoolResultRawEventDefinition,\n\ttoolResultTransformEventDefinition,\n\tturnEndEventDefinition,\n\tturnStartEventDefinition,\n\ttype UIPromptBoundaryEventDataV1,\n\ttype UserBashEventDataV1,\n\tuiPromptEndEventDefinition,\n\tuiPromptStartEventDefinition,\n\tuserBashEventDefinition,\n} from \"./lifecycle-catalog.ts\";\n\nexport type { CapabilityCallEventNameV1, CapabilityCallStatusV1, ModelStreamEventNameV1 } from \"./lifecycle-catalog.ts\";\n\nimport type { SessionRevisionV1 } from \"./public-api.ts\";\nimport { EXPERIMENTAL_PUBLIC_API_VERSION } from \"./public-api.ts\";\n\nexport {\n\tAGENT_END_EVENT_ID,\n\tAGENT_END_EVENT_VERSION,\n\tAGENT_SETTLED_EVENT_ID,\n\tAGENT_SETTLED_EVENT_VERSION,\n\tAGENT_START_EVENT_ID,\n\tAGENT_START_EVENT_VERSION,\n\tAGENT_TASK_SETTLED_EVENT_ID,\n\tAGENT_TASK_SETTLED_EVENT_VERSION,\n\ttype AgentEndEventDataV1,\n\ttype AgentLifecycleEventDataV1,\n\ttype AgentTaskSettledEventDataV1,\n\tagentEndEventDefinition,\n\tagentSettledEventDefinition,\n\tagentStartEventDefinition,\n\tagentTaskSettledEventDefinition,\n\tBEFORE_AGENT_START_EVENT_ID,\n\tBEFORE_AGENT_START_EVENT_VERSION,\n\tBEFORE_AGENT_START_EVENT_VERSION_V2,\n\ttype BeforeAgentStartEventDataV1,\n\ttype BeforeAgentStartEventDataV2,\n\tbeforeAgentStartEventDefinition,\n\tbeforeAgentStartV2EventDefinition,\n\tCAPABILITY_CALL_EVENT_ID,\n\tCAPABILITY_CALL_EVENT_VERSION,\n\ttype CapabilityCallEventDataV1,\n\tCONTEXT_ASSEMBLED_EVENT_ID,\n\tCONTEXT_ASSEMBLED_EVENT_VERSION,\n\ttype ContextAssembledEventDataV1,\n\tcontextAssembledEventDefinition,\n\tINPUT_GATE_BLOCKED_EVENT_ID,\n\tINPUT_GATE_BLOCKED_EVENT_VERSION,\n\tINPUT_RECEIVED_EVENT_ID,\n\tINPUT_RECEIVED_EVENT_VERSION,\n\ttype InputGateBlockedEventDataV1,\n\ttype InputReceivedEventDataV1,\n\tinputGateBlockedEventDefinition,\n\tinputReceivedEventDefinition,\n\tMESSAGE_END_EVENT_ID,\n\tMESSAGE_END_EVENT_VERSION,\n\tMESSAGE_START_EVENT_ID,\n\tMESSAGE_START_EVENT_VERSION,\n\ttype MessageBoundaryEventDataV1,\n\tMODEL_RESPONSE_EVENT_ID,\n\tMODEL_RESPONSE_EVENT_VERSION,\n\tMODEL_SELECT_EVENT_ID,\n\tMODEL_SELECT_EVENT_VERSION,\n\tMODEL_STREAM_EVENT_ID,\n\tMODEL_STREAM_EVENT_VERSION,\n\ttype ModelResponseEventDataV1,\n\ttype ModelSelectEventDataV1,\n\ttype ModelStreamEventDataV1,\n\tmessageEndEventDefinition,\n\tmessageStartEventDefinition,\n\tmodelSelectEventDefinition,\n\tOPERATION_CANCEL_EVENT_ID,\n\tOPERATION_CANCEL_EVENT_VERSION,\n\tOPERATION_END_EVENT_ID,\n\tOPERATION_END_EVENT_VERSION,\n\tOPERATION_START_EVENT_ID,\n\tOPERATION_START_EVENT_VERSION,\n\tOPERATION_STEP_EVENT_ID,\n\tOPERATION_STEP_EVENT_VERSION,\n\ttype OperationCancelEventDataV1,\n\ttype OperationEndEventDataV1,\n\ttype OperationStartEventDataV1,\n\ttype OperationStepEventDataV1,\n\tPLUGIN_DISPOSE_EVENT_ID,\n\tPLUGIN_DISPOSE_EVENT_VERSION,\n\tPLUGIN_READY_EVENT_ID,\n\tPLUGIN_READY_EVENT_VERSION,\n\tPLUGIN_REJECTED_EVENT_ID,\n\tPLUGIN_REJECTED_EVENT_VERSION,\n\ttype PluginDisposeEventDataV1,\n\ttype PluginReadyEventDataV1,\n\ttype PluginRejectedEventDataV1,\n\tPROVIDER_FAILOVER_PROBE_FAILED_EVENT_ID,\n\tPROVIDER_FAILOVER_PROBE_FAILED_EVENT_VERSION,\n\tPROVIDER_FAILOVER_RECOVERED_EVENT_ID,\n\tPROVIDER_FAILOVER_RECOVERED_EVENT_VERSION,\n\tPROVIDER_FAILOVER_SWITCHED_EVENT_ID,\n\tPROVIDER_FAILOVER_SWITCHED_EVENT_VERSION,\n\ttype ProviderFailoverProbeFailedEventDataV1,\n\ttype ProviderFailoverRecoveredEventDataV1,\n\ttype ProviderFailoverSwitchedEventDataV1,\n\tproviderFailoverProbeFailedEventDefinition,\n\tproviderFailoverRecoveredEventDefinition,\n\tproviderFailoverSwitchedEventDefinition,\n\tRESOURCES_DISCOVER_EVENT_ID,\n\tRESOURCES_DISCOVER_EVENT_VERSION,\n\tRESOURCES_DISCOVER_EVENT_VERSION_V2,\n\ttype ResourcesDiscoverEventDataV1,\n\ttype ResourcesDiscoverEventDataV2,\n\tresourcesDiscoverEventDefinition,\n\tresourcesDiscoverV2EventDefinition,\n\tSESSION_AUTO_RETRY_EVENT_ID,\n\tSESSION_AUTO_RETRY_EVENT_VERSION,\n\tSESSION_COMPACTION_DECISION_EVENT_ID,\n\tSESSION_COMPACTION_DECISION_EVENT_VERSION,\n\tSESSION_COMPACTION_FAILED_EVENT_ID,\n\tSESSION_COMPACTION_FAILED_EVENT_VERSION,\n\tSESSION_CONTEXT_REPLACED_EVENT_ID,\n\tSESSION_CONTEXT_REPLACED_EVENT_VERSION,\n\tSESSION_END_EVENT_ID,\n\tSESSION_END_EVENT_VERSION,\n\tSESSION_ENTRY_APPENDED_EVENT_ID,\n\tSESSION_ENTRY_APPENDED_EVENT_VERSION,\n\tSESSION_INFO_CHANGED_EVENT_ID,\n\tSESSION_INFO_CHANGED_EVENT_VERSION,\n\tSESSION_RELOAD_EVENT_ID,\n\tSESSION_RELOAD_EVENT_VERSION,\n\tSESSION_START_EVENT_ID,\n\tSESSION_START_EVENT_VERSION,\n\ttype SessionAutoRetryEventDataV1,\n\ttype SessionCompactionDecisionEventDataV1,\n\ttype SessionCompactionFailedEventDataV1,\n\ttype SessionContextReplacedEventDataV1,\n\ttype SessionEndEventDataV1,\n\ttype SessionEntryAppendedEventDataV1,\n\ttype SessionInfoChangedEventDataV1,\n\ttype SessionReloadEventDataV1,\n\ttype SessionStartEventDataV1,\n\tsessionAutoRetryEventDefinition,\n\tsessionCompactionDecisionEventDefinition,\n\tsessionCompactionFailedEventDefinition,\n\tsessionEndEventDefinition,\n\tsessionEntryAppendedEventDefinition,\n\tsessionInfoChangedEventDefinition,\n\tsessionStartEventDefinition,\n\tTHINKING_LEVEL_SELECT_EVENT_ID,\n\tTHINKING_LEVEL_SELECT_EVENT_VERSION,\n\ttype ThinkingLevelSelectEventDataV1,\n\tTOOL_CALL_EVENT_ID,\n\tTOOL_CALL_EVENT_VERSION,\n\tTOOL_COMMIT_EVENT_ID,\n\tTOOL_COMMIT_EVENT_VERSION,\n\tTOOL_EXECUTE_EVENT_ID,\n\tTOOL_EXECUTE_EVENT_VERSION,\n\tTOOL_EXECUTION_START_EVENT_ID,\n\tTOOL_EXECUTION_START_EVENT_VERSION,\n\tTOOL_GATE_BLOCKED_EVENT_ID,\n\tTOOL_GATE_BLOCKED_EVENT_VERSION,\n\tTOOL_RESULT_EVENT_ID,\n\tTOOL_RESULT_EVENT_VERSION,\n\tTOOL_RESULT_RAW_EVENT_ID,\n\tTOOL_RESULT_RAW_EVENT_VERSION,\n\tTOOL_RESULT_TRANSFORM_EVENT_ID,\n\tTOOL_RESULT_TRANSFORM_EVENT_VERSION,\n\ttype ToolCallEventDataV1,\n\ttype ToolCommitEventDataV1,\n\ttype ToolExecuteEventDataV1,\n\ttype ToolExecutionStartEventDataV1,\n\ttype ToolGateBlockedEventDataV1,\n\ttype ToolResultEventDataV1,\n\ttype ToolResultRawEventDataV1,\n\ttype ToolResultTransformEventDataV1,\n\tTURN_END_EVENT_ID,\n\tTURN_END_EVENT_VERSION,\n\tTURN_START_EVENT_ID,\n\tTURN_START_EVENT_VERSION,\n\ttype TurnEndEventDataV1,\n\ttype TurnStartEventDataV1,\n\tthinkingLevelSelectEventDefinition,\n\ttoolExecutionStartEventDefinition,\n\ttoolGateBlockedEventDefinition,\n\tturnEndEventDefinition,\n\tturnStartEventDefinition,\n\tUI_PROMPT_END_EVENT_ID,\n\tUI_PROMPT_END_EVENT_VERSION,\n\tUI_PROMPT_START_EVENT_ID,\n\tUI_PROMPT_START_EVENT_VERSION,\n\ttype UIPromptBoundaryEventDataV1,\n\tUSER_BASH_EVENT_ID,\n\tUSER_BASH_EVENT_VERSION,\n\ttype UserBashEventDataV1,\n\tuiPromptEndEventDefinition,\n\tuiPromptStartEventDefinition,\n\tuserBashEventDefinition,\n\tvalidateAgentEndEventDataV1,\n\tvalidateAgentLifecycleEventDataV1,\n\tvalidateAgentTaskSettledEventDataV1,\n\tvalidateBeforeAgentStartEventDataV1,\n\tvalidateBeforeAgentStartEventDataV2,\n\tvalidateCapabilityCallEventDataV1,\n\tvalidateContextAssembledEventDataV1,\n\tvalidateInputReceivedEventDataV1,\n\tvalidateMessageBoundaryEventDataV1,\n\tvalidateModelResponseEventDataV1,\n\tvalidateModelSelectEventDataV1,\n\tvalidateModelStreamEventDataV1,\n\tvalidateOperationCancelEventDataV1,\n\tvalidateOperationEndEventDataV1,\n\tvalidateOperationStartEventDataV1,\n\tvalidateOperationStepEventDataV1,\n\tvalidatePluginDisposeEventDataV1,\n\tvalidatePluginReadyEventDataV1,\n\tvalidateProviderFailoverProbeFailedEventDataV1,\n\tvalidateProviderFailoverRecoveredEventDataV1,\n\tvalidateProviderFailoverSwitchedEventDataV1,\n\tvalidateResourcesDiscoverEventDataV1,\n\tvalidateResourcesDiscoverEventDataV2,\n\tvalidateSessionAutoRetryEventDataV1,\n\tvalidateSessionCompactionDecisionEventDataV1,\n\tvalidateSessionCompactionFailedEventDataV1,\n\tvalidateSessionContextReplacedEventDataV1,\n\tvalidateSessionEndEventDataV1,\n\tvalidateSessionEntryAppendedEventDataV1,\n\tvalidateSessionInfoChangedEventDataV1,\n\tvalidateSessionReloadEventDataV1,\n\tvalidateSessionStartEventDataV1,\n\tvalidateThinkingLevelSelectEventDataV1,\n\tvalidateToolCallEventDataV1,\n\tvalidateToolCommitEventDataV1,\n\tvalidateToolExecuteEventDataV1,\n\tvalidateToolExecutionStartEventDataV1,\n\tvalidateToolGateBlockedEventDataV1,\n\tvalidateToolResultEventDataV1,\n\tvalidateToolResultRawEventDataV1,\n\tvalidateToolResultTransformEventDataV1,\n\tvalidateTurnEndEventDataV1,\n\tvalidateTurnStartEventDataV1,\n\tvalidateUIPromptBoundaryEventDataV1,\n\tvalidateUserBashEventDataV1,\n} from \"./lifecycle-catalog.ts\";\n\nexport const BOOTSTRAP_LIFECYCLE_PLUGIN_ID = \"agent-forge.bootstrap-lifecycle\";\nexport const SESSION_COMPACTION_COMMIT_EVENT_ID = \"session.compaction.commit\";\nexport const SESSION_COMPACTION_COMMIT_EVENT_VERSION = 1;\n\nexport interface SessionCompactionCommitEventDataV1 {\n\tversion: 1;\n\tstatus: \"committed\" | \"replayed\";\n\tentryId: string;\n\toperationId: string;\n\trevision: SessionRevisionV1;\n\treason: \"manual\" | \"threshold\" | \"overflow\";\n\tsummary: string;\n\tfirstKeptEntryId: string;\n\ttokensBefore: number;\n\tfromHook: boolean;\n\tusage?: unknown;\n\tdetails?: unknown;\n}\n\nconst isPlainRecord = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === \"object\" && value !== null && Object.getPrototypeOf(value) === Object.prototype;\n\nfunction assertJsonSafe(value: unknown, label: string, seen = new Set<object>()): void {\n\tif (value === null || typeof value === \"string\" || typeof value === \"boolean\") return;\n\tif (typeof value === \"number\") {\n\t\tif (Number.isFinite(value)) return;\n\t\tthrow new Error(t(\"{label} must contain only finite JSON numbers\", { label }));\n\t}\n\tif (typeof value !== \"object\") throw new Error(t(\"{label} must be JSON-safe\", { label }));\n\tif (seen.has(value)) throw new Error(t(\"{label} must not contain cycles\", { label }));\n\tseen.add(value);\n\tif (Array.isArray(value)) {\n\t\tfor (const [index, entry] of value.entries()) assertJsonSafe(entry, `${label}[${index}]`, seen);\n\t} else if (isPlainRecord(value)) {\n\t\tfor (const [key, entry] of Object.entries(value)) assertJsonSafe(entry, `${label}.${key}`, seen);\n\t} else {\n\t\tthrow new Error(t(\"{label} must contain only JSON arrays and plain objects\", { label }));\n\t}\n\tseen.delete(value);\n}\n\nfunction assertString(value: unknown, label: string): asserts value is string {\n\tif (typeof value !== \"string\" || value.trim() === \"\")\n\t\tthrow new Error(t(\"{label} must be a non-empty string\", { label }));\n}\n\nfunction assertRevision(value: unknown): asserts value is SessionRevisionV1 {\n\tif (!isPlainRecord(value)) throw new Error(t(\"session.compaction.commit.revision must be a plain object\"));\n\tconst keys = Object.keys(value).sort();\n\tif (keys.join(\",\") !== \"leafId,sequence,sessionId,version\") {\n\t\tthrow new Error(t(\"session.compaction.commit.revision has unsupported fields\"));\n\t}\n\tif (value.version !== 1) throw new Error(t(\"session.compaction.commit.revision.version must be 1\"));\n\tassertString(value.sessionId, \"session.compaction.commit.revision.sessionId\");\n\tconst sequence = value.sequence;\n\tif (typeof sequence !== \"number\" || !Number.isSafeInteger(sequence) || sequence < 0) {\n\t\tthrow new Error(t(\"session.compaction.commit.revision.sequence must be a non-negative safe integer\"));\n\t}\n\tif (value.leafId !== null) assertString(value.leafId, \"session.compaction.commit.revision.leafId\");\n}\n\n/** Strict validator for the committed compaction lifecycle payload. */\nexport function validateSessionCompactionCommitEventDataV1(value: unknown): SessionCompactionCommitEventDataV1 {\n\tif (!isPlainRecord(value)) throw new Error(t(\"session.compaction.commit data must be a plain object\"));\n\tconst allowed = new Set([\n\t\t\"version\",\n\t\t\"status\",\n\t\t\"entryId\",\n\t\t\"operationId\",\n\t\t\"revision\",\n\t\t\"reason\",\n\t\t\"summary\",\n\t\t\"firstKeptEntryId\",\n\t\t\"tokensBefore\",\n\t\t\"fromHook\",\n\t\t\"usage\",\n\t\t\"details\",\n\t]);\n\tconst unsupported = Object.keys(value).filter((key) => !allowed.has(key));\n\tif (unsupported.length > 0) {\n\t\tthrow new Error(\n\t\t\tt(\"session.compaction.commit data has unsupported fields: {unsupported}\", {\n\t\t\t\tunsupported: unsupported.join(\", \"),\n\t\t\t}),\n\t\t);\n\t}\n\tfor (const key of [\n\t\t\"version\",\n\t\t\"status\",\n\t\t\"entryId\",\n\t\t\"operationId\",\n\t\t\"revision\",\n\t\t\"reason\",\n\t\t\"summary\",\n\t\t\"firstKeptEntryId\",\n\t\t\"tokensBefore\",\n\t\t\"fromHook\",\n\t]) {\n\t\tif (!(key in value))\n\t\t\tthrow new Error(t(\"session.compaction.commit data is missing required field: {key}\", { key }));\n\t}\n\tif (value.version !== 1) throw new Error(t(\"session.compaction.commit data.version must be 1\"));\n\tif (value.status !== \"committed\" && value.status !== \"replayed\") {\n\t\tthrow new Error(t(\"session.compaction.commit data.status is invalid\"));\n\t}\n\tassertString(value.entryId, \"session.compaction.commit data.entryId\");\n\tassertString(value.operationId, \"session.compaction.commit data.operationId\");\n\tassertRevision(value.revision);\n\tif (value.reason !== \"manual\" && value.reason !== \"threshold\" && value.reason !== \"overflow\") {\n\t\tthrow new Error(t(\"session.compaction.commit data.reason is invalid\"));\n\t}\n\tassertString(value.summary, \"session.compaction.commit data.summary\");\n\tassertString(value.firstKeptEntryId, \"session.compaction.commit data.firstKeptEntryId\");\n\tif (typeof value.tokensBefore !== \"number\" || !Number.isFinite(value.tokensBefore) || value.tokensBefore < 0) {\n\t\tthrow new Error(t(\"session.compaction.commit data.tokensBefore must be a non-negative finite number\"));\n\t}\n\tif (typeof value.fromHook !== \"boolean\")\n\t\tthrow new Error(t(\"session.compaction.commit data.fromHook must be boolean\"));\n\tif (\"usage\" in value) assertJsonSafe(value.usage, \"session.compaction.commit data.usage\");\n\tif (\"details\" in value) assertJsonSafe(value.details, \"session.compaction.commit data.details\");\n\treturn value as unknown as SessionCompactionCommitEventDataV1;\n}\n\nexport function installBootstrapLifecycle(runtime: CapabilityRuntime): CapabilityPluginHandle {\n\treturn loadCapabilityPluginSync(\n\t\truntime,\n\t\t{\n\t\t\tid: BOOTSTRAP_LIFECYCLE_PLUGIN_ID,\n\t\t\tversion: \"0.0.0\",\n\t\t\tapiVersion: EXPERIMENTAL_PUBLIC_API_VERSION,\n\t\t\tentry: \"<embedded:bootstrap-lifecycle>\",\n\t\t},\n\t\t(api) => {\n\t\t\tapi.lifecycle.define<SessionCompactionCommitEventDataV1>({\n\t\t\t\tid: SESSION_COMPACTION_COMMIT_EVENT_ID,\n\t\t\t\tversion: SESSION_COMPACTION_COMMIT_EVENT_VERSION,\n\t\t\t\tphase: \"committed\",\n\t\t\t\tschema: \"agent-forge/session.compaction.commit@1\",\n\t\t\t\tallowedRegistrationKinds: [\"observe\", \"after-commit\"],\n\t\t\t\tvalidate: validateSessionCompactionCommitEventDataV1,\n\t\t\t});\n\t\t\tapi.lifecycle.define<SessionAutoRetryEventDataV1>(sessionAutoRetryEventDefinition());\n\t\t\tapi.lifecycle.define<SessionCompactionDecisionEventDataV1>(sessionCompactionDecisionEventDefinition());\n\t\t\tapi.lifecycle.define<SessionCompactionFailedEventDataV1>(sessionCompactionFailedEventDefinition());\n\t\t\tapi.lifecycle.define<SessionEndEventDataV1>(sessionEndEventDefinition());\n\t\t\tapi.lifecycle.define<AgentTaskSettledEventDataV1>(agentTaskSettledEventDefinition());\n\t\t\tapi.lifecycle.define<ToolGateBlockedEventDataV1>(toolGateBlockedEventDefinition());\n\t\t\tapi.lifecycle.define<InputGateBlockedEventDataV1>(inputGateBlockedEventDefinition());\n\t\t\tapi.lifecycle.define<ProviderFailoverSwitchedEventDataV1>(providerFailoverSwitchedEventDefinition());\n\t\t\tapi.lifecycle.define<ProviderFailoverRecoveredEventDataV1>(providerFailoverRecoveredEventDefinition());\n\t\t\tapi.lifecycle.define<ProviderFailoverProbeFailedEventDataV1>(providerFailoverProbeFailedEventDefinition());\n\t\t\tapi.lifecycle.define<PluginDisposeEventDataV1>(pluginDisposeEventDefinition());\n\t\t\tapi.lifecycle.define<PluginReadyEventDataV1>(pluginReadyEventDefinition());\n\t\t\tapi.lifecycle.define<PluginRejectedEventDataV1>(pluginRejectedEventDefinition());\n\t\t\tapi.lifecycle.define<SessionContextReplacedEventDataV1>(sessionContextReplacedEventDefinition());\n\t\t\tapi.lifecycle.define<SessionReloadEventDataV1>(sessionReloadEventDefinition());\n\t\t\tapi.lifecycle.define<AgentLifecycleEventDataV1>(agentStartEventDefinition());\n\t\t\tapi.lifecycle.define<AgentLifecycleEventDataV1>(agentSettledEventDefinition());\n\t\t\tapi.lifecycle.define<TurnStartEventDataV1>(turnStartEventDefinition());\n\t\t\tapi.lifecycle.define<TurnEndEventDataV1>(turnEndEventDefinition());\n\t\t\tapi.lifecycle.define<MessageBoundaryEventDataV1>(messageStartEventDefinition());\n\t\t\tapi.lifecycle.define<MessageBoundaryEventDataV1>(messageEndEventDefinition());\n\t\t\tapi.lifecycle.define<ToolExecutionStartEventDataV1>(toolExecutionStartEventDefinition());\n\t\t\tapi.lifecycle.define<ModelSelectEventDataV1>(modelSelectEventDefinition());\n\t\t\tapi.lifecycle.define<ThinkingLevelSelectEventDataV1>(thinkingLevelSelectEventDefinition());\n\t\t\tapi.lifecycle.define<SessionInfoChangedEventDataV1>(sessionInfoChangedEventDefinition());\n\t\t\tapi.lifecycle.define<SessionEntryAppendedEventDataV1>(sessionEntryAppendedEventDefinition());\n\t\t\tapi.lifecycle.define<AgentEndEventDataV1>(agentEndEventDefinition());\n\t\t\tapi.lifecycle.define<BeforeAgentStartEventDataV1>(beforeAgentStartEventDefinition());\n\t\t\tapi.lifecycle.define<BeforeAgentStartEventDataV2>(beforeAgentStartV2EventDefinition());\n\t\t\tapi.lifecycle.define<UIPromptBoundaryEventDataV1>(uiPromptStartEventDefinition());\n\t\t\tapi.lifecycle.define<UIPromptBoundaryEventDataV1>(uiPromptEndEventDefinition());\n\t\t\tapi.lifecycle.define<ResourcesDiscoverEventDataV1>(resourcesDiscoverEventDefinition());\n\t\t\tapi.lifecycle.define<ResourcesDiscoverEventDataV2>(resourcesDiscoverV2EventDefinition());\n\t\t\tapi.lifecycle.define<ContextAssembledEventDataV1>(contextAssembledEventDefinition());\n\t\t\tapi.lifecycle.define<InputReceivedEventDataV1>(inputReceivedEventDefinition());\n\t\t\tapi.lifecycle.define<UserBashEventDataV1>(userBashEventDefinition());\n\t\t\tapi.lifecycle.define<SessionStartEventDataV1>(sessionStartEventDefinition());\n\t\t\tapi.lifecycle.define<ModelResponseEventDataV1>(modelResponseEventDefinition());\n\t\t\tapi.lifecycle.define<ModelStreamEventDataV1>(modelStreamEventDefinition());\n\t\t\tapi.lifecycle.define<CapabilityCallEventDataV1>(capabilityCallEventDefinition());\n\t\t\tapi.lifecycle.define<ToolCallEventDataV1>(toolCallEventDefinition());\n\t\t\tapi.lifecycle.define<ToolExecuteEventDataV1>(toolExecuteEventDefinition());\n\t\t\tapi.lifecycle.define<ToolCommitEventDataV1>(toolCommitEventDefinition());\n\t\t\tapi.lifecycle.define<ToolResultRawEventDataV1>(toolResultRawEventDefinition());\n\t\t\tapi.lifecycle.define<ToolResultEventDataV1>(toolResultEventDefinition());\n\t\t\tapi.lifecycle.define<ToolResultTransformEventDataV1>(toolResultTransformEventDefinition());\n\t\t\tapi.lifecycle.define<OperationEndEventDataV1>(operationEndEventDefinition());\n\t\t\tapi.lifecycle.define<OperationStartEventDataV1>(operationStartEventDefinition());\n\t\t\tapi.lifecycle.define<OperationStepEventDataV1>(operationStepEventDefinition());\n\t\t\tapi.lifecycle.define<OperationCancelEventDataV1>(operationCancelEventDefinition());\n\t\t},\n\t);\n}\n"]}