@travisennis/acai 0.0.8 → 0.0.10

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 (386) hide show
  1. package/README.md +48 -729
  2. package/bin/acai +52 -0
  3. package/dist/agent/index.d.ts +12 -2
  4. package/dist/agent/index.d.ts.map +1 -1
  5. package/dist/agent/index.js +378 -168
  6. package/dist/agent/sub-agent.d.ts +23 -0
  7. package/dist/agent/sub-agent.d.ts.map +1 -0
  8. package/dist/agent/sub-agent.js +109 -0
  9. package/dist/cli/index.d.ts +26 -0
  10. package/dist/cli/index.d.ts.map +1 -0
  11. package/dist/{cli.js → cli/index.js} +84 -76
  12. package/dist/cli/stdin.d.ts +9 -0
  13. package/dist/cli/stdin.d.ts.map +1 -0
  14. package/dist/cli/stdin.js +37 -0
  15. package/dist/commands/copy/index.js +2 -2
  16. package/dist/commands/copy/utils.d.ts.map +1 -1
  17. package/dist/commands/copy/utils.js +15 -13
  18. package/dist/commands/generate-rules/index.d.ts +1 -1
  19. package/dist/commands/generate-rules/index.d.ts.map +1 -1
  20. package/dist/commands/generate-rules/index.js +16 -100
  21. package/dist/commands/generate-rules/service.d.ts +21 -0
  22. package/dist/commands/generate-rules/service.d.ts.map +1 -0
  23. package/dist/commands/generate-rules/service.js +103 -0
  24. package/dist/commands/handoff/index.js +2 -2
  25. package/dist/commands/health/index.js +1 -1
  26. package/dist/commands/health/utils.d.ts.map +1 -1
  27. package/dist/commands/health/utils.js +6 -0
  28. package/dist/commands/history/index.d.ts +1 -1
  29. package/dist/commands/history/index.d.ts.map +1 -1
  30. package/dist/commands/history/index.js +17 -18
  31. package/dist/commands/history/types.d.ts +38 -0
  32. package/dist/commands/history/types.d.ts.map +1 -1
  33. package/dist/commands/history/utils.d.ts.map +1 -1
  34. package/dist/commands/history/utils.js +63 -58
  35. package/dist/commands/init/index.d.ts.map +1 -1
  36. package/dist/commands/init/index.js +3 -8
  37. package/dist/commands/init-project/index.d.ts.map +1 -1
  38. package/dist/commands/init-project/index.js +3 -3
  39. package/dist/commands/init-project/utils.d.ts.map +1 -1
  40. package/dist/commands/init-project/utils.js +10 -2
  41. package/dist/commands/list-tools/index.d.ts.map +1 -1
  42. package/dist/commands/list-tools/index.js +7 -31
  43. package/dist/commands/manager.d.ts +2 -2
  44. package/dist/commands/manager.d.ts.map +1 -1
  45. package/dist/commands/manager.js +57 -33
  46. package/dist/commands/model/index.d.ts.map +1 -1
  47. package/dist/commands/model/index.js +20 -151
  48. package/dist/commands/model/model-panel.d.ts +4 -0
  49. package/dist/commands/model/model-panel.d.ts.map +1 -0
  50. package/dist/commands/model/model-panel.js +144 -0
  51. package/dist/commands/paste/index.d.ts.map +1 -1
  52. package/dist/commands/paste/index.js +59 -62
  53. package/dist/commands/paste/utils.d.ts.map +1 -1
  54. package/dist/commands/paste/utils.js +88 -58
  55. package/dist/commands/pickup/index.d.ts.map +1 -1
  56. package/dist/commands/pickup/index.js +6 -3
  57. package/dist/commands/pickup/utils.js +3 -3
  58. package/dist/commands/resources/index.d.ts.map +1 -1
  59. package/dist/commands/resources/index.js +33 -50
  60. package/dist/commands/review/index.d.ts.map +1 -1
  61. package/dist/commands/review/index.js +3 -117
  62. package/dist/commands/review/review-panel.d.ts +3 -0
  63. package/dist/commands/review/review-panel.d.ts.map +1 -0
  64. package/dist/commands/review/review-panel.js +186 -0
  65. package/dist/commands/review/utils.d.ts +9 -0
  66. package/dist/commands/review/utils.d.ts.map +1 -1
  67. package/dist/commands/review/utils.js +127 -68
  68. package/dist/commands/session/index.d.ts +1 -1
  69. package/dist/commands/session/index.d.ts.map +1 -1
  70. package/dist/commands/session/index.js +134 -112
  71. package/dist/commands/session/types.d.ts +7 -0
  72. package/dist/commands/session/types.d.ts.map +1 -1
  73. package/dist/commands/share/html-renderer.d.ts +25 -0
  74. package/dist/commands/share/html-renderer.d.ts.map +1 -0
  75. package/dist/commands/share/html-renderer.js +384 -0
  76. package/dist/commands/share/index.d.ts +3 -0
  77. package/dist/commands/share/index.d.ts.map +1 -0
  78. package/dist/commands/share/index.js +122 -0
  79. package/dist/commands/shell/index.d.ts.map +1 -1
  80. package/dist/commands/shell/index.js +16 -1
  81. package/dist/commands/types.d.ts +2 -2
  82. package/dist/commands/types.d.ts.map +1 -1
  83. package/dist/{config.d.ts → config/index.d.ts} +20 -9
  84. package/dist/config/index.d.ts.map +1 -0
  85. package/dist/{config.js → config/index.js} +43 -42
  86. package/dist/execution/index.d.ts.map +1 -1
  87. package/dist/execution/index.js +75 -55
  88. package/dist/index.d.ts +1 -0
  89. package/dist/index.d.ts.map +1 -1
  90. package/dist/index.js +170 -127
  91. package/dist/middleware/cache.d.ts.map +1 -1
  92. package/dist/middleware/cache.js +18 -36
  93. package/dist/models/ai-config.d.ts +1 -0
  94. package/dist/models/ai-config.d.ts.map +1 -1
  95. package/dist/models/ai-config.js +4 -3
  96. package/dist/models/anthropic-provider.d.ts +2 -5
  97. package/dist/models/anthropic-provider.d.ts.map +1 -1
  98. package/dist/models/anthropic-provider.js +3 -70
  99. package/dist/models/deepseek-provider.d.ts +1 -0
  100. package/dist/models/deepseek-provider.d.ts.map +1 -1
  101. package/dist/models/google-provider.d.ts +2 -3
  102. package/dist/models/google-provider.d.ts.map +1 -1
  103. package/dist/models/google-provider.js +0 -26
  104. package/dist/models/groq-provider.d.ts +1 -0
  105. package/dist/models/groq-provider.d.ts.map +1 -1
  106. package/dist/models/manager.d.ts +13 -2
  107. package/dist/models/manager.d.ts.map +1 -1
  108. package/dist/models/manager.js +20 -8
  109. package/dist/models/openai-provider.d.ts +5 -5
  110. package/dist/models/openai-provider.d.ts.map +1 -1
  111. package/dist/models/openai-provider.js +27 -40
  112. package/dist/models/opencode-zen-provider.d.ts +8 -3
  113. package/dist/models/opencode-zen-provider.d.ts.map +1 -1
  114. package/dist/models/opencode-zen-provider.js +68 -11
  115. package/dist/models/openrouter-provider.d.ts +24 -30
  116. package/dist/models/openrouter-provider.d.ts.map +1 -1
  117. package/dist/models/openrouter-provider.js +92 -177
  118. package/dist/models/providers.d.ts +1 -1
  119. package/dist/models/providers.d.ts.map +1 -1
  120. package/dist/models/xai-provider.d.ts +4 -3
  121. package/dist/models/xai-provider.d.ts.map +1 -1
  122. package/dist/models/xai-provider.js +18 -18
  123. package/dist/modes/manager.d.ts +23 -0
  124. package/dist/modes/manager.d.ts.map +1 -0
  125. package/dist/modes/manager.js +77 -0
  126. package/dist/modes/prompts.d.ts +2 -0
  127. package/dist/modes/prompts.d.ts.map +1 -0
  128. package/dist/modes/prompts.js +143 -0
  129. package/dist/prompts/mentions.d.ts +11 -0
  130. package/dist/prompts/mentions.d.ts.map +1 -0
  131. package/dist/{mentions.js → prompts/mentions.js} +21 -80
  132. package/dist/prompts/system-prompt.d.ts +26 -0
  133. package/dist/prompts/system-prompt.d.ts.map +1 -0
  134. package/dist/{prompts.js → prompts/system-prompt.js} +50 -22
  135. package/dist/repl/index.d.ts +174 -0
  136. package/dist/repl/index.d.ts.map +1 -0
  137. package/dist/{repl-new.js → repl/index.js} +399 -76
  138. package/dist/repl/project-status.d.ts +1 -0
  139. package/dist/repl/project-status.d.ts.map +1 -1
  140. package/dist/repl/project-status.js +4 -1
  141. package/dist/sessions/manager.d.ts +93 -1
  142. package/dist/sessions/manager.d.ts.map +1 -1
  143. package/dist/sessions/manager.js +264 -9
  144. package/dist/sessions/summary.d.ts +4 -0
  145. package/dist/sessions/summary.d.ts.map +1 -0
  146. package/dist/sessions/summary.js +30 -0
  147. package/dist/{skills.d.ts → skills/index.d.ts} +14 -2
  148. package/dist/skills/index.d.ts.map +1 -0
  149. package/dist/skills/index.js +294 -0
  150. package/dist/subagents/index.d.ts +15 -0
  151. package/dist/subagents/index.d.ts.map +1 -0
  152. package/dist/subagents/index.js +231 -0
  153. package/dist/terminal/control.d.ts +1 -1
  154. package/dist/terminal/control.d.ts.map +1 -1
  155. package/dist/terminal/control.js +30 -9
  156. package/dist/terminal/east-asian-width.d.ts.map +1 -1
  157. package/dist/terminal/east-asian-width.js +404 -351
  158. package/dist/terminal/keys.d.ts +17 -0
  159. package/dist/terminal/keys.d.ts.map +1 -1
  160. package/dist/terminal/keys.js +37 -0
  161. package/dist/terminal/select-prompt.d.ts.map +1 -1
  162. package/dist/terminal/select-prompt.js +24 -12
  163. package/dist/terminal/string-width.d.ts.map +1 -1
  164. package/dist/terminal/string-width.js +25 -27
  165. package/dist/terminal/style.d.ts.map +1 -1
  166. package/dist/terminal/style.js +4 -7
  167. package/dist/terminal/supports-color.d.ts.map +1 -1
  168. package/dist/terminal/supports-color.js +41 -27
  169. package/dist/terminal/table/cell.d.ts +12 -0
  170. package/dist/terminal/table/cell.d.ts.map +1 -1
  171. package/dist/terminal/table/cell.js +40 -25
  172. package/dist/terminal/table/layout-manager.d.ts.map +1 -1
  173. package/dist/terminal/table/layout-manager.js +100 -68
  174. package/dist/terminal/table/utils.d.ts.map +1 -1
  175. package/dist/terminal/table/utils.js +17 -10
  176. package/dist/terminal/wrap-ansi.d.ts.map +1 -1
  177. package/dist/terminal/wrap-ansi.js +172 -103
  178. package/dist/tokens/tracker.d.ts +1 -0
  179. package/dist/tokens/tracker.d.ts.map +1 -1
  180. package/dist/tokens/tracker.js +3 -0
  181. package/dist/tools/agent.d.ts +27 -0
  182. package/dist/tools/agent.d.ts.map +1 -0
  183. package/dist/tools/agent.js +81 -0
  184. package/dist/tools/bash.d.ts +4 -3
  185. package/dist/tools/bash.d.ts.map +1 -1
  186. package/dist/tools/bash.js +343 -121
  187. package/dist/tools/code-search.d.ts +41 -0
  188. package/dist/tools/code-search.d.ts.map +1 -0
  189. package/dist/tools/code-search.js +195 -0
  190. package/dist/tools/directory-tree.d.ts +3 -3
  191. package/dist/tools/directory-tree.d.ts.map +1 -1
  192. package/dist/tools/directory-tree.js +8 -5
  193. package/dist/tools/dynamic-tool-loader.d.ts +2 -5
  194. package/dist/tools/dynamic-tool-loader.d.ts.map +1 -1
  195. package/dist/tools/dynamic-tool-loader.js +20 -4
  196. package/dist/tools/edit-file.d.ts +7 -7
  197. package/dist/tools/edit-file.d.ts.map +1 -1
  198. package/dist/tools/edit-file.js +164 -66
  199. package/dist/tools/glob.d.ts +6 -6
  200. package/dist/tools/glob.d.ts.map +1 -1
  201. package/dist/tools/glob.js +95 -55
  202. package/dist/tools/grep.d.ts +15 -12
  203. package/dist/tools/grep.d.ts.map +1 -1
  204. package/dist/tools/grep.js +300 -192
  205. package/dist/tools/index.d.ts +143 -5
  206. package/dist/tools/index.d.ts.map +1 -1
  207. package/dist/tools/index.js +39 -24
  208. package/dist/tools/ls.d.ts +2 -2
  209. package/dist/tools/ls.d.ts.map +1 -1
  210. package/dist/tools/ls.js +7 -5
  211. package/dist/tools/read-file.d.ts +3 -3
  212. package/dist/tools/read-file.d.ts.map +1 -1
  213. package/dist/tools/read-file.js +74 -34
  214. package/dist/tools/save-file.d.ts +3 -3
  215. package/dist/tools/save-file.d.ts.map +1 -1
  216. package/dist/tools/save-file.js +11 -11
  217. package/dist/tools/skill.d.ts +23 -0
  218. package/dist/tools/skill.d.ts.map +1 -0
  219. package/dist/tools/skill.js +65 -0
  220. package/dist/tools/think.d.ts.map +1 -1
  221. package/dist/tools/think.js +2 -9
  222. package/dist/tools/utils.d.ts +2 -0
  223. package/dist/tools/utils.d.ts.map +1 -1
  224. package/dist/tools/utils.js +12 -0
  225. package/dist/tools/web-fetch.d.ts +62 -0
  226. package/dist/tools/web-fetch.d.ts.map +1 -0
  227. package/dist/tools/web-fetch.js +429 -0
  228. package/dist/tools/web-search.d.ts +62 -0
  229. package/dist/tools/web-search.d.ts.map +1 -0
  230. package/dist/tools/web-search.js +226 -0
  231. package/dist/tui/autocomplete/attachment-provider.d.ts +3 -6
  232. package/dist/tui/autocomplete/attachment-provider.d.ts.map +1 -1
  233. package/dist/tui/autocomplete/attachment-provider.js +25 -78
  234. package/dist/tui/autocomplete/base-provider.d.ts +1 -0
  235. package/dist/tui/autocomplete/base-provider.d.ts.map +1 -1
  236. package/dist/tui/autocomplete/combined-provider.d.ts +1 -4
  237. package/dist/tui/autocomplete/combined-provider.d.ts.map +1 -1
  238. package/dist/tui/autocomplete/combined-provider.js +3 -17
  239. package/dist/tui/autocomplete/command-provider.d.ts +1 -0
  240. package/dist/tui/autocomplete/command-provider.d.ts.map +1 -1
  241. package/dist/tui/autocomplete/command-provider.js +3 -0
  242. package/dist/tui/autocomplete/file-search-provider.d.ts +2 -1
  243. package/dist/tui/autocomplete/file-search-provider.d.ts.map +1 -1
  244. package/dist/tui/autocomplete/file-search-provider.js +36 -16
  245. package/dist/tui/autocomplete/skill-provider.d.ts +17 -0
  246. package/dist/tui/autocomplete/skill-provider.d.ts.map +1 -0
  247. package/dist/tui/autocomplete/skill-provider.js +49 -0
  248. package/dist/tui/autocomplete.d.ts +2 -2
  249. package/dist/tui/autocomplete.d.ts.map +1 -1
  250. package/dist/tui/autocomplete.js +3 -5
  251. package/dist/tui/components/assistant-message.d.ts.map +1 -1
  252. package/dist/tui/components/assistant-message.js +0 -4
  253. package/dist/tui/components/editor.d.ts +21 -2
  254. package/dist/tui/components/editor.d.ts.map +1 -1
  255. package/dist/tui/components/editor.js +228 -236
  256. package/dist/tui/components/footer.d.ts +6 -4
  257. package/dist/tui/components/footer.d.ts.map +1 -1
  258. package/dist/tui/components/footer.js +49 -25
  259. package/dist/tui/components/markdown.d.ts +8 -5
  260. package/dist/tui/components/markdown.d.ts.map +1 -1
  261. package/dist/tui/components/markdown.js +57 -39
  262. package/dist/tui/components/modal.d.ts.map +1 -1
  263. package/dist/tui/components/modal.js +35 -33
  264. package/dist/tui/components/notification.d.ts +13 -2
  265. package/dist/tui/components/notification.d.ts.map +1 -1
  266. package/dist/tui/components/notification.js +37 -2
  267. package/dist/tui/components/progress-bar.js +1 -1
  268. package/dist/tui/components/select-list.d.ts +1 -0
  269. package/dist/tui/components/select-list.d.ts.map +1 -1
  270. package/dist/tui/components/select-list.js +14 -11
  271. package/dist/tui/components/text.d.ts +16 -0
  272. package/dist/tui/components/text.d.ts.map +1 -1
  273. package/dist/tui/components/text.js +72 -57
  274. package/dist/tui/components/thinking-block.d.ts +9 -0
  275. package/dist/tui/components/thinking-block.d.ts.map +1 -1
  276. package/dist/tui/components/thinking-block.js +43 -11
  277. package/dist/tui/components/tool-execution.d.ts +5 -1
  278. package/dist/tui/components/tool-execution.d.ts.map +1 -1
  279. package/dist/tui/components/tool-execution.js +19 -10
  280. package/dist/tui/components/user-message.d.ts.map +1 -1
  281. package/dist/tui/components/user-message.js +0 -3
  282. package/dist/tui/components/welcome.js +2 -2
  283. package/dist/tui/editor-launcher.d.ts +13 -0
  284. package/dist/tui/editor-launcher.d.ts.map +1 -0
  285. package/dist/tui/editor-launcher.js +39 -0
  286. package/dist/tui/index.d.ts +3 -1
  287. package/dist/tui/index.d.ts.map +1 -1
  288. package/dist/tui/index.js +1 -0
  289. package/dist/tui/terminal.d.ts +27 -0
  290. package/dist/tui/terminal.d.ts.map +1 -1
  291. package/dist/tui/terminal.js +144 -15
  292. package/dist/tui/tui.d.ts +43 -0
  293. package/dist/tui/tui.d.ts.map +1 -1
  294. package/dist/tui/tui.js +172 -41
  295. package/dist/utils/bash/parse.d.ts +19 -0
  296. package/dist/utils/bash/parse.d.ts.map +1 -0
  297. package/dist/utils/bash/parse.js +223 -0
  298. package/dist/utils/bash/quote.d.ts +6 -0
  299. package/dist/utils/bash/quote.d.ts.map +1 -0
  300. package/dist/utils/bash/quote.js +23 -0
  301. package/dist/utils/bash.d.ts.map +1 -1
  302. package/dist/utils/bash.js +211 -126
  303. package/dist/utils/command-protection.d.ts +28 -0
  304. package/dist/utils/command-protection.d.ts.map +1 -0
  305. package/dist/utils/command-protection.js +324 -0
  306. package/dist/utils/dedent.d.ts.map +1 -0
  307. package/dist/utils/env-expand.d.ts +2 -0
  308. package/dist/utils/env-expand.d.ts.map +1 -0
  309. package/dist/utils/env-expand.js +8 -0
  310. package/dist/utils/filesystem/path-display.d.ts +11 -0
  311. package/dist/utils/filesystem/path-display.d.ts.map +1 -0
  312. package/dist/utils/filesystem/path-display.js +32 -0
  313. package/dist/utils/filesystem/security.d.ts +2 -2
  314. package/dist/utils/filesystem/security.d.ts.map +1 -1
  315. package/dist/utils/filesystem/security.js +32 -31
  316. package/dist/utils/formatting.d.ts.map +1 -0
  317. package/dist/{formatting.js → utils/formatting.js} +1 -1
  318. package/dist/utils/git.d.ts +4 -0
  319. package/dist/utils/git.d.ts.map +1 -1
  320. package/dist/utils/git.js +30 -0
  321. package/dist/utils/glob.d.ts +1 -1
  322. package/dist/utils/glob.d.ts.map +1 -1
  323. package/dist/utils/logger.d.ts.map +1 -0
  324. package/dist/{logger.js → utils/logger.js} +1 -1
  325. package/dist/utils/parsing.d.ts.map +1 -0
  326. package/dist/utils/process.d.ts.map +1 -1
  327. package/dist/utils/process.js +90 -37
  328. package/dist/utils/templates.d.ts +2 -0
  329. package/dist/utils/templates.d.ts.map +1 -0
  330. package/dist/utils/templates.js +24 -0
  331. package/dist/utils/version.d.ts.map +1 -0
  332. package/dist/{version.js → utils/version.js} +1 -1
  333. package/package.json +34 -25
  334. package/dist/cli.d.ts +0 -23
  335. package/dist/cli.d.ts.map +0 -1
  336. package/dist/commands/exit/index.d.ts +0 -10
  337. package/dist/commands/exit/index.d.ts.map +0 -1
  338. package/dist/commands/exit/index.js +0 -21
  339. package/dist/commands/exit/types.d.ts +0 -8
  340. package/dist/commands/exit/types.d.ts.map +0 -1
  341. package/dist/commands/exit/types.js +0 -1
  342. package/dist/commands/exit/utils.d.ts +0 -2
  343. package/dist/commands/exit/utils.d.ts.map +0 -1
  344. package/dist/commands/exit/utils.js +0 -13
  345. package/dist/commands/prompt/index.d.ts +0 -5
  346. package/dist/commands/prompt/index.d.ts.map +0 -1
  347. package/dist/commands/prompt/index.js +0 -126
  348. package/dist/commands/prompt/types.d.ts +0 -15
  349. package/dist/commands/prompt/types.d.ts.map +0 -1
  350. package/dist/commands/prompt/types.js +0 -1
  351. package/dist/commands/prompt/utils.d.ts +0 -12
  352. package/dist/commands/prompt/utils.d.ts.map +0 -1
  353. package/dist/commands/prompt/utils.js +0 -107
  354. package/dist/commands/reset/index.d.ts +0 -3
  355. package/dist/commands/reset/index.d.ts.map +0 -1
  356. package/dist/commands/reset/index.js +0 -25
  357. package/dist/commands/reset/types.d.ts +0 -1
  358. package/dist/commands/reset/types.d.ts.map +0 -1
  359. package/dist/commands/reset/types.js +0 -3
  360. package/dist/commands/save/index.d.ts +0 -3
  361. package/dist/commands/save/index.d.ts.map +0 -1
  362. package/dist/commands/save/index.js +0 -19
  363. package/dist/config.d.ts.map +0 -1
  364. package/dist/dedent.d.ts.map +0 -1
  365. package/dist/formatting.d.ts.map +0 -1
  366. package/dist/logger.d.ts.map +0 -1
  367. package/dist/mentions.d.ts +0 -14
  368. package/dist/mentions.d.ts.map +0 -1
  369. package/dist/parsing.d.ts.map +0 -1
  370. package/dist/prompts.d.ts +0 -10
  371. package/dist/prompts.d.ts.map +0 -1
  372. package/dist/repl-new.d.ts +0 -62
  373. package/dist/repl-new.d.ts.map +0 -1
  374. package/dist/skills.d.ts.map +0 -1
  375. package/dist/skills.js +0 -233
  376. package/dist/tui/autocomplete/path-provider.d.ts +0 -21
  377. package/dist/tui/autocomplete/path-provider.d.ts.map +0 -1
  378. package/dist/tui/autocomplete/path-provider.js +0 -164
  379. package/dist/version.d.ts.map +0 -1
  380. /package/dist/{dedent.d.ts → utils/dedent.d.ts} +0 -0
  381. /package/dist/{dedent.js → utils/dedent.js} +0 -0
  382. /package/dist/{formatting.d.ts → utils/formatting.d.ts} +0 -0
  383. /package/dist/{logger.d.ts → utils/logger.d.ts} +0 -0
  384. /package/dist/{parsing.d.ts → utils/parsing.d.ts} +0 -0
  385. /package/dist/{parsing.js → utils/parsing.js} +0 -0
  386. /package/dist/{version.d.ts → utils/version.d.ts} +0 -0
