@pentoshi/clai 2.0.62 → 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 +150 -83
  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
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Ephemeral right-edge toast queue (UI chrome, not transcript history).
3
+ *
4
+ * Toasts auto-dismiss after a short TTL (default 2s). The host component
5
+ * handles slide-in / slide-out; this controller only owns data + timers.
6
+ */
7
+ export const DEFAULT_TOAST_DURATION_MS = 2000;
8
+ const MAX_VISIBLE_TOASTS = 4;
9
+ export class ToastController {
10
+ items = [];
11
+ timers = new Map();
12
+ listeners = new Set();
13
+ seq = 0;
14
+ disposed = false;
15
+ getToasts() {
16
+ return this.items;
17
+ }
18
+ subscribe(listener) {
19
+ this.listeners.add(listener);
20
+ return () => this.listeners.delete(listener);
21
+ }
22
+ show(message, options = {}) {
23
+ if (this.disposed)
24
+ return "";
25
+ const text = message.replace(/\s+/g, " ").trim();
26
+ if (!text)
27
+ return "";
28
+ const id = `toast-${++this.seq}`;
29
+ const durationMs = typeof options.durationMs === "number" &&
30
+ Number.isFinite(options.durationMs) &&
31
+ options.durationMs > 0
32
+ ? Math.floor(options.durationMs)
33
+ : DEFAULT_TOAST_DURATION_MS;
34
+ const item = {
35
+ id,
36
+ message: text.length > 80 ? `${text.slice(0, 77)}…` : text,
37
+ level: options.level ?? "info",
38
+ createdAt: Date.now(),
39
+ durationMs,
40
+ };
41
+ this.items = [...this.items, item].slice(-MAX_VISIBLE_TOASTS);
42
+ // Drop timers for items that fell off the cap.
43
+ for (const [timerId, timer] of this.timers) {
44
+ if (!this.items.some((t) => t.id === timerId)) {
45
+ clearTimeout(timer);
46
+ this.timers.delete(timerId);
47
+ }
48
+ }
49
+ const timer = setTimeout(() => this.dismiss(id), durationMs);
50
+ timer.unref?.();
51
+ this.timers.set(id, timer);
52
+ this.emit();
53
+ return id;
54
+ }
55
+ dismiss(id) {
56
+ const timer = this.timers.get(id);
57
+ if (timer) {
58
+ clearTimeout(timer);
59
+ this.timers.delete(id);
60
+ }
61
+ const next = this.items.filter((t) => t.id !== id);
62
+ if (next.length === this.items.length)
63
+ return;
64
+ this.items = next;
65
+ this.emit();
66
+ }
67
+ clear() {
68
+ for (const timer of this.timers.values())
69
+ clearTimeout(timer);
70
+ this.timers.clear();
71
+ if (this.items.length === 0)
72
+ return;
73
+ this.items = [];
74
+ this.emit();
75
+ }
76
+ dispose() {
77
+ if (this.disposed)
78
+ return;
79
+ this.disposed = true;
80
+ this.clear();
81
+ this.listeners.clear();
82
+ }
83
+ emit() {
84
+ for (const listener of this.listeners)
85
+ listener();
86
+ }
87
+ }
88
+ //# sourceMappingURL=toast-controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toast-controller.js","sourceRoot":"","sources":["../../../src/tui-v2/controllers/toast-controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Renderer-independent responsive layout engine (V2-032).
3
+ *
4
+ * Computes the shell region rectangles from terminal dimensions and user
5
+ * preferences following the density rules in ARCHITECTURE.md. It performs no
6
+ * IO and reads no globals so layout can be snapshot-tested at any dimension
7
+ * without a live terminal.
8
+ */
9
+ export type LayoutDensity = "compact" | "single" | "wide";
10
+ export type PlanPlacement = "hidden" | "overlay" | "split";
11
+ export interface Rect {
12
+ readonly x: number;
13
+ readonly y: number;
14
+ readonly width: number;
15
+ readonly height: number;
16
+ }
17
+ export interface LayoutInput {
18
+ readonly columns: number;
19
+ readonly rows: number;
20
+ /** User toggle: whether the plan pane is requested at all. */
21
+ readonly planVisible?: boolean | undefined;
22
+ /** User/config toggle: whether split view is permitted on wide terminals. */
23
+ readonly splitEnabled?: boolean | undefined;
24
+ }
25
+ export interface LayoutModel {
26
+ readonly density: LayoutDensity;
27
+ readonly columns: number;
28
+ readonly rows: number;
29
+ /** Optional chrome (borders, hints, condensed status detail) survives. */
30
+ readonly showOptionalChrome: boolean;
31
+ readonly statusCondensed: boolean;
32
+ readonly chat: Rect;
33
+ readonly composer: Rect;
34
+ readonly status: Rect;
35
+ readonly plan: Rect & {
36
+ readonly placement: PlanPlacement;
37
+ };
38
+ /** Full-screen portal target for blocking overlays/pickers/modals. */
39
+ readonly overlay: Rect;
40
+ }
41
+ export declare const COMPACT_MAX_COLS = 79;
42
+ export declare const SINGLE_MAX_COLS = 119;
43
+ export declare const MIN_ROWS_FOR_STANDARD = 20;
44
+ export declare const PLAN_MIN_WIDTH = 34;
45
+ export declare const PLAN_MAX_WIDTH = 52;
46
+ export declare const CHAT_MIN_WIDTH_SPLIT = 72;
47
+ export declare const DIVIDER_WIDTH = 1;
48
+ export declare const MIN_CHAT_ROWS = 6;
49
+ export declare const STATUS_HEIGHT = 1;
50
+ /**
51
+ * Cap on editable composer text rows (not including border chrome).
52
+ * Grows with Shift+Enter / wrap up to this; classic could take most of the
53
+ * terminal — 16 keeps multi-line usable without eating the transcript.
54
+ */
55
+ export declare const COMPOSER_MAX_HEIGHT = 16;
56
+ export declare const COMPOSER_MIN_HEIGHT = 1;
57
+ /** Single editable line by default (classic Ink). Grows only if content needs it. */
58
+ export declare const COMPOSER_PREFERRED_HEIGHT = 1;
59
+ export declare function computeLayout(input: LayoutInput): LayoutModel;
@@ -0,0 +1,170 @@
1
+ /**
2
+ * Renderer-independent responsive layout engine (V2-032).
3
+ *
4
+ * Computes the shell region rectangles from terminal dimensions and user
5
+ * preferences following the density rules in ARCHITECTURE.md. It performs no
6
+ * IO and reads no globals so layout can be snapshot-tested at any dimension
7
+ * without a live terminal.
8
+ */
9
+ // Thresholds from ARCHITECTURE.md "Responsive layout".
10
+ export const COMPACT_MAX_COLS = 79;
11
+ export const SINGLE_MAX_COLS = 119;
12
+ export const MIN_ROWS_FOR_STANDARD = 20;
13
+ export const PLAN_MIN_WIDTH = 34;
14
+ export const PLAN_MAX_WIDTH = 52;
15
+ export const CHAT_MIN_WIDTH_SPLIT = 72;
16
+ export const DIVIDER_WIDTH = 1;
17
+ export const MIN_CHAT_ROWS = 6;
18
+ export const STATUS_HEIGHT = 1;
19
+ /**
20
+ * Cap on editable composer text rows (not including border chrome).
21
+ * Grows with Shift+Enter / wrap up to this; classic could take most of the
22
+ * terminal — 16 keeps multi-line usable without eating the transcript.
23
+ */
24
+ export const COMPOSER_MAX_HEIGHT = 16;
25
+ export const COMPOSER_MIN_HEIGHT = 1;
26
+ /** Single editable line by default (classic Ink). Grows only if content needs it. */
27
+ export const COMPOSER_PREFERRED_HEIGHT = 1;
28
+ function clamp(value, min, max) {
29
+ return Math.max(min, Math.min(max, value));
30
+ }
31
+ function classifyDensity(columns, rows) {
32
+ if (columns <= COMPACT_MAX_COLS || rows < MIN_ROWS_FOR_STANDARD) {
33
+ return "compact";
34
+ }
35
+ if (columns <= SINGLE_MAX_COLS)
36
+ return "single";
37
+ return "wide";
38
+ }
39
+ /**
40
+ * Vertical budget: status and composer are essential and get their rows before
41
+ * chat. On very short terminals optional chrome is dropped and the composer
42
+ * shrinks toward a single line so at least {@link MIN_CHAT_ROWS} chat rows
43
+ * survive where the terminal physically allows it.
44
+ */
45
+ function computeVertical(rows) {
46
+ const usableRows = Math.max(rows, 0);
47
+ // Pathological heights: never allocate more rows than the terminal has.
48
+ if (usableRows === 0) {
49
+ return {
50
+ statusHeight: 0,
51
+ composerHeight: 0,
52
+ chatHeight: 0,
53
+ chatY: 0,
54
+ showOptionalChrome: false,
55
+ };
56
+ }
57
+ if (usableRows === 1) {
58
+ return {
59
+ statusHeight: 0,
60
+ composerHeight: 1,
61
+ chatHeight: 0,
62
+ chatY: 0,
63
+ showOptionalChrome: false,
64
+ };
65
+ }
66
+ const statusHeight = usableRows >= STATUS_HEIGHT ? STATUS_HEIGHT : 0;
67
+ let composerHeight = COMPOSER_PREFERRED_HEIGHT;
68
+ const roomForPreferred = statusHeight + COMPOSER_PREFERRED_HEIGHT + MIN_CHAT_ROWS;
69
+ const showOptionalChrome = usableRows >= roomForPreferred;
70
+ if (!showOptionalChrome) {
71
+ // Shrink the composer (optional multi-line height is chrome) so chat keeps
72
+ // its floor; never drop the composer below a single editable line, and
73
+ // never exceed the remaining rows after status.
74
+ const remaining = Math.max(usableRows - statusHeight, 0);
75
+ const nonComposer = Math.min(MIN_CHAT_ROWS, Math.max(remaining - COMPOSER_MIN_HEIGHT, 0));
76
+ composerHeight = clamp(remaining - nonComposer, Math.min(COMPOSER_MIN_HEIGHT, remaining), Math.min(COMPOSER_PREFERRED_HEIGHT, remaining));
77
+ }
78
+ const chatHeight = Math.max(usableRows - statusHeight - composerHeight, 0);
79
+ return {
80
+ statusHeight,
81
+ composerHeight,
82
+ chatHeight,
83
+ chatY: statusHeight,
84
+ showOptionalChrome,
85
+ };
86
+ }
87
+ /**
88
+ * Resolve where the plan pane lives. Split only engages on wide terminals when
89
+ * the user asked for the plan, split is enabled, and both panes can keep their
90
+ * minimum widths; otherwise the plan falls back to a floating overlay.
91
+ */
92
+ function resolvePlan(columns, density, planVisible, splitEnabled) {
93
+ if (!planVisible) {
94
+ return { placement: "hidden", planWidth: 0, chatWidth: columns };
95
+ }
96
+ if (density !== "wide" || !splitEnabled) {
97
+ return { placement: "overlay", planWidth: 0, chatWidth: columns };
98
+ }
99
+ const desired = clamp(Math.floor(columns * 0.34), PLAN_MIN_WIDTH, PLAN_MAX_WIDTH);
100
+ const chatWidth = columns - desired - DIVIDER_WIDTH;
101
+ if (chatWidth >= CHAT_MIN_WIDTH_SPLIT) {
102
+ return { placement: "split", planWidth: desired, chatWidth };
103
+ }
104
+ // Try shrinking the plan to its floor before giving up on split.
105
+ const shrunkPlan = columns - DIVIDER_WIDTH - CHAT_MIN_WIDTH_SPLIT;
106
+ if (shrunkPlan >= PLAN_MIN_WIDTH) {
107
+ return {
108
+ placement: "split",
109
+ planWidth: shrunkPlan,
110
+ chatWidth: CHAT_MIN_WIDTH_SPLIT,
111
+ };
112
+ }
113
+ return { placement: "overlay", planWidth: 0, chatWidth: columns };
114
+ }
115
+ export function computeLayout(input) {
116
+ const columns = Math.max(input.columns, 0);
117
+ const rows = Math.max(input.rows, 0);
118
+ const density = classifyDensity(columns, rows);
119
+ const planVisible = input.planVisible ?? false;
120
+ const splitEnabled = input.splitEnabled ?? false;
121
+ const vertical = computeVertical(rows);
122
+ const plan = resolvePlan(columns, density, planVisible, splitEnabled);
123
+ const chat = {
124
+ x: 0,
125
+ y: vertical.chatY,
126
+ width: plan.chatWidth,
127
+ height: vertical.chatHeight,
128
+ };
129
+ const planRect = plan.placement === "split"
130
+ ? {
131
+ placement: "split",
132
+ x: plan.chatWidth + DIVIDER_WIDTH,
133
+ y: vertical.chatY,
134
+ width: plan.planWidth,
135
+ height: vertical.chatHeight,
136
+ }
137
+ : {
138
+ placement: plan.placement,
139
+ x: 0,
140
+ y: 0,
141
+ width: 0,
142
+ height: 0,
143
+ };
144
+ const composer = {
145
+ x: 0,
146
+ y: vertical.chatY + vertical.chatHeight,
147
+ width: columns,
148
+ height: vertical.composerHeight,
149
+ };
150
+ const status = {
151
+ x: 0,
152
+ y: 0,
153
+ width: columns,
154
+ height: vertical.statusHeight,
155
+ };
156
+ const overlay = { x: 0, y: 0, width: columns, height: rows };
157
+ return {
158
+ density,
159
+ columns,
160
+ rows,
161
+ showOptionalChrome: vertical.showOptionalChrome,
162
+ statusCondensed: density !== "wide",
163
+ chat,
164
+ composer,
165
+ status,
166
+ plan: planRect,
167
+ overlay,
168
+ };
169
+ }
170
+ //# sourceMappingURL=compute-layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compute-layout.js","sourceRoot":"","sources":["../../../src/tui-v2/layout/compute-layout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Convert chalk/SGR ANSI strings into OpenTUI `StyledText` so legacy-colored
3
+ * output (intro card, badges) can render with real fg/bg in OpenTUI.
4
+ */
5
+ import { RGBA, StyledText } from "@opentui/core";
6
+ export interface AnsiToStyledOptions {
7
+ /**
8
+ * Applied to text that has no explicit SGR foreground (so assistant
9
+ * bodies can default to green while chalk bold/cyan/code still wins).
10
+ */
11
+ readonly defaultFg?: string | RGBA | undefined;
12
+ }
13
+ /**
14
+ * Parse a string that may contain CSI SGR sequences into StyledText.
15
+ * Unsupported sequences are ignored; plain text is preserved.
16
+ */
17
+ export declare function ansiToStyledText(input: string, options?: AnsiToStyledOptions): StyledText;
@@ -0,0 +1,217 @@
1
+ /**
2
+ * Convert chalk/SGR ANSI strings into OpenTUI `StyledText` so legacy-colored
3
+ * output (intro card, badges) can render with real fg/bg in OpenTUI.
4
+ */
5
+ import { RGBA, StyledText, TextAttributes } from "@opentui/core";
6
+ const BOLD = TextAttributes.BOLD;
7
+ const DIM = TextAttributes.DIM;
8
+ /** Basic 16-color ANSI → RGB (approximate xterm defaults). */
9
+ const BASIC_FG = {
10
+ 30: [0, 0, 0],
11
+ 31: [205, 49, 49],
12
+ 32: [13, 188, 121],
13
+ 33: [229, 229, 16],
14
+ 34: [36, 114, 200],
15
+ 35: [188, 63, 188],
16
+ 36: [17, 168, 205],
17
+ 37: [229, 229, 229],
18
+ 90: [102, 102, 102],
19
+ 91: [241, 76, 76],
20
+ 92: [35, 209, 139],
21
+ 93: [245, 245, 67],
22
+ 94: [59, 142, 234],
23
+ 95: [214, 112, 214],
24
+ 96: [41, 184, 219],
25
+ 97: [255, 255, 255],
26
+ };
27
+ const BASIC_BG = {
28
+ 40: [0, 0, 0],
29
+ 41: [205, 49, 49],
30
+ 42: [13, 188, 121],
31
+ 43: [229, 229, 16],
32
+ 44: [36, 114, 200],
33
+ 45: [188, 63, 188],
34
+ 46: [17, 168, 205],
35
+ 47: [229, 229, 229],
36
+ 100: [102, 102, 102],
37
+ 101: [241, 76, 76],
38
+ 102: [35, 209, 139],
39
+ 103: [245, 245, 67],
40
+ 104: [59, 142, 234],
41
+ 105: [214, 112, 214],
42
+ 106: [41, 184, 219],
43
+ 107: [255, 255, 255],
44
+ };
45
+ function rgb(r, g, b) {
46
+ return RGBA.fromInts(r, g, b, 255);
47
+ }
48
+ function resolveColor(input) {
49
+ if (input === undefined)
50
+ return undefined;
51
+ if (typeof input === "string") {
52
+ try {
53
+ return RGBA.fromHex(input);
54
+ }
55
+ catch {
56
+ return undefined;
57
+ }
58
+ }
59
+ return input;
60
+ }
61
+ /**
62
+ * Parse a string that may contain CSI SGR sequences into StyledText.
63
+ * Unsupported sequences are ignored; plain text is preserved.
64
+ */
65
+ export function ansiToStyledText(input, options = {}) {
66
+ if (!input) {
67
+ return new StyledText([{ __isChunk: true, text: " " }]);
68
+ }
69
+ const defaultFg = resolveColor(options.defaultFg);
70
+ const chunks = [];
71
+ let fg;
72
+ let bg;
73
+ let attributes = 0;
74
+ let buf = "";
75
+ const flush = () => {
76
+ if (buf.length === 0)
77
+ return;
78
+ const chunk = { __isChunk: true, text: buf };
79
+ const useFg = fg ?? defaultFg;
80
+ if (useFg)
81
+ chunk.fg = useFg;
82
+ if (bg)
83
+ chunk.bg = bg;
84
+ if (attributes)
85
+ chunk.attributes = attributes;
86
+ chunks.push(chunk);
87
+ buf = "";
88
+ };
89
+ let i = 0;
90
+ while (i < input.length) {
91
+ if (input.charCodeAt(i) === 0x1b && input[i + 1] === "[") {
92
+ const end = input.indexOf("m", i + 2);
93
+ if (end === -1) {
94
+ buf += input[i];
95
+ i++;
96
+ continue;
97
+ }
98
+ flush();
99
+ const body = input.slice(i + 2, end);
100
+ i = end + 1;
101
+ const parts = body.length === 0 ? [0] : body.split(";").map((p) => Number(p));
102
+ applySgr(parts, {
103
+ setFg: (c) => {
104
+ fg = c;
105
+ },
106
+ setBg: (c) => {
107
+ bg = c;
108
+ },
109
+ clearFg: () => {
110
+ fg = undefined;
111
+ },
112
+ clearBg: () => {
113
+ bg = undefined;
114
+ },
115
+ setBold: (on) => {
116
+ attributes = on ? attributes | BOLD : attributes & ~BOLD;
117
+ },
118
+ setDim: (on) => {
119
+ attributes = on ? attributes | DIM : attributes & ~DIM;
120
+ },
121
+ reset: () => {
122
+ fg = undefined;
123
+ bg = undefined;
124
+ attributes = 0;
125
+ },
126
+ });
127
+ continue;
128
+ }
129
+ buf += input[i];
130
+ i++;
131
+ }
132
+ flush();
133
+ if (chunks.length === 0) {
134
+ return new StyledText([{ __isChunk: true, text: " " }]);
135
+ }
136
+ return new StyledText(chunks);
137
+ }
138
+ function applySgr(parts, sink) {
139
+ let i = 0;
140
+ while (i < parts.length) {
141
+ const code = parts[i] ?? 0;
142
+ if (code === 0) {
143
+ sink.reset();
144
+ i++;
145
+ continue;
146
+ }
147
+ if (code === 1) {
148
+ sink.setBold(true);
149
+ i++;
150
+ continue;
151
+ }
152
+ if (code === 2) {
153
+ sink.setDim(true);
154
+ i++;
155
+ continue;
156
+ }
157
+ if (code === 22) {
158
+ sink.setBold(false);
159
+ sink.setDim(false);
160
+ i++;
161
+ continue;
162
+ }
163
+ if (code === 39) {
164
+ sink.clearFg();
165
+ i++;
166
+ continue;
167
+ }
168
+ if (code === 49) {
169
+ sink.clearBg();
170
+ i++;
171
+ continue;
172
+ }
173
+ // 38;2;r;g;b or 38;5;n
174
+ if (code === 38 || code === 48) {
175
+ const isFg = code === 38;
176
+ const mode = parts[i + 1];
177
+ if (mode === 2 && i + 4 < parts.length) {
178
+ const r = parts[i + 2] ?? 0;
179
+ const g = parts[i + 3] ?? 0;
180
+ const b = parts[i + 4] ?? 0;
181
+ const color = rgb(r, g, b);
182
+ if (isFg)
183
+ sink.setFg(color);
184
+ else
185
+ sink.setBg(color);
186
+ i += 5;
187
+ continue;
188
+ }
189
+ if (mode === 5 && i + 2 < parts.length) {
190
+ const idx = parts[i + 2] ?? 0;
191
+ const color = RGBA.fromIndex(idx);
192
+ if (isFg)
193
+ sink.setFg(color);
194
+ else
195
+ sink.setBg(color);
196
+ i += 3;
197
+ continue;
198
+ }
199
+ i++;
200
+ continue;
201
+ }
202
+ if (BASIC_FG[code]) {
203
+ const [r, g, b] = BASIC_FG[code];
204
+ sink.setFg(rgb(r, g, b));
205
+ i++;
206
+ continue;
207
+ }
208
+ if (BASIC_BG[code]) {
209
+ const [r, g, b] = BASIC_BG[code];
210
+ sink.setBg(rgb(r, g, b));
211
+ i++;
212
+ continue;
213
+ }
214
+ i++;
215
+ }
216
+ }
217
+ //# sourceMappingURL=ansi-to-styled.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ansi-to-styled.js","sourceRoot":"","sources":["../../../src/tui-v2/rendering/ansi-to-styled.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Parse and present tool.batch output as nested sub-tool sections
3
+ * (classic TUI parity).
4
+ *
5
+ * Batch runners emit labeled sections:
6
+ * ── #1 dns.lookup [ok exit=0]
7
+ * …
8
+ * ── #2 web.fetch [fail exit=1]
9
+ * …
10
+ */
11
+ export interface BatchSection {
12
+ readonly index: number;
13
+ readonly name: string;
14
+ readonly ok: boolean;
15
+ readonly exitCode: number | undefined;
16
+ readonly body: string;
17
+ }
18
+ /**
19
+ * Split a completed tool.batch output into per-sub-tool sections.
20
+ * Returns [] when the body is not in the labeled batch format.
21
+ */
22
+ export declare function parseBatchSections(output: string): BatchSection[];
23
+ export interface BatchSectionPresentation {
24
+ readonly glyph: string;
25
+ readonly statusLabel: string;
26
+ readonly name: string;
27
+ readonly lines: readonly string[];
28
+ readonly hiddenAboveCount: number;
29
+ readonly hasBody: boolean;
30
+ }
31
+ /** Present one nested sub-tool for the card (collapsed head/tail or full). */
32
+ export declare function presentBatchSection(section: BatchSection, expanded: boolean): BatchSectionPresentation;
33
+ /** Human summary line under the parent batch header. */
34
+ export declare function batchSummaryLine(sections: readonly BatchSection[]): string;
35
+ /** True when this tool item should use nested batch UI. */
36
+ export declare function isBatchToolName(name: string): boolean;
37
+ /**
38
+ * Rebuild a single section as a labeled block for the pager (matches
39
+ * runner formatting so the full-batch view stays familiar).
40
+ */
41
+ export declare function formatBatchSectionForPager(section: BatchSection): string;
42
+ /** Full batch body for the parent pager — prefer original spool order. */
43
+ export declare function formatBatchForPager(sections: readonly BatchSection[], raw: string): string;
44
+ /** Preview helper used by tests — clean lines without expand sampling. */
45
+ export declare function cleanBatchBodyLines(body: string): string[];