Commit Graph

663 Commits

Author SHA1 Message Date
shaw
303c0c4e15 feat: 增加claude code客户端识别 2025-09-23 16:41:26 +08:00
shaw
5a2199f9a9 fix: claude提示词检测逻辑修复 2025-09-23 16:29:17 +08:00
shaw
0ba048aced feat: 优化专属账号删除逻辑 2025-09-23 15:48:38 +08:00
shaw
86668c3de9 fix:修复1.1.147版本启动问题 2025-09-22 13:53:56 +08:00
shaw
ff73375f0a fix: 优化codex错误抛出 增强客户端限制条件 2025-09-22 11:56:54 +08:00
shaw
f9c397cc1f feat: api-stats页面增加周限总限查询 2025-09-21 14:22:34 +08:00
shaw
588b181eb9 fix: 修复服务账户数量少了response账户 2025-09-20 22:03:43 +08:00
shaw
3628bb2b7a fix: 修复openai输入token计算问题 2025-09-20 21:43:48 +08:00
shaw
08c2b7a444 fix: 修复PR #458中的totalCostLimit功能问题
主要修复:
- 移除重复的totalUsageLimit字段,统一使用totalCostLimit
- 删除auth.js中重复的总费用限制检查逻辑
- 删除admin.js中重复的totalCostLimit验证代码
- 更新所有前端组件,移除totalUsageLimit引用

功能改进:
- 确保totalCostLimit作为永久累计费用限制正常工作
- 与dailyCostLimit(每日重置)功能互补
- 适用于预付费、一次性API Key场景

测试:
- 删除有逻辑错误的test-total-usage-limit.js
- 创建新的test-total-cost-limit.js验证功能正确性
- 所有测试通过,功能正常工作

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-20 17:37:20 +08:00
itzhan
a929ff4242 chore: fix prettier formatting 2025-09-20 08:27:41 +08:00
itzhan
200149b9ee chore: fix prettier formatting 2025-09-19 22:41:46 +08:00
itzhan
ec28b66e7f feat: 给key增加总用量限制 2025-09-19 21:57:24 +08:00
shaw
6e98c46371 fix: 修复oai代理密码保存问题 2025-09-18 19:47:09 +08:00
shaw
43cfb0f4f3 fix: 修复openai账号代理问题 2025-09-18 17:39:45 +08:00
shaw
f70c3babc9 fix: 修复编辑oai账号是代理IP被错误保存的问题 2025-09-18 10:22:41 +08:00
wfunc
f2dc834bba feat: 新增 telegram 通知 2025-09-16 11:44:39 +08:00
shaw
ae4bbe8253 docs: 更新codex默认模型示例 2025-09-16 10:40:58 +08:00
shaw
51cb92d395 feat: 适配gpt-5-codex模型 2025-09-16 09:01:41 +08:00
shaw
c0d6ecefac fix: 修复限流状态判断逻辑,兼容对象和字符串格式
- 修复 cleanupOpenAIAccounts 方法中 rateLimitStatus 判断问题
- 修复 cleanupClaudeConsoleAccounts 方法中的判断逻辑
- 优化 unifiedOpenAIScheduler 的 _isRateLimited 辅助方法
- 保持原始服务层数据获取方式,通过判断逻辑适配不同数据格式

问题原因:服务层返回的 rateLimitStatus 是对象格式,但清理逻辑使用字符串比较,
导致限流账户无法被正确检测和自动恢复。

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-14 12:20:10 +08:00
shaw
158a9b9a31 feat: 优化API Key批量创建和账户限流状态显示
- 添加 bedrockAccountId 和 rateLimitCost 字段到批量创建 API Key 功能
- 格式化 claudeAccountService 中的日志输出
- 改进账户视图中会话进度条样式,限流状态显示红色

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-14 11:59:09 +08:00
shaw
aabf909c61 fix:修复限流后未自动恢复调度的问题 2025-09-13 22:24:56 +08:00
shaw
b7da43f615 fix: 修复部分账号转发gemini api失败的问题 2025-09-12 11:41:14 +08:00
shaw
7c4feec5aa feat: 添加账户状态监控和自动恢复机制
- 实现账户健康度监控系统,支持30分钟内错误率检测
- 添加自动恢复机制,失败账户在30分钟后自动尝试恢复
- 优化账户选择策略,优先选择健康账户
- 增强Redis键管理,添加账户状态和错误追踪功能
- 改进Gemini服务错误处理和重试逻辑
- 新增standardGeminiRoutes标准化路由支持

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-11 22:02:53 +08:00
shaw
0eb95b3b06 refactor: 清理模型限制检查的冗余代码
优化内容:
- 删除 claudeRelayService.js 中的重复模型限制检查(82行代码)
- 保留 api.js 中的统一检查,覆盖所有服务类型(claude/console/ccr)
- 移除 /v1/messages/count_tokens 端点的模型限制(计数接口不需要限制)

