@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
@@ -1,611 +0,0 @@
1
- import chalk from "chalk";
2
- import { renderMarkdown, wrapAnsiLine } from "../ui/markdown.js";
3
- import { renderPlanChecklist } from "../ui/plan-pane.js";
4
- import { safeCwd } from "../os/cwd.js";
5
- import { renderWordmark, wordmarkWidth } from "../ui/wordmark.js";
6
- import { truncateMiddle } from "./text-format.js";
7
- /**
8
- * Split a completed tool.batch output into per-sub-tool sections.
9
- * Each section is delimited by a header line like:
10
- * ── #1 dns.lookup [ok exit=0]
11
- * ── #2 web.fetch [fail exit=1]
12
- */
13
- function parseBatchSections(output) {
14
- const headerRe = /^──\s+#(\d+)\s+([\w.]+)\s+\[(ok|fail)(?:\s+exit=(\d+))?\]/;
15
- const sections = [];
16
- let current = null;
17
- const bodyLines = [];
18
- for (const line of output.replace(/\r/g, "").split("\n")) {
19
- const m = headerRe.exec(line);
20
- if (m) {
21
- if (current !== null) {
22
- current.body = bodyLines.join("\n").trim();
23
- sections.push(current);
24
- bodyLines.length = 0;
25
- }
26
- const exitCode = m[4] !== undefined ? parseInt(m[4], 10) : undefined;
27
- current = {
28
- index: parseInt(m[1], 10),
29
- name: m[2],
30
- ok: m[3] === "ok",
31
- ...(exitCode !== undefined ? { exitCode } : {}),
32
- body: "",
33
- };
34
- }
35
- else if (current !== null) {
36
- bodyLines.push(line);
37
- }
38
- }
39
- if (current !== null) {
40
- current.body = bodyLines.join("\n").trim();
41
- sections.push(current);
42
- }
43
- return sections;
44
- }
45
- /**
46
- * Render a single batch sub-tool section as indented lines with its own
47
- * status glyph, name, and collapsed/expanded body — nested inside the
48
- * parent batch card.
49
- */
50
- function renderBatchSection(section, bar, ctx) {
51
- const subColor = section.ok ? chalk.green : chalk.red;
52
- const glyph = section.ok ? chalk.green("✓") : chalk.red("✗");
53
- const exitSuffix = typeof section.exitCode === "number" && section.exitCode !== 0
54
- ? chalk.red(` (exit ${section.exitCode})`)
55
- : "";
56
- const subHeader = bar("") +
57
- chalk.dim(" ") +
58
- subColor("┌ ") +
59
- glyph +
60
- " " +
61
- chalk.bold(section.name) +
62
- exitSuffix;
63
- const subBar = bar("") + chalk.dim(" ") + subColor("│ ");
64
- const subBottom = bar("") + chalk.dim(" ") + subColor("└");
65
- const lines = [subHeader];
66
- if (section.body) {
67
- const rawLines = section.body.replace(/\r/g, "").split("\n");
68
- const wrappedLines = [];
69
- for (const raw of rawLines) {
70
- wrappedLines.push(...wrapAnsiLine(raw, Math.max(10, ctx.width - 8)));
71
- }
72
- const HEAD = 3;
73
- const TAIL = 3;
74
- let shown;
75
- let hiddenCount = 0;
76
- if (ctx.outputExpanded) {
77
- shown = wrappedLines;
78
- }
79
- else if (wrappedLines.length <= HEAD + TAIL) {
80
- shown = wrappedLines;
81
- }
82
- else {
83
- const head = wrappedLines.slice(0, HEAD);
84
- const tail = wrappedLines.slice(-TAIL);
85
- hiddenCount = wrappedLines.length - HEAD - TAIL;
86
- shown = [...head, chalk.dim(` ··· ${hiddenCount} more lines ···`), ...tail];
87
- }
88
- for (const wl of shown) {
89
- lines.push(subBar + chalk.white(wl));
90
- }
91
- if (hiddenCount > 0) {
92
- lines.push(subBottom +
93
- chalk.dim.white(`+${hiddenCount + HEAD + TAIL} total line(s) · `) +
94
- chalk.bold.white("ctrl+o") +
95
- chalk.white(" to expand"));
96
- }
97
- else {
98
- lines.push(subBottom);
99
- }
100
- }
101
- else {
102
- lines.push(subBottom);
103
- }
104
- return lines;
105
- }
106
- const COLLAPSED_OUTPUT_LINES = 3;
107
- function wrap(text, width) {
108
- const out = [];
109
- for (const line of text.replace(/\r/g, "").split("\n")) {
110
- out.push(...wrapAnsiLine(line, Math.max(10, width)));
111
- }
112
- return out;
113
- }
114
- function statusGlyph(status) {
115
- switch (status) {
116
- case "running":
117
- return chalk.yellow("●");
118
- case "ok":
119
- return chalk.green("✓");
120
- case "fail":
121
- return chalk.red("✗");
122
- case "blocked":
123
- return chalk.red("⊘");
124
- }
125
- }
126
- function gutterColor(status) {
127
- switch (status) {
128
- case "running":
129
- return chalk.yellow;
130
- case "ok":
131
- return chalk.green;
132
- case "fail":
133
- case "blocked":
134
- return chalk.red;
135
- }
136
- }
137
- function stripStreamingToolFence(text) {
138
- const indicators = [
139
- "```tool",
140
- "```json",
141
- "<tool",
142
- "<|tool",
143
- "<|",
144
- ];
145
- let minIdx = -1;
146
- for (const ind of indicators) {
147
- const idx = text.indexOf(ind);
148
- if (idx >= 0 && (minIdx === -1 || idx < minIdx)) {
149
- minIdx = idx;
150
- }
151
- }
152
- // Code blocks: ``` followed by tool, json, newline, or end of string
153
- const matchCode = /```(?:tool|json|\n|$)/i.exec(text);
154
- if (matchCode) {
155
- const idx = matchCode.index;
156
- if (minIdx === -1 || idx < minIdx) {
157
- minIdx = idx;
158
- }
159
- }
160
- // Raw JSON block start '{' if preceded by whitespace/newline or start of string
161
- const jsonMatch = /(?:^|\s)\{/.exec(text);
162
- if (jsonMatch) {
163
- const idx = jsonMatch.index + jsonMatch[0].indexOf("{");
164
- if (minIdx === -1 || idx < minIdx) {
165
- minIdx = idx;
166
- }
167
- }
168
- if (minIdx >= 0) {
169
- return text.slice(0, minIdx);
170
- }
171
- return text;
172
- }
173
- function renderUser(text, width) {
174
- const tag = chalk.bgHex("#22D3EE").hex("#020617").bold(" you ");
175
- const md = renderMarkdown(text, width - 8).replace(/\n+$/, "");
176
- const lines = md.split("\n").map((line) => line.startsWith(" ") ? line.slice(2) : line);
177
- const out = [];
178
- for (const line of lines) {
179
- out.push(...wrap(line, width - 8));
180
- }
181
- return out.map((l, i) => {
182
- const whiteLine = "\x1b[38;2;255;255;255m" + l.replace(/\x1b\[39m/g, "\x1b[38;2;255;255;255m") + "\x1b[39m";
183
- return i === 0 ? `${tag} ${whiteLine}` : ` ${whiteLine}`;
184
- });
185
- }
186
- function renderAssistant(text, width) {
187
- const label = chalk.magenta.bold("◆ Response");
188
- const md = renderMarkdown(text, width - 2).replace(/\n+$/, "");
189
- return [label, "", ...md.split("\n").map((line) => ` ${line}`)];
190
- }
191
- function renderThinking(content, ctx) {
192
- if (!ctx.thinkingExpanded) {
193
- return [chalk.dim.italic("✦ thinking") + chalk.dim(" · ctrl+t or /think to view")];
194
- }
195
- const head = chalk.dim.italic("✦ thinking");
196
- const body = wrap(content.trim(), ctx.width - 4).map((l) => chalk.dim(" " + l));
197
- return [head, ...body];
198
- }
199
- function renderTool(item, ctx) {
200
- const color = gutterColor(item.status);
201
- const bar = color("│ ");
202
- const top = color("╭ ");
203
- const bottom = color("╰ ");
204
- const header = top +
205
- statusGlyph(item.status) +
206
- " " +
207
- chalk.bold.cyan(item.name) +
208
- (typeof item.exitCode === "number" && item.exitCode !== 0
209
- ? chalk.red(` (exit ${item.exitCode})`)
210
- : "");
211
- const lines = wrap(header, ctx.width).map((l, i) => i === 0 ? l : color("│ ") + l);
212
- if (item.argsDisplay) {
213
- const label = item.name === "shell.exec" ? "command" : "input";
214
- const prefix = chalk.dim(`${label}: `);
215
- const prefixLen = `${label}: `.length;
216
- const wrappedArgs = wrap(item.argsDisplay, ctx.width - 4 - prefixLen);
217
- wrappedArgs.forEach((l, idx) => {
218
- if (idx === 0) {
219
- lines.push(bar + prefix + chalk.white(l));
220
- }
221
- else {
222
- lines.push(bar + " ".repeat(prefixLen) + chalk.white(l));
223
- }
224
- });
225
- }
226
- if (item.status === "blocked" && item.summary) {
227
- for (const l of wrap(chalk.red(item.summary), ctx.width - 4)) {
228
- lines.push(bar + l);
229
- }
230
- }
231
- // ── tool.batch: render each sub-tool as its own inline card ─────────────
232
- if (item.name === "tool.batch" && item.status !== "running" && item.output) {
233
- const sections = parseBatchSections(item.output);
234
- if (sections.length > 0) {
235
- const allOk = sections.every((s) => s.ok);
236
- const summary = allOk
237
- ? chalk.dim(`${sections.length} sub-tool(s) — all ok`)
238
- : chalk.red(`${sections.filter((s) => !s.ok).length}/${sections.length} sub-tool(s) failed`);
239
- lines.push(bar + summary);
240
- for (const section of sections) {
241
- const subLines = renderBatchSection(section, () => bar, ctx);
242
- lines.push(...subLines);
243
- }
244
- if (item.artifactPath) {
245
- lines.push(bar + chalk.dim("saved: ") + chalk.cyan(item.artifactPath));
246
- }
247
- lines.push(color("╰"));
248
- return lines;
249
- }
250
- // Fallthrough: if we couldn't parse sections, render normally below.
251
- }
252
- const wrappedLines = [];
253
- if (item.output) {
254
- const rawLines = item.output.replace(/\r/g, "").replace(/\n+$/, "").split("\n");
255
- for (const raw of rawLines) {
256
- wrappedLines.push(...wrapAnsiLine(raw, Math.max(10, ctx.width - 4)));
257
- }
258
- }
259
- const COLLAPSED_HEAD = 3;
260
- const COLLAPSED_TAIL = 3;
261
- let shown = wrappedLines;
262
- let hiddenCount = 0;
263
- if (ctx.outputExpanded && item.status !== "running") {
264
- // Fully expanded — show everything
265
- shown = wrappedLines;
266
- }
267
- else if (item.status === "running") {
268
- // While running: show first 3 + gap + last 3 (tail updates live)
269
- if (wrappedLines.length <= COLLAPSED_HEAD + COLLAPSED_TAIL) {
270
- shown = wrappedLines;
271
- }
272
- else {
273
- const head = wrappedLines.slice(0, COLLAPSED_HEAD);
274
- const tail = wrappedLines.slice(-COLLAPSED_TAIL);
275
- hiddenCount = wrappedLines.length - COLLAPSED_HEAD - COLLAPSED_TAIL;
276
- shown = [...head, chalk.dim(` ··· ${hiddenCount} more lines ···`), ...tail];
277
- }
278
- }
279
- else {
280
- // Collapsed finished tool
281
- if (wrappedLines.length <= COLLAPSED_HEAD + COLLAPSED_TAIL) {
282
- shown = wrappedLines;
283
- }
284
- else {
285
- const head = wrappedLines.slice(0, COLLAPSED_HEAD);
286
- const tail = wrappedLines.slice(-COLLAPSED_TAIL);
287
- hiddenCount = wrappedLines.length - COLLAPSED_HEAD - COLLAPSED_TAIL;
288
- shown = [...head, chalk.dim(` ··· ${hiddenCount} more lines ···`), ...tail];
289
- }
290
- }
291
- if (shown.length > 0)
292
- lines.push(bar + chalk.dim("output:"));
293
- for (const wl of shown) {
294
- const outputLine = ctx.outputExpanded && item.status !== "running"
295
- ? chalk.bgHex("#1E293B").hex("#E5E7EB")(` ${wl} `)
296
- : " " + chalk.white(wl);
297
- lines.push(bar + outputLine);
298
- }
299
- if (item.artifactPath) {
300
- lines.push(bar + chalk.dim("saved: ") + chalk.cyan(item.artifactPath));
301
- }
302
- if (hiddenCount > 0 && item.status !== "running") {
303
- lines.push(bottom +
304
- chalk.dim.white(`+${hiddenCount} more line(s) · `) +
305
- chalk.bold.white("ctrl+o") +
306
- chalk.white(" to expand in place"));
307
- }
308
- else if (ctx.outputExpanded && item.output && item.status !== "running") {
309
- lines.push(bottom +
310
- chalk.dim.white("expanded · ") +
311
- chalk.bold.white("ctrl+o/esc") +
312
- chalk.white(" to collapse"));
313
- }
314
- else if (item.output || item.status !== "running") {
315
- lines.push(color("╰"));
316
- }
317
- return lines;
318
- }
319
- function renderNotice(level, text, width) {
320
- const label = level === "warn"
321
- ? chalk.bgHex("#D97706").hex("#FFFFFF").bold(" WARN ")
322
- : chalk.bgHex("#334155").hex("#FFFFFF").bold(" INFO ");
323
- const color = level === "warn" ? chalk.hex("#FEF3C7") : chalk.hex("#F8FAFC");
324
- const rendered = [];
325
- for (const raw of text.replace(/\r/g, "").split("\n")) {
326
- const line = raw.trimEnd();
327
- const available = width - 8;
328
- const wrapped = wrap(line, available);
329
- for (const part of wrapped.length ? wrapped : [""]) {
330
- rendered.push(rendered.length === 0 ? `${label} ${color(part)}` : ` ${color(part)}`);
331
- }
332
- }
333
- return rendered;
334
- }
335
- function renderCompacted(item, ctx) {
336
- const color = chalk.hex("#64748B"); // Slate/dim border
337
- const bar = color("│ ");
338
- const top = color("╭ ") + chalk.bold.yellow("✦ Compacted Context");
339
- const bottom = color("╰ ");
340
- let summaryText = item.summary || "";
341
- if (summaryText.startsWith("Session memory from compacted earlier turns:\n\n")) {
342
- summaryText = summaryText.slice("Session memory from compacted earlier turns:\n\n".length);
343
- }
344
- else if (summaryText.startsWith("Session memory from compacted earlier turns:")) {
345
- summaryText = summaryText.slice("Session memory from compacted earlier turns:".length);
346
- }
347
- // The model writes this summary as markdown (###, **bold**, * bullets).
348
- // Render it the same way assistant responses are rendered instead of
349
- // dumping the raw markup, then wrap the resulting ANSI-styled lines.
350
- const availableWidth = Math.max(10, ctx.width - 4);
351
- const rendered = renderMarkdown(summaryText, availableWidth).replace(/\n+$/, "");
352
- const rawLines = rendered.replace(/\r/g, "").split("\n");
353
- const wrappedLines = [];
354
- for (const raw of rawLines) {
355
- wrappedLines.push(...wrapAnsiLine(raw, availableWidth));
356
- }
357
- const HEAD = 3;
358
- const TAIL = 3;
359
- let shown = wrappedLines;
360
- let hiddenCount = 0;
361
- if (!ctx.outputExpanded) {
362
- if (wrappedLines.length > HEAD + TAIL) {
363
- const head = wrappedLines.slice(0, HEAD);
364
- const tail = wrappedLines.slice(-TAIL);
365
- hiddenCount = wrappedLines.length - HEAD - TAIL;
366
- shown = [...head, chalk.dim(` ··· ${hiddenCount} more lines ···`), ...tail];
367
- }
368
- }
369
- const lines = [top];
370
- for (const wl of shown) {
371
- lines.push(bar + wl);
372
- }
373
- if (hiddenCount > 0) {
374
- lines.push(bottom +
375
- chalk.dim.white(`+${hiddenCount} more line(s) · `) +
376
- chalk.bold.white("ctrl+o") +
377
- chalk.white(" to expand in place"));
378
- }
379
- else if (ctx.outputExpanded) {
380
- lines.push(bottom +
381
- chalk.dim.white("expanded · ") +
382
- chalk.bold.white("ctrl+o/esc") +
383
- chalk.white(" to collapse"));
384
- }
385
- else {
386
- lines.push(bottom);
387
- }
388
- return lines;
389
- }
390
- export function renderItemLines(item, ctx) {
391
- switch (item.kind) {
392
- case "user":
393
- return renderUser(item.text, ctx.width);
394
- case "assistant":
395
- return renderAssistant(item.text, ctx.width);
396
- case "thinking":
397
- return renderThinking(item.content, ctx);
398
- case "tool":
399
- return renderTool(item, ctx);
400
- case "notice":
401
- return renderNotice(item.level, item.text, ctx.width);
402
- case "plan":
403
- return renderPlanChecklist(item.plan).split("\n");
404
- case "compacted":
405
- return renderCompacted(item, ctx);
406
- }
407
- }
408
- /**
409
- * Per-item render cache. Rendering a transcript item (markdown parse + ANSI
410
- * styling + wrapping) is the dominant cost when streaming, because the whole
411
- * transcript is re-flattened on every render. Committed items never change,
412
- * so we cache their rendered lines keyed by the item's object identity (the
413
- * reducer keeps the same reference for unchanged items) plus a signature of
414
- * the render context that actually affects output. Only finished, non-running
415
- * items are cached — streaming/running items are cheap to recompute and change
416
- * every tick anyway.
417
- */
418
- const itemLineCache = new WeakMap();
419
- function ctxSignature(ctx) {
420
- return `${ctx.width}|${ctx.thinkingExpanded ? 1 : 0}|${ctx.outputExpanded ? 1 : 0}`;
421
- }
422
- function renderItemLinesCached(item, ctx) {
423
- const isRunningTool = item.kind === "tool" && item.status === "running";
424
- if (!item.done || isRunningTool) {
425
- return renderItemLines(item, ctx);
426
- }
427
- const sig = ctxSignature(ctx);
428
- const cached = itemLineCache.get(item);
429
- if (cached && cached.sig === sig)
430
- return cached.lines;
431
- const lines = renderItemLines(item, ctx);
432
- itemLineCache.set(item, { sig, lines });
433
- return lines;
434
- }
435
- /** Compact one-box header shown once a conversation is under way. */
436
- function stripAnsiLen(s) {
437
- return s.replace(/\x1b\[[0-9;]*m/g, "").length;
438
- }
439
- /** Pad a (possibly ANSI-colored) cell string to a visible width. */
440
- function padCell(content, width) {
441
- const len = stripAnsiLen(content);
442
- if (len >= width)
443
- return content;
444
- return content + " ".repeat(width - len);
445
- }
446
- /** Center a (possibly ANSI-colored) cell string within a visible width. */
447
- function centerCell(content, width) {
448
- const len = stripAnsiLen(content);
449
- if (len >= width)
450
- return content;
451
- const total = width - len;
452
- const left = Math.floor(total / 2);
453
- return " ".repeat(left) + content + " ".repeat(total - left);
454
- }
455
- /**
456
- * Full startup intro card: one big two-partition box — a gradient "CLAI"
457
- * wordmark on the left, and a session-info panel (workdir/model/provider/
458
- * mode/version + quick-start hints) on the right — with the tagline and
459
- * welcome line centered below it. This is the persistent transcript header:
460
- * it always renders as the first block and scrolls up naturally with the
461
- * conversation, so the branding stays consistent for the whole session.
462
- *
463
- * The wordmark's own width is fixed (it's dot-matrix ASCII art), but the
464
- * right partition — and therefore the whole card — stretches or shrinks
465
- * with the terminal width, so the card scales without ever breaking its
466
- * box-drawing alignment.
467
- */
468
- function renderIntroHeader(ctx) {
469
- const version = ctx.version ?? "0.0.0";
470
- const mode = ctx.mode ?? "agent";
471
- const provider = ctx.provider ?? "openai";
472
- const model = ctx.model ?? "gpt-4";
473
- const permissions = ctx.permissions ?? "default";
474
- const cwd = safeCwd();
475
- // Overall available width for the card (2-space left/right margin).
476
- const totalWidth = Math.max(56, ctx.width - 4);
477
- // Left partition: the wordmark (fixed-width ASCII art). We give the left
478
- // column a bit more room than the wordmark itself so the logo has some
479
- // breathing space and isn't sandwiched against the box borders, and we
480
- // aim for the two partitions to be roughly equal width.
481
- //
482
- // Fixed overhead per row: "│ " + leftCell + " │ " + rightCell + " │"
483
- // = 2 borders + 1 separator + 4 padding spaces = 7 columns.
484
- const OVERHEAD = 7;
485
- const wmLines = renderWordmark("CLAI", "").split("\n");
486
- const wmWidth = wordmarkWidth("CLAI");
487
- const available = Math.max(48, totalWidth - OVERHEAD); // combined cell width
488
- // Logo column takes ~40% of the available width, the info panel the rest.
489
- // Never shrink below the wordmark's own width (+6 for breathing room).
490
- const leftWidth = Math.max(wmWidth + 6, Math.floor(available * 0.4));
491
- const rightWidth = Math.max(24, available - leftWidth);
492
- // High-contrast label chip (solid background + bright bold text), matching
493
- // the visual language used by the compact header's badges. The longest
494
- // label ("provider") is padded so every chip has the same visible width.
495
- const CHIP_LABEL = 8;
496
- const chip = (label) => chalk.bgHex("#334155").whiteBright.bold(` ${label.padEnd(CHIP_LABEL)} `);
497
- const CHIP_WIDTH = CHIP_LABEL + 2; // padding inside the chip
498
- const infoRow = (label, value, colorFn) => {
499
- const available = Math.max(4, rightWidth - CHIP_WIDTH - 1);
500
- const shownValue = value.length > available ? truncateMiddle(value, available) : value;
501
- return chip(label) + " " + colorFn(shownValue);
502
- };
503
- const modeBanner = chalk.bgHex("#B45309").whiteBright.bold(` ${mode.toUpperCase()} MODE `);
504
- // Permission badge: green bg for allow-all, slate bg for default
505
- const permBgColor = permissions === "allow-all" ? "#15803d" : "#334155";
506
- const permissionsBanner = chalk.bgHex(permBgColor).whiteBright.bold(` ${permissions.toUpperCase()} `);
507
- const permLabel = chalk.bgHex("#334155").whiteBright.bold(` PERMISSION `);
508
- const rightRows = [
509
- "", // top padding
510
- infoRow("workdir", cwd, chalk.white),
511
- infoRow("model", model, chalk.cyan),
512
- infoRow("provider", provider, chalk.green),
513
- infoRow("version", version, chalk.white),
514
- "",
515
- modeBanner,
516
- "",
517
- `${permLabel} ${permissionsBanner}`,
518
- "", // bottom padding
519
- ];
520
- const rowCount = Math.max(wmLines.length, rightRows.length);
521
- const top = " " +
522
- chalk.gray(`╭${"─".repeat(leftWidth + 2)}┬${"─".repeat(rightWidth + 2)}╮`);
523
- const bottom = " " +
524
- chalk.gray(`╰${"─".repeat(leftWidth + 2)}┴${"─".repeat(rightWidth + 2)}╯`);
525
- const middle = [];
526
- // Vertically center the wordmark: pad the wmLines array with blank rows
527
- // on top and bottom so the logo always sits in the vertical middle of the
528
- // box, regardless of how many info rows the right panel has.
529
- const wmPadTop = Math.floor((rowCount - wmLines.length) / 2);
530
- const wmPadBot = rowCount - wmLines.length - wmPadTop;
531
- const paddedWm = [
532
- ...Array(wmPadTop).fill(""),
533
- ...wmLines,
534
- ...Array(wmPadBot).fill(""),
535
- ];
536
- for (let i = 0; i < rowCount; i++) {
537
- const leftCell = centerCell(paddedWm[i] ?? "", leftWidth);
538
- const rightCell = padCell(rightRows[i] ?? "", rightWidth);
539
- middle.push(" " +
540
- chalk.gray("│") +
541
- ` ${leftCell} ` +
542
- chalk.gray("│") +
543
- ` ${rightCell} ` +
544
- chalk.gray("│"));
545
- }
546
- const boxOuterWidth = leftWidth + rightWidth + OVERHEAD;
547
- const centerIndent = (plainLen) => {
548
- const indent = Math.max(0, Math.floor((boxOuterWidth - plainLen) / 2));
549
- return " ".repeat(2 + indent);
550
- };
551
- const tagline = "AI-powered terminal assistant · ask & agent modes for shell, files & security workflows";
552
- const welcome = `Welcome to clai v${version}! `;
553
- const welcomeHint = "/help for commands.";
554
- return [
555
- "",
556
- top,
557
- ...middle,
558
- bottom,
559
- "",
560
- centerIndent(tagline.length) + chalk.white(tagline),
561
- centerIndent(welcome.length + welcomeHint.length) +
562
- chalk.green.bold(welcome) +
563
- chalk.cyan(welcomeHint),
564
- ];
565
- }
566
- /**
567
- * Flatten the whole transcript (plus any transient streaming text) into a
568
- * single array of ANSI lines, separated by blank lines, ready for the
569
- * scrolling viewport. Rendering to lines (rather than Ink boxes) lets toggles
570
- * like Ctrl+T / Ctrl+O recompute in place and lets us pin the composer.
571
- */
572
- export function renderTranscriptLines(state, ctx) {
573
- const blocks = [];
574
- // The modern intro card is always the first block of the transcript. It
575
- // stays at the top and scrolls up naturally as the conversation grows,
576
- // rather than being swapped for a separate compact header once a turn
577
- // begins.
578
- blocks.push(renderIntroHeader(ctx));
579
- for (const item of state.items) {
580
- if (ctx.hidePlanItems && item.kind === "plan")
581
- continue;
582
- blocks.push(renderItemLinesCached(item, ctx));
583
- }
584
- // While generating: show the live thinking preview (before any response
585
- // streams). Once the step finishes it commits as a collapsed thinking hint.
586
- if (state.status.running && state.thinkingPreview && !state.streaming) {
587
- const body = wrap(state.thinkingPreview, ctx.width - 4).map((l) => chalk.dim(" " + l));
588
- blocks.push([chalk.dim.italic("✦ thinking…"), ...body]);
589
- }
590
- // Transient streaming text for the active step (suppressed when it is a
591
- // tool-call fence, which will be replaced by a clean tool card).
592
- if (state.streaming) {
593
- const visibleStreaming = stripStreamingToolFence(state.streaming);
594
- if (visibleStreaming.trim().length > 0) {
595
- const md = renderMarkdown(visibleStreaming, ctx.width - 2).replace(/\n+$/, "");
596
- blocks.push([
597
- chalk.magenta.bold("◆ Response"),
598
- ...md.split("\n").map((line) => ` ${line}`),
599
- chalk.magenta(" ▌"),
600
- ]);
601
- }
602
- }
603
- const lines = [];
604
- blocks.forEach((block, i) => {
605
- if (i > 0)
606
- lines.push("");
607
- lines.push(...block);
608
- });
609
- return lines;
610
- }
611
- //# sourceMappingURL=render-lines.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"render-lines.js","sourceRoot":"","sources":["../../src/tui/render-lines.ts"],"names":[],"mappings":"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"}