@travisennis/acai 0.0.6 → 0.0.7

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 (344) hide show
  1. package/README.md +186 -17
  2. package/bin/acai-wrapper.js +26 -0
  3. package/dist/agent/index.d.ts +15 -2
  4. package/dist/agent/index.d.ts.map +1 -1
  5. package/dist/agent/index.js +202 -174
  6. package/dist/api/exa/index.js +1 -1
  7. package/dist/cli.d.ts +2 -1
  8. package/dist/cli.d.ts.map +1 -1
  9. package/dist/cli.js +40 -7
  10. package/dist/commands/add-directory-command.d.ts +1 -1
  11. package/dist/commands/add-directory-command.d.ts.map +1 -1
  12. package/dist/commands/add-directory-command.js +1 -32
  13. package/dist/commands/application-log-command.d.ts +1 -1
  14. package/dist/commands/application-log-command.d.ts.map +1 -1
  15. package/dist/commands/application-log-command.js +2 -38
  16. package/dist/commands/clear-command.d.ts +1 -1
  17. package/dist/commands/clear-command.d.ts.map +1 -1
  18. package/dist/commands/clear-command.js +1 -5
  19. package/dist/commands/compact-command.d.ts.map +1 -1
  20. package/dist/commands/compact-command.js +0 -9
  21. package/dist/commands/context-command.d.ts +1 -1
  22. package/dist/commands/context-command.d.ts.map +1 -1
  23. package/dist/commands/context-command.js +13 -72
  24. package/dist/commands/copy-command.d.ts.map +1 -1
  25. package/dist/commands/copy-command.js +0 -19
  26. package/dist/commands/edit-command.d.ts +1 -1
  27. package/dist/commands/edit-command.d.ts.map +1 -1
  28. package/dist/commands/edit-command.js +3 -49
  29. package/dist/commands/edit-prompt-command.d.ts +1 -1
  30. package/dist/commands/edit-prompt-command.d.ts.map +1 -1
  31. package/dist/commands/edit-prompt-command.js +1 -26
  32. package/dist/commands/exit-command.d.ts +1 -4
  33. package/dist/commands/exit-command.d.ts.map +1 -1
  34. package/dist/commands/exit-command.js +2 -18
  35. package/dist/commands/files-command.d.ts +1 -1
  36. package/dist/commands/files-command.d.ts.map +1 -1
  37. package/dist/commands/files-command.js +1 -54
  38. package/dist/commands/generate-rules-command.d.ts +1 -1
  39. package/dist/commands/generate-rules-command.d.ts.map +1 -1
  40. package/dist/commands/generate-rules-command.js +18 -60
  41. package/dist/commands/handoff-command.d.ts.map +1 -1
  42. package/dist/commands/handoff-command.js +0 -11
  43. package/dist/commands/health-command.d.ts +1 -1
  44. package/dist/commands/health-command.d.ts.map +1 -1
  45. package/dist/commands/health-command.js +8 -103
  46. package/dist/commands/help-command.d.ts +1 -1
  47. package/dist/commands/help-command.d.ts.map +1 -1
  48. package/dist/commands/help-command.js +6 -14
  49. package/dist/commands/history-command.d.ts +1 -1
  50. package/dist/commands/history-command.d.ts.map +1 -1
  51. package/dist/commands/history-command.js +30 -106
  52. package/dist/commands/init-command.d.ts +1 -1
  53. package/dist/commands/init-command.d.ts.map +1 -1
  54. package/dist/commands/init-command.js +4 -23
  55. package/dist/commands/last-log-command.d.ts +1 -1
  56. package/dist/commands/last-log-command.d.ts.map +1 -1
  57. package/dist/commands/last-log-command.js +1 -28
  58. package/dist/commands/list-directories-command.d.ts +1 -1
  59. package/dist/commands/list-directories-command.d.ts.map +1 -1
  60. package/dist/commands/list-directories-command.js +1 -14
  61. package/dist/commands/list-tools-command.d.ts.map +1 -1
  62. package/dist/commands/list-tools-command.js +55 -78
  63. package/dist/commands/manager.d.ts +1 -8
  64. package/dist/commands/manager.d.ts.map +1 -1
  65. package/dist/commands/manager.js +7 -42
  66. package/dist/commands/model-command.d.ts +0 -22
  67. package/dist/commands/model-command.d.ts.map +1 -1
  68. package/dist/commands/model-command.js +5 -126
  69. package/dist/commands/paste-command.d.ts +1 -1
  70. package/dist/commands/paste-command.d.ts.map +1 -1
  71. package/dist/commands/paste-command.js +1 -79
  72. package/dist/commands/pickup-command.d.ts.map +1 -1
  73. package/dist/commands/pickup-command.js +3 -55
  74. package/dist/commands/prompt-command.d.ts +19 -1
  75. package/dist/commands/prompt-command.d.ts.map +1 -1
  76. package/dist/commands/prompt-command.js +172 -194
  77. package/dist/commands/remove-directory-command.d.ts +1 -1
  78. package/dist/commands/remove-directory-command.d.ts.map +1 -1
  79. package/dist/commands/remove-directory-command.js +1 -33
  80. package/dist/commands/reset-command.d.ts +1 -1
  81. package/dist/commands/reset-command.d.ts.map +1 -1
  82. package/dist/commands/reset-command.js +3 -11
  83. package/dist/commands/rules-command.d.ts +1 -1
  84. package/dist/commands/rules-command.d.ts.map +1 -1
  85. package/dist/commands/rules-command.js +1 -63
  86. package/dist/commands/save-command.d.ts +1 -1
  87. package/dist/commands/save-command.d.ts.map +1 -1
  88. package/dist/commands/save-command.js +1 -8
  89. package/dist/commands/shell-command.d.ts.map +1 -1
  90. package/dist/commands/shell-command.js +1 -48
  91. package/dist/commands/types.d.ts +0 -3
  92. package/dist/commands/types.d.ts.map +1 -1
  93. package/dist/commands/usage-command.d.ts +1 -1
  94. package/dist/commands/usage-command.d.ts.map +1 -1
  95. package/dist/commands/usage-command.js +5 -16
  96. package/dist/config.d.ts +17 -6
  97. package/dist/config.d.ts.map +1 -1
  98. package/dist/config.js +86 -53
  99. package/dist/execution/index.d.ts +17 -2
  100. package/dist/execution/index.d.ts.map +1 -1
  101. package/dist/execution/index.js +62 -20
  102. package/dist/formatting.d.ts +19 -0
  103. package/dist/formatting.d.ts.map +1 -1
  104. package/dist/formatting.js +54 -0
  105. package/dist/index.d.ts +1 -1
  106. package/dist/index.d.ts.map +1 -1
  107. package/dist/index.js +212 -153
  108. package/dist/messages.d.ts +3 -0
  109. package/dist/messages.d.ts.map +1 -1
  110. package/dist/messages.js +67 -3
  111. package/dist/models/anthropic-provider.d.ts.map +1 -1
  112. package/dist/models/anthropic-provider.js +0 -7
  113. package/dist/models/deepseek-provider.d.ts.map +1 -1
  114. package/dist/models/deepseek-provider.js +0 -2
  115. package/dist/models/google-provider.d.ts.map +1 -1
  116. package/dist/models/google-provider.js +0 -3
  117. package/dist/models/groq-provider.d.ts.map +1 -1
  118. package/dist/models/groq-provider.js +0 -1
  119. package/dist/models/openai-provider.d.ts.map +1 -1
  120. package/dist/models/openai-provider.js +0 -4
  121. package/dist/models/openrouter-provider.d.ts +10 -9
  122. package/dist/models/openrouter-provider.d.ts.map +1 -1
  123. package/dist/models/openrouter-provider.js +82 -88
  124. package/dist/models/providers.d.ts +4 -14
  125. package/dist/models/providers.d.ts.map +1 -1
  126. package/dist/models/providers.js +1 -57
  127. package/dist/models/xai-provider.d.ts.map +1 -1
  128. package/dist/models/xai-provider.js +0 -2
  129. package/dist/prompts.d.ts +9 -4
  130. package/dist/prompts.d.ts.map +1 -1
  131. package/dist/prompts.js +427 -99
  132. package/dist/repl/project-status-line.d.ts +1 -0
  133. package/dist/repl/project-status-line.d.ts.map +1 -1
  134. package/dist/repl/project-status-line.js +57 -27
  135. package/dist/repl-new.d.ts +0 -2
  136. package/dist/repl-new.d.ts.map +1 -1
  137. package/dist/repl-new.js +34 -54
  138. package/dist/skills.d.ts +20 -0
  139. package/dist/skills.d.ts.map +1 -0
  140. package/dist/skills.js +192 -0
  141. package/dist/terminal/control.d.ts +55 -0
  142. package/dist/terminal/control.d.ts.map +1 -0
  143. package/dist/terminal/control.js +109 -0
  144. package/dist/terminal/default-theme.d.ts +1 -1
  145. package/dist/terminal/default-theme.d.ts.map +1 -1
  146. package/dist/terminal/default-theme.js +24 -28
  147. package/dist/terminal/formatting.d.ts +23 -25
  148. package/dist/terminal/formatting.d.ts.map +1 -1
  149. package/dist/terminal/formatting.js +35 -52
  150. package/dist/terminal/highlight/index.d.ts.map +1 -1
  151. package/dist/terminal/highlight/index.js +3 -6
  152. package/dist/terminal/highlight/theme.d.ts.map +1 -1
  153. package/dist/terminal/highlight/theme.js +2 -6
  154. package/dist/terminal/index.d.ts +2 -101
  155. package/dist/terminal/index.d.ts.map +1 -1
  156. package/dist/terminal/index.js +2 -464
  157. package/dist/terminal/markdown.js +7 -5
  158. package/dist/terminal/strip-ansi.js +4 -4
  159. package/dist/terminal/table/cell.d.ts +114 -0
  160. package/dist/terminal/table/cell.d.ts.map +1 -0
  161. package/dist/terminal/table/cell.js +407 -0
  162. package/dist/terminal/table/debug.d.ts +15 -0
  163. package/dist/terminal/table/debug.d.ts.map +1 -0
  164. package/dist/terminal/table/debug.js +32 -0
  165. package/dist/terminal/table/index.d.ts +3 -0
  166. package/dist/terminal/table/index.d.ts.map +1 -0
  167. package/dist/terminal/table/index.js +2 -0
  168. package/dist/terminal/table/layout-manager.d.ts +27 -0
  169. package/dist/terminal/table/layout-manager.d.ts.map +1 -0
  170. package/dist/terminal/table/layout-manager.js +257 -0
  171. package/dist/terminal/table/table.d.ts +9 -0
  172. package/dist/terminal/table/table.d.ts.map +1 -0
  173. package/dist/terminal/table/table.js +97 -0
  174. package/dist/terminal/table/utils.d.ts +63 -0
  175. package/dist/terminal/table/utils.d.ts.map +1 -0
  176. package/dist/terminal/table/utils.js +326 -0
  177. package/dist/tokens/threshold.d.ts +6 -21
  178. package/dist/tokens/threshold.d.ts.map +1 -1
  179. package/dist/tokens/threshold.js +13 -31
  180. package/dist/tools/advanced-edit-file.d.ts.map +1 -1
  181. package/dist/tools/advanced-edit-file.js +5 -1
  182. package/dist/tools/agent.d.ts.map +1 -1
  183. package/dist/tools/agent.js +19 -5
  184. package/dist/tools/bash.d.ts +3 -1
  185. package/dist/tools/bash.d.ts.map +1 -1
  186. package/dist/tools/bash.js +204 -42
  187. package/dist/tools/batch.d.ts +34 -0
  188. package/dist/tools/batch.d.ts.map +1 -0
  189. package/dist/tools/batch.js +174 -0
  190. package/dist/tools/code-interpreter.d.ts.map +1 -1
  191. package/dist/tools/code-interpreter.js +25 -9
  192. package/dist/tools/delete-file.d.ts.map +1 -1
  193. package/dist/tools/delete-file.js +9 -2
  194. package/dist/tools/directory-tree.d.ts +0 -6
  195. package/dist/tools/directory-tree.d.ts.map +1 -1
  196. package/dist/tools/directory-tree.js +29 -18
  197. package/dist/tools/dynamic-tool-loader.d.ts +0 -4
  198. package/dist/tools/dynamic-tool-loader.d.ts.map +1 -1
  199. package/dist/tools/dynamic-tool-loader.js +2 -2
  200. package/dist/tools/edit-file.d.ts.map +1 -1
  201. package/dist/tools/edit-file.js +16 -3
  202. package/dist/tools/glob.d.ts.map +1 -1
  203. package/dist/tools/glob.js +24 -13
  204. package/dist/tools/grep.d.ts.map +1 -1
  205. package/dist/tools/grep.js +40 -25
  206. package/dist/tools/index.d.ts +17 -3
  207. package/dist/tools/index.d.ts.map +1 -1
  208. package/dist/tools/index.js +43 -1
  209. package/dist/tools/llm-edit-fixer.d.ts +0 -1
  210. package/dist/tools/llm-edit-fixer.d.ts.map +1 -1
  211. package/dist/tools/llm-edit-fixer.js +14 -28
  212. package/dist/tools/move-file.d.ts.map +1 -1
  213. package/dist/tools/move-file.js +8 -1
  214. package/dist/tools/read-file.d.ts.map +1 -1
  215. package/dist/tools/read-file.js +32 -23
  216. package/dist/tools/read-multiple-files.d.ts.map +1 -1
  217. package/dist/tools/read-multiple-files.js +102 -45
  218. package/dist/tools/save-file.d.ts +4 -4
  219. package/dist/tools/save-file.d.ts.map +1 -1
  220. package/dist/tools/save-file.js +20 -2
  221. package/dist/tools/think.d.ts.map +1 -1
  222. package/dist/tools/think.js +7 -1
  223. package/dist/tools/types.d.ts +5 -1
  224. package/dist/tools/types.d.ts.map +1 -1
  225. package/dist/tools/web-fetch.js +1 -1
  226. package/dist/tools/web-search.d.ts.map +1 -1
  227. package/dist/tools/web-search.js +24 -9
  228. package/dist/tui/components/assistant-message.js +1 -1
  229. package/dist/tui/components/box.d.ts +20 -0
  230. package/dist/tui/components/box.d.ts.map +1 -0
  231. package/dist/tui/components/box.js +81 -0
  232. package/dist/tui/components/editor.d.ts +60 -5
  233. package/dist/tui/components/editor.d.ts.map +1 -1
  234. package/dist/tui/components/editor.js +577 -115
  235. package/dist/tui/components/footer.d.ts +0 -12
  236. package/dist/tui/components/footer.d.ts.map +1 -1
  237. package/dist/tui/components/footer.js +19 -7
  238. package/dist/tui/components/header.d.ts +21 -0
  239. package/dist/tui/components/header.d.ts.map +1 -0
  240. package/dist/tui/components/header.js +63 -0
  241. package/dist/tui/components/loader.d.ts +5 -1
  242. package/dist/tui/components/loader.d.ts.map +1 -1
  243. package/dist/tui/components/loader.js +2 -2
  244. package/dist/tui/components/markdown.d.ts +26 -23
  245. package/dist/tui/components/markdown.d.ts.map +1 -1
  246. package/dist/tui/components/markdown.js +107 -54
  247. package/dist/tui/components/modal.d.ts +0 -11
  248. package/dist/tui/components/modal.d.ts.map +1 -1
  249. package/dist/tui/components/modal.js +0 -29
  250. package/dist/tui/components/progress-bar.d.ts +19 -0
  251. package/dist/tui/components/progress-bar.d.ts.map +1 -0
  252. package/dist/tui/components/progress-bar.js +78 -0
  253. package/dist/tui/components/prompt-status.d.ts +2 -1
  254. package/dist/tui/components/prompt-status.d.ts.map +1 -1
  255. package/dist/tui/components/prompt-status.js +7 -2
  256. package/dist/tui/components/select-list.d.ts +27 -1
  257. package/dist/tui/components/select-list.d.ts.map +1 -1
  258. package/dist/tui/components/select-list.js +93 -29
  259. package/dist/tui/components/spacer.d.ts +1 -1
  260. package/dist/tui/components/spacer.d.ts.map +1 -1
  261. package/dist/tui/components/spacer.js +2 -2
  262. package/dist/tui/components/table.d.ts +27 -0
  263. package/dist/tui/components/table.d.ts.map +1 -0
  264. package/dist/tui/components/table.js +125 -0
  265. package/dist/tui/components/thinking-block.d.ts.map +1 -1
  266. package/dist/tui/components/thinking-block.js +4 -1
  267. package/dist/tui/components/tool-execution.d.ts +8 -4
  268. package/dist/tui/components/tool-execution.d.ts.map +1 -1
  269. package/dist/tui/components/tool-execution.js +88 -80
  270. package/dist/tui/components/user-message.d.ts.map +1 -1
  271. package/dist/tui/components/user-message.js +6 -4
  272. package/dist/tui/index.d.ts +9 -5
  273. package/dist/tui/index.d.ts.map +1 -1
  274. package/dist/tui/index.js +5 -1
  275. package/dist/tui/terminal.d.ts +2 -1
  276. package/dist/tui/terminal.d.ts.map +1 -1
  277. package/dist/tui/terminal.js +28 -38
  278. package/dist/tui/tui.d.ts +2 -0
  279. package/dist/tui/tui.d.ts.map +1 -1
  280. package/dist/tui/tui.js +53 -33
  281. package/dist/tui/utils.d.ts +5 -0
  282. package/dist/tui/utils.d.ts.map +1 -1
  283. package/dist/tui/utils.js +81 -1
  284. package/dist/{tools/bash-utils.d.ts → utils/bash.d.ts} +3 -3
  285. package/dist/utils/bash.d.ts.map +1 -0
  286. package/dist/{tools/bash-utils.js → utils/bash.js} +22 -11
  287. package/dist/utils/{filesystem.d.ts → filesystem/operations.d.ts} +1 -1
  288. package/dist/utils/filesystem/operations.d.ts.map +1 -0
  289. package/dist/{tools/filesystem-utils.d.ts → utils/filesystem/security.d.ts} +3 -2
  290. package/dist/utils/filesystem/security.d.ts.map +1 -0
  291. package/dist/{tools/filesystem-utils.js → utils/filesystem/security.js} +62 -4
  292. package/dist/utils/funcs.d.ts +6 -0
  293. package/dist/utils/funcs.d.ts.map +1 -0
  294. package/dist/utils/funcs.js +6 -0
  295. package/dist/{tools/git-utils.d.ts → utils/git.d.ts} +1 -1
  296. package/dist/utils/git.d.ts.map +1 -0
  297. package/dist/{tools/git-utils.js → utils/git.js} +0 -6
  298. package/dist/utils/glob.js +1 -1
  299. package/dist/utils/{zod-utils.d.ts → zod.d.ts} +1 -1
  300. package/dist/utils/zod.d.ts.map +1 -0
  301. package/package.json +17 -17
  302. package/dist/agent/manual-loop.d.ts +0 -41
  303. package/dist/agent/manual-loop.d.ts.map +0 -1
  304. package/dist/agent/manual-loop.js +0 -278
  305. package/dist/repl/display-tool-messages.d.ts +0 -4
  306. package/dist/repl/display-tool-messages.d.ts.map +0 -1
  307. package/dist/repl/display-tool-messages.js +0 -58
  308. package/dist/repl/display-tool-use.d.ts +0 -14
  309. package/dist/repl/display-tool-use.d.ts.map +0 -1
  310. package/dist/repl/display-tool-use.js +0 -63
  311. package/dist/repl/get-prompt-header.d.ts +0 -8
  312. package/dist/repl/get-prompt-header.d.ts.map +0 -1
  313. package/dist/repl/get-prompt-header.js +0 -9
  314. package/dist/repl/prompt.d.ts +0 -21
  315. package/dist/repl/prompt.d.ts.map +0 -1
  316. package/dist/repl/prompt.js +0 -244
  317. package/dist/repl.d.ts +0 -29
  318. package/dist/repl.d.ts.map +0 -1
  319. package/dist/repl.js +0 -218
  320. package/dist/terminal/checkbox-prompt.d.ts +0 -36
  321. package/dist/terminal/checkbox-prompt.d.ts.map +0 -1
  322. package/dist/terminal/checkbox-prompt.js +0 -368
  323. package/dist/terminal/editor-prompt.d.ts +0 -10
  324. package/dist/terminal/editor-prompt.d.ts.map +0 -1
  325. package/dist/terminal/editor-prompt.js +0 -61
  326. package/dist/terminal/errors.d.ts +0 -19
  327. package/dist/terminal/errors.d.ts.map +0 -1
  328. package/dist/terminal/errors.js +0 -37
  329. package/dist/terminal/input-prompt.d.ts +0 -17
  330. package/dist/terminal/input-prompt.d.ts.map +0 -1
  331. package/dist/terminal/input-prompt.js +0 -181
  332. package/dist/terminal/search-prompt.d.ts +0 -20
  333. package/dist/terminal/search-prompt.d.ts.map +0 -1
  334. package/dist/terminal/search-prompt.js +0 -280
  335. package/dist/terminal/types.d.ts +0 -35
  336. package/dist/terminal/types.d.ts.map +0 -1
  337. package/dist/terminal/types.js +0 -1
  338. package/dist/tools/bash-utils.d.ts.map +0 -1
  339. package/dist/tools/filesystem-utils.d.ts.map +0 -1
  340. package/dist/tools/git-utils.d.ts.map +0 -1
  341. package/dist/utils/filesystem.d.ts.map +0 -1
  342. package/dist/utils/zod-utils.d.ts.map +0 -1
  343. /package/dist/utils/{filesystem.js → filesystem/operations.js} +0 -0
  344. /package/dist/utils/{zod-utils.js → zod.js} +0 -0
