@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/messages.js CHANGED
@@ -1,8 +1,10 @@
1
+ import { randomUUID } from "node:crypto";
1
2
  import EventEmitter from "node:events";
2
- import { readdir, readFile, writeFile } from "node:fs/promises";
3
- import { join } from "node:path";
3
+ import { mkdir, readdir, readFile, rename, stat, unlink, writeFile, } from "node:fs/promises";
4
+ import { basename, join } from "node:path";
4
5
  import { isString } from "@travisennis/stdlib/typeguards";
5
6
  import { generateText, } from "ai";
7
+ import { logger } from "./logger.js";
6
8
  export function createUserMessage(contentItems, prompt) {
7
9
  const messageParts = [];
8
10
  // Process content items (images and pre-defined texts)
@@ -38,22 +40,36 @@ function createAssistantMessage(content) {
38
40
  }
39
41
  export class MessageHistory extends EventEmitter {
40
42
  history;
43
+ sessionId;
44
+ modelId;
41
45
  title;
42
46
  createdAt;
43
47
  updatedAt;
44
48
  stateDir;
49
+ contextWindow;
45
50
  modelManager;
46
51
  tokenTracker;
47
52
  constructor({ stateDir, modelManager, tokenTracker, }) {
48
53
  super();
49
54
  this.history = [];
55
+ this.sessionId = randomUUID();
56
+ this.modelId = "";
50
57
  this.title = "";
51
58
  this.createdAt = new Date();
52
59
  this.updatedAt = new Date();
53
60
  this.stateDir = stateDir;
61
+ this.contextWindow = 0;
54
62
  this.modelManager = modelManager;
55
63
  this.tokenTracker = tokenTracker;
56
64
  }
65
+ create(modelId) {
66
+ this.clear();
67
+ this.modelId = modelId;
68
+ this.sessionId = randomUUID();
69
+ this.title = "";
70
+ this.createdAt = new Date();
71
+ this.updatedAt = new Date();
72
+ }
57
73
  validMessage(msg) {
58
74
  // Filter out messages with empty content arrays
59
75
  if (Array.isArray(msg.content) && msg.content.length === 0) {
@@ -74,8 +90,18 @@ export class MessageHistory extends EventEmitter {
74
90
  }
75
91
  clear() {
76
92
  this.history.length = 0;
93
+ this.contextWindow = 0;
77
94
  this.emit("clear-history");
78
95
  }
96
+ setContextWindow(contextWindow) {
97
+ if (contextWindow < 0) {
98
+ throw new Error("Context window cannot be negative");
99
+ }
100
+ this.contextWindow = contextWindow;
101
+ }
102
+ getContextWindow() {
103
+ return this.contextWindow;
104
+ }
79
105
  appendUserMessage(msg) {
80
106
  const now = new Date();
81
107
  const msgObj = isString(msg) ? createUserMessage([], msg) : msg;
@@ -96,6 +122,10 @@ export class MessageHistory extends EventEmitter {
96
122
  const msgObj = isString(msg) ? createAssistantMessage(msg) : msg;
97
123
  this.history.push(msgObj);
98
124
  }
125
+ appendToolMessages(toolResultMessages) {
126
+ this.updatedAt = new Date();
127
+ this.history.push(...toolResultMessages);
128
+ }
99
129
  appendResponseMessages(responseMessages) {
100
130
  this.updatedAt = new Date();
101
131
  // Filter out messages with empty content arrays
@@ -107,16 +137,55 @@ export class MessageHistory extends EventEmitter {
107
137
  }
108
138
  async save() {
109
139
  const msgHistoryDir = this.stateDir;
110
- const timestamp = new Date().toISOString().replace(/:/g, "-");
111
- const fileName = `message-history-${timestamp}.json`;
140
+ const fileName = `message-history-${this.sessionId}.json`;
112
141
  const filePath = join(msgHistoryDir, fileName);
142
+ const tempFilePath = `${filePath}.tmp`;
143
+ // Validate data before writing
144
+ if (!this.sessionId || this.sessionId.trim() === "") {
145
+ throw new Error("Cannot save: sessionId is empty");
146
+ }
147
+ if (!Array.isArray(this.history)) {
148
+ throw new Error("Cannot save: history is not an array");
149
+ }
150
+ const project = basename(process.cwd());
113
151
  const output = {
152
+ project,
153
+ sessionId: this.sessionId,
154
+ modelId: this.modelId,
114
155
  title: this.title,
115
156
  createdAt: this.createdAt,
116
157
  updatedAt: this.updatedAt,
117
158
  messages: this.history,
118
159
  };
119
- await writeFile(filePath, JSON.stringify(output, null, 2));
160
+ try {
161
+ // Ensure directory exists
162
+ await mkdir(msgHistoryDir, { recursive: true });
163
+ // Write to temporary file first
164
+ await writeFile(tempFilePath, JSON.stringify(output, null, 2));
165
+ // Atomically rename to final file
166
+ await rename(tempFilePath, filePath);
167
+ logger.info(`Message history saved to ${filePath}`);
168
+ }
169
+ catch (error) {
170
+ // Clean up temp file if it exists
171
+ try {
172
+ await unlink(tempFilePath);
173
+ }
174
+ catch (_cleanupError) {
175
+ // Ignore cleanup errors
176
+ }
177
+ // Check if it's an ENOENT error from rename (temp file doesn't exist)
178
+ if (error instanceof Error &&
179
+ "code" in error &&
180
+ error.code === "ENOENT") {
181
+ logger.warn(`Temp file missing during save for ${filePath}, write may have been interrupted`);
182
+ }
183
+ else {
184
+ logger.error(error, `Failed to save message history to ${filePath}:`);
185
+ // Don't throw - just log. This is called from interrupt handlers
186
+ // and we don't want to crash the program on save failure.
187
+ }
188
+ }
120
189
  }
121
190
  async generateTitle(message) {
122
191
  // Skip title generation if message is empty
@@ -129,6 +198,7 @@ export class MessageHistory extends EventEmitter {
129
198
  const { text, usage } = await generateText({
130
199
  model: this.modelManager.getModel(app),
131
200
  system: systemPrompt,
201
+ maxOutputTokens: 100,
132
202
  prompt: `Request:\n${message}\nTitle:`,
133
203
  });
134
204
  this.tokenTracker.trackUsage(app, usage);
@@ -145,6 +215,10 @@ export class MessageHistory extends EventEmitter {
145
215
  const firstUser = this.get().find((msg) => msg.role === "user");
146
216
  return firstUser;
147
217
  }
218
+ getLastUserMessage() {
219
+ const userMsg = this.history.findLast((value) => value.role === "user");
220
+ return userMsg;
221
+ }
148
222
  /**
149
223
  * Extracts the last message from the conversation history for display purposes.
150
224
  * Prioritizes assistant messages, falls back to user messages if no assistant messages exist.
@@ -180,19 +254,44 @@ export class MessageHistory extends EventEmitter {
180
254
  static async load(stateDir, count = 10) {
181
255
  try {
182
256
  const files = await readdir(stateDir);
183
- const messageHistoryFiles = files
184
- .filter((file) => file.startsWith("message-history-") && file.endsWith(".json"))
185
- .sort((a, b) => {
186
- // Extract timestamps and compare in reverse order (newest first)
187
- const timeA = a.replace("message-history-", "").replace(".json", "");
188
- const timeB = b.replace("message-history-", "").replace(".json", "");
189
- return timeB.localeCompare(timeA); // Newest first
190
- })
191
- .slice(0, count); // Use the count parameter here
192
- const fileReadPromises = messageHistoryFiles.map(async (fileName) => {
257
+ const messageHistoryFiles = files.filter((file) => file.startsWith("message-history-") && file.endsWith(".json"));
258
+ // Get file stats and sort by modification time (newest first)
259
+ const fileStatsPromises = messageHistoryFiles.map(async (fileName) => {
260
+ const filePath = join(stateDir, fileName);
261
+ try {
262
+ const fileStat = await stat(filePath);
263
+ return {
264
+ fileName,
265
+ filePath,
266
+ modifiedTime: fileStat.mtime,
267
+ };
268
+ }
269
+ catch (error) {
270
+ console.error(`Error getting stats for file ${filePath}:`, error);
271
+ return null;
272
+ }
273
+ });
274
+ const fileStats = await Promise.all(fileStatsPromises);
275
+ // Filter out null results and sort by modification time (newest first)
276
+ const sortedFiles = fileStats
277
+ .filter((stat) => stat !== null)
278
+ .sort((a, b) => b.modifiedTime.getTime() - a.modifiedTime.getTime())
279
+ .slice(0, count)
280
+ .map((stat) => stat.fileName);
281
+ const fileReadPromises = sortedFiles.map(async (fileName) => {
193
282
  const filePath = join(stateDir, fileName);
194
283
  try {
284
+ // Check file stats first to avoid reading empty files
285
+ const stats = await stat(filePath);
286
+ if (stats.size === 0) {
287
+ // Silently skip empty files - they're likely from interrupted saves
288
+ return null;
289
+ }
195
290
  const content = await readFile(filePath, "utf-8");
291
+ // Skip files that only contain whitespace
292
+ if (content.trim().length === 0) {
293
+ return null;
294
+ }
196
295
  const parsed = JSON.parse(content);
197
296
  const result = parsed;
198
297
  // Basic validation - ensure messages array exists
@@ -204,16 +303,18 @@ export class MessageHistory extends EventEmitter {
204
303
  }
205
304
  }
206
305
  catch (error) {
207
- console.error(`Error reading or parsing file ${filePath}:`, error);
306
+ // Only log unexpected errors, not empty/malformed JSON files
307
+ // which are common from interrupted saves
308
+ if (!(error instanceof SyntaxError) ||
309
+ !error.message.includes("Unexpected end of JSON input")) {
310
+ console.error(`Error reading or parsing file ${filePath}:`, error);
311
+ }
208
312
  }
209
313
  return null; // Return null for failed reads/parses
210
314
  });
211
315
  const results = await Promise.all(fileReadPromises);
212
- // Filter out null results (failed reads/parses)
213
- //sort results by result.updatedAt which is a Date
214
- return results
215
- .filter((result) => result !== null)
216
- .sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime());
316
+ // Filter out null results and return them (already sorted by file modification time)
317
+ return results.filter((result) => result !== null);
217
318
  }
218
319
  catch (error) {
219
320
  // Handle cases where the directory might not exist or other readdir errors
@@ -0,0 +1,3 @@
1
+ import type { LanguageModelV2Middleware } from "@ai-sdk/provider";
2
+ export declare const cacheMiddleware: LanguageModelV2Middleware;
3
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../source/middleware/cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EAE1B,MAAM,kBAAkB,CAAC;AAsB1B,eAAO,MAAM,eAAe,EAAE,yBAyC7B,CAAC"}
@@ -0,0 +1,53 @@
1
+ function applyCaching(input) {
2
+ input.providerOptions = {
3
+ anthropic: { cacheControl: { type: "ephemeral" } },
4
+ openrouter: {
5
+ // biome-ignore lint/style/useNamingConvention: third-party
6
+ cache_control: { type: "ephemeral" },
7
+ cacheControl: { type: "ephemeral" },
8
+ },
9
+ bedrock: {
10
+ cachePoint: { type: "ephemeral" },
11
+ },
12
+ openaiCompatible: {
13
+ // biome-ignore lint/style/useNamingConvention: third-party
14
+ cache_control: { type: "ephemeral" },
15
+ },
16
+ };
17
+ }
18
+ export const cacheMiddleware = {
19
+ transformParams: async ({ params, model }) => {
20
+ const providerId = model.provider;
21
+ const modelId = model.modelId;
22
+ if (providerId === "anthropic" ||
23
+ modelId.includes("anthropic") ||
24
+ modelId.includes("claude")) {
25
+ const msgs = params.prompt;
26
+ const system = msgs.filter((msg) => msg.role === "system").at(0);
27
+ if (system) {
28
+ applyCaching(system);
29
+ }
30
+ // Get the last two user messages for caching
31
+ const userMessages = msgs.filter((msg) => msg.role === "user");
32
+ const lastTwoUserMessages = userMessages.slice(-2);
33
+ // Mark both the latest and second-to-last user messages as ephemeral
34
+ for (const userMessage of lastTwoUserMessages) {
35
+ const content = userMessage.content;
36
+ if (Array.isArray(content)) {
37
+ const finalContent = content.at(-1);
38
+ if (finalContent) {
39
+ applyCaching(finalContent);
40
+ }
41
+ }
42
+ }
43
+ const tools = params.tools;
44
+ if (tools) {
45
+ const lastTool = tools.at(-1);
46
+ if (lastTool?.type === "function") {
47
+ applyCaching(lastTool);
48
+ }
49
+ }
50
+ }
51
+ return params;
52
+ },
53
+ };
@@ -1,3 +1,4 @@
1
1
  export { auditMessage } from "./audit-message.ts";
2
+ export { cacheMiddleware } from "./cache.ts";
2
3
  export { createRateLimitMiddleware } from "./rate-limit.ts";
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/middleware/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/middleware/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export { auditMessage } from "./audit-message.js";
2
+ export { cacheMiddleware } from "./cache.js";
2
3
  export { createRateLimitMiddleware } from "./rate-limit.js";
@@ -7,7 +7,9 @@ export declare class AiConfig {
7
7
  modelMetadata: ModelMetadata;
8
8
  prompt: string;
9
9
  });
10
- getMaxTokens(): number;
11
- getProviderOptions(): SharedV2ProviderMetadata;
10
+ maxOutputTokens(): number;
11
+ temperature(): number | undefined;
12
+ topP(): 1 | undefined;
13
+ providerOptions(): SharedV2ProviderMetadata;
12
14
  }
13
15
  //# sourceMappingURL=ai-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-config.d.ts","sourceRoot":"","sources":["../../source/models/ai-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AA2CpD,qBAAa,QAAQ;IACnB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,MAAM,CAAS;gBACX,EACV,aAAa,EACb,MAAM,GACP,EAAE;QAAE,aAAa,EAAE,aAAa,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAKnD,YAAY;IAUZ,kBAAkB,IAAI,wBAAwB;CA2C/C"}
1
+ {"version":3,"file":"ai-config.d.ts","sourceRoot":"","sources":["../../source/models/ai-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AA2CpD,qBAAa,QAAQ;IACnB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,MAAM,CAAS;gBACX,EACV,aAAa,EACb,MAAM,GACP,EAAE;QAAE,aAAa,EAAE,aAAa,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAKnD,eAAe;IAUf,WAAW;IAKX,IAAI;IAMJ,eAAe,IAAI,wBAAwB;CA2C5C"}
@@ -34,7 +34,7 @@ export class AiConfig {
34
34
  this.modelMetadata = modelMetadata;
35
35
  this.prompt = prompt;
36
36
  }
37
- getMaxTokens() {
37
+ maxOutputTokens() {
38
38
  const modelConfig = this.modelMetadata;
39
39
  const thinkingLevel = calculateThinkingLevel(this.prompt);
40
40
  const maxTokens = modelConfig.provider === "anthropic" && modelConfig.supportsReasoning
@@ -42,7 +42,17 @@ export class AiConfig {
42
42
  : modelConfig.maxOutputTokens;
43
43
  return maxTokens;
44
44
  }
45
- getProviderOptions() {
45
+ temperature() {
46
+ const temp = this.modelMetadata.defaultTemperature;
47
+ return temp > -1 ? temp : undefined;
48
+ }
49
+ topP() {
50
+ const modelId = this.modelMetadata.id;
51
+ if (modelId.toLowerCase().includes("qwen"))
52
+ return 1;
53
+ return undefined;
54
+ }
55
+ providerOptions() {
46
56
  const modelConfig = this.modelMetadata;
47
57
  const thinkingLevel = calculateThinkingLevel(this.prompt);
48
58
  if (modelConfig.supportsReasoning && thinkingLevel.effort !== "none") {
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic-provider.d.ts","sourceRoot":"","sources":["../../source/models/anthropic-provider.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAcpD,QAAA,MAAM,eAAe;;;;;;;;CAoEX,CAAC;AAEX,KAAK,SAAS,GAAG,aAAa,MAAM,OAAO,eAAe,EAAE,CAAC;AAE7D,eAAO,MAAM,mBAAmB,EAAE,SAAS,EAE1C,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;CAK7B,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE;KAClC,CAAC,IAAI,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;CA6F3C,CAAC"}
1
+ {"version":3,"file":"anthropic-provider.d.ts","sourceRoot":"","sources":["../../source/models/anthropic-provider.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,QAAA,MAAM,eAAe;;;;;;;;CAuBX,CAAC;AAEX,KAAK,SAAS,GAAG,aAAa,MAAM,OAAO,eAAe,EAAE,CAAC;AAE7D,eAAO,MAAM,mBAAmB,EAAE,SAAS,EAE1C,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;CAK7B,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE;KAClC,CAAC,IAAI,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;CAsF3C,CAAC"}
@@ -1,84 +1,27 @@
1
1
  import { createAnthropic, anthropic as originalAnthropic, } from "@ai-sdk/anthropic";
2
2
  import { objectKeys } from "@travisennis/stdlib/object";
3
- import { isRecord } from "@travisennis/stdlib/typeguards";
4
3
  import { customProvider } from "ai";
5
- // Helper function copied from original providers.ts
6
- function addCacheControlToTools(body) {
7
- const parsedBody = JSON.parse(body);
8
- if (isRecord(parsedBody)) {
9
- const tools = parsedBody["tools"];
10
- if (Array.isArray(tools)) {
11
- tools.at(-1).cache_control = { type: "ephemeral" };
12
- }
13
- }
14
- return JSON.stringify(parsedBody);
15
- }
16
4
  const anthropicModels = {
17
- opus: createAnthropic({
18
- fetch(input, init) {
19
- const body = init?.body;
20
- if (body && typeof body === "string") {
21
- init.body = addCacheControlToTools(body);
22
- }
23
- return fetch(input, init);
24
- },
25
- })("claude-4-opus-20250514"),
26
- sonnet: createAnthropic({
27
- fetch(input, init) {
28
- const body = init?.body;
29
- if (body && typeof body === "string") {
30
- init.body = addCacheControlToTools(body);
31
- }
32
- return fetch(input, init);
33
- },
34
- })("claude-4-sonnet-20250514"),
35
- sonnet37: createAnthropic({
36
- fetch(input, init) {
37
- const body = init?.body;
38
- if (body && typeof body === "string") {
39
- init.body = addCacheControlToTools(body);
40
- }
41
- return fetch(input, init);
42
- },
43
- })("claude-3-7-sonnet-20250219"),
5
+ opus: createAnthropic()("claude-4-opus-20250514"),
6
+ sonnet: createAnthropic()("claude-4-sonnet-20250514"),
7
+ sonnet37: createAnthropic()("claude-3-7-sonnet-20250219"),
44
8
  "sonnet37-token-efficient-tools": createAnthropic({
45
9
  headers: {
46
10
  "anthropic-version": "2023-06-01",
47
11
  "anthropic-beta": "token-efficient-tools-2025-02-19",
48
12
  },
49
- fetch(input, init) {
50
- const body = init?.body;
51
- if (body && typeof body === "string") {
52
- init.body = addCacheControlToTools(body);
53
- }
54
- return fetch(input, init);
55
- },
56
13
  })("claude-3-7-sonnet-20250219"),
57
14
  "sonnet37-128k": createAnthropic({
58
15
  headers: {
59
16
  "anthropic-version": "2023-06-01",
60
17
  "anthropic-beta": "output-128k-2025-02-19",
61
18
  },
62
- fetch(input, init) {
63
- const body = init?.body;
64
- if (body && typeof body === "string") {
65
- init.body = addCacheControlToTools(body);
66
- }
67
- return fetch(input, init);
68
- },
69
19
  })("claude-3-7-sonnet-20250219"),
70
20
  sonnet35: createAnthropic({
71
21
  headers: {
72
22
  "anthropic-version": "2023-06-01",
73
23
  "anthropic-beta": "max-tokens-3-5-sonnet-2024-07-15",
74
24
  },
75
- fetch(input, init) {
76
- const body = init?.body;
77
- if (body && typeof body === "string") {
78
- init.body = addCacheControlToTools(body);
79
- }
80
- return fetch(input, init);
81
- },
82
25
  })("claude-3-5-sonnet-20241022"),
83
26
  haiku: originalAnthropic("claude-3-5-haiku-20241022"),
84
27
  };
@@ -101,7 +44,6 @@ export const anthropicModelRegistry = {
101
44
  supportsToolCalling: true,
102
45
  costPerInputToken: 0.000015,
103
46
  costPerOutputToken: 0.000075,
104
- category: "powerful",
105
47
  },
106
48
  "anthropic:sonnet": {
107
49
  id: "anthropic:sonnet",
@@ -114,7 +56,6 @@ export const anthropicModelRegistry = {
114
56
  supportsToolCalling: true,
115
57
  costPerInputToken: 0.000003,
116
58
  costPerOutputToken: 0.000015,
117
- category: "balanced",
118
59
  },
119
60
  "anthropic:sonnet37": {
120
61
  id: "anthropic:sonnet37",
@@ -127,7 +68,6 @@ export const anthropicModelRegistry = {
127
68
  supportsToolCalling: true,
128
69
  costPerInputToken: 0.000003,
129
70
  costPerOutputToken: 0.000015,
130
- category: "balanced",
131
71
  },
132
72
  "anthropic:sonnet37-token-efficient-tools": {
133
73
  id: "anthropic:sonnet37-token-efficient-tools",
@@ -140,7 +80,6 @@ export const anthropicModelRegistry = {
140
80
  supportsToolCalling: true,
141
81
  costPerInputToken: 0.000003,
142
82
  costPerOutputToken: 0.000015,
143
- category: "balanced",
144
83
  },
145
84
  "anthropic:sonnet37-128k": {
146
85
  id: "anthropic:sonnet37-128k",
@@ -153,7 +92,6 @@ export const anthropicModelRegistry = {
153
92
  supportsToolCalling: true,
154
93
  costPerInputToken: 0.000003,
155
94
  costPerOutputToken: 0.000015,
156
- category: "powerful",
157
95
  },
158
96
  "anthropic:sonnet35": {
159
97
  id: "anthropic:sonnet35",
@@ -166,7 +104,6 @@ export const anthropicModelRegistry = {
166
104
  supportsToolCalling: true,
167
105
  costPerInputToken: 0.000003,
168
106
  costPerOutputToken: 0.000015,
169
- category: "balanced",
170
107
  },
171
108
  "anthropic:haiku": {
172
109
  id: "anthropic:haiku",
@@ -179,6 +116,5 @@ export const anthropicModelRegistry = {
179
116
  supportsToolCalling: true,
180
117
  costPerInputToken: 0.0000008,
181
118
  costPerOutputToken: 0.000004,
182
- category: "fast",
183
119
  },
184
120
  };
@@ -1 +1 @@
1
- {"version":3,"file":"deepseek-provider.d.ts","sourceRoot":"","sources":["../../source/models/deepseek-provider.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,QAAA,MAAM,cAAc;;;CAGV,CAAC;AAEX,KAAK,SAAS,GAAG,YAAY,MAAM,OAAO,cAAc,EAAE,CAAC;AAE3D,eAAO,MAAM,kBAAkB,EAAE,SAAS,EAEzC,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;CAK5B,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE;KACjC,CAAC,IAAI,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;CA4B3C,CAAC"}
1
+ {"version":3,"file":"deepseek-provider.d.ts","sourceRoot":"","sources":["../../source/models/deepseek-provider.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,QAAA,MAAM,cAAc;;;CAGV,CAAC;AAEX,KAAK,SAAS,GAAG,YAAY,MAAM,OAAO,cAAc,EAAE,CAAC;AAE3D,eAAO,MAAM,kBAAkB,EAAE,SAAS,EAEzC,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;CAK5B,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE;KACjC,CAAC,IAAI,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;CA0B3C,CAAC"}
@@ -24,7 +24,6 @@ export const deepseekModelRegistry = {
24
24
  supportsToolCalling: true,
25
25
  costPerInputToken: 0.0000012, // Check official pricing
26
26
  costPerOutputToken: 0.0000012, // Check official pricing
27
- category: "balanced",
28
27
  },
29
28
  "deepseek:deepseek-reasoner": {
30
29
  id: "deepseek:deepseek-reasoner",
@@ -37,6 +36,5 @@ export const deepseekModelRegistry = {
37
36
  supportsToolCalling: true, // Check if this model supports tools
38
37
  costPerInputToken: 0.00000055, // Check official pricing
39
38
  costPerOutputToken: 0.00000219, // Check official pricing
40
- category: "balanced",
41
39
  },
42
40
  };
@@ -1 +1 @@
1
- {"version":3,"file":"google-provider.d.ts","sourceRoot":"","sources":["../../source/models/google-provider.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,QAAA,MAAM,YAAY;;;;CAIR,CAAC;AAEX,KAAK,SAAS,GAAG,UAAU,MAAM,OAAO,YAAY,EAAE,CAAC;AAEvD,eAAO,MAAM,gBAAgB,EAAE,SAAS,EAEvC,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;;CAK1B,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CACtC,SAAS,EACT,aAAa,CAAC,SAAS,CAAC,CAyCzB,CAAC"}
1
+ {"version":3,"file":"google-provider.d.ts","sourceRoot":"","sources":["../../source/models/google-provider.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,QAAA,MAAM,YAAY;;;;CAIR,CAAC;AAEX,KAAK,SAAS,GAAG,UAAU,MAAM,OAAO,YAAY,EAAE,CAAC;AAEvD,eAAO,MAAM,gBAAgB,EAAE,SAAS,EAEvC,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;;CAK1B,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CACtC,SAAS,EACT,aAAa,CAAC,SAAS,CAAC,CAsCzB,CAAC"}
@@ -25,7 +25,6 @@ export const googleModelRegistry = {
25
25
  supportsToolCalling: true,
26
26
  costPerInputToken: 0,
27
27
  costPerOutputToken: 0,
28
- category: "fast",
29
28
  },
30
29
  "google:pro25": {
31
30
  id: "google:pro25",
@@ -38,7 +37,6 @@ export const googleModelRegistry = {
38
37
  supportsToolCalling: true,
39
38
  costPerInputToken: 0,
40
39
  costPerOutputToken: 0,
41
- category: "powerful",
42
40
  },
43
41
  "google:flash25": {
44
42
  id: "google:flash25",
@@ -51,6 +49,5 @@ export const googleModelRegistry = {
51
49
  supportsToolCalling: true,
52
50
  costPerInputToken: 0.00000015,
53
51
  costPerOutputToken: 0.0000035,
54
- category: "balanced",
55
52
  },
56
53
  };
@@ -1 +1 @@
1
- {"version":3,"file":"groq-provider.d.ts","sourceRoot":"","sources":["../../source/models/groq-provider.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAMpD,QAAA,MAAM,UAAU;;CAEN,CAAC;AAEX,KAAK,SAAS,GAAG,QAAQ,MAAM,OAAO,UAAU,EAAE,CAAC;AAEnD,eAAO,MAAM,cAAc,EAAE,SAAS,EAErC,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;CAKxB,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE;KAC7B,CAAC,IAAI,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;CAe3C,CAAC"}
1
+ {"version":3,"file":"groq-provider.d.ts","sourceRoot":"","sources":["../../source/models/groq-provider.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAMpD,QAAA,MAAM,UAAU;;CAEN,CAAC;AAEX,KAAK,SAAS,GAAG,QAAQ,MAAM,OAAO,UAAU,EAAE,CAAC;AAEnD,eAAO,MAAM,cAAc,EAAE,SAAS,EAErC,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;CAKxB,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE;KAC7B,CAAC,IAAI,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;CAc3C,CAAC"}
@@ -26,6 +26,5 @@ export const groqModelRegistry = {
26
26
  supportsToolCalling: true,
27
27
  costPerInputToken: 1 / 1000000,
28
28
  costPerOutputToken: 3 / 1000000,
29
- category: "fast",
30
29
  },
31
30
  };
@@ -1,6 +1,6 @@
1
1
  import type { LanguageModelV2 } from "@ai-sdk/provider";
2
2
  import { type ModelMetadata, type ModelName } from "./providers.ts";
3
- type App = "repl" | "cli" | "title-conversation" | "conversation-summarizer" | "conversation-analyzer" | "tool-repair" | "init-project" | "task-agent";
3
+ type App = "repl" | "cli" | "title-conversation" | "conversation-summarizer" | "conversation-analyzer" | "tool-repair" | "init-project" | "task-agent" | "handoff-agent" | "edit-fix";
4
4
  export declare class ModelManager {
5
5
  private modelMap;
6
6
  private modelMetadataMap;
@@ -11,6 +11,7 @@ export declare class ModelManager {
11
11
  setModel(app: App, model: ModelName): void;
12
12
  getModel(app: App): LanguageModelV2;
13
13
  getModelMetadata(app: App): ModelMetadata<ModelName>;
14
+ getText(app: App, system: string, prompt: string, signal: AbortSignal): Promise<import("ai").GenerateTextResult<import("ai").ToolSet, never>>;
14
15
  }
15
16
  export {};
16
17
  //# sourceMappingURL=manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../source/models/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAMxD,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,SAAS,EAEf,MAAM,gBAAgB,CAAC;AAsBxB,KAAK,GAAG,GACJ,MAAM,GACN,KAAK,GACL,oBAAoB,GACpB,yBAAyB,GACzB,uBAAuB,GACvB,aAAa,GACb,cAAc,GACd,YAAY,CAAC;AAEjB,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAS;gBACb,EAAE,QAAQ,EAAE,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE;IAM9C,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS;IAenC,QAAQ,CAAC,GAAG,EAAE,GAAG;IAQjB,gBAAgB,CAAC,GAAG,EAAE,GAAG;CAO1B"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../source/models/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAQxD,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,SAAS,EAEf,MAAM,gBAAgB,CAAC;AAuBxB,KAAK,GAAG,GACJ,MAAM,GACN,KAAK,GACL,oBAAoB,GACpB,yBAAyB,GACzB,uBAAuB,GACvB,aAAa,GACb,cAAc,GACd,YAAY,GACZ,eAAe,GACf,UAAU,CAAC;AAEf,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAS;gBACb,EAAE,QAAQ,EAAE,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE;IAM9C,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS;IAenC,QAAQ,CAAC,GAAG,EAAE,GAAG;IAQjB,gBAAgB,CAAC,GAAG,EAAE,GAAG;IAQnB,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW;CA0B5E"}
@@ -1,10 +1,12 @@
1
- import { wrapLanguageModel } from "ai";
2
- import { auditMessage, createRateLimitMiddleware, } from "../middleware/index.js";
1
+ import { generateText, wrapLanguageModel } from "ai";
2
+ import { auditMessage, cacheMiddleware, createRateLimitMiddleware, } from "../middleware/index.js";
3
+ import { AiConfig } from "./ai-config.js";
3
4
  import { languageModel, modelRegistry, } from "./providers.js";
4
5
  function getLanguageModel({ model, app, stateDir, }) {
5
6
  const langModel = wrapLanguageModel({
6
7
  model: languageModel(model),
7
8
  middleware: [
9
+ cacheMiddleware,
8
10
  createRateLimitMiddleware({ requestsPerMinute: 30 }),
9
11
  auditMessage({ filePath: stateDir, app }),
10
12
  ],
@@ -45,4 +47,26 @@ export class ModelManager {
45
47
  }
46
48
  return metadata;
47
49
  }
50
+ async getText(app, system, prompt, signal) {
51
+ const model = this.getModel(app);
52
+ const modelConfig = this.getModelMetadata(app);
53
+ if (!model || !modelConfig) {
54
+ throw new Error(`${app} model not available`);
55
+ }
56
+ const aiConfig = new AiConfig({
57
+ modelMetadata: modelConfig,
58
+ prompt: prompt,
59
+ });
60
+ const result = await generateText({
61
+ model,
62
+ maxOutputTokens: aiConfig.maxOutputTokens(),
63
+ system: system,
64
+ prompt: prompt,
65
+ temperature: aiConfig.temperature(),
66
+ topP: aiConfig.topP(),
67
+ providerOptions: aiConfig.providerOptions(),
68
+ abortSignal: signal,
69
+ });
70
+ return result;
71
+ }
48
72
  }
@@ -1 +1 @@
1
- {"version":3,"file":"openai-provider.d.ts","sourceRoot":"","sources":["../../source/models/openai-provider.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,QAAA,MAAM,YAAY;;;;;CAKR,CAAC;AAEX,KAAK,SAAS,GAAG,UAAU,MAAM,OAAO,YAAY,EAAE,CAAC;AAEvD,eAAO,MAAM,gBAAgB,EAAE,SAAS,EAEvC,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;;CAK1B,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE;KAC/B,CAAC,IAAI,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;CAsD3C,CAAC"}
1
+ {"version":3,"file":"openai-provider.d.ts","sourceRoot":"","sources":["../../source/models/openai-provider.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,QAAA,MAAM,YAAY;;;;;CAKR,CAAC;AAEX,KAAK,SAAS,GAAG,UAAU,MAAM,OAAO,YAAY,EAAE,CAAC;AAEvD,eAAO,MAAM,gBAAgB,EAAE,SAAS,EAEvC,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;;CAK1B,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE;KAC/B,CAAC,IAAI,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;CAkD3C,CAAC"}