Commit Graph

234 Commits

Author SHA1 Message Date
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
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
c9ad287587 docs: 更新droid教程部分 2025-10-10 21:06:02 +08:00
shaw
14e54c0473 docs: 更新Droid 使用教程 2025-10-10 17:34:53 +08:00
shaw
5165d6c536 Merge branch 'fix/tutorial-dark-theme' into merge-pr523 2025-10-10 16:38:45 +08:00
shaw
1811290c0b feat: 优化droid类型账号oauth流程 2025-10-10 15:36:50 +08:00
shaw
42db271848 feat: droid平台账户数据统计及调度能力 2025-10-10 15:13:45 +08:00
litongtongxue
75804f4c2e fix(web): 修复使用教程页面暗色主题样式问题
- 优化按钮激活态在暗色模式下的视觉效果
- 修复所有提示框(info/success/warning)的暗色样式
- 增强文本对比度,提升可读性(标题/正文/辅助文本)
- 改进代码块在暗色模式下的边框和背景
- 修复 FAQ 折叠面板的暗色主题适配
- 保持玻璃态效果和响应式设计

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-10 02:20:22 +08:00
shaw
2fc84a6aca feat: 新增Droid cli支持 2025-10-09 23:05:09 +08:00
shaw
4de2ea3d17 feat: api-keys页面增加窗口限制进度显示 2025-10-09 08:57:05 +08:00