@@ -3,6 +3,74 @@ import { isUndefined } from "@travisennis/stdlib/typeguards";
3
3
  const MS_IN_SECOND = 1000;
4
4
  const SECONDS_IN_MINUTE = 60;
5
5
  const DEFAULT_TIMEOUT = 2 * SECONDS_IN_MINUTE * MS_IN_SECOND;
6
+ /**
7
+ * Checks for shell-only constructs that are not allowed.
8
+ */
9
+ function checkShellConstructs(input, i, ch) {
10
+ if (ch === "`") {
11
+ return { ok: false, error: "Backticks are not allowed" };
12
+ }
13
+ if (ch === "$" && i + 1 < input.length && input[i + 1] === "(") {
14
+ return { ok: false, error: "Command substitution $() is not allowed" };
15
+ }
16
+ return null;
17
+ }
18
+ /**
19
+ * Handles whitespace outside of quotes.
20
+ */
21
+ function handleWhitespace(ch, inSingle, inDouble, argv, currentBuf) {
22
+ if (!inSingle && !inDouble && /\s/.test(ch)) {
23
+ if (currentBuf.length > 0) {
24
+ argv.push(currentBuf);
25
+ }
26
+ return { done: true, buf: "" };
27
+ }
28
+ return null;
29
+ }
30
+ /**
31
+ * Handles single quote state transitions.
32
+ */
33
+ function handleSingleQuote(ch, inSingle, inDouble) {
34
+ if (!inDouble && ch === "'" && !inSingle) {
35
+ return { inSingle: true, done: true };
36
+ }
37
+ if (inSingle && ch === "'") {
38
+ return { inSingle: false, done: true };
39
+ }
40
+ return null;
41
+ }
42
+ /**
43
+ * Handles double quote state transitions.
44
+ */
45
+ function handleDoubleQuote(ch, inSingle, inDouble) {
46
+ if (!inSingle && ch === '"' && !inDouble) {
47
+ return { inDouble: true, done: true };
48
+ }
49
+ if (inDouble && ch === '"') {
50
+ return { inDouble: false, done: true };
51
+ }
52
+ return null;
53
+ }
54
+ /**
55
+ * Handles escape sequences.
56
+ * Returns the new buffer and index after handling the escape.
57
+ */
58
+ function handleEscape(input, i, ch, inSingle, inDouble, buf) {
59
+ if (!inSingle && ch === "\\") {
60
+ const nextIndex = i + 1;
61
+ if (nextIndex >= input.length) {
62
+ return { buf, i: nextIndex, ok: false, error: "Dangling escape" };
63
+ }
64
+ const next = input[nextIndex] ?? "";
65
+ // Inside double quotes, only escape " and \\ reliably
66
+ if (inDouble && next !== '"' && next !== "\\") {
67
+ // Keep backslash literally for safety
68
+ return { buf: `${buf}\\${next}`, i: nextIndex + 1 };
69
+ }
70
+ return { buf: buf + next, i: nextIndex + 1 };
71
+ }
72
+ return null;
73
+ }
6
74
  // Quote/escape-aware argv tokenizer that forbids command substitution