package/README.md CHANGED
@@ -10,27 +10,30 @@ Acai is a powerful **AI-driven command-line interface (CLI) tool** designed to a
10
10
 
11
11
  ### Core Functionality:
12
12
 
13
- * **Interactive AI Assistant:** Engage in a conversational REPL (Read-Eval-Print Loop) to get assistance with coding, debugging, refactoring, and more.
13
+ * **Interactive AI Assistant:** Engage in a conversational REPL (Read-Eval-Print Loop) or TUI (Terminal User Interface) to get assistance with coding, debugging, refactoring, and more.
14
14
  * **Codebase Interaction:** Read, edit, and navigate files; search code; and understand project structure.
15
15
  * **Git Integration:** Generate conventional commits, review pull requests, and manage local changes.
16
16
  * **Extensible Tooling:** Utilizes a suite of internal tools (e.g., `bash`, `codeInterpreter`, `webSearch`) to perform actions.
17
17
  * **Multi-Model Support:** Seamlessly switch between various AI providers (e.g., OpenAI, Google, Anthropic, DeepSeek, Groq, OpenRouter).
18
18
  * **Context Management:** Automatically incorporates relevant file content, clipboard data, and conversation history into AI prompts.
19
19
  * **Configurable & Learnable:** Customize behavior through project-specific rules and learn from user corrections.
