@ai-agent-forge/agent-forge 0.88.2 → 0.88.3

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 (453) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +1 -1
  3. package/bundled-plugins/agent-loop-policy/agent-forge.json +1 -1
  4. package/bundled-plugins/agent-loop-policy/plugin.json +1 -1
  5. package/bundled-plugins/coding-tools/agent-forge.json +1 -1
  6. package/bundled-plugins/coding-tools/plugin.json +1 -1
  7. package/bundled-plugins/compaction-policy/agent-forge.json +1 -1
  8. package/bundled-plugins/compaction-policy/plugin.json +1 -1
  9. package/bundled-plugins/overflow-policy/agent-forge.json +1 -1
  10. package/bundled-plugins/overflow-policy/plugin.json +1 -1
  11. package/bundled-plugins/provider-failover/agent-forge.json +1 -1
  12. package/bundled-plugins/provider-failover/plugin.json +1 -1
  13. package/bundled-plugins/retry-policy/agent-forge.json +1 -1
  14. package/bundled-plugins/retry-policy/plugin.json +1 -1
  15. package/dist/artifacts/paged-read.d.ts +6 -1
  16. package/dist/artifacts/paged-read.d.ts.map +1 -1
  17. package/dist/artifacts/paged-read.js.map +1 -1
  18. package/dist/bundle/.build-manifest.json +240 -230
  19. package/dist/bundle/chunks/{anthropic-messages-PLAKXR73.js → anthropic-messages-3FJHRAJL.js} +2 -2
  20. package/dist/bundle/chunks/anthropic.js +1 -1
  21. package/dist/bundle/chunks/{azure-openai-responses-OUWQ2AZD.js → azure-openai-responses-GCL47IDS.js} +1 -1
  22. package/dist/bundle/chunks/bedrock-converse-stream.js +1 -1
  23. package/dist/bundle/chunks/{chunk-6F5JWGKE.js → chunk-32YDZI4J.js} +1 -1
  24. package/dist/bundle/chunks/{chunk-LSP24WNH.js → chunk-755VNWIF.js} +12 -12
  25. package/dist/bundle/chunks/{chunk-HTC5K5SM.js → chunk-B42Y2VME.js} +94 -89
  26. package/dist/bundle/chunks/{chunk-DRQDKNXA.js → chunk-BVVSHK6W.js} +1 -1
  27. package/dist/bundle/chunks/{chunk-6R7UI4IY.js → chunk-QDLOMKF6.js} +1 -1
  28. package/dist/bundle/chunks/{chunk-44I47ACN.js → chunk-V3ACW7VD.js} +1 -1
  29. package/dist/bundle/chunks/{google-generative-ai-DLII6DAT.js → google-generative-ai-6BMXWA44.js} +1 -1
  30. package/dist/bundle/chunks/{google-vertex-G7BZL7GM.js → google-vertex-6H7NLRTK.js} +1 -1
  31. package/dist/bundle/chunks/image-resize-worker.js +1 -1
  32. package/dist/bundle/chunks/{mistral-conversations-JXUK24ID.js → mistral-conversations-IXUHSFSJ.js} +1 -1
  33. package/dist/bundle/chunks/{openai-codex-responses-5GSGFIPG.js → openai-codex-responses-YHUAEVCM.js} +1 -1
  34. package/dist/bundle/chunks/openai-codex.js +1 -1
  35. package/dist/bundle/chunks/{openai-completions-EI2I6DTG.js → openai-completions-ULQCFC72.js} +1 -1
  36. package/dist/bundle/chunks/openai-responses-NLLAJDPS.js +2 -0
  37. package/dist/bundle/chunks/{openrouter-images-G4GQRUSG.js → openrouter-images-GZZQZXMS.js} +1 -1
  38. package/dist/bundle/chunks/openrouter.js +1 -1
  39. package/dist/bundle/chunks/{pi-messages-PWU2VJMR.js → pi-messages-EJTI2EJ3.js} +1 -1
  40. package/dist/bundle/chunks/virtual-modules-TQWEGNNZ.js +5 -0
  41. package/dist/bundle/cli.js +1 -1
  42. package/dist/bundle/client.js +1 -1
  43. package/dist/bundle/index.js +1 -1
  44. package/dist/bundle/rpc-entry.js +1 -1
  45. package/dist/cli/args.d.ts +0 -1
  46. package/dist/cli/args.d.ts.map +1 -1
  47. package/dist/cli/args.js +1 -4
  48. package/dist/cli/args.js.map +1 -1
  49. package/dist/cli/config-selector.d.ts.map +1 -1
  50. package/dist/cli/config-selector.js +1 -1
  51. package/dist/cli/config-selector.js.map +1 -1
  52. package/dist/cli/experimental/cli.d.ts +3 -3
  53. package/dist/cli/experimental/cli.d.ts.map +1 -1
  54. package/dist/cli/experimental/cli.js +2 -2
  55. package/dist/cli/experimental/cli.js.map +1 -1
  56. package/dist/cli/experimental/commands/agent-forge.d.ts +15 -0
  57. package/dist/cli/experimental/commands/agent-forge.d.ts.map +1 -0
  58. package/dist/cli/experimental/commands/{pi.js → agent-forge.js} +4 -4
  59. package/dist/cli/experimental/commands/agent-forge.js.map +1 -0
  60. package/dist/cli/startup-ui.d.ts.map +1 -1
  61. package/dist/cli/startup-ui.js +1 -1
  62. package/dist/cli/startup-ui.js.map +1 -1
  63. package/dist/config.d.ts +4 -4
  64. package/dist/config.d.ts.map +1 -1
  65. package/dist/config.js +7 -7
  66. package/dist/config.js.map +1 -1
  67. package/dist/core/agent-forge-manifest.d.ts +7 -0
  68. package/dist/core/agent-forge-manifest.d.ts.map +1 -0
  69. package/dist/core/{pi-manifest.js → agent-forge-manifest.js} +4 -4
  70. package/dist/core/agent-forge-manifest.js.map +1 -0
  71. package/dist/core/agent-session-compaction.d.ts +1 -1
  72. package/dist/core/agent-session-compaction.d.ts.map +1 -1
  73. package/dist/core/agent-session-compaction.js +3 -3
  74. package/dist/core/agent-session-compaction.js.map +1 -1
  75. package/dist/core/agent-session-lifecycle.d.ts.map +1 -1
  76. package/dist/core/agent-session-lifecycle.js +12 -1
  77. package/dist/core/agent-session-lifecycle.js.map +1 -1
  78. package/dist/core/agent-session-projection.d.ts.map +1 -1
  79. package/dist/core/agent-session-projection.js +3 -3
  80. package/dist/core/agent-session-projection.js.map +1 -1
  81. package/dist/core/agent-session-services.d.ts +1 -1
  82. package/dist/core/agent-session-services.d.ts.map +1 -1
  83. package/dist/core/agent-session-services.js +1 -1
  84. package/dist/core/agent-session-services.js.map +1 -1
  85. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  86. package/dist/core/compaction/branch-summarization.js +1 -1
  87. package/dist/core/compaction/branch-summarization.js.map +1 -1
  88. package/dist/core/experimental.d.ts.map +1 -1
  89. package/dist/core/experimental.js +1 -3
  90. package/dist/core/experimental.js.map +1 -1
  91. package/dist/core/extensions/capability-runtime-store.d.ts +20 -1
  92. package/dist/core/extensions/capability-runtime-store.d.ts.map +1 -1
  93. package/dist/core/extensions/capability-runtime-store.js +67 -0
  94. package/dist/core/extensions/capability-runtime-store.js.map +1 -1
  95. package/dist/core/extensions/capability-runtime-types.d.ts +14 -0
  96. package/dist/core/extensions/capability-runtime-types.d.ts.map +1 -1
  97. package/dist/core/extensions/capability-runtime-types.js +7 -1
  98. package/dist/core/extensions/capability-runtime-types.js.map +1 -1
  99. package/dist/core/extensions/capability-runtime.d.ts.map +1 -1
  100. package/dist/core/extensions/capability-runtime.js +144 -42
  101. package/dist/core/extensions/capability-runtime.js.map +1 -1
  102. package/dist/core/extensions/virtual-modules.d.ts.map +1 -1
  103. package/dist/core/extensions/virtual-modules.js +6 -1
  104. package/dist/core/extensions/virtual-modules.js.map +1 -1
  105. package/dist/core/facade/coding-agent-facade.d.ts +1 -1
  106. package/dist/core/facade/coding-agent-facade.d.ts.map +1 -1
  107. package/dist/core/facade/coding-agent-facade.js +1 -1
  108. package/dist/core/facade/coding-agent-facade.js.map +1 -1
  109. package/dist/core/i18n/locales/zh-cn/core-contract-final.d.ts +1 -1
  110. package/dist/core/i18n/locales/zh-cn/core-contract-final.d.ts.map +1 -1
  111. package/dist/core/i18n/locales/zh-cn/core-contract-final.js +3 -3
  112. package/dist/core/i18n/locales/zh-cn/core-contract-final.js.map +1 -1
  113. package/dist/core/i18n/locales/zh-cn/core-contract-plugins.d.ts.map +1 -1
  114. package/dist/core/i18n/locales/zh-cn/core-contract-plugins.js +1 -1
  115. package/dist/core/i18n/locales/zh-cn/core-contract-plugins.js.map +1 -1
  116. package/dist/core/i18n/locales/zh-cn/core-errors.d.ts.map +1 -1
  117. package/dist/core/i18n/locales/zh-cn/core-errors.js +1 -1
  118. package/dist/core/i18n/locales/zh-cn/core-errors.js.map +1 -1
  119. package/dist/core/i18n/locales/zh-cn/tui-components-misc.d.ts.map +1 -1
  120. package/dist/core/i18n/locales/zh-cn/tui-components-misc.js +2 -0
  121. package/dist/core/i18n/locales/zh-cn/tui-components-misc.js.map +1 -1
  122. package/dist/core/model-resolver.d.ts +2 -0
  123. package/dist/core/model-resolver.d.ts.map +1 -1
  124. package/dist/core/model-resolver.js +4 -1
  125. package/dist/core/model-resolver.js.map +1 -1
  126. package/dist/core/package-resource-collection.d.ts.map +1 -1
  127. package/dist/core/package-resource-collection.js +5 -5
  128. package/dist/core/package-resource-collection.js.map +1 -1
  129. package/dist/core/provider-composer.d.ts.map +1 -1
  130. package/dist/core/provider-composer.js +3 -3
  131. package/dist/core/provider-composer.js.map +1 -1
  132. package/dist/core/resource-loader.d.ts.map +1 -1
  133. package/dist/core/resource-loader.js +1 -1
  134. package/dist/core/resource-loader.js.map +1 -1
  135. package/dist/core/sdk.d.ts +1 -1
  136. package/dist/core/sdk.d.ts.map +1 -1
  137. package/dist/core/sdk.js +6 -7
  138. package/dist/core/sdk.js.map +1 -1
  139. package/dist/core/session-manager.d.ts.map +1 -1
  140. package/dist/core/session-manager.js +4 -4
  141. package/dist/core/session-manager.js.map +1 -1
  142. package/dist/core/settings-manager.d.ts.map +1 -1
  143. package/dist/core/settings-manager.js +5 -10
  144. package/dist/core/settings-manager.js.map +1 -1
  145. package/dist/core/timings.d.ts.map +1 -1
  146. package/dist/core/timings.js +1 -3
  147. package/dist/core/timings.js.map +1 -1
  148. package/dist/core/tools/render-utils.d.ts +1 -1
  149. package/dist/core/tools/render-utils.d.ts.map +1 -1
  150. package/dist/core/tools/render-utils.js.map +1 -1
  151. package/dist/core/tools/tool-definition.d.ts +1 -1
  152. package/dist/core/tools/tool-definition.d.ts.map +1 -1
  153. package/dist/core/tools/tool-definition.js.map +1 -1
  154. package/dist/core/trace-retention.d.ts +16 -1
  155. package/dist/core/trace-retention.d.ts.map +1 -1
  156. package/dist/core/trace-retention.js +43 -20
  157. package/dist/core/trace-retention.js.map +1 -1
  158. package/dist/export-html/ansi-to-html.d.ts.map +1 -0
  159. package/dist/export-html/ansi-to-html.js.map +1 -0
  160. package/dist/{core/export-html → export-html}/index.d.ts +1 -1
  161. package/dist/export-html/index.d.ts.map +1 -0
  162. package/dist/{core/export-html → export-html}/index.js +5 -5
  163. package/dist/export-html/index.js.map +1 -0
  164. package/dist/{core/export-html → export-html}/tool-renderer.d.ts +2 -2
  165. package/dist/export-html/tool-renderer.d.ts.map +1 -0
  166. package/dist/export-html/tool-renderer.js.map +1 -0
  167. package/dist/{modes/interactive → host}/model-catalog-refresh.d.ts +1 -1
  168. package/dist/host/model-catalog-refresh.d.ts.map +1 -0
  169. package/dist/{modes/interactive → host}/model-catalog-refresh.js +1 -1
  170. package/dist/host/model-catalog-refresh.js.map +1 -0
  171. package/dist/index.d.ts +5 -5
  172. package/dist/index.d.ts.map +1 -1
  173. package/dist/index.js +12 -12
  174. package/dist/index.js.map +1 -1
  175. package/dist/main.d.ts.map +1 -1
  176. package/dist/main.js +25 -14
  177. package/dist/main.js.map +1 -1
  178. package/dist/modes/interactive/components/agents-view.d.ts.map +1 -1
  179. package/dist/modes/interactive/components/agents-view.js +1 -1
  180. package/dist/modes/interactive/components/agents-view.js.map +1 -1
  181. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  182. package/dist/modes/interactive/components/armin.js +1 -1
  183. package/dist/modes/interactive/components/armin.js.map +1 -1
  184. package/dist/modes/interactive/components/assistant-message.d.ts +3 -0
  185. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  186. package/dist/modes/interactive/components/assistant-message.js +83 -24
  187. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  188. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  189. package/dist/modes/interactive/components/bash-execution.js +1 -1
  190. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  191. package/dist/modes/interactive/components/bordered-loader.d.ts +1 -1
  192. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  193. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  194. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  195. package/dist/modes/interactive/components/branch-summary-message.js +1 -1
  196. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  197. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  198. package/dist/modes/interactive/components/compaction-summary-message.js +1 -1
  199. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  200. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  201. package/dist/modes/interactive/components/config-selector.js +1 -1
  202. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  203. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
  204. package/dist/modes/interactive/components/custom-entry.js +1 -1
  205. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  206. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  207. package/dist/modes/interactive/components/custom-message.js +1 -1
  208. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  209. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  210. package/dist/modes/interactive/components/daxnuts.js +1 -1
  211. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  212. package/dist/modes/interactive/components/dialog-editor.d.ts.map +1 -1
  213. package/dist/modes/interactive/components/dialog-editor.js +1 -1
  214. package/dist/modes/interactive/components/dialog-editor.js.map +1 -1
  215. package/dist/modes/interactive/components/dialog-input.d.ts.map +1 -1
  216. package/dist/modes/interactive/components/dialog-input.js +1 -1
  217. package/dist/modes/interactive/components/dialog-input.js.map +1 -1
  218. package/dist/modes/interactive/components/dialog-selector.d.ts.map +1 -1
  219. package/dist/modes/interactive/components/dialog-selector.js +1 -1
  220. package/dist/modes/interactive/components/dialog-selector.js.map +1 -1
  221. package/dist/modes/interactive/components/diff.d.ts.map +1 -1
  222. package/dist/modes/interactive/components/diff.js +1 -1
  223. package/dist/modes/interactive/components/diff.js.map +1 -1
  224. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  225. package/dist/modes/interactive/components/dynamic-border.js +1 -1
  226. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  227. package/dist/modes/interactive/components/first-time-setup.d.ts +1 -1
  228. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  229. package/dist/modes/interactive/components/first-time-setup.js +1 -1
  230. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  231. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  232. package/dist/modes/interactive/components/footer.js +1 -1
  233. package/dist/modes/interactive/components/footer.js.map +1 -1
  234. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  235. package/dist/modes/interactive/components/keybinding-hints.js +1 -1
  236. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  237. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  238. package/dist/modes/interactive/components/login-dialog.js +1 -1
  239. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  240. package/dist/modes/interactive/components/mermaid.d.ts +1 -1
  241. package/dist/modes/interactive/components/mermaid.d.ts.map +1 -1
  242. package/dist/modes/interactive/components/mermaid.js.map +1 -1
  243. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  244. package/dist/modes/interactive/components/model-selector.js +2 -2
  245. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  246. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  247. package/dist/modes/interactive/components/oauth-selector.js +1 -1
  248. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  249. package/dist/modes/interactive/components/plugin-manager-entry.d.ts.map +1 -1
  250. package/dist/modes/interactive/components/plugin-manager-entry.js +1 -1
  251. package/dist/modes/interactive/components/plugin-manager-entry.js.map +1 -1
  252. package/dist/modes/interactive/components/plugin-selection-entry.d.ts.map +1 -1
  253. package/dist/modes/interactive/components/plugin-selection-entry.js +1 -1
  254. package/dist/modes/interactive/components/plugin-selection-entry.js.map +1 -1
  255. package/dist/modes/interactive/components/queue-manager-selector.d.ts.map +1 -1
  256. package/dist/modes/interactive/components/queue-manager-selector.js +1 -1
  257. package/dist/modes/interactive/components/queue-manager-selector.js.map +1 -1
  258. package/dist/modes/interactive/components/render-types.d.ts +1 -1
  259. package/dist/modes/interactive/components/render-types.d.ts.map +1 -1
  260. package/dist/modes/interactive/components/render-types.js.map +1 -1
  261. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  262. package/dist/modes/interactive/components/scoped-models-selector.js +1 -1
  263. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  264. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  265. package/dist/modes/interactive/components/session-selector.js +2 -2
  266. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  267. package/dist/modes/interactive/components/settings-selector.d.ts +1 -1
  268. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  269. package/dist/modes/interactive/components/settings-selector.js +1 -1
  270. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  271. package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -1
  272. package/dist/modes/interactive/components/settings-submenu.js +1 -1
  273. package/dist/modes/interactive/components/settings-submenu.js.map +1 -1
  274. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  275. package/dist/modes/interactive/components/show-images-selector.js +1 -1
  276. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  277. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  278. package/dist/modes/interactive/components/skill-invocation-message.js +1 -1
  279. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  280. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
  281. package/dist/modes/interactive/components/status-indicator.js +1 -1
  282. package/dist/modes/interactive/components/status-indicator.js.map +1 -1
  283. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  284. package/dist/modes/interactive/components/theme-selector.js +1 -1
  285. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  286. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  287. package/dist/modes/interactive/components/thinking-selector.js +1 -1
  288. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  289. package/dist/modes/interactive/components/tool-execution.d.ts +2 -0
  290. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  291. package/dist/modes/interactive/components/tool-execution.js +96 -4
  292. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  293. package/dist/modes/interactive/components/tool-run-group.d.ts.map +1 -1
  294. package/dist/modes/interactive/components/tool-run-group.js +1 -1
  295. package/dist/modes/interactive/components/tool-run-group.js.map +1 -1
  296. package/dist/modes/interactive/components/tree-list.d.ts.map +1 -1
  297. package/dist/modes/interactive/components/tree-list.js +1 -1
  298. package/dist/modes/interactive/components/tree-list.js.map +1 -1
  299. package/dist/modes/interactive/components/tree-render.d.ts.map +1 -1
  300. package/dist/modes/interactive/components/tree-render.js +1 -1
  301. package/dist/modes/interactive/components/tree-render.js.map +1 -1
  302. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  303. package/dist/modes/interactive/components/tree-selector.js +1 -1
  304. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  305. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  306. package/dist/modes/interactive/components/user-message-selector.js +1 -1
  307. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  308. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  309. package/dist/modes/interactive/components/user-message.js +1 -1
  310. package/dist/modes/interactive/components/user-message.js.map +1 -1
  311. package/dist/modes/interactive/components/workflow-view.d.ts.map +1 -1
  312. package/dist/modes/interactive/components/workflow-view.js +1 -1
  313. package/dist/modes/interactive/components/workflow-view.js.map +1 -1
  314. package/dist/modes/interactive/interactive-auth.d.ts +1 -1
  315. package/dist/modes/interactive/interactive-auth.d.ts.map +1 -1
  316. package/dist/modes/interactive/interactive-auth.js +1 -1
  317. package/dist/modes/interactive/interactive-auth.js.map +1 -1
  318. package/dist/modes/interactive/interactive-commands.d.ts +123 -6
  319. package/dist/modes/interactive/interactive-commands.d.ts.map +1 -1
  320. package/dist/modes/interactive/interactive-commands.js +691 -4
  321. package/dist/modes/interactive/interactive-commands.js.map +1 -1
  322. package/dist/modes/interactive/interactive-events.d.ts +174 -0
  323. package/dist/modes/interactive/interactive-events.d.ts.map +1 -0
  324. package/dist/modes/interactive/interactive-events.js +704 -0
  325. package/dist/modes/interactive/interactive-events.js.map +1 -0
  326. package/dist/modes/interactive/interactive-format.d.ts.map +1 -1
  327. package/dist/modes/interactive/interactive-format.js +1 -1
  328. package/dist/modes/interactive/interactive-format.js.map +1 -1
  329. package/dist/modes/interactive/interactive-lifecycle.d.ts +94 -0
  330. package/dist/modes/interactive/interactive-lifecycle.d.ts.map +1 -0
  331. package/dist/modes/interactive/interactive-lifecycle.js +177 -0
  332. package/dist/modes/interactive/interactive-lifecycle.js.map +1 -0
  333. package/dist/modes/interactive/interactive-mode.d.ts +240 -133
  334. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  335. package/dist/modes/interactive/interactive-mode.js +251 -2159
  336. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  337. package/dist/modes/interactive/interactive-queues.d.ts +96 -0
  338. package/dist/modes/interactive/interactive-queues.d.ts.map +1 -0
  339. package/dist/modes/interactive/interactive-queues.js +183 -0
  340. package/dist/modes/interactive/interactive-queues.js.map +1 -0
  341. package/dist/modes/interactive/interactive-selectors.d.ts +95 -5
  342. package/dist/modes/interactive/interactive-selectors.d.ts.map +1 -1
  343. package/dist/modes/interactive/interactive-selectors.js +517 -6
  344. package/dist/modes/interactive/interactive-selectors.js.map +1 -1
  345. package/dist/modes/interactive/startup-services.d.ts +31 -0
  346. package/dist/modes/interactive/startup-services.d.ts.map +1 -0
  347. package/dist/modes/interactive/startup-services.js +123 -0
  348. package/dist/modes/interactive/startup-services.js.map +1 -0
  349. package/dist/modes/memory-preheat.d.ts +11 -0
  350. package/dist/modes/memory-preheat.d.ts.map +1 -0
  351. package/dist/modes/memory-preheat.js +20 -0
  352. package/dist/modes/memory-preheat.js.map +1 -0
  353. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  354. package/dist/modes/rpc/rpc-mode.js +3 -1
  355. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  356. package/dist/remote/server-assembly.d.ts.map +1 -1
  357. package/dist/remote/server-assembly.js +7 -2
  358. package/dist/remote/server-assembly.js.map +1 -1
  359. package/dist/suites/builtin-suites.d.ts.map +1 -0
  360. package/dist/suites/builtin-suites.js.map +1 -0
  361. package/dist/suites/resolved-agent-profile.d.ts.map +1 -0
  362. package/dist/suites/resolved-agent-profile.js.map +1 -0
  363. package/dist/suites/suite-lifecycle.d.ts.map +1 -0
  364. package/dist/suites/suite-lifecycle.js.map +1 -0
  365. package/dist/suites/suite-loader.d.ts.map +1 -0
  366. package/dist/suites/suite-loader.js.map +1 -0
  367. package/dist/{modes/interactive/theme → theme}/dark.json +1 -1
  368. package/dist/{modes/interactive/theme → theme}/light.json +1 -1
  369. package/dist/{modes/interactive/theme → theme}/theme-controller.d.ts +1 -1
  370. package/dist/theme/theme-controller.d.ts.map +1 -0
  371. package/dist/{modes/interactive/theme → theme}/theme-controller.js +1 -1
  372. package/dist/theme/theme-controller.js.map +1 -0
  373. package/dist/{modes/interactive/theme → theme}/theme.d.ts +1 -1
  374. package/dist/theme/theme.d.ts.map +1 -0
  375. package/dist/{modes/interactive/theme → theme}/theme.js +5 -5
  376. package/dist/theme/theme.js.map +1 -0
  377. package/docs/compaction.md +7 -7
  378. package/docs/environment-variables.md +10 -4
  379. package/docs/keybindings.md +3 -3
  380. package/docs/models.md +17 -17
  381. package/docs/packages.md +1 -1
  382. package/docs/prompt-templates.md +1 -1
  383. package/docs/rpc.md +2 -2
  384. package/docs/sdk.md +5 -5
  385. package/docs/session-format.md +3 -3
  386. package/docs/settings.md +15 -1
  387. package/docs/shell-aliases.md +1 -1
  388. package/docs/skills.md +1 -1
  389. package/docs/terminal-setup.md +17 -17
  390. package/docs/themes.md +5 -5
  391. package/docs/tmux.md +4 -4
  392. package/docs/tui.md +1 -1
  393. package/docs/usage.md +292 -292
  394. package/docs/windows.md +1 -1
  395. package/examples/extensions/bash-spawn-hook/index.ts +1 -1
  396. package/examples/extensions/dynamic-resources/dynamic.json +1 -1
  397. package/examples/extensions/mcp-stdio/index.d.ts +64 -0
  398. package/examples/extensions/mcp-stdio/index.d.ts.map +1 -0
  399. package/examples/extensions/mcp-stdio/index.js +292 -0
  400. package/examples/extensions/mcp-stdio/index.js.map +1 -0
  401. package/examples/extensions/with-deps/package-lock.json +2 -2
  402. package/examples/extensions/with-deps/package.json +1 -6
  403. package/examples/extensions/with-deps/plugin.json +1 -1
  404. package/package.json +2 -2
  405. package/dist/bundle/chunks/openai-responses-AUJQ3NWT.js +0 -2
  406. package/dist/bundle/chunks/virtual-modules-MRXD3RWG.js +0 -5
  407. package/dist/cli/experimental/commands/pi.d.ts +0 -15
  408. package/dist/cli/experimental/commands/pi.d.ts.map +0 -1
  409. package/dist/cli/experimental/commands/pi.js.map +0 -1
  410. package/dist/core/export-html/ansi-to-html.d.ts.map +0 -1
  411. package/dist/core/export-html/ansi-to-html.js.map +0 -1
  412. package/dist/core/export-html/index.d.ts.map +0 -1
  413. package/dist/core/export-html/index.js.map +0 -1
  414. package/dist/core/export-html/tool-renderer.d.ts.map +0 -1
  415. package/dist/core/export-html/tool-renderer.js.map +0 -1
  416. package/dist/core/pi-manifest.d.ts +0 -7
  417. package/dist/core/pi-manifest.d.ts.map +0 -1
  418. package/dist/core/pi-manifest.js.map +0 -1
  419. package/dist/modes/interactive/model-catalog-refresh.d.ts.map +0 -1
  420. package/dist/modes/interactive/model-catalog-refresh.js.map +0 -1
  421. package/dist/modes/interactive/theme/theme-controller.d.ts.map +0 -1
  422. package/dist/modes/interactive/theme/theme-controller.js.map +0 -1
  423. package/dist/modes/interactive/theme/theme.d.ts.map +0 -1
  424. package/dist/modes/interactive/theme/theme.js.map +0 -1
  425. package/dist/profiles/builtin-suites.d.ts.map +0 -1
  426. package/dist/profiles/builtin-suites.js.map +0 -1
  427. package/dist/profiles/resolved-agent-profile.d.ts.map +0 -1
  428. package/dist/profiles/resolved-agent-profile.js.map +0 -1
  429. package/dist/profiles/suite-lifecycle.d.ts.map +0 -1
  430. package/dist/profiles/suite-lifecycle.js.map +0 -1
  431. package/dist/profiles/suite-loader.d.ts.map +0 -1
  432. package/dist/profiles/suite-loader.js.map +0 -1
  433. package/dist/utils/deprecation.d.ts +0 -4
  434. package/dist/utils/deprecation.d.ts.map +0 -1
  435. package/dist/utils/deprecation.js +0 -13
  436. package/dist/utils/deprecation.js.map +0 -1
  437. /package/dist/{core/export-html → export-html}/ansi-to-html.d.ts +0 -0
  438. /package/dist/{core/export-html → export-html}/ansi-to-html.js +0 -0
  439. /package/dist/{core/export-html → export-html}/template.css +0 -0
  440. /package/dist/{core/export-html → export-html}/template.html +0 -0
  441. /package/dist/{core/export-html → export-html}/template.js +0 -0
  442. /package/dist/{core/export-html → export-html}/tool-renderer.js +0 -0
  443. /package/dist/{core/export-html → export-html}/vendor/highlight.min.js +0 -0
  444. /package/dist/{core/export-html → export-html}/vendor/marked.min.js +0 -0
  445. /package/dist/{profiles → suites}/builtin-suites.d.ts +0 -0
  446. /package/dist/{profiles → suites}/builtin-suites.js +0 -0
  447. /package/dist/{profiles → suites}/resolved-agent-profile.d.ts +0 -0
  448. /package/dist/{profiles → suites}/resolved-agent-profile.js +0 -0
  449. /package/dist/{profiles → suites}/suite-lifecycle.d.ts +0 -0
  450. /package/dist/{profiles → suites}/suite-lifecycle.js +0 -0
  451. /package/dist/{profiles → suites}/suite-loader.d.ts +0 -0
  452. /package/dist/{profiles → suites}/suite-loader.js +0 -0
  453. /package/dist/{modes/interactive/theme → theme}/theme-schema.json +0 -0
