mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-01 21:02:12 +03:00
560 lines
17 KiB
TypeScript
560 lines
17 KiB
TypeScript
// CLI Tools configuration
|
|
import { getClaudeCodeDefaultModels } from "@omniroute/open-sse/config/providerRegistry";
|
|
|
|
const _cc = getClaudeCodeDefaultModels();
|
|
|
|
export const CLI_TOOLS = {
|
|
claude: {
|
|
id: "claude",
|
|
name: "Claude Code",
|
|
icon: "terminal",
|
|
color: "#D97757",
|
|
description: "Anthropic Claude Code CLI",
|
|
docsUrl: "https://docs.anthropic.com/en/docs/claude-code/overview",
|
|
configType: "env",
|
|
envVars: {
|
|
baseUrl: "ANTHROPIC_BASE_URL",
|
|
model: "ANTHROPIC_MODEL",
|
|
opusModel: "ANTHROPIC_DEFAULT_OPUS_MODEL",
|
|
sonnetModel: "ANTHROPIC_DEFAULT_SONNET_MODEL",
|
|
haikuModel: "ANTHROPIC_DEFAULT_HAIKU_MODEL",
|
|
},
|
|
modelAliases: ["default", "sonnet", "opus", "haiku", "opusplan"],
|
|
settingsFile: "~/.claude/settings.json",
|
|
defaultCommand: "claude",
|
|
defaultModels: [
|
|
{
|
|
id: "model",
|
|
name: "Default Model",
|
|
alias: "model",
|
|
envKey: "ANTHROPIC_MODEL",
|
|
defaultValue: _cc.sonnet ? `cc/${_cc.sonnet}` : "cc/claude-sonnet-4-5-20250929",
|
|
isTopLevel: true,
|
|
},
|
|
{
|
|
id: "smallFast",
|
|
name: "Small Fast Model",
|
|
alias: "smallFast",
|
|
envKey: "ANTHROPIC_SMALL_FAST_MODEL",
|
|
defaultValue: _cc.haiku ? `cc/${_cc.haiku}` : "cc/claude-haiku-4-5-20251001",
|
|
isTopLevel: true,
|
|
},
|
|
{
|
|
id: "opus",
|
|
name: "Claude Opus",
|
|
alias: "opus",
|
|
envKey: "ANTHROPIC_DEFAULT_OPUS_MODEL",
|
|
defaultValue: _cc.opus ? `cc/${_cc.opus}` : "cc/claude-opus-4-5-20251101",
|
|
},
|
|
{
|
|
id: "sonnet",
|
|
name: "Claude Sonnet",
|
|
alias: "sonnet",
|
|
envKey: "ANTHROPIC_DEFAULT_SONNET_MODEL",
|
|
defaultValue: _cc.sonnet ? `cc/${_cc.sonnet}` : "cc/claude-sonnet-4-5-20250929",
|
|
},
|
|
{
|
|
id: "haiku",
|
|
name: "Claude Haiku",
|
|
alias: "haiku",
|
|
envKey: "ANTHROPIC_DEFAULT_HAIKU_MODEL",
|
|
defaultValue: _cc.haiku ? `cc/${_cc.haiku}` : "cc/claude-haiku-4-5-20251001",
|
|
},
|
|
],
|
|
},
|
|
codex: {
|
|
id: "codex",
|
|
name: "OpenAI Codex CLI",
|
|
color: "#10A37F",
|
|
description: "OpenAI Codex CLI",
|
|
docsUrl: "https://github.com/openai/codex",
|
|
configType: "custom",
|
|
defaultCommand: "codex",
|
|
},
|
|
droid: {
|
|
id: "droid",
|
|
name: "Factory Droid",
|
|
image: "/providers/droid.svg",
|
|
color: "#00D4FF",
|
|
description: "Factory Droid AI Assistant",
|
|
docsUrl: "/docs?section=cli-tools&tool=droid",
|
|
configType: "custom",
|
|
defaultCommand: "droid",
|
|
},
|
|
openclaw: {
|
|
id: "openclaw",
|
|
name: "Open Claw",
|
|
image: "/providers/openclaw.png",
|
|
color: "#FF6B35",
|
|
description: "Open Claw AI Assistant",
|
|
docsUrl: "/docs?section=cli-tools&tool=openclaw",
|
|
configType: "custom",
|
|
defaultCommand: "openclaw",
|
|
},
|
|
cursor: {
|
|
id: "cursor",
|
|
name: "Cursor",
|
|
image: "/providers/cursor.png",
|
|
color: "#000000",
|
|
description: "Cursor AI Code Editor",
|
|
docsUrl: "https://docs.cursor.com/settings/models",
|
|
configType: "guide",
|
|
requiresCloud: true,
|
|
defaultCommands: ["agent", "cursor"],
|
|
notes: [
|
|
{ type: "warning", text: "Requires Cursor Pro account to use this feature." },
|
|
{
|
|
type: "cloudCheck",
|
|
text: "Cursor routes requests through its own server, so local endpoint is not supported. Please enable Cloud Endpoint in Settings.",
|
|
},
|
|
],
|
|
guideSteps: [
|
|
{ step: 1, title: "Open Settings", desc: "Go to Settings → Models" },
|
|
{ step: 2, title: "Enable OpenAI API", desc: 'Enable "OpenAI API key" option' },
|
|
{ step: 3, title: "Base URL", value: "{{baseUrl}}", copyable: true },
|
|
{ step: 4, title: "API Key", type: "apiKeySelector" },
|
|
{ step: 5, title: "Add Custom Model", desc: 'Click "View All Model" → "Add Custom Model"' },
|
|
{ step: 6, title: "Select Model", type: "modelSelector" },
|
|
],
|
|
},
|
|
windsurf: {
|
|
id: "windsurf",
|
|
name: "Windsurf",
|
|
color: "#4A90E2",
|
|
description: "Windsurf AI-first IDE by Codeium",
|
|
docsUrl: "https://windsurf.com/",
|
|
configType: "guide",
|
|
notes: [
|
|
{
|
|
type: "warning",
|
|
text: "Official Windsurf docs currently describe BYOK for select Claude models plus enterprise URL/token settings, not a generic custom OpenAI-compatible provider.",
|
|
},
|
|
],
|
|
guideSteps: [
|
|
{
|
|
step: 1,
|
|
title: "Open AI Settings",
|
|
desc: "Click the AI Settings icon in Windsurf or go to Settings",
|
|
},
|
|
{
|
|
step: 2,
|
|
title: "Add Custom Provider",
|
|
desc: 'Select "Add custom provider" (OpenAI-compatible)',
|
|
},
|
|
{ step: 3, title: "Base URL", value: "{{baseUrl}}", copyable: true },
|
|
{ step: 4, title: "API Key", type: "apiKeySelector" },
|
|
{ step: 5, title: "Select Model", type: "modelSelector" },
|
|
],
|
|
},
|
|
cline: {
|
|
id: "cline",
|
|
name: "Cline",
|
|
color: "#00D1B2",
|
|
description: "Cline AI Coding Assistant CLI",
|
|
docsUrl: "https://docs.cline.bot/",
|
|
configType: "custom",
|
|
defaultCommand: "cline",
|
|
},
|
|
kilo: {
|
|
id: "kilo",
|
|
name: "Kilo Code",
|
|
image: "/providers/kilocode.svg",
|
|
color: "#FF6B6B",
|
|
description: "Kilo Code AI Assistant CLI",
|
|
docsUrl: "/docs?section=cli-tools&tool=kilocode",
|
|
configType: "custom",
|
|
defaultCommand: "kilocode",
|
|
},
|
|
continue: {
|
|
id: "continue",
|
|
name: "Continue",
|
|
image: "/providers/continue.png",
|
|
color: "#7C3AED",
|
|
description: "Continue AI Assistant",
|
|
docsUrl: "https://docs.continue.dev/",
|
|
configType: "guide",
|
|
guideSteps: [
|
|
{ step: 1, title: "Open Config", desc: "Open Continue configuration file" },
|
|
{ step: 2, title: "API Key", type: "apiKeySelector" },
|
|
{ step: 3, title: "Select Model", type: "modelSelector" },
|
|
{
|
|
step: 4,
|
|
title: "Add Model Config",
|
|
desc: "Add the following configuration to your models array:",
|
|
},
|
|
],
|
|
codeBlock: {
|
|
language: "json",
|
|
code: `{
|
|
"apiBase": "{{baseUrl}}",
|
|
"title": "{{model}}",
|
|
"model": "{{model}}",
|
|
"provider": "openai",
|
|
"apiKey": "{{apiKey}}"
|
|
}`,
|
|
},
|
|
},
|
|
antigravity: {
|
|
id: "antigravity",
|
|
name: "Antigravity",
|
|
color: "#4285F4",
|
|
description: "Google Antigravity IDE with MITM",
|
|
docsUrl: "/docs?section=cli-tools&tool=antigravity",
|
|
configType: "mitm",
|
|
modelAliases: [
|
|
"claude-opus-4-6-thinking",
|
|
"claude-sonnet-4-6",
|
|
"gemini-3-flash",
|
|
"gpt-oss-120b-medium",
|
|
"gemini-3.1-pro-high",
|
|
"gemini-3.1-pro-low",
|
|
],
|
|
defaultModels: [
|
|
{ id: "gemini-3.1-pro-high", name: "Gemini 3.1 Pro High", alias: "gemini-3.1-pro-high" },
|
|
{ id: "gemini-3.1-pro-low", name: "Gemini 3.1 Pro Low", alias: "gemini-3.1-pro-low" },
|
|
{ id: "gemini-3-flash", name: "Gemini 3 Flash", alias: "gemini-3-flash" },
|
|
{
|
|
id: "claude-sonnet-4-6",
|
|
name: "Claude Sonnet 4.6",
|
|
alias: "claude-sonnet-4-6",
|
|
},
|
|
{
|
|
id: "claude-opus-4-6-thinking",
|
|
name: "Claude Opus 4.6 Thinking",
|
|
alias: "claude-opus-4-6-thinking",
|
|
},
|
|
{ id: "gpt-oss-120b-medium", name: "GPT OSS 120B Medium", alias: "gpt-oss-120b-medium" },
|
|
],
|
|
},
|
|
copilot: {
|
|
id: "copilot",
|
|
name: "GitHub Copilot",
|
|
image: "/providers/copilot.png",
|
|
color: "#1F6FEB",
|
|
description: "GitHub Copilot Chat — VS Code Extension",
|
|
docsUrl: "https://code.visualstudio.com/docs/copilot/overview",
|
|
configType: "custom",
|
|
},
|
|
opencode: {
|
|
id: "opencode",
|
|
name: "OpenCode",
|
|
imageLight: "/providers/opencode-light.svg",
|
|
imageDark: "/providers/opencode-dark.svg",
|
|
icon: "terminal",
|
|
color: "#FF6B35",
|
|
description: "OpenCode AI coding agent (Terminal)",
|
|
docsUrl: "/docs?section=cli-tools&tool=opencode",
|
|
configType: "guide",
|
|
defaultCommand: "opencode",
|
|
modelSelectionMode: "multiple",
|
|
hideComboModels: true,
|
|
previewConfigMode: "opencode",
|
|
notes: [
|
|
{
|
|
type: "warning",
|
|
text: "Config path: Linux/macOS ~/.config/opencode/opencode.json • Windows %APPDATA%\\\\opencode\\\\opencode.json",
|
|
},
|
|
{
|
|
type: "warning",
|
|
text: 'Thinking variant example: opencode run "implement this feature" --model omniroute/claude-sonnet-4-5-thinking --variant high',
|
|
},
|
|
],
|
|
guideSteps: [
|
|
{ step: 1, title: "Install OpenCode", desc: "Install via npm: npm install -g opencode-ai" },
|
|
{ step: 2, title: "API Key", type: "apiKeySelector" },
|
|
{ step: 3, title: "Set Base URL", desc: "opencode config set baseUrl {{baseUrl}}" },
|
|
{ step: 4, title: "Select Model", type: "modelSelector" },
|
|
{
|
|
step: 5,
|
|
title: "Use Thinking Variant",
|
|
desc: "For thinking models, run with --variant high/low/max (example command below).",
|
|
},
|
|
],
|
|
codeBlock: {
|
|
language: "json",
|
|
code: `{
|
|
"$schema": "https://opencode.ai/config.json",
|
|
"provider": {
|
|
"omniroute": {
|
|
"npm": "@ai-sdk/openai-compatible",
|
|
"name": "OmniRoute",
|
|
"options": {
|
|
"baseURL": "{{baseUrl}}",
|
|
"apiKey": "{{apiKey}}"
|
|
},
|
|
"models": {
|
|
"{{model}}": { "name": "{{model}}" },
|
|
"claude-sonnet-4-5-thinking": { "name": "claude-sonnet-4-5-thinking" },
|
|
"gemini-3.1-pro-high": { "name": "gemini-3.1-pro-high" },
|
|
"gemini-3-flash": { "name": "gemini-3-flash" }
|
|
}
|
|
}
|
|
}
|
|
}`,
|
|
},
|
|
},
|
|
hermes: {
|
|
id: "hermes",
|
|
name: "Hermes",
|
|
icon: "terminal",
|
|
color: "#8B5CF6",
|
|
description: "Hermes coding agent quick configuration",
|
|
docsUrl: "/docs?section=cli-tools&tool=hermes",
|
|
configType: "guide",
|
|
defaultCommand: "hermes",
|
|
guideSteps: [
|
|
{
|
|
step: 1,
|
|
title: "Open Hermes Config",
|
|
desc: "Open your Hermes configuration file or create one if this is the first run.",
|
|
},
|
|
{ step: 2, title: "API Key", type: "apiKeySelector" },
|
|
{ step: 3, title: "Base URL", value: "{{baseUrl}}", copyable: true },
|
|
{ step: 4, title: "Select Model", type: "modelSelector" },
|
|
{
|
|
step: 5,
|
|
title: "Save Provider Block",
|
|
desc: "Use the JSON block below as the OpenAI-compatible provider definition for OmniRoute.",
|
|
},
|
|
],
|
|
codeBlock: {
|
|
language: "json",
|
|
code: `{
|
|
"provider": {
|
|
"type": "openai",
|
|
"baseURL": "{{baseUrl}}",
|
|
"apiKey": "{{apiKey}}",
|
|
"model": "{{model}}"
|
|
}
|
|
}`,
|
|
},
|
|
},
|
|
amp: {
|
|
id: "amp",
|
|
name: "Amp CLI",
|
|
icon: "terminal",
|
|
color: "#F97316",
|
|
description: "Sourcegraph Amp coding assistant CLI",
|
|
docsUrl: "/docs?section=cli-tools&tool=amp",
|
|
configType: "guide",
|
|
defaultCommand: "amp",
|
|
modelAliases: ["g25p", "g25f", "cs45", "g54"],
|
|
notes: [
|
|
{
|
|
type: "info",
|
|
text: "Use OmniRoute model aliases to keep Amp shorthand mappings stable across provider updates.",
|
|
},
|
|
{
|
|
type: "warning",
|
|
text: "Suggested shorthand examples: g25p → gemini/gemini-2.5-pro, g25f → gemini/gemini-2.5-flash, cs45 → cc/claude-sonnet-4-5-20250929.",
|
|
},
|
|
],
|
|
guideSteps: [
|
|
{
|
|
step: 1,
|
|
title: "Install Amp",
|
|
desc: "Install the Amp CLI using the package manager supported by your environment.",
|
|
},
|
|
{ step: 2, title: "API Key", type: "apiKeySelector" },
|
|
{ step: 3, title: "Base URL", value: "{{baseUrl}}", copyable: true },
|
|
{ step: 4, title: "Select Model", type: "modelSelector" },
|
|
{
|
|
step: 5,
|
|
title: "Add Shorthands",
|
|
desc: "Map Amp shorthand names such as g25p or cs45 to OmniRoute aliases in your local config.",
|
|
},
|
|
],
|
|
codeBlock: {
|
|
language: "bash",
|
|
code: `export OPENAI_API_KEY="{{apiKey}}"
|
|
export OPENAI_BASE_URL="{{baseUrl}}"
|
|
amp --model "{{model}}"
|
|
# Example shorthand aliases you can map locally:
|
|
# g25p -> gemini/gemini-2.5-pro
|
|
# cs45 -> cc/claude-sonnet-4-5-20250929`,
|
|
},
|
|
},
|
|
kiro: {
|
|
id: "kiro",
|
|
name: "Kiro AI",
|
|
image: "/providers/kiro.svg",
|
|
icon: "psychology_alt",
|
|
color: "#FF6B35",
|
|
description: "Amazon Kiro — AI-powered IDE with MITM",
|
|
docsUrl: "/docs?section=cli-tools&tool=kiro",
|
|
configType: "mitm",
|
|
guideSteps: [
|
|
{ step: 1, title: "Open Kiro Settings", desc: "Go to Settings → AI Provider" },
|
|
{ step: 2, title: "Base URL", value: "{{baseUrl}}", copyable: true },
|
|
{ step: 3, title: "API Key", type: "apiKeySelector" },
|
|
{ step: 4, title: "Select Model", type: "modelSelector" },
|
|
],
|
|
},
|
|
qwen: {
|
|
id: "qwen",
|
|
name: "Qwen Code",
|
|
icon: "psychology",
|
|
color: "#10B981",
|
|
description:
|
|
"Alibaba Qwen Code CLI — supports OpenAI, Anthropic & Gemini providers via OmniRoute",
|
|
docsUrl: "https://qwenlm.github.io/qwen-code-docs/en/users/configuration/model-providers/",
|
|
configType: "guide",
|
|
defaultCommand: "qwen",
|
|
notes: [
|
|
{
|
|
type: "info",
|
|
text: "Qwen Code supports multiple provider types (openai, anthropic, gemini) via modelProviders in settings.json. OmniRoute works as an OpenAI-compatible endpoint.",
|
|
},
|
|
{
|
|
type: "info",
|
|
text: "Any model available in OmniRoute can be used — not just Qwen models. Select from Qwen, Claude, Gemini, GPT, and more.",
|
|
},
|
|
{
|
|
type: "warning",
|
|
text: "Config path: Linux/macOS ~/.qwen/settings.json • Windows %USERPROFILE%\\.qwen\\settings.json",
|
|
},
|
|
{
|
|
type: "error",
|
|
text: "Qwen OAuth free tier was discontinued on 2026-04-15. Use OmniRoute with alicode/openrouter/anthropic/gemini providers instead.",
|
|
},
|
|
],
|
|
modelAliases: [
|
|
"coder-model",
|
|
"qwen3-coder-plus",
|
|
"qwen3-coder-flash",
|
|
"vision-model",
|
|
"claude-sonnet-4-6",
|
|
"claude-opus-4-6-thinking",
|
|
"gemini-3-flash",
|
|
"gemini-3.1-pro-high",
|
|
],
|
|
defaultModels: [
|
|
{
|
|
id: "coder-model",
|
|
name: "Coder Model (Qwen 3.6 Plus)",
|
|
alias: "coder-model",
|
|
envKey: "OPENAI_MODEL",
|
|
defaultValue: "coder-model",
|
|
isTopLevel: true,
|
|
},
|
|
{
|
|
id: "qwen3-coder-plus",
|
|
name: "Qwen 3 Coder Plus",
|
|
alias: "qwen3-coder-plus",
|
|
envKey: "OPENAI_MODEL",
|
|
defaultValue: "qwen3-coder-plus",
|
|
},
|
|
{
|
|
id: "qwen3-coder-flash",
|
|
name: "Qwen 3 Coder Flash",
|
|
alias: "qwen3-coder-flash",
|
|
envKey: "OPENAI_MODEL",
|
|
defaultValue: "qwen3-coder-flash",
|
|
},
|
|
{
|
|
id: "vision-model",
|
|
name: "Vision Model (Multimodal)",
|
|
alias: "vision-model",
|
|
envKey: "OPENAI_MODEL",
|
|
defaultValue: "vision-model",
|
|
},
|
|
{
|
|
id: "claude-sonnet-4-6",
|
|
name: "Claude Sonnet 4.6",
|
|
alias: "claude-sonnet-4-6",
|
|
envKey: "OPENAI_MODEL",
|
|
defaultValue: "claude-sonnet-4-6",
|
|
},
|
|
{
|
|
id: "claude-opus-4-6-thinking",
|
|
name: "Claude Opus 4.6 Thinking",
|
|
alias: "claude-opus-4-6-thinking",
|
|
envKey: "OPENAI_MODEL",
|
|
defaultValue: "claude-opus-4-6-thinking",
|
|
},
|
|
{
|
|
id: "gemini-3.1-pro-high",
|
|
name: "Gemini 3.1 Pro High",
|
|
alias: "gemini-3.1-pro-high",
|
|
envKey: "OPENAI_MODEL",
|
|
defaultValue: "gemini-3.1-pro-high",
|
|
},
|
|
{
|
|
id: "gemini-3-flash",
|
|
name: "Gemini 3 Flash",
|
|
alias: "gemini-3-flash",
|
|
envKey: "OPENAI_MODEL",
|
|
defaultValue: "gemini-3-flash",
|
|
},
|
|
],
|
|
guideSteps: [
|
|
{ step: 1, title: "Install Qwen Code", desc: "npm install -g @qwen-code/qwen-code" },
|
|
{ step: 2, title: "API Key", type: "apiKeySelector" },
|
|
{ step: 3, title: "Base URL", value: "{{baseUrl}}", copyable: true },
|
|
{ step: 4, title: "Select Model", type: "modelSelector" },
|
|
{
|
|
step: 5,
|
|
title: "Save Config",
|
|
desc: "Click Save Config below to write your settings.json automatically.",
|
|
},
|
|
],
|
|
codeBlock: {
|
|
language: "json",
|
|
code: `# ~/.qwen/settings.json — OmniRoute via security.auth
|
|
{
|
|
"security": {
|
|
"auth": {
|
|
"selectedType": "openai",
|
|
"apiKey": "{{apiKey}}",
|
|
"baseUrl": "{{baseUrl}}"
|
|
}
|
|
},
|
|
"model": {
|
|
"name": "{{model}}"
|
|
}
|
|
}`,
|
|
},
|
|
},
|
|
custom: {
|
|
id: "custom",
|
|
name: "Custom CLI",
|
|
icon: "terminal",
|
|
color: "#10B981",
|
|
description: "Generic OpenAI-compatible CLI or SDK configuration generator",
|
|
docsUrl: "/docs?section=cli-tools",
|
|
configType: "custom-builder",
|
|
},
|
|
};
|
|
|
|
// ─── Registry helpers ────────────────────────────────────────────────────────
|
|
|
|
export type CliToolEntry = (typeof CLI_TOOLS)[keyof typeof CLI_TOOLS];
|
|
|
|
/** Returns an ordered list of all registered CLI tools. */
|
|
export function listCliTools(): CliToolEntry[] {
|
|
return Object.values(CLI_TOOLS) as CliToolEntry[];
|
|
}
|
|
|
|
/** Returns a single tool by id, or undefined if not found. */
|
|
export function getCliTool(id: string): CliToolEntry | undefined {
|
|
return (CLI_TOOLS as Record<string, CliToolEntry>)[id];
|
|
}
|
|
|
|
// ─── Provider model mapping helper ───────────────────────────────────────────
|
|
|
|
// Get all provider models for mapping dropdown
|
|
export const getProviderModelsForMapping = (providers) => {
|
|
const result = [];
|
|
providers.forEach((conn) => {
|
|
if (conn.isActive && (conn.testStatus === "active" || conn.testStatus === "success")) {
|
|
result.push({
|
|
connectionId: conn.id,
|
|
provider: conn.provider,
|
|
name: conn.name,
|
|
models: conn.models || [],
|
|
});
|
|
}
|
|
});
|
|
return result;
|
|
};
|