@travisennis/acai 0.0.6 → 0.0.8

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 (586) hide show
  1. package/README.md +225 -39
  2. package/dist/agent/index.d.ts +30 -21
  3. package/dist/agent/index.d.ts.map +1 -1
  4. package/dist/agent/index.js +237 -198
  5. package/dist/cli.d.ts +4 -3
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +56 -18
  8. package/dist/commands/add-directory/index.d.ts +3 -0
  9. package/dist/commands/add-directory/index.d.ts.map +1 -0
  10. package/dist/commands/add-directory/index.js +50 -0
  11. package/dist/commands/add-directory/types.d.ts +6 -0
  12. package/dist/commands/add-directory/types.d.ts.map +1 -0
  13. package/dist/commands/add-directory/utils.d.ts +3 -0
  14. package/dist/commands/add-directory/utils.d.ts.map +1 -0
  15. package/dist/commands/add-directory/utils.js +15 -0
  16. package/dist/commands/clear/index.d.ts +3 -0
  17. package/dist/commands/clear/index.d.ts.map +1 -0
  18. package/dist/commands/{clear-command.js → clear/index.js} +1 -7
  19. package/dist/commands/copy/index.d.ts +3 -0
  20. package/dist/commands/copy/index.d.ts.map +1 -0
  21. package/dist/commands/copy/index.js +39 -0
  22. package/dist/commands/copy/types.d.ts +3 -0
  23. package/dist/commands/copy/types.d.ts.map +1 -0
  24. package/dist/commands/copy/types.js +1 -0
  25. package/dist/commands/copy/utils.d.ts +3 -0
  26. package/dist/commands/copy/utils.d.ts.map +1 -0
  27. package/dist/commands/copy/utils.js +22 -0
  28. package/dist/commands/exit/index.d.ts +10 -0
  29. package/dist/commands/exit/index.d.ts.map +1 -0
  30. package/dist/commands/exit/index.js +21 -0
  31. package/dist/commands/exit/types.d.ts +8 -0
  32. package/dist/commands/exit/types.d.ts.map +1 -0
  33. package/dist/commands/exit/types.js +1 -0
  34. package/dist/commands/exit/utils.d.ts +2 -0
  35. package/dist/commands/exit/utils.d.ts.map +1 -0
  36. package/dist/commands/exit/utils.js +13 -0
  37. package/dist/commands/generate-rules/index.d.ts +3 -0
  38. package/dist/commands/generate-rules/index.d.ts.map +1 -0
  39. package/dist/commands/{generate-rules-command.js → generate-rules/index.js} +65 -147
  40. package/dist/commands/generate-rules/utils.d.ts +5 -0
  41. package/dist/commands/generate-rules/utils.d.ts.map +1 -0
  42. package/dist/commands/generate-rules/utils.js +25 -0
  43. package/dist/commands/handoff/index.d.ts +3 -0
  44. package/dist/commands/handoff/index.d.ts.map +1 -0
  45. package/dist/commands/handoff/index.js +97 -0
  46. package/dist/commands/handoff/utils.d.ts +4 -0
  47. package/dist/commands/handoff/utils.d.ts.map +1 -0
  48. package/dist/commands/handoff/utils.js +123 -0
  49. package/dist/commands/health/index.d.ts +3 -0
  50. package/dist/commands/health/index.d.ts.map +1 -0
  51. package/dist/commands/health/index.js +56 -0
  52. package/dist/commands/health/utils.d.ts +15 -0
  53. package/dist/commands/health/utils.d.ts.map +1 -0
  54. package/dist/commands/health/utils.js +52 -0
  55. package/dist/commands/help/index.d.ts +3 -0
  56. package/dist/commands/help/index.d.ts.map +1 -0
  57. package/dist/commands/{help-command.js → help/index.js} +6 -14
  58. package/dist/commands/history/index.d.ts +3 -0
  59. package/dist/commands/history/index.d.ts.map +1 -0
  60. package/dist/commands/{history-command.js → history/index.js} +40 -200
  61. package/dist/commands/history/types.d.ts +11 -0
  62. package/dist/commands/history/types.d.ts.map +1 -0
  63. package/dist/commands/history/types.js +1 -0
  64. package/dist/commands/history/utils.d.ts +4 -0
  65. package/dist/commands/history/utils.d.ts.map +1 -0
  66. package/dist/commands/history/utils.js +86 -0
  67. package/dist/commands/init/index.d.ts +3 -0
  68. package/dist/commands/init/index.d.ts.map +1 -0
  69. package/dist/commands/{init-command.js → init/index.js} +17 -27
  70. package/dist/commands/init-project/index.d.ts +3 -0
  71. package/dist/commands/init-project/index.d.ts.map +1 -0
  72. package/dist/commands/init-project/index.js +51 -0
  73. package/dist/commands/init-project/utils.d.ts +9 -0
  74. package/dist/commands/init-project/utils.d.ts.map +1 -0
  75. package/dist/commands/init-project/utils.js +43 -0
  76. package/dist/commands/list-directories/index.d.ts +3 -0
  77. package/dist/commands/list-directories/index.d.ts.map +1 -0
  78. package/dist/commands/{list-directories-command.js → list-directories/index.js} +2 -15
  79. package/dist/commands/list-tools/index.d.ts +3 -0
  80. package/dist/commands/list-tools/index.d.ts.map +1 -0
  81. package/dist/commands/list-tools/index.js +89 -0
  82. package/dist/commands/manager.d.ts +2 -9
  83. package/dist/commands/manager.d.ts.map +1 -1
  84. package/dist/commands/manager.js +38 -83
  85. package/dist/commands/model/index.d.ts +3 -0
  86. package/dist/commands/model/index.d.ts.map +1 -0
  87. package/dist/commands/model/index.js +182 -0
  88. package/dist/commands/model/utils.d.ts +3 -0
  89. package/dist/commands/model/utils.d.ts.map +1 -0
  90. package/dist/commands/model/utils.js +5 -0
  91. package/dist/commands/paste/index.d.ts +3 -0
  92. package/dist/commands/paste/index.d.ts.map +1 -0
  93. package/dist/commands/paste/index.js +94 -0
  94. package/dist/commands/paste/utils.d.ts +5 -0
  95. package/dist/commands/paste/utils.d.ts.map +1 -0
  96. package/dist/commands/paste/utils.js +86 -0
  97. package/dist/commands/pickup/index.d.ts +3 -0
  98. package/dist/commands/pickup/index.d.ts.map +1 -0
  99. package/dist/commands/pickup/index.js +138 -0
  100. package/dist/commands/pickup/types.d.ts +6 -0
  101. package/dist/commands/pickup/types.d.ts.map +1 -0
  102. package/dist/commands/pickup/types.js +1 -0
  103. package/dist/commands/pickup/utils.d.ts +7 -0
  104. package/dist/commands/pickup/utils.d.ts.map +1 -0
  105. package/dist/commands/pickup/utils.js +56 -0
  106. package/dist/commands/prompt/index.d.ts +5 -0
  107. package/dist/commands/prompt/index.d.ts.map +1 -0
  108. package/dist/commands/prompt/index.js +126 -0
  109. package/dist/commands/prompt/types.d.ts +15 -0
  110. package/dist/commands/prompt/types.d.ts.map +1 -0
  111. package/dist/commands/prompt/types.js +1 -0
  112. package/dist/commands/prompt/utils.d.ts +12 -0
  113. package/dist/commands/prompt/utils.d.ts.map +1 -0
  114. package/dist/commands/prompt/utils.js +107 -0
  115. package/dist/commands/remove-directory/index.d.ts +3 -0
  116. package/dist/commands/remove-directory/index.d.ts.map +1 -0
  117. package/dist/commands/{remove-directory-command.js → remove-directory/index.js} +3 -35
  118. package/dist/commands/reset/index.d.ts +3 -0
  119. package/dist/commands/reset/index.d.ts.map +1 -0
  120. package/dist/commands/{reset-command.js → reset/index.js} +8 -11
  121. package/dist/commands/reset/types.d.ts +1 -0
  122. package/dist/commands/reset/types.d.ts.map +1 -0
  123. package/dist/commands/reset/types.js +3 -0
  124. package/dist/commands/resources/index.d.ts +3 -0
  125. package/dist/commands/resources/index.d.ts.map +1 -0
  126. package/dist/commands/resources/index.js +84 -0
  127. package/dist/commands/review/index.d.ts +3 -0
  128. package/dist/commands/review/index.d.ts.map +1 -0
  129. package/dist/commands/review/index.js +126 -0
  130. package/dist/commands/review/types.d.ts +12 -0
  131. package/dist/commands/review/types.d.ts.map +1 -0
  132. package/dist/commands/review/types.js +1 -0
  133. package/dist/commands/review/utils.d.ts +4 -0
  134. package/dist/commands/review/utils.d.ts.map +1 -0
  135. package/dist/commands/review/utils.js +87 -0
  136. package/dist/commands/save/index.d.ts +3 -0
  137. package/dist/commands/save/index.d.ts.map +1 -0
  138. package/dist/commands/{save-command.js → save/index.js} +3 -10
  139. package/dist/commands/session/index.d.ts +3 -0
  140. package/dist/commands/session/index.d.ts.map +1 -0
  141. package/dist/commands/session/index.js +197 -0
  142. package/dist/commands/session/types.d.ts +13 -0
  143. package/dist/commands/session/types.d.ts.map +1 -0
  144. package/dist/commands/session/types.js +7 -0
  145. package/dist/commands/shell/index.d.ts +3 -0
  146. package/dist/commands/shell/index.d.ts.map +1 -0
  147. package/dist/commands/{shell-command.js → shell/index.js} +4 -51
  148. package/dist/commands/types.d.ts +2 -5
  149. package/dist/commands/types.d.ts.map +1 -1
  150. package/dist/config.d.ts +36 -7
  151. package/dist/config.d.ts.map +1 -1
  152. package/dist/config.js +118 -60
  153. package/dist/dedent.d.ts.map +1 -1
  154. package/dist/dedent.js +7 -7
  155. package/dist/execution/index.d.ts +18 -2
  156. package/dist/execution/index.d.ts.map +1 -1
  157. package/dist/execution/index.js +119 -81
  158. package/dist/formatting.d.ts +46 -0
  159. package/dist/formatting.d.ts.map +1 -1
  160. package/dist/formatting.js +94 -0
  161. package/dist/index.d.ts +1 -1
  162. package/dist/index.d.ts.map +1 -1
  163. package/dist/index.js +299 -177
  164. package/dist/logger.d.ts.map +1 -1
  165. package/dist/logger.js +4 -11
  166. package/dist/mentions.d.ts.map +1 -1
  167. package/dist/mentions.js +3 -53
  168. package/dist/middleware/audit-message.d.ts +2 -2
  169. package/dist/middleware/audit-message.d.ts.map +1 -1
  170. package/dist/middleware/audit-message.js +40 -2
  171. package/dist/middleware/cache.d.ts +2 -2
  172. package/dist/middleware/cache.d.ts.map +1 -1
  173. package/dist/middleware/cache.js +111 -27
  174. package/dist/middleware/rate-limit.d.ts +2 -2
  175. package/dist/middleware/rate-limit.d.ts.map +1 -1
  176. package/dist/middleware/rate-limit.js +1 -0
  177. package/dist/models/ai-config.d.ts.map +1 -1
  178. package/dist/models/ai-config.js +46 -29
  179. package/dist/models/anthropic-provider.d.ts +14 -13
  180. package/dist/models/anthropic-provider.d.ts.map +1 -1
  181. package/dist/models/anthropic-provider.js +0 -7
  182. package/dist/models/deepseek-provider.d.ts +9 -8
  183. package/dist/models/deepseek-provider.d.ts.map +1 -1
  184. package/dist/models/deepseek-provider.js +0 -2
  185. package/dist/models/google-provider.d.ts +10 -9
  186. package/dist/models/google-provider.d.ts.map +1 -1
  187. package/dist/models/google-provider.js +0 -3
  188. package/dist/models/groq-provider.d.ts +8 -7
  189. package/dist/models/groq-provider.d.ts.map +1 -1
  190. package/dist/models/groq-provider.js +0 -1
  191. package/dist/models/manager.d.ts +7 -4
  192. package/dist/models/manager.d.ts.map +1 -1
  193. package/dist/models/manager.js +5 -25
  194. package/dist/models/openai-provider.d.ts +11 -10
  195. package/dist/models/openai-provider.d.ts.map +1 -1
  196. package/dist/models/openai-provider.js +0 -4
  197. package/dist/models/opencode-zen-provider.d.ts +23 -0
  198. package/dist/models/opencode-zen-provider.d.ts.map +1 -0
  199. package/dist/models/opencode-zen-provider.js +76 -0
  200. package/dist/models/openrouter-provider.d.ts +34 -28
  201. package/dist/models/openrouter-provider.d.ts.map +1 -1
  202. package/dist/models/openrouter-provider.js +148 -139
  203. package/dist/models/providers.d.ts +6 -16
  204. package/dist/models/providers.d.ts.map +1 -1
  205. package/dist/models/providers.js +8 -58
  206. package/dist/models/xai-provider.d.ts +9 -8
  207. package/dist/models/xai-provider.d.ts.map +1 -1
  208. package/dist/models/xai-provider.js +0 -2
  209. package/dist/prompts/manager.d.ts +1 -1
  210. package/dist/prompts/manager.d.ts.map +1 -1
  211. package/dist/prompts/manager.js +1 -1
  212. package/dist/prompts.d.ts +8 -4
  213. package/dist/prompts.d.ts.map +1 -1
  214. package/dist/prompts.js +155 -177
  215. package/dist/repl/project-status.d.ts +19 -0
  216. package/dist/repl/project-status.d.ts.map +1 -0
  217. package/dist/repl/project-status.js +78 -0
  218. package/dist/repl-new.d.ts +15 -6
  219. package/dist/repl-new.d.ts.map +1 -1
  220. package/dist/repl-new.js +266 -83
  221. package/dist/{messages.d.ts → sessions/manager.d.ts} +13 -4
  222. package/dist/sessions/manager.d.ts.map +1 -0
  223. package/dist/{messages.js → sessions/manager.js} +126 -16
  224. package/dist/skills.d.ts +16 -0
  225. package/dist/skills.d.ts.map +1 -0
  226. package/dist/skills.js +233 -0
  227. package/dist/terminal/control.d.ts +56 -0
  228. package/dist/terminal/control.d.ts.map +1 -0
  229. package/dist/terminal/control.js +111 -0
  230. package/dist/terminal/default-theme.d.ts +1 -1
  231. package/dist/terminal/default-theme.d.ts.map +1 -1
  232. package/dist/terminal/default-theme.js +24 -28
  233. package/dist/terminal/formatting.d.ts +23 -26
  234. package/dist/terminal/formatting.d.ts.map +1 -1
  235. package/dist/terminal/formatting.js +35 -53
  236. package/dist/terminal/highlight/index.d.ts.map +1 -1
  237. package/dist/terminal/highlight/index.js +3 -6
  238. package/dist/terminal/highlight/theme.d.ts.map +1 -1
  239. package/dist/terminal/highlight/theme.js +2 -6
  240. package/dist/terminal/index.d.ts +2 -101
  241. package/dist/terminal/index.d.ts.map +1 -1
  242. package/dist/terminal/index.js +2 -464
  243. package/dist/terminal/keys.d.ts +211 -0
  244. package/dist/terminal/keys.d.ts.map +1 -0
  245. package/dist/terminal/keys.js +546 -0
  246. package/dist/terminal/segmenter.d.ts +6 -0
  247. package/dist/terminal/segmenter.d.ts.map +1 -0
  248. package/dist/terminal/segmenter.js +11 -0
  249. package/dist/terminal/select-prompt.d.ts.map +1 -1
  250. package/dist/terminal/select-prompt.js +9 -21
  251. package/dist/terminal/string-width.d.ts.map +1 -1
  252. package/dist/terminal/string-width.js +40 -21
  253. package/dist/terminal/strip-ansi.d.ts.map +1 -1
  254. package/dist/terminal/strip-ansi.js +9 -15
  255. package/dist/terminal/table/cell.d.ts +114 -0
  256. package/dist/terminal/table/cell.d.ts.map +1 -0
  257. package/dist/terminal/table/cell.js +407 -0
  258. package/dist/terminal/table/debug.d.ts +15 -0
  259. package/dist/terminal/table/debug.d.ts.map +1 -0
  260. package/dist/terminal/table/debug.js +32 -0
  261. package/dist/terminal/table/index.d.ts +3 -0
  262. package/dist/terminal/table/index.d.ts.map +1 -0
  263. package/dist/terminal/table/index.js +2 -0
  264. package/dist/terminal/table/layout-manager.d.ts +27 -0
  265. package/dist/terminal/table/layout-manager.d.ts.map +1 -0
  266. package/dist/terminal/table/layout-manager.js +257 -0
  267. package/dist/terminal/table/table.d.ts +9 -0
  268. package/dist/terminal/table/table.d.ts.map +1 -0
  269. package/dist/terminal/table/table.js +97 -0
  270. package/dist/terminal/table/utils.d.ts +63 -0
  271. package/dist/terminal/table/utils.d.ts.map +1 -0
  272. package/dist/terminal/table/utils.js +326 -0
  273. package/dist/tokens/tracker.d.ts.map +1 -1
  274. package/dist/tokens/tracker.js +58 -16
  275. package/dist/tools/bash.d.ts +11 -11
  276. package/dist/tools/bash.d.ts.map +1 -1
  277. package/dist/tools/bash.js +189 -81
  278. package/dist/tools/directory-tree.d.ts +9 -13
  279. package/dist/tools/directory-tree.d.ts.map +1 -1
  280. package/dist/tools/directory-tree.js +90 -60
  281. package/dist/tools/dynamic-tool-loader.d.ts +22 -8
  282. package/dist/tools/dynamic-tool-loader.d.ts.map +1 -1
  283. package/dist/tools/dynamic-tool-loader.js +41 -46
  284. package/dist/tools/edit-file.d.ts +6 -16
  285. package/dist/tools/edit-file.d.ts.map +1 -1
  286. package/dist/tools/edit-file.js +22 -66
  287. package/dist/tools/glob.d.ts +15 -16
  288. package/dist/tools/glob.d.ts.map +1 -1
  289. package/dist/tools/glob.js +78 -109
  290. package/dist/tools/grep.d.ts +19 -22
  291. package/dist/tools/grep.d.ts.map +1 -1
  292. package/dist/tools/grep.js +61 -93
  293. package/dist/tools/index.d.ts +202 -167
  294. package/dist/tools/index.d.ts.map +1 -1
  295. package/dist/tools/index.js +17 -273
  296. package/dist/tools/ls.d.ts +26 -0
  297. package/dist/tools/ls.d.ts.map +1 -0
  298. package/dist/tools/ls.js +80 -0
  299. package/dist/tools/read-file.d.ts +15 -15
  300. package/dist/tools/read-file.d.ts.map +1 -1
  301. package/dist/tools/read-file.js +52 -76
  302. package/dist/tools/save-file.d.ts +8 -8
  303. package/dist/tools/save-file.d.ts.map +1 -1
  304. package/dist/tools/save-file.js +42 -53
  305. package/dist/tools/think.d.ts +4 -4
  306. package/dist/tools/think.d.ts.map +1 -1
  307. package/dist/tools/think.js +9 -32
  308. package/dist/tools/types.d.ts +5 -21
  309. package/dist/tools/types.d.ts.map +1 -1
  310. package/dist/tools/types.js +0 -9
  311. package/dist/tui/autocomplete/attachment-provider.d.ts +18 -0
  312. package/dist/tui/autocomplete/attachment-provider.d.ts.map +1 -0
  313. package/dist/tui/autocomplete/attachment-provider.js +159 -0
  314. package/dist/tui/autocomplete/base-provider.d.ts +17 -0
  315. package/dist/tui/autocomplete/base-provider.d.ts.map +1 -0
  316. package/dist/tui/autocomplete/base-provider.js +1 -0
  317. package/dist/tui/autocomplete/combined-provider.d.ts +20 -0
  318. package/dist/tui/autocomplete/combined-provider.d.ts.map +1 -0
  319. package/dist/tui/autocomplete/combined-provider.js +61 -0
  320. package/dist/tui/autocomplete/command-provider.d.ts +20 -0
  321. package/dist/tui/autocomplete/command-provider.d.ts.map +1 -0
  322. package/dist/tui/autocomplete/command-provider.js +90 -0
  323. package/dist/tui/autocomplete/file-search-provider.d.ts +16 -0
  324. package/dist/tui/autocomplete/file-search-provider.d.ts.map +1 -0
  325. package/dist/tui/autocomplete/file-search-provider.js +123 -0
  326. package/dist/tui/autocomplete/path-provider.d.ts +21 -0
  327. package/dist/tui/autocomplete/path-provider.d.ts.map +1 -0
  328. package/dist/tui/autocomplete/path-provider.js +164 -0
  329. package/dist/tui/autocomplete/utils.d.ts +16 -0
  330. package/dist/tui/autocomplete/utils.d.ts.map +1 -0
  331. package/dist/tui/autocomplete/utils.js +137 -0
  332. package/dist/tui/autocomplete.d.ts +12 -43
  333. package/dist/tui/autocomplete.d.ts.map +1 -1
  334. package/dist/tui/autocomplete.js +20 -465
  335. package/dist/tui/components/assistant-message.js +1 -1
  336. package/dist/tui/components/box.d.ts +20 -0
  337. package/dist/tui/components/box.d.ts.map +1 -0
  338. package/dist/tui/components/box.js +87 -0
  339. package/dist/tui/components/editor.d.ts +61 -7
  340. package/dist/tui/components/editor.d.ts.map +1 -1
  341. package/dist/tui/components/editor.js +630 -127
  342. package/dist/tui/components/footer.d.ts +19 -18
  343. package/dist/tui/components/footer.d.ts.map +1 -1
  344. package/dist/tui/components/footer.js +90 -185
  345. package/dist/tui/components/header.d.ts +21 -0
  346. package/dist/tui/components/header.d.ts.map +1 -0
  347. package/dist/tui/components/header.js +63 -0
  348. package/dist/tui/components/input.d.ts.map +1 -1
  349. package/dist/tui/components/input.js +8 -7
  350. package/dist/tui/components/loader.d.ts +6 -1
  351. package/dist/tui/components/loader.d.ts.map +1 -1
  352. package/dist/tui/components/loader.js +8 -3
  353. package/dist/tui/components/markdown.d.ts +31 -27
  354. package/dist/tui/components/markdown.d.ts.map +1 -1
  355. package/dist/tui/components/markdown.js +131 -67
  356. package/dist/tui/components/modal.d.ts +0 -11
  357. package/dist/tui/components/modal.d.ts.map +1 -1
  358. package/dist/tui/components/modal.js +9 -37
  359. package/dist/tui/components/notification.d.ts +28 -0
  360. package/dist/tui/components/notification.d.ts.map +1 -0
  361. package/dist/tui/components/notification.js +63 -0
  362. package/dist/tui/components/progress-bar.d.ts +19 -0
  363. package/dist/tui/components/progress-bar.d.ts.map +1 -0
  364. package/dist/tui/components/progress-bar.js +66 -0
  365. package/dist/tui/components/select-list.d.ts +12 -1
  366. package/dist/tui/components/select-list.d.ts.map +1 -1
  367. package/dist/tui/components/select-list.js +73 -32
  368. package/dist/tui/components/spacer.d.ts +1 -1
  369. package/dist/tui/components/spacer.d.ts.map +1 -1
  370. package/dist/tui/components/spacer.js +2 -2
  371. package/dist/tui/components/table.d.ts +27 -0
  372. package/dist/tui/components/table.d.ts.map +1 -0
  373. package/dist/tui/components/table.js +125 -0
  374. package/dist/tui/components/thinking-block.d.ts.map +1 -1
  375. package/dist/tui/components/thinking-block.js +4 -1
  376. package/dist/tui/components/tool-execution.d.ts +7 -6
  377. package/dist/tui/components/tool-execution.d.ts.map +1 -1
  378. package/dist/tui/components/tool-execution.js +81 -85
  379. package/dist/tui/components/user-message.d.ts.map +1 -1
  380. package/dist/tui/components/user-message.js +6 -4
  381. package/dist/tui/components/welcome.d.ts +8 -1
  382. package/dist/tui/components/welcome.d.ts.map +1 -1
  383. package/dist/tui/components/welcome.js +45 -6
  384. package/dist/tui/index.d.ts +12 -6
  385. package/dist/tui/index.d.ts.map +1 -1
  386. package/dist/tui/index.js +7 -3
  387. package/dist/tui/terminal.d.ts +4 -3
  388. package/dist/tui/terminal.d.ts.map +1 -1
  389. package/dist/tui/terminal.js +43 -49
  390. package/dist/tui/tui.d.ts +3 -0
  391. package/dist/tui/tui.d.ts.map +1 -1
  392. package/dist/tui/tui.js +58 -43
  393. package/dist/tui/utils.d.ts +5 -0
  394. package/dist/tui/utils.d.ts.map +1 -1
  395. package/dist/tui/utils.js +80 -1
  396. package/dist/{tools/bash-utils.d.ts → utils/bash.d.ts} +3 -3
  397. package/dist/utils/bash.d.ts.map +1 -0
  398. package/dist/{tools/bash-utils.js → utils/bash.js} +22 -11
  399. package/dist/utils/{filesystem.d.ts → filesystem/operations.d.ts} +1 -1
  400. package/dist/utils/filesystem/operations.d.ts.map +1 -0
  401. package/dist/{tools/filesystem-utils.d.ts → utils/filesystem/security.d.ts} +3 -2
  402. package/dist/utils/filesystem/security.d.ts.map +1 -0
  403. package/dist/{tools/filesystem-utils.js → utils/filesystem/security.js} +62 -4
  404. package/dist/utils/funcs.d.ts +6 -0
  405. package/dist/utils/funcs.d.ts.map +1 -0
  406. package/dist/utils/funcs.js +6 -0
  407. package/dist/{tools/git-utils.d.ts → utils/git.d.ts} +1 -1
  408. package/dist/utils/git.d.ts.map +1 -0
  409. package/dist/{tools/git-utils.js → utils/git.js} +0 -6
  410. package/dist/utils/glob.js +1 -1
  411. package/dist/utils/yaml.d.ts +11 -0
  412. package/dist/utils/yaml.d.ts.map +1 -0
  413. package/dist/utils/yaml.js +207 -0
  414. package/dist/utils/{zod-utils.d.ts → zod.d.ts} +2 -1
  415. package/dist/utils/zod.d.ts.map +1 -0
  416. package/dist/utils/zod.js +24 -0
  417. package/package.json +31 -29
  418. package/dist/agent/manual-loop.d.ts +0 -41
  419. package/dist/agent/manual-loop.d.ts.map +0 -1
  420. package/dist/agent/manual-loop.js +0 -278
  421. package/dist/api/exa/index.d.ts +0 -177
  422. package/dist/api/exa/index.d.ts.map +0 -1
  423. package/dist/api/exa/index.js +0 -439
  424. package/dist/commands/add-directory-command.d.ts +0 -3
  425. package/dist/commands/add-directory-command.d.ts.map +0 -1
  426. package/dist/commands/add-directory-command.js +0 -85
  427. package/dist/commands/application-log-command.d.ts +0 -3
  428. package/dist/commands/application-log-command.d.ts.map +0 -1
  429. package/dist/commands/application-log-command.js +0 -79
  430. package/dist/commands/clear-command.d.ts +0 -3
  431. package/dist/commands/clear-command.d.ts.map +0 -1
  432. package/dist/commands/compact-command.d.ts +0 -3
  433. package/dist/commands/compact-command.d.ts.map +0 -1
  434. package/dist/commands/compact-command.js +0 -64
  435. package/dist/commands/context-command.d.ts +0 -3
  436. package/dist/commands/context-command.d.ts.map +0 -1
  437. package/dist/commands/context-command.js +0 -183
  438. package/dist/commands/copy-command.d.ts +0 -3
  439. package/dist/commands/copy-command.d.ts.map +0 -1
  440. package/dist/commands/copy-command.js +0 -80
  441. package/dist/commands/edit-command.d.ts +0 -3
  442. package/dist/commands/edit-command.d.ts.map +0 -1
  443. package/dist/commands/edit-command.js +0 -88
  444. package/dist/commands/edit-prompt-command.d.ts +0 -3
  445. package/dist/commands/edit-prompt-command.d.ts.map +0 -1
  446. package/dist/commands/edit-prompt-command.js +0 -61
  447. package/dist/commands/exit-command.d.ts +0 -13
  448. package/dist/commands/exit-command.d.ts.map +0 -1
  449. package/dist/commands/exit-command.js +0 -46
  450. package/dist/commands/files-command.d.ts +0 -3
  451. package/dist/commands/files-command.d.ts.map +0 -1
  452. package/dist/commands/files-command.js +0 -121
  453. package/dist/commands/generate-rules-command.d.ts +0 -3
  454. package/dist/commands/generate-rules-command.d.ts.map +0 -1
  455. package/dist/commands/handoff-command.d.ts +0 -3
  456. package/dist/commands/handoff-command.d.ts.map +0 -1
  457. package/dist/commands/handoff-command.js +0 -202
  458. package/dist/commands/health-command.d.ts +0 -4
  459. package/dist/commands/health-command.d.ts.map +0 -1
  460. package/dist/commands/health-command.js +0 -213
  461. package/dist/commands/help-command.d.ts +0 -3
  462. package/dist/commands/help-command.d.ts.map +0 -1
  463. package/dist/commands/history-command.d.ts +0 -3
  464. package/dist/commands/history-command.d.ts.map +0 -1
  465. package/dist/commands/init-command.d.ts +0 -3
  466. package/dist/commands/init-command.d.ts.map +0 -1
  467. package/dist/commands/last-log-command.d.ts +0 -3
  468. package/dist/commands/last-log-command.d.ts.map +0 -1
  469. package/dist/commands/last-log-command.js +0 -98
  470. package/dist/commands/list-directories-command.d.ts +0 -3
  471. package/dist/commands/list-directories-command.d.ts.map +0 -1
  472. package/dist/commands/list-tools-command.d.ts +0 -3
  473. package/dist/commands/list-tools-command.d.ts.map +0 -1
  474. package/dist/commands/list-tools-command.js +0 -124
  475. package/dist/commands/model-command.d.ts +0 -25
  476. package/dist/commands/model-command.d.ts.map +0 -1
  477. package/dist/commands/model-command.js +0 -340
  478. package/dist/commands/paste-command.d.ts +0 -3
  479. package/dist/commands/paste-command.d.ts.map +0 -1
  480. package/dist/commands/paste-command.js +0 -277
  481. package/dist/commands/pickup-command.d.ts +0 -3
  482. package/dist/commands/pickup-command.d.ts.map +0 -1
  483. package/dist/commands/pickup-command.js +0 -161
  484. package/dist/commands/prompt-command.d.ts +0 -3
  485. package/dist/commands/prompt-command.d.ts.map +0 -1
  486. package/dist/commands/prompt-command.js +0 -280
  487. package/dist/commands/remove-directory-command.d.ts +0 -3
  488. package/dist/commands/remove-directory-command.d.ts.map +0 -1
  489. package/dist/commands/reset-command.d.ts +0 -3
  490. package/dist/commands/reset-command.d.ts.map +0 -1
  491. package/dist/commands/rules-command.d.ts +0 -3
  492. package/dist/commands/rules-command.d.ts.map +0 -1
  493. package/dist/commands/rules-command.js +0 -135
  494. package/dist/commands/save-command.d.ts +0 -3
  495. package/dist/commands/save-command.d.ts.map +0 -1
  496. package/dist/commands/shell-command.d.ts +0 -3
  497. package/dist/commands/shell-command.d.ts.map +0 -1
  498. package/dist/commands/usage-command.d.ts +0 -3
  499. package/dist/commands/usage-command.d.ts.map +0 -1
  500. package/dist/commands/usage-command.js +0 -42
  501. package/dist/messages.d.ts.map +0 -1
  502. package/dist/repl/display-tool-messages.d.ts +0 -4
  503. package/dist/repl/display-tool-messages.d.ts.map +0 -1
  504. package/dist/repl/display-tool-messages.js +0 -58
  505. package/dist/repl/display-tool-use.d.ts +0 -14
  506. package/dist/repl/display-tool-use.d.ts.map +0 -1
  507. package/dist/repl/display-tool-use.js +0 -63
  508. package/dist/repl/get-prompt-header.d.ts +0 -8
  509. package/dist/repl/get-prompt-header.d.ts.map +0 -1
  510. package/dist/repl/get-prompt-header.js +0 -9
  511. package/dist/repl/project-status-line.d.ts +0 -2
  512. package/dist/repl/project-status-line.d.ts.map +0 -1
  513. package/dist/repl/project-status-line.js +0 -31
  514. package/dist/repl/prompt.d.ts +0 -21
  515. package/dist/repl/prompt.d.ts.map +0 -1
  516. package/dist/repl/prompt.js +0 -244
  517. package/dist/repl/tool-call-repair.d.ts +0 -4
  518. package/dist/repl/tool-call-repair.d.ts.map +0 -1
  519. package/dist/repl/tool-call-repair.js +0 -54
  520. package/dist/repl.d.ts +0 -29
  521. package/dist/repl.d.ts.map +0 -1
  522. package/dist/repl.js +0 -218
  523. package/dist/terminal/checkbox-prompt.d.ts +0 -36
  524. package/dist/terminal/checkbox-prompt.d.ts.map +0 -1
  525. package/dist/terminal/checkbox-prompt.js +0 -368
  526. package/dist/terminal/editor-prompt.d.ts +0 -10
  527. package/dist/terminal/editor-prompt.d.ts.map +0 -1
  528. package/dist/terminal/editor-prompt.js +0 -61
  529. package/dist/terminal/errors.d.ts +0 -19
  530. package/dist/terminal/errors.d.ts.map +0 -1
  531. package/dist/terminal/errors.js +0 -37
  532. package/dist/terminal/input-prompt.d.ts +0 -17
  533. package/dist/terminal/input-prompt.d.ts.map +0 -1
  534. package/dist/terminal/input-prompt.js +0 -181
  535. package/dist/terminal/markdown.d.ts +0 -2
  536. package/dist/terminal/markdown.d.ts.map +0 -1
  537. package/dist/terminal/markdown.js +0 -118
  538. package/dist/terminal/search-prompt.d.ts +0 -20
  539. package/dist/terminal/search-prompt.d.ts.map +0 -1
  540. package/dist/terminal/search-prompt.js +0 -280
  541. package/dist/terminal/types.d.ts +0 -35
  542. package/dist/terminal/types.d.ts.map +0 -1
  543. package/dist/tokens/threshold.d.ts +0 -35
  544. package/dist/tokens/threshold.d.ts.map +0 -1
  545. package/dist/tokens/threshold.js +0 -85
  546. package/dist/tools/advanced-edit-file.d.ts +0 -69
  547. package/dist/tools/advanced-edit-file.d.ts.map +0 -1
  548. package/dist/tools/advanced-edit-file.js +0 -281
  549. package/dist/tools/agent.d.ts +0 -29
  550. package/dist/tools/agent.d.ts.map +0 -1
  551. package/dist/tools/agent.js +0 -103
  552. package/dist/tools/bash-utils.d.ts.map +0 -1
  553. package/dist/tools/code-interpreter.d.ts +0 -25
  554. package/dist/tools/code-interpreter.d.ts.map +0 -1
  555. package/dist/tools/code-interpreter.js +0 -167
  556. package/dist/tools/delete-file.d.ts +0 -24
  557. package/dist/tools/delete-file.d.ts.map +0 -1
  558. package/dist/tools/delete-file.js +0 -70
  559. package/dist/tools/dynamic-tool-parser.d.ts +0 -21
  560. package/dist/tools/dynamic-tool-parser.d.ts.map +0 -1
  561. package/dist/tools/dynamic-tool-parser.js +0 -22
  562. package/dist/tools/filesystem-utils.d.ts.map +0 -1
  563. package/dist/tools/git-utils.d.ts.map +0 -1
  564. package/dist/tools/llm-edit-fixer.d.ts +0 -25
  565. package/dist/tools/llm-edit-fixer.d.ts.map +0 -1
  566. package/dist/tools/llm-edit-fixer.js +0 -150
  567. package/dist/tools/move-file.d.ts +0 -26
  568. package/dist/tools/move-file.d.ts.map +0 -1
  569. package/dist/tools/move-file.js +0 -58
  570. package/dist/tools/read-multiple-files.d.ts +0 -26
  571. package/dist/tools/read-multiple-files.d.ts.map +0 -1
  572. package/dist/tools/read-multiple-files.js +0 -139
  573. package/dist/tools/web-fetch.d.ts +0 -56
  574. package/dist/tools/web-fetch.d.ts.map +0 -1
  575. package/dist/tools/web-fetch.js +0 -247
  576. package/dist/tools/web-search.d.ts +0 -23
  577. package/dist/tools/web-search.d.ts.map +0 -1
  578. package/dist/tools/web-search.js +0 -133
  579. package/dist/tui/components/prompt-status.d.ts +0 -16
  580. package/dist/tui/components/prompt-status.d.ts.map +0 -1
  581. package/dist/tui/components/prompt-status.js +0 -21
  582. package/dist/utils/filesystem.d.ts.map +0 -1
  583. package/dist/utils/zod-utils.d.ts.map +0 -1
  584. package/dist/utils/zod-utils.js +0 -7
  585. /package/dist/{terminal → commands/add-directory}/types.js +0 -0
  586. /package/dist/utils/{filesystem.js → filesystem/operations.js} +0 -0