@@ -1,17 +1,32 @@
1
- import { Container, SelectList, Spacer, Text } from "@agent-forge/tui";
1
+ import { Container, SelectList, Spacer, Text, TuiAltScreen } from "@agent-forge/tui";
2
2
  import { getAgentDir } from "../../config.js";
3
- import { DEFAULT_THINKING_LEVEL } from "../../core/defaults.js";
4
- import { t } from "../../core/i18n/index.js";
3
+ import { listAgentSessions, readAgentSession } from "../../core/agent-session-store.js";
4
+ import { DEFAULT_THINKING_LEVEL, THINKING_LEVEL_OPTIONS } from "../../core/defaults.js";
5
+ import { configureHttpDispatcher, formatHttpIdleTimeoutMs } from "../../core/http-dispatcher.js";
6
+ import { setI18nLanguage, t } from "../../core/i18n/index.js";
5
7
  import { findExactModelReferenceMatch, resolveModelScopeFromModels } from "../../core/model-resolver.js";
6
- import { listSuiteIds } from "../../profiles/suite-loader.js";
8
+ import { MissingSessionCwdError } from "../../core/session-cwd.js";
9
+ import { SessionManager } from "../../core/session-manager.js";
10
+ import { refreshModelCatalogs } from "../../host/model-catalog-refresh.js";
11
+ import { listSuiteIds } from "../../suites/suite-loader.js";
12
+ import { getAvailableThemes, getSelectListTheme, theme } from "../../theme/theme.js";
13
+ import { copyToClipboard } from "../../utils/clipboard.js";
14
+ import { AgentsViewComponent } from "./components/agents-view.js";
15
+ import { AssistantMessageComponent } from "./components/assistant-message.js";
16
+ import { CustomMessageComponent } from "./components/custom-message.js";
7
17
  import { DynamicBorder } from "./components/dynamic-border.js";