20
+ * **Terminal User Interface:** Modern TUI with modal dialogs, autocomplete, and rich text formatting.
20
21
 
21
22
  ## ✨ Features
22
23
 
23
- * **Conversational REPL:** Intuitive command-line interface for interacting with the AI.
24
+ * **Conversational REPL/TUI:** Intuitive command-line interface and modern terminal UI for interacting with the AI.
24
25
  * **File System Operations:** Read, write, edit, move, and delete files.
25
26
  * **File & Directory Mentions:** Include file contents and entire directories in prompts using `@filename` and `@dirname` syntax.
26
- * **Code Navigation & Analysis:** Leverage Tree-sitter for intelligent code understanding.
27
+ * **Code Navigation & Analysis:** Advanced file searching and code analysis capabilities.
27
28
  * **Git Workflow Automation:** Streamline commit messages and code reviews.
28
29
  * **Web Integration:** Perform web searches and fetch content from URLs.
29
- * **Extensible Commands:** A rich set of built-in commands (`/files`, `/edit`, `/commit`, `/model`, `/help`, etc.).
30
+ * **Extensible Commands:** A rich set of built-in commands (`/help`, `/model`, `/usage`, `/list-tools`, etc.).
30
31
  * **Token Usage Tracking:** Monitor AI token consumption.
