mirror of
https://github.com/Nezumi-2711/9router.git
synced 2026-09-22 13:38:31 +00:00
merge(master): sync master into dev
This commit is contained in:
@@ -71,7 +71,11 @@ export function capabilitiesFromServiceKind(kind) {
|
||||
* otherwise mis-match. Only declare deltas vs DEFAULT.
|
||||
*/
|
||||
export const MODEL_CAPABILITIES = {
|
||||
// Claude 4.6/4.7/4.8 and Kiro Sonnet 5 have 1M context + adaptive thinking (override generic claude pattern)
|
||||
// Claude Opus 5, 4.6/4.7/4.8, and Kiro Sonnet 5 have 1M context + adaptive thinking (override generic claude pattern)
|
||||
"claude-opus-5": { vision: true, reasoning: true, search: true, thinkingFormat: "claude-adaptive", contextWindow: 1000000, maxOutput: 128000 },
|
||||
"claude-opus-5-thinking": { vision: true, reasoning: true, search: true, thinkingFormat: "claude-adaptive", contextWindow: 1000000, maxOutput: 128000 },
|
||||
"claude-opus-5-agentic": { vision: true, reasoning: true, search: true, thinkingFormat: "claude-adaptive", contextWindow: 1000000, maxOutput: 128000 },
|
||||
"claude-opus-5-thinking-agentic": { vision: true, reasoning: true, search: true, thinkingFormat: "claude-adaptive", contextWindow: 1000000, maxOutput: 128000 },
|
||||
"claude-opus-4.6": { vision: true, reasoning: true, search: true, thinkingFormat: "claude-adaptive", contextWindow: 1000000, maxOutput: 128000 },
|
||||
"claude-opus-4.7": { vision: true, reasoning: true, search: true, thinkingFormat: "claude-adaptive", contextWindow: 1000000, maxOutput: 128000 },
|
||||
"claude-opus-4-7": { vision: true, reasoning: true, search: true, thinkingFormat: "claude-adaptive", contextWindow: 1000000, maxOutput: 128000 },
|
||||
@@ -170,6 +174,11 @@ export const PROVIDER_CAPABILITIES = {
|
||||
"deepseek-v4-flash": { vision: true, reasoning: true, thinkingFormat: "openai", thinkingCanDisable: false, contextWindow: 1000000, maxOutput: 50000 },
|
||||
"deepseek-v3-2-volc": { reasoning: true, thinkingFormat: "openai", thinkingCanDisable: false, contextWindow: 96000, maxOutput: 32000 },
|
||||
},
|
||||
// Poolside Laguna — OpenAI-compatible, all reasoning-capable (32K max output).
|
||||
"poolside": {
|
||||
"laguna-s-2.1": { reasoning: true, thinkingFormat: "openai", contextWindow: 1000000, maxOutput: 32000 },
|
||||
"laguna-xs-2.1": { reasoning: true, thinkingFormat: "openai", contextWindow: 200000, maxOutput: 32000 },
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -180,6 +189,7 @@ export const PROVIDER_CAPABILITIES = {
|
||||
*/
|
||||
export const PATTERN_CAPABILITIES = [
|
||||
// ── Claude (4.6+ = adaptive thinking; older/haiku = budget) ──────
|
||||
{ pattern: "*claude*opus-5*", caps: { vision: true, reasoning: true, search: true, thinkingFormat: "claude-adaptive", contextWindow: 1000000, maxOutput: 128000 } },
|
||||
{ pattern: "*claude*opus-4.6*", caps: { vision: true, reasoning: true, search: true, thinkingFormat: "claude-adaptive" } },
|
||||
{ pattern: "*claude*opus-4.7*", caps: { vision: true, reasoning: true, search: true, thinkingFormat: "claude-adaptive" } },
|
||||
{ pattern: "*claude*opus-4.8*", caps: { vision: true, reasoning: true, search: true, thinkingFormat: "claude-adaptive" } },
|
||||
@@ -291,6 +301,13 @@ export const PATTERN_CAPABILITIES = [
|
||||
{ pattern: "*pplx*", caps: { search: true, contextWindow: 128000 } },
|
||||
{ pattern: "*perplexity*", caps: { search: true, contextWindow: 128000 } },
|
||||
|
||||
// ── Poolside Laguna (resellers: openrouter/nvidia/kilocode/vercel/...) ──
|
||||
// Free tiers cap S 2.1 well below the paid 1M window → match the free suffix
|
||||
// (":free" or "-free", depending on reseller) before the plain id.
|
||||
{ pattern: "*laguna-s-2.1*free*", caps: { reasoning: true, thinkingFormat: "openai", contextWindow: 200000, maxOutput: 32000 } },
|
||||
{ pattern: "*laguna-s-2.1*", caps: { reasoning: true, thinkingFormat: "openai", contextWindow: 1000000, maxOutput: 32000 } },
|
||||
{ pattern: "*laguna*", caps: { reasoning: true, thinkingFormat: "openai", contextWindow: 200000, maxOutput: 32000 } },
|
||||
|
||||
// ── Others ───────────────────────────────────────────────────────
|
||||
{ pattern: "*hunyuan*", caps: { reasoning: true, thinkingFormat: "hunyuan", contextWindow: 262144, maxOutput: 262144 } },
|
||||
{ pattern: "hy3*", caps: { reasoning: true, thinkingFormat: "hunyuan", contextWindow: 262144, maxOutput: 262144 } },
|
||||
|
||||
@@ -57,7 +57,13 @@ export const MODEL_PRICING = {
|
||||
"o1-mini": { input: 3.00, output: 12.00, cached: 1.50, reasoning: 18.00, cache_creation: 3.00 },
|
||||
|
||||
// === Gemini ===
|
||||
"gemini-3-flash-preview": { input: 0.50, output: 3.00, cached: 0.03, reasoning: 4.50, cache_creation: 0.50 },
|
||||
"gemini-3.6-flash": { input: 1.50, output: 7.50, cached: 0.15, reasoning: 11.25, cache_creation: 1.875 },
|
||||
"gemini-3.6-flash-high": { input: 1.50, output: 7.50, cached: 0.15, reasoning: 11.25, cache_creation: 1.875 },
|
||||
"gemini-3.6-flash-medium": { input: 1.50, output: 7.50, cached: 0.15, reasoning: 11.25, cache_creation: 1.875 },
|
||||
"gemini-3.6-flash-low": { input: 1.50, output: 7.50, cached: 0.15, reasoning: 11.25, cache_creation: 1.875 },
|
||||
"gemini-3.5-flash-lite": { input: 0.30, output: 2.50, cached: 0.03, reasoning: 3.75, cache_creation: 0.375 },
|
||||
"gemini-3.5-flash-high": { input: 0.50, output: 3.00, cached: 0.03, reasoning: 4.50, cache_creation: 0.50 },
|
||||
"gemini-3-flash-preview": { input: 0.50, output: 3.00, cached: 0.03, reasoning: 4.50, cache_creation: 0.50 },
|
||||
"gemini-3-pro-preview": { input: 2.00, output: 12.00, cached: 0.25, reasoning: 18.00, cache_creation: 2.00 },
|
||||
"gemini-3.1-pro-low": { input: 2.00, output: 12.00, cached: 0.25, reasoning: 18.00, cache_creation: 2.00 },
|
||||
"gemini-3.1-pro-high": { input: 4.00, output: 18.00, cached: 0.50, reasoning: 27.00, cache_creation: 4.00 },
|
||||
|
||||
@@ -36,6 +36,7 @@ export default {
|
||||
},
|
||||
},
|
||||
usage: {
|
||||
// Discovery (quota/project) on PROD; daily host rejects these.
|
||||
quotaApiUrl: "https://cloudcode-pa.googleapis.com/v1internal:fetchAvailableModels",
|
||||
loadProjectApiUrl: "https://cloudcode-pa.googleapis.com/v1internal:loadCodeAssist",
|
||||
tokenUrl: "https://oauth2.googleapis.com/token",
|
||||
@@ -44,6 +45,10 @@ export default {
|
||||
clientSecret: "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",
|
||||
},
|
||||
models: [
|
||||
{ id: "gemini-3.6-flash-high", name: "Gemini 3.6 Flash (High)", upstreamModelId: "gemini-3.6-flash-tiered(high)" },
|
||||
{ id: "gemini-3.6-flash-medium", name: "Gemini 3.6 Flash (Medium)", upstreamModelId: "gemini-3.6-flash-tiered(medium)" },
|
||||
{ id: "gemini-3.6-flash-low", name: "Gemini 3.6 Flash (Low)", upstreamModelId: "gemini-3.6-flash-tiered(low)" },
|
||||
{ id: "gemini-3.5-flash-high", name: "Gemini 3.5 Flash (High)" },
|
||||
{ id: "gemini-3-flash-agent", name: "Gemini 3.5 Flash (High)" },
|
||||
{ id: "gemini-3.5-flash-low", name: "Gemini 3.5 Flash (Medium)" },
|
||||
{ id: "gemini-3.5-flash-extra-low", name: "Gemini 3.5 Flash (Low)" },
|
||||
@@ -67,7 +72,7 @@ export default {
|
||||
"https://www.googleapis.com/auth/cclog",
|
||||
"https://www.googleapis.com/auth/experimentsandconfigs",
|
||||
],
|
||||
apiEndpoint: "https://cloudcode-pa.googleapis.com",
|
||||
apiEndpoint: "https://daily-cloudcode-pa.googleapis.com",
|
||||
apiVersion: "v1internal",
|
||||
loadCodeAssistEndpoint: "https://cloudcode-pa.googleapis.com/v1internal:loadCodeAssist",
|
||||
onboardUserEndpoint: "https://cloudcode-pa.googleapis.com/v1internal:onboardUser",
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
export default {
|
||||
id: "api-airforce",
|
||||
alias: "af",
|
||||
aliases: [
|
||||
"airforce",
|
||||
],
|
||||
uiAlias: "af",
|
||||
display: {
|
||||
name: "API.airforce",
|
||||
icon: "flight",
|
||||
color: "#0EA5E9",
|
||||
textIcon: "AF",
|
||||
website: "https://api.airforce",
|
||||
notice: {
|
||||
apiKeyUrl: "https://api.airforce",
|
||||
},
|
||||
},
|
||||
category: "freeTier",
|
||||
authType: "apikey",
|
||||
authModes: [
|
||||
"apikey",
|
||||
],
|
||||
transport: {
|
||||
baseUrl: "https://api.airforce/v1/chat/completions",
|
||||
validateUrl: "https://api.airforce/v1/models",
|
||||
headers: {
|
||||
"HTTP-Referer": "https://endpoint-proxy.local",
|
||||
"X-Title": "Endpoint Proxy",
|
||||
},
|
||||
},
|
||||
models: [
|
||||
{ id: "anthropic/claude-3.7-sonnet", name: "Claude 3.7 Sonnet (Free)", contextLength: 200000 },
|
||||
{ id: "moonshot/kimi-k2.6", name: "Kimi K2.6 (Free)", contextLength: 262144 },
|
||||
{ id: "google/gemini-2.5-flash", name: "Gemini 2.5 Flash (Free)", contextLength: 1048576 },
|
||||
],
|
||||
};
|
||||
@@ -0,0 +1,33 @@
|
||||
export default {
|
||||
id: "baidu",
|
||||
alias: "qianfan",
|
||||
aliases: ["qianfan", "ernie", "baidu-qianfan"],
|
||||
uiAlias: "qianfan",
|
||||
category: "apikey",
|
||||
authType: "apikey",
|
||||
authModes: ["apikey"],
|
||||
display: {
|
||||
name: "Baidu Qianfan",
|
||||
icon: "search",
|
||||
color: "#2932E1",
|
||||
textIcon: "BD",
|
||||
website: "https://cloud.baidu.com/product/qianfan.html",
|
||||
notice: {
|
||||
apiKeyUrl:
|
||||
"https://console.bce.baidu.com/qianfan/ais/console/applicationConsole/application",
|
||||
},
|
||||
},
|
||||
transport: {
|
||||
baseUrl: "https://qianfan.baidubce.com/v2/chat/completions",
|
||||
validateUrl: "https://qianfan.baidubce.com/v2/models",
|
||||
},
|
||||
models: [
|
||||
{ id: "deepseek-v4-pro", name: "DeepSeek V4 Pro", contextLength: 1048576 },
|
||||
{ id: "deepseek-v4-flash", name: "DeepSeek V4 Flash", contextLength: 1048576 },
|
||||
{ id: "glm-5.2", name: "GLM 5.2", contextLength: 512000 },
|
||||
{ id: "glm-5.1", name: "GLM 5.1", contextLength: 198000 },
|
||||
{ id: "kimi-k2.6", name: "Kimi K2.6", contextLength: 262144 },
|
||||
{ id: "qwen3.5-397b-a17b", name: "Qwen 3.5 397B A17B", contextLength: 262144 },
|
||||
{ id: "qwen3.5-27b", name: "Qwen 3.5 27B", contextLength: 262144 },
|
||||
],
|
||||
};
|
||||
@@ -0,0 +1,47 @@
|
||||
export default {
|
||||
id: "bazaarlink",
|
||||
alias: "bzl",
|
||||
aliases: ["bazaar-link"],
|
||||
uiAlias: "bzl",
|
||||
category: "freeTier",
|
||||
authType: "apikey",
|
||||
authModes: ["apikey"],
|
||||
display: {
|
||||
name: "Bazaarlink",
|
||||
icon: "storefront",
|
||||
color: "#DC2626",
|
||||
textIcon: "BZ",
|
||||
website: "https://bazaarlink.ai",
|
||||
notice: { apiKeyUrl: "https://bazaarlink.ai" },
|
||||
},
|
||||
transport: {
|
||||
baseUrl: "https://bazaarlink.ai/api/v1/chat/completions",
|
||||
validateUrl: "https://bazaarlink.ai/api/v1/models",
|
||||
},
|
||||
models: [
|
||||
{ id: "auto:free", name: "Auto Free (Zero Cost)" },
|
||||
{ id: "claude-opus-4.7", name: "Claude Opus 4.7", contextLength: 1000000 },
|
||||
{ id: "claude-sonnet-4.6", name: "Claude Sonnet 4.6", contextLength: 1000000 },
|
||||
{ id: "claude-haiku-4.5", name: "Claude Haiku 4.5", contextLength: 200000 },
|
||||
{ id: "gpt-5.5", name: "GPT-5.5", contextLength: 1050000 },
|
||||
{ id: "gpt-5.4", name: "GPT-5.4", contextLength: 1050000 },
|
||||
{ id: "gpt-5.4-mini", name: "GPT-5.4 Mini", contextLength: 400000 },
|
||||
{ id: "gpt-5.4-nano", name: "GPT-5.4 Nano", contextLength: 400000 },
|
||||
{ id: "grok-4.3", name: "Grok 4.3", contextLength: 1000000 },
|
||||
{ id: "grok-4.20", name: "Grok 4.20", contextLength: 2000000 },
|
||||
{ id: "gemini-3.1-pro-preview", name: "Gemini 3.1 Pro", contextLength: 1048576 },
|
||||
{ id: "gemini-3-flash-preview", name: "Gemini 3 Flash", contextLength: 1048576 },
|
||||
{ id: "gemini-3.1-flash-lite-preview", name: "Gemini 3.1 Flash Lite", contextLength: 1048576 },
|
||||
{ id: "kimi-k2.6", name: "Kimi K2.6", contextLength: 262144 },
|
||||
{ id: "kimi-k2.5", name: "Kimi K2.5", contextLength: 262144 },
|
||||
{ id: "glm-5.1", name: "GLM 5.1", contextLength: 204800 },
|
||||
{ id: "glm-5", name: "GLM 5", contextLength: 204800 },
|
||||
{ id: "mimo-v2.5-pro", name: "MiMo-V2.5-Pro", contextLength: 1050000 },
|
||||
{ id: "mimo-v2.5", name: "MiMo-V2.5", contextLength: 1050000 },
|
||||
{ id: "minimax-m3", name: "MiniMax M3", contextLength: 1048576 },
|
||||
{ id: "minimax-m2.7", name: "MiniMax M2.7", contextLength: 204800 },
|
||||
{ id: "minimax-m2.5", name: "MiniMax M2.5", contextLength: 204800 },
|
||||
{ id: "qwen3.6-plus", name: "Qwen 3.6 Plus", contextLength: 1000000 },
|
||||
{ id: "nemotron-3-super-120b-a12b", name: "Nemotron 3 Super", contextLength: 1000000 },
|
||||
],
|
||||
};
|
||||
@@ -0,0 +1,38 @@
|
||||
export default {
|
||||
id: "bluesminds",
|
||||
alias: "bm",
|
||||
aliases: ["blue-sminds"],
|
||||
uiAlias: "bm",
|
||||
hidden: true,
|
||||
display: {
|
||||
name: "BluesMinds",
|
||||
icon: "psychology",
|
||||
color: "#2563EB",
|
||||
textIcon: "BM",
|
||||
website: "https://bluesminds.com",
|
||||
notice: { apiKeyUrl: "https://bluesminds.com" },
|
||||
},
|
||||
category: "apikey",
|
||||
authType: "apikey",
|
||||
authModes: ["apikey"],
|
||||
transport: {
|
||||
baseUrl: "https://api.bluesminds.com/v1/chat/completions",
|
||||
validateUrl: "https://api.bluesminds.com/v1/models",
|
||||
},
|
||||
models: [
|
||||
{ id: "gpt-4.1", name: "GPT-4.1", contextLength: 1048576 },
|
||||
{ id: "gpt-4.1-mini", name: "GPT-4.1 Mini", contextLength: 1048576 },
|
||||
{ id: "gpt-4.1-nano", name: "GPT-4.1 Nano", contextLength: 1048576 },
|
||||
{ id: "claude-sonnet-4-5", name: "Claude Sonnet 4.5", contextLength: 200000 },
|
||||
{ id: "claude-haiku-4-5", name: "Claude Haiku 4.5", contextLength: 200000 },
|
||||
{ id: "gemini-2.0-flash", name: "Gemini 2.0 Flash", contextLength: 1048576 },
|
||||
{ id: "gemini-2.0-flash-exp", name: "Gemini 2.0 Flash (Exp)", contextLength: 1048576 },
|
||||
{ id: "qwen-turbo", name: "Qwen Turbo", contextLength: 1000000 },
|
||||
{ id: "kimi-k2", name: "Kimi K2", contextLength: 262144 },
|
||||
{ id: "kimi-k2-thinking", name: "Kimi K2 Thinking", contextLength: 262144 },
|
||||
{ id: "glm-4.7", name: "GLM 4.7", contextLength: 204800 },
|
||||
{ id: "minimax-m2.5", name: "MiniMax M2.5", contextLength: 204800 },
|
||||
{ id: "claude-opus-4-5", name: "Claude Opus 4.5 (VIP)", contextLength: 200000 },
|
||||
{ id: "gemini-2.5-pro", name: "Gemini 2.5 Pro (VIP)", contextLength: 1048576 },
|
||||
],
|
||||
};
|
||||
@@ -60,10 +60,9 @@ export default {
|
||||
},
|
||||
},
|
||||
models: [
|
||||
{ id: "claude-opus-5", name: "Claude Opus 5" },
|
||||
{ id: "claude-fable-5", name: "Claude Fable 5" },
|
||||
{ id: "claude-sonnet-5", name: "Claude Sonnet 5" },
|
||||
{ id: "claude-opus-4-8", name: "Claude Opus 4.8" },
|
||||
{ id: "claude-opus-4-7", name: "Claude Opus 4.7" },
|
||||
{ id: "claude-haiku-4-5-20251001", name: "Claude 4.5 Haiku" },
|
||||
],
|
||||
oauth: {
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
// CodeBuddy international (codebuddy.ai) — mirrors codebuddy-cn registry shape,
|
||||
// swapping the Tencent CN domain for the .ai endpoint set. All OAuth/plugin URLs
|
||||
// use the /v2/plugin prefix with platform=ide (CN uses platform=CLI).
|
||||
export default {
|
||||
id: "codebuddy-intl",
|
||||
alias: "cbai",
|
||||
uiAlias: "cbai",
|
||||
hidden: false,
|
||||
priority: 90,
|
||||
display: {
|
||||
name: "CodeBuddy",
|
||||
icon: "smart_toy",
|
||||
color: "#006EFF",
|
||||
website: "https://www.codebuddy.ai",
|
||||
notice: {
|
||||
signupUrl: "https://www.codebuddy.ai",
|
||||
},
|
||||
},
|
||||
category: "oauth",
|
||||
authModes: ["oauth", "apikey"],
|
||||
hasOAuth: true,
|
||||
transport: {
|
||||
// Chat gateway is OpenAI-compatible SSE (same /v2/chat/completions path as CN).
|
||||
baseUrl: "https://www.codebuddy.ai/v2/chat/completions",
|
||||
forceStream: true,
|
||||
// CodeBuddy intl speaks the same unified OpenAI reasoning_effort shape as CN.
|
||||
thinkingFormat: "openai",
|
||||
headers: {
|
||||
"User-Agent": "IDE/2.108.1 CodeBuddy/2.108.1",
|
||||
"X-Product": "SaaS",
|
||||
"X-IDE-Type": "IDE",
|
||||
"X-IDE-Name": "IDE",
|
||||
"x-requested-with": "XMLHttpRequest",
|
||||
"x-codebuddy-request": "1",
|
||||
},
|
||||
auth: {
|
||||
combined: true,
|
||||
header: "Authorization",
|
||||
scheme: "bearer",
|
||||
},
|
||||
},
|
||||
// Same model lineup exposed by the CN gateway — intl backend is the same catalog.
|
||||
models: [
|
||||
{ id: "glm-5.2", name: "GLM-5.2" },
|
||||
{ id: "glm-5.1", name: "GLM-5.1" },
|
||||
{ id: "glm-5.0", name: "GLM-5.0" },
|
||||
{ id: "glm-5.0-turbo", name: "GLM-5.0-Turbo" },
|
||||
{ id: "glm-5v-turbo", name: "GLM-5v-Turbo" },
|
||||
{ id: "glm-4.7", name: "GLM-4.7" },
|
||||
{ id: "minimax-m3", name: "MiniMax-M3" },
|
||||
{ id: "minimax-m2.7", name: "MiniMax-M2.7" },
|
||||
{ id: "kimi-k2.7", name: "Kimi-K2.7-Code" },
|
||||
{ id: "kimi-k2.6", name: "Kimi-K2.6" },
|
||||
{ id: "kimi-k2.5", name: "Kimi-K2.5" },
|
||||
{ id: "hy3-preview", name: "Hy3 Preview" },
|
||||
{ id: "deepseek-v4-pro", name: "DeepSeek-V4-Pro" },
|
||||
{ id: "deepseek-v4-flash", name: "DeepSeek-V4-Flash" },
|
||||
{ id: "deepseek-v3-2-volc", name: "DeepSeek-V3.2" },
|
||||
],
|
||||
oauth: {
|
||||
baseUrl: "https://www.codebuddy.ai",
|
||||
stateUrl: "https://www.codebuddy.ai/v2/plugin/auth/state",
|
||||
tokenUrl: "https://www.codebuddy.ai/v2/plugin/auth/token",
|
||||
refreshUrl: "https://www.codebuddy.ai/v2/plugin/auth/token/refresh",
|
||||
userAgent: "IDE/2.63.2 CodeBuddy/2.63.2",
|
||||
platform: "ide",
|
||||
pollInterval: 5000,
|
||||
},
|
||||
features: {
|
||||
usage: true,
|
||||
usageApikey: true,
|
||||
},
|
||||
};
|
||||
@@ -48,4 +48,8 @@ export default {
|
||||
{ id: "deepseek-chat", name: "DeepSeek V3.2 Chat" },
|
||||
{ id: "deepseek-reasoner", name: "DeepSeek V3.2 Reasoner" },
|
||||
],
|
||||
features: {
|
||||
usage: true,
|
||||
usageApikey: true,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
export default {
|
||||
id: "devin-cli",
|
||||
alias: "dv",
|
||||
aliases: ["devin"],
|
||||
uiAlias: "dv",
|
||||
hidden: true,
|
||||
display: {
|
||||
name: "Devin CLI",
|
||||
icon: "smart_toy",
|
||||
color: "#6366F1",
|
||||
textIcon: "DV",
|
||||
website: "https://devin.ai",
|
||||
notice: {
|
||||
signupUrl: "https://cli.devin.ai",
|
||||
text: "Install: `curl -fsSL https://cli.devin.ai/install.sh | bash` (macOS: `brew install --cask devin-cli`, Windows PowerShell: `irm https://static.devin.ai/cli/setup.ps1 | iex`). Then run `devin auth login`. No API key needed.",
|
||||
},
|
||||
},
|
||||
category: "free",
|
||||
authType: "none",
|
||||
noAuth: true,
|
||||
authModes: ["none"],
|
||||
transport: {
|
||||
baseUrl: "devin://acp/stdio",
|
||||
format: "openai",
|
||||
},
|
||||
models: [
|
||||
{ id: "swe-1.6-fast", name: "SWE-1.6 Fast" },
|
||||
{ id: "swe-1.6", name: "SWE-1.6" },
|
||||
{ id: "swe-1.5-fast", name: "SWE-1.5 Fast" },
|
||||
{ id: "swe-1.5", name: "SWE-1.5" },
|
||||
{ id: "claude-opus-4.7-max", name: "Claude Opus 4.7 Max", contextLength: 200000 },
|
||||
{ id: "claude-opus-4.7-high", name: "Claude Opus 4.7 High", contextLength: 200000 },
|
||||
{ id: "claude-opus-4.7-medium", name: "Claude Opus 4.7 Medium", contextLength: 200000 },
|
||||
{ id: "claude-opus-4.7-low", name: "Claude Opus 4.7 Low", contextLength: 200000 },
|
||||
{ id: "claude-sonnet-4.6-thinking-1m", name: "Claude Sonnet 4.6 Thinking 1M", contextLength: 1000000 },
|
||||
{ id: "claude-sonnet-4.6-thinking", name: "Claude Sonnet 4.6 Thinking", contextLength: 200000 },
|
||||
{ id: "claude-sonnet-4.6", name: "Claude Sonnet 4.6", contextLength: 200000 },
|
||||
{ id: "claude-opus-4.6-thinking", name: "Claude Opus 4.6 Thinking", contextLength: 200000 },
|
||||
{ id: "claude-opus-4.6", name: "Claude Opus 4.6", contextLength: 200000 },
|
||||
{ id: "claude-sonnet-4.5", name: "Claude Sonnet 4.5", contextLength: 200000 },
|
||||
{ id: "claude-haiku-4.5", name: "Claude Haiku 4.5", contextLength: 200000 },
|
||||
{ id: "gpt-5.5-xhigh", name: "GPT-5.5 XHigh", contextLength: 200000 },
|
||||
{ id: "gpt-5.5-high", name: "GPT-5.5 High", contextLength: 200000 },
|
||||
{ id: "gpt-5.5-medium", name: "GPT-5.5 Medium", contextLength: 200000 },
|
||||
{ id: "gpt-5.5-low", name: "GPT-5.5 Low", contextLength: 200000 },
|
||||
{ id: "gpt-5.4-high", name: "GPT-5.4 High", contextLength: 200000 },
|
||||
{ id: "gpt-5.4-medium", name: "GPT-5.4 Medium", contextLength: 200000 },
|
||||
{ id: "gpt-5.4-low", name: "GPT-5.4 Low", contextLength: 200000 },
|
||||
{ id: "gpt-5.3-codex-high", name: "GPT-5.3 Codex High", contextLength: 200000 },
|
||||
{ id: "gpt-5.3-codex-medium", name: "GPT-5.3 Codex Medium", contextLength: 200000 },
|
||||
{ id: "gpt-5.3-codex-low", name: "GPT-5.3 Codex Low", contextLength: 200000 },
|
||||
{ id: "gpt-5.2-high", name: "GPT-5.2 High", contextLength: 200000 },
|
||||
{ id: "gpt-5.2-medium", name: "GPT-5.2 Medium", contextLength: 200000 },
|
||||
{ id: "gpt-5.2-low", name: "GPT-5.2 Low", contextLength: 200000 },
|
||||
{ id: "gemini-3.1-pro-high", name: "Gemini 3.1 Pro High", contextLength: 1000000 },
|
||||
{ id: "gemini-3.1-pro-low", name: "Gemini 3.1 Pro Low", contextLength: 1000000 },
|
||||
{ id: "gemini-3.0-flash-high", name: "Gemini 3 Flash High", contextLength: 1000000 },
|
||||
{ id: "gemini-2.5-pro", name: "Gemini 2.5 Pro", contextLength: 1000000 },
|
||||
{ id: "deepseek-v4", name: "DeepSeek V4", contextLength: 1048576 },
|
||||
{ id: "kimi-k2.6", name: "Kimi K2.6", contextLength: 262144 },
|
||||
{ id: "glm-5.1", name: "GLM-5.1", contextLength: 204800 },
|
||||
],
|
||||
};
|
||||
@@ -16,6 +16,8 @@ export default {
|
||||
},
|
||||
},
|
||||
category: "freeTier",
|
||||
authType: "apikey",
|
||||
authModes: ["apikey"],
|
||||
mediaPriority: 1,
|
||||
transport: {
|
||||
baseUrl: "https://generativelanguage.googleapis.com/v1beta/models",
|
||||
@@ -34,6 +36,8 @@ export default {
|
||||
},
|
||||
},
|
||||
models: [
|
||||
{ id: "gemini-3.6-flash", name: "Gemini 3.6 Flash" },
|
||||
{ id: "gemini-3.5-flash-lite", name: "Gemini 3.5 Flash Lite" },
|
||||
{ id: "gemini-3.1-pro-preview", name: "Gemini 3.1 Pro Preview" },
|
||||
{ id: "gemini-3.1-flash-lite-preview", name: "Gemini 3.1 Flash Lite Preview" },
|
||||
{ id: "gemini-3-flash-preview", name: "Gemini 3 Flash Preview" },
|
||||
|
||||
@@ -1,106 +1,121 @@
|
||||
// Auto-generated: static imports for all registry entries
|
||||
import p0 from "./alicode-intl.js";
|
||||
import p1 from "./alicode.js";
|
||||
import p2 from "./anthropic.js";
|
||||
import p3 from "./antigravity.js";
|
||||
import p4 from "./assemblyai.js";
|
||||
import p5 from "./aws-polly.js";
|
||||
import p6 from "./azure.js";
|
||||
import p7 from "./black-forest-labs.js";
|
||||
import p8 from "./blackbox.js";
|
||||
import p9 from "./brave-search.js";
|
||||
import p10 from "./byteplus.js";
|
||||
import p11 from "./cartesia.js";
|
||||
import p12 from "./cerebras.js";
|
||||
import p13 from "./chutes.js";
|
||||
import p14 from "./claude.js";
|
||||
import p15 from "./cline.js";
|
||||
import p16 from "./clinepass.js";
|
||||
import p17 from "./cloudflare-ai.js";
|
||||
import p18 from "./codebuddy-cn.js";
|
||||
import p19 from "./codex.js";
|
||||
import p20 from "./cohere.js";
|
||||
import p21 from "./comfyui.js";
|
||||
import p22 from "./commandcode.js";
|
||||
import p23 from "./coqui.js";
|
||||
import p24 from "./cursor.js";
|
||||
import p25 from "./deepgram.js";
|
||||
import p26 from "./deepseek.js";
|
||||
import p27 from "./edge-tts.js";
|
||||
import p28 from "./elevenlabs.js";
|
||||
import p29 from "./exa.js";
|
||||
import p30 from "./fal-ai.js";
|
||||
import p31 from "./featherless.js";
|
||||
import p32 from "./firecrawl.js";
|
||||
import p33 from "./fireworks.js";
|
||||
import p34 from "./gemini-cli.js";
|
||||
import p35 from "./gemini.js";
|
||||
import p36 from "./github.js";
|
||||
import p37 from "./gitlab.js";
|
||||
import p38 from "./glm-cn.js";
|
||||
import p39 from "./glm.js";
|
||||
import p40 from "./google-pse.js";
|
||||
import p41 from "./google-tts.js";
|
||||
import p42 from "./grok-cli.js";
|
||||
import p43 from "./grok-web.js";
|
||||
import p44 from "./groq.js";
|
||||
import p45 from "./huggingface.js";
|
||||
import p46 from "./hyperbolic.js";
|
||||
import p47 from "./iflow.js";
|
||||
import p48 from "./inworld.js";
|
||||
import p49 from "./jina-ai.js";
|
||||
import p50 from "./jina-reader.js";
|
||||
import p51 from "./kilocode.js";
|
||||
import p52 from "./kimchi.js";
|
||||
import p53 from "./kimi.js";
|
||||
import p54 from "./kiro.js";
|
||||
import p55 from "./linkup.js";
|
||||
import p56 from "./local-device.js";
|
||||
import p57 from "./mimo-free.js";
|
||||
import p58 from "./minimax-cn.js";
|
||||
import p59 from "./minimax.js";
|
||||
import p60 from "./mistral.js";
|
||||
import p61 from "./mmf.js";
|
||||
import p62 from "./nanobanana.js";
|
||||
import p63 from "./nebius.js";
|
||||
import p64 from "./nvidia.js";
|
||||
import p65 from "./ollama-local.js";
|
||||
import p66 from "./ollama.js";
|
||||
import p67 from "./openai.js";
|
||||
import p68 from "./opencode-go.js";
|
||||
import p69 from "./opencode.js";
|
||||
import p70 from "./openrouter.js";
|
||||
import p71 from "./perplexity-web.js";
|
||||
import p72 from "./perplexity.js";
|
||||
import p73 from "./perplexity-agent.js";
|
||||
import p74 from "./playht.js";
|
||||
import p75 from "./qoder.js";
|
||||
import p76 from "./qwen.js";
|
||||
import p77 from "./recraft.js";
|
||||
import p78 from "./runwayml.js";
|
||||
import p79 from "./sdwebui.js";
|
||||
import p80 from "./searchapi.js";
|
||||
import p81 from "./searxng.js";
|
||||
import p82 from "./serper.js";
|
||||
import p83 from "./siliconflow.js";
|
||||
import p84 from "./stability-ai.js";
|
||||
import p85 from "./tavily.js";
|
||||
import p86 from "./together.js";
|
||||
import p87 from "./topaz.js";
|
||||
import p88 from "./tortoise.js";
|
||||
import p89 from "./venice.js";
|
||||
import p90 from "./vercel-ai-gateway.js";
|
||||
import p91 from "./vertex-partner.js";
|
||||
import p92 from "./vertex.js";
|
||||
import p93 from "./volcengine-ark.js";
|
||||
import p94 from "./voyage-ai.js";
|
||||
import p95 from "./xai.js";
|
||||
import p96 from "./xiaomi-mimo.js";
|
||||
import p97 from "./xiaomi-tokenplan.js";
|
||||
import p98 from "./youcom.js";
|
||||
import p99 from "./alims-intl.js";
|
||||
import p100 from "./orbit-provider.js";
|
||||
// Auto-generated by scripts/generate-provider-registry.mjs. Do not edit manually.
|
||||
import p0 from "./alicode.js";
|
||||
import p1 from "./alicode-intl.js";
|
||||
import p2 from "./alims-intl.js";
|
||||
import p3 from "./anthropic.js";
|
||||
import p4 from "./antigravity.js";
|
||||
import p5 from "./api-airforce.js";
|
||||
import p6 from "./assemblyai.js";
|
||||
import p7 from "./aws-polly.js";
|
||||
import p8 from "./azure.js";
|
||||
import p9 from "./baidu.js";
|
||||
import p10 from "./bazaarlink.js";
|
||||
import p11 from "./black-forest-labs.js";
|
||||
import p12 from "./blackbox.js";
|
||||
import p13 from "./bluesminds.js";
|
||||
import p14 from "./brave-search.js";
|
||||
import p15 from "./byteplus.js";
|
||||
import p16 from "./cartesia.js";
|
||||
import p17 from "./cerebras.js";
|
||||
import p18 from "./chutes.js";
|
||||
import p19 from "./claude.js";
|
||||
import p20 from "./cline.js";
|
||||
import p21 from "./clinepass.js";
|
||||
import p22 from "./cloudflare-ai.js";
|
||||
import p23 from "./codebuddy-cn.js";
|
||||
import p24 from "./codebuddy-intl.js";
|
||||
import p25 from "./codex.js";
|
||||
import p26 from "./cohere.js";
|
||||
import p27 from "./comfyui.js";
|
||||
import p28 from "./commandcode.js";
|
||||
import p29 from "./coqui.js";
|
||||
import p30 from "./cursor.js";
|
||||
import p31 from "./deepgram.js";
|
||||
import p32 from "./deepseek.js";
|
||||
import p33 from "./edge-tts.js";
|
||||
import p34 from "./elevenlabs.js";
|
||||
import p35 from "./exa.js";
|
||||
import p36 from "./fal-ai.js";
|
||||
import p37 from "./featherless.js";
|
||||
import p38 from "./firecrawl.js";
|
||||
import p39 from "./fireworks.js";
|
||||
import p40 from "./gemini.js";
|
||||
import p41 from "./gemini-cli.js";
|
||||
import p42 from "./github.js";
|
||||
import p43 from "./gitlab.js";
|
||||
import p44 from "./glm.js";
|
||||
import p45 from "./glm-cn.js";
|
||||
import p46 from "./google-pse.js";
|
||||
import p47 from "./google-tts.js";
|
||||
import p48 from "./grok-cli.js";
|
||||
import p49 from "./grok-web.js";
|
||||
import p50 from "./groq.js";
|
||||
import p51 from "./huggingface.js";
|
||||
import p52 from "./hyperbolic.js";
|
||||
import p53 from "./iflow.js";
|
||||
import p54 from "./inworld.js";
|
||||
import p55 from "./jina-ai.js";
|
||||
import p56 from "./jina-reader.js";
|
||||
import p57 from "./kilo-gateway.js";
|
||||
import p58 from "./kilocode.js";
|
||||
import p59 from "./kimchi.js";
|
||||
import p60 from "./kimi.js";
|
||||
import p61 from "./kiro.js";
|
||||
import p62 from "./linkup.js";
|
||||
import p63 from "./llm7.js";
|
||||
import p64 from "./local-device.js";
|
||||
import p65 from "./mimo-free.js";
|
||||
import p66 from "./minimax.js";
|
||||
import p67 from "./minimax-cn.js";
|
||||
import p68 from "./mistral.js";
|
||||
import p69 from "./mmf.js";
|
||||
import p70 from "./morph.js";
|
||||
import p71 from "./nanobanana.js";
|
||||
import p72 from "./nebius.js";
|
||||
import p73 from "./nvidia.js";
|
||||
import p74 from "./ollama.js";
|
||||
import p75 from "./ollama-local.js";
|
||||
import p76 from "./openai.js";
|
||||
import p77 from "./opencode.js";
|
||||
import p78 from "./opencode-go.js";
|
||||
import p79 from "./openrouter.js";
|
||||
import p80 from "./orbit-provider.js";
|
||||
import p81 from "./perplexity.js";
|
||||
import p82 from "./perplexity-agent.js";
|
||||
import p83 from "./perplexity-web.js";
|
||||
import p84 from "./playht.js";
|
||||
import p85 from "./poolside.js";
|
||||
import p86 from "./qoder.js";
|
||||
import p87 from "./qwen.js";
|
||||
import p88 from "./recraft.js";
|
||||
import p89 from "./runwayml.js";
|
||||
import p90 from "./sambanova.js";
|
||||
import p91 from "./sdwebui.js";
|
||||
import p92 from "./searchapi.js";
|
||||
import p93 from "./searxng.js";
|
||||
import p94 from "./serper.js";
|
||||
import p95 from "./siliconflow.js";
|
||||
import p96 from "./stability-ai.js";
|
||||
import p97 from "./tavily.js";
|
||||
import p98 from "./tencent.js";
|
||||
import p99 from "./together.js";
|
||||
import p100 from "./topaz.js";
|
||||
import p101 from "./tortoise.js";
|
||||
import p102 from "./venice.js";
|
||||
import p103 from "./vercel-ai-gateway.js";
|
||||
import p104 from "./vertex.js";
|
||||
import p105 from "./vertex-partner.js";
|
||||
import p106 from "./volcengine-ark.js";
|
||||
import p107 from "./voyage-ai.js";
|
||||
import p108 from "./xai.js";
|
||||
import p109 from "./xiaomi-mimo.js";
|
||||
import p110 from "./xiaomi-tokenplan.js";
|
||||
import p111 from "./youcom.js";
|
||||
import p112 from "./zed.js";
|
||||
|
||||
// Hidden: devin-cli — spawns a local agent with shell/filesystem access.
|
||||
// Hidden: trae — SOLO agent currently skips tool-call chunks.
|
||||
// Hidden: windsurf — gRPC integration currently skips tool-call chunks.
|
||||
export default [
|
||||
p0,
|
||||
p1,
|
||||
@@ -203,4 +218,16 @@ export default [
|
||||
p98,
|
||||
p99,
|
||||
p100,
|
||||
p101,
|
||||
p102,
|
||||
p103,
|
||||
p104,
|
||||
p105,
|
||||
p106,
|
||||
p107,
|
||||
p108,
|
||||
p109,
|
||||
p110,
|
||||
p111,
|
||||
p112,
|
||||
];
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
export default {
|
||||
id: "kilo-gateway",
|
||||
alias: "kgw",
|
||||
aliases: [
|
||||
"kilo-gateway",
|
||||
"kilogateway",
|
||||
],
|
||||
uiAlias: "kgw",
|
||||
category: "freeTier",
|
||||
display: {
|
||||
name: "Kilo Gateway",
|
||||
icon: "login",
|
||||
color: "#8B5CF6",
|
||||
textIcon: "KG",
|
||||
website: "https://kilo.ai",
|
||||
notice: {
|
||||
apiKeyUrl: "https://kilo.ai/dashboard?tab=apiKeys",
|
||||
},
|
||||
},
|
||||
authType: "apikey",
|
||||
authModes: ["apikey"],
|
||||
transport: {
|
||||
baseUrl: "https://api.kilo.ai/api/gateway/chat/completions",
|
||||
validateUrl: "https://api.kilo.ai/api/gateway/models",
|
||||
},
|
||||
models: [
|
||||
{ id: "kilo-auto/free", name: "Kilo Auto Free", contextLength: 256000 },
|
||||
{ id: "nvidia/nemotron-3-super-120b-a12b:free", name: "Nemotron 3 Super 120B (Free)", contextLength: 262144 },
|
||||
{ id: "nvidia/nemotron-3-ultra-550b-a55b:free", name: "Nemotron 3 Ultra 550B (Free)", contextLength: 1000000 },
|
||||
{ id: "kwaipilot/kat-coder-pro-v2.5:free", name: "Kat Coder Pro v2.5 (Free)", contextLength: 256000 },
|
||||
{ id: "kilo-auto/frontier", name: "Kilo Auto Frontier", contextLength: 1000000 },
|
||||
{ id: "kilo-auto/balanced", name: "Kilo Auto Balanced", contextLength: 1000000 },
|
||||
],
|
||||
};
|
||||
@@ -13,7 +13,7 @@ export default {
|
||||
signupUrl: "https://app.kimchi.dev",
|
||||
},
|
||||
},
|
||||
category: "oauth",
|
||||
category: "freeTier",
|
||||
authModes: ["oauth"],
|
||||
hasOAuth: true,
|
||||
transport: {
|
||||
|
||||
@@ -85,5 +85,8 @@ export default {
|
||||
},
|
||||
features: {
|
||||
usage: true,
|
||||
// API-key connections also hit /v1/usages (x-api-key) — need usageApikey
|
||||
// so isUsageEligible + /api/usage allow non-oauth authType.
|
||||
usageApikey: true,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -29,7 +29,6 @@ export default {
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
Accept: "application/vnd.amazon.eventstream",
|
||||
"X-Amz-Target": "AmazonCodeWhispererStreamingService.GenerateAssistantResponse",
|
||||
"User-Agent": "AWS-SDK-JS/3.0.0 kiro-ide/1.0.0",
|
||||
"X-Amz-User-Agent": "aws-sdk-js/3.0.0 kiro-ide/1.0.0",
|
||||
},
|
||||
@@ -43,6 +42,10 @@ export default {
|
||||
},
|
||||
models: [
|
||||
// Opus (added per kiro.dev/changelog/models and kiro.dev/docs/models)
|
||||
{ id: "claude-opus-5", name: "Claude Opus 5" },
|
||||
{ id: "claude-opus-5-thinking", name: "Claude Opus 5 (Thinking)" },
|
||||
{ id: "claude-opus-5-agentic", name: "Claude Opus 5 (Agentic)" },
|
||||
{ id: "claude-opus-5-thinking-agentic", name: "Claude Opus 5 (Thinking + Agentic)" },
|
||||
{ id: "claude-opus-4.8", name: "Claude Opus 4.8" },
|
||||
{ id: "claude-opus-4.8-thinking", name: "Claude Opus 4.8 (Thinking)" },
|
||||
{ id: "claude-opus-4.8-agentic", name: "Claude Opus 4.8 (Agentic)" },
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
export default {
|
||||
id: "llm7",
|
||||
alias: "llm7",
|
||||
aliases: [
|
||||
"llm-7",
|
||||
],
|
||||
uiAlias: "llm7",
|
||||
display: {
|
||||
name: "LLM7",
|
||||
icon: "pool",
|
||||
color: "#7C3AED",
|
||||
textIcon: "L7",
|
||||
website: "https://llm7.io",
|
||||
notice: {
|
||||
apiKeyUrl: "https://llm7.io",
|
||||
},
|
||||
},
|
||||
category: "apikey",
|
||||
authType: "apikey",
|
||||
authModes: [
|
||||
"apikey",
|
||||
],
|
||||
transport: {
|
||||
baseUrl: "https://api.llm7.io/v1/chat/completions",
|
||||
validateUrl: "https://api.llm7.io/v1/models",
|
||||
},
|
||||
models: [
|
||||
{ id: "gpt-5.5", name: "GPT-5.5 (LLM7)", contextLength: 1050000 },
|
||||
{ id: "claude-opus-5", name: "Claude Opus 5 (LLM7)", contextLength: 1000000 },
|
||||
{ id: "deepseek-v4-flash", name: "DeepSeek V4 Flash (LLM7)", contextLength: 1000000 },
|
||||
{ id: "grok-4.5", name: "Grok 4.5 (LLM7)", contextLength: 500000 },
|
||||
{ id: "kimi-k3", name: "Kimi K3 (LLM7)", contextLength: 1000000 },
|
||||
],
|
||||
passthroughModels: true,
|
||||
};
|
||||
@@ -1,5 +1,8 @@
|
||||
// Xiaomi ended the free MiMo channel ("MiMo free API service has ended").
|
||||
// Hidden until/unless a replacement (OAuth MiMo Platform) is wired.
|
||||
export default {
|
||||
id: "mimo-free",
|
||||
hidden: true,
|
||||
priority: 50,
|
||||
hasFree: true,
|
||||
alias: "mmf",
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
export default {
|
||||
id: "morph",
|
||||
alias: "morph",
|
||||
aliases: ["morphllm"],
|
||||
uiAlias: "morph",
|
||||
display: {
|
||||
name: "Morph",
|
||||
icon: "change_history",
|
||||
color: "#14B8A6",
|
||||
textIcon: "MP",
|
||||
website: "https://morphllm.com",
|
||||
notice: { apiKeyUrl: "https://morphllm.com" },
|
||||
},
|
||||
category: "apikey",
|
||||
authType: "apikey",
|
||||
authModes: ["apikey"],
|
||||
transport: {
|
||||
baseUrl: "https://api.morphllm.com/v1/chat/completions",
|
||||
validateUrl: "https://api.morphllm.com/v1/models",
|
||||
},
|
||||
models: [
|
||||
{ id: "morph-v3-large", name: "Morph v3 Large" },
|
||||
{ id: "morph-v3-fast", name: "Morph v3 Fast" },
|
||||
{ id: "morph-qwen35-397b", name: "Qwen 3.5 397B (Morph)", contextLength: 262144 },
|
||||
{ id: "morph-minimax27-230b", name: "MiniMax M2.7 (Morph)", contextLength: 200704 },
|
||||
{ id: "morph-qwen36-27b", name: "Qwen 3.6 27B (Morph)", contextLength: 262144 },
|
||||
{ id: "morph-dsv4flash", name: "DeepSeek V4 Flash (Morph)", contextLength: 1048576 },
|
||||
],
|
||||
};
|
||||
@@ -15,6 +15,8 @@ export default {
|
||||
},
|
||||
},
|
||||
category: "freeTier",
|
||||
authType: "apikey",
|
||||
authModes: ["apikey"],
|
||||
transport: {
|
||||
baseUrl: "https://integrate.api.nvidia.com/v1/chat/completions",
|
||||
validateUrl: "https://integrate.api.nvidia.com/v1/models",
|
||||
|
||||
@@ -15,6 +15,8 @@ export default {
|
||||
},
|
||||
},
|
||||
category: "freeTier",
|
||||
authType: "apikey",
|
||||
authModes: ["apikey"],
|
||||
transport: {
|
||||
baseUrl: "https://openrouter.ai/api/v1/chat/completions",
|
||||
thinkingFormat: "openai",
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
export default {
|
||||
id: "poolside",
|
||||
priority: 60,
|
||||
alias: "poolside",
|
||||
aliases: [
|
||||
"ps",
|
||||
],
|
||||
uiAlias: "ps",
|
||||
display: {
|
||||
name: "Poolside",
|
||||
icon: "water_drop",
|
||||
color: "#0EA5E9",
|
||||
textIcon: "PS",
|
||||
website: "https://poolside.ai",
|
||||
notice: {
|
||||
apiKeyUrl: "https://platform.poolside.ai/api-keys",
|
||||
},
|
||||
},
|
||||
category: "freeTier",
|
||||
authType: "apikey",
|
||||
authModes: ["apikey"],
|
||||
transport: {
|
||||
baseUrl: "https://inference.poolside.ai/v1/chat/completions",
|
||||
validateUrl: "https://inference.poolside.ai/v1/models",
|
||||
},
|
||||
models: [
|
||||
{ id: "poolside/laguna-s-2.1", name: "Laguna S 2.1" },
|
||||
{ id: "poolside/laguna-xs-2.1", name: "Laguna XS 2.1" },
|
||||
],
|
||||
};
|
||||
@@ -11,10 +11,11 @@ export default {
|
||||
notice: {
|
||||
signupUrl: "https://qoder.com",
|
||||
},
|
||||
deprecated: true,
|
||||
deprecationNotice: "RISK_NOTICE",
|
||||
},
|
||||
category: "free",
|
||||
category: "oauth",
|
||||
authModes: ["oauth", "apikey"],
|
||||
hasOAuth: true,
|
||||
authHint: "Personal Access Token (pt-...) từ https://qoder.com/account/integrations",
|
||||
transport: {
|
||||
baseUrl: "https://api3.qoder.sh/algo/api/v2/service/pro/sse/agent_chat_generation",
|
||||
headers: {},
|
||||
@@ -25,18 +26,19 @@ export default {
|
||||
},
|
||||
},
|
||||
models: [
|
||||
// { id: "auto", name: "Qoder Auto" },
|
||||
// { id: "ultimate", name: "Qoder Ultimate" },
|
||||
// { id: "performance", name: "Qoder Performance" },
|
||||
// { id: "efficient", name: "Qoder Efficient" },
|
||||
// { id: "lite", name: "Qoder Lite" },
|
||||
// { id: "qmodel", name: "Qwen 3.6 Plus (Qoder)" },
|
||||
{ id: "qmodel_latest", name: "Qoder Qwen 3.7 Max" },
|
||||
// { id: "dmodel", name: "DeepSeek V4 Pro (Qoder)" },
|
||||
// { id: "dfmodel", name: "DeepSeek V4 Flash (Qoder)" },
|
||||
// { id: "gm51model", name: "GLM 5.1 (Qoder)" },
|
||||
// { id: "kmodel", name: "Kimi K2.6 (Qoder)" },
|
||||
// { id: "mmodel", name: "MiniMax M2.7 (Qoder)" },
|
||||
{ id: "ultimate", name: "Ultimate" },
|
||||
{ id: "auto", name: "Auto" },
|
||||
{ id: "performance", name: "Performance" },
|
||||
{ id: "efficient", name: "Efficient" },
|
||||
{ id: "qmodel_preview", name: "Qwen3.8-Max-Preview" },
|
||||
{ id: "qmodel_latest", name: "Qwen3.7-Max" },
|
||||
{ id: "qmodel", name: "Qwen3.7-Plus" },
|
||||
{ id: "kmodel_latest", name: "Kimi-K3" },
|
||||
{ id: "kmodel", name: "Kimi-K2.7-Code" },
|
||||
{ id: "gm51model", name: "GLM-5.2" },
|
||||
{ id: "dmodel", name: "DeepSeek-V4-Pro" },
|
||||
{ id: "dfmodel", name: "DeepSeek-V4-Flash" },
|
||||
{ id: "mmodel", name: "MiniMax-M3" },
|
||||
],
|
||||
oauth: {
|
||||
openApiBaseUrl: "https://openapi.qoder.sh",
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
export default {
|
||||
id: "sambanova",
|
||||
alias: "samba",
|
||||
aliases: ["sambanova-ai"],
|
||||
uiAlias: "samba",
|
||||
hidden: true,
|
||||
display: {
|
||||
name: "SambaNova",
|
||||
icon: "memory",
|
||||
color: "#F97316",
|
||||
textIcon: "SN",
|
||||
website: "https://sambanova.ai",
|
||||
notice: {
|
||||
apiKeyUrl: "https://cloud.sambanova.ai/apis",
|
||||
},
|
||||
},
|
||||
category: "apikey",
|
||||
authType: "apikey",
|
||||
authModes: ["apikey"],
|
||||
transport: {
|
||||
baseUrl: "https://api.sambanova.ai/v1/chat/completions",
|
||||
validateUrl: "https://api.sambanova.ai/v1/models",
|
||||
},
|
||||
models: [
|
||||
{ id: "MiniMax-M2.7", name: "MiniMax M2.7", contextLength: 196608 },
|
||||
],
|
||||
};
|
||||
@@ -0,0 +1,27 @@
|
||||
export default {
|
||||
id: "tencent",
|
||||
alias: "hunyuan",
|
||||
aliases: ["hunyuan", "tencent-hunyuan"],
|
||||
uiAlias: "hunyuan",
|
||||
display: {
|
||||
name: "Tencent Hunyuan",
|
||||
icon: "cloud",
|
||||
color: "#0052D9",
|
||||
textIcon: "HY",
|
||||
website: "https://cloud.tencent.com/product/hunyuan",
|
||||
notice: {
|
||||
apiKeyUrl: "https://console.cloud.tencent.com/hunyuan/api-key",
|
||||
},
|
||||
},
|
||||
category: "apikey",
|
||||
authType: "apikey",
|
||||
authModes: ["apikey"],
|
||||
transport: {
|
||||
baseUrl: "https://api.hunyuan.cloud.tencent.com/v1/chat/completions",
|
||||
validateUrl: "https://api.hunyuan.cloud.tencent.com/v1/models",
|
||||
},
|
||||
models: [
|
||||
{ id: "hunyuan-turbos-latest", name: "Hunyuan TurboS Latest", contextLength: 200000 },
|
||||
{ id: "hunyuan-t1-latest", name: "Hunyuan T1 Latest", contextLength: 256000 },
|
||||
],
|
||||
};
|
||||
@@ -0,0 +1,76 @@
|
||||
// Trae (ByteDance marscode) provider registry entry.
|
||||
// Chat = SOLO remote agent API:
|
||||
// POST {base}/chat_sessions → {data:{chat_session_id, message_id}}
|
||||
// GET {base}/chat_sessions/{id}/events?reply_to_message_id=... → SSE
|
||||
// Auth: Authorization: Cloud-IDE-JWT <jwt>
|
||||
export default {
|
||||
id: "trae",
|
||||
alias: "tr",
|
||||
uiAlias: "tr",
|
||||
aliases: ["marscode"],
|
||||
category: "oauth",
|
||||
authType: "oauth",
|
||||
hasOAuth: true,
|
||||
authModes: ["oauth"],
|
||||
display: {
|
||||
name: "Trae",
|
||||
icon: "bolt",
|
||||
color: "#FF6A00",
|
||||
textIcon: "TR",
|
||||
website: "https://www.trae.ai",
|
||||
notice: { signupUrl: "https://www.trae.ai" },
|
||||
},
|
||||
transport: {
|
||||
// SOLO remote agent base — verified working chat endpoint.
|
||||
baseUrl: "https://core-normal.trae.ai/api/remote/v1",
|
||||
format: "openai",
|
||||
headers: {
|
||||
"X-Trae-Client-Type": "web",
|
||||
"X-Preferenced-Language": "en",
|
||||
"Referer": "https://solo.trae.ai/",
|
||||
},
|
||||
// Auth: Cloud-IDE-JWT scheme on Authorization — injected by executor buildHeaders.
|
||||
auth: {
|
||||
combined: true,
|
||||
header: "Authorization",
|
||||
scheme: "Cloud-IDE-JWT",
|
||||
},
|
||||
usage: {
|
||||
url: "https://api.marscode.com/cloudide/api/v3/trae/GetUserInfo",
|
||||
},
|
||||
regions: {
|
||||
cn: "https://api.marscode.com",
|
||||
sg: "https://api.trae.ai",
|
||||
us: "https://www.trae.ai",
|
||||
},
|
||||
defaultRegion: "cn",
|
||||
},
|
||||
oauth: {
|
||||
clientId: "ono9krqynydwx5",
|
||||
clientSecret: "-",
|
||||
platform: "trae",
|
||||
pollInterval: 1500,
|
||||
// Login guidance returns LoginHost for browser open.
|
||||
loginGuidanceUrl: "https://api.marscode.com/cloudide/api/v3/trae/GetLoginGuidance",
|
||||
// ExchangeToken: refresh -> access (POST JSON, body below).
|
||||
tokenUrl: "https://api.marscode.com/cloudide/api/v3/trae/oauth/ExchangeToken",
|
||||
exchangeTokenUrl: "https://api.marscode.com/cloudide/api/v3/trae/oauth/ExchangeToken",
|
||||
refreshUrl: "https://api.marscode.com/cloudide/api/v3/trae/oauth/ExchangeToken",
|
||||
userInfoUrl: "https://api.marscode.com/cloudide/api/v3/trae/GetUserInfo",
|
||||
// Trae refresh uses custom JSON body, not OAuth form — handled by refresh.js, not config-driven.
|
||||
refresh: { encoding: "json" },
|
||||
},
|
||||
// Model catalog (IDE flow, core-normal.trae.ai).
|
||||
models: [
|
||||
{ id: "auto", name: "Auto (Server Picks)" },
|
||||
{ id: "work", name: "Work (Fast)" },
|
||||
{ id: "gemini-3.1-pro", name: "Gemini 3.1 Pro" },
|
||||
{ id: "gemini-3-flash-solo", name: "Gemini 3 Flash" },
|
||||
{ id: "minimax-m3", name: "MiniMax M3" },
|
||||
{ id: "minimax-m2.7", name: "MiniMax M2.7" },
|
||||
{ id: "kimi-k2.5", name: "Kimi K2.5" },
|
||||
{ id: "gpt-5.4", name: "GPT 5.4" },
|
||||
{ id: "gpt-5.2", name: "GPT 5.2" },
|
||||
],
|
||||
features: { usage: true },
|
||||
};
|
||||
@@ -0,0 +1,143 @@
|
||||
// Windsurf provider registry — Firebase+Codeium+Devin auth chain.
|
||||
// Chat = Codeium gRPC-web protobuf:
|
||||
// POST {base} Content-Type: application/grpc-web+proto
|
||||
// Service: exa.language_server_pb.LanguageServerService / GetChatMessage
|
||||
export default {
|
||||
id: "windsurf",
|
||||
alias: "ws",
|
||||
uiAlias: "ws",
|
||||
display: {
|
||||
name: "Windsurf",
|
||||
icon: "surfing",
|
||||
color: "#14B8A6",
|
||||
website: "https://windsurf.com",
|
||||
notice: { signupUrl: "https://windsurf.com" },
|
||||
},
|
||||
category: "oauth",
|
||||
authType: "oauth",
|
||||
hasOAuth: true,
|
||||
authModes: ["oauth", "apikey"],
|
||||
|
||||
transport: {
|
||||
baseUrl: "https://server.codeium.com/exa.language_server_pb.LanguageServerService/GetChatMessage",
|
||||
format: "openai",
|
||||
headers: {
|
||||
"Content-Type": "application/grpc-web+proto",
|
||||
"Accept": "application/grpc-web+proto",
|
||||
"X-Grpc-Web": "1",
|
||||
},
|
||||
// apiKey (sk-ws-... or Firebase-derived) as Bearer + in protobuf Metadata.api_key.
|
||||
auth: { combined: true, header: "Authorization", scheme: "Bearer" },
|
||||
},
|
||||
|
||||
// Auth chain (4 terminal paths, all yield apiKey):
|
||||
// 1) OAuth web → Firebase JWT → POST register.windsurf.com/.../RegisterUser {firebase_id_token} → {apiKey, apiServerUrl, name}
|
||||
// 2) sk-ws-... direct API key (apiKey used as metadata.apiKey on GetUserStatus)
|
||||
// 3) Firebase JWT (eyJ...) → same RegisterUser exchange as #1
|
||||
// 4) Devin auth1_... → self-serve chain → ide_token used as apiKey on server.self-serve.windsurf.com
|
||||
oauth: {
|
||||
clientId: "3GUryQ7ldAeKEuD2obYnppsnmj58eP5u",
|
||||
firebaseApiKey: "AIzaSyDsOl-1XpT5err0Tcn0TFFod1H8gVGIycY",
|
||||
firebaseSignInUrl: "https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword",
|
||||
registerUrl: "https://register.windsurf.com/exa.seat_management_pb.SeatManagementService/RegisterUser",
|
||||
apiServerUrl: "https://server.codeium.com",
|
||||
auth1ApiServerUrl: "https://server.self-serve.windsurf.com",
|
||||
platform: "windsurf",
|
||||
// Quota (Connect RPC, protobuf): POST windsurf.com/_backend/.../GetPlanStatus,
|
||||
// headers Content-Type:application/proto + Connect-Protocol-Version:1 + X-Auth-Token:<session>,
|
||||
// body = field1:session_token, field2:varint 1.
|
||||
quotaUrl: "https://windsurf.com/_backend/exa.seat_management_pb.SeatManagementService/GetPlanStatus",
|
||||
},
|
||||
|
||||
// Catalog verified against model_configs_v2.bin from Devin CLI (2026.5.x).
|
||||
// Dot-notation ids; the executor MODEL_ALIAS_MAP maps these to Windsurf modelUid.
|
||||
// contextLength dropped — 9router schema uses id+name only.
|
||||
models: [
|
||||
// Cognition / SWE
|
||||
{ id: "swe-1.6-fast", name: "SWE-1.6 Fast" },
|
||||
{ id: "swe-1.6", name: "SWE-1.6" },
|
||||
{ id: "swe-1.5-fast", name: "SWE-1.5 Fast" },
|
||||
{ id: "swe-1.5", name: "SWE-1.5" },
|
||||
// Claude Opus 4.7 — effort-tiered
|
||||
{ id: "claude-opus-4.7-max", name: "Claude Opus 4.7 Max" },
|
||||
{ id: "claude-opus-4.7-xhigh", name: "Claude Opus 4.7 XHigh" },
|
||||
{ id: "claude-opus-4.7-high", name: "Claude Opus 4.7 High" },
|
||||
{ id: "claude-opus-4.7-medium", name: "Claude Opus 4.7 Medium" },
|
||||
{ id: "claude-opus-4.7-low", name: "Claude Opus 4.7 Low" },
|
||||
{ id: "claude-opus-4.7-review", name: "Claude Opus 4.7 Review" },
|
||||
// Claude Sonnet/Opus 4.6
|
||||
{ id: "claude-sonnet-4.6-thinking-1m", name: "Claude Sonnet 4.6 Thinking 1M" },
|
||||
{ id: "claude-sonnet-4.6-1m", name: "Claude Sonnet 4.6 1M" },
|
||||
{ id: "claude-sonnet-4.6-thinking", name: "Claude Sonnet 4.6 Thinking" },
|
||||
{ id: "claude-sonnet-4.6", name: "Claude Sonnet 4.6" },
|
||||
{ id: "claude-opus-4.6-thinking", name: "Claude Opus 4.6 Thinking" },
|
||||
{ id: "claude-opus-4.6", name: "Claude Opus 4.6" },
|
||||
// Claude 4.5
|
||||
{ id: "claude-opus-4.5-thinking", name: "Claude Opus 4.5 Thinking" },
|
||||
{ id: "claude-opus-4.5", name: "Claude Opus 4.5" },
|
||||
{ id: "claude-sonnet-4.5-thinking", name: "Claude Sonnet 4.5 Thinking" },
|
||||
{ id: "claude-sonnet-4.5", name: "Claude Sonnet 4.5" },
|
||||
{ id: "claude-haiku-4.5", name: "Claude Haiku 4.5" },
|
||||
// GPT-5.5 — effort-tiered
|
||||
{ id: "gpt-5.5-xhigh-fast", name: "GPT-5.5 XHigh Fast" },
|
||||
{ id: "gpt-5.5-xhigh", name: "GPT-5.5 XHigh" },
|
||||
{ id: "gpt-5.5-high-fast", name: "GPT-5.5 High Fast" },
|
||||
{ id: "gpt-5.5-high", name: "GPT-5.5 High" },
|
||||
{ id: "gpt-5.5-medium-fast", name: "GPT-5.5 Medium Fast" },
|
||||
{ id: "gpt-5.5-medium", name: "GPT-5.5 Medium" },
|
||||
{ id: "gpt-5.5-low-fast", name: "GPT-5.5 Low Fast" },
|
||||
{ id: "gpt-5.5-low", name: "GPT-5.5 Low" },
|
||||
{ id: "gpt-5.5-none-fast", name: "GPT-5.5 None Fast" },
|
||||
{ id: "gpt-5.5-none", name: "GPT-5.5 None" },
|
||||
// GPT-5.4 — effort-tiered
|
||||
{ id: "gpt-5.4-xhigh-fast", name: "GPT-5.4 XHigh Fast" },
|
||||
{ id: "gpt-5.4-xhigh", name: "GPT-5.4 XHigh" },
|
||||
{ id: "gpt-5.4-high-fast", name: "GPT-5.4 High Fast" },
|
||||
{ id: "gpt-5.4-high", name: "GPT-5.4 High" },
|
||||
{ id: "gpt-5.4-medium-fast", name: "GPT-5.4 Medium Fast" },
|
||||
{ id: "gpt-5.4-medium", name: "GPT-5.4 Medium" },
|
||||
{ id: "gpt-5.4-low-fast", name: "GPT-5.4 Low Fast" },
|
||||
{ id: "gpt-5.4-low", name: "GPT-5.4 Low" },
|
||||
{ id: "gpt-5.4-none-fast", name: "GPT-5.4 None Fast" },
|
||||
{ id: "gpt-5.4-none", name: "GPT-5.4 None" },
|
||||
{ id: "gpt-5.4-mini-xhigh", name: "GPT-5.4 Mini XHigh" },
|
||||
{ id: "gpt-5.4-mini-high", name: "GPT-5.4 Mini High" },
|
||||
{ id: "gpt-5.4-mini-medium", name: "GPT-5.4 Mini Medium" },
|
||||
{ id: "gpt-5.4-mini-low", name: "GPT-5.4 Mini Low" },
|
||||
// GPT-5.3 Codex
|
||||
{ id: "gpt-5.3-codex-xhigh-fast", name: "GPT-5.3 Codex XHigh Fast" },
|
||||
{ id: "gpt-5.3-codex-xhigh", name: "GPT-5.3 Codex XHigh" },
|
||||
{ id: "gpt-5.3-codex-high-fast", name: "GPT-5.3 Codex High Fast" },
|
||||
{ id: "gpt-5.3-codex-high", name: "GPT-5.3 Codex High" },
|
||||
{ id: "gpt-5.3-codex-medium-fast", name: "GPT-5.3 Codex Medium Fast" },
|
||||
{ id: "gpt-5.3-codex-medium", name: "GPT-5.3 Codex Medium" },
|
||||
{ id: "gpt-5.3-codex-low-fast", name: "GPT-5.3 Codex Low Fast" },
|
||||
{ id: "gpt-5.3-codex-low", name: "GPT-5.3 Codex Low" },
|
||||
// GPT-5.2 / 5
|
||||
{ id: "gpt-5.2-xhigh", name: "GPT-5.2 XHigh" },
|
||||
{ id: "gpt-5.2-high", name: "GPT-5.2 High" },
|
||||
{ id: "gpt-5.2-medium", name: "GPT-5.2 Medium" },
|
||||
{ id: "gpt-5.2-low", name: "GPT-5.2 Low" },
|
||||
{ id: "gpt-5.2-none", name: "GPT-5.2 None" },
|
||||
{ id: "gpt-5", name: "GPT-5" },
|
||||
// GPT-4.1 / 4o
|
||||
{ id: "gpt-4.1", name: "GPT-4.1" },
|
||||
{ id: "gpt-4.1-mini", name: "GPT-4.1 Mini" },
|
||||
{ id: "gpt-4.1-nano", name: "GPT-4.1 Nano" },
|
||||
{ id: "gpt-4o", name: "GPT-4o" },
|
||||
{ id: "gpt-4o-mini", name: "GPT-4o Mini" },
|
||||
// Gemini
|
||||
{ id: "gemini-3.1-pro-high", name: "Gemini 3.1 Pro High" },
|
||||
{ id: "gemini-3.1-pro-low", name: "Gemini 3.1 Pro Low" },
|
||||
{ id: "gemini-3.0-flash-high", name: "Gemini 3 Flash High" },
|
||||
{ id: "gemini-3.0-flash-medium", name: "Gemini 3 Flash Medium" },
|
||||
{ id: "gemini-3.0-flash-low", name: "Gemini 3 Flash Low" },
|
||||
{ id: "gemini-3.0-flash-minimal", name: "Gemini 3 Flash Minimal" },
|
||||
{ id: "gemini-2.5-pro", name: "Gemini 2.5 Pro" },
|
||||
// Others
|
||||
{ id: "deepseek-v4", name: "DeepSeek V4" },
|
||||
{ id: "kimi-k2.6", name: "Kimi K2.6" },
|
||||
{ id: "kimi-k2.5", name: "Kimi K2.5" },
|
||||
{ id: "glm-5.1", name: "GLM-5.1" },
|
||||
],
|
||||
};
|
||||
@@ -0,0 +1,71 @@
|
||||
// Zed provider — RSA keypair callback auth (NOT standard OAuth).
|
||||
export default {
|
||||
id: "zed",
|
||||
priority: 10,
|
||||
alias: "zd",
|
||||
uiAlias: "zd",
|
||||
hidden: true,
|
||||
display: {
|
||||
name: "Zed",
|
||||
icon: "code",
|
||||
color: "#A855F7",
|
||||
website: "https://zed.dev",
|
||||
notice: {
|
||||
signupUrl: "https://zed.dev/native_app_signin",
|
||||
},
|
||||
},
|
||||
category: "oauth",
|
||||
authType: "oauth",
|
||||
hasOAuth: true,
|
||||
|
||||
transport: {
|
||||
// Zed hosted LLM aggregator: cloud.zed.dev/completions is a
|
||||
// multi-format proxy fronting Anthropic/OpenAI/Google/xAI depending on the model.
|
||||
// Wire protocol = NDJSON/SSE-ish stream authenticated with a short-lived LLM bearer
|
||||
// token exchanged from the RSA-decrypted access_token (see open-sse/shared/zedAuth).
|
||||
baseUrl: "https://cloud.zed.dev/completions",
|
||||
format: "openai",
|
||||
forceStream: true,
|
||||
headers: {
|
||||
"content-type": "application/json",
|
||||
},
|
||||
// Auth scheme is non-standard: "Authorization: <user_id> <access_token>" plus a duplicate
|
||||
// x-zed-cloud-token header (verified in zed_account.rs build_authorization_header +
|
||||
// cloud fetch). Executor builds both; scheme here is a marker for config-driven tooling.
|
||||
auth: {
|
||||
combined: true,
|
||||
header: "Authorization",
|
||||
scheme: "<user_id> <access_token>", // placeholder — real value built in executor
|
||||
},
|
||||
usage: {
|
||||
url: "https://cloud.zed.dev/client/users/me", // verified in zed_account.rs
|
||||
},
|
||||
// Live catalog discovery — Zed's hosted model list changes frequently and is fetched
|
||||
// per-connection rather than hardcoded.
|
||||
modelsUrl: "https://cloud.zed.dev/models",
|
||||
},
|
||||
|
||||
// Empty static catalog + passthrough: Zed fronts a rotating set of upstream models
|
||||
// (Claude/GPT/Gemini/Grok). Resolved live via modelsUrl; any client-sent model id is
|
||||
// forwarded as-is rather than validated against a frozen list.
|
||||
models: [],
|
||||
passthroughModels: true,
|
||||
|
||||
oauth: {
|
||||
// Zed auth flow is RSA-based, NOT OAuth2/PKCE:
|
||||
// 1. App generates RSA-2048 keypair locally (PKCS#1 DER, URL-safe base64).
|
||||
// 2. Bind random TCP port on 127.0.0.1.
|
||||
// 3. Open https://zed.dev/native_app_signin?native_app_port={port}&native_app_public_key={pub}.
|
||||
// 4. After login, browser redirects http://127.0.0.1:{port}/?user_id=...&access_token=...
|
||||
// where access_token = base64(RSA-encrypted plaintext token).
|
||||
// 5. Decrypt with private key (OAEP-SHA256, fallback PKCS1v15). Store user_id + plaintext token.
|
||||
// No clientId/clientSecret/tokenUrl/refreshUrl — long-lived access_token, no refresh.
|
||||
authorizeUrl: "https://zed.dev/native_app_signin",
|
||||
platform: "zed",
|
||||
rsaKeyExchange: true, // new flag: signals frontend/router this flow needs local RSA + TCP listener.
|
||||
},
|
||||
|
||||
features: {
|
||||
usage: true,
|
||||
},
|
||||
};
|
||||
@@ -58,7 +58,7 @@ export const ANTHROPIC_COMPAT_BASE = "https://api.anthropic.com/v1";
|
||||
// Keep this static even when 9router runs on Linux: the provider profile is
|
||||
// intentionally matching the IDE client, not the server host.
|
||||
export const ANTIGRAVITY_IDE_VERSION = "2.1.1";
|
||||
export const ANTIGRAVITY_IDE_BASE_URL = "https://cloudcode-pa.googleapis.com";
|
||||
export const ANTIGRAVITY_IDE_BASE_URL = "https://daily-cloudcode-pa.googleapis.com";
|
||||
export const ANTIGRAVITY_IDE_USER_AGENT = `antigravity/ide/${ANTIGRAVITY_IDE_VERSION} darwin/arm64`;
|
||||
|
||||
// Antigravity OAuth client credentials (public CLI client — duplicated in usage.js + src/lib/oauth)
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
// Reuses capabilities.js (thinkingFormat/canDisable) so this file only maps format→levels (DRY).
|
||||
import { getCapabilitiesForModel } from "./capabilities.js";
|
||||
import { matchPattern } from "./pricing.js";
|
||||
import { resolveKiroEffortPath } from "../config/kiroConstants.js";
|
||||
|
||||
// Shared level sets (deduped) — verified against provider docs + wire in thinkingUnified.applyFormat.
|
||||
const L = {
|
||||
@@ -39,6 +40,7 @@ const PATTERN_THINKING = [
|
||||
|
||||
// Returns valid thinking levels for a model, or null when the model has no reasoning.
|
||||
export function getThinkingLevels(provider, model) {
|
||||
if (provider === "kiro" && resolveKiroEffortPath(model) === null) return null;
|
||||
const caps = getCapabilitiesForModel(provider, model);
|
||||
if (!caps.reasoning) return null;
|
||||
const hit = PATTERN_THINKING.find((p) => matchPattern(p.pattern, model));
|
||||
|
||||
Reference in New Issue
Block a user