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
Wesley Liddick
bd7b8884ab
Merge pull request #801 from miraserver/fix/cost-calculation-and-ui-display
...
fix: correct API key cost calculation and UI display issues
2025-12-14 20:48:00 -05:00
shaw
7698f5ce11
chore: 增加opus4.5快捷映射按钮
2025-12-15 09:44:36 +08:00
John Doe
baafebbf7b
fix: correct API key cost calculation and UI display issues
...
- Fix admin panel cost display for "all time" period using permanent Redis key
- Fix user statistics total cost limit to show complete history
- Fix restricted models list overflow with scrollable container
Backend changes:
- src/routes/admin/apiKeys.js: Use allTimeCost for timeRange='all' instead of scanning TTL keys
- src/routes/apiStats.js: Prioritize permanent usage:cost:total key over monthly keys
Frontend changes:
- web/admin-spa/src/components/apistats/LimitConfig.vue: Add overflow-visible and scrolling to model list
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-12-12 18:11:02 +03:00
thejoven
304c8dda4e
Update AccountForm.vue
...
新版 gemini-cli 的 Access Token 位置和文件名已变更
2025-12-12 00:43:11 +08:00
John Doe
201d95c84e
[fix] Droid: dynamic x-api-provider and custom User-Agent support
...
- Dynamic x-api-provider selection for OpenAI endpoint based on model
- Models with '-max' suffix use 'openai' provider
- Other models use 'azure_openai' provider
- Fixes gpt-5.1-codex-max model compatibility issue
- Update default User-Agent to factory-cli/0.32.1
- Add custom User-Agent field for Droid accounts
- Backend: userAgent field in createAccount and updateAccount
- Frontend: User-Agent input in account creation/edit UI
- Supports all Droid auth modes: OAuth, Manual, API Key
This resolves the issue where gpt-5.1-codex-max failed with 'Azure OpenAI only supports...' error due to incorrect provider header.
2025-12-07 21:08:48 +03:00
SunSeekerX
e1df90684a
fix: 合并冲突 - 保留多选支持并添加暗黑模式样式
2025-12-06 18:28:03 +08:00
Wesley Liddick
01c63bf5df
Merge pull request #760 from IanShaw027/upstream-pr-account-full [skip ci]
...
feat: 增强账户管理功能
2025-12-05 21:45:37 -05:00
atoz03
bfa3f528a2
fix:优化了dropdown的弹窗
...
- ActionDropdown.vue:位置计算调整,优先向右展开并增加 8px 间距,减少遮挡左侧内容;下拉全局互斥仍保留。
- 账户页面:列表下拉/卡片已无“请求时间线”入口,只保留详情弹窗顶部按钮。
2025-12-05 15:11:12 +08:00
atoz03
9b0d0bee96
fix: 账户时间线入口与路由修复
...
- 移除账户列表下拉/卡片的时间线入口,仅保留详情弹窗顶部按钮
- ActionDropdown 全局互斥,避免多菜单堆叠
- 账户筛选去重,避免“未知渠道”重复泄露
2025-12-05 14:57:34 +08:00
SunSeekerX
2429bad2b7
feat(api-keys): 添加模型筛选功能
2025-12-05 13:44:09 +08:00
IanShaw027
a03753030c
fix: CustomDropdown组件支持层级结构显示
...
- 添加动态padding支持indent属性(每级缩进16px)
- 添加isGroup属性支持,分组项显示为粗体带背景
- 修复暗黑模式下选中图标颜色
- 支持二级平台分类的视觉层级展示
2025-12-05 12:47:20 +08:00
shaw
6bfef2525a
Merge PR #753 : feat: 新增 API Key
...
请求时间线接口与管理端详情页面
2025-12-05 09:03:53 +08:00
SunSeekerX
8aca1f9dd1
feat(account): 新增账户自动防护禁用开关
...
支持 disableAutoProtection 配置项,启用后上游 401/400/429/529 错误不再自动禁用账户
2025-12-04 20:47:12 +08:00
atoz03
354d8da13f
feat:已修复详情弹窗位置问题:RecordDetailModal 现在 append-to-body、destroy-on-close,并设定 top="10vh",点击列表底部的“详情”不会被滚动容器截断或浮在页面顶部看不到。
2025-12-04 15:17:48 +08:00
atoz03
9fe2918a54
feat: keep API key stats modal and add timeline entry point
2025-12-04 14:56:27 +08:00
atoz03
92b30e1924
feat: add API key usage timeline API and admin UI
2025-12-04 14:41:38 +08:00
shaw
81e89d2dc4
feat: 支持sessionKey完成oauth授权
2025-12-02 20:43:47 +08:00
shaw
dfee7be944
fix: 调整gemini-api BaseApi后缀以适配更多端点
2025-11-29 21:30:28 +08:00
shaw
d89344ad87
fix: 修复Gemini-api账户分组调度设置不生效的问题
2025-11-29 14:11:58 +08:00
shaw
68f003976e
style: 优化表格显示固定列宽
2025-11-29 11:20:07 +08:00
shaw
b58b8b1ac7
feat: 支持apikey测试claude端点
2025-11-28 17:16:37 +08:00
shaw
53553c7e76
fix: 修复gemini api类型账户绑定显示问题
2025-11-28 16:33:31 +08:00
shaw
7db70e2dc0
feat: 为claude类型账号增加测试功能
2025-11-28 10:51:01 +08:00
shaw
8d07672ac5
fix: 复制完整Claude配置按钮增加export
2025-11-26 10:23:19 +08:00
shaw
dea6964116
fix: 修复apikeys页面部分bug
2025-11-25 20:38:52 +08:00
shaw
25f455ac1c
fix: 适配claude新的usage接口
2025-11-25 10:54:21 +08:00
shaw
bae39d5468
feat: 支持Gemini-Api接入
2025-11-23 22:00:13 +08:00
sususu98
3abd0b0f36
fix: 编辑Console账户表单前先读取maxConcurrentTasks并显示,防止每次编辑Console账户并发限制都被重置
2025-10-27 16:35:27 +08:00
sususu98
1458d609ca
feat: 为 Claude Console 账户添加并发控制机制
...
实现了完整的 Claude Console 账户并发任务数控制功能,防止单账户过载,提升服务稳定性。
**核心功能**
- 🔒 **原子性并发控制**: 基于 Redis Sorted Set 实现的抢占式并发槽位管理,防止竞态条件
- 🔄 **自动租约刷新**: 流式请求每 5 分钟自动刷新租约,防止长连接租约过期
- 🚨 **智能降级处理**: 并发满额时自动清理粘性会话并重试其他账户(最多 1 次)
- 🎯 **专用错误码**: 引入 `CONSOLE_ACCOUNT_CONCURRENCY_FULL` 错误码,区分并发限制和其他错误
- 📊 **批量性能优化**: 调度器使用 Promise.all 并行查询账户并发数,减少 Redis 往返
**后端实现**
1. **Redis 并发控制方法** (src/models/redis.js)
- `incrConsoleAccountConcurrency()`: 增加并发计数(带租约)
- `decrConsoleAccountConcurrency()`: 释放并发槽位
- `refreshConsoleAccountConcurrencyLease()`: 刷新租约(流式请求)
- `getConsoleAccountConcurrency()`: 查询当前并发数
2. **账户服务增强** (src/services/claudeConsoleAccountService.js)
- 添加 `maxConcurrentTasks` 字段(默认 0 表示无限制)
- 获取账户时自动查询实时并发数 (`activeTaskCount`)
- 支持更新并发限制配置
3. **转发服务并发保护** (src/services/claudeConsoleRelayService.js)
- 请求前原子性抢占槽位,超限则立即回滚并抛出专用错误
- 流式请求启动定时器每 5 分钟刷新租约
- `finally` 块确保槽位释放(即使发生异常)
- 为每个请求分配唯一 `requestId` 用于并发追踪
4. **统一调度器优化** (src/services/unifiedClaudeScheduler.js)
- 获取可用账户时批量查询并发数(Promise.all 并行)
- 预检查并发限制,避免选择已满的账户
- 检查分组成员时也验证并发状态
- 所有账户并发满额时抛出专用错误码
5. **API 路由降级处理** (src/routes/api.js)
- 捕获 `CONSOLE_ACCOUNT_CONCURRENCY_FULL` 错误
- 自动清理粘性会话映射并重试(最多 1 次)
- 重试失败返回 503 错误和友好提示
- count_tokens 端点也支持并发满额重试
6. **管理端点验证** (src/routes/admin.js)
- 创建/更新账户时验证 `maxConcurrentTasks` 为非负整数
- 支持前端传入并发限制配置
**前端实现**
1. **表单字段** (web/admin-spa/src/components/accounts/AccountForm.vue)
- 添加"最大并发任务数"输入框(创建和编辑模式)
- 支持占位符提示"0 表示不限制"
- 表单数据自动映射到后端 API
2. **实时监控** (web/admin-spa/src/views/AccountsView.vue)
- 账户列表显示并发状态进度条和百分比
- 颜色编码:绿色(<80%)、黄色(80%-100%)、红色(100%)
- 显示"X / Y"格式的并发数(如"2 / 5")
- 未配置限制时显示"并发无限制"徽章
2025-10-21 13:43:57 +08:00
shaw
abef8a4e31
feat: claude账号新增保存claude的uuid
2025-10-19 17:15:31 +08:00
shaw
994e474155
fix: 修复批量编辑apikey模式无法选择oai账号
2025-10-16 14:48:15 +08:00
shaw
2f0839c7da
feat: 合并 PR #578 并接入统一定价服务
2025-10-16 14:12:25 +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
AAEE86
914c1b6120
Merge branch 'main' into new
2025-10-15 23:38:18 +08:00
AAEE86
8ab3c76c6f
feat: 新增 API Key 筛选和搜索功能
...
- 筛选key,新增支持筛选正常和异常状态的key
- 搜索key,新增支持模糊/精确搜索key
- 删除key,新增支持一键删除所有异常状态的key或者删除所有key
- 导出key,新增支持一键导出所有异常状态的key或者导出所有key
2025-10-15 15:35:59 +08:00
shaw
92712277db
feat: droid的apikey页面增加一键复制全部
2025-10-14 20:44:14 +08:00
mrlitong
cd5df4f76b
Merge remote-tracking branch 'upstream/main' into feature/account-subscription-expiry-check
2025-10-14 08:04:12 +00:00
mrlitong
ba60a2dcbb
fix: 修复自定义过期时间的时区解析问题
...
修复 datetime-local 输入框在不同浏览器中时区解析不一致的问题。
## 问题
- datetime-local 返回无时区信息的字符串 (如: 2025-12-31T23:59)
- new Date(string) 在不同浏览器中解析行为不一致
- 部分浏览器错误地将其解释为 UTC,导致时区偏移
## 解决方案
- 手动解析日期时间字符串的各个部分
- 使用 Date 构造函数明确创建本地时间对象
- 统一转换为 UTC ISO 字符串存储
- 添加日期有效性验证和错误处理
## 影响范围
- 仅影响自定义过期时间设置功能
- 确保用户设置的时间与存储/显示一致
- 提升跨浏览器兼容性
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-10-14 02:52:18 +00:00
AAEE86
8dd07919f4
fix: 修复 API Key 管理界面按钮的点击事件逻辑
2025-10-14 10:34:38 +08:00
AAEE86
582348d615
fix: 修正删除API Key时更新数据的字段名称
2025-10-14 10:09:47 +08:00
AAEE86
38c61e1018
refactor: 优化API Key状态过滤逻辑,增强代码可读性
2025-10-14 09:37:46 +08:00
AAEE86
e051ade27e
feat: 按最新使用时间排序API Keys
2025-10-14 01:05:22 +08:00
AAEE86
ea3ad2157f
fix: 优化API Key错误状态码的显示方式
2025-10-14 00:53:19 +08:00
AAEE86
1f9afc788b
feat: 添加Droid账户API Key管理功能
...
(cherry picked from commit 0cf3ca6c7eafcf28a2da7e8bfd6814b4883bb752)
2025-10-13 18:24:49 +08:00
Wesley Liddick
2215b0acd8
Merge pull request #555 from DokiDoki1103/fix/ccr-account-modal-dark-theme [skip ci]
...
fix: 修复 CCR 账户弹窗暗黑主题失效问题
2025-10-13 11:25:33 +08:00
shaw
f302c94d3c
docs: 移除claude code使用droid api相关文档
2025-10-13 10:51:06 +08:00
shaw
cea6f976b9
fix: 修复批量编辑模式下专属账号修改的问题
2025-10-13 09:16:13 +08:00
DokiDoki1103
a2844e802a
fix: 修复 CCR 账户弹窗暗黑主题失效问题
...
- 为全局 modal 和 modal-content 添加暗黑模式样式
- 在 CcrAccountForm 组件中使用 Tailwind 暗黑模式类替代 scoped style
- 优化关闭按钮在暗黑模式下的显示效果
此修复确保 CCR 账户添加/编辑弹窗在暗黑模式下正确显示深色背景和样式,与其他界面元素保持一致的用户体验。
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-10-12 20:59:41 +08:00
shaw
2fa1b0b1dc
fix: 优化创建apikey成功弹窗
2025-10-12 19:59:01 +08:00