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
shaw
a58d67940c
fix: 优化并发计数过期清理
2025-10-12 13:14:15 +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
c56bebdbe5
fix: 修复droid分组调度保存无效的问题
2025-10-11 11:07:05 +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
c9ad287587
docs: 更新droid教程部分
2025-10-10 21:06:02 +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
1811290c0b
feat: 优化droid类型账号oauth流程
2025-10-10 15:36:50 +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
於林涛
8f9286c30e
fix: 修复 ESLint 代码规范问题
2025-10-08 19:49:36 +08:00
於林涛
705bd7611c
Merge remote-tracking branch 'upstream/main'
...
# Conflicts:
# src/routes/api.js
2025-10-08 19:34:17 +08:00
shaw
eb304c7e70
feat: openai转发增加apikey速率限制
2025-10-08 08:36:43 +08:00
shaw
6e770146fd
fix: 优化cache control问题2
2025-10-07 15:14:08 +08:00
shaw
9c022e6642
Merge branch 'fix-daily-average-calculation' into dev
2025-10-07 15:06:11 +08:00
shaw
88429e1a24
fix: 优化cache control问题
2025-10-07 14:37:28 +08:00
shaw
52af60b3c9
fix: 适配Claude agent-sdk转发
2025-10-07 14:00:29 +08:00
litongtongxue
454f366c50
fix: 修复日均费用计算逻辑
...
问题描述:
- 之前的日均费用计算是基于固定的30天窗口,而不是账户实际使用的天数
- 这导致新创建的账户显示的日均费用不准确
修复方案:
- 获取账户的创建时间(createdAt字段)
- 计算从账户创建到当前时间的实际天数
- 使用实际天数来计算日均费用(30天总费用 / 实际天数)
- 在前端显示实际使用天数,让用户了解计算基准
修改内容:
- 后端:在 /accounts/:accountId/usage-history 端点中添加实际天数计算逻辑
- 前端:在详情弹窗中显示基于实际使用天数的提示信息
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-10-07 11:27:29 +08:00
jft0m
bb95c0b7d5
fix: 修复 ESLint 代码规范问题
...
- 移除正则表达式中不必要的转义字符
- 添加 if 语句的花括号
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-10-06 15:57:09 +00:00
jft0m
5d7225b2eb
feat: 添加 Opus 限流状态显示
...
- 在账户列表中显示 Opus 限流状态徽章
- 显示限流剩余时间(天/小时)
- 后端 API 添加 opusRateLimitedAt 和 opusRateLimitEndAt 字段
- 优化徽章样式,防止文字溢出
2025-10-06 15:49:28 +00:00
jft0m
61e5cb4584
refactor: 重构 handleChatCompletions 函数模块化
...
- 使用策略模式处理不同后端(Claude/OpenAI/Gemini)
- 添加 OpenAI chat/completions 兼容支持
- 修复代码缩进符合 ESLint 规范
2025-10-06 14:00:46 +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
wfunc
ea0f818251
feat(claude): limit 5-hour warning notifications to prevent spam
...
## Problem
- Original implementation sends webhook notification on EVERY request when
account reaches 5-hour limit warning status
- Users receive hundreds of duplicate notifications within same 5-hour window
## Solution
- Add `maxFiveHourWarningsPerWindow` config (default: 1, max: 10)
- Track warning count per session window with metadata:
- fiveHourWarningWindow: identifies current window
- fiveHourWarningCount: tracks notifications sent
- fiveHourWarningLastSentAt: last notification timestamp
- Only send notification if count < max limit
- Auto-reset counters when entering new 5-hour window
## Changes
- Add warning limit control in constructor
- Add `_clearFiveHourWarningMetadata()` helper method
- Update `updateSessionWindowStatus()` with notification throttling
- Clear warning metadata on window refresh and manual schedule recovery
## Configuration
- Environment: CLAUDE_5H_WARNING_MAX_NOTIFICATIONS (1-10)
- Config: config.claude.fiveHourWarning.maxNotificationsPerWindow
- Default: 1 notification per window
## Testing
- Tested with accounts reaching 5h limit
- Verified single notification per window
- Confirmed counter reset on new window
2025-10-02 23:31:52 +08:00
shaw
3f79e56209
Merge remote-tracking branch 'origin/dev' into dev
2025-10-02 18:37:26 +08:00
shaw
9148913ca4
feat: 增加Oauth Claude账户usage接口缓存
2025-10-02 18:35:41 +08:00
shaw
5024628fa6
Merge branch 'pr-503' into dev
2025-10-02 18:04:11 +08:00
duyaoguang
7fd5224e0a
fix: 🐛 fee calc fix
2025-10-02 13:09:19 +08:00