[PR #228] [MERGED] feat(kiro): 添加认证错误自动标记不健康及凭证切换重试机制,解决401 和403的问题 #309

Closed
opened 2026-02-27 07:18:54 +03:00 by kerem · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/justlovemaki/AIClient-2-API/pull/228
Author: @leonaii
Created: 1/13/2026
Status: Merged
Merged: 1/13/2026
Merged by: @justlovemaki

Base: mainHead: main


📝 Commits (1)

  • fbc5553 feat(kiro): 添加认证错误自动标记不健康及凭证切换重试机制,解决401 和403的问题

📊 Changes

4 files changed (+305 additions, -39 deletions)

View changed files

📝 src/providers/claude/claude-kiro.js (+96 -25)
📝 src/providers/provider-pool-manager.js (+29 -0)
📝 src/ui-modules/provider-api.js (+28 -4)
📝 src/utils/common.js (+152 -10)

📄 Description

概述

本 PR 为 KIRO 模式添加了完善的认证错误(401/403)处理逻辑,并实现了凭证切换重试机制,提高了服务的可用性和稳定性。

变更内容

1. KIRO 请求错误处理

  • 401 Unauthorized:尝试刷新 token 后重试,如果刷新失败则标记凭证为不健康
  • 403 Forbidden:直接标记凭证为不健康,不进行重试
  • 适用于 callApi()streamApiReal() 方法

2. 用量查询错误处理

  • 401/403 错误:直接标记凭证为不健康,返回详细错误信息(不重试)
  • 适用于 getUsageLimits() 方法

3. 凭证切换重试机制

  • 当凭证被标记为不健康后,自动尝试切换到其他健康凭证进行重试
  • 最大重试次数:2 次
  • 流式请求:如果已发送数据则不重试,避免响应数据损坏

4. 新增 Pool Manager 方法

  • markProviderUnhealthyImmediately():立即标记凭证为不健康(用于认证错误)
  • markProviderUnhealthy() 的区别:不累计错误计数,直接标记

5. UI 健康检查改进

  • 对认证错误(401/403)使用 markProviderUnhealthyImmediately() 立即标记

变更文件

文件 变更
src/providers/claude/claude-kiro.js +121 行
src/providers/provider-pool-manager.js +29 行
src/ui-modules/provider-api.js +32 行
src/utils/common.js +162 行

对其他 Provider 的影响

Provider 影响 说明
Gemini CLI OAuth 无影响 原有逻辑保持不变
Gemini Antigravity 无影响 原有逻辑保持不变
Claude Orchids 无影响 原有逻辑保持不变
OpenAI 无影响 原有逻辑保持不变
Qwen 无影响 原有逻辑保持不变
iFlow 无影响 原有逻辑保持不变

详细说明

  1. KIRO 特定代码claude-kiro.js 的变更仅影响 KIRO 模式
  2. Pool Manager 新方法markProviderUnhealthyImmediately() 是新增方法,不影响现有调用
  3. common.js 变更
    • 添加了 retryContext 参数(可选,默认 null)
    • 添加了 credentialMarkedUnhealthy 检查
    • 其他 Provider 不设置此标记,因此会走原有的 markProviderUnhealthy() 逻辑(累计错误计数)
  4. UI 健康检查:对所有 Provider 的认证错误立即标记不健康(正向改进)

新增功能(对所有 Provider)

  • 请求失败时会尝试切换凭证重试(如果号池中有多个健康凭证)
  • 这是一个可选的正向改进,不会破坏现有功能

测试建议

  1. 测试 KIRO 模式的 401/403 错误处理
  2. 测试凭证切换重试机制
  3. 验证其他 Provider(Gemini、OpenAI 等)的正常功能不受影响

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/justlovemaki/AIClient-2-API/pull/228 **Author:** [@leonaii](https://github.com/leonaii) **Created:** 1/13/2026 **Status:** ✅ Merged **Merged:** 1/13/2026 **Merged by:** [@justlovemaki](https://github.com/justlovemaki) **Base:** `main` ← **Head:** `main` --- ### 📝 Commits (1) - [`fbc5553`](https://github.com/justlovemaki/AIClient-2-API/commit/fbc55536072f5981be1fad255af9d0816bccd5d5) feat(kiro): 添加认证错误自动标记不健康及凭证切换重试机制,解决401 和403的问题 ### 📊 Changes **4 files changed** (+305 additions, -39 deletions) <details> <summary>View changed files</summary> 📝 `src/providers/claude/claude-kiro.js` (+96 -25) 📝 `src/providers/provider-pool-manager.js` (+29 -0) 📝 `src/ui-modules/provider-api.js` (+28 -4) 📝 `src/utils/common.js` (+152 -10) </details> ### 📄 Description ### 概述 本 PR 为 KIRO 模式添加了完善的认证错误(401/403)处理逻辑,并实现了凭证切换重试机制,提高了服务的可用性和稳定性。 ### 变更内容 #### 1. KIRO 请求错误处理 - **401 Unauthorized**:尝试刷新 token 后重试,如果刷新失败则标记凭证为不健康 - **403 Forbidden**:直接标记凭证为不健康,不进行重试 - 适用于 `callApi()` 和 `streamApiReal()` 方法 #### 2. 用量查询错误处理 - **401/403 错误**:直接标记凭证为不健康,返回详细错误信息(不重试) - 适用于 `getUsageLimits()` 方法 #### 3. 凭证切换重试机制 - 当凭证被标记为不健康后,自动尝试切换到其他健康凭证进行重试 - 最大重试次数:2 次 - 流式请求:如果已发送数据则不重试,避免响应数据损坏 #### 4. 新增 Pool Manager 方法 - `markProviderUnhealthyImmediately()`:立即标记凭证为不健康(用于认证错误) - 与 `markProviderUnhealthy()` 的区别:不累计错误计数,直接标记 #### 5. UI 健康检查改进 - 对认证错误(401/403)使用 `markProviderUnhealthyImmediately()` 立即标记 ### 变更文件 | 文件 | 变更 | |------|------| | `src/providers/claude/claude-kiro.js` | +121 行 | | `src/providers/provider-pool-manager.js` | +29 行 | | `src/ui-modules/provider-api.js` | +32 行 | | `src/utils/common.js` | +162 行 | ### 对其他 Provider 的影响 | Provider | 影响 | 说明 | |----------|------|------| | **Gemini CLI OAuth** | ❌ 无影响 | 原有逻辑保持不变 | | **Gemini Antigravity** | ❌ 无影响 | 原有逻辑保持不变 | | **Claude Orchids** | ❌ 无影响 | 原有逻辑保持不变 | | **OpenAI** | ❌ 无影响 | 原有逻辑保持不变 | | **Qwen** | ❌ 无影响 | 原有逻辑保持不变 | | **iFlow** | ❌ 无影响 | 原有逻辑保持不变 | #### 详细说明 1. **KIRO 特定代码**:`claude-kiro.js` 的变更仅影响 KIRO 模式 2. **Pool Manager 新方法**:`markProviderUnhealthyImmediately()` 是新增方法,不影响现有调用 3. **common.js 变更**: - 添加了 `retryContext` 参数(可选,默认 null) - 添加了 `credentialMarkedUnhealthy` 检查 - 其他 Provider 不设置此标记,因此会走原有的 `markProviderUnhealthy()` 逻辑(累计错误计数) 4. **UI 健康检查**:对所有 Provider 的认证错误立即标记不健康(正向改进) ### 新增功能(对所有 Provider) - 请求失败时会尝试切换凭证重试(如果号池中有多个健康凭证) - 这是一个**可选的正向改进**,不会破坏现有功能 ### 测试建议 1. 测试 KIRO 模式的 401/403 错误处理 2. 测试凭证切换重试机制 3. 验证其他 Provider(Gemini、OpenAI 等)的正常功能不受影响 --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
kerem 2026-02-27 07:18:54 +03:00
Sign in to join this conversation.
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/AIClient-2-API-justlovemaki#309
No description provided.