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
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