31
32
  * **Configurable AI Models:** Easily switch between different LLM providers and models.
32
- * **Shell Integration:** Execute shell commands inline using `!`command`` syntax.
33
+ * **Shell Integration:** Execute shell commands inline using `!`command`` syntax or via `/shell` command.
33
34
  * **Dynamic Tools:** Create and load custom tools from JavaScript files in your project or user directory.
35
+ * **Multi-workspace Support:** Work across multiple project directories simultaneously.
36
+ * **Skills System:** Discover and load specialized instruction files for specific tasks (PDF extraction, database migrations, etc.).
34
37
 
35
38
  ## 🛠️ Technologies Used
36
39
 
@@ -187,6 +190,12 @@ acai -p "What files contain the term 'toolCallRepair'?"
187
190
 
188
191
  # Pipe input
189
192
  echo "How many TypeScript files are in this project?" | acai
193
+
194
+ # Disable skills discovery
195
+ acai --no-skills
196
+
197
+ # Add additional working directories
198
+ acai --add-dir /path/to/project1 --add-dir /path/to/project2
190
199
  ```
191
200
 
192
201
  Once in the REPL, you can type your prompts or use commands:
@@ -216,6 +225,54 @@ You can reference files and directories directly in your prompts:
216
225
  - `@http://example.com` - Fetch and include web content
