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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (717) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/README.md +10 -11
  3. package/dist/artifacts/artifact-store.d.ts.map +1 -1
  4. package/dist/artifacts/artifact-store.js +9 -5
  5. package/dist/artifacts/artifact-store.js.map +1 -1
  6. package/dist/bundle/.build-manifest.json +430 -413
  7. package/dist/bundle/chunks/{chunk-A7GUOX2H.js → chunk-6ZKDNZHA.js} +5 -1
  8. package/dist/bundle/chunks/chunk-HLJEVRWP.js +13 -0
  9. package/dist/bundle/chunks/chunk-YGHQME4V.js +1456 -0
  10. package/dist/bundle/chunks/image-resize-worker.js +12 -1
  11. package/dist/bundle/chunks/{virtual-modules-3IZ4MYSQ.js → virtual-modules-KZ5DRH7Q.js} +1 -1
  12. package/dist/bundle/cli.js +1 -1
  13. package/dist/bundle/client.js +1 -1
  14. package/dist/bundle/index.js +2 -2
  15. package/dist/bundle/rpc-entry.js +1 -1
  16. package/dist/cli/args.d.ts.map +1 -1
  17. package/dist/cli/args.js +231 -185
  18. package/dist/cli/args.js.map +1 -1
  19. package/dist/cli/auth-check.d.ts.map +1 -1
  20. package/dist/cli/auth-check.js +17 -4
  21. package/dist/cli/auth-check.js.map +1 -1
  22. package/dist/cli/auth-command.d.ts.map +1 -1
  23. package/dist/cli/auth-command.js +15 -9
  24. package/dist/cli/auth-command.js.map +1 -1
  25. package/dist/cli/credential-print.d.ts.map +1 -1
  26. package/dist/cli/credential-print.js +14 -7
  27. package/dist/cli/credential-print.js.map +1 -1
  28. package/dist/cli/experimental/command.d.ts.map +1 -1
  29. package/dist/cli/experimental/command.js +6 -5
  30. package/dist/cli/experimental/command.js.map +1 -1
  31. package/dist/cli/list-models.d.ts.map +1 -1
  32. package/dist/cli/list-models.js +9 -8
  33. package/dist/cli/list-models.js.map +1 -1
  34. package/dist/cli/plugin-manager-controller.d.ts.map +1 -1
  35. package/dist/cli/plugin-manager-controller.js +2 -1
  36. package/dist/cli/plugin-manager-controller.js.map +1 -1
  37. package/dist/cli/serve.d.ts.map +1 -1
  38. package/dist/cli/serve.js +8 -5
  39. package/dist/cli/serve.js.map +1 -1
  40. package/dist/client/remote-session.d.ts.map +1 -1
  41. package/dist/client/remote-session.js +16 -9
  42. package/dist/client/remote-session.js.map +1 -1
  43. package/dist/config.d.ts.map +1 -1
  44. package/dist/config.js +5 -3
  45. package/dist/config.js.map +1 -1
  46. package/dist/core/agent-capability-contract.d.ts +0 -7
  47. package/dist/core/agent-capability-contract.d.ts.map +1 -1
  48. package/dist/core/agent-capability-contract.js +72 -68
  49. package/dist/core/agent-capability-contract.js.map +1 -1
  50. package/dist/core/agent-session-bash.d.ts.map +1 -1
  51. package/dist/core/agent-session-bash.js +5 -4
  52. package/dist/core/agent-session-bash.js.map +1 -1
  53. package/dist/core/agent-session-compaction.d.ts +6 -10
  54. package/dist/core/agent-session-compaction.d.ts.map +1 -1
  55. package/dist/core/agent-session-compaction.js +35 -133
  56. package/dist/core/agent-session-compaction.js.map +1 -1
  57. package/dist/core/agent-session-context.d.ts.map +1 -1
  58. package/dist/core/agent-session-context.js +18 -13
  59. package/dist/core/agent-session-context.js.map +1 -1
  60. package/dist/core/agent-session-internal.d.ts +0 -6
  61. package/dist/core/agent-session-internal.d.ts.map +1 -1
  62. package/dist/core/agent-session-internal.js.map +1 -1
  63. package/dist/core/agent-session-model.d.ts.map +1 -1
  64. package/dist/core/agent-session-model.js +2 -1
  65. package/dist/core/agent-session-model.js.map +1 -1
  66. package/dist/core/agent-session-retry.d.ts.map +1 -1
  67. package/dist/core/agent-session-retry.js +3 -3
  68. package/dist/core/agent-session-retry.js.map +1 -1
  69. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  70. package/dist/core/agent-session-runtime.js +7 -6
  71. package/dist/core/agent-session-runtime.js.map +1 -1
  72. package/dist/core/agent-session-services.d.ts +1 -1
  73. package/dist/core/agent-session-services.d.ts.map +1 -1
  74. package/dist/core/agent-session-services.js.map +1 -1
  75. package/dist/core/agent-session-tools.d.ts.map +1 -1
  76. package/dist/core/agent-session-tools.js +3 -2
  77. package/dist/core/agent-session-tools.js.map +1 -1
  78. package/dist/core/agent-session.d.ts +40 -22
  79. package/dist/core/agent-session.d.ts.map +1 -1
  80. package/dist/core/agent-session.js +147 -67
  81. package/dist/core/agent-session.js.map +1 -1
  82. package/dist/core/auth-guidance.d.ts.map +1 -1
  83. package/dist/core/auth-guidance.js +11 -5
  84. package/dist/core/auth-guidance.js.map +1 -1
  85. package/dist/core/auth-storage.d.ts.map +1 -1
  86. package/dist/core/auth-storage.js +9 -6
  87. package/dist/core/auth-storage.js.map +1 -1
  88. package/dist/core/compaction/compaction.d.ts.map +1 -1
  89. package/dist/core/compaction/compaction.js +2 -1
  90. package/dist/core/compaction/compaction.js.map +1 -1
  91. package/dist/core/embedded-sdk.d.ts.map +1 -1
  92. package/dist/core/embedded-sdk.js +10 -6
  93. package/dist/core/embedded-sdk.js.map +1 -1
  94. package/dist/core/export-html/index.d.ts.map +1 -1
  95. package/dist/core/export-html/index.js +9 -4
  96. package/dist/core/export-html/index.js.map +1 -1
  97. package/dist/core/extensions/agent-composition.d.ts.map +1 -1
  98. package/dist/core/extensions/agent-composition.js +26 -19
  99. package/dist/core/extensions/agent-composition.js.map +1 -1
  100. package/dist/core/extensions/bootstrap-agent-loop.d.ts.map +1 -1
  101. package/dist/core/extensions/bootstrap-agent-loop.js +3 -2
  102. package/dist/core/extensions/bootstrap-agent-loop.js.map +1 -1
  103. package/dist/core/extensions/bootstrap-compaction-policy.d.ts.map +1 -1
  104. package/dist/core/extensions/bootstrap-compaction-policy.js +0 -34
  105. package/dist/core/extensions/bootstrap-compaction-policy.js.map +1 -1
  106. package/dist/core/extensions/bootstrap-lifecycle.d.ts.map +1 -1
  107. package/dist/core/extensions/bootstrap-lifecycle.js +20 -17
  108. package/dist/core/extensions/bootstrap-lifecycle.js.map +1 -1
  109. package/dist/core/extensions/bootstrap-overflow-policy.d.ts.map +1 -1
  110. package/dist/core/extensions/bootstrap-overflow-policy.js +2 -1
  111. package/dist/core/extensions/bootstrap-overflow-policy.js.map +1 -1
  112. package/dist/core/extensions/bootstrap-retry-policy.d.ts.map +1 -1
  113. package/dist/core/extensions/bootstrap-retry-policy.js +4 -3
  114. package/dist/core/extensions/bootstrap-retry-policy.js.map +1 -1
  115. package/dist/core/extensions/bootstrap-skills.d.ts.map +1 -1
  116. package/dist/core/extensions/bootstrap-skills.js +7 -6
  117. package/dist/core/extensions/bootstrap-skills.js.map +1 -1
  118. package/dist/core/extensions/bootstrap-tools.d.ts.map +1 -1
  119. package/dist/core/extensions/bootstrap-tools.js +2 -1
  120. package/dist/core/extensions/bootstrap-tools.js.map +1 -1
  121. package/dist/core/extensions/capability-plugin.d.ts.map +1 -1
  122. package/dist/core/extensions/capability-plugin.js +37 -13
  123. package/dist/core/extensions/capability-plugin.js.map +1 -1
  124. package/dist/core/extensions/capability-runtime-events.d.ts.map +1 -1
  125. package/dist/core/extensions/capability-runtime-events.js +17 -13
  126. package/dist/core/extensions/capability-runtime-events.js.map +1 -1
  127. package/dist/core/extensions/capability-runtime-guards.d.ts.map +1 -1
  128. package/dist/core/extensions/capability-runtime-guards.js +16 -15
  129. package/dist/core/extensions/capability-runtime-guards.js.map +1 -1
  130. package/dist/core/extensions/capability-runtime-manifest.d.ts.map +1 -1
  131. package/dist/core/extensions/capability-runtime-manifest.js +52 -30
  132. package/dist/core/extensions/capability-runtime-manifest.js.map +1 -1
  133. package/dist/core/extensions/capability-runtime-validation.d.ts.map +1 -1
  134. package/dist/core/extensions/capability-runtime-validation.js +66 -65
  135. package/dist/core/extensions/capability-runtime-validation.js.map +1 -1
  136. package/dist/core/extensions/capability-runtime.d.ts.map +1 -1
  137. package/dist/core/extensions/capability-runtime.js +147 -127
  138. package/dist/core/extensions/capability-runtime.js.map +1 -1
  139. package/dist/core/extensions/compaction-memory-failure-mode.d.ts.map +1 -1
  140. package/dist/core/extensions/compaction-memory-failure-mode.js +3 -2
  141. package/dist/core/extensions/compaction-memory-failure-mode.js.map +1 -1
  142. package/dist/core/extensions/context-strategy-binding.d.ts.map +1 -1
  143. package/dist/core/extensions/context-strategy-binding.js +7 -4
  144. package/dist/core/extensions/context-strategy-binding.js.map +1 -1
  145. package/dist/core/extensions/lifecycle-catalog.d.ts.map +1 -1
  146. package/dist/core/extensions/lifecycle-catalog.js +290 -279
  147. package/dist/core/extensions/lifecycle-catalog.js.map +1 -1
  148. package/dist/core/extensions/lifecycle-delivery-queue.d.ts.map +1 -1
  149. package/dist/core/extensions/lifecycle-delivery-queue.js +3 -2
  150. package/dist/core/extensions/lifecycle-delivery-queue.js.map +1 -1
  151. package/dist/core/extensions/provider-failover.d.ts +7 -3
  152. package/dist/core/extensions/provider-failover.d.ts.map +1 -1
  153. package/dist/core/extensions/provider-failover.js +9 -8
  154. package/dist/core/extensions/provider-failover.js.map +1 -1
  155. package/dist/core/facade/coding-agent-facade.d.ts +6 -6
  156. package/dist/core/facade/coding-agent-facade.d.ts.map +1 -1
  157. package/dist/core/facade/coding-agent-facade.js +2 -3
  158. package/dist/core/facade/coding-agent-facade.js.map +1 -1
  159. package/dist/core/http-dispatcher.d.ts.map +1 -1
  160. package/dist/core/http-dispatcher.js +2 -1
  161. package/dist/core/http-dispatcher.js.map +1 -1
  162. package/dist/core/i18n/index.d.ts +14 -0
  163. package/dist/core/i18n/index.d.ts.map +1 -0
  164. package/dist/core/i18n/index.js +67 -0
  165. package/dist/core/i18n/index.js.map +1 -0
  166. package/dist/core/i18n/locales/en/example.d.ts +7 -0
  167. package/dist/core/i18n/locales/en/example.d.ts.map +1 -0
  168. package/dist/core/i18n/locales/en/example.js +7 -0
  169. package/dist/core/i18n/locales/en/example.js.map +1 -0
  170. package/dist/core/i18n/locales/zh-cn/cli.d.ts +8 -0
  171. package/dist/core/i18n/locales/zh-cn/cli.d.ts.map +1 -0
  172. package/dist/core/i18n/locales/zh-cn/cli.js +229 -0
  173. package/dist/core/i18n/locales/zh-cn/cli.js.map +1 -0
  174. package/dist/core/i18n/locales/zh-cn/common.d.ts +6 -0
  175. package/dist/core/i18n/locales/zh-cn/common.d.ts.map +1 -0
  176. package/dist/core/i18n/locales/zh-cn/common.js +6 -0
  177. package/dist/core/i18n/locales/zh-cn/common.js.map +1 -0
  178. package/dist/core/i18n/locales/zh-cn/core-contract-core.d.ts +13 -0
  179. package/dist/core/i18n/locales/zh-cn/core-contract-core.d.ts.map +1 -0
  180. package/dist/core/i18n/locales/zh-cn/core-contract-core.js +173 -0
  181. package/dist/core/i18n/locales/zh-cn/core-contract-core.js.map +1 -0
  182. package/dist/core/i18n/locales/zh-cn/core-contract-extensions.d.ts +12 -0
  183. package/dist/core/i18n/locales/zh-cn/core-contract-extensions.d.ts.map +1 -0
  184. package/dist/core/i18n/locales/zh-cn/core-contract-extensions.js +582 -0
  185. package/dist/core/i18n/locales/zh-cn/core-contract-extensions.js.map +1 -0
  186. package/dist/core/i18n/locales/zh-cn/core-contract-final.d.ts +9 -0
  187. package/dist/core/i18n/locales/zh-cn/core-contract-final.d.ts.map +1 -0
  188. package/dist/core/i18n/locales/zh-cn/core-contract-final.js +55 -0
  189. package/dist/core/i18n/locales/zh-cn/core-contract-final.js.map +1 -0
  190. package/dist/core/i18n/locales/zh-cn/core-contract-plugins.d.ts +11 -0
  191. package/dist/core/i18n/locales/zh-cn/core-contract-plugins.d.ts.map +1 -0
  192. package/dist/core/i18n/locales/zh-cn/core-contract-plugins.js +455 -0
  193. package/dist/core/i18n/locales/zh-cn/core-contract-plugins.js.map +1 -0
  194. package/dist/core/i18n/locales/zh-cn/core-errors.d.ts +9 -0
  195. package/dist/core/i18n/locales/zh-cn/core-errors.d.ts.map +1 -0
  196. package/dist/core/i18n/locales/zh-cn/core-errors.js +191 -0
  197. package/dist/core/i18n/locales/zh-cn/core-errors.js.map +1 -0
  198. package/dist/core/i18n/locales/zh-cn/example.d.ts +7 -0
  199. package/dist/core/i18n/locales/zh-cn/example.d.ts.map +1 -0
  200. package/dist/core/i18n/locales/zh-cn/example.js +10 -0
  201. package/dist/core/i18n/locales/zh-cn/example.js.map +1 -0
  202. package/dist/core/i18n/locales/zh-cn/index.d.ts +2 -0
  203. package/dist/core/i18n/locales/zh-cn/index.d.ts.map +1 -0
  204. package/dist/core/i18n/locales/zh-cn/index.js +41 -0
  205. package/dist/core/i18n/locales/zh-cn/index.js.map +1 -0
  206. package/dist/core/i18n/locales/zh-cn/interactive-mode.d.ts +10 -0
  207. package/dist/core/i18n/locales/zh-cn/interactive-mode.d.ts.map +1 -0
  208. package/dist/core/i18n/locales/zh-cn/interactive-mode.js +267 -0
  209. package/dist/core/i18n/locales/zh-cn/interactive-mode.js.map +1 -0
  210. package/dist/core/i18n/locales/zh-cn/keybindings.d.ts +11 -0
  211. package/dist/core/i18n/locales/zh-cn/keybindings.d.ts.map +1 -0
  212. package/dist/core/i18n/locales/zh-cn/keybindings.js +67 -0
  213. package/dist/core/i18n/locales/zh-cn/keybindings.js.map +1 -0
  214. package/dist/core/i18n/locales/zh-cn/slash-commands.d.ts +7 -0
  215. package/dist/core/i18n/locales/zh-cn/slash-commands.d.ts.map +1 -0
  216. package/dist/core/i18n/locales/zh-cn/slash-commands.js +39 -0
  217. package/dist/core/i18n/locales/zh-cn/slash-commands.js.map +1 -0
  218. package/dist/core/i18n/locales/zh-cn/tui-builtin.d.ts +10 -0
  219. package/dist/core/i18n/locales/zh-cn/tui-builtin.d.ts.map +1 -0
  220. package/dist/core/i18n/locales/zh-cn/tui-builtin.js +15 -0
  221. package/dist/core/i18n/locales/zh-cn/tui-builtin.js.map +1 -0
  222. package/dist/core/i18n/locales/zh-cn/tui-components-misc.d.ts +13 -0
  223. package/dist/core/i18n/locales/zh-cn/tui-components-misc.d.ts.map +1 -0
  224. package/dist/core/i18n/locales/zh-cn/tui-components-misc.js +102 -0
  225. package/dist/core/i18n/locales/zh-cn/tui-components-misc.js.map +1 -0
  226. package/dist/core/i18n/locales/zh-cn/tui-components-selectors.d.ts +12 -0
  227. package/dist/core/i18n/locales/zh-cn/tui-components-selectors.d.ts.map +1 -0
  228. package/dist/core/i18n/locales/zh-cn/tui-components-selectors.js +286 -0
  229. package/dist/core/i18n/locales/zh-cn/tui-components-selectors.js.map +1 -0
  230. package/dist/core/i18n/locales/zh-cn/tui-interactive-misc.d.ts +9 -0
  231. package/dist/core/i18n/locales/zh-cn/tui-interactive-misc.d.ts.map +1 -0
  232. package/dist/core/i18n/locales/zh-cn/tui-interactive-misc.js +79 -0
  233. package/dist/core/i18n/locales/zh-cn/tui-interactive-misc.js.map +1 -0
  234. package/dist/core/i18n/locales/zh-cn/tui-self-owned.d.ts +8 -0
  235. package/dist/core/i18n/locales/zh-cn/tui-self-owned.d.ts.map +1 -0
  236. package/dist/core/i18n/locales/zh-cn/tui-self-owned.js +72 -0
  237. package/dist/core/i18n/locales/zh-cn/tui-self-owned.js.map +1 -0
  238. package/dist/core/keybindings.d.ts +15 -0
  239. package/dist/core/keybindings.d.ts.map +1 -1
  240. package/dist/core/keybindings.js +18 -0
  241. package/dist/core/keybindings.js.map +1 -1
  242. package/dist/core/logger.d.ts.map +1 -1
  243. package/dist/core/logger.js +5 -1
  244. package/dist/core/logger.js.map +1 -1
  245. package/dist/core/model-config.d.ts +0 -1
  246. package/dist/core/model-config.d.ts.map +1 -1
  247. package/dist/core/model-config.js +9 -1
  248. package/dist/core/model-config.js.map +1 -1
  249. package/dist/core/model-registry.d.ts.map +1 -1
  250. package/dist/core/model-registry.js +2 -1
  251. package/dist/core/model-registry.js.map +1 -1
  252. package/dist/core/model-runtime.d.ts.map +1 -1
  253. package/dist/core/model-runtime.js +11 -7
  254. package/dist/core/model-runtime.js.map +1 -1
  255. package/dist/core/package-install-host.d.ts.map +1 -1
  256. package/dist/core/package-install-host.js +4 -3
  257. package/dist/core/package-install-host.js.map +1 -1
  258. package/dist/core/package-manager.d.ts.map +1 -1
  259. package/dist/core/package-manager.js +15 -10
  260. package/dist/core/package-manager.js.map +1 -1
  261. package/dist/core/package-resource-collection.d.ts.map +1 -1
  262. package/dist/core/package-resource-collection.js +2 -1
  263. package/dist/core/package-resource-collection.js.map +1 -1
  264. package/dist/core/package-source.d.ts.map +1 -1
  265. package/dist/core/package-source.js +3 -2
  266. package/dist/core/package-source.js.map +1 -1
  267. package/dist/core/provider-composer.d.ts +2 -2
  268. package/dist/core/provider-composer.d.ts.map +1 -1
  269. package/dist/core/provider-composer.js +29 -21
  270. package/dist/core/provider-composer.js.map +1 -1
  271. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  272. package/dist/core/remote-catalog-provider.js +6 -2
  273. package/dist/core/remote-catalog-provider.js.map +1 -1
  274. package/dist/core/resolve-config-value.d.ts.map +1 -1
  275. package/dist/core/resolve-config-value.js +15 -5
  276. package/dist/core/resolve-config-value.js.map +1 -1
  277. package/dist/core/sdk.d.ts +27 -5
  278. package/dist/core/sdk.d.ts.map +1 -1
  279. package/dist/core/sdk.js +80 -55
  280. package/dist/core/sdk.js.map +1 -1
  281. package/dist/core/session-cwd.d.ts.map +1 -1
  282. package/dist/core/session-cwd.js +5 -2
  283. package/dist/core/session-cwd.js.map +1 -1
  284. package/dist/core/session-export.d.ts.map +1 -1
  285. package/dist/core/session-export.js +2 -1
  286. package/dist/core/session-export.js.map +1 -1
  287. package/dist/core/session-manager.d.ts.map +1 -1
  288. package/dist/core/session-manager.js +39 -29
  289. package/dist/core/session-manager.js.map +1 -1
  290. package/dist/core/session-storage.d.ts.map +1 -1
  291. package/dist/core/session-storage.js +3 -3
  292. package/dist/core/session-storage.js.map +1 -1
  293. package/dist/core/settings-manager.d.ts +20 -20
  294. package/dist/core/settings-manager.d.ts.map +1 -1
  295. package/dist/core/settings-manager.js +47 -59
  296. package/dist/core/settings-manager.js.map +1 -1
  297. package/dist/core/slash-commands.d.ts.map +1 -1
  298. package/dist/core/slash-commands.js +53 -32
  299. package/dist/core/slash-commands.js.map +1 -1
  300. package/dist/core/system-prompt.d.ts.map +1 -1
  301. package/dist/core/system-prompt.js +25 -2
  302. package/dist/core/system-prompt.js.map +1 -1
  303. package/dist/core/tools/bash.d.ts.map +1 -1
  304. package/dist/core/tools/bash.js +11 -7
  305. package/dist/core/tools/bash.js.map +1 -1
  306. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  307. package/dist/core/tools/edit-diff.js +9 -4
  308. package/dist/core/tools/edit-diff.js.map +1 -1
  309. package/dist/core/tools/edit.d.ts.map +1 -1
  310. package/dist/core/tools/edit.js +4 -3
  311. package/dist/core/tools/edit.js.map +1 -1
  312. package/dist/core/tools/index.d.ts.map +1 -1
  313. package/dist/core/tools/index.js +3 -2
  314. package/dist/core/tools/index.js.map +1 -1
  315. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  316. package/dist/core/tools/output-accumulator.js +2 -1
  317. package/dist/core/tools/output-accumulator.js.map +1 -1
  318. package/dist/core/tools/read.d.ts.map +1 -1
  319. package/dist/core/tools/read.js +6 -2
  320. package/dist/core/tools/read.js.map +1 -1
  321. package/dist/core/tools/write.d.ts.map +1 -1
  322. package/dist/core/tools/write.js +2 -1
  323. package/dist/core/tools/write.js.map +1 -1
  324. package/dist/durable/durable-service.d.ts.map +1 -1
  325. package/dist/durable/durable-service.js +25 -18
  326. package/dist/durable/durable-service.js.map +1 -1
  327. package/dist/host/checkpoint-commit.d.ts.map +1 -1
  328. package/dist/host/checkpoint-commit.js +2 -1
  329. package/dist/host/checkpoint-commit.js.map +1 -1
  330. package/dist/host/manual-compaction.d.ts.map +1 -1
  331. package/dist/host/manual-compaction.js +2 -1
  332. package/dist/host/manual-compaction.js.map +1 -1
  333. package/dist/host/output-projection.d.ts +0 -13
  334. package/dist/host/output-projection.d.ts.map +1 -1
  335. package/dist/host/output-projection.js +16 -2
  336. package/dist/host/output-projection.js.map +1 -1
  337. package/dist/host/summary-retry.d.ts.map +1 -1
  338. package/dist/host/summary-retry.js +3 -2
  339. package/dist/host/summary-retry.js.map +1 -1
  340. package/dist/main.d.ts.map +1 -1
  341. package/dist/main.js +97 -60
  342. package/dist/main.js.map +1 -1
  343. package/dist/modes/interactive/components/agents-view.d.ts.map +1 -1
  344. package/dist/modes/interactive/components/agents-view.js +18 -15
  345. package/dist/modes/interactive/components/agents-view.js.map +1 -1
  346. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  347. package/dist/modes/interactive/components/assistant-message.js +6 -5
  348. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  349. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  350. package/dist/modes/interactive/components/bash-execution.js +12 -7
  351. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  352. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  353. package/dist/modes/interactive/components/bordered-loader.js +2 -1
  354. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  355. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  356. package/dist/modes/interactive/components/branch-summary-message.js +6 -5
  357. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  358. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  359. package/dist/modes/interactive/components/compaction-summary-message.js +9 -5
  360. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  361. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  362. package/dist/modes/interactive/components/config-selector.js +18 -15
  363. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  364. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
  365. package/dist/modes/interactive/components/custom-entry.js +2 -1
  366. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  367. package/dist/modes/interactive/components/dialog-editor.d.ts.map +1 -1
  368. package/dist/modes/interactive/components/dialog-editor.js +5 -4
  369. package/dist/modes/interactive/components/dialog-editor.js.map +1 -1
  370. package/dist/modes/interactive/components/dialog-input.d.ts.map +1 -1
  371. package/dist/modes/interactive/components/dialog-input.js +2 -1
  372. package/dist/modes/interactive/components/dialog-input.js.map +1 -1
  373. package/dist/modes/interactive/components/dialog-selector.d.ts.map +1 -1
  374. package/dist/modes/interactive/components/dialog-selector.js +4 -3
  375. package/dist/modes/interactive/components/dialog-selector.js.map +1 -1
  376. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  377. package/dist/modes/interactive/components/first-time-setup.js +11 -10
  378. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  379. package/dist/modes/interactive/components/footer.d.ts +0 -2
  380. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  381. package/dist/modes/interactive/components/footer.js +8 -10
  382. package/dist/modes/interactive/components/footer.js.map +1 -1
  383. package/dist/modes/interactive/components/index.d.ts +1 -0
  384. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  385. package/dist/modes/interactive/components/index.js +1 -0
  386. package/dist/modes/interactive/components/index.js.map +1 -1
  387. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  388. package/dist/modes/interactive/components/keybinding-hints.js +3 -2
  389. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  390. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  391. package/dist/modes/interactive/components/login-dialog.js +12 -11
  392. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  393. package/dist/modes/interactive/components/mermaid.d.ts.map +1 -1
  394. package/dist/modes/interactive/components/mermaid.js +6 -2
  395. package/dist/modes/interactive/components/mermaid.js.map +1 -1
  396. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  397. package/dist/modes/interactive/components/model-selector.js +28 -16
  398. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  399. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  400. package/dist/modes/interactive/components/oauth-selector.js +10 -9
  401. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  402. package/dist/modes/interactive/components/plugin-manager-entry.d.ts.map +1 -1
  403. package/dist/modes/interactive/components/plugin-manager-entry.js +22 -13
  404. package/dist/modes/interactive/components/plugin-manager-entry.js.map +1 -1
  405. package/dist/modes/interactive/components/plugin-selection-entry.d.ts.map +1 -1
  406. package/dist/modes/interactive/components/plugin-selection-entry.js +27 -12
  407. package/dist/modes/interactive/components/plugin-selection-entry.js.map +1 -1
  408. package/dist/modes/interactive/components/queue-manager-selector.d.ts +60 -0
  409. package/dist/modes/interactive/components/queue-manager-selector.d.ts.map +1 -0
  410. package/dist/modes/interactive/components/queue-manager-selector.js +166 -0
  411. package/dist/modes/interactive/components/queue-manager-selector.js.map +1 -0
  412. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  413. package/dist/modes/interactive/components/scoped-models-selector.js +16 -14
  414. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  415. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  416. package/dist/modes/interactive/components/session-selector.js +43 -31
  417. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  418. package/dist/modes/interactive/components/settings-selector.d.ts +4 -6
  419. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  420. package/dist/modes/interactive/components/settings-selector.js +115 -120
  421. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  422. package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -1
  423. package/dist/modes/interactive/components/settings-submenu.js +5 -4
  424. package/dist/modes/interactive/components/settings-submenu.js.map +1 -1
  425. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  426. package/dist/modes/interactive/components/show-images-selector.js +3 -2
  427. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  428. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  429. package/dist/modes/interactive/components/skill-invocation-message.js +4 -3
  430. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  431. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
  432. package/dist/modes/interactive/components/status-indicator.js +14 -5
  433. package/dist/modes/interactive/components/status-indicator.js.map +1 -1
  434. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  435. package/dist/modes/interactive/components/theme-selector.js +2 -1
  436. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  437. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  438. package/dist/modes/interactive/components/thinking-selector.js +11 -4
  439. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  440. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  441. package/dist/modes/interactive/components/tool-execution.js +8 -3
  442. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  443. package/dist/modes/interactive/components/tree-list.d.ts.map +1 -1
  444. package/dist/modes/interactive/components/tree-list.js +7 -6
  445. package/dist/modes/interactive/components/tree-list.js.map +1 -1
  446. package/dist/modes/interactive/components/tree-render.d.ts.map +1 -1
  447. package/dist/modes/interactive/components/tree-render.js +28 -23
  448. package/dist/modes/interactive/components/tree-render.js.map +1 -1
  449. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  450. package/dist/modes/interactive/components/tree-selector.js +9 -7
  451. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  452. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  453. package/dist/modes/interactive/components/user-message-selector.js +5 -4
  454. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  455. package/dist/modes/interactive/components/workflow-view.d.ts.map +1 -1
  456. package/dist/modes/interactive/components/workflow-view.js +36 -21
  457. package/dist/modes/interactive/components/workflow-view.js.map +1 -1
  458. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  459. package/dist/modes/interactive/external-editor.js +2 -1
  460. package/dist/modes/interactive/external-editor.js.map +1 -1
  461. package/dist/modes/interactive/interactive-auth.d.ts.map +1 -1
  462. package/dist/modes/interactive/interactive-auth.js +71 -40
  463. package/dist/modes/interactive/interactive-auth.js.map +1 -1
  464. package/dist/modes/interactive/interactive-commands.d.ts +1 -0
  465. package/dist/modes/interactive/interactive-commands.d.ts.map +1 -1
  466. package/dist/modes/interactive/interactive-commands.js +3 -0
  467. package/dist/modes/interactive/interactive-commands.js.map +1 -1
  468. package/dist/modes/interactive/interactive-dialog-ui.d.ts.map +1 -1
  469. package/dist/modes/interactive/interactive-dialog-ui.js +5 -5
  470. package/dist/modes/interactive/interactive-dialog-ui.js.map +1 -1
  471. package/dist/modes/interactive/interactive-format.d.ts.map +1 -1
  472. package/dist/modes/interactive/interactive-format.js +34 -18
  473. package/dist/modes/interactive/interactive-format.js.map +1 -1
  474. package/dist/modes/interactive/interactive-helpers.d.ts.map +1 -1
  475. package/dist/modes/interactive/interactive-helpers.js +7 -2
  476. package/dist/modes/interactive/interactive-helpers.js.map +1 -1
  477. package/dist/modes/interactive/interactive-mode.d.ts +4 -2
  478. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  479. package/dist/modes/interactive/interactive-mode.js +350 -279
  480. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  481. package/dist/modes/interactive/interactive-selectors.d.ts +9 -0
  482. package/dist/modes/interactive/interactive-selectors.d.ts.map +1 -1
  483. package/dist/modes/interactive/interactive-selectors.js +79 -25
  484. package/dist/modes/interactive/interactive-selectors.js.map +1 -1
  485. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  486. package/dist/modes/interactive/theme/theme-controller.js +5 -1
  487. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  488. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  489. package/dist/modes/interactive/theme/theme.js +26 -23
  490. package/dist/modes/interactive/theme/theme.js.map +1 -1
  491. package/dist/modes/json-event.d.ts.map +1 -1
  492. package/dist/modes/json-event.js +3 -2
  493. package/dist/modes/json-event.js.map +1 -1
  494. package/dist/modes/print-mode.d.ts.map +1 -1
  495. package/dist/modes/print-mode.js +3 -2
  496. package/dist/modes/print-mode.js.map +1 -1
  497. package/dist/modes/rpc/rpc-client.d.ts +0 -8
  498. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  499. package/dist/modes/rpc/rpc-client.js +3 -14
  500. package/dist/modes/rpc/rpc-client.js.map +1 -1
  501. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  502. package/dist/modes/rpc/rpc-mode.js +0 -9
  503. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  504. package/dist/modes/rpc/rpc-types.d.ts +0 -19
  505. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  506. package/dist/modes/rpc/rpc-types.js.map +1 -1
  507. package/dist/package-manager-cli.d.ts.map +1 -1
  508. package/dist/package-manager-cli.js +28 -13
  509. package/dist/package-manager-cli.js.map +1 -1
  510. package/dist/plugins/ecosystem/catalog.d.ts.map +1 -1
  511. package/dist/plugins/ecosystem/catalog.js +3 -2
  512. package/dist/plugins/ecosystem/catalog.js.map +1 -1
  513. package/dist/plugins/ecosystem/cli.d.ts.map +1 -1
  514. package/dist/plugins/ecosystem/cli.js +2 -1
  515. package/dist/plugins/ecosystem/cli.js.map +1 -1
  516. package/dist/plugins/ecosystem/default-plugin-market.d.ts.map +1 -1
  517. package/dist/plugins/ecosystem/default-plugin-market.js +3 -2
  518. package/dist/plugins/ecosystem/default-plugin-market.js.map +1 -1
  519. package/dist/plugins/ecosystem/distribution.d.ts.map +1 -1
  520. package/dist/plugins/ecosystem/distribution.js +2 -1
  521. package/dist/plugins/ecosystem/distribution.js.map +1 -1
  522. package/dist/plugins/ecosystem/installer.d.ts.map +1 -1
  523. package/dist/plugins/ecosystem/installer.js +3 -2
  524. package/dist/plugins/ecosystem/installer.js.map +1 -1
  525. package/dist/plugins/ecosystem/node-disk-registry-source.d.ts.map +1 -1
  526. package/dist/plugins/ecosystem/node-disk-registry-source.js +20 -17
  527. package/dist/plugins/ecosystem/node-disk-registry-source.js.map +1 -1
  528. package/dist/plugins/ecosystem/node-distribution-host.d.ts.map +1 -1
  529. package/dist/plugins/ecosystem/node-distribution-host.js +35 -34
  530. package/dist/plugins/ecosystem/node-distribution-host.js.map +1 -1
  531. package/dist/plugins/ecosystem/node-npm-registry-source.d.ts.map +1 -1
  532. package/dist/plugins/ecosystem/node-npm-registry-source.js +35 -34
  533. package/dist/plugins/ecosystem/node-npm-registry-source.js.map +1 -1
  534. package/dist/plugins/ecosystem/node-package-install-host.d.ts.map +1 -1
  535. package/dist/plugins/ecosystem/node-package-install-host.js +9 -8
  536. package/dist/plugins/ecosystem/node-package-install-host.js.map +1 -1
  537. package/dist/plugins/ecosystem/node-package-install-persistence.d.ts.map +1 -1
  538. package/dist/plugins/ecosystem/node-package-install-persistence.js +4 -3
  539. package/dist/plugins/ecosystem/node-package-install-persistence.js.map +1 -1
  540. package/dist/plugins/ecosystem/node-plugin-bootstrap.d.ts +9 -2
  541. package/dist/plugins/ecosystem/node-plugin-bootstrap.d.ts.map +1 -1
  542. package/dist/plugins/ecosystem/node-plugin-bootstrap.js +44 -5
  543. package/dist/plugins/ecosystem/node-plugin-bootstrap.js.map +1 -1
  544. package/dist/plugins/ecosystem/node-plugin-trust-root.d.ts.map +1 -1
  545. package/dist/plugins/ecosystem/node-plugin-trust-root.js +10 -9
  546. package/dist/plugins/ecosystem/node-plugin-trust-root.js.map +1 -1
  547. package/dist/plugins/ecosystem/node-registry-source.d.ts.map +1 -1
  548. package/dist/plugins/ecosystem/node-registry-source.js +31 -30
  549. package/dist/plugins/ecosystem/node-registry-source.js.map +1 -1
  550. package/dist/plugins/ecosystem/node-release-package-source.d.ts.map +1 -1
  551. package/dist/plugins/ecosystem/node-release-package-source.js +30 -29
  552. package/dist/plugins/ecosystem/node-release-package-source.js.map +1 -1
  553. package/dist/plugins/ecosystem/node-tar-writer.d.ts.map +1 -1
  554. package/dist/plugins/ecosystem/node-tar-writer.js +11 -10
  555. package/dist/plugins/ecosystem/node-tar-writer.js.map +1 -1
  556. package/dist/plugins/ecosystem/node-url-package-source.d.ts.map +1 -1
  557. package/dist/plugins/ecosystem/node-url-package-source.js +21 -20
  558. package/dist/plugins/ecosystem/node-url-package-source.js.map +1 -1
  559. package/dist/plugins/ecosystem/plugin-acquisition.d.ts.map +1 -1
  560. package/dist/plugins/ecosystem/plugin-acquisition.js +3 -2
  561. package/dist/plugins/ecosystem/plugin-acquisition.js.map +1 -1
  562. package/dist/plugins/ecosystem/plugin-bootstrap.d.ts +9 -1
  563. package/dist/plugins/ecosystem/plugin-bootstrap.d.ts.map +1 -1
  564. package/dist/plugins/ecosystem/plugin-bootstrap.js +5 -0
  565. package/dist/plugins/ecosystem/plugin-bootstrap.js.map +1 -1
  566. package/dist/plugins/ecosystem/registry-cli-adapter.d.ts.map +1 -1
  567. package/dist/plugins/ecosystem/registry-cli-adapter.js +2 -1
  568. package/dist/plugins/ecosystem/registry-cli-adapter.js.map +1 -1
  569. package/dist/plugins/ecosystem/registry.d.ts.map +1 -1
  570. package/dist/plugins/ecosystem/registry.js +35 -32
  571. package/dist/plugins/ecosystem/registry.js.map +1 -1
  572. package/dist/plugins/ecosystem/resolver.d.ts.map +1 -1
  573. package/dist/plugins/ecosystem/resolver.js +3 -2
  574. package/dist/plugins/ecosystem/resolver.js.map +1 -1
  575. package/dist/plugins/ecosystem/selection-store.d.ts.map +1 -1
  576. package/dist/plugins/ecosystem/selection-store.js +11 -10
  577. package/dist/plugins/ecosystem/selection-store.js.map +1 -1
  578. package/dist/plugins/ecosystem/selection.d.ts.map +1 -1
  579. package/dist/plugins/ecosystem/selection.js +8 -7
  580. package/dist/plugins/ecosystem/selection.js.map +1 -1
  581. package/dist/plugins/ecosystem/state.d.ts.map +1 -1
  582. package/dist/plugins/ecosystem/state.js +24 -23
  583. package/dist/plugins/ecosystem/state.js.map +1 -1
  584. package/dist/plugins/ecosystem/updates.d.ts.map +1 -1
  585. package/dist/plugins/ecosystem/updates.js +5 -4
  586. package/dist/plugins/ecosystem/updates.js.map +1 -1
  587. package/dist/plugins/mcp-http.d.ts +0 -17
  588. package/dist/plugins/mcp-http.d.ts.map +1 -1
  589. package/dist/plugins/mcp-http.js +30 -7
  590. package/dist/plugins/mcp-http.js.map +1 -1
  591. package/dist/plugins/plugin-supervisor.d.ts.map +1 -1
  592. package/dist/plugins/plugin-supervisor.js +19 -1
  593. package/dist/plugins/plugin-supervisor.js.map +1 -1
  594. package/dist/profile/first-roles.d.ts.map +1 -1
  595. package/dist/profile/first-roles.js +10 -1
  596. package/dist/profile/first-roles.js.map +1 -1
  597. package/dist/profile/goal-plugin.d.ts.map +1 -1
  598. package/dist/profile/goal-plugin.js +24 -5
  599. package/dist/profile/goal-plugin.js.map +1 -1
  600. package/dist/profile/identity.d.ts.map +1 -1
  601. package/dist/profile/identity.js +7 -6
  602. package/dist/profile/identity.js.map +1 -1
  603. package/dist/profile/lock.d.ts.map +1 -1
  604. package/dist/profile/lock.js +15 -1
  605. package/dist/profile/lock.js.map +1 -1
  606. package/dist/profile/plan-plugin.d.ts.map +1 -1
  607. package/dist/profile/plan-plugin.js +26 -13
  608. package/dist/profile/plan-plugin.js.map +1 -1
  609. package/dist/profile/plugin-profiles.d.ts.map +1 -1
  610. package/dist/profile/plugin-profiles.js +2 -1
  611. package/dist/profile/plugin-profiles.js.map +1 -1
  612. package/dist/profile/policy-manifest.d.ts.map +1 -1
  613. package/dist/profile/policy-manifest.js +5 -4
  614. package/dist/profile/policy-manifest.js.map +1 -1
  615. package/dist/profile/profile-registry.d.ts +0 -12
  616. package/dist/profile/profile-registry.d.ts.map +1 -1
  617. package/dist/profile/profile-registry.js +14 -1
  618. package/dist/profile/profile-registry.js.map +1 -1
  619. package/dist/profile/role-catalog.d.ts +0 -1
  620. package/dist/profile/role-catalog.d.ts.map +1 -1
  621. package/dist/profile/role-catalog.js +17 -15
  622. package/dist/profile/role-catalog.js.map +1 -1
  623. package/dist/profile/role-orchestrator.d.ts.map +1 -1
  624. package/dist/profile/role-orchestrator.js +8 -7
  625. package/dist/profile/role-orchestrator.js.map +1 -1
  626. package/dist/profile/role-runner.d.ts.map +1 -1
  627. package/dist/profile/role-runner.js +3 -2
  628. package/dist/profile/role-runner.js.map +1 -1
  629. package/dist/profile/root-facade.d.ts.map +1 -1
  630. package/dist/profile/root-facade.js +2 -1
  631. package/dist/profile/root-facade.js.map +1 -1
  632. package/dist/profile/skill-discovery-wiring.d.ts.map +1 -1
  633. package/dist/profile/skill-discovery-wiring.js +7 -2
  634. package/dist/profile/skill-discovery-wiring.js.map +1 -1
  635. package/dist/profile/state-store.d.ts.map +1 -1
  636. package/dist/profile/state-store.js +13 -9
  637. package/dist/profile/state-store.js.map +1 -1
  638. package/dist/profile/todo-plugin.d.ts.map +1 -1
  639. package/dist/profile/todo-plugin.js +9 -4
  640. package/dist/profile/todo-plugin.js.map +1 -1
  641. package/dist/profiles/builtin-suites.d.ts +13 -6
  642. package/dist/profiles/builtin-suites.d.ts.map +1 -1
  643. package/dist/profiles/builtin-suites.js +15 -6
  644. package/dist/profiles/builtin-suites.js.map +1 -1
  645. package/dist/profiles/suite-loader.d.ts +25 -1
  646. package/dist/profiles/suite-loader.d.ts.map +1 -1
  647. package/dist/profiles/suite-loader.js +34 -9
  648. package/dist/profiles/suite-loader.js.map +1 -1
  649. package/dist/remote/server-entry.d.ts.map +1 -1
  650. package/dist/remote/server-entry.js +3 -2
  651. package/dist/remote/server-entry.js.map +1 -1
  652. package/dist/remote/session-source.d.ts.map +1 -1
  653. package/dist/remote/session-source.js +8 -4
  654. package/dist/remote/session-source.js.map +1 -1
  655. package/dist/share/session-share.d.ts.map +1 -1
  656. package/dist/share/session-share.js +14 -2
  657. package/dist/share/session-share.js.map +1 -1
  658. package/dist/testing/plugin-testkit.d.ts.map +1 -1
  659. package/dist/testing/plugin-testkit.js +4 -3
  660. package/dist/testing/plugin-testkit.js.map +1 -1
  661. package/dist/testing/runtime-delivery-queue.d.ts.map +1 -1
  662. package/dist/testing/runtime-delivery-queue.js +2 -1
  663. package/dist/testing/runtime-delivery-queue.js.map +1 -1
  664. package/dist/testing/session-plugin-testkit.d.ts.map +1 -1
  665. package/dist/testing/session-plugin-testkit.js +10 -7
  666. package/dist/testing/session-plugin-testkit.js.map +1 -1
  667. package/dist/utils/ansi.d.ts.map +1 -1
  668. package/dist/utils/ansi.js +2 -1
  669. package/dist/utils/ansi.js.map +1 -1
  670. package/dist/utils/clipboard.d.ts.map +1 -1
  671. package/dist/utils/clipboard.js +7 -6
  672. package/dist/utils/clipboard.js.map +1 -1
  673. package/dist/utils/image-resize-worker.d.ts.map +1 -1
  674. package/dist/utils/image-resize-worker.js +3 -2
  675. package/dist/utils/image-resize-worker.js.map +1 -1
  676. package/dist/utils/photon.d.ts +2 -2
  677. package/dist/utils/photon.d.ts.map +1 -1
  678. package/dist/utils/photon.js +2 -2
  679. package/dist/utils/photon.js.map +1 -1
  680. package/dist/utils/shell.d.ts.map +1 -1
  681. package/dist/utils/shell.js +9 -8
  682. package/dist/utils/shell.js.map +1 -1
  683. package/dist/utils/tools-manager.d.ts.map +1 -1
  684. package/dist/utils/tools-manager.js +23 -13
  685. package/dist/utils/tools-manager.js.map +1 -1
  686. package/dist/utils/version-check.d.ts.map +1 -1
  687. package/dist/utils/version-check.js +5 -1
  688. package/dist/utils/version-check.js.map +1 -1
  689. package/docs/compaction.md +1 -3
  690. package/docs/docs.json +4 -0
  691. package/docs/index.md +1 -0
  692. package/docs/keybindings.md +3 -0
  693. package/docs/mcp.md +103 -0
  694. package/docs/models.md +14 -22
  695. package/docs/providers.md +0 -1
  696. package/docs/quickstart.md +1 -1
  697. package/docs/rpc.md +1 -26
  698. package/docs/sdk.md +4 -6
  699. package/docs/settings.md +10 -12
  700. package/docs/skills.md +1 -9
  701. package/docs/terminal-setup.md +2 -3
  702. package/docs/usage.md +7 -6
  703. package/examples/extensions/with-deps/package-lock.json +2 -2
  704. package/examples/extensions/with-deps/package.json +1 -1
  705. package/examples/extensions/with-deps/plugin.json +1 -1
  706. package/examples/sdk/10-settings.ts +2 -4
  707. package/examples/sdk/12-full-control.ts +1 -2
  708. package/package.json +1 -3
  709. package/dist/bundle/chunks/chunk-EALJ5DDX.js +0 -1452
  710. package/dist/core/extensions/microcompact.d.ts +0 -80
  711. package/dist/core/extensions/microcompact.d.ts.map +0 -1
  712. package/dist/core/extensions/microcompact.js +0 -134
  713. package/dist/core/extensions/microcompact.js.map +0 -1
  714. package/dist/server/create-harness.d.ts +0 -26
  715. package/dist/server/create-harness.d.ts.map +0 -1
  716. package/dist/server/create-harness.js +0 -106
  717. package/dist/server/create-harness.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-tools.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,qBAAqB,EAAuB,MAAM,6BAA6B,CAAC;AAO9F,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,KAAK,EAAE,cAAc,EAAsB,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAG/F,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAOnF;AAED,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,EAAE,CAapF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,qBAAqB,GAAG,QAAQ,EAAE,CAQtE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAE1G;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAe9F;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAmC/F;AAED,wBAAgB,mBAAmB,CAClC,OAAO,EAAE,qBAAqB,EAC9B,OAAO,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,wBAAwB,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1E,IAAI,CA0HN;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAMxE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,GAAG,KAAK,EAAE,CAmD3E;AAED,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAgBrF;AAED,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAc1F","sourcesContent":["/**\n * Tool registry, capability skills, and system-prompt assembly for\n * AgentSession.\n *\n * Extracted from `agent-session.ts`. Every function here operates on the\n * internal session facade ({@link AgentSessionInternals}); `AgentSession`\n * keeps same-name delegates so call sites, dynamic dispatch, and test spies\n * keep working unchanged.\n */\n\nimport type { AgentTool } from \"@agent-forge/agent-core\";\nimport type { AgentSessionInternals, ToolDefinitionEntry } from \"./agent-session-internal.ts\";\nimport {\n\tinstallSessionBootstrapSkills,\n\trefreshSessionBootstrapSkills,\n\tSKILL_CONTRIBUTION_POINT_ID,\n\tSKILL_CONTRIBUTION_POINT_VERSION,\n} from \"./extensions/index.ts\";\nimport type { Skill } from \"./skills.ts\";\nimport { createSyntheticSourceInfo } from \"./source-info.ts\";\nimport { buildSystemPrompt } from \"./system-prompt.ts\";\nimport type { ToolDefinition, ToolExecuteContext, ToolInfo } from \"./tools/tool-definition.ts\";\nimport { wrapToolDefinition } from \"./tools/tool-definition-wrapper.ts\";\n\nexport function normalizePromptSnippet(text: string | undefined): string | undefined {\n\tif (!text) return undefined;\n\tconst oneLine = text\n\t\t.replace(/[\\r\\n]+/g, \" \")\n\t\t.replace(/\\s+/g, \" \")\n\t\t.trim();\n\treturn oneLine.length > 0 ? oneLine : undefined;\n}\n\nexport function normalizePromptGuidelines(guidelines: string[] | undefined): string[] {\n\tif (!guidelines || guidelines.length === 0) {\n\t\treturn [];\n\t}\n\n\tconst unique = new Set<string>();\n\tfor (const guideline of guidelines) {\n\t\tconst normalized = guideline.trim();\n\t\tif (normalized.length > 0) {\n\t\t\tunique.add(normalized);\n\t\t}\n\t}\n\treturn Array.from(unique);\n}\n\n/**\n * Get all configured tools with name, description, parameter schema, prompt guidelines, and source metadata.\n */\nexport function getAllTools(session: AgentSessionInternals): ToolInfo[] {\n\treturn Array.from(session._toolDefinitions.values()).map(({ definition, sourceInfo }) => ({\n\t\tname: definition.name,\n\t\tdescription: definition.description,\n\t\tparameters: definition.parameters,\n\t\tpromptGuidelines: definition.promptGuidelines,\n\t\tsourceInfo,\n\t}));\n}\n\nexport function getToolDefinition(session: AgentSessionInternals, name: string): ToolDefinition | undefined {\n\treturn session._toolDefinitions.get(name)?.definition;\n}\n\n/**\n * Set active tools by name.\n * Only tools in the registry can be enabled. Unknown tool names are ignored.\n * Also rebuilds the system prompt to reflect the new tool set.\n * Changes take effect on the next agent turn.\n */\nexport function setActiveToolsByName(session: AgentSessionInternals, toolNames: string[]): void {\n\tconst tools: AgentTool[] = [];\n\tconst validToolNames: string[] = [];\n\tfor (const name of toolNames) {\n\t\tconst tool = session._toolRegistry.get(name);\n\t\tif (tool) {\n\t\t\ttools.push(tool);\n\t\t\tvalidToolNames.push(name);\n\t\t}\n\t}\n\tsession.agent.state.tools = tools;\n\n\t// Rebuild base system prompt with new tool set\n\tsession._baseSystemPrompt = session._rebuildSystemPrompt(validToolNames);\n\tsession.agent.state.systemPrompt = session._systemPromptOverride ?? session._baseSystemPrompt;\n}\n\nexport function rebuildSystemPrompt(session: AgentSessionInternals, toolNames: string[]): string {\n\tconst validToolNames = toolNames.filter((name) => session._toolRegistry.has(name));\n\tconst toolSnippets: Record<string, string> = {};\n\tconst promptGuidelines: string[] = [];\n\tfor (const name of validToolNames) {\n\t\tconst snippet = session._toolPromptSnippets.get(name);\n\t\tif (snippet) {\n\t\t\ttoolSnippets[name] = snippet;\n\t\t}\n\n\t\tconst toolGuidelines = session._toolPromptGuidelines.get(name);\n\t\tif (toolGuidelines) {\n\t\t\tpromptGuidelines.push(...toolGuidelines);\n\t\t}\n\t}\n\n\tconst loaderSystemPrompt = session._resourceLoader.getSystemPrompt();\n\tconst loaderAppendSystemPrompt = session._resourceLoader.getAppendSystemPrompt();\n\tconst appendSystemPrompt = loaderAppendSystemPrompt.length > 0 ? loaderAppendSystemPrompt.join(\"\\n\\n\") : undefined;\n\tconst loadedSkills = session._getAvailableSkills();\n\tconst loadedContextFiles = session._resourceLoader.getAgentsFiles().agentsFiles;\n\n\tsession._baseSystemPromptOptions = {\n\t\tcwd: session._cwd,\n\t\tskills: loadedSkills,\n\t\tcontextFiles: loadedContextFiles,\n\t\tcustomPrompt: loaderSystemPrompt,\n\t\torientationPrompt: session._orientationPrompt,\n\t\tpreferenceCard: session._preferenceCard,\n\t\tappendSystemPrompt,\n\t\tselectedTools: validToolNames,\n\t\ttoolSnippets,\n\t\tpromptGuidelines,\n\t};\n\treturn buildSystemPrompt(session._baseSystemPromptOptions);\n}\n\nexport function refreshToolRegistry(\n\tsession: AgentSessionInternals,\n\toptions?: { activeToolNames?: string[]; includeAllExtensionTools?: boolean },\n): void {\n\tconst previousRegistryNames = new Set(session._toolRegistry.keys());\n\tconst previousActiveToolNames = session.getActiveToolNames();\n\tconst allowedToolNames = session._allowedToolNames;\n\tconst excludedToolNames = session._excludedToolNames;\n\tconst isAllowedTool = (name: string): boolean =>\n\t\t(!allowedToolNames || allowedToolNames.has(name)) && !excludedToolNames?.has(name);\n\n\tconst allCustomTools = session._customTools\n\t\t.map((definition) => ({\n\t\t\tdefinition,\n\t\t\tsourceInfo: createSyntheticSourceInfo(`<sdk:${definition.name}>`, { source: \"sdk\" }),\n\t\t}))\n\t\t.filter((tool) => isAllowedTool(tool.definition.name));\n\tconst definitionRegistry = new Map<string, ToolDefinitionEntry>(\n\t\tArray.from(session._baseToolDefinitions.entries())\n\t\t\t.filter(([name]) => isAllowedTool(name))\n\t\t\t.map(([name, definition]) => [\n\t\t\t\tname,\n\t\t\t\t{\n\t\t\t\t\tdefinition,\n\t\t\t\t\tsourceInfo:\n\t\t\t\t\t\tsession._baseToolSources.get(name) ??\n\t\t\t\t\t\tcreateSyntheticSourceInfo(`<bootstrap:${name}>`, { source: \"agent-forge.bootstrap-tools\" }),\n\t\t\t\t},\n\t\t\t]),\n\t);\n\tfor (const tool of allCustomTools) {\n\t\tdefinitionRegistry.set(tool.definition.name, {\n\t\t\tdefinition: tool.definition,\n\t\t\tsourceInfo: tool.sourceInfo,\n\t\t});\n\t}\n\tsession._toolDefinitions = definitionRegistry;\n\tsession._toolPromptSnippets = new Map(\n\t\tArray.from(definitionRegistry.values())\n\t\t\t.map(({ definition }) => {\n\t\t\t\tconst snippet = normalizePromptSnippet(definition.promptSnippet);\n\t\t\t\treturn snippet ? ([definition.name, snippet] as const) : undefined;\n\t\t\t})\n\t\t\t.filter((entry): entry is readonly [string, string] => entry !== undefined),\n\t);\n\tsession._toolPromptGuidelines = new Map(\n\t\tArray.from(definitionRegistry.values())\n\t\t\t.map(({ definition }) => {\n\t\t\t\tconst guidelines = normalizePromptGuidelines(definition.promptGuidelines);\n\t\t\t\treturn guidelines.length > 0 ? ([definition.name, guidelines] as const) : undefined;\n\t\t\t})\n\t\t\t.filter((entry): entry is readonly [string, string[]] => entry !== undefined),\n\t);\n\t// Session-resolved execute context and dynamic-tool tracking replace the\n\t// former runner-mediated wrapper: tools receive the same session facts and\n\t// a tool that activates more tools during execute still surfaces them via\n\t// addedToolNames.\n\tconst executeContext = (): ToolExecuteContext => ({\n\t\tcwd: session.sessionManager.getCwd(),\n\t\tmodel: session.model,\n\t\tsessionManager: session.sessionManager,\n\t\tthinkingLevel: session.thinkingLevel,\n\t});\n\tconst wrapWithDynamicToolTracking = ({ definition }: { definition: ToolDefinition }): AgentTool => {\n\t\tconst tool = wrapToolDefinition(definition, executeContext);\n\t\tconst execute = tool.execute;\n\t\treturn {\n\t\t\t...tool,\n\t\t\texecute: async (toolCallId, params, signal, onUpdate) => {\n\t\t\t\tconst activeBefore = session.getActiveToolNames();\n\t\t\t\tconst result = await execute(toolCallId, params, signal, onUpdate);\n\t\t\t\tconst activeAfter = session.getActiveToolNames();\n\t\t\t\tif (!activeBefore.every((name) => activeAfter.includes(name))) return result;\n\n\t\t\t\tconst beforeNames = new Set(activeBefore);\n\t\t\t\tconst addedToolNames = activeAfter.filter((name) => !beforeNames.has(name));\n\t\t\t\tif (addedToolNames.length === 0) return result;\n\t\t\t\treturn {\n\t\t\t\t\t...result,\n\t\t\t\t\taddedToolNames: [...new Set([...(result.addedToolNames ?? []), ...addedToolNames])],\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t};\n\tconst wrappedExtensionTools = allCustomTools.map(wrapWithDynamicToolTracking);\n\tconst wrappedBuiltInTools = Array.from(session._baseToolDefinitions.values())\n\t\t.filter((definition) => isAllowedTool(definition.name))\n\t\t.map((definition) => wrapWithDynamicToolTracking({ definition }));\n\n\tconst toolRegistry = new Map(wrappedBuiltInTools.map((tool) => [tool.name, tool]));\n\tfor (const tool of wrappedExtensionTools as AgentTool[]) {\n\t\ttoolRegistry.set(tool.name, tool);\n\t}\n\tsession._toolRegistry = toolRegistry;\n\n\tconst nextActiveToolNames = (\n\t\toptions?.activeToolNames ? [...options.activeToolNames] : [...previousActiveToolNames]\n\t).filter((name) => isAllowedTool(name));\n\n\tif (allowedToolNames) {\n\t\tfor (const toolName of session._toolRegistry.keys()) {\n\t\t\tif (allowedToolNames.has(toolName)) {\n\t\t\t\tnextActiveToolNames.push(toolName);\n\t\t\t}\n\t\t}\n\t} else if (options?.includeAllExtensionTools) {\n\t\tfor (const tool of wrappedExtensionTools) {\n\t\t\tnextActiveToolNames.push(tool.name);\n\t\t}\n\t} else if (!options?.activeToolNames) {\n\t\tfor (const toolName of session._toolRegistry.keys()) {\n\t\t\tif (previousRegistryNames.has(toolName)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// Deferred tools (e.g. MCP servers configured with deferredTools)\n\t\t\t// register but stay out of the default active set until tool_search\n\t\t\t// or an explicit activation names them.\n\t\t\tif (session._deferredToolPluginIds.has(session._baseToolSources.get(toolName)?.source ?? \"\")) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tnextActiveToolNames.push(toolName);\n\t\t}\n\t}\n\n\tsession.setActiveToolsByName([...new Set(nextActiveToolNames)]);\n}\n\nexport function syncCapabilityTools(session: AgentSessionInternals): void {\n\tconst tools = session._capabilityRuntime?.listTools() ?? [];\n\tsession._baseToolDefinitions = new Map(tools.map(({ name, definition }) => [name, definition as ToolDefinition]));\n\tsession._baseToolSources = new Map(\n\t\ttools.map(({ name, source }) => [name, createSyntheticSourceInfo(`<plugin:${source}:${name}>`, { source })]),\n\t);\n}\n\nexport function getCapabilitySkills(session: AgentSessionInternals): Skill[] {\n\tconst runtime = session._capabilityRuntime;\n\tif (!runtime) return [];\n\t// The skill contribution point is owned by the bootstrap-skills plugin. In\n\t// hosts that never install it (assistant suite, print mode) — or while that\n\t// owner is inactive — `listContributions` throws \"Contribution point is not\n\t// defined\". That state means \"no contributed skills\", not a failure: every\n\t// tool-registry change rebuilds the system prompt, so propagating the error\n\t// turned each rebuild into an error-level plugin.log record. Any other\n\t// failure still propagates.\n\tlet contributed: ReturnType<typeof runtime.listContributions>;\n\ttry {\n\t\tcontributed = runtime.listContributions(SKILL_CONTRIBUTION_POINT_ID, SKILL_CONTRIBUTION_POINT_VERSION);\n\t} catch (error) {\n\t\tif (!(error instanceof Error) || !error.message.startsWith(\"Contribution point is not defined\")) throw error;\n\t\treturn [];\n\t}\n\tconst contributedSkills = contributed\n\t\t.filter(\n\t\t\t(entry): entry is typeof entry & { value: Skill } =>\n\t\t\t\tentry.value !== null && typeof entry.value === \"object\" && \"name\" in entry.value,\n\t\t)\n\t\t.map((entry) => ({\n\t\t\t...entry.value,\n\t\t\tdisableModelInvocation: entry.value.disableModelInvocation === true,\n\t\t\tsourceInfo: createSyntheticSourceInfo(`<contribution:${entry.owner}:${entry.id}>`, {\n\t\t\t\tsource: entry.owner,\n\t\t\t\tbaseDir: entry.value.baseDir,\n\t\t\t}),\n\t\t}));\n\tconst contributedNames = new Set(contributedSkills.map((skill) => skill.name));\n\tconst legacyFilter = session._capabilitySkillsFilter;\n\tconst legacy = runtime\n\t\t.listSkills()\n\t\t.filter(({ definition }) => !contributedNames.has(definition.name))\n\t\t.map(({ definition, source }) => ({\n\t\t\t...definition,\n\t\t\tdisableModelInvocation: definition.disableModelInvocation === true,\n\t\t\tsourceInfo: createSyntheticSourceInfo(`<plugin:${source}:${definition.name}>`, {\n\t\t\t\tsource,\n\t\t\t\tbaseDir: definition.baseDir,\n\t\t\t}),\n\t\t}))\n\t\t// Suite association filtering (方案系统 M3): the assembler owns the\n\t\t// policy; the session only applies the injected function. The\n\t\t// bootstrap-skills contribution face is already loader-filtered and\n\t\t// must not be filtered twice.\n\t\t.filter((skill) => (legacyFilter ? legacyFilter([skill]).length > 0 : true));\n\treturn [...contributedSkills, ...legacy].sort(\n\t\t(left, right) => left.name.localeCompare(right.name) || left.sourceInfo.path.localeCompare(right.sourceInfo.path),\n\t);\n}\n\nexport function validateCapabilitySkillConflicts(session: AgentSessionInternals): void {\n\tconst resourceNames = new Set<string>();\n\tconst resourceFilePaths = new Set<string>();\n\tfor (const skill of session._resourceLoader.getSkills().skills) {\n\t\tif (resourceNames.has(skill.name)) throw new Error(`Skill is duplicated in resources: ${skill.name}`);\n\t\tresourceNames.add(skill.name);\n\t\tresourceFilePaths.add(skill.filePath);\n\t}\n\tfor (const skill of session._getCapabilitySkills()) {\n\t\t// bootstrap-skills mirrors the same on-disk SKILL.md into the capability\n\t\t// layer: same name AND same file is one skill seen through two channels,\n\t\t// not a conflict. Same name from a different file (e.g. an MCP server\n\t\t// contributing a skill that collides with a disk skill) is a real one.\n\t\tif (typeof skill.filePath === \"string\" && resourceFilePaths.has(skill.filePath)) continue;\n\t\tif (resourceNames.has(skill.name)) throw new Error(`Skill conflicts with a resource skill: ${skill.name}`);\n\t}\n}\n\nexport async function refreshBootstrapSkills(session: AgentSessionInternals): Promise<void> {\n\tconst runtime = session._capabilityRuntime;\n\tif (!runtime) return;\n\tsession._validateCapabilitySkillConflicts();\n\tif (session._bootstrapSkillsHandle) {\n\t\tawait refreshSessionBootstrapSkills(runtime, session._resourceLoader.getSkills().skills);\n\t} else {\n\t\tsession._bootstrapSkillsHandle = installSessionBootstrapSkills(\n\t\t\truntime,\n\t\t\tsession._resourceLoader.getSkills().skills,\n\t\t);\n\t}\n\tsession._baseSystemPrompt = session._rebuildSystemPrompt(session.getActiveToolNames());\n\tsession.agent.state.systemPrompt = session._baseSystemPrompt;\n}\n"]}
