feat(presets): restore AICoding partner across seven app types

Bring back the AICoding (aicoding.sh) provider preset that was dropped
in 910ca3b4, covering claude, claudeDesktop, codex, gemini, hermes,
opencode and openclaw, along with the partnerPromotion.aicoding string
in zh/en/ja and the sponsor entry in the three READMEs.

Model ids follow the current baseline rather than the pre-removal
values: gpt-5.5 for Codex, gemini-3.5-flash for Gemini, and
claude-opus-4-8 / claude-sonnet-5 for the Anthropic-relay presets.
OpenClaw costs use standard list pricing, consistent with its peers.

The icon, the logo asset, the zh-TW string and the legacy id in
codex_history_migration.rs were never removed and are reused as-is.
This commit is contained in:
Jason
2026-07-26 10:18:57 +08:00
parent 414b71500c
commit 876e9f898d
14 changed files with 292 additions and 106 deletions
+30 -15
View File
@@ -297,6 +297,36 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
partnerPromotionKey: "unity2",
icon: "unity2",
},
{
name: "AICoding",
websiteUrl: "https://aicoding.sh",
apiKeyUrl: "https://aicoding.sh/i/CCSWITCH",
category: "third_party",
baseUrl: "https://api.aicoding.sh",
mode: "direct",
apiFormat: "anthropic",
modelRoutes: passthroughRoutes(),
endpointCandidates: ["https://api.aicoding.sh"],
isPartner: true,
partnerPromotionKey: "aicoding",
icon: "aicoding",
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: "Shengsuanyun",
nameKey: "providerForm.presets.shengsuanyun",
@@ -315,21 +345,6 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
partnerPromotionKey: "shengsuanyun",
icon: "shengsuanyun",
},
{
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: "SubRouter",
websiteUrl: "https://subrouter.ai",
+30 -13
View File
@@ -268,24 +268,21 @@ export const providerPresets: ProviderPreset[] = [
icon: "unity2",
},
{
name: "Shengsuanyun",
nameKey: "providerForm.presets.shengsuanyun",
websiteUrl: "https://www.shengsuanyun.com/?from=CH_4HHXMRYF",
apiKeyUrl: "https://www.shengsuanyun.com/?from=CH_4HHXMRYF",
name: "AICoding",
websiteUrl: "https://aicoding.sh",
apiKeyUrl: "https://aicoding.sh/i/CCSWITCH",
settingsConfig: {
env: {
ANTHROPIC_BASE_URL: "https://router.shengsuanyun.com/api",
ANTHROPIC_BASE_URL: "https://api.aicoding.sh",
ANTHROPIC_AUTH_TOKEN: "",
ANTHROPIC_MODEL: "anthropic/claude-sonnet-5",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "anthropic/claude-haiku-4.5",
ANTHROPIC_DEFAULT_SONNET_MODEL: "anthropic/claude-sonnet-5",
ANTHROPIC_DEFAULT_OPUS_MODEL: "anthropic/claude-opus-4.8",
},
},
category: "aggregator",
isPartner: true,
partnerPromotionKey: "shengsuanyun",
icon: "shengsuanyun",
endpointCandidates: ["https://api.aicoding.sh"],
category: "third_party",
isPartner: true, // 合作伙伴
partnerPromotionKey: "aicoding", // 促销信息 i18n key
icon: "aicoding",
iconColor: "#000000",
},
{
name: "AIGoCode",
@@ -305,6 +302,26 @@ export const providerPresets: ProviderPreset[] = [
icon: "aigocode",
iconColor: "#5B7FFF",
},
{
name: "Shengsuanyun",
nameKey: "providerForm.presets.shengsuanyun",
websiteUrl: "https://www.shengsuanyun.com/?from=CH_4HHXMRYF",
apiKeyUrl: "https://www.shengsuanyun.com/?from=CH_4HHXMRYF",
settingsConfig: {
env: {
ANTHROPIC_BASE_URL: "https://router.shengsuanyun.com/api",
ANTHROPIC_AUTH_TOKEN: "",
ANTHROPIC_MODEL: "anthropic/claude-sonnet-5",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "anthropic/claude-haiku-4.5",
ANTHROPIC_DEFAULT_SONNET_MODEL: "anthropic/claude-sonnet-5",
ANTHROPIC_DEFAULT_OPUS_MODEL: "anthropic/claude-opus-4.8",
},
},
category: "aggregator",
isPartner: true,
partnerPromotionKey: "shengsuanyun",
icon: "shengsuanyun",
},
{
name: "SubRouter",
websiteUrl: "https://subrouter.ai",
+26 -10
View File
@@ -336,20 +336,20 @@ requires_openai_auth = true`,
icon: "unity2",
},
{
name: "Shengsuanyun",
nameKey: "providerForm.presets.shengsuanyun",
websiteUrl: "https://www.shengsuanyun.com/?from=CH_4HHXMRYF",
apiKeyUrl: "https://www.shengsuanyun.com/?from=CH_4HHXMRYF",
name: "AICoding",
websiteUrl: "https://aicoding.sh",
apiKeyUrl: "https://aicoding.sh/i/CCSWITCH",
auth: generateThirdPartyAuth(""),
config: generateThirdPartyConfig(
"shengsuanyun",
"https://router.shengsuanyun.com/api/v1",
"openai/gpt-5.5",
"aicoding",
"https://api.aicoding.sh",
"gpt-5.5",
),
category: "aggregator",
endpointCandidates: ["https://api.aicoding.sh"],
isPartner: true,
partnerPromotionKey: "shengsuanyun",
icon: "shengsuanyun",
partnerPromotionKey: "aicoding",
icon: "aicoding",
iconColor: "#000000",
},
{
name: "AIGoCode",
@@ -368,6 +368,22 @@ requires_openai_auth = true`,
icon: "aigocode",
iconColor: "#5B7FFF",
},
{
name: "Shengsuanyun",
nameKey: "providerForm.presets.shengsuanyun",
websiteUrl: "https://www.shengsuanyun.com/?from=CH_4HHXMRYF",
apiKeyUrl: "https://www.shengsuanyun.com/?from=CH_4HHXMRYF",
auth: generateThirdPartyAuth(""),
config: generateThirdPartyConfig(
"shengsuanyun",
"https://router.shengsuanyun.com/api/v1",
"openai/gpt-5.5",
),
category: "aggregator",
isPartner: true,
partnerPromotionKey: "shengsuanyun",
icon: "shengsuanyun",
},
{
name: "SubRouter",
websiteUrl: "https://subrouter.ai",
+32 -12
View File
@@ -136,23 +136,24 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
icon: "unity2",
},
{
name: "Shengsuanyun",
nameKey: "providerForm.presets.shengsuanyun",
websiteUrl: "https://www.shengsuanyun.com/?from=CH_4HHXMRYF",
apiKeyUrl: "https://www.shengsuanyun.com/?from=CH_4HHXMRYF",
name: "AICoding",
websiteUrl: "https://aicoding.sh",
apiKeyUrl: "https://aicoding.sh/i/CCSWITCH",
settingsConfig: {
env: {
GOOGLE_GEMINI_BASE_URL: "https://router.shengsuanyun.com/api",
GEMINI_MODEL: "google/gemini-3.5-flash",
GOOGLE_GEMINI_BASE_URL: "https://api.aicoding.sh",
GEMINI_MODEL: "gemini-3.5-flash",
},
},
baseURL: "https://router.shengsuanyun.com/api",
model: "google/gemini-3.5-flash",
description: "Shengsuanyun",
category: "aggregator",
baseURL: "https://api.aicoding.sh",
model: "gemini-3.5-flash",
description: "AICoding",
category: "third_party",
isPartner: true,
partnerPromotionKey: "shengsuanyun",
icon: "shengsuanyun",
partnerPromotionKey: "aicoding",
endpointCandidates: ["https://api.aicoding.sh"],
icon: "aicoding",
iconColor: "#000000",
},
{
name: "AIGoCode",
@@ -174,6 +175,25 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
icon: "aigocode",
iconColor: "#5B7FFF",
},
{
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: "SubRouter",
websiteUrl: "https://subrouter.ai",
+13 -13
View File
@@ -184,6 +184,19 @@ export const grokBuildProviderPresets: GrokBuildProviderPreset[] = [
partnerPromotionKey: "unity2",
icon: "unity2",
},
{
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: "Shengsuanyun",
nameKey: "providerForm.presets.shengsuanyun",
@@ -200,19 +213,6 @@ export const grokBuildProviderPresets: GrokBuildProviderPreset[] = [
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",
+36 -12
View File
@@ -335,23 +335,27 @@ 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",
name: "AICoding",
websiteUrl: "https://aicoding.sh",
apiKeyUrl: "https://aicoding.sh/i/CCSWITCH",
settingsConfig: {
name: "shengsuanyun",
base_url: "https://router.shengsuanyun.com/api/v1",
name: "aicoding",
base_url: "https://api.aicoding.sh",
api_key: "",
api_mode: "chat_completions",
models: [{ id: "openai/gpt-5.5", name: "GPT-5.5" }],
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",
category: "third_party",
isPartner: true,
partnerPromotionKey: "shengsuanyun",
icon: "shengsuanyun",
partnerPromotionKey: "aicoding",
icon: "aicoding",
iconColor: "#000000",
suggestedDefaults: {
model: { default: "openai/gpt-5.5", provider: "shengsuanyun" },
model: { default: "claude-opus-4-8", provider: "aicoding" },
},
},
{
@@ -378,6 +382,26 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
model: { default: "claude-opus-4-8", provider: "aigocode" },
},
},
{
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: "SubRouter",
websiteUrl: "https://subrouter.ai",
+60 -14
View File
@@ -467,33 +467,33 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
},
},
{
name: "Shengsuanyun",
nameKey: "providerForm.presets.shengsuanyun",
websiteUrl: "https://www.shengsuanyun.com/?from=CH_4HHXMRYF",
apiKeyUrl: "https://www.shengsuanyun.com/?from=CH_4HHXMRYF",
name: "AICoding",
websiteUrl: "https://aicoding.sh",
apiKeyUrl: "https://aicoding.sh/i/CCSWITCH",
settingsConfig: {
baseUrl: "https://router.shengsuanyun.com/api",
baseUrl: "https://api.aicoding.sh",
apiKey: "",
api: "anthropic-messages",
models: [
{
id: "anthropic/claude-opus-4.8",
id: "claude-opus-4-8",
name: "Claude Opus 4.8",
contextWindow: 1000000,
cost: { input: 5, output: 25 },
},
{
id: "anthropic/claude-sonnet-5",
id: "claude-sonnet-5",
name: "Claude Sonnet 5",
contextWindow: 1000000,
cost: { input: 3, output: 15 },
},
],
},
category: "aggregator",
category: "third_party",
isPartner: true,
partnerPromotionKey: "shengsuanyun",
icon: "shengsuanyun",
partnerPromotionKey: "aicoding",
icon: "aicoding",
iconColor: "#000000",
templateValues: {
apiKey: {
label: "API Key",
@@ -503,12 +503,12 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
},
suggestedDefaults: {
model: {
primary: "shengsuanyun/anthropic/claude-opus-4.8",
fallbacks: ["shengsuanyun/anthropic/claude-sonnet-5"],
primary: "aicoding/claude-opus-4-8",
fallbacks: ["aicoding/claude-sonnet-5"],
},
modelCatalog: {
"shengsuanyun/anthropic/claude-opus-4.8": { alias: "Opus" },
"shengsuanyun/anthropic/claude-sonnet-5": { alias: "Sonnet" },
"aicoding/claude-opus-4-8": { alias: "Opus" },
"aicoding/claude-sonnet-5": { alias: "Sonnet" },
},
},
},
@@ -558,6 +558,52 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
},
},
},
{
name: "Shengsuanyun",
nameKey: "providerForm.presets.shengsuanyun",
websiteUrl: "https://www.shengsuanyun.com/?from=CH_4HHXMRYF",
apiKeyUrl: "https://www.shengsuanyun.com/?from=CH_4HHXMRYF",
settingsConfig: {
baseUrl: "https://router.shengsuanyun.com/api",
apiKey: "",
api: "anthropic-messages",
models: [
{
id: "anthropic/claude-opus-4.8",
name: "Claude Opus 4.8",
contextWindow: 1000000,
cost: { input: 5, output: 25 },
},
{
id: "anthropic/claude-sonnet-5",
name: "Claude Sonnet 5",
contextWindow: 1000000,
cost: { input: 3, output: 15 },
},
],
},
category: "aggregator",
isPartner: true,
partnerPromotionKey: "shengsuanyun",
icon: "shengsuanyun",
templateValues: {
apiKey: {
label: "API Key",
placeholder: "",
editorValue: "",
},
},
suggestedDefaults: {
model: {
primary: "shengsuanyun/anthropic/claude-opus-4.8",
fallbacks: ["shengsuanyun/anthropic/claude-sonnet-5"],
},
modelCatalog: {
"shengsuanyun/anthropic/claude-opus-4.8": { alias: "Opus" },
"shengsuanyun/anthropic/claude-sonnet-5": { alias: "Sonnet" },
},
},
},
{
name: "SubRouter",
websiteUrl: "https://subrouter.ai",
+41 -11
View File
@@ -560,27 +560,27 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [
},
},
{
name: "Shengsuanyun",
nameKey: "providerForm.presets.shengsuanyun",
websiteUrl: "https://www.shengsuanyun.com/?from=CH_4HHXMRYF",
apiKeyUrl: "https://www.shengsuanyun.com/?from=CH_4HHXMRYF",
name: "AICoding",
websiteUrl: "https://aicoding.sh",
apiKeyUrl: "https://aicoding.sh/i/CCSWITCH",
settingsConfig: {
npm: "@ai-sdk/anthropic",
name: "Shengsuanyun",
name: "AICoding",
options: {
baseURL: "https://router.shengsuanyun.com/api/v1",
baseURL: "https://api.aicoding.sh",
apiKey: "",
setCacheKey: true,
},
models: {
"anthropic/claude-opus-4.8": { name: "Claude Opus 4.8" },
"anthropic/claude-sonnet-5": { name: "Claude Sonnet 5" },
"claude-sonnet-5": { name: "Claude Sonnet 5" },
"claude-opus-4-8": { name: "Claude Opus 4.8" },
},
},
category: "aggregator",
category: "third_party",
isPartner: true,
partnerPromotionKey: "shengsuanyun",
icon: "shengsuanyun",
partnerPromotionKey: "aicoding",
icon: "aicoding",
iconColor: "#000000",
templateValues: {
apiKey: {
label: "API Key",
@@ -619,6 +619,36 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [
},
},
},
{
name: "Shengsuanyun",
nameKey: "providerForm.presets.shengsuanyun",
websiteUrl: "https://www.shengsuanyun.com/?from=CH_4HHXMRYF",
apiKeyUrl: "https://www.shengsuanyun.com/?from=CH_4HHXMRYF",
settingsConfig: {
npm: "@ai-sdk/anthropic",
name: "Shengsuanyun",
options: {
baseURL: "https://router.shengsuanyun.com/api/v1",
apiKey: "",
setCacheKey: true,
},
models: {
"anthropic/claude-opus-4.8": { name: "Claude Opus 4.8" },
"anthropic/claude-sonnet-5": { name: "Claude Sonnet 5" },
},
},
category: "aggregator",
isPartner: true,
partnerPromotionKey: "shengsuanyun",
icon: "shengsuanyun",
templateValues: {
apiKey: {
label: "API Key",
placeholder: "",
editorValue: "",
},
},
},
{
name: "SubRouter",
websiteUrl: "https://subrouter.ai",