root
f9df276d0c
merge: resolve conflicts from main branch
...
- auth.js: keep 402 status code with Opus message
- redis.js: keep dual-cost tracking (rated/real) with opus key prefix, add setWeeklyOpusCost method
- apiKeyService.js: keep both imports, serviceRates handling, and 5-param recordOpusCost
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-22 15:27:52 +08:00
Wesley Liddick
35f755246e
Merge pull request #914 from sczheng189/main
...
mod: 修改opus周限额为Claude模型的周限额
2026-01-22 15:18:16 +08:00
root
83cbaf7c3e
fix: resolve all ESLint errors
...
- droidRelayService: add missing keyId variable declaration
- quotaCardService: use object destructuring for actualDeducted
- apiKeyService: remove unused variables and duplicate requires
- redis: remove shadowed logger/config requires
- unifiedGeminiScheduler: rename isActive param to avoid shadow
- commonHelper: add comments to empty catch blocks
- testPayloadHelper: prefix unused model param with underscore
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-22 15:14:22 +08:00
shaw
968398ffa5
fix: API Key permissions multi-select save and display issue
...
- Fix updateApiKey to use JSON.stringify for permissions field
- Add comma-separated string handling in normalizePermissions
- Add frontend parsing for comma-separated permissions format
Fixes issue where selecting multiple permissions (e.g. Claude + OpenAI)
would be saved as "claude,openai" instead of '["claude","openai"]'
2026-01-22 15:07:19 +08:00
root
24f825f60d
style: format all files with prettier
...
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-22 15:05:58 +08:00
sczheng
1027a2e3e2
mod: 修改opus周限额为Claude模型的周限额
2026-01-22 15:04:34 +08:00
SunSeekerX
cb935ea0f0
1
2026-01-22 14:56:09 +08:00
SunSeekerX
029bdf3719
1
2026-01-21 11:55:28 +08:00
SunSeekerX
76ecbe18a5
1
2026-01-19 20:24:47 +08:00
SunSeekerX
f5e982632d
chore
2026-01-04 12:05:53 +08:00
SunSeekerX
90023d1551
Revert: 撤销 584fa8c 之后的所有提交
2026-01-03 23:24:59 +08:00
SunSeekerX
d8a33f9aa7
chore
2026-01-01 12:42:47 +08:00
SunSeekerX
584fa8c9c1
feat: 大规模性能优化 - Redis Pipeline 批量操作、索引系统、连接池优化
2025-12-31 02:08:47 +08:00
Guccbai
534fbf6ac2
fix(eslint): 修复 ESLint 检查错误
...
- 修复 apiKeyService.js 中 if 语句缺少大括号的 curly 错误
- 移除 openaiGeminiRoutes.js 中重复声明 apiKeyService 导致的 no-shadow 错误
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2025-12-23 20:26:18 +08:00
Guccbai
33ea26f2ac
feat(permissions): 服务权限从单选改为多选
...
- 将 API Key 的服务权限从单选改为多选,支持同时选择多个服务
- 移除"全部服务"选项,空数组表示允许访问全部服务
- 后端自动兼容旧格式('all' -> [], 'claude' -> ['claude'])
- 前端 radio 改为 checkbox,更新账户选择器联动逻辑
修改文件:
- apiKeyService.js: 添加 normalizePermissions/hasPermission 函数
- api.js, droidRoutes.js, openaiRoutes.js, unified.js, openaiGeminiRoutes.js, geminiHandlers.js: 使用新权限验证函数
- admin/apiKeys.js: 支持数组格式权限验证
- CreateApiKeyModal.vue, EditApiKeyModal.vue: UI 改为 checkbox 多选
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2025-12-17 11:35:11 +08:00
shaw
28caa93d99
feat: 重新支持apikey费用排序功能
2025-11-28 15:32:50 +08:00
shaw
fd2b8a0114
refacto: 重构admin.js
2025-11-27 22:16:45 +08:00
Dave King
94ff095754
fix: 修复Redis映射表竞态条件导致API Key临时失效问题
...
问题:编辑API Key后立即使用时会偶现(概率1%)报"API密钥已过期"错误,
一会儿后自动恢复。这是因为updateApiKey()方法未传递hashedKey参数给
setApiKey(),导致映射表未更新而主数据已更新的不一致状态。
修复:
- updateApiKey()传递keyData.apiKey(hashedKey)给setApiKey()
- 确保每次更新API Key时映射表也被同步更新
- 添加日志记录帮助监控映射表问题
细节:
1. updateApiKey(): 传递hashedKey参数确保映射表一致性
2. validateApiKey(): 添加警告日志检测映射表缺失
3. updateApiKey(): 增强日志记录"hashMap updated"
这解决了Redis双重存储(apikey:{id}和apikey:hash_map)的
竞态条件问题。
Fix: #API-Key-Expiry-Race-Condition
2025-11-27 10:56:58 +08:00
shaw
3fb874fc29
feat: admin-next/api-stats查询被禁用的key增加名字显示
2025-11-26 10:18:43 +08:00
shaw
8863075fde
feat: 完善Gemini-Api账户相关的数据统计
2025-11-23 22:28:26 +08:00
shaw
bae39d5468
feat: 支持Gemini-Api接入
2025-11-23 22:00:13 +08:00
shaw
d3489d1bfd
fix: 修复apikey最后使用账号为已删除的bug
2025-10-18 11:42:13 +08:00
shaw
17311f2d3b
fix: 修复apikey最后使用查找问题
2025-10-17 22:36:31 +08:00
shaw
b0e6ac3923
fix: 修复openai账号类型查找前缀
2025-10-17 21:15:56 +08:00
shaw
05f4454c10
feat: apikey显示最后调度的账号
2025-10-17 19:44:40 +08:00
liangjie.wanglj
b9d2e855f3
claude console类型中增加claude-haiku-4-5-20251001、GLM、Kimi、Qwen模型支持;增加计费消息通知;Claude console 及 ccr模型匹配大小写不敏感
2025-10-16 09:53:42 +08:00
shaw
42db271848
feat: droid平台账户数据统计及调度能力
2025-10-10 15:13:45 +08:00
duyaoguang
7fd5224e0a
fix: 🐛 fee calc fix
2025-10-02 13:09:19 +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
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
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
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
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
shaw
e28080bb51
docs: codex cli配置优先使用apikey
2025-09-07 13:40:26 +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
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
Feng Yue
58958cf246
fix ownership update issue
2025-09-02 18:53:42 +08:00
Feng Yue
50b372473c
Merge remote-tracking branch 'f3n9/main' into um-5
2025-08-31 23:12:46 +08:00
shaw
e84c6a5555
feat: 实现基于费用的速率限制功能
...
- 新增 rateLimitCost 字段,支持按费用进行速率限制
- 新增 weeklyOpusCostLimit 字段,支持 Opus 模型周费用限制
- 优化速率限制逻辑,支持费用、请求数、token多维度控制
- 更新前端界面,添加费用限制配置选项
- 增强账户管理功能,支持费用统计和限制
- 改进 Redis 数据模型,支持费用计数器
- 优化价格计算服务,支持更精确的成本核算
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-08-31 17:27:37 +08:00
shaw
a54622e3d7
Revert "Merge pull request #292 from iRubbish/dev"
...
This reverts commit 9e8e74ce6b , reversing
changes made to 222f4e44fe .
2025-08-30 20:09:41 +08:00
iRubbish
82f545c3b0
保存当前API Key管理功能的修改
...
- 统一用户创建和admin创建API Key的逻辑
- 修复admin更新用户创建的API Key功能
- 用户创建API Key名称改为displayName
- 默认无限制配置
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-08-26 13:42:02 +08:00