fix: Claude Desktop 官方供应商添加报错 #3402 (#3405)

* fix: Claude Desktop 官方供应商添加时缺少 ANTHROPIC_BASE_URL 报错

根因:前端 mutation 为 claude-desktop 生成随机 UUID 作为 provider id,
后端 is_official_provider 通过 id 匹配跳过校验,随机 UUID 不匹配导致
走入普通 direct 模式校验并要求 ANTHROPIC_BASE_URL。

修复:
- 前端:claude-desktop + category=official 时使用固定 id "claude-desktop-official"
- 后端:validate_provider / validate_direct_provider / validate_proxy_provider /
  apply_provider_to_paths 增加 category=="official" 兜底检查

Fixes #3402

* fix: restrict Claude Desktop official provider detection

* fix: add Claude Desktop official provider via seed

---------

Co-authored-by: 金恩光 <enguang.jin@gmail.com>
Co-authored-by: Jason <farion1231@gmail.com>
This commit is contained in:
Eunknight
2026-05-31 23:37:31 +08:00
committed by GitHub
parent 5ef72a2030
commit 0960fd7179
8 changed files with 185 additions and 3 deletions
@@ -30,6 +30,7 @@ interface AddProviderDialogProps {
provider: Omit<Provider, "id"> & {
providerKey?: string;
suggestedDefaults?: OpenClawSuggestedDefaults;
ensureClaudeDesktopOfficialSeed?: boolean;
},
) => Promise<void> | void;
}
@@ -98,6 +99,7 @@ export function AddProviderDialog({
const providerData: Omit<Provider, "id"> & {
providerKey?: string;
suggestedDefaults?: OpenClawSuggestedDefaults;
ensureClaudeDesktopOfficialSeed?: boolean;
} = {
name: values.name.trim(),
notes: values.notes?.trim() || undefined,
@@ -109,6 +111,16 @@ export function AddProviderDialog({
...(values.meta ? { meta: values.meta } : {}),
};
if (appId === "claude-desktop" && values.presetId) {
const presetIndex = parseInt(
values.presetId.replace("claude-desktop-", ""),
);
const preset = claudeDesktopProviderPresets[presetIndex];
providerData.ensureClaudeDesktopOfficialSeed =
values.presetCategory === "official" &&
preset?.category === "official";
}
// OpenCode/OpenClaw: pass providerKey for ID generation
if (
(appId === "opencode" || appId === "openclaw" || appId === "hermes") &&