1
+ {"version":3,"file":"agent-session-tools.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,qBAAqB,EAAuB,MAAM,6BAA6B,CAAC;AAQ9F,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,KAAK,EAAE,cAAc,EAAsB,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAG/F,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAOnF;AAED,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,EAAE,CAapF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,qBAAqB,GAAG,QAAQ,EAAE,CAQtE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAE1G;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAe9F;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAmC/F;AAED,wBAAgB,mBAAmB,CAClC,OAAO,EAAE,qBAAqB,EAC9B,OAAO,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,wBAAwB,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1E,IAAI,CA0HN;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAMxE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,GAAG,KAAK,EAAE,CAmD3E;AAED,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAkBrF;AAED,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAc1F","sourcesContent":["/**\n * Tool registry, capability skills, and system-prompt assembly for\n * AgentSession.\n *\n * Extracted from `agent-session.ts`. Every function here operates on the\n * internal session facade ({@link AgentSessionInternals}); `AgentSession`\n * keeps same-name delegates so call sites, dynamic dispatch, and test spies\n * keep working unchanged.\n */\n\nimport type { AgentTool } from \"@agent-forge/agent-core\";\nimport type { AgentSessionInternals, ToolDefinitionEntry } from \"./agent-session-internal.ts\";\nimport {\n\tinstallSessionBootstrapSkills,\n\trefreshSessionBootstrapSkills,\n\tSKILL_CONTRIBUTION_POINT_ID,\n\tSKILL_CONTRIBUTION_POINT_VERSION,\n} from \"./extensions/index.ts\";\nimport { t } from \"./i18n/index.ts\";\nimport type { Skill } from \"./skills.ts\";\nimport { createSyntheticSourceInfo } from \"./source-info.ts\";\nimport { buildSystemPrompt } from \"./system-prompt.ts\";\nimport type { ToolDefinition, ToolExecuteContext, ToolInfo } from \"./tools/tool-definition.ts\";\nimport { wrapToolDefinition } from \"./tools/tool-definition-wrapper.ts\";\n\nexport function normalizePromptSnippet(text: string | undefined): string | undefined {\n\tif (!text) return undefined;\n\tconst oneLine = text\n\t\t.replace(/[\\r\\n]+/g, \" \")\n\t\t.replace(/\\s+/g, \" \")\n\t\t.trim();\n\treturn oneLine.length > 0 ? oneLine : undefined;\n}\n\nexport function normalizePromptGuidelines(guidelines: string[] | undefined): string[] {\n\tif (!guidelines || guidelines.length === 0) {\n\t\treturn [];\n\t}\n\n\tconst unique = new Set<string>();\n\tfor (const guideline of guidelines) {\n\t\tconst normalized = guideline.trim();\n\t\tif (normalized.length > 0) {\n\t\t\tunique.add(normalized);\n\t\t}\n\t}\n\treturn Array.from(unique);\n}\n\n/**\n * Get all configured tools with name, description, parameter schema, prompt guidelines, and source metadata.\n */\nexport function getAllTools(session: AgentSessionInternals): ToolInfo[] {\n\treturn Array.from(session._toolDefinitions.values()).map(({ definition, sourceInfo }) => ({\n\t\tname: definition.name,\n\t\tdescription: definition.description,\n\t\tparameters: definition.parameters,\n\t\tpromptGuidelines: definition.promptGuidelines,\n\t\tsourceInfo,\n\t}));\n}\n\nexport function getToolDefinition(session: AgentSessionInternals, name: string): ToolDefinition | undefined {\n\treturn session._toolDefinitions.get(name)?.definition;\n}\n\n/**\n * Set active tools by name.\n * Only tools in the registry can be enabled. Unknown tool names are ignored.\n * Also rebuilds the system prompt to reflect the new tool set.\n * Changes take effect on the next agent turn.\n */\nexport function setActiveToolsByName(session: AgentSessionInternals, toolNames: string[]): void {\n\tconst tools: AgentTool[] = [];\n\tconst validToolNames: string[] = [];\n\tfor (const name of toolNames) {\n\t\tconst tool = session._toolRegistry.get(name);\n\t\tif (tool) {\n\t\t\ttools.push(tool);\n\t\t\tvalidToolNames.push(name);\n\t\t}\n\t}\n\tsession.agent.state.tools = tools;\n\n\t// Rebuild base system prompt with new tool set\n\tsession._baseSystemPrompt = session._rebuildSystemPrompt(validToolNames);\n\tsession.agent.state.systemPrompt = session._systemPromptOverride ?? session._baseSystemPrompt;\n}\n\nexport function rebuildSystemPrompt(session: AgentSessionInternals, toolNames: string[]): string {\n\tconst validToolNames = toolNames.filter((name) => session._toolRegistry.has(name));\n\tconst toolSnippets: Record<string, string> = {};\n\tconst promptGuidelines: string[] = [];\n\tfor (const name of validToolNames) {\n\t\tconst snippet = session._toolPromptSnippets.get(name);\n\t\tif (snippet) {\n\t\t\ttoolSnippets[name] = snippet;\n\t\t}\n\n\t\tconst toolGuidelines = session._toolPromptGuidelines.get(name);\n\t\tif (toolGuidelines) {\n\t\t\tpromptGuidelines.push(...toolGuidelines);\n\t\t}\n\t}\n\n\tconst loaderSystemPrompt = session._resourceLoader.getSystemPrompt();\n\tconst loaderAppendSystemPrompt = session._resourceLoader.getAppendSystemPrompt();\n\tconst appendSystemPrompt = loaderAppendSystemPrompt.length > 0 ? loaderAppendSystemPrompt.join(\"\\n\\n\") : undefined;\n\tconst loadedSkills = session._getAvailableSkills();\n\tconst loadedContextFiles = session._resourceLoader.getAgentsFiles().agentsFiles;\n\n\tsession._baseSystemPromptOptions = {\n\t\tcwd: session._cwd,\n\t\tskills: loadedSkills,\n\t\tcontextFiles: loadedContextFiles,\n\t\tcustomPrompt: loaderSystemPrompt,\n\t\torientationPrompt: session._orientationPrompt,\n\t\tpreferenceCard: session._preferenceCard,\n\t\tappendSystemPrompt,\n\t\tselectedTools: validToolNames,\n\t\ttoolSnippets,\n\t\tpromptGuidelines,\n\t};\n\treturn buildSystemPrompt(session._baseSystemPromptOptions);\n}\n\nexport function refreshToolRegistry(\n\tsession: AgentSessionInternals,\n\toptions?: { activeToolNames?: string[]; includeAllExtensionTools?: boolean },\n): void {\n\tconst previousRegistryNames = new Set(session._toolRegistry.keys());\n\tconst previousActiveToolNames = session.getActiveToolNames();\n\tconst allowedToolNames = session._allowedToolNames;\n\tconst excludedToolNames = session._excludedToolNames;\n\tconst isAllowedTool = (name: string): boolean =>\n\t\t(!allowedToolNames || allowedToolNames.has(name)) && !excludedToolNames?.has(name);\n\n\tconst allCustomTools = session._customTools\n\t\t.map((definition) => ({\n\t\t\tdefinition,\n\t\t\tsourceInfo: createSyntheticSourceInfo(`<sdk:${definition.name}>`, { source: \"sdk\" }),\n\t\t}))\n\t\t.filter((tool) => isAllowedTool(tool.definition.name));\n\tconst definitionRegistry = new Map<string, ToolDefinitionEntry>(\n\t\tArray.from(session._baseToolDefinitions.entries())\n\t\t\t.filter(([name]) => isAllowedTool(name))\n\t\t\t.map(([name, definition]) => [\n\t\t\t\tname,\n\t\t\t\t{\n\t\t\t\t\tdefinition,\n\t\t\t\t\tsourceInfo:\n\t\t\t\t\t\tsession._baseToolSources.get(name) ??\n\t\t\t\t\t\tcreateSyntheticSourceInfo(`<bootstrap:${name}>`, { source: \"agent-forge.bootstrap-tools\" }),\n\t\t\t\t},\n\t\t\t]),\n\t);\n\tfor (const tool of allCustomTools) {\n\t\tdefinitionRegistry.set(tool.definition.name, {\n\t\t\tdefinition: tool.definition,\n\t\t\tsourceInfo: tool.sourceInfo,\n\t\t});\n\t}\n\tsession._toolDefinitions = definitionRegistry;\n\tsession._toolPromptSnippets = new Map(\n\t\tArray.from(definitionRegistry.values())\n\t\t\t.map(({ definition }) => {\n\t\t\t\tconst snippet = normalizePromptSnippet(definition.promptSnippet);\n\t\t\t\treturn snippet ? ([definition.name, snippet] as const) : undefined;\n\t\t\t})\n\t\t\t.filter((entry): entry is readonly [string, string] => entry !== undefined),\n\t);\n\tsession._toolPromptGuidelines = new Map(\n\t\tArray.from(definitionRegistry.values())\n\t\t\t.map(({ definition }) => {\n\t\t\t\tconst guidelines = normalizePromptGuidelines(definition.promptGuidelines);\n\t\t\t\treturn guidelines.length > 0 ? ([definition.name, guidelines] as const) : undefined;\n\t\t\t})\n\t\t\t.filter((entry): entry is readonly [string, string[]] => entry !== undefined),\n\t);\n\t// Session-resolved execute context and dynamic-tool tracking replace the\n\t// former runner-mediated wrapper: tools receive the same session facts and\n\t// a tool that activates more tools during execute still surfaces them via\n\t// addedToolNames.\n\tconst executeContext = (): ToolExecuteContext => ({\n\t\tcwd: session.sessionManager.getCwd(),\n\t\tmodel: session.model,\n\t\tsessionManager: session.sessionManager,\n\t\tthinkingLevel: session.thinkingLevel,\n\t});\n\tconst wrapWithDynamicToolTracking = ({ definition }: { definition: ToolDefinition }): AgentTool => {\n\t\tconst tool = wrapToolDefinition(definition, executeContext);\n\t\tconst execute = tool.execute;\n\t\treturn {\n\t\t\t...tool,\n\t\t\texecute: async (toolCallId, params, signal, onUpdate) => {\n\t\t\t\tconst activeBefore = session.getActiveToolNames();\n\t\t\t\tconst result = await execute(toolCallId, params, signal, onUpdate);\n\t\t\t\tconst activeAfter = session.getActiveToolNames();\n\t\t\t\tif (!activeBefore.every((name) => activeAfter.includes(name))) return result;\n\n\t\t\t\tconst beforeNames = new Set(activeBefore);\n\t\t\t\tconst addedToolNames = activeAfter.filter((name) => !beforeNames.has(name));\n\t\t\t\tif (addedToolNames.length === 0) return result;\n\t\t\t\treturn {\n\t\t\t\t\t...result,\n\t\t\t\t\taddedToolNames: [...new Set([...(result.addedToolNames ?? []), ...addedToolNames])],\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t};\n\tconst wrappedExtensionTools = allCustomTools.map(wrapWithDynamicToolTracking);\n\tconst wrappedBuiltInTools = Array.from(session._baseToolDefinitions.values())\n\t\t.filter((definition) => isAllowedTool(definition.name))\n\t\t.map((definition) => wrapWithDynamicToolTracking({ definition }));\n\n\tconst toolRegistry = new Map(wrappedBuiltInTools.map((tool) => [tool.name, tool]));\n\tfor (const tool of wrappedExtensionTools as AgentTool[]) {\n\t\ttoolRegistry.set(tool.name, tool);\n\t}\n\tsession._toolRegistry = toolRegistry;\n\n\tconst nextActiveToolNames = (\n\t\toptions?.activeToolNames ? [...options.activeToolNames] : [...previousActiveToolNames]\n\t).filter((name) => isAllowedTool(name));\n\n\tif (allowedToolNames) {\n\t\tfor (const toolName of session._toolRegistry.keys()) {\n\t\t\tif (allowedToolNames.has(toolName)) {\n\t\t\t\tnextActiveToolNames.push(toolName);\n\t\t\t}\n\t\t}\n\t} else if (options?.includeAllExtensionTools) {\n\t\tfor (const tool of wrappedExtensionTools) {\n\t\t\tnextActiveToolNames.push(tool.name);\n\t\t}\n\t} else if (!options?.activeToolNames) {\n\t\tfor (const toolName of session._toolRegistry.keys()) {\n\t\t\tif (previousRegistryNames.has(toolName)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// Deferred tools (e.g. MCP servers configured with deferredTools)\n\t\t\t// register but stay out of the default active set until tool_search\n\t\t\t// or an explicit activation names them.\n\t\t\tif (session._deferredToolPluginIds.has(session._baseToolSources.get(toolName)?.source ?? \"\")) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tnextActiveToolNames.push(toolName);\n\t\t}\n\t}\n\n\tsession.setActiveToolsByName([...new Set(nextActiveToolNames)]);\n}\n\nexport function syncCapabilityTools(session: AgentSessionInternals): void {\n\tconst tools = session._capabilityRuntime?.listTools() ?? [];\n\tsession._baseToolDefinitions = new Map(tools.map(({ name, definition }) => [name, definition as ToolDefinition]));\n\tsession._baseToolSources = new Map(\n\t\ttools.map(({ name, source }) => [name, createSyntheticSourceInfo(`<plugin:${source}:${name}>`, { source })]),\n\t);\n}\n\nexport function getCapabilitySkills(session: AgentSessionInternals): Skill[] {\n\tconst runtime = session._capabilityRuntime;\n\tif (!runtime) return [];\n\t// The skill contribution point is owned by the bootstrap-skills plugin. In\n\t// hosts that never install it (assistant suite, print mode) — or while that\n\t// owner is inactive — `listContributions` throws \"Contribution point is not\n\t// defined\". That state means \"no contributed skills\", not a failure: every\n\t// tool-registry change rebuilds the system prompt, so propagating the error\n\t// turned each rebuild into an error-level plugin.log record. Any other\n\t// failure still propagates.\n\tlet contributed: ReturnType<typeof runtime.listContributions>;\n\ttry {\n\t\tcontributed = runtime.listContributions(SKILL_CONTRIBUTION_POINT_ID, SKILL_CONTRIBUTION_POINT_VERSION);\n\t} catch (error) {\n\t\tif (!(error instanceof Error) || !error.message.startsWith(\"Contribution point is not defined\")) throw error;\n\t\treturn [];\n\t}\n\tconst contributedSkills = contributed\n\t\t.filter(\n\t\t\t(entry): entry is typeof entry & { value: Skill } =>\n\t\t\t\tentry.value !== null && typeof entry.value === \"object\" && \"name\" in entry.value,\n\t\t)\n\t\t.map((entry) => ({\n\t\t\t...entry.value,\n\t\t\tdisableModelInvocation: entry.value.disableModelInvocation === true,\n\t\t\tsourceInfo: createSyntheticSourceInfo(`<contribution:${entry.owner}:${entry.id}>`, {\n\t\t\t\tsource: entry.owner,\n\t\t\t\tbaseDir: entry.value.baseDir,\n\t\t\t}),\n\t\t}));\n\tconst contributedNames = new Set(contributedSkills.map((skill) => skill.name));\n\tconst legacyFilter = session._capabilitySkillsFilter;\n\tconst legacy = runtime\n\t\t.listSkills()\n\t\t.filter(({ definition }) => !contributedNames.has(definition.name))\n\t\t.map(({ definition, source }) => ({\n\t\t\t...definition,\n\t\t\tdisableModelInvocation: definition.disableModelInvocation === true,\n\t\t\tsourceInfo: createSyntheticSourceInfo(`<plugin:${source}:${definition.name}>`, {\n\t\t\t\tsource,\n\t\t\t\tbaseDir: definition.baseDir,\n\t\t\t}),\n\t\t}))\n\t\t// Suite association filtering (方案系统 M3): the assembler owns the\n\t\t// policy; the session only applies the injected function. The\n\t\t// bootstrap-skills contribution face is already loader-filtered and\n\t\t// must not be filtered twice.\n\t\t.filter((skill) => (legacyFilter ? legacyFilter([skill]).length > 0 : true));\n\treturn [...contributedSkills, ...legacy].sort(\n\t\t(left, right) => left.name.localeCompare(right.name) || left.sourceInfo.path.localeCompare(right.sourceInfo.path),\n\t);\n}\n\nexport function validateCapabilitySkillConflicts(session: AgentSessionInternals): void {\n\tconst resourceNames = new Set<string>();\n\tconst resourceFilePaths = new Set<string>();\n\tfor (const skill of session._resourceLoader.getSkills().skills) {\n\t\tif (resourceNames.has(skill.name))\n\t\t\tthrow new Error(t(\"Skill is duplicated in resources: {name}\", { name: skill.name }));\n\t\tresourceNames.add(skill.name);\n\t\tresourceFilePaths.add(skill.filePath);\n\t}\n\tfor (const skill of session._getCapabilitySkills()) {\n\t\t// bootstrap-skills mirrors the same on-disk SKILL.md into the capability\n\t\t// layer: same name AND same file is one skill seen through two channels,\n\t\t// not a conflict. Same name from a different file (e.g. an MCP server\n\t\t// contributing a skill that collides with a disk skill) is a real one.\n\t\tif (typeof skill.filePath === \"string\" && resourceFilePaths.has(skill.filePath)) continue;\n\t\tif (resourceNames.has(skill.name))\n\t\t\tthrow new Error(t(\"Skill conflicts with a resource skill: {name}\", { name: skill.name }));\n\t}\n}\n\nexport async function refreshBootstrapSkills(session: AgentSessionInternals): Promise<void> {\n\tconst runtime = session._capabilityRuntime;\n\tif (!runtime) return;\n\tsession._validateCapabilitySkillConflicts();\n\tif (session._bootstrapSkillsHandle) {\n\t\tawait refreshSessionBootstrapSkills(runtime, session._resourceLoader.getSkills().skills);\n\t} else {\n\t\tsession._bootstrapSkillsHandle = installSessionBootstrapSkills(\n\t\t\truntime,\n\t\t\tsession._resourceLoader.getSkills().skills,\n\t\t);\n\t}\n\tsession._baseSystemPrompt = session._rebuildSystemPrompt(session.getActiveToolNames());\n\tsession.agent.state.systemPrompt = session._baseSystemPrompt;\n}\n"]}
@@ -8,6 +8,7 @@
8
8
  * keep working unchanged.
