@travisennis/acai 0.0.5 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (421) hide show
  1. package/README.md +190 -19
  2. package/bin/acai-wrapper.js +26 -0
  3. package/dist/agent/index.d.ts +132 -0
  4. package/dist/agent/index.d.ts.map +1 -0
  5. package/dist/agent/index.js +434 -0
  6. package/dist/api/exa/index.js +1 -1
  7. package/dist/cli.d.ts +4 -1
  8. package/dist/cli.d.ts.map +1 -1
  9. package/dist/cli.js +67 -40
  10. package/dist/commands/add-directory-command.d.ts +3 -0
  11. package/dist/commands/add-directory-command.d.ts.map +1 -0
  12. package/dist/commands/add-directory-command.js +54 -0
  13. package/dist/commands/application-log-command.d.ts +1 -1
  14. package/dist/commands/application-log-command.d.ts.map +1 -1
  15. package/dist/commands/application-log-command.js +18 -20
  16. package/dist/commands/clear-command.d.ts +1 -1
  17. package/dist/commands/clear-command.d.ts.map +1 -1
  18. package/dist/commands/clear-command.js +7 -3
  19. package/dist/commands/compact-command.d.ts.map +1 -1
  20. package/dist/commands/compact-command.js +9 -5
  21. package/dist/commands/context-command.d.ts +3 -0
  22. package/dist/commands/context-command.d.ts.map +1 -0
  23. package/dist/commands/context-command.js +124 -0
  24. package/dist/commands/copy-command.d.ts.map +1 -1
  25. package/dist/commands/copy-command.js +14 -5
  26. package/dist/commands/edit-command.d.ts +1 -1
  27. package/dist/commands/edit-command.d.ts.map +1 -1
  28. package/dist/commands/edit-command.js +21 -34
  29. package/dist/commands/edit-prompt-command.d.ts +1 -1
  30. package/dist/commands/edit-prompt-command.d.ts.map +1 -1
  31. package/dist/commands/edit-prompt-command.js +18 -15
  32. package/dist/commands/exit-command.d.ts +1 -4
  33. package/dist/commands/exit-command.d.ts.map +1 -1
  34. package/dist/commands/exit-command.js +9 -5
  35. package/dist/commands/files-command.d.ts +1 -1
  36. package/dist/commands/files-command.d.ts.map +1 -1
  37. package/dist/commands/files-command.js +20 -16
  38. package/dist/commands/generate-rules-command.d.ts +1 -1
  39. package/dist/commands/generate-rules-command.d.ts.map +1 -1
  40. package/dist/commands/generate-rules-command.js +307 -39
  41. package/dist/commands/handoff-command.d.ts +3 -0
  42. package/dist/commands/handoff-command.d.ts.map +1 -0
  43. package/dist/commands/handoff-command.js +191 -0
  44. package/dist/commands/health-command.d.ts +1 -1
  45. package/dist/commands/health-command.d.ts.map +1 -1
  46. package/dist/commands/health-command.js +49 -27
  47. package/dist/commands/help-command.d.ts +1 -1
  48. package/dist/commands/help-command.d.ts.map +1 -1
  49. package/dist/commands/help-command.js +25 -5
  50. package/dist/commands/history-command.d.ts +3 -0
  51. package/dist/commands/history-command.d.ts.map +1 -0
  52. package/dist/commands/history-command.js +458 -0
  53. package/dist/commands/init-command.d.ts +1 -1
  54. package/dist/commands/init-command.d.ts.map +1 -1
  55. package/dist/commands/init-command.js +40 -22
  56. package/dist/commands/last-log-command.d.ts +1 -1
  57. package/dist/commands/last-log-command.d.ts.map +1 -1
  58. package/dist/commands/last-log-command.js +15 -15
  59. package/dist/commands/list-directories-command.d.ts +3 -0
  60. package/dist/commands/list-directories-command.d.ts.map +1 -0
  61. package/dist/commands/list-directories-command.js +35 -0
  62. package/dist/commands/list-tools-command.d.ts.map +1 -1
  63. package/dist/commands/list-tools-command.js +61 -21
  64. package/dist/commands/manager.d.ts +9 -4
  65. package/dist/commands/manager.d.ts.map +1 -1
  66. package/dist/commands/manager.js +64 -39
  67. package/dist/commands/model-command.d.ts.map +1 -1
  68. package/dist/commands/model-command.js +201 -66
  69. package/dist/commands/paste-command.d.ts +1 -1
  70. package/dist/commands/paste-command.d.ts.map +1 -1
  71. package/dist/commands/paste-command.js +23 -9
  72. package/dist/commands/pickup-command.d.ts +3 -0
  73. package/dist/commands/pickup-command.d.ts.map +1 -0
  74. package/dist/commands/pickup-command.js +109 -0
  75. package/dist/commands/prompt-command.d.ts +19 -1
  76. package/dist/commands/prompt-command.d.ts.map +1 -1
  77. package/dist/commands/prompt-command.js +191 -98
  78. package/dist/commands/remove-directory-command.d.ts +3 -0
  79. package/dist/commands/remove-directory-command.d.ts.map +1 -0
  80. package/dist/commands/remove-directory-command.js +55 -0
  81. package/dist/commands/reset-command.d.ts +1 -1
  82. package/dist/commands/reset-command.d.ts.map +1 -1
  83. package/dist/commands/reset-command.js +8 -5
  84. package/dist/commands/rules-command.d.ts +1 -1
  85. package/dist/commands/rules-command.d.ts.map +1 -1
  86. package/dist/commands/rules-command.js +25 -22
  87. package/dist/commands/save-command.d.ts +1 -1
  88. package/dist/commands/save-command.d.ts.map +1 -1
  89. package/dist/commands/save-command.js +8 -3
  90. package/dist/commands/shell-command.d.ts.map +1 -1
  91. package/dist/commands/shell-command.js +45 -24
  92. package/dist/commands/types.d.ts +9 -7
  93. package/dist/commands/types.d.ts.map +1 -1
  94. package/dist/commands/usage-command.d.ts +1 -1
  95. package/dist/commands/usage-command.d.ts.map +1 -1
  96. package/dist/commands/usage-command.js +18 -7
  97. package/dist/config.d.ts +21 -11
  98. package/dist/config.d.ts.map +1 -1
  99. package/dist/config.js +90 -63
  100. package/dist/execution/index.d.ts +17 -2
  101. package/dist/execution/index.d.ts.map +1 -1
  102. package/dist/execution/index.js +62 -20
  103. package/dist/formatting.d.ts +127 -0
  104. package/dist/formatting.d.ts.map +1 -1
  105. package/dist/formatting.js +201 -0
  106. package/dist/index.d.ts +7 -2
  107. package/dist/index.d.ts.map +1 -1
  108. package/dist/index.js +263 -102
  109. package/dist/logger.d.ts.map +1 -1
  110. package/dist/logger.js +47 -18
  111. package/dist/mentions.d.ts +2 -1
  112. package/dist/mentions.d.ts.map +1 -1
  113. package/dist/mentions.js +16 -1
  114. package/dist/messages.d.ts +11 -0
  115. package/dist/messages.d.ts.map +1 -1
  116. package/dist/messages.js +122 -21
  117. package/dist/middleware/cache.d.ts +3 -0
  118. package/dist/middleware/cache.d.ts.map +1 -0
  119. package/dist/middleware/cache.js +53 -0
  120. package/dist/middleware/index.d.ts +1 -0
  121. package/dist/middleware/index.d.ts.map +1 -1
  122. package/dist/middleware/index.js +1 -0
  123. package/dist/models/ai-config.d.ts +4 -2
  124. package/dist/models/ai-config.d.ts.map +1 -1
  125. package/dist/models/ai-config.js +12 -2
  126. package/dist/models/anthropic-provider.d.ts.map +1 -1
  127. package/dist/models/anthropic-provider.js +3 -67
  128. package/dist/models/deepseek-provider.d.ts.map +1 -1
  129. package/dist/models/deepseek-provider.js +0 -2
  130. package/dist/models/google-provider.d.ts.map +1 -1
  131. package/dist/models/google-provider.js +0 -3
  132. package/dist/models/groq-provider.d.ts.map +1 -1
  133. package/dist/models/groq-provider.js +0 -1
  134. package/dist/models/manager.d.ts +2 -1
  135. package/dist/models/manager.d.ts.map +1 -1
  136. package/dist/models/manager.js +26 -2
  137. package/dist/models/openai-provider.d.ts.map +1 -1
  138. package/dist/models/openai-provider.js +0 -4
  139. package/dist/models/openrouter-provider.d.ts +16 -22
  140. package/dist/models/openrouter-provider.d.ts.map +1 -1
  141. package/dist/models/openrouter-provider.js +175 -236
  142. package/dist/models/providers.d.ts +4 -14
  143. package/dist/models/providers.d.ts.map +1 -1
  144. package/dist/models/providers.js +1 -57
  145. package/dist/models/xai-provider.d.ts.map +1 -1
  146. package/dist/models/xai-provider.js +0 -2
  147. package/dist/prompts.d.ts +10 -4
  148. package/dist/prompts.d.ts.map +1 -1
  149. package/dist/prompts.js +447 -70
  150. package/dist/repl/project-status-line.d.ts +3 -0
  151. package/dist/repl/project-status-line.d.ts.map +1 -0
  152. package/dist/repl/project-status-line.js +61 -0
  153. package/dist/repl/tool-call-repair.d.ts.map +1 -1
  154. package/dist/repl/tool-call-repair.js +8 -4
  155. package/dist/repl-new.d.ts +51 -0
  156. package/dist/repl-new.d.ts.map +1 -0
  157. package/dist/repl-new.js +354 -0
  158. package/dist/skills.d.ts +20 -0
  159. package/dist/skills.d.ts.map +1 -0
  160. package/dist/skills.js +192 -0
  161. package/dist/terminal/control.d.ts +55 -0
  162. package/dist/terminal/control.d.ts.map +1 -0
  163. package/dist/terminal/control.js +109 -0
  164. package/dist/terminal/default-theme.d.ts +1 -1
  165. package/dist/terminal/default-theme.d.ts.map +1 -1
  166. package/dist/terminal/default-theme.js +24 -28
  167. package/dist/terminal/formatting.d.ts +23 -25
  168. package/dist/terminal/formatting.d.ts.map +1 -1
  169. package/dist/terminal/formatting.js +35 -52
  170. package/dist/terminal/highlight/index.d.ts.map +1 -1
  171. package/dist/terminal/highlight/index.js +3 -6
  172. package/dist/terminal/highlight/theme.d.ts.map +1 -1
  173. package/dist/terminal/highlight/theme.js +2 -6
  174. package/dist/terminal/index.d.ts +2 -94
  175. package/dist/terminal/index.d.ts.map +1 -1
  176. package/dist/terminal/index.js +2 -370
  177. package/dist/terminal/markdown.js +10 -5
  178. package/dist/terminal/select-prompt.d.ts +2 -2
  179. package/dist/terminal/select-prompt.d.ts.map +1 -1
  180. package/dist/terminal/select-prompt.js +47 -39
  181. package/dist/terminal/strip-ansi.js +4 -4
  182. package/dist/terminal/table/cell.d.ts +114 -0
  183. package/dist/terminal/table/cell.d.ts.map +1 -0
  184. package/dist/terminal/table/cell.js +407 -0
  185. package/dist/terminal/table/debug.d.ts +15 -0
  186. package/dist/terminal/table/debug.d.ts.map +1 -0
  187. package/dist/terminal/table/debug.js +32 -0
  188. package/dist/terminal/table/index.d.ts +3 -0
  189. package/dist/terminal/table/index.d.ts.map +1 -0
  190. package/dist/terminal/table/index.js +2 -0
  191. package/dist/terminal/table/layout-manager.d.ts +27 -0
  192. package/dist/terminal/table/layout-manager.d.ts.map +1 -0
  193. package/dist/terminal/table/layout-manager.js +257 -0
  194. package/dist/terminal/table/table.d.ts +9 -0
  195. package/dist/terminal/table/table.d.ts.map +1 -0
  196. package/dist/terminal/table/table.js +97 -0
  197. package/dist/terminal/table/utils.d.ts +63 -0
  198. package/dist/terminal/table/utils.d.ts.map +1 -0
  199. package/dist/terminal/table/utils.js +326 -0
  200. package/dist/tokens/threshold.d.ts +20 -0
  201. package/dist/tokens/threshold.d.ts.map +1 -0
  202. package/dist/tokens/threshold.js +67 -0
  203. package/dist/tools/advanced-edit-file.d.ts +69 -0
  204. package/dist/tools/advanced-edit-file.d.ts.map +1 -0
  205. package/dist/tools/advanced-edit-file.js +285 -0
  206. package/dist/tools/agent.d.ts +16 -5
  207. package/dist/tools/agent.d.ts.map +1 -1
  208. package/dist/tools/agent.js +86 -59
  209. package/dist/tools/bash.d.ts +23 -12
  210. package/dist/tools/bash.d.ts.map +1 -1
  211. package/dist/tools/bash.js +243 -128
  212. package/dist/tools/batch.d.ts +34 -0
  213. package/dist/tools/batch.d.ts.map +1 -0
  214. package/dist/tools/batch.js +174 -0
  215. package/dist/tools/code-interpreter.d.ts +21 -9
  216. package/dist/tools/code-interpreter.d.ts.map +1 -1
  217. package/dist/tools/code-interpreter.js +151 -134
  218. package/dist/tools/delete-file.d.ts +17 -10
  219. package/dist/tools/delete-file.d.ts.map +1 -1
  220. package/dist/tools/delete-file.js +60 -97
  221. package/dist/tools/directory-tree.d.ts +17 -12
  222. package/dist/tools/directory-tree.d.ts.map +1 -1
  223. package/dist/tools/directory-tree.js +57 -48
  224. package/dist/tools/dynamic-tool-loader.d.ts +16 -10
  225. package/dist/tools/dynamic-tool-loader.d.ts.map +1 -1
  226. package/dist/tools/dynamic-tool-loader.js +122 -130
  227. package/dist/tools/dynamic-tool-parser.d.ts +1 -0
  228. package/dist/tools/dynamic-tool-parser.d.ts.map +1 -1
  229. package/dist/tools/dynamic-tool-parser.js +1 -0
  230. package/dist/tools/edit-file.d.ts +35 -15
  231. package/dist/tools/edit-file.d.ts.map +1 -1
  232. package/dist/tools/edit-file.js +127 -114
  233. package/dist/tools/glob.d.ts +36 -0
  234. package/dist/tools/glob.d.ts.map +1 -0
  235. package/dist/tools/glob.js +154 -0
  236. package/dist/tools/grep.d.ts +73 -12
  237. package/dist/tools/grep.d.ts.map +1 -1
  238. package/dist/tools/grep.js +425 -165
  239. package/dist/tools/index.d.ts +220 -126
  240. package/dist/tools/index.d.ts.map +1 -1
  241. package/dist/tools/index.js +284 -135
  242. package/dist/tools/llm-edit-fixer.d.ts +24 -0
  243. package/dist/tools/llm-edit-fixer.d.ts.map +1 -0
  244. package/dist/tools/llm-edit-fixer.js +136 -0
  245. package/dist/tools/move-file.d.ts +19 -7
  246. package/dist/tools/move-file.d.ts.map +1 -1
  247. package/dist/tools/move-file.js +48 -34
  248. package/dist/tools/read-file.d.ts +47 -9
  249. package/dist/tools/read-file.d.ts.map +1 -1
  250. package/dist/tools/read-file.js +84 -70
  251. package/dist/tools/read-multiple-files.d.ts +17 -6
  252. package/dist/tools/read-multiple-files.d.ts.map +1 -1
  253. package/dist/tools/read-multiple-files.js +132 -72
  254. package/dist/tools/save-file.d.ts +45 -12
  255. package/dist/tools/save-file.d.ts.map +1 -1
  256. package/dist/tools/save-file.js +76 -101
  257. package/dist/tools/think.d.ts +15 -7
  258. package/dist/tools/think.d.ts.map +1 -1
  259. package/dist/tools/think.js +34 -20
  260. package/dist/tools/types.d.ts +8 -10
  261. package/dist/tools/types.d.ts.map +1 -1
  262. package/dist/tools/types.js +9 -0
  263. package/dist/tools/utils.d.ts +14 -0
  264. package/dist/tools/utils.d.ts.map +1 -0
  265. package/dist/tools/utils.js +16 -0
  266. package/dist/tools/web-fetch.d.ts +11 -4
  267. package/dist/tools/web-fetch.d.ts.map +1 -1
  268. package/dist/tools/web-fetch.js +39 -38
  269. package/dist/tools/web-search.d.ts +15 -6
  270. package/dist/tools/web-search.d.ts.map +1 -1
  271. package/dist/tools/web-search.js +64 -31
  272. package/dist/tui/autocomplete.d.ts +44 -0
  273. package/dist/tui/autocomplete.d.ts.map +1 -0
  274. package/dist/tui/autocomplete.js +466 -0
  275. package/dist/tui/components/assistant-message.d.ts +18 -0
  276. package/dist/tui/components/assistant-message.d.ts.map +1 -0
  277. package/dist/tui/components/assistant-message.js +29 -0
  278. package/dist/tui/components/box.d.ts +20 -0
  279. package/dist/tui/components/box.d.ts.map +1 -0
  280. package/dist/tui/components/box.js +81 -0
  281. package/dist/tui/components/editor.d.ts +106 -0
  282. package/dist/tui/components/editor.d.ts.map +1 -0
  283. package/dist/tui/components/editor.js +1220 -0
  284. package/dist/tui/components/footer.d.ts +12 -0
  285. package/dist/tui/components/footer.d.ts.map +1 -0
  286. package/dist/tui/components/footer.js +209 -0
  287. package/dist/tui/components/header.d.ts +21 -0
  288. package/dist/tui/components/header.d.ts.map +1 -0
  289. package/dist/tui/components/header.js +63 -0
  290. package/dist/tui/components/input.d.ts +14 -0
  291. package/dist/tui/components/input.d.ts.map +1 -0
  292. package/dist/tui/components/input.js +122 -0
  293. package/dist/tui/components/loader.d.ts +23 -0
  294. package/dist/tui/components/loader.d.ts.map +1 -0
  295. package/dist/tui/components/loader.js +45 -0
  296. package/dist/tui/components/markdown.d.ts +106 -0
  297. package/dist/tui/components/markdown.d.ts.map +1 -0
  298. package/dist/tui/components/markdown.js +586 -0
  299. package/dist/tui/components/modal.d.ts +29 -0
  300. package/dist/tui/components/modal.d.ts.map +1 -0
  301. package/dist/tui/components/modal.js +263 -0
  302. package/dist/tui/components/progress-bar.d.ts +19 -0
  303. package/dist/tui/components/progress-bar.d.ts.map +1 -0
  304. package/dist/tui/components/progress-bar.js +78 -0
  305. package/dist/tui/components/prompt-status.d.ts +17 -0
  306. package/dist/tui/components/prompt-status.d.ts.map +1 -0
  307. package/dist/tui/components/prompt-status.js +26 -0
  308. package/dist/tui/components/select-list.d.ts +48 -0
  309. package/dist/tui/components/select-list.d.ts.map +1 -0
  310. package/dist/tui/components/select-list.js +207 -0
  311. package/dist/tui/components/spacer.d.ts +16 -0
  312. package/dist/tui/components/spacer.d.ts.map +1 -0
  313. package/dist/tui/components/spacer.js +27 -0
  314. package/dist/tui/components/table.d.ts +27 -0
  315. package/dist/tui/components/table.d.ts.map +1 -0
  316. package/dist/tui/components/table.js +125 -0
  317. package/dist/tui/components/text.d.ts +26 -0
  318. package/dist/tui/components/text.d.ts.map +1 -0
  319. package/dist/tui/components/text.js +143 -0
  320. package/dist/tui/components/thinking-block.d.ts +14 -0
  321. package/dist/tui/components/thinking-block.d.ts.map +1 -0
  322. package/dist/tui/components/thinking-block.js +33 -0
  323. package/dist/tui/components/tool-execution.d.ts +21 -0
  324. package/dist/tui/components/tool-execution.d.ts.map +1 -0
  325. package/dist/tui/components/tool-execution.js +161 -0
  326. package/dist/tui/components/user-message.d.ts +9 -0
  327. package/dist/tui/components/user-message.d.ts.map +1 -0
  328. package/dist/tui/components/user-message.js +23 -0
  329. package/dist/tui/components/welcome.d.ts +6 -0
  330. package/dist/tui/components/welcome.d.ts.map +1 -0
  331. package/dist/tui/components/welcome.js +30 -0
  332. package/dist/tui/index.d.ts +18 -0
  333. package/dist/tui/index.d.ts.map +1 -0
  334. package/dist/tui/index.js +22 -0
  335. package/dist/tui/terminal.d.ts +38 -0
  336. package/dist/tui/terminal.d.ts.map +1 -0
  337. package/dist/tui/terminal.js +94 -0
  338. package/dist/tui/tui.d.ts +69 -0
  339. package/dist/tui/tui.d.ts.map +1 -0
  340. package/dist/tui/tui.js +204 -0
  341. package/dist/tui/utils.d.ts +24 -0
  342. package/dist/tui/utils.d.ts.map +1 -0
  343. package/dist/tui/utils.js +111 -0
  344. package/dist/utils/bash.d.ts +7 -0
  345. package/dist/utils/bash.d.ts.map +1 -0
  346. package/dist/{tools/bash-utils.js → utils/bash.js} +31 -12
  347. package/dist/utils/{filesystem.d.ts → filesystem/operations.d.ts} +1 -1
  348. package/dist/utils/filesystem/operations.d.ts.map +1 -0
  349. package/dist/utils/filesystem/security.d.ts +9 -0
  350. package/dist/utils/filesystem/security.d.ts.map +1 -0
  351. package/dist/{tools/filesystem-utils.js → utils/filesystem/security.js} +93 -21
  352. package/dist/utils/funcs.d.ts +6 -0
  353. package/dist/utils/funcs.d.ts.map +1 -0
  354. package/dist/utils/funcs.js +6 -0
  355. package/dist/utils/generators.d.ts +3 -0
  356. package/dist/utils/generators.d.ts.map +1 -0
  357. package/dist/utils/generators.js +25 -0
  358. package/dist/{tools/git-utils.d.ts → utils/git.d.ts} +1 -1
  359. package/dist/utils/git.d.ts.map +1 -0
  360. package/dist/{tools/git-utils.js → utils/git.js} +0 -6
  361. package/dist/utils/glob.js +1 -1
  362. package/dist/utils/iterables.d.ts +2 -0
  363. package/dist/utils/iterables.d.ts.map +1 -0
  364. package/dist/utils/iterables.js +6 -0
  365. package/dist/utils/{zod-utils.d.ts → zod.d.ts} +1 -1
  366. package/dist/utils/zod.d.ts.map +1 -0
  367. package/package.json +21 -21
  368. package/dist/conversation-analyzer.d.ts +0 -11
  369. package/dist/conversation-analyzer.d.ts.map +0 -1
  370. package/dist/conversation-analyzer.js +0 -88
  371. package/dist/repl/display-tool-messages.d.ts +0 -4
  372. package/dist/repl/display-tool-messages.d.ts.map +0 -1
  373. package/dist/repl/display-tool-messages.js +0 -55
  374. package/dist/repl/display-tool-use.d.ts +0 -14
  375. package/dist/repl/display-tool-use.d.ts.map +0 -1
  376. package/dist/repl/display-tool-use.js +0 -63
  377. package/dist/repl/get-prompt-header.d.ts +0 -8
  378. package/dist/repl/get-prompt-header.d.ts.map +0 -1
  379. package/dist/repl/get-prompt-header.js +0 -38
  380. package/dist/repl-prompt.d.ts +0 -15
  381. package/dist/repl-prompt.d.ts.map +0 -1
  382. package/dist/repl-prompt.js +0 -147
  383. package/dist/repl.d.ts +0 -31
  384. package/dist/repl.d.ts.map +0 -1
  385. package/dist/repl.js +0 -310
  386. package/dist/terminal/checkbox-prompt.d.ts +0 -36
  387. package/dist/terminal/checkbox-prompt.d.ts.map +0 -1
  388. package/dist/terminal/checkbox-prompt.js +0 -362
  389. package/dist/terminal/editor-prompt.d.ts +0 -10
  390. package/dist/terminal/editor-prompt.d.ts.map +0 -1
  391. package/dist/terminal/editor-prompt.js +0 -61
  392. package/dist/terminal/errors.d.ts +0 -19
  393. package/dist/terminal/errors.d.ts.map +0 -1
  394. package/dist/terminal/errors.js +0 -37
  395. package/dist/terminal/input-prompt.d.ts +0 -16
  396. package/dist/terminal/input-prompt.d.ts.map +0 -1
  397. package/dist/terminal/input-prompt.js +0 -181
  398. package/dist/terminal/search-prompt.d.ts +0 -20
  399. package/dist/terminal/search-prompt.d.ts.map +0 -1
  400. package/dist/terminal/search-prompt.js +0 -279
  401. package/dist/terminal/types.d.ts +0 -35
  402. package/dist/terminal/types.d.ts.map +0 -1
  403. package/dist/terminal/types.js +0 -1
  404. package/dist/tokens/manage-output.d.ts +0 -34
  405. package/dist/tokens/manage-output.d.ts.map +0 -1
  406. package/dist/tokens/manage-output.js +0 -44
  407. package/dist/tool-executor.d.ts +0 -28
  408. package/dist/tool-executor.d.ts.map +0 -1
  409. package/dist/tool-executor.js +0 -74
  410. package/dist/tools/bash-utils.d.ts +0 -7
  411. package/dist/tools/bash-utils.d.ts.map +0 -1
  412. package/dist/tools/file-editing-utils.d.ts +0 -2
  413. package/dist/tools/file-editing-utils.d.ts.map +0 -1
  414. package/dist/tools/file-editing-utils.js +0 -135
  415. package/dist/tools/filesystem-utils.d.ts +0 -7
  416. package/dist/tools/filesystem-utils.d.ts.map +0 -1
  417. package/dist/tools/git-utils.d.ts.map +0 -1
  418. package/dist/utils/filesystem.d.ts.map +0 -1
  419. package/dist/utils/zod-utils.d.ts.map +0 -1
  420. /package/dist/utils/{filesystem.js → filesystem/operations.js} +0 -0
  421. /package/dist/utils/{zod-utils.js → zod.js} +0 -0
