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
shaw
9148913ca4
feat: 增加Oauth Claude账户usage接口缓存
2025-10-02 18:35:41 +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
shaw
aca2b1cccb
feat: 账号列表支持批量删除
2025-09-28 21:43:57 +08:00
shaw
5ce385d2bc
fix: 修复账号筛选平台是oai显示异常
2025-09-28 11:53:46 +08:00
shaw
e197fbdf80
Merge branch 'pr-485' into dev
2025-09-28 09:45:03 +08:00
shaw
e675c5878e
style: 仪表板组件样式优化
2025-09-27 23:07:39 +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
0ba048aced
feat: 优化专属账号删除逻辑
2025-09-23 15:48:38 +08:00
shaw
ff73375f0a
fix: 优化codex错误抛出 增强客户端限制条件
2025-09-22 11:56:54 +08:00
shaw
588b181eb9
fix: 修复服务账户数量少了response账户
2025-09-20 22:03:43 +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
43cfb0f4f3
fix: 修复openai账号代理问题
2025-09-18 17:39:45 +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
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
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
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
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
shaw
7f8fae70e6
fix: azure转发问题修复
2025-09-08 17:26:14 +08:00
Wesley Liddick
5c8136ddd4
Merge branch 'dev' into main
2025-09-08 16:14:54 +08:00
Edric Li
3aa7c89e25
feat: 完全移除 API Key 图标功能
...
彻底删除 API Key 图标功能的所有相关代码:
前端改动:
- 删除 IconPicker.vue 组件文件
- 移除 ApiKeysView.vue 中的图标显示和 updateApiKeyIcon 方法
- 清理 CreateApiKeyModal.vue 中的图标选择器
- 清理 EditApiKeyModal.vue 中的图标选择器
- 移除所有 IconPicker 组件的引用
后端改动:
- 从 apiKeyService.js 中移除 icon 字段更新支持
- 从 admin.js 路由中移除 icon 参数处理和验证逻辑
- 清理创建和更新 API Key 时的 icon 参数
此改动简化了 API Key 管理界面,移除了不必要的图标功能。
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-09-08 16:06:12 +08:00
shaw
f284d5666f
feat: 支持隐藏后台登录入口按钮
2025-09-08 12:19:14 +08:00
shaw
e824858d60
feat: claude账户支持使用统一的客户端标识
2025-09-08 11:35:44 +08:00
Edric Li
92ec3ffc72
feat: API Keys页面恢复今日时间选项并设为默认
...
- 添加"今日"时间筛选选项,使用fa-calendar-day图标
- 将默认时间范围从"最近7天"改为"今日"
- 优化日期处理逻辑,确保今日选项从0点开始
- 调整UsageDetailModal宽度以适应内容显示
- 同步更新所有相关的初始化和重置逻辑
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-09-07 22:18:34 +08:00
Edric Li
8c9d6381f3
feat: API Keys图标系统和UI优化
...
主要功能增强:
- 实现API Key自定义图标功能,支持图片上传、裁剪和智能压缩
- 新增IconPicker组件,提供内置图标选择和图片上传功能
- 支持固定尺寸裁剪区域,可拖拽定位选择头像区域
- 智能图片压缩:PNG保留透明度,JPEG用于不透明图片
UI/UX改进:
- 优化表格布局:移除账号列,在名称下方显示账号绑定信息
- 调整行高和字体大小,提升信息密度
- 最后使用时间改为相对时间显示,悬浮显示具体时间
- 过期时间编辑改为点击文本触发,带悬浮下划线效果
- 更新默认API Key图标为蓝色渐变设计
- 修复表格悬浮偏移和横向滚动条问题
- 将"TOKEN 数量"改为"Token数"
后端支持:
- apiKeyService增加icon字段持久化
- admin路由增加图标数据处理和验证
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-09-07 22:18:34 +08:00
Edric Li
4e67e597b0
feat: API Keys页面添加全部时间选项和UI改进
...
- 添加"全部时间"选项到时间范围下拉菜单,可查看所有历史使用数据
- 统一费用显示列,根据选择的时间范围动态显示对应标签
- 支持自定义日期范围查询(最多31天)
- 优化日期选择器高度与其他控件对齐(38px)
- 使用更通用的标签名称(累计费用、总费用等)
- 移除调试console.log语句
后端改进:
- 添加自定义日期范围查询支持
- 日期范围验证和31天限制
- 支持all时间范围查询
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-09-07 22:18:34 +08:00
shaw
d2f3f6866c
feat: Codex账号管理优化与API Key激活机制
...
✨ 新功能
- 支持通过refreshToken新增Codex账号,创建时立即验证token有效性
- API Key新增首次使用自动激活机制,支持activation模式设置有效期
- 前端账号表单增加token验证功能,确保账号创建成功
🐛 修复
- 修复Codex token刷新失败问题,增加分布式锁防止并发刷新
- 优化token刷新错误处理,提供更详细的错误信息和建议
- 修复OpenAI账号token过期检测和自动刷新逻辑
📝 文档更新
- 更新README中Codex使用说明,改为config.toml配置方式
- 优化Cherry Studio等第三方工具接入文档
- 添加详细的配置示例和账号类型说明
🎨 界面优化
- 改进账号创建表单UI,支持手动和OAuth两种模式
- 优化API Key过期时间编辑弹窗,支持激活操作
- 调整教程页面布局,提升移动端响应式体验
💡 代码改进
- 重构token刷新服务,增强错误处理和重试机制
- 优化代理配置处理,确保OAuth请求正确使用代理
- 改进webhook通知,增加token刷新失败告警
2025-09-06 18:04:06 +08:00
sususu
c16cfe60ab
Merge branch 'dev' of https://github.com/sususu98/claude-relay-service into dev
2025-09-05 16:41:25 +08:00
sususu
4cc937a144
feat(Claude Console): 添加Claude Console账号每日配额
...
1. 额度检查优先级更高:即使不启用限流机制,超额仍会禁用账户
2. 状态会被覆盖:quota_exceeded 会覆盖 rate_limited
3. 两种恢复时间:
- 限流恢复:分钟级(如60分钟)
- 额度恢复:天级(第二天重置)
4. 独立控制:
- rateLimitDuration = 0:只管理额度,忽略429
- rateLimitDuration > 0:同时管理限流和额度
2025-09-05 14:58:59 +08:00
iaineng
8c158d82fa
fix: 添加创建Claude账户时缺失的useUnifiedUserAgent字段处理
...
- 在 /admin/claude-accounts POST 路由中添加 useUnifiedUserAgent 参数解构
- 将 useUnifiedUserAgent 参数传递给 claudeAccountService.createAccount() 方法
- 保持与前端 AccountForm.vue 和服务层 claudeAccountService.js 的一致性
2025-09-05 12:18:33 +08:00
Wesley Liddick
5bed7c932b
Merge pull request #333 from sczheng189/dev
...
feat: 添加统一Claude Code User-Agent支持及缓存管理功能(仅支持Claude账户,不支持api)
2025-09-03 21:35:51 +08:00
sczheng189
39c49fe2bb
feat: 添加统一Claude Code User-Agent支持及缓存管理功能
...
### **核心功能**
* **自动更新**:自动获取并使用最新的 “Claude Code” 客户端版本号。
* **智能缓存**:获取到的版本会缓存25小时,然后自动刷新。
* **独立开关**:每个账户都可以单独设置是否启用此功能。
### **前端界面**
* **新增开关**:账户设置里增加了“使用统一版本”的选项。
* **信息显示**:能直接看到当前正在使用的版本号。
* **手动刷新**:提供“清除缓存”按钮,可手动强制更新。
### **后端技术**
* **核心方法**:开发了新的后台功能,用于捕获、比较和管理版本号。
* **管理接口**:为管理员提供了新的API (`/admin/claude-code-version`),方便查询和刷新。
2025-09-03 20:14:58 +08:00
Feng Yue
26c57148f7
Merge remote-tracking branch 'f3n9/main' into main-um-8
2025-09-03 17:43:36 +08:00
shaw
16d397125a
feat: 支持apikey名称修改
2025-09-03 17:28:13 +08:00
Feng Yue
8ab8cf4a7a
fix: user role filtering issue
2025-09-03 16:03:43 +08:00
Feng Yue
6aeb05f685
Merge remote-tracking branch 'f3n9/main' into main-um-8
2025-09-03 15:40:28 +08:00
Feng Yue
1fc35197e1
Merge remote-tracking branch 'f3n9/dev' into dev-um-8
2025-09-03 09:45:52 +08:00
shaw
81ad098678
fix: 修复apikeys页面的一些bug
2025-09-02 21:38:54 +08:00
sczheng189
9c7ec8758d
resolve: 解决与upstream/dev的合并冲突
...
- 合并admin.js中的groupIds和autoStopOnWarning参数
- 统一AccountForm.vue中的错误提示文案和平台判断逻辑
- 保留AccountsView.vue中的分组过滤和ungrouped功能
- 确保Azure OpenAI账户创建和更新逻辑完整性
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-09-02 20:32:42 +08:00
sczheng189
945e0ac198
refactor: 精简Azure OpenAI多分组功能实现
...
- 移除不必要的分组清理逻辑
- 简化组成员端点实现,使用简单的members.push()
- 移除OpenAI账户路由中的groupInfos添加
- 保持最小化修改原则,只保留必要的功能实现
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-09-02 20:21:24 +08:00
sczheng189
37e6c14eac
feat: 完善账户多分组功能和Azure OpenAI支持
...
主要功能:
- 实现账户多分组调度功能完整支持
- 修复Azure OpenAI账户优先级显示问题(前端条件判断缺失)
- 修复未分组筛选功能失效(API参数处理)
- 修复Azure OpenAI账户创建错误调用Gemini API的问题
- 完善各平台分组信息支持和使用统计显示
- 统一删除账户时的分组清理逻辑
- 添加前端请求参数处理支持
技术改进:
- 前端支持多平台账户请求构造
- 后端统一groupInfos返回格式
- API客户端完善查询参数处理
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-09-02 20:16:20 +08:00
Feng Yue
5ee98597e7
fix get userlist issue
2025-09-02 18:40:16 +08:00
Feng Yue
7a9e4abdd5
admin now is able to reassign apikey to admin/user
2025-09-02 17:17:06 +08:00