diff --git a/src/components/providers/forms/ClaudeDesktopProviderForm.tsx b/src/components/providers/forms/ClaudeDesktopProviderForm.tsx index 1f16b9018..f50712297 100644 --- a/src/components/providers/forms/ClaudeDesktopProviderForm.tsx +++ b/src/components/providers/forms/ClaudeDesktopProviderForm.tsx @@ -296,7 +296,6 @@ export function ClaudeDesktopProviderForm({ showButtons = true, }: ClaudeDesktopProviderFormProps) { const { t } = useTranslation(); - const isOfficial = initialData?.category === "official"; const initialMode = initialData?.meta?.claudeDesktopMode ?? "direct"; const [mode, setMode] = useState<"direct" | "proxy">(initialMode); const needsModelMapping = mode === "proxy"; @@ -412,6 +411,9 @@ export function ClaudeDesktopProviderForm({ ); const activeProviderType = activePreset?.providerType ?? initialData?.meta?.providerType; + const isOfficial = + initialData?.category === "official" || + activePreset?.category === "official"; const usesManagedOAuth = activePreset?.requiresOAuth === true || activeProviderType === "github_copilot" || diff --git a/src/config/claudeDesktopProviderPresets.ts b/src/config/claudeDesktopProviderPresets.ts index 3edbc319d..ca3de1718 100644 --- a/src/config/claudeDesktopProviderPresets.ts +++ b/src/config/claudeDesktopProviderPresets.ts @@ -134,6 +134,21 @@ const brandedRoutes = ( }; export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [ + { + name: "Claude Desktop Official", + websiteUrl: "https://claude.ai/download", + category: "official", + baseUrl: "", + mode: "direct", + apiFormat: "anthropic", + theme: { + icon: "claude", + backgroundColor: "#D97757", + textColor: "#FFFFFF", + }, + icon: "anthropic", + iconColor: "#D4915D", + }, { name: "Shengsuanyun", nameKey: "providerForm.presets.shengsuanyun", diff --git a/tests/config/providerPresetOrder.test.ts b/tests/config/providerPresetOrder.test.ts index 4de21e906..6f15918ea 100644 --- a/tests/config/providerPresetOrder.test.ts +++ b/tests/config/providerPresetOrder.test.ts @@ -37,6 +37,15 @@ describe("provider preset order", () => { ]); }); + it("Claude Desktop 预设包含官方登录入口", () => { + expect(claudeDesktopProviderPresets[0]).toMatchObject({ + name: "Claude Desktop Official", + category: "official", + baseUrl: "", + mode: "direct", + }); + }); + it("Codex 预设把 PatewayAI 放在胜算云后面", () => { expectInOrder(namesOf(codexProviderPresets), ["Shengsuanyun", "PatewayAI"]); });