@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 +1 @@
1
- {"version":3,"file":"interactive-selectors.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-selectors.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Selectors for interactive mode (S5 slice 5): the suite, thinking, model,\n * scoped-models, user-message fork, and clone selectors.\n *\n * InteractiveMode implements SelectorsHost and keeps same-name delegate\n * methods so prototype-level tests and the command dispatch table keep\n * working; the functions below receive the mode through SelectorsHost and\n * mount every overlay through the host's selector surface (host.showSelector),\n * mirroring the AuthUiHost pattern in ./interactive-auth.ts. Model snapshot,\n * catalog-refresh, and facade access go through narrow host accessors (D-048:\n * facade projections) so this module never reads session internals directly.\n *\n * Internal collaboration interface (same pattern as AuthUiHost): not a plugin\n * API and not exported from the package root.\n */\nimport type { ThinkingLevel } from \"@agent-forge/agent-core\";\nimport type { Api, Model } from \"@agent-forge/ai/compat\";\nimport type { Component, EditorComponent, TUI } from \"@agent-forge/tui\";\nimport { Container, SelectList, Spacer, Text } from \"@agent-forge/tui\";\nimport { getAgentDir } from \"../../config.ts\";\nimport type { ForkableUserMessage } from \"../../core/agent-session-projection.ts\";\nimport { DEFAULT_THINKING_LEVEL } from \"../../core/defaults.ts\";\nimport type { CodingAgentFacadeV1, CodingAgentRuntimeFacadeV1 } from \"../../core/facade/index.ts\";\nimport { t } from \"../../core/i18n/index.ts\";\nimport { findExactModelReferenceMatch, resolveModelScopeFromModels } from \"../../core/model-resolver.ts\";\nimport type { SettingsManager } from \"../../core/settings-manager.ts\";\nimport { listSuiteIds } from \"../../profiles/suite-loader.ts\";\nimport { DynamicBorder } from \"./components/dynamic-border.ts\";\nimport type { FooterComponent } from \"./components/footer.ts\";\nimport { ModelSelectorComponent } from \"./components/model-selector.ts\";\nimport { QueueManagerSelectorComponent } from \"./components/queue-manager-selector.ts\";\nimport { ScopedModelsSelectorComponent } from \"./components/scoped-models-selector.ts\";\nimport { ThinkingSelectorComponent } from \"./components/thinking-selector.ts\";\nimport { UserMessageSelectorComponent } from \"./components/user-message-selector.ts\";\nimport { type ModelCatalogRuntime, refreshModelCatalogs } from \"./model-catalog-refresh.ts\";\nimport { getSelectListTheme, theme } from \"./theme/theme.ts\";\n\n/** Mount description accepted by the host's selector surface. */\ninterface SelectorMount {\n\tcomponent: Component;\n\tfocus: Component;\n\tdispose?: () => void;\n}\n\n/**\n * Host surface InteractiveMode exposes to this module: the selector entry\n * points (which stay on the mode for dispatch and prototype-level tests) plus\n * narrow accessors for the session runtime, the stable facades, and settings.\n *\n * Internal collaboration interface (same pattern as AuthUiHost): not a plugin\n * API and not exported from the package root.\n */\nexport interface SelectorsHost {\n\tui: TUI;\n\teditor: EditorComponent;\n\tfooter: FooterComponent;\n\tsettingsManager: SettingsManager;\n\t/** Stable facade (阶段 1 slice 1). */\n\tfacade: CodingAgentFacadeV1;\n\t/** Stable runtime facade (阶段 4 slice 3); manager-level session reads stay here (D-041). */\n\truntimeFacade: CodingAgentRuntimeFacadeV1;\n\n\t/** Narrow catalog-refresh projection through the stable facade (D-048). */\n\tgetModelCatalog(): ModelCatalogRuntime;\n\t/** Available model snapshot through the stable facade (D-048). */\n\tgetAvailableModels(): readonly Model<Api>[];\n\t/** Current session's suite id; the read stays on the mode (session entries). */\n\tgetCurrentSessionSuiteId(): string | undefined;\n\t/** Available thinking levels of the current session. */\n\tgetAvailableThinkingLevels(): ThinkingLevel[];\n\t/** Fork candidates of the current session. */\n\tgetUserMessagesForForking(): ForkableUserMessage[];\n\n\t/** Selector surface; the implementation stays in the mode's selector area. */\n\tshowSelector(create: (done: () => void) => SelectorMount): void;\n\t/** Refresh the pending (queued) messages area under the editor. */\n\tupdatePendingMessagesDisplay(): void;\n\tshowStatus(message: string): void;\n\tshowError(message: string): void;\n\tshowWarning(message: string): void;\n\tupdateEditorBorderColor(): void;\n\tupdateAvailableProviderCount(): void;\n\tmaybeWarnAboutAnthropicSubscriptionAuth(model?: Model<Api>): Promise<void>;\n\tcheckDaxnutsEasterEgg(model: { provider: string; id: string }): void;\n}\n\nexport function handleSuiteCommand(host: SelectorsHost, suiteId?: string): void {\n\tconst availableSuites = listSuiteIds(getAgentDir());\n\tif (!suiteId) {\n\t\tshowSuiteSelector(host, availableSuites);\n\t\treturn;\n\t}\n\n\tif (!availableSuites.includes(suiteId)) {\n\t\thost.showError(\n\t\t\tt('Unknown suite \"{suiteId}\". Available suites: {suites}.', {\n\t\t\t\tsuiteId,\n\t\t\t\tsuites: availableSuites.join(\", \"),\n\t\t\t}),\n\t\t);\n\t\treturn;\n\t}\n\n\thost.settingsManager.setProjectSuite(suiteId);\n\t// /new re-resolves the suite from current settings (the runtime factory\n\t// rebuilds services per session), so the pick applies to the very next\n\t// new session — unless the process was started with an explicit suite\n\t// source, which keeps winning for the whole process (设计 §9 precedence).\n\thost.showStatus(\n\t\tt(\n\t\t\t\"Suite set to {suiteId} — applies to the next new session (/new); an explicit --suite or AGENT_FORGE_SUITE startup keeps overriding it\",\n\t\t\t{ suiteId },\n\t\t),\n\t);\n}\n\nexport function showSuiteSelector(host: SelectorsHost, availableSuites: readonly string[]): void {\n\topenSuiteListSelector(host, {\n\t\tavailableSuites,\n\t\tonSelect: (suiteId) => handleSuiteCommand(host, suiteId),\n\t\tonCancel: () => host.ui.requestRender(),\n\t});\n}\n\n/**\n * Shared suite list overlay (设计 §9). Marks and preselects the current\n * session's suite; the caller decides what a selection means.\n */\nexport function openSuiteListSelector(\n\thost: SelectorsHost,\n\tcallbacks: {\n\t\tavailableSuites: readonly string[];\n\t\t/** explanatory line under the title; defaults to the /suite wording */\n\t\tnote?: string;\n\t\tonSelect: (suiteId: string) => void;\n\t\tonCancel: () => void;\n\t},\n): void {\n\thost.showSelector((done) => {\n\t\tconst currentSuiteId = host.getCurrentSessionSuiteId();\n\t\tconst container = new Container();\n\t\tcontainer.addChild(new Spacer(1));\n\t\tcontainer.addChild(new Text(theme.bold(t(\"Select Suite\")), 1, 0));\n\t\tcontainer.addChild(\n\t\t\tnew Text(\n\t\t\t\ttheme.fg(\n\t\t\t\t\t\"muted\",\n\t\t\t\t\tcallbacks.note ??\n\t\t\t\t\t\tt(\"The next new session (/new) uses the selected suite; this session keeps its current suite\"),\n\t\t\t\t),\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t),\n\t\t);\n\t\tcontainer.addChild(new Spacer(1));\n\t\tcontainer.addChild(new DynamicBorder());\n\t\tconst list = new SelectList(\n\t\t\tcallbacks.availableSuites.map((id) => ({\n\t\t\t\tvalue: id,\n\t\t\t\tlabel: id,\n\t\t\t\t...(id === currentSuiteId ? { description: t(\"current session\") } : {}),\n\t\t\t})),\n\t\t\t10,\n\t\t\tgetSelectListTheme(),\n\t\t);\n\t\tif (currentSuiteId !== undefined) {\n\t\t\tconst currentIndex = callbacks.availableSuites.indexOf(currentSuiteId);\n\t\t\tif (currentIndex >= 0) list.setSelectedIndex(currentIndex);\n\t\t}\n\t\tlist.onSelect = (item) => {\n\t\t\tdone();\n\t\t\tcallbacks.onSelect(item.value);\n\t\t};\n\t\tlist.onCancel = () => {\n\t\t\tdone();\n\t\t\tcallbacks.onCancel();\n\t\t};\n\t\tcontainer.addChild(list);\n\t\tcontainer.addChild(new DynamicBorder());\n\t\treturn { component: container, focus: list };\n\t});\n}\n\nexport function handleThinkingCommand(host: SelectorsHost, searchTerm?: string): void {\n\tconst availableLevels = host.getAvailableThinkingLevels();\n\tif (!searchTerm) {\n\t\tshowThinkingSelector(host);\n\t\treturn;\n\t}\n\n\tconst normalized = searchTerm.trim().toLowerCase();\n\tconst level = availableLevels.find((candidate) => candidate.toLowerCase() === normalized);\n\tif (!level) {\n\t\thost.showError(\n\t\t\tt('Unknown thinking level \"{level}\". Available levels: {levels}.', {\n\t\t\t\tlevel: searchTerm,\n\t\t\t\tlevels: availableLevels.join(\", \"),\n\t\t\t}),\n\t\t);\n\t\treturn;\n\t}\n\n\tselectThinkingLevel(host, level, false);\n}\n\nexport function selectThinkingLevel(host: SelectorsHost, level: ThinkingLevel, persist: boolean): void {\n\ttry {\n\t\thost.facade.setThinkingLevel(level, { persist });\n\t\thost.footer.invalidate();\n\t\thost.updateEditorBorderColor();\n\t\thost.showStatus(\n\t\t\tpersist ? t(\"Default thinking level: {level}\", { level }) : t(\"Thinking level: {level}\", { level }),\n\t\t);\n\t} catch (error) {\n\t\thost.showError(error instanceof Error ? error.message : String(error));\n\t}\n}\n\nexport function showThinkingSelector(host: SelectorsHost): void {\n\thost.showSelector((done) => {\n\t\tconst selectLevel = (level: ThinkingLevel, persist: boolean) => {\n\t\t\tselectThinkingLevel(host, level, persist);\n\t\t\tdone();\n\t\t};\n\t\tconst selector = new ThinkingSelectorComponent(\n\t\t\thost.facade.getState().thinkingLevel ?? DEFAULT_THINKING_LEVEL,\n\t\t\thost.getAvailableThinkingLevels(),\n\t\t\t(level) => selectLevel(level, false),\n\t\t\t() => {\n\t\t\t\tdone();\n\t\t\t\thost.ui.requestRender();\n\t\t\t},\n\t\t\t(level) => selectLevel(level, true),\n\t\t\thost.settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL,\n\t\t);\n\t\treturn { component: selector, focus: selector };\n\t});\n}\n\nexport async function handleModelCommand(host: SelectorsHost, searchTerm?: string): Promise<void> {\n\tif (!searchTerm) {\n\t\tshowModelSelector(host);\n\t\treturn;\n\t}\n\n\tconst model = await findExactModelMatch(host, searchTerm);\n\tif (model) {\n\t\ttry {\n\t\t\tawait host.facade.setModel(model, { persist: false });\n\t\t\thost.footer.invalidate();\n\t\t\thost.updateEditorBorderColor();\n\t\t\thost.showStatus(t(\"Model: {id}\", { id: model.id }));\n\t\t\tvoid host.maybeWarnAboutAnthropicSubscriptionAuth(model);\n\t\t\thost.checkDaxnutsEasterEgg(model);\n\t\t} catch (error) {\n\t\t\thost.showError(error instanceof Error ? error.message : String(error));\n\t\t}\n\t\treturn;\n\t}\n\n\tshowModelSelector(host, searchTerm);\n}\n\nexport async function findExactModelMatch(host: SelectorsHost, searchTerm: string): Promise<Model<Api> | undefined> {\n\tconst cachedModels =\n\t\thost.facade.getScopedModels().length > 0\n\t\t\t? host.facade.getScopedModels().map((scoped) => scoped.model)\n\t\t\t: [...host.getAvailableModels()];\n\tconst cachedMatch = findExactModelReferenceMatch(searchTerm, cachedModels);\n\tif (cachedMatch || host.facade.getScopedModels().length > 0) return cachedMatch;\n\n\thost.showStatus(t(\"Refreshing model catalogs…\"));\n\tconst controller = new AbortController();\n\tlet timedOut = false;\n\tconst timeout = setTimeout(() => {\n\t\ttimedOut = true;\n\t\tcontroller.abort();\n\t}, 15_000);\n\ttry {\n\t\tconst result = await refreshModelCatalogs(host.getModelCatalog(), controller.signal);\n\t\tif (result.aborted && timedOut) {\n\t\t\thost.showWarning(t(\"Model refresh timed out; searching cached models.\"));\n\t\t} else if (result.errors.size > 0) {\n\t\t\thost.showWarning(\n\t\t\t\tt(\"Could not refresh {providers}; searching cached models.\", {\n\t\t\t\t\tproviders: [...result.errors.keys()].join(\", \"),\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t} catch (error) {\n\t\thost.showWarning(\n\t\t\ttimedOut\n\t\t\t\t? t(\"Model refresh timed out; searching cached models.\")\n\t\t\t\t: t(\"Could not refresh model catalogs: {message}\", {\n\t\t\t\t\t\tmessage: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t}),\n\t\t);\n\t} finally {\n\t\tclearTimeout(timeout);\n\t}\n\treturn findExactModelReferenceMatch(searchTerm, [...host.getAvailableModels()]);\n}\n\nexport function showModelSelector(host: SelectorsHost, initialSearchInput?: string): void {\n\thost.showSelector((done) => {\n\t\tconst selectModel = async (model: Model<Api>, persist: boolean) => {\n\t\t\ttry {\n\t\t\t\tawait host.facade.setModel(model, { persist });\n\t\t\t\thost.updateAvailableProviderCount();\n\t\t\t\thost.footer.invalidate();\n\t\t\t\thost.updateEditorBorderColor();\n\t\t\t\tdone();\n\t\t\t\thost.showStatus(\n\t\t\t\t\tpersist\n\t\t\t\t\t\t? t(\"Default model: {provider}/{id}\", { provider: model.provider, id: model.id })\n\t\t\t\t\t\t: t(\"Model: {id}\", { id: model.id }),\n\t\t\t\t);\n\t\t\t\tvoid host.maybeWarnAboutAnthropicSubscriptionAuth(model);\n\t\t\t\thost.checkDaxnutsEasterEgg(model);\n\t\t\t} catch (error) {\n\t\t\t\tdone();\n\t\t\t\thost.showError(error instanceof Error ? error.message : String(error));\n\t\t\t}\n\t\t};\n\t\tconst defaultProvider = host.settingsManager.getDefaultProvider();\n\t\tconst defaultModel = host.settingsManager.getDefaultModel();\n\t\tconst selector = new ModelSelectorComponent(\n\t\t\thost.ui,\n\t\t\thost.facade.getModel(),\n\t\t\t{\n\t\t\t\t// D-048: the selector component consumes a narrow read projection;\n\t\t\t\t// the full ModelRuntime never crosses the host boundary.\n\t\t\t\tgetAvailableSnapshot: () => host.getAvailableModels(),\n\t\t\t\tgetError: () => host.facade.getModelsError(),\n\t\t\t\trefresh: (options) => host.getModelCatalog().refresh(options),\n\t\t\t},\n\t\t\thost.facade.getScopedModels(),\n\t\t\t(model) => selectModel(model, false),\n\t\t\t() => {\n\t\t\t\tdone();\n\t\t\t\thost.ui.requestRender();\n\t\t\t},\n\t\t\tinitialSearchInput,\n\t\t\t(model) => selectModel(model, true),\n\t\t\tdefaultProvider && defaultModel ? { provider: defaultProvider, id: defaultModel } : undefined,\n\t\t);\n\t\treturn { component: selector, focus: selector, dispose: () => selector.dispose() };\n\t});\n}\n\nexport function showModelsSelector(host: SelectorsHost): void {\n\tlet availableModels = [...host.getAvailableModels()];\n\tlet availableModelIds = new Set(availableModels.map((model) => `${model.provider}/${model.id}`));\n\tconst configuredPatterns = host.settingsManager.getEnabledModels();\n\tconst sessionScopedModels = host.facade.getScopedModels();\n\tconst configuredEnabledIds = (models: readonly Model<Api>[]): string[] | null => {\n\t\tif (!configuredPatterns?.length) return null;\n\t\tconst resolved = resolveModelScopeFromModels(configuredPatterns, models);\n\t\tconst ids = resolved.scopedModels.map((scoped) => `${scoped.model.provider}/${scoped.model.id}`);\n\t\tfor (const diagnostic of resolved.diagnostics) {\n\t\t\tif (diagnostic.code === \"no-match\" && !ids.includes(diagnostic.pattern)) ids.push(diagnostic.pattern);\n\t\t}\n\t\treturn ids;\n\t};\n\n\tlet currentEnabledIds =\n\t\tsessionScopedModels.length > 0\n\t\t\t? sessionScopedModels.map((scoped) => `${scoped.model.provider}/${scoped.model.id}`)\n\t\t\t: configuredEnabledIds(availableModels);\n\tlet selectionChanged = false;\n\n\tconst updateSessionModels = (enabledIds: string[] | null): void => {\n\t\tcurrentEnabledIds = enabledIds === null ? null : [...enabledIds];\n\t\tconst hasEnabledAvailableModel = enabledIds?.some((id) => availableModelIds.has(id)) ?? false;\n\t\tconst allAvailableModelsEnabled =\n\t\t\tenabledIds !== null && [...availableModelIds].every((id) => enabledIds.includes(id));\n\t\tif (enabledIds && hasEnabledAvailableModel && !allAvailableModelsEnabled) {\n\t\t\tconst newScopedModels = resolveModelScopeFromModels(enabledIds, availableModels).scopedModels;\n\t\t\thost.facade.setScopedModels(\n\t\t\t\tnewScopedModels.map((scoped) => ({\n\t\t\t\t\tmodel: scoped.model,\n\t\t\t\t\tthinkingLevel: scoped.thinkingLevel,\n\t\t\t\t})),\n\t\t\t);\n\t\t} else {\n\t\t\thost.facade.setScopedModels([]);\n\t\t}\n\t\thost.updateAvailableProviderCount();\n\t\thost.ui.requestRender();\n\t};\n\n\thost.showSelector((done) => {\n\t\tlet disposed = false;\n\t\tlet timedOut = false;\n\t\tconst controller = new AbortController();\n\t\tconst timeout = setTimeout(() => {\n\t\t\ttimedOut = true;\n\t\t\tcontroller.abort();\n\t\t}, 15_000);\n\t\tconst selector = new ScopedModelsSelectorComponent(\n\t\t\t{\n\t\t\t\tallModels: availableModels,\n\t\t\t\tenabledModelIds: currentEnabledIds,\n\t\t\t\trefreshStatus: t(\"Refreshing model catalogs…\"),\n\t\t\t},\n\t\t\t{\n\t\t\t\tonChange: (enabledIds) => {\n\t\t\t\t\tselectionChanged = true;\n\t\t\t\t\tupdateSessionModels(enabledIds);\n\t\t\t\t},\n\t\t\t\tonPersist: (enabledIds) => {\n\t\t\t\t\tconst allEnabled =\n\t\t\t\t\t\tenabledIds !== null &&\n\t\t\t\t\t\tenabledIds.length === availableModels.length &&\n\t\t\t\t\t\tenabledIds.every((id) => availableModelIds.has(id));\n\t\t\t\t\tconst newPatterns = enabledIds === null || allEnabled ? undefined : enabledIds;\n\t\t\t\t\thost.settingsManager.setEnabledModels(newPatterns ? [...newPatterns] : undefined);\n\t\t\t\t\thost.showStatus(t(\"Model selection saved to settings\"));\n\t\t\t\t},\n\t\t\t\tonCancel: () => {\n\t\t\t\t\tdone();\n\t\t\t\t\thost.ui.requestRender();\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t\tvoid refreshModelCatalogs(host.getModelCatalog(), controller.signal)\n\t\t\t.then((result) => {\n\t\t\t\tif (disposed) return;\n\t\t\t\tavailableModels = [...host.getAvailableModels()];\n\t\t\t\tavailableModelIds = new Set(availableModels.map((model) => `${model.provider}/${model.id}`));\n\t\t\t\tif (!selectionChanged && sessionScopedModels.length === 0) {\n\t\t\t\t\tcurrentEnabledIds = configuredEnabledIds(availableModels);\n\t\t\t\t\tselector.updateModels(availableModels, currentEnabledIds);\n\t\t\t\t} else {\n\t\t\t\t\tselector.updateModels(availableModels);\n\t\t\t\t}\n\t\t\t\tif (currentEnabledIds !== null) updateSessionModels(currentEnabledIds);\n\t\t\t\tif (result.aborted && timedOut) {\n\t\t\t\t\tselector.setRefreshStatus(t(\"Model refresh timed out; showing cached models.\"), \"warning\");\n\t\t\t\t} else if (result.errors.size > 0) {\n\t\t\t\t\tselector.setRefreshStatus(\n\t\t\t\t\t\tt(\"Could not refresh {providers}; showing cached models.\", {\n\t\t\t\t\t\t\tproviders: [...result.errors.keys()].join(\", \"),\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t\"warning\",\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tselector.setRefreshStatus(t(\"Model catalogs refreshed.\"), \"success\");\n\t\t\t\t}\n\t\t\t\thost.ui.requestRender();\n\t\t\t})\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tif (disposed) return;\n\t\t\t\tselector.setRefreshStatus(\n\t\t\t\t\ttimedOut\n\t\t\t\t\t\t? t(\"Model refresh timed out; showing cached models.\")\n\t\t\t\t\t\t: t(\"Could not refresh model catalogs: {message}\", {\n\t\t\t\t\t\t\t\tmessage: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\"warning\",\n\t\t\t\t);\n\t\t\t\thost.ui.requestRender();\n\t\t\t})\n\t\t\t.finally(() => clearTimeout(timeout));\n\t\treturn {\n\t\t\tcomponent: selector,\n\t\t\tfocus: selector,\n\t\t\tdispose: () => {\n\t\t\t\tdisposed = true;\n\t\t\t\tclearTimeout(timeout);\n\t\t\t\tcontroller.abort();\n\t\t\t},\n\t\t};\n\t});\n}\n\nexport function showUserMessageSelector(host: SelectorsHost): void {\n\tconst userMessages = host.getUserMessagesForForking();\n\n\tif (userMessages.length === 0) {\n\t\thost.showStatus(t(\"No messages to fork from\"));\n\t\treturn;\n\t}\n\n\tconst initialSelectedId = userMessages[userMessages.length - 1]?.entryId;\n\n\thost.showSelector((done) => {\n\t\tconst selector = new UserMessageSelectorComponent(\n\t\t\tuserMessages.map((m) => ({\n\t\t\t\tid: m.entryId,\n\t\t\t\ttext: m.text,\n\t\t\t\t...(m.replySummary === undefined ? {} : { replySummary: m.replySummary }),\n\t\t\t})),\n\t\t\tasync (entryId) => {\n\t\t\t\tdone();\n\t\t\t\t// Restore the selected prompt into the editor even when the fork\n\t\t\t\t// fails, so the user never loses the text they chose (codex\n\t\t\t\t// backtrack precedent: restore_backtrack_prompt_after_revert_error).\n\t\t\t\tconst fallbackText = userMessages.find((m) => m.entryId === entryId)?.text ?? \"\";\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await host.runtimeFacade.fork(entryId);\n\t\t\t\t\tif (result.cancelled) {\n\t\t\t\t\t\thost.ui.requestRender();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\thost.editor.setText(result.selectedText ?? \"\");\n\t\t\t\t\thost.showStatus(t(\"Forked to new session\"));\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\thost.editor.setText(fallbackText);\n\t\t\t\t\thost.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tdone();\n\t\t\t\thost.ui.requestRender();\n\t\t\t},\n\t\t\tinitialSelectedId,\n\t\t);\n\t\treturn { component: selector, focus: selector.getMessageList() };\n\t});\n}\n\n/**\n * Queued-message manager (/queue-list): grouped steering/follow-up entries\n * with in-place reorder, remove, and restore-to-editor. Mutations go through\n * the facade's queue operations; indices follow the facade's queue read view\n * (getSteeringMessages/getFollowUpMessages order).\n */\nexport function showQueueManagerSelector(host: SelectorsHost): void {\n\thost.showSelector((done) => {\n\t\tconst readQueues = (): { steering: string[]; followUp: string[] } => ({\n\t\t\tsteering: [...host.facade.getSteeringMessages()],\n\t\t\tfollowUp: [...host.facade.getFollowUpMessages()],\n\t\t});\n\t\tconst selector = new QueueManagerSelectorComponent(readQueues(), {\n\t\t\trefresh: readQueues,\n\t\t\tonReorder: (queue, from, to) => host.facade.reorderQueuedMessages(queue, from, to),\n\t\t\tonRemove: (queue, index) => host.facade.removeQueuedMessageAt(queue, index),\n\t\t\t// Restore mirrors /dequeue's editor merge order: the restored text\n\t\t\t// first, the surviving editor draft second, joined with a blank line.\n\t\t\tonRestore: (queue, index) => {\n\t\t\t\tconst text = host.facade.removeQueuedMessageAt(queue, index);\n\t\t\t\tif (text === null) return false;\n\t\t\t\tconst currentText = host.editor.getText();\n\t\t\t\tconst combinedText = [text, currentText].filter((part) => part.trim()).join(\"\\n\\n\");\n\t\t\t\thost.editor.setText(combinedText);\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tonClose: () => {\n\t\t\t\tdone();\n\t\t\t\thost.updatePendingMessagesDisplay();\n\t\t\t\thost.ui.requestRender();\n\t\t\t},\n\t\t});\n\t\treturn { component: selector, focus: selector.getMessageList() };\n\t});\n}\n\nexport async function handleCloneCommand(host: SelectorsHost): Promise<void> {\n\tconst leafId = host.facade.getLeafId();\n\tif (!leafId) {\n\t\thost.showStatus(t(\"Nothing to clone yet\"));\n\t\treturn;\n\t}\n\n\ttry {\n\t\tconst result = await host.runtimeFacade.fork(leafId, { position: \"at\" });\n\t\tif (result.cancelled) {\n\t\t\thost.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\n\t\thost.editor.setText(\"\");\n\t\thost.showStatus(t(\"Cloned to new session\"));\n\t} catch (error: unknown) {\n\t\thost.showError(error instanceof Error ? error.message : String(error));\n\t}\n}\n"]}
1
+ {"version":3,"file":"interactive-selectors.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-selectors.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Selectors for interactive mode (S5 slice 5): the suite, thinking, model,\n * scoped-models, user-message fork, and clone selectors. The 拆分 slice 2\n * (docs/plans/interactive-mode拆分计划.md) moved the settings selector, the\n * workflow/agents views, the tree/session selectors, session resume, and the\n * startup-suite recovery selector into this module as well.\n *\n * InteractiveMode implements SelectorsHost and keeps same-name delegate\n * methods so prototype-level tests and the command dispatch table keep\n * working; the functions below receive the mode through SelectorsHost and\n * mount every overlay through the host's selector surface (host.showSelector),\n * mirroring the AuthUiHost pattern in ./interactive-auth.ts. Model snapshot,\n * catalog-refresh, and facade access go through narrow host accessors (D-048:\n * facade projections) so this module never reads session internals directly;\n * the one session touchpoint (transport application) goes through the\n * curated AgentSessionHostSurface (host.session.host.setTransport).\n *\n * Internal collaboration interface (same pattern as AuthUiHost): not a plugin\n * API and not exported from the package root.\n */\nimport type { ThinkingLevel } from \"@agent-forge/agent-core\";\nimport type { Api, Model } from \"@agent-forge/ai/compat\";\nimport type { Component, EditorComponent, TUI, TuiMainScreen } from \"@agent-forge/tui\";\nimport { Container, SelectList, Spacer, Text, TuiAltScreen } from \"@agent-forge/tui\";\nimport { getAgentDir } from \"../../config.ts\";\nimport type { AgentSession } from \"../../core/agent-session.ts\";\nimport type { ForkableUserMessage } from \"../../core/agent-session-projection.ts\";\nimport type { ReplacedSessionContext } from \"../../core/agent-session-runtime.ts\";\nimport { listAgentSessions, readAgentSession } from \"../../core/agent-session-store.ts\";\nimport { DEFAULT_THINKING_LEVEL, THINKING_LEVEL_OPTIONS } from \"../../core/defaults.ts\";\nimport type { InteractionDialogOptions } from \"../../core/extensions/index.ts\";\nimport type { CodingAgentFacadeV1, CodingAgentRuntimeFacadeV1 } from \"../../core/facade/index.ts\";\nimport { configureHttpDispatcher, formatHttpIdleTimeoutMs } from \"../../core/http-dispatcher.ts\";\nimport { setI18nLanguage, t } from \"../../core/i18n/index.ts\";\nimport type { KeybindingsManager } from \"../../core/keybindings.ts\";\nimport { findExactModelReferenceMatch, resolveModelScopeFromModels } from \"../../core/model-resolver.ts\";\nimport { MissingSessionCwdError } from \"../../core/session-cwd.ts\";\nimport { SessionManager } from \"../../core/session-manager.ts\";\nimport type { SettingsManager, TuiMode } from \"../../core/settings-manager.ts\";\nimport { type ModelCatalogRuntime, refreshModelCatalogs } from \"../../host/model-catalog-refresh.ts\";\nimport { listSuiteIds } from \"../../suites/suite-loader.ts\";\nimport { getAvailableThemes, getSelectListTheme, theme } from \"../../theme/theme.ts\";\nimport type { InteractiveThemeController } from \"../../theme/theme-controller.ts\";\nimport { copyToClipboard } from \"../../utils/clipboard.ts\";\nimport { AgentsViewComponent } from \"./components/agents-view.ts\";\nimport { AssistantMessageComponent } from \"./components/assistant-message.ts\";\nimport type { CustomEditor } from \"./components/custom-editor.ts\";\nimport { CustomMessageComponent } from \"./components/custom-message.ts\";\nimport { DynamicBorder } from \"./components/dynamic-border.ts\";\nimport type { FooterComponent } from \"./components/footer.ts\";\nimport { ModelSelectorComponent } from \"./components/model-selector.ts\";\nimport { QueueManagerSelectorComponent } from \"./components/queue-manager-selector.ts\";\nimport { ScopedModelsSelectorComponent } from \"./components/scoped-models-selector.ts\";\nimport { SessionSelectorComponent } from \"./components/session-selector.ts\";\nimport { SettingsSelectorComponent } from \"./components/settings-selector.ts\";\nimport { BranchSummaryStatusIndicator, type StatusIndicator } from \"./components/status-indicator.ts\";\nimport { ThinkingSelectorComponent } from \"./components/thinking-selector.ts\";\nimport { ToolExecutionComponent } from \"./components/tool-execution.ts\";\nimport { TreeSelectorComponent } from \"./components/tree-selector.ts\";\nimport { UserMessageComponent } from \"./components/user-message.ts\";\nimport { UserMessageSelectorComponent } from \"./components/user-message-selector.ts\";\nimport { WorkflowViewComponent } from \"./components/workflow-view.ts\";\n\n/** Mount description accepted by the host's selector surface. */\ninterface SelectorMount {\n\tcomponent: Component;\n\tfocus: Component;\n\tdispose?: () => void;\n}\n\n/**\n * Host surface InteractiveMode exposes to this module: the selector entry\n * points (which stay on the mode for dispatch and prototype-level tests) plus\n * narrow accessors for the session runtime, the stable facades, and settings.\n *\n * Internal collaboration interface (same pattern as AuthUiHost): not a plugin\n * API and not exported from the package root.\n */\nexport interface SelectorsHost {\n\tui: TUI;\n\teditor: EditorComponent;\n\tfooter: FooterComponent;\n\tsettingsManager: SettingsManager;\n\t/** Stable facade (阶段 1 slice 1). */\n\tfacade: CodingAgentFacadeV1;\n\t/** Stable runtime facade (阶段 4 slice 3); manager-level session reads stay here (D-041). */\n\truntimeFacade: CodingAgentRuntimeFacadeV1;\n\n\t/** Narrow catalog-refresh projection through the stable facade (D-048). */\n\tgetModelCatalog(): ModelCatalogRuntime;\n\t/** Available model snapshot through the stable facade (D-048). */\n\tgetAvailableModels(): readonly Model<Api>[];\n\t/** Current session's suite id; the read stays on the mode (session entries). */\n\tgetCurrentSessionSuiteId(): string | undefined;\n\t/** Available thinking levels of the current session. */\n\tgetAvailableThinkingLevels(): ThinkingLevel[];\n\t/** Fork candidates of the current session. */\n\tgetUserMessagesForForking(): ForkableUserMessage[];\n\n\t/** Selector surface; the implementation stays in the mode's selector area. */\n\tshowSelector(create: (done: () => void) => SelectorMount): void;\n\t/** Refresh the pending (queued) messages area under the editor. */\n\tupdatePendingMessagesDisplay(): void;\n\tshowStatus(message: string): void;\n\tshowError(message: string): void;\n\tshowWarning(message: string): void;\n\tupdateEditorBorderColor(): void;\n\tupdateAvailableProviderCount(): void;\n\tmaybeWarnAboutAnthropicSubscriptionAuth(model?: Model<Api>): Promise<void>;\n\tcheckDaxnutsEasterEgg(model: { provider: string; id: string }): void;\n\n\t// Surfaces the 拆分 slice 2 selector/view bodies assemble from.\n\t/** Live session; only its curated AgentSessionHostSurface (setTransport) is consumed here. */\n\treadonly session: AgentSession;\n\t/** Default editor instance (distinct from `editor` while overlays are mounted). */\n\tdefaultEditor: CustomEditor;\n\tchatContainer: Container;\n\tstatusContainer: Container;\n\t/** Active status indicator; TUI-mode and clear-on-shrink callbacks branch on it. */\n\tactiveStatusIndicator: StatusIndicator | undefined;\n\t/** Streaming assistant message component, present while a response renders. */\n\tstreamingComponent: AssistantMessageComponent | undefined;\n\t/** Active renderer; fullscreen settings callbacks probe for TuiAltScreen. */\n\trenderer: TuiMainScreen | TuiAltScreen;\n\tkeybindings: KeybindingsManager;\n\tthemeController: InteractiveThemeController;\n\thideThinkingBlock: boolean;\n\toutputPad: number;\n\n\t// Mode helpers the 拆分 slice 2 selector/view bodies call back into.\n\tswitchTuiMode(mode: TuiMode, restoreProgress?: boolean, startRenderer?: boolean): boolean;\n\tapplyFullscreenScrollbarSetting(): void;\n\tupdateThinkingBlockVisibility(): void;\n\trebuildChatFromMessages(): void;\n\trenderInitialMessages(): void;\n\tshowStatusIndicator(indicator: StatusIndicator): void;\n\tclearStatusIndicator(kind?: StatusIndicator[\"kind\"]): void;\n\trestoreQueuedMessagesToEditor(options?: {\n\t\tabort?: boolean;\n\t\tcancelAgentTasks?: boolean;\n\t\tcurrentText?: string;\n\t}): number;\n\tflushCompactionQueue(options?: { willRetry?: boolean }): Promise<void>;\n\tshowDialogSelector(title: string, options: string[], opts?: InteractionDialogOptions): Promise<string | undefined>;\n\tshowDialogEditor(title: string, prefill?: string): Promise<string | undefined>;\n\t/** Session-suite binding read, cached per path (设计 §10.1). */\n\treadSessionSuiteId(sessionPath: string): string | undefined;\n\t/** Cross-suite resume detection; stays on the mode (the startup path calls it too). */\n\tdetectCrossSuiteResume(): void;\n\tshutdown(options?: { fromSignal?: boolean }): Promise<void>;\n\thandleFatalRuntimeError(title: string, error: unknown): Promise<never>;\n\tpromptForMissingSessionCwd(error: MissingSessionCwdError): Promise<string | undefined>;\n}\n\nexport function handleSuiteCommand(host: SelectorsHost, suiteId?: string): void {\n\tconst availableSuites = listSuiteIds(getAgentDir());\n\tif (!suiteId) {\n\t\tshowSuiteSelector(host, availableSuites);\n\t\treturn;\n\t}\n\n\tif (!availableSuites.includes(suiteId)) {\n\t\thost.showError(\n\t\t\tt('Unknown suite \"{suiteId}\". Available suites: {suites}.', {\n\t\t\t\tsuiteId,\n\t\t\t\tsuites: availableSuites.join(\", \"),\n\t\t\t}),\n\t\t);\n\t\treturn;\n\t}\n\n\thost.settingsManager.setProjectSuite(suiteId);\n\t// /new re-resolves the suite from current settings (the runtime factory\n\t// rebuilds services per session), so the pick applies to the very next\n\t// new session — unless the process was started with an explicit suite\n\t// source, which keeps winning for the whole process (设计 §9 precedence).\n\thost.showStatus(\n\t\tt(\n\t\t\t\"Suite set to {suiteId} — applies to the next new session (/new); an explicit --suite or AGENT_FORGE_SUITE startup keeps overriding it\",\n\t\t\t{ suiteId },\n\t\t),\n\t);\n}\n\nexport function showSuiteSelector(host: SelectorsHost, availableSuites: readonly string[]): void {\n\topenSuiteListSelector(host, {\n\t\tavailableSuites,\n\t\tonSelect: (suiteId) => handleSuiteCommand(host, suiteId),\n\t\tonCancel: () => host.ui.requestRender(),\n\t});\n}\n\n/**\n * Shared suite list overlay (设计 §9). Marks and preselects the current\n * session's suite; the caller decides what a selection means.\n */\nexport function openSuiteListSelector(\n\thost: SelectorsHost,\n\tcallbacks: {\n\t\tavailableSuites: readonly string[];\n\t\t/** explanatory line under the title; defaults to the /suite wording */\n\t\tnote?: string;\n\t\tonSelect: (suiteId: string) => void;\n\t\tonCancel: () => void;\n\t},\n): void {\n\thost.showSelector((done) => {\n\t\tconst currentSuiteId = host.getCurrentSessionSuiteId();\n\t\tconst container = new Container();\n\t\tcontainer.addChild(new Spacer(1));\n\t\tcontainer.addChild(new Text(theme.bold(t(\"Select Suite\")), 1, 0));\n\t\tcontainer.addChild(\n\t\t\tnew Text(\n\t\t\t\ttheme.fg(\n\t\t\t\t\t\"muted\",\n\t\t\t\t\tcallbacks.note ??\n\t\t\t\t\t\tt(\"The next new session (/new) uses the selected suite; this session keeps its current suite\"),\n\t\t\t\t),\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t),\n\t\t);\n\t\tcontainer.addChild(new Spacer(1));\n\t\tcontainer.addChild(new DynamicBorder());\n\t\tconst list = new SelectList(\n\t\t\tcallbacks.availableSuites.map((id) => ({\n\t\t\t\tvalue: id,\n\t\t\t\tlabel: id,\n\t\t\t\t...(id === currentSuiteId ? { description: t(\"current session\") } : {}),\n\t\t\t})),\n\t\t\t10,\n\t\t\tgetSelectListTheme(),\n\t\t);\n\t\tif (currentSuiteId !== undefined) {\n\t\t\tconst currentIndex = callbacks.availableSuites.indexOf(currentSuiteId);\n\t\t\tif (currentIndex >= 0) list.setSelectedIndex(currentIndex);\n\t\t}\n\t\tlist.onSelect = (item) => {\n\t\t\tdone();\n\t\t\tcallbacks.onSelect(item.value);\n\t\t};\n\t\tlist.onCancel = () => {\n\t\t\tdone();\n\t\t\tcallbacks.onCancel();\n\t\t};\n\t\tcontainer.addChild(list);\n\t\tcontainer.addChild(new DynamicBorder());\n\t\treturn { component: container, focus: list };\n\t});\n}\n\nexport function handleThinkingCommand(host: SelectorsHost, searchTerm?: string): void {\n\tconst availableLevels = host.getAvailableThinkingLevels();\n\tif (!searchTerm) {\n\t\tshowThinkingSelector(host);\n\t\treturn;\n\t}\n\n\tconst normalized = searchTerm.trim().toLowerCase();\n\tconst level = availableLevels.find((candidate) => candidate.toLowerCase() === normalized);\n\tif (!level) {\n\t\thost.showError(\n\t\t\tt('Unknown thinking level \"{level}\". Available levels: {levels}.', {\n\t\t\t\tlevel: searchTerm,\n\t\t\t\tlevels: availableLevels.join(\", \"),\n\t\t\t}),\n\t\t);\n\t\treturn;\n\t}\n\n\tselectThinkingLevel(host, level, false);\n}\n\nexport function selectThinkingLevel(host: SelectorsHost, level: ThinkingLevel, persist: boolean): void {\n\ttry {\n\t\thost.facade.setThinkingLevel(level, { persist });\n\t\thost.footer.invalidate();\n\t\thost.updateEditorBorderColor();\n\t\thost.showStatus(\n\t\t\tpersist ? t(\"Default thinking level: {level}\", { level }) : t(\"Thinking level: {level}\", { level }),\n\t\t);\n\t} catch (error) {\n\t\thost.showError(error instanceof Error ? error.message : String(error));\n\t}\n}\n\nexport function showThinkingSelector(host: SelectorsHost): void {\n\thost.showSelector((done) => {\n\t\tconst selectLevel = (level: ThinkingLevel, persist: boolean) => {\n\t\t\tselectThinkingLevel(host, level, persist);\n\t\t\tdone();\n\t\t};\n\t\tconst selector = new ThinkingSelectorComponent(\n\t\t\thost.facade.getState().thinkingLevel ?? DEFAULT_THINKING_LEVEL,\n\t\t\thost.getAvailableThinkingLevels(),\n\t\t\t(level) => selectLevel(level, false),\n\t\t\t() => {\n\t\t\t\tdone();\n\t\t\t\thost.ui.requestRender();\n\t\t\t},\n\t\t\t(level) => selectLevel(level, true),\n\t\t\thost.settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL,\n\t\t);\n\t\treturn { component: selector, focus: selector };\n\t});\n}\n\nexport async function handleModelCommand(host: SelectorsHost, searchTerm?: string): Promise<void> {\n\tif (!searchTerm) {\n\t\tshowModelSelector(host);\n\t\treturn;\n\t}\n\n\tconst model = await findExactModelMatch(host, searchTerm);\n\tif (model) {\n\t\ttry {\n\t\t\tawait host.facade.setModel(model, { persist: false });\n\t\t\thost.footer.invalidate();\n\t\t\thost.updateEditorBorderColor();\n\t\t\thost.showStatus(t(\"Model: {id}\", { id: model.id }));\n\t\t\tvoid host.maybeWarnAboutAnthropicSubscriptionAuth(model);\n\t\t\thost.checkDaxnutsEasterEgg(model);\n\t\t} catch (error) {\n\t\t\thost.showError(error instanceof Error ? error.message : String(error));\n\t\t}\n\t\treturn;\n\t}\n\n\tshowModelSelector(host, searchTerm);\n}\n\nexport async function findExactModelMatch(host: SelectorsHost, searchTerm: string): Promise<Model<Api> | undefined> {\n\tconst cachedModels =\n\t\thost.facade.getScopedModels().length > 0\n\t\t\t? host.facade.getScopedModels().map((scoped) => scoped.model)\n\t\t\t: [...host.getAvailableModels()];\n\tconst cachedMatch = findExactModelReferenceMatch(searchTerm, cachedModels);\n\tif (cachedMatch || host.facade.getScopedModels().length > 0) return cachedMatch;\n\n\thost.showStatus(t(\"Refreshing model catalogs…\"));\n\tconst controller = new AbortController();\n\tlet timedOut = false;\n\tconst timeout = setTimeout(() => {\n\t\ttimedOut = true;\n\t\tcontroller.abort();\n\t}, 15_000);\n\ttry {\n\t\tconst result = await refreshModelCatalogs(host.getModelCatalog(), controller.signal);\n\t\tif (result.aborted && timedOut) {\n\t\t\thost.showWarning(t(\"Model refresh timed out; searching cached models.\"));\n\t\t} else if (result.errors.size > 0) {\n\t\t\thost.showWarning(\n\t\t\t\tt(\"Could not refresh {providers}; searching cached models.\", {\n\t\t\t\t\tproviders: [...result.errors.keys()].join(\", \"),\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t} catch (error) {\n\t\thost.showWarning(\n\t\t\ttimedOut\n\t\t\t\t? t(\"Model refresh timed out; searching cached models.\")\n\t\t\t\t: t(\"Could not refresh model catalogs: {message}\", {\n\t\t\t\t\t\tmessage: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t}),\n\t\t);\n\t} finally {\n\t\tclearTimeout(timeout);\n\t}\n\treturn findExactModelReferenceMatch(searchTerm, [...host.getAvailableModels()]);\n}\n\nexport function showModelSelector(host: SelectorsHost, initialSearchInput?: string): void {\n\thost.showSelector((done) => {\n\t\tconst selectModel = async (model: Model<Api>, persist: boolean) => {\n\t\t\ttry {\n\t\t\t\tawait host.facade.setModel(model, { persist });\n\t\t\t\thost.updateAvailableProviderCount();\n\t\t\t\thost.footer.invalidate();\n\t\t\t\thost.updateEditorBorderColor();\n\t\t\t\tdone();\n\t\t\t\thost.showStatus(\n\t\t\t\t\tpersist\n\t\t\t\t\t\t? t(\"Default model: {provider}/{id}\", { provider: model.provider, id: model.id })\n\t\t\t\t\t\t: t(\"Model: {id}\", { id: model.id }),\n\t\t\t\t);\n\t\t\t\tvoid host.maybeWarnAboutAnthropicSubscriptionAuth(model);\n\t\t\t\thost.checkDaxnutsEasterEgg(model);\n\t\t\t} catch (error) {\n\t\t\t\tdone();\n\t\t\t\thost.showError(error instanceof Error ? error.message : String(error));\n\t\t\t}\n\t\t};\n\t\tconst defaultProvider = host.settingsManager.getDefaultProvider();\n\t\tconst defaultModel = host.settingsManager.getDefaultModel();\n\t\tconst selector = new ModelSelectorComponent(\n\t\t\thost.ui,\n\t\t\thost.facade.getModel(),\n\t\t\t{\n\t\t\t\t// D-048: the selector component consumes a narrow read projection;\n\t\t\t\t// the full ModelRuntime never crosses the host boundary.\n\t\t\t\tgetAvailableSnapshot: () => host.getAvailableModels(),\n\t\t\t\tgetError: () => host.facade.getModelsError(),\n\t\t\t\trefresh: (options) => host.getModelCatalog().refresh(options),\n\t\t\t},\n\t\t\thost.facade.getScopedModels(),\n\t\t\t(model) => selectModel(model, false),\n\t\t\t() => {\n\t\t\t\tdone();\n\t\t\t\thost.ui.requestRender();\n\t\t\t},\n\t\t\tinitialSearchInput,\n\t\t\t(model) => selectModel(model, true),\n\t\t\tdefaultProvider && defaultModel ? { provider: defaultProvider, id: defaultModel } : undefined,\n\t\t);\n\t\treturn { component: selector, focus: selector, dispose: () => selector.dispose() };\n\t});\n}\n\nexport function showModelsSelector(host: SelectorsHost): void {\n\tlet availableModels = [...host.getAvailableModels()];\n\tlet availableModelIds = new Set(availableModels.map((model) => `${model.provider}/${model.id}`));\n\tconst configuredPatterns = host.settingsManager.getEnabledModels();\n\tconst sessionScopedModels = host.facade.getScopedModels();\n\tconst configuredEnabledIds = (models: readonly Model<Api>[]): string[] | null => {\n\t\tif (!configuredPatterns?.length) return null;\n\t\tconst resolved = resolveModelScopeFromModels(configuredPatterns, models);\n\t\tconst ids = resolved.scopedModels.map((scoped) => `${scoped.model.provider}/${scoped.model.id}`);\n\t\tfor (const diagnostic of resolved.diagnostics) {\n\t\t\tif (diagnostic.code === \"no-match\" && !ids.includes(diagnostic.pattern)) ids.push(diagnostic.pattern);\n\t\t}\n\t\treturn ids;\n\t};\n\n\tlet currentEnabledIds =\n\t\tsessionScopedModels.length > 0\n\t\t\t? sessionScopedModels.map((scoped) => `${scoped.model.provider}/${scoped.model.id}`)\n\t\t\t: configuredEnabledIds(availableModels);\n\tlet selectionChanged = false;\n\n\tconst updateSessionModels = (enabledIds: string[] | null): void => {\n\t\tcurrentEnabledIds = enabledIds === null ? null : [...enabledIds];\n\t\tconst hasEnabledAvailableModel = enabledIds?.some((id) => availableModelIds.has(id)) ?? false;\n\t\tconst allAvailableModelsEnabled =\n\t\t\tenabledIds !== null && [...availableModelIds].every((id) => enabledIds.includes(id));\n\t\tif (enabledIds && hasEnabledAvailableModel && !allAvailableModelsEnabled) {\n\t\t\tconst newScopedModels = resolveModelScopeFromModels(enabledIds, availableModels).scopedModels;\n\t\t\thost.facade.setScopedModels(\n\t\t\t\tnewScopedModels.map((scoped) => ({\n\t\t\t\t\tmodel: scoped.model,\n\t\t\t\t\tthinkingLevel: scoped.thinkingLevel,\n\t\t\t\t})),\n\t\t\t);\n\t\t} else {\n\t\t\thost.facade.setScopedModels([]);\n\t\t}\n\t\thost.updateAvailableProviderCount();\n\t\thost.ui.requestRender();\n\t};\n\n\thost.showSelector((done) => {\n\t\tlet disposed = false;\n\t\tlet timedOut = false;\n\t\tconst controller = new AbortController();\n\t\tconst timeout = setTimeout(() => {\n\t\t\ttimedOut = true;\n\t\t\tcontroller.abort();\n\t\t}, 15_000);\n\t\tconst selector = new ScopedModelsSelectorComponent(\n\t\t\t{\n\t\t\t\tallModels: availableModels,\n\t\t\t\tenabledModelIds: currentEnabledIds,\n\t\t\t\trefreshStatus: t(\"Refreshing model catalogs…\"),\n\t\t\t},\n\t\t\t{\n\t\t\t\tonChange: (enabledIds) => {\n\t\t\t\t\tselectionChanged = true;\n\t\t\t\t\tupdateSessionModels(enabledIds);\n\t\t\t\t},\n\t\t\t\tonPersist: (enabledIds) => {\n\t\t\t\t\tconst allEnabled =\n\t\t\t\t\t\tenabledIds !== null &&\n\t\t\t\t\t\tenabledIds.length === availableModels.length &&\n\t\t\t\t\t\tenabledIds.every((id) => availableModelIds.has(id));\n\t\t\t\t\tconst newPatterns = enabledIds === null || allEnabled ? undefined : enabledIds;\n\t\t\t\t\thost.settingsManager.setEnabledModels(newPatterns ? [...newPatterns] : undefined);\n\t\t\t\t\thost.showStatus(t(\"Model selection saved to settings\"));\n\t\t\t\t},\n\t\t\t\tonCancel: () => {\n\t\t\t\t\tdone();\n\t\t\t\t\thost.ui.requestRender();\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t\tvoid refreshModelCatalogs(host.getModelCatalog(), controller.signal)\n\t\t\t.then((result) => {\n\t\t\t\tif (disposed) return;\n\t\t\t\tavailableModels = [...host.getAvailableModels()];\n\t\t\t\tavailableModelIds = new Set(availableModels.map((model) => `${model.provider}/${model.id}`));\n\t\t\t\tif (!selectionChanged && sessionScopedModels.length === 0) {\n\t\t\t\t\tcurrentEnabledIds = configuredEnabledIds(availableModels);\n\t\t\t\t\tselector.updateModels(availableModels, currentEnabledIds);\n\t\t\t\t} else {\n\t\t\t\t\tselector.updateModels(availableModels);\n\t\t\t\t}\n\t\t\t\tif (currentEnabledIds !== null) updateSessionModels(currentEnabledIds);\n\t\t\t\tif (result.aborted && timedOut) {\n\t\t\t\t\tselector.setRefreshStatus(t(\"Model refresh timed out; showing cached models.\"), \"warning\");\n\t\t\t\t} else if (result.errors.size > 0) {\n\t\t\t\t\tselector.setRefreshStatus(\n\t\t\t\t\t\tt(\"Could not refresh {providers}; showing cached models.\", {\n\t\t\t\t\t\t\tproviders: [...result.errors.keys()].join(\", \"),\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t\"warning\",\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tselector.setRefreshStatus(t(\"Model catalogs refreshed.\"), \"success\");\n\t\t\t\t}\n\t\t\t\thost.ui.requestRender();\n\t\t\t})\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tif (disposed) return;\n\t\t\t\tselector.setRefreshStatus(\n\t\t\t\t\ttimedOut\n\t\t\t\t\t\t? t(\"Model refresh timed out; showing cached models.\")\n\t\t\t\t\t\t: t(\"Could not refresh model catalogs: {message}\", {\n\t\t\t\t\t\t\t\tmessage: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\"warning\",\n\t\t\t\t);\n\t\t\t\thost.ui.requestRender();\n\t\t\t})\n\t\t\t.finally(() => clearTimeout(timeout));\n\t\treturn {\n\t\t\tcomponent: selector,\n\t\t\tfocus: selector,\n\t\t\tdispose: () => {\n\t\t\t\tdisposed = true;\n\t\t\t\tclearTimeout(timeout);\n\t\t\t\tcontroller.abort();\n\t\t\t},\n\t\t};\n\t});\n}\n\nexport function showUserMessageSelector(host: SelectorsHost): void {\n\tconst userMessages = host.getUserMessagesForForking();\n\n\tif (userMessages.length === 0) {\n\t\thost.showStatus(t(\"No messages to fork from\"));\n\t\treturn;\n\t}\n\n\tconst initialSelectedId = userMessages[userMessages.length - 1]?.entryId;\n\n\thost.showSelector((done) => {\n\t\tconst selector = new UserMessageSelectorComponent(\n\t\t\tuserMessages.map((m) => ({\n\t\t\t\tid: m.entryId,\n\t\t\t\ttext: m.text,\n\t\t\t\t...(m.replySummary === undefined ? {} : { replySummary: m.replySummary }),\n\t\t\t})),\n\t\t\tasync (entryId) => {\n\t\t\t\tdone();\n\t\t\t\t// Restore the selected prompt into the editor even when the fork\n\t\t\t\t// fails, so the user never loses the text they chose (codex\n\t\t\t\t// backtrack precedent: restore_backtrack_prompt_after_revert_error).\n\t\t\t\tconst fallbackText = userMessages.find((m) => m.entryId === entryId)?.text ?? \"\";\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await host.runtimeFacade.fork(entryId);\n\t\t\t\t\tif (result.cancelled) {\n\t\t\t\t\t\thost.ui.requestRender();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\thost.editor.setText(result.selectedText ?? \"\");\n\t\t\t\t\thost.showStatus(t(\"Forked to new session\"));\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\thost.editor.setText(fallbackText);\n\t\t\t\t\thost.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tdone();\n\t\t\t\thost.ui.requestRender();\n\t\t\t},\n\t\t\tinitialSelectedId,\n\t\t);\n\t\treturn { component: selector, focus: selector.getMessageList() };\n\t});\n}\n\n/**\n * Queued-message manager (/queue-list): grouped steering/follow-up entries\n * with in-place reorder, remove, and restore-to-editor. Mutations go through\n * the facade's queue operations; indices follow the facade's queue read view\n * (getSteeringMessages/getFollowUpMessages order).\n */\nexport function showQueueManagerSelector(host: SelectorsHost): void {\n\thost.showSelector((done) => {\n\t\tconst readQueues = (): { steering: string[]; followUp: string[] } => ({\n\t\t\tsteering: [...host.facade.getSteeringMessages()],\n\t\t\tfollowUp: [...host.facade.getFollowUpMessages()],\n\t\t});\n\t\tconst selector = new QueueManagerSelectorComponent(readQueues(), {\n\t\t\trefresh: readQueues,\n\t\t\tonReorder: (queue, from, to) => host.facade.reorderQueuedMessages(queue, from, to),\n\t\t\tonRemove: (queue, index) => host.facade.removeQueuedMessageAt(queue, index),\n\t\t\t// Restore mirrors /dequeue's editor merge order: the restored text\n\t\t\t// first, the surviving editor draft second, joined with a blank line.\n\t\t\tonRestore: (queue, index) => {\n\t\t\t\tconst text = host.facade.removeQueuedMessageAt(queue, index);\n\t\t\t\tif (text === null) return false;\n\t\t\t\tconst currentText = host.editor.getText();\n\t\t\t\tconst combinedText = [text, currentText].filter((part) => part.trim()).join(\"\\n\\n\");\n\t\t\t\thost.editor.setText(combinedText);\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tonClose: () => {\n\t\t\t\tdone();\n\t\t\t\thost.updatePendingMessagesDisplay();\n\t\t\t\thost.ui.requestRender();\n\t\t\t},\n\t\t});\n\t\treturn { component: selector, focus: selector.getMessageList() };\n\t});\n}\n\nexport async function handleCloneCommand(host: SelectorsHost): Promise<void> {\n\tconst leafId = host.facade.getLeafId();\n\tif (!leafId) {\n\t\thost.showStatus(t(\"Nothing to clone yet\"));\n\t\treturn;\n\t}\n\n\ttry {\n\t\tconst result = await host.runtimeFacade.fork(leafId, { position: \"at\" });\n\t\tif (result.cancelled) {\n\t\t\thost.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\n\t\thost.editor.setText(\"\");\n\t\thost.showStatus(t(\"Cloned to new session\"));\n\t} catch (error: unknown) {\n\t\thost.showError(error instanceof Error ? error.message : String(error));\n\t}\n}\n\nexport function showSettingsSelector(host: SelectorsHost): void {\n\thost.showSelector((done) => {\n\t\tlet selector: SettingsSelectorComponent | undefined;\n\t\tconst defaultProvider = host.settingsManager.getDefaultProvider();\n\t\tconst defaultModelId = host.settingsManager.getDefaultModel();\n\t\tconst defaultModel = defaultProvider && defaultModelId ? `${defaultProvider}/${defaultModelId}` : t(\"not set\");\n\t\tselector = new SettingsSelectorComponent(\n\t\t\t{\n\t\t\t\tdefaultModel,\n\t\t\t\tcurrentModel: host.facade.getModel(),\n\t\t\t\tavailableDefaultModels: host.facade.getAvailableModels(),\n\t\t\t\tshowImages: host.settingsManager.getShowImages(),\n\t\t\t\timageWidthCells: host.settingsManager.getImageWidthCells(),\n\t\t\t\tautoResizeImages: host.settingsManager.getImageAutoResize(),\n\t\t\t\tblockImages: host.settingsManager.getBlockImages(),\n\t\t\t\tsteeringMode: host.facade.getSteeringMode(),\n\t\t\t\tfollowUpMode: host.facade.getFollowUpMode(),\n\t\t\t\ttransport: host.settingsManager.getTransport(),\n\t\t\t\thttpIdleTimeoutMs: host.settingsManager.getHttpIdleTimeoutMs(),\n\t\t\t\tthinkingLevel: host.settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL,\n\t\t\t\tavailableThinkingLevels: [...THINKING_LEVEL_OPTIONS],\n\t\t\t\tmodelThinkingLevels: host.settingsManager.getAllModelThinkingLevels(),\n\t\t\t\tcurrentTheme: host.themeController.getThemeSelection() || \"dark\",\n\t\t\t\tterminalTheme: host.themeController.getTerminalTheme(),\n\t\t\t\tavailableThemes: getAvailableThemes(),\n\t\t\t\thideThinkingBlock: host.hideThinkingBlock,\n\t\t\t\tmermaidRenderingMode: host.settingsManager.getMermaidRenderingMode(),\n\t\t\t\tcollapseChangelog: host.settingsManager.getCollapseChangelog(),\n\t\t\t\tdoubleEscapeAction: host.settingsManager.getDoubleEscapeAction(),\n\t\t\t\tuiLanguage: host.settingsManager.getUiLanguage(),\n\t\t\t\ttreeFilterMode: host.settingsManager.getTreeFilterMode(),\n\t\t\t\tshowHardwareCursor: host.settingsManager.getShowHardwareCursor(),\n\t\t\t\tshowCacheMissNotices: host.settingsManager.getShowCacheMissNotices(),\n\t\t\t\teditorPaddingX: host.settingsManager.getEditorPaddingX(),\n\t\t\t\toutputPad: host.settingsManager.getOutputPad(),\n\t\t\t\tautocompleteMaxVisible: host.settingsManager.getAutocompleteMaxVisible(),\n\t\t\t\tquietStartup: host.settingsManager.getQuietStartup(),\n\t\t\t\tclearOnShrink: host.settingsManager.getClearOnShrink(),\n\t\t\t\tshowTerminalProgress: host.settingsManager.getShowTerminalProgress(),\n\t\t\t\ttuiMode: host.ui.mode,\n\t\t\t\tfullscreenExitOutput: host.settingsManager.getFullscreenExitOutput(),\n\t\t\t\tfullscreenScrollbar: host.settingsManager.getFullscreenScrollbar(),\n\t\t\t\tfullscreenCopyOnSelect: host.settingsManager.getFullscreenCopyOnSelect(),\n\t\t\t\tfullscreenWheelScrollLines: host.settingsManager.getFullscreenWheelScrollLines(),\n\t\t\t\twarnings: host.settingsManager.getWarnings(),\n\t\t\t},\n\t\t\t{\n\t\t\t\tonShowImagesChange: (enabled) => {\n\t\t\t\t\thost.settingsManager.setShowImages(enabled);\n\t\t\t\t\tfor (const child of host.chatContainer.children) {\n\t\t\t\t\t\tif (child instanceof ToolExecutionComponent) {\n\t\t\t\t\t\t\tchild.setShowImages(enabled);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonImageWidthCellsChange: (width) => {\n\t\t\t\t\thost.settingsManager.setImageWidthCells(width);\n\t\t\t\t\tfor (const child of host.chatContainer.children) {\n\t\t\t\t\t\tif (child instanceof ToolExecutionComponent) {\n\t\t\t\t\t\t\tchild.setImageWidthCells(width);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonAutoResizeImagesChange: (enabled) => {\n\t\t\t\t\thost.settingsManager.setImageAutoResize(enabled);\n\t\t\t\t},\n\t\t\t\tonBlockImagesChange: (blocked) => {\n\t\t\t\t\thost.settingsManager.setBlockImages(blocked);\n\t\t\t\t},\n\t\t\t\tonSteeringModeChange: (mode) => {\n\t\t\t\t\thost.facade.setSteeringMode(mode);\n\t\t\t\t},\n\t\t\t\tonFollowUpModeChange: (mode) => {\n\t\t\t\t\thost.facade.setFollowUpMode(mode);\n\t\t\t\t},\n\t\t\t\tonTransportChange: (transport) => {\n\t\t\t\t\thost.settingsManager.setTransport(transport);\n\t\t\t\t\thost.session.host.setTransport(transport);\n\t\t\t\t},\n\t\t\t\tonHttpIdleTimeoutMsChange: (timeoutMs) => {\n\t\t\t\t\thost.settingsManager.setHttpIdleTimeoutMs(timeoutMs);\n\t\t\t\t\tconfigureHttpDispatcher(timeoutMs);\n\t\t\t\t\thost.showStatus(t(\"HTTP idle timeout: {value}\", { value: formatHttpIdleTimeoutMs(timeoutMs) }));\n\t\t\t\t},\n\t\t\t\tonModelThinkingLevelChange: (provider, modelId, level) => {\n\t\t\t\t\thost.settingsManager.setModelThinkingLevel(provider, modelId, level);\n\t\t\t\t\t// If the override is for the current model, apply it to the session too\n\t\t\t\t\tconst current = host.facade.getModel();\n\t\t\t\t\tif (current && current.provider === provider && current.id === modelId) {\n\t\t\t\t\t\thost.facade.setThinkingLevel(level);\n\t\t\t\t\t\thost.footer.invalidate();\n\t\t\t\t\t\thost.updateEditorBorderColor();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonModelThinkingLevelRemove: (provider, modelId) => {\n\t\t\t\t\thost.settingsManager.removeModelThinkingLevel(provider, modelId);\n\t\t\t\t\t// If the override was for the current model, revert to global default\n\t\t\t\t\tconst current = host.facade.getModel();\n\t\t\t\t\tif (current && current.provider === provider && current.id === modelId) {\n\t\t\t\t\t\tconst globalDefault = host.settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL;\n\t\t\t\t\t\thost.facade.setThinkingLevel(globalDefault);\n\t\t\t\t\t\thost.footer.invalidate();\n\t\t\t\t\t\thost.updateEditorBorderColor();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonThemeChange: (themeSetting) => {\n\t\t\t\t\thost.settingsManager.setTheme(themeSetting);\n\t\t\t\t\tvoid host.themeController.setThemeSetting(themeSetting);\n\t\t\t\t},\n\t\t\t\tonThemePreview: (themeName) => host.themeController.preview(themeName),\n\t\t\t\tonHideThinkingBlockChange: (hidden) => {\n\t\t\t\t\thost.hideThinkingBlock = hidden;\n\t\t\t\t\thost.settingsManager.setHideThinkingBlock(hidden);\n\t\t\t\t\thost.updateThinkingBlockVisibility();\n\t\t\t\t},\n\t\t\t\tonMermaidRenderingModeChange: (mode) => {\n\t\t\t\t\thost.settingsManager.setMermaidRenderingMode(mode);\n\t\t\t\t\thost.chatContainer.invalidate();\n\t\t\t\t\thost.ui.requestRender();\n\t\t\t\t},\n\t\t\t\tonShowCacheMissNoticesChange: (shown) => {\n\t\t\t\t\thost.settingsManager.setShowCacheMissNotices(shown);\n\t\t\t\t\thost.rebuildChatFromMessages();\n\t\t\t\t},\n\t\t\t\tonCollapseChangelogChange: (collapsed) => {\n\t\t\t\t\thost.settingsManager.setCollapseChangelog(collapsed);\n\t\t\t\t},\n\t\t\t\tonQuietStartupChange: (enabled) => {\n\t\t\t\t\thost.settingsManager.setQuietStartup(enabled);\n\t\t\t\t},\n\t\t\t\tonDoubleEscapeActionChange: (action) => {\n\t\t\t\t\thost.settingsManager.setDoubleEscapeAction(action);\n\t\t\t\t},\n\t\t\t\tonUiLanguageChange: (language) => {\n\t\t\t\t\thost.settingsManager.setUiLanguage(language);\n\t\t\t\t\tsetI18nLanguage(language);\n\t\t\t\t\thost.ui.requestRender();\n\t\t\t\t},\n\t\t\t\tonTreeFilterModeChange: (mode) => {\n\t\t\t\t\thost.settingsManager.setTreeFilterMode(mode);\n\t\t\t\t},\n\t\t\t\tonShowHardwareCursorChange: (enabled) => {\n\t\t\t\t\thost.settingsManager.setShowHardwareCursor(enabled);\n\t\t\t\t\thost.ui.setShowHardwareCursor(enabled);\n\t\t\t\t},\n\t\t\t\tonEditorPaddingXChange: (padding) => {\n\t\t\t\t\thost.settingsManager.setEditorPaddingX(padding);\n\t\t\t\t\thost.defaultEditor.setPaddingX(padding);\n\t\t\t\t\tif (host.editor !== host.defaultEditor && host.editor.setPaddingX !== undefined) {\n\t\t\t\t\t\thost.editor.setPaddingX(padding);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonOutputPadChange: (padding) => {\n\t\t\t\t\thost.settingsManager.setOutputPad(padding);\n\t\t\t\t\thost.outputPad = padding;\n\t\t\t\t\tif (host.streamingComponent || host.facade.isStreaming()) {\n\t\t\t\t\t\tfor (const child of host.chatContainer.children) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tchild instanceof AssistantMessageComponent ||\n\t\t\t\t\t\t\t\tchild instanceof CustomMessageComponent ||\n\t\t\t\t\t\t\t\tchild instanceof UserMessageComponent\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tchild.setOutputPad(padding);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (host.streamingComponent) {\n\t\t\t\t\t\t\thost.streamingComponent.setOutputPad(padding);\n\t\t\t\t\t\t}\n\t\t\t\t\t\thost.ui.requestRender();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\thost.rebuildChatFromMessages();\n\t\t\t\t},\n\t\t\t\tonAutocompleteMaxVisibleChange: (maxVisible) => {\n\t\t\t\t\thost.settingsManager.setAutocompleteMaxVisible(maxVisible);\n\t\t\t\t\thost.defaultEditor.setAutocompleteMaxVisible(maxVisible);\n\t\t\t\t\tif (host.editor !== host.defaultEditor && host.editor.setAutocompleteMaxVisible !== undefined) {\n\t\t\t\t\t\thost.editor.setAutocompleteMaxVisible(maxVisible);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonClearOnShrinkChange: (enabled) => {\n\t\t\t\t\thost.settingsManager.setClearOnShrink(enabled);\n\t\t\t\t\thost.ui.setClearOnShrink(enabled);\n\t\t\t\t\tif (!enabled && !host.activeStatusIndicator) {\n\t\t\t\t\t\thost.statusContainer.clear();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonShowTerminalProgressChange: (enabled) => {\n\t\t\t\t\thost.settingsManager.setShowTerminalProgress(enabled);\n\t\t\t\t},\n\t\t\t\tonTuiModeChange: (mode) => {\n\t\t\t\t\tif (!host.switchTuiMode(mode)) {\n\t\t\t\t\t\tselector?.getSettingsList().updateValue(\"tui-mode\", host.ui.mode);\n\t\t\t\t\t\thost.showStatus(t(\"Close active overlays before changing TUI mode\"));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\thost.settingsManager.setTuiMode(mode);\n\t\t\t\t\tif (!host.activeStatusIndicator) host.statusContainer.clear();\n\t\t\t\t\thost.showStatus(t(\"TUI mode: {mode}\", { mode }));\n\t\t\t\t},\n\t\t\t\tonFullscreenExitOutputChange: (output) => {\n\t\t\t\t\thost.settingsManager.setFullscreenExitOutput(output);\n\t\t\t\t},\n\t\t\t\tonFullscreenScrollbarChange: (mode) => {\n\t\t\t\t\thost.settingsManager.setFullscreenScrollbar(mode);\n\t\t\t\t\thost.applyFullscreenScrollbarSetting();\n\t\t\t\t},\n\t\t\t\tonFullscreenCopyOnSelectChange: (enabled) => {\n\t\t\t\t\thost.settingsManager.setFullscreenCopyOnSelect(enabled);\n\t\t\t\t\tif (host.renderer instanceof TuiAltScreen) host.renderer.setCopyOnSelect(enabled);\n\t\t\t\t},\n\t\t\t\tonFullscreenWheelScrollLinesChange: (lines) => {\n\t\t\t\t\thost.settingsManager.setFullscreenWheelScrollLines(lines);\n\t\t\t\t\tif (host.renderer instanceof TuiAltScreen) host.renderer.setWheelScrollLines(lines);\n\t\t\t\t},\n\t\t\t\tonWarningsChange: (warnings) => {\n\t\t\t\t\thost.settingsManager.setWarnings(warnings);\n\t\t\t\t},\n\t\t\t\tonCancel: () => {\n\t\t\t\t\tdone();\n\t\t\t\t\thost.ui.requestRender();\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t\treturn { component: selector, focus: selector.getSettingsList() };\n\t});\n}\n\n/**\n * Workflow overlay (§9 L2/L3): read-only panorama + transition log from\n * `workflow.state`/`workflow.transition` entries. Actions are forwarded to\n * the editor as reviewable text; the main agent executes them via\n * workflow_advance (rendering and execution stay separated).\n */\nexport function showWorkflowView(host: SelectorsHost): void {\n\tconst hasSnapshot = host.facade\n\t\t.getEntries()\n\t\t.some((entry) => entry.type === \"custom\" && entry.customType === \"workflow.state\");\n\tif (!hasSnapshot) {\n\t\thost.showStatus(t(\"No workflow in this session\"));\n\t\treturn;\n\t}\n\n\thost.showSelector((done) => {\n\t\tconst view = new WorkflowViewComponent({\n\t\t\tgetEntries: () => host.facade.getEntries(),\n\t\t\tmaxRows: Math.max(6, Math.floor(host.ui.terminal.rows / 2)),\n\t\t\trequestRender: () => host.ui.requestRender(),\n\t\t});\n\t\tview.onClose = done;\n\t\tview.onForwardAction = (text) => {\n\t\t\tdone();\n\t\t\thost.editor.setText(text);\n\t\t\thost.ui.requestRender();\n\t\t\thost.showStatus(t(\"Workflow action staged — review in the editor and submit\"));\n\t\t};\n\t\treturn { component: view, focus: view, dispose: () => view.dispose() };\n\t});\n}\n\n/**\n * Subagent session browser (/agents): read-only list + detail of this\n * session's subagent transcripts from the D-060 §3 on-disk store — the same\n * parent-scoped summary source as the subagent_list model tool (only this\n * session's children, newest first). Detail entries load lazily per\n * session; a failed load renders inside the view instead of throwing.\n */\nexport function showAgentsView(host: SelectorsHost): void {\n\tconst agentDir = getAgentDir();\n\tconst sessions = listAgentSessions({ agentDir, parentAgentSession: host.facade.getSessionId() });\n\tif (sessions.length === 0) {\n\t\thost.showStatus(t(\"No subagent sessions in this session\"));\n\t\treturn;\n\t}\n\n\thost.showSelector((done) => {\n\t\tconst view = new AgentsViewComponent({\n\t\t\tsessions,\n\t\t\tloadEntries: (sessionId) => readAgentSession({ agentDir, sessionId }),\n\t\t\tmaxRows: Math.max(6, Math.floor(host.ui.terminal.rows / 2)),\n\t\t\trequestRender: () => host.ui.requestRender(),\n\t\t});\n\t\tview.onClose = done;\n\t\treturn { component: view, focus: view };\n\t});\n}\n\nexport function showTreeSelector(host: SelectorsHost, initialSelectedId?: string): void {\n\tconst tree = host.facade.getTree();\n\tconst realLeafId = host.facade.getLeafId();\n\tconst initialFilterMode = host.settingsManager.getTreeFilterMode();\n\n\tif (tree.length === 0) {\n\t\thost.showStatus(t(\"No entries in session\"));\n\t\treturn;\n\t}\n\n\thost.showSelector((done) => {\n\t\tconst selector = new TreeSelectorComponent(\n\t\t\ttree,\n\t\t\trealLeafId,\n\t\t\thost.ui.terminal.rows,\n\t\t\tasync (entryId) => {\n\t\t\t\t// Selecting the current leaf is a no-op (already there)\n\t\t\t\tif (entryId === host.facade.getLeafId()) {\n\t\t\t\t\tdone();\n\t\t\t\t\thost.showStatus(t(\"Already at this point\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Ask about summarization\n\t\t\t\tdone(); // Close selector first\n\n\t\t\t\t// Loop until user makes a complete choice or cancels to tree\n\t\t\t\tlet wantsSummary = false;\n\t\t\t\tlet customInstructions: string | undefined;\n\n\t\t\t\t// Check if we should skip the prompt (user preference to always default to no summary)\n\t\t\t\tif (!host.settingsManager.getBranchSummarySkipPrompt()) {\n\t\t\t\t\twhile (true) {\n\t\t\t\t\t\tconst summaryChoice = await host.showDialogSelector(t(\"Summarize branch?\"), [\n\t\t\t\t\t\t\tt(\"No summary\"),\n\t\t\t\t\t\t\tt(\"Summarize\"),\n\t\t\t\t\t\t\tt(\"Summarize with custom prompt\"),\n\t\t\t\t\t\t]);\n\n\t\t\t\t\t\tif (summaryChoice === undefined) {\n\t\t\t\t\t\t\t// User pressed escape - re-show tree selector with same selection\n\t\t\t\t\t\t\tshowTreeSelector(host, entryId);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\twantsSummary = summaryChoice !== t(\"No summary\");\n\n\t\t\t\t\t\tif (summaryChoice === t(\"Summarize with custom prompt\")) {\n\t\t\t\t\t\t\tcustomInstructions = await host.showDialogEditor(t(\"Custom summarization instructions\"));\n\t\t\t\t\t\t\tif (customInstructions === undefined) {\n\t\t\t\t\t\t\t\t// User cancelled - loop back to summary selector\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// User made a complete choice\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// The user committed to navigating: stop the active response first.\n\t\t\t\t// 中断分级:导航清场只停回合,不终止后台子代理(设计 §4.2)。\n\t\t\t\tif (host.facade.isStreaming()) {\n\t\t\t\t\thost.restoreQueuedMessagesToEditor();\n\t\t\t\t\tawait host.facade.abort({ cancelAgentTasks: false });\n\t\t\t\t}\n\n\t\t\t\t// Set up escape handler and status indicator if summarizing\n\t\t\t\tlet showingSummaryIndicator = false;\n\t\t\t\tconst originalOnEscape = host.defaultEditor.onEscape;\n\n\t\t\t\tif (wantsSummary) {\n\t\t\t\t\thost.defaultEditor.onEscape = () => {\n\t\t\t\t\t\thost.facade.abortBranchSummary();\n\t\t\t\t\t};\n\t\t\t\t\thost.chatContainer.addChild(new Spacer(1));\n\t\t\t\t\thost.showStatusIndicator(new BranchSummaryStatusIndicator(host.ui));\n\t\t\t\t\tshowingSummaryIndicator = true;\n\t\t\t\t\thost.ui.requestRender();\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await host.facade.navigateTree(entryId, {\n\t\t\t\t\t\tsummarize: wantsSummary,\n\t\t\t\t\t\tcustomInstructions,\n\t\t\t\t\t});\n\n\t\t\t\t\tif (result.aborted) {\n\t\t\t\t\t\t// Summarization aborted - re-show tree selector with same selection\n\t\t\t\t\t\thost.showStatus(t(\"Branch summarization cancelled\"));\n\t\t\t\t\t\tshowTreeSelector(host, entryId);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (result.cancelled) {\n\t\t\t\t\t\thost.showStatus(t(\"Navigation cancelled\"));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Update UI\n\t\t\t\t\thost.chatContainer.clear();\n\t\t\t\t\thost.renderInitialMessages();\n\t\t\t\t\tif (result.editorText && !host.editor.getText().trim()) {\n\t\t\t\t\t\thost.editor.setText(result.editorText);\n\t\t\t\t\t}\n\t\t\t\t\thost.showStatus(t(\"Navigated to selected point\"));\n\t\t\t\t\tvoid host.flushCompactionQueue({ willRetry: false });\n\t\t\t\t} catch (error) {\n\t\t\t\t\thost.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t} finally {\n\t\t\t\t\tif (showingSummaryIndicator) {\n\t\t\t\t\t\thost.clearStatusIndicator(\"branchSummary\");\n\t\t\t\t\t}\n\t\t\t\t\thost.defaultEditor.onEscape = originalOnEscape;\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tdone();\n\t\t\t\thost.ui.requestRender();\n\t\t\t},\n\t\t\t(entryId, label) => {\n\t\t\t\thost.facade.appendLabelChange(entryId, label);\n\t\t\t\thost.ui.requestRender();\n\t\t\t},\n\t\t\tinitialSelectedId,\n\t\t\tinitialFilterMode,\n\t\t);\n\t\tselector.onCopy = async (text) => {\n\t\t\tif (!text) {\n\t\t\t\thost.showError(t(\"Selected entry has no text to copy\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait copyToClipboard(text);\n\t\t\t\thost.showStatus(t(\"Copied selected message to clipboard\"));\n\t\t\t} catch (error) {\n\t\t\t\thost.showError(error instanceof Error ? error.message : String(error));\n\t\t\t}\n\t\t};\n\t\treturn { component: selector, focus: selector };\n\t});\n}\n\nexport function showSessionSelector(host: SelectorsHost): void {\n\thost.showSelector((done) => {\n\t\tconst selector = new SessionSelectorComponent(\n\t\t\t(onProgress, signal) => host.runtimeFacade.listSessions(onProgress, signal),\n\t\t\t(onProgress, signal) => host.runtimeFacade.listAllSessions(onProgress, signal),\n\t\t\tasync (sessionPath) => {\n\t\t\t\tdone();\n\t\t\t\tawait handleResumeSession(host, sessionPath);\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tdone();\n\t\t\t\thost.ui.requestRender();\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tvoid host.shutdown();\n\t\t\t},\n\t\t\t() => host.ui.requestRender(),\n\t\t\t{\n\t\t\t\trenameSession: async (sessionFilePath: string, nextName: string | undefined) => {\n\t\t\t\t\tconst next = (nextName ?? \"\").trim();\n\t\t\t\t\tif (!next) return;\n\t\t\t\t\tconst mgr = SessionManager.open(sessionFilePath);\n\t\t\t\t\tmgr.appendSessionInfo(next);\n\t\t\t\t},\n\t\t\t\tshowRenameHint: true,\n\t\t\t\tkeybindings: host.keybindings,\n\t\t\t\t// 会话选择器默认只列当前方案的会话;跨方案会话仅在显式\n\t\t\t\t// \"show all\" 后可见(设计 §10.1)。\n\t\t\t\tsuiteFilter: {\n\t\t\t\t\tcurrentSuiteId: host.getCurrentSessionSuiteId(),\n\t\t\t\t\tgetSessionSuiteId: (session) => host.readSessionSuiteId(session.path),\n\t\t\t\t},\n\t\t\t},\n\n\t\t\thost.runtimeFacade.getSessionFile(),\n\t\t);\n\t\treturn { component: selector, focus: selector };\n\t});\n}\n\nexport async function handleResumeSession(\n\thost: SelectorsHost,\n\tsessionPath: string,\n\toptions?: { withSession?: (ctx: ReplacedSessionContext) => Promise<void> },\n): Promise<{ cancelled: boolean }> {\n\thost.clearStatusIndicator();\n\ttry {\n\t\tconst result = await host.runtimeFacade.switchSession(sessionPath, {\n\t\t\twithSession: options?.withSession,\n\t\t});\n\t\tif (result.cancelled) {\n\t\t\treturn result;\n\t\t}\n\t\thost.showStatus(t(\"Resumed session\"));\n\t\thost.detectCrossSuiteResume();\n\t\treturn result;\n\t} catch (error: unknown) {\n\t\tif (error instanceof MissingSessionCwdError) {\n\t\t\tconst selectedCwd = await host.promptForMissingSessionCwd(error);\n\t\t\tif (!selectedCwd) {\n\t\t\t\thost.showStatus(t(\"Resume cancelled\"));\n\t\t\t\treturn { cancelled: true };\n\t\t\t}\n\t\t\tconst result = await host.runtimeFacade.switchSession(sessionPath, {\n\t\t\t\tcwdOverride: selectedCwd,\n\t\t\t\twithSession: options?.withSession,\n\t\t\t});\n\t\t\tif (result.cancelled) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\thost.showStatus(t(\"Resumed session in current cwd\"));\n\t\t\thost.detectCrossSuiteResume();\n\t\t\treturn result;\n\t\t}\n\t\treturn host.handleFatalRuntimeError(t(\"Failed to resume session\"), error);\n\t}\n}\n\n/**\n * Interactive recovery for an unresolved startup suite id (设计 §9): pick a\n * suite, persist it as the project setting, then rebuild the session with\n * the selected suite via the same /new assembly path. Cancelling keeps the\n * fallback assembly the runtime started with.\n */\nexport async function showStartupSuiteSelector(\n\thost: SelectorsHost,\n\tpending: {\n\t\trequestedId: string;\n\t\tavailable: readonly string[];\n\t},\n): Promise<void> {\n\tconst selected = await new Promise<string | undefined>((resolve) => {\n\t\topenSuiteListSelector(host, {\n\t\t\tavailableSuites: pending.available,\n\t\t\tnote: t('Suite \"{id}\" was not found. The selected suite applies to the new session.', {\n\t\t\t\tid: pending.requestedId,\n\t\t\t}),\n\t\t\tonSelect: (suiteId) => resolve(suiteId),\n\t\t\tonCancel: () => resolve(undefined),\n\t\t});\n\t});\n\n\tif (selected === undefined) {\n\t\thost.showWarning(\n\t\t\tt('Suite \"{id}\" was not found — continuing without a suite. Use /suite to choose one.', {\n\t\t\t\tid: pending.requestedId,\n\t\t\t}),\n\t\t);\n\t\treturn;\n\t}\n\n\thost.settingsManager.setProjectSuite(selected);\n\ttry {\n\t\tawait host.runtimeFacade.newSession();\n\t\thost.showStatus(t(\"Suite set to {id} — new session started\", { id: selected }));\n\t} catch (error) {\n\t\tawait host.handleFatalRuntimeError(t(\"Failed to create session\"), error);\n\t}\n}\n"]}
@@ -0,0 +1,31 @@
1
+ import type { SettingsManager } from "../../core/settings-manager.ts";
2
+ import type { ModelCatalogRuntime } from "../../host/model-catalog-refresh.ts";
3
+ import { type LatestRelease } from "../../utils/version-check.ts";
4
+ export interface StartupBackgroundCheckHost {
5
+ /** Product version the new-version check compares against. */
6
+ getVersion(): string;
7
+ /** Narrow catalog-refresh projection through the stable facade (D-048). */
8
+ getModelCatalog(): ModelCatalogRuntime;
9
+ /** Narrow cwd projection through the stable facade (D-048). */
10
+ getCwd(): string;
11
+ /** Settings manager backing the package-update policy reads. */
12
+ settingsManager: SettingsManager;
13
+ /** Live initialization read; late-arriving checks must not touch a torn-down UI. */
14
+ hasInitialized(): boolean;
15
+ updateAvailableProviderCount(): void;
16
+ showNewVersionNotification(release: LatestRelease): void;
17
+ showPackageUpdateNotification(updates: string[]): void;
18
+ showWarning(message: string): void;
19
+ /** Restores the product terminal title (win32 npm title overwrite). */
20
+ updateTerminalTitle(): void;
21
+ }
22
+ /**
23
+ * Kick off the four fire-and-forget startup background checks in the order
24
+ * run() has always used: catalog refresh, version check, package update
25
+ * check, tmux keyboard probe. Returns immediately; failures are swallowed by
26
+ * the per-check catch/finally chains exactly as before.
27
+ */
28
+ export declare function startStartupBackgroundChecks(host: StartupBackgroundCheckHost): void;
29
+ export declare function checkForPackageUpdates(host: StartupBackgroundCheckHost): Promise<string[]>;
30
+ export declare function checkTmuxKeyboardSetup(): Promise<string | undefined>;
31
+ //# sourceMappingURL=startup-services.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup-services.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/startup-services.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE/E,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAEtF,MAAM,WAAW,0BAA0B;IAC1C,8DAA8D;IAC9D,UAAU,IAAI,MAAM,CAAC;IACrB,2EAA2E;IAC3E,eAAe,IAAI,mBAAmB,CAAC;IACvC,+DAA+D;IAC/D,MAAM,IAAI,MAAM,CAAC;IACjB,gEAAgE;IAChE,eAAe,EAAE,eAAe,CAAC;IACjC,oFAAoF;IACpF,cAAc,IAAI,OAAO,CAAC;IAC1B,4BAA4B,IAAI,IAAI,CAAC;IACrC,0BAA0B,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IACzD,6BAA6B,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACvD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,uEAAuE;IACvE,mBAAmB,IAAI,IAAI,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,0BAA0B,GAAG,IAAI,CAsCnF;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,0BAA0B,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAgBhG;AAED,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAiD1E","sourcesContent":["/**\n * Fire-and-forget startup background checks for the interactive mode\n * (extracted from interactive-mode.ts run()).\n *\n * This module owns the scheduling group run() fires right after init(): the\n * model-catalog refresh (OFFLINE short-circuited), the new-version check, the\n * extension package update check, and the tmux extended-keys probe. The mode\n * keeps the UI-facing reactions (notifications, terminal title restore) and\n * hands them in through StartupBackgroundCheckHost, mirroring the DialogUiHost\n * pattern in ./interactive-dialog-ui.ts. Chain shapes, scheduling order, and\n * short-circuit semantics are carried over verbatim — this is a scheduling\n * extraction, not a behavior change.\n *\n * Internal collaboration interface (same pattern as DialogUiHost): not a\n * plugin API and not exported from the package root.\n */\nimport { spawn } from \"child_process\";\nimport { getAgentDir } from \"../../config.ts\";\nimport { t } from \"../../core/i18n/index.ts\";\nimport { DefaultPackageManager } from \"../../core/package-manager.ts\";\nimport type { SettingsManager } from \"../../core/settings-manager.ts\";\nimport type { ModelCatalogRuntime } from \"../../host/model-catalog-refresh.ts\";\nimport { refreshModelCatalogs } from \"../../host/model-catalog-refresh.ts\";\nimport { checkForNewVersion, type LatestRelease } from \"../../utils/version-check.ts\";\n\nexport interface StartupBackgroundCheckHost {\n\t/** Product version the new-version check compares against. */\n\tgetVersion(): string;\n\t/** Narrow catalog-refresh projection through the stable facade (D-048). */\n\tgetModelCatalog(): ModelCatalogRuntime;\n\t/** Narrow cwd projection through the stable facade (D-048). */\n\tgetCwd(): string;\n\t/** Settings manager backing the package-update policy reads. */\n\tsettingsManager: SettingsManager;\n\t/** Live initialization read; late-arriving checks must not touch a torn-down UI. */\n\thasInitialized(): boolean;\n\tupdateAvailableProviderCount(): void;\n\tshowNewVersionNotification(release: LatestRelease): void;\n\tshowPackageUpdateNotification(updates: string[]): void;\n\tshowWarning(message: string): void;\n\t/** Restores the product terminal title (win32 npm title overwrite). */\n\tupdateTerminalTitle(): void;\n}\n\n/**\n * Kick off the four fire-and-forget startup background checks in the order\n * run() has always used: catalog refresh, version check, package update\n * check, tmux keyboard probe. Returns immediately; failures are swallowed by\n * the per-check catch/finally chains exactly as before.\n */\nexport function startStartupBackgroundChecks(host: StartupBackgroundCheckHost): void {\n\tif (!process.env.AGENT_FORGE_OFFLINE) {\n\t\tconst controller = new AbortController();\n\t\tconst timeout = setTimeout(() => controller.abort(), 15_000);\n\t\tvoid refreshModelCatalogs(host.getModelCatalog(), controller.signal)\n\t\t\t.then(() => host.updateAvailableProviderCount())\n\t\t\t.catch(() => {})\n\t\t\t.finally(() => clearTimeout(timeout));\n\t}\n\n\t// Start version check asynchronously\n\tcheckForNewVersion(host.getVersion()).then((newRelease) => {\n\t\tif (newRelease) {\n\t\t\thost.showNewVersionNotification(newRelease);\n\t\t}\n\t});\n\n\t// Start package update check asynchronously\n\tcheckForPackageUpdates(host)\n\t\t.then((updates) => {\n\t\t\tif (updates.length > 0) {\n\t\t\t\thost.showPackageUpdateNotification(updates);\n\t\t\t}\n\t\t})\n\t\t.finally(() => {\n\t\t\t// On Windows, npm can overwrite the shared console title while checking\n\t\t\t// extension package versions. Restore the product title after the startup check.\n\t\t\tif (process.platform === \"win32\" && host.hasInitialized()) {\n\t\t\t\thost.updateTerminalTitle();\n\t\t\t}\n\t\t});\n\n\t// Check tmux keyboard setup asynchronously\n\tcheckTmuxKeyboardSetup().then((warning) => {\n\t\tif (warning) {\n\t\t\thost.showWarning(warning);\n\t\t}\n\t});\n}\n\nexport async function checkForPackageUpdates(host: StartupBackgroundCheckHost): Promise<string[]> {\n\tif (process.env.AGENT_FORGE_OFFLINE) {\n\t\treturn [];\n\t}\n\n\ttry {\n\t\tconst packageManager = new DefaultPackageManager({\n\t\t\tcwd: host.getCwd(),\n\t\t\tagentDir: getAgentDir(),\n\t\t\tsettingsManager: host.settingsManager,\n\t\t});\n\t\tconst updates = await packageManager.checkForAvailableUpdates();\n\t\treturn updates.map((update) => update.displayName);\n\t} catch {\n\t\treturn [];\n\t}\n}\n\nexport async function checkTmuxKeyboardSetup(): Promise<string | undefined> {\n\tif (!process.env.TMUX) return undefined;\n\n\tconst runTmuxShow = (option: string): Promise<string | undefined> => {\n\t\treturn new Promise((resolve) => {\n\t\t\tconst proc = spawn(\"tmux\", [\"show\", \"-gv\", option], {\n\t\t\t\tstdio: [\"ignore\", \"pipe\", \"ignore\"],\n\t\t\t});\n\t\t\tlet stdout = \"\";\n\t\t\tconst timer = setTimeout(() => {\n\t\t\t\tproc.kill();\n\t\t\t\tresolve(undefined);\n\t\t\t}, 2000);\n\n\t\t\tproc.stdout?.on(\"data\", (data) => {\n\t\t\t\tstdout += data.toString();\n\t\t\t});\n\t\t\tproc.on(\"error\", () => {\n\t\t\t\tclearTimeout(timer);\n\t\t\t\tresolve(undefined);\n\t\t\t});\n\t\t\tproc.on(\"close\", (code) => {\n\t\t\t\tclearTimeout(timer);\n\t\t\t\tresolve(code === 0 ? stdout.trim() : undefined);\n\t\t\t});\n\t\t});\n\t};\n\n\tconst [extendedKeys, extendedKeysFormat] = await Promise.all([\n\t\trunTmuxShow(\"extended-keys\"),\n\t\trunTmuxShow(\"extended-keys-format\"),\n\t]);\n\n\t// If we couldn't query tmux (timeout, sandbox, etc.), don't warn\n\tif (extendedKeys === undefined) return undefined;\n\n\tif (extendedKeys !== \"on\" && extendedKeys !== \"always\") {\n\t\treturn t(\n\t\t\t\"tmux extended-keys is off. Modified Enter keys may not work. Add `set -g extended-keys on` to ~/.tmux.conf and restart tmux.\",\n\t\t);\n\t}\n\n\tif (extendedKeysFormat === \"xterm\") {\n\t\treturn t(\n\t\t\t\"tmux extended-keys-format is xterm. Agent Forge works best with csi-u. Add `set -g extended-keys-format csi-u` to ~/.tmux.conf and restart tmux.\",\n\t\t);\n\t}\n\n\treturn undefined;\n}\n"]}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Fire-and-forget startup background checks for the interactive mode
3
+ * (extracted from interactive-mode.ts run()).
4
+ *
5
+ * This module owns the scheduling group run() fires right after init(): the
6
+ * model-catalog refresh (OFFLINE short-circuited), the new-version check, the
7
+ * extension package update check, and the tmux extended-keys probe. The mode
8
+ * keeps the UI-facing reactions (notifications, terminal title restore) and
9
+ * hands them in through StartupBackgroundCheckHost, mirroring the DialogUiHost
10
+ * pattern in ./interactive-dialog-ui.ts. Chain shapes, scheduling order, and
11
+ * short-circuit semantics are carried over verbatim — this is a scheduling
12
+ * extraction, not a behavior change.
13
+ *
14
+ * Internal collaboration interface (same pattern as DialogUiHost): not a
15
+ * plugin API and not exported from the package root.
16
+ */
17
+ import { spawn } from "child_process";
18
+ import { getAgentDir } from "../../config.js";
19
+ import { t } from "../../core/i18n/index.js";
20
+ import { DefaultPackageManager } from "../../core/package-manager.js";
21
+ import { refreshModelCatalogs } from "../../host/model-catalog-refresh.js";
22
+ import { checkForNewVersion } from "../../utils/version-check.js";
23
+ /**
24
+ * Kick off the four fire-and-forget startup background checks in the order
25
+ * run() has always used: catalog refresh, version check, package update
26
+ * check, tmux keyboard probe. Returns immediately; failures are swallowed by
27
+ * the per-check catch/finally chains exactly as before.
28
+ */
29
+ export function startStartupBackgroundChecks(host) {
30
+ if (!process.env.AGENT_FORGE_OFFLINE) {
31
+ const controller = new AbortController();
32
+ const timeout = setTimeout(() => controller.abort(), 15_000);
33
+ void refreshModelCatalogs(host.getModelCatalog(), controller.signal)
34
+ .then(() => host.updateAvailableProviderCount())
35
+ .catch(() => { })
36
+ .finally(() => clearTimeout(timeout));
37
+ }
38
+ // Start version check asynchronously
39
+ checkForNewVersion(host.getVersion()).then((newRelease) => {
40
+ if (newRelease) {
41
+ host.showNewVersionNotification(newRelease);
42
+ }
43
+ });
44
+ // Start package update check asynchronously
45
+ checkForPackageUpdates(host)
46
+ .then((updates) => {
47
+ if (updates.length > 0) {
48
+ host.showPackageUpdateNotification(updates);
49
+ }
50
+ })
51
+ .finally(() => {
52
+ // On Windows, npm can overwrite the shared console title while checking
53
+ // extension package versions. Restore the product title after the startup check.
54
+ if (process.platform === "win32" && host.hasInitialized()) {
55
+ host.updateTerminalTitle();
56
+ }
57
+ });
58
+ // Check tmux keyboard setup asynchronously
59
+ checkTmuxKeyboardSetup().then((warning) => {
60
+ if (warning) {
61
+ host.showWarning(warning);
62
+ }
63
+ });
64
+ }
65
+ export async function checkForPackageUpdates(host) {
66
+ if (process.env.AGENT_FORGE_OFFLINE) {
67
+ return [];
68
+ }
69
+ try {
70
+ const packageManager = new DefaultPackageManager({
71
+ cwd: host.getCwd(),
72
+ agentDir: getAgentDir(),
73
+ settingsManager: host.settingsManager,
74
+ });
75
+ const updates = await packageManager.checkForAvailableUpdates();
76
+ return updates.map((update) => update.displayName);
77
+ }
78
+ catch {
79
+ return [];
80
+ }
81
+ }
82
+ export async function checkTmuxKeyboardSetup() {
83
+ if (!process.env.TMUX)
84
+ return undefined;
85
+ const runTmuxShow = (option) => {
86
+ return new Promise((resolve) => {
87
+ const proc = spawn("tmux", ["show", "-gv", option], {
88
+ stdio: ["ignore", "pipe", "ignore"],
89
+ });
90
+ let stdout = "";
91
+ const timer = setTimeout(() => {
92
+ proc.kill();
93
+ resolve(undefined);
94
+ }, 2000);
95
+ proc.stdout?.on("data", (data) => {
96
+ stdout += data.toString();
97
+ });
98
+ proc.on("error", () => {
99
+ clearTimeout(timer);
100
+ resolve(undefined);
101
+ });
102
+ proc.on("close", (code) => {
103
+ clearTimeout(timer);
104
+ resolve(code === 0 ? stdout.trim() : undefined);
105
+ });
106
+ });
107
+ };
108
+ const [extendedKeys, extendedKeysFormat] = await Promise.all([
109
+ runTmuxShow("extended-keys"),
110
+ runTmuxShow("extended-keys-format"),
111
+ ]);
112
+ // If we couldn't query tmux (timeout, sandbox, etc.), don't warn
113
+ if (extendedKeys === undefined)
114
+ return undefined;
115
+ if (extendedKeys !== "on" && extendedKeys !== "always") {
116
+ return t("tmux extended-keys is off. Modified Enter keys may not work. Add `set -g extended-keys on` to ~/.tmux.conf and restart tmux.");
117
+ }
118
+ if (extendedKeysFormat === "xterm") {
119
+ return t("tmux extended-keys-format is xterm. Agent Forge works best with csi-u. Add `set -g extended-keys-format csi-u` to ~/.tmux.conf and restart tmux.");
120
+ }
121
+ return undefined;
122
+ }
123
+ //# sourceMappingURL=startup-services.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup-services.js","sourceRoot":"","sources":["../../../src/modes/interactive/startup-services.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Fire-and-forget startup background checks for the interactive mode\n * (extracted from interactive-mode.ts run()).\n *\n * This module owns the scheduling group run() fires right after init(): the\n * model-catalog refresh (OFFLINE short-circuited), the new-version check, the\n * extension package update check, and the tmux extended-keys probe. The mode\n * keeps the UI-facing reactions (notifications, terminal title restore) and\n * hands them in through StartupBackgroundCheckHost, mirroring the DialogUiHost\n * pattern in ./interactive-dialog-ui.ts. Chain shapes, scheduling order, and\n * short-circuit semantics are carried over verbatim — this is a scheduling\n * extraction, not a behavior change.\n *\n * Internal collaboration interface (same pattern as DialogUiHost): not a\n * plugin API and not exported from the package root.\n */\nimport { spawn } from \"child_process\";\nimport { getAgentDir } from \"../../config.ts\";\nimport { t } from \"../../core/i18n/index.ts\";\nimport { DefaultPackageManager } from \"../../core/package-manager.ts\";\nimport type { SettingsManager } from \"../../core/settings-manager.ts\";\nimport type { ModelCatalogRuntime } from \"../../host/model-catalog-refresh.ts\";\nimport { refreshModelCatalogs } from \"../../host/model-catalog-refresh.ts\";\nimport { checkForNewVersion, type LatestRelease } from \"../../utils/version-check.ts\";\n\nexport interface StartupBackgroundCheckHost {\n\t/** Product version the new-version check compares against. */\n\tgetVersion(): string;\n\t/** Narrow catalog-refresh projection through the stable facade (D-048). */\n\tgetModelCatalog(): ModelCatalogRuntime;\n\t/** Narrow cwd projection through the stable facade (D-048). */\n\tgetCwd(): string;\n\t/** Settings manager backing the package-update policy reads. */\n\tsettingsManager: SettingsManager;\n\t/** Live initialization read; late-arriving checks must not touch a torn-down UI. */\n\thasInitialized(): boolean;\n\tupdateAvailableProviderCount(): void;\n\tshowNewVersionNotification(release: LatestRelease): void;\n\tshowPackageUpdateNotification(updates: string[]): void;\n\tshowWarning(message: string): void;\n\t/** Restores the product terminal title (win32 npm title overwrite). */\n\tupdateTerminalTitle(): void;\n}\n\n/**\n * Kick off the four fire-and-forget startup background checks in the order\n * run() has always used: catalog refresh, version check, package update\n * check, tmux keyboard probe. Returns immediately; failures are swallowed by\n * the per-check catch/finally chains exactly as before.\n */\nexport function startStartupBackgroundChecks(host: StartupBackgroundCheckHost): void {\n\tif (!process.env.AGENT_FORGE_OFFLINE) {\n\t\tconst controller = new AbortController();\n\t\tconst timeout = setTimeout(() => controller.abort(), 15_000);\n\t\tvoid refreshModelCatalogs(host.getModelCatalog(), controller.signal)\n\t\t\t.then(() => host.updateAvailableProviderCount())\n\t\t\t.catch(() => {})\n\t\t\t.finally(() => clearTimeout(timeout));\n\t}\n\n\t// Start version check asynchronously\n\tcheckForNewVersion(host.getVersion()).then((newRelease) => {\n\t\tif (newRelease) {\n\t\t\thost.showNewVersionNotification(newRelease);\n\t\t}\n\t});\n\n\t// Start package update check asynchronously\n\tcheckForPackageUpdates(host)\n\t\t.then((updates) => {\n\t\t\tif (updates.length > 0) {\n\t\t\t\thost.showPackageUpdateNotification(updates);\n\t\t\t}\n\t\t})\n\t\t.finally(() => {\n\t\t\t// On Windows, npm can overwrite the shared console title while checking\n\t\t\t// extension package versions. Restore the product title after the startup check.\n\t\t\tif (process.platform === \"win32\" && host.hasInitialized()) {\n\t\t\t\thost.updateTerminalTitle();\n\t\t\t}\n\t\t});\n\n\t// Check tmux keyboard setup asynchronously\n\tcheckTmuxKeyboardSetup().then((warning) => {\n\t\tif (warning) {\n\t\t\thost.showWarning(warning);\n\t\t}\n\t});\n}\n\nexport async function checkForPackageUpdates(host: StartupBackgroundCheckHost): Promise<string[]> {\n\tif (process.env.AGENT_FORGE_OFFLINE) {\n\t\treturn [];\n\t}\n\n\ttry {\n\t\tconst packageManager = new DefaultPackageManager({\n\t\t\tcwd: host.getCwd(),\n\t\t\tagentDir: getAgentDir(),\n\t\t\tsettingsManager: host.settingsManager,\n\t\t});\n\t\tconst updates = await packageManager.checkForAvailableUpdates();\n\t\treturn updates.map((update) => update.displayName);\n\t} catch {\n\t\treturn [];\n\t}\n}\n\nexport async function checkTmuxKeyboardSetup(): Promise<string | undefined> {\n\tif (!process.env.TMUX) return undefined;\n\n\tconst runTmuxShow = (option: string): Promise<string | undefined> => {\n\t\treturn new Promise((resolve) => {\n\t\t\tconst proc = spawn(\"tmux\", [\"show\", \"-gv\", option], {\n\t\t\t\tstdio: [\"ignore\", \"pipe\", \"ignore\"],\n\t\t\t});\n\t\t\tlet stdout = \"\";\n\t\t\tconst timer = setTimeout(() => {\n\t\t\t\tproc.kill();\n\t\t\t\tresolve(undefined);\n\t\t\t}, 2000);\n\n\t\t\tproc.stdout?.on(\"data\", (data) => {\n\t\t\t\tstdout += data.toString();\n\t\t\t});\n\t\t\tproc.on(\"error\", () => {\n\t\t\t\tclearTimeout(timer);\n\t\t\t\tresolve(undefined);\n\t\t\t});\n\t\t\tproc.on(\"close\", (code) => {\n\t\t\t\tclearTimeout(timer);\n\t\t\t\tresolve(code === 0 ? stdout.trim() : undefined);\n\t\t\t});\n\t\t});\n\t};\n\n\tconst [extendedKeys, extendedKeysFormat] = await Promise.all([\n\t\trunTmuxShow(\"extended-keys\"),\n\t\trunTmuxShow(\"extended-keys-format\"),\n\t]);\n\n\t// If we couldn't query tmux (timeout, sandbox, etc.), don't warn\n\tif (extendedKeys === undefined) return undefined;\n\n\tif (extendedKeys !== \"on\" && extendedKeys !== \"always\") {\n\t\treturn t(\n\t\t\t\"tmux extended-keys is off. Modified Enter keys may not work. Add `set -g extended-keys on` to ~/.tmux.conf and restart tmux.\",\n\t\t);\n\t}\n\n\tif (extendedKeysFormat === \"xterm\") {\n\t\treturn t(\n\t\t\t\"tmux extended-keys-format is xterm. Agent Forge works best with csi-u. Add `set -g extended-keys-format csi-u` to ~/.tmux.conf and restart tmux.\",\n\t\t);\n\t}\n\n\treturn undefined;\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import type { AgentSession } from "../core/agent-session.ts";
2
+ /**
3
+ * 记忆模型后台预热 kick (2026-10-05 用户裁决「后台预热、不阻塞提问」): 长会话
4
+ * 模式 (interactive / rpc) 在会话绑定边界调用, 经公共工具面触发 memory_enable
5
+ * download——模型缺失即后台下载, 模型在位即快速就绪, 记忆家族未装配/已拒绝时
6
+ * 无该工具、调用无效果。fire-and-forget: 结果与失败都走插件自己的日志与
7
+ * recall packet, 绝不阻塞或打断会话。`-p` 打印模式刻意不接 (进程秒级退出,
8
+ * 下载无法完成, 白跑)。
9
+ */
10
+ export declare function kickMemoryModelPreheat(session: AgentSession): void;
11
+ //# sourceMappingURL=memory-preheat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-preheat.d.ts","sourceRoot":"","sources":["../../src/modes/memory-preheat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CASlE","sourcesContent":["import type { AgentSession } from \"../core/agent-session.ts\";\n\n/**\n * 记忆模型后台预热 kick (2026-10-05 用户裁决「后台预热、不阻塞提问」): 长会话\n * 模式 (interactive / rpc) 在会话绑定边界调用, 经公共工具面触发 memory_enable\n * download——模型缺失即后台下载, 模型在位即快速就绪, 记忆家族未装配/已拒绝时\n * 无该工具、调用无效果。fire-and-forget: 结果与失败都走插件自己的日志与\n * recall packet, 绝不阻塞或打断会话。`-p` 打印模式刻意不接 (进程秒级退出,\n * 下载无法完成, 白跑)。\n */\nexport function kickMemoryModelPreheat(session: AgentSession): void {\n\ttry {\n\t\tvoid session\n\t\t\t.getCapabilityRuntime()\n\t\t\t.invokeTool(\"memory_enable\", { action: \"download\" })\n\t\t\t.catch(() => {});\n\t} catch {\n\t\t// memory 家族未装配: 无该工具, 静默跳过。\n\t}\n}\n"]}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * 记忆模型后台预热 kick (2026-10-05 用户裁决「后台预热、不阻塞提问」): 长会话
3
+ * 模式 (interactive / rpc) 在会话绑定边界调用, 经公共工具面触发 memory_enable
4
+ * download——模型缺失即后台下载, 模型在位即快速就绪, 记忆家族未装配/已拒绝时
5
+ * 无该工具、调用无效果。fire-and-forget: 结果与失败都走插件自己的日志与
6
+ * recall packet, 绝不阻塞或打断会话。`-p` 打印模式刻意不接 (进程秒级退出,
7
+ * 下载无法完成, 白跑)。
8
+ */
9
+ export function kickMemoryModelPreheat(session) {
10
+ try {
11
+ void session
12
+ .getCapabilityRuntime()
13
+ .invokeTool("memory_enable", { action: "download" })
14
+ .catch(() => { });
15
+ }
16
+ catch {
17
+ // memory 家族未装配: 无该工具, 静默跳过。
18
+ }
19
+ }
20
+ //# sourceMappingURL=memory-preheat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-preheat.js","sourceRoot":"","sources":["../../src/modes/memory-preheat.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAqB,EAAQ;IACnE,IAAI,CAAC;QACJ,KAAK,OAAO;aACV,oBAAoB,EAAE;aACtB,UAAU,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;aACnD,KAAK,CAAC,GAAG,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACR,wDAA4B;IAC7B,CAAC;AAAA,CACD","sourcesContent":["import type { AgentSession } from \"../core/agent-session.ts\";\n\n/**\n * 记忆模型后台预热 kick (2026-10-05 用户裁决「后台预热、不阻塞提问」): 长会话\n * 模式 (interactive / rpc) 在会话绑定边界调用, 经公共工具面触发 memory_enable\n * download——模型缺失即后台下载, 模型在位即快速就绪, 记忆家族未装配/已拒绝时\n * 无该工具、调用无效果。fire-and-forget: 结果与失败都走插件自己的日志与\n * recall packet, 绝不阻塞或打断会话。`-p` 打印模式刻意不接 (进程秒级退出,\n * 下载无法完成, 白跑)。\n */\nexport function kickMemoryModelPreheat(session: AgentSession): void {\n\ttry {\n\t\tvoid session\n\t\t\t.getCapabilityRuntime()\n\t\t\t.invokeTool(\"memory_enable\", { action: \"download\" })\n\t\t\t.catch(() => {});\n\t} catch {\n\t\t// memory 家族未装配: 无该工具, 静默跳过。\n\t}\n}\n"]}