@teleforge-ai/anya 0.5.0

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 (200) hide show
  1. package/README.md +69 -0
  2. package/assets/anya.jpg +0 -0
  3. package/assets/anya.png +0 -0
  4. package/dist/chat/session.d.ts +15 -0
  5. package/dist/chat/session.d.ts.map +1 -0
  6. package/dist/chat/session.js +59 -0
  7. package/dist/chat/session.js.map +1 -0
  8. package/dist/chat/stream.d.ts +13 -0
  9. package/dist/chat/stream.d.ts.map +1 -0
  10. package/dist/chat/stream.js +86 -0
  11. package/dist/chat/stream.js.map +1 -0
  12. package/dist/commands/providerFactory.d.ts +12 -0
  13. package/dist/commands/providerFactory.d.ts.map +1 -0
  14. package/dist/commands/providerFactory.js +73 -0
  15. package/dist/commands/providerFactory.js.map +1 -0
  16. package/dist/config/encryption.d.ts +3 -0
  17. package/dist/config/encryption.d.ts.map +1 -0
  18. package/dist/config/encryption.js +47 -0
  19. package/dist/config/encryption.js.map +1 -0
  20. package/dist/config/schema.d.ts +94 -0
  21. package/dist/config/schema.d.ts.map +1 -0
  22. package/dist/config/schema.js +28 -0
  23. package/dist/config/schema.js.map +1 -0
  24. package/dist/config/store.d.ts +40 -0
  25. package/dist/config/store.d.ts.map +1 -0
  26. package/dist/config/store.js +195 -0
  27. package/dist/config/store.js.map +1 -0
  28. package/dist/index.d.ts +3 -0
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +97 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/providers/anthropic.d.ts +10 -0
  33. package/dist/providers/anthropic.d.ts.map +1 -0
  34. package/dist/providers/anthropic.js +128 -0
  35. package/dist/providers/anthropic.js.map +1 -0
  36. package/dist/providers/base.d.ts +39 -0
  37. package/dist/providers/base.d.ts.map +1 -0
  38. package/dist/providers/base.js +28 -0
  39. package/dist/providers/base.js.map +1 -0
  40. package/dist/providers/custom.d.ts +11 -0
  41. package/dist/providers/custom.d.ts.map +1 -0
  42. package/dist/providers/custom.js +90 -0
  43. package/dist/providers/custom.js.map +1 -0
  44. package/dist/providers/deepseek.d.ts +10 -0
  45. package/dist/providers/deepseek.d.ts.map +1 -0
  46. package/dist/providers/deepseek.js +88 -0
  47. package/dist/providers/deepseek.js.map +1 -0
  48. package/dist/providers/google.d.ts +10 -0
  49. package/dist/providers/google.d.ts.map +1 -0
  50. package/dist/providers/google.js +131 -0
  51. package/dist/providers/google.js.map +1 -0
  52. package/dist/providers/groq.d.ts +10 -0
  53. package/dist/providers/groq.d.ts.map +1 -0
  54. package/dist/providers/groq.js +88 -0
  55. package/dist/providers/groq.js.map +1 -0
  56. package/dist/providers/index.d.ts +10 -0
  57. package/dist/providers/index.d.ts.map +1 -0
  58. package/dist/providers/index.js +39 -0
  59. package/dist/providers/index.js.map +1 -0
  60. package/dist/providers/mistral.d.ts +10 -0
  61. package/dist/providers/mistral.d.ts.map +1 -0
  62. package/dist/providers/mistral.js +88 -0
  63. package/dist/providers/mistral.js.map +1 -0
  64. package/dist/providers/ollama.d.ts +11 -0
  65. package/dist/providers/ollama.d.ts.map +1 -0
  66. package/dist/providers/ollama.js +82 -0
  67. package/dist/providers/ollama.js.map +1 -0
  68. package/dist/providers/openai.d.ts +10 -0
  69. package/dist/providers/openai.d.ts.map +1 -0
  70. package/dist/providers/openai.js +127 -0
  71. package/dist/providers/openai.js.map +1 -0
  72. package/dist/providers/opencode.d.ts +11 -0
  73. package/dist/providers/opencode.d.ts.map +1 -0
  74. package/dist/providers/opencode.js +99 -0
  75. package/dist/providers/opencode.js.map +1 -0
  76. package/dist/providers/openrouter.d.ts +10 -0
  77. package/dist/providers/openrouter.d.ts.map +1 -0
  78. package/dist/providers/openrouter.js +119 -0
  79. package/dist/providers/openrouter.js.map +1 -0
  80. package/dist/providers/together.d.ts +10 -0
  81. package/dist/providers/together.d.ts.map +1 -0
  82. package/dist/providers/together.js +88 -0
  83. package/dist/providers/together.js.map +1 -0
  84. package/dist/providers/xai.d.ts +10 -0
  85. package/dist/providers/xai.d.ts.map +1 -0
  86. package/dist/providers/xai.js +88 -0
  87. package/dist/providers/xai.js.map +1 -0
  88. package/dist/tui/ansi.d.ts +49 -0
  89. package/dist/tui/ansi.d.ts.map +1 -0
  90. package/dist/tui/ansi.js +208 -0
  91. package/dist/tui/ansi.js.map +1 -0
  92. package/dist/tui/components/anyaArt.d.ts +2 -0
  93. package/dist/tui/components/anyaArt.d.ts.map +1 -0
  94. package/dist/tui/components/anyaArt.js +20 -0
  95. package/dist/tui/components/anyaArt.js.map +1 -0
  96. package/dist/tui/components/dialog.d.ts +15 -0
  97. package/dist/tui/components/dialog.d.ts.map +1 -0
  98. package/dist/tui/components/dialog.js +115 -0
  99. package/dist/tui/components/dialog.js.map +1 -0
  100. package/dist/tui/components/messages.d.ts +10 -0
  101. package/dist/tui/components/messages.d.ts.map +1 -0
  102. package/dist/tui/components/messages.js +100 -0
  103. package/dist/tui/components/messages.js.map +1 -0
  104. package/dist/tui/render.d.ts +3 -0
  105. package/dist/tui/render.d.ts.map +1 -0
  106. package/dist/tui/render.js +137 -0
  107. package/dist/tui/render.js.map +1 -0
  108. package/dist/tui/screen.d.ts +19 -0
  109. package/dist/tui/screen.d.ts.map +1 -0
  110. package/dist/tui/screen.js +98 -0
  111. package/dist/tui/screen.js.map +1 -0
  112. package/dist/tui/state.d.ts +41 -0
  113. package/dist/tui/state.d.ts.map +1 -0
  114. package/dist/tui/state.js +306 -0
  115. package/dist/tui/state.js.map +1 -0
  116. package/dist/ui/App.d.ts +3 -0
  117. package/dist/ui/App.d.ts.map +1 -0
  118. package/dist/ui/App.js +207 -0
  119. package/dist/ui/App.js.map +1 -0
  120. package/dist/ui/components/CommandPalette.d.ts +8 -0
  121. package/dist/ui/components/CommandPalette.d.ts.map +1 -0
  122. package/dist/ui/components/CommandPalette.js +63 -0
  123. package/dist/ui/components/CommandPalette.js.map +1 -0
  124. package/dist/ui/components/HomeScreen.d.ts +8 -0
  125. package/dist/ui/components/HomeScreen.d.ts.map +1 -0
  126. package/dist/ui/components/HomeScreen.js +29 -0
  127. package/dist/ui/components/HomeScreen.js.map +1 -0
  128. package/dist/ui/components/ImageRenderer.d.ts +8 -0
  129. package/dist/ui/components/ImageRenderer.d.ts.map +1 -0
  130. package/dist/ui/components/ImageRenderer.js +42 -0
  131. package/dist/ui/components/ImageRenderer.js.map +1 -0
  132. package/dist/ui/components/InputBox.d.ts +12 -0
  133. package/dist/ui/components/InputBox.d.ts.map +1 -0
  134. package/dist/ui/components/InputBox.js +96 -0
  135. package/dist/ui/components/InputBox.js.map +1 -0
  136. package/dist/ui/components/MessageList.d.ts +13 -0
  137. package/dist/ui/components/MessageList.d.ts.map +1 -0
  138. package/dist/ui/components/MessageList.js +10 -0
  139. package/dist/ui/components/MessageList.js.map +1 -0
  140. package/dist/ui/components/ModelSelector.d.ts +9 -0
  141. package/dist/ui/components/ModelSelector.d.ts.map +1 -0
  142. package/dist/ui/components/ModelSelector.js +77 -0
  143. package/dist/ui/components/ModelSelector.js.map +1 -0
  144. package/dist/ui/components/ProviderForm.d.ts +8 -0
  145. package/dist/ui/components/ProviderForm.d.ts.map +1 -0
  146. package/dist/ui/components/ProviderForm.js +88 -0
  147. package/dist/ui/components/ProviderForm.js.map +1 -0
  148. package/dist/ui/components/SettingsPanel.d.ts +7 -0
  149. package/dist/ui/components/SettingsPanel.d.ts.map +1 -0
  150. package/dist/ui/components/SettingsPanel.js +87 -0
  151. package/dist/ui/components/SettingsPanel.js.map +1 -0
  152. package/dist/ui/components/StatusBar.d.ts +8 -0
  153. package/dist/ui/components/StatusBar.d.ts.map +1 -0
  154. package/dist/ui/components/StatusBar.js +15 -0
  155. package/dist/ui/components/StatusBar.js.map +1 -0
  156. package/dist/ui/components/StatusDashboard.d.ts +7 -0
  157. package/dist/ui/components/StatusDashboard.d.ts.map +1 -0
  158. package/dist/ui/components/StatusDashboard.js +29 -0
  159. package/dist/ui/components/StatusDashboard.js.map +1 -0
  160. package/dist/ui/components/TitleBar.d.ts +8 -0
  161. package/dist/ui/components/TitleBar.d.ts.map +1 -0
  162. package/dist/ui/components/TitleBar.js +7 -0
  163. package/dist/ui/components/TitleBar.js.map +1 -0
  164. package/dist/ui/hooks/useConfig.d.ts +28 -0
  165. package/dist/ui/hooks/useConfig.d.ts.map +1 -0
  166. package/dist/ui/hooks/useConfig.js +20 -0
  167. package/dist/ui/hooks/useConfig.js.map +1 -0
  168. package/dist/ui/hooks/useModels.d.ts +10 -0
  169. package/dist/ui/hooks/useModels.d.ts.map +1 -0
  170. package/dist/ui/hooks/useModels.js +30 -0
  171. package/dist/ui/hooks/useModels.js.map +1 -0
  172. package/dist/ui/hooks/useProviders.d.ts +18 -0
  173. package/dist/ui/hooks/useProviders.d.ts.map +1 -0
  174. package/dist/ui/hooks/useProviders.js +56 -0
  175. package/dist/ui/hooks/useProviders.js.map +1 -0
  176. package/dist/ui/theme.d.ts +22 -0
  177. package/dist/ui/theme.d.ts.map +1 -0
  178. package/dist/ui/theme.js +99 -0
  179. package/dist/ui/theme.js.map +1 -0
  180. package/dist/utils/fuzzysearch.d.ts +8 -0
  181. package/dist/utils/fuzzysearch.d.ts.map +1 -0
  182. package/dist/utils/fuzzysearch.js +19 -0
  183. package/dist/utils/fuzzysearch.js.map +1 -0
  184. package/dist/utils/image.d.ts +8 -0
  185. package/dist/utils/image.d.ts.map +1 -0
  186. package/dist/utils/image.js +63 -0
  187. package/dist/utils/image.js.map +1 -0
  188. package/dist/utils/json.d.ts +2 -0
  189. package/dist/utils/json.d.ts.map +1 -0
  190. package/dist/utils/json.js +9 -0
  191. package/dist/utils/json.js.map +1 -0
  192. package/dist/utils/logger.d.ts +19 -0
  193. package/dist/utils/logger.d.ts.map +1 -0
  194. package/dist/utils/logger.js +23 -0
  195. package/dist/utils/logger.js.map +1 -0
  196. package/dist/utils/terminal.d.ts +11 -0
  197. package/dist/utils/terminal.d.ts.map +1 -0
  198. package/dist/utils/terminal.js +38 -0
  199. package/dist/utils/terminal.js.map +1 -0
  200. package/package.json +58 -0
