mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-07-24 12:44:18 +08:00
feat(providers): group presets into sponsors and non-sponsors
- Original sort mode now shows official > prime partner > sponsors (preset file order, aligned with the README sponsor table) > non-sponsors sorted by display name - Physically reorder sponsor entries in all 8 preset files to match the README sponsor table order; add group marker comments - Drop stale section comments in openclaw/hermes preset files - Update ProviderPresetSelector tests for the new ordering
This commit is contained in:
@@ -87,10 +87,16 @@ export function sortPresetEntries(
|
||||
sortMode: PresetSortMode,
|
||||
t: PresetTranslator,
|
||||
): PresetEntry[] {
|
||||
const byDisplayName = (a: PresetEntry, b: PresetEntry) =>
|
||||
getPresetDisplayName(a.preset, t).localeCompare(
|
||||
getPresetDisplayName(b.preset, t),
|
||||
);
|
||||
|
||||
if (sortMode === PresetSortMode.Original) {
|
||||
// 置顶优先级:官方分类 > 尊享合作伙伴(Kimi)> 其余原顺序。
|
||||
// 用分区拼接而非排序,确保每组内部各自的相对顺序都不变;
|
||||
// 排他条件保证「既是官方又是 prime」的预设只归入官方组、不被重复。
|
||||
// 置顶优先级:官方分类 > 尊享合作伙伴(Kimi)> 其余赞助商 > 非赞助商。
|
||||
// 前三组用分区拼接而非排序,保持各自在预设文件里的相对顺序
|
||||
// (赞助商的文件顺序与 README 赞助商表对齐);非赞助商按显示名排序。
|
||||
// 排他条件保证同时命中多组的预设只归入最前面的组、不被重复。
|
||||
const official = entries.filter(
|
||||
(entry) => entry.preset.category === "official",
|
||||
);
|
||||
@@ -98,18 +104,24 @@ export function sortPresetEntries(
|
||||
(entry) =>
|
||||
entry.preset.category !== "official" && entry.preset.primePartner,
|
||||
);
|
||||
const rest = entries.filter(
|
||||
const partner = entries.filter(
|
||||
(entry) =>
|
||||
entry.preset.category !== "official" && !entry.preset.primePartner,
|
||||
entry.preset.category !== "official" &&
|
||||
!entry.preset.primePartner &&
|
||||
entry.preset.isPartner,
|
||||
);
|
||||
return [...official, ...prime, ...rest];
|
||||
const rest = entries
|
||||
.filter(
|
||||
(entry) =>
|
||||
entry.preset.category !== "official" &&
|
||||
!entry.preset.primePartner &&
|
||||
!entry.preset.isPartner,
|
||||
)
|
||||
.sort(byDisplayName);
|
||||
return [...official, ...prime, ...partner, ...rest];
|
||||
}
|
||||
|
||||
return [...entries].sort((a, b) =>
|
||||
getPresetDisplayName(a.preset, t).localeCompare(
|
||||
getPresetDisplayName(b.preset, t),
|
||||
),
|
||||
);
|
||||
return [...entries].sort(byDisplayName);
|
||||
}
|
||||
|
||||
export interface PresetVisibilityOptions {
|
||||
|
||||
@@ -153,6 +153,150 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
|
||||
icon: "anthropic",
|
||||
iconColor: "#D4915D",
|
||||
},
|
||||
// ===== 赞助商预设:文件顺序 = 应用内展示顺序,与 README 赞助商表对齐 =====
|
||||
{
|
||||
name: "Kimi",
|
||||
primePartner: true,
|
||||
websiteUrl: "https://platform.kimi.com?aff=cc-switch",
|
||||
category: "cn_official",
|
||||
baseUrl: "https://api.moonshot.cn/anthropic",
|
||||
mode: "proxy",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: brandedRoutes(
|
||||
"kimi-k2.7-code",
|
||||
"kimi-k2.7-code",
|
||||
"kimi-k2.7-code",
|
||||
),
|
||||
icon: "kimi",
|
||||
iconColor: "#6366F1",
|
||||
},
|
||||
{
|
||||
name: "Kimi For Coding",
|
||||
primePartner: true,
|
||||
websiteUrl: "https://www.kimi.com/code/?aff=cc-switch",
|
||||
category: "cn_official",
|
||||
baseUrl: "https://api.kimi.com/coding/",
|
||||
mode: "proxy",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
icon: "kimi",
|
||||
iconColor: "#6366F1",
|
||||
},
|
||||
{
|
||||
name: "PackyCode",
|
||||
websiteUrl: "https://www.packyapi.com",
|
||||
apiKeyUrl: "https://www.packyapi.com/register?aff=cc-switch",
|
||||
category: "third_party",
|
||||
baseUrl: "https://www.packyapi.com",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: [
|
||||
"https://www.packyapi.com",
|
||||
"https://api-slb.packyapi.com",
|
||||
],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "packycode",
|
||||
icon: "packycode",
|
||||
},
|
||||
{
|
||||
name: "ZetaAPI",
|
||||
websiteUrl: "https://zetaapi.ai",
|
||||
apiKeyUrl: "https://zetaapi.ai/go/u117",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://api.zetaapi.ai",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "zetaapi",
|
||||
icon: "zetaapi",
|
||||
},
|
||||
{
|
||||
name: "APINebula",
|
||||
websiteUrl: "https://apinebula.com",
|
||||
apiKeyUrl: "https://apinebula.com/VjM74M",
|
||||
category: "third_party",
|
||||
baseUrl: "https://apinebula.com",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: ["https://apinebula.com"],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "apinebula",
|
||||
icon: "apinebula",
|
||||
},
|
||||
{
|
||||
name: "AICodeMirror",
|
||||
websiteUrl: "https://www.aicodemirror.com",
|
||||
apiKeyUrl: "https://www.aicodemirror.com/register?invitecode=9915W3",
|
||||
category: "third_party",
|
||||
baseUrl: "https://api.aicodemirror.com/api/claudecode",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: [
|
||||
"https://api.aicodemirror.com/api/claudecode",
|
||||
"https://api.claudecode.net.cn/api/claudecode",
|
||||
],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "aicodemirror",
|
||||
icon: "aicodemirror",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "PatewayAI",
|
||||
websiteUrl: "https://pateway.ai",
|
||||
apiKeyUrl: "https://pateway.ai/?ch=etzpm8&aff=WB6M6F67#/",
|
||||
category: "third_party",
|
||||
baseUrl: "https://api.pateway.ai",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "patewayai",
|
||||
icon: "pateway",
|
||||
},
|
||||
{
|
||||
name: "FennoAI",
|
||||
websiteUrl: "https://api.fenno.ai",
|
||||
apiKeyUrl:
|
||||
"https://api.fenno.ai/register?redirect=/purchase?tab=subscription%26group=16&aff=P9MR3D3PLCNL",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://api.fenno.ai",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "fenno",
|
||||
icon: "fenno",
|
||||
},
|
||||
{
|
||||
name: "RunAPI",
|
||||
websiteUrl: "https://runapi.co",
|
||||
apiKeyUrl: "https://runapi.co/register?aff=iOKB",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://runapi.co",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "runapi",
|
||||
icon: "runapi",
|
||||
},
|
||||
{
|
||||
name: "Unity2.ai",
|
||||
websiteUrl: "https://unity2.ai",
|
||||
apiKeyUrl: "https://unity2.ai/register?source=ccs",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://api.unity2.ai",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(true),
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "unity2",
|
||||
icon: "unity2",
|
||||
},
|
||||
{
|
||||
name: "Shengsuanyun",
|
||||
nameKey: "providerForm.presets.shengsuanyun",
|
||||
@@ -172,59 +316,72 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
|
||||
icon: "shengsuanyun",
|
||||
},
|
||||
{
|
||||
name: "PatewayAI",
|
||||
websiteUrl: "https://pateway.ai",
|
||||
apiKeyUrl: "https://pateway.ai/?ch=etzpm8&aff=WB6M6F67#/",
|
||||
name: "AIGoCode",
|
||||
websiteUrl: "https://aigocode.com",
|
||||
apiKeyUrl: "https://aigocode.com/invite/CC-SWITCH",
|
||||
category: "third_party",
|
||||
baseUrl: "https://api.pateway.ai",
|
||||
baseUrl: "https://api.aigocode.com",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: ["https://api.aigocode.com"],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "patewayai",
|
||||
icon: "pateway",
|
||||
partnerPromotionKey: "aigocode",
|
||||
icon: "aigocode",
|
||||
iconColor: "#5B7FFF",
|
||||
},
|
||||
{
|
||||
name: "Qiniu",
|
||||
nameKey: "providerForm.presets.qiniu",
|
||||
websiteUrl: "https://s.qiniu.com/nMvAvy",
|
||||
apiKeyUrl: "https://s.qiniu.com/nMvAvy",
|
||||
name: "SubRouter",
|
||||
websiteUrl: "https://subrouter.ai",
|
||||
apiKeyUrl: "https://subrouter.ai/register?aff=l3ri",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://api.qnaigc.com",
|
||||
baseUrl: "https://subrouter.ai",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: ["https://api.qnaigc.com", "https://api.modelink.ai"],
|
||||
modelRoutes: passthroughRoutes(true),
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "qiniu",
|
||||
icon: "qiniu",
|
||||
partnerPromotionKey: "subrouter",
|
||||
icon: "subrouter",
|
||||
},
|
||||
{
|
||||
name: "FennoAI",
|
||||
websiteUrl: "https://api.fenno.ai",
|
||||
apiKeyUrl:
|
||||
"https://api.fenno.ai/register?redirect=/purchase?tab=subscription%26group=16&aff=P9MR3D3PLCNL",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://api.fenno.ai",
|
||||
name: "APIKEY.FUN",
|
||||
websiteUrl: "https://apikey.fun",
|
||||
apiKeyUrl: "https://apikey.fun/register?aff=CCSwitch",
|
||||
category: "third_party",
|
||||
baseUrl: "https://api.apikey.fun",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: ["https://api.apikey.fun", "https://slb.apikey.fun"],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "fenno",
|
||||
icon: "fenno",
|
||||
partnerPromotionKey: "apikeyfun",
|
||||
icon: "apikeyfun",
|
||||
},
|
||||
{
|
||||
name: "ZetaAPI",
|
||||
websiteUrl: "https://zetaapi.ai",
|
||||
apiKeyUrl: "https://zetaapi.ai/go/u117",
|
||||
name: "ClaudeAPI",
|
||||
websiteUrl: "https://claudeapi.com",
|
||||
apiKeyUrl: "https://console.claudeapi.com/register?aff=pCLD",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://api.zetaapi.ai",
|
||||
baseUrl: "https://gw.claudeapi.com",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "zetaapi",
|
||||
icon: "zetaapi",
|
||||
partnerPromotionKey: "claudeapi",
|
||||
icon: "claudeapi",
|
||||
},
|
||||
{
|
||||
name: "Code0",
|
||||
websiteUrl: "https://code0.ai",
|
||||
apiKeyUrl: "https://code0.ai/agent/register/B2XHxGjGmRvqgznY",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://code0.ai",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "code0",
|
||||
icon: "code0",
|
||||
},
|
||||
{
|
||||
name: "TeamoRouter",
|
||||
@@ -241,15 +398,17 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
|
||||
icon: "teamorouter",
|
||||
},
|
||||
{
|
||||
name: "Amux",
|
||||
websiteUrl: "https://amux.ai",
|
||||
apiKeyUrl: "https://amux.ai",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://api.amux.ai",
|
||||
name: "ClaudeCN",
|
||||
websiteUrl: "https://claudecn.top",
|
||||
apiKeyUrl: "https://claudecn.ai/register?aff=HEL9",
|
||||
category: "third_party",
|
||||
baseUrl: "https://claudecn.top",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
icon: "amux",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "claudecn",
|
||||
icon: "claudecn",
|
||||
},
|
||||
{
|
||||
name: "火山Agentplan",
|
||||
@@ -311,6 +470,103 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
|
||||
icon: "doubao",
|
||||
iconColor: "#3370FF",
|
||||
},
|
||||
{
|
||||
name: "SiliconFlow",
|
||||
websiteUrl: "https://siliconflow.cn",
|
||||
apiKeyUrl: "https://cloud.siliconflow.cn/i/YflgU2Ve",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://api.siliconflow.cn",
|
||||
mode: "proxy",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: brandedRoutes(
|
||||
"Pro/MiniMaxAI/MiniMax-M2.7",
|
||||
"Pro/MiniMaxAI/MiniMax-M2.7",
|
||||
"Pro/MiniMaxAI/MiniMax-M2.7",
|
||||
),
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "siliconflow",
|
||||
icon: "siliconflow",
|
||||
iconColor: "#6E29F6",
|
||||
},
|
||||
{
|
||||
name: "SiliconFlow en",
|
||||
websiteUrl: "https://siliconflow.com",
|
||||
apiKeyUrl: "https://cloud.siliconflow.cn/i/YflgU2Ve",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://api.siliconflow.com",
|
||||
mode: "proxy",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: brandedRoutes(
|
||||
"MiniMaxAI/MiniMax-M2.7",
|
||||
"MiniMaxAI/MiniMax-M2.7",
|
||||
"MiniMaxAI/MiniMax-M2.7",
|
||||
),
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "siliconflow",
|
||||
icon: "siliconflow",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "NekoCode",
|
||||
websiteUrl: "https://nekocode.ai",
|
||||
apiKeyUrl: "https://nekocode.ai?aff=CCSWITCH",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://nekocode.ai",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "nekocode",
|
||||
icon: "nekocode",
|
||||
},
|
||||
{
|
||||
name: "AtlasCloud",
|
||||
websiteUrl: "https://www.atlascloud.ai/console/coding-plan",
|
||||
apiKeyUrl: "https://www.atlascloud.ai/console/coding-plan",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://api.atlascloud.ai",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: ["https://api.atlascloud.ai"],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "atlascloud",
|
||||
icon: "atlascloud",
|
||||
},
|
||||
{
|
||||
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",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://api.modelverse.cn",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: ["https://api.modelverse.cn"],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "ucloud",
|
||||
icon: "ucloud",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
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",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://cp.compshare.cn",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: ["https://cp.compshare.cn"],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "ucloud",
|
||||
icon: "ucloud",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "CCSub",
|
||||
websiteUrl: "https://www.ccsub.net",
|
||||
@@ -325,30 +581,169 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
|
||||
icon: "ccsub",
|
||||
},
|
||||
{
|
||||
name: "SubRouter",
|
||||
websiteUrl: "https://subrouter.ai",
|
||||
apiKeyUrl: "https://subrouter.ai/register?aff=l3ri",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://subrouter.ai",
|
||||
name: "SSSAiCode",
|
||||
websiteUrl: "https://sssaicodeapi.com",
|
||||
apiKeyUrl: "https://sssaicodeapi.com/register?ref=DCP0SM",
|
||||
category: "third_party",
|
||||
baseUrl: "https://node-hk.sssaicodeapi.com/api",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(true),
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: [
|
||||
"https://node-hk.sssaicodeapi.com/api",
|
||||
"https://node-hk.sssaiapi.com/api",
|
||||
"https://node-cf.sssaicodeapi.com/api",
|
||||
],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "subrouter",
|
||||
icon: "subrouter",
|
||||
partnerPromotionKey: "sssaicode",
|
||||
icon: "sssaicode",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "Unity2.ai",
|
||||
websiteUrl: "https://unity2.ai",
|
||||
apiKeyUrl: "https://unity2.ai/register?source=ccs",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://api.unity2.ai",
|
||||
name: "Micu",
|
||||
websiteUrl: "https://www.micuapi.ai",
|
||||
apiKeyUrl: "https://www.micuapi.ai/register?aff=aOYQ",
|
||||
category: "third_party",
|
||||
baseUrl: "https://www.micuapi.ai",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(true),
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: ["https://www.micuapi.ai"],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "unity2",
|
||||
icon: "unity2",
|
||||
partnerPromotionKey: "micu",
|
||||
icon: "micu",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "RightCode",
|
||||
websiteUrl: "https://www.right.codes",
|
||||
apiKeyUrl: "https://www.right.codes/register?aff=CCSWITCH",
|
||||
category: "third_party",
|
||||
baseUrl: "https://www.right.codes/claude",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "rightcode",
|
||||
icon: "rc",
|
||||
iconColor: "#E96B2C",
|
||||
},
|
||||
{
|
||||
name: "ETok.ai",
|
||||
websiteUrl: "https://etok.ai",
|
||||
apiKeyUrl: "https://etok.ai",
|
||||
category: "third_party",
|
||||
baseUrl: "https://api.etok.ai",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "etok",
|
||||
icon: "etok",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "Cubence",
|
||||
websiteUrl: "https://cubence.com",
|
||||
apiKeyUrl: "https://cubence.com/signup?code=CCSWITCH&source=ccs",
|
||||
category: "third_party",
|
||||
baseUrl: "https://api.cubence.com",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: [
|
||||
"https://api.cubence.com",
|
||||
"https://api-cf.cubence.com",
|
||||
"https://api-dmit.cubence.com",
|
||||
"https://api-bwg.cubence.com",
|
||||
],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "cubence",
|
||||
icon: "cubence",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "CrazyRouter",
|
||||
websiteUrl: "https://www.crazyrouter.com",
|
||||
apiKeyUrl: "https://www.crazyrouter.com/register?aff=OZcm&ref=cc-switch",
|
||||
category: "third_party",
|
||||
baseUrl: "https://cn.crazyrouter.com",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: ["https://cn.crazyrouter.com"],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "crazyrouter",
|
||||
icon: "crazyrouter",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "DMXAPI",
|
||||
websiteUrl: "https://www.dmxapi.cn",
|
||||
apiKeyUrl: "https://www.dmxapi.cn",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://www.dmxapi.cn",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: ["https://www.dmxapi.cn", "https://api.dmxapi.cn"],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "dmxapi",
|
||||
},
|
||||
{
|
||||
name: "Qiniu",
|
||||
nameKey: "providerForm.presets.qiniu",
|
||||
websiteUrl: "https://s.qiniu.com/nMvAvy",
|
||||
apiKeyUrl: "https://s.qiniu.com/nMvAvy",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://api.qnaigc.com",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: ["https://api.qnaigc.com", "https://api.modelink.ai"],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "qiniu",
|
||||
icon: "qiniu",
|
||||
},
|
||||
{
|
||||
name: "SudoCode.chat",
|
||||
websiteUrl: "https://sudocode.chat",
|
||||
apiKeyUrl:
|
||||
"https://sudocode.chat/register?utm_source=ccswitch&utm_medium=partner",
|
||||
category: "third_party",
|
||||
baseUrl: "https://api.sudocode.chat",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: ["https://api.sudocode.chat"],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "sudocode",
|
||||
icon: "sudocode",
|
||||
},
|
||||
{
|
||||
name: "SudoCode.us",
|
||||
websiteUrl: "https://sudocode.us",
|
||||
apiKeyUrl: "https://sudocode.us",
|
||||
category: "third_party",
|
||||
baseUrl: "https://sudocode.us",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: ["https://sudocode.us", "https://sudocode.run"],
|
||||
isPartner: true,
|
||||
icon: "sudocode-us",
|
||||
},
|
||||
// ===== 非赞助商预设:应用内展示按显示名排序,此处文件顺序不影响展示 =====
|
||||
{
|
||||
name: "Amux",
|
||||
websiteUrl: "https://amux.ai",
|
||||
apiKeyUrl: "https://amux.ai",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://api.amux.ai",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
icon: "amux",
|
||||
},
|
||||
{
|
||||
name: "Gemini Native",
|
||||
@@ -508,34 +903,6 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
|
||||
icon: "bailian",
|
||||
iconColor: "#624AFF",
|
||||
},
|
||||
{
|
||||
name: "Kimi",
|
||||
primePartner: true,
|
||||
websiteUrl: "https://platform.kimi.com?aff=cc-switch",
|
||||
category: "cn_official",
|
||||
baseUrl: "https://api.moonshot.cn/anthropic",
|
||||
mode: "proxy",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: brandedRoutes(
|
||||
"kimi-k2.7-code",
|
||||
"kimi-k2.7-code",
|
||||
"kimi-k2.7-code",
|
||||
),
|
||||
icon: "kimi",
|
||||
iconColor: "#6366F1",
|
||||
},
|
||||
{
|
||||
name: "Kimi For Coding",
|
||||
primePartner: true,
|
||||
websiteUrl: "https://www.kimi.com/code/?aff=cc-switch",
|
||||
category: "cn_official",
|
||||
baseUrl: "https://api.kimi.com/coding/",
|
||||
mode: "proxy",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
icon: "kimi",
|
||||
iconColor: "#6366F1",
|
||||
},
|
||||
{
|
||||
name: "StepFun",
|
||||
websiteUrl: "https://platform.stepfun.com/step-plan",
|
||||
@@ -670,207 +1037,6 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
|
||||
endpointCandidates: ["https://open.cherryin.net"],
|
||||
icon: "cherryin",
|
||||
},
|
||||
{
|
||||
name: "SiliconFlow",
|
||||
websiteUrl: "https://siliconflow.cn",
|
||||
apiKeyUrl: "https://cloud.siliconflow.cn/i/YflgU2Ve",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://api.siliconflow.cn",
|
||||
mode: "proxy",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: brandedRoutes(
|
||||
"Pro/MiniMaxAI/MiniMax-M2.7",
|
||||
"Pro/MiniMaxAI/MiniMax-M2.7",
|
||||
"Pro/MiniMaxAI/MiniMax-M2.7",
|
||||
),
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "siliconflow",
|
||||
icon: "siliconflow",
|
||||
iconColor: "#6E29F6",
|
||||
},
|
||||
{
|
||||
name: "SiliconFlow en",
|
||||
websiteUrl: "https://siliconflow.com",
|
||||
apiKeyUrl: "https://cloud.siliconflow.cn/i/YflgU2Ve",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://api.siliconflow.com",
|
||||
mode: "proxy",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: brandedRoutes(
|
||||
"MiniMaxAI/MiniMax-M2.7",
|
||||
"MiniMaxAI/MiniMax-M2.7",
|
||||
"MiniMaxAI/MiniMax-M2.7",
|
||||
),
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "siliconflow",
|
||||
icon: "siliconflow",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "DMXAPI",
|
||||
websiteUrl: "https://www.dmxapi.cn",
|
||||
apiKeyUrl: "https://www.dmxapi.cn",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://www.dmxapi.cn",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: ["https://www.dmxapi.cn", "https://api.dmxapi.cn"],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "dmxapi",
|
||||
},
|
||||
{
|
||||
name: "PackyCode",
|
||||
websiteUrl: "https://www.packyapi.com",
|
||||
apiKeyUrl: "https://www.packyapi.com/register?aff=cc-switch",
|
||||
category: "third_party",
|
||||
baseUrl: "https://www.packyapi.com",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: [
|
||||
"https://www.packyapi.com",
|
||||
"https://api-slb.packyapi.com",
|
||||
],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "packycode",
|
||||
icon: "packycode",
|
||||
},
|
||||
{
|
||||
name: "APIKEY.FUN",
|
||||
websiteUrl: "https://apikey.fun",
|
||||
apiKeyUrl: "https://apikey.fun/register?aff=CCSwitch",
|
||||
category: "third_party",
|
||||
baseUrl: "https://api.apikey.fun",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: ["https://api.apikey.fun", "https://slb.apikey.fun"],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "apikeyfun",
|
||||
icon: "apikeyfun",
|
||||
},
|
||||
{
|
||||
name: "APINebula",
|
||||
websiteUrl: "https://apinebula.com",
|
||||
apiKeyUrl: "https://apinebula.com/VjM74M",
|
||||
category: "third_party",
|
||||
baseUrl: "https://apinebula.com",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: ["https://apinebula.com"],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "apinebula",
|
||||
icon: "apinebula",
|
||||
},
|
||||
{
|
||||
name: "AtlasCloud",
|
||||
websiteUrl: "https://www.atlascloud.ai/console/coding-plan",
|
||||
apiKeyUrl: "https://www.atlascloud.ai/console/coding-plan",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://api.atlascloud.ai",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: ["https://api.atlascloud.ai"],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "atlascloud",
|
||||
icon: "atlascloud",
|
||||
},
|
||||
{
|
||||
name: "SudoCode.chat",
|
||||
websiteUrl: "https://sudocode.chat",
|
||||
apiKeyUrl:
|
||||
"https://sudocode.chat/register?utm_source=ccswitch&utm_medium=partner",
|
||||
category: "third_party",
|
||||
baseUrl: "https://api.sudocode.chat",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: ["https://api.sudocode.chat"],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "sudocode",
|
||||
icon: "sudocode",
|
||||
},
|
||||
{
|
||||
name: "SudoCode.us",
|
||||
websiteUrl: "https://sudocode.us",
|
||||
apiKeyUrl: "https://sudocode.us",
|
||||
category: "third_party",
|
||||
baseUrl: "https://sudocode.us",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: ["https://sudocode.us", "https://sudocode.run"],
|
||||
isPartner: true,
|
||||
icon: "sudocode-us",
|
||||
},
|
||||
{
|
||||
name: "ClaudeAPI",
|
||||
websiteUrl: "https://claudeapi.com",
|
||||
apiKeyUrl: "https://console.claudeapi.com/register?aff=pCLD",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://gw.claudeapi.com",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "claudeapi",
|
||||
icon: "claudeapi",
|
||||
},
|
||||
{
|
||||
name: "Code0",
|
||||
websiteUrl: "https://code0.ai",
|
||||
apiKeyUrl: "https://code0.ai/agent/register/B2XHxGjGmRvqgznY",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://code0.ai",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "code0",
|
||||
icon: "code0",
|
||||
},
|
||||
{
|
||||
name: "NekoCode",
|
||||
websiteUrl: "https://nekocode.ai",
|
||||
apiKeyUrl: "https://nekocode.ai?aff=CCSWITCH",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://nekocode.ai",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "nekocode",
|
||||
icon: "nekocode",
|
||||
},
|
||||
{
|
||||
name: "ClaudeCN",
|
||||
websiteUrl: "https://claudecn.top",
|
||||
apiKeyUrl: "https://claudecn.ai/register?aff=HEL9",
|
||||
category: "third_party",
|
||||
baseUrl: "https://claudecn.top",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "claudecn",
|
||||
icon: "claudecn",
|
||||
},
|
||||
{
|
||||
name: "RunAPI",
|
||||
websiteUrl: "https://runapi.co",
|
||||
apiKeyUrl: "https://runapi.co/register?aff=iOKB",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://runapi.co",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "runapi",
|
||||
icon: "runapi",
|
||||
},
|
||||
{
|
||||
name: "RelaxyCode",
|
||||
websiteUrl: "https://www.relaxycode.com",
|
||||
@@ -882,170 +1048,6 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
|
||||
modelRoutes: passthroughRoutes(),
|
||||
icon: "relaxcode",
|
||||
},
|
||||
{
|
||||
name: "Cubence",
|
||||
websiteUrl: "https://cubence.com",
|
||||
apiKeyUrl: "https://cubence.com/signup?code=CCSWITCH&source=ccs",
|
||||
category: "third_party",
|
||||
baseUrl: "https://api.cubence.com",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: [
|
||||
"https://api.cubence.com",
|
||||
"https://api-cf.cubence.com",
|
||||
"https://api-dmit.cubence.com",
|
||||
"https://api-bwg.cubence.com",
|
||||
],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "cubence",
|
||||
icon: "cubence",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "AIGoCode",
|
||||
websiteUrl: "https://aigocode.com",
|
||||
apiKeyUrl: "https://aigocode.com/invite/CC-SWITCH",
|
||||
category: "third_party",
|
||||
baseUrl: "https://api.aigocode.com",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: ["https://api.aigocode.com"],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "aigocode",
|
||||
icon: "aigocode",
|
||||
iconColor: "#5B7FFF",
|
||||
},
|
||||
{
|
||||
name: "RightCode",
|
||||
websiteUrl: "https://www.right.codes",
|
||||
apiKeyUrl: "https://www.right.codes/register?aff=CCSWITCH",
|
||||
category: "third_party",
|
||||
baseUrl: "https://www.right.codes/claude",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "rightcode",
|
||||
icon: "rc",
|
||||
iconColor: "#E96B2C",
|
||||
},
|
||||
{
|
||||
name: "AICodeMirror",
|
||||
websiteUrl: "https://www.aicodemirror.com",
|
||||
apiKeyUrl: "https://www.aicodemirror.com/register?invitecode=9915W3",
|
||||
category: "third_party",
|
||||
baseUrl: "https://api.aicodemirror.com/api/claudecode",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: [
|
||||
"https://api.aicodemirror.com/api/claudecode",
|
||||
"https://api.claudecode.net.cn/api/claudecode",
|
||||
],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "aicodemirror",
|
||||
icon: "aicodemirror",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "CrazyRouter",
|
||||
websiteUrl: "https://www.crazyrouter.com",
|
||||
apiKeyUrl: "https://www.crazyrouter.com/register?aff=OZcm&ref=cc-switch",
|
||||
category: "third_party",
|
||||
baseUrl: "https://cn.crazyrouter.com",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: ["https://cn.crazyrouter.com"],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "crazyrouter",
|
||||
icon: "crazyrouter",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "SSSAiCode",
|
||||
websiteUrl: "https://sssaicodeapi.com",
|
||||
apiKeyUrl: "https://sssaicodeapi.com/register?ref=DCP0SM",
|
||||
category: "third_party",
|
||||
baseUrl: "https://node-hk.sssaicodeapi.com/api",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: [
|
||||
"https://node-hk.sssaicodeapi.com/api",
|
||||
"https://node-hk.sssaiapi.com/api",
|
||||
"https://node-cf.sssaicodeapi.com/api",
|
||||
],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "sssaicode",
|
||||
icon: "sssaicode",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
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",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://api.modelverse.cn",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: ["https://api.modelverse.cn"],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "ucloud",
|
||||
icon: "ucloud",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
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",
|
||||
category: "aggregator",
|
||||
baseUrl: "https://cp.compshare.cn",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: ["https://cp.compshare.cn"],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "ucloud",
|
||||
icon: "ucloud",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "Micu",
|
||||
websiteUrl: "https://www.micuapi.ai",
|
||||
apiKeyUrl: "https://www.micuapi.ai/register?aff=aOYQ",
|
||||
category: "third_party",
|
||||
baseUrl: "https://www.micuapi.ai",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
endpointCandidates: ["https://www.micuapi.ai"],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "micu",
|
||||
icon: "micu",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "ETok.ai",
|
||||
websiteUrl: "https://etok.ai",
|
||||
apiKeyUrl: "https://etok.ai",
|
||||
category: "third_party",
|
||||
baseUrl: "https://api.etok.ai",
|
||||
mode: "direct",
|
||||
apiFormat: "anthropic",
|
||||
modelRoutes: passthroughRoutes(),
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "etok",
|
||||
icon: "etok",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "E-FlowCode",
|
||||
websiteUrl: "https://e-flowcode.cc",
|
||||
|
||||
+522
-520
File diff suppressed because it is too large
Load Diff
+586
-584
File diff suppressed because it is too large
Load Diff
+193
-191
@@ -51,103 +51,7 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
|
||||
icon: "gemini",
|
||||
iconColor: "#4285F4",
|
||||
},
|
||||
{
|
||||
name: "Shengsuanyun",
|
||||
nameKey: "providerForm.presets.shengsuanyun",
|
||||
websiteUrl: "https://www.shengsuanyun.com/?from=CH_4HHXMRYF",
|
||||
apiKeyUrl: "https://www.shengsuanyun.com/?from=CH_4HHXMRYF",
|
||||
settingsConfig: {
|
||||
env: {
|
||||
GOOGLE_GEMINI_BASE_URL: "https://router.shengsuanyun.com/api",
|
||||
GEMINI_MODEL: "google/gemini-3.5-flash",
|
||||
},
|
||||
},
|
||||
baseURL: "https://router.shengsuanyun.com/api",
|
||||
model: "google/gemini-3.5-flash",
|
||||
description: "Shengsuanyun",
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "shengsuanyun",
|
||||
icon: "shengsuanyun",
|
||||
},
|
||||
{
|
||||
name: "Unity2.ai",
|
||||
websiteUrl: "https://unity2.ai",
|
||||
apiKeyUrl: "https://unity2.ai/register?source=ccs",
|
||||
settingsConfig: {
|
||||
env: {
|
||||
GOOGLE_GEMINI_BASE_URL: "https://api.unity2.ai",
|
||||
GEMINI_MODEL: "gemini-3.1-pro",
|
||||
},
|
||||
},
|
||||
baseURL: "https://api.unity2.ai",
|
||||
model: "gemini-3.1-pro",
|
||||
description: "Unity2.ai",
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "unity2",
|
||||
icon: "unity2",
|
||||
},
|
||||
{
|
||||
name: "SubRouter",
|
||||
websiteUrl: "https://subrouter.ai",
|
||||
apiKeyUrl: "https://subrouter.ai/register?aff=l3ri",
|
||||
settingsConfig: {
|
||||
env: {
|
||||
GOOGLE_GEMINI_BASE_URL: "https://subrouter.ai/v1beta",
|
||||
GEMINI_MODEL: "gemini-3.5-flash",
|
||||
},
|
||||
},
|
||||
baseURL: "https://subrouter.ai/v1beta",
|
||||
model: "gemini-3.5-flash",
|
||||
description: "SubRouter",
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "subrouter",
|
||||
endpointCandidates: ["https://subrouter.ai/v1beta"],
|
||||
icon: "subrouter",
|
||||
},
|
||||
{
|
||||
name: "Qiniu",
|
||||
nameKey: "providerForm.presets.qiniu",
|
||||
websiteUrl: "https://s.qiniu.com/nMvAvy",
|
||||
apiKeyUrl: "https://s.qiniu.com/nMvAvy",
|
||||
settingsConfig: {
|
||||
env: {
|
||||
GOOGLE_GEMINI_BASE_URL: "https://api.qnaigc.com/bypass/vertex",
|
||||
GEMINI_MODEL: "gemini-3.1-pro-preview",
|
||||
},
|
||||
},
|
||||
baseURL: "https://api.qnaigc.com/bypass/vertex",
|
||||
model: "gemini-3.1-pro-preview",
|
||||
description: "Qiniu",
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "qiniu",
|
||||
endpointCandidates: [
|
||||
"https://api.qnaigc.com/bypass/vertex",
|
||||
"https://api.modelink.ai/bypass/vertex",
|
||||
],
|
||||
icon: "qiniu",
|
||||
},
|
||||
{
|
||||
name: "Code0",
|
||||
websiteUrl: "https://code0.ai",
|
||||
apiKeyUrl: "https://code0.ai/agent/register/B2XHxGjGmRvqgznY",
|
||||
settingsConfig: {
|
||||
env: {
|
||||
GOOGLE_GEMINI_BASE_URL: "https://code0.ai",
|
||||
GEMINI_MODEL: "gemini-3.1-pro-preview",
|
||||
},
|
||||
},
|
||||
baseURL: "https://code0.ai",
|
||||
model: "gemini-3.1-pro-preview",
|
||||
description: "Code0",
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "code0",
|
||||
icon: "code0",
|
||||
},
|
||||
// ===== 赞助商预设:文件顺序 = 应用内展示顺序,与 README 赞助商表对齐 =====
|
||||
{
|
||||
name: "PackyCode",
|
||||
websiteUrl: "https://www.packyapi.com",
|
||||
@@ -170,26 +74,6 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
|
||||
],
|
||||
icon: "packycode",
|
||||
},
|
||||
{
|
||||
name: "APIKEY.FUN",
|
||||
websiteUrl: "https://apikey.fun",
|
||||
apiKeyUrl: "https://apikey.fun/register?aff=CCSwitch",
|
||||
settingsConfig: {
|
||||
env: {
|
||||
GOOGLE_GEMINI_BASE_URL: "https://api.apikey.fun",
|
||||
GEMINI_API_KEY: "",
|
||||
GEMINI_MODEL: "gemini-3.5-flash",
|
||||
},
|
||||
},
|
||||
baseURL: "https://api.apikey.fun",
|
||||
model: "gemini-3.5-flash",
|
||||
description: "APIKEY.FUN",
|
||||
category: "third_party",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "apikeyfun",
|
||||
endpointCandidates: ["https://api.apikey.fun", "https://slb.apikey.fun"],
|
||||
icon: "apikeyfun",
|
||||
},
|
||||
{
|
||||
name: "APINebula",
|
||||
websiteUrl: "https://apinebula.com",
|
||||
@@ -210,70 +94,6 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
|
||||
endpointCandidates: ["https://apinebula.com"],
|
||||
icon: "apinebula",
|
||||
},
|
||||
{
|
||||
name: "SudoCode.us",
|
||||
websiteUrl: "https://sudocode.us",
|
||||
apiKeyUrl: "https://sudocode.us",
|
||||
settingsConfig: {
|
||||
env: {
|
||||
GOOGLE_GEMINI_BASE_URL: "https://sudocode.us",
|
||||
GEMINI_API_KEY: "",
|
||||
GEMINI_MODEL: "gemini-3.1-flash-lite",
|
||||
},
|
||||
},
|
||||
baseURL: "https://sudocode.us",
|
||||
model: "gemini-3.1-flash-lite",
|
||||
description: "SudoCode.us",
|
||||
category: "third_party",
|
||||
isPartner: true,
|
||||
endpointCandidates: ["https://sudocode.us", "https://sudocode.run"],
|
||||
icon: "sudocode-us",
|
||||
},
|
||||
{
|
||||
name: "Cubence",
|
||||
websiteUrl: "https://cubence.com",
|
||||
apiKeyUrl: "https://cubence.com/signup?code=CCSWITCH&source=ccs",
|
||||
settingsConfig: {
|
||||
env: {
|
||||
GOOGLE_GEMINI_BASE_URL: "https://api.cubence.com",
|
||||
GEMINI_MODEL: "gemini-3.5-flash",
|
||||
},
|
||||
},
|
||||
baseURL: "https://api.cubence.com",
|
||||
model: "gemini-3.5-flash",
|
||||
description: "Cubence",
|
||||
category: "third_party",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "cubence",
|
||||
endpointCandidates: [
|
||||
"https://api.cubence.com/v1",
|
||||
"https://api-cf.cubence.com/v1",
|
||||
"https://api-dmit.cubence.com/v1",
|
||||
"https://api-bwg.cubence.com/v1",
|
||||
],
|
||||
icon: "cubence",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "AIGoCode",
|
||||
websiteUrl: "https://aigocode.com",
|
||||
apiKeyUrl: "https://aigocode.com/invite/CC-SWITCH",
|
||||
settingsConfig: {
|
||||
env: {
|
||||
GOOGLE_GEMINI_BASE_URL: "https://api.aigocode.com",
|
||||
GEMINI_MODEL: "gemini-3.5-flash",
|
||||
},
|
||||
},
|
||||
baseURL: "https://api.aigocode.com",
|
||||
model: "gemini-3.5-flash",
|
||||
description: "AIGoCode",
|
||||
category: "third_party",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "aigocode",
|
||||
endpointCandidates: ["https://api.aigocode.com"],
|
||||
icon: "aigocode",
|
||||
iconColor: "#5B7FFF",
|
||||
},
|
||||
{
|
||||
name: "AICodeMirror",
|
||||
websiteUrl: "https://www.aicodemirror.com",
|
||||
@@ -298,24 +118,118 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "CrazyRouter",
|
||||
websiteUrl: "https://www.crazyrouter.com",
|
||||
apiKeyUrl: "https://www.crazyrouter.com/register?aff=OZcm&ref=cc-switch",
|
||||
name: "Unity2.ai",
|
||||
websiteUrl: "https://unity2.ai",
|
||||
apiKeyUrl: "https://unity2.ai/register?source=ccs",
|
||||
settingsConfig: {
|
||||
env: {
|
||||
GOOGLE_GEMINI_BASE_URL: "https://cn.crazyrouter.com",
|
||||
GOOGLE_GEMINI_BASE_URL: "https://api.unity2.ai",
|
||||
GEMINI_MODEL: "gemini-3.1-pro",
|
||||
},
|
||||
},
|
||||
baseURL: "https://api.unity2.ai",
|
||||
model: "gemini-3.1-pro",
|
||||
description: "Unity2.ai",
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "unity2",
|
||||
icon: "unity2",
|
||||
},
|
||||
{
|
||||
name: "Shengsuanyun",
|
||||
nameKey: "providerForm.presets.shengsuanyun",
|
||||
websiteUrl: "https://www.shengsuanyun.com/?from=CH_4HHXMRYF",
|
||||
apiKeyUrl: "https://www.shengsuanyun.com/?from=CH_4HHXMRYF",
|
||||
settingsConfig: {
|
||||
env: {
|
||||
GOOGLE_GEMINI_BASE_URL: "https://router.shengsuanyun.com/api",
|
||||
GEMINI_MODEL: "google/gemini-3.5-flash",
|
||||
},
|
||||
},
|
||||
baseURL: "https://router.shengsuanyun.com/api",
|
||||
model: "google/gemini-3.5-flash",
|
||||
description: "Shengsuanyun",
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "shengsuanyun",
|
||||
icon: "shengsuanyun",
|
||||
},
|
||||
{
|
||||
name: "AIGoCode",
|
||||
websiteUrl: "https://aigocode.com",
|
||||
apiKeyUrl: "https://aigocode.com/invite/CC-SWITCH",
|
||||
settingsConfig: {
|
||||
env: {
|
||||
GOOGLE_GEMINI_BASE_URL: "https://api.aigocode.com",
|
||||
GEMINI_MODEL: "gemini-3.5-flash",
|
||||
},
|
||||
},
|
||||
baseURL: "https://cn.crazyrouter.com",
|
||||
baseURL: "https://api.aigocode.com",
|
||||
model: "gemini-3.5-flash",
|
||||
description: "CrazyRouter",
|
||||
description: "AIGoCode",
|
||||
category: "third_party",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "crazyrouter",
|
||||
endpointCandidates: ["https://cn.crazyrouter.com"],
|
||||
icon: "crazyrouter",
|
||||
iconColor: "#000000",
|
||||
partnerPromotionKey: "aigocode",
|
||||
endpointCandidates: ["https://api.aigocode.com"],
|
||||
icon: "aigocode",
|
||||
iconColor: "#5B7FFF",
|
||||
},
|
||||
{
|
||||
name: "SubRouter",
|
||||
websiteUrl: "https://subrouter.ai",
|
||||
apiKeyUrl: "https://subrouter.ai/register?aff=l3ri",
|
||||
settingsConfig: {
|
||||
env: {
|
||||
GOOGLE_GEMINI_BASE_URL: "https://subrouter.ai/v1beta",
|
||||
GEMINI_MODEL: "gemini-3.5-flash",
|
||||
},
|
||||
},
|
||||
baseURL: "https://subrouter.ai/v1beta",
|
||||
model: "gemini-3.5-flash",
|
||||
description: "SubRouter",
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "subrouter",
|
||||
endpointCandidates: ["https://subrouter.ai/v1beta"],
|
||||
icon: "subrouter",
|
||||
},
|
||||
{
|
||||
name: "APIKEY.FUN",
|
||||
websiteUrl: "https://apikey.fun",
|
||||
apiKeyUrl: "https://apikey.fun/register?aff=CCSwitch",
|
||||
settingsConfig: {
|
||||
env: {
|
||||
GOOGLE_GEMINI_BASE_URL: "https://api.apikey.fun",
|
||||
GEMINI_API_KEY: "",
|
||||
GEMINI_MODEL: "gemini-3.5-flash",
|
||||
},
|
||||
},
|
||||
baseURL: "https://api.apikey.fun",
|
||||
model: "gemini-3.5-flash",
|
||||
description: "APIKEY.FUN",
|
||||
category: "third_party",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "apikeyfun",
|
||||
endpointCandidates: ["https://api.apikey.fun", "https://slb.apikey.fun"],
|
||||
icon: "apikeyfun",
|
||||
},
|
||||
{
|
||||
name: "Code0",
|
||||
websiteUrl: "https://code0.ai",
|
||||
apiKeyUrl: "https://code0.ai/agent/register/B2XHxGjGmRvqgznY",
|
||||
settingsConfig: {
|
||||
env: {
|
||||
GOOGLE_GEMINI_BASE_URL: "https://code0.ai",
|
||||
GEMINI_MODEL: "gemini-3.1-pro-preview",
|
||||
},
|
||||
},
|
||||
baseURL: "https://code0.ai",
|
||||
model: "gemini-3.1-pro-preview",
|
||||
description: "Code0",
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "code0",
|
||||
icon: "code0",
|
||||
},
|
||||
{
|
||||
name: "SSSAiCode",
|
||||
@@ -361,6 +275,94 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
|
||||
icon: "etok",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "Cubence",
|
||||
websiteUrl: "https://cubence.com",
|
||||
apiKeyUrl: "https://cubence.com/signup?code=CCSWITCH&source=ccs",
|
||||
settingsConfig: {
|
||||
env: {
|
||||
GOOGLE_GEMINI_BASE_URL: "https://api.cubence.com",
|
||||
GEMINI_MODEL: "gemini-3.5-flash",
|
||||
},
|
||||
},
|
||||
baseURL: "https://api.cubence.com",
|
||||
model: "gemini-3.5-flash",
|
||||
description: "Cubence",
|
||||
category: "third_party",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "cubence",
|
||||
endpointCandidates: [
|
||||
"https://api.cubence.com/v1",
|
||||
"https://api-cf.cubence.com/v1",
|
||||
"https://api-dmit.cubence.com/v1",
|
||||
"https://api-bwg.cubence.com/v1",
|
||||
],
|
||||
icon: "cubence",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "CrazyRouter",
|
||||
websiteUrl: "https://www.crazyrouter.com",
|
||||
apiKeyUrl: "https://www.crazyrouter.com/register?aff=OZcm&ref=cc-switch",
|
||||
settingsConfig: {
|
||||
env: {
|
||||
GOOGLE_GEMINI_BASE_URL: "https://cn.crazyrouter.com",
|
||||
GEMINI_MODEL: "gemini-3.5-flash",
|
||||
},
|
||||
},
|
||||
baseURL: "https://cn.crazyrouter.com",
|
||||
model: "gemini-3.5-flash",
|
||||
description: "CrazyRouter",
|
||||
category: "third_party",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "crazyrouter",
|
||||
endpointCandidates: ["https://cn.crazyrouter.com"],
|
||||
icon: "crazyrouter",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "Qiniu",
|
||||
nameKey: "providerForm.presets.qiniu",
|
||||
websiteUrl: "https://s.qiniu.com/nMvAvy",
|
||||
apiKeyUrl: "https://s.qiniu.com/nMvAvy",
|
||||
settingsConfig: {
|
||||
env: {
|
||||
GOOGLE_GEMINI_BASE_URL: "https://api.qnaigc.com/bypass/vertex",
|
||||
GEMINI_MODEL: "gemini-3.1-pro-preview",
|
||||
},
|
||||
},
|
||||
baseURL: "https://api.qnaigc.com/bypass/vertex",
|
||||
model: "gemini-3.1-pro-preview",
|
||||
description: "Qiniu",
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "qiniu",
|
||||
endpointCandidates: [
|
||||
"https://api.qnaigc.com/bypass/vertex",
|
||||
"https://api.modelink.ai/bypass/vertex",
|
||||
],
|
||||
icon: "qiniu",
|
||||
},
|
||||
{
|
||||
name: "SudoCode.us",
|
||||
websiteUrl: "https://sudocode.us",
|
||||
apiKeyUrl: "https://sudocode.us",
|
||||
settingsConfig: {
|
||||
env: {
|
||||
GOOGLE_GEMINI_BASE_URL: "https://sudocode.us",
|
||||
GEMINI_API_KEY: "",
|
||||
GEMINI_MODEL: "gemini-3.1-flash-lite",
|
||||
},
|
||||
},
|
||||
baseURL: "https://sudocode.us",
|
||||
model: "gemini-3.1-flash-lite",
|
||||
description: "SudoCode.us",
|
||||
category: "third_party",
|
||||
isPartner: true,
|
||||
endpointCandidates: ["https://sudocode.us", "https://sudocode.run"],
|
||||
icon: "sudocode-us",
|
||||
},
|
||||
// ===== 非赞助商预设:应用内展示按显示名排序,此处文件顺序不影响展示 =====
|
||||
{
|
||||
name: "E-FlowCode",
|
||||
websiteUrl: "https://e-flowcode.cc",
|
||||
|
||||
@@ -77,210 +77,7 @@ requires_openai_auth = true`;
|
||||
}
|
||||
|
||||
export const grokBuildProviderPresets: GrokBuildProviderPreset[] = [
|
||||
{
|
||||
name: "xAI (Grok)",
|
||||
websiteUrl: "https://x.ai/api",
|
||||
apiKeyUrl: "https://console.x.ai",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("xAI (Grok)", "https://api.x.ai/v1"),
|
||||
endpointCandidates: ["https://api.x.ai/v1"],
|
||||
apiFormat: "openai_responses",
|
||||
category: "third_party",
|
||||
icon: "xai",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "Shengsuanyun",
|
||||
nameKey: "providerForm.presets.shengsuanyun",
|
||||
websiteUrl: "https://www.shengsuanyun.com/?from=CH_4HHXMRYF",
|
||||
apiKeyUrl: "https://www.shengsuanyun.com/?from=CH_4HHXMRYF",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig(
|
||||
"Shengsuanyun",
|
||||
"https://router.shengsuanyun.com/api/v1",
|
||||
OPENROUTER_STYLE_GROK_MODEL,
|
||||
),
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "shengsuanyun",
|
||||
icon: "shengsuanyun",
|
||||
},
|
||||
{
|
||||
name: "PatewayAI",
|
||||
websiteUrl: "https://pateway.ai",
|
||||
apiKeyUrl: "https://pateway.ai/?ch=etzpm8&aff=WB6M6F67#/",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("PatewayAI", "https://api.pateway.ai/v1"),
|
||||
endpointCandidates: ["https://api.pateway.ai/v1"],
|
||||
category: "third_party",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "patewayai",
|
||||
icon: "pateway",
|
||||
},
|
||||
{
|
||||
name: "CCSub",
|
||||
websiteUrl: "https://www.ccsub.net",
|
||||
apiKeyUrl: "https://www.ccsub.net/register?ref=Y6Z8DXEA",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("CCSub", "https://www.ccsub.net/v1"),
|
||||
endpointCandidates: ["https://www.ccsub.net/v1"],
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "ccsub",
|
||||
icon: "ccsub",
|
||||
},
|
||||
{
|
||||
name: "SubRouter",
|
||||
websiteUrl: "https://subrouter.ai",
|
||||
apiKeyUrl: "https://subrouter.ai/register?aff=l3ri",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("SubRouter", "https://subrouter.ai/v1"),
|
||||
endpointCandidates: ["https://subrouter.ai/v1"],
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "subrouter",
|
||||
icon: "subrouter",
|
||||
},
|
||||
{
|
||||
name: "Unity2.ai",
|
||||
websiteUrl: "https://unity2.ai",
|
||||
apiKeyUrl: "https://unity2.ai/register?source=ccs",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("Unity2.ai", "https://api.unity2.ai"),
|
||||
endpointCandidates: ["https://api.unity2.ai"],
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "unity2",
|
||||
icon: "unity2",
|
||||
},
|
||||
{
|
||||
name: "Qiniu",
|
||||
nameKey: "providerForm.presets.qiniu",
|
||||
websiteUrl: "https://s.qiniu.com/nMvAvy",
|
||||
apiKeyUrl: "https://s.qiniu.com/nMvAvy",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig(
|
||||
"Qiniu",
|
||||
"https://api.qnaigc.com/bypass/openai/v1",
|
||||
),
|
||||
endpointCandidates: [
|
||||
"https://api.qnaigc.com/bypass/openai/v1",
|
||||
"https://api.modelink.ai/bypass/openai/v1",
|
||||
],
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "qiniu",
|
||||
icon: "qiniu",
|
||||
},
|
||||
{
|
||||
name: "FennoAI",
|
||||
websiteUrl: "https://api.fenno.ai",
|
||||
apiKeyUrl:
|
||||
"https://api.fenno.ai/register?redirect=/purchase?tab=subscription%26group=16&aff=P9MR3D3PLCNL",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("FennoAI", "https://api.fenno.ai"),
|
||||
endpointCandidates: ["https://api.fenno.ai"],
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "fenno",
|
||||
icon: "fenno",
|
||||
},
|
||||
{
|
||||
name: "ZetaAPI",
|
||||
websiteUrl: "https://zetaapi.ai",
|
||||
apiKeyUrl: "https://zetaapi.ai/go/u117",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("ZetaAPI", "https://api.zetaapi.ai/v1"),
|
||||
endpointCandidates: ["https://api.zetaapi.ai/v1"],
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "zetaapi",
|
||||
icon: "zetaapi",
|
||||
},
|
||||
{
|
||||
name: "TeamoRouter",
|
||||
websiteUrl: "https://teamorouter.com",
|
||||
apiKeyUrl:
|
||||
"https://teamorouter.com/?utm_source=cc_switch&utm_medium=referral&utm_campaign=ai_directory",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("TeamoRouter", "https://api.teamorouter.com/v1"),
|
||||
endpointCandidates: ["https://api.teamorouter.com/v1"],
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "teamorouter",
|
||||
icon: "teamorouter",
|
||||
},
|
||||
{
|
||||
name: "Amux",
|
||||
websiteUrl: "https://amux.ai",
|
||||
apiKeyUrl: "https://amux.ai",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("Amux", "https://api.amux.ai/v1"),
|
||||
endpointCandidates: ["https://api.amux.ai/v1"],
|
||||
category: "aggregator",
|
||||
icon: "amux",
|
||||
},
|
||||
{
|
||||
name: "Code0",
|
||||
websiteUrl: "https://code0.ai",
|
||||
apiKeyUrl: "https://code0.ai/agent/register/B2XHxGjGmRvqgznY",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("Code0", "https://code0.ai/v1"),
|
||||
endpointCandidates: ["https://code0.ai/v1"],
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "code0",
|
||||
icon: "code0",
|
||||
},
|
||||
{
|
||||
name: "NekoCode",
|
||||
websiteUrl: "https://nekocode.ai",
|
||||
apiKeyUrl: "https://nekocode.ai?aff=CCSWITCH",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("NekoCode", "https://nekocode.ai/v1"),
|
||||
endpointCandidates: ["https://nekocode.ai/v1"],
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "nekocode",
|
||||
icon: "nekocode",
|
||||
},
|
||||
{
|
||||
name: "AiHubMix",
|
||||
websiteUrl: "https://aihubmix.com",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("AiHubMix", "https://aihubmix.com/v1"),
|
||||
endpointCandidates: [
|
||||
"https://aihubmix.com/v1",
|
||||
"https://api.aihubmix.com/v1",
|
||||
],
|
||||
category: "aggregator",
|
||||
icon: "aihubmix",
|
||||
iconColor: "#006FFB",
|
||||
},
|
||||
{
|
||||
name: "CherryIN",
|
||||
websiteUrl: "https://open.cherryin.ai",
|
||||
apiKeyUrl: "https://open.cherryin.ai/console/token",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig(
|
||||
"CherryIN",
|
||||
"https://open.cherryin.net/v1",
|
||||
OPENROUTER_STYLE_GROK_MODEL,
|
||||
),
|
||||
endpointCandidates: ["https://open.cherryin.net/v1"],
|
||||
category: "aggregator",
|
||||
icon: "cherryin",
|
||||
},
|
||||
{
|
||||
name: "DMXAPI",
|
||||
websiteUrl: "https://www.dmxapi.cn",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("DMXAPI", "https://www.dmxapi.cn/v1"),
|
||||
endpointCandidates: ["https://www.dmxapi.cn/v1"],
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "dmxapi",
|
||||
},
|
||||
// ===== 赞助商预设:文件顺序 = 应用内展示顺序,与 README 赞助商表对齐 =====
|
||||
{
|
||||
name: "PackyCode",
|
||||
websiteUrl: "https://www.packyapi.com",
|
||||
@@ -297,20 +94,16 @@ export const grokBuildProviderPresets: GrokBuildProviderPreset[] = [
|
||||
icon: "packycode",
|
||||
},
|
||||
{
|
||||
name: "APIKEY.FUN",
|
||||
websiteUrl: "https://apikey.fun",
|
||||
apiKeyUrl: "https://apikey.fun/register?aff=CCSwitch",
|
||||
name: "ZetaAPI",
|
||||
websiteUrl: "https://zetaapi.ai",
|
||||
apiKeyUrl: "https://zetaapi.ai/go/u117",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("APIKEY.FUN", "https://api.apikey.fun/v1"),
|
||||
endpointCandidates: [
|
||||
"https://api.apikey.fun/v1",
|
||||
"https://slb.apikey.fun/v1",
|
||||
],
|
||||
apiFormat: "openai_responses",
|
||||
category: "third_party",
|
||||
config: grokPresetConfig("ZetaAPI", "https://api.zetaapi.ai/v1"),
|
||||
endpointCandidates: ["https://api.zetaapi.ai/v1"],
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "apikeyfun",
|
||||
icon: "apikeyfun",
|
||||
partnerPromotionKey: "zetaapi",
|
||||
icon: "zetaapi",
|
||||
},
|
||||
{
|
||||
name: "APINebula",
|
||||
@@ -325,106 +118,6 @@ export const grokBuildProviderPresets: GrokBuildProviderPreset[] = [
|
||||
partnerPromotionKey: "apinebula",
|
||||
icon: "apinebula",
|
||||
},
|
||||
{
|
||||
name: "SudoCode.chat",
|
||||
websiteUrl: "https://sudocode.chat",
|
||||
apiKeyUrl:
|
||||
"https://sudocode.chat/register?utm_source=ccswitch&utm_medium=partner",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("SudoCode.chat", "https://api.sudocode.chat/v1"),
|
||||
endpointCandidates: ["https://api.sudocode.chat/v1"],
|
||||
apiFormat: "openai_responses",
|
||||
category: "third_party",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "sudocode",
|
||||
icon: "sudocode",
|
||||
},
|
||||
{
|
||||
name: "SudoCode.us",
|
||||
websiteUrl: "https://sudocode.us",
|
||||
apiKeyUrl: "https://sudocode.us",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("SudoCode.us", "https://sudocode.us/v1"),
|
||||
endpointCandidates: ["https://sudocode.us/v1", "https://sudocode.run/v1"],
|
||||
apiFormat: "openai_responses",
|
||||
category: "third_party",
|
||||
isPartner: true,
|
||||
icon: "sudocode-us",
|
||||
},
|
||||
{
|
||||
name: "ClaudeCN",
|
||||
websiteUrl: "https://claudecn.top",
|
||||
apiKeyUrl: "https://claudecn.ai/register?aff=HEL9",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("ClaudeCN", "https://claudecn.top/v1"),
|
||||
category: "third_party",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "claudecn",
|
||||
icon: "claudecn",
|
||||
},
|
||||
{
|
||||
name: "RunAPI",
|
||||
websiteUrl: "https://runapi.co",
|
||||
apiKeyUrl: "https://runapi.co/register?aff=iOKB",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("RunAPI", "https://runapi.co/v1"),
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "runapi",
|
||||
icon: "runapi",
|
||||
},
|
||||
{
|
||||
name: "RelaxyCode",
|
||||
websiteUrl: "https://www.relaxycode.com",
|
||||
apiKeyUrl: "https://www.relaxycode.com/register",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("RelaxyCode", "https://www.relaxycode.com/v1"),
|
||||
category: "third_party",
|
||||
icon: "relaxcode",
|
||||
},
|
||||
{
|
||||
name: "Cubence",
|
||||
websiteUrl: "https://cubence.com",
|
||||
apiKeyUrl: "https://cubence.com/signup?code=CCSWITCH&source=ccs",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("Cubence", "https://api.cubence.com/v1"),
|
||||
endpointCandidates: [
|
||||
"https://api.cubence.com/v1",
|
||||
"https://api-cf.cubence.com/v1",
|
||||
"https://api-dmit.cubence.com/v1",
|
||||
"https://api-bwg.cubence.com/v1",
|
||||
],
|
||||
category: "third_party",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "cubence",
|
||||
icon: "cubence",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "AIGoCode",
|
||||
websiteUrl: "https://aigocode.com",
|
||||
apiKeyUrl: "https://aigocode.com/invite/CC-SWITCH",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("AIGoCode", "https://api.aigocode.com"),
|
||||
endpointCandidates: ["https://api.aigocode.com"],
|
||||
category: "third_party",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "aigocode",
|
||||
icon: "aigocode",
|
||||
iconColor: "#5B7FFF",
|
||||
},
|
||||
{
|
||||
name: "RightCode",
|
||||
websiteUrl: "https://www.right.codes",
|
||||
apiKeyUrl: "https://www.right.codes/register?aff=CCSWITCH",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("RightCode", "https://right.codes/codex/v1"),
|
||||
category: "third_party",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "rightcode",
|
||||
icon: "rc",
|
||||
iconColor: "#E96B2C",
|
||||
},
|
||||
{
|
||||
name: "AICodeMirror",
|
||||
websiteUrl: "https://www.aicodemirror.com",
|
||||
@@ -444,36 +137,157 @@ export const grokBuildProviderPresets: GrokBuildProviderPreset[] = [
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "CrazyRouter",
|
||||
websiteUrl: "https://www.crazyrouter.com",
|
||||
apiKeyUrl: "https://www.crazyrouter.com/register?aff=OZcm&ref=cc-switch",
|
||||
name: "PatewayAI",
|
||||
websiteUrl: "https://pateway.ai",
|
||||
apiKeyUrl: "https://pateway.ai/?ch=etzpm8&aff=WB6M6F67#/",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("CrazyRouter", "https://cn.crazyrouter.com/v1"),
|
||||
endpointCandidates: ["https://cn.crazyrouter.com/v1"],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "crazyrouter",
|
||||
icon: "crazyrouter",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "SSSAiCode",
|
||||
websiteUrl: "https://sssaicodeapi.com",
|
||||
apiKeyUrl: "https://sssaicodeapi.com/register?ref=DCP0SM",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig(
|
||||
"SSSAiCode",
|
||||
"https://node-hk.sssaicodeapi.com/api/v1",
|
||||
),
|
||||
endpointCandidates: [
|
||||
"https://node-hk.sssaicodeapi.com/api/v1",
|
||||
"https://node-hk.sssaiapi.com/api/v1",
|
||||
"https://node-cf.sssaicodeapi.com/api/v1",
|
||||
],
|
||||
config: grokPresetConfig("PatewayAI", "https://api.pateway.ai/v1"),
|
||||
endpointCandidates: ["https://api.pateway.ai/v1"],
|
||||
category: "third_party",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "sssaicode",
|
||||
icon: "sssaicode",
|
||||
iconColor: "#000000",
|
||||
partnerPromotionKey: "patewayai",
|
||||
icon: "pateway",
|
||||
},
|
||||
{
|
||||
name: "FennoAI",
|
||||
websiteUrl: "https://api.fenno.ai",
|
||||
apiKeyUrl:
|
||||
"https://api.fenno.ai/register?redirect=/purchase?tab=subscription%26group=16&aff=P9MR3D3PLCNL",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("FennoAI", "https://api.fenno.ai"),
|
||||
endpointCandidates: ["https://api.fenno.ai"],
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "fenno",
|
||||
icon: "fenno",
|
||||
},
|
||||
{
|
||||
name: "RunAPI",
|
||||
websiteUrl: "https://runapi.co",
|
||||
apiKeyUrl: "https://runapi.co/register?aff=iOKB",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("RunAPI", "https://runapi.co/v1"),
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "runapi",
|
||||
icon: "runapi",
|
||||
},
|
||||
{
|
||||
name: "Unity2.ai",
|
||||
websiteUrl: "https://unity2.ai",
|
||||
apiKeyUrl: "https://unity2.ai/register?source=ccs",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("Unity2.ai", "https://api.unity2.ai"),
|
||||
endpointCandidates: ["https://api.unity2.ai"],
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "unity2",
|
||||
icon: "unity2",
|
||||
},
|
||||
{
|
||||
name: "Shengsuanyun",
|
||||
nameKey: "providerForm.presets.shengsuanyun",
|
||||
websiteUrl: "https://www.shengsuanyun.com/?from=CH_4HHXMRYF",
|
||||
apiKeyUrl: "https://www.shengsuanyun.com/?from=CH_4HHXMRYF",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig(
|
||||
"Shengsuanyun",
|
||||
"https://router.shengsuanyun.com/api/v1",
|
||||
OPENROUTER_STYLE_GROK_MODEL,
|
||||
),
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "shengsuanyun",
|
||||
icon: "shengsuanyun",
|
||||
},
|
||||
{
|
||||
name: "AIGoCode",
|
||||
websiteUrl: "https://aigocode.com",
|
||||
apiKeyUrl: "https://aigocode.com/invite/CC-SWITCH",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("AIGoCode", "https://api.aigocode.com"),
|
||||
endpointCandidates: ["https://api.aigocode.com"],
|
||||
category: "third_party",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "aigocode",
|
||||
icon: "aigocode",
|
||||
iconColor: "#5B7FFF",
|
||||
},
|
||||
{
|
||||
name: "SubRouter",
|
||||
websiteUrl: "https://subrouter.ai",
|
||||
apiKeyUrl: "https://subrouter.ai/register?aff=l3ri",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("SubRouter", "https://subrouter.ai/v1"),
|
||||
endpointCandidates: ["https://subrouter.ai/v1"],
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "subrouter",
|
||||
icon: "subrouter",
|
||||
},
|
||||
{
|
||||
name: "APIKEY.FUN",
|
||||
websiteUrl: "https://apikey.fun",
|
||||
apiKeyUrl: "https://apikey.fun/register?aff=CCSwitch",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("APIKEY.FUN", "https://api.apikey.fun/v1"),
|
||||
endpointCandidates: [
|
||||
"https://api.apikey.fun/v1",
|
||||
"https://slb.apikey.fun/v1",
|
||||
],
|
||||
apiFormat: "openai_responses",
|
||||
category: "third_party",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "apikeyfun",
|
||||
icon: "apikeyfun",
|
||||
},
|
||||
{
|
||||
name: "Code0",
|
||||
websiteUrl: "https://code0.ai",
|
||||
apiKeyUrl: "https://code0.ai/agent/register/B2XHxGjGmRvqgznY",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("Code0", "https://code0.ai/v1"),
|
||||
endpointCandidates: ["https://code0.ai/v1"],
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "code0",
|
||||
icon: "code0",
|
||||
},
|
||||
{
|
||||
name: "TeamoRouter",
|
||||
websiteUrl: "https://teamorouter.com",
|
||||
apiKeyUrl:
|
||||
"https://teamorouter.com/?utm_source=cc_switch&utm_medium=referral&utm_campaign=ai_directory",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("TeamoRouter", "https://api.teamorouter.com/v1"),
|
||||
endpointCandidates: ["https://api.teamorouter.com/v1"],
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "teamorouter",
|
||||
icon: "teamorouter",
|
||||
},
|
||||
{
|
||||
name: "ClaudeCN",
|
||||
websiteUrl: "https://claudecn.top",
|
||||
apiKeyUrl: "https://claudecn.ai/register?aff=HEL9",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("ClaudeCN", "https://claudecn.top/v1"),
|
||||
category: "third_party",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "claudecn",
|
||||
icon: "claudecn",
|
||||
},
|
||||
{
|
||||
name: "NekoCode",
|
||||
websiteUrl: "https://nekocode.ai",
|
||||
apiKeyUrl: "https://nekocode.ai?aff=CCSWITCH",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("NekoCode", "https://nekocode.ai/v1"),
|
||||
endpointCandidates: ["https://nekocode.ai/v1"],
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "nekocode",
|
||||
icon: "nekocode",
|
||||
},
|
||||
{
|
||||
name: "Compshare",
|
||||
@@ -508,6 +322,38 @@ export const grokBuildProviderPresets: GrokBuildProviderPreset[] = [
|
||||
icon: "ucloud",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "CCSub",
|
||||
websiteUrl: "https://www.ccsub.net",
|
||||
apiKeyUrl: "https://www.ccsub.net/register?ref=Y6Z8DXEA",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("CCSub", "https://www.ccsub.net/v1"),
|
||||
endpointCandidates: ["https://www.ccsub.net/v1"],
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "ccsub",
|
||||
icon: "ccsub",
|
||||
},
|
||||
{
|
||||
name: "SSSAiCode",
|
||||
websiteUrl: "https://sssaicodeapi.com",
|
||||
apiKeyUrl: "https://sssaicodeapi.com/register?ref=DCP0SM",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig(
|
||||
"SSSAiCode",
|
||||
"https://node-hk.sssaicodeapi.com/api/v1",
|
||||
),
|
||||
endpointCandidates: [
|
||||
"https://node-hk.sssaicodeapi.com/api/v1",
|
||||
"https://node-hk.sssaiapi.com/api/v1",
|
||||
"https://node-cf.sssaicodeapi.com/api/v1",
|
||||
],
|
||||
category: "third_party",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "sssaicode",
|
||||
icon: "sssaicode",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "Micu",
|
||||
websiteUrl: "https://www.micuapi.ai",
|
||||
@@ -521,6 +367,18 @@ export const grokBuildProviderPresets: GrokBuildProviderPreset[] = [
|
||||
icon: "micu",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "RightCode",
|
||||
websiteUrl: "https://www.right.codes",
|
||||
apiKeyUrl: "https://www.right.codes/register?aff=CCSWITCH",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("RightCode", "https://right.codes/codex/v1"),
|
||||
category: "third_party",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "rightcode",
|
||||
icon: "rc",
|
||||
iconColor: "#E96B2C",
|
||||
},
|
||||
{
|
||||
name: "ETok.ai",
|
||||
websiteUrl: "https://etok.ai",
|
||||
@@ -534,6 +392,150 @@ export const grokBuildProviderPresets: GrokBuildProviderPreset[] = [
|
||||
icon: "etok",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "Cubence",
|
||||
websiteUrl: "https://cubence.com",
|
||||
apiKeyUrl: "https://cubence.com/signup?code=CCSWITCH&source=ccs",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("Cubence", "https://api.cubence.com/v1"),
|
||||
endpointCandidates: [
|
||||
"https://api.cubence.com/v1",
|
||||
"https://api-cf.cubence.com/v1",
|
||||
"https://api-dmit.cubence.com/v1",
|
||||
"https://api-bwg.cubence.com/v1",
|
||||
],
|
||||
category: "third_party",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "cubence",
|
||||
icon: "cubence",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "CrazyRouter",
|
||||
websiteUrl: "https://www.crazyrouter.com",
|
||||
apiKeyUrl: "https://www.crazyrouter.com/register?aff=OZcm&ref=cc-switch",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("CrazyRouter", "https://cn.crazyrouter.com/v1"),
|
||||
endpointCandidates: ["https://cn.crazyrouter.com/v1"],
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "crazyrouter",
|
||||
icon: "crazyrouter",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "DMXAPI",
|
||||
websiteUrl: "https://www.dmxapi.cn",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("DMXAPI", "https://www.dmxapi.cn/v1"),
|
||||
endpointCandidates: ["https://www.dmxapi.cn/v1"],
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "dmxapi",
|
||||
},
|
||||
{
|
||||
name: "Qiniu",
|
||||
nameKey: "providerForm.presets.qiniu",
|
||||
websiteUrl: "https://s.qiniu.com/nMvAvy",
|
||||
apiKeyUrl: "https://s.qiniu.com/nMvAvy",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig(
|
||||
"Qiniu",
|
||||
"https://api.qnaigc.com/bypass/openai/v1",
|
||||
),
|
||||
endpointCandidates: [
|
||||
"https://api.qnaigc.com/bypass/openai/v1",
|
||||
"https://api.modelink.ai/bypass/openai/v1",
|
||||
],
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "qiniu",
|
||||
icon: "qiniu",
|
||||
},
|
||||
{
|
||||
name: "SudoCode.chat",
|
||||
websiteUrl: "https://sudocode.chat",
|
||||
apiKeyUrl:
|
||||
"https://sudocode.chat/register?utm_source=ccswitch&utm_medium=partner",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("SudoCode.chat", "https://api.sudocode.chat/v1"),
|
||||
endpointCandidates: ["https://api.sudocode.chat/v1"],
|
||||
apiFormat: "openai_responses",
|
||||
category: "third_party",
|
||||
isPartner: true,
|
||||
partnerPromotionKey: "sudocode",
|
||||
icon: "sudocode",
|
||||
},
|
||||
{
|
||||
name: "SudoCode.us",
|
||||
websiteUrl: "https://sudocode.us",
|
||||
apiKeyUrl: "https://sudocode.us",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("SudoCode.us", "https://sudocode.us/v1"),
|
||||
endpointCandidates: ["https://sudocode.us/v1", "https://sudocode.run/v1"],
|
||||
apiFormat: "openai_responses",
|
||||
category: "third_party",
|
||||
isPartner: true,
|
||||
icon: "sudocode-us",
|
||||
},
|
||||
// ===== 非赞助商预设:应用内展示按显示名排序,此处文件顺序不影响展示 =====
|
||||
{
|
||||
name: "xAI (Grok)",
|
||||
websiteUrl: "https://x.ai/api",
|
||||
apiKeyUrl: "https://console.x.ai",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("xAI (Grok)", "https://api.x.ai/v1"),
|
||||
endpointCandidates: ["https://api.x.ai/v1"],
|
||||
apiFormat: "openai_responses",
|
||||
category: "third_party",
|
||||
icon: "xai",
|
||||
iconColor: "#000000",
|
||||
},
|
||||
{
|
||||
name: "Amux",
|
||||
websiteUrl: "https://amux.ai",
|
||||
apiKeyUrl: "https://amux.ai",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("Amux", "https://api.amux.ai/v1"),
|
||||
endpointCandidates: ["https://api.amux.ai/v1"],
|
||||
category: "aggregator",
|
||||
icon: "amux",
|
||||
},
|
||||
{
|
||||
name: "AiHubMix",
|
||||
websiteUrl: "https://aihubmix.com",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("AiHubMix", "https://aihubmix.com/v1"),
|
||||
endpointCandidates: [
|
||||
"https://aihubmix.com/v1",
|
||||
"https://api.aihubmix.com/v1",
|
||||
],
|
||||
category: "aggregator",
|
||||
icon: "aihubmix",
|
||||
iconColor: "#006FFB",
|
||||
},
|
||||
{
|
||||
name: "CherryIN",
|
||||
websiteUrl: "https://open.cherryin.ai",
|
||||
apiKeyUrl: "https://open.cherryin.ai/console/token",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig(
|
||||
"CherryIN",
|
||||
"https://open.cherryin.net/v1",
|
||||
OPENROUTER_STYLE_GROK_MODEL,
|
||||
),
|
||||
endpointCandidates: ["https://open.cherryin.net/v1"],
|
||||
category: "aggregator",
|
||||
icon: "cherryin",
|
||||
},
|
||||
{
|
||||
name: "RelaxyCode",
|
||||
websiteUrl: "https://www.relaxycode.com",
|
||||
apiKeyUrl: "https://www.relaxycode.com/register",
|
||||
auth: grokAuth(),
|
||||
config: grokPresetConfig("RelaxyCode", "https://www.relaxycode.com/v1"),
|
||||
category: "third_party",
|
||||
icon: "relaxcode",
|
||||
},
|
||||
{
|
||||
name: "E-FlowCode",
|
||||
websiteUrl: "https://e-flowcode.cc",
|
||||
|
||||
+662
-661
File diff suppressed because it is too large
Load Diff
+1140
-1142
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -61,6 +61,7 @@ type TestPresetEntry = {
|
||||
settingsConfig: Record<string, never>;
|
||||
category: ProviderCategory;
|
||||
primePartner?: boolean;
|
||||
isPartner?: boolean;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -207,8 +208,9 @@ describe("ProviderPresetSelector pure helpers", () => {
|
||||
|
||||
const original = sortPresetEntries(presetEntries, originalMode, t);
|
||||
expect(original).not.toBe(presetEntries);
|
||||
// original 模式置顶官方分类(alpha),其余保持传入顺序。
|
||||
expect(getIds(original)).toEqual(["alpha", "gamma", "beta", "delta"]);
|
||||
// original 模式置顶官方分类(alpha);其余均非赞助商,按显示名排序
|
||||
// (Beta Gateway < Delta Mirror < Gamma 本地名)。
|
||||
expect(getIds(original)).toEqual(["alpha", "beta", "delta", "gamma"]);
|
||||
|
||||
expect(getIds(sortPresetEntries(presetEntries, nameAscMode, t))).toEqual([
|
||||
"alpha",
|
||||
@@ -229,30 +231,44 @@ describe("ProviderPresetSelector pure helpers", () => {
|
||||
).toEqual(["alpha", "beta", "delta", "gamma"]);
|
||||
});
|
||||
|
||||
it("original 模式按「官方 → 尊享伙伴 → 其余」三段排序,各组内部保序且双重身份不重复", () => {
|
||||
it("original 模式按「官方 → 尊享伙伴 → 赞助商 → 非赞助商」四段排序,前三组保序、末组按显示名,双重身份不重复", () => {
|
||||
// 故意打乱传入顺序,验证:
|
||||
// - official 组置顶(officialOnly、officialPrime 按出现顺序);
|
||||
// - 非官方且 primePartner 的预设居中(primeOnly);
|
||||
// - 其余保持传入顺序(restFirst、restLast);
|
||||
// - 既是 official 又是 primePartner 的预设只归入官方组、不在 prime 组重复。
|
||||
// - 非官方且 primePartner 的预设次之(primeAndPartner);
|
||||
// - 赞助商(isPartner)第三段,保持传入(预设文件)顺序:
|
||||
// partnerZeta 在 partnerAlpha 前,不按字母重排;
|
||||
// - 非赞助商按显示名排序:restAlpha 排到 restZulu 前;
|
||||
// - 既是 official 又是 primePartner 的只归入官方组;
|
||||
// 既是 primePartner 又是 isPartner 的只归入 prime 组、不在赞助商组重复。
|
||||
const mixed: TestPresetEntry[] = [
|
||||
{
|
||||
id: "restFirst",
|
||||
id: "restZulu",
|
||||
preset: {
|
||||
name: "Rest First",
|
||||
websiteUrl: "https://rest-first.example.com",
|
||||
name: "Zulu Rest",
|
||||
websiteUrl: "https://rest-zulu.example.com",
|
||||
settingsConfig: {},
|
||||
category: "third_party",
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "primeOnly",
|
||||
id: "partnerZeta",
|
||||
preset: {
|
||||
name: "Prime Only",
|
||||
websiteUrl: "https://prime-only.example.com",
|
||||
name: "Zeta Partner",
|
||||
websiteUrl: "https://partner-zeta.example.com",
|
||||
settingsConfig: {},
|
||||
category: "aggregator",
|
||||
isPartner: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "primeAndPartner",
|
||||
preset: {
|
||||
name: "Prime And Partner",
|
||||
websiteUrl: "https://prime-and-partner.example.com",
|
||||
settingsConfig: {},
|
||||
category: "cn_official",
|
||||
primePartner: true,
|
||||
isPartner: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -275,10 +291,20 @@ describe("ProviderPresetSelector pure helpers", () => {
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "restLast",
|
||||
id: "partnerAlpha",
|
||||
preset: {
|
||||
name: "Rest Last",
|
||||
websiteUrl: "https://rest-last.example.com",
|
||||
name: "Alpha Partner",
|
||||
websiteUrl: "https://partner-alpha.example.com",
|
||||
settingsConfig: {},
|
||||
category: "third_party",
|
||||
isPartner: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "restAlpha",
|
||||
preset: {
|
||||
name: "Alpha Rest",
|
||||
websiteUrl: "https://rest-alpha.example.com",
|
||||
settingsConfig: {},
|
||||
category: "aggregator",
|
||||
},
|
||||
@@ -288,23 +314,27 @@ describe("ProviderPresetSelector pure helpers", () => {
|
||||
expect(getIds(sortPresetEntries(mixed, "original", t))).toEqual([
|
||||
"officialOnly",
|
||||
"officialPrime",
|
||||
"primeOnly",
|
||||
"restFirst",
|
||||
"restLast",
|
||||
"primeAndPartner",
|
||||
"partnerZeta",
|
||||
"partnerAlpha",
|
||||
"restAlpha",
|
||||
"restZulu",
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
||||
describe("ProviderPresetSelector", () => {
|
||||
it("默认(original 模式)将官方分类置顶,其余保持传入顺序", () => {
|
||||
it("默认(original 模式)将官方分类置顶,非赞助商按显示名排序", () => {
|
||||
renderSelector();
|
||||
|
||||
// 组件内 t() 未配置翻译资源,显示名回退为 key 字面量:
|
||||
// Beta Gateway < Delta Mirror < preset.gamma。
|
||||
expect(getPresetButtonTexts()).toEqual([
|
||||
"providerPreset.custom",
|
||||
"preset.alpha",
|
||||
"preset.gamma",
|
||||
"Beta Gateway",
|
||||
"Delta Mirror",
|
||||
"preset.gamma",
|
||||
]);
|
||||
});
|
||||
|
||||
@@ -327,9 +357,9 @@ describe("ProviderPresetSelector", () => {
|
||||
expect(getPresetButtonTexts()).toEqual([
|
||||
"providerPreset.custom",
|
||||
"preset.alpha",
|
||||
"preset.gamma",
|
||||
"Beta Gateway",
|
||||
"Delta Mirror",
|
||||
"preset.gamma",
|
||||
]);
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user