9
9
  */
10
10
  import { installSessionBootstrapSkills, refreshSessionBootstrapSkills, SKILL_CONTRIBUTION_POINT_ID, SKILL_CONTRIBUTION_POINT_VERSION, } from "./extensions/index.js";
11
+ import { t } from "./i18n/index.js";
11
12
  import { createSyntheticSourceInfo } from "./source-info.js";
12
13
  import { buildSystemPrompt } from "./system-prompt.js";
13
14
  import { wrapToolDefinition } from "./tools/tool-definition-wrapper.js";
@@ -273,7 +274,7 @@ export function validateCapabilitySkillConflicts(session) {
273
274
  const resourceFilePaths = new Set();
274
275
  for (const skill of session._resourceLoader.getSkills().skills) {
275
276
  if (resourceNames.has(skill.name))
276
- throw new Error(`Skill is duplicated in resources: ${skill.name}`);
277
+ throw new Error(t("Skill is duplicated in resources: {name}", { name: skill.name }));
277
278
  resourceNames.add(skill.name);
278
279
  resourceFilePaths.add(skill.filePath);
279
280
  }
@@ -285,7 +286,7 @@ export function validateCapabilitySkillConflicts(session) {
285
286
  if (typeof skill.filePath === "string" && resourceFilePaths.has(skill.filePath))
286
287
  continue;
287
288
  if (resourceNames.has(skill.name))
288
- throw new Error(`Skill conflicts with a resource skill: ${skill.name}`);
289
+ throw new Error(t("Skill conflicts with a resource skill: {name}", { name: skill.name }));
289
290
  }
290
291
  }
