From 73c960fa1f75c93411864db0ba59b8faf0636a12 Mon Sep 17 00:00:00 2001 From: Abner <22141172+Silentely@users.noreply.github.com> Date: Wed, 26 Nov 2025 23:19:08 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20=E5=A2=9E=E5=BC=BA=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=E4=BB=A5=E6=94=AF=E6=8C=81=E4=B8=AD=E8=BD=AC?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E7=9A=84=E5=B5=8C=E5=A5=97=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 优先提取 upstream_error 中的错误信息 - 解决 cubence 等中转服务的错误显示问题 - 修复前端显示"you appear to be making a request using a non-Claude code cli client, which is prohibited" - 保持向后兼容的错误提取逻辑 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/actions/providers.ts | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/actions/providers.ts b/src/actions/providers.ts index b9a7f855d..991a19087 100644 --- a/src/actions/providers.ts +++ b/src/actions/providers.ts @@ -1057,6 +1057,33 @@ function extractErrorMessage(errorJson: unknown): string | undefined { return undefined; } + const obj = errorJson as Record; + + // 优先提取 upstream_error 中的错误信息(针对中转服务的嵌套错误) + // 例如: { error: { message: "请求目标分享错误", upstream_error: { error: { message: "真正的错误" } } } } + if (obj.error && typeof obj.error === "object") { + const errorObj = obj.error as Record; + if (errorObj.upstream_error && typeof errorObj.upstream_error === "object") { + const upstreamError = errorObj.upstream_error as Record; + + // 尝试从 upstream_error.error.message 提取 + if (upstreamError.error && typeof upstreamError.error === "object") { + const upstreamErrorObj = upstreamError.error as Record; + const upstreamMessage = normalizeErrorValue(upstreamErrorObj.message); + if (upstreamMessage) { + return upstreamMessage; + } + } + + // 尝试从 upstream_error.message 提取 + const upstreamMessage = normalizeErrorValue(upstreamError.message); + if (upstreamMessage) { + return upstreamMessage; + } + } + } + + // 常规错误提取逻辑(保持原有优先级) const candidates: Array<(obj: Record) => unknown> = [ (obj) => (obj.error as Record | undefined)?.message, (obj) => obj.message, @@ -1069,7 +1096,7 @@ function extractErrorMessage(errorJson: unknown): string | undefined { for (const getter of candidates) { let value: unknown; try { - value = getter(errorJson as Record); + value = getter(obj); } catch { continue; } From a589e018ee6ddca29556831c97c0e340c8154fb5 Mon Sep 17 00:00:00 2001 From: Abner <22141172+Silentely@users.noreply.github.com> Date: Wed, 26 Nov 2025 23:55:38 +0800 Subject: [PATCH 2/2] =?UTF-8?q?refactor:=20=E4=BD=BF=E7=94=A8=E5=8F=AF?= =?UTF-8?q?=E9=80=89=E9=93=BE=E7=AE=80=E5=8C=96=E9=94=99=E8=AF=AF=E6=8F=90?= =?UTF-8?q?=E5=8F=96=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 减少嵌套层级,提高代码可读性 - 使用可选链操作符简化属性访问 - 保持相同的功能逻辑 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/actions/providers.ts | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/src/actions/providers.ts b/src/actions/providers.ts index 991a19087..eb35cc871 100644 --- a/src/actions/providers.ts +++ b/src/actions/providers.ts @@ -1060,26 +1060,23 @@ function extractErrorMessage(errorJson: unknown): string | undefined { const obj = errorJson as Record; // 优先提取 upstream_error 中的错误信息(针对中转服务的嵌套错误) - // 例如: { error: { message: "请求目标分享错误", upstream_error: { error: { message: "真正的错误" } } } } - if (obj.error && typeof obj.error === "object") { - const errorObj = obj.error as Record; - if (errorObj.upstream_error && typeof errorObj.upstream_error === "object") { - const upstreamError = errorObj.upstream_error as Record; - - // 尝试从 upstream_error.error.message 提取 - if (upstreamError.error && typeof upstreamError.error === "object") { - const upstreamErrorObj = upstreamError.error as Record; - const upstreamMessage = normalizeErrorValue(upstreamErrorObj.message); - if (upstreamMessage) { - return upstreamMessage; - } - } + const upstreamError = (obj.error as { upstream_error?: unknown } | undefined)?.upstream_error; - // 尝试从 upstream_error.message 提取 - const upstreamMessage = normalizeErrorValue(upstreamError.message); - if (upstreamMessage) { - return upstreamMessage; - } + if (upstreamError && typeof upstreamError === "object") { + const upstreamErrorObj = upstreamError as Record; + + // 尝试从 upstream_error.error.message 提取 + const nestedMessage = normalizeErrorValue( + (upstreamErrorObj.error as { message?: unknown } | undefined)?.message + ); + if (nestedMessage) { + return nestedMessage; + } + + // 尝试从 upstream_error.message 提取 + const directMessage = normalizeErrorValue(upstreamErrorObj.message); + if (directMessage) { + return directMessage; } }