@@ -0,0 +1,195 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import * as os from 'os';
4
+ import { encrypt, decrypt } from './encryption.js';
5
+ const CONFIG_DIR = path.join(os.homedir(), '.config', 'anya');
6
+ const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
7
+ function defaultConfig() {
8
+ return {
9
+ providers: {},
10
+ activeProvider: 'openai',
11
+ activeModel: 'gpt-4o',
12
+ favorites: [],
13
+ recent: [],
14
+ theme: 'pink',
15
+ defaultProvider: 'openai',
16
+ defaultModel: 'gpt-4o',
17
+ imageVisibility: true,
18
+ telemetry: false,
19
+ updateChannel: 'stable',
20
+ tokenUsage: { total: 0, requests: 0, successes: 0, failures: 0 },
21
+ };
22
+ }
23
+ export function loadConfig() {
24
+ try {
25
+ if (fs.existsSync(CONFIG_FILE)) {
26
+ const raw = fs.readFileSync(CONFIG_FILE, 'utf-8');
27
+ const parsed = JSON.parse(raw);
28
+ const merged = { ...defaultConfig(), ...parsed };
29
+ if (parsed.providers) {
30
+ merged.providers = { ...defaultConfig().providers, ...parsed.providers };
31
+ }
32
+ return merged;
33
+ }
34
+ }
35
+ catch {
36
+ }
37
+ return defaultConfig();
38
+ }
39
+ export function saveConfig(config) {
40
+ if (!fs.existsSync(CONFIG_DIR)) {
41
+ fs.mkdirSync(CONFIG_DIR, { recursive: true });
42
+ }
43
+ fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), 'utf-8');
44
+ }
45
+ export function getApiKey(provider) {
46
+ const envKey = {
47
+ openai: 'OPENAI_API_KEY',
48
+ anthropic: 'ANTHROPIC_API_KEY',
49
+ google: 'GEMINI_API_KEY',
50
+ openrouter: 'OPENROUTER_API_KEY',
51
+ deepseek: 'DEEPSEEK_API_KEY',
52
+ mistral: 'MISTRAL_API_KEY',
53
+ groq: 'GROQ_API_KEY',
54
+ xai: 'XAI_API_KEY',
55
+ together: 'TOGETHER_API_KEY',
56
+ custom: 'CUSTOM_API_KEY',
57
+ opencode: '',
58
+ ollama: '',
59
+ };
60
+ if (envKey[provider]) {
61
+ const envVal = process.env[envKey[provider]];
62
+ if (envVal)
63
+ return envVal;
64
+ }
65
+ const config = loadConfig();
66
+ const providerCfg = config.providers[provider];
67
+ if (providerCfg?.apiKey) {
68
+ if (providerCfg.encrypted) {
69
+ try {
70
+ return decrypt(providerCfg.apiKey);
71
+ }
72
+ catch {
73
+ return providerCfg.apiKey;
74
+ }
75
+ }
76
+ return providerCfg.apiKey;
77
+ }
78
+ return null;
79
+ }
80
+ export function setApiKey(provider, key) {
81
+ const config = loadConfig();
82
+ if (!config.providers[provider]) {
83
+ config.providers[provider] = { apiKey: '', model: '' };
84
+ }
85
+ const cfg = config.providers[provider];
86
+ cfg.apiKey = encrypt(key);
87
+ cfg.encrypted = true;
88
+ if (!cfg.model) {
89
+ const defaults = {
90
+ openai: 'gpt-4o',
91
+ anthropic: 'claude-sonnet-4-20250514',
92
+ google: 'gemini-2.5-flash',
93
+ openrouter: 'openai/gpt-4o',
94
+ deepseek: 'deepseek-chat',
95
+ mistral: 'mistral-large-latest',
96
+ groq: 'llama-3.3-70b-versatile',
97
+ xai: 'grok-2',
98
+ together: 'meta-llama/Llama-3.3-70B-Instruct-Turbo',
99
+ ollama: 'llama3.2',
100
+ opencode: '',
101
+ custom: 'gpt-4o',
102
+ };
103
+ cfg.model = defaults[provider] || '';
104
+ }
105
+ config.activeProvider = provider;
106
+ saveConfig(config);
107
+ }
108
+ export function getModel(provider) {
109
+ const config = loadConfig();
110
+ const providerCfg = config.providers[provider];
111
+ if (providerCfg?.model)
112
+ return providerCfg.model;
113
+ const defaults = {
114
+ openai: 'gpt-4o',
115
+ anthropic: 'claude-sonnet-4-20250514',
116
+ google: 'gemini-2.5-flash',
117
+ openrouter: 'openai/gpt-4o',
118
+ deepseek: 'deepseek-chat',
119
+ mistral: 'mistral-large-latest',
120
+ groq: 'llama-3.3-70b-versatile',
121
+ xai: 'grok-2',
122
+ together: 'meta-llama/Llama-3.3-70B-Instruct-Turbo',
123
+ ollama: 'llama3.2',
124
+ opencode: '',
125
+ custom: 'gpt-4o',
126
+ };
127
+ return defaults[provider] || null;
128
+ }
129
+ export function setModel(provider, model) {
130
+ const config = loadConfig();
131
+ if (!config.providers[provider]) {
132
+ config.providers[provider] = { apiKey: '', model: '' };
133
+ }
134
+ const cfg = config.providers[provider];
135
+ cfg.model = model;
136
+ config.activeModel = model;
137
+ saveConfig(config);
138
+ }
139
+ export function addRecentModel(modelId) {
140
+ const config = loadConfig();
141
+ config.recent = config.recent.filter((m) => m !== modelId);
142
+ config.recent.unshift(modelId);
143
+ if (config.recent.length > 10)
144
+ config.recent = config.recent.slice(0, 10);
145
+ saveConfig(config);
146
+ }
147
+ export function toggleFavorite(modelId) {
148
+ const config = loadConfig();
149
+ const idx = config.favorites.indexOf(modelId);
150
+ if (idx >= 0) {
151
+ config.favorites.splice(idx, 1);
152
+ saveConfig(config);
153
+ return false;
154
+ }
155
+ config.favorites.push(modelId);
156
+ saveConfig(config);
157
+ return true;
158
+ }
159
+ export function isFavorite(modelId) {
160
+ const config = loadConfig();
161
+ return config.favorites.includes(modelId);
162
+ }
163
+ export function deleteApiKey(provider) {
164
+ const config = loadConfig();
165
+ if (config.providers[provider]) {
166
+ delete config.providers[provider];
167
+ }
168
+ saveConfig(config);
169
+ }
170
+ export function maskKey(key) {
171
+ if (key.length <= 8)
172
+ return '****';
173
+ return key.slice(0, 4) + '****' + key.slice(-4);
174
+ }
175
+ export function updateTheme(theme) {
176
+ const config = loadConfig();
177
+ config.theme = theme;
178
+ saveConfig(config);
179
+ }
180
+ export function updateSettings(settings) {
181
+ const config = loadConfig();
182
+ Object.assign(config, settings);
183
+ saveConfig(config);
184
+ }
185
+ export function recordTokenUsage(tokens, success) {
186
+ const config = loadConfig();
187
+ config.tokenUsage.total += tokens;
188
+ config.tokenUsage.requests++;
189
+ if (success)
190
+ config.tokenUsage.successes++;
191
+ else
192
+ config.tokenUsage.failures++;
193
+ saveConfig(config);
194
+ }
195
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/config/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,97 @@
1
+ #!/usr/bin/env node
2
+ import { program } from 'commander';
3
+ import React from 'react';
4
+ import { render } from 'ink';
5
+ import { App } from './ui/App.js';
6
+ import { loadConfig, setApiKey, setModel } from './config/store.js';
7
+ import { CONNECT_PROVIDERS, createProvider } from './commands/providerFactory.js';
8
+ import * as readline from 'node:readline';
9
+ import { readPackageJson } from './utils/json.js';
10
+ import { ChatSession } from './chat/session.js';
11
+ program
12
+ .name('anya')
13
+ .description('Anya — Multi-provider AI CLI Assistant')
14
+ .version(readPackageJson().version)
15
+ .option('-c, --connect <provider>', 'Quick connect to a provider (openai, anthropic, google, openrouter, deepseek, mistral, groq, xai, together, ollama, opencode, custom)')
16
+ .option('-m, --model <model>', 'Set the default model')
17
+ .option('-q, --query <text>', 'Ask a question and exit')
18
+ .parse(process.argv);
19
+ const opts = program.opts();
20
+ async function main() {
21
+ if (opts.connect) {
22
+ const providerName = opts.connect.toLowerCase();
23
+ const prov = CONNECT_PROVIDERS.find((p) => p.id === providerName);
24
+ if (!prov) {
25
+ console.error(`\n Unknown provider: ${providerName}`);
26
+ console.error(' Available: ' + CONNECT_PROVIDERS.map((p) => p.id).join(', '));
27
+ console.error();
28
+ process.exit(1);
29
+ }
30
+ if (!prov.needsKey) {
31
+ setApiKey(prov.id, '');
32
+ console.log(`\n ♥ Connected to ${prov.name}!\n`);
33
+ startApp();
34
+ return;
35
+ }
36
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
37
+ console.log(`\n Provider: ${prov.name}`);
38
+ console.log(` ${prov.desc}\n`);
39
+ const key = await new Promise(resolve => rl.question(' Enter API key: ', resolve));
40
+ rl.close();
41
+ if (!key.trim()) {
42
+ console.error('\n API key cannot be empty.\n');
43
+ process.exit(1);
44
+ }
45
+ setApiKey(prov.id, key.trim());
46
+ console.log(`\n ♥ Connected to ${prov.name}!\n`);
47
+ if (opts.model) {
48
+ setModel(prov.id, opts.model);
49
+ }
50
+ if (opts.query) {
51
+ await runQuery(opts.query);
52
+ return;
53
+ }
54
+ startApp();
55
+ return;
56
+ }
57
+ if (opts.model) {
58
+ const config = loadConfig();
59
+ setModel(config.activeProvider, opts.model);
60
+ console.log(` Default model set to: ${opts.model}\n`);
61
+ return;
62
+ }
63
+ if (opts.query) {
64
+ await runQuery(opts.query, opts.connect);
65
+ return;
66
+ }
67
+ startApp();
68
+ }
69
+ async function runQuery(query, specificProvider) {
70
+ const config = loadConfig();
71
+ const activeProvider = specificProvider?.toLowerCase() || config.activeProvider;
72
+ const providerCfg = config.providers[activeProvider];
73
+ if (!providerCfg?.apiKey && !process.env[`${activeProvider.toUpperCase()}_API_KEY`]) {
74
+ console.error('\n No API key configured. Run: anya --connect <provider>\n');
75
+ process.exit(1);
76
+ }
77
+ const provider = createProvider(activeProvider);
78
+ const session = new ChatSession();
79
+ session.addMessage('user', query);
80
+ console.log(`\n Asking ${provider.info.name} (${provider.getModel()})...\n`);
81
+ try {
82
+ const response = await provider.sendMessage(session.getMessages());
83
+ console.log(` ${response}\n`);
84
+ }
85
+ catch (err) {
86
+ console.error(` Error: ${err.message}\n`);
87
+ process.exit(1);
88
+ }
89
+ }
90
+ function startApp() {
91
+ render(React.createElement(App));
92
+ }
93
+ main().catch(err => {
94
+ console.error('Error:', err.message);
95
+ process.exit(1);
96
+ });
97
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { AIProvider, Message, StreamChunk, ModelInfo, ProviderInfo } from './base.js';
2
+ export declare class AnthropicProvider extends AIProvider {
3
+ private baseUrl;
4
+ get info(): ProviderInfo;
5
+ validateApiKey(): Promise<boolean>;
6
+ fetchModels(): Promise<ModelInfo[]>;
7
+ sendMessage(messages: Message[]): Promise<string>;
8
+ streamMessage(messages: Message[]): AsyncGenerator<StreamChunk>;
9
+ }
10
+ //# sourceMappingURL=anthropic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAa,YAAY,EAAE,MAAM,WAAW,CAAA;AAEhG,qBAAa,iBAAkB,SAAQ,UAAU;IAC/C,OAAO,CAAC,OAAO,CAAiC;IAEhD,IAAI,IAAI,IAAI,YAAY,CAEvB;IAEK,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAqBlC,WAAW,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IASnC,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IA8BhD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,WAAW,CAAC;CA8DvE"}
@@ -0,0 +1,128 @@
1
+ import { AIProvider, PROVIDERS } from './base.js';
2
+ export class AnthropicProvider extends AIProvider {
3
+ constructor() {
4
+ super(...arguments);
5
+ this.baseUrl = 'https://api.anthropic.com/v1';
6
+ }
7
+ get info() {
8
+ return PROVIDERS.find((p) => p.id === 'anthropic');
9
+ }
10
+ async validateApiKey() {
11
+ try {
12
+ const res = await fetch(`${this.baseUrl}/messages`, {
13
+ method: 'POST',
14
+ headers: {
15
+ 'Content-Type': 'application/json',
16
+ 'x-api-key': this.apiKey,
17
+ 'anthropic-version': '2023-06-01'
18
+ },
19
+ body: JSON.stringify({
20
+ model: 'claude-haiku-3-5',
21
+ max_tokens: 10,
22
+ messages: [{ role: 'user', content: 'hi' }]
23
+ })
24
+ });
25
+ return res.ok;
26
+ }
27
+ catch {
28
+ return false;
29
+ }
30
+ }
31
+ async fetchModels() {
32
+ return [
33
+ { id: 'claude-sonnet-4-20250514', name: 'Claude Sonnet 4', provider: 'anthropic', contextLength: 200000 },
34
+ { id: 'claude-opus-4-20250514', name: 'Claude Opus 4', provider: 'anthropic', contextLength: 200000 },
35
+ { id: 'claude-haiku-3-5', name: 'Claude Haiku 3.5', provider: 'anthropic', contextLength: 200000 },
36
+ { id: 'claude-sonnet-4-5-20250929', name: 'Claude Sonnet 4.5', provider: 'anthropic', contextLength: 200000 }
37
+ ];
38
+ }
39
+ async sendMessage(messages) {
40
+ const sysPrompt = messages.find((m) => m.role === 'system')?.content;
41
+ const chatMessages = messages.filter((m) => m.role !== 'system');
42
+ const res = await fetch(`${this.baseUrl}/messages`, {
43
+ method: 'POST',
44
+ headers: {
45
+ 'Content-Type': 'application/json',
46
+ 'x-api-key': this.apiKey,
47
+ 'anthropic-version': '2023-06-01'
48
+ },
49
+ body: JSON.stringify({
50
+ model: this.model,
51
+ max_tokens: 4096,
52
+ system: sysPrompt,
53
+ messages: chatMessages.map(m => ({ role: m.role, content: m.content }))
54
+ })
55
+ });
56
+ if (!res.ok) {
57
+ const body = await res.text();
58
+ if (res.status === 401)
59
+ throw new Error('Anthropic: Invalid API key');
60
+ if (res.status === 429)
61
+ throw new Error('Anthropic: Rate limited. Try again later.');
62
+ throw new Error(`Anthropic: HTTP ${res.status} - ${body}`);
63
+ }
64
+ const data = await res.json();
65
+ return data.content?.[0]?.text || '';
66
+ }
67
+ async *streamMessage(messages) {
68
+ const sysPrompt = messages.find((m) => m.role === 'system')?.content;
69
+ const chatMessages = messages.filter((m) => m.role !== 'system');
70
+ const res = await fetch(`${this.baseUrl}/messages`, {
71
+ method: 'POST',
72
+ headers: {
73
+ 'Content-Type': 'application/json',
74
+ 'x-api-key': this.apiKey,
75
+ 'anthropic-version': '2023-06-01'
76
+ },
77
+ body: JSON.stringify({
78
+ model: this.model,
79
+ max_tokens: 4096,
80
+ system: sysPrompt,
81
+ messages: chatMessages.map(m => ({ role: m.role, content: m.content })),
82
+ stream: true
83
+ })
84
+ });
85
+ if (!res.ok) {
86
+ const body = await res.text();
87
+ if (res.status === 401)
88
+ throw new Error('Anthropic: Invalid API key');
89
+ if (res.status === 429)
90
+ throw new Error('Anthropic: Rate limited. Try again later.');
91
+ throw new Error(`Anthropic: HTTP ${res.status}`);
92
+ }
93
+ const reader = res.body?.getReader();
94
+ if (!reader)
95
+ throw new Error('Anthropic: No response body');
96
+ const decoder = new TextDecoder();
97
+ let buffer = '';
98
+ while (true) {
99
+ const { done, value } = await reader.read();
100
+ if (done)
101
+ break;
102
+ buffer += decoder.decode(value, { stream: true });
103
+ const lines = buffer.split('\n');
104
+ buffer = lines.pop() || '';
105
+ for (const line of lines) {
106
+ if (line.startsWith('data: ')) {
107
+ const data = line.slice(6).trim();
108
+ if (!data)
109
+ continue;
110
+ try {
111
+ const parsed = JSON.parse(data);
112
+ if (parsed.type === 'content_block_delta' && parsed.delta?.type === 'text_delta') {
113
+ yield { text: parsed.delta.text, done: false };
114
+ }
115
+ if (parsed.type === 'message_stop') {
116
+ yield { text: '', done: true };
117
+ return;
118
+ }
119
+ }
120
+ catch {
121
+ }
122
+ }
123
+ }
124
+ }
125
+ yield { text: '', done: true };
126
+ }
127
+ }
128
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ export interface Message {
2
+ role: 'user' | 'assistant' | 'system';
3
+ content: string;
4
+ }
5
+ export interface StreamChunk {
6
+ text: string;
7
+ done: boolean;
8
+ }
9
+ export interface ModelInfo {
10
+ id: string;
11
+ name: string;
12
+ provider: string;
13
+ contextLength?: number;
14
+ pricing?: {
15
+ prompt: string;
16
+ completion: string;
17
+ };
18
+ }
19
+ export interface ProviderInfo {
20
+ id: string;
21
+ name: string;
22
+ models: string[];
23
+ defaultModel: string;
24
+ }
25
+ export declare const PROVIDERS: ProviderInfo[];
26
+ export declare const ALL_PROVIDERS: ProviderInfo[];
27
+ export declare abstract class AIProvider {
28
+ protected apiKey: string;
29
+ protected model: string;
30
+ constructor(apiKey: string, model: string);
31
+ abstract get info(): ProviderInfo;
32
+ abstract sendMessage(messages: Message[]): Promise<string>;
33
+ abstract streamMessage(messages: Message[]): AsyncGenerator<StreamChunk>;
34
+ abstract validateApiKey(): Promise<boolean>;
35
+ abstract fetchModels(): Promise<ModelInfo[]>;
36
+ setModel(model: string): void;
37
+ getModel(): string;
38
+ }
39
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/providers/base.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAA;IACrC,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,OAAO,CAAA;CACd;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,OAAO,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAA;CACjD;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,eAAO,MAAM,SAAS,EAAE,YAAY,EAanC,CAAA;AAED,eAAO,MAAM,aAAa,gBAAY,CAAA;AAEtC,8BAAsB,UAAU;IAC9B,SAAS,CAAC,MAAM,EAAE,MAAM,CAAA;IACxB,SAAS,CAAC,KAAK,EAAE,MAAM,CAAA;gBAEX,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAKzC,QAAQ,KAAK,IAAI,IAAI,YAAY,CAAA;IAEjC,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAE1D,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,WAAW,CAAC;IAExE,QAAQ,CAAC,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAE3C,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAE5C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI7B,QAAQ,IAAI,MAAM;CAGnB"}
@@ -0,0 +1,28 @@
1
+ export const PROVIDERS = [
2
+ { id: 'openai', name: 'OpenAI', models: ['gpt-4o', 'gpt-4o-mini', 'gpt-4-turbo', 'o3-mini'], defaultModel: 'gpt-4o' },
3
+ { id: 'anthropic', name: 'Anthropic', models: ['claude-sonnet-4-20250514', 'claude-opus-4-20250514', 'claude-haiku-3-5'], defaultModel: 'claude-sonnet-4-20250514' },
4
+ { id: 'google', name: 'Google Gemini', models: ['gemini-2.5-flash', 'gemini-2.5-pro'], defaultModel: 'gemini-2.5-flash' },
5
+ { id: 'openrouter', name: 'OpenRouter', models: [], defaultModel: 'openai/gpt-4o' },
6
+ { id: 'deepseek', name: 'DeepSeek', models: ['deepseek-chat', 'deepseek-reasoner'], defaultModel: 'deepseek-chat' },
7
+ { id: 'mistral', name: 'Mistral AI', models: ['mistral-large-latest', 'mistral-small-latest', 'codestral-latest'], defaultModel: 'mistral-large-latest' },
8
+ { id: 'groq', name: 'Groq', models: ['llama-3.3-70b-versatile', 'llama-3.1-8b-instant', 'mixtral-8x7b-32768', 'deepseek-r1-distill-llama-70b'], defaultModel: 'llama-3.3-70b-versatile' },
9
+ { id: 'xai', name: 'xAI', models: ['grok-2', 'grok-2-mini'], defaultModel: 'grok-2' },
10
+ { id: 'together', name: 'Together AI', models: ['meta-llama/Llama-3.3-70B-Instruct-Turbo', 'mistralai/Mixtral-8x22B-Instruct-v0.1'], defaultModel: 'meta-llama/Llama-3.3-70B-Instruct-Turbo' },
11
+ { id: 'ollama', name: 'Ollama', models: ['llama3.2', 'mistral', 'codellama'], defaultModel: 'llama3.2' },
12
+ { id: 'opencode', name: 'OpenCode (local)', models: [], defaultModel: '' },
13
+ { id: 'custom', name: 'Custom OpenAI Compatible', models: [], defaultModel: 'gpt-4o' },
14
+ ];
15
+ export const ALL_PROVIDERS = PROVIDERS;
16
+ export class AIProvider {
17
+ constructor(apiKey, model) {
18
+ this.apiKey = apiKey;
19
+ this.model = model;
20
+ }
21
+ setModel(model) {
22
+ this.model = model;
23
+ }
24
+ getModel() {
25
+ return this.model;
26
+ }
27
+ }
28
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/providers/base.ts"],"names":[],"mappings":"AAyBA,MAAM,CAAC,MAAM,SAAS,GAAmB;IACvC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE;IACrH,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,0BAA0B,EAAE,wBAAwB,EAAE,kBAAkB,CAAC,EAAE,YAAY,EAAE,0BAA0B,EAAE;IACpK,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,EAAE,YAAY,EAAE,kBAAkB,EAAE;IACzH,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,eAAe,EAAE;IACnF,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,eAAe,EAAE,mBAAmB,CAAC,EAAE,YAAY,EAAE,eAAe,EAAE;IACnH,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,sBAAsB,EAAE,sBAAsB,EAAE,kBAAkB,CAAC,EAAE,YAAY,EAAE,sBAAsB,EAAE;IACzJ,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,yBAAyB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,+BAA+B,CAAC,EAAE,YAAY,EAAE,yBAAyB,EAAE;IACzL,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE;IACrF,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,yCAAyC,EAAE,uCAAuC,CAAC,EAAE,YAAY,EAAE,yCAAyC,EAAE;IAC9L,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE;IACxG,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE;IAC1E,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,0BAA0B,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE;CACvF,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAA;AAEtC,MAAM,OAAgB,UAAU;IAI9B,YAAY,MAAc,EAAE,KAAa;QACvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IAYD,QAAQ,CAAC,KAAa;QACpB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;CACF"}
@@ -0,0 +1,11 @@
1
+ import { AIProvider, Message, StreamChunk, ModelInfo, ProviderInfo } from './base.js';
2
+ export declare class CustomProvider extends AIProvider {
3
+ private baseUrl;
4
+ constructor(apiKey: string, model: string, baseUrl?: string);
5
+ get info(): ProviderInfo;
6
+ validateApiKey(): Promise<boolean>;
7
+ fetchModels(): Promise<ModelInfo[]>;
8
+ sendMessage(messages: Message[]): Promise<string>;
9
+ streamMessage(messages: Message[]): AsyncGenerator<StreamChunk>;
10
+ }
11
+ //# sourceMappingURL=custom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom.d.ts","sourceRoot":"","sources":["../../src/providers/custom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAiB,YAAY,EAAE,MAAM,WAAW,CAAA;AAEpG,qBAAa,cAAe,SAAQ,UAAU;IAC5C,OAAO,CAAC,OAAO,CAAQ;gBAEX,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAK3D,IAAI,IAAI,IAAI,YAAY,CAEvB;IAEK,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAUlC,WAAW,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAcnC,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAWhD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,WAAW,CAAC;CA+BvE"}