217
226
  - ``!`command` `` - Execute shell command and include output
218
227
 
228
+ ### Prompt Arguments
229
+
230
+ Pass dynamic values to commands using argument placeholders in custom prompts:
231
+
232
+ #### All arguments with `$ARGUMENTS`
233
+
234
+ The `$ARGUMENTS` placeholder captures all arguments passed to the command:
235
+
236
+ ```bash
237
+ # Command definition
238
+ echo 'Fix issue #$ARGUMENTS following our coding standards' > .acai/prompts/fix-issue.md
239
+
240
+ # Usage
241
+ > /fix-issue 123 high-priority
242
+ # $ARGUMENTS becomes: "123 high-priority"
243
+ ```
244
+
245
+ #### Individual arguments with `$1`, `$2`, `$3`, etc.
246
+
247
+ Access specific arguments individually using positional parameters (similar to shell scripts):
248
+
249
+ ```bash
250
+ # Command definition
251
+ echo 'Review PR #$1 with priority $2 and assign to $3' > .acai/prompts/review-pr.md
252
+
253
+ # Usage
254
+ > /review-pr 456 high alice
255
+ # $1 becomes "456", $2 becomes "high", $3 becomes "alice"
256
+ ```
257
+
258
+ Use positional arguments when you need to:
259
+ - Access arguments individually in different parts of your command
260
+ - Provide defaults for missing arguments
261
+ - Build more structured commands with specific parameter roles
262
+
263
+ #### Backward compatibility with `{{INPUT}}`
264
+
265
+ The legacy `{{INPUT}}` placeholder is still supported and works the same as `$ARGUMENTS`:
266
+
267
+ ```bash
268
+ # Command definition
269
+ echo 'Analyze the following code: {{INPUT}}' > .acai/prompts/analyze.md
270
+
271
+ # Usage
272
+ > /analyze src/file.ts
273
+ # {{INPUT}} becomes: "src/file.ts"
274
+ ```
275
+
219
276
  **Note:** Using `-p/--prompt` runs in CLI mode (one-shot execution), while running without a prompt starts interactive REPL mode.
