|
|
| import { getClaudeCodeDefaultModels } from "@omniroute/open-sse/config/providerRegistry";
|
| import type { CliCatalogEntry } from "@/shared/schemas/cliCatalog";
|
|
|
| const _cc = getClaudeCodeDefaultModels();
|
|
|
| export const CLI_TOOLS: Record<string, CliCatalogEntry> = {
|
| claude: {
|
| id: "claude",
|
| name: "Claude Code",
|
| icon: "terminal",
|
| color: "#D97757",
|
| description: "Anthropic Claude Code CLI β ANTHROPIC_BASE_URL points to OmniRoute",
|
| docsUrl: "https://docs.anthropic.com/en/docs/claude-code/overview",
|
| configType: "env",
|
| category: "code",
|
| vendor: "Anthropic",
|
| acpSpawnable: true,
|
| baseUrlSupport: "full",
|
| 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 β OpenAI-compatible base URL targets OmniRoute",
|
| docsUrl: "https://github.com/openai/codex",
|
| configType: "custom",
|
| category: "code",
|
| vendor: "OpenAI",
|
| acpSpawnable: true,
|
| baseUrlSupport: "full",
|
| defaultCommand: "codex",
|
| },
|
| droid: {
|
| id: "droid",
|
| name: "Factory Droid",
|
| image: "/providers/droid.svg",
|
| color: "#00D4FF",
|
| description: "Factory AI Droid β BYOK assistant with configurable endpoint",
|
| docsUrl: "/docs?section=cli-tools&tool=droid",
|
| configType: "custom",
|
| category: "code",
|
| vendor: "Factory AI",
|
| acpSpawnable: false,
|
| baseUrlSupport: "partial",
|
| defaultCommand: "droid",
|
| },
|
| openclaw: {
|
| id: "openclaw",
|
| name: "Open Claw",
|
| image: "/providers/openclaw.png",
|
| color: "#FF6B35",
|
| description: "Open Claw β open-source multi-backend agent CLI (OSS, P. Steinberger)",
|
| docsUrl: "/docs?section=cli-tools&tool=openclaw",
|
| configType: "custom",
|
| category: "agent",
|
| vendor: "OSS (P. Steinberger)",
|
| acpSpawnable: true,
|
| baseUrlSupport: "full",
|
| defaultCommand: "openclaw",
|
| },
|
| cursor: {
|
| id: "cursor",
|
| name: "Cursor",
|
| image: "/providers/cursor.png",
|
| color: "#000000",
|
|
|
|
|
| description: "Cursor AI Code Editor β Cloud Endpoint required (use cursor-cli for CLI mode)",
|
| docsUrl: "https://docs.cursor.com/settings/models",
|
| configType: "guide",
|
| category: "code",
|
| vendor: "Anysphere",
|
| acpSpawnable: false,
|
| baseUrlSupport: "none",
|
| 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" },
|
| ],
|
| },
|
| cline: {
|
| id: "cline",
|
| name: "Cline",
|
| color: "#00D1B2",
|
| description: "Cline β open-source VS Code coding agent with OpenAI-compatible base URL",
|
| docsUrl: "https://docs.cline.bot/",
|
| configType: "custom",
|
| category: "code",
|
| vendor: "OSS",
|
| acpSpawnable: true,
|
| baseUrlSupport: "full",
|
| defaultCommand: "cline",
|
| },
|
| kilo: {
|
| id: "kilo",
|
| name: "Kilo Code",
|
| image: "/providers/kilocode.svg",
|
| color: "#FF6B6B",
|
| description: "Kilo Code β VS Code AI assistant with custom base URL support",
|
| docsUrl: "/docs?section=cli-tools&tool=kilocode",
|
| configType: "custom",
|
| category: "code",
|
| vendor: "Kilo-Org",
|
| acpSpawnable: false,
|
| baseUrlSupport: "full",
|
| defaultCommand: "kilocode",
|
| },
|
| continue: {
|
| id: "continue",
|
| name: "Continue",
|
| image: "/providers/continue.png",
|
| color: "#7C3AED",
|
| description: "Continue β open-source AI coding assistant with full provider config",
|
| docsUrl: "https://docs.continue.dev/",
|
| configType: "guide",
|
| category: "code",
|
| vendor: "continue.dev",
|
| acpSpawnable: false,
|
| baseUrlSupport: "full",
|
| 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 β MITM intercept required (plan 11 backlog)",
|
| docsUrl: "/docs?section=cli-tools&tool=antigravity",
|
|
|
|
|
| configType: "mitm",
|
| category: "code",
|
| vendor: "Google",
|
| acpSpawnable: false,
|
| baseUrlSupport: "none",
|
| 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 with COPILOT_PROVIDER_BASE_URL support",
|
| docsUrl: "https://code.visualstudio.com/docs/copilot/overview",
|
| configType: "custom",
|
| category: "code",
|
| vendor: "GitHub / Microsoft",
|
| acpSpawnable: false,
|
| baseUrlSupport: "full",
|
| },
|
| opencode: {
|
| id: "opencode",
|
| name: "OpenCode",
|
| imageLight: "/providers/opencode-light.svg",
|
| imageDark: "/providers/opencode-dark.svg",
|
| icon: "terminal",
|
| color: "#FF6B35",
|
| description: "OpenCode β AI coding agent CLI by Anomaly (terminal, multi-provider)",
|
| docsUrl: "/docs?section=cli-tools&tool=opencode",
|
| configType: "guide",
|
| category: "code",
|
| vendor: "Anomaly",
|
| acpSpawnable: true,
|
| baseUrlSupport: "full",
|
| 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: "Nous Research Hermes β generic OpenAI-compatible setup (use hermes-agent for full agent)",
|
| docsUrl: "/docs?section=cli-tools&tool=hermes",
|
| configType: "guide",
|
| category: "code",
|
| vendor: "Nous Research",
|
| acpSpawnable: false,
|
| baseUrlSupport: "none",
|
| 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}}"
|
| }
|
| }`,
|
| },
|
| },
|
|
|
|
|
|
|
| "hermes-agent": {
|
| id: "hermes-agent",
|
| name: "Hermes Agent",
|
| icon: "terminal",
|
| color: "#8B5CF6",
|
| description: "Hermes Agent (Nous Research) β advanced multi-role autonomous terminal AI",
|
| docsUrl: "/docs?section=cli-tools&tool=hermes-agent",
|
| configType: "custom",
|
| category: "agent",
|
| vendor: "Nous Research",
|
| acpSpawnable: false,
|
| baseUrlSupport: "full",
|
| defaultCommand: "hermes",
|
| },
|
| kiro: {
|
| id: "kiro",
|
| name: "Kiro AI",
|
| image: "/providers/kiro.svg",
|
| icon: "psychology_alt",
|
| color: "#FF6B35",
|
| description: "Amazon Kiro β AI-powered IDE with MITM intercept (plan 11 backlog)",
|
| docsUrl: "/docs?section=cli-tools&tool=kiro",
|
|
|
|
|
| configType: "mitm",
|
| category: "code",
|
| vendor: "Amazon",
|
| acpSpawnable: false,
|
| baseUrlSupport: "none",
|
| 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",
|
| category: "code",
|
| vendor: "Alibaba",
|
| acpSpawnable: true,
|
| baseUrlSupport: "full",
|
| 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 bailian-coding-plan/alibaba/alibaba-cn/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",
|
| category: "code",
|
| vendor: "Custom",
|
| acpSpawnable: false,
|
| baseUrlSupport: "full",
|
| },
|
|
|
|
|
| aider: {
|
| id: "aider",
|
| name: "Aider",
|
| icon: "terminal",
|
| color: "#2DD4BF",
|
| description: "Aider AI pair-programming CLI β OpenAI-compatible --openai-api-base flag",
|
| docsUrl: "https://aider.chat/docs/config/options.html",
|
| configType: "guide",
|
| category: "code",
|
| vendor: "OSS (P. Gauthier)",
|
| acpSpawnable: true,
|
| baseUrlSupport: "full",
|
| defaultCommand: "aider",
|
| guideSteps: [
|
| { step: 1, title: "Install Aider", desc: "pip install aider-chat" },
|
| { step: 2, title: "API Key", type: "apiKeySelector" },
|
| { step: 3, title: "Base URL", value: "{{baseUrl}}", copyable: true },
|
| { step: 4, title: "Select Model", type: "modelSelector" },
|
| ],
|
| codeBlock: {
|
| language: "bash",
|
| code: `export OPENAI_API_KEY="{{apiKey}}"
|
| aider --openai-api-base "{{baseUrl}}" --model "{{model}}"`,
|
| },
|
| },
|
|
|
|
|
| forge: {
|
| id: "forge",
|
| name: "ForgeCode",
|
| icon: "terminal",
|
| color: "#F97316",
|
| description: "ForgeCode coding agent CLI β custom provider via .forge.toml",
|
| docsUrl: "https://github.com/antinomyhq/forge",
|
| configType: "custom",
|
| category: "code",
|
| vendor: "Antinomy HQ",
|
| acpSpawnable: true,
|
| baseUrlSupport: "full",
|
| defaultCommand: "forge",
|
| },
|
|
|
|
|
| "gemini-cli": {
|
| id: "gemini-cli",
|
| name: "Google Gemini CLI",
|
| icon: "terminal",
|
| color: "#4285F4",
|
| description: "Google Gemini CLI β OpenAI-compatible base URL via GEMINI_API_BASE_URL env",
|
| docsUrl: "https://github.com/google-gemini/gemini-cli",
|
| configType: "guide",
|
| category: "code",
|
| vendor: "Google",
|
| acpSpawnable: true,
|
| baseUrlSupport: "partial",
|
| defaultCommand: "gemini",
|
| guideSteps: [
|
| {
|
| step: 1,
|
| title: "Install Gemini CLI",
|
| desc: "npm install -g @google/gemini-cli",
|
| },
|
| { step: 2, title: "API Key", type: "apiKeySelector" },
|
| { step: 3, title: "Base URL", value: "{{baseUrl}}", copyable: true },
|
| { step: 4, title: "Select Model", type: "modelSelector" },
|
| ],
|
| codeBlock: {
|
| language: "bash",
|
| code: `export GEMINI_API_KEY="{{apiKey}}"
|
| export GEMINI_API_BASE_URL="{{baseUrl}}"
|
| gemini --model "{{model}}"`,
|
| },
|
| },
|
|
|
|
|
| "cursor-cli": {
|
| id: "cursor-cli",
|
| name: "Cursor Agent CLI",
|
| icon: "terminal",
|
| color: "#000000",
|
| description: "Cursor Agent CLI β headless agent mode with custom provider endpoint",
|
| docsUrl: "https://docs.cursor.com/advanced/api",
|
| configType: "guide",
|
| category: "code",
|
| vendor: "Anysphere",
|
| acpSpawnable: true,
|
| baseUrlSupport: "partial",
|
| defaultCommand: "cursor",
|
| guideSteps: [
|
| { step: 1, title: "Install Cursor CLI", desc: "Download cursor binary from cursor.com" },
|
| { step: 2, title: "API Key", type: "apiKeySelector" },
|
| { step: 3, title: "Base URL", value: "{{baseUrl}}", copyable: true },
|
| { step: 4, title: "Select Model", type: "modelSelector" },
|
| ],
|
| },
|
|
|
|
|
|
|
|
|
| roo: {
|
| id: "roo",
|
| name: "Roo Code",
|
| icon: "terminal",
|
| color: "#7C3AED",
|
| description: "Roo Code AI Assistant β VS Code extension with OpenAI-compatible custom base URL",
|
| docsUrl: "https://docs.roocode.com/",
|
| configType: "guide",
|
| category: "code",
|
| vendor: "Roo (OSS)",
|
| acpSpawnable: false,
|
| baseUrlSupport: "full",
|
| guideSteps: [
|
| { step: 1, title: "Install Roo Code", desc: "Install the Roo Code VS Code extension" },
|
| { step: 2, title: "API Key", type: "apiKeySelector" },
|
| { step: 3, title: "Base URL", value: "{{baseUrl}}", copyable: true },
|
| { step: 4, title: "Select Model", type: "modelSelector" },
|
| ],
|
| },
|
|
|
|
|
| jcode: {
|
| id: "jcode",
|
| name: "jcode",
|
| icon: "terminal",
|
| color: "#10B981",
|
| description: "jcode terminal coding agent β OpenAI-compatible CLI by 1jehuang",
|
| docsUrl: "https://github.com/1jehuang/jcode",
|
| configType: "custom",
|
| category: "code",
|
| vendor: "OSS (1jehuang)",
|
| acpSpawnable: false,
|
| baseUrlSupport: "full",
|
| defaultCommand: "jcode",
|
| },
|
|
|
|
|
| "deepseek-tui": {
|
| id: "deepseek-tui",
|
| name: "DeepSeek TUI",
|
| icon: "terminal",
|
| color: "#4F46E5",
|
| description: "DeepSeek TUI β Rust-based coding agent CLI with OPENAI_BASE_URL support",
|
| docsUrl: "https://github.com/hunterbown/deepseek-tui",
|
| configType: "custom",
|
| category: "code",
|
| vendor: "OSS (Hunter Bown)",
|
| acpSpawnable: false,
|
| baseUrlSupport: "full",
|
| defaultCommand: "deepseek-tui",
|
| },
|
|
|
|
|
| smelt: {
|
| id: "smelt",
|
| name: "Smelt",
|
| icon: "terminal",
|
| color: "#EF4444",
|
| description: "Smelt coding agent CLI β OpenAI-compatible agent by leonardcser",
|
| docsUrl: "https://github.com/leonardcser/smelt",
|
| configType: "custom",
|
| category: "code",
|
| vendor: "OSS (leonardcser)",
|
| acpSpawnable: false,
|
| baseUrlSupport: "full",
|
| defaultCommand: "smelt",
|
| },
|
|
|
|
|
| pi: {
|
| id: "pi",
|
| name: "Pi",
|
| icon: "terminal",
|
| color: "#F59E0B",
|
| description: "Pi coding agent CLI β lightweight terminal AI by M. Zechner",
|
| docsUrl: "https://github.com/badlogic/pi",
|
| configType: "custom",
|
| category: "code",
|
| vendor: "OSS (M. Zechner)",
|
| acpSpawnable: false,
|
| baseUrlSupport: "full",
|
| defaultCommand: "pi",
|
| },
|
|
|
|
|
|
|
|
|
| goose: {
|
| id: "goose",
|
| name: "Goose",
|
| icon: "smart_toy",
|
| color: "#F97316",
|
| description: "Goose autonomous agent CLI β Block / Linux Foundation OSS, full base URL",
|
| docsUrl: "https://block.github.io/goose/",
|
| configType: "guide",
|
| category: "agent",
|
| vendor: "Block / Linux Foundation",
|
| acpSpawnable: true,
|
| baseUrlSupport: "full",
|
| defaultCommand: "goose",
|
| guideSteps: [
|
| { step: 1, title: "Install Goose", desc: "pip install goose-ai or brew install goose" },
|
| { step: 2, title: "API Key", type: "apiKeySelector" },
|
| { step: 3, title: "Base URL", value: "{{baseUrl}}", copyable: true },
|
| { step: 4, title: "Select Model", type: "modelSelector" },
|
| ],
|
| codeBlock: {
|
| language: "yaml",
|
| code: `# ~/.config/goose/config.yaml
|
| GOOSE_PROVIDER: "openai"
|
| GOOSE_MODEL: "{{model}}"
|
| OPENAI_HOST: "{{baseUrl}}"
|
| OPENAI_API_KEY: "{{apiKey}}"`,
|
| },
|
| },
|
|
|
|
|
| interpreter: {
|
| id: "interpreter",
|
| name: "Open Interpreter",
|
| icon: "smart_toy",
|
| color: "#8B5CF6",
|
| description: "Open Interpreter β autonomous coding agent CLI with --api_base flag",
|
| docsUrl: "https://docs.openinterpreter.com/",
|
| configType: "guide",
|
| category: "agent",
|
| vendor: "OSS",
|
| acpSpawnable: true,
|
| baseUrlSupport: "full",
|
| defaultCommand: "interpreter",
|
| guideSteps: [
|
| { step: 1, title: "Install", desc: "pip install open-interpreter" },
|
| { step: 2, title: "API Key", type: "apiKeySelector" },
|
| { step: 3, title: "Base URL", value: "{{baseUrl}}", copyable: true },
|
| { step: 4, title: "Select Model", type: "modelSelector" },
|
| ],
|
| codeBlock: {
|
| language: "bash",
|
| code: `interpreter --api_base "{{baseUrl}}" --api_key "{{apiKey}}" --model "{{model}}"`,
|
| },
|
| },
|
|
|
|
|
| warp: {
|
| id: "warp",
|
| name: "Warp AI",
|
| icon: "terminal",
|
| color: "#1D4ED8",
|
| description: "Warp AI terminal β BYOK desktop app with partial base URL support",
|
| docsUrl: "https://docs.warp.dev/",
|
| configType: "guide",
|
| category: "agent",
|
| vendor: "Warp Inc.",
|
| acpSpawnable: true,
|
| baseUrlSupport: "partial",
|
| guideSteps: [
|
| { step: 1, title: "Install Warp", desc: "Download Warp from warp.dev (desktop app)" },
|
| { step: 2, title: "API Key", type: "apiKeySelector" },
|
| { step: 3, title: "Configure BYOK", desc: "Go to Settings β AI β BYOK Provider" },
|
| { step: 3, title: "Base URL", value: "{{baseUrl}}", copyable: true },
|
| { step: 4, title: "Select Model", type: "modelSelector" },
|
| ],
|
| notes: [
|
| {
|
| type: "warning",
|
| text: "Warp is a desktop app, not a CLI binary. baseUrlSupport is partial β some models may require the native Warp endpoint.",
|
| },
|
| ],
|
| },
|
|
|
|
|
| "agent-deck": {
|
| id: "agent-deck",
|
| name: "Agent Deck",
|
| icon: "device_hub",
|
| color: "#0EA5E9",
|
| description: "Agent Deck β multi-agent stdio backend orchestrator (OSS, asheshgoplani)",
|
| docsUrl: "https://github.com/asheshgoplani/agent-deck",
|
| configType: "guide",
|
| category: "agent",
|
| vendor: "OSS (asheshgoplani)",
|
| acpSpawnable: false,
|
| baseUrlSupport: "full",
|
| defaultCommand: "agent-deck",
|
| guideSteps: [
|
| { step: 1, title: "Install Agent Deck", desc: "npm install -g agent-deck" },
|
| { step: 2, title: "API Key", type: "apiKeySelector" },
|
| { step: 3, title: "Base URL", value: "{{baseUrl}}", copyable: true },
|
| { step: 4, title: "Select Model", type: "modelSelector" },
|
| ],
|
| },
|
| };
|
|
|
|
|
|
|
| export type CliToolEntry = CliCatalogEntry;
|
|
|
|
|
| export function listCliTools(): CliToolEntry[] {
|
| return Object.values(CLI_TOOLS);
|
| }
|
|
|
|
|
| export function getCliTool(id: string): CliToolEntry | undefined {
|
| return CLI_TOOLS[id];
|
| }
|
|
|
|
|
|
|
|
|
| export const getProviderModelsForMapping = (providers: Array<{
|
| id: string;
|
| isActive: boolean;
|
| testStatus: string;
|
| provider: string;
|
| name: string;
|
| models?: string[];
|
| }>) => {
|
| const result: Array<{ connectionId: string; provider: string; name: string; models: string[] }> =
|
| [];
|
| 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;
|
| };
|
|
|