diff --git a/src/components/providers/ProviderList.tsx b/src/components/providers/ProviderList.tsx index 43e30d953..e312d063b 100644 --- a/src/components/providers/ProviderList.tsx +++ b/src/components/providers/ProviderList.tsx @@ -13,7 +13,7 @@ import { type CSSProperties, } from "react"; import { AnimatePresence, motion } from "framer-motion"; -import { AlertTriangle, Download, Search, X } from "lucide-react"; +import { AlertTriangle, Search, X } from "lucide-react"; import { useTranslation } from "react-i18next"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { toast } from "sonner"; @@ -470,21 +470,6 @@ export function ProviderList({ return (
- {appId === "claude-desktop" && ( -
- -
- )} {claudeDesktopStatusMessages.length > 0 && (
diff --git a/src/components/providers/forms/ClaudeDesktopProviderForm.tsx b/src/components/providers/forms/ClaudeDesktopProviderForm.tsx index 435321cdc..dcae69ff3 100644 --- a/src/components/providers/forms/ClaudeDesktopProviderForm.tsx +++ b/src/components/providers/forms/ClaudeDesktopProviderForm.tsx @@ -314,24 +314,24 @@ export function ClaudeDesktopProviderForm({ } const routeEntries = routes - .map((route) => ({ + .map((route, index) => ({ ...route, - route: route.route.trim(), + route: + route.route.trim() || + (mode === "proxy" + ? `claude-${route.model.trim().replace(/[/\\]/g, "-") || `model-${index + 1}`}` + : ""), model: route.model.trim(), displayName: route.displayName.trim(), })) .filter((route) => route.route || route.model); if (mode === "proxy") { - const invalid = routeEntries.find( - (route) => - !route.route || !route.model || !isClaudeSafeRoute(route.route), - ); - if (invalid) { + const missing = routeEntries.find((route) => !route.model); + if (missing) { toast.error( t("claudeDesktop.routeInvalid", { - defaultValue: - "模型映射必须填写 claude-* / anthropic/claude-* 路由名和上游模型名", + defaultValue: "请填写上游模型名", }), ); return; @@ -339,7 +339,7 @@ export function ClaudeDesktopProviderForm({ if (routeEntries.length === 0) { toast.error( t("claudeDesktop.routesRequired", { - defaultValue: "需要模型映射时至少填写一个模型路由", + defaultValue: "至少填写一个上游模型", }), ); return; @@ -479,7 +479,7 @@ export function ClaudeDesktopProviderForm({ {needsModelMapping ? t("claudeDesktop.modelMappingOnHint", { defaultValue: - "Claude Desktop 只看到 claude-* 路由名,CC Switch 本地路由会映射到真实上游模型;需要保持本地路由运行。", + "Claude Desktop 目前对模型 ID 进行了限制,如果您的供应商提供的模型不是 Claude 系列模型,则需要打开本开关,并在使用过程中保持本地路由开启。", }) : t("claudeDesktop.modelMappingOffHint", { defaultValue: @@ -552,26 +552,21 @@ export function ClaudeDesktopProviderForm({ ...current, nextRouteRow(current, defaultProxyRouteRows), ]), - t("claudeDesktop.addRoute", { defaultValue: "添加路由" }), + t("claudeDesktop.addRoute", { defaultValue: "添加模型" }), )}

{t("claudeDesktop.routeMapHint", { defaultValue: - "左侧是 Claude Desktop 看到的 claude-* 模型名,右侧是真实发送给供应商的上游模型名。", + "填写供应商实际提供的模型名,显示名为在 Claude Desktop 模型列表中展示的名称。", })}

-
- - {t("claudeDesktop.routeModelLabel", { - defaultValue: "Desktop 模型", - })} - +
{t("claudeDesktop.upstreamModelLabel", { - defaultValue: "上游模型", + defaultValue: "实际请求模型", })} @@ -589,15 +584,8 @@ export function ClaudeDesktopProviderForm({ {routes.map((route, index) => (
- - updateRoute(index, { route: event.target.value }) - } - placeholder="claude-sonnet-4-6" - />