8
18
  import { ModelSelectorComponent } from "./components/model-selector.js";
9
19
  import { QueueManagerSelectorComponent } from "./components/queue-manager-selector.js";
10
20
  import { ScopedModelsSelectorComponent } from "./components/scoped-models-selector.js";
21
+ import { SessionSelectorComponent } from "./components/session-selector.js";
22
+ import { SettingsSelectorComponent } from "./components/settings-selector.js";
23
+ import { BranchSummaryStatusIndicator } from "./components/status-indicator.js";
11
24
  import { ThinkingSelectorComponent } from "./components/thinking-selector.js";
25
+ import { ToolExecutionComponent } from "./components/tool-execution.js";
26
+ import { TreeSelectorComponent } from "./components/tree-selector.js";
27
+ import { UserMessageComponent } from "./components/user-message.js";
12
28
  import { UserMessageSelectorComponent } from "./components/user-message-selector.js";
13
- import { refreshModelCatalogs } from "./model-catalog-refresh.js";
14
- import { getSelectListTheme, theme } from "./theme/theme.js";
29
+ import { WorkflowViewComponent } from "./components/workflow-view.js";
15
30
  export function handleSuiteCommand(host, suiteId) {
16
31
  const availableSuites = listSuiteIds(getAgentDir());
17
32
  if (!suiteId) {
@@ -421,4 +436,500 @@ export async function handleCloneCommand(host) {
421
436
  host.showError(error instanceof Error ? error.message : String(error));
422
437
  }
423
438
  }
439
+ export function showSettingsSelector(host) {
440
+ host.showSelector((done) => {
441
+ let selector;
442
+ const defaultProvider = host.settingsManager.getDefaultProvider();
443
+ const defaultModelId = host.settingsManager.getDefaultModel();
444
+ const defaultModel = defaultProvider && defaultModelId ? `${defaultProvider}/${defaultModelId}` : t("not set");
445
+ selector = new SettingsSelectorComponent({
446
+ defaultModel,
447
+ currentModel: host.facade.getModel(),
448
+ availableDefaultModels: host.facade.getAvailableModels(),
449
+ showImages: host.settingsManager.getShowImages(),
450
+ imageWidthCells: host.settingsManager.getImageWidthCells(),
451
+ autoResizeImages: host.settingsManager.getImageAutoResize(),
452
+ blockImages: host.settingsManager.getBlockImages(),
453
+ steeringMode: host.facade.getSteeringMode(),
454
+ followUpMode: host.facade.getFollowUpMode(),
455
+ transport: host.settingsManager.getTransport(),
456
+ httpIdleTimeoutMs: host.settingsManager.getHttpIdleTimeoutMs(),
457
+ thinkingLevel: host.settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL,
458
+ availableThinkingLevels: [...THINKING_LEVEL_OPTIONS],
459
+ modelThinkingLevels: host.settingsManager.getAllModelThinkingLevels(),
460
+ currentTheme: host.themeController.getThemeSelection() || "dark",
461
+ terminalTheme: host.themeController.getTerminalTheme(),
462
+ availableThemes: getAvailableThemes(),
463
+ hideThinkingBlock: host.hideThinkingBlock,
464
+ mermaidRenderingMode: host.settingsManager.getMermaidRenderingMode(),
465
+ collapseChangelog: host.settingsManager.getCollapseChangelog(),
466
+ doubleEscapeAction: host.settingsManager.getDoubleEscapeAction(),
467
+ uiLanguage: host.settingsManager.getUiLanguage(),
468
+ treeFilterMode: host.settingsManager.getTreeFilterMode(),
469
+ showHardwareCursor: host.settingsManager.getShowHardwareCursor(),
470
+ showCacheMissNotices: host.settingsManager.getShowCacheMissNotices(),
471
+ editorPaddingX: host.settingsManager.getEditorPaddingX(),
472
+ outputPad: host.settingsManager.getOutputPad(),
473
+ autocompleteMaxVisible: host.settingsManager.getAutocompleteMaxVisible(),
474
+ quietStartup: host.settingsManager.getQuietStartup(),
475
+ clearOnShrink: host.settingsManager.getClearOnShrink(),
476
+ showTerminalProgress: host.settingsManager.getShowTerminalProgress(),
477
+ tuiMode: host.ui.mode,
478
+ fullscreenExitOutput: host.settingsManager.getFullscreenExitOutput(),
479
+ fullscreenScrollbar: host.settingsManager.getFullscreenScrollbar(),
480
+ fullscreenCopyOnSelect: host.settingsManager.getFullscreenCopyOnSelect(),
481
+ fullscreenWheelScrollLines: host.settingsManager.getFullscreenWheelScrollLines(),
482
+ warnings: host.settingsManager.getWarnings(),
483
+ }, {
484
+ onShowImagesChange: (enabled) => {
485
+ host.settingsManager.setShowImages(enabled);
486
+ for (const child of host.chatContainer.children) {
487
+ if (child instanceof ToolExecutionComponent) {
488
+ child.setShowImages(enabled);
489
+ }
490
+ }
491
+ },
492
+ onImageWidthCellsChange: (width) => {
493
+ host.settingsManager.setImageWidthCells(width);
494
+ for (const child of host.chatContainer.children) {
495
+ if (child instanceof ToolExecutionComponent) {
496
+ child.setImageWidthCells(width);
497
+ }
498
+ }
499
+ },
500
+ onAutoResizeImagesChange: (enabled) => {
501
+ host.settingsManager.setImageAutoResize(enabled);
502
+ },
503
+ onBlockImagesChange: (blocked) => {
504
+ host.settingsManager.setBlockImages(blocked);
505
+ },
506
+ onSteeringModeChange: (mode) => {
507
+ host.facade.setSteeringMode(mode);
508
+ },
509
+ onFollowUpModeChange: (mode) => {
510
+ host.facade.setFollowUpMode(mode);
511
+ },
512
+ onTransportChange: (transport) => {
513
+ host.settingsManager.setTransport(transport);
514
+ host.session.host.setTransport(transport);
515
+ },
516
+ onHttpIdleTimeoutMsChange: (timeoutMs) => {
517
+ host.settingsManager.setHttpIdleTimeoutMs(timeoutMs);
518
+ configureHttpDispatcher(timeoutMs);
519
+ host.showStatus(t("HTTP idle timeout: {value}", { value: formatHttpIdleTimeoutMs(timeoutMs) }));
520
+ },
521
+ onModelThinkingLevelChange: (provider, modelId, level) => {
522
+ host.settingsManager.setModelThinkingLevel(provider, modelId, level);
523
+ // If the override is for the current model, apply it to the session too
524
+ const current = host.facade.getModel();
525
+ if (current && current.provider === provider && current.id === modelId) {
526
+ host.facade.setThinkingLevel(level);
527
+ host.footer.invalidate();
528
+ host.updateEditorBorderColor();
529
+ }
530
+ },
531
+ onModelThinkingLevelRemove: (provider, modelId) => {
532
+ host.settingsManager.removeModelThinkingLevel(provider, modelId);
533
+ // If the override was for the current model, revert to global default
534
+ const current = host.facade.getModel();
535
+ if (current && current.provider === provider && current.id === modelId) {
536
+ const globalDefault = host.settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL;
537
+ host.facade.setThinkingLevel(globalDefault);
538
+ host.footer.invalidate();
539
+ host.updateEditorBorderColor();
540
+ }
541
+ },
542
+ onThemeChange: (themeSetting) => {
543
+ host.settingsManager.setTheme(themeSetting);
544
+ void host.themeController.setThemeSetting(themeSetting);
545
+ },
546
+ onThemePreview: (themeName) => host.themeController.preview(themeName),
547
+ onHideThinkingBlockChange: (hidden) => {
548
+ host.hideThinkingBlock = hidden;
549
+ host.settingsManager.setHideThinkingBlock(hidden);
550
+ host.updateThinkingBlockVisibility();
551
+ },
552
+ onMermaidRenderingModeChange: (mode) => {
553
+ host.settingsManager.setMermaidRenderingMode(mode);
554
+ host.chatContainer.invalidate();
555
+ host.ui.requestRender();
556
+ },
557
+ onShowCacheMissNoticesChange: (shown) => {
558
+ host.settingsManager.setShowCacheMissNotices(shown);
559
+ host.rebuildChatFromMessages();
560
+ },
561
+ onCollapseChangelogChange: (collapsed) => {
562
+ host.settingsManager.setCollapseChangelog(collapsed);
563
+ },
564
+ onQuietStartupChange: (enabled) => {
565
+ host.settingsManager.setQuietStartup(enabled);
566
+ },
567
+ onDoubleEscapeActionChange: (action) => {
568
+ host.settingsManager.setDoubleEscapeAction(action);
569
+ },
570
+ onUiLanguageChange: (language) => {
571
+ host.settingsManager.setUiLanguage(language);
572
+ setI18nLanguage(language);
573
+ host.ui.requestRender();
574
+ },
575
+ onTreeFilterModeChange: (mode) => {
576
+ host.settingsManager.setTreeFilterMode(mode);
577
+ },
578
+ onShowHardwareCursorChange: (enabled) => {
579
+ host.settingsManager.setShowHardwareCursor(enabled);
580
+ host.ui.setShowHardwareCursor(enabled);
581
+ },
582
+ onEditorPaddingXChange: (padding) => {
583
+ host.settingsManager.setEditorPaddingX(padding);
584
+ host.defaultEditor.setPaddingX(padding);
585
+ if (host.editor !== host.defaultEditor && host.editor.setPaddingX !== undefined) {
586
+ host.editor.setPaddingX(padding);
587
+ }
588
+ },
589
+ onOutputPadChange: (padding) => {
590
+ host.settingsManager.setOutputPad(padding);
591
+ host.outputPad = padding;
592
+ if (host.streamingComponent || host.facade.isStreaming()) {
593
+ for (const child of host.chatContainer.children) {
594
+ if (child instanceof AssistantMessageComponent ||
595
+ child instanceof CustomMessageComponent ||
596
+ child instanceof UserMessageComponent) {
597
+ child.setOutputPad(padding);
598
+ }
599
+ }
600
+ if (host.streamingComponent) {
601
+ host.streamingComponent.setOutputPad(padding);
602
+ }
603
+ host.ui.requestRender();
604
+ return;
605
+ }
606
+ host.rebuildChatFromMessages();
607
+ },
608
+ onAutocompleteMaxVisibleChange: (maxVisible) => {
609
+ host.settingsManager.setAutocompleteMaxVisible(maxVisible);
610
+ host.defaultEditor.setAutocompleteMaxVisible(maxVisible);
611
+ if (host.editor !== host.defaultEditor && host.editor.setAutocompleteMaxVisible !== undefined) {
612
+ host.editor.setAutocompleteMaxVisible(maxVisible);
613
+ }
614
+ },
615
+ onClearOnShrinkChange: (enabled) => {
616
+ host.settingsManager.setClearOnShrink(enabled);
617
+ host.ui.setClearOnShrink(enabled);
618
+ if (!enabled && !host.activeStatusIndicator) {
619
+ host.statusContainer.clear();
620
+ }
621
+ },
622
+ onShowTerminalProgressChange: (enabled) => {
623
+ host.settingsManager.setShowTerminalProgress(enabled);
624
+ },
625
+ onTuiModeChange: (mode) => {
626
+ if (!host.switchTuiMode(mode)) {
627
+ selector?.getSettingsList().updateValue("tui-mode", host.ui.mode);
628
+ host.showStatus(t("Close active overlays before changing TUI mode"));
629
+ return;
630
+ }
631
+ host.settingsManager.setTuiMode(mode);
632
+ if (!host.activeStatusIndicator)
633
+ host.statusContainer.clear();
634
+ host.showStatus(t("TUI mode: {mode}", { mode }));
635
+ },
636
+ onFullscreenExitOutputChange: (output) => {
637
+ host.settingsManager.setFullscreenExitOutput(output);
638
+ },
639
+ onFullscreenScrollbarChange: (mode) => {
640
+ host.settingsManager.setFullscreenScrollbar(mode);
641
+ host.applyFullscreenScrollbarSetting();
642
+ },
643
+ onFullscreenCopyOnSelectChange: (enabled) => {
644
+ host.settingsManager.setFullscreenCopyOnSelect(enabled);
645
+ if (host.renderer instanceof TuiAltScreen)
646
+ host.renderer.setCopyOnSelect(enabled);
647
+ },
648
+ onFullscreenWheelScrollLinesChange: (lines) => {
649
+ host.settingsManager.setFullscreenWheelScrollLines(lines);
650
+ if (host.renderer instanceof TuiAltScreen)
651
+ host.renderer.setWheelScrollLines(lines);
652
+ },
653
+ onWarningsChange: (warnings) => {
654
+ host.settingsManager.setWarnings(warnings);
655
+ },
656
+ onCancel: () => {
657
+ done();
658
+ host.ui.requestRender();
659
+ },
660
+ });
661
+ return { component: selector, focus: selector.getSettingsList() };
662
+ });
663
+ }
664
+ /**
665
+ * Workflow overlay (§9 L2/L3): read-only panorama + transition log from
666
+ * `workflow.state`/`workflow.transition` entries. Actions are forwarded to
667
+ * the editor as reviewable text; the main agent executes them via
668
+ * workflow_advance (rendering and execution stay separated).
669
+ */
670
+ export function showWorkflowView(host) {
671
+ const hasSnapshot = host.facade
672
+ .getEntries()
673
+ .some((entry) => entry.type === "custom" && entry.customType === "workflow.state");
674
+ if (!hasSnapshot) {
675
+ host.showStatus(t("No workflow in this session"));
676
+ return;
677
+ }
678
+ host.showSelector((done) => {
679
+ const view = new WorkflowViewComponent({
680
+ getEntries: () => host.facade.getEntries(),
681
+ maxRows: Math.max(6, Math.floor(host.ui.terminal.rows / 2)),
682
+ requestRender: () => host.ui.requestRender(),
683
+ });
684
+ view.onClose = done;
685
+ view.onForwardAction = (text) => {
686
+ done();
687
+ host.editor.setText(text);
688
+ host.ui.requestRender();
689
+ host.showStatus(t("Workflow action staged — review in the editor and submit"));
690
+ };
691
+ return { component: view, focus: view, dispose: () => view.dispose() };
692
+ });
693
+ }
694
+ /**
695
+ * Subagent session browser (/agents): read-only list + detail of this
696
+ * session's subagent transcripts from the D-060 §3 on-disk store — the same
697
+ * parent-scoped summary source as the subagent_list model tool (only this
698
+ * session's children, newest first). Detail entries load lazily per
699
+ * session; a failed load renders inside the view instead of throwing.
700
+ */
701
+ export function showAgentsView(host) {
702
+ const agentDir = getAgentDir();
703
+ const sessions = listAgentSessions({ agentDir, parentAgentSession: host.facade.getSessionId() });
704
+ if (sessions.length === 0) {
705
+ host.showStatus(t("No subagent sessions in this session"));
706
+ return;
707
+ }
708
+ host.showSelector((done) => {
709
+ const view = new AgentsViewComponent({
710
+ sessions,
711
+ loadEntries: (sessionId) => readAgentSession({ agentDir, sessionId }),
712
+ maxRows: Math.max(6, Math.floor(host.ui.terminal.rows / 2)),
713
+ requestRender: () => host.ui.requestRender(),
714
+ });
715
+ view.onClose = done;
716
+ return { component: view, focus: view };
717
+ });
718
+ }
719
+ export function showTreeSelector(host, initialSelectedId) {
720
+ const tree = host.facade.getTree();
721
+ const realLeafId = host.facade.getLeafId();
722
+ const initialFilterMode = host.settingsManager.getTreeFilterMode();
723
+ if (tree.length === 0) {
724
+ host.showStatus(t("No entries in session"));
725
+ return;
726
+ }
727
+ host.showSelector((done) => {
728
+ const selector = new TreeSelectorComponent(tree, realLeafId, host.ui.terminal.rows, async (entryId) => {
729
+ // Selecting the current leaf is a no-op (already there)
730
+ if (entryId === host.facade.getLeafId()) {
731
+ done();
732
+ host.showStatus(t("Already at this point"));
733
+ return;
734
+ }
735
+ // Ask about summarization
736
+ done(); // Close selector first
737
+ // Loop until user makes a complete choice or cancels to tree
738
+ let wantsSummary = false;
739
+ let customInstructions;
740
+ // Check if we should skip the prompt (user preference to always default to no summary)
741
+ if (!host.settingsManager.getBranchSummarySkipPrompt()) {
742
+ while (true) {
743
+ const summaryChoice = await host.showDialogSelector(t("Summarize branch?"), [
744
+ t("No summary"),
745
+ t("Summarize"),
746
+ t("Summarize with custom prompt"),
747
+ ]);
748
+ if (summaryChoice === undefined) {
749
+ // User pressed escape - re-show tree selector with same selection
750
+ showTreeSelector(host, entryId);
751
+ return;
752
+ }
753
+ wantsSummary = summaryChoice !== t("No summary");
754
+ if (summaryChoice === t("Summarize with custom prompt")) {
755
+ customInstructions = await host.showDialogEditor(t("Custom summarization instructions"));
756
+ if (customInstructions === undefined) {
757
+ // User cancelled - loop back to summary selector
758
+ continue;
759
+ }
760
+ }
761
+ // User made a complete choice
762
+ break;
763
+ }
764
+ }
765
+ // The user committed to navigating: stop the active response first.
766
+ // 中断分级:导航清场只停回合,不终止后台子代理(设计 §4.2)。
767
+ if (host.facade.isStreaming()) {
768
+ host.restoreQueuedMessagesToEditor();
769
+ await host.facade.abort({ cancelAgentTasks: false });
770
+ }
771
+ // Set up escape handler and status indicator if summarizing
772
+ let showingSummaryIndicator = false;
773
+ const originalOnEscape = host.defaultEditor.onEscape;
774
+ if (wantsSummary) {
775
+ host.defaultEditor.onEscape = () => {
776
+ host.facade.abortBranchSummary();
777
+ };
778
+ host.chatContainer.addChild(new Spacer(1));
779
+ host.showStatusIndicator(new BranchSummaryStatusIndicator(host.ui));
780
+ showingSummaryIndicator = true;
781
+ host.ui.requestRender();
782
+ }
783
+ try {
784
+ const result = await host.facade.navigateTree(entryId, {
785
+ summarize: wantsSummary,
786
+ customInstructions,
787
+ });
788
+ if (result.aborted) {
789
+ // Summarization aborted - re-show tree selector with same selection
790
+ host.showStatus(t("Branch summarization cancelled"));
791
+ showTreeSelector(host, entryId);
792
+ return;
793
+ }
794
+ if (result.cancelled) {
795
+ host.showStatus(t("Navigation cancelled"));
796
+ return;
797
+ }
798
+ // Update UI
799
+ host.chatContainer.clear();
800
+ host.renderInitialMessages();
801
+ if (result.editorText && !host.editor.getText().trim()) {
802
+ host.editor.setText(result.editorText);
803
+ }
804
+ host.showStatus(t("Navigated to selected point"));
805
+ void host.flushCompactionQueue({ willRetry: false });
806
+ }
807
+ catch (error) {
808
+ host.showError(error instanceof Error ? error.message : String(error));
809
+ }
810
+ finally {
811
+ if (showingSummaryIndicator) {
812
+ host.clearStatusIndicator("branchSummary");
813
+ }
814
+ host.defaultEditor.onEscape = originalOnEscape;
815
+ }
816
+ }, () => {
817
+ done();
818
+ host.ui.requestRender();
819
+ }, (entryId, label) => {
820
+ host.facade.appendLabelChange(entryId, label);
821
+ host.ui.requestRender();
822
+ }, initialSelectedId, initialFilterMode);
823
+ selector.onCopy = async (text) => {
824
+ if (!text) {
825
+ host.showError(t("Selected entry has no text to copy"));
826
+ return;
827
+ }
828
+ try {
829
+ await copyToClipboard(text);
830
+ host.showStatus(t("Copied selected message to clipboard"));
831
+ }
832
+ catch (error) {
833
+ host.showError(error instanceof Error ? error.message : String(error));
834
+ }
835
+ };
836
+ return { component: selector, focus: selector };
837
+ });
838
+ }
839
+ export function showSessionSelector(host) {
840
+ host.showSelector((done) => {
841
+ const selector = new SessionSelectorComponent((onProgress, signal) => host.runtimeFacade.listSessions(onProgress, signal), (onProgress, signal) => host.runtimeFacade.listAllSessions(onProgress, signal), async (sessionPath) => {
842
+ done();
843
+ await handleResumeSession(host, sessionPath);
844
+ }, () => {
845
+ done();
846
+ host.ui.requestRender();
847
+ }, () => {
848
+ void host.shutdown();
849
+ }, () => host.ui.requestRender(), {
850
+ renameSession: async (sessionFilePath, nextName) => {
851
+ const next = (nextName ?? "").trim();
852
+ if (!next)
853
+ return;
854
+ const mgr = SessionManager.open(sessionFilePath);
855
+ mgr.appendSessionInfo(next);
856
+ },
857
+ showRenameHint: true,
858
+ keybindings: host.keybindings,
859
+ // 会话选择器默认只列当前方案的会话;跨方案会话仅在显式
860
+ // "show all" 后可见(设计 §10.1)。
861
+ suiteFilter: {
862
+ currentSuiteId: host.getCurrentSessionSuiteId(),
863
+ getSessionSuiteId: (session) => host.readSessionSuiteId(session.path),
864
+ },
865
+ }, host.runtimeFacade.getSessionFile());
866
+ return { component: selector, focus: selector };
867
+ });
868
+ }
869
+ export async function handleResumeSession(host, sessionPath, options) {
870
+ host.clearStatusIndicator();
871
+ try {
872
+ const result = await host.runtimeFacade.switchSession(sessionPath, {
873
+ withSession: options?.withSession,
874
+ });
875
+ if (result.cancelled) {
876
+ return result;
877
+ }
878
+ host.showStatus(t("Resumed session"));
879
+ host.detectCrossSuiteResume();
880
+ return result;
881
+ }
882
+ catch (error) {
883
+ if (error instanceof MissingSessionCwdError) {
884
+ const selectedCwd = await host.promptForMissingSessionCwd(error);
885
+ if (!selectedCwd) {
886
+ host.showStatus(t("Resume cancelled"));
887
+ return { cancelled: true };
888
+ }
889
+ const result = await host.runtimeFacade.switchSession(sessionPath, {
890
+ cwdOverride: selectedCwd,
891
+ withSession: options?.withSession,
892
+ });
893
+ if (result.cancelled) {
894
+ return result;
895
+ }
896
+ host.showStatus(t("Resumed session in current cwd"));
897
+ host.detectCrossSuiteResume();
898
+ return result;
899
+ }
900
+ return host.handleFatalRuntimeError(t("Failed to resume session"), error);
901
+ }
902
+ }
903
+ /**
904
+ * Interactive recovery for an unresolved startup suite id (设计 §9): pick a
905
+ * suite, persist it as the project setting, then rebuild the session with
906
+ * the selected suite via the same /new assembly path. Cancelling keeps the
907
+ * fallback assembly the runtime started with.
908
+ */
909
+ export async function showStartupSuiteSelector(host, pending) {
910
+ const selected = await new Promise((resolve) => {
911
+ openSuiteListSelector(host, {
912
+ availableSuites: pending.available,
913
+ note: t('Suite "{id}" was not found. The selected suite applies to the new session.', {
914
+ id: pending.requestedId,
915
+ }),
916
+ onSelect: (suiteId) => resolve(suiteId),
917
+ onCancel: () => resolve(undefined),
918
+ });
919
+ });
920
+ if (selected === undefined) {
921
+ host.showWarning(t('Suite "{id}" was not found — continuing without a suite. Use /suite to choose one.', {
922
+ id: pending.requestedId,
923
+ }));
924
+ return;
925
+ }
926
+ host.settingsManager.setProjectSuite(selected);
927
+ try {
928
+ await host.runtimeFacade.newSession();
929
+ host.showStatus(t("Suite set to {id} — new session started", { id: selected }));
930
+ }
931
+ catch (error) {
932
+ await host.handleFatalRuntimeError(t("Failed to create session"), error);
933
+ }
934
+ }
424
935
  //# sourceMappingURL=interactive-selectors.js.map