@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
@@ -4,467 +4,5 @@
4
4
  * Provides a user interface for interacting with Claude Code in the terminal.
5
5
  * Handles input/output, formatting, and display.
6
6
  */
7
- import Table from "cli-table3";
8
- import { logger } from "../logger.js";
9
- import { getPackageVersion } from "../version.js";
10
- import { clearTerminal, getTerminalSize, setTerminalTitle, link as terminalLink, } from "./formatting.js";
11
- import { applyMarkdown } from "./markdown.js";
12
- import stripAnsi from "./strip-ansi.js";
13
- import style from "./style.js";
14
- import wrapAnsi from "./wrap-ansi.js";
15
- export function getShell() {
16
- return process.env["ZSH_VERSION"] ? "zsh" : process.env["SHELL"] || "bash";
17
- }
18
- export function hr(width) {
19
- return `${style.gray("─").repeat(width)} `;
20
- }
21
- export function table(data, options) {
22
- const { header, colWidths, width } = options;
23
- // Determine number of columns from data or header
24
- let colCount = header?.length;
25
- if (colCount === undefined) {
26
- colCount = data.length > 0 && data[0] ? data[0].length : 1;
27
- }
28
- // Calculate column widths based on terminal width
29
- const padding = 5; // Account for table borders and padding
30
- const availableWidth = Math.max(20, width - padding);
31
- let computedColWidths;
32
- if (colWidths && colWidths.length === colCount) {
33
- // Use provided percentages
34
- computedColWidths = colWidths.map((percent) => Math.max(10, Math.floor((percent / 100) * availableWidth)));
35
- }
36
- else {
37
- // Distribute width evenly with minimum width per column
38
- const minColWidth = 15;
39
- const maxColsThatFit = Math.floor(availableWidth / minColWidth);
40
- const actualColCount = Math.min(colCount, maxColsThatFit);
41
- if (actualColCount === 1) {
42
- computedColWidths = [availableWidth];
43
- }
44
- else {
45
- // Calculate base width and distribute remaining pixels
46
- const baseWidth = Math.floor(availableWidth / actualColCount);
47
- const remainder = availableWidth % actualColCount;
48
- computedColWidths = Array(actualColCount).fill(baseWidth);
49
- // Distribute remainder pixels to first few columns
50
- for (let i = 0; i < remainder && i < actualColCount; i++) {
51
- computedColWidths[i] = (computedColWidths[i] || 0) + 1;
52
- }
53
- }
54
- // If we have fewer computed widths than columns, extend the array
55
- while (computedColWidths.length < colCount) {
56
- computedColWidths.push(minColWidth);
57
- }
58
- }
59
- const table = new Table({
60
- head: header,
61
- colWidths: computedColWidths,
62
- wordWrap: true,
63
- wrapOnWordBoundary: true,
64
- });
65
- // Ensure all data rows have the same number of columns
66
- const normalizedData = data.map((row) => {
67
- if (row.length < colCount) {
68
- // Pad with empty strings if row has fewer columns
69
- return [...row, ...Array(colCount - row.length).fill("")];
70
- }
71
- if (row.length > colCount) {
72
- // Truncate if row has more columns
73
- return row.slice(0, colCount);
74
- }
75
- return row;
76
- });
77
- table.push(...normalizedData);
78
- return table.toString();
79
- }
80
- export function displayProgressBar(current, total, width) {
81
- const terminalWidth = width;
82
- // Function to format numbers concisely (e.g., 1.2K, 5M)
83
- const formatNumber = (num) => {
84
- if (num < 1000) {
85
- return num.toString();
86
- }
87
- if (num < 1_000_000) {
88
- return `${(num / 1000).toFixed(1)}K`;
89
- }
90
- if (num < 1_000_000_000) {
91
- return `${(num / 1_000_000).toFixed(1)}M`;
92
- }
93
- return `${(num / 1_000_000_000).toFixed(1)}G`;
94
- };
95
- const currentFormatted = formatNumber(current);
96
- const totalFormatted = formatNumber(total);
97
- const progressText = `${currentFormatted}/${totalFormatted}`;
98
- const progressTextLength = progressText.length + 1; // Add 1 for space
99
- const progressBarMaxWidth = Math.max(1, terminalWidth - progressTextLength);
100
- const percentage = total === 0 ? 1 : current / total;
101
- const filledWidth = Math.max(0, Math.min(progressBarMaxWidth, Math.floor(percentage * progressBarMaxWidth)));
102
- const emptyWidth = Math.max(0, progressBarMaxWidth - filledWidth);
103
- const a = filledWidth / progressBarMaxWidth > 0.5
104
- ? style.red("─")
105
- : style.yellow("─"); //"█"
106
- const b = style.gray("─"); // "░"
107
- const filledBar = a.repeat(filledWidth);
108
- const emptyBar = b.repeat(emptyWidth);
109
- // Use \r to move cursor to the beginning of the line for updates
110
- return `\r${filledBar}${emptyBar} ${progressText} `;
111
- }
112
- /**
113
- * Initialize the terminal interface
114
- */
115
- export function initTerminal(config = {}) {
116
- logger.debug("Initializing terminal interface");
117
- const terminalConfig = {
118
- theme: config.theme || "system",
119
- useColors: config.useColors !== false,
120
- showProgressIndicators: config.showProgressIndicators !== false,
121
- codeHighlighting: config.codeHighlighting !== false,
122
- maxHeight: config.maxHeight,
123
- maxWidth: config.maxWidth,
124
- };
125
- const terminal = new Terminal(terminalConfig);
126
- try {
127
- // Detect terminal capabilities
128
- terminal.detectCapabilities();
129
- return terminal;
130
- }
131
- catch (error) {
132
- logger.warn(error, "Error initializing terminal interface:");
133
- // Return a basic terminal interface even if there was an error
134
- return terminal;
135
- }
136
- }
137
- /**
138
- * Terminal class for handling user interaction
139
- */
140
- export class Terminal {
141
- config;
142
- terminalWidth;
143
- terminalHeight;
144
- isInteractive;
145
- constructor(config) {
146
- this.config = config;
147
- // Get initial terminal size
148
- const { rows, columns } = getTerminalSize();
149
- this.terminalHeight = config.maxHeight || rows;
150
- this.terminalWidth = config.maxWidth || columns;
151
- // Assume interactive by default
152
- this.isInteractive = process.stdout.isTTY && process.stdin.isTTY;
153
- // Listen for terminal resize events
154
- process.stdout.on("resize", () => {
155
- const { rows, columns } = getTerminalSize();
156
- this.terminalHeight = config.maxHeight || rows;
157
- this.terminalWidth = config.maxWidth || columns;
158
- logger.debug(`Terminal resized to ${columns}x${rows}`);
159
- });
160
- }
161
- /**
162
- * Detect terminal capabilities
163
- */
164
- detectCapabilities() {
165
- // Check if the terminal is interactive
166
- this.isInteractive = Boolean(process.stdout.isTTY && process.stdin.isTTY);
167
- logger.debug({
168
- isInteractive: this.isInteractive,
169
- colorSupport: this.config.useColors ? "yes" : "no",
170
- size: `${this.terminalWidth}x${this.terminalHeight}`,
171
- }, "Terminal capabilities detected");
172
- }
173
- setTitle(title) {
174
- setTerminalTitle(title);
175
- }
176
- getLogo() {
177
- return `
178
- █████╗ ██████╗ █████╗ ██╗
179
- ██╔══██╗██╔════╝██╔══██╗██║
180
- ███████║██║ ███████║██║
181
- ██╔══██║██║ ██╔══██║██║
182
- ██║ ██║╚██████╗██║ ██║██║
183
- ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚═╝
184
- `;
185
- }
186
- /**
187
- * Display the welcome message
188
- */
189
- displayWelcome() {
190
- this.clear();
191
- const version = getPackageVersion();
192
- this.writeln(style.magenta(this.getLogo()));
193
- this.lineBreak();
194
- this.writeln(style.magenta("Greetings! I am acai."));
195
- this.writeln(style.gray(` Version ${version}`));
196
- this.lineBreak();
197
- this.writeln(style.white(` Type ${style.cyan("/help")} to see available commands.`));
198
- this.writeln(style.white(" You can ask acai to explain code, fix issues, or perform tasks."));
199
- this.writeln(style.white(` Example: "${style.italic("Please analyze this codebase and explain its structure.")}"`));
200
- this.writeln(style.dim(" Use Ctrl+C to interrupt acai and exit."));
201
- this.lineBreak();
202
- this.writeln(style.yellow(`The current working directory is ${process.cwd()}`));
203
- this.lineBreak();
204
- }
205
- /**
206
- * Clear the terminal screen
207
- */
208
- clear() {
209
- if (this.isInteractive) {
210
- clearTerminal();
211
- }
212
- }
213
- /**
214
- * Start progress indicator in terminal
215
- * Sends terminal escape sequence to show progress animation
216
- */
217
- startProgress() {
218
- process.stdout.write("\u001b]9;4;3;0\u0007");
219
- }
220
- /**
221
- * Stop progress indicator in terminal
222
- * Sends terminal escape sequence to hide progress animation
223
- */
224
- stopProgress() {
225
- process.stdout.write("\u001b]9;4;0;0\u0007");
226
- }
227
- /**
228
- * Display formatted content
229
- */
230
- display(content, wrap = false) {
231
- this.writeln(this.formatMarkdown(content, wrap));
232
- }
233
- /**
234
- * Display a message with emphasis
235
- */
236
- emphasize(message) {
237
- if (this.config.useColors) {
238
- this.writeln(style.cyan.bold(message));
239
- }
240
- else {
241
- this.writeln(message.toUpperCase());
242
- }
243
- }
244
- /**
245
- * Display an informational message
246
- */
247
- info(message) {
248
- if (this.config.useColors) {
249
- this.writeln(style.blue(`ℹ ${message}`));
250
- }
251
- else {
252
- this.writeln(`INFO: ${message}`);
253
- }
254
- }
255
- /**
256
- * Display a success message
257
- */
258
- success(message) {
259
- if (this.config.useColors) {
260
- this.writeln(style.green(`✓ ${message}`));
261
- }
262
- else {
263
- this.writeln(`SUCCESS: ${message}`);
264
- }
265
- }
266
- /**
267
- * Display a warning message
268
- */
269
- warn(message) {
270
- if (this.config.useColors) {
271
- this.writeln(style.yellow(`⚠ ${message}`));
272
- }
273
- else {
274
- this.writeln(`WARNING: ${message}`);
275
- }
276
- }
277
- /**
278
- * Display an error message
279
- */
280
- error(message) {
281
- if (this.config.useColors) {
282
- this.writeln(style.red(`✗ ${message}`));
283
- }
284
- else {
285
- this.writeln(`ERROR: ${message}`);
286
- }
287
- }
288
- /**
289
- * Emits an alert.
290
- */
291
- alert() {
292
- if (!this.isInteractive) {
293
- return;
294
- }
295
- const t = "acai";
296
- const b = "";
297
- try {
298
- process.stdout.write("\x07");
299
- const esc = "\u001b";
300
- const bel = "\u0007";
301
- const safe = (s) => s.replaceAll("\u0007", "").replaceAll("\u001b", "");
302
- const payload = `${esc}]777;notify;${safe(t)};${safe(b)}${bel}`;
303
- process.stdout.write(payload);
304
- }
305
- catch (err) {
306
- logger.warn({ err }, "Failed to emit alert");
307
- }
308
- }
309
- write(input) {
310
- process.stdout.write(input);
311
- }
312
- writeln(input) {
313
- process.stdout.write(`${input}\n`);
314
- }
315
- lineBreak() {
316
- this.writeln("");
317
- }
318
- header(header, styleFn = style.cyan) {
319
- const cols = this.terminalWidth > 0 ? this.terminalWidth : 80;
320
- const width = Math.max(0, cols - header.length - 4);
321
- this.writeln(`${style.gray("\n── ")}${styleFn(header)} ${style.gray("─".repeat(width))}`);
322
- }
323
- async box(header, content) {
324
- const cols = this.terminalWidth > 0 ? this.terminalWidth : 80;
325
- const width = Math.max(4, cols - 4);
326
- // Helper to strip ANSI sequences for accurate visible-width calculation
327
- const paddedHeader = ` ${header} `;
328
- const headerVisibleLen = stripAnsi(paddedHeader).length;
329
- const headerStartPos = 1;
330
- // Top border with header (use visible header length)
331
- const leftDashes = headerStartPos;
332
- const rightDashes = Math.max(0, width - leftDashes - headerVisibleLen);
333
- const topBorder = `┌${"─".repeat(leftDashes)}${paddedHeader}${"─".repeat(rightDashes)}┐`;
334
- // Prepare inner content: format markdown first, then wrap to inner width
335
- const innerWidth = Math.max(1, width - 2);
336
- const formatted = applyMarkdown(content);
337
- const wrapped = wrapAnsi(formatted, innerWidth, { trim: false });
338
- const contentLines = wrapped
339
- .split("\n")
340
- .map((line) => {
341
- const visibleLen = stripAnsi(line).length;
342
- const padCount = Math.max(0, innerWidth - visibleLen);
343
- return `│ ${line}${" ".repeat(padCount)} │`;
344
- })
345
- .join("\n");
346
- // Bottom border
347
- const bottomBorder = `└${"─".repeat(width)}┘`;
348
- // Write the box
349
- this.writeln(`${topBorder}\n${contentLines}\n${bottomBorder}`);
350
- }
351
- hr(styleFn = style.gray) {
352
- const cols = this.terminalWidth > 0 ? this.terminalWidth : 80;
353
- this.writeln(styleFn(`${"─".repeat(Math.max(1, cols - 1))} `));
354
- }
355
- /**
356
- * Create a clickable link in the terminal if supported
357
- */
358
- link(text, url) {
359
- return style.underline.blue(terminalLink(text, url));
360
- }
361
- /**
362
- * Display a table of data
363
- */
364
- table(data, options = {}) {
365
- const { header, colWidths } = options;
366
- // Determine number of columns from data or header
367
- let colCount = header?.length;
368
- if (colCount === undefined) {
369
- colCount = data.length > 0 && data[0] ? data[0].length : 1;
370
- }
371
- // Calculate column widths based on terminal width
372
- const padding = 5; // Account for table borders and padding
373
- const availableWidth = Math.max(20, this.terminalWidth - padding);
374
- let computedColWidths;
375
- if (colWidths && colWidths.length === colCount) {
376
- // Use provided percentages
377
- computedColWidths = colWidths.map((percent) => Math.max(10, Math.floor((percent / 100) * availableWidth)));
378
- }
379
- else {
380
- // Distribute width evenly with minimum width per column
381
- const minColWidth = 15;
382
- const maxColsThatFit = Math.floor(availableWidth / minColWidth);
383
- const actualColCount = Math.min(colCount, maxColsThatFit);
384
- if (actualColCount === 1) {
385
- computedColWidths = [availableWidth];
386
- }
387
- else {
388
- // Calculate base width and distribute remaining pixels
389
- const baseWidth = Math.floor(availableWidth / actualColCount);
390
- const remainder = availableWidth % actualColCount;
391
- computedColWidths = Array(actualColCount).fill(baseWidth);
392
- // Distribute remainder pixels to first few columns
393
- for (let i = 0; i < remainder && i < actualColCount; i++) {
394
- computedColWidths[i] = (computedColWidths[i] || 0) + 1;
395
- }
396
- }
397
- // If we have fewer computed widths than columns, extend the array
398
- while (computedColWidths.length < colCount) {
399
- computedColWidths.push(minColWidth);
400
- }
401
- }
402
- const table = new Table({
403
- head: header,
404
- colWidths: computedColWidths,
405
- wordWrap: true,
406
- wrapOnWordBoundary: true,
407
- });
408
- // Ensure all data rows have the same number of columns
409
- const normalizedData = data.map((row) => {
410
- if (row.length < colCount) {
411
- // Pad with empty strings if row has fewer columns
412
- return [...row, ...Array(colCount - row.length).fill("")];
413
- }
414
- if (row.length > colCount) {
415
- // Truncate if row has more columns
416
- return row.slice(0, colCount);
417
- }
418
- return row;
419
- });
420
- table.push(...normalizedData);
421
- this.writeln(table.toString());
422
- }
423
- /**
424
- * Displays a horizontal progress bar in the console.
425
- * @param current The current value.
426
- * @param total The target value.
427
- */
428
- displayProgressBar(current, total) {
429
- const terminalWidth = this.terminalWidth > 0 ? this.terminalWidth : 80; // Default to 80 if columns not available
430
- // Function to format numbers concisely (e.g., 1.2K, 5M)
431
- const formatNumber = (num) => {
432
- if (num < 1000) {
433
- return num.toString();
434
- }
435
- if (num < 1_000_000) {
436
- return `${(num / 1000).toFixed(1)}K`;
437
- }
438
- if (num < 1_000_000_000) {
439
- return `${(num / 1_000_000).toFixed(1)}M`;
440
- }
441
- return `${(num / 1_000_000_000).toFixed(1)}G`;
442
- };
443
- const currentFormatted = formatNumber(current);
444
- const totalFormatted = formatNumber(total);
445
- const progressText = `${currentFormatted}/${totalFormatted}`;
446
- const progressTextLength = progressText.length + 1; // Add 1 for space
447
- const progressBarMaxWidth = Math.max(1, terminalWidth - progressTextLength - 1);
448
- const percentage = total === 0 ? 1 : current / total;
449
- const filledWidth = Math.max(0, Math.min(progressBarMaxWidth, Math.floor(percentage * progressBarMaxWidth)));
450
- const emptyWidth = Math.max(0, progressBarMaxWidth - filledWidth);
451
- const a = filledWidth / progressBarMaxWidth > 0.5
452
- ? style.red("─")
453
- : style.yellow("─"); //"█"
454
- const b = style.gray("─"); // "░"
455
- const filledBar = a.repeat(filledWidth);
456
- const emptyBar = b.repeat(emptyWidth);
457
- // Use \r to move cursor to the beginning of the line for updates
458
- this.writeln(`\r${filledBar}${emptyBar} ${progressText} `);
459
- }
460
- formatMarkdown(content, wrap = false) {
461
- const columns = this.terminalWidth;
462
- const formatted = applyMarkdown(content);
463
- if (wrap) {
464
- return wrapAnsi(formatted, columns - 6, { trim: false });
465
- }
466
- return formatted;
467
- }
468
- }
469
- // Re-export the types
470
- export * from "./types.js";
7
+ export { alert, getShell, isInteractive } from "./control.js";
8
+ export { emphasize, error, hr, info, success, warn } from "./formatting.js";
@@ -0,0 +1,211 @@
1
+ /** biome-ignore-all lint/suspicious/noControlCharactersInRegex: handle terminal ansii codes */
2
+ /** biome-ignore-all lint/style/useNamingConvention: will fix later */
3
+ /**
4
+ * Check if input matches a Kitty protocol Ctrl+<key> sequence.
5
+ * Ignores lock key bits (Caps Lock, Num Lock).
6
+ * @param data - The input data to check
7
+ * @param key - Single lowercase letter (e.g., 'c' for Ctrl+C)
8
+ */
9
+ export declare function isKittyCtrl(data: string, key: string): boolean;
10
+ /**
11
+ * Check if input matches a Kitty protocol key sequence with specific modifier.
12
+ * Ignores lock key bits (Caps Lock, Num Lock).
13
+ * @param data - The input data to check
14
+ * @param codepoint - ASCII codepoint of the key
15
+ * @param modifier - Modifier value (use MODIFIERS constants)
16
+ */
17
+ export declare function isKittyKey(data: string, codepoint: number, modifier: number): boolean;
18
+ /**
19
+ * Check if input matches Ctrl+A (raw byte or Kitty protocol).
20
+ * Ignores lock key bits.
21
+ */
22
+ export declare function isCtrlA(data: string): boolean;
23
+ /**
24
+ * Check if input matches Ctrl+C (raw byte or Kitty protocol).
25
+ * Ignores lock key bits.
26
+ */
27
+ export declare function isCtrlC(data: string): boolean;
28
+ /**
29
+ * Check if input matches Ctrl+D (raw byte or Kitty protocol).
30
+ * Ignores lock key bits.
31
+ */
32
+ export declare function isCtrlD(data: string): boolean;
33
+ /**
34
+ * Check if input matches Ctrl+E (raw byte or Kitty protocol).
35
+ * Ignores lock key bits.
36
+ */
37
+ export declare function isCtrlE(data: string): boolean;
38
+ /**
39
+ * Check if input matches Ctrl+G (raw byte or Kitty protocol).
40
+ * Ignores lock key bits.
41
+ */
42
+ export declare function isCtrlG(data: string): boolean;
43
+ /**
44
+ * Check if input matches Ctrl+K (raw byte or Kitty protocol).
45
+ * Ignores lock key bits.
46
+ * Also checks if first byte is 0x0b for compatibility with terminals
47
+ * that may send trailing bytes.
48
+ */
49
+ export declare function isCtrlK(data: string): boolean;
50
+ /**
51
+ * Check if input matches Ctrl+L (raw byte or Kitty protocol).
52
+ * Ignores lock key bits.
53
+ */
54
+ export declare function isCtrlL(data: string): boolean;
55
+ /**
56
+ * Check if input matches Ctrl+O (raw byte or Kitty protocol).
57
+ * Ignores lock key bits.
58
+ */
59
+ export declare function isCtrlO(data: string): boolean;
60
+ /**
61
+ * Check if input matches Shift+Ctrl+O (Kitty protocol only).
62
+ * Ignores lock key bits.
63
+ */
64
+ export declare function isShiftCtrlO(data: string): boolean;
65
+ /**
66
+ * Check if input matches Ctrl+P (raw byte or Kitty protocol).
67
+ * Ignores lock key bits.
68
+ */
69
+ export declare function isCtrlP(data: string): boolean;
70
+ /**
71
+ * Check if input matches Shift+Ctrl+P (Kitty protocol only).
72
+ * Ignores lock key bits.
73
+ */
74
+ export declare function isShiftCtrlP(data: string): boolean;
75
+ /**
76
+ * Check if input matches Shift+Ctrl+D (Kitty protocol only, for debug).
77
+ * Ignores lock key bits.
78
+ */
79
+ export declare function isShiftCtrlD(data: string): boolean;
80
+ /**
81
+ * Check if input matches Ctrl+T (raw byte or Kitty protocol).
82
+ * Ignores lock key bits.
83
+ */
84
+ export declare function isCtrlT(data: string): boolean;
85
+ /**
86
+ * Check if input matches Ctrl+U (raw byte or Kitty protocol).
87
+ * Ignores lock key bits.
88
+ */
89
+ export declare function isCtrlU(data: string): boolean;
90
+ /**
91
+ * Check if input matches Ctrl+W (raw byte or Kitty protocol).
92
+ * Ignores lock key bits.
93
+ */
94
+ export declare function isCtrlW(data: string): boolean;
95
+ /**
96
+ * Check if input matches Ctrl+Z (raw byte or Kitty protocol).
97
+ * Ignores lock key bits.
98
+ */
99
+ export declare function isCtrlZ(data: string): boolean;
100
+ /**
101
+ * Check if input matches Alt+Backspace (legacy or Kitty protocol).
102
+ * Ignores lock key bits.
103
+ */
104
+ export declare function isAltBackspace(data: string): boolean;
105
+ /**
106
+ * Check if input matches Shift+Tab (legacy or Kitty protocol).
107
+ * Ignores lock key bits.
108
+ */
109
+ export declare function isShiftTab(data: string): boolean;
110
+ /**
111
+ * Check if input matches the Escape key (raw byte or Kitty protocol).
112
+ * Raw: \x1b (single byte)
113
+ * Kitty: \x1b[27u (codepoint 27 = escape)
114
+ * Ignores lock key bits.
115
+ */
116
+ export declare function isEscape(data: string): boolean;
117
+ /**
118
+ * Check if input matches Arrow Up key.
119
+ * Handles both legacy (\x1b[A) and Kitty protocol with modifiers.
120
+ */
121
+ export declare function isArrowUp(data: string): boolean;
122
+ /**
123
+ * Check if input matches Arrow Down key.
124
+ * Handles both legacy (\x1b[B) and Kitty protocol with modifiers.
125
+ */
126
+ export declare function isArrowDown(data: string): boolean;
127
+ /**
128
+ * Check if input matches Arrow Right key.
129
+ * Handles both legacy (\x1b[C) and Kitty protocol with modifiers.
130
+ */
131
+ export declare function isArrowRight(data: string): boolean;
132
+ /**
133
+ * Check if input matches Arrow Left key.
134
+ * Handles both legacy (\x1b[D) and Kitty protocol with modifiers.
135
+ */
136
+ export declare function isArrowLeft(data: string): boolean;
137
+ /**
138
+ * Check if input matches plain Tab key (no modifiers).
139
+ * Handles both legacy (\t) and Kitty protocol.
140
+ */
141
+ export declare function isTab(data: string): boolean;
142
+ /**
143
+ * Check if input matches plain Enter/Return key (no modifiers).
144
+ * Handles both legacy (\r) and Kitty protocol.
145
+ */
146
+ export declare function isEnter(data: string): boolean;
147
+ /**
148
+ * Check if input matches plain Backspace key (no modifiers).
149
+ * Handles both legacy (\x7f, \x08) and Kitty protocol.
150
+ */
151
+ export declare function isBackspace(data: string): boolean;
152
+ /**
153
+ * Check if input matches Shift+Enter.
154
+ * Ignores lock key bits.
155
+ */
156
+ export declare function isShiftEnter(data: string): boolean;
157
+ /**
158
+ * Check if input matches Alt+Enter.
159
+ * Ignores lock key bits.
160
+ */
161
+ export declare function isAltEnter(data: string): boolean;
162
+ /**
163
+ * Check if input matches Option/Alt+Left (word navigation).
164
+ * Handles multiple formats including Kitty protocol.
165
+ */
166
+ export declare function isAltLeft(data: string): boolean;
167
+ /**
168
+ * Check if input matches Option/Alt+Right (word navigation).
169
+ * Handles multiple formats including Kitty protocol.
170
+ */
171
+ export declare function isAltRight(data: string): boolean;
172
+ /**
173
+ * Check if input matches Ctrl+Left (word navigation).
174
+ * Handles multiple formats including Kitty protocol.
175
+ */
176
+ export declare function isCtrlLeft(data: string): boolean;
177
+ /**
178
+ * Check if input matches Ctrl+Right (word navigation).
179
+ * Handles multiple formats including Kitty protocol.
180
+ */
181
+ export declare function isCtrlRight(data: string): boolean;
182
+ /**
183
+ * Check if input matches Home key.
184
+ * Handles legacy formats and Kitty protocol with lock key modifiers.
185
+ */
186
+ export declare function isHome(data: string): boolean;
187
+ /**
188
+ * Check if input matches End key.
189
+ * Handles legacy formats and Kitty protocol with lock key modifiers.
190
+ */
191
+ export declare function isEnd(data: string): boolean;
192
+ /**
193
+ * Check if input matches Delete key (forward delete).
194
+ * Handles legacy format and Kitty protocol with lock key modifiers.
195
+ */
196
+ export declare function isDelete(data: string): boolean;
197
+ /**
198
+ * Check if input matches Page Up key.
199
+ * Handles legacy formats and Kitty protocol with lock key modifiers.
200
+ */
201
+ export declare function isPageUp(data: string): boolean;
202
+ /**
203
+ * Check if input matches Page Down key.
204
+ * Handles legacy formats and Kitty protocol with lock key modifiers.
205
+ */
206
+ export declare function isPageDown(data: string): boolean;
207
+ /**
208
+ * Check if key data represents navigation key (arrows, Tab, Shift+Tab).
209
+ */
210
+ export declare function isNavigationKey(keyData: string): boolean;
211
+ //# sourceMappingURL=keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../source/terminal/keys.ts"],"names":[],"mappings":"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"}