220
277
 
221
278
  For a list of available commands, type `/help` within the REPL.
@@ -225,23 +282,27 @@ For a list of available commands, type `/help` within the REPL.
225
282
  - `/help` - Shows usage information
226
283
  - `/reset` - Saves chat history and resets the conversation
227
284
  - `/save` - Saves chat history
228
- - `/compact` - Saves, summarizes and resets the chat history
229
285
  - `/exit` or `/bye` - Exits and saves chat history
230
- - `/files [pattern]` - Select files interactively or by pattern, adding content to prompt
231
286
  - `/init` - Generate or improve `AGENTS.md`
232
- - `/editPrompt` - Edit the current prompt
233
287
  - `/paste` - Add clipboard contents to the next prompt
234
- - `/prompt <name>` - Load saved prompts. Project prompts override user prompts.
235
- - `/rules [view|add <text>|edit]` - View or edit persistent project rules/memories (formerly /memory)
288
+ - `/prompt <name> [arguments...]` - Load saved prompts with optional arguments. Project prompts override user prompts. Supports argument placeholders (`$ARGUMENTS`, `$1`, `$2`, etc.) in prompt files.
236
289
  - `/model [provider:model|category|provider]` - List or switch models
237
290
  - `/usage` - Show token usage breakdown
238
291
  - `/clear` - Clears the terminal screen for the current session
239
- - `/lastLog` - Show the last application log entries
240
- - `/appLog` - Show or follow the application log
241
292
  - `/generateRules` - Analyze the current conversation and suggest project rules
242
- - `/edit <path> "<change description>"` - Edit a file with AI assistance
243
293
  - `/copy` - Copy the last assistant response to the system clipboard
244
294
  - `/list-tools` or `/lt` - List all available static and dynamic tools
295
+ - `/add-dir <path>` - Add additional working directory
296
+ - `/list-dirs` - List all working directories
297
+ - `/remove-dir <path>` - Remove a working directory
298
+ - `/context` - Manage context selections
299
+ - `/health` - Check system health and dependencies
300
+ - `/history` - View and manage conversation history
301
+ - `/pickup` - Resume a previous conversation
302
+ - `/handoff` - Hand off conversation to another agent
303
+ - `/shell` - Execute shell commands
304
+
305
+ **Note**: Some commands mentioned in older documentation (like `/files`, `/edit`, `/compact`, `/rules`, `/lastLog`, `/appLog`) are currently disabled in the codebase.
245
306
 
246
307
  Clipboard notes:
247
308
  - macOS: uses `pbcopy`
@@ -465,6 +526,105 @@ Available tools:
465
526
  Total: 14 static, 2 dynamic
