@pentoshi/clai 2.0.61 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (462) hide show
  1. package/README.md +262 -368
  2. package/dist/agent/context-manager.d.ts +5 -0
  3. package/dist/agent/context-manager.js +14 -2
  4. package/dist/agent/context-manager.js.map +1 -1
  5. package/dist/agent/events.d.ts +4 -1
  6. package/dist/agent/runner.js +210 -91
  7. package/dist/agent/runner.js.map +1 -1
  8. package/dist/agent/tool-call-parser.d.ts +15 -0
  9. package/dist/agent/tool-call-parser.js +171 -2
  10. package/dist/agent/tool-call-parser.js.map +1 -1
  11. package/dist/app/adapters/agent-event-adapter.d.ts +29 -0
  12. package/dist/app/adapters/agent-event-adapter.js +143 -0
  13. package/dist/app/adapters/agent-event-adapter.js.map +1 -0
  14. package/dist/app/adapters/current-agent-adapter.d.ts +7 -0
  15. package/dist/app/adapters/current-agent-adapter.js +27 -0
  16. package/dist/app/adapters/current-agent-adapter.js.map +1 -0
  17. package/dist/app/adapters/current-jobs-adapter.d.ts +4 -0
  18. package/dist/app/adapters/current-jobs-adapter.js +13 -0
  19. package/dist/app/adapters/current-jobs-adapter.js.map +1 -0
  20. package/dist/app/adapters/current-store-adapter.d.ts +3 -0
  21. package/dist/app/adapters/current-store-adapter.js +22 -0
  22. package/dist/app/adapters/current-store-adapter.js.map +1 -0
  23. package/dist/app/adapters/current-terminal-adapter.d.ts +9 -0
  24. package/dist/app/adapters/current-terminal-adapter.js +31 -0
  25. package/dist/app/adapters/current-terminal-adapter.js.map +1 -0
  26. package/dist/app/adapters/current-updates-adapter.d.ts +7 -0
  27. package/dist/app/adapters/current-updates-adapter.js +31 -0
  28. package/dist/app/adapters/current-updates-adapter.js.map +1 -0
  29. package/dist/app/adapters/in-memory-clipboard-adapter.d.ts +10 -0
  30. package/dist/app/adapters/in-memory-clipboard-adapter.js +20 -0
  31. package/dist/app/adapters/in-memory-clipboard-adapter.js.map +1 -0
  32. package/dist/app/commands/command.d.ts +24 -0
  33. package/dist/app/commands/command.js +4 -0
  34. package/dist/app/commands/command.js.map +1 -0
  35. package/dist/app/commands/registry.d.ts +45 -0
  36. package/dist/app/commands/registry.js +164 -0
  37. package/dist/app/commands/registry.js.map +1 -0
  38. package/dist/app/controllers/disposable.d.ts +15 -0
  39. package/dist/app/controllers/disposable.js +38 -0
  40. package/dist/app/controllers/disposable.js.map +1 -0
  41. package/dist/app/controllers/job-controller.d.ts +22 -0
  42. package/dist/app/controllers/job-controller.js +35 -0
  43. package/dist/app/controllers/job-controller.js.map +1 -0
  44. package/dist/app/controllers/plan-controller.d.ts +31 -0
  45. package/dist/app/controllers/plan-controller.js +69 -0
  46. package/dist/app/controllers/plan-controller.js.map +1 -0
  47. package/dist/app/controllers/session-controller.d.ts +167 -0
  48. package/dist/app/controllers/session-controller.js +467 -0
  49. package/dist/app/controllers/session-controller.js.map +1 -0
  50. package/dist/app/controllers/turn-controller.d.ts +52 -0
  51. package/dist/app/controllers/turn-controller.js +118 -0
  52. package/dist/app/controllers/turn-controller.js.map +1 -0
  53. package/dist/app/events/app-event.d.ts +118 -0
  54. package/dist/app/events/app-event.js +25 -0
  55. package/dist/app/events/app-event.js.map +1 -0
  56. package/dist/app/events/event-buffer.d.ts +51 -0
  57. package/dist/app/events/event-buffer.js +109 -0
  58. package/dist/app/events/event-buffer.js.map +1 -0
  59. package/dist/app/events/sequencer.d.ts +32 -0
  60. package/dist/app/events/sequencer.js +55 -0
  61. package/dist/app/events/sequencer.js.map +1 -0
  62. package/dist/app/ports/agent-port.d.ts +29 -0
  63. package/dist/app/ports/agent-port.js +2 -0
  64. package/dist/app/ports/agent-port.js.map +1 -0
  65. package/dist/app/ports/clipboard-port.d.ts +9 -0
  66. package/dist/app/ports/clipboard-port.js +2 -0
  67. package/dist/app/ports/clipboard-port.js.map +1 -0
  68. package/dist/app/ports/confirm-port.d.ts +17 -0
  69. package/dist/app/ports/confirm-port.js +2 -0
  70. package/dist/app/ports/confirm-port.js.map +1 -0
  71. package/dist/app/ports/jobs-port.d.ts +18 -0
  72. package/dist/app/ports/jobs-port.js +2 -0
  73. package/dist/app/ports/jobs-port.js.map +1 -0
  74. package/dist/app/ports/persistence-port.d.ts +21 -0
  75. package/dist/app/ports/persistence-port.js +2 -0
  76. package/dist/app/ports/persistence-port.js.map +1 -0
  77. package/dist/app/ports/secret-port.d.ts +12 -0
  78. package/dist/app/ports/secret-port.js +2 -0
  79. package/dist/app/ports/secret-port.js.map +1 -0
  80. package/dist/app/ports/terminal-port.d.ts +18 -0
  81. package/dist/app/ports/terminal-port.js +2 -0
  82. package/dist/app/ports/terminal-port.js.map +1 -0
  83. package/dist/app/ports/updates-port.d.ts +12 -0
  84. package/dist/app/ports/updates-port.js +2 -0
  85. package/dist/app/ports/updates-port.js.map +1 -0
  86. package/dist/commands/doctor.js +9 -0
  87. package/dist/commands/doctor.js.map +1 -1
  88. package/dist/commands/update.js +1 -1
  89. package/dist/commands/update.js.map +1 -1
  90. package/dist/index.js +9 -6
  91. package/dist/index.js.map +1 -1
  92. package/dist/llm/router.js +4 -2
  93. package/dist/llm/router.js.map +1 -1
  94. package/dist/prompts/index.d.ts +1 -1
  95. package/dist/prompts/index.js +5 -3
  96. package/dist/prompts/index.js.map +1 -1
  97. package/dist/repl/slash-commands.js +1 -1
  98. package/dist/repl/slash-commands.js.map +1 -1
  99. package/dist/repl.js +35 -107
  100. package/dist/repl.js.map +1 -1
  101. package/dist/store/config.js +3 -1
  102. package/dist/store/config.js.map +1 -1
  103. package/dist/store/history.d.ts +26 -2
  104. package/dist/store/history.js +383 -72
  105. package/dist/store/history.js.map +1 -1
  106. package/dist/store/logs.js +3 -3
  107. package/dist/store/logs.js.map +1 -1
  108. package/dist/store/paths.d.ts +6 -0
  109. package/dist/store/paths.js +38 -0
  110. package/dist/store/paths.js.map +1 -0
  111. package/dist/store/plan.js +8 -5
  112. package/dist/store/plan.js.map +1 -1
  113. package/dist/tools/jobs.js +2 -2
  114. package/dist/tools/jobs.js.map +1 -1
  115. package/dist/tools/registry.js +117 -46
  116. package/dist/tools/registry.js.map +1 -1
  117. package/dist/tools/shell.js +2 -2
  118. package/dist/tools/shell.js.map +1 -1
  119. package/dist/tui/state.js +20 -17
  120. package/dist/tui/state.js.map +1 -1
  121. package/dist/tui-v2/actions/action-id.d.ts +14 -0
  122. package/dist/tui-v2/actions/action-id.js +109 -0
  123. package/dist/tui-v2/actions/action-id.js.map +1 -0
  124. package/dist/tui-v2/actions/action-router.d.ts +18 -0
  125. package/dist/tui-v2/actions/action-router.js +62 -0
  126. package/dist/tui-v2/actions/action-router.js.map +1 -0
  127. package/dist/tui-v2/actions/chord-from-key.d.ts +26 -0
  128. package/dist/tui-v2/actions/chord-from-key.js +45 -0
  129. package/dist/tui-v2/actions/chord-from-key.js.map +1 -0
  130. package/dist/tui-v2/actions/keymap.d.ts +24 -0
  131. package/dist/tui-v2/actions/keymap.js +134 -0
  132. package/dist/tui-v2/actions/keymap.js.map +1 -0
  133. package/dist/tui-v2/app/App.d.ts +13 -0
  134. package/dist/tui-v2/app/App.js +320 -0
  135. package/dist/tui-v2/app/App.js.map +1 -0
  136. package/dist/tui-v2/app/command-handlers.d.ts +8 -0
  137. package/dist/tui-v2/app/command-handlers.js +66 -0
  138. package/dist/tui-v2/app/command-handlers.js.map +1 -0
  139. package/dist/tui-v2/app/commands/config-commands.d.ts +14 -0
  140. package/dist/tui-v2/app/commands/config-commands.js +161 -0
  141. package/dist/tui-v2/app/commands/config-commands.js.map +1 -0
  142. package/dist/tui-v2/app/commands/key-commands.d.ts +9 -0
  143. package/dist/tui-v2/app/commands/key-commands.js +263 -0
  144. package/dist/tui-v2/app/commands/key-commands.js.map +1 -0
  145. package/dist/tui-v2/app/commands/picker-commands.d.ts +24 -0
  146. package/dist/tui-v2/app/commands/picker-commands.js +423 -0
  147. package/dist/tui-v2/app/commands/picker-commands.js.map +1 -0
  148. package/dist/tui-v2/app/commands/session-commands.d.ts +19 -0
  149. package/dist/tui-v2/app/commands/session-commands.js +162 -0
  150. package/dist/tui-v2/app/commands/session-commands.js.map +1 -0
  151. package/dist/tui-v2/app/plan-lifecycle.d.ts +16 -0
  152. package/dist/tui-v2/app/plan-lifecycle.js +59 -0
  153. package/dist/tui-v2/app/plan-lifecycle.js.map +1 -0
  154. package/dist/tui-v2/app/providers.d.ts +17 -0
  155. package/dist/tui-v2/app/providers.js +32 -0
  156. package/dist/tui-v2/app/providers.js.map +1 -0
  157. package/dist/tui-v2/bootstrap/capabilities.d.ts +35 -0
  158. package/dist/tui-v2/bootstrap/capabilities.js +93 -0
  159. package/dist/tui-v2/bootstrap/capabilities.js.map +1 -0
  160. package/dist/tui-v2/bootstrap/composition-root.d.ts +85 -0
  161. package/dist/tui-v2/bootstrap/composition-root.js +131 -0
  162. package/dist/tui-v2/bootstrap/composition-root.js.map +1 -0
  163. package/dist/tui-v2/bootstrap/disable-native-selection.d.ts +11 -0
  164. package/dist/tui-v2/bootstrap/disable-native-selection.js +13 -0
  165. package/dist/tui-v2/bootstrap/disable-native-selection.js.map +1 -0
  166. package/dist/tui-v2/bootstrap/lifecycle.d.ts +62 -0
  167. package/dist/tui-v2/bootstrap/lifecycle.js +123 -0
  168. package/dist/tui-v2/bootstrap/lifecycle.js.map +1 -0
  169. package/dist/tui-v2/bootstrap/osc52-clipboard.d.ts +28 -0
  170. package/dist/tui-v2/bootstrap/osc52-clipboard.js +44 -0
  171. package/dist/tui-v2/bootstrap/osc52-clipboard.js.map +1 -0
  172. package/dist/tui-v2/bootstrap/overlay-ports.d.ts +12 -0
  173. package/dist/{tui/confirm.js → tui-v2/bootstrap/overlay-ports.js} +17 -25
  174. package/dist/tui-v2/bootstrap/overlay-ports.js.map +1 -0
  175. package/dist/tui-v2/bootstrap/pager-export.d.ts +24 -0
  176. package/dist/tui-v2/bootstrap/pager-export.js +87 -0
  177. package/dist/tui-v2/bootstrap/pager-export.js.map +1 -0
  178. package/dist/tui-v2/bootstrap/start-tui-v2.d.ts +15 -0
  179. package/dist/tui-v2/bootstrap/start-tui-v2.js +95 -0
  180. package/dist/tui-v2/bootstrap/start-tui-v2.js.map +1 -0
  181. package/dist/tui-v2/bootstrap/ui-selection.d.ts +30 -0
  182. package/dist/tui-v2/bootstrap/ui-selection.js +59 -0
  183. package/dist/tui-v2/bootstrap/ui-selection.js.map +1 -0
  184. package/dist/tui-v2/components/completion/completion-menu.d.ts +23 -0
  185. package/dist/tui-v2/components/completion/completion-menu.js +84 -0
  186. package/dist/tui-v2/components/completion/completion-menu.js.map +1 -0
  187. package/dist/tui-v2/components/jobs/jobs-panel.d.ts +16 -0
  188. package/dist/tui-v2/components/jobs/jobs-panel.js +92 -0
  189. package/dist/tui-v2/components/jobs/jobs-panel.js.map +1 -0
  190. package/dist/tui-v2/components/modal/confirm-modal.d.ts +21 -0
  191. package/dist/tui-v2/components/modal/confirm-modal.js +71 -0
  192. package/dist/tui-v2/components/modal/confirm-modal.js.map +1 -0
  193. package/dist/tui-v2/components/modal/prompt-actions-modal.d.ts +15 -0
  194. package/dist/tui-v2/components/modal/prompt-actions-modal.js +80 -0
  195. package/dist/tui-v2/components/modal/prompt-actions-modal.js.map +1 -0
  196. package/dist/tui-v2/components/modal/secret-modal.d.ts +24 -0
  197. package/dist/tui-v2/components/modal/secret-modal.js +50 -0
  198. package/dist/tui-v2/components/modal/secret-modal.js.map +1 -0
  199. package/dist/tui-v2/components/overlay/overlay-host.d.ts +17 -0
  200. package/dist/tui-v2/components/overlay/overlay-host.js +28 -0
  201. package/dist/tui-v2/components/overlay/overlay-host.js.map +1 -0
  202. package/dist/tui-v2/components/pager/pager.d.ts +20 -0
  203. package/dist/tui-v2/components/pager/pager.js +396 -0
  204. package/dist/tui-v2/components/pager/pager.js.map +1 -0
  205. package/dist/tui-v2/components/picker/picker.d.ts +17 -0
  206. package/dist/tui-v2/components/picker/picker.js +222 -0
  207. package/dist/tui-v2/components/picker/picker.js.map +1 -0
  208. package/dist/tui-v2/components/plan/plan-view.d.ts +20 -0
  209. package/dist/tui-v2/components/plan/plan-view.js +116 -0
  210. package/dist/tui-v2/components/plan/plan-view.js.map +1 -0
  211. package/dist/tui-v2/components/queue/queue-panel.d.ts +23 -0
  212. package/dist/tui-v2/components/queue/queue-panel.js +58 -0
  213. package/dist/tui-v2/components/queue/queue-panel.js.map +1 -0
  214. package/dist/tui-v2/components/status/status-line.d.ts +27 -0
  215. package/dist/tui-v2/components/status/status-line.js +158 -0
  216. package/dist/tui-v2/components/status/status-line.js.map +1 -0
  217. package/dist/tui-v2/components/toast/toast-host.d.ts +15 -0
  218. package/dist/tui-v2/components/toast/toast-host.js +48 -0
  219. package/dist/tui-v2/components/toast/toast-host.js.map +1 -0
  220. package/dist/tui-v2/components/transcript/assistant-message.d.ts +20 -0
  221. package/dist/tui-v2/components/transcript/assistant-message.js +35 -0
  222. package/dist/tui-v2/components/transcript/assistant-message.js.map +1 -0
  223. package/dist/tui-v2/components/transcript/compacted-row.d.ts +19 -0
  224. package/dist/tui-v2/components/transcript/compacted-row.js +94 -0
  225. package/dist/tui-v2/components/transcript/compacted-row.js.map +1 -0
  226. package/dist/tui-v2/components/transcript/intro-card.d.ts +19 -0
  227. package/dist/tui-v2/components/transcript/intro-card.js +50 -0
  228. package/dist/tui-v2/components/transcript/intro-card.js.map +1 -0
  229. package/dist/tui-v2/components/transcript/linkable-text.d.ts +21 -0
  230. package/dist/tui-v2/components/transcript/linkable-text.js +46 -0
  231. package/dist/tui-v2/components/transcript/linkable-text.js.map +1 -0
  232. package/dist/tui-v2/components/transcript/notice-row.d.ts +14 -0
  233. package/dist/tui-v2/components/transcript/notice-row.js +40 -0
  234. package/dist/tui-v2/components/transcript/notice-row.js.map +1 -0
  235. package/dist/tui-v2/components/transcript/search-bar.d.ts +19 -0
  236. package/dist/tui-v2/components/transcript/search-bar.js +7 -0
  237. package/dist/tui-v2/components/transcript/search-bar.js.map +1 -0
  238. package/dist/tui-v2/components/transcript/thinking-block.d.ts +22 -0
  239. package/dist/tui-v2/components/transcript/thinking-block.js +27 -0
  240. package/dist/tui-v2/components/transcript/thinking-block.js.map +1 -0
  241. package/dist/tui-v2/components/transcript/tool-card.d.ts +26 -0
  242. package/dist/tui-v2/components/transcript/tool-card.js +175 -0
  243. package/dist/tui-v2/components/transcript/tool-card.js.map +1 -0
  244. package/dist/tui-v2/components/transcript/transcript-row.d.ts +25 -0
  245. package/dist/tui-v2/components/transcript/transcript-row.js +30 -0
  246. package/dist/tui-v2/components/transcript/transcript-row.js.map +1 -0
  247. package/dist/tui-v2/components/transcript/transcript-scroll-port.d.ts +52 -0
  248. package/dist/tui-v2/components/transcript/transcript-scroll-port.js +86 -0
  249. package/dist/tui-v2/components/transcript/transcript-scroll-port.js.map +1 -0
  250. package/dist/tui-v2/components/transcript/transcript-view.d.ts +24 -0
  251. package/dist/tui-v2/components/transcript/transcript-view.js +403 -0
  252. package/dist/tui-v2/components/transcript/transcript-view.js.map +1 -0
  253. package/dist/tui-v2/components/transcript/use-click-without-drag.d.ts +13 -0
  254. package/dist/tui-v2/components/transcript/use-click-without-drag.js +35 -0
  255. package/dist/tui-v2/components/transcript/use-click-without-drag.js.map +1 -0
  256. package/dist/tui-v2/components/transcript/use-native-selection-copy.d.ts +10 -0
  257. package/dist/tui-v2/components/transcript/use-native-selection-copy.js +37 -0
  258. package/dist/tui-v2/components/transcript/use-native-selection-copy.js.map +1 -0
  259. package/dist/tui-v2/components/transcript/use-transcript-selection.d.ts +23 -0
  260. package/dist/tui-v2/components/transcript/use-transcript-selection.js +136 -0
  261. package/dist/tui-v2/components/transcript/use-transcript-selection.js.map +1 -0
  262. package/dist/tui-v2/components/transcript/user-message.d.ts +10 -0
  263. package/dist/tui-v2/components/transcript/user-message.js +23 -0
  264. package/dist/tui-v2/components/transcript/user-message.js.map +1 -0
  265. package/dist/tui-v2/composer/arrow-intent.d.ts +23 -0
  266. package/dist/tui-v2/composer/arrow-intent.js +35 -0
  267. package/dist/tui-v2/composer/arrow-intent.js.map +1 -0
  268. package/dist/tui-v2/composer/completion.d.ts +37 -0
  269. package/dist/tui-v2/composer/completion.js +67 -0
  270. package/dist/tui-v2/composer/completion.js.map +1 -0
  271. package/dist/tui-v2/composer/composer-editor.d.ts +33 -0
  272. package/dist/tui-v2/composer/composer-editor.js +620 -0
  273. package/dist/tui-v2/composer/composer-editor.js.map +1 -0
  274. package/dist/tui-v2/composer/composer-height.d.ts +21 -0
  275. package/dist/tui-v2/composer/composer-height.js +29 -0
  276. package/dist/tui-v2/composer/composer-height.js.map +1 -0
  277. package/dist/tui-v2/composer/composer-meta.d.ts +9 -0
  278. package/dist/tui-v2/composer/composer-meta.js +38 -0
  279. package/dist/tui-v2/composer/composer-meta.js.map +1 -0
  280. package/dist/tui-v2/composer/history-nav.d.ts +15 -0
  281. package/dist/tui-v2/composer/history-nav.js +16 -0
  282. package/dist/tui-v2/composer/history-nav.js.map +1 -0
  283. package/dist/tui-v2/composer/newline-hint.d.ts +13 -0
  284. package/dist/tui-v2/composer/newline-hint.js +13 -0
  285. package/dist/tui-v2/composer/newline-hint.js.map +1 -0
  286. package/dist/tui-v2/composer/paste-placeholder.d.ts +35 -0
  287. package/dist/tui-v2/composer/paste-placeholder.js +55 -0
  288. package/dist/tui-v2/composer/paste-placeholder.js.map +1 -0
  289. package/dist/tui-v2/composer/prompt-history.d.ts +22 -0
  290. package/dist/tui-v2/composer/prompt-history.js +51 -0
  291. package/dist/tui-v2/composer/prompt-history.js.map +1 -0
  292. package/dist/tui-v2/composer/secret-buffer.d.ts +20 -0
  293. package/dist/tui-v2/composer/secret-buffer.js +42 -0
  294. package/dist/tui-v2/composer/secret-buffer.js.map +1 -0
  295. package/dist/tui-v2/composer/textarea-keybindings.d.ts +22 -0
  296. package/dist/tui-v2/composer/textarea-keybindings.js +27 -0
  297. package/dist/tui-v2/composer/textarea-keybindings.js.map +1 -0
  298. package/dist/tui-v2/controllers/focus-controller.d.ts +30 -0
  299. package/dist/tui-v2/controllers/focus-controller.js +80 -0
  300. package/dist/tui-v2/controllers/focus-controller.js.map +1 -0
  301. package/dist/tui-v2/controllers/overlay-controller.d.ts +99 -0
  302. package/dist/tui-v2/controllers/overlay-controller.js +195 -0
  303. package/dist/tui-v2/controllers/overlay-controller.js.map +1 -0
  304. package/dist/tui-v2/controllers/selection-controller.d.ts +76 -0
  305. package/dist/tui-v2/controllers/selection-controller.js +238 -0
  306. package/dist/tui-v2/controllers/selection-controller.js.map +1 -0
  307. package/dist/tui-v2/controllers/toast-controller.d.ts +35 -0
  308. package/dist/tui-v2/controllers/toast-controller.js +88 -0
  309. package/dist/tui-v2/controllers/toast-controller.js.map +1 -0
  310. package/dist/tui-v2/layout/compute-layout.d.ts +59 -0
  311. package/dist/tui-v2/layout/compute-layout.js +170 -0
  312. package/dist/tui-v2/layout/compute-layout.js.map +1 -0
  313. package/dist/tui-v2/rendering/ansi-to-styled.d.ts +17 -0
  314. package/dist/tui-v2/rendering/ansi-to-styled.js +217 -0
  315. package/dist/tui-v2/rendering/ansi-to-styled.js.map +1 -0
  316. package/dist/tui-v2/rendering/batch-sections.d.ts +45 -0
  317. package/dist/tui-v2/rendering/batch-sections.js +109 -0
  318. package/dist/tui-v2/rendering/batch-sections.js.map +1 -0
  319. package/dist/tui-v2/rendering/link-detector.d.ts +16 -0
  320. package/dist/tui-v2/rendering/link-detector.js +43 -0
  321. package/dist/tui-v2/rendering/link-detector.js.map +1 -0
  322. package/dist/tui-v2/rendering/open-tool-output.d.ts +28 -0
  323. package/dist/tui-v2/rendering/open-tool-output.js +138 -0
  324. package/dist/tui-v2/rendering/open-tool-output.js.map +1 -0
  325. package/dist/tui-v2/rendering/picker-filter.d.ts +22 -0
  326. package/dist/tui-v2/rendering/picker-filter.js +68 -0
  327. package/dist/tui-v2/rendering/picker-filter.js.map +1 -0
  328. package/dist/tui-v2/rendering/plan-view.d.ts +32 -0
  329. package/dist/tui-v2/rendering/plan-view.js +196 -0
  330. package/dist/tui-v2/rendering/plan-view.js.map +1 -0
  331. package/dist/tui-v2/rendering/render-markdown-lines.d.ts +29 -0
  332. package/dist/tui-v2/rendering/render-markdown-lines.js +46 -0
  333. package/dist/tui-v2/rendering/render-markdown-lines.js.map +1 -0
  334. package/dist/tui-v2/rendering/sanitize-display.d.ts +13 -0
  335. package/dist/tui-v2/rendering/sanitize-display.js +24 -0
  336. package/dist/tui-v2/rendering/sanitize-display.js.map +1 -0
  337. package/dist/tui-v2/rendering/theme.d.ts +67 -0
  338. package/dist/tui-v2/rendering/theme.js +74 -0
  339. package/dist/tui-v2/rendering/theme.js.map +1 -0
  340. package/dist/tui-v2/rendering/tool-presenter.d.ts +39 -0
  341. package/dist/tui-v2/rendering/tool-presenter.js +207 -0
  342. package/dist/tui-v2/rendering/tool-presenter.js.map +1 -0
  343. package/dist/tui-v2/rendering/transcript-export.d.ts +11 -0
  344. package/dist/tui-v2/rendering/transcript-export.js +18 -0
  345. package/dist/tui-v2/rendering/transcript-export.js.map +1 -0
  346. package/dist/tui-v2/rendering/transcript-semantic.d.ts +17 -0
  347. package/dist/tui-v2/rendering/transcript-semantic.js +67 -0
  348. package/dist/tui-v2/rendering/transcript-semantic.js.map +1 -0
  349. package/dist/tui-v2/state/pager-search.d.ts +22 -0
  350. package/dist/tui-v2/state/pager-search.js +78 -0
  351. package/dist/tui-v2/state/pager-search.js.map +1 -0
  352. package/dist/tui-v2/state/semantic-document.d.ts +34 -0
  353. package/dist/tui-v2/state/semantic-document.js +201 -0
  354. package/dist/tui-v2/state/semantic-document.js.map +1 -0
  355. package/dist/tui-v2/state/transcript-compaction.d.ts +24 -0
  356. package/dist/tui-v2/state/transcript-compaction.js +79 -0
  357. package/dist/tui-v2/state/transcript-compaction.js.map +1 -0
  358. package/dist/tui-v2/state/transcript-hydrate.d.ts +27 -0
  359. package/dist/tui-v2/state/transcript-hydrate.js +272 -0
  360. package/dist/tui-v2/state/transcript-hydrate.js.map +1 -0
  361. package/dist/tui-v2/state/transcript-reducer.d.ts +10 -0
  362. package/dist/tui-v2/state/transcript-reducer.js +281 -0
  363. package/dist/tui-v2/state/transcript-reducer.js.map +1 -0
  364. package/dist/tui-v2/state/transcript-search.d.ts +17 -0
  365. package/dist/tui-v2/state/transcript-search.js +38 -0
  366. package/dist/tui-v2/state/transcript-search.js.map +1 -0
  367. package/dist/tui-v2/state/transcript-store.d.ts +32 -0
  368. package/dist/tui-v2/state/transcript-store.js +66 -0
  369. package/dist/tui-v2/state/transcript-store.js.map +1 -0
  370. package/dist/tui-v2/state/transcript-struct.d.ts +15 -0
  371. package/dist/tui-v2/state/transcript-struct.js +133 -0
  372. package/dist/tui-v2/state/transcript-struct.js.map +1 -0
  373. package/dist/tui-v2/state/transcript-types.d.ts +76 -0
  374. package/dist/tui-v2/state/transcript-types.js +65 -0
  375. package/dist/tui-v2/state/transcript-types.js.map +1 -0
  376. package/dist/tui-v2/state/use-overlay.d.ts +3 -0
  377. package/dist/tui-v2/state/use-overlay.js +6 -0
  378. package/dist/tui-v2/state/use-overlay.js.map +1 -0
  379. package/dist/tui-v2/state/use-plan.d.ts +4 -0
  380. package/dist/tui-v2/state/use-plan.js +6 -0
  381. package/dist/tui-v2/state/use-plan.js.map +1 -0
  382. package/dist/tui-v2/state/use-session-state.d.ts +2 -0
  383. package/dist/tui-v2/state/use-session-state.js +7 -0
  384. package/dist/tui-v2/state/use-session-state.js.map +1 -0
  385. package/dist/tui-v2/state/use-toast.d.ts +3 -0
  386. package/dist/tui-v2/state/use-toast.js +15 -0
  387. package/dist/tui-v2/state/use-toast.js.map +1 -0
  388. package/dist/tui-v2/state/use-transcript-store.d.ts +10 -0
  389. package/dist/tui-v2/state/use-transcript-store.js +12 -0
  390. package/dist/tui-v2/state/use-transcript-store.js.map +1 -0
  391. package/dist/ui/intro-card.js +3 -3
  392. package/dist/ui/intro-card.js.map +1 -1
  393. package/dist/ui/intro-header.d.ts +23 -0
  394. package/dist/ui/intro-header.js +232 -0
  395. package/dist/ui/intro-header.js.map +1 -0
  396. package/dist/ui/markdown.js +0 -1
  397. package/dist/ui/markdown.js.map +1 -1
  398. package/dist/ui/mentions.d.ts +9 -2
  399. package/dist/ui/mentions.js +102 -4
  400. package/dist/ui/mentions.js.map +1 -1
  401. package/dist/ui/output-pane.js +1 -1
  402. package/dist/ui/output-pane.js.map +1 -1
  403. package/dist/ui/plan-pane.d.ts +8 -0
  404. package/dist/ui/plan-pane.js +38 -0
  405. package/dist/ui/plan-pane.js.map +1 -1
  406. package/dist/ui/wordmark.d.ts +5 -0
  407. package/dist/ui/wordmark.js +6 -1
  408. package/dist/ui/wordmark.js.map +1 -1
  409. package/package.json +14 -10
  410. package/dist/tui/App.d.ts +0 -12
  411. package/dist/tui/App.js +0 -2174
  412. package/dist/tui/App.js.map +0 -1
  413. package/dist/tui/components/ConfirmModal.d.ts +0 -9
  414. package/dist/tui/components/ConfirmModal.js +0 -55
  415. package/dist/tui/components/ConfirmModal.js.map +0 -1
  416. package/dist/tui/components/JobsPanel.d.ts +0 -11
  417. package/dist/tui/components/JobsPanel.js +0 -55
  418. package/dist/tui/components/JobsPanel.js.map +0 -1
  419. package/dist/tui/components/Pager.d.ts +0 -14
  420. package/dist/tui/components/Pager.js +0 -56
  421. package/dist/tui/components/Pager.js.map +0 -1
  422. package/dist/tui/components/PickerPanel.d.ts +0 -15
  423. package/dist/tui/components/PickerPanel.js +0 -126
  424. package/dist/tui/components/PickerPanel.js.map +0 -1
  425. package/dist/tui/components/PlanSidebar.d.ts +0 -6
  426. package/dist/tui/components/PlanSidebar.js +0 -99
  427. package/dist/tui/components/PlanSidebar.js.map +0 -1
  428. package/dist/tui/components/SecretInputPanel.d.ts +0 -7
  429. package/dist/tui/components/SecretInputPanel.js +0 -38
  430. package/dist/tui/components/SecretInputPanel.js.map +0 -1
  431. package/dist/tui/confirm.d.ts +0 -16
  432. package/dist/tui/confirm.js.map +0 -1
  433. package/dist/tui/default.d.ts +0 -6
  434. package/dist/tui/default.js +0 -11
  435. package/dist/tui/default.js.map +0 -1
  436. package/dist/tui/hooks/useAgentRunner.d.ts +0 -73
  437. package/dist/tui/hooks/useAgentRunner.js +0 -277
  438. package/dist/tui/hooks/useAgentRunner.js.map +0 -1
  439. package/dist/tui/hooks/useJobs.d.ts +0 -7
  440. package/dist/tui/hooks/useJobs.js +0 -39
  441. package/dist/tui/hooks/useJobs.js.map +0 -1
  442. package/dist/tui/hooks/useSpinner.d.ts +0 -5
  443. package/dist/tui/hooks/useSpinner.js +0 -21
  444. package/dist/tui/hooks/useSpinner.js.map +0 -1
  445. package/dist/tui/hooks/useTerminalSize.d.ts +0 -9
  446. package/dist/tui/hooks/useTerminalSize.js +0 -26
  447. package/dist/tui/hooks/useTerminalSize.js.map +0 -1
  448. package/dist/tui/index.d.ts +0 -10
  449. package/dist/tui/index.js +0 -37
  450. package/dist/tui/index.js.map +0 -1
  451. package/dist/tui/key-intent.d.ts +0 -36
  452. package/dist/tui/key-intent.js +0 -54
  453. package/dist/tui/key-intent.js.map +0 -1
  454. package/dist/tui/mouse.d.ts +0 -8
  455. package/dist/tui/mouse.js +0 -34
  456. package/dist/tui/mouse.js.map +0 -1
  457. package/dist/tui/plan-sidebar-lines.d.ts +0 -2
  458. package/dist/tui/plan-sidebar-lines.js +0 -140
  459. package/dist/tui/plan-sidebar-lines.js.map +0 -1
  460. package/dist/tui/render-lines.d.ts +0 -22
  461. package/dist/tui/render-lines.js +0 -611
  462. package/dist/tui/render-lines.js.map +0 -1