package/dist/index.js CHANGED
@@ -1,50 +1,72 @@
1
1
  #!/usr/bin/env node
2
+ import os from "node:os";
3
+ import path from "node:path";
2
4
  import { text } from "node:stream/consumers";
3
5
  import { parseArgs } from "node:util";
4
6
  import { asyncTry } from "@travisennis/stdlib/try";
5
7
  import { isDefined } from "@travisennis/stdlib/typeguards";
8
+ import { Agent } from "./agent/index.js";
6
9
  import { Cli } from "./cli.js";
7
10
  import { CommandManager } from "./commands/manager.js";
8
- import { config } from "./config.js";
11
+ import { config, } from "./config.js";
9
12
  import { logger } from "./logger.js";
10
13
  import { MessageHistory } from "./messages.js";
11
14
  import { ModelManager } from "./models/manager.js";
12
15
  import { isSupportedModel } from "./models/providers.js";
13
16
  import { PromptManager } from "./prompts/manager.js";
14
- import { Repl } from "./repl.js";
15
- import { initTerminal } from "./terminal/index.js";
17
+ import { systemPrompt } from "./prompts.js";
18
+ import { NewRepl } from "./repl-new.js";
19
+ import { setTerminalTitle } from "./terminal/formatting.js";
16
20
  import { select } from "./terminal/select-prompt.js";
