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
|
9b0d0bee96
|
fix: 账户时间线入口与路由修复
- 移除账户列表下拉/卡片的时间线入口,仅保留详情弹窗顶部按钮
- ActionDropdown 全局互斥,避免多菜单堆叠
- 账户筛选去重,避免“未知渠道”重复泄露
|
2025-12-05 14:57:34 +08:00 |
|
atoz03
|
ff30bfab82
|
feat: 账户时间线详情页与接口完善
- 后端新增 /admin/accounts/:accountId/usage-records 接口,支持按账户聚合多 Key 记录并分页筛选、汇总统计
- 修复 API Key 时间线账户筛选跳过已删除账号,补充账户/Key 辅助解析
- 前端新增 AccountUsageRecordsView、路由及账户列表“时间线”入口,支持模型/API Key 筛选与 CSV 导出
- 补装 prettier-plugin-tailwindcss 并完成相关文件格式化
|
2025-12-05 14:23:25 +08:00 |
|
IanShaw027
|
827c0f6207
|
feat: 添加两级平台筛选功能(支持平台分组)
- 添加 platformHierarchy 定义平台层级结构(Claude全部、OpenAI全部、Gemini全部、Droid)
- 添加 platformGroupMap 映射平台组到具体平台
- 添加 platformRequestHandlers 动态处理平台请求
- 将 platformOptions 从 ref 改为 computed 支持缩进显示
- 优化 loadAccounts 使用动态平台加载替代大型 switch 语句
- 新增 getPlatformsForFilter 辅助函数
功能说明:
- 支持选择"Claude(全部)"同时筛选 claude + claude-console + bedrock + ccr
- 支持选择"OpenAI(全部)"同时筛选 openai + openai-responses + azure_openai
- 支持选择"Gemini(全部)"同时筛选 gemini + gemini-api
- 保持向后兼容,仍支持单独选择具体平台
|
2025-12-05 03:31:13 +08:00 |
|
IanShaw027
|
0b3cf5112b
|
refactor: 移除仪表盘使用记录功能以避免与PR #753重叠
移除了仪表盘中的使用记录展示功能,避免与PR #753的API Key详细使用记录功能重叠:
- 移除DashboardView.vue中的使用记录表格UI及相关函数
- 移除dashboard.js中的/dashboard/usage-records接口
- 保留核心账户管理功能(账户过滤、限流状态、统计模态框等)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-12-05 02:54:14 +08:00 |
|
IanShaw027
|
3db268fff7
|
feat: 完善账户管理和仪表盘功能
- 修改使用记录API路由路径为 /dashboard/usage-records
- 增加对更多账户类型的支持(Bedrock、Azure、Droid、CCR等)
- 修复Codex模型识别逻辑,避免 gpt-5-codex 系列被错误归一化
- 在账户管理页面添加状态过滤器(正常/异常)
- 在账户管理页面添加限流时间过滤器(≤1h/5h/12h/1d)
- 增加账户统计汇总弹窗,按平台分类展示
- 完善仪表盘使用记录展示功能,支持分页加载
- 将 logs1/ 目录添加到 .gitignore
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-12-05 02:54:14 +08:00 |
|
IanShaw027
|
81971436e6
|
feat: 在仪表盘添加使用记录展示功能
- 新增后端API端点 /admin/dashboard/usage-records
- 支持分页查询所有API Key的使用记录
- 自动关联API Key名称和账户名称
- 按时间倒序排列(最新的在前)
- 新增仪表盘使用记录表格
- 显示时间、API Key、账户、模型、输入/输出/缓存创建/缓存读取tokens、成本
- 智能时间格式化(今天显示时分秒,昨天显示时间)
- 支持加载更多记录,分页展示
- 响应式设计,支持暗黑模式
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-12-05 02:54:14 +08:00 |
|
IanShaw027
|
69a1006f4c
|
feat: 增强账户管理页面的过滤和统计功能
- 新增状态过滤器:支持按正常/异常/全部筛选账户
- 新增限流时间过滤器:支持按1h/5h/12h/1d筛选限流账户
- 新增账户统计弹窗:按平台类型和状态汇总账户数量
- 优化账户列表过滤逻辑,支持组合过滤条件
- 默认状态过滤为'正常',提升用户体验
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-12-05 02:54:14 +08:00 |
|
atoz03
|
95ef04c1a3
|
fix: 保持仪表盘趋势图非负并纠正小时区间
- 小时粒度请求使用用户选择的起止时间,避免近24小时被截成整天
- 修正日期展示格式化逻辑,减少时区偏移导致的窗口错位
- 趋势图 Y 轴(Token/请求数/费用等)强制最小值为 0,防止出现负刻度
|
2025-12-04 17:05:36 +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 |
|
atoz03
|
9ad5c85c2c
|
feat(accounts): 支持排序切换正序/倒序
- 统一下拉选择器和表头的排序变量
- 再次点击同一排序选项/列头时切换排序方向
- 动态更新排序图标指示当前方向
|
2025-12-03 20:25:26 +08:00 |
|
shaw
|
d3155b82ea
|
style: 优化表格布局
|
2025-12-01 14:20:53 +08:00 |
|
shaw
|
dfee7be944
|
fix: 调整gemini-api BaseApi后缀以适配更多端点
|
2025-11-29 21:30:28 +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
|
28caa93d99
|
feat: 重新支持apikey费用排序功能
|
2025-11-28 15:32:50 +08:00 |
|
shaw
|
d9476230c6
|
fix: 修复apikey窗口限制时间显示异常的问题
|
2025-11-28 14:02:58 +08:00 |
|
shaw
|
49645e8a50
|
feat: 增强claude转发特征模拟
|
2025-11-28 13:54:42 +08:00 |
|
shaw
|
7db70e2dc0
|
feat: 为claude类型账号增加测试功能
|
2025-11-28 10:51:01 +08:00 |
|
shaw
|
dea6964116
|
fix: 修复apikeys页面部分bug
|
2025-11-25 20:38:52 +08:00 |
|
shaw
|
22fbabbc47
|
fix: 优化apikeys页面加载速度
|
2025-11-25 15:01:15 +08:00 |
|
shaw
|
25f455ac1c
|
fix: 适配claude新的usage接口
|
2025-11-25 10:54:21 +08:00 |
|
shaw
|
8f2cf211de
|
fix: 修复gemini重置状态按钮未显示的问题
|
2025-11-24 14:49:12 +08:00 |
|
shaw
|
a0a7aae28e
|
fix: 暂时移除gemini 的429处理
|
2025-11-24 10:53:51 +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 |
|
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
|
05f4454c10
|
feat: apikey显示最后调度的账号
|
2025-10-17 19:44:40 +08:00 |
|
AAEE86
|
8f58fe6264
|
feat: 账号使用趋势增加对Droid账户的支持
|
2025-10-16 23:01:06 +08:00 |
|
AAEE86
|
d3cf66e2c0
|
Update AccountsView.vue
移除 overflow-x: auto
|
2025-10-16 11:13:23 +08:00 |
|
mrlitong
|
cd5df4f76b
|
Merge remote-tracking branch 'upstream/main' into feature/account-subscription-expiry-check
|
2025-10-14 08:04:12 +00:00 |
|
Wesley Liddick
|
4b3ffa4136
|
Merge pull request #561 from AAEE86/new
feat: 添加Droid账户API Key管理功能
|
2025-10-14 14:34:07 +08:00 |
|
shaw
|
dfea5fe534
|
docs: 更新gemini配置教程
|
2025-10-14 11:40:07 +08:00 |
|
litongtongxue
|
1e7465e533
|
feat: 为所有账户服务添加订阅过期检查功能
完成账户订阅到期时间功能的核心调度逻辑实现。
## 实现范围
✅ 已添加订阅过期检查的服务(5个):
- Gemini 服务:添加 isSubscriptionExpired() 函数及调度过滤
- OpenAI 服务:添加 isSubscriptionExpired() 函数及调度过滤
- Droid 服务:添加 _isSubscriptionExpired() 方法及调度过滤
- Bedrock 服务:添加 _isSubscriptionExpired() 方法及调度过滤
- Azure OpenAI 服务:添加 isSubscriptionExpired() 函数及调度过滤
## 核心功能
- 账户调度时自动检查 subscriptionExpiresAt 字段
- 过期账户将不再被系统调度使用
- 未设置过期时间的账户视为永不过期(向后兼容)
- 使用 <= 比较判断过期(精确到过期时刻)
- 跳过过期账户时记录 debug 日志便于排查
## 技术实现
- 统一的实现模式:过期检查函数 + 账户选择逻辑集成
- 不影响现有功能,完全向后兼容
- 业务字段 subscriptionExpiresAt 与技术字段 expiresAt(OAuth token过期)独立管理
## 相关文档
参考 account_expire_bugfix.md 了解问题背景和实现细节
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-14 02:42:03 +00:00 |
|
AAEE86
|
38c61e1018
|
refactor: 优化API Key状态过滤逻辑,增强代码可读性
|
2025-10-14 09:37:46 +08:00 |
|
AAEE86
|
1f9afc788b
|
feat: 添加Droid账户API Key管理功能
(cherry picked from commit 0cf3ca6c7eafcf28a2da7e8bfd6814b4883bb752)
|
2025-10-13 18:24:49 +08:00 |
|
jft0m
|
96eca07ff2
|
Merge branch 'Wei-Shaw:main' into main
|
2025-10-13 11:32:02 +08:00 |
|
shaw
|
f302c94d3c
|
docs: 移除claude code使用droid api相关文档
|
2025-10-13 10:51:06 +08:00 |
|
jft0m
|
44a7a61f14
|
Merge branch 'Wei-Shaw:main' into main
|
2025-10-12 22:51:22 +08:00 |
|
jft0m
|
ad64bd3c51
|
feat: 改善登录表单的可访问性和自动填充支持
- 为所有表单字段添加 id 和 name 属性
- 添加 autocomplete 属性支持浏览器自动填充
- 使用 for 属性正确关联 label 和 input
- 优化代码格式符合 Prettier 规范
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-12 14:50:07 +00:00 |
|
DokiDoki1103
|
e6d9a46b98
|
fix: 移除账户管理页面的横向滚动条
- 移除 .table-container 的 overflow-x: auto 样式
- 清理重复的样式定义
- 修复账户管理页面在某些情况下出现不必要横向滚动条的问题
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-12 20:49:00 +08:00 |
|
shaw
|
40b7c68694
|
fix: 修复账号过期时间的一系列bug
|
2025-10-12 18:35:05 +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
|
26894f485b
|
feat: droid账号增加apikey数量显示
|
2025-10-11 23:05:48 +08:00 |
|
shaw
|
4a925e2f8b
|
docs: 更新droid部分内容
|
2025-10-11 12:37:37 +08:00 |
|
shaw
|
a6f5876eca
|
fix: 修复droid类型账号类型显示
|
2025-10-11 11:48:20 +08:00 |
|
shaw
|
6c2ef2eef3
|
fix: 修复droid账号更新丢失apikey的问题
|
2025-10-11 11:23:24 +08:00 |
|