@travisennis/acai 0.0.1 → 0.0.3

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 (324) hide show
  1. package/README.md +3 -4
  2. package/dist/commands/health-command.d.ts +2 -0
  3. package/dist/commands/health-command.js +59 -0
  4. package/dist/commands/manager.js +2 -0
  5. package/dist/commands/paste-command.d.ts +1 -1
  6. package/dist/commands/paste-command.js +155 -11
  7. package/dist/commands/reset-command.js +1 -0
  8. package/dist/index.d.ts +1 -0
  9. package/dist/index.js +2 -1
  10. package/dist/models/openrouter-provider.d.ts +4 -1
  11. package/dist/models/openrouter-provider.js +46 -4
  12. package/dist/models/providers.d.ts +1 -1
  13. package/dist/prompts/manager.d.ts +1 -0
  14. package/dist/prompts/manager.js +10 -0
  15. package/dist/prompts.js +8 -6
  16. package/dist/repl.js +49 -26
  17. package/dist/terminal/formatting.d.ts +16 -5
  18. package/dist/terminal/formatting.js +40 -6
  19. package/dist/terminal/index.d.ts +1 -1
  20. package/dist/terminal/index.js +54 -14
  21. package/dist/terminal/markdown.js +0 -1
  22. package/dist/terminal/supports-color.d.ts +16 -0
  23. package/dist/terminal/supports-color.js +121 -0
  24. package/dist/terminal/supports-hyperlinks.d.ts +7 -0
  25. package/dist/terminal/supports-hyperlinks.js +98 -0
  26. package/dist/tools/bash.js +95 -117
  27. package/dist/tools/code-interpreter.js +11 -1
  28. package/dist/tools/command-validation.d.ts +7 -3
  29. package/dist/tools/command-validation.js +67 -23
  30. package/dist/tools/delete-file.d.ts +4 -1
  31. package/dist/tools/delete-file.js +47 -3
  32. package/dist/tools/git-utils.d.ts +6 -0
  33. package/dist/tools/git-utils.js +89 -12
  34. package/dist/tools/grep.d.ts +20 -0
  35. package/dist/tools/grep.js +128 -40
  36. package/dist/tools/index.d.ts +2 -18
  37. package/dist/tools/index.js +4 -18
  38. package/package.json +30 -20
  39. package/.acai/acai.json +0 -9
  40. package/.acai/prompts/add-openrouter-model.md +0 -13
  41. package/.acai/prompts/project-status.md +0 -4
  42. package/.acai/prompts/update-architecture-document.md +0 -9
  43. package/.acai/rules/learned-rules.md +0 -9
  44. package/.ai/docs/available-tools.txt +0 -3
  45. package/.ai/docs/cognitive_complexity_refactoring_progress.md +0 -65
  46. package/.ai/docs/deleted_tools.md +0 -168
  47. package/.ai/docs/deleted_tools_88ced9ef.md +0 -56
  48. package/.ai/docs/image-pasting.md +0 -46
  49. package/.ai/docs/initialize-app.md +0 -117
  50. package/.ai/docs/issue-4-plan.md +0 -44
  51. package/.ai/docs/marked-renderer-debug.md +0 -15
  52. package/.ai/docs/marked-renderer-refactor-plan.md +0 -64
  53. package/.ai/docs/memory-use-cases.md +0 -55
  54. package/.ai/docs/prompt-consistency.md +0 -31
  55. package/.ai/docs/refactoring-tools.md +0 -98
  56. package/.ai/docs/system-prompt-update.md +0 -174
  57. package/.ai/docs/system_prompt.txt +0 -210
  58. package/.ai/docs/tasks.md +0 -49
  59. package/.ai/plan.md +0 -131
  60. package/.ai/prompt.md +0 -1
  61. package/.ai/scripts/fetch_models.js +0 -27
  62. package/.ai/scripts/generateSystemPrompt.ts +0 -15
  63. package/.ai/scripts/list-tools.mjs +0 -4
  64. package/.ai/scripts/p5_geometric_shapes.js +0 -149
  65. package/.husky/commit-msg +0 -1
  66. package/.husky/pre-commit +0 -3
  67. package/.husky/pre-push +0 -1
  68. package/.ignore +0 -4
  69. package/AGENTS.md +0 -25
  70. package/ARCHITECTURE.md +0 -304
  71. package/TODO.md +0 -2
  72. package/biome.json +0 -61
  73. package/commitlint.config.js +0 -3
  74. package/dist/source/cli.d.ts +0 -19
  75. package/dist/source/cli.js +0 -116
  76. package/dist/source/commands/application-log-command.d.ts +0 -2
  77. package/dist/source/commands/application-log-command.js +0 -43
  78. package/dist/source/commands/clear-command.d.ts +0 -2
  79. package/dist/source/commands/clear-command.js +0 -12
  80. package/dist/source/commands/compact-command.d.ts +0 -2
  81. package/dist/source/commands/compact-command.js +0 -51
  82. package/dist/source/commands/copy-command.d.ts +0 -2
  83. package/dist/source/commands/copy-command.js +0 -51
  84. package/dist/source/commands/edit-command.d.ts +0 -2
  85. package/dist/source/commands/edit-command.js +0 -53
  86. package/dist/source/commands/edit-prompt-command.d.ts +0 -2
  87. package/dist/source/commands/edit-prompt-command.js +0 -25
  88. package/dist/source/commands/exit-command.d.ts +0 -2
  89. package/dist/source/commands/exit-command.js +0 -14
  90. package/dist/source/commands/files-command.d.ts +0 -2
  91. package/dist/source/commands/files-command.js +0 -63
  92. package/dist/source/commands/generate-rules-command.d.ts +0 -2
  93. package/dist/source/commands/generate-rules-command.js +0 -61
  94. package/dist/source/commands/help-command.d.ts +0 -2
  95. package/dist/source/commands/help-command.js +0 -19
  96. package/dist/source/commands/init-command.d.ts +0 -2
  97. package/dist/source/commands/init-command.js +0 -40
  98. package/dist/source/commands/last-log-command.d.ts +0 -2
  99. package/dist/source/commands/last-log-command.js +0 -76
  100. package/dist/source/commands/manager.d.ts +0 -22
  101. package/dist/source/commands/manager.js +0 -123
  102. package/dist/source/commands/model-command.d.ts +0 -2
  103. package/dist/source/commands/model-command.js +0 -84
  104. package/dist/source/commands/paste-command.d.ts +0 -2
  105. package/dist/source/commands/paste-command.js +0 -40
  106. package/dist/source/commands/prompt-command.d.ts +0 -2
  107. package/dist/source/commands/prompt-command.js +0 -111
  108. package/dist/source/commands/reset-command.d.ts +0 -2
  109. package/dist/source/commands/reset-command.js +0 -16
  110. package/dist/source/commands/rules-command.d.ts +0 -2
  111. package/dist/source/commands/rules-command.js +0 -68
  112. package/dist/source/commands/save-command.d.ts +0 -2
  113. package/dist/source/commands/save-command.js +0 -14
  114. package/dist/source/commands/types.d.ts +0 -26
  115. package/dist/source/commands/types.js +0 -1
  116. package/dist/source/commands/usage-command.d.ts +0 -2
  117. package/dist/source/commands/usage-command.js +0 -21
  118. package/dist/source/config.d.ts +0 -60
  119. package/dist/source/config.js +0 -193
  120. package/dist/source/conversation-analyzer.d.ts +0 -10
  121. package/dist/source/conversation-analyzer.js +0 -88
  122. package/dist/source/dedent.d.ts +0 -3
  123. package/dist/source/dedent.js +0 -38
  124. package/dist/source/formatting.d.ts +0 -17
  125. package/dist/source/formatting.js +0 -103
  126. package/dist/source/index.d.ts +0 -18
  127. package/dist/source/index.js +0 -213
  128. package/dist/source/logger.d.ts +0 -2
  129. package/dist/source/logger.js +0 -24
  130. package/dist/source/mentions.d.ts +0 -9
  131. package/dist/source/mentions.js +0 -182
  132. package/dist/source/messages.d.ts +0 -69
  133. package/dist/source/messages.js +0 -261
  134. package/dist/source/middleware/audit-message.d.ts +0 -5
  135. package/dist/source/middleware/audit-message.js +0 -95
  136. package/dist/source/middleware/index.d.ts +0 -2
  137. package/dist/source/middleware/index.js +0 -2
  138. package/dist/source/middleware/rate-limit.d.ts +0 -4
  139. package/dist/source/middleware/rate-limit.js +0 -17
  140. package/dist/source/models/ai-config.d.ts +0 -12
  141. package/dist/source/models/ai-config.js +0 -87
  142. package/dist/source/models/anthropic-provider.d.ts +0 -25
  143. package/dist/source/models/anthropic-provider.js +0 -184
  144. package/dist/source/models/deepseek-provider.d.ts +0 -20
  145. package/dist/source/models/deepseek-provider.js +0 -42
  146. package/dist/source/models/google-provider.d.ts +0 -19
  147. package/dist/source/models/google-provider.js +0 -56
  148. package/dist/source/models/manager.d.ts +0 -15
  149. package/dist/source/models/manager.js +0 -48
  150. package/dist/source/models/openai-provider.d.ts +0 -22
  151. package/dist/source/models/openai-provider.js +0 -70
  152. package/dist/source/models/openrouter-provider.d.ts +0 -36
  153. package/dist/source/models/openrouter-provider.js +0 -276
  154. package/dist/source/models/providers.d.ts +0 -33
  155. package/dist/source/models/providers.js +0 -116
  156. package/dist/source/models/xai-provider.d.ts +0 -20
  157. package/dist/source/models/xai-provider.js +0 -47
  158. package/dist/source/parsing.d.ts +0 -2
  159. package/dist/source/parsing.js +0 -18
  160. package/dist/source/prompts/manager.d.ts +0 -19
  161. package/dist/source/prompts/manager.js +0 -71
  162. package/dist/source/prompts.d.ts +0 -4
  163. package/dist/source/prompts.js +0 -158
  164. package/dist/source/repl-prompt.d.ts +0 -14
  165. package/dist/source/repl-prompt.js +0 -147
  166. package/dist/source/repl.d.ts +0 -27
  167. package/dist/source/repl.js +0 -431
  168. package/dist/source/terminal/formatting.d.ts +0 -37
  169. package/dist/source/terminal/formatting.js +0 -106
  170. package/dist/source/terminal/index.d.ts +0 -94
  171. package/dist/source/terminal/index.js +0 -420
  172. package/dist/source/terminal/markdown-utils.d.ts +0 -2
  173. package/dist/source/terminal/markdown-utils.js +0 -81
  174. package/dist/source/terminal/markdown.d.ts +0 -1
  175. package/dist/source/terminal/markdown.js +0 -111
  176. package/dist/source/terminal/types.d.ts +0 -71
  177. package/dist/source/terminal/types.js +0 -1
  178. package/dist/source/terminal-output.d.ts +0 -8
  179. package/dist/source/terminal-output.js +0 -213
  180. package/dist/source/terminal-output.test.d.ts +0 -8
  181. package/dist/source/terminal-output.test.js +0 -213
  182. package/dist/source/token-tracker.d.ts +0 -14
  183. package/dist/source/token-tracker.js +0 -53
  184. package/dist/source/token-utils.d.ts +0 -7
  185. package/dist/source/token-utils.js +0 -13
  186. package/dist/source/tools/agent.d.ts +0 -17
  187. package/dist/source/tools/agent.js +0 -87
  188. package/dist/source/tools/bash.d.ts +0 -19
  189. package/dist/source/tools/bash.js +0 -294
  190. package/dist/source/tools/code-interpreter.d.ts +0 -12
  191. package/dist/source/tools/code-interpreter.js +0 -131
  192. package/dist/source/tools/command-validation.d.ts +0 -8
  193. package/dist/source/tools/command-validation.js +0 -69
  194. package/dist/source/tools/delete-file.d.ts +0 -12
  195. package/dist/source/tools/delete-file.js +0 -56
  196. package/dist/source/tools/directory-tree.d.ts +0 -12
  197. package/dist/source/tools/directory-tree.js +0 -38
  198. package/dist/source/tools/edit-file.d.ts +0 -19
  199. package/dist/source/tools/edit-file.js +0 -107
  200. package/dist/source/tools/filesystem-utils.d.ts +0 -22
  201. package/dist/source/tools/filesystem-utils.js +0 -191
  202. package/dist/source/tools/git-utils.d.ts +0 -14
  203. package/dist/source/tools/git-utils.js +0 -64
  204. package/dist/source/tools/grep.d.ts +0 -17
  205. package/dist/source/tools/grep.js +0 -138
  206. package/dist/source/tools/index.d.ts +0 -161
  207. package/dist/source/tools/index.js +0 -209
  208. package/dist/source/tools/memory-read.d.ts +0 -13
  209. package/dist/source/tools/memory-read.js +0 -135
  210. package/dist/source/tools/memory-write.d.ts +0 -12
  211. package/dist/source/tools/memory-write.js +0 -83
  212. package/dist/source/tools/move-file.d.ts +0 -13
  213. package/dist/source/tools/move-file.js +0 -44
  214. package/dist/source/tools/read-file.d.ts +0 -17
  215. package/dist/source/tools/read-file.js +0 -86
  216. package/dist/source/tools/read-multiple-files.d.ts +0 -14
  217. package/dist/source/tools/read-multiple-files.js +0 -55
  218. package/dist/source/tools/save-file.d.ts +0 -17
  219. package/dist/source/tools/save-file.js +0 -98
  220. package/dist/source/tools/think.d.ts +0 -11
  221. package/dist/source/tools/think.js +0 -45
  222. package/dist/source/tools/types.d.ts +0 -29
  223. package/dist/source/tools/types.js +0 -14
  224. package/dist/source/tools/web-fetch.d.ts +0 -47
  225. package/dist/source/tools/web-fetch.js +0 -246
  226. package/dist/source/tools/web-search.d.ts +0 -13
  227. package/dist/source/tools/web-search.js +0 -80
  228. package/dist/source/utils/process.d.ts +0 -36
  229. package/dist/source/utils/process.js +0 -75
  230. package/dist/source/version.d.ts +0 -1
  231. package/dist/source/version.js +0 -21
  232. package/dist/terminal-output.d.ts +0 -8
  233. package/dist/terminal-output.js +0 -213
  234. package/dist/tools/memory-read.d.ts +0 -13
  235. package/dist/tools/memory-read.js +0 -135
  236. package/dist/tools/memory-write.d.ts +0 -12
  237. package/dist/tools/memory-write.js +0 -83
  238. package/knip.json +0 -5
  239. package/source/cli.ts +0 -172
  240. package/source/commands/application-log-command.ts +0 -53
  241. package/source/commands/clear-command.ts +0 -14
  242. package/source/commands/compact-command.ts +0 -64
  243. package/source/commands/copy-command.ts +0 -55
  244. package/source/commands/edit-command.ts +0 -63
  245. package/source/commands/edit-prompt-command.ts +0 -31
  246. package/source/commands/exit-command.ts +0 -18
  247. package/source/commands/files-command.ts +0 -85
  248. package/source/commands/generate-rules-command.ts +0 -82
  249. package/source/commands/help-command.ts +0 -27
  250. package/source/commands/init-command.ts +0 -48
  251. package/source/commands/last-log-command.ts +0 -88
  252. package/source/commands/manager.ts +0 -151
  253. package/source/commands/model-command.ts +0 -123
  254. package/source/commands/paste-command.ts +0 -62
  255. package/source/commands/prompt-command.ts +0 -150
  256. package/source/commands/reset-command.ts +0 -22
  257. package/source/commands/rules-command.ts +0 -76
  258. package/source/commands/save-command.ts +0 -20
  259. package/source/commands/types.ts +0 -28
  260. package/source/commands/usage-command.ts +0 -26
  261. package/source/config.ts +0 -223
  262. package/source/conversation-analyzer.ts +0 -115
  263. package/source/dedent.ts +0 -53
  264. package/source/formatting.ts +0 -132
  265. package/source/index.ts +0 -240
  266. package/source/logger.ts +0 -29
  267. package/source/mentions.ts +0 -227
  268. package/source/messages.ts +0 -360
  269. package/source/middleware/audit-message.ts +0 -133
  270. package/source/middleware/index.ts +0 -2
  271. package/source/middleware/rate-limit.ts +0 -24
  272. package/source/models/ai-config.ts +0 -109
  273. package/source/models/anthropic-provider.ts +0 -199
  274. package/source/models/deepseek-provider.ts +0 -53
  275. package/source/models/google-provider.ts +0 -68
  276. package/source/models/manager.ts +0 -84
  277. package/source/models/openai-provider.ts +0 -81
  278. package/source/models/openrouter-provider.ts +0 -288
  279. package/source/models/providers.ts +0 -197
  280. package/source/models/xai-provider.ts +0 -59
  281. package/source/parsing.ts +0 -20
  282. package/source/prompts/manager.ts +0 -90
  283. package/source/prompts.ts +0 -172
  284. package/source/repl-prompt.ts +0 -196
  285. package/source/repl.ts +0 -572
  286. package/source/terminal/formatting.ts +0 -121
  287. package/source/terminal/index.ts +0 -518
  288. package/source/terminal/markdown-utils.ts +0 -89
  289. package/source/terminal/markdown.ts +0 -155
  290. package/source/terminal/types.ts +0 -84
  291. package/source/terminal-output.test.ts +0 -266
  292. package/source/token-tracker.ts +0 -78
  293. package/source/token-utils.ts +0 -17
  294. package/source/tools/agent.ts +0 -107
  295. package/source/tools/bash.ts +0 -367
  296. package/source/tools/code-interpreter.ts +0 -172
  297. package/source/tools/command-validation.ts +0 -81
  298. package/source/tools/delete-file.ts +0 -71
  299. package/source/tools/directory-tree.ts +0 -54
  300. package/source/tools/edit-file.ts +0 -155
  301. package/source/tools/filesystem-utils.ts +0 -265
  302. package/source/tools/git-utils.ts +0 -70
  303. package/source/tools/grep.ts +0 -184
  304. package/source/tools/index.ts +0 -278
  305. package/source/tools/memory-read.ts +0 -174
  306. package/source/tools/memory-write.ts +0 -105
  307. package/source/tools/move-file.ts +0 -59
  308. package/source/tools/read-file.ts +0 -129
  309. package/source/tools/read-multiple-files.ts +0 -80
  310. package/source/tools/save-file.ts +0 -147
  311. package/source/tools/think.ts +0 -51
  312. package/source/tools/types.ts +0 -58
  313. package/source/tools/web-fetch.ts +0 -327
  314. package/source/tools/web-search.ts +0 -101
  315. package/source/utils/process.ts +0 -121
  316. package/source/version.ts +0 -21
  317. package/test/commands/copy-command.test.ts +0 -69
  318. package/test/config.test.ts +0 -200
  319. package/test/terminal/markdown-utils.test.ts +0 -124
  320. package/test/tools/bash-tool.test.ts +0 -58
  321. package/test/tools/code-interpreter.test.ts +0 -91
  322. package/test/tools/command-validation.test.ts +0 -48
  323. package/tsconfig.build.json +0 -9
  324. package/tsconfig.json +0 -30