架构改进:
- 模型限制逻辑现在集中在 api.js 的 handleMessagesRequest 函数中
- 避免了每个服务各自实现一遍的重复代码
- 提高了代码的可维护性和一致性

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-11 09:43:15 +08:00
shaw
f667a95d88 fix: 修复模型限制功能逻辑错误(从白名单改回黑名单)
问题原因:
- 在提交 7f9869ae 添加CCR支持时,错误地将模型限制从黑名单改成了白名单
- 前端UI显示"设置此API Key无法访问的模型",明确表示这是黑名单
- 后端却将其当作白名单处理,导致逻辑完全相反

修复内容:
- 将判断逻辑从 !includes 改回 includes(黑名单逻辑)
- 更新注释和日志消息,明确这是"限制列表"而非"允许列表"
- 同时修复了 api.js 和 claudeRelayService.js 中的所有相关判断

影响范围:
- src/routes/api.js: 修复 /v1/messages 和 /v1/messages/count_tokens 端点的模型限制判断
- src/services/claudeRelayService.js: 修复流式和非流式请求的模型限制判断

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-11 09:35:04 +08:00
shaw
2fcfccb2fc Merge branch 'dev' of github.com:Wei-Shaw/claude-relay-service into dev 2025-09-10 22:46:18 +08:00
Wesley Liddick
fe1f05fadd Merge pull request #411 from bottotl/main
兼容 sider 自定义 API
2025-09-10 22:36:54 +08:00
root
cd5573ecde Fix Prettier formatting issues
- Remove trailing whitespace and fix indentation in src/app.js
- Format whitespace in src/middleware/auth.js
- Fix formatting and add missing newline in src/middleware/browserFallback.js

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-10 09:13:51 +00:00
root
4fd4dbfa51 fix: 回退401错误处理逻辑到原始版本
- 恢复"遇到1次401就停止调度"的原始逻辑
- 移除"记录401错误但不停用账号"的临时修改
- 修复非流式和流式请求中的401处理逻辑
- 确保401错误会立即标记账号为异常状态

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-10 08:20:17 +00:00
sususu98
d3fcd95b94 refactor: improve readability of conditional statements 2025-09-10 15:55:34 +08:00
sususu98
433f0c5f23 fix: 更新会话续期逻辑,调整续期阈值和TTL设置,确保统一调度会话映射按配置正确续期 2025-09-10 15:53:23 +08:00
shaw
7712d5516c merge: 合并远程 dev 分支,整合 CCR 和 OpenAI-Responses 功能
## 合并内容
- 成功合并远程 dev 分支的 CCR (Claude Connector) 功能
- 保留本地的 OpenAI-Responses 账户管理功能
- 解决所有合并冲突,保留双方功能

## UI 调整
- 将 CCR 平台归类到 Claude 分组中
- 保留新的平台分组选择器设计
- 支持所有平台类型:Claude、CCR、OpenAI、OpenAI-Responses、Gemini、Azure OpenAI、Bedrock

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-10 15:49:52 +08:00
root
bdae9d6ceb feat: 添加Chrome插件兜底支持,解决第三方插件401错误问题
• 新增browserFallback中间件,自动识别并处理Chrome插件请求
• 增强CORS支持,明确允许chrome-extension://来源
• 优化请求头过滤,移除可能触发Claude CORS检查的浏览器头信息
• 完善401错误处理逻辑,避免因临时token问题导致账号被错误停用

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-10 07:48:41 +00:00
shaw
08946c67ea feat: 新增 OpenAI-Responses 账户管理功能和独立自动停止标记机制
## 功能新增
- 实现 OpenAI-Responses 账户服务(openaiResponsesAccountService.js)
  - 支持使用账户内置 API Key 进行请求转发
  - 实现每日额度管理和重置机制
  - 支持代理配置和优先级设置
