Files
CC-Switch/src/config/hermesProviderPresets.ts
T
Cheng Zi Feng 7a8b956253 Update Longcat presets to LongCat-2.0 (#4838)
* Update Longcat presets to LongCat-2.0

* fix(proxy): classify LongCat-2.0 as text-only for media sanitizer

The Longcat presets now use LongCat-2.0, but the known_text_only_model
allowlist still only matched the retired longcat-flash-chat tail. Without
this, images pasted into a text-only LongCat-2.0 session are forwarded
upstream instead of being replaced with the unsupported-image marker,
causing a hard rejection. Add longcat-2.0 (keeping the retired name for
saved configs) and a regression test.

---------

Co-authored-by: chengzifeng <chengzifeng@meituan.com>
Co-authored-by: Jason <farion1231@gmail.com>
2026-07-04 16:38:35 +08:00

1522 lines
43 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Hermes Agent provider presets configuration
* Hermes uses custom_providers array in config.yaml
*/
import type { ProviderCategory } from "../types";
import type { PresetTheme, TemplateValueConfig } from "./claudeProviderPresets";
/**
* Marker field and source values that `hermes_config.rs::get_providers`
* injects onto each settings payload. Kept in sync with the Rust constants
* `PROVIDER_SOURCE_FIELD` / `PROVIDER_SOURCE_CUSTOM_LIST` / `PROVIDER_SOURCE_DICT`.
*/
export const HERMES_PROVIDER_SOURCE_FIELD = "_cc_source";
export const HERMES_PROVIDER_SOURCE_CUSTOM_LIST = "custom_providers";
export const HERMES_PROVIDER_SOURCE_DICT = "providers_dict";
/**
* True when the provider was sourced from Hermes' v12+ `providers:` dict —
* CC Switch renders those read-only and routes edits to Hermes Web UI.
*/
export function isHermesReadOnlyProvider(settingsConfig: unknown): boolean {
if (!settingsConfig || typeof settingsConfig !== "object") {
return false;
}
const marker = (settingsConfig as Record<string, unknown>)[
HERMES_PROVIDER_SOURCE_FIELD
];
return marker === HERMES_PROVIDER_SOURCE_DICT;
}
/**
* A model entry under a Hermes custom_provider.
*
* Serialized to YAML as a dict keyed by `id`:
*
* ```yaml
* models:
* anthropic/claude-opus-4-8:
* context_length: 200000
* ```
*
* Hermes' `_VALID_CUSTOM_PROVIDER_FIELDS` (hermes_cli/config.py) does not include
* `max_tokens` at the per-model level — writing it produces an "unknown field"
* warning on Hermes startup. Max tokens is a per-request parameter, not a
* provider-level config.
*/
export interface HermesModel {
/** Model ID — becomes the YAML key and the value written to top-level model.default. */
id: string;
/** Optional display label (UI only, not serialized to YAML). */
name?: string;
/** Override the auto-detected context window. */
context_length?: number;
}
/**
* Top-level `model:` defaults suggested by a preset.
*
* Written to the YAML `model:` section when the user switches to this provider.
* Per-model `context_length` lives on the individual `HermesModel` entries and
* flows through `custom_providers[].models`, not this object.
*/
export interface HermesSuggestedDefaults {
model: {
/** Model ID for `model.default`. Typically equals `models[0].id`. */
default: string;
/** Value for `model.provider`. Omit to use the custom_provider name. */
provider?: string;
};
}
/** Hermes custom_provider protocol mode. Always written explicitly. */
export type HermesApiMode =
| "chat_completions"
| "anthropic_messages"
| "codex_responses"
| "bedrock_converse";
/** Default mode used when a provider has no stored value yet. */
export const HERMES_DEFAULT_API_MODE: HermesApiMode = "chat_completions";
/** Dropdown options for the API Mode selector. `labelKey` is looked up in i18n. */
export const hermesApiModes: Array<{
value: HermesApiMode;
labelKey: string;
}> = [
{ value: "chat_completions", labelKey: "hermes.form.apiModeChatCompletions" },
{
value: "anthropic_messages",
labelKey: "hermes.form.apiModeAnthropicMessages",
},
{ value: "codex_responses", labelKey: "hermes.form.apiModeCodexResponses" },
{
value: "bedrock_converse",
labelKey: "hermes.form.apiModeBedrockConverse",
},
];
export interface HermesProviderPreset {
name: string;
nameKey?: string;
websiteUrl: string;
apiKeyUrl?: string;
settingsConfig: HermesProviderSettingsConfig;
isOfficial?: boolean;
isPartner?: boolean;
primePartner?: boolean; // 置顶合作伙伴(顶级):徽章显示为心形
partnerPromotionKey?: string;
category?: ProviderCategory;
templateValues?: Record<string, TemplateValueConfig>;
theme?: PresetTheme;
icon?: string;
iconColor?: string;
isCustomTemplate?: boolean;
/** Optional top-level `model:` defaults written on switch. */
suggestedDefaults?: HermesSuggestedDefaults;
}
export interface HermesProviderSettingsConfig {
name: string;
base_url?: string;
api_key?: string;
api_mode?: HermesApiMode;
/** UI-side ordered list; serialized to YAML as a dict keyed by id. */
models?: HermesModel[];
/** Delay in seconds between consecutive requests to this provider. */
rate_limit_delay?: number;
[key: string]: unknown;
}
export const hermesProviderPresets: HermesProviderPreset[] = [
{
name: "Shengsuanyun",
nameKey: "providerForm.presets.shengsuanyun",
websiteUrl: "https://www.shengsuanyun.com/?from=CH_4HHXMRYF",
apiKeyUrl: "https://www.shengsuanyun.com/?from=CH_4HHXMRYF",
settingsConfig: {
name: "shengsuanyun",
base_url: "https://router.shengsuanyun.com/api/v1",
api_key: "",
api_mode: "chat_completions",
models: [{ id: "openai/gpt-5.5", name: "GPT-5.5" }],
},
category: "aggregator",
isPartner: true,
partnerPromotionKey: "shengsuanyun",
icon: "shengsuanyun",
suggestedDefaults: {
model: { default: "openai/gpt-5.5", provider: "shengsuanyun" },
},
},
{
name: "Qiniu",
nameKey: "providerForm.presets.qiniu",
websiteUrl: "https://s.qiniu.com/nMvAvy",
apiKeyUrl: "https://s.qiniu.com/nMvAvy",
settingsConfig: {
name: "qiniu",
base_url: "https://api.qnaigc.com/v1",
api_key: "",
api_mode: "chat_completions",
models: [{ id: "gpt-5.5", name: "GPT-5.5" }],
},
category: "aggregator",
isPartner: true,
partnerPromotionKey: "qiniu",
icon: "qiniu",
suggestedDefaults: {
model: { default: "gpt-5.5", provider: "qiniu" },
},
},
{
name: "FennoAI",
websiteUrl: "https://api.fenno.ai",
apiKeyUrl:
"https://api.fenno.ai/register?redirect=/purchase?tab=subscription%26group=16&aff=P9MR3D3PLCNL",
settingsConfig: {
name: "fenno",
base_url: "https://api.fenno.ai/v1",
api_key: "",
api_mode: "chat_completions",
models: [{ id: "gpt-5.5", name: "GPT-5.5" }],
},
category: "aggregator",
isPartner: true,
partnerPromotionKey: "fenno",
icon: "fenno",
suggestedDefaults: {
model: { default: "gpt-5.5", provider: "fenno" },
},
},
{
name: "ZetaAPI",
websiteUrl: "https://zetaapi.ai",
apiKeyUrl: "https://zetaapi.ai/go/ccs",
settingsConfig: {
name: "zetaapi",
base_url: "https://api.zetaapi.ai/v1",
api_key: "",
api_mode: "chat_completions",
models: [{ id: "gpt-5.5", name: "GPT-5.5" }],
},
category: "aggregator",
isPartner: true,
partnerPromotionKey: "zetaapi",
icon: "zetaapi",
suggestedDefaults: {
model: { default: "gpt-5.5", provider: "zetaapi" },
},
},
{
name: "TeamoRouter",
websiteUrl: "https://teamorouter.com",
apiKeyUrl:
"https://teamorouter.com/?utm_source=cc_switch&utm_medium=referral&utm_campaign=ai_directory",
settingsConfig: {
name: "teamorouter",
base_url: "https://api.teamorouter.com/v1",
api_key: "",
api_mode: "chat_completions",
models: [{ id: "gpt-5.5", name: "GPT-5.5" }],
},
category: "aggregator",
isPartner: true,
partnerPromotionKey: "teamorouter",
icon: "teamorouter",
suggestedDefaults: {
model: { default: "gpt-5.5", provider: "teamorouter" },
},
},
{
name: "Amux",
websiteUrl: "https://amux.ai",
apiKeyUrl: "https://amux.ai",
settingsConfig: {
name: "amux",
base_url: "https://api.amux.ai/v1",
api_key: "",
api_mode: "chat_completions",
models: [{ id: "gpt-5.5", name: "GPT-5.5" }],
},
category: "aggregator",
icon: "amux",
suggestedDefaults: {
model: { default: "gpt-5.5", provider: "amux" },
},
},
{
name: "Code0",
websiteUrl: "https://code0.ai",
apiKeyUrl: "https://code0.ai?source=ccswitch",
settingsConfig: {
name: "code0",
base_url: "https://code0.ai/v1",
api_key: "",
api_mode: "chat_completions",
models: [{ id: "gpt-5.5", name: "GPT-5.5" }],
},
category: "aggregator",
isPartner: true,
partnerPromotionKey: "code0",
icon: "code0",
suggestedDefaults: {
model: { default: "gpt-5.5", provider: "code0" },
},
},
{
name: "NekoCode",
websiteUrl: "https://nekocode.ai",
apiKeyUrl: "https://nekocode.ai?aff=CCSWITCH",
settingsConfig: {
name: "nekocode",
base_url: "https://nekocode.ai/v1",
api_key: "",
api_mode: "chat_completions",
models: [{ id: "gpt-5.5", name: "GPT-5.5" }],
},
category: "aggregator",
isPartner: true,
partnerPromotionKey: "nekocode",
icon: "nekocode",
suggestedDefaults: {
model: { default: "gpt-5.5", provider: "nekocode" },
},
},
{
name: "火山Agentplan",
websiteUrl: "https://www.volcengine.com/product/ark",
apiKeyUrl:
"https://www.volcengine.com/activity/codingplan?ac=MMAP8JTTCAQ2&rc=6J6FV5N2&utm_campaign=hw&utm_content=ccswitch&utm_medium=devrel_tool_web&utm_source=OWO&utm_term=ccswitch",
settingsConfig: {
name: "ark_agentplan",
base_url: "https://ark.cn-beijing.volces.com/api/coding",
api_key: "",
api_mode: "anthropic_messages",
models: [
{
id: "ark-code-latest",
name: "Ark Code Latest",
},
],
},
category: "cn_official",
isPartner: true,
partnerPromotionKey: "volcengine_agentplan",
icon: "huoshan",
iconColor: "#3370FF",
suggestedDefaults: {
model: {
default: "ark-code-latest",
provider: "ark_agentplan",
},
},
},
{
name: "BytePlus",
websiteUrl: "https://www.byteplus.com/en/product/modelark",
apiKeyUrl:
"https://www.byteplus.com/en/product/modelark?utm_campaign=hw&utm_content=ccswitch&utm_medium=devrel_tool_web&utm_source=OWO&utm_term=ccswitch",
settingsConfig: {
name: "byteplus",
base_url: "https://ark.ap-southeast.bytepluses.com/api/coding",
api_key: "",
api_mode: "anthropic_messages",
models: [
{
id: "ark-code-latest",
name: "Ark Code Latest",
},
],
},
category: "cn_official",
isPartner: true,
partnerPromotionKey: "byteplus",
icon: "byteplus",
iconColor: "#3370FF",
suggestedDefaults: {
model: {
default: "ark-code-latest",
provider: "byteplus",
},
},
},
{
name: "DouBaoSeed",
websiteUrl: "https://www.volcengine.com/product/doubao",
apiKeyUrl:
"https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D&utm_campaign=hw&utm_content=ccswitch&utm_medium=devrel_tool_web&utm_source=OWO&utm_term=ccswitch",
settingsConfig: {
name: "doubao_seed",
base_url: "https://ark.cn-beijing.volces.com/api/compatible",
api_key: "",
api_mode: "anthropic_messages",
models: [
{
id: "doubao-seed-2-1-pro-260628",
name: "Doubao Seed 2.1 Pro",
},
],
},
category: "cn_official",
isPartner: true,
partnerPromotionKey: "doubaoseed",
icon: "doubao",
iconColor: "#3370FF",
suggestedDefaults: {
model: {
default: "doubao-seed-2-1-pro-260628",
provider: "doubao_seed",
},
},
},
{
name: "CCSub",
websiteUrl: "https://www.ccsub.net",
apiKeyUrl: "https://www.ccsub.net/register?ref=Y6Z8DXEA",
settingsConfig: {
name: "ccsub",
base_url: "https://www.ccsub.net/v1",
api_key: "",
api_mode: "chat_completions",
models: [
{
id: "gpt-5.5",
name: "GPT-5.5",
context_length: 400000,
},
],
},
category: "aggregator",
isPartner: true,
partnerPromotionKey: "ccsub",
icon: "ccsub",
suggestedDefaults: {
model: { default: "gpt-5.5", provider: "ccsub" },
},
},
{
name: "SubRouter",
websiteUrl: "https://subrouter.ai",
apiKeyUrl: "https://subrouter.ai/register?aff=l3ri",
settingsConfig: {
name: "subrouter",
base_url: "https://subrouter.ai/v1",
api_key: "",
api_mode: "chat_completions",
models: [
{
id: "gpt-5.5",
name: "GPT-5.5",
context_length: 400000,
},
],
},
category: "aggregator",
isPartner: true,
partnerPromotionKey: "subrouter",
icon: "subrouter",
suggestedDefaults: {
model: { default: "gpt-5.5", provider: "subrouter" },
},
},
{
name: "Unity2.ai",
websiteUrl: "https://unity2.ai",
apiKeyUrl: "https://unity2.ai/register?source=ccs",
settingsConfig: {
name: "unity2",
base_url: "https://api.unity2.ai/v1",
api_key: "",
api_mode: "chat_completions",
models: [
{
id: "gpt-5.5",
name: "GPT-5.5",
context_length: 400000,
},
],
},
category: "aggregator",
isPartner: true,
partnerPromotionKey: "unity2",
icon: "unity2",
suggestedDefaults: {
model: { default: "gpt-5.5", provider: "unity2" },
},
},
{
name: "OpenRouter",
nameKey: "providerForm.presets.openrouter",
websiteUrl: "https://openrouter.ai",
apiKeyUrl: "https://openrouter.ai/keys",
settingsConfig: {
name: "openrouter",
base_url: "https://openrouter.ai/api/v1",
api_key: "",
api_mode: "chat_completions",
models: [
{
id: "anthropic/claude-opus-4-8",
name: "Claude Opus 4.8",
context_length: 1000000,
},
{
id: "anthropic/claude-sonnet-5",
name: "Claude Sonnet 5",
context_length: 1000000,
},
{
id: "anthropic/claude-haiku-4-5",
name: "Claude Haiku 4.5",
context_length: 200000,
},
{
id: "openai/gpt-5.5",
name: "GPT-5.5",
context_length: 400000,
},
{
id: "google/gemini-3.5-flash",
name: "Gemini 3.5 Flash",
context_length: 1000000,
},
],
},
category: "aggregator",
icon: "openrouter",
iconColor: "#6366F1",
suggestedDefaults: {
model: { default: "anthropic/claude-opus-4-8", provider: "openrouter" },
},
},
{
name: "DeepSeek",
nameKey: "providerForm.presets.deepseek",
websiteUrl: "https://platform.deepseek.com",
apiKeyUrl: "https://platform.deepseek.com/api_keys",
settingsConfig: {
name: "deepseek",
base_url: "https://api.deepseek.com",
api_key: "",
api_mode: "chat_completions",
models: [
{
id: "deepseek-v4-pro",
name: "DeepSeek V4 Pro",
context_length: 1000000,
},
{
id: "deepseek-v4-flash",
name: "DeepSeek V4 Flash",
context_length: 1000000,
},
],
},
category: "cn_official",
icon: "deepseek",
iconColor: "#4D6BFE",
suggestedDefaults: {
model: { default: "deepseek-v4-flash", provider: "deepseek" },
},
},
{
name: "Together AI",
nameKey: "providerForm.presets.together",
websiteUrl: "https://together.ai",
apiKeyUrl: "https://api.together.ai/settings/api-keys",
settingsConfig: {
name: "together",
base_url: "https://api.together.xyz/v1",
api_key: "",
api_mode: "chat_completions",
models: [
{
id: "Qwen/Qwen3-Coder-480B-A35B-Instruct",
name: "Qwen3 Coder 480B",
context_length: 262144,
},
{
id: "deepseek-ai/DeepSeek-V3.2",
name: "DeepSeek V3.2",
context_length: 64000,
},
{
id: "meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8",
name: "Llama 4 Maverick",
context_length: 131072,
},
],
},
category: "aggregator",
icon: "together",
iconColor: "#0F6FFF",
suggestedDefaults: {
model: {
default: "Qwen/Qwen3-Coder-480B-A35B-Instruct",
provider: "together",
},
},
},
{
name: "Nous Research",
websiteUrl: "https://nousresearch.com",
apiKeyUrl: "https://portal.nousresearch.com/",
settingsConfig: {
name: "nous",
base_url: "https://inference-api.nousresearch.com/v1",
api_key: "",
api_mode: "chat_completions",
models: [
{
id: "Hermes-4-405B",
name: "Hermes 4 405B",
context_length: 131072,
},
{
id: "Hermes-4-70B",
name: "Hermes 4 70B",
context_length: 131072,
},
],
},
isOfficial: true,
category: "official",
icon: "hermes",
iconColor: "#7C3AED",
suggestedDefaults: {
model: { default: "Hermes-4-405B", provider: "nous" },
},
},
// ===== 以下为从 Claude 应用预设同步而来的供应商 =====
// 字段映射:env.ANTHROPIC_BASE_URL → base_urlenv.ANTHROPIC_AUTH_TOKEN → api_key
// apiFormat "anthropic"(默认) → api_mode "anthropic_messages"
// apiFormat "openai_chat" → api_mode "chat_completions"
// ANTHROPIC_MODEL / DEFAULT_HAIKU / SONNET / OPUS_MODEL 去重后塞进 models[]。
{
name: "Zhipu GLM",
websiteUrl: "https://open.bigmodel.cn",
apiKeyUrl: "https://www.bigmodel.cn/claude-code?ic=RRVJPB5SII",
settingsConfig: {
name: "zhipu_glm",
base_url: "https://open.bigmodel.cn/api/coding/paas/v4",
api_key: "",
api_mode: "chat_completions",
models: [{ id: "glm-5.1", name: "GLM-5.1" }],
},
category: "cn_official",
icon: "zhipu",
iconColor: "#0F62FE",
suggestedDefaults: {
model: { default: "glm-5.1", provider: "zhipu_glm" },
},
},
{
name: "Zhipu GLM en",
websiteUrl: "https://z.ai",
apiKeyUrl: "https://z.ai/subscribe?ic=8JVLJQFSKB",
settingsConfig: {
name: "zhipu_glm_en",
base_url: "https://api.z.ai/api/coding/paas/v4",
api_key: "",
api_mode: "chat_completions",
models: [{ id: "glm-5.1", name: "GLM-5.1" }],
},
category: "cn_official",
icon: "zhipu",
iconColor: "#0F62FE",
suggestedDefaults: {
model: { default: "glm-5.1", provider: "zhipu_glm_en" },
},
},
{
name: "Bailian",
websiteUrl: "https://bailian.console.aliyun.com",
settingsConfig: {
name: "bailian",
base_url: "https://dashscope.aliyuncs.com/compatible-mode/v1",
api_key: "",
api_mode: "chat_completions",
models: [
{ id: "qwen3-coder-plus", name: "Qwen3 Coder Plus" },
{ id: "qwen3-max", name: "Qwen3 Max" },
],
},
category: "cn_official",
icon: "bailian",
iconColor: "#624AFF",
suggestedDefaults: {
model: { default: "qwen3-coder-plus", provider: "bailian" },
},
},
{
name: "Bailian For Coding",
websiteUrl: "https://bailian.console.aliyun.com",
settingsConfig: {
name: "bailian_coding",
base_url: "https://coding.dashscope.aliyuncs.com/apps/anthropic",
api_key: "",
api_mode: "anthropic_messages",
models: [
{ id: "qwen3-coder-plus", name: "Qwen3 Coder Plus" },
{ id: "qwen3-max", name: "Qwen3 Max" },
],
},
category: "cn_official",
icon: "bailian",
iconColor: "#624AFF",
suggestedDefaults: {
model: { default: "qwen3-coder-plus", provider: "bailian_coding" },
},
},
{
name: "Kimi",
primePartner: true,
websiteUrl: "https://platform.kimi.com?aff=cc-switch",
settingsConfig: {
name: "kimi",
base_url: "https://api.moonshot.cn/v1",
api_key: "",
api_mode: "chat_completions",
models: [{ id: "kimi-k2.7-code", name: "Kimi K2.7 Code" }],
},
category: "cn_official",
icon: "kimi",
iconColor: "#6366F1",
suggestedDefaults: {
model: { default: "kimi-k2.7-code", provider: "kimi" },
},
},
{
name: "Kimi For Coding",
primePartner: true,
websiteUrl: "https://www.kimi.com/code/?aff=cc-switch",
settingsConfig: {
name: "kimi_coding",
base_url: "https://api.kimi.com/coding/",
api_key: "",
api_mode: "anthropic_messages",
models: [{ id: "kimi-for-coding", name: "Kimi For Coding" }],
},
category: "cn_official",
icon: "kimi",
iconColor: "#6366F1",
suggestedDefaults: {
model: { default: "kimi-for-coding", provider: "kimi_coding" },
},
},
{
name: "StepFun",
websiteUrl: "https://platform.stepfun.ai",
apiKeyUrl: "https://platform.stepfun.ai/interface-key",
settingsConfig: {
name: "stepfun",
base_url: "https://api.stepfun.ai/v1",
api_key: "",
api_mode: "chat_completions",
models: [{ id: "step-3.5-flash", name: "Step 3.5 Flash" }],
},
category: "cn_official",
icon: "stepfun",
iconColor: "#005AFF",
suggestedDefaults: {
model: { default: "step-3.5-flash", provider: "stepfun" },
},
},
{
name: "ModelScope",
websiteUrl: "https://modelscope.cn",
settingsConfig: {
name: "modelscope",
base_url: "https://api-inference.modelscope.cn/v1",
api_key: "",
api_mode: "chat_completions",
models: [{ id: "ZhipuAI/GLM-5.1", name: "ZhipuAI / GLM-5.1" }],
},
category: "aggregator",
icon: "modelscope",
iconColor: "#624AFF",
suggestedDefaults: {
model: { default: "ZhipuAI/GLM-5.1", provider: "modelscope" },
},
},
{
name: "KAT-Coder",
websiteUrl: "https://console.streamlake.ai",
apiKeyUrl: "https://console.streamlake.ai/console/api-key",
settingsConfig: {
name: "kat_coder",
base_url:
"https://vanchin.streamlake.ai/api/gateway/v1/endpoints/${ENDPOINT_ID}/claude-code-proxy",
api_key: "",
api_mode: "anthropic_messages",
models: [
{ id: "KAT-Coder-Pro V1", name: "KAT-Coder Pro V1" },
{ id: "KAT-Coder-Air V1", name: "KAT-Coder Air V1" },
],
},
category: "cn_official",
templateValues: {
ENDPOINT_ID: {
label: "Vanchin Endpoint ID",
placeholder: "ep-xxx-xxx",
defaultValue: "",
editorValue: "",
},
},
icon: "catcoder",
suggestedDefaults: {
model: { default: "KAT-Coder-Pro V1", provider: "kat_coder" },
},
},
{
name: "Longcat",
websiteUrl: "https://longcat.chat/platform",
apiKeyUrl: "https://longcat.chat/platform/api_keys",
settingsConfig: {
name: "longcat",
base_url: "https://api.longcat.chat/openai/v1",
api_key: "",
api_mode: "chat_completions",
models: [{ id: "LongCat-2.0", name: "LongCat 2.0" }],
},
category: "cn_official",
icon: "longcat",
iconColor: "#29E154",
suggestedDefaults: {
model: { default: "LongCat-2.0", provider: "longcat" },
},
},
{
name: "MiniMax",
websiteUrl: "https://platform.minimaxi.com",
apiKeyUrl: "https://platform.minimaxi.com/subscribe/coding-plan",
settingsConfig: {
name: "minimax",
base_url: "https://api.minimaxi.com/v1",
api_key: "",
api_mode: "chat_completions",
models: [{ id: "MiniMax-M2.7", name: "MiniMax M2.7" }],
},
category: "cn_official",
partnerPromotionKey: "minimax_cn",
theme: { backgroundColor: "#f64551", textColor: "#FFFFFF" },
icon: "minimax",
iconColor: "#FF6B6B",
suggestedDefaults: {
model: { default: "MiniMax-M2.7", provider: "minimax" },
},
},
{
name: "MiniMax en",
websiteUrl: "https://platform.minimax.io",
apiKeyUrl: "https://platform.minimax.io/subscribe/coding-plan",
settingsConfig: {
name: "minimax_en",
base_url: "https://api.minimax.io/v1",
api_key: "",
api_mode: "chat_completions",
models: [{ id: "MiniMax-M2.7", name: "MiniMax M2.7" }],
},
category: "cn_official",
partnerPromotionKey: "minimax_en",
theme: { backgroundColor: "#f64551", textColor: "#FFFFFF" },
icon: "minimax",
iconColor: "#FF6B6B",
suggestedDefaults: {
model: { default: "MiniMax-M2.7", provider: "minimax_en" },
},
},
{
name: "BaiLing",
websiteUrl: "https://alipaytbox.yuque.com/sxs0ba/ling/get_started",
settingsConfig: {
name: "bailing",
base_url: "https://api.tbox.cn/api/anthropic",
api_key: "",
api_mode: "anthropic_messages",
models: [{ id: "Ling-2.5-1T", name: "Ling 2.5 1T" }],
},
category: "cn_official",
suggestedDefaults: {
model: { default: "Ling-2.5-1T", provider: "bailing" },
},
},
{
name: "AiHubMix",
websiteUrl: "https://aihubmix.com",
apiKeyUrl: "https://aihubmix.com",
settingsConfig: {
name: "aihubmix",
base_url: "https://aihubmix.com/v1",
api_key: "",
api_mode: "chat_completions",
models: [{ id: "gpt-5.5", name: "GPT-5.5" }],
},
category: "aggregator",
icon: "aihubmix",
iconColor: "#006FFB",
suggestedDefaults: {
model: { default: "gpt-5.5", provider: "aihubmix" },
},
},
{
name: "CherryIN",
websiteUrl: "https://open.cherryin.ai",
apiKeyUrl: "https://open.cherryin.ai/console/token",
settingsConfig: {
name: "cherryin",
base_url: "https://open.cherryin.net",
api_key: "",
api_mode: "anthropic_messages",
models: [
{ id: "anthropic/claude-opus-4.8", name: "Claude Opus 4.8" },
{ id: "anthropic/claude-sonnet-5", name: "Claude Sonnet 5" },
],
},
category: "aggregator",
icon: "cherryin",
suggestedDefaults: {
model: { default: "anthropic/claude-opus-4.8", provider: "cherryin" },
},
},
{
name: "SiliconFlow",
websiteUrl: "https://siliconflow.cn",
apiKeyUrl: "https://cloud.siliconflow.cn/i/YflgU2Ve",
settingsConfig: {
name: "siliconflow",
base_url: "https://api.siliconflow.cn/v1",
api_key: "",
api_mode: "chat_completions",
models: [
{
id: "Pro/MiniMaxAI/MiniMax-M2.7",
name: "Pro / MiniMax M2.7",
},
],
},
category: "aggregator",
isPartner: true,
partnerPromotionKey: "siliconflow",
icon: "siliconflow",
iconColor: "#6E29F6",
suggestedDefaults: {
model: {
default: "Pro/MiniMaxAI/MiniMax-M2.7",
provider: "siliconflow",
},
},
},
{
name: "SiliconFlow en",
websiteUrl: "https://siliconflow.com",
apiKeyUrl: "https://cloud.siliconflow.cn/i/YflgU2Ve",
settingsConfig: {
name: "siliconflow_en",
base_url: "https://api.siliconflow.com/v1",
api_key: "",
api_mode: "chat_completions",
models: [{ id: "MiniMaxAI/MiniMax-M2.7", name: "MiniMax M2.7" }],
},
category: "aggregator",
isPartner: true,
partnerPromotionKey: "siliconflow",
icon: "siliconflow",
iconColor: "#000000",
suggestedDefaults: {
model: {
default: "MiniMaxAI/MiniMax-M2.7",
provider: "siliconflow_en",
},
},
},
{
name: "DMXAPI",
websiteUrl: "https://www.dmxapi.cn",
apiKeyUrl: "https://www.dmxapi.cn",
settingsConfig: {
name: "dmxapi",
base_url: "https://www.dmxapi.cn/v1",
api_key: "",
api_mode: "chat_completions",
models: [{ id: "gpt-5.5", name: "GPT-5.5" }],
},
category: "aggregator",
isPartner: true,
partnerPromotionKey: "dmxapi",
suggestedDefaults: {
model: { default: "gpt-5.5", provider: "dmxapi" },
},
},
{
name: "PackyCode",
websiteUrl: "https://www.packyapi.com",
apiKeyUrl: "https://www.packyapi.com/register?aff=cc-switch",
settingsConfig: {
name: "packycode",
base_url: "https://www.packyapi.com",
api_key: "",
api_mode: "anthropic_messages",
models: [
{ id: "claude-opus-4-8", name: "Claude Opus 4.8" },
{ id: "claude-sonnet-5", name: "Claude Sonnet 5" },
{ id: "claude-haiku-4-5-20251001", name: "Claude Haiku 4.5" },
],
},
category: "third_party",
isPartner: true,
partnerPromotionKey: "packycode",
icon: "packycode",
suggestedDefaults: {
model: { default: "claude-opus-4-8", provider: "packycode" },
},
},
{
name: "APIKEY.FUN",
websiteUrl: "https://apikey.fun",
apiKeyUrl: "https://apikey.fun/register?aff=CCSwitch",
settingsConfig: {
name: "apikeyfun",
base_url: "https://api.apikey.fun",
api_key: "",
api_mode: "anthropic_messages",
models: [
{
id: "claude-opus-4-8",
name: "Claude Opus 4.8",
context_length: 1000000,
},
{
id: "claude-sonnet-5",
name: "Claude Sonnet 5",
context_length: 1000000,
},
{
id: "claude-haiku-4-5",
name: "Claude Haiku 4.5",
context_length: 200000,
},
],
},
category: "third_party",
isPartner: true,
partnerPromotionKey: "apikeyfun",
icon: "apikeyfun",
suggestedDefaults: {
model: { default: "claude-opus-4-8", provider: "apikeyfun" },
},
},
{
name: "APINebula",
websiteUrl: "https://apinebula.com",
apiKeyUrl: "https://apinebula.com/02rw5X",
settingsConfig: {
name: "apinebula",
base_url: "https://apinebula.com/v1",
api_key: "",
api_mode: "chat_completions",
models: [
{
id: "gpt-5.5",
name: "GPT-5.5",
},
],
},
category: "third_party",
isPartner: true,
partnerPromotionKey: "apinebula",
icon: "apinebula",
suggestedDefaults: {
model: { default: "gpt-5.5", provider: "apinebula" },
},
},
{
name: "AtlasCloud",
websiteUrl: "https://www.atlascloud.ai/console/coding-plan",
apiKeyUrl: "https://www.atlascloud.ai/console/coding-plan",
settingsConfig: {
name: "atlascloud",
base_url: "https://api.atlascloud.ai/v1",
api_key: "",
api_mode: "chat_completions",
models: [
{
id: "zai-org/glm-5.1",
name: "GLM 5.1",
},
],
},
category: "aggregator",
isPartner: true,
partnerPromotionKey: "atlascloud",
icon: "atlascloud",
suggestedDefaults: {
model: { default: "zai-org/glm-5.1", provider: "atlascloud" },
},
},
{
name: "SudoCode",
websiteUrl: "https://sudocode.us",
apiKeyUrl: "https://sudocode.us",
settingsConfig: {
name: "sudocode",
base_url: "https://sudocode.us/v1",
api_key: "",
api_mode: "codex_responses",
models: [
{
id: "gpt-5.5",
name: "GPT-5.5",
},
],
},
category: "third_party",
icon: "sudocode",
suggestedDefaults: {
model: { default: "gpt-5.5", provider: "sudocode" },
},
},
{
name: "Cubence",
websiteUrl: "https://cubence.com",
apiKeyUrl: "https://cubence.com/signup?code=CCSWITCH&source=ccs",
settingsConfig: {
name: "cubence",
base_url: "https://api.cubence.com",
api_key: "",
api_mode: "anthropic_messages",
models: [
{ id: "claude-opus-4-8", name: "Claude Opus 4.8" },
{ id: "claude-sonnet-5", name: "Claude Sonnet 5" },
{ id: "claude-haiku-4-5-20251001", name: "Claude Haiku 4.5" },
],
},
category: "third_party",
isPartner: true,
partnerPromotionKey: "cubence",
icon: "cubence",
iconColor: "#000000",
suggestedDefaults: {
model: { default: "claude-opus-4-8", provider: "cubence" },
},
},
{
name: "ClaudeCN",
websiteUrl: "https://claudecn.top",
apiKeyUrl: "https://claudecn.top/register?aff=ccswitch",
settingsConfig: {
name: "claudecn",
base_url: "https://claudecn.top",
api_key: "",
api_mode: "anthropic_messages",
models: [
{ id: "claude-opus-4-8", name: "Claude Opus 4.8" },
{ id: "claude-sonnet-5", name: "Claude Sonnet 5" },
{ id: "claude-haiku-4-5", name: "Claude Haiku 4.5" },
],
},
category: "third_party",
isPartner: true,
partnerPromotionKey: "claudecn",
icon: "claudecn",
templateValues: {
apiKey: {
label: "API Key",
placeholder: "",
editorValue: "",
},
},
suggestedDefaults: {
model: { default: "claude-sonnet-5", provider: "claudecn" },
},
},
{
name: "RunAPI",
websiteUrl: "https://runapi.co",
apiKeyUrl: "https://runapi.co",
settingsConfig: {
name: "runapi",
base_url: "https://runapi.co",
api_key: "",
api_mode: "anthropic_messages",
models: [
{ id: "claude-opus-4-8", name: "Claude Opus 4.8" },
{ id: "claude-sonnet-5", name: "Claude Sonnet 5" },
{ id: "claude-haiku-4-5", name: "Claude Haiku 4.5" },
],
},
category: "aggregator",
isPartner: true,
partnerPromotionKey: "runapi",
icon: "runapi",
templateValues: {
apiKey: {
label: "API Key",
placeholder: "",
editorValue: "",
},
},
suggestedDefaults: {
model: { default: "claude-sonnet-5", provider: "runapi" },
},
},
{
name: "AIGoCode",
websiteUrl: "https://aigocode.com",
apiKeyUrl: "https://aigocode.com/invite/CC-SWITCH",
settingsConfig: {
name: "aigocode",
base_url: "https://api.aigocode.com",
api_key: "",
api_mode: "anthropic_messages",
models: [
{ id: "claude-opus-4-8", name: "Claude Opus 4.8" },
{ id: "claude-sonnet-5", name: "Claude Sonnet 5" },
{ id: "claude-haiku-4-5-20251001", name: "Claude Haiku 4.5" },
],
},
category: "third_party",
isPartner: true,
partnerPromotionKey: "aigocode",
icon: "aigocode",
iconColor: "#5B7FFF",
suggestedDefaults: {
model: { default: "claude-opus-4-8", provider: "aigocode" },
},
},
{
name: "RightCode",
websiteUrl: "https://www.right.codes",
apiKeyUrl: "https://www.right.codes/register?aff=CCSWITCH",
settingsConfig: {
name: "rightcode",
base_url: "https://www.right.codes/claude",
api_key: "",
api_mode: "anthropic_messages",
models: [
{ id: "claude-opus-4-8", name: "Claude Opus 4.8" },
{ id: "claude-sonnet-5", name: "Claude Sonnet 5" },
{ id: "claude-haiku-4-5-20251001", name: "Claude Haiku 4.5" },
],
},
category: "third_party",
isPartner: true,
partnerPromotionKey: "rightcode",
icon: "rc",
iconColor: "#E96B2C",
suggestedDefaults: {
model: { default: "claude-opus-4-8", provider: "rightcode" },
},
},
{
name: "AICodeMirror",
websiteUrl: "https://www.aicodemirror.com",
apiKeyUrl: "https://www.aicodemirror.com/register?invitecode=9915W3",
settingsConfig: {
name: "aicodemirror",
base_url: "https://api.aicodemirror.com/api/claudecode",
api_key: "",
api_mode: "anthropic_messages",
models: [
{ id: "claude-opus-4-8", name: "Claude Opus 4.8" },
{ id: "claude-sonnet-5", name: "Claude Sonnet 5" },
{ id: "claude-haiku-4-5-20251001", name: "Claude Haiku 4.5" },
],
},
category: "third_party",
isPartner: true,
partnerPromotionKey: "aicodemirror",
icon: "aicodemirror",
iconColor: "#000000",
suggestedDefaults: {
model: { default: "claude-opus-4-8", provider: "aicodemirror" },
},
},
{
name: "CrazyRouter",
websiteUrl: "https://www.crazyrouter.com",
apiKeyUrl: "https://www.crazyrouter.com/register?aff=OZcm&ref=cc-switch",
settingsConfig: {
name: "crazyrouter",
base_url: "https://cn.crazyrouter.com",
api_key: "",
api_mode: "anthropic_messages",
models: [
{ id: "claude-opus-4-8", name: "Claude Opus 4.8" },
{ id: "claude-sonnet-5", name: "Claude Sonnet 5" },
{ id: "claude-haiku-4-5-20251001", name: "Claude Haiku 4.5" },
],
},
category: "third_party",
isPartner: true,
partnerPromotionKey: "crazyrouter",
icon: "crazyrouter",
iconColor: "#000000",
suggestedDefaults: {
model: { default: "claude-opus-4-8", provider: "crazyrouter" },
},
},
{
name: "SSSAiCode",
websiteUrl: "https://sssaicodeapi.com",
apiKeyUrl: "https://sssaicodeapi.com/register?ref=DCP0SM",
settingsConfig: {
name: "sssaicode",
base_url: "https://node-hk.sssaicodeapi.com/api",
api_key: "",
api_mode: "anthropic_messages",
models: [
{ id: "claude-opus-4-8", name: "Claude Opus 4.8" },
{ id: "claude-sonnet-5", name: "Claude Sonnet 5" },
{ id: "claude-haiku-4-5-20251001", name: "Claude Haiku 4.5" },
],
},
category: "third_party",
isPartner: true,
partnerPromotionKey: "sssaicode",
icon: "sssaicode",
iconColor: "#000000",
suggestedDefaults: {
model: { default: "claude-opus-4-8", provider: "sssaicode" },
},
},
{
name: "Compshare",
nameKey: "providerForm.presets.ucloud",
websiteUrl: "https://www.compshare.cn",
apiKeyUrl:
"https://www.compshare.cn/coding-plan?ytag=GPU_YY_YX_git_cc-switch",
settingsConfig: {
name: "compshare",
base_url: "https://api.modelverse.cn/v1",
api_key: "",
api_mode: "chat_completions",
models: [{ id: "gpt-5.5", name: "GPT-5.5" }],
},
category: "aggregator",
isPartner: true,
partnerPromotionKey: "ucloud",
icon: "ucloud",
iconColor: "#000000",
suggestedDefaults: {
model: { default: "gpt-5.5", provider: "compshare" },
},
},
{
name: "Compshare Coding Plan",
nameKey: "providerForm.presets.ucloudCoding",
websiteUrl: "https://www.compshare.cn",
apiKeyUrl:
"https://www.compshare.cn/coding-plan?ytag=GPU_YY_YX_git_cc-switch",
settingsConfig: {
name: "compshare_coding",
base_url: "https://cp.compshare.cn/v1",
api_key: "",
api_mode: "chat_completions",
models: [{ id: "gpt-5.5", name: "GPT-5.5" }],
},
category: "aggregator",
isPartner: true,
partnerPromotionKey: "ucloud",
icon: "ucloud",
iconColor: "#000000",
suggestedDefaults: {
model: { default: "gpt-5.5", provider: "compshare_coding" },
},
},
{
name: "Micu",
websiteUrl: "https://www.micuapi.ai",
apiKeyUrl: "https://www.micuapi.ai/register?aff=aOYQ",
settingsConfig: {
name: "micu",
base_url: "https://www.micuapi.ai",
api_key: "",
api_mode: "anthropic_messages",
models: [
{ id: "claude-opus-4-8", name: "Claude Opus 4.8" },
{ id: "claude-sonnet-5", name: "Claude Sonnet 5" },
{ id: "claude-haiku-4-5-20251001", name: "Claude Haiku 4.5" },
],
},
category: "third_party",
isPartner: true,
partnerPromotionKey: "micu",
icon: "micu",
iconColor: "#000000",
suggestedDefaults: {
model: { default: "claude-opus-4-8", provider: "micu" },
},
},
{
name: "ETok.ai",
websiteUrl: "https://etok.ai",
apiKeyUrl: "https://etok.ai",
settingsConfig: {
name: "etok",
base_url: "https://api.etok.ai",
api_key: "",
api_mode: "anthropic_messages",
models: [
{ id: "claude-opus-4-8", name: "Claude Opus 4.8" },
{ id: "claude-sonnet-5", name: "Claude Sonnet 5" },
{ id: "claude-haiku-4-5-20251001", name: "Claude Haiku 4.5" },
],
},
category: "third_party",
isPartner: true,
partnerPromotionKey: "etok",
icon: "etok",
iconColor: "#000000",
suggestedDefaults: {
model: { default: "claude-opus-4-8", provider: "etok" },
},
},
{
name: "E-FlowCode",
websiteUrl: "https://e-flowcode.cc",
apiKeyUrl: "https://e-flowcode.cc",
settingsConfig: {
name: "eflowcode",
base_url: "https://e-flowcode.cc",
api_key: "",
api_mode: "anthropic_messages",
models: [
{ id: "claude-opus-4-8", name: "Claude Opus 4.8" },
{ id: "claude-sonnet-5", name: "Claude Sonnet 5" },
{ id: "claude-haiku-4-5-20251001", name: "Claude Haiku 4.5" },
],
},
category: "third_party",
icon: "eflowcode",
iconColor: "#000000",
suggestedDefaults: {
model: { default: "claude-opus-4-8", provider: "eflowcode" },
},
},
{
name: "TheRouter",
websiteUrl: "https://therouter.ai",
apiKeyUrl: "https://dashboard.therouter.ai",
settingsConfig: {
name: "therouter",
base_url: "https://api.therouter.ai/v1",
api_key: "",
api_mode: "chat_completions",
models: [
{ id: "openai/gpt-5.5", name: "GPT-5.5" },
{ id: "openai/gpt-5.4-mini", name: "GPT-5.4 mini" },
{ id: "openai/gpt-5.4-nano", name: "GPT-5.4 nano" },
],
},
category: "aggregator",
suggestedDefaults: {
model: {
default: "openai/gpt-5.5",
provider: "therouter",
},
},
},
{
name: "Novita AI",
websiteUrl: "https://novita.ai",
apiKeyUrl: "https://novita.ai",
settingsConfig: {
name: "novita",
base_url: "https://api.novita.ai/v3/openai",
api_key: "",
api_mode: "chat_completions",
models: [{ id: "zai-org/glm-5.1", name: "Zai-Org / GLM-5.1" }],
},
category: "aggregator",
icon: "novita",
iconColor: "#000000",
suggestedDefaults: {
model: { default: "zai-org/glm-5.1", provider: "novita" },
},
},
{
name: "Nvidia",
websiteUrl: "https://build.nvidia.com",
apiKeyUrl: "https://build.nvidia.com/settings/api-keys",
settingsConfig: {
name: "nvidia",
base_url: "https://integrate.api.nvidia.com",
api_key: "",
api_mode: "chat_completions",
models: [{ id: "moonshotai/kimi-k2.5", name: "Moonshot Kimi K2.5" }],
},
category: "aggregator",
icon: "nvidia",
iconColor: "#000000",
suggestedDefaults: {
model: { default: "moonshotai/kimi-k2.5", provider: "nvidia" },
},
},
{
name: "PIPELLM",
websiteUrl: "https://code.pipellm.ai",
apiKeyUrl: "https://code.pipellm.ai/login?ref=uvw650za",
settingsConfig: {
name: "pipellm",
base_url: "https://cc-api.pipellm.ai",
api_key: "",
api_mode: "anthropic_messages",
models: [
{ id: "claude-opus-4-8", name: "Claude Opus 4.8" },
{ id: "claude-sonnet-5", name: "Claude Sonnet 5" },
{
id: "claude-haiku-4-5-20251001",
name: "Claude Haiku 4.5",
},
],
},
category: "aggregator",
icon: "pipellm",
suggestedDefaults: {
model: { default: "claude-opus-4-8", provider: "pipellm" },
},
},
{
name: "Xiaomi MiMo",
websiteUrl: "https://platform.xiaomimimo.com",
apiKeyUrl: "https://platform.xiaomimimo.com/#/console/api-keys",
settingsConfig: {
name: "xiaomi_mimo",
base_url: "https://api.xiaomimimo.com/v1",
api_key: "",
api_mode: "chat_completions",
models: [{ id: "mimo-v2.5-pro", name: "MiMo v2.5 Pro" }],
},
category: "cn_official",
icon: "xiaomimimo",
iconColor: "#000000",
suggestedDefaults: {
model: { default: "mimo-v2.5-pro", provider: "xiaomi_mimo" },
},
},
{
name: "Xiaomi MiMo Token Plan (China)",
websiteUrl: "https://platform.xiaomimimo.com/#/token-plan",
apiKeyUrl: "https://platform.xiaomimimo.com/#/console/plan-manage",
settingsConfig: {
name: "xiaomi_mimo_token_plan",
base_url: "https://token-plan-cn.xiaomimimo.com/v1",
api_key: "",
api_mode: "chat_completions",
models: [
{ id: "mimo-v2.5-pro", name: "MiMo v2.5 Pro" },
{ id: "mimo-v2.5", name: "MiMo v2.5" },
],
},
category: "cn_official",
icon: "xiaomimimo",
iconColor: "#000000",
suggestedDefaults: {
model: { default: "mimo-v2.5-pro", provider: "xiaomi_mimo_token_plan" },
},
},
];