7
75
  export function parseArgv(input) {
8
76
  const argv = [];
@@ -14,53 +82,38 @@ export function parseArgv(input) {
14
82
  while (i < n) {
15
83
  const ch = input[i] ?? "";
16
84
  // Reject shell-only constructs early
17
- if (ch === "`")
18
- return { ok: false, error: "Backticks are not allowed" };
19
- if (ch === "$" && i + 1 < n && input[i + 1] === "(") {
20
- return { ok: false, error: "Command substitution $() is not allowed" };
21
- }
22
- if (!inSingle && !inDouble && /\s/.test(ch)) {
23
- if (buf.length > 0) {
24
- argv.push(buf);
25
- buf = "";
26
- }
85
+ const shellError = checkShellConstructs(input, i, ch);
86
+ if (shellError)
87
+ return shellError;
88
+ // Handle whitespace
89
+ const whitespace = handleWhitespace(ch, inSingle, inDouble, argv, buf);
90
+ if (whitespace) {
91
+ buf = whitespace.buf;
27
92
  i += 1;
28
93
  continue;
29
94
  }
30
- if (!inDouble && ch === "'" && !inSingle) {
31
- inSingle = true;
95
+ // Handle single quotes
96
+ const singleQuote = handleSingleQuote(ch, inSingle, inDouble);
97
+ if (singleQuote) {
98
+ inSingle = singleQuote.inSingle;
32
99
  i += 1;
33
100
  continue;
34
101
  }
35
- if (inSingle && ch === "'") {
36
- inSingle = false;
102
+ // Handle double quotes
103
+ const doubleQuote = handleDoubleQuote(ch, inSingle, inDouble);
104
+ if (doubleQuote) {
105
+ inDouble = doubleQuote.inDouble;
37
106
  i += 1;
38
107
  continue;
39
108
  }
40
- if (!inSingle && ch === '"' && !inDouble) {
41
- inDouble = true;
42
- i += 1;
43
- continue;
44
- }
45
- if (inDouble && ch === '"') {
46
- inDouble = false;
47
- i += 1;
48
- continue;
49
- }
50
- if (!inSingle && ch === "\\") {
51
- i += 1;
52
- if (i >= n)
53
- return { ok: false, error: "Dangling escape" };
54
- const next = input[i] ?? "";
55
- // Inside double quotes, only escape " and \\ reliably
56
- if (inDouble && next !== '"' && next !== "\\") {
57
- // Keep backslash literally for safety
58
- buf += `\\${next}`;
59
- }
60
- else {
61
- buf += next;
109
+ // Handle escape sequences
110
+ const escapeResult = handleEscape(input, i, ch, inSingle, inDouble, buf);
111
+ if (escapeResult) {
112
+ if ("ok" in escapeResult && !escapeResult.ok) {
113
+ return escapeResult;
62
114
  }
63
- i += 1;
115
+ buf = escapeResult.buf;
116
+ i = escapeResult.i;
64
117
  continue;
65
118
  }
66
119
  buf += ch;
@@ -0,0 +1,2 @@
1
+ export declare function replaceArgumentPlaceholders(content: string, args: string[]): string;
2
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../source/utils/templates.ts"],"names":[],"mappings":"AAAA,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,GACb,MAAM,CA6BR"}
@@ -0,0 +1,24 @@
1
+ export function replaceArgumentPlaceholders(content, args) {
2
+ const allArguments = args.join(" ");
3
+ let replacementsMade = false;
4
+ let result = content;
5
+ for (let i = 0; i < args.length; i++) {
6
+ const placeholder = `$${i + 1}`;
7
+ if (result.includes(placeholder)) {
8
+ result = result.replaceAll(placeholder, args[i]);
9
+ replacementsMade = true;
10
+ }
11
+ }
12
+ if (result.includes("$ARGUMENTS")) {
13
+ result = result.replaceAll("$ARGUMENTS", allArguments);
14
+ replacementsMade = true;
15
+ }
16
+ if (result.includes("{{INPUT}}")) {
17
+ result = result.replaceAll("{{INPUT}}", allArguments);
18
+ replacementsMade = true;
19
+ }
20
+ if (!replacementsMade && allArguments.trim().length > 0) {
21
+ result += `\n\n${allArguments}`;
22
+ }
23
+ return result;
24
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../source/utils/version.ts"],"names":[],"mappings":"AAGA,wBAAgB,iBAAiB,CAAC,QAAQ,SAAgB,GAAG,MAAM,CAiBlE"}
@@ -2,7 +2,7 @@ import { readFileSync } from "node:fs";
2
2
  import { join } from "@travisennis/stdlib/desm";
3
3
  export function getPackageVersion(fallback = "unavailable") {
4
4
  try {
5
- const pkgPath = join(import.meta.url, "..", "package.json");
5
+ const pkgPath = join(import.meta.url, "..", "..", "package.json");
6
6
  const pkgRaw = readFileSync(pkgPath, "utf8");
7
7
  const parsed = JSON.parse(pkgRaw);
8
8
  const v = typeof parsed.version === "string" ? parsed.version : undefined;
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@travisennis/acai",
3
- "version": "0.0.8",
3
+ "version": "0.0.10",
4
4
  "description": "An AI assistant for developing software.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
8
8
  "bin": {
9
- "acai": "dist/index.js",
10
- "@travisennis/acai": "dist/index.js"
9
+ "acai": "bin/acai",
10
+ "@travisennis/acai": "bin/acai"
11
11
  },
12
12
  "files": [
13
13
  "dist",
@@ -28,8 +28,12 @@
28
28
  "build": "tsc --pretty -p tsconfig.build.json",
29
29
  "clean": "rm -rf ./dist/ ./coverage/ ./tsconfig.build.tsbuildinfo",
30
30
  "compile": "tsc --pretty -p tsconfig.json",
31
- "lint": "biome lint",
32
- "lint:fix": "biome lint --unsafe --write",
31
+ "lint": "npm run lint:ast-grep && npm run lint:biome",
32
+ "lint:ast-grep": "sg scan",
33
+ "lint:ast-grep:fix": "sg scan --update-all",
34
+ "lint:biome": "biome lint",
35
+ "lint:biome:fix": "biome lint --unsafe --write",
36
+ "lint:fix": "(npm run lint:ast-grep || true) && npm run lint:biome:fix",
33
37
  "lint:staged": "biome lint --error-on-warnings --no-errors-on-unmatched --staged",
34
38
  "format:staged": "biome check --staged --formatter-enabled=true --linter-enabled=false --no-errors-on-unmatched",
35
39
  "prepack": "npm run clean && npm run build",
@@ -49,43 +53,48 @@
49
53
  "cpd": "npx jscpd ./source",
50
54
  "typecheck": "tsc --noEmit --pretty -p tsconfig.json",
51
55
  "typecheck:staged": "npm run typecheck",
52
- "check": "npm run typecheck && npm run lint:fix && npm run format"
56
+ "check": "npm run typecheck && npm run lint:fix && npm run format",
57
+ "lint:length": "find source -name '*.ts' | xargs -I{} awk 'END{if(NR>500)print FILENAME\": \"NR\" lines\"}' {}"
53
58
  },
54
59
  "dependencies": {
55
- "@ai-sdk/anthropic": "^3.0.12",
56
- "@ai-sdk/deepseek": "^2.0.5",
57
- "@ai-sdk/google": "^3.0.7",
58
- "@ai-sdk/groq": "^3.0.6",
59
- "@ai-sdk/openai": "^3.0.9",
60
- "@ai-sdk/openai-compatible": "^2.0.8",
61
- "@crosscopy/clipboard": "^0.2.8",
60
+ "@ai-sdk/anthropic": "^3.0.53",
61
+ "@ai-sdk/deepseek": "^2.0.22",
62
+ "@ai-sdk/devtools": "^0.0.15",
63
+ "@ai-sdk/google": "^3.0.36",
64
+ "@ai-sdk/groq": "^3.0.27",
65
+ "@ai-sdk/open-responses": "^1.0.4",
66
+ "@ai-sdk/openai": "^3.0.39",
67
+ "@ai-sdk/openai-compatible": "^2.0.33",
68
+ "@crosscopy/clipboard": "^0.3.6",
62
69
  "@travisennis/stdlib": "^0.0.14",
63
- "ai": "^6.0.33",
70
+ "ai": "^6.0.107",
71
+ "cheerio": "^1.2.0",
64
72
  "diff": "^8.0.3",
65
73
  "fast-glob": "^3.3.3",
66
74
  "fdir": "^6.5.0",
67
75
  "highlight.js": "^11.11.1",
68
- "marked": "17.0.1",
76
+ "marked": "17.0.3",
69
77
  "p-throttle": "^8.1.0",
70
78
  "parse5": "^8.0.0",
71
79
  "parse5-htmlparser2-tree-adapter": "^8.0.0",
72
- "pino": "^10.1.1",
80
+ "pino": "^10.3.1",
73
81
  "pino-pretty": "^13.1.3",
74
82
  "pino-roll": "^4.0.0",
75
83
  "tiktoken": "^1.0.22",
76
- "zod": "^4.3.5"
84
+ "zod": "^4.3.6"
77
85
  },
78
86
  "devDependencies": {
79
- "@ai-sdk/provider": "^3.0.2",
80
- "@biomejs/biome": "2.3.11",
81
- "@commitlint/config-conventional": "^20.3.1",
82
- "@types/node": "^25.0.8",
83
- "c8": "^10.1.3",
84
- "commitlint": "^20.3.1",
87
+ "@ai-sdk/provider": "^3.0.8",
88
+ "@ast-grep/napi": "^0.41.0",
89
+ "@biomejs/biome": "2.4.5",
90
+ "@commitlint/config-conventional": "^20.4.2",
91
+ "@types/node": "^25.3.3",
92
+ "c8": "^11.0.0",
93
+ "commitlint": "^20.4.2",
85
94
  "domhandler": "^5.0.3",
86
95
  "husky": "^9.1.7",
87
- "oxlint": "^1.39.0",
88
- "oxlint-tsgolint": "^0.11.0",
96
+ "oxlint": "^1.51.0",
97
+ "oxlint-tsgolint": "^0.15.0",
89
98
  "typescript": "^5.9.3"
90
99
  },
91
100
  "engines": {
package/dist/cli.d.ts DELETED
@@ -1,23 +0,0 @@
1
- import type { WorkspaceContext } from "./index.ts";
2
- import type { ModelManager } from "./models/manager.js";
3
- import type { PromptManager } from "./prompts/manager.ts";
4
- import type { SessionManager } from "./sessions/manager.ts";
5
- import type { TokenCounter } from "./tokens/counter.ts";
6
- import type { TokenTracker } from "./tokens/tracker.ts";
7
- interface CliOptions {
8
- messageHistory: SessionManager;
9
- promptManager: PromptManager;
10
- modelManager: ModelManager;
11
- tokenTracker: TokenTracker;
12
- tokenCounter: TokenCounter;
13
- workspace: WorkspaceContext;
14
- skillsEnabled?: boolean;
15
- }
16
- export declare class Cli {
17
- private options;
18
- private skillsEnabled;
19
- constructor(options: CliOptions);
20
- run(): Promise<void>;
21
- }
22
- export {};
23
- //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../source/cli.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAQxD,UAAU,UAAU;IAClB,cAAc,EAAE,cAAc,CAAC;IAC/B,aAAa,EAAE,aAAa,CAAC;IAC7B,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,gBAAgB,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAUD,qBAAa,GAAG;IACd,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,aAAa,CAAU;gBACnB,OAAO,EAAE,UAAU;IAKzB,GAAG;CAsHV"}
@@ -1,10 +0,0 @@
1
- import type { ReplCommand } from "../types.ts";
2
- export interface ExitCommandOptions {
3
- sessionManager: {
4
- isEmpty: () => boolean;
5
- save: () => Promise<void>;
6
- };
7
- baseDir?: string | null;
8
- }
9
- export declare const exitCommand: ({ sessionManager, baseDir, }: ExitCommandOptions) => ReplCommand;
10
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../source/commands/exit/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE;QACd,OAAO,EAAE,MAAM,OAAO,CAAC;QACvB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;KAC3B,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,eAAO,MAAM,WAAW,GAAI,8BAGzB,kBAAkB,KAAG,WA2BvB,CAAC"}
@@ -1,21 +0,0 @@
1
- import { Text } from "../../tui/index.js";
2
- import { clearTmpDirectory } from "./utils.js";
3
- export const exitCommand = ({ sessionManager, baseDir, }) => {
4
- return {
5
- command: "/exit",
6
- aliases: ["/bye", "/quit"],
7
- description: "Exits and saves the chat history.",
8
- getSubCommands: () => Promise.resolve([]),
9
- async handle(_args, { tui, container, editor, }) {
10
- if (!sessionManager.isEmpty()) {
11
- await sessionManager.save();
12
- }
13
- // Clear the .tmp directory on exit
14
- await clearTmpDirectory(baseDir);
15
- container.addChild(new Text("Exiting...", 0, 1));
16
- tui.requestRender();
17
- editor.setText("");
18
- return "break";
19
- },
20
- };
21
- };
@@ -1,8 +0,0 @@
1
- export interface ExitCommandOptions {
2
- sessionManager: {
3
- isEmpty: () => boolean;
4
- save: () => Promise<void>;
5
- };
6
- baseDir?: string | null;
7
- }
8
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../source/commands/exit/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE;QACd,OAAO,EAAE,MAAM,OAAO,CAAC;QACvB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;KAC3B,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,2 +0,0 @@
1
- export declare function clearTmpDirectory(baseDir?: string | null): Promise<void>;
2
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../source/commands/exit/utils.ts"],"names":[],"mappings":"AAIA,wBAAsB,iBAAiB,CACrC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GACtB,OAAO,CAAC,IAAI,CAAC,CAQf"}
@@ -1,13 +0,0 @@
1
- import path from "node:path";
2
- import { logger } from "../../logger.js";
3
- import { clearDirectory } from "../../utils/filesystem/operations.js";
4
- export async function clearTmpDirectory(baseDir) {
5
- try {
6
- const tmpDirPath = path.join(baseDir ?? process.cwd(), ".tmp");
7
- await clearDirectory(tmpDirPath);
8
- }
9
- catch (error) {
10
- // Log error but don't block exit
11
- logger.error(error, "Failed to clear .tmp directory:");
12
- }
13
- }
@@ -1,5 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,126 +0,0 @@
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
- };
@@ -1,15 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,12 +0,0 @@
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
@@ -1 +0,0 @@
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"}