@pentoshi/clai 3.18.3 → 4.0.2

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 (1075) hide show
  1. package/README.md +44 -24
  2. package/bin/postinstall-policy.mjs +3 -0
  3. package/bin/postinstall.mjs +6 -3
  4. package/dist/agent/confirm-port.d.ts +5 -17
  5. package/dist/agent/confirm-port.js +8 -65
  6. package/dist/agent/confirm-port.js.map +1 -1
  7. package/dist/agent/evidence-governor.d.ts +1 -1
  8. package/dist/agent/evidence-governor.js +2 -2
  9. package/dist/agent/evidence-governor.js.map +1 -1
  10. package/dist/agent/finalize-gate.d.ts +0 -1
  11. package/dist/agent/finalize-gate.js +6 -24
  12. package/dist/agent/finalize-gate.js.map +1 -1
  13. package/dist/agent/loop-guard.d.ts +1 -0
  14. package/dist/agent/loop-guard.js +34 -1
  15. package/dist/agent/loop-guard.js.map +1 -1
  16. package/dist/agent/must-continue.d.ts +1 -4
  17. package/dist/agent/must-continue.js +0 -22
  18. package/dist/agent/must-continue.js.map +1 -1
  19. package/dist/agent/outcomes.js +2 -13
  20. package/dist/agent/outcomes.js.map +1 -1
  21. package/dist/agent/plan-decision.d.ts +0 -29
  22. package/dist/agent/plan-decision.js +0 -96
  23. package/dist/agent/plan-decision.js.map +1 -1
  24. package/dist/agent/plan-tool.js +19 -14
  25. package/dist/agent/plan-tool.js.map +1 -1
  26. package/dist/agent/progress-pause-policy.d.ts +0 -15
  27. package/dist/agent/progress-pause-policy.js +0 -15
  28. package/dist/agent/progress-pause-policy.js.map +1 -1
  29. package/dist/agent/runner.js +152 -393
  30. package/dist/agent/runner.js.map +1 -1
  31. package/dist/agent/task-evidence.d.ts +6 -0
  32. package/dist/agent/task-evidence.js +48 -3
  33. package/dist/agent/task-evidence.js.map +1 -1
  34. package/dist/agent/tool-history.js +11 -4
  35. package/dist/agent/tool-history.js.map +1 -1
  36. package/dist/app/commands/catalog.js +397 -0
  37. package/dist/app/commands/catalog.js.map +1 -0
  38. package/dist/app/commands/registry.js +1 -1
  39. package/dist/app/commands/registry.js.map +1 -1
  40. package/dist/app/confirm-prompt-text.d.ts +17 -0
  41. package/dist/app/confirm-prompt-text.js +34 -0
  42. package/dist/app/confirm-prompt-text.js.map +1 -0
  43. package/dist/app/controllers/session-controller.d.ts +1 -1
  44. package/dist/app/controllers/session-controller.js +3 -1
  45. package/dist/app/controllers/session-controller.js.map +1 -1
  46. package/dist/app/controllers/session-prompt-queue.d.ts +5 -1
  47. package/dist/app/controllers/session-prompt-queue.js +47 -30
  48. package/dist/app/controllers/session-prompt-queue.js.map +1 -1
  49. package/dist/app/controllers/turn-controller.js +41 -3
  50. package/dist/app/controllers/turn-controller.js.map +1 -1
  51. package/dist/app/ports/confirm-port.d.ts +0 -1
  52. package/dist/app/ports/persistence-port.d.ts +1 -1
  53. package/dist/app/ports/transcript-item.d.ts +63 -0
  54. package/dist/app/ports/transcript-item.js +2 -0
  55. package/dist/app/ports/transcript-item.js.map +1 -0
  56. package/dist/classic/app/ClassicApp.d.ts +12 -0
  57. package/dist/classic/app/ClassicApp.js +119 -0
  58. package/dist/classic/app/ClassicApp.js.map +1 -0
  59. package/dist/classic/app/action-handlers.d.ts +45 -0
  60. package/dist/classic/app/action-handlers.js +280 -0
  61. package/dist/classic/app/action-handlers.js.map +1 -0
  62. package/dist/classic/app/app-wiring.d.ts +133 -0
  63. package/dist/classic/app/app-wiring.js +383 -0
  64. package/dist/classic/app/app-wiring.js.map +1 -0
  65. package/dist/classic/app/git-branch.d.ts +1 -0
  66. package/dist/classic/app/git-branch.js +50 -0
  67. package/dist/classic/app/git-branch.js.map +1 -0
  68. package/dist/classic/app/use-feed.d.ts +40 -0
  69. package/dist/classic/app/use-feed.js +52 -0
  70. package/dist/classic/app/use-feed.js.map +1 -0
  71. package/dist/classic/app/wiring-interactions.d.ts +40 -0
  72. package/dist/classic/app/wiring-interactions.js +433 -0
  73. package/dist/classic/app/wiring-interactions.js.map +1 -0
  74. package/dist/classic/app/wiring-lifecycle.d.ts +10 -0
  75. package/dist/classic/app/wiring-lifecycle.js +242 -0
  76. package/dist/classic/app/wiring-lifecycle.js.map +1 -0
  77. package/dist/classic/app/wiring-selection.d.ts +3 -0
  78. package/dist/classic/app/wiring-selection.js +113 -0
  79. package/dist/classic/app/wiring-selection.js.map +1 -0
  80. package/dist/classic/app/wiring-types.d.ts +157 -0
  81. package/dist/classic/app/wiring-types.js +2 -0
  82. package/dist/classic/app/wiring-types.js.map +1 -0
  83. package/dist/classic/blocks/AssistantBlock.d.ts +3 -0
  84. package/dist/classic/blocks/AssistantBlock.js +6 -0
  85. package/dist/classic/blocks/AssistantBlock.js.map +1 -0
  86. package/dist/classic/blocks/BatchBlock.d.ts +3 -0
  87. package/dist/classic/blocks/BatchBlock.js +6 -0
  88. package/dist/classic/blocks/BatchBlock.js.map +1 -0
  89. package/dist/classic/blocks/CompactedBlock.d.ts +3 -0
  90. package/dist/classic/blocks/CompactedBlock.js +6 -0
  91. package/dist/classic/blocks/CompactedBlock.js.map +1 -0
  92. package/dist/classic/blocks/DiffBlock.d.ts +3 -0
  93. package/dist/classic/blocks/DiffBlock.js +6 -0
  94. package/dist/classic/blocks/DiffBlock.js.map +1 -0
  95. package/dist/classic/blocks/IntroBlock.d.ts +3 -0
  96. package/dist/classic/blocks/IntroBlock.js +6 -0
  97. package/dist/classic/blocks/IntroBlock.js.map +1 -0
  98. package/dist/classic/blocks/NoticeBlock.d.ts +3 -0
  99. package/dist/classic/blocks/NoticeBlock.js +6 -0
  100. package/dist/classic/blocks/NoticeBlock.js.map +1 -0
  101. package/dist/classic/blocks/ThinkingBlock.d.ts +3 -0
  102. package/dist/classic/blocks/ThinkingBlock.js +6 -0
  103. package/dist/classic/blocks/ThinkingBlock.js.map +1 -0
  104. package/dist/classic/blocks/ToolBlock.d.ts +3 -0
  105. package/dist/classic/blocks/ToolBlock.js +6 -0
  106. package/dist/classic/blocks/ToolBlock.js.map +1 -0
  107. package/dist/classic/blocks/UserBlock.d.ts +3 -0
  108. package/dist/classic/blocks/UserBlock.js +6 -0
  109. package/dist/classic/blocks/UserBlock.js.map +1 -0
  110. package/dist/classic/blocks/assistant-lines.d.ts +10 -0
  111. package/dist/classic/blocks/assistant-lines.js +43 -0
  112. package/dist/classic/blocks/assistant-lines.js.map +1 -0
  113. package/dist/classic/blocks/batch-lines.d.ts +7 -0
  114. package/dist/classic/blocks/batch-lines.js +79 -0
  115. package/dist/classic/blocks/batch-lines.js.map +1 -0
  116. package/dist/classic/blocks/block-context.d.ts +33 -0
  117. package/dist/classic/blocks/block-context.js +41 -0
  118. package/dist/classic/blocks/block-context.js.map +1 -0
  119. package/dist/classic/blocks/compacted-lines.d.ts +5 -0
  120. package/dist/classic/blocks/compacted-lines.js +54 -0
  121. package/dist/classic/blocks/compacted-lines.js.map +1 -0
  122. package/dist/classic/blocks/diff-lines.d.ts +13 -0
  123. package/dist/classic/blocks/diff-lines.js +116 -0
  124. package/dist/classic/blocks/diff-lines.js.map +1 -0
  125. package/dist/classic/blocks/intro-lines.d.ts +16 -0
  126. package/dist/classic/blocks/intro-lines.js +23 -0
  127. package/dist/classic/blocks/intro-lines.js.map +1 -0
  128. package/dist/classic/blocks/notice-lines.d.ts +7 -0
  129. package/dist/classic/blocks/notice-lines.js +28 -0
  130. package/dist/classic/blocks/notice-lines.js.map +1 -0
  131. package/dist/classic/blocks/thinking-lines.d.ts +5 -0
  132. package/dist/classic/blocks/thinking-lines.js +34 -0
  133. package/dist/classic/blocks/thinking-lines.js.map +1 -0
  134. package/dist/classic/blocks/tool-lines.d.ts +22 -0
  135. package/dist/classic/blocks/tool-lines.js +135 -0
  136. package/dist/classic/blocks/tool-lines.js.map +1 -0
  137. package/dist/classic/blocks/user-lines.d.ts +5 -0
  138. package/dist/classic/blocks/user-lines.js +26 -0
  139. package/dist/classic/blocks/user-lines.js.map +1 -0
  140. package/dist/classic/bootstrap/osc52-renderer.d.ts +10 -0
  141. package/dist/classic/bootstrap/osc52-renderer.js +38 -0
  142. package/dist/classic/bootstrap/osc52-renderer.js.map +1 -0
  143. package/dist/classic/bootstrap/renderer-handle.d.ts +15 -0
  144. package/dist/classic/bootstrap/renderer-handle.js +22 -0
  145. package/dist/classic/bootstrap/renderer-handle.js.map +1 -0
  146. package/dist/classic/bootstrap/start-classic.d.ts +8 -0
  147. package/dist/classic/bootstrap/start-classic.js +130 -0
  148. package/dist/classic/bootstrap/start-classic.js.map +1 -0
  149. package/dist/classic/bootstrap/suspend-port.d.ts +14 -0
  150. package/dist/classic/bootstrap/suspend-port.js +29 -0
  151. package/dist/classic/bootstrap/suspend-port.js.map +1 -0
  152. package/dist/classic/bootstrap/terminal-session.d.ts +58 -0
  153. package/dist/classic/bootstrap/terminal-session.js +136 -0
  154. package/dist/classic/bootstrap/terminal-session.js.map +1 -0
  155. package/dist/classic/chrome/Chrome.d.ts +19 -0
  156. package/dist/classic/chrome/Chrome.js +30 -0
  157. package/dist/classic/chrome/Chrome.js.map +1 -0
  158. package/dist/classic/chrome/Composer.d.ts +12 -0
  159. package/dist/classic/chrome/Composer.js +61 -0
  160. package/dist/classic/chrome/Composer.js.map +1 -0
  161. package/dist/classic/chrome/QueuePanel.d.ts +3 -0
  162. package/dist/classic/chrome/QueuePanel.js +10 -0
  163. package/dist/classic/chrome/QueuePanel.js.map +1 -0
  164. package/dist/classic/chrome/ResponderStrip.d.ts +3 -0
  165. package/dist/classic/chrome/ResponderStrip.js +9 -0
  166. package/dist/classic/chrome/ResponderStrip.js.map +1 -0
  167. package/dist/classic/chrome/StatusBar.d.ts +3 -0
  168. package/dist/classic/chrome/StatusBar.js +7 -0
  169. package/dist/classic/chrome/StatusBar.js.map +1 -0
  170. package/dist/classic/chrome/ToastRow.d.ts +3 -0
  171. package/dist/classic/chrome/ToastRow.js +10 -0
  172. package/dist/classic/chrome/ToastRow.js.map +1 -0
  173. package/dist/classic/chrome/composer-controller.d.ts +57 -0
  174. package/dist/classic/chrome/composer-controller.js +345 -0
  175. package/dist/classic/chrome/composer-controller.js.map +1 -0
  176. package/dist/classic/chrome/composer-frame.d.ts +35 -0
  177. package/dist/classic/chrome/composer-frame.js +46 -0
  178. package/dist/classic/chrome/composer-frame.js.map +1 -0
  179. package/dist/classic/chrome/composer-keys.d.ts +4 -0
  180. package/dist/classic/chrome/composer-keys.js +45 -0
  181. package/dist/classic/chrome/composer-keys.js.map +1 -0
  182. package/dist/classic/chrome/context-limit-editor.d.ts +7 -0
  183. package/dist/classic/chrome/context-limit-editor.js +13 -0
  184. package/dist/classic/chrome/context-limit-editor.js.map +1 -0
  185. package/dist/classic/chrome/directory-row.d.ts +14 -0
  186. package/dist/classic/chrome/directory-row.js +26 -0
  187. package/dist/classic/chrome/directory-row.js.map +1 -0
  188. package/dist/classic/chrome/editor-model.d.ts +37 -0
  189. package/dist/classic/chrome/editor-model.js +195 -0
  190. package/dist/classic/chrome/editor-model.js.map +1 -0
  191. package/dist/classic/chrome/editor-view.d.ts +34 -0
  192. package/dist/classic/chrome/editor-view.js +141 -0
  193. package/dist/classic/chrome/editor-view.js.map +1 -0
  194. package/dist/classic/chrome/queue-rows.d.ts +10 -0
  195. package/dist/classic/chrome/queue-rows.js +32 -0
  196. package/dist/classic/chrome/queue-rows.js.map +1 -0
  197. package/dist/classic/chrome/responder-row.d.ts +9 -0
  198. package/dist/classic/chrome/responder-row.js +17 -0
  199. package/dist/classic/chrome/responder-row.js.map +1 -0
  200. package/dist/classic/chrome/row-budget.d.ts +43 -0
  201. package/dist/classic/chrome/row-budget.js +78 -0
  202. package/dist/classic/chrome/row-budget.js.map +1 -0
  203. package/dist/classic/chrome/status-rows.d.ts +44 -0
  204. package/dist/classic/chrome/status-rows.js +165 -0
  205. package/dist/classic/chrome/status-rows.js.map +1 -0
  206. package/dist/classic/chrome/toast-rows.d.ts +14 -0
  207. package/dist/classic/chrome/toast-rows.js +82 -0
  208. package/dist/classic/chrome/toast-rows.js.map +1 -0
  209. package/dist/classic/chrome/use-terminal-size.d.ts +14 -0
  210. package/dist/classic/chrome/use-terminal-size.js +38 -0
  211. package/dist/classic/chrome/use-terminal-size.js.map +1 -0
  212. package/dist/classic/feed/Feed.d.ts +17 -0
  213. package/dist/classic/feed/Feed.js +37 -0
  214. package/dist/classic/feed/Feed.js.map +1 -0
  215. package/dist/classic/feed/FeedStatic.d.ts +13 -0
  216. package/dist/classic/feed/FeedStatic.js +15 -0
  217. package/dist/classic/feed/FeedStatic.js.map +1 -0
  218. package/dist/classic/feed/LiveTail.d.ts +10 -0
  219. package/dist/classic/feed/LiveTail.js +20 -0
  220. package/dist/classic/feed/LiveTail.js.map +1 -0
  221. package/dist/classic/feed/ScrollbarGutter.d.ts +9 -0
  222. package/dist/classic/feed/ScrollbarGutter.js +42 -0
  223. package/dist/classic/feed/ScrollbarGutter.js.map +1 -0
  224. package/dist/classic/feed/block-height.d.ts +12 -0
  225. package/dist/classic/feed/block-height.js +34 -0
  226. package/dist/classic/feed/block-height.js.map +1 -0
  227. package/dist/classic/feed/commit-ledger.d.ts +26 -0
  228. package/dist/classic/feed/commit-ledger.js +52 -0
  229. package/dist/classic/feed/commit-ledger.js.map +1 -0
  230. package/dist/classic/feed/feed-blocks.d.ts +39 -0
  231. package/dist/classic/feed/feed-blocks.js +124 -0
  232. package/dist/classic/feed/feed-blocks.js.map +1 -0
  233. package/dist/classic/feed/live-tail-policy.d.ts +35 -0
  234. package/dist/classic/feed/live-tail-policy.js +80 -0
  235. package/dist/classic/feed/live-tail-policy.js.map +1 -0
  236. package/dist/classic/feed/scrollbar-rows.d.ts +6 -0
  237. package/dist/classic/feed/scrollbar-rows.js +18 -0
  238. package/dist/classic/feed/scrollbar-rows.js.map +1 -0
  239. package/dist/classic/feed/transcript-selection.d.ts +16 -0
  240. package/dist/classic/feed/transcript-selection.js +92 -0
  241. package/dist/classic/feed/transcript-selection.js.map +1 -0
  242. package/dist/classic/feed/transcript-window.d.ts +33 -0
  243. package/dist/classic/feed/transcript-window.js +53 -0
  244. package/dist/classic/feed/transcript-window.js.map +1 -0
  245. package/dist/classic/input/cancel-ladder.d.ts +47 -0
  246. package/dist/classic/input/cancel-ladder.js +100 -0
  247. package/dist/classic/input/cancel-ladder.js.map +1 -0
  248. package/dist/classic/input/chord-from-key.d.ts +2 -0
  249. package/dist/classic/input/chord-from-key.js +25 -0
  250. package/dist/classic/input/chord-from-key.js.map +1 -0
  251. package/dist/classic/input/input-router.d.ts +33 -0
  252. package/dist/classic/input/input-router.js +146 -0
  253. package/dist/classic/input/input-router.js.map +1 -0
  254. package/dist/classic/input/key-event.d.ts +39 -0
  255. package/dist/classic/input/key-event.js +12 -0
  256. package/dist/classic/input/key-event.js.map +1 -0
  257. package/dist/classic/input/paste-decoder.d.ts +1 -0
  258. package/dist/classic/input/paste-decoder.js +9 -0
  259. package/dist/classic/input/paste-decoder.js.map +1 -0
  260. package/dist/classic/input/raw-decoder.d.ts +31 -0
  261. package/dist/classic/input/raw-decoder.js +325 -0
  262. package/dist/classic/input/raw-decoder.js.map +1 -0
  263. package/dist/classic/input/sgr-mouse.d.ts +2 -0
  264. package/dist/classic/input/sgr-mouse.js +37 -0
  265. package/dist/classic/input/sgr-mouse.js.map +1 -0
  266. package/dist/classic/input/terminal-sequences.d.ts +38 -0
  267. package/dist/classic/input/terminal-sequences.js +111 -0
  268. package/dist/classic/input/terminal-sequences.js.map +1 -0
  269. package/dist/classic/panels/CompletionPanel.d.ts +3 -0
  270. package/dist/classic/panels/CompletionPanel.js +10 -0
  271. package/dist/classic/panels/CompletionPanel.js.map +1 -0
  272. package/dist/classic/panels/ConfirmPanel.d.ts +3 -0
  273. package/dist/classic/panels/ConfirmPanel.js +7 -0
  274. package/dist/classic/panels/ConfirmPanel.js.map +1 -0
  275. package/dist/classic/panels/JobsPanel.d.ts +3 -0
  276. package/dist/classic/panels/JobsPanel.js +7 -0
  277. package/dist/classic/panels/JobsPanel.js.map +1 -0
  278. package/dist/classic/panels/KeysPanel.d.ts +3 -0
  279. package/dist/classic/panels/KeysPanel.js +7 -0
  280. package/dist/classic/panels/KeysPanel.js.map +1 -0
  281. package/dist/classic/panels/PagerPanel.d.ts +3 -0
  282. package/dist/classic/panels/PagerPanel.js +7 -0
  283. package/dist/classic/panels/PagerPanel.js.map +1 -0
  284. package/dist/classic/panels/PanelFrame.d.ts +3 -0
  285. package/dist/classic/panels/PanelFrame.js +8 -0
  286. package/dist/classic/panels/PanelFrame.js.map +1 -0
  287. package/dist/classic/panels/PickerPanel.d.ts +3 -0
  288. package/dist/classic/panels/PickerPanel.js +7 -0
  289. package/dist/classic/panels/PickerPanel.js.map +1 -0
  290. package/dist/classic/panels/PlanPanel.d.ts +3 -0
  291. package/dist/classic/panels/PlanPanel.js +7 -0
  292. package/dist/classic/panels/PlanPanel.js.map +1 -0
  293. package/dist/classic/panels/PromptActionsPanel.d.ts +3 -0
  294. package/dist/classic/panels/PromptActionsPanel.js +7 -0
  295. package/dist/classic/panels/PromptActionsPanel.js.map +1 -0
  296. package/dist/classic/panels/ScopePanel.d.ts +3 -0
  297. package/dist/classic/panels/ScopePanel.js +7 -0
  298. package/dist/classic/panels/ScopePanel.js.map +1 -0
  299. package/dist/classic/panels/SearchPanel.d.ts +3 -0
  300. package/dist/classic/panels/SearchPanel.js +7 -0
  301. package/dist/classic/panels/SearchPanel.js.map +1 -0
  302. package/dist/classic/panels/SecretPanel.d.ts +3 -0
  303. package/dist/classic/panels/SecretPanel.js +7 -0
  304. package/dist/classic/panels/SecretPanel.js.map +1 -0
  305. package/dist/classic/panels/completion-accept.d.ts +17 -0
  306. package/dist/classic/panels/completion-accept.js +58 -0
  307. package/dist/classic/panels/completion-accept.js.map +1 -0
  308. package/dist/classic/panels/completion-rows.d.ts +29 -0
  309. package/dist/classic/panels/completion-rows.js +135 -0
  310. package/dist/classic/panels/completion-rows.js.map +1 -0
  311. package/dist/classic/panels/confirm-panel.d.ts +24 -0
  312. package/dist/classic/panels/confirm-panel.js +115 -0
  313. package/dist/classic/panels/confirm-panel.js.map +1 -0
  314. package/dist/classic/panels/jobs-panel.d.ts +32 -0
  315. package/dist/classic/panels/jobs-panel.js +116 -0
  316. package/dist/classic/panels/jobs-panel.js.map +1 -0
  317. package/dist/classic/panels/keys-panel.d.ts +40 -0
  318. package/dist/classic/panels/keys-panel.js +174 -0
  319. package/dist/classic/panels/keys-panel.js.map +1 -0
  320. package/dist/classic/panels/list-rows.d.ts +27 -0
  321. package/dist/classic/panels/list-rows.js +42 -0
  322. package/dist/classic/panels/list-rows.js.map +1 -0
  323. package/dist/classic/panels/list-window.d.ts +15 -0
  324. package/dist/classic/panels/list-window.js +25 -0
  325. package/dist/classic/panels/list-window.js.map +1 -0
  326. package/dist/classic/panels/pager-panel.d.ts +50 -0
  327. package/dist/classic/panels/pager-panel.js +238 -0
  328. package/dist/classic/panels/pager-panel.js.map +1 -0
  329. package/dist/classic/panels/panel-controller.d.ts +29 -0
  330. package/dist/classic/panels/panel-controller.js +320 -0
  331. package/dist/classic/panels/panel-controller.js.map +1 -0
  332. package/dist/classic/panels/panel-effect.d.ts +74 -0
  333. package/dist/classic/panels/panel-effect.js +7 -0
  334. package/dist/classic/panels/panel-effect.js.map +1 -0
  335. package/dist/classic/panels/panel-effects.d.ts +11 -0
  336. package/dist/classic/panels/panel-effects.js +105 -0
  337. package/dist/classic/panels/panel-effects.js.map +1 -0
  338. package/dist/classic/panels/panel-frame.d.ts +20 -0
  339. package/dist/classic/panels/panel-frame.js +47 -0
  340. package/dist/classic/panels/panel-frame.js.map +1 -0
  341. package/dist/classic/panels/panel-host.d.ts +16 -0
  342. package/dist/classic/panels/panel-host.js +49 -0
  343. package/dist/classic/panels/panel-host.js.map +1 -0
  344. package/dist/classic/panels/panel-initial-states.d.ts +18 -0
  345. package/dist/classic/panels/panel-initial-states.js +33 -0
  346. package/dist/classic/panels/panel-initial-states.js.map +1 -0
  347. package/dist/classic/panels/panel-types.d.ts +47 -0
  348. package/dist/classic/panels/panel-types.js +2 -0
  349. package/dist/classic/panels/panel-types.js.map +1 -0
  350. package/dist/classic/panels/panel-wheel.d.ts +20 -0
  351. package/dist/classic/panels/panel-wheel.js +82 -0
  352. package/dist/classic/panels/panel-wheel.js.map +1 -0
  353. package/dist/classic/panels/picker-panel.d.ts +35 -0
  354. package/dist/classic/panels/picker-panel.js +150 -0
  355. package/dist/classic/panels/picker-panel.js.map +1 -0
  356. package/dist/classic/panels/plan-panel.d.ts +27 -0
  357. package/dist/classic/panels/plan-panel.js +98 -0
  358. package/dist/classic/panels/plan-panel.js.map +1 -0
  359. package/dist/classic/panels/prompt-actions-panel.d.ts +25 -0
  360. package/dist/classic/panels/prompt-actions-panel.js +57 -0
  361. package/dist/classic/panels/prompt-actions-panel.js.map +1 -0
  362. package/dist/classic/panels/scope-panel.d.ts +27 -0
  363. package/dist/classic/panels/scope-panel.js +122 -0
  364. package/dist/classic/panels/scope-panel.js.map +1 -0
  365. package/dist/classic/panels/search-panel.d.ts +32 -0
  366. package/dist/classic/panels/search-panel.js +126 -0
  367. package/dist/classic/panels/search-panel.js.map +1 -0
  368. package/dist/classic/panels/secret-panel.d.ts +28 -0
  369. package/dist/classic/panels/secret-panel.js +70 -0
  370. package/dist/classic/panels/secret-panel.js.map +1 -0
  371. package/dist/classic/render/ansi-text.d.ts +36 -0
  372. package/dist/classic/render/ansi-text.js +234 -0
  373. package/dist/classic/render/ansi-text.js.map +1 -0
  374. package/dist/classic/render/glyphs.d.ts +49 -0
  375. package/dist/classic/render/glyphs.js +111 -0
  376. package/dist/classic/render/glyphs.js.map +1 -0
  377. package/dist/classic/render/ink-theme.d.ts +49 -0
  378. package/dist/classic/render/ink-theme.js +73 -0
  379. package/dist/classic/render/ink-theme.js.map +1 -0
  380. package/dist/classic/render/measure.d.ts +17 -0
  381. package/dist/classic/render/measure.js +33 -0
  382. package/dist/classic/render/measure.js.map +1 -0
  383. package/dist/classic/render/shell-width.d.ts +12 -0
  384. package/dist/classic/render/shell-width.js +23 -0
  385. package/dist/classic/render/shell-width.js.map +1 -0
  386. package/dist/classic/render/wrap.d.ts +19 -0
  387. package/dist/classic/render/wrap.js +102 -0
  388. package/dist/classic/render/wrap.js.map +1 -0
  389. package/dist/commands/doctor.js +9 -8
  390. package/dist/commands/doctor.js.map +1 -1
  391. package/dist/commands/providers.js +43 -50
  392. package/dist/commands/providers.js.map +1 -1
  393. package/dist/commands/search-providers.js +3 -5
  394. package/dist/commands/search-providers.js.map +1 -1
  395. package/dist/index.js +76 -84
  396. package/dist/index.js.map +1 -1
  397. package/dist/llm/capabilities.js +5 -2
  398. package/dist/llm/capabilities.js.map +1 -1
  399. package/dist/llm/custom-providers.js +16 -3
  400. package/dist/llm/custom-providers.js.map +1 -1
  401. package/dist/llm/http.d.ts +5 -0
  402. package/dist/llm/http.js +38 -8
  403. package/dist/llm/http.js.map +1 -1
  404. package/dist/llm/meta.js +56 -24
  405. package/dist/llm/meta.js.map +1 -1
  406. package/dist/llm/modal.js +3 -2
  407. package/dist/llm/modal.js.map +1 -1
  408. package/dist/llm/router.js +36 -23
  409. package/dist/llm/router.js.map +1 -1
  410. package/dist/llm/system-messages.d.ts +1 -0
  411. package/dist/llm/system-messages.js +6 -0
  412. package/dist/llm/system-messages.js.map +1 -1
  413. package/dist/llm/token-usage.js +11 -1
  414. package/dist/llm/token-usage.js.map +1 -1
  415. package/dist/llm/tool-protocol.js +10 -3
  416. package/dist/llm/tool-protocol.js.map +1 -1
  417. package/dist/modes/agent.d.ts +3 -0
  418. package/dist/modes/agent.js +10 -3
  419. package/dist/modes/agent.js.map +1 -1
  420. package/dist/modes/ask.js +2 -2
  421. package/dist/modes/ask.js.map +1 -1
  422. package/dist/noninteractive/read-stdin.d.ts +1 -0
  423. package/dist/noninteractive/read-stdin.js +8 -0
  424. package/dist/noninteractive/read-stdin.js.map +1 -0
  425. package/dist/noninteractive/readline-prompts.d.ts +47 -0
  426. package/dist/noninteractive/readline-prompts.js +201 -0
  427. package/dist/noninteractive/readline-prompts.js.map +1 -0
  428. package/dist/noninteractive/start-noninteractive.d.ts +32 -0
  429. package/dist/noninteractive/start-noninteractive.js +100 -0
  430. package/dist/noninteractive/start-noninteractive.js.map +1 -0
  431. package/dist/noninteractive/stdio-confirm-port.d.ts +15 -0
  432. package/dist/noninteractive/stdio-confirm-port.js +45 -0
  433. package/dist/noninteractive/stdio-confirm-port.js.map +1 -0
  434. package/dist/noninteractive/stream-blocks.d.ts +117 -0
  435. package/dist/noninteractive/stream-blocks.js +445 -0
  436. package/dist/noninteractive/stream-blocks.js.map +1 -0
  437. package/dist/noninteractive/stream-renderer.d.ts +40 -0
  438. package/dist/noninteractive/stream-renderer.js +164 -0
  439. package/dist/noninteractive/stream-renderer.js.map +1 -0
  440. package/dist/noninteractive/stream-spinner.d.ts +28 -0
  441. package/dist/noninteractive/stream-spinner.js +45 -0
  442. package/dist/noninteractive/stream-spinner.js.map +1 -0
  443. package/dist/os/bun-runtime.js +207 -0
  444. package/dist/os/bun-runtime.js.map +1 -0
  445. package/dist/store/config.d.ts +3 -1
  446. package/dist/store/config.js +37 -5
  447. package/dist/store/config.js.map +1 -1
  448. package/dist/store/history.d.ts +1 -1
  449. package/dist/store/history.js +3 -0
  450. package/dist/store/history.js.map +1 -1
  451. package/dist/store/keys.d.ts +5 -2
  452. package/dist/store/keys.js +97 -14
  453. package/dist/store/keys.js.map +1 -1
  454. package/dist/tools/registry.js +27 -4
  455. package/dist/tools/registry.js.map +1 -1
  456. package/dist/tools/web/providers/duckduckgo.js +1 -1
  457. package/dist/tools/web/providers/duckduckgo.js.map +1 -1
  458. package/dist/tools/web/readable.js +1 -1
  459. package/dist/tools/web/readable.js.map +1 -1
  460. package/dist/tui-v2/app/App.js +20 -28
  461. package/dist/tui-v2/app/App.js.map +1 -1
  462. package/dist/tui-v2/bootstrap/pager-export.d.ts +9 -18
  463. package/dist/tui-v2/bootstrap/pager-export.js +15 -72
  464. package/dist/tui-v2/bootstrap/pager-export.js.map +1 -1
  465. package/dist/tui-v2/bootstrap/start-tui-v2.js +8 -8
  466. package/dist/tui-v2/bootstrap/start-tui-v2.js.map +1 -1
  467. package/dist/tui-v2/components/completion/completion-menu.d.ts +2 -2
  468. package/dist/tui-v2/components/composer/composer-input-box.d.ts +1 -1
  469. package/dist/tui-v2/components/composer/paste-chip.d.ts +2 -2
  470. package/dist/tui-v2/components/composer/paste-chip.js +1 -1
  471. package/dist/tui-v2/components/composer/paste-chip.js.map +1 -1
  472. package/dist/tui-v2/components/jobs/jobs-panel.d.ts +2 -2
  473. package/dist/tui-v2/components/jobs/jobs-panel.js +4 -4
  474. package/dist/tui-v2/components/jobs/jobs-panel.js.map +1 -1
  475. package/dist/tui-v2/components/modal/confirm-modal.d.ts +3 -3
  476. package/dist/tui-v2/components/modal/confirm-modal.js +6 -6
  477. package/dist/tui-v2/components/modal/confirm-modal.js.map +1 -1
  478. package/dist/tui-v2/components/modal/keys-modal.d.ts +3 -3
  479. package/dist/tui-v2/components/modal/keys-modal.js +24 -9
  480. package/dist/tui-v2/components/modal/keys-modal.js.map +1 -1
  481. package/dist/tui-v2/components/modal/prompt-actions-modal.d.ts +3 -3
  482. package/dist/tui-v2/components/modal/prompt-actions-modal.js +2 -2
  483. package/dist/tui-v2/components/modal/prompt-actions-modal.js.map +1 -1
  484. package/dist/tui-v2/components/modal/scope-modal.d.ts +3 -3
  485. package/dist/tui-v2/components/modal/scope-modal.js +1 -1
  486. package/dist/tui-v2/components/modal/scope-modal.js.map +1 -1
  487. package/dist/tui-v2/components/modal/secret-modal.d.ts +3 -3
  488. package/dist/tui-v2/components/modal/secret-modal.js +2 -2
  489. package/dist/tui-v2/components/modal/secret-modal.js.map +1 -1
  490. package/dist/tui-v2/components/overlay/overlay-host.d.ts +2 -2
  491. package/dist/tui-v2/components/overlay/overlay-host.js +1 -1
  492. package/dist/tui-v2/components/overlay/overlay-host.js.map +1 -1
  493. package/dist/tui-v2/components/pager/pager-line.d.ts +3 -3
  494. package/dist/tui-v2/components/pager/pager-line.js +3 -3
  495. package/dist/tui-v2/components/pager/pager-line.js.map +1 -1
  496. package/dist/tui-v2/components/pager/pager.d.ts +3 -3
  497. package/dist/tui-v2/components/pager/pager.js +6 -5
  498. package/dist/tui-v2/components/pager/pager.js.map +1 -1
  499. package/dist/tui-v2/components/picker/picker.d.ts +3 -3
  500. package/dist/tui-v2/components/picker/picker.js +2 -2
  501. package/dist/tui-v2/components/picker/picker.js.map +1 -1
  502. package/dist/tui-v2/components/plan/plan-pane-anim.js +1 -1
  503. package/dist/tui-v2/components/plan/plan-pane-anim.js.map +1 -1
  504. package/dist/tui-v2/components/plan/plan-view.d.ts +2 -2
  505. package/dist/tui-v2/components/plan/plan-view.js +2 -2
  506. package/dist/tui-v2/components/plan/plan-view.js.map +1 -1
  507. package/dist/tui-v2/components/queue/queue-panel.d.ts +2 -2
  508. package/dist/tui-v2/components/queue/queue-panel.js +3 -3
  509. package/dist/tui-v2/components/queue/queue-panel.js.map +1 -1
  510. package/dist/tui-v2/components/status/context-limit-chip.d.ts +1 -5
  511. package/dist/tui-v2/components/status/context-limit-chip.js +1 -38
  512. package/dist/tui-v2/components/status/context-limit-chip.js.map +1 -1
  513. package/dist/tui-v2/components/status/status-line.d.ts +5 -34
  514. package/dist/tui-v2/components/status/status-line.js +7 -99
  515. package/dist/tui-v2/components/status/status-line.js.map +1 -1
  516. package/dist/tui-v2/components/toast/toast-anim.d.ts +0 -1
  517. package/dist/tui-v2/components/toast/toast-anim.js +2 -3
  518. package/dist/tui-v2/components/toast/toast-anim.js.map +1 -1
  519. package/dist/tui-v2/components/toast/toast-host.d.ts +2 -2
  520. package/dist/tui-v2/components/toast/toast-host.js +2 -2
  521. package/dist/tui-v2/components/toast/toast-host.js.map +1 -1
  522. package/dist/tui-v2/components/transcript/assistant-message.d.ts +2 -2
  523. package/dist/tui-v2/components/transcript/assistant-message.js +3 -2
  524. package/dist/tui-v2/components/transcript/assistant-message.js.map +1 -1
  525. package/dist/tui-v2/components/transcript/compacted-row.d.ts +3 -3
  526. package/dist/tui-v2/components/transcript/compacted-row.js +6 -5
  527. package/dist/tui-v2/components/transcript/compacted-row.js.map +1 -1
  528. package/dist/tui-v2/components/transcript/file-diff-card.d.ts +1 -1
  529. package/dist/tui-v2/components/transcript/file-diff-card.js +1 -1
  530. package/dist/tui-v2/components/transcript/file-diff-card.js.map +1 -1
  531. package/dist/tui-v2/components/transcript/intro-card.d.ts +2 -2
  532. package/dist/tui-v2/components/transcript/intro-card.js +1 -1
  533. package/dist/tui-v2/components/transcript/intro-card.js.map +1 -1
  534. package/dist/tui-v2/components/transcript/linkable-text.d.ts +1 -1
  535. package/dist/tui-v2/components/transcript/linkable-text.js +1 -1
  536. package/dist/tui-v2/components/transcript/linkable-text.js.map +1 -1
  537. package/dist/tui-v2/components/transcript/notice-row.d.ts +2 -2
  538. package/dist/tui-v2/components/transcript/search-bar.d.ts +1 -1
  539. package/dist/tui-v2/components/transcript/thinking-block.d.ts +2 -2
  540. package/dist/tui-v2/components/transcript/thinking-block.js +3 -3
  541. package/dist/tui-v2/components/transcript/thinking-block.js.map +1 -1
  542. package/dist/tui-v2/components/transcript/tool-card.d.ts +3 -3
  543. package/dist/tui-v2/components/transcript/tool-card.js +7 -7
  544. package/dist/tui-v2/components/transcript/tool-card.js.map +1 -1
  545. package/dist/tui-v2/components/transcript/transcript-row.d.ts +4 -4
  546. package/dist/tui-v2/components/transcript/transcript-scrollbar.d.ts +1 -1
  547. package/dist/tui-v2/components/transcript/transcript-view.d.ts +3 -3
  548. package/dist/tui-v2/components/transcript/transcript-view.js +6 -6
  549. package/dist/tui-v2/components/transcript/transcript-view.js.map +1 -1
  550. package/dist/tui-v2/components/transcript/use-native-selection-copy.d.ts +1 -1
  551. package/dist/tui-v2/components/transcript/use-transcript-selection.d.ts +2 -2
  552. package/dist/tui-v2/components/transcript/use-transcript-selection.js +3 -3
  553. package/dist/tui-v2/components/transcript/use-transcript-selection.js.map +1 -1
  554. package/dist/tui-v2/components/transcript/user-message.d.ts +2 -2
  555. package/dist/tui-v2/components/transcript/user-message.js +1 -1
  556. package/dist/tui-v2/components/transcript/user-message.js.map +1 -1
  557. package/dist/tui-v2/composer/composer-editor.d.ts +2 -2
  558. package/dist/tui-v2/composer/composer-editor.js +20 -22
  559. package/dist/tui-v2/composer/composer-editor.js.map +1 -1
  560. package/dist/tui-v2/composer/composer-image-paste.d.ts +1 -1
  561. package/dist/tui-v2/composer/composer-image-paste.js +1 -1
  562. package/dist/tui-v2/composer/composer-image-paste.js.map +1 -1
  563. package/dist/tui-v2/composer/use-draft-actions.d.ts +2 -2
  564. package/dist/tui-v2/composer/use-draft-actions.js +2 -2
  565. package/dist/tui-v2/composer/use-draft-actions.js.map +1 -1
  566. package/dist/tui-v2/input/chord-from-opentui-key.d.ts +20 -0
  567. package/dist/tui-v2/input/chord-from-opentui-key.js +51 -0
  568. package/dist/tui-v2/input/chord-from-opentui-key.js.map +1 -0
  569. package/dist/tui-v2/rendering/pager-markdown.d.ts +2 -22
  570. package/dist/tui-v2/rendering/pager-markdown.js +4 -103
  571. package/dist/tui-v2/rendering/pager-markdown.js.map +1 -1
  572. package/dist/tui-v2/rendering/styled-markdown.d.ts +20 -0
  573. package/dist/tui-v2/rendering/styled-markdown.js +35 -0
  574. package/dist/tui-v2/rendering/styled-markdown.js.map +1 -0
  575. package/dist/types.d.ts +2 -0
  576. package/dist/ui/mentions.d.ts +5 -8
  577. package/dist/ui/mentions.js +26 -8
  578. package/dist/ui/mentions.js.map +1 -1
  579. package/dist/ui/warn-once.d.ts +2 -0
  580. package/dist/ui/warn-once.js +13 -0
  581. package/dist/ui/warn-once.js.map +1 -0
  582. package/dist/ui-core/actions/action-id.d.ts +14 -0
  583. package/dist/ui-core/actions/action-id.js +123 -0
  584. package/dist/ui-core/actions/action-id.js.map +1 -0
  585. package/dist/ui-core/actions/action-router.js.map +1 -0
  586. package/dist/ui-core/actions/chord.d.ts +20 -0
  587. package/dist/ui-core/actions/chord.js +28 -0
  588. package/dist/ui-core/actions/chord.js.map +1 -0
  589. package/dist/ui-core/actions/format-shortcuts.js +267 -0
  590. package/dist/ui-core/actions/format-shortcuts.js.map +1 -0
  591. package/dist/ui-core/actions/keymap.d.ts +23 -0
  592. package/dist/ui-core/actions/keymap.js +145 -0
  593. package/dist/ui-core/actions/keymap.js.map +1 -0
  594. package/dist/ui-core/actions/mode-cycle.js.map +1 -0
  595. package/dist/ui-core/bootstrap/can-use-tui.js.map +1 -0
  596. package/dist/ui-core/bootstrap/capabilities.d.ts +37 -0
  597. package/dist/ui-core/bootstrap/capabilities.js +111 -0
  598. package/dist/ui-core/bootstrap/capabilities.js.map +1 -0
  599. package/dist/ui-core/bootstrap/composition-root.d.ts +92 -0
  600. package/dist/ui-core/bootstrap/composition-root.js.map +1 -0
  601. package/dist/ui-core/bootstrap/console-guard.js.map +1 -0
  602. package/dist/ui-core/bootstrap/console-suppress.js.map +1 -0
  603. package/dist/ui-core/bootstrap/lifecycle.js.map +1 -0
  604. package/dist/ui-core/bootstrap/overlay-ports.js +92 -0
  605. package/dist/ui-core/bootstrap/overlay-ports.js.map +1 -0
  606. package/dist/ui-core/bootstrap/ui-selection.d.ts +27 -0
  607. package/dist/ui-core/bootstrap/ui-selection.js +109 -0
  608. package/dist/ui-core/bootstrap/ui-selection.js.map +1 -0
  609. package/dist/ui-core/commands/command-handlers.js +86 -0
  610. package/dist/ui-core/commands/command-handlers.js.map +1 -0
  611. package/dist/ui-core/commands/config-commands.d.ts +14 -0
  612. package/dist/ui-core/commands/config-commands.js +315 -0
  613. package/dist/ui-core/commands/config-commands.js.map +1 -0
  614. package/dist/ui-core/commands/key-commands.d.ts +9 -0
  615. package/dist/ui-core/commands/key-commands.js +532 -0
  616. package/dist/ui-core/commands/key-commands.js.map +1 -0
  617. package/dist/ui-core/commands/picker-commands.d.ts +25 -0
  618. package/dist/ui-core/commands/picker-commands.js +1045 -0
  619. package/dist/ui-core/commands/picker-commands.js.map +1 -0
  620. package/dist/ui-core/commands/session-commands.d.ts +19 -0
  621. package/dist/ui-core/commands/session-commands.js +183 -0
  622. package/dist/ui-core/commands/session-commands.js.map +1 -0
  623. package/dist/ui-core/commands/startup-update.js.map +1 -0
  624. package/dist/ui-core/composer/arrow-intent.js.map +1 -0
  625. package/dist/ui-core/composer/completion.js.map +1 -0
  626. package/dist/ui-core/composer/composer-action-port.js.map +1 -0
  627. package/dist/ui-core/composer/composer-height.js +29 -0
  628. package/dist/ui-core/composer/composer-height.js.map +1 -0
  629. package/dist/ui-core/composer/composer-image-paste.d.ts +20 -0
  630. package/dist/ui-core/composer/composer-image-paste.js +77 -0
  631. package/dist/ui-core/composer/composer-image-paste.js.map +1 -0
  632. package/dist/ui-core/composer/composer-meta.js.map +1 -0
  633. package/dist/ui-core/composer/composer-wheel.d.ts +58 -0
  634. package/dist/ui-core/composer/composer-wheel.js +108 -0
  635. package/dist/ui-core/composer/composer-wheel.js.map +1 -0
  636. package/dist/ui-core/composer/draft-actions.d.ts +31 -0
  637. package/dist/ui-core/composer/draft-actions.js +45 -0
  638. package/dist/ui-core/composer/draft-actions.js.map +1 -0
  639. package/dist/ui-core/composer/history-nav.js.map +1 -0
  640. package/dist/ui-core/composer/input-history.js +9 -0
  641. package/dist/ui-core/composer/input-history.js.map +1 -0
  642. package/dist/ui-core/composer/newline-hint.d.ts +13 -0
  643. package/dist/ui-core/composer/newline-hint.js.map +1 -0
  644. package/dist/ui-core/composer/paste-placeholder.js.map +1 -0
  645. package/dist/ui-core/composer/prompt-history.js.map +1 -0
  646. package/dist/ui-core/composer/secret-buffer.js.map +1 -0
  647. package/dist/ui-core/composer/textarea-keybindings.d.ts +25 -0
  648. package/dist/ui-core/composer/textarea-keybindings.js +84 -0
  649. package/dist/ui-core/composer/textarea-keybindings.js.map +1 -0
  650. package/dist/ui-core/controllers/focus-controller.js.map +1 -0
  651. package/dist/ui-core/controllers/interruptible-controller.js.map +1 -0
  652. package/dist/ui-core/controllers/overlay-controller.d.ts +211 -0
  653. package/dist/ui-core/controllers/overlay-controller.js.map +1 -0
  654. package/dist/ui-core/controllers/selection-controller.js.map +1 -0
  655. package/dist/ui-core/controllers/toast-controller.js.map +1 -0
  656. package/dist/ui-core/layout/compute-layout.js.map +1 -0
  657. package/dist/ui-core/motion/ease.js.map +1 -0
  658. package/dist/ui-core/notify.js.map +1 -0
  659. package/dist/ui-core/plan/plan-lifecycle.js.map +1 -0
  660. package/dist/ui-core/ports/clipboard-osc52.js +44 -0
  661. package/dist/ui-core/ports/clipboard-osc52.js.map +1 -0
  662. package/dist/ui-core/ports/pager-export-port.d.ts +16 -0
  663. package/dist/ui-core/ports/pager-export-port.js +70 -0
  664. package/dist/ui-core/ports/pager-export-port.js.map +1 -0
  665. package/dist/ui-core/ports/renderer-port.d.ts +10 -0
  666. package/dist/ui-core/ports/renderer-port.js +2 -0
  667. package/dist/ui-core/ports/renderer-port.js.map +1 -0
  668. package/dist/ui-core/react/providers.d.ts +16 -0
  669. package/dist/ui-core/react/providers.js +31 -0
  670. package/dist/ui-core/react/providers.js.map +1 -0
  671. package/dist/ui-core/react/use-has-draft.js.map +1 -0
  672. package/dist/ui-core/react/use-overlay.js.map +1 -0
  673. package/dist/ui-core/react/use-plan.js.map +1 -0
  674. package/dist/ui-core/react/use-session-state.js.map +1 -0
  675. package/dist/ui-core/react/use-toast.js.map +1 -0
  676. package/dist/ui-core/react/use-transcript-store.d.ts +10 -0
  677. package/dist/ui-core/react/use-transcript-store.js.map +1 -0
  678. package/dist/ui-core/rendering/artifact-pager-source.js.map +1 -0
  679. package/dist/ui-core/rendering/batch-sections.js.map +1 -0
  680. package/dist/ui-core/rendering/code-block.d.ts +48 -0
  681. package/dist/ui-core/rendering/code-block.js +407 -0
  682. package/dist/ui-core/rendering/code-block.js.map +1 -0
  683. package/dist/ui-core/rendering/context-limit.d.ts +8 -0
  684. package/dist/ui-core/rendering/context-limit.js +49 -0
  685. package/dist/ui-core/rendering/context-limit.js.map +1 -0
  686. package/dist/ui-core/rendering/file-diff-view.js.map +1 -0
  687. package/dist/ui-core/rendering/format-help.js.map +1 -0
  688. package/dist/ui-core/rendering/format-keys.d.ts +14 -0
  689. package/dist/ui-core/rendering/format-keys.js +78 -0
  690. package/dist/ui-core/rendering/format-keys.js.map +1 -0
  691. package/dist/ui-core/rendering/incremental-strip.js.map +1 -0
  692. package/dist/ui-core/rendering/intro-header.js.map +1 -0
  693. package/dist/ui-core/rendering/job-tail-source.js.map +1 -0
  694. package/dist/ui-core/rendering/link-detector.js.map +1 -0
  695. package/dist/ui-core/rendering/markdown.js.map +1 -0
  696. package/dist/ui-core/rendering/open-tool-output.js +346 -0
  697. package/dist/ui-core/rendering/open-tool-output.js.map +1 -0
  698. package/dist/ui-core/rendering/pager-chrome.js +119 -0
  699. package/dist/ui-core/rendering/pager-chrome.js.map +1 -0
  700. package/dist/ui-core/rendering/pager-source.d.ts +20 -0
  701. package/dist/ui-core/rendering/pager-source.js +101 -0
  702. package/dist/ui-core/rendering/pager-source.js.map +1 -0
  703. package/dist/ui-core/rendering/pager-text.d.ts +24 -0
  704. package/dist/ui-core/rendering/pager-text.js +105 -0
  705. package/dist/ui-core/rendering/pager-text.js.map +1 -0
  706. package/dist/ui-core/rendering/pager-view-policy.js +98 -0
  707. package/dist/ui-core/rendering/pager-view-policy.js.map +1 -0
  708. package/dist/ui-core/rendering/picker-filter.js.map +1 -0
  709. package/dist/ui-core/rendering/plan-view.js.map +1 -0
  710. package/dist/ui-core/rendering/prompt-preview.js.map +1 -0
  711. package/dist/ui-core/rendering/render-markdown-lines.d.ts +7 -0
  712. package/dist/ui-core/rendering/render-markdown-lines.js +26 -0
  713. package/dist/ui-core/rendering/render-markdown-lines.js.map +1 -0
  714. package/dist/ui-core/rendering/sanitize-display.js.map +1 -0
  715. package/dist/ui-core/rendering/status-segments.d.ts +25 -0
  716. package/dist/ui-core/rendering/status-segments.js +88 -0
  717. package/dist/ui-core/rendering/status-segments.js.map +1 -0
  718. package/dist/ui-core/rendering/streaming-markdown.d.ts +23 -0
  719. package/dist/ui-core/rendering/streaming-markdown.js +118 -0
  720. package/dist/ui-core/rendering/streaming-markdown.js.map +1 -0
  721. package/dist/ui-core/rendering/strip-tool-surfaces.js.map +1 -0
  722. package/dist/ui-core/rendering/syntax-highlight.js.map +1 -0
  723. package/dist/ui-core/rendering/text-format.js.map +1 -0
  724. package/dist/ui-core/rendering/text-width.js.map +1 -0
  725. package/dist/ui-core/rendering/theme.js.map +1 -0
  726. package/dist/ui-core/rendering/thinking-tail.js.map +1 -0
  727. package/dist/ui-core/rendering/tool-presenter.d.ts +68 -0
  728. package/dist/ui-core/rendering/tool-presenter.js +371 -0
  729. package/dist/ui-core/rendering/tool-presenter.js.map +1 -0
  730. package/dist/ui-core/rendering/transcript-export.d.ts +11 -0
  731. package/dist/ui-core/rendering/transcript-export.js +18 -0
  732. package/dist/ui-core/rendering/transcript-export.js.map +1 -0
  733. package/dist/ui-core/rendering/transcript-semantic.js.map +1 -0
  734. package/dist/ui-core/rendering/user-message-wrap.d.ts +18 -0
  735. package/dist/ui-core/rendering/user-message-wrap.js +23 -0
  736. package/dist/ui-core/rendering/user-message-wrap.js.map +1 -0
  737. package/dist/ui-core/rendering/wordmark.js.map +1 -0
  738. package/dist/ui-core/state/pager-search.js.map +1 -0
  739. package/dist/ui-core/state/semantic-document.js.map +1 -0
  740. package/dist/ui-core/state/transcript-compaction.js.map +1 -0
  741. package/dist/ui-core/state/transcript-hydrate.d.ts +67 -0
  742. package/dist/ui-core/state/transcript-hydrate.js +665 -0
  743. package/dist/ui-core/state/transcript-hydrate.js.map +1 -0
  744. package/dist/ui-core/state/transcript-reducer.js +484 -0
  745. package/dist/ui-core/state/transcript-reducer.js.map +1 -0
  746. package/dist/ui-core/state/transcript-search.js.map +1 -0
  747. package/dist/ui-core/state/transcript-store.js.map +1 -0
  748. package/dist/ui-core/state/transcript-struct.js.map +1 -0
  749. package/dist/ui-core/state/transcript-types.d.ts +103 -0
  750. package/dist/ui-core/state/transcript-types.js.map +1 -0
  751. package/dist/version.generated.d.ts +2 -2
  752. package/dist/version.generated.js +2 -2
  753. package/dist/version.generated.js.map +1 -1
  754. package/package.json +18 -12
  755. package/dist/agent/classic-renderer.d.ts +0 -5
  756. package/dist/agent/classic-renderer.js +0 -136
  757. package/dist/agent/classic-renderer.js.map +0 -1
  758. package/dist/app/adapters/current-terminal-adapter.d.ts +0 -2
  759. package/dist/app/adapters/current-terminal-adapter.js +0 -24
  760. package/dist/app/adapters/current-terminal-adapter.js.map +0 -1
  761. package/dist/app/controllers/job-controller.d.ts +0 -28
  762. package/dist/app/controllers/job-controller.js +0 -70
  763. package/dist/app/controllers/job-controller.js.map +0 -1
  764. package/dist/repl/prompt-line.d.ts +0 -24
  765. package/dist/repl/prompt-line.js +0 -558
  766. package/dist/repl/prompt-line.js.map +0 -1
  767. package/dist/repl/slash-commands.js +0 -392
  768. package/dist/repl/slash-commands.js.map +0 -1
  769. package/dist/repl.d.ts +0 -18
  770. package/dist/repl.js +0 -1868
  771. package/dist/repl.js.map +0 -1
  772. package/dist/safety/path-permissions.d.ts +0 -14
  773. package/dist/safety/path-permissions.js +0 -43
  774. package/dist/safety/path-permissions.js.map +0 -1
  775. package/dist/tools/reducers/generic.d.ts +0 -14
  776. package/dist/tools/reducers/generic.js +0 -5
  777. package/dist/tools/reducers/generic.js.map +0 -1
  778. package/dist/tui/can-use-tui.js.map +0 -1
  779. package/dist/tui/format-keys.d.ts +0 -13
  780. package/dist/tui/format-keys.js +0 -78
  781. package/dist/tui/format-keys.js.map +0 -1
  782. package/dist/tui/input-history.js +0 -9
  783. package/dist/tui/input-history.js.map +0 -1
  784. package/dist/tui/runtime.js +0 -207
  785. package/dist/tui/runtime.js.map +0 -1
  786. package/dist/tui/state.d.ts +0 -124
  787. package/dist/tui/state.js +0 -496
  788. package/dist/tui/state.js.map +0 -1
  789. package/dist/tui/text-format.js.map +0 -1
  790. package/dist/tui-v2/actions/action-id.d.ts +0 -14
  791. package/dist/tui-v2/actions/action-id.js +0 -117
  792. package/dist/tui-v2/actions/action-id.js.map +0 -1
  793. package/dist/tui-v2/actions/action-router.js.map +0 -1
  794. package/dist/tui-v2/actions/chord-from-key.d.ts +0 -10
  795. package/dist/tui-v2/actions/chord-from-key.js +0 -34
  796. package/dist/tui-v2/actions/chord-from-key.js.map +0 -1
  797. package/dist/tui-v2/actions/format-shortcuts.js +0 -267
  798. package/dist/tui-v2/actions/format-shortcuts.js.map +0 -1
  799. package/dist/tui-v2/actions/keymap.d.ts +0 -24
  800. package/dist/tui-v2/actions/keymap.js +0 -151
  801. package/dist/tui-v2/actions/keymap.js.map +0 -1
  802. package/dist/tui-v2/app/command-handlers.js +0 -86
  803. package/dist/tui-v2/app/command-handlers.js.map +0 -1
  804. package/dist/tui-v2/app/commands/config-commands.d.ts +0 -14
  805. package/dist/tui-v2/app/commands/config-commands.js +0 -315
  806. package/dist/tui-v2/app/commands/config-commands.js.map +0 -1
  807. package/dist/tui-v2/app/commands/key-commands.d.ts +0 -9
  808. package/dist/tui-v2/app/commands/key-commands.js +0 -496
  809. package/dist/tui-v2/app/commands/key-commands.js.map +0 -1
  810. package/dist/tui-v2/app/commands/picker-commands.d.ts +0 -25
  811. package/dist/tui-v2/app/commands/picker-commands.js +0 -1045
  812. package/dist/tui-v2/app/commands/picker-commands.js.map +0 -1
  813. package/dist/tui-v2/app/commands/session-commands.d.ts +0 -19
  814. package/dist/tui-v2/app/commands/session-commands.js +0 -183
  815. package/dist/tui-v2/app/commands/session-commands.js.map +0 -1
  816. package/dist/tui-v2/app/mode-cycle.js.map +0 -1
  817. package/dist/tui-v2/app/plan-lifecycle.js.map +0 -1
  818. package/dist/tui-v2/app/providers.d.ts +0 -17
  819. package/dist/tui-v2/app/providers.js +0 -32
  820. package/dist/tui-v2/app/providers.js.map +0 -1
  821. package/dist/tui-v2/app/startup-update.js.map +0 -1
  822. package/dist/tui-v2/bootstrap/capabilities.d.ts +0 -36
  823. package/dist/tui-v2/bootstrap/capabilities.js +0 -93
  824. package/dist/tui-v2/bootstrap/capabilities.js.map +0 -1
  825. package/dist/tui-v2/bootstrap/composition-root.d.ts +0 -92
  826. package/dist/tui-v2/bootstrap/composition-root.js.map +0 -1
  827. package/dist/tui-v2/bootstrap/console-guard.js.map +0 -1
  828. package/dist/tui-v2/bootstrap/console-suppress.js.map +0 -1
  829. package/dist/tui-v2/bootstrap/disable-native-selection.d.ts +0 -11
  830. package/dist/tui-v2/bootstrap/disable-native-selection.js +0 -13
  831. package/dist/tui-v2/bootstrap/disable-native-selection.js.map +0 -1
  832. package/dist/tui-v2/bootstrap/lifecycle.js.map +0 -1
  833. package/dist/tui-v2/bootstrap/osc52-clipboard.js +0 -44
  834. package/dist/tui-v2/bootstrap/osc52-clipboard.js.map +0 -1
  835. package/dist/tui-v2/bootstrap/overlay-ports.js +0 -114
  836. package/dist/tui-v2/bootstrap/overlay-ports.js.map +0 -1
  837. package/dist/tui-v2/bootstrap/ui-selection.d.ts +0 -30
  838. package/dist/tui-v2/bootstrap/ui-selection.js +0 -59
  839. package/dist/tui-v2/bootstrap/ui-selection.js.map +0 -1
  840. package/dist/tui-v2/composer/arrow-intent.js.map +0 -1
  841. package/dist/tui-v2/composer/completion.js.map +0 -1
  842. package/dist/tui-v2/composer/composer-action-port.js.map +0 -1
  843. package/dist/tui-v2/composer/composer-height.js +0 -29
  844. package/dist/tui-v2/composer/composer-height.js.map +0 -1
  845. package/dist/tui-v2/composer/composer-meta.js.map +0 -1
  846. package/dist/tui-v2/composer/draft-actions.d.ts +0 -31
  847. package/dist/tui-v2/composer/draft-actions.js +0 -45
  848. package/dist/tui-v2/composer/draft-actions.js.map +0 -1
  849. package/dist/tui-v2/composer/history-nav.js.map +0 -1
  850. package/dist/tui-v2/composer/newline-hint.d.ts +0 -13
  851. package/dist/tui-v2/composer/newline-hint.js.map +0 -1
  852. package/dist/tui-v2/composer/paste-placeholder.js.map +0 -1
  853. package/dist/tui-v2/composer/prompt-history.js.map +0 -1
  854. package/dist/tui-v2/composer/secret-buffer.js.map +0 -1
  855. package/dist/tui-v2/controllers/focus-controller.js.map +0 -1
  856. package/dist/tui-v2/controllers/interruptible-controller.js.map +0 -1
  857. package/dist/tui-v2/controllers/overlay-controller.d.ts +0 -209
  858. package/dist/tui-v2/controllers/overlay-controller.js.map +0 -1
  859. package/dist/tui-v2/controllers/selection-controller.js.map +0 -1
  860. package/dist/tui-v2/controllers/toast-controller.js.map +0 -1
  861. package/dist/tui-v2/layout/compute-layout.js.map +0 -1
  862. package/dist/tui-v2/motion/ease.js.map +0 -1
  863. package/dist/tui-v2/notify.js.map +0 -1
  864. package/dist/tui-v2/rendering/artifact-pager-source.js.map +0 -1
  865. package/dist/tui-v2/rendering/batch-sections.js.map +0 -1
  866. package/dist/tui-v2/rendering/file-diff-view.js.map +0 -1
  867. package/dist/tui-v2/rendering/format-help.js.map +0 -1
  868. package/dist/tui-v2/rendering/incremental-strip.js.map +0 -1
  869. package/dist/tui-v2/rendering/job-tail-source.js.map +0 -1
  870. package/dist/tui-v2/rendering/link-detector.js.map +0 -1
  871. package/dist/tui-v2/rendering/open-tool-output.js +0 -346
  872. package/dist/tui-v2/rendering/open-tool-output.js.map +0 -1
  873. package/dist/tui-v2/rendering/pager-chrome.js +0 -119
  874. package/dist/tui-v2/rendering/pager-chrome.js.map +0 -1
  875. package/dist/tui-v2/rendering/pager-view-policy.js +0 -98
  876. package/dist/tui-v2/rendering/pager-view-policy.js.map +0 -1
  877. package/dist/tui-v2/rendering/picker-filter.js.map +0 -1
  878. package/dist/tui-v2/rendering/plan-view.js.map +0 -1
  879. package/dist/tui-v2/rendering/prompt-preview.js.map +0 -1
  880. package/dist/tui-v2/rendering/render-markdown-lines.d.ts +0 -29
  881. package/dist/tui-v2/rendering/render-markdown-lines.js +0 -46
  882. package/dist/tui-v2/rendering/render-markdown-lines.js.map +0 -1
  883. package/dist/tui-v2/rendering/sanitize-display.js.map +0 -1
  884. package/dist/tui-v2/rendering/streaming-markdown.d.ts +0 -25
  885. package/dist/tui-v2/rendering/streaming-markdown.js +0 -117
  886. package/dist/tui-v2/rendering/streaming-markdown.js.map +0 -1
  887. package/dist/tui-v2/rendering/strip-tool-surfaces.js.map +0 -1
  888. package/dist/tui-v2/rendering/syntax-highlight.js.map +0 -1
  889. package/dist/tui-v2/rendering/theme.js.map +0 -1
  890. package/dist/tui-v2/rendering/thinking-tail.js.map +0 -1
  891. package/dist/tui-v2/rendering/tool-presenter.d.ts +0 -63
  892. package/dist/tui-v2/rendering/tool-presenter.js +0 -376
  893. package/dist/tui-v2/rendering/tool-presenter.js.map +0 -1
  894. package/dist/tui-v2/rendering/transcript-export.d.ts +0 -11
  895. package/dist/tui-v2/rendering/transcript-export.js +0 -18
  896. package/dist/tui-v2/rendering/transcript-export.js.map +0 -1
  897. package/dist/tui-v2/rendering/transcript-semantic.js.map +0 -1
  898. package/dist/tui-v2/rendering/user-message-wrap.d.ts +0 -16
  899. package/dist/tui-v2/rendering/user-message-wrap.js +0 -21
  900. package/dist/tui-v2/rendering/user-message-wrap.js.map +0 -1
  901. package/dist/tui-v2/state/pager-search.js.map +0 -1
  902. package/dist/tui-v2/state/semantic-document.js.map +0 -1
  903. package/dist/tui-v2/state/transcript-compaction.js.map +0 -1
  904. package/dist/tui-v2/state/transcript-hydrate.d.ts +0 -67
  905. package/dist/tui-v2/state/transcript-hydrate.js +0 -648
  906. package/dist/tui-v2/state/transcript-hydrate.js.map +0 -1
  907. package/dist/tui-v2/state/transcript-reducer.js +0 -482
  908. package/dist/tui-v2/state/transcript-reducer.js.map +0 -1
  909. package/dist/tui-v2/state/transcript-search.js.map +0 -1
  910. package/dist/tui-v2/state/transcript-store.js.map +0 -1
  911. package/dist/tui-v2/state/transcript-struct.js.map +0 -1
  912. package/dist/tui-v2/state/transcript-types.d.ts +0 -101
  913. package/dist/tui-v2/state/transcript-types.js.map +0 -1
  914. package/dist/tui-v2/state/use-has-draft.js.map +0 -1
  915. package/dist/tui-v2/state/use-overlay.js.map +0 -1
  916. package/dist/tui-v2/state/use-plan.js.map +0 -1
  917. package/dist/tui-v2/state/use-session-state.js.map +0 -1
  918. package/dist/tui-v2/state/use-toast.js.map +0 -1
  919. package/dist/tui-v2/state/use-transcript-store.d.ts +0 -10
  920. package/dist/tui-v2/state/use-transcript-store.js.map +0 -1
  921. package/dist/ui/ansi-box.d.ts +0 -9
  922. package/dist/ui/ansi-box.js +0 -25
  923. package/dist/ui/ansi-box.js.map +0 -1
  924. package/dist/ui/banner.d.ts +0 -3
  925. package/dist/ui/banner.js +0 -13
  926. package/dist/ui/banner.js.map +0 -1
  927. package/dist/ui/code-block.d.ts +0 -48
  928. package/dist/ui/code-block.js +0 -407
  929. package/dist/ui/code-block.js.map +0 -1
  930. package/dist/ui/intro-card.d.ts +0 -10
  931. package/dist/ui/intro-card.js +0 -67
  932. package/dist/ui/intro-card.js.map +0 -1
  933. package/dist/ui/intro-header.js.map +0 -1
  934. package/dist/ui/keys.d.ts +0 -23
  935. package/dist/ui/keys.js +0 -23
  936. package/dist/ui/keys.js.map +0 -1
  937. package/dist/ui/markdown.js.map +0 -1
  938. package/dist/ui/output-pane.d.ts +0 -59
  939. package/dist/ui/output-pane.js +0 -398
  940. package/dist/ui/output-pane.js.map +0 -1
  941. package/dist/ui/spinner.d.ts +0 -8
  942. package/dist/ui/spinner.js +0 -185
  943. package/dist/ui/spinner.js.map +0 -1
  944. package/dist/ui/task-pane.d.ts +0 -17
  945. package/dist/ui/task-pane.js +0 -80
  946. package/dist/ui/task-pane.js.map +0 -1
  947. package/dist/ui/text-width.js.map +0 -1
  948. package/dist/ui/wordmark.js.map +0 -1
  949. /package/dist/{repl/slash-commands.d.ts → app/commands/catalog.d.ts} +0 -0
  950. /package/dist/{tui/runtime.d.ts → os/bun-runtime.d.ts} +0 -0
  951. /package/dist/{tui-v2 → ui-core}/actions/action-router.d.ts +0 -0
  952. /package/dist/{tui-v2 → ui-core}/actions/action-router.js +0 -0
  953. /package/dist/{tui-v2 → ui-core}/actions/format-shortcuts.d.ts +0 -0
  954. /package/dist/{tui-v2/app → ui-core/actions}/mode-cycle.d.ts +0 -0
  955. /package/dist/{tui-v2/app → ui-core/actions}/mode-cycle.js +0 -0
  956. /package/dist/{tui → ui-core/bootstrap}/can-use-tui.d.ts +0 -0
  957. /package/dist/{tui → ui-core/bootstrap}/can-use-tui.js +0 -0
  958. /package/dist/{tui-v2 → ui-core}/bootstrap/composition-root.js +0 -0
  959. /package/dist/{tui-v2 → ui-core}/bootstrap/console-guard.d.ts +0 -0
  960. /package/dist/{tui-v2 → ui-core}/bootstrap/console-guard.js +0 -0
  961. /package/dist/{tui-v2 → ui-core}/bootstrap/console-suppress.d.ts +0 -0
  962. /package/dist/{tui-v2 → ui-core}/bootstrap/console-suppress.js +0 -0
  963. /package/dist/{tui-v2 → ui-core}/bootstrap/lifecycle.d.ts +0 -0
  964. /package/dist/{tui-v2 → ui-core}/bootstrap/lifecycle.js +0 -0
  965. /package/dist/{tui-v2 → ui-core}/bootstrap/overlay-ports.d.ts +0 -0
  966. /package/dist/{tui-v2/app → ui-core/commands}/command-handlers.d.ts +0 -0
  967. /package/dist/{tui-v2/app → ui-core/commands}/startup-update.d.ts +0 -0
  968. /package/dist/{tui-v2/app → ui-core/commands}/startup-update.js +0 -0
  969. /package/dist/{tui-v2 → ui-core}/composer/arrow-intent.d.ts +0 -0
  970. /package/dist/{tui-v2 → ui-core}/composer/arrow-intent.js +0 -0
  971. /package/dist/{tui-v2 → ui-core}/composer/completion.d.ts +0 -0
  972. /package/dist/{tui-v2 → ui-core}/composer/completion.js +0 -0
  973. /package/dist/{tui-v2 → ui-core}/composer/composer-action-port.d.ts +0 -0
  974. /package/dist/{tui-v2 → ui-core}/composer/composer-action-port.js +0 -0
  975. /package/dist/{tui-v2 → ui-core}/composer/composer-height.d.ts +0 -0
  976. /package/dist/{tui-v2 → ui-core}/composer/composer-meta.d.ts +0 -0
  977. /package/dist/{tui-v2 → ui-core}/composer/composer-meta.js +0 -0
  978. /package/dist/{tui-v2 → ui-core}/composer/history-nav.d.ts +0 -0
  979. /package/dist/{tui-v2 → ui-core}/composer/history-nav.js +0 -0
  980. /package/dist/{tui → ui-core/composer}/input-history.d.ts +0 -0
  981. /package/dist/{tui-v2 → ui-core}/composer/newline-hint.js +0 -0
  982. /package/dist/{tui-v2 → ui-core}/composer/paste-placeholder.d.ts +0 -0
  983. /package/dist/{tui-v2 → ui-core}/composer/paste-placeholder.js +0 -0
  984. /package/dist/{tui-v2 → ui-core}/composer/prompt-history.d.ts +0 -0
  985. /package/dist/{tui-v2 → ui-core}/composer/prompt-history.js +0 -0
  986. /package/dist/{tui-v2 → ui-core}/composer/secret-buffer.d.ts +0 -0
  987. /package/dist/{tui-v2 → ui-core}/composer/secret-buffer.js +0 -0
  988. /package/dist/{tui-v2 → ui-core}/controllers/focus-controller.d.ts +0 -0
  989. /package/dist/{tui-v2 → ui-core}/controllers/focus-controller.js +0 -0
  990. /package/dist/{tui-v2 → ui-core}/controllers/interruptible-controller.d.ts +0 -0
  991. /package/dist/{tui-v2 → ui-core}/controllers/interruptible-controller.js +0 -0
  992. /package/dist/{tui-v2 → ui-core}/controllers/overlay-controller.js +0 -0
  993. /package/dist/{tui-v2 → ui-core}/controllers/selection-controller.d.ts +0 -0
  994. /package/dist/{tui-v2 → ui-core}/controllers/selection-controller.js +0 -0
  995. /package/dist/{tui-v2 → ui-core}/controllers/toast-controller.d.ts +0 -0
  996. /package/dist/{tui-v2 → ui-core}/controllers/toast-controller.js +0 -0
  997. /package/dist/{tui-v2 → ui-core}/layout/compute-layout.d.ts +0 -0
  998. /package/dist/{tui-v2 → ui-core}/layout/compute-layout.js +0 -0
  999. /package/dist/{tui-v2 → ui-core}/motion/ease.d.ts +0 -0
  1000. /package/dist/{tui-v2 → ui-core}/motion/ease.js +0 -0
  1001. /package/dist/{tui-v2 → ui-core}/notify.d.ts +0 -0
  1002. /package/dist/{tui-v2 → ui-core}/notify.js +0 -0
  1003. /package/dist/{tui-v2/app → ui-core/plan}/plan-lifecycle.d.ts +0 -0
  1004. /package/dist/{tui-v2/app → ui-core/plan}/plan-lifecycle.js +0 -0
  1005. /package/dist/{tui-v2/bootstrap/osc52-clipboard.d.ts → ui-core/ports/clipboard-osc52.d.ts} +0 -0
  1006. /package/dist/{tui-v2/state → ui-core/react}/use-has-draft.d.ts +0 -0
  1007. /package/dist/{tui-v2/state → ui-core/react}/use-has-draft.js +0 -0
  1008. /package/dist/{tui-v2/state → ui-core/react}/use-overlay.d.ts +0 -0
  1009. /package/dist/{tui-v2/state → ui-core/react}/use-overlay.js +0 -0
  1010. /package/dist/{tui-v2/state → ui-core/react}/use-plan.d.ts +0 -0
  1011. /package/dist/{tui-v2/state → ui-core/react}/use-plan.js +0 -0
  1012. /package/dist/{tui-v2/state → ui-core/react}/use-session-state.d.ts +0 -0
  1013. /package/dist/{tui-v2/state → ui-core/react}/use-session-state.js +0 -0
  1014. /package/dist/{tui-v2/state → ui-core/react}/use-toast.d.ts +0 -0
  1015. /package/dist/{tui-v2/state → ui-core/react}/use-toast.js +0 -0
  1016. /package/dist/{tui-v2/state → ui-core/react}/use-transcript-store.js +0 -0
  1017. /package/dist/{tui-v2 → ui-core}/rendering/artifact-pager-source.d.ts +0 -0
  1018. /package/dist/{tui-v2 → ui-core}/rendering/artifact-pager-source.js +0 -0
  1019. /package/dist/{tui-v2 → ui-core}/rendering/batch-sections.d.ts +0 -0
  1020. /package/dist/{tui-v2 → ui-core}/rendering/batch-sections.js +0 -0
  1021. /package/dist/{tui-v2 → ui-core}/rendering/file-diff-view.d.ts +0 -0
  1022. /package/dist/{tui-v2 → ui-core}/rendering/file-diff-view.js +0 -0
  1023. /package/dist/{tui-v2 → ui-core}/rendering/format-help.d.ts +0 -0
  1024. /package/dist/{tui-v2 → ui-core}/rendering/format-help.js +0 -0
  1025. /package/dist/{tui-v2 → ui-core}/rendering/incremental-strip.d.ts +0 -0
  1026. /package/dist/{tui-v2 → ui-core}/rendering/incremental-strip.js +0 -0
  1027. /package/dist/{ui → ui-core/rendering}/intro-header.d.ts +0 -0
  1028. /package/dist/{ui → ui-core/rendering}/intro-header.js +0 -0
  1029. /package/dist/{tui-v2 → ui-core}/rendering/job-tail-source.d.ts +0 -0
  1030. /package/dist/{tui-v2 → ui-core}/rendering/job-tail-source.js +0 -0
  1031. /package/dist/{tui-v2 → ui-core}/rendering/link-detector.d.ts +0 -0
  1032. /package/dist/{tui-v2 → ui-core}/rendering/link-detector.js +0 -0
  1033. /package/dist/{ui → ui-core/rendering}/markdown.d.ts +0 -0
  1034. /package/dist/{ui → ui-core/rendering}/markdown.js +0 -0
  1035. /package/dist/{tui-v2 → ui-core}/rendering/open-tool-output.d.ts +0 -0
  1036. /package/dist/{tui-v2 → ui-core}/rendering/pager-chrome.d.ts +0 -0
  1037. /package/dist/{tui-v2 → ui-core}/rendering/pager-view-policy.d.ts +0 -0
  1038. /package/dist/{tui-v2 → ui-core}/rendering/picker-filter.d.ts +0 -0
  1039. /package/dist/{tui-v2 → ui-core}/rendering/picker-filter.js +0 -0
  1040. /package/dist/{tui-v2 → ui-core}/rendering/plan-view.d.ts +0 -0
  1041. /package/dist/{tui-v2 → ui-core}/rendering/plan-view.js +0 -0
  1042. /package/dist/{tui-v2 → ui-core}/rendering/prompt-preview.d.ts +0 -0
  1043. /package/dist/{tui-v2 → ui-core}/rendering/prompt-preview.js +0 -0
  1044. /package/dist/{tui-v2 → ui-core}/rendering/sanitize-display.d.ts +0 -0
  1045. /package/dist/{tui-v2 → ui-core}/rendering/sanitize-display.js +0 -0
  1046. /package/dist/{tui-v2 → ui-core}/rendering/strip-tool-surfaces.d.ts +0 -0
  1047. /package/dist/{tui-v2 → ui-core}/rendering/strip-tool-surfaces.js +0 -0
  1048. /package/dist/{tui-v2 → ui-core}/rendering/syntax-highlight.d.ts +0 -0
  1049. /package/dist/{tui-v2 → ui-core}/rendering/syntax-highlight.js +0 -0
  1050. /package/dist/{tui → ui-core/rendering}/text-format.d.ts +0 -0
  1051. /package/dist/{tui → ui-core/rendering}/text-format.js +0 -0
  1052. /package/dist/{ui → ui-core/rendering}/text-width.d.ts +0 -0
  1053. /package/dist/{ui → ui-core/rendering}/text-width.js +0 -0
  1054. /package/dist/{tui-v2 → ui-core}/rendering/theme.d.ts +0 -0
  1055. /package/dist/{tui-v2 → ui-core}/rendering/theme.js +0 -0
  1056. /package/dist/{tui-v2 → ui-core}/rendering/thinking-tail.d.ts +0 -0
  1057. /package/dist/{tui-v2 → ui-core}/rendering/thinking-tail.js +0 -0
  1058. /package/dist/{tui-v2 → ui-core}/rendering/transcript-semantic.d.ts +0 -0
  1059. /package/dist/{tui-v2 → ui-core}/rendering/transcript-semantic.js +0 -0
  1060. /package/dist/{ui → ui-core/rendering}/wordmark.d.ts +0 -0
  1061. /package/dist/{ui → ui-core/rendering}/wordmark.js +0 -0
  1062. /package/dist/{tui-v2 → ui-core}/state/pager-search.d.ts +0 -0
  1063. /package/dist/{tui-v2 → ui-core}/state/pager-search.js +0 -0
  1064. /package/dist/{tui-v2 → ui-core}/state/semantic-document.d.ts +0 -0
  1065. /package/dist/{tui-v2 → ui-core}/state/semantic-document.js +0 -0
  1066. /package/dist/{tui-v2 → ui-core}/state/transcript-compaction.d.ts +0 -0
  1067. /package/dist/{tui-v2 → ui-core}/state/transcript-compaction.js +0 -0
  1068. /package/dist/{tui-v2 → ui-core}/state/transcript-reducer.d.ts +0 -0
  1069. /package/dist/{tui-v2 → ui-core}/state/transcript-search.d.ts +0 -0
  1070. /package/dist/{tui-v2 → ui-core}/state/transcript-search.js +0 -0
  1071. /package/dist/{tui-v2 → ui-core}/state/transcript-store.d.ts +0 -0
  1072. /package/dist/{tui-v2 → ui-core}/state/transcript-store.js +0 -0
  1073. /package/dist/{tui-v2 → ui-core}/state/transcript-struct.d.ts +0 -0
  1074. /package/dist/{tui-v2 → ui-core}/state/transcript-struct.js +0 -0
  1075. /package/dist/{tui-v2 → ui-core}/state/transcript-types.js +0 -0