@@ -0,0 +1,66 @@
1
+ import { formatNumber } from "../../formatting.js";
2
+ import style from "../../terminal/style.js";
3
+ /**
4
+ * Progress bar component - displays a visual progress indicator
5
+ */
6
+ export class ProgressBarComponent {
7
+ current;
8
+ total;
9
+ width;
10
+ // Cache for rendered output
11
+ cachedOutput;
12
+ cachedCurrent;
13
+ cachedTotal;
14
+ cachedWidth;
15
+ constructor(current, total, width) {
16
+ this.current = current;
17
+ this.total = total;
18
+ this.width = width;
19
+ }
20
+ setCurrent(current) {
21
+ this.current = current;
22
+ this.invalidateCache();
23
+ }
24
+ setTotal(total) {
25
+ this.total = total;
26
+ this.invalidateCache();
27
+ }
28
+ invalidateCache() {
29
+ this.cachedOutput = undefined;
30
+ this.cachedCurrent = undefined;
31
+ this.cachedTotal = undefined;
32
+ this.cachedWidth = undefined;
33
+ }
34
+ render(width) {
35
+ // Use provided width if specified, otherwise use component width
36
+ const renderWidth = width || this.width;
37
+ // Check cache
38
+ if (this.cachedOutput &&
39
+ this.cachedCurrent === this.current &&
40
+ this.cachedTotal === this.total &&
41
+ this.cachedWidth === renderWidth) {
42
+ return this.cachedOutput;
43
+ }
44
+ const percentage = this.total === 0 ? 1 : this.current / this.total;
45
+ const currentFormatted = formatNumber(this.current);
46
+ const totalFormatted = formatNumber(this.total);
47
+ const progressText = `${currentFormatted}/${totalFormatted} [${(percentage * 100).toFixed(1)}%]`;
48
+ const progressTextLength = progressText.length + 1; // Add 1 for space
49
+ const progressBarMaxWidth = Math.max(1, renderWidth - progressTextLength);
50
+ const filledWidth = Math.max(0, Math.min(progressBarMaxWidth, Math.floor(percentage * progressBarMaxWidth)));
51
+ const emptyWidth = Math.max(0, progressBarMaxWidth - filledWidth);
52
+ const a = filledWidth / progressBarMaxWidth > 0.5
53
+ ? style.red("─")
54
+ : style.yellow("─");
55
+ const b = style.gray("─");
56
+ const filledBar = a.repeat(filledWidth);
57
+ const emptyBar = b.repeat(emptyWidth);
58
+ const result = [`${filledBar}${emptyBar} ${progressText}`];
59
+ // Update cache
60
+ this.cachedOutput = result;
61
+ this.cachedCurrent = this.current;
62
+ this.cachedTotal = this.total;
63
+ this.cachedWidth = renderWidth;
64
+ return result;
65
+ }
66
+ }
@@ -4,19 +4,30 @@ export interface SelectItem {
4
4
  label: string;
5
5
  description?: string;
6
6
  }