17
21
  import { TokenCounter } from "./tokens/counter.js";
18
22
  import { TokenTracker } from "./tokens/tracker.js";
19
- import { ToolExecutor } from "./tool-executor.js";
23
+ import { initAgents, initTools, } from "./tools/index.js";
20
24
  import { getPackageVersion } from "./version.js";
25
+ // Create workspace context from CLI arguments
26
+ export function createWorkspaceContext(addDirArgs = []) {
27
+ const primaryDir = process.cwd();
28
+ const allowedDirs = [
29
+ primaryDir,
30
+ "/tmp",
31
+ config.getAccessibleLogDir(),
32
+ path.join(os.homedir(), ".acai"),
33
+ ...addDirArgs,
34
+ ];
35
+ // Remove duplicates while preserving order
36
+ const uniqueDirs = allowedDirs.filter((dir, index, array) => array.indexOf(dir) === index);
37
+ return {
38
+ primaryDir,
39
+ allowedDirs: uniqueDirs,
40
+ };
41
+ }
21
42
  const helpText = `
22
43
  Usage
23
44
  $ acai <input>
24
45
 
25
46
  Options
26
47
  --model, -m Sets the model to use
27
- --prompt, -p Sets the prompt
28
- --oneshot, -o Run once and exit
48
+ --prompt, -p Sets the prompt (runs in CLI mode)
29
49
  --continue Load the most recent conversation
30
50
  --resume Select a recent conversation to resume
31
- --autoAcceptAll Accept all commands and edits without prompting
51
+ --add-dir Add additional working directory (can be used multiple times)
52
+ --no-skills Disable skills discovery and loading
53
+
32
54
  --help, -h Show help
33
55
  --version, -v Show version
34
56
 
35
57
  Examples
36
58
  $ acai --model anthopric:sonnet
37
59
  $ acai -p "initial prompt"
38
- $ acai -p "one-shot prompt" -o
60
+ $ acai --add-dir /path/to/project1 --add-dir /path/to/project2
39
61
  `;