- 实现 OpenAI-Responses 中继服务(openaiResponsesRelayService.js)
  - 处理请求转发和响应流处理
  - 自动记录使用统计信息
  - 支持流式和非流式响应
- 新增管理界面的 OpenAI-Responses 账户管理功能
  - 完整的 CRUD 操作支持
  - 实时额度监控和状态管理
  - 支持手动重置限流和每日额度

## 架构改进
- 引入独立的自动停止标记机制,区分不同原因的自动停止
  - rateLimitAutoStopped: 限流自动停止
  - fiveHourAutoStopped: 5小时限制自动停止
  - tempErrorAutoStopped: 临时错误自动停止
  - quotaAutoStopped: 额度耗尽自动停止
- 修复手动修改调度状态时自动恢复的问题
- 统一清理逻辑,防止状态冲突

## 其他优化
- getAccountUsageStats 支持不同账户类型参数
- 统一调度器支持 OpenAI-Responses 账户类型
- WebHook 通知增强,支持新账户类型的事件

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-10 15:41:52 +08:00
sususu98
1dd00e1463 format 2025-09-10 14:46:06 +08:00
sususu98
5938180583 Merge branch 'Wei-Shaw:dev' into dev 2025-09-10 14:40:46 +08:00
Wesley Liddick
3c5068866c Revert "合并所有新功能到Wei-Shaw仓库(排除ApiStatsView.vue)" 2025-09-10 14:37:52 +08:00
sususu98
c0059c68eb Merge branch 'Wei-Shaw:dev' into dev 2025-09-10 14:22:45 +08:00
sususu98
7f9869ae20 feat: 添加 CCR (Claude Code Router) 账户类型支持
实现通过供应商前缀语法进行 CCR 后端路由的完整支持。
用户现在可以在 Claude Code 中使用 `/model ccr,model_name` 将请求路由到 CCR 后端。
暂时没有实现`/v1/messages/count_tokens`,因为这需要在CCR后端支持。
CCR类型的账户也暂时没有考虑模型的支持情况

## 核心实现

### 供应商前缀路由

- 添加 modelHelper 工具用于解析模型名称中的 `ccr,` 供应商前缀
- 检测到前缀时自动路由到 CCR 账户池
- 转发到 CCR 后端前移除供应商前缀

### 账户管理

- 创建 ccrAccountService 实现 CCR 账户的完整 CRUD 操作
- 支持账户属性:名称、API URL、API Key、代理、优先级、配额
- 实现账户状态:active、rate_limited、unauthorized、overloaded
- 支持模型映射和支持模型配置

### 请求转发

- 实现 ccrRelayService 处理 CCR 后端通信
- 支持流式和非流式请求
- 从 SSE 流中解析和捕获使用数据
- 支持 Bearer 和 x-api-key 两种认证格式

### 统一调度

- 将 CCR 账户集成到 unifiedClaudeScheduler
- 添加 \_selectCcrAccount 方法用于 CCR 特定账户选择
- 支持 CCR 账户的会话粘性
- 防止跨类型会话映射(CCR 会话仅用于 CCR 请求)

### 错误处理

- 实现全面的错误状态管理
- 处理 401(未授权)、429(速率限制)、529(过载)错误
- 成功请求后自动从错误状态恢复
- 支持可配置的速率限制持续时间

### Web 管理界面

- 添加 CcrAccountForm 组件用于创建/编辑 CCR 账户
- 将 CCR 账户集成到 AccountsView 中,提供完整管理功能
- 支持账户切换、重置和使用统计
- 在界面中显示账户状态和错误信息

### API 端点