7
+ export interface SelectListTheme {
8
+ selectedPrefix: (text: string) => string;
9
+ selectedText: (text: string) => string;
10
+ description: (text: string) => string;
11
+ scrollInfo: (text: string) => string;
12
+ noMatch: (text: string) => string;
13
+ }
7
14
  export declare class SelectList implements Component {
8
15
  private items;
9
16
  private filteredItems;
10
17
  private selectedIndex;
11
18
  private maxVisible;
19
+ private theme;
12
20
  onSelect?: (item: SelectItem) => void;
13
21
  onCancel?: () => void;
14
- constructor(items: SelectItem[], maxVisible?: number);
22
+ onSelectionChange?: (item: SelectItem) => void;
23
+ constructor(items: SelectItem[], maxVisible?: number, theme?: SelectListTheme);
24
+ private createDefaultTheme;
15
25
  updateItems(items: SelectItem[]): void;
16
26
  setFilter(filter: string): void;
17
27
  setSelectedIndex(index: number): void;
18
28
  render(width: number): string[];
19
29
  handleInput(keyData: string): void;
30
+ private notifySelectionChange;
20
31
  getSelectedItem(): SelectItem | null;
21
32
  }
22
33
  //# sourceMappingURL=select-list.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"select-list.d.ts","sourceRoot":"","sources":["../../../source/tui/components/select-list.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,UAAW,YAAW,SAAS;IAC1C,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,UAAU,CAAK;IAEhB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;gBAEjB,KAAK,EAAE,UAAU,EAAE,EAAE,UAAU,SAAI;IAM/C,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE;IAK/B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ/B,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAOrC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IA8G/B,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IA2BlC,eAAe,IAAI,UAAU,GAAG,IAAI;CAIrC"}
