@travisennis/acai 0.0.7 → 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 (471) hide show
  1. package/README.md +42 -25
  2. package/dist/agent/index.d.ts +21 -25
  3. package/dist/agent/index.d.ts.map +1 -1
  4. package/dist/agent/index.js +115 -104
  5. package/dist/cli.d.ts +2 -2
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +21 -16
  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-command.js → add-directory/index.js} +6 -10
  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/types.js +1 -0
  14. package/dist/commands/add-directory/utils.d.ts +3 -0
  15. package/dist/commands/add-directory/utils.d.ts.map +1 -0
  16. package/dist/commands/add-directory/utils.js +15 -0
  17. package/dist/commands/clear/index.d.ts +3 -0
  18. package/dist/commands/clear/index.d.ts.map +1 -0
  19. package/dist/commands/{clear-command.js → clear/index.js} +0 -2
  20. package/dist/commands/copy/index.d.ts +3 -0
  21. package/dist/commands/copy/index.d.ts.map +1 -0
  22. package/dist/commands/{copy-command.js → copy/index.js} +4 -26
  23. package/dist/commands/copy/types.d.ts +3 -0
  24. package/dist/commands/copy/types.d.ts.map +1 -0
  25. package/dist/commands/copy/types.js +1 -0
  26. package/dist/commands/copy/utils.d.ts +3 -0
  27. package/dist/commands/copy/utils.d.ts.map +1 -0
  28. package/dist/commands/copy/utils.js +22 -0
  29. package/dist/commands/{exit-command.d.ts → exit/index.d.ts} +4 -4
  30. package/dist/commands/exit/index.d.ts.map +1 -0
  31. package/dist/commands/exit/index.js +21 -0
  32. package/dist/commands/exit/types.d.ts +8 -0
  33. package/dist/commands/exit/types.d.ts.map +1 -0
  34. package/dist/commands/exit/types.js +1 -0
  35. package/dist/commands/exit/utils.d.ts +2 -0
  36. package/dist/commands/exit/utils.d.ts.map +1 -0
  37. package/dist/commands/exit/utils.js +13 -0
  38. package/dist/commands/generate-rules/index.d.ts +3 -0
  39. package/dist/commands/generate-rules/index.d.ts.map +1 -0
  40. package/dist/commands/{generate-rules-command.js → generate-rules/index.js} +55 -95
  41. package/dist/commands/generate-rules/utils.d.ts +5 -0
  42. package/dist/commands/generate-rules/utils.d.ts.map +1 -0
  43. package/dist/commands/generate-rules/utils.js +25 -0
  44. package/dist/commands/handoff/index.d.ts +3 -0
  45. package/dist/commands/handoff/index.d.ts.map +1 -0
  46. package/dist/commands/handoff/index.js +97 -0
  47. package/dist/commands/handoff/utils.d.ts +4 -0
  48. package/dist/commands/handoff/utils.d.ts.map +1 -0
  49. package/dist/commands/{handoff-command.js → handoff/utils.js} +24 -92
  50. package/dist/commands/health/index.d.ts +3 -0
  51. package/dist/commands/health/index.d.ts.map +1 -0
  52. package/dist/commands/health/index.js +56 -0
  53. package/dist/commands/health/utils.d.ts +15 -0
  54. package/dist/commands/health/utils.d.ts.map +1 -0
  55. package/dist/commands/health/utils.js +52 -0
  56. package/dist/commands/{help-command.d.ts → help/index.d.ts} +2 -2
  57. package/dist/commands/help/index.d.ts.map +1 -0
  58. package/dist/commands/{help-command.js → help/index.js} +1 -1
  59. package/dist/commands/history/index.d.ts +3 -0
  60. package/dist/commands/history/index.d.ts.map +1 -0
  61. package/dist/commands/{history-command.js → history/index.js} +16 -100
  62. package/dist/commands/history/types.d.ts +11 -0
  63. package/dist/commands/history/types.d.ts.map +1 -0
  64. package/dist/commands/history/types.js +1 -0
  65. package/dist/commands/history/utils.d.ts +4 -0
  66. package/dist/commands/history/utils.d.ts.map +1 -0
  67. package/dist/commands/history/utils.js +86 -0
  68. package/dist/commands/init/index.d.ts +3 -0
  69. package/dist/commands/init/index.d.ts.map +1 -0
  70. package/dist/commands/{init-command.js → init/index.js} +16 -7
  71. package/dist/commands/init-project/index.d.ts +3 -0
  72. package/dist/commands/init-project/index.d.ts.map +1 -0
  73. package/dist/commands/init-project/index.js +51 -0
  74. package/dist/commands/init-project/utils.d.ts +9 -0
  75. package/dist/commands/init-project/utils.d.ts.map +1 -0
  76. package/dist/commands/init-project/utils.js +43 -0
  77. package/dist/commands/list-directories/index.d.ts +3 -0
  78. package/dist/commands/list-directories/index.d.ts.map +1 -0
  79. package/dist/commands/{list-directories-command.js → list-directories/index.js} +1 -1
  80. package/dist/commands/list-tools/index.d.ts +3 -0
  81. package/dist/commands/list-tools/index.d.ts.map +1 -0
  82. package/dist/commands/{list-tools-command.js → list-tools/index.js} +4 -16
  83. package/dist/commands/manager.d.ts +2 -2
  84. package/dist/commands/manager.d.ts.map +1 -1
  85. package/dist/commands/manager.js +33 -43
  86. package/dist/commands/model/index.d.ts +3 -0
  87. package/dist/commands/model/index.d.ts.map +1 -0
  88. package/dist/commands/{model-command.js → model/index.js} +15 -52
  89. package/dist/commands/model/utils.d.ts +3 -0
  90. package/dist/commands/model/utils.d.ts.map +1 -0
  91. package/dist/commands/model/utils.js +5 -0
  92. package/dist/commands/{paste-command.d.ts → paste/index.d.ts} +2 -2
  93. package/dist/commands/paste/index.d.ts.map +1 -0
  94. package/dist/commands/{paste-command.js → paste/index.js} +6 -111
  95. package/dist/commands/paste/utils.d.ts +5 -0
  96. package/dist/commands/paste/utils.d.ts.map +1 -0
  97. package/dist/commands/paste/utils.js +86 -0
  98. package/dist/commands/pickup/index.d.ts +3 -0
  99. package/dist/commands/pickup/index.d.ts.map +1 -0
  100. package/dist/commands/pickup/index.js +138 -0
  101. package/dist/commands/pickup/types.d.ts +6 -0
  102. package/dist/commands/pickup/types.d.ts.map +1 -0
  103. package/dist/commands/pickup/types.js +1 -0
  104. package/dist/commands/pickup/utils.d.ts +7 -0
  105. package/dist/commands/pickup/utils.d.ts.map +1 -0
  106. package/dist/commands/pickup/utils.js +56 -0
  107. package/dist/commands/prompt/index.d.ts +5 -0
  108. package/dist/commands/prompt/index.d.ts.map +1 -0
  109. package/dist/commands/prompt/index.js +126 -0
  110. package/dist/commands/prompt/types.d.ts +15 -0
  111. package/dist/commands/prompt/types.d.ts.map +1 -0
  112. package/dist/commands/prompt/types.js +1 -0
  113. package/dist/commands/prompt/utils.d.ts +12 -0
  114. package/dist/commands/prompt/utils.d.ts.map +1 -0
  115. package/dist/commands/prompt/utils.js +107 -0
  116. package/dist/commands/remove-directory/index.d.ts +3 -0
  117. package/dist/commands/remove-directory/index.d.ts.map +1 -0
  118. package/dist/commands/{remove-directory-command.js → remove-directory/index.js} +2 -2
  119. package/dist/commands/reset/index.d.ts +3 -0
  120. package/dist/commands/reset/index.d.ts.map +1 -0
  121. package/dist/commands/{reset-command.js → reset/index.js} +7 -2
  122. package/dist/commands/reset/types.d.ts +1 -0
  123. package/dist/commands/reset/types.d.ts.map +1 -0
  124. package/dist/commands/reset/types.js +3 -0
  125. package/dist/commands/resources/index.d.ts +3 -0
  126. package/dist/commands/resources/index.d.ts.map +1 -0
  127. package/dist/commands/resources/index.js +84 -0
  128. package/dist/commands/review/index.d.ts +3 -0
  129. package/dist/commands/review/index.d.ts.map +1 -0
  130. package/dist/commands/review/index.js +126 -0
  131. package/dist/commands/review/types.d.ts +12 -0
  132. package/dist/commands/review/types.d.ts.map +1 -0
  133. package/dist/commands/review/types.js +1 -0
  134. package/dist/commands/review/utils.d.ts +4 -0
  135. package/dist/commands/review/utils.d.ts.map +1 -0
  136. package/dist/commands/review/utils.js +87 -0
  137. package/dist/commands/save/index.d.ts +3 -0
  138. package/dist/commands/save/index.d.ts.map +1 -0
  139. package/dist/commands/{save-command.js → save/index.js} +3 -3
  140. package/dist/commands/session/index.d.ts +3 -0
  141. package/dist/commands/session/index.d.ts.map +1 -0
  142. package/dist/commands/session/index.js +197 -0
  143. package/dist/commands/session/types.d.ts +13 -0
  144. package/dist/commands/session/types.d.ts.map +1 -0
  145. package/dist/commands/session/types.js +7 -0
  146. package/dist/commands/shell/index.d.ts +3 -0
  147. package/dist/commands/shell/index.d.ts.map +1 -0
  148. package/dist/commands/{shell-command.js → shell/index.js} +3 -3
  149. package/dist/commands/types.d.ts +2 -2
  150. package/dist/commands/types.d.ts.map +1 -1
  151. package/dist/config.d.ts +25 -7
  152. package/dist/config.d.ts.map +1 -1
  153. package/dist/config.js +45 -20
  154. package/dist/dedent.d.ts.map +1 -1
  155. package/dist/dedent.js +7 -7
  156. package/dist/execution/index.d.ts +1 -0
  157. package/dist/execution/index.d.ts.map +1 -1
  158. package/dist/execution/index.js +60 -64
  159. package/dist/formatting.d.ts +27 -0
  160. package/dist/formatting.d.ts.map +1 -1
  161. package/dist/formatting.js +40 -0
  162. package/dist/index.d.ts.map +1 -1
  163. package/dist/index.js +138 -75
  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/deepseek-provider.d.ts +9 -8
  182. package/dist/models/deepseek-provider.d.ts.map +1 -1
  183. package/dist/models/google-provider.d.ts +10 -9
  184. package/dist/models/google-provider.d.ts.map +1 -1
  185. package/dist/models/groq-provider.d.ts +8 -7
  186. package/dist/models/groq-provider.d.ts.map +1 -1
  187. package/dist/models/manager.d.ts +7 -4
  188. package/dist/models/manager.d.ts.map +1 -1
  189. package/dist/models/manager.js +5 -25
  190. package/dist/models/openai-provider.d.ts +11 -10
  191. package/dist/models/openai-provider.d.ts.map +1 -1
  192. package/dist/models/opencode-zen-provider.d.ts +23 -0
  193. package/dist/models/opencode-zen-provider.d.ts.map +1 -0
  194. package/dist/models/opencode-zen-provider.js +76 -0
  195. package/dist/models/openrouter-provider.d.ts +34 -29
  196. package/dist/models/openrouter-provider.d.ts.map +1 -1
  197. package/dist/models/openrouter-provider.js +95 -80
  198. package/dist/models/providers.d.ts +4 -4
  199. package/dist/models/providers.d.ts.map +1 -1
  200. package/dist/models/providers.js +7 -1
  201. package/dist/models/xai-provider.d.ts +9 -8
  202. package/dist/models/xai-provider.d.ts.map +1 -1
  203. package/dist/prompts/manager.d.ts +1 -1
  204. package/dist/prompts/manager.d.ts.map +1 -1
  205. package/dist/prompts/manager.js +1 -1
  206. package/dist/prompts.d.ts +0 -1
  207. package/dist/prompts.d.ts.map +1 -1
  208. package/dist/prompts.js +56 -406
  209. package/dist/repl/project-status.d.ts +19 -0
  210. package/dist/repl/project-status.d.ts.map +1 -0
  211. package/dist/repl/project-status.js +78 -0
  212. package/dist/repl-new.d.ts +15 -4
  213. package/dist/repl-new.d.ts.map +1 -1
  214. package/dist/repl-new.js +245 -42
  215. package/dist/{messages.d.ts → sessions/manager.d.ts} +10 -4
  216. package/dist/sessions/manager.d.ts.map +1 -0
  217. package/dist/{messages.js → sessions/manager.js} +60 -14
  218. package/dist/skills.d.ts +0 -4
  219. package/dist/skills.d.ts.map +1 -1
  220. package/dist/skills.js +100 -59
  221. package/dist/terminal/control.d.ts +1 -0
  222. package/dist/terminal/control.d.ts.map +1 -1
  223. package/dist/terminal/control.js +2 -0
  224. package/dist/terminal/formatting.d.ts +1 -2
  225. package/dist/terminal/formatting.d.ts.map +1 -1
  226. package/dist/terminal/formatting.js +1 -2
  227. package/dist/terminal/keys.d.ts +211 -0
  228. package/dist/terminal/keys.d.ts.map +1 -0
  229. package/dist/terminal/keys.js +546 -0
  230. package/dist/terminal/segmenter.d.ts +6 -0
  231. package/dist/terminal/segmenter.d.ts.map +1 -0
  232. package/dist/terminal/segmenter.js +11 -0
  233. package/dist/terminal/select-prompt.d.ts.map +1 -1
  234. package/dist/terminal/select-prompt.js +9 -21
  235. package/dist/terminal/string-width.d.ts.map +1 -1
  236. package/dist/terminal/string-width.js +40 -21
  237. package/dist/terminal/strip-ansi.d.ts.map +1 -1
  238. package/dist/terminal/strip-ansi.js +9 -15
  239. package/dist/tokens/tracker.d.ts.map +1 -1
  240. package/dist/tokens/tracker.js +58 -16
  241. package/dist/tools/bash.d.ts +9 -11
  242. package/dist/tools/bash.d.ts.map +1 -1
  243. package/dist/tools/bash.js +69 -123
  244. package/dist/tools/directory-tree.d.ts +9 -7
  245. package/dist/tools/directory-tree.d.ts.map +1 -1
  246. package/dist/tools/directory-tree.js +89 -70
  247. package/dist/tools/dynamic-tool-loader.d.ts +22 -4
  248. package/dist/tools/dynamic-tool-loader.d.ts.map +1 -1
  249. package/dist/tools/dynamic-tool-loader.js +39 -44
  250. package/dist/tools/edit-file.d.ts +6 -16
  251. package/dist/tools/edit-file.d.ts.map +1 -1
  252. package/dist/tools/edit-file.js +19 -76
  253. package/dist/tools/glob.d.ts +15 -16
  254. package/dist/tools/glob.d.ts.map +1 -1
  255. package/dist/tools/glob.js +77 -119
  256. package/dist/tools/grep.d.ts +19 -22
  257. package/dist/tools/grep.d.ts.map +1 -1
  258. package/dist/tools/grep.js +61 -108
  259. package/dist/tools/index.d.ts +200 -179
  260. package/dist/tools/index.d.ts.map +1 -1
  261. package/dist/tools/index.js +17 -315
  262. package/dist/tools/ls.d.ts +26 -0
  263. package/dist/tools/ls.d.ts.map +1 -0
  264. package/dist/tools/ls.js +80 -0
  265. package/dist/tools/read-file.d.ts +15 -15
  266. package/dist/tools/read-file.d.ts.map +1 -1
  267. package/dist/tools/read-file.js +49 -82
  268. package/dist/tools/save-file.d.ts +4 -4
  269. package/dist/tools/save-file.d.ts.map +1 -1
  270. package/dist/tools/save-file.js +37 -66
  271. package/dist/tools/think.d.ts +4 -4
  272. package/dist/tools/think.d.ts.map +1 -1
  273. package/dist/tools/think.js +9 -38
  274. package/dist/tools/types.d.ts +5 -25
  275. package/dist/tools/types.d.ts.map +1 -1
  276. package/dist/tools/types.js +0 -9
  277. package/dist/tui/autocomplete/attachment-provider.d.ts +18 -0
  278. package/dist/tui/autocomplete/attachment-provider.d.ts.map +1 -0
  279. package/dist/tui/autocomplete/attachment-provider.js +159 -0
  280. package/dist/tui/autocomplete/base-provider.d.ts +17 -0
  281. package/dist/tui/autocomplete/base-provider.d.ts.map +1 -0
  282. package/dist/tui/autocomplete/base-provider.js +1 -0
  283. package/dist/tui/autocomplete/combined-provider.d.ts +20 -0
  284. package/dist/tui/autocomplete/combined-provider.d.ts.map +1 -0
  285. package/dist/tui/autocomplete/combined-provider.js +61 -0
  286. package/dist/tui/autocomplete/command-provider.d.ts +20 -0
  287. package/dist/tui/autocomplete/command-provider.d.ts.map +1 -0
  288. package/dist/tui/autocomplete/command-provider.js +90 -0
  289. package/dist/tui/autocomplete/file-search-provider.d.ts +16 -0
  290. package/dist/tui/autocomplete/file-search-provider.d.ts.map +1 -0
  291. package/dist/tui/autocomplete/file-search-provider.js +123 -0
  292. package/dist/tui/autocomplete/path-provider.d.ts +21 -0
  293. package/dist/tui/autocomplete/path-provider.d.ts.map +1 -0
  294. package/dist/tui/autocomplete/path-provider.js +164 -0
  295. package/dist/tui/autocomplete/utils.d.ts +16 -0
  296. package/dist/tui/autocomplete/utils.d.ts.map +1 -0
  297. package/dist/tui/autocomplete/utils.js +137 -0
  298. package/dist/tui/autocomplete.d.ts +12 -43
  299. package/dist/tui/autocomplete.d.ts.map +1 -1
  300. package/dist/tui/autocomplete.js +20 -465
  301. package/dist/tui/components/box.d.ts.map +1 -1
  302. package/dist/tui/components/box.js +16 -10
  303. package/dist/tui/components/editor.d.ts +1 -2
  304. package/dist/tui/components/editor.d.ts.map +1 -1
  305. package/dist/tui/components/editor.js +148 -107
  306. package/dist/tui/components/footer.d.ts +20 -7
  307. package/dist/tui/components/footer.d.ts.map +1 -1
  308. package/dist/tui/components/footer.js +89 -196
  309. package/dist/tui/components/input.d.ts.map +1 -1
  310. package/dist/tui/components/input.js +8 -7
  311. package/dist/tui/components/loader.d.ts +2 -1
  312. package/dist/tui/components/loader.d.ts.map +1 -1
  313. package/dist/tui/components/loader.js +7 -2
  314. package/dist/tui/components/markdown.d.ts +5 -4
  315. package/dist/tui/components/markdown.d.ts.map +1 -1
  316. package/dist/tui/components/markdown.js +51 -40
  317. package/dist/tui/components/modal.d.ts.map +1 -1
  318. package/dist/tui/components/modal.js +9 -8
  319. package/dist/tui/components/notification.d.ts +28 -0
  320. package/dist/tui/components/notification.d.ts.map +1 -0
  321. package/dist/tui/components/notification.js +63 -0
  322. package/dist/tui/components/progress-bar.d.ts.map +1 -1
  323. package/dist/tui/components/progress-bar.js +3 -15
  324. package/dist/tui/components/select-list.d.ts +0 -15
  325. package/dist/tui/components/select-list.d.ts.map +1 -1
  326. package/dist/tui/components/select-list.js +5 -28
  327. package/dist/tui/components/tool-execution.d.ts +3 -6
  328. package/dist/tui/components/tool-execution.d.ts.map +1 -1
  329. package/dist/tui/components/tool-execution.js +26 -38
  330. package/dist/tui/components/welcome.d.ts +8 -1
  331. package/dist/tui/components/welcome.d.ts.map +1 -1
  332. package/dist/tui/components/welcome.js +45 -6
  333. package/dist/tui/index.d.ts +4 -2
  334. package/dist/tui/index.d.ts.map +1 -1
  335. package/dist/tui/index.js +2 -2
  336. package/dist/tui/terminal.d.ts +2 -2
  337. package/dist/tui/terminal.d.ts.map +1 -1
  338. package/dist/tui/terminal.js +23 -19
  339. package/dist/tui/tui.d.ts +1 -0
  340. package/dist/tui/tui.d.ts.map +1 -1
  341. package/dist/tui/tui.js +24 -29
  342. package/dist/tui/utils.d.ts.map +1 -1
  343. package/dist/tui/utils.js +2 -3
  344. package/dist/utils/yaml.d.ts +11 -0
  345. package/dist/utils/yaml.d.ts.map +1 -0
  346. package/dist/utils/yaml.js +207 -0
  347. package/dist/utils/zod.d.ts +1 -0
  348. package/dist/utils/zod.d.ts.map +1 -1
  349. package/dist/utils/zod.js +17 -0
  350. package/package.json +31 -29
  351. package/bin/acai-wrapper.js +0 -26
  352. package/dist/api/exa/index.d.ts +0 -177
  353. package/dist/api/exa/index.d.ts.map +0 -1
  354. package/dist/api/exa/index.js +0 -439
  355. package/dist/commands/add-directory-command.d.ts +0 -3
  356. package/dist/commands/add-directory-command.d.ts.map +0 -1
  357. package/dist/commands/application-log-command.d.ts +0 -3
  358. package/dist/commands/application-log-command.d.ts.map +0 -1
  359. package/dist/commands/application-log-command.js +0 -43
  360. package/dist/commands/clear-command.d.ts +0 -3
  361. package/dist/commands/clear-command.d.ts.map +0 -1
  362. package/dist/commands/compact-command.d.ts +0 -3
  363. package/dist/commands/compact-command.d.ts.map +0 -1
  364. package/dist/commands/compact-command.js +0 -55
  365. package/dist/commands/context-command.d.ts +0 -3
  366. package/dist/commands/context-command.d.ts.map +0 -1
  367. package/dist/commands/context-command.js +0 -124
  368. package/dist/commands/copy-command.d.ts +0 -3
  369. package/dist/commands/copy-command.d.ts.map +0 -1
  370. package/dist/commands/edit-command.d.ts +0 -3
  371. package/dist/commands/edit-command.d.ts.map +0 -1
  372. package/dist/commands/edit-command.js +0 -42
  373. package/dist/commands/edit-prompt-command.d.ts +0 -3
  374. package/dist/commands/edit-prompt-command.d.ts.map +0 -1
  375. package/dist/commands/edit-prompt-command.js +0 -36
  376. package/dist/commands/exit-command.d.ts.map +0 -1
  377. package/dist/commands/exit-command.js +0 -30
  378. package/dist/commands/files-command.d.ts +0 -3
  379. package/dist/commands/files-command.d.ts.map +0 -1
  380. package/dist/commands/files-command.js +0 -68
  381. package/dist/commands/generate-rules-command.d.ts +0 -3
  382. package/dist/commands/generate-rules-command.d.ts.map +0 -1
  383. package/dist/commands/handoff-command.d.ts +0 -3
  384. package/dist/commands/handoff-command.d.ts.map +0 -1
  385. package/dist/commands/health-command.d.ts +0 -4
  386. package/dist/commands/health-command.d.ts.map +0 -1
  387. package/dist/commands/health-command.js +0 -118
  388. package/dist/commands/help-command.d.ts.map +0 -1
  389. package/dist/commands/history-command.d.ts +0 -3
  390. package/dist/commands/history-command.d.ts.map +0 -1
  391. package/dist/commands/init-command.d.ts +0 -3
  392. package/dist/commands/init-command.d.ts.map +0 -1
  393. package/dist/commands/last-log-command.d.ts +0 -3
  394. package/dist/commands/last-log-command.d.ts.map +0 -1
  395. package/dist/commands/last-log-command.js +0 -71
  396. package/dist/commands/list-directories-command.d.ts +0 -3
  397. package/dist/commands/list-directories-command.d.ts.map +0 -1
  398. package/dist/commands/list-tools-command.d.ts +0 -3
  399. package/dist/commands/list-tools-command.d.ts.map +0 -1
  400. package/dist/commands/model-command.d.ts +0 -3
  401. package/dist/commands/model-command.d.ts.map +0 -1
  402. package/dist/commands/paste-command.d.ts.map +0 -1
  403. package/dist/commands/pickup-command.d.ts +0 -3
  404. package/dist/commands/pickup-command.d.ts.map +0 -1
  405. package/dist/commands/pickup-command.js +0 -109
  406. package/dist/commands/prompt-command.d.ts +0 -21
  407. package/dist/commands/prompt-command.d.ts.map +0 -1
  408. package/dist/commands/prompt-command.js +0 -258
  409. package/dist/commands/remove-directory-command.d.ts +0 -3
  410. package/dist/commands/remove-directory-command.d.ts.map +0 -1
  411. package/dist/commands/reset-command.d.ts +0 -3
  412. package/dist/commands/reset-command.d.ts.map +0 -1
  413. package/dist/commands/rules-command.d.ts +0 -3
  414. package/dist/commands/rules-command.d.ts.map +0 -1
  415. package/dist/commands/rules-command.js +0 -73
  416. package/dist/commands/save-command.d.ts +0 -3
  417. package/dist/commands/save-command.d.ts.map +0 -1
  418. package/dist/commands/shell-command.d.ts +0 -3
  419. package/dist/commands/shell-command.d.ts.map +0 -1
  420. package/dist/commands/usage-command.d.ts +0 -3
  421. package/dist/commands/usage-command.d.ts.map +0 -1
  422. package/dist/commands/usage-command.js +0 -31
  423. package/dist/messages.d.ts.map +0 -1
  424. package/dist/repl/project-status-line.d.ts +0 -3
  425. package/dist/repl/project-status-line.d.ts.map +0 -1
  426. package/dist/repl/project-status-line.js +0 -61
  427. package/dist/repl/tool-call-repair.d.ts +0 -4
  428. package/dist/repl/tool-call-repair.d.ts.map +0 -1
  429. package/dist/repl/tool-call-repair.js +0 -54
  430. package/dist/terminal/markdown.d.ts +0 -2
  431. package/dist/terminal/markdown.d.ts.map +0 -1
  432. package/dist/terminal/markdown.js +0 -120
  433. package/dist/tokens/threshold.d.ts +0 -20
  434. package/dist/tokens/threshold.d.ts.map +0 -1
  435. package/dist/tokens/threshold.js +0 -67
  436. package/dist/tools/advanced-edit-file.d.ts +0 -69
  437. package/dist/tools/advanced-edit-file.d.ts.map +0 -1
  438. package/dist/tools/advanced-edit-file.js +0 -285
  439. package/dist/tools/agent.d.ts +0 -29
  440. package/dist/tools/agent.d.ts.map +0 -1
  441. package/dist/tools/agent.js +0 -117
  442. package/dist/tools/batch.d.ts +0 -34
  443. package/dist/tools/batch.d.ts.map +0 -1
  444. package/dist/tools/batch.js +0 -174
  445. package/dist/tools/code-interpreter.d.ts +0 -25
  446. package/dist/tools/code-interpreter.d.ts.map +0 -1
  447. package/dist/tools/code-interpreter.js +0 -183
  448. package/dist/tools/delete-file.d.ts +0 -24
  449. package/dist/tools/delete-file.d.ts.map +0 -1
  450. package/dist/tools/delete-file.js +0 -77
  451. package/dist/tools/dynamic-tool-parser.d.ts +0 -21
  452. package/dist/tools/dynamic-tool-parser.d.ts.map +0 -1
  453. package/dist/tools/dynamic-tool-parser.js +0 -22
  454. package/dist/tools/llm-edit-fixer.d.ts +0 -24
  455. package/dist/tools/llm-edit-fixer.d.ts.map +0 -1
  456. package/dist/tools/llm-edit-fixer.js +0 -136
  457. package/dist/tools/move-file.d.ts +0 -26
  458. package/dist/tools/move-file.d.ts.map +0 -1
  459. package/dist/tools/move-file.js +0 -65
  460. package/dist/tools/read-multiple-files.d.ts +0 -26
  461. package/dist/tools/read-multiple-files.d.ts.map +0 -1
  462. package/dist/tools/read-multiple-files.js +0 -196
  463. package/dist/tools/web-fetch.d.ts +0 -56
  464. package/dist/tools/web-fetch.d.ts.map +0 -1
  465. package/dist/tools/web-fetch.js +0 -247
  466. package/dist/tools/web-search.d.ts +0 -23
  467. package/dist/tools/web-search.d.ts.map +0 -1
  468. package/dist/tools/web-search.js +0 -148
  469. package/dist/tui/components/prompt-status.d.ts +0 -17
  470. package/dist/tui/components/prompt-status.d.ts.map +0 -1
  471. package/dist/tui/components/prompt-status.js +0 -26
