@jacobbd/relay-ai 0.3.5 → 0.4.1

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.
@@ -0,0 +1,427 @@
1
+ #!/usr/bin/env node
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __esm = (fn, res) => function __init() {
7
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
8
+ };
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
+
23
+ // src/provider-templates.ts
24
+ var provider_templates_exports = {};
25
+ __export(provider_templates_exports, {
26
+ PROVIDER_TEMPLATES: () => PROVIDER_TEMPLATES,
27
+ filterTemplates: () => filterTemplates,
28
+ getTemplateById: () => getTemplateById,
29
+ listAddableTemplates: () => listAddableTemplates,
30
+ listSupportedTemplates: () => listSupportedTemplates,
31
+ listVisibleOAuthTemplates: () => listVisibleOAuthTemplates
32
+ });
33
+ function listSupportedTemplates() {
34
+ return PROVIDER_TEMPLATES.filter((t) => t.supported && t.authType === "api" && t.addable !== false && !t.hidden).sort((a, b) => a.name.localeCompare(b.name));
35
+ }
36
+ function listAddableTemplates(configuredIds = []) {
37
+ const configured = new Set(configuredIds);
38
+ return listSupportedTemplates().filter((t) => {
39
+ if (t.id === "opencode-cloud") {
40
+ return !configured.has("zen") && !configured.has("go");
41
+ }
42
+ return !configured.has(t.id);
43
+ });
44
+ }
45
+ function listVisibleOAuthTemplates(configuredIds = []) {
46
+ const configured = new Set(configuredIds);
47
+ return PROVIDER_TEMPLATES.filter((t) => t.authType === "oauth" && t.supported && t.addable !== false && !t.hidden && !configured.has(t.id)).sort((a, b) => a.name.localeCompare(b.name));
48
+ }
49
+ function getTemplateById(id) {
50
+ return PROVIDER_TEMPLATES.find((t) => t.id === id);
51
+ }
52
+ function filterTemplates(templates, query) {
53
+ const q = query.trim().toLowerCase();
54
+ if (!q) return templates;
55
+ return templates.filter(
56
+ (t) => t.id.toLowerCase().includes(q) || t.name.toLowerCase().includes(q) || t.npm.toLowerCase().includes(q)
57
+ );
58
+ }
59
+ var PROVIDER_TEMPLATES;
60
+ var init_provider_templates = __esm({
61
+ "src/provider-templates.ts"() {
62
+ PROVIDER_TEMPLATES = [
63
+ {
64
+ id: "groq",
65
+ name: "Groq",
66
+ authType: "api",
67
+ npm: "@ai-sdk/groq",
68
+ defaultBaseUrl: "https://api.groq.com/openai/v1",
69
+ signupUrl: "https://console.groq.com/keys",
70
+ modelSource: "api-list",
71
+ supported: true
72
+ },
73
+ {
74
+ id: "nvidia",
75
+ name: "Nvidia",
76
+ authType: "api",
77
+ npm: "@ai-sdk/openai-compatible",
78
+ defaultBaseUrl: "https://integrate.api.nvidia.com/v1",
79
+ signupUrl: "https://build.nvidia.com",
80
+ modelSource: "api-list",
81
+ supported: true
82
+ },
83
+ {
84
+ id: "mistral",
85
+ name: "Mistral",
86
+ authType: "api",
87
+ npm: "@ai-sdk/mistral",
88
+ defaultBaseUrl: "https://api.mistral.ai/v1",
89
+ signupUrl: "https://console.mistral.ai/api-keys",
90
+ modelSource: "api-list",
91
+ supported: true
92
+ },
93
+ {
94
+ id: "togetherai",
95
+ name: "Together AI",
96
+ authType: "api",
97
+ npm: "@ai-sdk/togetherai",
98
+ defaultBaseUrl: "https://api.together.xyz/v1",
99
+ signupUrl: "https://api.together.xyz/settings/api-keys",
100
+ modelSource: "api-list",
101
+ supported: true
102
+ },
103
+ {
104
+ id: "cerebras",
105
+ name: "Cerebras",
106
+ authType: "api",
107
+ npm: "@ai-sdk/cerebras",
108
+ defaultBaseUrl: "https://api.cerebras.ai/v1",
109
+ signupUrl: "https://cloud.cerebras.ai",
110
+ modelSource: "api-list",
111
+ supported: true
112
+ },
113
+ {
114
+ id: "deepinfra",
115
+ name: "DeepInfra",
116
+ authType: "api",
117
+ npm: "@ai-sdk/deepinfra",
118
+ defaultBaseUrl: "https://api.deepinfra.com/v1/openai",
119
+ signupUrl: "https://deepinfra.com/dash/api_keys",
120
+ modelSource: "api-list",
121
+ supported: true
122
+ },
123
+ {
124
+ id: "deepseek",
125
+ name: "DeepSeek",
126
+ authType: "api",
127
+ npm: "@ai-sdk/openai-compatible",
128
+ defaultBaseUrl: "https://api.deepseek.com/v1",
129
+ signupUrl: "https://platform.deepseek.com",
130
+ modelSource: "api-list",
131
+ supported: true
132
+ },
133
+ {
134
+ id: "zhipu",
135
+ name: "Zhipu AI (GLM)",
136
+ authType: "api",
137
+ npm: "@ai-sdk/openai-compatible",
138
+ defaultBaseUrl: "https://open.bigmodel.cn/api/paas/v4",
139
+ signupUrl: "https://open.bigmodel.cn",
140
+ modelSource: "api-list",
141
+ supported: true
142
+ },
143
+ {
144
+ id: "moonshot",
145
+ name: "Moonshot (Kimi)",
146
+ authType: "api",
147
+ npm: "@ai-sdk/openai-compatible",
148
+ defaultBaseUrl: "https://api.moonshot.cn/v1",
149
+ signupUrl: "https://platform.moonshot.cn",
150
+ modelSource: "api-list",
151
+ supported: true
152
+ },
153
+ {
154
+ id: "moonshot-global",
155
+ name: "Moonshot Global (kimi.ai)",
156
+ authType: "api",
157
+ npm: "@ai-sdk/openai-compatible",
158
+ defaultBaseUrl: "https://api.moonshot.ai/v1",
159
+ signupUrl: "https://platform.kimi.ai",
160
+ modelSource: "api-list",
161
+ supported: true
162
+ },
163
+ {
164
+ id: "kimi-code",
165
+ name: "Kimi Code (Subscription Required)",
166
+ authType: "api",
167
+ npm: "@ai-sdk/openai-compatible",
168
+ defaultBaseUrl: "https://api.kimi.com/coding/v1",
169
+ modelSource: "static-seed",
170
+ staticModels: [
171
+ { id: "kimi-for-coding", name: "Kimi Code K2.7 (Unified)" }
172
+ ],
173
+ supported: true
174
+ },
175
+ {
176
+ id: "xai",
177
+ name: "xAI",
178
+ authType: "api",
179
+ npm: "@ai-sdk/xai",
180
+ defaultBaseUrl: "https://api.x.ai/v1",
181
+ signupUrl: "https://console.x.ai",
182
+ modelSource: "api-list",
183
+ supported: true
184
+ },
185
+ {
186
+ id: "perplexity",
187
+ name: "Perplexity",
188
+ authType: "api",
189
+ npm: "@ai-sdk/perplexity",
190
+ defaultBaseUrl: "https://api.perplexity.ai",
191
+ signupUrl: "https://www.perplexity.ai/settings/api",
192
+ modelSource: "api-list",
193
+ supported: true
194
+ },
195
+ {
196
+ id: "cohere",
197
+ name: "Cohere",
198
+ authType: "api",
199
+ npm: "@ai-sdk/cohere",
200
+ defaultBaseUrl: "https://api.cohere.com/compatibility/v1",
201
+ signupUrl: "https://dashboard.cohere.com/api-keys",
202
+ modelSource: "api-list",
203
+ supported: true
204
+ },
205
+ {
206
+ id: "openai",
207
+ name: "OpenAI",
208
+ authType: "api",
209
+ npm: "@ai-sdk/openai",
210
+ defaultBaseUrl: "https://api.openai.com/v1",
211
+ signupUrl: "https://platform.openai.com/api-keys",
212
+ modelSource: "api-list",
213
+ supported: true
214
+ },
215
+ {
216
+ id: "google",
217
+ name: "Google Gemini",
218
+ authType: "api",
219
+ npm: "@ai-sdk/google",
220
+ defaultBaseUrl: "https://generativelanguage.googleapis.com/v1beta/openai",
221
+ signupUrl: "https://aistudio.google.com/apikey",
222
+ modelSource: "api-list",
223
+ supported: true
224
+ },
225
+ {
226
+ id: "alibaba",
227
+ name: "Alibaba DashScope",
228
+ authType: "api",
229
+ npm: "@ai-sdk/alibaba",
230
+ defaultBaseUrl: "https://dashscope.aliyuncs.com/compatible-mode/v1",
231
+ signupUrl: "https://dashscope.console.aliyun.com/apiKey",
232
+ modelSource: "api-list",
233
+ supported: true
234
+ },
235
+ {
236
+ id: "openrouter",
237
+ name: "OpenRouter",
238
+ authType: "api",
239
+ npm: "@openrouter/ai-sdk-provider",
240
+ defaultBaseUrl: "https://openrouter.ai/api/v1",
241
+ signupUrl: "https://openrouter.ai/keys",
242
+ modelSource: "api-list",
243
+ supported: true
244
+ },
245
+ {
246
+ id: "kilo",
247
+ name: "Kilo Code",
248
+ authType: "api",
249
+ npm: "@ai-sdk/openai-compatible",
250
+ defaultBaseUrl: "https://api.kilo.ai/api/gateway",
251
+ modelsPath: "/models",
252
+ signupUrl: "https://app.kilo.ai",
253
+ apiKeyOptional: true,
254
+ anonymousFreeModels: true,
255
+ modelSource: "api-list",
256
+ supported: true
257
+ },
258
+ {
259
+ id: "ollama",
260
+ name: "Ollama",
261
+ authType: "api",
262
+ npm: "@ai-sdk/openai-compatible",
263
+ defaultBaseUrl: "http://127.0.0.1:11434/v1",
264
+ urlPrompt: "Ollama API Base URL:",
265
+ apiKeyOptional: true,
266
+ modelSource: "api-list",
267
+ supported: true
268
+ },
269
+ {
270
+ id: "lmstudio",
271
+ name: "LM Studio",
272
+ authType: "api",
273
+ npm: "@ai-sdk/openai-compatible",
274
+ defaultBaseUrl: "http://127.0.0.1:1234/v1",
275
+ urlPrompt: "LM Studio API Base URL:",
276
+ apiKeyOptional: true,
277
+ modelSource: "api-list",
278
+ supported: true
279
+ },
280
+ {
281
+ id: "venice",
282
+ name: "Venice AI",
283
+ authType: "api",
284
+ npm: "venice-ai-sdk-provider",
285
+ defaultBaseUrl: "https://api.venice.ai/api/v1",
286
+ signupUrl: "https://venice.ai/settings/api",
287
+ modelSource: "api-list",
288
+ supported: true
289
+ },
290
+ {
291
+ id: "anthropic",
292
+ name: "Anthropic",
293
+ authType: "api",
294
+ npm: "@ai-sdk/anthropic",
295
+ defaultBaseUrl: "https://api.anthropic.com",
296
+ signupUrl: "https://console.anthropic.com/settings/keys",
297
+ modelSource: "api-list",
298
+ supported: true
299
+ },
300
+ {
301
+ id: "bedrock",
302
+ name: "Amazon Bedrock",
303
+ authType: "api",
304
+ npm: "@ai-sdk/amazon-bedrock",
305
+ modelSource: "manual-only",
306
+ supported: false,
307
+ unsupportedReason: "Requires AWS credentials \u2014 use relay-ai providers import from OpenCode for now."
308
+ },
309
+ {
310
+ id: "azure",
311
+ name: "Azure OpenAI",
312
+ authType: "api",
313
+ npm: "@ai-sdk/azure",
314
+ modelSource: "manual-only",
315
+ supported: false,
316
+ unsupportedReason: "Requires Azure deployment URLs \u2014 use relay-ai providers import from OpenCode for now."
317
+ },
318
+ {
319
+ id: "vertex",
320
+ name: "Google Vertex AI",
321
+ authType: "none",
322
+ npm: "@ai-sdk/google-vertex",
323
+ modelSource: "manual-only",
324
+ supported: false,
325
+ unsupportedReason: "Uses gcloud Application Default Credentials \u2014 not supported via API key import."
326
+ },
327
+ {
328
+ id: "opencode-cloud",
329
+ name: "OpenCode Zen / Go",
330
+ authType: "api",
331
+ npm: "@ai-sdk/openai-compatible",
332
+ signupUrl: "https://opencode.ai/auth",
333
+ modelSource: "zen-go-api",
334
+ supported: true
335
+ },
336
+ {
337
+ id: "zen",
338
+ name: "OpenCode Zen",
339
+ authType: "api",
340
+ npm: "@ai-sdk/openai-compatible",
341
+ signupUrl: "https://opencode.ai/auth",
342
+ modelSource: "zen-go-api",
343
+ supported: true,
344
+ addable: false
345
+ },
346
+ {
347
+ id: "go",
348
+ name: "OpenCode Go",
349
+ authType: "api",
350
+ npm: "@ai-sdk/openai-compatible",
351
+ signupUrl: "https://opencode.ai/auth",
352
+ modelSource: "zen-go-api",
353
+ supported: true,
354
+ addable: false
355
+ },
356
+ // Subscription OAuth providers — Authorization Code + PKCE (browser redirect)
357
+ // ⚠️ These extract tokens from paid subscriptions. Account risk — see plan docs.
358
+ {
359
+ id: "claude-code",
360
+ name: "Claude Code (Anthropic subscription)",
361
+ authType: "oauth",
362
+ npm: "@ai-sdk/anthropic",
363
+ defaultBaseUrl: "https://api.anthropic.com",
364
+ signupUrl: "https://claude.ai",
365
+ modelSource: "api-list",
366
+ supported: true,
367
+ hidden: true,
368
+ subscriptionRisk: true
369
+ },
370
+ {
371
+ id: "antigravity",
372
+ name: "Antigravity (Google Cloud Code Assist)",
373
+ authType: "oauth",
374
+ npm: "@ai-sdk/openai-compatible",
375
+ signupUrl: "https://antigravity.google",
376
+ modelSource: "api-list",
377
+ supported: true,
378
+ hidden: true,
379
+ subscriptionRisk: true
380
+ },
381
+ // OAuth-gated subscription providers — device code or broker sign-in
382
+ {
383
+ id: "xai-oauth",
384
+ name: "xAI Grok (SuperGrok)",
385
+ authType: "oauth",
386
+ npm: "@ai-sdk/xai",
387
+ signupUrl: "https://x.ai",
388
+ modelSource: "api-list",
389
+ supported: true
390
+ },
391
+ {
392
+ id: "openai-oauth",
393
+ name: "OpenAI (ChatGPT)",
394
+ authType: "oauth",
395
+ npm: "@ai-sdk/openai",
396
+ signupUrl: "https://chatgpt.com",
397
+ modelSource: "api-list",
398
+ supported: true
399
+ },
400
+ {
401
+ id: "github-copilot",
402
+ name: "GitHub Copilot",
403
+ authType: "oauth",
404
+ npm: "@ai-sdk/openai-compatible",
405
+ defaultBaseUrl: "https://api.githubcopilot.com",
406
+ modelsPath: "/models",
407
+ signupUrl: "https://github.com/features/copilot",
408
+ modelSource: "api-list",
409
+ headers: { "Editor-Version": "vscode/1.85.1" },
410
+ supported: true
411
+ }
412
+ ];
413
+ }
414
+ });
415
+
416
+ export {
417
+ __toCommonJS,
418
+ PROVIDER_TEMPLATES,
419
+ listSupportedTemplates,
420
+ listAddableTemplates,
421
+ listVisibleOAuthTemplates,
422
+ getTemplateById,
423
+ filterTemplates,
424
+ provider_templates_exports,
425
+ init_provider_templates
426
+ };
427
+ //# sourceMappingURL=chunk-DO5FAMNC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/provider-templates.ts"],"sourcesContent":["// src/provider-templates.ts — builtin provider templates for relay-ai providers add\n\nexport type ProviderAuthType = 'api' | 'oauth' | 'none';\nexport type ProviderModelSource = 'api-list' | 'static-seed' | 'manual-only' | 'zen-go-api';\n\nexport interface ProviderTemplate {\n id: string;\n name: string;\n authType: ProviderAuthType;\n npm: string;\n defaultBaseUrl?: string;\n modelsPath?: string;\n signupUrl?: string;\n urlPlaceholder?: string;\n urlPrompt?: string;\n apiKeyOptional?: boolean;\n anonymousFreeModels?: boolean;\n /** Static headers this provider requires on every request (model listing and runtime). */\n headers?: Record<string, string>;\n modelSource: ProviderModelSource;\n staticModels?: Array<{ id: string; name: string }>;\n supported: boolean;\n addable?: boolean;\n hidden?: boolean;\n unsupportedReason?: string;\n /** True for providers that extract subscription tokens — carries account risk. */\n subscriptionRisk?: boolean;\n}\n\n/** Templates aligned with SDK packages shipped in package.json (API-key providers first). */\nexport const PROVIDER_TEMPLATES: ProviderTemplate[] = [\n {\n id: 'groq',\n name: 'Groq',\n authType: 'api',\n npm: '@ai-sdk/groq',\n defaultBaseUrl: 'https://api.groq.com/openai/v1',\n signupUrl: 'https://console.groq.com/keys',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'nvidia',\n name: 'Nvidia',\n authType: 'api',\n npm: '@ai-sdk/openai-compatible',\n defaultBaseUrl: 'https://integrate.api.nvidia.com/v1',\n signupUrl: 'https://build.nvidia.com',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'mistral',\n name: 'Mistral',\n authType: 'api',\n npm: '@ai-sdk/mistral',\n defaultBaseUrl: 'https://api.mistral.ai/v1',\n signupUrl: 'https://console.mistral.ai/api-keys',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'togetherai',\n name: 'Together AI',\n authType: 'api',\n npm: '@ai-sdk/togetherai',\n defaultBaseUrl: 'https://api.together.xyz/v1',\n signupUrl: 'https://api.together.xyz/settings/api-keys',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'cerebras',\n name: 'Cerebras',\n authType: 'api',\n npm: '@ai-sdk/cerebras',\n defaultBaseUrl: 'https://api.cerebras.ai/v1',\n signupUrl: 'https://cloud.cerebras.ai',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'deepinfra',\n name: 'DeepInfra',\n authType: 'api',\n npm: '@ai-sdk/deepinfra',\n defaultBaseUrl: 'https://api.deepinfra.com/v1/openai',\n signupUrl: 'https://deepinfra.com/dash/api_keys',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'deepseek',\n name: 'DeepSeek',\n authType: 'api',\n npm: '@ai-sdk/openai-compatible',\n defaultBaseUrl: 'https://api.deepseek.com/v1',\n signupUrl: 'https://platform.deepseek.com',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'zhipu',\n name: 'Zhipu AI (GLM)',\n authType: 'api',\n npm: '@ai-sdk/openai-compatible',\n defaultBaseUrl: 'https://open.bigmodel.cn/api/paas/v4',\n signupUrl: 'https://open.bigmodel.cn',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'moonshot',\n name: 'Moonshot (Kimi)',\n authType: 'api',\n npm: '@ai-sdk/openai-compatible',\n defaultBaseUrl: 'https://api.moonshot.cn/v1',\n signupUrl: 'https://platform.moonshot.cn',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'moonshot-global',\n name: 'Moonshot Global (kimi.ai)',\n authType: 'api',\n npm: '@ai-sdk/openai-compatible',\n defaultBaseUrl: 'https://api.moonshot.ai/v1',\n signupUrl: 'https://platform.kimi.ai',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'kimi-code',\n name: 'Kimi Code (Subscription Required)',\n authType: 'api',\n npm: '@ai-sdk/openai-compatible',\n defaultBaseUrl: 'https://api.kimi.com/coding/v1',\n modelSource: 'static-seed',\n staticModels: [\n { id: 'kimi-for-coding', name: 'Kimi Code K2.7 (Unified)' }\n ],\n supported: true,\n },\n {\n id: 'xai',\n name: 'xAI',\n authType: 'api',\n npm: '@ai-sdk/xai',\n defaultBaseUrl: 'https://api.x.ai/v1',\n signupUrl: 'https://console.x.ai',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'perplexity',\n name: 'Perplexity',\n authType: 'api',\n npm: '@ai-sdk/perplexity',\n defaultBaseUrl: 'https://api.perplexity.ai',\n signupUrl: 'https://www.perplexity.ai/settings/api',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'cohere',\n name: 'Cohere',\n authType: 'api',\n npm: '@ai-sdk/cohere',\n defaultBaseUrl: 'https://api.cohere.com/compatibility/v1',\n signupUrl: 'https://dashboard.cohere.com/api-keys',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'openai',\n name: 'OpenAI',\n authType: 'api',\n npm: '@ai-sdk/openai',\n defaultBaseUrl: 'https://api.openai.com/v1',\n signupUrl: 'https://platform.openai.com/api-keys',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'google',\n name: 'Google Gemini',\n authType: 'api',\n npm: '@ai-sdk/google',\n defaultBaseUrl: 'https://generativelanguage.googleapis.com/v1beta/openai',\n signupUrl: 'https://aistudio.google.com/apikey',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'alibaba',\n name: 'Alibaba DashScope',\n authType: 'api',\n npm: '@ai-sdk/alibaba',\n defaultBaseUrl: 'https://dashscope.aliyuncs.com/compatible-mode/v1',\n signupUrl: 'https://dashscope.console.aliyun.com/apiKey',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'openrouter',\n name: 'OpenRouter',\n authType: 'api',\n npm: '@openrouter/ai-sdk-provider',\n defaultBaseUrl: 'https://openrouter.ai/api/v1',\n signupUrl: 'https://openrouter.ai/keys',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'kilo',\n name: 'Kilo Code',\n authType: 'api',\n npm: '@ai-sdk/openai-compatible',\n defaultBaseUrl: 'https://api.kilo.ai/api/gateway',\n modelsPath: '/models',\n signupUrl: 'https://app.kilo.ai',\n apiKeyOptional: true,\n anonymousFreeModels: true,\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'ollama',\n name: 'Ollama',\n authType: 'api',\n npm: '@ai-sdk/openai-compatible',\n defaultBaseUrl: 'http://127.0.0.1:11434/v1',\n urlPrompt: 'Ollama API Base URL:',\n apiKeyOptional: true,\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'lmstudio',\n name: 'LM Studio',\n authType: 'api',\n npm: '@ai-sdk/openai-compatible',\n defaultBaseUrl: 'http://127.0.0.1:1234/v1',\n urlPrompt: 'LM Studio API Base URL:',\n apiKeyOptional: true,\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'venice',\n name: 'Venice AI',\n authType: 'api',\n npm: 'venice-ai-sdk-provider',\n defaultBaseUrl: 'https://api.venice.ai/api/v1',\n signupUrl: 'https://venice.ai/settings/api',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'anthropic',\n name: 'Anthropic',\n authType: 'api',\n npm: '@ai-sdk/anthropic',\n defaultBaseUrl: 'https://api.anthropic.com',\n signupUrl: 'https://console.anthropic.com/settings/keys',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'bedrock',\n name: 'Amazon Bedrock',\n authType: 'api',\n npm: '@ai-sdk/amazon-bedrock',\n modelSource: 'manual-only',\n supported: false,\n unsupportedReason: 'Requires AWS credentials — use relay-ai providers import from OpenCode for now.',\n },\n {\n id: 'azure',\n name: 'Azure OpenAI',\n authType: 'api',\n npm: '@ai-sdk/azure',\n modelSource: 'manual-only',\n supported: false,\n unsupportedReason: 'Requires Azure deployment URLs — use relay-ai providers import from OpenCode for now.',\n },\n {\n id: 'vertex',\n name: 'Google Vertex AI',\n authType: 'none',\n npm: '@ai-sdk/google-vertex',\n modelSource: 'manual-only',\n supported: false,\n unsupportedReason: 'Uses gcloud Application Default Credentials — not supported via API key import.',\n },\n {\n id: 'opencode-cloud',\n name: 'OpenCode Zen / Go',\n authType: 'api',\n npm: '@ai-sdk/openai-compatible',\n signupUrl: 'https://opencode.ai/auth',\n modelSource: 'zen-go-api',\n supported: true,\n },\n {\n id: 'zen',\n name: 'OpenCode Zen',\n authType: 'api',\n npm: '@ai-sdk/openai-compatible',\n signupUrl: 'https://opencode.ai/auth',\n modelSource: 'zen-go-api',\n supported: true,\n addable: false,\n },\n {\n id: 'go',\n name: 'OpenCode Go',\n authType: 'api',\n npm: '@ai-sdk/openai-compatible',\n signupUrl: 'https://opencode.ai/auth',\n modelSource: 'zen-go-api',\n supported: true,\n addable: false,\n },\n // Subscription OAuth providers — Authorization Code + PKCE (browser redirect)\n // ⚠️ These extract tokens from paid subscriptions. Account risk — see plan docs.\n {\n id: 'claude-code',\n name: 'Claude Code (Anthropic subscription)',\n authType: 'oauth',\n npm: '@ai-sdk/anthropic',\n defaultBaseUrl: 'https://api.anthropic.com',\n signupUrl: 'https://claude.ai',\n modelSource: 'api-list',\n supported: true,\n hidden: true,\n subscriptionRisk: true,\n },\n {\n id: 'antigravity',\n name: 'Antigravity (Google Cloud Code Assist)',\n authType: 'oauth',\n npm: '@ai-sdk/openai-compatible',\n signupUrl: 'https://antigravity.google',\n modelSource: 'api-list',\n supported: true,\n hidden: true,\n subscriptionRisk: true,\n },\n // OAuth-gated subscription providers — device code or broker sign-in\n {\n id: 'xai-oauth',\n name: 'xAI Grok (SuperGrok)',\n authType: 'oauth',\n npm: '@ai-sdk/xai',\n signupUrl: 'https://x.ai',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'openai-oauth',\n name: 'OpenAI (ChatGPT)',\n authType: 'oauth',\n npm: '@ai-sdk/openai',\n signupUrl: 'https://chatgpt.com',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'github-copilot',\n name: 'GitHub Copilot',\n authType: 'oauth',\n npm: '@ai-sdk/openai-compatible',\n defaultBaseUrl: 'https://api.githubcopilot.com',\n modelsPath: '/models',\n signupUrl: 'https://github.com/features/copilot',\n modelSource: 'api-list',\n headers: { 'Editor-Version': 'vscode/1.85.1' },\n supported: true,\n },\n];\n\nexport function listSupportedTemplates(): ProviderTemplate[] {\n return PROVIDER_TEMPLATES\n .filter(t => t.supported && t.authType === 'api' && t.addable !== false && !t.hidden)\n .sort((a, b) => a.name.localeCompare(b.name));\n}\n\n/** Supported templates not yet present in the user's registry. */\nexport function listAddableTemplates(configuredIds: Iterable<string> = []): ProviderTemplate[] {\n const configured = new Set(configuredIds);\n return listSupportedTemplates().filter(t => {\n if (t.id === 'opencode-cloud') {\n return !configured.has('zen') && !configured.has('go');\n }\n return !configured.has(t.id);\n });\n}\n\nexport function listVisibleOAuthTemplates(configuredIds: Iterable<string> = []): ProviderTemplate[] {\n const configured = new Set(configuredIds);\n return PROVIDER_TEMPLATES\n .filter(t => t.authType === 'oauth' && t.supported && t.addable !== false && !t.hidden && !configured.has(t.id))\n .sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport function getTemplateById(id: string): ProviderTemplate | undefined {\n return PROVIDER_TEMPLATES.find(t => t.id === id);\n}\n\nexport function filterTemplates(templates: ProviderTemplate[], query: string): ProviderTemplate[] {\n const q = query.trim().toLowerCase();\n if (!q) return templates;\n return templates.filter(\n t =>\n t.id.toLowerCase().includes(q) ||\n t.name.toLowerCase().includes(q) ||\n t.npm.toLowerCase().includes(q),\n );\n}\n"],"mappings":"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","names":[]}