1
+ {"version":3,"file":"select-list.d.ts","sourceRoot":"","sources":["../../../source/tui/components/select-list.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAG3C,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACzC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACvC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACtC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACrC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACnC;AAED,qBAAa,UAAW,YAAW,SAAS;IAC1C,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,KAAK,CAAkB;IAExB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;gBAE1C,KAAK,EAAE,UAAU,EAAE,EAAE,UAAU,SAAI,EAAE,KAAK,CAAC,EAAE,eAAe;IAOxE,OAAO,CAAC,kBAAkB;IAU1B,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE;IAQ/B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ/B,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAOrC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAgI/B,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAgDlC,OAAO,CAAC,qBAAqB;IAO7B,eAAe,IAAI,UAAU,GAAG,IAAI;CAIrC"}
@@ -1,19 +1,36 @@
1
+ import { isArrowDown, isArrowUp, isCtrlC, isEnter, isEscape, isShiftTab, isTab, } from "../../terminal/keys.js";
1
2
  import style from "../../terminal/style.js";
3
+ import { truncateToWidth } from "../utils.js";
2
4
  export class SelectList {
3
5
  items = [];
4
6
  filteredItems = [];
5
7
  selectedIndex = 0;
6
8
  maxVisible = 5;
9
+ theme;
7
10
  onSelect;
8
11
  onCancel;
9
- constructor(items, maxVisible = 5) {
12
+ onSelectionChange;
13
+ constructor(items, maxVisible = 5, theme) {
10
14
  this.items = items;
11
15
  this.filteredItems = items;
12
16
  this.maxVisible = maxVisible;
17
+ this.theme = theme || this.createDefaultTheme();
18
+ }
19
+ createDefaultTheme() {
20
+ return {
21
+ selectedPrefix: (text) => style.blue(text),
22
+ selectedText: (text) => style.blue(text),
23
+ description: (text) => style.gray(text),
24
+ scrollInfo: (text) => style.gray(text),
25
+ noMatch: (text) => style.gray(text),
26
+ };
13
27
  }
14
28
  updateItems(items) {
15
29
  this.items = items;
16
30
  this.filteredItems = items;
31
+ // Reset selection to first item when items change
32
+ this.setSelectedIndex(0);
33
+ this.notifySelectionChange();
17
34
  }
18
35
  setFilter(filter) {
19
36
  this.filteredItems = this.items.filter((item) => item.value.toLowerCase().startsWith(filter.toLowerCase()));
@@ -27,7 +44,7 @@ export class SelectList {
27
44
  const lines = [];
28
45
  // If no items match filter, show message
29
46
  if (this.filteredItems.length === 0) {
30
- lines.push(style.gray(" No matching commands"));
47
+ lines.push(this.theme.noMatch(" No matching commands"));
31
48
  return lines;
32
49
  }
33
50
  // Calculate visible range with scrolling
@@ -41,35 +58,32 @@ export class SelectList {
41
58
  const isSelected = i === this.selectedIndex;
42
59
  let line = "";
43
60
  if (isSelected) {
44
- // Use arrow indicator for selection
45
- const prefix = style.blue("→ ");
61
+ // Use arrow indicator for selection - entire line uses selectedText color
46
62
  const prefixWidth = 2; // "→ " is 2 characters visually
47
63
  const displayValue = item.label || item.value;
48
64
  if (item.description && width > 40) {
49
65
  // Calculate how much space we have for value + description
50
- const maxValueLength = Math.min(displayValue.length, 30);
51
- const truncatedValue = displayValue.substring(0, maxValueLength);
66
+ const maxValueWidth = Math.min(30, width - prefixWidth - 4);
67
+ const truncatedValue = truncateToWidth(displayValue, maxValueWidth, "");
52
68
  const spacing = " ".repeat(Math.max(1, 32 - truncatedValue.length));
53
69
  // Calculate remaining space for description using visible widths
54
70
  const descriptionStart = prefixWidth + truncatedValue.length + spacing.length;
55
71
  const remainingWidth = width - descriptionStart - 2; // -2 for safety
56
72
  if (remainingWidth > 10) {
57
- const truncatedDesc = item.description.substring(0, remainingWidth);
58
- line =
59
- prefix +
60
- style.blue(truncatedValue) +
61
- style.gray(spacing + truncatedDesc);
73
+ const truncatedDesc = truncateToWidth(item.description, remainingWidth, "");
74
+ // Apply selectedText to entire line content
75
+ line = this.theme.selectedText(`→ ${truncatedValue}${spacing}${truncatedDesc}`);
62
76
  }
63
77
  else {
64
78
  // Not enough space for description
65
79
  const maxWidth = width - prefixWidth - 2;
66
- line = prefix + style.blue(displayValue.substring(0, maxWidth));
80
+ line = this.theme.selectedText(`→ ${truncateToWidth(displayValue, maxWidth, "")}`);
67
81
  }
68
82
  }
69
83
  else {
70
84
  // No description or not enough width
71
85
  const maxWidth = width - prefixWidth - 2;
72
- line = prefix + style.blue(displayValue.substring(0, maxWidth));
86
+ line = this.theme.selectedText(`→ ${truncateToWidth(displayValue, maxWidth, "")}`);
73
87
  }
74
88
  }
75
89
  else {
@@ -77,27 +91,27 @@ export class SelectList {
77
91
  const prefix = " ";
78
92
  if (item.description && width > 40) {
79
93
  // Calculate how much space we have for value + description
80
- const maxValueLength = Math.min(displayValue.length, 30);
81
- const truncatedValue = displayValue.substring(0, maxValueLength);
94
+ const maxValueWidth = Math.min(30, width - prefix.length - 4);
95
+ const truncatedValue = truncateToWidth(displayValue, maxValueWidth, "");
82
96
  const spacing = " ".repeat(Math.max(1, 32 - truncatedValue.length));
83
97
  // Calculate remaining space for description
84
98
  const descriptionStart = prefix.length + truncatedValue.length + spacing.length;
85
99
  const remainingWidth = width - descriptionStart - 2; // -2 for safety
86
100
  if (remainingWidth > 10) {
87
- const truncatedDesc = item.description.substring(0, remainingWidth);
88
- line =
89
- prefix + truncatedValue + style.gray(spacing + truncatedDesc);
101
+ const truncatedDesc = truncateToWidth(item.description, remainingWidth, "");
102
+ const descText = this.theme.description(spacing + truncatedDesc);
103
+ line = prefix + truncatedValue + descText;
90
104
  }
91
105
  else {
92
106
  // Not enough space for description
93
107
  const maxWidth = width - prefix.length - 2;
94
- line = prefix + displayValue.substring(0, maxWidth);
108
+ line = prefix + truncateToWidth(displayValue, maxWidth, "");
95
109
  }
96
110
  }
97
111
  else {
98
112
  // No description or not enough width
99
113
  const maxWidth = width - prefix.length - 2;
100
- line = prefix + displayValue.substring(0, maxWidth);
114
+ line = prefix + truncateToWidth(displayValue, maxWidth, "");
101
115
  }
102
116
  }
103
117
  lines.push(line);
@@ -106,36 +120,63 @@ export class SelectList {
106
120
  if (startIndex > 0 || endIndex < this.filteredItems.length) {
107
121
  const scrollText = ` (${this.selectedIndex + 1}/${this.filteredItems.length})`;
108
122
  // Truncate if too long for terminal
109
- const maxWidth = width - 2;
110
- const truncated = scrollText.substring(0, maxWidth);
111
- const scrollInfo = style.gray(truncated);
112
- lines.push(scrollInfo);
123
+ lines.push(this.theme.scrollInfo(truncateToWidth(scrollText, width - 2, "")));
113
124
  }
114
125
  return lines;
115
126
  }
116
127
  handleInput(keyData) {
117
- // Up arrow
118
- if (keyData === "\x1b[A") {
119
- this.selectedIndex = Math.max(0, this.selectedIndex - 1);
128
+ // Up arrow - wrap to bottom when at top
129
+ if (isArrowUp(keyData)) {
130
+ this.selectedIndex =
131
+ this.selectedIndex === 0
132
+ ? this.filteredItems.length - 1
133
+ : this.selectedIndex - 1;
134
+ this.notifySelectionChange();
135
+ }
136
+ // Down arrow - wrap to top when at bottom
137
+ else if (isArrowDown(keyData)) {
138
+ this.selectedIndex =
139
+ this.selectedIndex === this.filteredItems.length - 1
140
+ ? 0
141
+ : this.selectedIndex + 1;
142
+ this.notifySelectionChange();
143
+ }
144
+ // Tab - move down with wrapping (like down arrow)
145
+ else if (isTab(keyData)) {
146
+ this.selectedIndex =
147
+ this.selectedIndex === this.filteredItems.length - 1
148
+ ? 0
149
+ : this.selectedIndex + 1;
150
+ this.notifySelectionChange();
120
151
  }
121
- // Down arrow or Tab
122
- else if (keyData === "\x1b[B" || keyData === "\t") {
123
- this.selectedIndex = Math.min(this.filteredItems.length - 1, this.selectedIndex + 1);
152
+ // Shift+Tab - move up with wrapping (like up arrow)
153
+ else if (isShiftTab(keyData)) {
154
+ this.selectedIndex =
155
+ this.selectedIndex === 0
156
+ ? this.filteredItems.length - 1
157
+ : this.selectedIndex - 1;
158
+ this.notifySelectionChange();
124
159
  }
125
160
  // Enter
126
- else if (keyData === "\r") {
161
+ else if (isEnter(keyData)) {
127
162
  const selectedItem = this.filteredItems[this.selectedIndex];
128
163
  if (selectedItem && this.onSelect) {
129
164
  this.onSelect(selectedItem);
130
165
  }
131
166
  }
132
167
  // Escape or Ctrl+C
133
- else if (keyData === "\x1b" || keyData === "\x03") {
168
+ else if (isEscape(keyData) || isCtrlC(keyData)) {
134
169
  if (this.onCancel) {
135
170
  this.onCancel();
136
171
  }
137
172
  }
138
173
  }
174
+ notifySelectionChange() {
175
+ const selectedItem = this.filteredItems[this.selectedIndex];
176
+ if (selectedItem && this.onSelectionChange) {
177
+ this.onSelectionChange(selectedItem);
178
+ }
179
+ }
139
180
  getSelectedItem() {
140
181
  const item = this.filteredItems[this.selectedIndex];
141
182
  return item || null;
@@ -11,6 +11,6 @@ export declare class Spacer implements Component {
11
11
  b: number;
12
12
  });
13
13
  setLines(lines: number): void;
14
- render(_width: number): string[];
14
+ render(width: number): string[];
15
15
  }
16
16
  //# sourceMappingURL=spacer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"spacer.d.ts","sourceRoot":"","sources":["../../../source/tui/components/spacer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C;;GAEG;AACH,qBAAa,MAAO,YAAW,SAAS;IACtC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,WAAW,CAAC,CAAsC;gBAE9C,KAAK,SAAI,EAAE,WAAW,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAKxE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI7B,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;CAgBjC"}
1
+ {"version":3,"file":"spacer.d.ts","sourceRoot":"","sources":["../../../source/tui/components/spacer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C;;GAEG;AACH,qBAAa,MAAO,YAAW,SAAS;IACtC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,WAAW,CAAC,CAAsC;gBAE9C,KAAK,SAAI,EAAE,WAAW,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAKxE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI7B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;CAgBhC"}
@@ -12,10 +12,10 @@ export class Spacer {
12
12
  setLines(lines) {
13
13
  this.lines = lines;
14
14
  }
15
- render(_width) {
15
+ render(width) {
16
16
  const result = [];
17
17
  for (let i = 0; i < this.lines; i++) {
18
- let line = "";
18
+ let line = " ".repeat(width);
19
19
  // Apply background color if specified
20
20
  if (this.customBgRgb) {
21
21
  line = style.bgRgb(this.customBgRgb.r, this.customBgRgb.g, this.customBgRgb.b)(line);
@@ -0,0 +1,27 @@
1
+ import type { Component } from "../tui.ts";
2
+ /**
3
+ * Table component - displays tabular data with proper formatting and wrapping
4
+ */
5
+ export declare class TableComponent implements Component {
6
+ private data;
7
+ private headers?;
8
+ private colWidths?;
9
+ private width?;
10
+ private cachedOutput?;
11
+ private cachedData?;
12
+ private cachedHeaders?;
13
+ private cachedColWidths?;
14
+ private cachedWidth?;
15
+ constructor(data: (string | number)[][], options: {
16
+ headers?: string[];
17
+ colWidths?: number[];
18
+ width?: number;
19
+ });
20
+ setData(data: (string | number)[][]): void;
21
+ setHeaders(headers?: string[]): void;
22
+ setColWidths(colWidths?: number[]): void;
23
+ setWidth(width: number): void;
24
+ private invalidateCache;
25
+ render(width: number): string[];
26
+ }
27
+ //# sourceMappingURL=table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../source/tui/components/table.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C;;GAEG;AACH,qBAAa,cAAe,YAAW,SAAS;IAC9C,OAAO,CAAC,IAAI,CAAwB;IACpC,OAAO,CAAC,OAAO,CAAC,CAAW;IAC3B,OAAO,CAAC,SAAS,CAAC,CAAW;IAC7B,OAAO,CAAC,KAAK,CAAC,CAAS;IAGvB,OAAO,CAAC,YAAY,CAAC,CAAW;IAChC,OAAO,CAAC,UAAU,CAAC,CAAwB;IAC3C,OAAO,CAAC,aAAa,CAAC,CAAW;IACjC,OAAO,CAAC,eAAe,CAAC,CAAW;IACnC,OAAO,CAAC,WAAW,CAAC,CAAS;gBAG3B,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE,EAC3B,OAAO,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAQvE,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI;IAK1C,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAKpC,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAKxC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7B,OAAO,CAAC,eAAe;IAQvB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;CAiGhC"}
@@ -0,0 +1,125 @@
1
+ import { Table } from "../../terminal/table/index.js";
2
+ /**
3
+ * Table component - displays tabular data with proper formatting and wrapping
4
+ */
5
+ export class TableComponent {
6
+ data;
7
+ headers;
8
+ colWidths;
9
+ width;
10
+ // Cache for rendered output
11
+ cachedOutput;
12
+ cachedData;
13
+ cachedHeaders;
14
+ cachedColWidths;
15
+ cachedWidth;
16
+ constructor(data, options) {
17
+ this.data = data;
18
+ this.headers = options.headers;
19
+ this.colWidths = options.colWidths;
20
+ this.width = options.width;
21
+ }
22
+ setData(data) {
23
+ this.data = data;
24
+ this.invalidateCache();
25
+ }
26
+ setHeaders(headers) {
27
+ this.headers = headers;
28
+ this.invalidateCache();
29
+ }
30
+ setColWidths(colWidths) {
31
+ this.colWidths = colWidths;
32
+ this.invalidateCache();
33
+ }
34
+ setWidth(width) {
35
+ this.width = width;
36
+ this.invalidateCache();
37
+ }
38
+ invalidateCache() {
39
+ this.cachedOutput = undefined;
40
+ this.cachedData = undefined;
41
+ this.cachedHeaders = undefined;
42
+ this.cachedColWidths = undefined;
43
+ this.cachedWidth = undefined;
44
+ }
45
+ render(width) {
46
+ // Use provided width if specified, otherwise use component width
47
+ const renderWidth = this.width || width;
48
+ // Check cache
49
+ if (this.cachedOutput &&
50
+ this.cachedData === this.data &&
51
+ this.cachedHeaders === this.headers &&
52
+ this.cachedColWidths === this.colWidths &&
53
+ this.cachedWidth === renderWidth) {
54
+ return this.cachedOutput;
55
+ }
56
+ if (this.data.length === 0) {
57
+ this.cachedOutput = [];
58
+ return [];
59
+ }
60
+ // Determine number of columns from data or header
61
+ let colCount = this.headers?.length;
62
+ if (colCount === undefined) {
63
+ colCount = this.data.length > 0 && this.data[0] ? this.data[0].length : 1;
64
+ }
65
+ // Calculate column widths based on terminal width
66
+ const padding = 5; // Account for table borders and padding
67
+ const availableWidth = Math.max(20, renderWidth - padding);
68
+ let computedColWidths;
69
+ if (this.colWidths && this.colWidths.length === colCount) {
70
+ // Use provided percentages
71
+ computedColWidths = this.colWidths.map((percent) => Math.max(10, Math.floor((percent / 100) * availableWidth)));
72
+ }
73
+ else {
74
+ // Distribute width evenly with minimum width per column
75
+ const minColWidth = 15;
76
+ const maxColsThatFit = Math.floor(availableWidth / minColWidth);
77
+ const actualColCount = Math.min(colCount, maxColsThatFit);
78
+ if (actualColCount === 1) {
79
+ computedColWidths = [availableWidth];
80
+ }
81
+ else {
82
+ // Calculate base width and distribute remaining pixels
83
+ const baseWidth = Math.floor(availableWidth / actualColCount);
84
+ const remainder = availableWidth % actualColCount;
85
+ computedColWidths = Array(actualColCount).fill(baseWidth);
86
+ // Distribute remainder pixels to first few columns
87
+ for (let i = 0; i < remainder && i < actualColCount; i++) {
88
+ computedColWidths[i] = (computedColWidths[i] || 0) + 1;
89
+ }
90
+ }
91
+ // If we have fewer computed widths than columns, extend the array
92
+ while (computedColWidths.length < colCount) {
93
+ computedColWidths.push(minColWidth);
94
+ }
95
+ }
96
+ const table = new Table({
97
+ head: this.headers,
98
+ colWidths: computedColWidths,
99
+ wordWrap: true,
100
+ wrapOnWordBoundary: true,
101
+ });
102
+ // Ensure all data rows have the same number of columns
103
+ const normalizedData = this.data.map((row) => {
104
+ if (row.length < colCount) {
105
+ // Pad with empty strings if row has fewer columns
106
+ return [...row, ...Array(colCount - row.length).fill("")];
107
+ }
108
+ if (row.length > colCount) {
109
+ // Truncate if row has more columns
110
+ return row.slice(0, colCount);
111
+ }
112
+ return row;
113
+ });
114
+ table.push(...normalizedData);
115
+ const tableString = table.toString();
116
+ const result = tableString.split("\n");
117
+ // Update cache
118
+ this.cachedOutput = result;
119
+ this.cachedData = this.data;
120
+ this.cachedHeaders = this.headers;
121
+ this.cachedColWidths = this.colWidths;
122
+ this.cachedWidth = renderWidth;
123
+ return result;
124
+ }
125
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"thinking-block.d.ts","sourceRoot":"","sources":["../../../source/tui/components/thinking-block.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAItC;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,SAAS;IACnD,OAAO,CAAC,gBAAgB,CAAY;gBAExB,OAAO,CAAC,EAAE;QACpB,OAAO,EAAE,MAAM,CAAC;KACjB;IAYD,aAAa,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;CAsBlD"}
1
+ {"version":3,"file":"thinking-block.d.ts","sourceRoot":"","sources":["../../../source/tui/components/thinking-block.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAItC;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,SAAS;IACnD,OAAO,CAAC,gBAAgB,CAAY;gBAExB,OAAO,CAAC,EAAE;QACpB,OAAO,EAAE,MAAM,CAAC;KACjB;IAYD,aAAa,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;CAkBlD"}
@@ -25,6 +25,9 @@ export class ThinkingBlockComponent extends Container {
25
25
  const content = message.content;
26
26
  // Assistant text messages with no background - trim the text
27
27
  // Set paddingY=0 to avoid extra spacing before tool executions
28
- this.contentContainer.addChild(new Markdown(style.dim(content.trim()), undefined, undefined, undefined, 1, 0));
28
+ this.contentContainer.addChild(new Markdown(style.dim(content.trim()), {
29
+ paddingX: 1,
30
+ paddingY: 0,
31
+ }));
29
32
  }
30
33
  }
@@ -2,16 +2,17 @@ import type { ToolEvent } from "../../agent/index.ts";
2
2
  import { Container } from "../index.ts";
3
3
  export declare class ToolExecutionComponent extends Container {
4
4
  private contentContainer;
5
+ private loaderComponent;
5
6
  private toolName;
6
7
  private events;
7
- constructor(event: ToolEvent);
8
- update(event: ToolEvent): void;
8
+ constructor(events: ToolEvent[]);
9
+ update(events: ToolEvent[]): void;
9
10
  private renderDisplay;
10
- private getIndicator;
11
- private handleToolInitMessage;
12
- private handleToolUpdateMessage;
13
- private handleToolCompletionMessage;
11
+ private getToolCallStartComponent;
12
+ private handleToolStartMessage;
13
+ private renderOutputDisplay;
14
14
  private handleToolErrorMessage;
15
15
  private processEventsInOrder;
16
+ private getEventIndex;
16
17
  }
17
18
  //# sourceMappingURL=tool-execution.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-execution.d.ts","sourceRoot":"","sources":["../../../source/tui/components/tool-execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EAAE,SAAS,EAAgB,MAAM,aAAa,CAAC;AAItD,qBAAa,sBAAuB,SAAQ,SAAS;IACnD,OAAO,CAAC,gBAAgB,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAc;gBAEhB,KAAK,EAAE,SAAS;IAY5B,MAAM,CAAC,KAAK,EAAE,SAAS;IAKvB,OAAO,CAAC,aAAa;IAwDrB,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,uBAAuB;IAkB/B,OAAO,CAAC,2BAA2B;IAcnC,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,oBAAoB;CA+C7B"}
1
+ {"version":3,"file":"tool-execution.d.ts","sourceRoot":"","sources":["../../../source/tui/components/tool-execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EAAE,SAAS,EAA6B,MAAM,aAAa,CAAC;AAWnE,qBAAa,sBAAuB,SAAQ,SAAS;IACnD,OAAO,CAAC,gBAAgB,CAAY;IACpC,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAc;gBAEhB,MAAM,EAAE,SAAS,EAAE;IAa/B,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE;IAS1B,OAAO,CAAC,aAAa;IA2CrB,OAAO,CAAC,yBAAyB;IA6CjC,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,mBAAmB;IA0B3B,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,oBAAoB;IAgC5B,OAAO,CAAC,aAAa;CActB"}