mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-23 15:42:12 +03:00
OpenCode's Zen provider changed its slug from 'opencode-zen' to 'opencode', breaking OmniRoute's provider resolution when users reference models with the new prefix (e.g. 'opencode/deepseek-v4-flash-free'). Changes: 1. open-sse/services/model.ts: Add manual ALIAS_TO_PROVIDER_ID entry mapping 'opencode' → 'opencode-zen' so parseModel() resolves correctly for model strings using the new slug. 2. open-sse/executors/index.ts: Register 'opencode' as an OpencodeExecutor alias for 'opencode-zen' so getExecutor() returns the correct executor. 3. open-sse/config/providerRegistry.ts: Update opencode-zen model list to match the live API at https://opencode.ai/zen/v1/models: - Add deepseek-v4-flash-free (the model users reported as broken) - Add all 30+ models from the API (Claude, GPT, Gemini, Grok, GLM, MiniMax, Kimi, Qwen series) - Apply targetFormat: 'claude' to qwen3.5-plus (same SSE bug as qwen3.6) - Remove ling-2.6-1t-free and trinity-large-preview-free (no longer in API) - Enable passthroughModels so new models work without code deploys 4. @omniroute/opencode-provider/src/index.ts: Remove broken reference to undefined OMNIROUTE_DEFAULT_MODEL_CONTEXT_LENGTHS constant. 5. tests/unit/opencode-executor.test.ts: Add tests for opencode alias, deepseek-v4-flash-free routing, and model registry presence.
140 lines
6.1 KiB
TypeScript
140 lines
6.1 KiB
TypeScript
import { AntigravityExecutor } from "./antigravity.ts";
|
|
import { GeminiCLIExecutor } from "./gemini-cli.ts";
|
|
import { GithubExecutor } from "./github.ts";
|
|
import { QoderExecutor } from "./qoder.ts";
|
|
import { KiroExecutor } from "./kiro.ts";
|
|
import { CodexExecutor } from "./codex.ts";
|
|
import { CursorExecutor } from "./cursor.ts";
|
|
import { DefaultExecutor } from "./default.ts";
|
|
import { GlmExecutor } from "./glm.ts";
|
|
import { PollinationsExecutor } from "./pollinations.ts";
|
|
import { CloudflareAIExecutor } from "./cloudflare-ai.ts";
|
|
import { OpencodeExecutor } from "./opencode.ts";
|
|
import { PuterExecutor } from "./puter.ts";
|
|
import { VertexExecutor } from "./vertex.ts";
|
|
import { CliproxyapiExecutor } from "./cliproxyapi.ts";
|
|
import { PerplexityWebExecutor } from "./perplexity-web.ts";
|
|
import { GrokWebExecutor } from "./grok-web.ts";
|
|
import { GeminiWebExecutor } from "./gemini-web.ts";
|
|
import { ChatGptWebExecutor } from "./chatgpt-web.ts";
|
|
import { BlackboxWebExecutor } from "./blackbox-web.ts";
|
|
import { MuseSparkWebExecutor } from "./muse-spark-web.ts";
|
|
import { AzureOpenAIExecutor } from "./azure-openai.ts";
|
|
import { CommandCodeExecutor } from "./commandCode.ts";
|
|
import { GitlabExecutor } from "./gitlab.ts";
|
|
import { NlpCloudExecutor } from "./nlpcloud.ts";
|
|
import { PetalsExecutor } from "./petals.ts";
|
|
import { WindsurfExecutor } from "./windsurf.ts";
|
|
import { DevinCliExecutor } from "./devin-cli.ts";
|
|
import { DeepSeekWebExecutor } from "./deepseek-web.ts";
|
|
import { DeepSeekWebWithAutoRefreshExecutor } from "./deepseek-web-with-auto-refresh.ts";
|
|
import { CopilotWebExecutor } from "./copilot-web.ts";
|
|
import { VeoAIFreeWebExecutor } from "./veoaifree-web.ts";
|
|
import { T3ChatWebExecutor } from "./t3-chat-web.ts";
|
|
|
|
const executors = {
|
|
antigravity: new AntigravityExecutor(),
|
|
"gemini-cli": new GeminiCLIExecutor(),
|
|
github: new GithubExecutor(),
|
|
qoder: new QoderExecutor(),
|
|
kiro: new KiroExecutor(),
|
|
"amazon-q": new KiroExecutor("amazon-q"),
|
|
codex: new CodexExecutor(),
|
|
cursor: new CursorExecutor(),
|
|
glm: new GlmExecutor("glm"),
|
|
"glm-cn": new GlmExecutor("glm-cn"),
|
|
glmt: new GlmExecutor("glmt"),
|
|
cu: new CursorExecutor(), // Alias for cursor
|
|
"azure-openai": new AzureOpenAIExecutor(),
|
|
"command-code": new CommandCodeExecutor(),
|
|
cmd: new CommandCodeExecutor(), // Alias
|
|
gitlab: new GitlabExecutor(),
|
|
"gitlab-duo": new GitlabExecutor("gitlab-duo"),
|
|
nlpcloud: new NlpCloudExecutor(),
|
|
petals: new PetalsExecutor(),
|
|
pollinations: new PollinationsExecutor(),
|
|
pol: new PollinationsExecutor(), // Alias
|
|
"cloudflare-ai": new CloudflareAIExecutor(),
|
|
cf: new CloudflareAIExecutor(), // Alias
|
|
"opencode-zen": new OpencodeExecutor("opencode-zen"),
|
|
"opencode-go": new OpencodeExecutor("opencode-go"),
|
|
opencode: new OpencodeExecutor("opencode-zen"), // Alias for opencode-zen
|
|
puter: new PuterExecutor(),
|
|
pu: new PuterExecutor(), // Alias
|
|
vertex: new VertexExecutor(),
|
|
"vertex-partner": new VertexExecutor(),
|
|
cliproxyapi: new CliproxyapiExecutor(),
|
|
cpa: new CliproxyapiExecutor(), // Alias
|
|
"perplexity-web": new PerplexityWebExecutor(),
|
|
"pplx-web": new PerplexityWebExecutor(), // Alias
|
|
"grok-web": new GrokWebExecutor(),
|
|
"gemini-web": new GeminiWebExecutor(),
|
|
gweb: new GeminiWebExecutor(), // Alias
|
|
"chatgpt-web": new ChatGptWebExecutor(),
|
|
"cgpt-web": new ChatGptWebExecutor(), // Alias
|
|
"blackbox-web": new BlackboxWebExecutor(),
|
|
"bb-web": new BlackboxWebExecutor(), // Alias
|
|
"muse-spark-web": new MuseSparkWebExecutor(),
|
|
"ms-web": new MuseSparkWebExecutor(), // Alias
|
|
windsurf: new WindsurfExecutor(),
|
|
ws: new WindsurfExecutor(), // Alias
|
|
"devin-cli": new DevinCliExecutor(),
|
|
devin: new DevinCliExecutor(), // Alias
|
|
"deepseek-web": new DeepSeekWebWithAutoRefreshExecutor(),
|
|
"ds-web": new DeepSeekWebWithAutoRefreshExecutor(), // Alias
|
|
"copilot-web": new CopilotWebExecutor(),
|
|
copilot: new CopilotWebExecutor(), // Alias
|
|
"veoaifree-web": new VeoAIFreeWebExecutor(),
|
|
"veo-free": new VeoAIFreeWebExecutor(), // Alias
|
|
"t3-web": new T3ChatWebExecutor(),
|
|
t3chat: new T3ChatWebExecutor(), // Alias
|
|
};
|
|
|
|
const defaultCache = new Map();
|
|
|
|
export function getExecutor(provider) {
|
|
if (executors[provider]) return executors[provider];
|
|
if (!defaultCache.has(provider)) defaultCache.set(provider, new DefaultExecutor(provider));
|
|
return defaultCache.get(provider);
|
|
}
|
|
|
|
export function hasSpecializedExecutor(provider) {
|
|
return !!executors[provider];
|
|
}
|
|
|
|
export { BaseExecutor } from "./base.ts";
|
|
export { AntigravityExecutor } from "./antigravity.ts";
|
|
export { GeminiCLIExecutor } from "./gemini-cli.ts";
|
|
export { GithubExecutor } from "./github.ts";
|
|
export { QoderExecutor } from "./qoder.ts";
|
|
export { KiroExecutor } from "./kiro.ts";
|
|
export { CodexExecutor } from "./codex.ts";
|
|
export { CursorExecutor } from "./cursor.ts";
|
|
export { DefaultExecutor } from "./default.ts";
|
|
export { GlmExecutor } from "./glm.ts";
|
|
export { PollinationsExecutor } from "./pollinations.ts";
|
|
export { CloudflareAIExecutor } from "./cloudflare-ai.ts";
|
|
export { OpencodeExecutor } from "./opencode.ts";
|
|
export { PuterExecutor } from "./puter.ts";
|
|
export { CliproxyapiExecutor } from "./cliproxyapi.ts";
|
|
export { VertexExecutor } from "./vertex.ts";
|
|
export { PerplexityWebExecutor } from "./perplexity-web.ts";
|
|
export { GrokWebExecutor } from "./grok-web.ts";
|
|
export { GeminiWebExecutor } from "./gemini-web.ts";
|
|
export { KieExecutor } from "./kie.ts";
|
|
export { ChatGptWebExecutor } from "./chatgpt-web.ts";
|
|
export { BlackboxWebExecutor } from "./blackbox-web.ts";
|
|
export { MuseSparkWebExecutor } from "./muse-spark-web.ts";
|
|
export { AzureOpenAIExecutor } from "./azure-openai.ts";
|
|
export { CommandCodeExecutor } from "./commandCode.ts";
|
|
export { GitlabExecutor } from "./gitlab.ts";
|
|
export { NlpCloudExecutor } from "./nlpcloud.ts";
|
|
export { PetalsExecutor } from "./petals.ts";
|
|
export { WindsurfExecutor } from "./windsurf.ts";
|
|
export { DevinCliExecutor } from "./devin-cli.ts";
|
|
export { CopilotWebExecutor } from "./copilot-web.ts";
|
|
export { VeoAIFreeWebExecutor } from "./veoaifree-web.ts";
|
|
export { DeepSeekWebExecutor } from "./deepseek-web.ts";
|
|
export { DeepSeekWebWithAutoRefreshExecutor } from "./deepseek-web-with-auto-refresh.ts";
|
|
export { T3ChatWebExecutor } from "./t3-chat-web.ts";
|