From 687882d5c014c23e7157dc0f15957af7fcd9006a Mon Sep 17 00:00:00 2001 From: farion1231 Date: Tue, 5 Aug 2025 15:11:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=BC=BA=E4=BE=9B=E5=BA=94=E5=95=86?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=A3=80=E6=9F=A5=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 Anthropic 官方状态检查,优先检查服务可用性 - 改进错误处理和状态码判断逻辑 - 增加超时时间到20秒,提高连接稳定性 - 优化错误信息显示,区分认证错误和服务不可用 - 使用最新的 claude-sonnet-4 模型进行测试 --- src/main/services.ts | 102 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 90 insertions(+), 12 deletions(-) diff --git a/src/main/services.ts b/src/main/services.ts index 3fe24a5..1dc46a9 100644 --- a/src/main/services.ts +++ b/src/main/services.ts @@ -8,35 +8,113 @@ export async function checkProviderStatus(provider: Provider): Promise { + // 200-299 为成功,400-499 通常表示 API 可用但请求有问题(如 key 无效) + return status < 500 + } } ) const responseTime = Date.now() - startTime - return { - isOnline: true, - responseTime, - lastChecked: new Date() + // 检查响应状态 + if (response.status >= 200 && response.status < 300) { + return { + isOnline: true, + responseTime, + lastChecked: new Date() + } + } else if (response.status >= 400 && response.status < 500) { + // 客户端错误,API 可用但可能是 key 无效或其他认证问题 + return { + isOnline: true, // API 本身是可用的 + responseTime, + lastChecked: new Date(), + error: `API 可用但认证失败 (${response.status}): ${response.data?.error?.message || '请检查 API Key'}` + } + } else { + return { + isOnline: false, + responseTime, + lastChecked: new Date(), + error: `服务器错误 (${response.status})` + } } } catch (error) { + const responseTime = Date.now() - startTime + + if (axios.isAxiosError(error)) { + if (error.code === 'ECONNABORTED' || error.code === 'ETIMEDOUT') { + return { + isOnline: false, + responseTime, + lastChecked: new Date(), + error: '请求超时 - 服务可能不可用' + } + } else if (error.response) { + // 服务器响应了错误状态码 + return { + isOnline: false, + responseTime, + lastChecked: new Date(), + error: `HTTP ${error.response.status}: ${error.response.data?.error?.message || error.message}` + } + } else if (error.request) { + // 请求发出但没有收到响应 + return { + isOnline: false, + responseTime, + lastChecked: new Date(), + error: '网络连接失败 - 无法访问服务' + } + } + } + return { isOnline: false, - responseTime: -1, + responseTime, lastChecked: new Date(), error: error instanceof Error ? error.message : '未知错误' }