466
527
  ```
467
528
 
529
+ ## Skills System
530
+
531
+ Acai includes a powerful skills system that allows you to create and use specialized instruction files for specific tasks. Skills are markdown files with YAML frontmatter that provide detailed instructions for particular domains (e.g., database migrations, PDF extraction, code review).
532
+
533
+ ### How Skills Work
534
+
535
+ 1. **Discovery**: At startup, Acai scans multiple locations for skills
536
+ 2. **Listing**: Available skills are listed in the system prompt
537
+ 3. **On-demand loading**: When a task matches a skill's description, the agent uses the `read` tool to load the skill file
538
+ 4. **Execution**: The agent follows the instructions in the skill file
539
+
540
+ ### Skill File Format
541
+
542
+ Skills are markdown files named `SKILL.md` with YAML frontmatter:
543
+
544
+ ```markdown
545
+ ---
546
+ description: Extract text and tables from PDF files
547
+ name: pdf-extract # Optional, defaults to directory name
548
+ ---
549
+
550
+ # PDF Processing Instructions
551
+
552
+ 1. Use `pdftotext` to extract plain text
553
+ 2. For tables, use `tabula-py` or similar
554
+ 3. Always verify extraction quality
555
+
556
+ Scripts are in: {baseDir}/scripts/
557
+ Configuration: {baseDir}/config.json
558
+ ```
559
+
560
+ **Required fields:**
561
+ - `description`: Short description shown in system prompt
562
+
563
+ **Optional fields:**
564
+ - `name`: Override the skill name (defaults to directory name or colon-separated path)
565
+
566
+ **Placeholder:**
567
+ - `{baseDir}`: Replaced with the skill's base directory path
568
+
569
+ ### Skill Locations
570
+
571
+ Skills are loaded from these locations (later sources override earlier ones):
572
+
573
+ 1. `~/.codex/skills/**/SKILL.md` (Codex CLI user skills)
574
+ 2. `~/.claude/skills/*/SKILL.md` (Claude Code user skills)
575
+ 3. `<cwd>/.claude/skills/*/SKILL.md` (Claude Code project skills)
576
+ 4. `~/.acai/skills/**/SKILL.md` (Acai user skills)
577
+ 5. `<cwd>/.acai/skills/**/SKILL.md` (Acai project skills)
578
+
579
+ ### Directory Structure
580
+
581
+ Skills can be organized hierarchically with colon-separated names:
582
+
583
+ ```
584
+ ~/.acai/skills/
585
+ ├── pdf-extract/
586
+ │ ├── SKILL.md # Becomes "pdf-extract" skill
587
+ │ └── scripts/ # Optional: supporting files
588
+ ├── db/
589
+ │ └── migrate/
590
+ │ └── SKILL.md # Becomes "db:migrate" skill
591
+ └── aws/
592
+ └── s3/
593
+ └── upload/
594
+ └── SKILL.md # Becomes "aws:s3:upload" skill
595
+ ```
596
+
597
+ ### Compatibility
598
+
599
+ Acai's skills system is compatible with:
600
+ - **Pi Native Format**: `~/.acai/skills/**/SKILL.md` (recursive, colon-separated paths)
601
+ - **Claude Code Format**: `~/.claude/skills/*/SKILL.md` (single level only)
602
+ - **Codex CLI Format**: `~/.codex/skills/**/SKILL.md` (recursive, simple names)
603
+
604
+ ### Configuration
605
+
606
+ Skills are enabled by default. You can disable them via:
607
+
608
+ 1. **CLI flag**: `acai --no-skills`
609
+ 2. **Settings file**: Add to `~/.acai/acai.json` or `.acai/acai.json`:
610
+ ```json
611
+ {
612
+ "skills": {
613
+ "enabled": false
614
+ }
615
+ }
616
+ ```
617
+
618
+ ### Usage Example
619
+
620
+ 1. **Agent startup**: Scans all skill locations
621
+ 2. **System prompt**: Lists available skills
622
+ 3. **User request**: "Extract text from this PDF"
623
+ 4. **Agent matches**: Sees "pdf-extract: Extract text and tables from PDF files"
624
+ 5. **Skill loading**: Uses `read` tool to load `~/.acai/skills/pdf-extract/SKILL.md`
625
+ 6. **Placeholder substitution**: Replaces `{baseDir}` with skill directory path
626
+ 7. **Execution**: Follows instructions in skill file
627
+
468
628
  ## Configuration
469
629
 
470
630
  ### Project Configuration
@@ -479,6 +639,9 @@ Acai supports project-specific configuration through a `.acai/acai.json` file in
479
639
  "notify": true, // Optional: Enable system notifications (default: false)
480
640
  "tools": {
481
641
  "maxTokens": 30000 // Optional: Global max token limit for tools
642
+ },
643
+ "skills": {
644
+ "enabled": true // Optional: Enable/disable skills discovery (default: true)
482
645
  }
483
646
  }
484
647
  ```
@@ -486,7 +649,7 @@ Acai supports project-specific configuration through a `.acai/acai.json` file in
486
649
  ### Project-Specific Customization
487
650
 
488
651
  - **Rules/Guidelines**: Add project-specific AI behavior rules in `AGENTS.md`
489
- - **Custom Prompts**: Store reusable prompts in `.acai/prompts/`
652
+ - **Custom Prompts**: Store reusable prompts in `.acai/prompts/`. Supports argument placeholders (`$ARGUMENTS`, `$1`, `$2`, etc.) for dynamic content.
490
653
  - **Context Selections**: Save file/directory selections in `.acai/context/`
491
654
  - **Memory/Rules**: Persistent project rules stored in `.acai/rules/`
492
655
 
@@ -562,6 +725,7 @@ Here's a list of useful `npm` scripts for development:
562
725
  | `npm run knip` | Detects unused files, dependencies, and exports. |
563
726
  | `npm run check` | Interactively checks for and updates outdated npm packages. |