@@ -1,1045 +0,0 @@
1
- /**
2
- * Picker-backed slash commands: model/provider/search/reasoning/history/
3
- * permissions/output/plan (V2-072, V2-080).
4
- */
5
- import { getProvider, providerAuth } from "../../../llm/router.js";
6
- import { defaultModels, normalizeEndpointUrl } from "../../../llm/provider.js";
7
- import { modelSupportsThinking } from "../../../llm/capabilities.js";
8
- import { assertProvider } from "../../../llm/provider.js";
9
- import { assertSearchProvider } from "../../../tools/web/providers/provider.js";
10
- import { searchProviders } from "../../../tools/web/providers/provider.js";
11
- import { asExaSearchType, exaSearchTypeDescriptions, exaSearchTypes, searchProviderIds, } from "../../../tools/web/types.js";
12
- import { providerIds } from "../../../types.js";
13
- import { getKnownModels } from "../../../repl/slash-commands.js";
14
- import { clearActiveProjectRoot } from "../../../agent/project-root.js";
15
- import { appendProviderEndpoint, getActiveProviderEndpoint, addCustomProvider, getCustomProviders, removeCustomProvider, getConfig, getExaSearchType, getProviderModel, setActiveSearchProvider, setDefaultProvider, setExaSearchType, setProviderModel, setThinking, updateConfig, } from "../../../store/config.js";
16
- import { envValue, getProviderSecret, getSearchProviderKey, setProviderSecret, setSecret, unsetProviderSecret, } from "../../../store/keys.js";
17
- import { invalidateCustomProviderCache, materializeCustomProvider, normalizeCustomBaseUrl, normalizeCustomProviderId, } from "../../../llm/custom-providers.js";
18
- import { deleteSession, getSession, listSessionSummaries, purgeSession, } from "../../../store/history.js";
19
- import { relativeTime, shortCwd } from "../../../tui/text-format.js";
20
- import { conversationItemCount } from "../../state/transcript-types.js";
21
- import { boundSessionVisualInput, hydrateSessionVisual, transcriptLooksIncomplete, } from "../../state/transcript-hydrate.js";
22
- import { openToolOutputPager } from "../../rendering/open-tool-output.js";
23
- const REASONING_DESCRIPTIONS = {
24
- off: "disable reasoning",
25
- minimal: "lowest latency",
26
- low: "light reasoning",
27
- medium: "balanced",
28
- high: "deep reasoning",
29
- xhigh: "maximum depth",
30
- max: "highest supported depth",
31
- };
32
- /**
33
- * Live provider model catalogue (matches classic TUI `/model`).
34
- * Prefers `provider.listModels`; falls back to the static known list.
35
- */
36
- export async function resolveModelsForProvider(provider, currentModel) {
37
- const providerImpl = getProvider(provider);
38
- let models = [];
39
- let error;
40
- if (providerImpl.listModels) {
41
- try {
42
- const auth = await providerAuth(provider);
43
- models = await providerImpl.listModels(auth);
44
- }
45
- catch (err) {
46
- error = err instanceof Error ? err.message : String(err);
47
- }
48
- }
49
- let source = "live";
50
- if (models.length === 0) {
51
- models = getKnownModels(provider);
52
- source = "known";
53
- }
54
- if (currentModel && !models.includes(currentModel) && currentModel === getProviderModel(provider)) {
55
- const isFreeModel = currentModel.startsWith("free-1/") || currentModel.startsWith("free-2/");
56
- if (!(isFreeModel && provider !== "free")) {
57
- models = [currentModel, ...models];
58
- }
59
- }
60
- return error ? { models, source, error } : { models, source };
61
- }
62
- export async function handleModel(services, invocation) {
63
- const state = services.session.getState();
64
- const provider = state.provider ?? getConfig().defaultProvider;
65
- const arg = invocation.args.trim();
66
- if (arg && arg !== "list" && arg !== "ls") {
67
- applyModel(services, provider, arg, getKnownModels(provider));
68
- return;
69
- }
70
- const currentModel = getProviderModel(provider);
71
- const fetchingToastId = services.toast.info(`fetching ${provider} models…`, {
72
- key: "model-fetch",
73
- sticky: true,
74
- });
75
- const { models, source, error } = await resolveModelsForProvider(provider, currentModel);
76
- services.toast.dismiss(fetchingToastId);
77
- if (error) {
78
- services.session.notice("warn", `could not refresh ${provider} models: ${error} · showing known models`);
79
- }
80
- else if (source === "known" && getProvider(provider).listModels) {
81
- services.session.notice("warn", `${provider} model list empty from API · showing known models`);
82
- }
83
- else if (source === "live") {
84
- services.session.notice("info", `${provider} · ${models.length} models (live)`);
85
- }
86
- if (models.length === 0) {
87
- services.session.notice("info", `no models for ${provider} — type /model <name> to set one manually`);
88
- return;
89
- }
90
- services.overlay.openPicker({
91
- title: `Models · ${provider}${source === "live" ? " · live" : ""}`,
92
- options: models.map((value) => ({
93
- value,
94
- label: value,
95
- active: value === currentModel,
96
- })),
97
- }, (value) => {
98
- applyModel(services, provider, value, models);
99
- services.overlay.close();
100
- });
101
- }
102
- const CATALOG_SEPARATOR = "\u001f";
103
- async function configuredProviderIds() {
104
- const custom = getCustomProviders().map((def) => def.id);
105
- const candidates = [...providerIds, ...custom];
106
- const configured = await Promise.all(candidates.map(async (provider) => {
107
- if (provider === "ollama" || provider === "free")
108
- return provider;
109
- const hasKey = Boolean(envValue(provider)) ||
110
- Boolean((await getProviderSecret(provider)).value);
111
- if (!hasKey)
112
- return undefined;
113
- if (provider === "modal" && !getActiveProviderEndpoint("modal")) {
114
- return undefined;
115
- }
116
- return provider;
117
- }));
118
- return configured.filter((provider) => Boolean(provider));
119
- }
120
- async function collectAllModels() {
121
- const providers = await configuredProviderIds();
122
- const results = await Promise.all(providers.map(async (provider) => {
123
- try {
124
- const resolved = await resolveModelsForProvider(provider);
125
- return { provider, ...resolved };
126
- }
127
- catch (error) {
128
- return {
129
- provider,
130
- models: getKnownModels(provider),
131
- source: "known",
132
- error: error instanceof Error ? error.message : String(error),
133
- };
134
- }
135
- }));
136
- const entries = [];
137
- const failed = [];
138
- let liveProviders = 0;
139
- for (const result of results) {
140
- if (result.error)
141
- failed.push(result.provider);
142
- if (result.source === "live")
143
- liveProviders += 1;
144
- const seen = new Set();
145
- for (const model of result.models) {
146
- const id = model.trim();
147
- if (!id || seen.has(id))
148
- continue;
149
- seen.add(id);
150
- entries.push({
151
- provider: result.provider,
152
- model: id,
153
- live: result.source === "live",
154
- });
155
- }
156
- }
157
- entries.sort((a, b) => a.provider.localeCompare(b.provider) || a.model.localeCompare(b.model));
158
- return { entries, providers: providers.length, liveProviders, failed };
159
- }
160
- async function switchToCatalogEntry(services, entry) {
161
- const state = services.session.getState();
162
- const current = state.provider ?? getConfig().defaultProvider;
163
- if (entry.provider !== current) {
164
- setDefaultProvider(entry.provider);
165
- services.session.setProvider(entry.provider);
166
- clearActiveProjectRoot();
167
- }
168
- services.session.setModel(entry.model);
169
- setProviderModel(entry.provider, entry.model);
170
- services.session.notice("info", `provider → ${entry.provider} · model → ${entry.model}`);
171
- }
172
- export async function handleModels(services, invocation) {
173
- const fetching = services.toast.info("collecting models from all providers…", {
174
- key: "models-fetch",
175
- sticky: true,
176
- });
177
- const { entries, providers, liveProviders, failed } = await collectAllModels();
178
- services.toast.dismiss(fetching);
179
- if (entries.length === 0) {
180
- services.session.notice("warn", "no models found — configure a provider key with /set first");
181
- return;
182
- }
183
- const filter = invocation.args.trim().toLowerCase();
184
- if (filter) {
185
- const normalized = filter.replace(/\s+/g, "/");
186
- const matches = entries.filter((entry) => {
187
- const combined = `${entry.provider}/${entry.model}`.toLowerCase();
188
- return combined === normalized || combined.includes(normalized);
189
- });
190
- const exact = matches.find((entry) => `${entry.provider}/${entry.model}`.toLowerCase() === normalized);
191
- if (exact) {
192
- await switchToCatalogEntry(services, exact);
193
- return;
194
- }
195
- if (matches.length === 1) {
196
- await switchToCatalogEntry(services, matches[0]);
197
- return;
198
- }
199
- if (matches.length === 0) {
200
- services.session.notice("warn", `no model matches "${invocation.args.trim()}"`);
201
- return;
202
- }
203
- }
204
- const state = services.session.getState();
205
- const activeProvider = state.provider ?? getConfig().defaultProvider;
206
- if (failed.length > 0) {
207
- services.session.notice("warn", `could not refresh ${failed.join(", ")} · showing known models for those`);
208
- }
209
- services.session.notice("info", `${entries.length} models · ${providers} provider${providers === 1 ? "" : "s"} configured · ${liveProviders} live`);
210
- services.overlay.openPicker({
211
- title: `All models · ${providers} providers`,
212
- searchDescription: true,
213
- twoLine: true,
214
- options: entries.map((entry) => ({
215
- value: `${entry.provider}${CATALOG_SEPARATOR}${entry.model}`,
216
- label: `${entry.provider} / ${entry.model}`,
217
- description: entry.live ? "live catalogue" : "known models",
218
- active: entry.provider === activeProvider && entry.model === state.model,
219
- })),
220
- }, (value) => {
221
- services.overlay.close();
222
- const separator = value.indexOf(CATALOG_SEPARATOR);
223
- if (separator <= 0)
224
- return;
225
- const provider = value.slice(0, separator);
226
- const model = value.slice(separator + 1);
227
- const entry = entries.find((candidate) => candidate.provider === provider && candidate.model === model);
228
- if (!entry)
229
- return;
230
- void switchToCatalogEntry(services, entry);
231
- });
232
- }
233
- function applyModel(services, provider, model, options = getKnownModels(provider)) {
234
- const index = Number.parseInt(model, 10);
235
- const next = Number.isInteger(index) && index >= 1 && index <= options.length
236
- ? options[index - 1]
237
- : model;
238
- services.session.setModel(next);
239
- setProviderModel(provider, next);
240
- services.session.notice("info", `model → ${next}`);
241
- }
242
- /** Sentinel value returned by the /provider picker for "add a custom provider". */
243
- const ADD_CUSTOM_PROVIDER = "__add_custom_provider__";
244
- /** Sentinel for the "remove a custom provider" picker row. */
245
- const REMOVE_CUSTOM_PROVIDER = "__remove_custom_provider__";
246
- export function handleProvider(services, invocation) {
247
- if (invocation.args) {
248
- try {
249
- void activateProvider(services, assertProvider(invocation.args.trim()));
250
- }
251
- catch {
252
- services.session.notice("warn", `unknown provider: ${invocation.args.trim()}`);
253
- }
254
- return;
255
- }
256
- void (async () => {
257
- const current = services.session.getState().provider ?? getConfig().defaultProvider;
258
- // Custom (user-defined) providers appear after the built-ins, plus
259
- // dedicated rows at the top to launch the add / remove flows.
260
- const { getCustomProviders } = await import("../../../store/config.js");
261
- const custom = getCustomProviders();
262
- const options = [
263
- {
264
- value: ADD_CUSTOM_PROVIDER,
265
- label: "+ Add custom provider",
266
- description: "connect an OpenAI-compatible endpoint not listed above",
267
- },
268
- // Only offer removal when at least one custom provider exists.
269
- ...(custom.length > 0
270
- ? [
271
- {
272
- value: REMOVE_CUSTOM_PROVIDER,
273
- label: "− Remove custom provider",
274
- description: `${custom.length} custom provider${custom.length === 1 ? "" : "s"} · delete a definition + its keys`,
275
- },
276
- ]
277
- : []),
278
- ...providerIds.map((value) => ({
279
- value,
280
- label: value,
281
- description: getProviderModel(value),
282
- active: value === current,
283
- })),
284
- ...custom.map((def) => ({
285
- value: def.id,
286
- label: def.id,
287
- description: getProviderModel(def.id),
288
- active: def.id === current,
289
- })),
290
- ];
291
- services.overlay.openPicker({
292
- title: "Providers",
293
- // Search provider name + model name.
294
- searchDescription: true,
295
- options,
296
- }, (value) => {
297
- if (value === ADD_CUSTOM_PROVIDER) {
298
- void addCustomProviderFlow(services);
299
- return;
300
- }
301
- if (value === REMOVE_CUSTOM_PROVIDER) {
302
- void removeCustomProviderFlow(services);
303
- return;
304
- }
305
- void activateProvider(services, assertProvider(value));
306
- });
307
- })();
308
- }
309
- async function activateProvider(services, next) {
310
- // Modal needs two separate things, so it gets its own onboarding.
311
- if (next === "modal") {
312
- if (!(await ensureModalCredentials(services)))
313
- return;
314
- }
315
- else {
316
- const configured = next === "ollama" || next === "free" || Boolean(envValue(next)) || Boolean((await getProviderSecret(next)).value);
317
- if (!configured) {
318
- services.overlay.close();
319
- const key = await services.overlay.openSecret({
320
- title: `${next} API key`,
321
- prompt: `No API key is configured for ${next}. Enter it now to activate this provider.`,
322
- });
323
- const value = key?.trim();
324
- if (!value) {
325
- services.session.notice("info", `cancelled · provider unchanged`);
326
- return;
327
- }
328
- // Silence here used to look like the picker had simply ignored the input.
329
- if (!getProvider(next).validateKey(value)) {
330
- services.session.notice("warn", `invalid API key format for ${next} · provider unchanged`);
331
- return;
332
- }
333
- await setProviderSecret(next, value);
334
- }
335
- }
336
- let model = getProviderModel(next);
337
- const isFreeModel = model.startsWith("free-1/") || model.startsWith("free-2/");
338
- if (isFreeModel && next !== "free") {
339
- model = defaultModels[next];
340
- setProviderModel(next, model);
341
- }
342
- setDefaultProvider(next);
343
- services.session.setProvider(next);
344
- services.session.setModel(model);
345
- services.overlay.close();
346
- services.session.notice("info", `provider → ${next} · model → ${model}`);
347
- const fetchingToastId = services.toast.info(`fetching ${next} models…`, {
348
- key: "model-fetch",
349
- sticky: true,
350
- });
351
- const { models, source, error } = await resolveModelsForProvider(next, model);
352
- services.toast.dismiss(fetchingToastId);
353
- if (error) {
354
- services.session.notice("warn", `could not refresh ${next} models: ${error} · showing known models`);
355
- }
356
- else if (source === "known" && getProvider(next).listModels) {
357
- services.session.notice("warn", `${next} model list empty from API · showing known models`);
358
- }
359
- else if (source === "live") {
360
- services.session.notice("info", `${next} · ${models.length} models (live)`);
361
- }
362
- if (models.length === 0) {
363
- services.session.notice("info", `no models for ${next} — type /model <name> to set one manually`);
364
- return;
365
- }
366
- services.overlay.openPicker({
367
- title: `Models · ${next}${source === "live" ? " · live" : ""}`,
368
- options: models.map((value) => ({
369
- value,
370
- label: value,
371
- active: value === model,
372
- })),
373
- }, (value) => {
374
- applyModel(services, next, value, models);
375
- services.overlay.close();
376
- });
377
- }
378
- /**
379
- * Modal is the only provider that needs two things before it can serve a
380
- * request: the workspace endpoint URL (config) and a proxy token pair
381
- * (secret). Ask for whichever is missing, endpoint first — that is the value
382
- * people reach for, and a URL typed into a token prompt used to fail
383
- * `validateKey` and silently abandon the switch.
384
- *
385
- * Returns false when the user cancelled or entered something unusable, in
386
- * which case the active provider is left alone.
387
- */
388
- async function ensureModalCredentials(services) {
389
- const hasToken = Boolean(envValue("modal")) || Boolean((await getProviderSecret("modal")).value);
390
- if (!getActiveProviderEndpoint("modal")) {
391
- services.overlay.close();
392
- const answer = await services.overlay.openSecret({
393
- title: hasToken ? "Modal endpoint URL" : "Modal endpoint URL (1 of 2)",
394
- prompt: "Paste your Modal endpoint URL, e.g. https://<workspace>--ep-<endpoint>.<region>.modal.direct",
395
- reveal: true,
396
- });
397
- const url = answer?.trim();
398
- if (!url) {
399
- services.session.notice("info", "cancelled · provider unchanged");
400
- return false;
401
- }
402
- const endpoint = normalizeEndpointUrl(url);
403
- appendProviderEndpoint("modal", endpoint);
404
- services.session.notice("info", `modal endpoint → ${endpoint}`);
405
- }
406
- if (!hasToken) {
407
- services.overlay.close();
408
- const answer = await services.overlay.openSecret({
409
- title: "Modal proxy token (2 of 2)",
410
- prompt: "Enter the proxy token pair as <token-id>:<token-secret> — create one with: modal workspace proxy-tokens create",
411
- });
412
- const token = answer?.trim();
413
- if (!token) {
414
- services.session.notice("info", "cancelled · provider unchanged");
415
- return false;
416
- }
417
- // Another URL means the user is still answering the previous question.
418
- if (/^https?:\/\//i.test(token)) {
419
- const endpoint = normalizeEndpointUrl(token);
420
- appendProviderEndpoint("modal", endpoint);
421
- services.session.notice("warn", `saved that as the endpoint (${endpoint}) · modal still needs a wk-…:ws-… token pair — run /provider modal again`);
422
- return false;
423
- }
424
- if (!getProvider("modal").validateKey(token)) {
425
- services.session.notice("warn", "expected a proxy token pair like wk-tokenId:ws-tokenSecret · provider unchanged");
426
- return false;
427
- }
428
- await setProviderSecret("modal", token);
429
- }
430
- return true;
431
- }
432
- /**
433
- * Add a user-defined (custom) provider. Walks the operator through every
434
- * required field, then fetches the live model catalogue from the endpoint and
435
- * lets them pick a default model before activating the new provider.
436
- *
437
- * Every prompt is a single `openSecret` modal (re-used for non-secret values
438
- * with `reveal: true`), so the flow works in both the OpenTUI and classic TUI.
439
- * Cancelling any step leaves the active provider untouched.
440
- */
441
- async function addCustomProviderFlow(services) {
442
- services.overlay.close();
443
- // Existing ids (built-in + custom) so we can reject collisions up front.
444
- const existingBuiltins = providerIds;
445
- const existingCustom = getCustomProviders().map((d) => d.id);
446
- const existing = [...existingBuiltins, ...existingCustom];
447
- // 1. Provider id — a URL-safe slug used as the key namespace and config key.
448
- const idAnswer = await services.overlay.openSecret({
449
- title: "New custom provider · 1 of 5 · id",
450
- prompt: "Enter a short id (lowercase, a-z 0-9 and hyphens, e.g. myllm). This is how clai names the provider internally.",
451
- reveal: true,
452
- });
453
- const id = normalizeCustomProviderId(idAnswer?.trim() ?? "", existing);
454
- if (!id) {
455
- services.session.notice("info", idAnswer?.trim()
456
- ? `"${idAnswer.trim()}" is not a unique provider id (use lowercase a-z 0-9 hyphens)`
457
- : "cancelled · provider unchanged");
458
- return;
459
- }
460
- // 2. Display name — shown in pickers and toasts.
461
- const nameAnswer = await services.overlay.openSecret({
462
- title: `New custom provider · 2 of 5 · name`,
463
- prompt: `Enter a display name for "${id}" (shown in pickers), e.g. My LLM Gateway:`,
464
- reveal: true,
465
- });
466
- const displayName = nameAnswer?.trim() || id;
467
- // 3. Base URL — the OpenAI-compatible endpoint root (clai appends /v1).
468
- const urlAnswer = await services.overlay.openSecret({
469
- title: `New custom provider · 3 of 5 · base URL`,
470
- prompt: `Paste the base URL for ${displayName} (OpenAI-compatible). e.g. https://api.example.com/v1`,
471
- reveal: true,
472
- });
473
- const baseUrl = normalizeCustomBaseUrl(urlAnswer?.trim() ?? "");
474
- if (!baseUrl) {
475
- services.session.notice("info", "cancelled · provider unchanged");
476
- return;
477
- }
478
- // 4. API key — masked; stored under the multi-key envelope so /set can add
479
- // more later and the rotation logic treats it like any other provider.
480
- const keyAnswer = await services.overlay.openSecret({
481
- title: `New custom provider · 4 of 5 · API key`,
482
- prompt: `Enter the API key / bearer token for ${displayName} (input hidden). Leave blank to skip and set it later with /set ${id}.`,
483
- });
484
- const apiKey = keyAnswer?.trim() ?? "";
485
- // 5. Default model — fetch the live /models list and let the user pick.
486
- // We materialise the provider in memory (before persisting) so the
487
- // listModels call works without a config round-trip.
488
- const tempDef = {
489
- id,
490
- displayName,
491
- baseUrl,
492
- defaultModel: "", // filled after the model pick
493
- };
494
- const tempProvider = materializeCustomProvider(tempDef);
495
- const fetchingToastId = services.toast.info(`fetching ${displayName} models…`, {
496
- key: "model-fetch",
497
- sticky: true,
498
- });
499
- let models = [];
500
- try {
501
- const list = tempProvider.listModels;
502
- if (list)
503
- models = await list({ apiKey: apiKey || undefined });
504
- }
505
- catch (err) {
506
- services.session.notice("warn", `could not fetch models from ${displayName}: ${err instanceof Error ? err.message : String(err)} · you can set one manually with /model <name>`);
507
- }
508
- finally {
509
- services.toast.dismiss(fetchingToastId);
510
- }
511
- let defaultModel = "";
512
- if (models.length > 0) {
513
- services.overlay.close();
514
- const picked = await new Promise((resolve) => {
515
- const opened = services.overlay.openPicker({
516
- title: `Models · ${displayName} · live`,
517
- options: models.map((value) => ({ value, label: value })),
518
- }, (value) => resolve(value));
519
- if (!opened)
520
- resolve(undefined);
521
- });
522
- services.overlay.close();
523
- defaultModel = picked?.trim() ?? "";
524
- if (!defaultModel) {
525
- services.session.notice("info", "cancelled · provider unchanged");
526
- return;
527
- }
528
- }
529
- else {
530
- // No live list (key skipped or fetch failed): ask for a model name to use
531
- // as the default so the provider is usable immediately.
532
- const modelAnswer = await services.overlay.openSecret({
533
- title: `New custom provider · 5 of 5 · default model`,
534
- prompt: `Enter the default model id for ${displayName} (you can change it later with /model <name>):`,
535
- reveal: true,
536
- });
537
- defaultModel = modelAnswer?.trim() ?? "";
538
- if (!defaultModel) {
539
- services.session.notice("info", "cancelled · provider unchanged");
540
- return;
541
- }
542
- }
543
- // Persist the definition + the key + the chosen model, then activate.
544
- const def = { id, displayName, baseUrl, defaultModel };
545
- addCustomProvider(def);
546
- invalidateCustomProviderCache(id);
547
- if (apiKey) {
548
- await setProviderSecret(id, apiKey);
549
- }
550
- setProviderModel(id, defaultModel);
551
- setDefaultProvider(id);
552
- services.session.setProvider(id);
553
- services.session.setModel(defaultModel);
554
- services.overlay.close();
555
- services.session.notice("info", `added custom provider ${displayName} (${id}) · model → ${defaultModel}${apiKey ? "" : " · no key set (use /set " + id + " <key>)"}`);
556
- }
557
- /**
558
- * Remove a user-defined (custom) provider. Lists only custom providers in a
559
- * picker, asks for confirmation, then tears down everything clai stored for
560
- * it: the definition, the multi-key envelope, the per-provider model and
561
- * endpoint overrides, and the in-memory provider cache. If the removed
562
- * provider was the active/default one, switches back to the nvidia default so
563
- * the session never points at a now-unknown id.
564
- */
565
- async function removeCustomProviderFlow(services) {
566
- services.overlay.close();
567
- const custom = getCustomProviders();
568
- if (custom.length === 0) {
569
- services.session.notice("info", "no custom providers to remove");
570
- return;
571
- }
572
- const config = getConfig();
573
- const activeProvider = services.session.getState().provider ?? config.defaultProvider;
574
- // 1. Pick which custom provider to delete.
575
- const picked = await new Promise((resolve) => {
576
- const opened = services.overlay.openPicker({
577
- title: "Remove custom provider",
578
- options: custom.map((def) => ({
579
- value: def.id,
580
- label: def.id,
581
- description: `${def.displayName} · ${def.baseUrl}`,
582
- active: def.id === activeProvider,
583
- })),
584
- }, (value) => resolve(value));
585
- if (!opened)
586
- resolve(undefined);
587
- });
588
- services.overlay.close();
589
- if (!picked) {
590
- services.session.notice("info", "cancelled · nothing removed");
591
- return;
592
- }
593
- const def = custom.find((d) => d.id === picked);
594
- const displayName = def?.displayName ?? picked;
595
- // 2. Confirm — deletion is irreversible (clears keys + model + endpoints).
596
- const confirmed = await services.overlay.openConfirm({
597
- kind: "reset",
598
- prompt: `Remove custom provider "${displayName}" (${picked})?\n\nThis deletes its definition, all stored API keys, and the per-provider model + endpoint overrides. This cannot be undone.`,
599
- });
600
- services.overlay.close();
601
- if (!confirmed) {
602
- services.session.notice("info", "cancelled · nothing removed");
603
- return;
604
- }
605
- // 3. Tear down: definition, keys, model override, endpoint list, cache.
606
- removeCustomProvider(picked);
607
- try {
608
- await unsetProviderSecret(picked);
609
- }
610
- catch {
611
- // No key stored (or env-only) — nothing to delete; not an error.
612
- }
613
- // Clear the per-provider model + endpoint overrides so they don't linger.
614
- const providerModels = { ...getConfig().providerModels };
615
- delete providerModels[picked];
616
- const providerEndpoints = { ...getConfig().providerEndpoints };
617
- delete providerEndpoints[picked];
618
- updateConfig({ providerModels, providerEndpoints });
619
- invalidateCustomProviderCache(picked);
620
- // 4. If we just deleted the active/default provider, switch to a safe
621
- // built-in so the next request doesn't target a now-unknown id.
622
- if (picked === activeProvider || picked === config.defaultProvider) {
623
- const fallback = "nvidia";
624
- setDefaultProvider(fallback);
625
- services.session.setProvider(fallback);
626
- services.session.setModel(getProviderModel(fallback));
627
- services.session.notice("info", `removed custom provider ${displayName} (${picked}) · switched to ${fallback}`);
628
- }
629
- else {
630
- services.session.notice("info", `removed custom provider ${displayName} (${picked})`);
631
- }
632
- }
633
- export function handleSearch(services, invocation) {
634
- const args = invocation.args.trim();
635
- if (args) {
636
- const parts = args.split(/\s+/);
637
- const providerArg = parts[0];
638
- // `/search exa <type>` sets Exa's retrieval strategy directly.
639
- if (providerArg.toLowerCase() === "exa" && parts.length > 1) {
640
- const type = asExaSearchType(parts.slice(1).join(" "));
641
- if (!type) {
642
- services.session.notice("warn", `unknown exa search type: ${parts.slice(1).join(" ")} · options: ${exaSearchTypes.join(", ")}`);
643
- return;
644
- }
645
- void activateExaWithType(services, type);
646
- return;
647
- }
648
- try {
649
- void activateSearchProvider(services, assertSearchProvider(providerArg));
650
- }
651
- catch {
652
- services.session.notice("warn", `unknown search provider: ${providerArg}`);
653
- }
654
- return;
655
- }
656
- const active = getConfig().activeSearchProvider;
657
- const exaType = getExaSearchType();
658
- const options = searchProviderIds.map((id) => {
659
- const adapter = searchProviders[id];
660
- const keyNote = adapter?.needsApiKey
661
- ? `${adapter.displayName} · API key required`
662
- : `${adapter?.displayName ?? id} · keyless`;
663
- return {
664
- value: id,
665
- label: id === active ? `${id} · active` : id,
666
- description: id === "exa" ? `${keyNote} · type: ${exaType}` : keyNote,
667
- };
668
- });
669
- services.overlay.openPicker({ title: "Search providers", options }, (value) => {
670
- void activateSearchProvider(services, assertSearchProvider(value));
671
- });
672
- }
673
- async function activateSearchProvider(services, next) {
674
- const adapter = searchProviders[next];
675
- if (adapter?.needsApiKey) {
676
- const current = await getSearchProviderKey(next);
677
- if (!current.value) {
678
- services.overlay.close();
679
- const key = await services.overlay.openSecret({
680
- title: `${next} search API key`,
681
- prompt: `No API key is configured for ${adapter.displayName}. Enter it now to use this search provider.`,
682
- });
683
- if (!key)
684
- return;
685
- await setSecret("search", next, key);
686
- }
687
- }
688
- setActiveSearchProvider(next);
689
- services.overlay.close();
690
- services.session.notice("info", `search provider → ${next}`);
691
- // Exa is the only provider with a tunable retrieval strategy — offer the
692
- // type picker right after activation so users land on the right latency
693
- // and depth without a second command.
694
- if (next === "exa")
695
- openExaSearchTypePicker(services);
696
- }
697
- /** Open the picker that customises Exa's retrieval strategy (`type`). */
698
- function openExaSearchTypePicker(services) {
699
- const current = getExaSearchType();
700
- const options = exaSearchTypes.map((type) => ({
701
- value: type,
702
- label: type === current ? `${type} · active` : type,
703
- description: exaSearchTypeDescriptions[type],
704
- active: type === current,
705
- }));
706
- services.overlay.openPicker({ title: "Exa search type", options }, (value) => {
707
- const type = asExaSearchType(value);
708
- if (type)
709
- applyExaSearchType(services, type);
710
- services.overlay.close();
711
- });
712
- }
713
- /**
714
- * Persist the chosen Exa search type. When Exa is not already the active
715
- * search provider, selecting a type also activates Exa so the setting takes
716
- * effect on the next search.
717
- */
718
- async function activateExaWithType(services, type) {
719
- if (getConfig().activeSearchProvider !== "exa") {
720
- await activateSearchProvider(services, "exa");
721
- }
722
- applyExaSearchType(services, type);
723
- }
724
- function applyExaSearchType(services, type) {
725
- setExaSearchType(type);
726
- services.session.notice("info", `exa search type → ${type}`);
727
- }
728
- export function handleReasoning(services, invocation) {
729
- if (invocation.args) {
730
- applyReasoning(services, invocation.args.trim());
731
- return;
732
- }
733
- const current = getConfig().thinking;
734
- const provider = services.session.getState().provider ?? getConfig().defaultProvider;
735
- const model = services.session.getState().model ?? "";
736
- const supported = modelSupportsThinking(provider, model) ? "supported" : "model may ignore it";
737
- const options = Object.entries(REASONING_DESCRIPTIONS).map(([value, description]) => ({
738
- value,
739
- label: value,
740
- description,
741
- active: value === (current.enabled ? current.effort : "off"),
742
- }));
743
- services.overlay.openPicker({ title: `Reasoning · ${supported}`, options }, (value) => {
744
- applyReasoning(services, value);
745
- services.overlay.close();
746
- });
747
- }
748
- function applyReasoning(services, value) {
749
- const lower = value.toLowerCase();
750
- if (/^(on|enable|true)$/.test(lower)) {
751
- setThinking({ enabled: true });
752
- services.session.notice("info", `thinking → ${getConfig().thinking.effort}`);
753
- return;
754
- }
755
- if (["off", "none", "disable", "false"].includes(lower)) {
756
- setThinking({ enabled: false });
757
- services.session.notice("info", "thinking → off");
758
- return;
759
- }
760
- if (["minimal", "low", "medium", "high", "xhigh", "max"].includes(lower)) {
761
- setThinking({ enabled: true, effort: lower });
762
- services.session.notice("info", `thinking → ${lower}`);
763
- return;
764
- }
765
- services.session.notice("warn", "usage: /effort [on|off|minimal|low|medium|high|xhigh|max]");
766
- }
767
- export async function handleHistory(services, invocation) {
768
- const rawArgs = invocation?.args?.trim() ?? "";
769
- if (rawArgs) {
770
- const [sub, ...rest] = rawArgs.split(/\s+/);
771
- const subLower = sub?.toLowerCase() ?? "";
772
- if (["delete", "remove", "rm", "del"].includes(subLower)) {
773
- const finalId = rest.join(" ").trim();
774
- if (!finalId) {
775
- services.session.notice("warn", "usage: /history delete <session-id>");
776
- return;
777
- }
778
- const result = await deleteSession(finalId);
779
- services.session.notice(result.deleted ? "info" : "warn", result.deleted ? `deleted ${finalId}` : result.detail);
780
- return;
781
- }
782
- }
783
- const sessions = await listSessionSummaries(200, { recovery: "background" });
784
- const currentMessages = services.session.messages;
785
- const currentId = services.session.sessionId;
786
- const currentTitle = services.session.getState().title;
787
- if (sessions.length === 0 && currentMessages.length === 0) {
788
- services.session.notice("info", "no session history yet — chat once and it will appear here with an AI title");
789
- return;
790
- }
791
- // Live session once at the top — never also list the same id below
792
- // (that looked like two copies of one chat with different item counts).
793
- const otherSessions = sessions.filter((s) => s.id !== currentId);
794
- const liveVisualCount = conversationItemCount(services.transcript.getState());
795
- const options = [
796
- {
797
- value: "__current__",
798
- label: currentTitle?.trim() || "Current session",
799
- description: currentMessages.length
800
- ? `id ${currentId} · now · ${liveVisualCount} items · ${currentMessages.length} model msgs · this window`
801
- : `id ${currentId} · now · empty session · this window`,
802
- active: true,
803
- },
804
- ...otherSessions.map((session) => {
805
- const count = session.itemCount;
806
- const date = session.updatedAt ?? session.createdAt;
807
- const when = relativeTime(date) || "some time ago";
808
- const stamp = date.slice(0, 16).replace("T", " ");
809
- const where = shortCwd(session.cwd);
810
- const title = (session.name && session.name.trim()) || "Untitled chat";
811
- // Two-line card: title on top; meta chips underneath (full session id).
812
- const meta = [
813
- `id ${session.id}`,
814
- when,
815
- stamp,
816
- `${count} item${count === 1 ? "" : "s"}`,
817
- where ? `in ${where}` : "",
818
- ]
819
- .filter(Boolean)
820
- .join(" · ");
821
- return {
822
- value: session.id,
823
- label: title,
824
- description: meta,
825
- active: false,
826
- };
827
- }),
828
- ];
829
- const liveOptions = [...options];
830
- const deleteRow = (value) => {
831
- if (value === "__current__") {
832
- services.toast.warn("cannot delete the session you are in", {
833
- key: "history-delete",
834
- });
835
- return;
836
- }
837
- const index = liveOptions.findIndex((option) => option.value === value);
838
- if (index === -1)
839
- return;
840
- const label = liveOptions[index].label;
841
- liveOptions.splice(index, 1);
842
- services.overlay.replacePickerOptions([...liveOptions]);
843
- services.toast.info(`deleting ${label}…`, { key: "history-delete" });
844
- void (async () => {
845
- const result = await purgeSession(value);
846
- if (result.deleted) {
847
- services.toast.success(`deleted ${label} · ${result.detail}`, {
848
- key: "history-delete",
849
- });
850
- }
851
- else {
852
- services.toast.error(`could not delete ${label} · ${result.detail}`, {
853
- key: "history-delete",
854
- });
855
- }
856
- })();
857
- };
858
- services.overlay.openPicker({
859
- title: "History",
860
- twoLine: true,
861
- historyStyle: true,
862
- searchDescription: true,
863
- rowAction: { chord: "ctrl+x", hint: "^x:delete" },
864
- options,
865
- }, (value) => {
866
- void (async () => {
867
- if (value === "__current__") {
868
- services.session.notice("info", "showing current session");
869
- services.overlay.close();
870
- return;
871
- }
872
- // Refresh only the selected record so a session changed by another
873
- // process while the picker was open cannot be resumed stale. This work
874
- // happens after selection and does not delay opening /history.
875
- const session = await getSession(value);
876
- if (!session) {
877
- services.session.notice("warn", "session not found");
878
- services.overlay.close();
879
- return;
880
- }
881
- if (session.id === currentId) {
882
- services.session.notice("info", "already on this session");
883
- services.overlay.close();
884
- return;
885
- }
886
- // Persist the outgoing live session before rebinding id, so work is not
887
- // lost and we don't orphan a half-saved row under the old id.
888
- if (currentMessages.length > 0) {
889
- try {
890
- await services.session.persistNow();
891
- }
892
- catch {
893
- /* best-effort */
894
- }
895
- }
896
- clearActiveProjectRoot();
897
- services.plan.clear();
898
- services.session.loadHistory(session.messages, {
899
- sessionId: session.id,
900
- title: session.name,
901
- persistenceRevision: session.revision,
902
- ...(session.previousTurn
903
- ? { previousTurn: session.previousTurn }
904
- : {}),
905
- ...(session.contextUsage
906
- ? { contextUsage: session.contextUsage }
907
- : {}),
908
- ...(session.workspaceFolder
909
- ? {
910
- workspaceFolder: session.workspaceFolder,
911
- workspaceCode: session.workspaceCode,
912
- }
913
- : {}),
914
- });
915
- // Prefer the richer of visual transcript vs model messages (tools often
916
- // survive only in messages after abort-before-save of the UI snapshot).
917
- const visual = boundSessionVisualInput(session.transcript, session.messages);
918
- const hydrated = hydrateSessionVisual(visual.transcript, visual.messages);
919
- services.transcript.hydrate(hydrated.state);
920
- if (visual.omittedItems > 0 || visual.omittedMessages > 0) {
921
- services.session.notice("info", `Loaded recent history view; ${Math.max(visual.omittedItems, visual.omittedMessages)} older item(s) remain available to the model on continue.`);
922
- }
923
- // Seed tool output spools so click-to-pager still has bodies.
924
- for (const [toolCallId, output] of hydrated.toolOutputs) {
925
- services.session.spool.replace(toolCallId, output);
926
- }
927
- // Plans are stored per sessionId (plans.jsonl / sqlite), separate from
928
- // the chat transcript. Reload them so Ctrl+H / Ctrl+P show the plan
929
- // that belonged to this resumed session (classic clai parity).
930
- const plan = await services.plan.load(session.id).catch(() => undefined);
931
- // Clear approval gate for a resumed plan — user must /implement again
932
- // if the plan was still draft/approved but execution should not resume
933
- // silently.
934
- services.session.setPlanApproved(plan?.status === "approved" || plan?.status === "in_progress");
935
- // Notices are UI-only — exclude from item counts (and they are never
936
- // model messages; session.messages is already the real LLM history).
937
- const itemCount = conversationItemCount(hydrated.state);
938
- const titleBit = session.name
939
- ? ` · ${session.name.length > 28 ? `${session.name.slice(0, 27)}…` : session.name}`
940
- : "";
941
- const planBit = plan ? " · plan" : "";
942
- const toolCards = [...hydrated.state.byId.values()].filter((i) => i.kind === "tool").length;
943
- const incomplete = transcriptLooksIncomplete(session.transcript?.length ?? 0, session.messages) ||
944
- (Boolean(plan?.tasks?.length) &&
945
- toolCards === 0 &&
946
- (session.transcript?.length ?? 0) < 8);
947
- // Short toast — full counts were too wide for the chip.
948
- services.session.notice("info", `resumed${titleBit}${planBit} · ${itemCount} items`);
949
- if (incomplete) {
950
- services.session.notice("warn", plan?.tasks?.length
951
- ? "thin history · plan OK · /implement to continue"
952
- : "thin history · some tools may be missing");
953
- }
954
- services.overlay.close();
955
- })();
956
- }, deleteRow);
957
- }
958
- export function handlePermissions(services, invocation) {
959
- const apply = (value) => {
960
- updateConfig({ permissions: value });
961
- services.session.notice("info", `permissions → ${value}`);
962
- };
963
- if (invocation.args) {
964
- const value = invocation.args.trim().toLowerCase();
965
- if (value === "default" || value === "allow-all")
966
- apply(value);
967
- return;
968
- }
969
- const current = getConfig().permissions ?? "default";
970
- services.overlay.openPicker({
971
- title: "Permissions",
972
- options: [
973
- {
974
- value: "default",
975
- label: "default",
976
- description: "confirm risky tool calls",
977
- active: current === "default",
978
- },
979
- {
980
- value: "allow-all",
981
- label: "allow-all",
982
- description: "skip confirmation prompts",
983
- active: current === "allow-all",
984
- },
985
- ],
986
- }, (value) => {
987
- apply(value);
988
- services.overlay.close();
989
- });
990
- }
991
- export function handleOutput(services, invocation) {
992
- const state = services.transcript.getState();
993
- const toolItems = [...state.byId.values()].filter((item) => item.kind === "tool");
994
- if (toolItems.length === 0) {
995
- services.session.notice("info", "no tool output yet");
996
- return;
997
- }
998
- const arg = invocation.args.trim().toLowerCase();
999
- if (!arg) {
1000
- services.transcript.toggleOutputGlobal();
1001
- const on = services.transcript.getState().expandOutputGlobal;
1002
- services.toast.show(on ? "Tool output expanded · ^O" : "Tool output collapsed · ^O", { key: "output", durationMs: 1500 });
1003
- return;
1004
- }
1005
- if (arg === "list" || arg === "ls") {
1006
- services.overlay.openPicker({
1007
- title: "Tool output",
1008
- options: toolItems.map((item) => ({
1009
- value: item.id,
1010
- label: item.name,
1011
- description: item.argsDisplay,
1012
- })),
1013
- }, (value) => {
1014
- services.overlay.close();
1015
- const item = toolItems.find((t) => t.id === value);
1016
- if (item)
1017
- void openToolOutputPager(services, item);
1018
- });
1019
- return;
1020
- }
1021
- const target = arg !== "last"
1022
- ? toolItems.find((t) => t.toolCallId === arg || t.id === arg)
1023
- : toolItems.at(-1);
1024
- if (target)
1025
- void openToolOutputPager(services, target);
1026
- else
1027
- services.session.notice("info", arg ? `no tool output: ${arg}` : "no tool output yet");
1028
- }
1029
- export function handlePlanPager(services) {
1030
- void (async () => {
1031
- let plan = services.plan.current();
1032
- if (!plan) {
1033
- plan = await services.plan
1034
- .load(services.session.sessionId)
1035
- .catch(() => undefined);
1036
- }
1037
- if (!plan) {
1038
- services.session.notice("info", "no active plan yet");
1039
- return;
1040
- }
1041
- const { formatPlanPagerDocument } = await import("../../rendering/plan-view.js");
1042
- services.overlay.openPager(`Plan · ${plan.goal}`, formatPlanPagerDocument(plan), undefined, undefined, "force");
1043
- })();
1044
- }
1045
- //# sourceMappingURL=picker-commands.js.map