9router/src/shared/constants/cliTools.js

175 lines
6.1 KiB
JavaScript

// CLI Tools configuration
export const CLI_TOOLS = {
claude: {
id: "claude",
name: "Claude Code",
icon: "terminal",
color: "#D97757",
description: "Anthropic Claude Code CLI",
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",
defaultModels: [
{ id: "opus", name: "Claude Opus", alias: "opus", envKey: "ANTHROPIC_DEFAULT_OPUS_MODEL", defaultValue: "cc/claude-opus-4-5-20251101" },
{ id: "sonnet", name: "Claude Sonnet", alias: "sonnet", envKey: "ANTHROPIC_DEFAULT_SONNET_MODEL", defaultValue: "cc/claude-sonnet-4-5-20250929" },
{ id: "haiku", name: "Claude Haiku", alias: "haiku", envKey: "ANTHROPIC_DEFAULT_HAIKU_MODEL", defaultValue: "cc/claude-haiku-4-5-20251001" },
],
},
codex: {
id: "codex",
name: "OpenAI Codex CLI",
image: "/providers/codex.png",
color: "#10A37F",
description: "OpenAI Codex CLI",
configType: "custom",
},
droid: {
id: "droid",
name: "Factory Droid",
image: "/providers/droid.png",
color: "#00D4FF",
description: "Factory Droid AI Assistant",
configType: "custom",
},
openclaw: {
id: "openclaw",
name: "Open Claw",
image: "/providers/openclaw.png",
color: "#FF6B35",
description: "Open Claw AI Assistant",
configType: "custom",
},
cursor: {
id: "cursor",
name: "Cursor",
image: "/providers/cursor.png",
color: "#000000",
description: "Cursor AI Code Editor",
configType: "guide",
requiresCloud: true,
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",
image: "/providers/cline.png",
color: "#00D1B2",
description: "CLINE AI Assistant",
configType: "guide",
guideSteps: [
{ step: 1, title: "Open Settings", desc: "Go to CLINE Settings panel" },
{ step: 2, title: "Select Provider", desc: "Choose API Provider → Ollama" },
{ step: 3, title: "Base URL", value: "{{baseUrl}}", copyable: true },
{ step: 4, title: "API Key", type: "apiKeySelector" },
{ step: 5, title: "Select Model", type: "modelSelector" },
],
},
roo: {
id: "roo",
name: "Roo",
image: "/providers/roo.png",
color: "#FF6B6B",
description: "Roo AI Assistant",
configType: "guide",
guideSteps: [
{ step: 1, title: "Open Settings", desc: "Go to Roo Settings panel" },
{ step: 2, title: "Select Provider", desc: "Choose API Provider → Ollama" },
{ step: 3, title: "Base URL", value: "{{baseUrl}}", copyable: true },
{ step: 4, title: "API Key", type: "apiKeySelector" },
{ step: 5, title: "Select Model", type: "modelSelector" },
],
},
continue: {
id: "continue",
name: "Continue",
image: "/providers/continue.png",
color: "#7C3AED",
description: "Continue AI Assistant",
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",
image: "/providers/antigravity.png",
color: "#4285F4",
description: "Google Antigravity IDE with MITM",
configType: "mitm",
modelAliases: ["claude-opus-4-6-thinking", "claude-sonnet-4-6-thinking", "gemini-3-pro-high"],
defaultModels: [
{ id: "claude-opus-4-6-thinking", name: "Claude Opus 4.6 Thinking", alias: "claude-opus-4-6-thinking" },
{ id: "claude-sonnet-4-6", name: "Claude Sonnet 4.6", alias: "claude-sonnet-4-6" },
{ 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-pro-high", name: "Gemini 3 Pro High", alias: "gemini-3-pro-high" },
{ id: "gemini-3-flash", name: "Gemini 3 Flash", alias: "gemini-3-flash" },
],
},
// HIDDEN: gemini-cli
// "gemini-cli": {
// id: "gemini-cli",
// name: "Gemini CLI",
// icon: "terminal",
// color: "#4285F4",
// description: "Google Gemini CLI",
// configType: "env",
// envVars: {
// baseUrl: "GEMINI_API_BASE_URL",
// model: "GEMINI_MODEL",
// },
// defaultModels: [
// { id: "gemini-2.5-pro", name: "Gemini 2.5 Pro", alias: "pro" },
// { id: "gemini-2.5-flash", name: "Gemini 2.5 Flash", alias: "flash" },
// ],
// },
};
// 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;
};