@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
@@ -1,42 +0,0 @@
1
- import { Modal, Container as ModalContainer, ModalTable, ModalText, } from "../tui/index.js";
2
- export function usageCommand({ terminal, tokenTracker, }) {
3
- return {
4
- command: "/usage",
5
- description: "Show token usage breakdown",
6
- getSubCommands: () => Promise.resolve([]),
7
- async execute() {
8
- const entries = Object.entries(tokenTracker.getUsageBreakdown());
9
- if (entries.length === 0) {
10
- terminal.info("No usage yet.");
11
- }
12
- else {
13
- terminal.table(entries, {
14
- header: ["App", "Tokens"],
15
- colWidths: [30, 70],
16
- });
17
- }
18
- return "continue";
19
- },
20
- async handle(_args, { tui, editor }) {
21
- const entries = Object.entries(tokenTracker.getUsageBreakdown());
22
- // Build modal content
23
- const modalContent = new ModalContainer();
24
- if (entries.length === 0) {
25
- modalContent.addChild(new ModalText("No usage yet.", 0, 1));
26
- }
27
- else {
28
- // Convert entries to table format
29
- const tableData = entries.map(([app, tokens]) => [app, String(tokens)]);
30
- modalContent.addChild(new ModalTable(tableData, ["App", "Tokens"]));
31
- }
32
- // Create and show modal
33
- const modal = new Modal("Token Usage", modalContent, true, () => {
34
- // Modal closed callback
35
- editor.setText("");
36
- tui.requestRender();
37
- });
38
- tui.showModal(modal);
39
- return "continue";
40
- },
41
- };
42
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../source/messages.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,aAAa,CAAC;AAIvC,OAAO,EACL,KAAK,qBAAqB,EAE1B,KAAK,SAAS,EAAE,kBAAkB;AAClC,KAAK,YAAY,EAEjB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,IAAI,CAAC;AACZ,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,SAAS,CAAC;AAExD,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,sBAAsB,EAAE,EACtC,MAAM,CAAC,EAAE,MAAM,GACd,gBAAgB,CAuBlB;AAcD;;;GAGG;AACH,KAAK,eAAe,GAAG,qBAAqB,GAAG,gBAAgB,CAAC;AAEhE,KAAK,mBAAmB,GAAG;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B,CAAC;AAUF,UAAU,oBAAoB;IAC5B,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC;IACzB,eAAe,EAAE,EAAE,CAAC;CACrB;AAED,qBAAa,cAAe,SAAQ,YAAY,CAAC,oBAAoB,CAAC;IACpE,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,YAAY,CAAe;gBAEvB,EACV,QAAQ,EACR,YAAY,EACZ,YAAY,GACb,EAAE;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,YAAY,CAAC;QAC3B,YAAY,EAAE,YAAY,CAAC;KAC5B;IAaD,MAAM,CAAC,OAAO,EAAE,MAAM;IAStB,OAAO,CAAC,YAAY;IAoBpB,GAAG;IAIH,KAAK;IAKL,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IACpC,iBAAiB,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI;IAmB9C,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IACzC,sBAAsB,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI;IAOxD,kBAAkB,CAAC,kBAAkB,EAAE,gBAAgB,EAAE;IAKzD,sBAAsB,CAAC,gBAAgB,EAAE,eAAe,EAAE;IAO1D,OAAO;IAID,IAAI;YAoBI,aAAa;IA6B3B,mBAAmB,IAAI,gBAAgB,GAAG,SAAS;IAOnD,kBAAkB,IAAI,gBAAgB,GAAG,SAAS;IAOlD;;;OAGG;IACH,cAAc,IAAI,MAAM,GAAG,IAAI;WA2ClB,IAAI,CACf,QAAQ,EAAE,MAAM,EAChB,KAAK,SAAK,GACT,OAAO,CAAC,mBAAmB,EAAE,CAAC;IA6EjC,OAAO,CAAC,YAAY,EAAE,mBAAmB,GAAG,IAAI;CAajD"}
@@ -1,4 +0,0 @@
1
- import type { Terminal } from "../terminal/index.ts";
2
- import type { Message } from "../tools/types.ts";
3
- export declare function displayToolMessages(message: Message, terminal: Terminal): void;
4
- //# sourceMappingURL=display-tool-messages.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"display-tool-messages.d.ts","sourceRoot":"","sources":["../../source/repl/display-tool-messages.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,QAmBvE"}
@@ -1,58 +0,0 @@
1
- import { capitalize } from "../formatting.js";
2
- import { logger } from "../logger.js";
3
- import style from "../terminal/style.js";
4
- export function displayToolMessages(message, terminal) {
5
- switch (message.event) {
6
- case "tool-completion":
7
- handleToolCompletionMessage(message, terminal);
8
- break;
9
- case "tool-error":
10
- handleToolErrorMessage(message, terminal);
11
- break;
12
- case "tool-init":
13
- handleToolInitMessage(message, terminal);
14
- break;
15
- default:
16
- logger.debug(`Unhandled tool message event: ${message.event}`);
17
- break;
18
- }
19
- terminal.lineBreak();
20
- }
21
- function handleToolInitMessage(message, terminal) {
22
- const indicator = style.blue.bold("●");
23
- const data = String(message.data);
24
- const newlineIndex = data.indexOf("\n");
25
- terminal.write(`${indicator} ${style.bold(capitalize(message.name))} `);
26
- if (newlineIndex === -1) {
27
- terminal.writeln(style.bold(data));
28
- }
29
- else {
30
- const firstLine = data.slice(0, newlineIndex);
31
- const remainingLines = data.slice(newlineIndex + 1);
32
- terminal.writeln(style.bold(firstLine));
33
- if (remainingLines.trim()) {
34
- terminal.display(remainingLines);
35
- }
36
- }
37
- }
38
- function handleToolCompletionMessage(message, terminal) {
39
- const indicator = style.green.bold("●");
40
- const data = String(message.data);
41
- const newlineIndex = data.indexOf("\n");
42
- terminal.write(`${indicator} ${style.bold(capitalize(message.name))} `);
43
- if (newlineIndex === -1) {
44
- terminal.writeln(style.bold(data));
45
- }
46
- else {
47
- const firstLine = data.slice(0, newlineIndex);
48
- const remainingLines = data.slice(newlineIndex + 1);
49
- terminal.writeln(style.bold(firstLine));
50
- if (remainingLines.trim()) {
51
- terminal.display(remainingLines);
52
- }
53
- }
54
- }
55
- function handleToolErrorMessage(message, terminal) {
56
- const indicator = style.red.bold("●");
57
- terminal.writeln(`${indicator} ${style.bold(capitalize(message.name))} ${message.data}`);
58
- }
@@ -1,14 +0,0 @@
1
- import type { Terminal } from "../terminal/index.ts";
2
- interface MinimalStep {
3
- toolResults: Array<{
4
- toolName: string;
5
- }>;
6
- toolCalls: Array<{
7
- toolName: string;
8
- }>;
9
- }
10
- export declare function displayToolUse(result: {
11
- steps: MinimalStep[];
12
- }, terminal: Terminal): void;
13
- export {};
14
- //# sourceMappingURL=display-tool-use.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"display-tool-use.d.ts","sourceRoot":"","sources":["../../source/repl/display-tool-use.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAIrD,UAAU,WAAW;IACnB,WAAW,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzC,SAAS,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxC;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE;IAAE,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE,EAChC,QAAQ,EAAE,QAAQ,QA0EnB"}
@@ -1,63 +0,0 @@
1
- import style from "../terminal/style.js";
2
- export function displayToolUse(result, terminal) {
3
- const toolsCalled = [];
4
- const toolColors = new Map();
5
- const styleColors = [
6
- "red",
7
- "green",
8
- "yellow",
9
- "blue",
10
- "magenta",
11
- "cyan",
12
- "white",
13
- "gray",
14
- "redBright",
15
- "greenBright",
16
- "yellowBright",
17
- "blueBright",
18
- "magentaBright",
19
- "cyanBright",
20
- "whiteBright",
21
- "blackBright",
22
- ];
23
- terminal.writeln(style.dim(`Steps: ${result.steps.length}`));
24
- for (const step of result.steps) {
25
- let currentToolCalls = [];
26
- if (step.toolResults.length > 0) {
27
- currentToolCalls = step.toolResults;
28
- }
29
- else if (step.toolCalls.length > 0) {
30
- currentToolCalls = step.toolCalls;
31
- }
32
- for (const toolCallOrResult of currentToolCalls) {
33
- const toolName = toolCallOrResult.toolName;
34
- if (!toolColors.has(toolName)) {
35
- const availableColors = styleColors.filter((color) => !Array.from(toolColors.values()).some((c) => c === style[color]));
36
- const color = availableColors.length > 0
37
- ? (availableColors[Math.floor(Math.random() * availableColors.length)] ?? "white")
38
- : "white";
39
- toolColors.set(toolName, style[color]);
40
- }
41
- toolsCalled.push(toolName);
42
- }
43
- }
44
- if (toolsCalled.length > 0) {
45
- terminal.lineBreak();
46
- terminal.writeln(style.dim("Tools:"));
47
- for (const toolCalled of toolsCalled) {
48
- const colorFn = toolColors.get(toolCalled) ?? style.white;
49
- terminal.write(`${colorFn("██")} `);
50
- }
51
- terminal.lineBreak();
52
- const uniqueTools = new Set(toolsCalled);
53
- for (const [index, toolCalled] of Array.from(uniqueTools).entries()) {
54
- const colorFn = toolColors.get(toolCalled) ?? style.white;
55
- terminal.write(colorFn(toolCalled));
56
- if (index < new Set(toolsCalled).size - 1) {
57
- terminal.write(" - ");
58
- }
59
- }
60
- terminal.lineBreak();
61
- terminal.lineBreak();
62
- }
63
- }
@@ -1,8 +0,0 @@
1
- import type { Terminal } from "../terminal/index.ts";
2
- export declare function getPromptHeader(args: {
3
- terminal: Terminal;
4
- modelId: string;
5
- contextWindow: number;
6
- currentContextWindow: number;
7
- }): Promise<void>;
8
- //# sourceMappingURL=get-prompt-header.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-prompt-header.d.ts","sourceRoot":"","sources":["../../source/repl/get-prompt-header.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAIrD,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;CAC9B,GAAG,OAAO,CAAC,IAAI,CAAC,CAMhB"}
@@ -1,9 +0,0 @@
1
- import style from "../terminal/style.js";
2
- import { getProjectStatusLine } from "./project-status-line.js";
3
- export async function getPromptHeader(args) {
4
- const { terminal, modelId, contextWindow, currentContextWindow } = args;
5
- terminal.hr();
6
- terminal.writeln(await getProjectStatusLine());
7
- terminal.writeln(style.dim(modelId));
8
- terminal.displayProgressBar(currentContextWindow, contextWindow);
9
- }
@@ -1,2 +0,0 @@
1
- export declare function getProjectStatusLine(): Promise<string>;
2
- //# sourceMappingURL=project-status-line.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project-status-line.d.ts","sourceRoot":"","sources":["../../source/repl/project-status-line.ts"],"names":[],"mappings":"AASA,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,CA2B5D"}
@@ -1,31 +0,0 @@
1
- import style from "../terminal/style.js";
2
- import { getCurrentBranch, getDiffStat, getGitStatus, hasUncommittedChanges, inGitDirectory, } from "../tools/git-utils.js";
3
- export async function getProjectStatusLine() {
4
- const currentDir = process.cwd().split("/").pop() || process.cwd();
5
- const branch = await getCurrentBranch();
6
- let gitStatus = "";
7
- if (branch) {
8
- const hasChanges = await hasUncommittedChanges();
9
- const asterisk = hasChanges ? "*" : "";
10
- gitStatus = ` ${style.gray(branch + asterisk)}`;
11
- }
12
- if (await inGitDirectory()) {
13
- const stats = await getDiffStat();
14
- const fileChanges = await getGitStatus();
15
- let fileStatus = "";
16
- if (fileChanges.added)
17
- fileStatus += ` +${fileChanges.added}`;
18
- if (fileChanges.modified)
19
- fileStatus += ` ~${fileChanges.modified}`;
20
- if (fileChanges.deleted)
21
- fileStatus += ` -${fileChanges.deleted}`;
22
- if (fileChanges.untracked)
23
- fileStatus += ` ?${fileChanges.untracked}`;
24
- gitStatus +=
25
- " " +
26
- `${style.dim("[")}${style.yellow(fileStatus.trim())} ` +
27
- `${style.green(`+${stats.insertions}`)} ` +
28
- `${style.red(`-${stats.deletions}`)}${style.dim("]")}`;
29
- }
30
- return `${style.blue(currentDir)}${gitStatus}`;
31
- }
@@ -1,21 +0,0 @@
1
- import type { CommandManager } from "../commands/manager.ts";
2
- import type { WorkspaceContext } from "../index.ts";
3
- export declare class ReplPrompt {
4
- private keypressListener?;
5
- private rl;
6
- private history;
7
- private maxHistory;
8
- private pasteCounter;
9
- private pasteStore;
10
- constructor({ commands, history, workspace, }: {
11
- commands: CommandManager;
12
- history: string[];
13
- workspace: WorkspaceContext;
14
- });
15
- input(): Promise<string>;
16
- getPasteStore(): Map<number, string>;
17
- resetPasteStore(): void;
18
- close(): void;
19
- [Symbol.dispose](): void;
20
- }
21
- //# sourceMappingURL=prompt.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../source/repl/prompt.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAmKpD,qBAAa,UAAU;IAErB,OAAO,CAAC,gBAAgB,CAAC,CAAkC;IAC3D,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,OAAO,CAAW;IAC1B,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,UAAU,CAA6B;gBAEnC,EACV,QAAQ,EACR,OAAO,EACP,SAAS,GACV,EAAE;QACD,QAAQ,EAAE,cAAc,CAAC;QACzB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,SAAS,EAAE,gBAAgB,CAAC;KAC7B;IAwGK,KAAK;IAoBX,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAIpC,eAAe,IAAI,IAAI;IAKvB,KAAK;IAQL,CAAC,MAAM,CAAC,OAAO,CAAC;CAGjB"}
@@ -1,244 +0,0 @@
1
- import { readdir } from "node:fs/promises";
2
- import { parse, relative, resolve, sep } from "node:path";
3
- import { createInterface } from "node:readline/promises";
4
- import Clipboard from "@crosscopy/clipboard";
5
- import { asyncTry } from "@travisennis/stdlib/try";
6
- import { logger } from "../logger.js";
7
- const whitespaceRegex = /\s+/;
8
- // Cache for directory listings to improve performance
9
- class DirectoryCache {
10
- cache = new Map();
11
- ttl = 3000; // 3 seconds
12
- async get(dir) {
13
- const cached = this.cache.get(dir);
14
- if (cached && Date.now() - cached.timestamp < this.ttl) {
15
- return cached.entries;
16
- }
17
- return null;
18
- }
19
- set(dir, entries) {
20
- this.cache.set(dir, { entries, timestamp: Date.now() });
21
- }
22
- clear() {
23
- this.cache.clear();
24
- }
25
- }
26
- const directoryCache = new DirectoryCache();
27
- // Helper function to get directory entries with caching
28
- async function getDirectoryEntries(dir) {
29
- const cached = await directoryCache.get(dir);
30
- if (cached) {
31
- return cached;
32
- }
33
- const tryAttempt = await asyncTry(readdir(dir, { withFileTypes: true }));
34
- if (tryAttempt.isFailure) {
35
- return [];
36
- }
37
- const entries = tryAttempt.unwrap();
38
- directoryCache.set(dir, entries);
39
- return entries;
40
- }
41
- // Helper function to get completions from a specific directory
42
- async function getCompletionsFromDir(line, dir, workspace) {
43
- try {
44
- const words = line.split(" ");
45
- let last = words.at(-1);
46
- if (!last) {
47
- return [];
48
- }
49
- const isAt = last.startsWith("@");
50
- if (isAt) {
51
- last = last.slice(1);
52
- }
53
- let { dir: pathDir, base } = parse(last);
54
- // If pathDir is empty, use current directory
55
- if (!pathDir) {
56
- pathDir = ".";
57
- }
58
- // Resolve the path relative to the current directory
59
- const resolvedPath = resolve(dir, pathDir);
60
- // Check if resolved path is within any allowed directory
61
- const isWithinAllowed = workspace.allowedDirs.some((allowedDir) => resolvedPath.startsWith(allowedDir));
62
- if (!isWithinAllowed) {
63
- return [];
64
- }
65
- let dirEntries = await getDirectoryEntries(resolvedPath);
66
- // If we couldn't read the directory, try current directory
67
- if (dirEntries.length === 0 && pathDir !== ".") {
68
- dirEntries = await getDirectoryEntries(dir);
69
- pathDir = ".";
70
- }
71
- // For an exact match that is a directory, read the contents of the directory
72
- if (dirEntries.find((entry) => entry.name === base && entry.isDirectory())) {
73
- const newPath = pathDir === "/" || pathDir === sep
74
- ? `${pathDir}${base}`
75
- : `${pathDir}/${base}`;
76
- const newResolvedPath = resolve(dir, newPath);
77
- dirEntries = await getDirectoryEntries(newResolvedPath);
78
- base = "";
79
- pathDir = newPath;
80
- }
81
- else {
82
- dirEntries = dirEntries.filter((entry) => entry.name.startsWith(base));
83
- }
84
- const hits = dirEntries
85
- .filter((entry) => entry.isFile() || entry.isDirectory())
86
- .map((entry) => {
87
- const prefix = pathDir === "."
88
- ? ""
89
- : pathDir === sep || pathDir === "/"
90
- ? ""
91
- : `${pathDir}/`;
92
- const fullPath = `${prefix}${entry.name}${entry.isDirectory() && !entry.name.endsWith("/") ? "/" : ""}`;
93
- // Convert to relative path from primary directory for display
94
- const absolutePath = resolve(dir, fullPath);
95
- const relativePath = relative(workspace.primaryDir, absolutePath);
96
- return `${isAt ? "@" : ""}${relativePath.startsWith("..") ? relativePath : `./${relativePath}`}`;
97
- });
98
- return hits;
99
- }
100
- catch (_error) {
101
- return [];
102
- }
103
- }
104
- async function fileSystemCompleter(line, workspace) {
105
- try {
106
- const words = line.split(" ");
107
- let last = words.at(-1);
108
- if (!last) {
109
- return [[], line];
110
- }
111
- const isAt = last.startsWith("@");
112
- if (isAt) {
113
- last = last.slice(1);
114
- }
115
- // Search all directories in parallel
116
- const completionPromises = workspace.allowedDirs.map((dir) => getCompletionsFromDir(line, dir, workspace));
117
- const allResults = await Promise.all(completionPromises);
118
- const flattenedResults = allResults.flat();
119
- // Remove duplicates while preserving order
120
- const uniqueResults = [...new Set(flattenedResults)];
121
- return [uniqueResults, `${isAt ? "@" : ""}${last}`];
122
- }
123
- catch (_error) {
124
- logger.error(_error);
125
- return [[], line];
126
- }
127
- }
128
- export class ReplPrompt {
129
- // biome-ignore lint/suspicious/noExplicitAny: Keypress listener signature
130
- keypressListener;
131
- rl;
132
- history;
133
- maxHistory = 25;
134
- pasteCounter = 0;
135
- pasteStore = new Map();
136
- constructor({ commands, history, workspace, }) {
137
- this.history = history;
138
- this.rl = createInterface({
139
- input: process.stdin,
140
- output: process.stdout,
141
- history: this.history,
142
- historySize: this.maxHistory,
143
- completer: async (line) => {
144
- const completions = commands.getCommands();
145
- const words = line.trim().split(whitespaceRegex);
146
- const firstWord = words[0] ?? "";
147
- const rest = words.slice(1).join(" ") ?? "";
148
- const matchingCommands = completions.filter((c) => c.startsWith(firstWord));
149
- if (matchingCommands.length === 1 && rest !== "") {
150
- // Single command matched, try to get subcommands
151
- const subCompletions = await commands.getSubCommands(matchingCommands[0] ?? "");
152
- const hits = subCompletions.filter((sc) => sc.startsWith(rest) || rest === "*");
153
- if (hits.length > 0) {
154
- return [hits.map((h) => `${firstWord} ${h}`), line];
155
- }
156
- }
157
- if (matchingCommands.length > 0 &&
158
- (words.length === 1 || line.endsWith(" "))) {
159
- return [matchingCommands, line];
160
- }
161
- return fileSystemCompleter(line, workspace); // [completions, line];
162
- },
163
- });
164
- if (process.stdin.isTTY) {
165
- this.keypressListener = async (_str, key) => {
166
- // if (this.rl.closed) {
167
- // if (this.keypressListener) {
168
- // process.stdin.off("keypress", this.keypressListener);
169
- // this.keypressListener = undefined;
170
- // }
171
- // return;
172
- // }
173
- if (key?.ctrl && key.name === "v" && !key.meta && !key.shift) {
174
- try {
175
- const clipboardText = await Clipboard.getText();
176
- if (clipboardText) {
177
- const currentLine = this.rl.line;
178
- const cursorPos = this.rl.cursor;
179
- const beforeCursor = currentLine.substring(0, cursorPos);
180
- const afterCursor = currentLine.substring(cursorPos);
181
- let textToInsert;
182
- // Smart paste: use placeholder for text > 50 characters
183
- if (clipboardText.length > 50) {
184
- this.pasteCounter++;
185
- const pasteId = this.pasteCounter;
186
- this.pasteStore.set(pasteId, clipboardText);
187
- textToInsert = `[Paste #${pasteId}, ${clipboardText.length} characters]`;
188
- }
189
- else {
190
- textToInsert = clipboardText;
191
- }
192
- const newLine = beforeCursor + textToInsert + afterCursor;
193
- // biome-ignore lint/suspicious/noExplicitAny: Accessing internal readline method
194
- this.rl.line = newLine;
195
- // biome-ignore lint/suspicious/noExplicitAny: Accessing internal readline method
196
- this.rl.cursor = cursorPos + textToInsert.length;
197
- // biome-ignore lint/suspicious/noExplicitAny: Accessing internal readline method
198
- this.rl._refreshLine();
199
- }
200
- }
201
- catch (error) {
202
- logger.error(`Failed to paste from clipboard: ${error.message}`);
203
- }
204
- }
205
- };
206
- process.stdin.on("keypress", this.keypressListener);
207
- }
208
- }
209
- async input() {
210
- const input = await this.rl.question("> ");
211
- // The readline interface automatically adds the input to the history.
212
- // We need to handle two things:
213
- // 1. Don't save empty lines.
214
- // 2. Enforce max history size.
215
- if (!input.trim()) {
216
- // Last entry was this empty input, so remove it.
217
- this.history.pop();
218
- }
219
- else {
220
- // A valid command was added. Trim history if needed.
221
- while (this.history.length > this.maxHistory) {
222
- this.history.shift();
223
- }
224
- }
225
- return input;
226
- }
227
- getPasteStore() {
228
- return new Map(this.pasteStore);
229
- }
230
- resetPasteStore() {
231
- this.pasteCounter = 0;
232
- this.pasteStore.clear();
233
- }
234
- close() {
235
- if (this.keypressListener) {
236
- process.stdin.off("keypress", this.keypressListener);
237
- this.keypressListener = undefined;
238
- }
239
- this.rl.close();
240
- }
241
- [Symbol.dispose]() {
242
- this.close();
243
- }
244
- }
@@ -1,4 +0,0 @@
1
- import { type ToolCallRepairFunction, type ToolSet } from "ai";
2
- import type { ModelManager } from "../models/manager.js";
3
- export declare const toolCallRepair: (modelManager: ModelManager) => ToolCallRepairFunction<ToolSet>;
4
- //# sourceMappingURL=tool-call-repair.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool-call-repair.d.ts","sourceRoot":"","sources":["../../source/repl/tool-call-repair.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,sBAAsB,EAC3B,KAAK,OAAO,EACb,MAAM,IAAI,CAAC;AAIZ,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAoCzD,eAAO,MAAM,cAAc,GAAI,cAAc,YAAY,oCAmDxD,CAAC"}
@@ -1,54 +0,0 @@
1
- import { generateObject, NoSuchToolError, } from "ai";
2
- import { jsonrepair } from "jsonrepair";
3
- import { logger } from "../logger.js";
4
- async function remoteToolCallRepair(modelManager, toolCall, tool, inputSchema) {
5
- const { object: repairedArgs } = await generateObject({
6
- model: modelManager.getModel("tool-repair"),
7
- schema: tool.inputSchema,
8
- prompt: [
9
- `The model tried to call the tool "${toolCall.toolName}" with the following arguments:`,
10
- JSON.stringify(toolCall.input),
11
- "The tool accepts the following schema:",
12
- JSON.stringify(inputSchema(toolCall)),
13
- "Please fix the arguments.",
14
- ].join("\n"),
15
- });
16
- return { ...toolCall, input: JSON.stringify(repairedArgs) };
17
- }
18
- const localToolCallRepair = async (toolCall, tool) => {
19
- const schema = tool.inputSchema;
20
- const repairedArgs = jsonrepair(toolCall.input);
21
- const validatedArgs = schema.parse(JSON.parse(repairedArgs));
22
- return { ...toolCall, input: JSON.stringify(validatedArgs) };
23
- };
24
- export const toolCallRepair = (modelManager) => {
25
- const fn = async ({ toolCall, tools, inputSchema, error, }) => {
26
- if (NoSuchToolError.isInstance(error)) {
27
- return null;
28
- }
29
- logger.warn(`Attempting to repair tool call: ${toolCall.toolName}.`);
30
- const tool = tools[toolCall.toolName];
31
- if (typeof tool === "undefined") {
32
- logger.error(new Error("Tool not found"), `Failed to repair tool call: ${toolCall.toolName}.`);
33
- return null;
34
- }
35
- try {
36
- const repaired = await localToolCallRepair(toolCall, tool);
37
- logger.debug(`Tool call repaired with jsonrepair ${repaired.input}`);
38
- return repaired;
39
- }
40
- catch (err) {
41
- logger.error(err, `Failed to repair tool call locally: ${toolCall.toolName}.`);
42
- try {
43
- const repaired = await remoteToolCallRepair(modelManager, toolCall, tool, inputSchema);
44
- logger.debug(`Tool call repaired with remote repair ${repaired.input}`);
45
- return repaired;
46
- }
47
- catch (err2) {
48
- logger.error(err2, `Failed to repair tool call remotely: ${toolCall.toolName}.`);
49
- return null;
50
- }
51
- }
52
- };
53
- return fn;
54
- };
package/dist/repl.d.ts DELETED
@@ -1,29 +0,0 @@
1
- import type { CommandManager } from "./commands/manager.ts";
2
- import type { WorkspaceContext } from "./index.ts";
3
- import type { MessageHistory } from "./messages.ts";
4
- import type { ModelManager } from "./models/manager.ts";
5
- import type { PromptManager } from "./prompts/manager.ts";
6
- import type { Terminal } from "./terminal/index.ts";
7
- import type { TokenCounter } from "./tokens/counter.ts";
8
- import type { TokenTracker } from "./tokens/tracker.ts";
9
- interface ReplOptions {
10
- messageHistory: MessageHistory;
11
- promptManager: PromptManager;
12
- modelManager: ModelManager;
13
- tokenTracker: TokenTracker;
14
- terminal: Terminal;
15
- commands: CommandManager;
16
- config: Record<PropertyKey, unknown>;
17
- tokenCounter: TokenCounter;
18
- showLastMessage: boolean;
19
- promptHistory: string[];
20
- workspace: WorkspaceContext;
21
- }
22
- export declare class Repl {
23
- private options;
24
- private showLastMessage;
25
- constructor(options: ReplOptions);
26
- run(): Promise<void>;
27
- }
28
- export {};
29
- //# sourceMappingURL=repl.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../source/repl.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAM1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,UAAU,WAAW;IACnB,cAAc,EAAE,cAAc,CAAC;IAC/B,aAAa,EAAE,aAAa,CAAC;IAC7B,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACrC,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,gBAAgB,CAAC;CAC7B;AAED,qBAAa,IAAI;IACf,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,eAAe,CAAU;gBAErB,OAAO,EAAE,WAAW;IAK1B,GAAG;CA0PV"}