@@ -1,99 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Box, Text } from "ink";
3
- import stringWidth from "string-width";
4
- import { wrapAnsiLine } from "../../ui/markdown.js";
5
- const taskGlyph = {
6
- pending: "○",
7
- in_progress: "◆",
8
- done: "✓",
9
- failed: "!",
10
- skipped: "–",
11
- };
12
- const taskColor = {
13
- pending: "gray",
14
- in_progress: "cyan",
15
- done: "green",
16
- failed: "red",
17
- skipped: "gray",
18
- };
19
- export function PlanSidebar({ plan, width, height, }) {
20
- const done = plan.tasks.filter((task) => task.state === "done").length;
21
- const percent = plan.tasks.length
22
- ? Math.round((done / plan.tasks.length) * 100)
23
- : 0;
24
- const contentWidth = Math.max(8, width - 4);
25
- const rowHeight = (index) => {
26
- const task = plan.tasks[index];
27
- const prefix = `${taskGlyph[task.state]} ${index + 1}. `;
28
- const prefixWidth = stringWidth(prefix);
29
- const textWidth = Math.max(4, contentWidth - prefixWidth);
30
- const fullText = `${task.title}${task.note ? ` — ${task.note}` : ""}`;
31
- return Math.max(1, wrapAnsiLine(fullText, textWidth).length);
32
- };
33
- const focus = Math.max(0, plan.tasks.findIndex((task) => task.state === "in_progress") >= 0
34
- ? plan.tasks.findIndex((task) => task.state === "in_progress")
35
- : plan.tasks.findIndex((task) => task.state === "pending"));
36
- const headerLines = wrapAnsiLine(plan.goal, contentWidth).length;
37
- const nonTaskHeight = 2 + 1 + headerLines + 1 + 1 + 1;
38
- const tasksSectionBudget = Math.max(1, height - nonTaskHeight);
39
- const getSliceHeight = (startIdx, endIdx) => {
40
- let h = 0;
41
- if (startIdx > 0)
42
- h += 1;
43
- for (let i = startIdx; i <= endIdx; i++) {
44
- h += rowHeight(i);
45
- }
46
- if (endIdx < plan.tasks.length - 1)
47
- h += 1;
48
- return h;
49
- };
50
- let start = focus;
51
- let end = focus;
52
- if (plan.tasks.length > 0) {
53
- let currentHeight = getSliceHeight(start, end);
54
- while (true) {
55
- let expanded = false;
56
- if (end < plan.tasks.length - 1) {
57
- const nextHeight = getSliceHeight(start, end + 1);
58
- if (nextHeight <= tasksSectionBudget) {
59
- end += 1;
60
- currentHeight = nextHeight;
61
- expanded = true;
62
- }
63
- }
64
- if (start > 0) {
65
- const nextHeight = getSliceHeight(start - 1, end);
66
- if (nextHeight <= tasksSectionBudget) {
67
- start -= 1;
68
- currentHeight = nextHeight;
69
- expanded = true;
70
- }
71
- }
72
- if (!expanded)
73
- break;
74
- }
75
- }
76
- const visible = [];
77
- if (plan.tasks.length > 0) {
78
- for (let index = start; index <= end; index++) {
79
- visible.push({ task: plan.tasks[index], index });
80
- }
81
- }
82
- const hiddenBelow = visible.length
83
- ? plan.tasks.length - visible[visible.length - 1].index - 1
84
- : 0;
85
- return (_jsxs(Box, { width: width, height: height, flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, overflow: "hidden", children: [_jsx(Text, { bold: true, color: "cyan", children: "\u25CF LIVE PLAN VIEW" }), _jsx(Box, { width: contentWidth, children: _jsx(Text, { bold: true, wrap: "wrap", children: plan.goal }) }), _jsx(Box, { width: contentWidth, children: _jsxs(Text, { dimColor: true, wrap: "wrap", children: [plan.status.replace("_", " "), " \u00B7 ", done, "/", plan.tasks.length, " \u00B7 ", percent, "%"] }) }), _jsxs(Box, { marginTop: 1, flexDirection: "column", width: contentWidth, children: [start > 0 ? (_jsx(Box, { width: contentWidth, children: _jsxs(Text, { dimColor: true, children: ["\u2191 ", start, " earlier task", start === 1 ? "" : "s"] }) })) : null, visible.map(({ task, index }) => {
86
- const prefix = `${taskGlyph[task.state]} ${index + 1}. `;
87
- const prefixWidth = stringWidth(prefix);
88
- const textWidth = Math.max(4, contentWidth - prefixWidth);
89
- const fullText = `${task.title}${task.note ? ` — ${task.note}` : ""}`;
90
- const textLines = wrapAnsiLine(fullText, textWidth);
91
- return (_jsx(Box, { flexDirection: "column", width: contentWidth, children: textLines.map((line, lineIdx) => {
92
- const isFirst = lineIdx === 0;
93
- return (_jsxs(Box, { flexDirection: "row", width: contentWidth, children: [isFirst ? (_jsx(Text, { color: taskColor[task.state], bold: task.state === "in_progress", children: prefix })) : (_jsx(Text, { children: " ".repeat(prefixWidth) })), _jsx(Text, { color: taskColor[task.state], dimColor: task.state === "done" || task.state === "skipped", bold: task.state === "in_progress", children: line })] }, lineIdx));
94
- }) }, task.id));
95
- }), hiddenBelow > 0 ? (_jsx(Box, { width: contentWidth, children: _jsxs(Text, { dimColor: true, children: ["\u2193 ", hiddenBelow, " more task", hiddenBelow === 1 ? "" : "s"] }) })) : null] }), _jsx(Box, { flexGrow: 1 }), _jsx(Box, { width: contentWidth, children: _jsx(Text, { dimColor: true, wrap: "wrap", children: plan.status === "draft"
96
- ? "/implement to approve · Ctrl+H to hide"
97
- : "Ctrl+H to hide · Ctrl+P for details" }) })] }));
98
- }
99
- //# sourceMappingURL=PlanSidebar.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PlanSidebar.js","sourceRoot":"","sources":["../../../src/tui/components/PlanSidebar.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- export declare function sanitizeSecretInput(input: string): string;
2
- export declare function SecretInputPanel({ title, prompt, onSubmit, onCancel, }: {
3
- title: string;
4
- prompt: string;
5
- onSubmit: (value: string) => void;
6
- onCancel: () => void;
7
- }): import("react").JSX.Element;
@@ -1,38 +0,0 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
- import { Box, Text, useInput } from "ink";
3
- import { useState } from "react";
4
- import { isMouseReport, stripMouseReports } from "../mouse.js";
5
- export function sanitizeSecretInput(input) {
6
- if (!input || isMouseReport(input))
7
- return "";
8
- return stripMouseReports(input)
9
- .replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")
10
- .replace(/[\x00-\x1f\x7f]/g, "");
11
- }
12
- export function SecretInputPanel({ title, prompt, onSubmit, onCancel, }) {
13
- const [value, setValue] = useState("");
14
- useInput((input, key) => {
15
- if (key.escape) {
16
- onCancel();
17
- return;
18
- }
19
- if (key.return) {
20
- if (value)
21
- onSubmit(value);
22
- return;
23
- }
24
- if (key.backspace || key.delete) {
25
- setValue((current) => current.slice(0, -1));
26
- return;
27
- }
28
- if (key.ctrl || key.meta || !input)
29
- return;
30
- if (isMouseReport(input))
31
- return;
32
- const cleaned = sanitizeSecretInput(input);
33
- if (cleaned)
34
- setValue((current) => current + cleaned);
35
- });
36
- return (_jsxs(Box, { borderStyle: "double", borderColor: "yellow", flexDirection: "column", paddingX: 1, marginX: 2, children: [_jsxs(Text, { color: "yellow", bold: true, inverse: true, children: [" SECURE INPUT \u00B7 ", title.toUpperCase(), " "] }), _jsx(Text, { children: prompt }), _jsxs(Text, { children: [_jsx(Text, { color: "yellow", children: "password \u203A " }), "•".repeat(value.length), _jsx(Text, { inverse: true, children: " " })] }), _jsx(Text, { dimColor: true, children: "Enter submits \u00B7 Esc cancels \u00B7 input is never saved or displayed" })] }));
37
- }
38
- //# sourceMappingURL=SecretInputPanel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SecretInputPanel.js","sourceRoot":"","sources":["../../../src/tui/components/SecretInputPanel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE/D,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC9C,OAAO,iBAAiB,CAAC,KAAK,CAAC;SAC5B,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC;SACvC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAC/B,KAAK,EACL,MAAM,EACN,QAAQ,EACR,QAAQ,GAMT;IACC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEvC,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAAC,QAAQ,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QACvC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAAC,IAAI,KAAK;gBAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACvD,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACzF,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO;QAC3C,IAAI,aAAa,CAAC,KAAK,CAAC;YAAE,OAAO;QACjC,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,OAAO;YAAE,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,MAAC,GAAG,IAAC,WAAW,EAAC,QAAQ,EAAC,WAAW,EAAC,QAAQ,EAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,aAC3F,MAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,EAAC,IAAI,QAAC,OAAO,4CAAkB,KAAK,CAAC,WAAW,EAAE,SAAS,EAC/E,KAAC,IAAI,cAAE,MAAM,GAAQ,EACrB,MAAC,IAAI,eAAC,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,iCAAmB,EAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAC,KAAC,IAAI,IAAC,OAAO,wBAAS,IAAO,EACpG,KAAC,IAAI,IAAC,QAAQ,gGAAuE,IACjF,CACP,CAAC;AACJ,CAAC"}
@@ -1,16 +0,0 @@
1
- import type { ConfirmPort } from "../agent/runner.js";
2
- /**
3
- * A confirm provider for the TUI. Inquirer can't run inside Ink (both fight
4
- * for stdin), so instead of prompting directly we hand the request to the
5
- * React layer via `request()`, which renders an in-app modal and resolves the
6
- * returned promise when the user answers.
7
- */
8
- export interface TuiConfirmController {
9
- port: ConfirmPort;
10
- /** Called by the App to register how confirm requests reach the UI. */
11
- setHandler: (handler: (req: {
12
- kind: "tool" | "pentest" | "continue" | "switch";
13
- prompt: string;
14
- }) => Promise<boolean>) => void;
15
- }
16
- export declare function createTuiConfirmPort(): TuiConfirmController;
@@ -1 +0,0 @@
1
- {"version":3,"file":"confirm.js","sourceRoot":"","sources":["../../src/tui/confirm.ts"],"names":[],"mappings":"AAGA,SAAS,YAAY,CAAC,IAAc;IAClC,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IACvE,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAgBD,MAAM,UAAU,oBAAoB;IAClC,IAAI,OAES,CAAC;IAEd,MAAM,GAAG,GAAG,KAAK,EAAE,GAGlB,EAAoB,EAAE;QACrB,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC,CAAC;IAEF,MAAM,IAAI,GAAgB;QACxB,KAAK,CAAC,WAAW,CAAC,IAAc;YAC9B,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO,GAAG,CAAC;gBACT,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG;aACrD,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,cAAc;YAClB,OAAO,GAAG,CAAC;gBACT,IAAI,EAAE,SAAS;gBACf,MAAM,EACJ,8FAA8F;aACjG,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,eAAe,CAAC,KAAa;YACjC,OAAO,GAAG,CAAC;gBACT,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,GAAG,KAAK,oCAAoC;aACrD,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,kBAAkB,CAAC,IAGxB;YACC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACzE,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACpD,OAAO,GAAG,CAAC;gBACT,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,GAAG,GAAG,wBAAwB,KAAK,6DAA6D;aACzG,CAAC,CAAC;QACL,CAAC;KACF,CAAC;IAEF,OAAO;QACL,IAAI;QACJ,UAAU,CAAC,CAAC;YACV,OAAO,GAAG,CAAC,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,6 +0,0 @@
1
- export interface TuiSelectionOptions {
2
- tui?: boolean | undefined;
3
- classic?: boolean | undefined;
4
- }
5
- /** Select the interactive frontend. Explicit classic mode always wins. */
6
- export declare function shouldUseTui(options: TuiSelectionOptions, env?: NodeJS.ProcessEnv): boolean;
@@ -1,11 +0,0 @@
1
- /** Select the interactive frontend. Explicit classic mode always wins. */
2
- export function shouldUseTui(options, env = process.env) {
3
- if (options.classic)
4
- return false;
5
- if (options.tui)
6
- return true;
7
- if (env.CLAI_CLASSIC === "1" || env.CLAI_TUI === "0")
8
- return false;
9
- return true;
10
- }
11
- //# sourceMappingURL=default.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"default.js","sourceRoot":"","sources":["../../src/tui/default.ts"],"names":[],"mappings":"AAKA,0EAA0E;AAC1E,MAAM,UAAU,YAAY,CAC1B,OAA4B,EAC5B,MAAyB,OAAO,CAAC,GAAG;IAEpC,IAAI,OAAO,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAClC,IAAI,OAAO,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAC7B,IAAI,GAAG,CAAC,YAAY,KAAK,GAAG,IAAI,GAAG,CAAC,QAAQ,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IACnE,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,73 +0,0 @@
1
- import type { ChatImage, ChatMessage, ProviderId } from "../../types.js";
2
- import type { AgentEvent } from "../../agent/events.js";
3
- import { type SessionPolicy } from "../../agent/runner.js";
4
- import { type CompactResult } from "../../agent/context-manager.js";
5
- import type { ConfirmPort } from "../../agent/runner.js";
6
- /**
7
- * High-frequency streaming events (`assistant-delta`, `thinking-delta`) can
8
- * arrive dozens of times per second from fast providers like Gemini Flash.
9
- * Dispatching each one to the reducer triggers a full Ink re-render, and the
10
- * TUI re-renders the entire transcript per render — so an unbatched stream
11
- * makes the screen crawl and appear to hang as the answer grows.
12
- *
13
- * This wrapper coalesces consecutive delta tokens into a single dispatch on a
14
- * short timer (so the screen updates ~25x/sec instead of per token), while
15
- * forwarding every other event immediately. Pending deltas are always flushed
16
- * *before* a non-delta event so transcript ordering is preserved (e.g. the
17
- * streamed prose lands before the tool card that supersedes it).
18
- */
19
- export interface ThrottledDispatch {
20
- dispatch: (event: AgentEvent) => void;
21
- /** Flush any buffered deltas immediately (call when a turn ends/aborts). */
22
- flush: () => void;
23
- }
24
- export declare function createThrottledDispatch(dispatch: (event: AgentEvent) => void, intervalMs?: number): ThrottledDispatch;
25
- export interface RunnerContext {
26
- mode: "ask" | "agent";
27
- provider?: ProviderId | undefined;
28
- model?: string | undefined;
29
- }
30
- export interface RunOptions {
31
- images?: ChatImage[] | undefined;
32
- }
33
- export interface UseAgentRunnerArgs {
34
- dispatchEvent: (event: AgentEvent) => void;
35
- confirm: ConfirmPort;
36
- getContext: () => RunnerContext;
37
- requestSecret: (request: {
38
- title: string;
39
- prompt: string;
40
- }) => Promise<string | undefined>;
41
- /**
42
- * Called when the user confirms switching from ask mode into agent mode for
43
- * an action task. The App uses this to flip its mode state (and persist the
44
- * default) so subsequent turns stay in agent mode.
45
- */
46
- onSwitchToAgent?: () => void;
47
- /** Called when Ctrl+C is pressed again while an aborted turn unwinds. */
48
- onForceExit?: () => void;
49
- }
50
- export interface AgentRunner {
51
- /** True while a turn is in flight. */
52
- isRunning: () => boolean;
53
- /** Start a turn for `input`. Resolves when the turn finishes. */
54
- run: (input: string, opts?: RunOptions) => Promise<void>;
55
- /** Abort the current turn (model stream + foreground tool). */
56
- abort: () => void;
57
- /** Clear conversation history and session policy (for /clear, /new). */
58
- reset: () => void;
59
- /** The live session policy (sessionId, planApproved, allow set). */
60
- getSession: () => SessionPolicy;
61
- /** Snapshot of the conversation messages (for /context, /save). */
62
- getMessages: () => ChatMessage[];
63
- /** Replace the current conversation when resuming a saved session. */
64
- setMessages: (messages: ChatMessage[], sessionId?: string) => void;
65
- compact: (sessionTranscript?: string, keepRecent?: number, signal?: AbortSignal) => Promise<CompactResult>;
66
- }
67
- /**
68
- * Bridges the React UI to the single agent implementation. On submit it
69
- * creates an AbortController, calls `runAgent`/`runAskStream` with
70
- * `onEvent: dispatchEvent`, and keeps conversation history so follow-ups
71
- * have context — mirroring the classic REPL's session handling.
72
- */
73
- export declare function useAgentRunner({ dispatchEvent, confirm, getContext, requestSecret, onSwitchToAgent, onForceExit, }: UseAgentRunnerArgs): AgentRunner;
@@ -1,277 +0,0 @@
1
- import { useCallback, useEffect, useMemo, useRef } from "react";
2
- import { runAgent } from "../../modes/agent.js";
3
- import { runAskStream } from "../../modes/ask.js";
4
- import { createSessionPolicy, } from "../../agent/runner.js";
5
- import { compactMessagesWithSummary } from "../../agent/context-manager.js";
6
- import { completeWithProvider } from "../../llm/router.js";
7
- import { createThinkingStreamParser, rememberThinkingFromText, } from "../../ui/thinking.js";
8
- export function createThrottledDispatch(dispatch, intervalMs = 40) {
9
- let pendingAssistant = "";
10
- let pendingThinking = "";
11
- let timer;
12
- const flush = () => {
13
- if (timer) {
14
- clearTimeout(timer);
15
- timer = undefined;
16
- }
17
- if (pendingAssistant) {
18
- const text = pendingAssistant;
19
- pendingAssistant = "";
20
- dispatch({ type: "assistant-delta", text });
21
- }
22
- if (pendingThinking) {
23
- const text = pendingThinking;
24
- pendingThinking = "";
25
- dispatch({ type: "thinking-delta", text });
26
- }
27
- };
28
- const schedule = () => {
29
- if (timer)
30
- return;
31
- timer = setTimeout(flush, intervalMs);
32
- };
33
- const throttled = (event) => {
34
- if (event.type === "assistant-delta") {
35
- pendingAssistant += event.text;
36
- schedule();
37
- return;
38
- }
39
- if (event.type === "thinking-delta") {
40
- pendingThinking += event.text;
41
- schedule();
42
- return;
43
- }
44
- // Any other event: flush buffered deltas first to keep ordering, then
45
- // forward the event so it commits after the text it follows.
46
- flush();
47
- dispatch(event);
48
- };
49
- return { dispatch: throttled, flush };
50
- }
51
- /**
52
- * Bridges the React UI to the single agent implementation. On submit it
53
- * creates an AbortController, calls `runAgent`/`runAskStream` with
54
- * `onEvent: dispatchEvent`, and keeps conversation history so follow-ups
55
- * have context — mirroring the classic REPL's session handling.
56
- */
57
- export function useAgentRunner({ dispatchEvent, confirm, getContext, requestSecret, onSwitchToAgent, onForceExit, }) {
58
- const messagesRef = useRef([]);
59
- const sessionRef = useRef(createSessionPolicy());
60
- const abortRef = useRef(undefined);
61
- const runningRef = useRef(false);
62
- // Coalesce high-frequency streaming deltas so a fast provider doesn't force
63
- // a full-transcript Ink re-render per token. Recreated only if the
64
- // underlying dispatch changes (it shouldn't during a session).
65
- const throttled = useMemo(() => createThrottledDispatch(dispatchEvent), [dispatchEvent]);
66
- // Belt-and-braces: flush any buffered deltas if the hook unmounts mid-stream.
67
- useEffect(() => () => throttled.flush(), [throttled]);
68
- const isRunning = useCallback(() => runningRef.current, []);
69
- const abort = useCallback(() => {
70
- abortRef.current?.abort();
71
- }, []);
72
- const reset = useCallback(() => {
73
- messagesRef.current = [];
74
- sessionRef.current = createSessionPolicy();
75
- }, []);
76
- const getSession = useCallback(() => sessionRef.current, []);
77
- const getMessages = useCallback(() => [...messagesRef.current], []);
78
- const setMessages = useCallback((messages, sessionId) => {
79
- messagesRef.current = [...messages];
80
- sessionRef.current = createSessionPolicy(sessionId);
81
- }, []);
82
- const compact = useCallback(async (sessionTranscript, keepRecent, signal) => {
83
- const ctx = getContext();
84
- const completeSummary = async (prompt) => {
85
- const response = await completeWithProvider({
86
- provider: ctx.provider,
87
- model: ctx.model,
88
- messages: [
89
- { role: "system", content: "You compress conversation history into accurate continuation memory." },
90
- { role: "user", content: prompt },
91
- ],
92
- temperature: 0.1,
93
- maxTokens: 4_096,
94
- signal,
95
- });
96
- return response.text;
97
- };
98
- const result = await compactMessagesWithSummary(messagesRef.current, async (prompt) => {
99
- const chunkSize = 50_000;
100
- if (prompt.length <= chunkSize)
101
- return completeSummary(prompt);
102
- const chunks = Array.from({ length: Math.ceil(prompt.length / chunkSize) }, (_, index) => prompt.slice(index * chunkSize, (index + 1) * chunkSize));
103
- const partials = [];
104
- for (let index = 0; index < chunks.length; index += 1) {
105
- signal?.throwIfAborted();
106
- partials.push(await completeSummary(`Summarize part ${index + 1} of ${chunks.length} of one session. Preserve concrete goals, actions, commands, results, task state, failures, and remaining work.\n\n${chunks[index]}`));
107
- }
108
- signal?.throwIfAborted();
109
- return completeSummary("Merge these ordered partial session memories into one non-redundant continuation memory. Preserve all concrete facts and unresolved work. Use sections: User goals, Decisions and constraints, Work completed, Commands/tools and results, Current state, Remaining work.\n\n" +
110
- partials.map((part, index) => `PART ${index + 1}:\n${part}`).join("\n\n"));
111
- }, { budgetTokens: 0, keepRecent }, sessionTranscript);
112
- messagesRef.current = result.messages;
113
- return result;
114
- }, [getContext]);
115
- const run = useCallback(async (input, opts) => {
116
- if (runningRef.current)
117
- return;
118
- runningRef.current = true;
119
- const ctx = getContext();
120
- const ac = new AbortController();
121
- abortRef.current = ac;
122
- // Interactive children temporarily switch the shared terminal to cooked
123
- // mode. In that state Ink cannot receive Ctrl+C as a keypress, so catch
124
- // SIGINT here and translate it into the same turn abort. This prevents a
125
- // password prompt from requiring a second Ctrl+C that exits clai.
126
- const onSigint = () => {
127
- if (ac.signal.aborted)
128
- onForceExit?.();
129
- else
130
- ac.abort();
131
- };
132
- process.on("SIGINT", onSigint);
133
- messagesRef.current.push({ role: "user", content: input });
134
- try {
135
- let answer = "";
136
- let capturedMessages;
137
- if (ctx.mode === "ask") {
138
- throttled.dispatch({ type: "turn-start", prompt: input });
139
- throttled.dispatch({ type: "status", text: "thinking" });
140
- const parser = createThinkingStreamParser((visible) => throttled.dispatch({ type: "assistant-delta", text: visible }), (think) => throttled.dispatch({ type: "thinking-delta", text: think }));
141
- let sawToken = false;
142
- let actionInfo;
143
- const raw = await runAskStream(input, (token) => {
144
- sawToken = true;
145
- parser.push(token);
146
- }, {
147
- provider: ctx.provider,
148
- model: ctx.model,
149
- history: messagesRef.current.slice(0, -1),
150
- signal: ac.signal,
151
- images: opts?.images,
152
- onActionRequired: (info) => {
153
- actionInfo = info;
154
- },
155
- // Render read-only research (web.search/web.fetch/…) as tool
156
- // cards, exactly like agent-mode tool activity.
157
- onEvent: throttled.dispatch,
158
- });
159
- // Flush the live-display parser, but trust the returned text as the
160
- // authoritative answer: when ask mode runs research rounds the live
161
- // stream may briefly mirror a tool-call preamble, whereas the return
162
- // value is always the clean final answer.
163
- if (sawToken)
164
- parser.finish();
165
- if (actionInfo) {
166
- // Ask mode can't perform the requested action. Show the model's
167
- // explanation, then offer to switch into agent mode and run it.
168
- throttled.flush();
169
- if (actionInfo.preamble) {
170
- throttled.dispatch({
171
- type: "assistant-message",
172
- text: actionInfo.preamble,
173
- });
174
- }
175
- const proceed = confirm.confirmAgentSwitch
176
- ? await confirm.confirmAgentSwitch({
177
- reason: actionInfo.preamble,
178
- tools: actionInfo.tools,
179
- })
180
- : false;
181
- if (proceed) {
182
- onSwitchToAgent?.();
183
- // Re-run the original request through the agent loop. runAgent
184
- // emits its own turn-start/turn-end via onEvent.
185
- answer = await runAgent(actionInfo.prompt, {
186
- provider: ctx.provider,
187
- model: ctx.model,
188
- history: messagesRef.current.slice(0, -1),
189
- signal: ac.signal,
190
- session: sessionRef.current,
191
- images: opts?.images,
192
- onEvent: throttled.dispatch,
193
- confirm,
194
- requestSecret,
195
- onMessages: (msgs) => {
196
- capturedMessages = msgs;
197
- messagesRef.current = msgs;
198
- },
199
- });
200
- }
201
- else {
202
- answer =
203
- "Staying in ask mode; the task wasn't run. Use /agent to run tasks that take actions.";
204
- throttled.dispatch({ type: "assistant-message", text: answer });
205
- throttled.dispatch({
206
- type: "turn-end",
207
- finalAnswer: answer,
208
- steps: 1,
209
- });
210
- }
211
- }
212
- else {
213
- const result = rememberThinkingFromText(raw);
214
- if (result.hasThinking && result.thinkContent) {
215
- throttled.dispatch({
216
- type: "thinking-block",
217
- content: result.thinkContent,
218
- });
219
- }
220
- answer = result.visible;
221
- throttled.dispatch({ type: "assistant-message", text: answer });
222
- throttled.dispatch({
223
- type: "turn-end",
224
- finalAnswer: answer,
225
- steps: 1,
226
- });
227
- }
228
- }
229
- else {
230
- answer = await runAgent(input, {
231
- provider: ctx.provider,
232
- model: ctx.model,
233
- history: messagesRef.current.slice(0, -1),
234
- signal: ac.signal,
235
- session: sessionRef.current,
236
- images: opts?.images,
237
- onEvent: throttled.dispatch,
238
- confirm,
239
- requestSecret,
240
- onMessages: (msgs) => {
241
- capturedMessages = msgs;
242
- messagesRef.current = msgs;
243
- },
244
- });
245
- }
246
- // Prefer the full conversation the agent handed back (user turn + every
247
- // tool call/result + final answer) so follow-ups AND resumed sessions
248
- // give the model what it actually did. Fall back to appending the
249
- // answer for turns that don't hand messages back (e.g. pure ask mode).
250
- if (capturedMessages) {
251
- messagesRef.current = capturedMessages;
252
- }
253
- else {
254
- messagesRef.current.push({ role: "assistant", content: answer });
255
- }
256
- }
257
- catch (err) {
258
- if (ac.signal.aborted) {
259
- throttled.dispatch({ type: "turn-aborted" });
260
- }
261
- else if (ctx.mode === "ask") {
262
- throttled.dispatch({
263
- type: "turn-error",
264
- message: err instanceof Error ? err.message : String(err),
265
- });
266
- }
267
- }
268
- finally {
269
- throttled.flush();
270
- process.off("SIGINT", onSigint);
271
- runningRef.current = false;
272
- abortRef.current = undefined;
273
- }
274
- }, [throttled, confirm, getContext, requestSecret, onSwitchToAgent, onForceExit]);
275
- return useMemo(() => ({ isRunning, run, abort, reset, getSession, getMessages, setMessages, compact }), [isRunning, run, abort, reset, getSession, getMessages, setMessages, compact]);
276
- }
277
- //# sourceMappingURL=useAgentRunner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useAgentRunner.js","sourceRoot":"","sources":["../../../src/tui/hooks/useAgentRunner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAGhE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,YAAY,EAA0B,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EACL,mBAAmB,GAEpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,0BAA0B,EAAsB,MAAM,gCAAgC,CAAC;AAChG,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAsB9B,MAAM,UAAU,uBAAuB,CACrC,QAAqC,EACrC,UAAU,GAAG,EAAE;IAEf,IAAI,gBAAgB,GAAG,EAAE,CAAC;IAC1B,IAAI,eAAe,GAAG,EAAE,CAAC;IACzB,IAAI,KAAgD,CAAC;IAErD,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,IAAI,KAAK,EAAE,CAAC;YACV,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,KAAK,GAAG,SAAS,CAAC;QACpB,CAAC;QACD,IAAI,gBAAgB,EAAE,CAAC;YACrB,MAAM,IAAI,GAAG,gBAAgB,CAAC;YAC9B,gBAAgB,GAAG,EAAE,CAAC;YACtB,QAAQ,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,IAAI,GAAG,eAAe,CAAC;YAC7B,eAAe,GAAG,EAAE,CAAC;YACrB,QAAQ,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC1B,IAAI,KAAK;YAAE,OAAO;QAClB,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACxC,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,KAAiB,EAAQ,EAAE;QAC5C,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YACrC,gBAAgB,IAAI,KAAK,CAAC,IAAI,CAAC;YAC/B,QAAQ,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YACpC,eAAe,IAAI,KAAK,CAAC,IAAI,CAAC;YAC9B,QAAQ,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QACD,sEAAsE;QACtE,6DAA6D;QAC7D,KAAK,EAAE,CAAC;QACR,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACxC,CAAC;AA6CD;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,EAC7B,aAAa,EACb,OAAO,EACP,UAAU,EACV,aAAa,EACb,eAAe,EACf,WAAW,GACQ;IACnB,MAAM,WAAW,GAAG,MAAM,CAAgB,EAAE,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,MAAM,CAAgB,mBAAmB,EAAE,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,MAAM,CAA8B,SAAS,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEjC,4EAA4E;IAC5E,mEAAmE;IACnE,+DAA+D;IAC/D,MAAM,SAAS,GAAG,OAAO,CACvB,GAAG,EAAE,CAAC,uBAAuB,CAAC,aAAa,CAAC,EAC5C,CAAC,aAAa,CAAC,CAChB,CAAC;IACF,8EAA8E;IAC9E,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEtD,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAE5D,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,WAAW,CAAC,OAAO,GAAG,EAAE,CAAC;QACzB,UAAU,CAAC,OAAO,GAAG,mBAAmB,EAAE,CAAC;IAC7C,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAE7D,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAEpE,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,QAAuB,EAAE,SAAkB,EAAE,EAAE;QAC9E,WAAW,CAAC,OAAO,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;QACpC,UAAU,CAAC,OAAO,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAAE,iBAA0B,EAAE,UAAmB,EAAE,MAAoB,EAAE,EAAE;QAC1G,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;QACzB,MAAM,eAAe,GAAG,KAAK,EAAE,MAAc,EAAmB,EAAE;YAChE,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC;gBAC1C,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,QAAQ,EAAE;oBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,sEAAsE,EAAE;oBACnG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;iBAClC;gBACD,WAAW,EAAE,GAAG;gBAChB,SAAS,EAAE,KAAK;gBAChB,MAAM;aACP,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,0BAA0B,CAC7C,WAAW,CAAC,OAAO,EACnB,KAAK,EAAE,MAAM,EAAE,EAAE;YACf,MAAM,SAAS,GAAG,MAAM,CAAC;YACzB,IAAI,MAAM,CAAC,MAAM,IAAI,SAAS;gBAAE,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CACvB,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,EAChD,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CACvE,CAAC;YACF,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;gBACtD,MAAM,EAAE,cAAc,EAAE,CAAC;gBACzB,QAAQ,CAAC,IAAI,CAAC,MAAM,eAAe,CACjC,kBAAkB,KAAK,GAAG,CAAC,OAAO,MAAM,CAAC,MAAM,sHAAsH,MAAM,CAAC,KAAK,CAAC,EAAE,CACrL,CAAC,CAAC;YACL,CAAC;YACD,MAAM,EAAE,cAAc,EAAE,CAAC;YACzB,OAAO,eAAe,CACpB,+QAA+Q;gBAC/Q,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,KAAK,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAC1E,CAAC;QACJ,CAAC,EACD,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,EAAE,EAC/B,iBAAiB,CAClB,CAAC;QACF,WAAW,CAAC,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC;QACtC,OAAO,MAAM,CAAC;IAChB,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,MAAM,GAAG,GAAG,WAAW,CACrB,KAAK,EAAE,KAAa,EAAE,IAAiB,EAAiB,EAAE;QACxD,IAAI,UAAU,CAAC,OAAO;YAAE,OAAO;QAC/B,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;QAC1B,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;QACzB,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;QACjC,QAAQ,CAAC,OAAO,GAAG,EAAE,CAAC;QACtB,wEAAwE;QACxE,wEAAwE;QACxE,yEAAyE;QACzE,kEAAkE;QAClE,MAAM,QAAQ,GAAG,GAAS,EAAE;YAC1B,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO;gBAAE,WAAW,EAAE,EAAE,CAAC;;gBAClC,EAAE,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC,CAAC;QACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/B,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAE3D,IAAI,CAAC;YACH,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,gBAA2C,CAAC;YAChD,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gBACvB,SAAS,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC1D,SAAS,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;gBACzD,MAAM,MAAM,GAAG,0BAA0B,CACvC,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAC3E,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CACvE,CAAC;gBACF,IAAI,QAAQ,GAAG,KAAK,CAAC;gBACrB,IAAI,UAAyC,CAAC;gBAC9C,MAAM,GAAG,GAAG,MAAM,YAAY,CAC5B,KAAK,EACL,CAAC,KAAK,EAAE,EAAE;oBACR,QAAQ,GAAG,IAAI,CAAC;oBAChB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACrB,CAAC,EACD;oBACE,QAAQ,EAAE,GAAG,CAAC,QAAQ;oBACtB,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACzC,MAAM,EAAE,EAAE,CAAC,MAAM;oBACjB,MAAM,EAAE,IAAI,EAAE,MAAM;oBACpB,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE;wBACzB,UAAU,GAAG,IAAI,CAAC;oBACpB,CAAC;oBACD,6DAA6D;oBAC7D,gDAAgD;oBAChD,OAAO,EAAE,SAAS,CAAC,QAAQ;iBAC5B,CACF,CAAC;gBACF,oEAAoE;gBACpE,oEAAoE;gBACpE,qEAAqE;gBACrE,0CAA0C;gBAC1C,IAAI,QAAQ;oBAAE,MAAM,CAAC,MAAM,EAAE,CAAC;gBAE9B,IAAI,UAAU,EAAE,CAAC;oBACf,gEAAgE;oBAChE,gEAAgE;oBAChE,SAAS,CAAC,KAAK,EAAE,CAAC;oBAClB,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;wBACxB,SAAS,CAAC,QAAQ,CAAC;4BACjB,IAAI,EAAE,mBAAmB;4BACzB,IAAI,EAAE,UAAU,CAAC,QAAQ;yBAC1B,CAAC,CAAC;oBACL,CAAC;oBACD,MAAM,OAAO,GAAG,OAAO,CAAC,kBAAkB;wBACxC,CAAC,CAAC,MAAM,OAAO,CAAC,kBAAkB,CAAC;4BAC/B,MAAM,EAAE,UAAU,CAAC,QAAQ;4BAC3B,KAAK,EAAE,UAAU,CAAC,KAAK;yBACxB,CAAC;wBACJ,CAAC,CAAC,KAAK,CAAC;oBACV,IAAI,OAAO,EAAE,CAAC;wBACZ,eAAe,EAAE,EAAE,CAAC;wBACpB,+DAA+D;wBAC/D,iDAAiD;wBACjD,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE;4BACzC,QAAQ,EAAE,GAAG,CAAC,QAAQ;4BACtB,KAAK,EAAE,GAAG,CAAC,KAAK;4BAChB,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;4BACzC,MAAM,EAAE,EAAE,CAAC,MAAM;4BACjB,OAAO,EAAE,UAAU,CAAC,OAAO;4BAC3B,MAAM,EAAE,IAAI,EAAE,MAAM;4BACpB,OAAO,EAAE,SAAS,CAAC,QAAQ;4BAC3B,OAAO;4BACP,aAAa;4BACb,UAAU,EAAE,CAAC,IAAmB,EAAE,EAAE;gCAClC,gBAAgB,GAAG,IAAI,CAAC;gCACxB,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;4BAC7B,CAAC;yBACF,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,MAAM;4BACJ,sFAAsF,CAAC;wBACzF,SAAS,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;wBAChE,SAAS,CAAC,QAAQ,CAAC;4BACjB,IAAI,EAAE,UAAU;4BAChB,WAAW,EAAE,MAAM;4BACnB,KAAK,EAAE,CAAC;yBACT,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,MAAM,MAAM,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAC;oBAC7C,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;wBAC9C,SAAS,CAAC,QAAQ,CAAC;4BACjB,IAAI,EAAE,gBAAgB;4BACtB,OAAO,EAAE,MAAM,CAAC,YAAY;yBAC7B,CAAC,CAAC;oBACL,CAAC;oBACD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;oBACxB,SAAS,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;oBAChE,SAAS,CAAC,QAAQ,CAAC;wBACjB,IAAI,EAAE,UAAU;wBAChB,WAAW,EAAE,MAAM;wBACnB,KAAK,EAAE,CAAC;qBACT,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE;oBAC7B,QAAQ,EAAE,GAAG,CAAC,QAAQ;oBACtB,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACzC,MAAM,EAAE,EAAE,CAAC,MAAM;oBACjB,OAAO,EAAE,UAAU,CAAC,OAAO;oBAC3B,MAAM,EAAE,IAAI,EAAE,MAAM;oBACpB,OAAO,EAAE,SAAS,CAAC,QAAQ;oBAC3B,OAAO;oBACP,aAAa;oBACb,UAAU,EAAE,CAAC,IAAmB,EAAE,EAAE;wBAClC,gBAAgB,GAAG,IAAI,CAAC;wBACxB,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;oBAC7B,CAAC;iBACF,CAAC,CAAC;YACL,CAAC;YACD,wEAAwE;YACxE,sEAAsE;YACtE,kEAAkE;YAClE,uEAAuE;YACvE,IAAI,gBAAgB,EAAE,CAAC;gBACrB,WAAW,CAAC,OAAO,GAAG,gBAAgB,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACtB,SAAS,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;YAC/C,CAAC;iBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gBAC9B,SAAS,CAAC,QAAQ,CAAC;oBACjB,IAAI,EAAE,YAAY;oBAClB,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBAC1D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,SAAS,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAChC,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC;YAC3B,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAC;QAC/B,CAAC;IACH,CAAC,EACD,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,CAAC,CAC9E,CAAC;IAEF,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EACvF,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAC9E,CAAC;AACJ,CAAC"}
@@ -1,7 +0,0 @@
1
- import { type BackgroundJob } from "../../tools/jobs.js";
2
- /**
3
- * Polls the shared `jobManager` so the UI can surface background jobs
4
- * (long-running shell commands the agent detached). Polling — rather than
5
- * events — keeps `jobs.ts` decoupled from the frontend.
6
- */
7
- export declare function useJobs(active: boolean, intervalMs?: number): BackgroundJob[];
@@ -1,39 +0,0 @@
1
- import { useEffect, useState } from "react";
2
- import { jobManager } from "../../tools/jobs.js";
3
- /**
4
- * Polls the shared `jobManager` so the UI can surface background jobs
5
- * (long-running shell commands the agent detached). Polling — rather than
6
- * events — keeps `jobs.ts` decoupled from the frontend.
7
- */
8
- export function useJobs(active, intervalMs = 1500) {
9
- const [jobs, setJobs] = useState([]);
10
- useEffect(() => {
11
- if (!active)
12
- return;
13
- const tick = () => {
14
- // jobManager exposes running jobs directly; for the full list we read
15
- // the private map via listJobs parsing-free by snapshotting running +
16
- // recently-finished through getRunningJobs plus a best-effort scan.
17
- setJobs(snapshotJobs());
18
- };
19
- tick();
20
- const timer = setInterval(tick, intervalMs);
21
- return () => clearInterval(timer);
22
- }, [active, intervalMs]);
23
- return jobs;
24
- }
25
- /**
26
- * Build a stable snapshot of all known jobs. `JobManager` only exposes
27
- * `getRunningJobs()` publicly; finished jobs still matter for the panel, so
28
- * we read the internal registry defensively (it's the same in-process
29
- * singleton) and fall back to running-only if the shape ever changes.
30
- */
31
- function snapshotJobs() {
32
- const internal = jobManager
33
- .jobs;
34
- if (internal instanceof Map) {
35
- return [...internal.values()];
36
- }
37
- return jobManager.getRunningJobs();
38
- }
39
- //# sourceMappingURL=useJobs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useJobs.js","sourceRoot":"","sources":["../../../src/tui/hooks/useJobs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAsB,MAAM,qBAAqB,CAAC;AAErE;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,MAAe,EAAE,UAAU,GAAG,IAAI;IACxD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAkB,EAAE,CAAC,CAAC;IACtD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,IAAI,GAAG,GAAS,EAAE;YACtB,sEAAsE;YACtE,sEAAsE;YACtE,oEAAoE;YACpE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QAC1B,CAAC,CAAC;QACF,IAAI,EAAE,CAAC;QACP,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC5C,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IACzB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY;IACnB,MAAM,QAAQ,GAAI,UAA+D;SAC9E,IAAI,CAAC;IACR,IAAI,QAAQ,YAAY,GAAG,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,UAAU,CAAC,cAAc,EAAE,CAAC;AACrC,CAAC"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Returns the current spinner glyph, advancing on a timer while `active`.
3
- * No-op (and steady frame) when inactive so idle renders stay still.
4
- */
5
- export declare function useSpinner(active: boolean, intervalMs?: number): string;