@@ -1,276 +0,0 @@
1
- import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
2
- import { objectKeys } from "@travisennis/stdlib/object";
3
- import { customProvider } from "ai";
4
- const openRouterClient = createOpenAICompatible({
5
- name: "openrouter",
6
- apiKey: process.env["OPENROUTER_API_KEY"] ?? "",
7
- // biome-ignore lint/style/useNamingConvention: third-party controlled
8
- baseURL: "https://openrouter.ai/api/v1",
9
- headers: {
10
- "HTTP-Referer": "https://github.com/travisennis/acai-ts",
11
- "X-Title": "acai",
12
- },
13
- });
14
- const openrouterModels = {
15
- "deepseek-v3": openRouterClient("deepseek/deepseek-chat-v3-0324"),
16
- "deepseek-r1": openRouterClient("deepseek/deepseek-r1-0528"),
17
- "deepseek-v3-free": openRouterClient("deepseek/deepseek-chat-v3-0324:free"),
18
- "deepseek-r1-free": openRouterClient("deepseek/deepseek-r1-0528:free"),
19
- "gemini-flash25": openRouterClient("google/gemini-2.5-flash"),
20
- "gemini-pro25": openRouterClient("google/gemini-2.5-pro"),
21
- sonnet4: openRouterClient("anthropic/claude-sonnet-4"),
22
- opus4: openRouterClient("anthropic/claude-opus-4"),
23
- "opus-4.1": openRouterClient("anthropic/claude-opus-4.1"),
24
- "gpt-4.1": openRouterClient("openai/gpt-4.1"),
25
- "kimi-k2": openRouterClient("moonshotai/kimi-k2:nitro"),
26
- "kimi-k2-free": openRouterClient("moonshotai/kimi-k2:free"),
27
- "devstral-medium": openRouterClient("mistralai/devstral-medium"),
28
- "qwen3-coder": openRouterClient("qwen/qwen3-coder"),
29
- "qwen3-coder-free": openRouterClient("qwen/qwen3-coder:free"),
30
- "glm-4.5": openRouterClient("z-ai/glm-4.5"),
31
- "gpt-5": openRouterClient("openai/gpt-5"),
32
- "gpt-5-mini": openRouterClient("openai/gpt-5-mini"),
33
- };
34
- export const openrouterModelNames = objectKeys(openrouterModels).map((key) => `openrouter:${key}`);
35
- export const openrouterProvider = {
36
- openrouter: customProvider({
37
- languageModels: openrouterModels,
38
- fallbackProvider: openRouterClient,
39
- }),
40
- };
41
- export const openrouterModelRegistry = {
42
- "openrouter:deepseek-v3": {
43
- id: "openrouter:deepseek-v3",
44
- provider: "openrouter",
45
- contextWindow: 128000,
46
- maxOutputTokens: 8000,
47
- defaultTemperature: 0.3,
48
- promptFormat: "bracket",
49
- supportsReasoning: false,
50
- supportsToolCalling: true,
51
- costPerInputToken: 0, // Assuming free tier or unknown cost
52
- costPerOutputToken: 0, // Assuming free tier or unknown cost
53
- category: "balanced",
54
- },
55
- "openrouter:deepseek-r1": {
56
- id: "openrouter:deepseek-r1",
57
- provider: "openrouter",
58
- contextWindow: 128000,
59
- maxOutputTokens: 32768,
60
- defaultTemperature: 0.6,
61
- promptFormat: "bracket",
62
- supportsReasoning: true,
63
- supportsToolCalling: true,
64
- costPerInputToken: 0, // Assuming free tier or unknown cost
65
- costPerOutputToken: 0, // Assuming free tier or unknown cost
66
- category: "balanced",
67
- },
68
- "openrouter:deepseek-v3-free": {
69
- id: "openrouter:deepseek-v3-free",
70
- provider: "openrouter",
71
- contextWindow: 128000,
72
- maxOutputTokens: 8000,
73
- defaultTemperature: 0.3,
74
- promptFormat: "bracket",
75
- supportsReasoning: false,
76
- supportsToolCalling: true,
77
- costPerInputToken: 0, // Assuming free tier or unknown cost
78
- costPerOutputToken: 0, // Assuming free tier or unknown cost
79
- category: "balanced",
80
- },
81
- "openrouter:deepseek-r1-free": {
82
- id: "openrouter:deepseek-r1-free",
83
- provider: "openrouter",
84
- contextWindow: 128000,
85
- maxOutputTokens: 32768,
86
- defaultTemperature: 0.6,
87
- promptFormat: "bracket",
88
- supportsReasoning: true,
89
- supportsToolCalling: true,
90
- costPerInputToken: 0, // Assuming free tier or unknown cost
91
- costPerOutputToken: 0, // Assuming free tier or unknown cost
92
- category: "balanced",
93
- },
94
- "openrouter:gemini-flash25": {
95
- id: "openrouter:gemini-flash25",
96
- provider: "openrouter",
97
- contextWindow: 1000000,
98
- maxOutputTokens: 66000,
99
- defaultTemperature: 0.5,
100
- promptFormat: "markdown",
101
- supportsReasoning: true,
102
- supportsToolCalling: true,
103
- costPerInputToken: 0,
104
- costPerOutputToken: 0,
105
- category: "fast",
106
- },
107
- "openrouter:gemini-pro25": {
108
- id: "openrouter:gemini-pro25",
109
- provider: "openrouter",
110
- contextWindow: 1000000,
111
- maxOutputTokens: 64000,
112
- defaultTemperature: 0.5,
113
- promptFormat: "markdown",
114
- supportsReasoning: true,
115
- supportsToolCalling: true,
116
- costPerInputToken: 0,
117
- costPerOutputToken: 0,
118
- category: "powerful",
119
- },
120
- "openrouter:opus4": {
121
- id: "openrouter:opus4",
122
- provider: "openrouter",
123
- contextWindow: 200000,
124
- maxOutputTokens: 64000,
125
- defaultTemperature: 0.5,
126
- promptFormat: "markdown",
127
- supportsReasoning: true,
128
- supportsToolCalling: true,
129
- costPerInputToken: 0,
130
- costPerOutputToken: 0,
131
- category: "powerful",
132
- },
133
- "openrouter:opus-4.1": {
134
- id: "openrouter:opus-4.1",
135
- provider: "openrouter",
136
- contextWindow: 200000,
137
- maxOutputTokens: 32000,
138
- defaultTemperature: 0.5,
139
- promptFormat: "markdown",
140
- supportsReasoning: true,
141
- supportsToolCalling: true,
142
- costPerInputToken: 0.000015,
143
- costPerOutputToken: 0.000075,
144
- category: "powerful",
145
- },
146
- "openrouter:sonnet4": {
147
- id: "openrouter:sonnet4",
148
- provider: "openrouter",
149
- contextWindow: 200000,
150
- maxOutputTokens: 64000,
151
- defaultTemperature: 0.5,
152
- promptFormat: "markdown",
153
- supportsReasoning: true,
154
- supportsToolCalling: true,
155
- costPerInputToken: 0,
156
- costPerOutputToken: 0,
157
- category: "balanced",
158
- },
159
- "openrouter:gpt-4.1": {
160
- id: "openrouter:gpt-4.1",
161
- provider: "openrouter",
162
- contextWindow: 1000000,
163
- maxOutputTokens: 32768,
164
- defaultTemperature: 0.3,
165
- promptFormat: "markdown",
166
- supportsReasoning: false,
167
- supportsToolCalling: true,
168
- costPerInputToken: 0.000002,
169
- costPerOutputToken: 0.000008,
170
- category: "balanced",
171
- },
172
- "openrouter:kimi-k2": {
173
- id: "openrouter:kimi-k2",
174
- provider: "openrouter",
175
- contextWindow: 131072,
176
- maxOutputTokens: 8192,
177
- defaultTemperature: 0.6,
178
- promptFormat: "markdown",
179
- supportsReasoning: false,
180
- supportsToolCalling: true,
181
- costPerInputToken: 0.00000057,
182
- costPerOutputToken: 0.0000023,
183
- category: "balanced",
184
- },
185
- "openrouter:kimi-k2-free": {
186
- id: "openrouter:kimi-k2-free",
187
- provider: "openrouter",
188
- contextWindow: 65536,
189
- maxOutputTokens: 8192,
190
- defaultTemperature: 0.6,
191
- promptFormat: "markdown",
192
- supportsReasoning: false,
193
- supportsToolCalling: true,
194
- costPerInputToken: 0,
195
- costPerOutputToken: 0,
196
- category: "balanced",
197
- },
198
- "openrouter:devstral-medium": {
199
- id: "openrouter:devstral-medium",
200
- provider: "openrouter",
201
- contextWindow: 131000,
202
- maxOutputTokens: 8192,
203
- defaultTemperature: 0.3,
204
- promptFormat: "markdown",
205
- supportsReasoning: false,
206
- supportsToolCalling: true,
207
- costPerInputToken: 0.0000004,
208
- costPerOutputToken: 0.000002,
209
- category: "balanced",
210
- },
211
- "openrouter:qwen3-coder": {
212
- id: "openrouter:qwen3-coder",
213
- provider: "openrouter",
214
- contextWindow: 262000,
215
- maxOutputTokens: 66000,
216
- defaultTemperature: 0.7,
217
- promptFormat: "markdown",
218
- supportsReasoning: false,
219
- supportsToolCalling: true,
220
- costPerInputToken: 0.0000004,
221
- costPerOutputToken: 0.000002,
222
- category: "balanced",
223
- },
224
- "openrouter:qwen3-coder-free": {
225
- id: "openrouter:qwen3-coder-free",
226
- provider: "openrouter",
227
- contextWindow: 262000,
228
- maxOutputTokens: 66000,
229
- defaultTemperature: 0.7,
230
- promptFormat: "markdown",
231
- supportsReasoning: false,
232
- supportsToolCalling: true,
233
- costPerInputToken: 0.0000004,
234
- costPerOutputToken: 0.000002,
235
- category: "balanced",
236
- },
237
- "openrouter:glm-4.5": {
238
- id: "openrouter:glm-4.5",
239
- provider: "openrouter",
240
- contextWindow: 128000,
241
- maxOutputTokens: 8192,
242
- defaultTemperature: 0.7,
243
- promptFormat: "markdown",
244
- supportsReasoning: true,
245
- supportsToolCalling: true,
246
- costPerInputToken: 0.0000006,
247
- costPerOutputToken: 0.0000022,
248
- category: "balanced",
249
- },
250
- "openrouter:gpt-5": {
251
- id: "openrouter:gpt-5",
252
- provider: "openrouter",
253
- contextWindow: 400000,
254
- maxOutputTokens: 128000,
255
- defaultTemperature: 0.3,
256
- promptFormat: "markdown",
257
- supportsReasoning: true,
258
- supportsToolCalling: true,
259
- costPerInputToken: 0.00000125,
260
- costPerOutputToken: 0.00001,
261
- category: "powerful",
262
- },
263
- "openrouter:gpt-5-mini": {
264
- id: "openrouter:gpt-5-mini",
265
- provider: "openrouter",
266
- contextWindow: 200000,
267
- maxOutputTokens: 64000,
268
- defaultTemperature: 0.3,
269
- promptFormat: "markdown",
270
- supportsReasoning: true,
271
- supportsToolCalling: true,
272
- costPerInputToken: 0.00000015,
273
- costPerOutputToken: 0.0000006,
274
- category: "balanced",
275
- },
276
- };
@@ -1,33 +0,0 @@
1
- import { z } from "zod";
2
- export declare const providers: readonly ["anthropic", "openai", "google", "deepseek", "openrouter", "xai"];
3
- export type ModelProvider = (typeof providers)[number];
4
- export declare const models: readonly ("anthropic:opus" | "anthropic:sonnet" | "anthropic:sonnet37" | "anthropic:sonnet37-token-efficient-tools" | "anthropic:sonnet37-128k" | "anthropic:sonnet35" | "anthropic:haiku" | "openai:o3" | "openai:gpt-4.1" | "openai:o4-mini" | "openai:codex-mini" | "google:flash25lite" | "google:pro25" | "google:flash25" | "deepseek:deepseek-chat" | "deepseek:deepseek-reasoner" | "openrouter:gpt-5" | "openrouter:gpt-5-mini" | "openrouter:gpt-4.1" | "openrouter:deepseek-v3" | "openrouter:deepseek-r1" | "openrouter:deepseek-v3-free" | "openrouter:deepseek-r1-free" | "openrouter:gemini-flash25" | "openrouter:gemini-pro25" | "openrouter:sonnet4" | "openrouter:opus4" | "openrouter:opus-4.1" | "openrouter:kimi-k2" | "openrouter:kimi-k2-free" | "openrouter:devstral-medium" | "openrouter:qwen3-coder" | "openrouter:qwen3-coder-free" | "openrouter:glm-4.5" | "xai:grok3" | "xai:grok3-mini")[];
5
- export type ModelName = (typeof models)[number] | (`xai:${string}` & {}) | (`openai:${string}` & {}) | (`anthropic:${string}` & {}) | (`google:${string}` & {}) | (`deepseek:${string}` & {}) | (`openrouter:${string}` & {});
6
- export declare function isSupportedModel(model: unknown): model is ModelName;
7
- export declare function languageModel(model: ModelName): import("@ai-sdk/provider").LanguageModelV2;
8
- export interface ModelMetadata<T = ModelName> {
9
- id: T;
10
- provider: ModelProvider;
11
- contextWindow: number;
12
- supportsToolCalling: boolean;
13
- supportsReasoning: boolean;
14
- costPerInputToken: number;
15
- costPerOutputToken: number;
16
- maxOutputTokens: number;
17
- defaultTemperature: number;
18
- promptFormat: "xml" | "markdown" | "bracket";
19
- category: "fast" | "balanced" | "powerful";
20
- }
21
- export declare const modelRegistry: Record<ModelName, ModelMetadata>;
22
- export declare const ModelSelectionSchema: z.ZodEnum<[string, ...string[]]>;
23
- export declare function getModelsByProvider(): Record<ModelProvider, ModelMetadata[]>;
24
- export declare function getModelsById(): Record<ModelName, string>;
25
- export declare function getModelInfo(modelName: ModelName): ModelMetadata | undefined;
26
- export declare function getModelsByCategory(category: "fast" | "balanced" | "powerful"): ModelMetadata[];
27
- export declare function formatModelInfo(model: ModelMetadata): string;
28
- export declare function isValidModel(modelName: string): modelName is ModelName;
29
- export declare function getRecommendedModels(options: {
30
- requiresTools?: boolean;
31
- requiresReasoning?: boolean;
32
- speedPriority?: boolean;
33
- }): ModelName[];
@@ -1,116 +0,0 @@
1
- import { isString } from "@travisennis/stdlib/typeguards";
2
- import { createProviderRegistry } from "ai";
3
- import { z } from "zod";
4
- import { anthropicModelNames, anthropicModelRegistry, anthropicProvider, } from "./anthropic-provider.js";
5
- import { deepseekModelNames, deepseekModelRegistry, deepseekProvider, } from "./deepseek-provider.js";
6
- import { googleModelNames, googleModelRegistry, googleProvider, } from "./google-provider.js";
7
- import { openaiModelNames, openaiModelRegistry, openaiProvider, } from "./openai-provider.js";
8
- import { openrouterModelNames, openrouterModelRegistry, openrouterProvider, } from "./openrouter-provider.js";
9
- import { xaiModelNames, xaiModelRegistry, xaiProvider, } from "./xai-provider.js";
10
- export const providers = [
11
- "anthropic",
12
- "openai",
13
- "google",
14
- "deepseek",
15
- "openrouter",
16
- "xai",
17
- ];
18
- const registry = createProviderRegistry({
19
- ...anthropicProvider,
20
- ...deepseekProvider,
21
- ...googleProvider,
22
- ...openaiProvider,
23
- ...openrouterProvider,
24
- ...xaiProvider,
25
- });
26
- export const models = [
27
- ...anthropicModelNames,
28
- ...openaiModelNames,
29
- ...googleModelNames,
30
- ...deepseekModelNames,
31
- ...openrouterModelNames,
32
- ...xaiModelNames,
33
- ];
34
- export function isSupportedModel(model) {
35
- return (models.includes(model) ||
36
- (isString(model) &&
37
- (model.startsWith("openrouter:") ||
38
- model.startsWith("anthropic:") ||
39
- model.startsWith("openai:") ||
40
- model.startsWith("google:") ||
41
- model.startsWith("xai:") ||
42
- model.startsWith("deepseek:"))));
43
- }
44
- export function languageModel(model) {
45
- return registry.languageModel(model);
46
- }
47
- // https://openrouter.ai/api/v1/models
48
- export const modelRegistry = {
49
- ...anthropicModelRegistry,
50
- ...openaiModelRegistry,
51
- ...googleModelRegistry,
52
- ...deepseekModelRegistry,
53
- ...openrouterModelRegistry,
54
- ...xaiModelRegistry,
55
- };
56
- // Schema for validating model selection
57
- export const ModelSelectionSchema = z.enum(Object.keys(modelRegistry));
58
- // Get available models grouped by provider
59
- export function getModelsByProvider() {
60
- const result = {
61
- anthropic: [],
62
- openai: [],
63
- google: [],
64
- deepseek: [],
65
- openrouter: [],
66
- xai: [],
67
- };
68
- for (const model of Object.values(modelRegistry)) {
69
- result[model.provider].push(model);
70
- }
71
- return result;
72
- }
73
- export function getModelsById() {
74
- const result = new Map();
75
- for (const name of models) {
76
- const langModel = registry.languageModel(name);
77
- result.set(name, langModel.modelId);
78
- }
79
- return Object.fromEntries(result);
80
- }
81
- // Get detailed information about a specific model
82
- export function getModelInfo(modelName) {
83
- return modelRegistry[modelName];
84
- }
85
- // Get models by category
86
- export function getModelsByCategory(category) {
87
- return Object.values(modelRegistry).filter((model) => model.category === category);
88
- }
89
- // Format model information for display
90
- export function formatModelInfo(model) {
91
- return `${model.id} [${model.category}] - Tools: ${model.supportsToolCalling ? "✓" : "✗"}, Reasoning: ${model.supportsReasoning ? "✓" : "✗"}`;
92
- }
93
- // Check if a model name is valid
94
- export function isValidModel(modelName) {
95
- return modelName in modelRegistry;
96
- }
97
- // Get recommended models based on task requirements
98
- export function getRecommendedModels(options) {
99
- return Object.values(modelRegistry)
100
- .filter((model) => {
101
- if (options.requiresTools && !model.supportsToolCalling) {
102
- return false;
103
- }
104
- if (options.requiresReasoning && !model.supportsReasoning) {
105
- return false;
106
- }
107
- return true;
108
- })
109
- .sort((a, b) => {
110
- if (options.speedPriority) {
111
- return a.category === "fast" ? -1 : 1;
112
- }
113
- return b.contextWindow - a.contextWindow;
114
- })
115
- .map((model) => model.id);
116
- }
@@ -1,20 +0,0 @@
1
- import type { ModelMetadata } from "./providers.ts";
2
- declare const xaiModels: {
3
- readonly grok3: import("@ai-sdk/provider").LanguageModelV2;
4
- readonly "grok3-mini": import("@ai-sdk/provider").LanguageModelV2;
5
- };
6
- type ModelName = `xai:${keyof typeof xaiModels}`;
7
- export declare const xaiModelNames: ModelName[];
8
- export declare const xaiProvider: {
9
- xai: import("@ai-sdk/provider").ProviderV2 & {
10
- languageModel(modelId: "grok3" | "grok3-mini"): import("@ai-sdk/provider").LanguageModelV2;
11
- textEmbeddingModel(modelId: string): import("@ai-sdk/provider").EmbeddingModelV2<string>;
12
- imageModel(modelId: string): import("@ai-sdk/provider").ImageModelV2;
13
- transcriptionModel(modelId: string): import("@ai-sdk/provider").TranscriptionModelV2;
14
- speechModel(modelId: string): import("@ai-sdk/provider").SpeechModelV2;
15
- };
16
- };
17
- export declare const xaiModelRegistry: {
18
- [K in ModelName]: ModelMetadata<ModelName>;
19
- };
20
- export {};
@@ -1,47 +0,0 @@
1
- import { createOpenAI } from "@ai-sdk/openai";
2
- import { objectKeys } from "@travisennis/stdlib/object";
3
- import { customProvider } from "ai";
4
- const xaiClient = createOpenAI({
5
- apiKey: process.env["X_AI_API_KEY"] ?? process.env["XAI_API_KEY"],
6
- // biome-ignore lint/style/useNamingConvention: third-party controlled
7
- baseURL: "https://api.x.ai/v1",
8
- });
9
- const xaiModels = {
10
- grok3: xaiClient("grok-3"),
11
- "grok3-mini": xaiClient("grok-3-mini-beta"),
12
- };
13
- export const xaiModelNames = objectKeys(xaiModels).map((key) => `xai:${key}`);
14
- export const xaiProvider = {
15
- xai: customProvider({
16
- languageModels: xaiModels,
17
- fallbackProvider: xaiClient,
18
- }),
19
- };
20
- export const xaiModelRegistry = {
21
- "xai:grok3": {
22
- id: "xai:grok3",
23
- provider: "xai",
24
- contextWindow: 131072,
25
- maxOutputTokens: 131072, // Note: API docs might specify lower practical limits
26
- defaultTemperature: 0.6,
27
- promptFormat: "markdown",
28
- supportsReasoning: false, // Assuming based on typical chat models
29
- supportsToolCalling: true,
30
- costPerInputToken: 0.000003, // Placeholder, check official pricing
31
- costPerOutputToken: 0.000015, // Placeholder, check official pricing
32
- category: "balanced",
33
- },
34
- "xai:grok3-mini": {
35
- id: "xai:grok3-mini",
36
- provider: "xai",
37
- contextWindow: 131072,
38
- maxOutputTokens: 131072, // Note: API docs might specify lower practical limits
39
- defaultTemperature: 0.6,
40
- promptFormat: "markdown",
41
- supportsReasoning: true, // Assuming based on typical chat models
42
- supportsToolCalling: true,
43
- costPerInputToken: 0.0000003, // Placeholder, check official pricing
44
- costPerOutputToken: 0.0000005, // Placeholder, check official pricing
45
- category: "fast", // Or "fast" depending on performance
46
- },
47
- };
@@ -1,2 +0,0 @@
1
- import { z } from "zod";
2
- export declare function jsonParser<T extends z.ZodTypeAny>(input: T): z.ZodEffects<T, T["_output"], unknown>;
@@ -1,18 +0,0 @@
1
- import { ZodIssueCode, z } from "zod";
2
- const parseJsonPreprocessor = (value, ctx) => {
3
- if (typeof value === "string") {
4
- try {
5
- return JSON.parse(value);
6
- }
7
- catch (e) {
8
- ctx.addIssue({
9
- code: ZodIssueCode.custom,
10
- message: e.message,
11
- });
12
- }
13
- }
14
- return value;
15
- };
16
- export function jsonParser(input) {
17
- return z.preprocess(parseJsonPreprocessor, input);
18
- }
@@ -1,19 +0,0 @@
1
- import type { UserModelMessage } from "ai";
2
- import { type UserMessageContentItem } from "../messages.ts";
3
- import type { TokenCounter } from "../token-utils.ts";
4
- export type ContextItem = UserMessageContentItem;
5
- export declare class PromptManager {
6
- private prompt;
7
- private context;
8
- private tokenCounter;
9
- constructor(tokenCounter: TokenCounter);
10
- set(prompt: string): void;
11
- get(): string;
12
- getUserMessage(): UserModelMessage;
13
- private _applyProviderOptionsToMessage;
14
- isPending(): boolean;
15
- addContext(item: ContextItem): void;
16
- hasContext(): boolean;
17
- clearContext(): void;
18
- clearAll(): void;
19
- }
@@ -1,71 +0,0 @@
1
- import { isString } from "@travisennis/stdlib/typeguards";
2
- import { createUserMessage } from "../messages.js";
3
- export class PromptManager {
4
- prompt;
5
- context;
6
- tokenCounter;
7
- constructor(tokenCounter) {
8
- this.prompt = undefined;
9
- this.context = [];
10
- this.tokenCounter = tokenCounter;
11
- }
12
- set(prompt) {
13
- this.prompt = prompt;
14
- }
15
- get() {
16
- const prompt = this.prompt;
17
- if (isString(prompt) && prompt.trim().length > 0) {
18
- return prompt;
19
- }
20
- throw new Error("No prompt available.");
21
- }
22
- getUserMessage() {
23
- const currentPrompt = this.prompt;
24
- if (isString(currentPrompt) && currentPrompt.trim().length > 0) {
25
- let userMessage;
26
- if (this.hasContext()) {
27
- // Pass context items and the prompt string to createUserMessage
28
- userMessage = createUserMessage([...this.context], currentPrompt);
29
- this.clearAll(); // Clear context and prompt after using
30
- }
31
- else {
32
- // Pass an empty array for context items if no context
33
- userMessage = createUserMessage([], currentPrompt);
34
- this.prompt = undefined; // Clear only prompt if no context was used
35
- }
36
- return this._applyProviderOptionsToMessage(userMessage);
37
- }
38
- throw new Error("No prompt available.");
39
- }
40
- _applyProviderOptionsToMessage(userMessage) {
41
- if (Array.isArray(userMessage.content)) {
42
- for (const part of userMessage.content) {
43
- if (typeof part === "object" && part !== null && part.type === "text") {
44
- const textPart = part;
45
- if (this.tokenCounter.count(textPart.text) > 4096) {
46
- textPart.providerOptions = {
47
- anthropic: { cacheControl: { type: "ephemeral" } },
48
- };
49
- }
50
- }
51
- }
52
- }
53
- return userMessage;
54
- }
55
- isPending() {
56
- return isString(this.prompt) && this.prompt.trim().length > 0;
57
- }
58
- addContext(item) {
59
- this.context.push(item);
60
- }
61
- hasContext() {
62
- return this.context.length > 0;
63
- }
64
- clearContext() {
65
- this.context.length = 0;
66
- }
67
- clearAll() {
68
- this.clearContext();
69
- this.prompt = undefined;
70
- }
71
- }
@@ -1,4 +0,0 @@
1
- export declare function systemPrompt(options?: {
2
- supportsToolCalling?: boolean;
3
- }): Promise<string>;
4
- export declare function minSystemPrompt(): Promise<string>;