564
727
  | `npm run cpd` | Checks for copy-pasted code using `jscpd`. |
728
+ | `npm run typecheck` | Type checks the codebase without emitting files. |
565
729
 
566
730
  ### Code Structure
567
731
 
@@ -571,15 +735,20 @@ The project is organized as follows:
571
735
  .
572
736
  ├── .acai/ # Internal configuration, context, and temporary files
573
737
  ├── source/ # Main application source code
738
+ │ ├── agent/ # Agent loop and manual execution
739
+ │ ├── api/ # External API integrations (e.g., Exa)
574
740
  │ ├── cli.ts # CLI entry point
575
- │ ├── code-utils/ # Code parsing and navigation utilities (Tree-sitter)
576
- │ ├── commands/ # Implementations of REPL commands (e.g., /edit, /commit)
741
+ │ ├── commands/ # Implementations of REPL commands
742
+ │ ├── execution/ # Command execution utilities
577
743
  │ ├── middleware/ # AI request/response middleware (logging, rate limiting)
578
744
  │ ├── models/ # AI model providers and management
579
745
  │ ├── prompts/ # Prompt generation and management
746
+ │ ├── repl/ # REPL interface components
580
747
  │ ├── terminal/ # Terminal output formatting and rendering
748
+ │ ├── tui/ # Terminal User Interface components
581
749
  │ ├── tools/ # AI-callable tools (filesystem, git, web, bash, etc.)
582
- └── ... # Other core modules (config, logger, repl, token tracking)
750
+ ├── tokens/ # Token counting and tracking
751
+ │ └── utils/ # Utility functions
583
752
  ├── test/ # Unit tests
584
753
  ├── ARCHITECTURE.md # Detailed architectural overview and flow diagrams
585
754
  ├── AGENTS.md # Project-specific AI rules and guidelines
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env node --experimental-vm-modules
2
+
3
+ import { spawn } from 'node:child_process';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { dirname, resolve } from 'node:path';
6
+
7
+ const __filename = fileURLToPath(import.meta.url);
8
+ const __dirname = dirname(__filename);
9
+
10
+ // Path to the main entry point
11
+ const mainScript = resolve(__dirname, '../dist/index.js');
12
+
13
+ // Spawn the main script with the same arguments
14
+ const child = spawn(process.execPath, ['--experimental-vm-modules', mainScript, ...process.argv.slice(2)], {
15
+ stdio: 'inherit',
16
+ env: process.env,
17
+ });
18
+
19
+ child.on('error', (err) => {
20
+ console.error('Failed to start subprocess:', err);
21
+ process.exit(1);
22
+ });
23
+
24
+ child.on('exit', (code) => {
25
+ process.exit(code || 0);
26
+ });
@@ -4,7 +4,7 @@ import type { MessageHistory } from "../messages.ts";
4
4
  import type { ModelManager } from "../models/manager.ts";
5
5
  import type { ModelMetadata } from "../models/providers.ts";
6
6
  import type { TokenTracker } from "../tokens/tracker.ts";
7
- import type { CompleteToolSet } from "../tools/index.ts";
7
+ import type { CompleteToolNames, CompleteToolSet } from "../tools/index.ts";
8
8
  type AgentOptions = {
9
9
  modelManager: ModelManager;
10
10
  tokenTracker: TokenTracker;
@@ -17,6 +17,7 @@ type RunOptions = {
17
17
  systemPrompt: string;
18
18
  input: string;
19
19
  toolDefs: CompleteToolSet;
20
+ activeTools?: CompleteToolNames[];
20
21
  executors: Map<keyof CompleteToolSet, ToolExecuteFunction<unknown, string>>;
21
22
  abortSignal?: AbortSignal;
22
23
  };
@@ -26,6 +27,12 @@ export type ToolEvent = {
26
27
  toolCallId: string;
27
28
  msg: string;
28
29
  args: unknown;
30
+ } | {
31
+ type: "tool-call-init";
32
+ name: string;
33
+ toolCallId: string;
34
+ msg: string;
35
+ args: unknown;
29
36
  } | {
30
37
  type: "tool-call-update";
31
38
  name: string;
@@ -45,6 +52,11 @@ export type ToolEvent = {
45
52
  msg: string;
46
53
  args: unknown;
47
54
  };
55
+ type ToolCallLifeCycle = {
56
+ type: "tool-call-lifecycle";
57
+ toolCallId: string;
58
+ events: ToolEvent[];
59
+ };
48
60
  export type AgentEvent = {
49
61
  type: "agent-start";
50
62
  } | {
@@ -81,7 +93,7 @@ export type AgentEvent = {
81
93
  type: "message-end";
82
94
  role: "assistant";
83
95
  content: string;
84
- } | ToolEvent;
96
+ } | ToolCallLifeCycle;
85
97
  export type AgentState = {
86
98
  modelId: string;
87
99
  modelConfig: ModelMetadata;
@@ -114,6 +126,7 @@ export declare class Agent {
114
126
  run(args: RunOptions): AsyncGenerator<AgentEvent>;
115
127
  abort(): void;
116
128
  resetState(): AgentState;
129
+ private processToolEvent;
117
130
  }
118
131
  export {};
119
132
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/agent/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/agent/index.ts"],"names":[],"mappings":"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"}