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
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
iaineng
782e912a0d
fix(oauth): auto-refresh expired tokens in fetchOAuthUsage
...
Replace direct token decryption with getValidAccessToken call to
enable automatic token expiration check and refresh. This fixes
authentication_error when fetching OAuth usage data with expired
access tokens.
2025-10-01 11:59:03 +08:00
iaineng
11c214449f
feat(api): add Claude OAuth usage endpoint with async loading
...
Add dedicated API endpoint to fetch Claude account OAuth usage data
asynchronously, improving user experience by eliminating the need for
multiple page refreshes to view session window statistics.
Backend changes:
- Add GET /admin/claude-accounts/usage endpoint for batch fetching
- Implement fetchOAuthUsage() to call Claude API /api/oauth/usage
- Add buildClaudeUsageSnapshot() to construct frontend data structure
- Add updateClaudeUsageSnapshot() to persist data to Redis
- Add _toNumberOrNull() helper for safe type conversion
- Update getAllAccounts() to return claudeUsage from Redis cache
Data structure:
- Store three window types: 5h, 7d, 7d-Opus
- Track utilization percentage and reset timestamps
- Calculate remaining seconds for each window
Performance optimizations:
- Concurrent batch requests using Promise.allSettled
- Graceful error handling per account
- Non-blocking async execution
2025-09-30 22:51:54 +08:00
Gemini Wen
87bd54d9ea
fix: 修复统一客户端标识的布尔值判断
...
将 useUnifiedClientId 的判断从直接布尔值比较改为字符串 'true' 比较,修复配置值为字符串时的判断问题。
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-09-30 13:01:54 +08:00
shaw
fcf54565ec
chore: 其他文件修改
...
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-09-30 11:25:43 +08:00
shaw
4ab91f233f
refactor: 使用 claudeCodeValidator 统一验证逻辑
...
替换 _hasClaudeCodeSystemPrompt 方法,改用 claudeCodeValidator
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-09-30 11:25:35 +08:00
shaw
b4d7ed06c5
fix: 修复5小时限制被停止调度未恢复的问题
2025-09-28 23:30:41 +08:00
shaw
5e015e87e0
style: 优化api-stats布局
2025-09-28 14:54:24 +08:00
shaw
b123cc35c1
feat: api-stats页面查询专属账号会话窗口
2025-09-28 14:36:38 +08:00
shaw
e197fbdf80
Merge branch 'pr-485' into dev
2025-09-28 09:45:03 +08:00
shaw
ea28222c71
feat: 支持账号维度的数据统计
2025-09-27 22:55:06 +08:00
yaogdu
d1bbc71796
feat: 🎸 export csv from web and support hourly TTL of key
2025-09-27 14:11:54 +08:00
shaw
66bb3419b7
fix: 修复oai专属绑定401导致重复触发通知的bug
2025-09-25 22:32:04 +08:00
shaw
c15ef0b6ae
feat: 适配codex用量数据
2025-09-25 17:23:52 +08:00
shaw
f105b1cc31
fix: 修复codex调度问题
2025-09-25 16:05:56 +08:00
shaw
ad672c3c4c
fix: 修复openai-respons计费问题
2025-09-25 11:31:30 +08:00
shaw
0a66609c1b
fix: 修复codex限流自动恢复问题
2025-09-24 16:47:55 +08:00
shaw
8b8e9703a1
fix: claude遇到5xx错误不再停止调度
2025-09-24 14:37:33 +08:00
shaw
f56d1edce0
feat: openai账号401自动停止调度
2025-09-24 11:35:48 +08:00
shaw
00faa21e4b
fix: 修复claude账号限流不会自动恢复的bug
2025-09-24 09:36:42 +08:00
shaw
24d1f0a494
fix: 修复统一user-agent问题
2025-09-23 17:35:10 +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
ff73375f0a
fix: 优化codex错误抛出 增强客户端限制条件
2025-09-22 11:56:54 +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
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