@@ -0,0 +1,138 @@
1
+ import { getTerminalSize, isArrowDown, isArrowUp, isEnter, isEscape, } from "../../terminal/control.js";
2
+ import style from "../../terminal/style.js";
3
+ import { Input, Spacer, Text, Container as TuiContainer, } from "../../tui/index.js";
4
+ import { getAvailableHandoffFiles, hidePickupSelector, loadHandoff, } from "./utils.js";
5
+ export const pickupCommand = (options) => {
6
+ return {
7
+ command: "/pickup",
8
+ description: "Loads a handoff file into a new session to continue previous work. Usage: /pickup",
9
+ getSubCommands: () => Promise.resolve([]),
10
+ async handle(_args, { tui, container, inputContainer, editor, }) {
11
+ const handoffs = await getAvailableHandoffFiles();
12
+ if (handoffs.length === 0) {
13
+ container.addChild(new Text(style.yellow("No handoff files found."), 0, 1));
14
+ container.addChild(new Text("Create a handoff file first using /handoff <purpose>", 1, 0));
15
+ tui.requestRender();
16
+ editor.setText("");
17
+ return "continue";
18
+ }
19
+ const handoffSelector = new HandoffSelectorComponent(handoffs, async (handoff) => {
20
+ await loadHandoff(handoff, options, container, tui, editor);
21
+ hidePickupSelector(inputContainer, editor, tui);
22
+ }, () => {
23
+ hidePickupSelector(inputContainer, editor, tui);
24
+ });
25
+ inputContainer.clear();
26
+ inputContainer.addChild(handoffSelector);
27
+ tui.setFocus(handoffSelector);
28
+ tui.requestRender();
29
+ return "continue";
30
+ },
31
+ };
32
+ };
33
+ class HandoffSelectorComponent extends TuiContainer {
34
+ searchInput;
35
+ listContainer;
36
+ allHandoffs = [];
37
+ filteredHandoffs = [];
38
+ selectedIndex = 0;
39
+ onSelectCallback;
40
+ onCancelCallback;
41
+ constructor(handoffs, onSelect, onCancel) {
42
+ super();
43
+ this.onSelectCallback = onSelect;
44
+ this.onCancelCallback = onCancel;
45
+ this.allHandoffs = handoffs;
46
+ this.filteredHandoffs = handoffs;
47
+ const { columns } = getTerminalSize();
48
+ this.addChild(new Text(style.blue("─".repeat(columns)), 0, 0));
49
+ this.addChild(new Spacer(1));
50
+ this.searchInput = new Input();
51
+ this.searchInput.onSubmit = () => {
52
+ const handoff = this.filteredHandoffs[this.selectedIndex];
53
+ if (handoff !== undefined) {
54
+ this.handleSelect(handoff);
55
+ }
56
+ };
57
+ this.addChild(this.searchInput);
58
+ this.addChild(new Spacer(1));
59
+ this.listContainer = new TuiContainer();
60
+ this.addChild(this.listContainer);
61
+ this.addChild(new Spacer(1));
62
+ this.addChild(new Text(style.blue("─".repeat(columns)), 0, 0));
63
+ this.updateList();
64
+ }
65
+ filterHandoffs(query) {
66
+ if (!query.trim()) {
67
+ this.filteredHandoffs = this.allHandoffs;
68
+ }
69
+ else {
70
+ const searchTokens = query
71
+ .toLowerCase()
72
+ .split(/\s+/)
73
+ .filter((t) => t);
74
+ this.filteredHandoffs = this.allHandoffs.filter((handoff) => {
75
+ const searchText = handoff.name.toLowerCase();
76
+ return searchTokens.every((token) => searchText.includes(token));
77
+ });
78
+ }
79
+ this.selectedIndex = Math.min(this.selectedIndex, Math.max(0, this.filteredHandoffs.length - 1));
80
+ this.updateList();
81
+ }
82
+ updateList() {
83
+ this.listContainer.clear();
84
+ const maxVisible = 10;
85
+ const startIndex = Math.max(0, Math.min(this.selectedIndex - Math.floor(maxVisible / 2), this.filteredHandoffs.length - maxVisible));
86
+ const endIndex = Math.min(startIndex + maxVisible, this.filteredHandoffs.length);
87
+ for (let i = startIndex; i < endIndex; i++) {
88
+ const handoff = this.filteredHandoffs[i];
89
+ if (handoff === undefined)
90
+ continue;
91
+ const isSelected = i === this.selectedIndex;
92
+ let line = "";
93
+ if (isSelected) {
94
+ const prefix = style.blue("→ ");
95
+ const date = handoff.createdAt.toLocaleString();
96
+ line = `${prefix + style.blue(handoff.name)} ${style.gray(`(${date})`)}`;
97
+ }
98
+ else {
99
+ const date = handoff.createdAt.toLocaleString();
100
+ line = ` ${handoff.name} ${style.gray(`(${date})`)}`;
101
+ }
102
+ this.listContainer.addChild(new Text(line, 0, 0));
103
+ }
104
+ if (startIndex > 0 || endIndex < this.filteredHandoffs.length) {
105
+ const scrollInfo = style.gray(` (${this.selectedIndex + 1}/${this.filteredHandoffs.length})`);
106
+ this.listContainer.addChild(new Text(scrollInfo, 0, 0));
107
+ }
108
+ if (this.filteredHandoffs.length === 0) {
109
+ this.listContainer.addChild(new Text(style.gray(" No matching handoffs"), 0, 0));
110
+ }
111
+ }
112
+ handleInput(keyData) {
113
+ if (isArrowUp(keyData)) {
114
+ this.selectedIndex = Math.max(0, this.selectedIndex - 1);
115
+ this.updateList();
116
+ }
117
+ else if (isArrowDown(keyData)) {
118
+ this.selectedIndex = Math.min(this.filteredHandoffs.length - 1, this.selectedIndex + 1);
119
+ this.updateList();
120
+ }
121
+ else if (isEnter(keyData)) {
122
+ const selectedHandoff = this.filteredHandoffs[this.selectedIndex];
123
+ if (selectedHandoff !== undefined) {
124
+ this.handleSelect(selectedHandoff);
125
+ }
126
+ }
127
+ else if (isEscape(keyData)) {
128
+ this.onCancelCallback();
129
+ }
130
+ else {
131
+ this.searchInput.handleInput(keyData);
132
+ this.filterHandoffs(this.searchInput.getValue());
133
+ }
134
+ }
135
+ handleSelect(handoff) {
136
+ this.onSelectCallback(handoff);
137
+ }
138
+ }
@@ -0,0 +1,6 @@
1
+ export interface HandoffFile {
2
+ name: string;
3
+ filename: string;
4
+ createdAt: Date;
5
+ }
6
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../source/commands/pickup/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;CACjB"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ import type { Container, Editor, TUI } from "../../tui/index.ts";
2
+ import type { CommandOptions } from "../types.ts";
3
+ import type { HandoffFile } from "./types.ts";
4
+ export declare function hidePickupSelector(editorContainer: Container, editor: Editor, tui: TUI): void;
5
+ export declare function getAvailableHandoffFiles(): Promise<HandoffFile[]>;
6
+ export declare function loadHandoff(handoff: HandoffFile, options: CommandOptions, container: Container, tui: TUI, editor: Editor): Promise<void>;
7
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../source/commands/pickup/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,kBAAkB,CAChC,eAAe,EAAE,SAAS,EAC1B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,GAAG,GACP,IAAI,CAIN;AAED,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CA4BvE;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CA8Cf"}
@@ -0,0 +1,56 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { basename } from "node:path";
3
+ import { createUserMessage } from "../../sessions/manager.js";
4
+ export function hidePickupSelector(editorContainer, editor, tui) {
5
+ editorContainer.clear();
6
+ editorContainer.addChild(editor);
7
+ tui.setFocus(editor);
8
+ }
9
+ export async function getAvailableHandoffFiles() {
10
+ const handoffsDir = ".acai/handoffs";
11
+ try {
12
+ const { readdir, stat } = await import("node:fs/promises");
13
+ const dirents = await readdir(handoffsDir, {
14
+ withFileTypes: true,
15
+ });
16
+ const files = [];
17
+ for (const dirent of dirents) {
18
+ if (dirent.isFile() && dirent.name.match(/^handoff-.*\.md$/)) {
19
+ const filepath = `${handoffsDir}/${dirent.name}`;
20
+ const stats = await stat(filepath);
21
+ files.push({
22
+ name: basename(dirent.name, ".md"),
23
+ filename: dirent.name,
24
+ createdAt: stats.mtime,
25
+ });
26
+ }
27
+ }
28
+ files.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());
29
+ return files;
30
+ }
31
+ catch (error) {
32
+ if (error.code === "ENOENT") {
33
+ return [];
34
+ }
35
+ return [];
36
+ }
37
+ }
38
+ export async function loadHandoff(handoff, options, container, tui, editor) {
39
+ const { sessionManager: messageHistory, modelManager } = options;
40
+ const filepath = `.acai/handoffs/${handoff.filename}`;
41
+ try {
42
+ const handoffContent = await readFile(filepath, "utf8");
43
+ container.addChild(new (await import("../../tui/index.js")).Text(`Loading handoff: ${(await import("../../terminal/style.js")).default.blue(handoff.name)}`, 0, 1));
44
+ messageHistory.create(modelManager.getModel("repl").modelId);
45
+ messageHistory.appendUserMessage(createUserMessage([], handoffContent));
46
+ container.addChild(new (await import("../../tui/index.js")).Text("Handoff loaded successfully.", 1, 0));
47
+ container.addChild(new (await import("../../tui/index.js")).Text("You can now continue with your previous work.", 2, 0));
48
+ tui.requestRender();
49
+ editor.setText("");
50
+ }
51
+ catch (error) {
52
+ container.addChild(new (await import("../../tui/index.js")).Text(`Error loading handoff: ${error}`, 0, 1));
53
+ tui.requestRender();
54
+ editor.setText("");
55
+ }
56
+ }
@@ -0,0 +1,5 @@
1
+ import type { CommandOptions, ReplCommand } from "../types.ts";
2
+ import type { PromptMetadata } from "./types.ts";
3
+ export declare function loadPrompts(config: CommandOptions["config"]): Promise<Map<string, PromptMetadata>>;
4
+ export declare const promptCommand: ({ modelManager, promptManager, config, promptHistory, workspace, }: CommandOptions) => ReplCommand;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../source/commands/prompt/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAOjD,wBAAsB,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,wCA0DjE;AAED,eAAO,MAAM,aAAa,GAAI,oEAM3B,cAAc,KAAG,WAuHnB,CAAC"}
@@ -0,0 +1,126 @@
1
+ import { readdir, readFile } from "node:fs/promises";
2
+ import path, { basename } from "node:path";
3
+ import { logger } from "../../logger.js";
4
+ import { processPrompt } from "../../mentions.js";
5
+ import style from "../../terminal/style.js";
6
+ import { Spacer, Text } from "../../tui/index.js";
7
+ import { findPrompt, parsePromptFile, replaceArgumentPlaceholders, } from "./utils.js";
8
+ export async function loadPrompts(config) {
9
+ const getPromptsFromDir = async (dirPath, type) => {
10
+ try {
11
+ const dirents = await readdir(dirPath, { withFileTypes: true });
12
+ const mdFiles = dirents.filter((dirent) => dirent.isFile() && dirent.name.endsWith(".md"));
13
+ const prompts = [];
14
+ for (const dirent of mdFiles) {
15
+ const filePath = path.join(dirPath, dirent.name);
16
+ try {
17
+ const content = await readFile(filePath, "utf8");
18
+ const parsed = parsePromptFile(content);
19
+ if (parsed.metadata.enabled) {
20
+ prompts.push({
21
+ name: basename(dirent.name, ".md"),
22
+ description: parsed.metadata.description,
23
+ enabled: parsed.metadata.enabled,
24
+ path: filePath,
25
+ type,
26
+ });
27
+ }
28
+ }
29
+ catch (error) {
30
+ logger.error(`Error reading prompt file ${filePath}: ${error}`);
31
+ }
32
+ }
33
+ return prompts;
34
+ }
35
+ catch (error) {
36
+ if (error.code === "ENOENT") {
37
+ return [];
38
+ }
39
+ logger.error(`Error reading prompts from ${dirPath}: ${error}`);
40
+ return [];
41
+ }
42
+ };
43
+ const userPromptDir = config.app.getPath("prompts");
44
+ const projectPromptDir = config.project.getPath("prompts");
45
+ const userPrompts = await getPromptsFromDir(userPromptDir, "user");
46
+ const projectPrompts = await getPromptsFromDir(projectPromptDir, "project");
47
+ const promptMap = new Map();
48
+ for (const prompt of userPrompts) {
49
+ promptMap.set(prompt.name, prompt);
50
+ }
51
+ for (const prompt of projectPrompts) {
52
+ promptMap.set(prompt.name, prompt);
53
+ }
54
+ return promptMap;
55
+ }
56
+ export const promptCommand = ({ modelManager, promptManager, config, promptHistory, workspace, }) => {
57
+ return {
58
+ command: "/prompt",
59
+ description: "Loads and executes prompts. Project prompts override user prompts with the same name.",
60
+ getSubCommands: async () => {
61
+ const promptMap = await loadPrompts(config);
62
+ const promptList = Array.from(promptMap.values())
63
+ .map((p) => p.name)
64
+ .sort();
65
+ return promptList;
66
+ },
67
+ async handle(args, { tui, container, editor, }) {
68
+ const promptName = args?.[0];
69
+ if (!promptName) {
70
+ container.addChild(new Text(style.red("No prompt given."), 1, 0));
71
+ tui.requestRender();
72
+ editor.setText("");
73
+ return "continue";
74
+ }
75
+ try {
76
+ const promptResult = await findPrompt(promptName, config);
77
+ if (!promptResult) {
78
+ container.addChild(new Text(style.red(`Prompt not found: ${promptName}. Available prompts can be seen with tab completion.`), 1, 0));
79
+ tui.requestRender();
80
+ editor.setText("");
81
+ return "continue";
82
+ }
83
+ let promptContent;
84
+ try {
85
+ const fileContent = await readFile(promptResult.path, "utf8");
86
+ const parsed = parsePromptFile(fileContent);
87
+ promptContent = parsed.content;
88
+ }
89
+ catch (error) {
90
+ if (error.code === "ENOENT") {
91
+ container.addChild(new Text(style.red(`Prompt file not found: ${promptName} at ${promptResult.path}`), 1, 0));
92
+ tui.requestRender();
93
+ editor.setText("");
94
+ return "continue";
95
+ }
96
+ throw error;
97
+ }
98
+ const inputArgs = args.slice(1);
99
+ promptContent = replaceArgumentPlaceholders(promptContent, inputArgs);
100
+ container.addChild(new Spacer(1));
101
+ container.addChild(new Text(`Loaded ${promptResult.type} prompt: ${style.blue(promptName)}`, 1, 0));
102
+ if (inputArgs.length > 0) {
103
+ container.addChild(new Text(`Input: "${inputArgs.join(" ")}"`, 2, 0));
104
+ }
105
+ const processedPrompt = await processPrompt(promptContent.trim(), {
106
+ baseDir: workspace.primaryDir,
107
+ model: modelManager.getModelMetadata("repl"),
108
+ });
109
+ for (const context of processedPrompt.context) {
110
+ promptManager.addContext(context);
111
+ }
112
+ promptManager.set(processedPrompt.message);
113
+ promptHistory.push(processedPrompt.message);
114
+ tui.requestRender();
115
+ editor.setText("");
116
+ return "use";
117
+ }
118
+ catch (error) {
119
+ container.addChild(new Text(style.red(`Error loading prompt: ${error.message}`), 1, 0));
120
+ tui.requestRender();
121
+ editor.setText("");
122
+ return "continue";
123
+ }
124
+ },
125
+ };
126
+ };
@@ -0,0 +1,15 @@
1
+ export interface PromptMetadata {
2
+ name: string;
3
+ description: string;
4
+ enabled: boolean;
5
+ path: string;
6
+ type: "project" | "user";
7
+ }
8
+ export interface ParsedPrompt {
9
+ content: string;
10
+ metadata: {
11
+ description: string;
12
+ enabled: boolean;
13
+ };
14
+ }
15
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../source/commands/prompt/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE;QACR,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;CACH"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,12 @@
1
+ import type { ConfigManager } from "../../config.ts";
2
+ import type { PromptMetadata } from "./types.ts";
3
+ export declare function replaceArgumentPlaceholders(content: string, args: string[]): string;
4
+ export declare function parsePromptFile(content: string): {
5
+ content: string;
6
+ metadata: {
7
+ description: string;
8
+ enabled: boolean;
9
+ };
10
+ };
11
+ export declare function findPrompt(promptName: string, config: ConfigManager): Promise<PromptMetadata | null>;
12
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../source/commands/prompt/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,GACb,MAAM,CA6BR;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE;QACR,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;CACH,CA4CA;AAED,wBAAsB,UAAU,CAC9B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAoDhC"}
@@ -0,0 +1,107 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ export function replaceArgumentPlaceholders(content, args) {
4
+ const allArguments = args.join(" ");
5
+ let replacementsMade = false;
6
+ let result = content;
7
+ for (let i = 0; i < args.length; i++) {
8
+ const placeholder = `$${i + 1}`;
9
+ if (result.includes(placeholder)) {
10
+ result = result.replaceAll(placeholder, args[i]);
11
+ replacementsMade = true;
12
+ }
13
+ }
14
+ if (result.includes("$ARGUMENTS")) {
15
+ result = result.replaceAll("$ARGUMENTS", allArguments);
16
+ replacementsMade = true;
17
+ }
18
+ if (result.includes("{{INPUT}}")) {
19
+ result = result.replaceAll("{{INPUT}}", allArguments);
20
+ replacementsMade = true;
21
+ }
22
+ if (!replacementsMade && allArguments.trim().length > 0) {
23
+ result += `\n\n${allArguments}`;
24
+ }
25
+ return result;
26
+ }
27
+ export function parsePromptFile(content) {
28
+ const frontMatterMatch = content.match(/^---\s*\n([\s\S]*?)\n---\s*(?:\n([\s\S]*))?$/);
29
+ if (!frontMatterMatch) {
30
+ return {
31
+ content,
32
+ metadata: {
33
+ description: content.split("\n")[0].trim().slice(0, 50) +
34
+ (content.split("\n")[0].trim().length > 50 ? "..." : ""),
35
+ enabled: true,
36
+ },
37
+ };
38
+ }
39
+ const yamlContent = frontMatterMatch[1];
40
+ const promptContent = frontMatterMatch[2] || "";
41
+ const defaultDescription = promptContent.split("\n")[0].trim().slice(0, 50) +
42
+ (promptContent.split("\n")[0].trim().length > 50 ? "..." : "");
43
+ let description = defaultDescription;
44
+ let enabled = true;
45
+ const descriptionMatch = yamlContent.match(/^description:\s*(.+)$/m);
46
+ if (descriptionMatch) {
47
+ description = descriptionMatch[1].trim();
48
+ }
49
+ const enabledMatch = yamlContent.match(/^enabled:\s*(true|false)$/im);
50
+ if (enabledMatch) {
51
+ enabled = enabledMatch[1].toLowerCase() === "true";
52
+ }
53
+ return {
54
+ content: promptContent,
55
+ metadata: {
56
+ description,
57
+ enabled,
58
+ },
59
+ };
60
+ }
61
+ export async function findPrompt(promptName, config) {
62
+ const projectPromptDir = config.project.getPath("prompts");
63
+ const projectPath = path.join(projectPromptDir, `${promptName}.md`);
64
+ if (config.project.existsSync("prompts")) {
65
+ try {
66
+ const content = await readFile(projectPath, "utf8");
67
+ const parsed = parsePromptFile(content);
68
+ if (!parsed.metadata.enabled) {
69
+ return null;
70
+ }
71
+ return {
72
+ name: promptName,
73
+ description: parsed.metadata.description,
74
+ enabled: parsed.metadata.enabled,
75
+ path: projectPath,
76
+ type: "project",
77
+ };
78
+ }
79
+ catch (error) {
80
+ if (error.code !== "ENOENT") {
81
+ throw error;
82
+ }
83
+ }
84
+ }
85
+ const userPromptDir = config.app.getPath("prompts");
86
+ const userPath = path.join(userPromptDir, `${promptName}.md`);
87
+ try {
88
+ const content = await readFile(userPath, "utf8");
89
+ const parsed = parsePromptFile(content);
90
+ if (!parsed.metadata.enabled) {
91
+ return null;
92
+ }
93
+ return {
94
+ name: promptName,
95
+ description: parsed.metadata.description,
96
+ enabled: parsed.metadata.enabled,
97
+ path: userPath,
98
+ type: "user",
99
+ };
100
+ }
101
+ catch (error) {
102
+ if (error.code !== "ENOENT") {
103
+ throw error;
104
+ }
105
+ }
106
+ return null;
107
+ }
@@ -0,0 +1,3 @@
1
+ import type { CommandOptions, ReplCommand } from "../types.ts";
2
+ export declare const removeDirectoryCommand: ({ workspace, }: CommandOptions) => ReplCommand;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../source/commands/remove-directory/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/D,eAAO,MAAM,sBAAsB,GAAI,gBAEpC,cAAc,KAAG,WAkGnB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import path from "node:path";
2
- import style from "../terminal/style.js";
3
- import { Text } from "../tui/index.js";
2
+ import style from "../../terminal/style.js";
3
+ import { Text } from "../../tui/index.js";
4
4
  export const removeDirectoryCommand = ({ workspace, }) => {
5
5
  return {
6
6
  command: "/remove-directory",
@@ -0,0 +1,3 @@
1
+ import type { CommandOptions, ReplCommand } from "../types.ts";
2
+ export declare const resetCommand: ({ modelManager, sessionManager: messageHistory, }: CommandOptions) => ReplCommand;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../source/commands/reset/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/D,eAAO,MAAM,YAAY,GAAI,mDAG1B,cAAc,KAAG,WAsCnB,CAAC"}
@@ -1,5 +1,5 @@
1
- import { setTerminalTitle } from "../terminal/formatting.js";
2
- export const resetCommand = ({ modelManager, messageHistory, }) => {
1
+ import { setTerminalTitle } from "../../terminal/control.js";
2
+ export const resetCommand = ({ modelManager, sessionManager: messageHistory, }) => {
3
3
  return {
4
4
  command: "/reset",
5
5
  aliases: ["/new"],
@@ -13,6 +13,11 @@ export const resetCommand = ({ modelManager, messageHistory, }) => {
13
13
  setTerminalTitle(`acai: ${process.cwd()}`);
14
14
  container.clear();
15
15
  editor.setText("");
16
+ // Reset footer state to clear usage/cost/steps/tools/time
17
+ const footer = tui.children.find((child) => child.constructor.name === "FooterComponent");
18
+ if (footer) {
19
+ footer.resetState();
20
+ }
16
21
  tui.requestRender();
17
22
  return "continue";
18
23
  },
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../source/commands/reset/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ // Types for reset command
3
+ // Currently no specific types needed beyond the base CommandOptions
@@ -0,0 +1,3 @@
1
+ import type { CommandOptions, ReplCommand } from "../types.ts";
2
+ export declare function resourcesCommand(options: CommandOptions): ReplCommand;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../source/commands/resources/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/D,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,WAAW,CA6GrE"}
@@ -0,0 +1,84 @@
1
+ import { loadSkills } from "../../skills.js";
2
+ import style from "../../terminal/style.js";
3
+ import { Modal, Container as ModalContainer, ModalText, } from "../../tui/index.js";
4
+ export function resourcesCommand(options) {
5
+ return {
6
+ command: "/resources",
7
+ description: "List all active skills and AGENTS.md",
8
+ aliases: ["/res"],
9
+ getSubCommands: async () => [],
10
+ async handle(_args, { tui, editor }) {
11
+ try {
12
+ const skills = await loadSkills();
13
+ const agentsFiles = await options.config.readAgentsFiles();
14
+ const projectSkills = skills.filter((s) => s.source === "project");
15
+ const userSkills = skills.filter((s) => s.source === "user");
16
+ const otherSkills = skills.filter((s) => s.source !== "project" && s.source !== "user");
17
+ const lines = [];
18
+ if (projectSkills.length > 0) {
19
+ lines.push(style.gray(`Project Skills (${projectSkills.length}):`));
20
+ for (const skill of projectSkills) {
21
+ lines.push(`${style.yellow.bold(skill.name)}
22
+ ${skill.description}
23
+ ${style.dim(skill.filePath)}
24
+ `);
25
+ }
26
+ lines.push("");
27
+ }
28
+ if (userSkills.length > 0) {
29
+ lines.push(style.gray(`User Skills (${userSkills.length}):`));
30
+ for (const skill of userSkills) {
31
+ lines.push(`${style.yellow.bold(skill.name)}
32
+ ${skill.description}
33
+ ${style.dim(skill.filePath)}
34
+ `);
35
+ }
36
+ lines.push("");
37
+ }
38
+ if (otherSkills.length > 0) {
39
+ lines.push(style.gray(`Other Skills (${otherSkills.length}):`));
40
+ for (const skill of otherSkills) {
41
+ lines.push(`${style.yellow.bold(skill.name)}
42
+ ${skill.description}
43
+ ${style.dim(skill.filePath)} ${style.dim(`[${skill.source}]`)}
44
+ `);
45
+ }
46
+ lines.push("");
47
+ }
48
+ lines.push(style.gray("AGENTS.md:"));
49
+ for (const agentsFile of agentsFiles) {
50
+ if (agentsFile.content.length > 0) {
51
+ lines.push(` • ${agentsFile.path} ${style.green("(Exists)")}`);
52
+ }
53
+ else {
54
+ lines.push(` • ${agentsFile.path} ${style.dim("(Not found)")}`);
55
+ }
56
+ }
57
+ const modalContent = new ModalContainer();
58
+ const formattedText = lines.join("\n");
59
+ if (formattedText.trim()) {
60
+ modalContent.addChild(new ModalText(formattedText, 0, 1));
61
+ }
62
+ else {
63
+ modalContent.addChild(new ModalText("No resources found.", 0, 1));
64
+ }
65
+ const modal = new Modal("Active Resources", modalContent, true, () => {
66
+ editor.setText("");
67
+ tui.requestRender();
68
+ });
69
+ tui.showModal(modal);
70
+ return "continue";
71
+ }
72
+ catch (error) {
73
+ const errorContent = new ModalContainer();
74
+ errorContent.addChild(new ModalText(style.red(`Error loading resources: ${error.message}`), 0, 1));
75
+ const errorModal = new Modal("Error", errorContent, true, () => {
76
+ editor.setText("");
77
+ tui.requestRender();
78
+ });
79
+ tui.showModal(errorModal);
80
+ return "continue";
81
+ }
82
+ },
83
+ };
84
+ }