291
292
  export async function refreshBootstrapSkills(session) {
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-tools.js","sourceRoot":"","sources":["../../src/core/agent-session-tools.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Tool registry, capability skills, and system-prompt assembly for\n * AgentSession.\n *\n * Extracted from `agent-session.ts`. Every function here operates on the\n * internal session facade ({@link AgentSessionInternals}); `AgentSession`\n * keeps same-name delegates so call sites, dynamic dispatch, and test spies\n * keep working unchanged.\n */\n\nimport type { AgentTool } from \"@agent-forge/agent-core\";\nimport type { AgentSessionInternals, ToolDefinitionEntry } from \"./agent-session-internal.ts\";\nimport {\n\tinstallSessionBootstrapSkills,\n\trefreshSessionBootstrapSkills,\n\tSKILL_CONTRIBUTION_POINT_ID,\n\tSKILL_CONTRIBUTION_POINT_VERSION,\n} from \"./extensions/index.ts\";\nimport type { Skill } from \"./skills.ts\";\nimport { createSyntheticSourceInfo } from \"./source-info.ts\";\nimport { buildSystemPrompt } from \"./system-prompt.ts\";\nimport type { ToolDefinition, ToolExecuteContext, ToolInfo } from \"./tools/tool-definition.ts\";\nimport { wrapToolDefinition } from \"./tools/tool-definition-wrapper.ts\";\n\nexport function normalizePromptSnippet(text: string | undefined): string | undefined {\n\tif (!text) return undefined;\n\tconst oneLine = text\n\t\t.replace(/[\\r\\n]+/g, \" \")\n\t\t.replace(/\\s+/g, \" \")\n\t\t.trim();\n\treturn oneLine.length > 0 ? oneLine : undefined;\n}\n\nexport function normalizePromptGuidelines(guidelines: string[] | undefined): string[] {\n\tif (!guidelines || guidelines.length === 0) {\n\t\treturn [];\n\t}\n\n\tconst unique = new Set<string>();\n\tfor (const guideline of guidelines) {\n\t\tconst normalized = guideline.trim();\n\t\tif (normalized.length > 0) {\n\t\t\tunique.add(normalized);\n\t\t}\n\t}\n\treturn Array.from(unique);\n}\n\n/**\n * Get all configured tools with name, description, parameter schema, prompt guidelines, and source metadata.\n */\nexport function getAllTools(session: AgentSessionInternals): ToolInfo[] {\n\treturn Array.from(session._toolDefinitions.values()).map(({ definition, sourceInfo }) => ({\n\t\tname: definition.name,\n\t\tdescription: definition.description,\n\t\tparameters: definition.parameters,\n\t\tpromptGuidelines: definition.promptGuidelines,\n\t\tsourceInfo,\n\t}));\n}\n\nexport function getToolDefinition(session: AgentSessionInternals, name: string): ToolDefinition | undefined {\n\treturn session._toolDefinitions.get(name)?.definition;\n}\n\n/**\n * Set active tools by name.\n * Only tools in the registry can be enabled. Unknown tool names are ignored.\n * Also rebuilds the system prompt to reflect the new tool set.\n * Changes take effect on the next agent turn.\n */\nexport function setActiveToolsByName(session: AgentSessionInternals, toolNames: string[]): void {\n\tconst tools: AgentTool[] = [];\n\tconst validToolNames: string[] = [];\n\tfor (const name of toolNames) {\n\t\tconst tool = session._toolRegistry.get(name);\n\t\tif (tool) {\n\t\t\ttools.push(tool);\n\t\t\tvalidToolNames.push(name);\n\t\t}\n\t}\n\tsession.agent.state.tools = tools;\n\n\t// Rebuild base system prompt with new tool set\n\tsession._baseSystemPrompt = session._rebuildSystemPrompt(validToolNames);\n\tsession.agent.state.systemPrompt = session._systemPromptOverride ?? session._baseSystemPrompt;\n}\n\nexport function rebuildSystemPrompt(session: AgentSessionInternals, toolNames: string[]): string {\n\tconst validToolNames = toolNames.filter((name) => session._toolRegistry.has(name));\n\tconst toolSnippets: Record<string, string> = {};\n\tconst promptGuidelines: string[] = [];\n\tfor (const name of validToolNames) {\n\t\tconst snippet = session._toolPromptSnippets.get(name);\n\t\tif (snippet) {\n\t\t\ttoolSnippets[name] = snippet;\n\t\t}\n\n\t\tconst toolGuidelines = session._toolPromptGuidelines.get(name);\n\t\tif (toolGuidelines) {\n\t\t\tpromptGuidelines.push(...toolGuidelines);\n\t\t}\n\t}\n\n\tconst loaderSystemPrompt = session._resourceLoader.getSystemPrompt();\n\tconst loaderAppendSystemPrompt = session._resourceLoader.getAppendSystemPrompt();\n\tconst appendSystemPrompt = loaderAppendSystemPrompt.length > 0 ? loaderAppendSystemPrompt.join(\"\\n\\n\") : undefined;\n\tconst loadedSkills = session._getAvailableSkills();\n\tconst loadedContextFiles = session._resourceLoader.getAgentsFiles().agentsFiles;\n\n\tsession._baseSystemPromptOptions = {\n\t\tcwd: session._cwd,\n\t\tskills: loadedSkills,\n\t\tcontextFiles: loadedContextFiles,\n\t\tcustomPrompt: loaderSystemPrompt,\n\t\torientationPrompt: session._orientationPrompt,\n\t\tpreferenceCard: session._preferenceCard,\n\t\tappendSystemPrompt,\n\t\tselectedTools: validToolNames,\n\t\ttoolSnippets,\n\t\tpromptGuidelines,\n\t};\n\treturn buildSystemPrompt(session._baseSystemPromptOptions);\n}\n\nexport function refreshToolRegistry(\n\tsession: AgentSessionInternals,\n\toptions?: { activeToolNames?: string[]; includeAllExtensionTools?: boolean },\n): void {\n\tconst previousRegistryNames = new Set(session._toolRegistry.keys());\n\tconst previousActiveToolNames = session.getActiveToolNames();\n\tconst allowedToolNames = session._allowedToolNames;\n\tconst excludedToolNames = session._excludedToolNames;\n\tconst isAllowedTool = (name: string): boolean =>\n\t\t(!allowedToolNames || allowedToolNames.has(name)) && !excludedToolNames?.has(name);\n\n\tconst allCustomTools = session._customTools\n\t\t.map((definition) => ({\n\t\t\tdefinition,\n\t\t\tsourceInfo: createSyntheticSourceInfo(`<sdk:${definition.name}>`, { source: \"sdk\" }),\n\t\t}))\n\t\t.filter((tool) => isAllowedTool(tool.definition.name));\n\tconst definitionRegistry = new Map<string, ToolDefinitionEntry>(\n\t\tArray.from(session._baseToolDefinitions.entries())\n\t\t\t.filter(([name]) => isAllowedTool(name))\n\t\t\t.map(([name, definition]) => [\n\t\t\t\tname,\n\t\t\t\t{\n\t\t\t\t\tdefinition,\n\t\t\t\t\tsourceInfo:\n\t\t\t\t\t\tsession._baseToolSources.get(name) ??\n\t\t\t\t\t\tcreateSyntheticSourceInfo(`<bootstrap:${name}>`, { source: \"agent-forge.bootstrap-tools\" }),\n\t\t\t\t},\n\t\t\t]),\n\t);\n\tfor (const tool of allCustomTools) {\n\t\tdefinitionRegistry.set(tool.definition.name, {\n\t\t\tdefinition: tool.definition,\n\t\t\tsourceInfo: tool.sourceInfo,\n\t\t});\n\t}\n\tsession._toolDefinitions = definitionRegistry;\n\tsession._toolPromptSnippets = new Map(\n\t\tArray.from(definitionRegistry.values())\n\t\t\t.map(({ definition }) => {\n\t\t\t\tconst snippet = normalizePromptSnippet(definition.promptSnippet);\n\t\t\t\treturn snippet ? ([definition.name, snippet] as const) : undefined;\n\t\t\t})\n\t\t\t.filter((entry): entry is readonly [string, string] => entry !== undefined),\n\t);\n\tsession._toolPromptGuidelines = new Map(\n\t\tArray.from(definitionRegistry.values())\n\t\t\t.map(({ definition }) => {\n\t\t\t\tconst guidelines = normalizePromptGuidelines(definition.promptGuidelines);\n\t\t\t\treturn guidelines.length > 0 ? ([definition.name, guidelines] as const) : undefined;\n\t\t\t})\n\t\t\t.filter((entry): entry is readonly [string, string[]] => entry !== undefined),\n\t);\n\t// Session-resolved execute context and dynamic-tool tracking replace the\n\t// former runner-mediated wrapper: tools receive the same session facts and\n\t// a tool that activates more tools during execute still surfaces them via\n\t// addedToolNames.\n\tconst executeContext = (): ToolExecuteContext => ({\n\t\tcwd: session.sessionManager.getCwd(),\n\t\tmodel: session.model,\n\t\tsessionManager: session.sessionManager,\n\t\tthinkingLevel: session.thinkingLevel,\n\t});\n\tconst wrapWithDynamicToolTracking = ({ definition }: { definition: ToolDefinition }): AgentTool => {\n\t\tconst tool = wrapToolDefinition(definition, executeContext);\n\t\tconst execute = tool.execute;\n\t\treturn {\n\t\t\t...tool,\n\t\t\texecute: async (toolCallId, params, signal, onUpdate) => {\n\t\t\t\tconst activeBefore = session.getActiveToolNames();\n\t\t\t\tconst result = await execute(toolCallId, params, signal, onUpdate);\n\t\t\t\tconst activeAfter = session.getActiveToolNames();\n\t\t\t\tif (!activeBefore.every((name) => activeAfter.includes(name))) return result;\n\n\t\t\t\tconst beforeNames = new Set(activeBefore);\n\t\t\t\tconst addedToolNames = activeAfter.filter((name) => !beforeNames.has(name));\n\t\t\t\tif (addedToolNames.length === 0) return result;\n\t\t\t\treturn {\n\t\t\t\t\t...result,\n\t\t\t\t\taddedToolNames: [...new Set([...(result.addedToolNames ?? []), ...addedToolNames])],\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t};\n\tconst wrappedExtensionTools = allCustomTools.map(wrapWithDynamicToolTracking);\n\tconst wrappedBuiltInTools = Array.from(session._baseToolDefinitions.values())\n\t\t.filter((definition) => isAllowedTool(definition.name))\n\t\t.map((definition) => wrapWithDynamicToolTracking({ definition }));\n\n\tconst toolRegistry = new Map(wrappedBuiltInTools.map((tool) => [tool.name, tool]));\n\tfor (const tool of wrappedExtensionTools as AgentTool[]) {\n\t\ttoolRegistry.set(tool.name, tool);\n\t}\n\tsession._toolRegistry = toolRegistry;\n\n\tconst nextActiveToolNames = (\n\t\toptions?.activeToolNames ? [...options.activeToolNames] : [...previousActiveToolNames]\n\t).filter((name) => isAllowedTool(name));\n\n\tif (allowedToolNames) {\n\t\tfor (const toolName of session._toolRegistry.keys()) {\n\t\t\tif (allowedToolNames.has(toolName)) {\n\t\t\t\tnextActiveToolNames.push(toolName);\n\t\t\t}\n\t\t}\n\t} else if (options?.includeAllExtensionTools) {\n\t\tfor (const tool of wrappedExtensionTools) {\n\t\t\tnextActiveToolNames.push(tool.name);\n\t\t}\n\t} else if (!options?.activeToolNames) {\n\t\tfor (const toolName of session._toolRegistry.keys()) {\n\t\t\tif (previousRegistryNames.has(toolName)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// Deferred tools (e.g. MCP servers configured with deferredTools)\n\t\t\t// register but stay out of the default active set until tool_search\n\t\t\t// or an explicit activation names them.\n\t\t\tif (session._deferredToolPluginIds.has(session._baseToolSources.get(toolName)?.source ?? \"\")) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tnextActiveToolNames.push(toolName);\n\t\t}\n\t}\n\n\tsession.setActiveToolsByName([...new Set(nextActiveToolNames)]);\n}\n\nexport function syncCapabilityTools(session: AgentSessionInternals): void {\n\tconst tools = session._capabilityRuntime?.listTools() ?? [];\n\tsession._baseToolDefinitions = new Map(tools.map(({ name, definition }) => [name, definition as ToolDefinition]));\n\tsession._baseToolSources = new Map(\n\t\ttools.map(({ name, source }) => [name, createSyntheticSourceInfo(`<plugin:${source}:${name}>`, { source })]),\n\t);\n}\n\nexport function getCapabilitySkills(session: AgentSessionInternals): Skill[] {\n\tconst runtime = session._capabilityRuntime;\n\tif (!runtime) return [];\n\t// The skill contribution point is owned by the bootstrap-skills plugin. In\n\t// hosts that never install it (assistant suite, print mode) — or while that\n\t// owner is inactive — `listContributions` throws \"Contribution point is not\n\t// defined\". That state means \"no contributed skills\", not a failure: every\n\t// tool-registry change rebuilds the system prompt, so propagating the error\n\t// turned each rebuild into an error-level plugin.log record. Any other\n\t// failure still propagates.\n\tlet contributed: ReturnType<typeof runtime.listContributions>;\n\ttry {\n\t\tcontributed = runtime.listContributions(SKILL_CONTRIBUTION_POINT_ID, SKILL_CONTRIBUTION_POINT_VERSION);\n\t} catch (error) {\n\t\tif (!(error instanceof Error) || !error.message.startsWith(\"Contribution point is not defined\")) throw error;\n\t\treturn [];\n\t}\n\tconst contributedSkills = contributed\n\t\t.filter(\n\t\t\t(entry): entry is typeof entry & { value: Skill } =>\n\t\t\t\tentry.value !== null && typeof entry.value === \"object\" && \"name\" in entry.value,\n\t\t)\n\t\t.map((entry) => ({\n\t\t\t...entry.value,\n\t\t\tdisableModelInvocation: entry.value.disableModelInvocation === true,\n\t\t\tsourceInfo: createSyntheticSourceInfo(`<contribution:${entry.owner}:${entry.id}>`, {\n\t\t\t\tsource: entry.owner,\n\t\t\t\tbaseDir: entry.value.baseDir,\n\t\t\t}),\n\t\t}));\n\tconst contributedNames = new Set(contributedSkills.map((skill) => skill.name));\n\tconst legacyFilter = session._capabilitySkillsFilter;\n\tconst legacy = runtime\n\t\t.listSkills()\n\t\t.filter(({ definition }) => !contributedNames.has(definition.name))\n\t\t.map(({ definition, source }) => ({\n\t\t\t...definition,\n\t\t\tdisableModelInvocation: definition.disableModelInvocation === true,\n\t\t\tsourceInfo: createSyntheticSourceInfo(`<plugin:${source}:${definition.name}>`, {\n\t\t\t\tsource,\n\t\t\t\tbaseDir: definition.baseDir,\n\t\t\t}),\n\t\t}))\n\t\t// Suite association filtering (方案系统 M3): the assembler owns the\n\t\t// policy; the session only applies the injected function. The\n\t\t// bootstrap-skills contribution face is already loader-filtered and\n\t\t// must not be filtered twice.\n\t\t.filter((skill) => (legacyFilter ? legacyFilter([skill]).length > 0 : true));\n\treturn [...contributedSkills, ...legacy].sort(\n\t\t(left, right) => left.name.localeCompare(right.name) || left.sourceInfo.path.localeCompare(right.sourceInfo.path),\n\t);\n}\n\nexport function validateCapabilitySkillConflicts(session: AgentSessionInternals): void {\n\tconst resourceNames = new Set<string>();\n\tconst resourceFilePaths = new Set<string>();\n\tfor (const skill of session._resourceLoader.getSkills().skills) {\n\t\tif (resourceNames.has(skill.name)) throw new Error(`Skill is duplicated in resources: ${skill.name}`);\n\t\tresourceNames.add(skill.name);\n\t\tresourceFilePaths.add(skill.filePath);\n\t}\n\tfor (const skill of session._getCapabilitySkills()) {\n\t\t// bootstrap-skills mirrors the same on-disk SKILL.md into the capability\n\t\t// layer: same name AND same file is one skill seen through two channels,\n\t\t// not a conflict. Same name from a different file (e.g. an MCP server\n\t\t// contributing a skill that collides with a disk skill) is a real one.\n\t\tif (typeof skill.filePath === \"string\" && resourceFilePaths.has(skill.filePath)) continue;\n\t\tif (resourceNames.has(skill.name)) throw new Error(`Skill conflicts with a resource skill: ${skill.name}`);\n\t}\n}\n\nexport async function refreshBootstrapSkills(session: AgentSessionInternals): Promise<void> {\n\tconst runtime = session._capabilityRuntime;\n\tif (!runtime) return;\n\tsession._validateCapabilitySkillConflicts();\n\tif (session._bootstrapSkillsHandle) {\n\t\tawait refreshSessionBootstrapSkills(runtime, session._resourceLoader.getSkills().skills);\n\t} else {\n\t\tsession._bootstrapSkillsHandle = installSessionBootstrapSkills(\n\t\t\truntime,\n\t\t\tsession._resourceLoader.getSkills().skills,\n\t\t);\n\t}\n\tsession._baseSystemPrompt = session._rebuildSystemPrompt(session.getActiveToolNames());\n\tsession.agent.state.systemPrompt = session._baseSystemPrompt;\n}\n"]}
1
+ {"version":3,"file":"agent-session-tools.js","sourceRoot":"","sources":["../../src/core/agent-session-tools.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Tool registry, capability skills, and system-prompt assembly for\n * AgentSession.\n *\n * Extracted from `agent-session.ts`. Every function here operates on the\n * internal session facade ({@link AgentSessionInternals}); `AgentSession`\n * keeps same-name delegates so call sites, dynamic dispatch, and test spies\n * keep working unchanged.\n */\n\nimport type { AgentTool } from \"@agent-forge/agent-core\";\nimport type { AgentSessionInternals, ToolDefinitionEntry } from \"./agent-session-internal.ts\";\nimport {\n\tinstallSessionBootstrapSkills,\n\trefreshSessionBootstrapSkills,\n\tSKILL_CONTRIBUTION_POINT_ID,\n\tSKILL_CONTRIBUTION_POINT_VERSION,\n} from \"./extensions/index.ts\";\nimport { t } from \"./i18n/index.ts\";\nimport type { Skill } from \"./skills.ts\";\nimport { createSyntheticSourceInfo } from \"./source-info.ts\";\nimport { buildSystemPrompt } from \"./system-prompt.ts\";\nimport type { ToolDefinition, ToolExecuteContext, ToolInfo } from \"./tools/tool-definition.ts\";\nimport { wrapToolDefinition } from \"./tools/tool-definition-wrapper.ts\";\n\nexport function normalizePromptSnippet(text: string | undefined): string | undefined {\n\tif (!text) return undefined;\n\tconst oneLine = text\n\t\t.replace(/[\\r\\n]+/g, \" \")\n\t\t.replace(/\\s+/g, \" \")\n\t\t.trim();\n\treturn oneLine.length > 0 ? oneLine : undefined;\n}\n\nexport function normalizePromptGuidelines(guidelines: string[] | undefined): string[] {\n\tif (!guidelines || guidelines.length === 0) {\n\t\treturn [];\n\t}\n\n\tconst unique = new Set<string>();\n\tfor (const guideline of guidelines) {\n\t\tconst normalized = guideline.trim();\n\t\tif (normalized.length > 0) {\n\t\t\tunique.add(normalized);\n\t\t}\n\t}\n\treturn Array.from(unique);\n}\n\n/**\n * Get all configured tools with name, description, parameter schema, prompt guidelines, and source metadata.\n */\nexport function getAllTools(session: AgentSessionInternals): ToolInfo[] {\n\treturn Array.from(session._toolDefinitions.values()).map(({ definition, sourceInfo }) => ({\n\t\tname: definition.name,\n\t\tdescription: definition.description,\n\t\tparameters: definition.parameters,\n\t\tpromptGuidelines: definition.promptGuidelines,\n\t\tsourceInfo,\n\t}));\n}\n\nexport function getToolDefinition(session: AgentSessionInternals, name: string): ToolDefinition | undefined {\n\treturn session._toolDefinitions.get(name)?.definition;\n}\n\n/**\n * Set active tools by name.\n * Only tools in the registry can be enabled. Unknown tool names are ignored.\n * Also rebuilds the system prompt to reflect the new tool set.\n * Changes take effect on the next agent turn.\n */\nexport function setActiveToolsByName(session: AgentSessionInternals, toolNames: string[]): void {\n\tconst tools: AgentTool[] = [];\n\tconst validToolNames: string[] = [];\n\tfor (const name of toolNames) {\n\t\tconst tool = session._toolRegistry.get(name);\n\t\tif (tool) {\n\t\t\ttools.push(tool);\n\t\t\tvalidToolNames.push(name);\n\t\t}\n\t}\n\tsession.agent.state.tools = tools;\n\n\t// Rebuild base system prompt with new tool set\n\tsession._baseSystemPrompt = session._rebuildSystemPrompt(validToolNames);\n\tsession.agent.state.systemPrompt = session._systemPromptOverride ?? session._baseSystemPrompt;\n}\n\nexport function rebuildSystemPrompt(session: AgentSessionInternals, toolNames: string[]): string {\n\tconst validToolNames = toolNames.filter((name) => session._toolRegistry.has(name));\n\tconst toolSnippets: Record<string, string> = {};\n\tconst promptGuidelines: string[] = [];\n\tfor (const name of validToolNames) {\n\t\tconst snippet = session._toolPromptSnippets.get(name);\n\t\tif (snippet) {\n\t\t\ttoolSnippets[name] = snippet;\n\t\t}\n\n\t\tconst toolGuidelines = session._toolPromptGuidelines.get(name);\n\t\tif (toolGuidelines) {\n\t\t\tpromptGuidelines.push(...toolGuidelines);\n\t\t}\n\t}\n\n\tconst loaderSystemPrompt = session._resourceLoader.getSystemPrompt();\n\tconst loaderAppendSystemPrompt = session._resourceLoader.getAppendSystemPrompt();\n\tconst appendSystemPrompt = loaderAppendSystemPrompt.length > 0 ? loaderAppendSystemPrompt.join(\"\\n\\n\") : undefined;\n\tconst loadedSkills = session._getAvailableSkills();\n\tconst loadedContextFiles = session._resourceLoader.getAgentsFiles().agentsFiles;\n\n\tsession._baseSystemPromptOptions = {\n\t\tcwd: session._cwd,\n\t\tskills: loadedSkills,\n\t\tcontextFiles: loadedContextFiles,\n\t\tcustomPrompt: loaderSystemPrompt,\n\t\torientationPrompt: session._orientationPrompt,\n\t\tpreferenceCard: session._preferenceCard,\n\t\tappendSystemPrompt,\n\t\tselectedTools: validToolNames,\n\t\ttoolSnippets,\n\t\tpromptGuidelines,\n\t};\n\treturn buildSystemPrompt(session._baseSystemPromptOptions);\n}\n\nexport function refreshToolRegistry(\n\tsession: AgentSessionInternals,\n\toptions?: { activeToolNames?: string[]; includeAllExtensionTools?: boolean },\n): void {\n\tconst previousRegistryNames = new Set(session._toolRegistry.keys());\n\tconst previousActiveToolNames = session.getActiveToolNames();\n\tconst allowedToolNames = session._allowedToolNames;\n\tconst excludedToolNames = session._excludedToolNames;\n\tconst isAllowedTool = (name: string): boolean =>\n\t\t(!allowedToolNames || allowedToolNames.has(name)) && !excludedToolNames?.has(name);\n\n\tconst allCustomTools = session._customTools\n\t\t.map((definition) => ({\n\t\t\tdefinition,\n\t\t\tsourceInfo: createSyntheticSourceInfo(`<sdk:${definition.name}>`, { source: \"sdk\" }),\n\t\t}))\n\t\t.filter((tool) => isAllowedTool(tool.definition.name));\n\tconst definitionRegistry = new Map<string, ToolDefinitionEntry>(\n\t\tArray.from(session._baseToolDefinitions.entries())\n\t\t\t.filter(([name]) => isAllowedTool(name))\n\t\t\t.map(([name, definition]) => [\n\t\t\t\tname,\n\t\t\t\t{\n\t\t\t\t\tdefinition,\n\t\t\t\t\tsourceInfo:\n\t\t\t\t\t\tsession._baseToolSources.get(name) ??\n\t\t\t\t\t\tcreateSyntheticSourceInfo(`<bootstrap:${name}>`, { source: \"agent-forge.bootstrap-tools\" }),\n\t\t\t\t},\n\t\t\t]),\n\t);\n\tfor (const tool of allCustomTools) {\n\t\tdefinitionRegistry.set(tool.definition.name, {\n\t\t\tdefinition: tool.definition,\n\t\t\tsourceInfo: tool.sourceInfo,\n\t\t});\n\t}\n\tsession._toolDefinitions = definitionRegistry;\n\tsession._toolPromptSnippets = new Map(\n\t\tArray.from(definitionRegistry.values())\n\t\t\t.map(({ definition }) => {\n\t\t\t\tconst snippet = normalizePromptSnippet(definition.promptSnippet);\n\t\t\t\treturn snippet ? ([definition.name, snippet] as const) : undefined;\n\t\t\t})\n\t\t\t.filter((entry): entry is readonly [string, string] => entry !== undefined),\n\t);\n\tsession._toolPromptGuidelines = new Map(\n\t\tArray.from(definitionRegistry.values())\n\t\t\t.map(({ definition }) => {\n\t\t\t\tconst guidelines = normalizePromptGuidelines(definition.promptGuidelines);\n\t\t\t\treturn guidelines.length > 0 ? ([definition.name, guidelines] as const) : undefined;\n\t\t\t})\n\t\t\t.filter((entry): entry is readonly [string, string[]] => entry !== undefined),\n\t);\n\t// Session-resolved execute context and dynamic-tool tracking replace the\n\t// former runner-mediated wrapper: tools receive the same session facts and\n\t// a tool that activates more tools during execute still surfaces them via\n\t// addedToolNames.\n\tconst executeContext = (): ToolExecuteContext => ({\n\t\tcwd: session.sessionManager.getCwd(),\n\t\tmodel: session.model,\n\t\tsessionManager: session.sessionManager,\n\t\tthinkingLevel: session.thinkingLevel,\n\t});\n\tconst wrapWithDynamicToolTracking = ({ definition }: { definition: ToolDefinition }): AgentTool => {\n\t\tconst tool = wrapToolDefinition(definition, executeContext);\n\t\tconst execute = tool.execute;\n\t\treturn {\n\t\t\t...tool,\n\t\t\texecute: async (toolCallId, params, signal, onUpdate) => {\n\t\t\t\tconst activeBefore = session.getActiveToolNames();\n\t\t\t\tconst result = await execute(toolCallId, params, signal, onUpdate);\n\t\t\t\tconst activeAfter = session.getActiveToolNames();\n\t\t\t\tif (!activeBefore.every((name) => activeAfter.includes(name))) return result;\n\n\t\t\t\tconst beforeNames = new Set(activeBefore);\n\t\t\t\tconst addedToolNames = activeAfter.filter((name) => !beforeNames.has(name));\n\t\t\t\tif (addedToolNames.length === 0) return result;\n\t\t\t\treturn {\n\t\t\t\t\t...result,\n\t\t\t\t\taddedToolNames: [...new Set([...(result.addedToolNames ?? []), ...addedToolNames])],\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t};\n\tconst wrappedExtensionTools = allCustomTools.map(wrapWithDynamicToolTracking);\n\tconst wrappedBuiltInTools = Array.from(session._baseToolDefinitions.values())\n\t\t.filter((definition) => isAllowedTool(definition.name))\n\t\t.map((definition) => wrapWithDynamicToolTracking({ definition }));\n\n\tconst toolRegistry = new Map(wrappedBuiltInTools.map((tool) => [tool.name, tool]));\n\tfor (const tool of wrappedExtensionTools as AgentTool[]) {\n\t\ttoolRegistry.set(tool.name, tool);\n\t}\n\tsession._toolRegistry = toolRegistry;\n\n\tconst nextActiveToolNames = (\n\t\toptions?.activeToolNames ? [...options.activeToolNames] : [...previousActiveToolNames]\n\t).filter((name) => isAllowedTool(name));\n\n\tif (allowedToolNames) {\n\t\tfor (const toolName of session._toolRegistry.keys()) {\n\t\t\tif (allowedToolNames.has(toolName)) {\n\t\t\t\tnextActiveToolNames.push(toolName);\n\t\t\t}\n\t\t}\n\t} else if (options?.includeAllExtensionTools) {\n\t\tfor (const tool of wrappedExtensionTools) {\n\t\t\tnextActiveToolNames.push(tool.name);\n\t\t}\n\t} else if (!options?.activeToolNames) {\n\t\tfor (const toolName of session._toolRegistry.keys()) {\n\t\t\tif (previousRegistryNames.has(toolName)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// Deferred tools (e.g. MCP servers configured with deferredTools)\n\t\t\t// register but stay out of the default active set until tool_search\n\t\t\t// or an explicit activation names them.\n\t\t\tif (session._deferredToolPluginIds.has(session._baseToolSources.get(toolName)?.source ?? \"\")) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tnextActiveToolNames.push(toolName);\n\t\t}\n\t}\n\n\tsession.setActiveToolsByName([...new Set(nextActiveToolNames)]);\n}\n\nexport function syncCapabilityTools(session: AgentSessionInternals): void {\n\tconst tools = session._capabilityRuntime?.listTools() ?? [];\n\tsession._baseToolDefinitions = new Map(tools.map(({ name, definition }) => [name, definition as ToolDefinition]));\n\tsession._baseToolSources = new Map(\n\t\ttools.map(({ name, source }) => [name, createSyntheticSourceInfo(`<plugin:${source}:${name}>`, { source })]),\n\t);\n}\n\nexport function getCapabilitySkills(session: AgentSessionInternals): Skill[] {\n\tconst runtime = session._capabilityRuntime;\n\tif (!runtime) return [];\n\t// The skill contribution point is owned by the bootstrap-skills plugin. In\n\t// hosts that never install it (assistant suite, print mode) — or while that\n\t// owner is inactive — `listContributions` throws \"Contribution point is not\n\t// defined\". That state means \"no contributed skills\", not a failure: every\n\t// tool-registry change rebuilds the system prompt, so propagating the error\n\t// turned each rebuild into an error-level plugin.log record. Any other\n\t// failure still propagates.\n\tlet contributed: ReturnType<typeof runtime.listContributions>;\n\ttry {\n\t\tcontributed = runtime.listContributions(SKILL_CONTRIBUTION_POINT_ID, SKILL_CONTRIBUTION_POINT_VERSION);\n\t} catch (error) {\n\t\tif (!(error instanceof Error) || !error.message.startsWith(\"Contribution point is not defined\")) throw error;\n\t\treturn [];\n\t}\n\tconst contributedSkills = contributed\n\t\t.filter(\n\t\t\t(entry): entry is typeof entry & { value: Skill } =>\n\t\t\t\tentry.value !== null && typeof entry.value === \"object\" && \"name\" in entry.value,\n\t\t)\n\t\t.map((entry) => ({\n\t\t\t...entry.value,\n\t\t\tdisableModelInvocation: entry.value.disableModelInvocation === true,\n\t\t\tsourceInfo: createSyntheticSourceInfo(`<contribution:${entry.owner}:${entry.id}>`, {\n\t\t\t\tsource: entry.owner,\n\t\t\t\tbaseDir: entry.value.baseDir,\n\t\t\t}),\n\t\t}));\n\tconst contributedNames = new Set(contributedSkills.map((skill) => skill.name));\n\tconst legacyFilter = session._capabilitySkillsFilter;\n\tconst legacy = runtime\n\t\t.listSkills()\n\t\t.filter(({ definition }) => !contributedNames.has(definition.name))\n\t\t.map(({ definition, source }) => ({\n\t\t\t...definition,\n\t\t\tdisableModelInvocation: definition.disableModelInvocation === true,\n\t\t\tsourceInfo: createSyntheticSourceInfo(`<plugin:${source}:${definition.name}>`, {\n\t\t\t\tsource,\n\t\t\t\tbaseDir: definition.baseDir,\n\t\t\t}),\n\t\t}))\n\t\t// Suite association filtering (方案系统 M3): the assembler owns the\n\t\t// policy; the session only applies the injected function. The\n\t\t// bootstrap-skills contribution face is already loader-filtered and\n\t\t// must not be filtered twice.\n\t\t.filter((skill) => (legacyFilter ? legacyFilter([skill]).length > 0 : true));\n\treturn [...contributedSkills, ...legacy].sort(\n\t\t(left, right) => left.name.localeCompare(right.name) || left.sourceInfo.path.localeCompare(right.sourceInfo.path),\n\t);\n}\n\nexport function validateCapabilitySkillConflicts(session: AgentSessionInternals): void {\n\tconst resourceNames = new Set<string>();\n\tconst resourceFilePaths = new Set<string>();\n\tfor (const skill of session._resourceLoader.getSkills().skills) {\n\t\tif (resourceNames.has(skill.name))\n\t\t\tthrow new Error(t(\"Skill is duplicated in resources: {name}\", { name: skill.name }));\n\t\tresourceNames.add(skill.name);\n\t\tresourceFilePaths.add(skill.filePath);\n\t}\n\tfor (const skill of session._getCapabilitySkills()) {\n\t\t// bootstrap-skills mirrors the same on-disk SKILL.md into the capability\n\t\t// layer: same name AND same file is one skill seen through two channels,\n\t\t// not a conflict. Same name from a different file (e.g. an MCP server\n\t\t// contributing a skill that collides with a disk skill) is a real one.\n\t\tif (typeof skill.filePath === \"string\" && resourceFilePaths.has(skill.filePath)) continue;\n\t\tif (resourceNames.has(skill.name))\n\t\t\tthrow new Error(t(\"Skill conflicts with a resource skill: {name}\", { name: skill.name }));\n\t}\n}\n\nexport async function refreshBootstrapSkills(session: AgentSessionInternals): Promise<void> {\n\tconst runtime = session._capabilityRuntime;\n\tif (!runtime) return;\n\tsession._validateCapabilitySkillConflicts();\n\tif (session._bootstrapSkillsHandle) {\n\t\tawait refreshSessionBootstrapSkills(runtime, session._resourceLoader.getSkills().skills);\n\t} else {\n\t\tsession._bootstrapSkillsHandle = installSessionBootstrapSkills(\n\t\t\truntime,\n\t\t\tsession._resourceLoader.getSkills().skills,\n\t\t);\n\t}\n\tsession._baseSystemPrompt = session._rebuildSystemPrompt(session.getActiveToolNames());\n\tsession.agent.state.systemPrompt = session._baseSystemPrompt;\n}\n"]}
@@ -431,14 +431,6 @@ export declare class AgentSession {
431
431
  private _autoCompactionAbortController;
432
432
  private _overflowRecoveryAttempted;
433
433
  private _overflowTrimStage;
434
- /**
435
- * microcompact 冷却(按模型请求计数,0 = 不冷却):relief 落地时置
436
- * MICROCOMPACT_COOLDOWN_ASSISTANT_RESPONSES,此后每次 assistant message_end
437
- * (无论 stopReason)减 1、下限 0;user message_start 不复位。冷却期内阈值
438
- * decide 以 microcompactEnabled:false 关闭便宜缓解。微观经济动机见
439
- * agent-session-compaction.ts 的常量注释(中部历史改写 × 不稳定前缀缓存)。
440
- */
441
- private _microcompactCooldown;
442
434
  private _branchSummaryAbortController;
443
435
  private _branchSummaryPromise;
444
436
  private _resolveBranchSummaryPromise;
@@ -807,9 +799,15 @@ export declare class AgentSession {
807
799
  * Send a custom message to the session. Creates a CustomMessageEntry.
808
800
  *
809
801
  * Handles four cases:
810
- * - Streaming: queues message, processed when loop pulls from queue
802
+ * - Streaming: queues message (registered in the queued-message view via its
803
+ * text content), processed when loop pulls from queue
811
804
  * - Streaming + triggerTurn false: appended to state/session once the current turn ends
812
- * - Not streaming + triggerTurn: appends to state/session, starts new turn
805
+ * - Not streaming + triggerTurn: appends to state/session, starts new turn —
806
+ * unless manual compaction is in flight (same guard as prompt()), in which
807
+ * case the message degrades to a followUp queue entry instead of a
808
+ * concurrent turn (D-060 ruling 12 boundary: the compaction revision
809
+ * mutex must not be pierced; the queued message is drained at the next
810
+ * driving point after compaction ends)
813
811
  * - Not streaming + no trigger: appends to state/session, no turn
814
812
  *
815
813
  * @param message Custom message with customType, content, display, details
@@ -820,6 +818,18 @@ export declare class AgentSession {
820
818
  triggerTurn?: boolean;
821
819
  deliverAs?: "steer" | "followUp" | "nextTurn";
822
820
  }): Promise<void>;
821
+ /**
822
+ * Copy text registered in the queued-message view for a queued custom
823
+ * message. The copy holds the message's text content; CustomMessage.display
824
+ * is a boolean visibility flag, not display text. Content without text
825
+ * (e.g. images only) registers a placeholder: an empty copy entry would
826
+ * never be matched for removal on delivery (the drain-side guard skips
827
+ * empty text) and would desynchronize both layers (D-078). The placeholder
828
+ * is a stable literal, deliberately not localized — both registration and
829
+ * removal must derive the same string, even if the UI language changes
830
+ * between the two calls.
831
+ */
832
+ private _queuedCopyText;
823
833
  private _appendCustomMessage;
824
834
  /**
825
835
  * Append custom messages queued while the agent was running.
@@ -847,6 +857,26 @@ export declare class AgentSession {
847
857
  steering: string[];
848
858
  followUp: string[];
849
859
  };
860
+ /**
861
+ * Move a queued message from index `from` to index `to` within the steering
862
+ * or follow-up queue. Indices refer to the session's queued-message view
863
+ * (getSteeringMessages()/getFollowUpMessages() and queue_update payloads)
864
+ * at the moment of the call; the same move is applied to the agent queue.
865
+ * During streaming, drain points consume queued messages, so previously
866
+ * observed indices can become stale.
867
+ * @returns true when the message moved; false for from === to, out-of-bounds
868
+ * indices, or an agent-side rejection — both layers stay untouched in every
869
+ * false case
870
+ */
871
+ reorderQueuedMessages(queue: "steer" | "followUp", from: number, to: number): boolean;
872
+ /**
873
+ * Remove the queued message at `index` from the steering or follow-up queue.
874
+ * Indices refer to the session's queued-message view at the moment of the
875
+ * call; the same removal is applied to the agent queue.
876
+ * @returns The removed queued text, or null when index is out of bounds or the
877
+ * agent-side removal is rejected — both layers stay untouched in every null case
878
+ */
879
+ removeQueuedMessageAt(queue: "steer" | "followUp", index: number): string | null;
850
880
  /** Number of pending messages (includes both steering and follow-up) */
851
881
  get pendingMessageCount(): number;
852
882
  /** Get pending steering messages (read-only) */
@@ -1008,12 +1038,6 @@ export declare class AgentSession {
1008
1038
  * @returns Whether the post-run loop should call `agent.continue()`
1009
1039
  */
1010
1040
  private _runAutoCompaction;
1011
- /**
1012
- * Toggle auto-compaction setting.
1013
- */
1014
- setAutoCompactionEnabled(enabled: boolean): void;
1015
- /** Whether auto-compaction is enabled */
1016
- get autoCompactionEnabled(): boolean;
1017
1041
  /**
1018
1042
  * Run the session-start boundary: dispatch session.start@1 to the capability
1019
1043
  * runtime and run the resource discovery pass (contributed skills/prompts/
@@ -1059,12 +1083,6 @@ export declare class AgentSession {
1059
1083
  abortRetry(): void;
1060
1084
  /** Whether auto-retry is currently in progress */
1061
1085
  get isRetrying(): boolean;
1062
- /** Whether auto-retry is enabled */
1063
- get autoRetryEnabled(): boolean;
1064
- /**
1065
- * Toggle auto-retry setting.
1066
- */
1067
- setAutoRetryEnabled(enabled: boolean): void;
1068
1086
  /** Capture a mode-level bash epoch for an intercepted user_bash result. */
1069
1087
  captureBashEpoch(): number;
1070
1088
  /** Return whether a mode-level bash result still belongs to this runtime epoch. */