40
62
  const parsed = parseArgs({
41
63
  options: {
42
64
  model: { type: "string", short: "m" },
43
65
  prompt: { type: "string", short: "p" },
44
- oneshot: { type: "boolean", short: "o", default: false },
45
66
  continue: { type: "boolean", default: false },
46
67
  resume: { type: "boolean", default: false },
47
- autoAcceptAll: { type: "boolean", default: false },
68
+ "add-dir": { type: "string", multiple: true },
69
+ "no-skills": { type: "boolean", default: false },
48
70
  help: { type: "boolean", short: "h" },
49
71
  version: { type: "boolean", short: "v" },
50
72
  },
@@ -52,6 +74,8 @@ const parsed = parseArgs({
52
74
  });
53
75
  const flags = parsed.values;
54
76
  const input = parsed.positionals;
77
+ // Create workspace context from CLI arguments
78
+ const workspace = createWorkspaceContext(flags["add-dir"]);
55
79
  /**
56
80
  * Global error handler function.
57
81
  * @param {Error} error - The error to be handled.
@@ -60,8 +84,56 @@ const input = parsed.positionals;
60
84
  export function handleError(error) {
61
85
  logger.error({ error: error }, error.message);
62
86
  }
63
- async function main() {
64
- const appConfig = await config.ensureAppConfig("acai");
87
+ // Configuration constants
88
+ const DEFAULT_HISTORY_LIMIT = 10;
89
+ const CONTINUE_HISTORY_LIMIT = 1;
90
+ // Helper functions for main()
91
+ async function initializeAppState(appConfig, initialPromptInput, stdInPrompt, hasContinueOrResume) {
92
+ const appDir = config.app;
93
+ // Parallelize independent async operations
94
+ const [messageHistoryDir, modelManager] = await Promise.all([
95
+ appDir.ensurePath("message-history"),
96
+ initializeModelManager(appDir),
97
+ ]);
98
+ // Initialize synchronous components
99
+ const tokenTracker = new TokenTracker();
100
+ const tokenCounter = new TokenCounter();
101
+ // Initialize dependent components
102
+ const messageHistory = await initializeMessageHistory(messageHistoryDir, modelManager, tokenTracker);
103
+ // Handle conversation history loading
104
+ await handleConversationHistory(messageHistory, messageHistoryDir, hasContinueOrResume);
105
+ // Setup prompt manager
106
+ const promptManager = new PromptManager(tokenCounter);
107
+ if (!hasContinueOrResume && isDefined(initialPromptInput)) {
108
+ promptManager.set(initialPromptInput);
109
+ }
110
+ if (stdInPrompt) {
111
+ promptManager.addContext(stdInPrompt);
112
+ }
113
+ const promptHistory = [];
114
+ const commands = new CommandManager({
115
+ promptManager,
116
+ modelManager,
117
+ messageHistory,
118
+ tokenTracker,
119
+ config,
120
+ tokenCounter,
121
+ promptHistory,
122
+ workspace,
123
+ });
124
+ await commands.initializeCommmands();
125
+ return {
126
+ appConfig,
127
+ modelManager,
128
+ tokenTracker,
129
+ tokenCounter,
130
+ messageHistory,
131
+ promptManager,
132
+ promptHistory,
133
+ commands,
134
+ };
135
+ }
136
+ async function handleEarlyExits() {
65
137
  if (flags.version === true) {
66
138
  console.info(getPackageVersion());
67
139
  process.exit(0);
@@ -70,25 +142,21 @@ async function main() {
70
142
  console.info(helpText);
71
143
  process.exit(0);
72
144
  }
73
- const appDir = config.app;
74
- const messageHistoryDir = await appDir.ensurePath("message-history");
75
- // --- Argument Validation ---
145
+ return false;
146
+ }
147
+ function validateCliArguments() {
76
148
  if (flags.continue === true && flags.resume === true) {
77
149
  console.error("Cannot use --continue and --resume flags together.");
78
150
  process.exit(1);
79
151
  }
152
+ }
153
+ async function determineInitialPrompt() {
80
154
  const hasContinueOrResume = flags.continue === true || flags.resume === true;
81
- if (hasContinueOrResume && flags.oneshot === true) {
82
- console.error("Cannot use --continue or --resume with --oneshot.");
83
- process.exit(1);
84
- }
85
- // --- Determine Initial Prompt (potential conflict) ---
86
155
  const positionalPrompt = input.at(0);
87
156
  let stdInPrompt;
88
157
  // Check if there's data available on stdin
89
158
  if (!process.stdin.isTTY) {
90
159
  try {
91
- // Non-TTY stdin means data is being piped in
92
160
  stdInPrompt = await text(process.stdin);
93
161
  }
94
162
  catch (error) {
@@ -104,121 +172,214 @@ async function main() {
104
172
  console.error("Cannot use --continue or --resume with an initial prompt.");
105
173
  process.exit(1);
106
174
  }
107
- const terminal = initTerminal();
108
- terminal.setTitle(`acai: ${process.cwd()}`);
175
+ return { initialPromptInput, stdInPrompt, hasContinueOrResume };
176
+ }
177
+ async function initializeModelManager(appDir) {
109
178
  const chosenModel = isSupportedModel(flags.model)
110
179
  ? flags.model
111
- : "openrouter:glm-4.5";
180
+ : "openrouter:glm-4.6";
112
181
  const modelManager = new ModelManager({
113
182
  stateDir: await appDir.ensurePath("audit"),
114
183
  });
115
184
  modelManager.setModel("repl", chosenModel);
116
185
  modelManager.setModel("cli", chosenModel);
117
- modelManager.setModel("title-conversation", "openrouter:gemini-flash25");
118
- modelManager.setModel("conversation-summarizer", "openrouter:gemini-flash25");
119
- modelManager.setModel("tool-repair", "openai:gpt-4.1");
120
- modelManager.setModel("conversation-analyzer", "openrouter:gemini-flash25");
186
+ modelManager.setModel("title-conversation", chosenModel);
187
+ modelManager.setModel("conversation-summarizer", chosenModel);
188
+ modelManager.setModel("tool-repair", chosenModel);
189
+ modelManager.setModel("conversation-analyzer", chosenModel);
121
190
  modelManager.setModel("init-project", chosenModel);
122
- modelManager.setModel("task-agent", "openrouter:gemini-flash25");
123
- const tokenTracker = new TokenTracker();
124
- const tokenCounter = new TokenCounter();
191
+ modelManager.setModel("task-agent", chosenModel);
192
+ modelManager.setModel("handoff-agent", chosenModel);
193
+ modelManager.setModel("edit-fix", chosenModel);
194
+ return modelManager;
195
+ }
196
+ async function initializeMessageHistory(messageHistoryDir, modelManager, tokenTracker) {
125
197
  const messageHistory = new MessageHistory({
126
198
  stateDir: messageHistoryDir,
127
199
  modelManager,
128
200
  tokenTracker,
129
201
  });
130
- messageHistory.on("update-title", (title) => terminal.setTitle(title));
202
+ messageHistory.on("update-title", (title) => setTerminalTitle(title));
203
+ return messageHistory;
204
+ }
205
+ async function handleConversationHistory(messageHistory, messageHistoryDir, _hasContinueOrResume) {
131
206
  if (flags.continue === true) {
132
- const histories = await MessageHistory.load(messageHistoryDir, 1);
207
+ const histories = await MessageHistory.load(messageHistoryDir, CONTINUE_HISTORY_LIMIT);
133
208
  const latestHistory = histories.at(0);
134
209
  if (latestHistory) {
135
210
  messageHistory.restore(latestHistory);
136
211
  console.info(`Resuming conversation: ${latestHistory.title}`);
137
- // Set terminal title after restoring
138
- terminal.setTitle(latestHistory.title || `acai: ${process.cwd()}`);
212
+ setTerminalTitle(latestHistory.title || `acai: ${process.cwd()}`);
139
213
  }
140
214
  else {
141
215
  logger.info("No previous conversation found to continue.");
142
216
  }
143
217
  }
144
218
  else if (flags.resume === true) {
145
- const histories = await MessageHistory.load(messageHistoryDir, 10);
219
+ const histories = await MessageHistory.load(messageHistoryDir, DEFAULT_HISTORY_LIMIT);
146
220
  if (histories.length > 0) {
147
- const choice = await select({
148
- message: "Select a conversation to resume:",
149
- choices: histories.map((h, index) => ({
150
- name: `${index + 1}: ${h.title} (${h.updatedAt.toLocaleString()})`,
151
- value: index,
152
- description: `${h.messages.length} messages`,
153
- })),
154
- });
155
- const selectedHistory = histories.at(choice);
156
- if (selectedHistory) {
157
- messageHistory.restore(selectedHistory);
158
- logger.info(`Resuming conversation: ${selectedHistory.title}`);
159
- // Set terminal title after restoring
160
- terminal.setTitle(selectedHistory.title || `acai: ${process.cwd()}`);
221
+ try {
222
+ const choice = await select({
223
+ message: "Select a conversation to resume:",
224
+ choices: histories.map((h, index) => ({
225
+ name: `${index + 1}: ${h.title} (${h.updatedAt.toLocaleString()})`,
226
+ value: index,
227
+ description: `${h.messages.length} messages`,
228
+ })),
229
+ });
230
+ const selectedHistory = histories.at(choice);
231
+ if (selectedHistory) {
232
+ messageHistory.restore(selectedHistory);
233
+ logger.info(`Resuming conversation: ${selectedHistory.title}`);
234
+ setTerminalTitle(selectedHistory.title || `acai: ${process.cwd()}`);
235
+ }
236
+ else {
237
+ logger.error("Selected history index out of bounds.");
238
+ }
161
239
  }
162
- else {
163
- // This case should theoretically not happen if choice is valid
164
- logger.error("Selected history index out of bounds.");
240
+ catch (error) {
241
+ if (error instanceof Error &&
242
+ "isCanceled" in error &&
243
+ error.isCanceled === true) {
244
+ logger.info("Resume selection cancelled.");
245
+ }
246
+ else {
247
+ throw error;
248
+ }
165
249
  }
166
250
  }
167
251
  else {
168
252
  logger.info("No previous conversations found to resume.");
169
253
  }
170
254
  }
171
- const toolExecutor = new ToolExecutor(flags.autoAcceptAll === true);
172
- // --- Setup Prompt Manager (only if not continuing/resuming) ---
173
- const promptManager = new PromptManager(tokenCounter);
174
- if (!hasContinueOrResume && isDefined(initialPromptInput)) {
175
- promptManager.set(initialPromptInput);
255
+ }
256
+ async function runCliMode(state) {
257
+ const skillsEnabled = !flags["no-skills"] && (await config.getSkillsEnabled());
258
+ const cliProcess = new Cli({
259
+ promptManager: state.promptManager,
260
+ messageHistory: state.messageHistory,
261
+ modelManager: state.modelManager,
262
+ tokenTracker: state.tokenTracker,
263
+ tokenCounter: state.tokenCounter,
264
+ workspace,
265
+ skillsEnabled,
266
+ });
267
+ (await asyncTry(cliProcess.run())).recover(handleError);
268
+ }
269
+ async function runReplMode(state) {
270
+ const agent = new Agent({
271
+ messageHistory: state.messageHistory,
272
+ modelManager: state.modelManager,
273
+ tokenTracker: state.tokenTracker,
274
+ });
275
+ const repl = new NewRepl({
276
+ agent,
277
+ promptManager: state.promptManager,
278
+ config: state.appConfig,
279
+ messageHistory: state.messageHistory,
280
+ modelManager: state.modelManager,
281
+ tokenTracker: state.tokenTracker,
282
+ commands: state.commands,
283
+ tokenCounter: state.tokenCounter,
284
+ promptHistory: state.promptHistory,
285
+ workspace,
286
+ });
287
+ // Initialize TUI
288
+ await repl.init();
289
+ state.messageHistory.on("clear-history", () => {
290
+ logger.info("Resetting agent state.");
291
+ agent.resetState();
292
+ repl.rerender();
293
+ });
294
+ // Set interrupt callback
295
+ repl.setInterruptCallback(() => {
296
+ try {
297
+ state.messageHistory.save();
298
+ }
299
+ catch (error) {
300
+ // Log but don't throw - we still want to abort the agent
301
+ logger.warn({ error }, "Failed to save message history on interrupt");
302
+ }
303
+ agent.abort();
304
+ });
305
+ // Initialize tools
306
+ const coreTools = await initTools({
307
+ tokenCounter: state.tokenCounter,
308
+ workspace,
309
+ modelManager: state.modelManager,
310
+ tokenTracker: state.tokenTracker,
311
+ });
312
+ const agentTools = await initAgents({
313
+ modelManager: state.modelManager,
314
+ tokenTracker: state.tokenTracker,
315
+ tokenCounter: state.tokenCounter,
316
+ workspace,
317
+ });
318
+ const completeToolDefs = {
319
+ ...coreTools.toolDefs,
320
+ ...agentTools.toolDefs,
321
+ };
322
+ const tools = {
323
+ toolDefs: completeToolDefs,
324
+ executors: new Map([...coreTools.executors, ...agentTools.executors]),
325
+ };
326
+ // Interactive loop
327
+ while (true) {
328
+ const userInput = await repl.getUserInput();
329
+ const projectConfig = await config.getConfig();
330
+ const activeTools = projectConfig.tools.activeTools;
331
+ const skillsEnabled = !flags["no-skills"] && (projectConfig.skills?.enabled ?? true);
332
+ try {
333
+ const results = agent.run({
334
+ systemPrompt: await systemPrompt({
335
+ type: projectConfig.systemPromptType,
336
+ activeTools,
337
+ allowedDirs: workspace.allowedDirs,
338
+ skillsEnabled,
339
+ }),
340
+ input: userInput,
341
+ toolDefs: tools.toolDefs,
342
+ activeTools,
343
+ executors: tools.executors,
344
+ abortSignal: agent.abortSignal,
345
+ });
346
+ for await (const result of results) {
347
+ repl.handle(result, agent.state);
348
+ }
349
+ state.messageHistory.save();
350
+ }
351
+ catch (_error) {
352
+ // Display error in the TUI by adding an error message to the chat
353
+ // repl.showError((error as Error).message || "Unknown error occurred");
354
+ }
176
355
  }
177
- if (stdInPrompt) {
178
- promptManager.addContext(stdInPrompt);
356
+ }
357
+ async function main() {
358
+ try {
359
+ const appConfig = await config.ensureDefaultConfig("acai");
360
+ // Note: SIGINT/SIGTERM handlers are set up by CLI and REPL components
361
+ // as needed. We don't set a global handler here to avoid conflicts.
362
+ // Handle early exits
363
+ if (await handleEarlyExits())
364
+ return;
365
+ // Validate CLI arguments
366
+ validateCliArguments();
367
+ // Determine initial prompt
368
+ const { initialPromptInput, stdInPrompt, hasContinueOrResume } = await determineInitialPrompt();
369
+ // Initialize application state
370
+ const state = await initializeAppState(appConfig, initialPromptInput, stdInPrompt, hasContinueOrResume);
371
+ // Set terminal title after all validation is complete
372
+ setTerminalTitle(`acai: ${workspace.primaryDir}`);
373
+ // Handle CLI mode if initial prompt provided
374
+ if (isDefined(initialPromptInput)) {
375
+ return await runCliMode(state);
376
+ }
377
+ // Setup REPL mode
378
+ return await runReplMode(state);
179
379
  }
180
- const toolEvents = new Map();
181
- const promptHistory = [];
182
- const commands = new CommandManager({
183
- promptManager,
184
- modelManager,
185
- terminal,
186
- messageHistory,
187
- tokenTracker,
188
- config,
189
- tokenCounter,
190
- toolExecutor,
191
- toolEvents,
192
- promptHistory,
193
- });
194
- await commands.initializeCommmands();
195
- if (flags.oneshot === true) {
196
- const cliProcess = new Cli({
197
- promptManager,
198
- config: appConfig,
199
- messageHistory,
200
- modelManager,
201
- tokenTracker,
202
- tokenCounter,
203
- });
204
- return (await asyncTry(cliProcess.run())).recover(handleError);
380
+ catch (error) {
381
+ handleError(error);
382
+ process.exit(1);
205
383
  }
206
- const repl = new Repl({
207
- promptManager,
208
- terminal,
209
- config: appConfig,
210
- messageHistory,
211
- modelManager,
212
- tokenTracker,
213
- commands,
214
- tokenCounter,
215
- toolEvents,
216
- toolExecutor,
217
- promptHistory,
218
- showLastMessage: hasContinueOrResume
219
- ? !!(messageHistory.get() && messageHistory.get().length > 0)
220
- : false,
221
- });
222
- return (await asyncTry(repl.run())).recover(handleError);
223
384
  }
224
385
  main();
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../source/logger.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,MAAM,CAAC;AAgBxB,eAAO,MAAM,MAAM,6BAWlB,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../source/logger.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,MAAM,CAAC;AAwDxB,eAAO,MAAM,MAAM,6BAIjB,CAAC"}
package/dist/logger.js CHANGED
@@ -1,24 +1,53 @@
1
1
  import { join } from "node:path";
2
2
  import pino from "pino";
3
3
  import { config } from "./config.js";
4
- const transport = pino.transport({
5
- target: "pino-roll",
6
- options: {
7
- file: join(config.app.ensurePathSync("logs"), "acai.log"),
8
- size: "10m",
9
- symlink: true,
10
- limit: {
11
- count: 3,
4
+ // Create a lazy logger factory that only initializes when first used
5
+ let loggerInstance = null;
6
+ function createLogger() {
7
+ // Check if we're running in code interpreter context
8
+ // Try multiple detection methods:
9
+ // 1. Environment variable (primary method)
10
+ // 2. Check if we're running with Node.js permissions (fallback)
11
+ const isCodeInterpreter = process.env["ACAI_CODE_INTERPRETER"] === "true" ||
12
+ (typeof process.permission !== "undefined" &&
13
+ process.permission.has !== undefined);
14
+ if (isCodeInterpreter) {
15
+ // In code interpreter context, use a no-op logger to avoid noise in script output
16
+ return pino({
17
+ level: "silent", // Completely disable logging
18
+ enabled: false, // Disable the logger entirely
19
+ });
20
+ }
21
+ // Normal file-based logging
22
+ return pino({
23
+ level: process.env["LOG_LEVEL"] ?? "debug",
24
+ formatters: {
25
+ level: (label) => {
26
+ return { level: label.toUpperCase() };
27
+ },
12
28
  },
13
- mkdir: true,
14
- },
15
- });
16
- export const logger = pino({
17
- level: process.env["LOG_LEVEL"] ?? "debug",
18
- formatters: {
19
- level: (label) => {
20
- return { level: label.toUpperCase() };
29
+ timestamp: pino.stdTimeFunctions.isoTime,
30
+ }, pino.transport({
31
+ target: "pino-roll",
32
+ options: {
33
+ file: join(config.app.ensurePathSync("logs"), "acai.log"),
34
+ size: "10m",
35
+ symlink: true,
36
+ limit: {
37
+ count: 3,
38
+ },
39
+ mkdir: true,
21
40
  },
41
+ }));
42
+ }
43
+ function getLogger() {
44
+ if (!loggerInstance) {
45
+ loggerInstance = createLogger();
46
+ }
47
+ return loggerInstance;
48
+ }
49
+ export const logger = new Proxy({}, {
50
+ get(_target, prop) {
51
+ return getLogger()[prop];
22
52
  },
23
- timestamp: pino.stdTimeFunctions.isoTime,
24
- }, transport);
53
+ });
@@ -3,9 +3,10 @@ import type { ContextItem } from "./prompts/manager.ts";
3
3
  export declare class PromptError extends Error {
4
4
  constructor(message: string, cause?: Error);
5
5
  }
6
- export declare function processPrompt(message: string, { baseDir, model }: {
6
+ export declare function processPrompt(message: string, { baseDir, model, pasteStore, }: {
7
7
  baseDir: string;
8
8
  model: ModelMetadata;
9
+ pasteStore?: Map<number, string>;
9
10
  }): Promise<{
10
11
  message: string;
11
12
  context: ContextItem[];
@@ -1 +1 @@
1
- {"version":3,"file":"mentions.d.ts","sourceRoot":"","sources":["../source/mentions.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAsBxD,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAI3C;AA+JD,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,GAC5D,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC,CA0FtD"}
1
+ {"version":3,"file":"mentions.d.ts","sourceRoot":"","sources":["../source/mentions.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAsBxD,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAI3C;AA+JD,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,EACE,OAAO,EACP,KAAK,EACL,UAAU,GACX,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,aAAa,CAAC;IACrB,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,GACA,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC,CA8GtD"}
package/dist/mentions.js CHANGED
@@ -137,7 +137,7 @@ async function processUrlCommand(context) {
137
137
  };
138
138
  }
139
139
  }
140
- export async function processPrompt(message, { baseDir, model }) {
140
+ export async function processPrompt(message, { baseDir, model, pasteStore, }) {
141
141
  const fileRegex = /@([^\s@]+(?:\.[\w\d]+))/g;
142
142
  const urlRegex = /@(https?:\/\/[^\s]+)/g;
143
143
  const shellRegex = /!`([^`]+)`/g;
@@ -171,6 +171,21 @@ export async function processPrompt(message, { baseDir, model }) {
171
171
  }
172
172
  }
173
173
  let processedMessage = message;
174
+ // Process paste placeholders
175
+ if (pasteStore && pasteStore.size > 0) {
176
+ const pasteRegex = /\[Paste #(\d+), (\d+) characters\]/g;
177
+ let match = pasteRegex.exec(processedMessage);
178
+ while (match !== null) {
179
+ const pasteId = Number.parseInt(match[1], 10);
180
+ const pasteContent = pasteStore.get(pasteId);
181
+ if (pasteContent) {
182
+ processedMessage = processedMessage.replace(match[0], pasteContent);
183
+ // Reset regex lastIndex since we modified the string
184
+ pasteRegex.lastIndex = 0;
185
+ }
186
+ match = pasteRegex.exec(processedMessage);
187
+ }
188
+ }
174
189
  // Process shell commands
175
190
  for (const match of shellMatches) {
176
191
  const command = match[1];
@@ -11,6 +11,9 @@ It can be either an assistant message or a tool message.
11
11
  */
12
12
  type ResponseMessage = AssistantModelMessage | ToolModelMessage;
13
13
  type SavedMessageHistory = {
14
+ project: string;
15
+ sessionId: string;
16
+ modelId: string;
14
17
  title: string;
15
18
  createdAt: Date;
16
19
  updatedAt: Date;
@@ -22,10 +25,13 @@ interface MessageHistoryEvents {
22
25
  }
23
26
  export declare class MessageHistory extends EventEmitter<MessageHistoryEvents> {
24
27
  private history;
28
+ private sessionId;
29
+ private modelId;
25
30
  private title;
26
31
  private createdAt;
27
32
  private updatedAt;
28
33
  private stateDir;
34
+ private contextWindow;
29
35
  private modelManager;
30
36
  private tokenTracker;
31
37
  constructor({ stateDir, modelManager, tokenTracker, }: {
@@ -33,18 +39,23 @@ export declare class MessageHistory extends EventEmitter<MessageHistoryEvents> {
33
39
  modelManager: ModelManager;
34
40
  tokenTracker: TokenTracker;
35
41
  });
42
+ create(modelId: string): void;
36
43
  private validMessage;
37
44
  get(): ModelMessage[];
38
45
  clear(): void;
46
+ setContextWindow(contextWindow: number): void;
47
+ getContextWindow(): number;
39
48
  appendUserMessage(msg: string): void;
40
49
  appendUserMessage(msg: UserModelMessage): void;
41
50
  appendAssistantMessage(msg: string): void;
42
51
  appendAssistantMessage(msg: AssistantModelMessage): void;
52
+ appendToolMessages(toolResultMessages: ToolModelMessage[]): void;
43
53
  appendResponseMessages(responseMessages: ResponseMessage[]): void;
44
54
  isEmpty(): boolean;
45
55
  save(): Promise<void>;
46
56
  private generateTitle;
47
57
  getFirstUserMessage(): UserModelMessage | undefined;
58
+ getLastUserMessage(): UserModelMessage | undefined;
48
59
  /**
49
60
  * Extracts the last message from the conversation history for display purposes.
50
61
  * Prioritizes assistant messages, falls back to user messages if no assistant messages exist.
@@ -1 +1 @@
1
- {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../source/messages.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,aAAa,CAAC;AAIvC,OAAO,EACL,KAAK,qBAAqB,EAE1B,KAAK,SAAS,EAAE,kBAAkB;AAClC,KAAK,YAAY,EAEjB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,IAAI,CAAC;AACZ,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,SAAS,CAAC;AAExD,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,sBAAsB,EAAE,EACtC,MAAM,CAAC,EAAE,MAAM,GACd,gBAAgB,CAuBlB;AAcD;;;GAGG;AACH,KAAK,eAAe,GAAG,qBAAqB,GAAG,gBAAgB,CAAC;AAEhE,KAAK,mBAAmB,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B,CAAC;AAUF,UAAU,oBAAoB;IAC5B,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC;IACzB,eAAe,EAAE,EAAE,CAAC;CACrB;AAED,qBAAa,cAAe,SAAQ,YAAY,CAAC,oBAAoB,CAAC;IACpE,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,YAAY,CAAe;gBAEvB,EACV,QAAQ,EACR,YAAY,EACZ,YAAY,GACb,EAAE;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,YAAY,CAAC;QAC3B,YAAY,EAAE,YAAY,CAAC;KAC5B;IAWD,OAAO,CAAC,YAAY;IAoBpB,GAAG;IAIH,KAAK;IAKL,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IACpC,iBAAiB,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI;IAmB9C,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IACzC,sBAAsB,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI;IAOxD,sBAAsB,CAAC,gBAAgB,EAAE,eAAe,EAAE;IAO1D,OAAO;IAID,IAAI;YAgBI,aAAa;IA4B3B,mBAAmB,IAAI,gBAAgB,GAAG,SAAS;IAOnD;;;OAGG;IACH,cAAc,IAAI,MAAM,GAAG,IAAI;WA2ClB,IAAI,CACf,QAAQ,EAAE,MAAM,EAChB,KAAK,SAAK,GACT,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAqDjC,OAAO,CAAC,YAAY,EAAE,mBAAmB,GAAG,IAAI;CAajD"}
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../source/messages.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,aAAa,CAAC;AAYvC,OAAO,EACL,KAAK,qBAAqB,EAE1B,KAAK,SAAS,EAAE,kBAAkB;AAClC,KAAK,YAAY,EAEjB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,IAAI,CAAC;AAEZ,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,SAAS,CAAC;AAExD,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,sBAAsB,EAAE,EACtC,MAAM,CAAC,EAAE,MAAM,GACd,gBAAgB,CAuBlB;AAcD;;;GAGG;AACH,KAAK,eAAe,GAAG,qBAAqB,GAAG,gBAAgB,CAAC;AAEhE,KAAK,mBAAmB,GAAG;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B,CAAC;AAUF,UAAU,oBAAoB;IAC5B,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC;IACzB,eAAe,EAAE,EAAE,CAAC;CACrB;AAED,qBAAa,cAAe,SAAQ,YAAY,CAAC,oBAAoB,CAAC;IACpE,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,YAAY,CAAe;gBAEvB,EACV,QAAQ,EACR,YAAY,EACZ,YAAY,GACb,EAAE;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,YAAY,CAAC;QAC3B,YAAY,EAAE,YAAY,CAAC;KAC5B;IAcD,MAAM,CAAC,OAAO,EAAE,MAAM;IAStB,OAAO,CAAC,YAAY;IAoBpB,GAAG;IAIH,KAAK;IAML,gBAAgB,CAAC,aAAa,EAAE,MAAM;IAOtC,gBAAgB;IAIhB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IACpC,iBAAiB,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI;IAmB9C,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IACzC,sBAAsB,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI;IAOxD,kBAAkB,CAAC,kBAAkB,EAAE,gBAAgB,EAAE;IAKzD,sBAAsB,CAAC,gBAAgB,EAAE,eAAe,EAAE;IAO1D,OAAO;IAID,IAAI;YA+DI,aAAa;IA6B3B,mBAAmB,IAAI,gBAAgB,GAAG,SAAS;IAOnD,kBAAkB,IAAI,gBAAgB,GAAG,SAAS;IAOlD;;;OAGG;IACH,cAAc,IAAI,MAAM,GAAG,IAAI;WA2ClB,IAAI,CACf,QAAQ,EAAE,MAAM,EAChB,KAAK,SAAK,GACT,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAiGjC,OAAO,CAAC,YAAY,EAAE,mBAAmB,GAAG,IAAI;CAajD"}