- POST /admin/ccr-accounts - 创建 CCR 账户
- GET /admin/ccr-accounts - 列出所有 CCR 账户
- PUT /admin/ccr-accounts/:id - 更新 CCR 账户
- DELETE /admin/ccr-accounts/:id - 删除 CCR 账户
- PUT /admin/ccr-accounts/:id/toggle - 切换账户启用状态
- PUT /admin/ccr-accounts/:id/toggle-schedulable - 切换可调度状态
- POST /admin/ccr-accounts/:id/reset-usage - 重置每日使用量
- POST /admin/ccr-accounts/:id/reset-status - 重置错误状态

## 技术细节

- CCR 账户使用 'ccr' 作为 accountType 标识符
- 带有 `ccr,` 前缀的请求绕过普通账户池
- 转发到 CCR 后端前清理模型名称内的`ccr,`
- 从流式和非流式响应中捕获使用数据
- 支持缓存令牌跟踪(创建和读取)
2025-09-10 14:21:48 +08:00
Wesley Liddick
27fe3b6853 Merge branch 'dev' into main 2025-09-10 14:04:27 +08:00
DuanNaiSheQu
af3d688e98 合并所有新功能到Wei-Shaw仓库(排除ApiStatsView.vue)
 新增功能:
- GPT-5 High推理级别费用追踪和限制
- API Key图标上传功能
- 优化的进度条显示组件
- 暗黑模式UI兼容
- 完整的前后端集成

🔥 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-10 13:38:27 +08:00
Wesley Liddick
c58d8d2040 Merge pull request #387 from f3n9/main-um-8
修复用户自行创建的API Key缺少服务权限信息的问题
2025-09-09 13:37:28 +08:00
Feng Yue
4ee9e0b546 API Keys created by users have all permissions by default 2025-09-09 12:52:34 +08:00
Wesley Liddick
8064bc24b9 Merge pull request #382 from Edric-Li/feat/add-account-info-to-error-logs
feat: 在错误日志中添加账号信息
2025-09-09 12:26:45 +08:00
Wesley Liddick
4592773ea2 Merge pull request #381 from Edric-Li/fix/dedicated-account-schedulable-check
fix: 修复专属账号停止调度后仍能使用的问题
2025-09-09 12:19:41 +08:00
Wesley Liddick
da744528bc Merge pull request #383 from Edric-Li/feature/smtp-notification
feat: 添加SMTP邮件通知功能
2025-09-09 12:19:26 +08:00
Edric Li
f375f9f841 fix: 修复 ESLint 错误 - 解决未定义变量问题
- claudeConsoleRelayService.js: 将 account 变量声明提到更高作用域
- claudeRelayService.js: 移除 _makeClaudeStreamRequest 函数中的未定义变量引用
2025-09-09 11:10:27 +08:00
Edric Li
52820a7e49 style: 修复 Prettier 格式问题
- 格式化 src/app.js
- 格式化 src/services/claudeConsoleRelayService.js
- 格式化 src/services/claudeRelayService.js
2025-09-09 04:14:27 +08:00
Edric Li
283362acd0 feat: 添加SMTP邮件通知功能
新增功能:
- 支持SMTP邮件通知平台,可通过邮件接收系统通知
- 支持配置SMTP服务器、端口、用户名、密码、发件人和收件人
- 支持TLS/SSL加密连接
- 提供美观的HTML邮件模板和纯文本备用格式

代码优化:
- 重构邮件格式化逻辑,提取buildNotificationDetails减少重复代码
- 优化前端表单验证逻辑,提取validatePlatformForm统一验证
- 清理UI中的冗余提示信息和配置项

UI改进:
- 移除SMTP配置说明文字
- 移除超时设置和忽略TLS证书验证选项
- 简化测试成功提示消息
- SMTP平台显示收件人邮箱而非URL

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-09 04:00:35 +08:00
Edric Li
756918b0ce feat: 在错误日志中添加账号信息
- 在 claudeRelayService.js 的所有错误日志中添加账号名称或 ID
- 在 claudeConsoleRelayService.js 的错误日志中添加账号信息
- 便于排查 529 (过载) 和 504 (超时) 错误对应的具体账号

问题背景:
用户反馈错误日志中没有账号信息,无法定位是哪个账号出现问题,
特别是 529 和 504 错误频繁出现时难以排查。

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-09 02:45:47 +08:00