mrlitong
|
1f61478fbc
|
refactor: 优化账户过期检查逻辑和代码一致性
## 主要改进
### 1. 添加缺失的过期检查方法
- 在 `claudeConsoleAccountService` 中添加 `isSubscriptionExpired()` 方法
- 在 `ccrAccountService` 中添加 `isSubscriptionExpired()` 方法
- 与其他 7 个账户服务保持一致的实现方式
### 2. 统一过期检查逻辑
- 重构 `unifiedClaudeScheduler` 中的 5 处手动日期检查代码
- 统一调用服务层的 `isSubscriptionExpired()` 方法
- 消除重复代码,提升可维护性
### 3. 统一字段映射顺序
- 调整 Claude 账户更新端点的 `mapExpiryField()` 调用时机
- 与其他账户类型保持一致的处理顺序
- 提升代码可读性和一致性
## 技术细节
**修改文件**:
- `src/services/claudeConsoleAccountService.js`: 添加 `isSubscriptionExpired()`
- `src/services/ccrAccountService.js`: 添加 `isSubscriptionExpired()`
- `src/services/unifiedClaudeScheduler.js`: 5 处调用统一为服务方法
- `src/routes/admin.js`: 统一字段映射顺序
**改进效果**:
- ✅ 代码一致性提升:所有账户服务统一实现
- ✅ 可维护性提升:过期逻辑集中管理
- ✅ 减少重复代码:消除 4 处重复实现
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-14 08:35:13 +00:00 |
|
mrlitong
|
cd5df4f76b
|
Merge remote-tracking branch 'upstream/main' into feature/account-subscription-expiry-check
|
2025-10-14 08:04:12 +00:00 |
|
mrlitong
|
cbc3a83f11
|
refactor: 统一账户过期时间字段映射和检查逻辑
主要改进:
1. 创建 mapExpiryField() 工具函数统一处理前后端字段映射(expiresAt -> subscriptionExpiresAt)
2. 统一 subscriptionExpiresAt 初始值为 null(替代空字符串)
3. 规范过期检查方法名为 isSubscriptionExpired(),返回 true 表示已过期
4. 优化过期检查条件判断,只检查 null 而非空字符串
5. 补充 OpenAI-Responses 和调度器中缺失的过期检查逻辑
6. 添加代码评审文档记录未修复问题
影响范围:
- 所有 9 种账户服务的过期字段处理
- admin.js 中所有账户更新路由
- 统一调度器的过期账户过滤逻辑
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-14 08:04:05 +00:00 |
|
litongtongxue
|
1e7465e533
|
feat: 为所有账户服务添加订阅过期检查功能
完成账户订阅到期时间功能的核心调度逻辑实现。
## 实现范围
✅ 已添加订阅过期检查的服务(5个):
- Gemini 服务:添加 isSubscriptionExpired() 函数及调度过滤
- OpenAI 服务:添加 isSubscriptionExpired() 函数及调度过滤
- Droid 服务:添加 _isSubscriptionExpired() 方法及调度过滤
- Bedrock 服务:添加 _isSubscriptionExpired() 方法及调度过滤
- Azure OpenAI 服务:添加 isSubscriptionExpired() 函数及调度过滤
## 核心功能
- 账户调度时自动检查 subscriptionExpiresAt 字段
- 过期账户将不再被系统调度使用
- 未设置过期时间的账户视为永不过期(向后兼容)
- 使用 <= 比较判断过期(精确到过期时刻)
- 跳过过期账户时记录 debug 日志便于排查
## 技术实现
- 统一的实现模式:过期检查函数 + 账户选择逻辑集成
- 不影响现有功能,完全向后兼容
- 业务字段 subscriptionExpiresAt 与技术字段 expiresAt(OAuth token过期)独立管理
## 相关文档
参考 account_expire_bugfix.md 了解问题背景和实现细节
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-14 02:42:03 +00:00 |
|
AAEE86
|
8d84e2fa6e
|
refactor: 优化API Key状态更新和日志记录格式
|
2025-10-14 09:33:17 +08:00 |
|
AAEE86
|
ea3ad2157f
|
fix: 优化API Key错误状态码的显示方式
|
2025-10-14 00:53:19 +08:00 |
|
AAEE86
|
1f9afc788b
|
feat: 添加Droid账户API Key管理功能
(cherry picked from commit 0cf3ca6c7eafcf28a2da7e8bfd6814b4883bb752)
|
2025-10-13 18:24:49 +08:00 |
|
Wesley Liddick
|
222b2862cc
|
Merge pull request #560 from looksgood/main
优化Claude OAuth 账户的模型检查
|
2025-10-13 11:41:39 +08:00 |
|
liangjie.wanglj
|
8093dfb11c
|
优化Claude OAuth 账户的模型检查
|
2025-10-13 10:55:19 +08:00 |
|
shaw
|
a67c34bee1
|
fix: 修复claude SSE捕获usage问题
|
2025-10-12 23:05:48 +08:00 |
|
shaw
|
6f6c274877
|
fix: 继续修复PR-541遗留的系列bug
|
2025-10-12 22:13:38 +08:00 |
|
shaw
|
5611e86154
|
fix: 修复console计费问题
|
2025-10-12 20:56:27 +08:00 |
|
shaw
|
22928aeae3
|
fix: 优化droid默认启用推理的问题
|
2025-10-12 20:16:13 +08:00 |
|
shaw
|
33e69ac6e2
|
fix: 修复droid claude的temperature参数问题
|
2025-10-12 19:14:25 +08:00 |
|
shaw
|
45dab2af40
|
fix: 修复temperature参数传递问题
|
2025-10-12 18:35:28 +08:00 |
|
shaw
|
0d7a200505
|
Merge PR #512: 添加 OpenAI chat/completions 兼容支持
## 主要功能
- ✅ 使用策略模式处理不同后端(Claude/OpenAI/Gemini)
- ✅ 添加 OpenAI chat/completions 兼容支持
- ✅ 修复代码缩进符合 ESLint 规范
## 核心变更
### 1. 后端检测机制
添加 `detectBackendFromModel()` 函数:
- 根据模型名称前缀检测后端(claude-/gpt-/gemini-)
- 默认使用 Claude 后端
### 2. 扩展模型列表
/v1/models 端点现在返回:
- Claude 模型:Sonnet 4.5, Opus 4.1, Sonnet 4, Haiku等
- OpenAI 模型:gpt-4o, gpt-4o-mini, gpt-4-turbo等
- Gemini 模型:gemini-1.5-pro, gemini-1.5-flash等
### 3. OpenAI 兼容支持
- 添加 `validateChatCompletionRequest()` 验证函数
- 支持 OpenAI chat/completions 请求格式
- 实现流式和非流式响应处理
### 4. 代码规范
- 修复 ESLint 缩进问题
- 统一代码格式
## 技术细节
- 修改文件:src/routes/api.js, src/services/openaiToClaude.js 等
- 版本更新:1.1.168 → 1.1.169
- 保留了之前添加的账户过期检查逻辑(来自PR #541)
作者: bottotl
PR: https://github.com/Wei-Shaw/claude-relay-service/pull/512
|
2025-10-12 13:49:20 +08:00 |
|
shaw
|
a84f344df6
|
Merge PR #541: 添加账户订阅到期时间管理功能 + 修复核心过期检查逻辑
## 原PR功能
- ✅ 后端添加subscriptionExpiresAt字段支持
- ✅ 前端提供到期时间设置界面(快捷选项 + 自定义日期)
- ✅ 账户列表显示到期状态(已过期🔴/即将过期🟠/永不过期⚪)
- ✅ 新增AccountExpiryEditModal.vue编辑弹窗组件
- ✅ 支持创建和更新账户时设置到期时间
- ✅ 完整支持暗黑模式
## 🔧 关键修复(本次提交)
原PR缺少核心过期检查逻辑,过期账户仍会被调度使用。本次合并时添加了:
1. **新增isAccountNotExpired()方法**:
- 检查账户subscriptionExpiresAt字段
- 未设置过期时间视为永不过期
- 添加debug日志记录过期账户
2. **在selectAvailableAccount()中添加过期检查**:
- 过滤逻辑中集成this.isAccountNotExpired(account)
- 确保过期账户不被选择
3. **在selectAccountForApiKey()中添加过期检查**:
- 绑定账户检查中添加过期验证
- 共享池过滤中添加过期验证
## 🗑️ 清理工作
- 移除了不应提交的account_expire_feature.md评审文档(756行)
## 技术细节
- API层使用expiresAt,存储层使用subscriptionExpiresAt
- 存储格式:ISO 8601 (UTC)
- 空值表示:null表示永不过期
- 时区处理:后端UTC,前端自动转换本地时区
作者: mrlitong (原PR) + Claude Code (修复)
PR: https://github.com/Wei-Shaw/claude-relay-service/pull/541
|
2025-10-12 13:42:57 +08:00 |
|
shaw
|
df2527a86c
|
Merge PR #548: 修复Claude Console流式响应usage统计不完整问题
- 完善message_delta中usage数据提取逻辑,支持提取input_tokens、cache_read_input_tokens等所有字段
- 添加兜底保护机制,确保流结束时不会丢失未保存的usage数据
- 提升关键日志级别从debug到info,便于问题排查
- 修复流式请求中input_tokens和cache_read_input_tokens为0的统计bug
作者: DokiDoki1103
PR: https://github.com/Wei-Shaw/claude-relay-service/pull/548
|
2025-10-12 13:30:25 +08:00 |
|
shaw
|
b7cd143b4c
|
fix: 修复temperature参数冲突问题
|
2025-10-12 13:25:43 +08:00 |
|
jft0m
|
44c6be129b
|
Merge branch 'Wei-Shaw:main' into main
|
2025-10-12 09:28:12 +08:00 |
|
litongtongxue
|
c8c337099e
|
Merge upstream/main into feature/account-expiry-management
解决与 upstream/main 的代码冲突:
- 保留账户到期时间 (expiresAt) 功能
- 采用 buildProxyPayload() 函数重构代理配置
- 同步最新的 Droid 平台功能和修复
主要改动:
- AccountForm.vue: 整合到期时间字段和新的 proxy 处理方式
- 合并 upstream 的 Droid 多 API Key 支持等新特性
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-12 00:55:25 +08:00 |
|
shaw
|
0b2610842a
|
feat: droid apikey异常自动移除
|
2025-10-11 22:39:41 +08:00 |
|
shaw
|
53dee11a10
|
feat: droid的apikey模式适配多种更新方式
|
2025-10-11 22:15:38 +08:00 |
|
shaw
|
6dcb8b9449
|
fix: 修复droid转发流式请求判断
|
2025-10-11 20:46:05 +08:00 |
|
DokiDoki1103
|
b7fe75cb60
|
fix: 修复Claude Console流式响应usage统计不完整问题
- 完善message_delta中usage数据提取逻辑,支持提取input_tokens、cache_read_input_tokens等所有字段
- 添加兜底保护机制,确保流结束时不会丢失未保存的usage数据
- 提升关键日志级别从debug到info,便于问题排查
- 修复流式请求中input_tokens和cache_read_input_tokens为0的统计bug
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-11 20:16:44 +08:00 |
|
shaw
|
56fe7be8ec
|
fix: 优化claude code系统提示词判断
|
2025-10-11 17:34:17 +08:00 |
|
shaw
|
cd9a2025b2
|
fix: 适配droid调用claude code订阅接口
|
2025-10-11 14:17:08 +08:00 |
|
shaw
|
9b211b063b
|
feat: 适配claude的400错误码
|
2025-10-11 13:00:02 +08:00 |
|
shaw
|
6f2307721b
|
fix: 修复droid账号调度接口404问题
|
2025-10-11 11:34:13 +08:00 |
|
shaw
|
6c2ef2eef3
|
fix: 修复droid账号更新丢失apikey的问题
|
2025-10-11 11:23:24 +08:00 |
|
shaw
|
19fa518e65
|
fix: 修复droid追加和代理代理IP提交异常的问题
|
2025-10-11 10:50:26 +08:00 |
|
litongtongxue
|
a82dcebd7b
|
feat: 添加账户订阅到期时间管理功能
## 新增功能
- 支持为 Claude 账户设置订阅到期时间
- 前端提供到期时间选择器(快捷选项 + 自定义日期)
- 账户列表显示到期状态(已过期/即将过期/永不过期)
- 新增独立的到期时间编辑弹窗组件
## 技术变更
- 后端新增 subscriptionExpiresAt 字段存储
- 前端使用 expiresAt 字段进行交互
- 支持创建、编辑、显示完整流程
## 包含文件
- src/routes/admin.js: POST/PUT 端点支持 expiresAt 字段
- src/services/claudeAccountService.js: 存储和返回到期时间
- web/admin-spa/src/components/accounts/AccountForm.vue: 表单添加到期时间选择
- web/admin-spa/src/views/AccountsView.vue: 列表显示和编辑功能
- web/admin-spa/src/components/accounts/AccountExpiryEditModal.vue: 新增编辑弹窗
- account_expire_feature.md: 代码评审报告和优化建议
## 注意事项
⚠️ 本次提交包含初步实现,详细的优化建议请查看 account_expire_feature.md
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-11 01:05:21 +08:00 |
|
jft0m
|
1c80970aef
|
Merge branch 'Wei-Shaw:main' into main
|
2025-10-10 21:37:18 +08:00 |
|
shaw
|
6b02dbf040
|
fix: 优化droid转发错误传递
|
2025-10-10 20:05:13 +08:00 |
|
shaw
|
e150bc4beb
|
fix: droid转发移除claude code的metadata参数
|
2025-10-10 19:15:25 +08:00 |
|
shaw
|
1198ee1619
|
fix: 修复codex传递的gpt-5模型无法使用droid账号的问题
|
2025-10-10 18:40:19 +08:00 |
|
shaw
|
66fe3cf74a
|
fix: 优化count_tokens接口不受并发跟客户端限制
|
2025-10-10 17:16:10 +08:00 |
|
shaw
|
fad9e52c98
|
feat: Droid平台支持多apikey添加
|
2025-10-10 16:09:15 +08:00 |
|
shaw
|
42db271848
|
feat: droid平台账户数据统计及调度能力
|
2025-10-10 15:13:45 +08:00 |
|
shaw
|
2fc84a6aca
|
feat: 新增Droid cli支持
|
2025-10-09 23:05:09 +08:00 |
|
於林涛
|
705bd7611c
|
Merge remote-tracking branch 'upstream/main'
# Conflicts:
# src/routes/api.js
|
2025-10-08 19:34:17 +08:00 |
|
shaw
|
6e770146fd
|
fix: 优化cache control问题2
|
2025-10-07 15:14:08 +08:00 |
|
shaw
|
88429e1a24
|
fix: 优化cache control问题
|
2025-10-07 14:37:28 +08:00 |
|
jft0m
|
5d7225b2eb
|
feat: 添加 Opus 限流状态显示
- 在账户列表中显示 Opus 限流状态徽章
- 显示限流剩余时间(天/小时)
- 后端 API 添加 opusRateLimitedAt 和 opusRateLimitEndAt 字段
- 优化徽章样式,防止文字溢出
|
2025-10-06 15:49:28 +00:00 |
|
jft0m
|
530dac0e7f
|
refactor: 重构 handleChatCompletions 函数模块化
- 使用策略模式处理不同后端(Claude/OpenAI/Gemini)
- 添加 OpenAI chat/completions 兼容支持
|
2025-10-04 14:11:13 +08:00 |
|
shaw
|
2872198259
|
chore: claude绑定账号响应限流提示
|
2025-10-04 11:31:21 +08:00 |
|
shaw
|
cd72a29674
|
chore: opus周限提示增加重置时间
|
2025-10-04 11:10:55 +08:00 |
|
shaw
|
d44582dc31
|
feat: 适配claude新opus周限规则
|
2025-10-04 10:49:40 +08:00 |
|
shaw
|
bda1875466
|
Merge PR #507: add rate limit recovery notifications
|
2025-10-03 22:25:46 +08:00 |
|
wfunc
|
a3666e3a3e
|
feat: add rate limit recovery webhook notifications
添加限流恢复的 webhook 通知功能,当账户从限流状态自动恢复时发送通知。
主要改进:
1. **新增通知类型** (webhookConfigService.js)
- 添加 `rateLimitRecovery` 通知类型
- 在配置获取和保存时自动合并默认通知类型
- 确保新增的通知类型有默认值
2. **增强限流清理服务** (rateLimitCleanupService.js)
- 改进自动停止账户的检测逻辑
- 在 `finally` 块中确保 `clearedAccounts` 列表被重置,避免重复通知
- 对自动停止的账户显式调用 `removeAccountRateLimit`
- 为 Claude 和 Claude Console 账户添加 `autoStopped` 和 `needsAutoStopRecovery` 检测
3. **改进 Claude Console 限流移除** (claudeConsoleAccountService.js)
- 检测并恢复因自动停止而禁用调度的账户
- 清理过期的 `rateLimitAutoStopped` 标志
- 增加详细的日志记录
4. **前端 UI 支持** (SettingsView.vue)
- 在 Webhook 设置中添加"限流恢复"通知类型选项
- 更新默认通知类型配置
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-02 23:54:30 +08:00 |
|