1. 03 Feb, 2026 3 commits
    • JIA-ss's avatar
      fix(proxy): 增加代理探测的多 URL 回退机制 · df7a3e65
      JIA-ss authored
      
      
      某些 AI API 专用代理只允许访问特定域名(如 anthropic.com、openai.com),
      会拦截对 ip-api.com 的请求。本次修改增加了多 URL 回退机制:
      
      1. 优先使用 ip-api.com(可获取详细地理信息:城市、地区、国家)
      2. 若失败则回退到 httpbin.org/ip(仅获取 IP 地址,速度快)
      
      主要变更:
      - 新增 probeURLs 列表支持多个探测 URL
      - 重构 ProbeProxy() 实现回退逻辑
      - 新增 parseHTTPBin() 解析 httpbin.org 响应
      - 优化错误信息,JSON 解析失败时显示响应体前 200 字符
      Co-Authored-By: default avatarClaude <noreply@anthropic.com>
      df7a3e65
    • ducky's avatar
      feat(usage): add reasoning effort column · 53ee6383
      ducky authored
      53ee6383
    • liuxiongfeng's avatar
      fix: jsonb_set 嵌套路径无法创建多层 key 的问题 · f5884d16
      liuxiongfeng authored
      PostgreSQL jsonb_set 在 create_if_missing=true 时无法一次性创建多层嵌套路径。
      例如设置 {antigravity_quota_scopes,gemini_image} 时,如果 antigravity_quota_scopes 不存在,
      jsonb_set 不会自动创建外层 key,导致更新静默失败(affected=1 但数据未变)。
      
      修复方案:嵌套两次 jsonb_set,先确保外层 key 存在,再设置内层值。
      同时在设置限流时更新 last_used_at,使刚触发 429 的账号调度优先级降低。
      
      Cherry-picked from slovx2/sub2api: 4b57e80e
      f5884d16
  2. 02 Feb, 2026 4 commits
    • bayma888's avatar
      feat(admin): add user balance/concurrency history modal · 606e29d3
      bayma888 authored
      - Add new API endpoint GET /admin/users/:id/balance-history with pagination and type filter
      - Add SumPositiveBalanceByUser for calculating total recharged amount
      - Create UserBalanceHistoryModal component with:
        - User info header (email, username, created_at, current balance, notes, total recharged)
        - Type filter dropdown (all/balance/admin_balance/concurrency/admin_concurrency/subscription)
        - Quick deposit/withdraw buttons
        - Paginated history list with icons and colored values
      - Add instant tooltip on balance column for better UX
      - Add z-index prop to BaseDialog for modal stacking control
      - Update i18n translations (zh/en)
      606e29d3
    • liuxiongfeng's avatar
      test: 为测试 stub 添加缺失的 GroupRepository 接口方法 · ce1d2904
      liuxiongfeng authored
      新增 BindAccountsToGroup 和 GetAccountIDsByGroupIDs 方法的 stub 实现,
      确保测试文件中的 mock 类型满足 GroupRepository 接口要求。
      ce1d2904
    • liuxiongfeng's avatar
      feat(groups): 添加从其他分组复制账号功能 · e1a4a7b8
      liuxiongfeng authored
      - 创建分组时可选择从已有分组复制账号
      - 编辑分组时支持同步账号(全量替换操作)
      - 仅允许选择相同平台的源分组
      - 添加完整的数据校验:去重、自引用检查、平台一致性检查
      - 前端支持多选源分组,带提示说明操作行为
      e1a4a7b8
    • 小北's avatar
      feat: 支持在用户搜索中使用备注字段 · 426ce616
      小北 authored
      - 在用户仓库的搜索过滤器中添加备注字段
      - 管理员现在可以通过备注/标记搜索用户
      - 使用不区分大小写的搜索(ContainsFold)
      
      Changes:
      - backend/internal/repository/user_repo.go: 添加 NotesContainsFold 到搜索条件
      426ce616
  3. 31 Jan, 2026 1 commit
  4. 30 Jan, 2026 3 commits
  5. 29 Jan, 2026 1 commit
    • yangjianbo's avatar
      feat(sora): 新增 Sora 平台支持并修复高危安全和性能问题 · 13262a56
      yangjianbo authored
      
      
      新增功能:
      - 新增 Sora 账号管理和 OAuth 认证
      - 新增 Sora 视频/图片生成 API 网关
      - 新增 Sora 任务调度和缓存机制
      - 新增 Sora 使用统计和计费支持
      - 前端增加 Sora 平台配置界面
      
      安全修复(代码审核):
      - [SEC-001] 限制媒体下载响应体大小(图片 20MB、视频 200MB),防止 DoS 攻击
      - [SEC-002] 限制 SDK API 响应大小(1MB),防止内存耗尽
      - [SEC-003] 修复 SSRF 风险,添加 URL 验证并强制使用代理配置
      
      BUG 修复(代码审核):
      - [BUG-001] 修复 for 循环内 defer 累积导致的资源泄漏
      - [BUG-002] 修复图片并发槽位获取失败时已持有锁未释放的永久泄漏
      
      性能优化(代码审核):
      - [PERF-001] 添加 Sentinel Token 缓存(3 分钟有效期),减少 PoW 计算开销
      
      技术细节:
      - 使用 io.LimitReader 限制所有外部输入的大小
      - 添加 urlvalidator 验证防止 SSRF 攻击
      - 使用 sync.Map 实现线程安全的包级缓存
      - 优化并发槽位管理,添加 releaseAll 模式防止泄漏
      
      影响范围:
      - 后端:新增 Sora 相关数据模型、服务、网关和管理接口
      - 前端:新增 Sora 平台配置、账号管理和监控界面
      - 配置:新增 Sora 相关配置项和环境变量
      Co-Authored-By: default avatarClaude Sonnet 4.5 <noreply@anthropic.com>
      13262a56
  6. 28 Jan, 2026 1 commit
    • shaw's avatar
      修复调度器空缓存导致的竞态条件bug · e12dd079
      shaw authored
      当新分组创建后立即绑定账号时,调度器会错误地将空快照视为有效缓存命中,
      导致返回没有可调度的账号。现在空快照会触发数据库回退查询。
      e12dd079
  7. 27 Jan, 2026 2 commits
  8. 26 Jan, 2026 1 commit
    • shaw's avatar
      feat(auth): 实现 TOTP 双因素认证功能 · 1245f07a
      shaw authored
      新增功能:
      - 支持 Google Authenticator 等应用进行 TOTP 二次验证
      - 用户可在个人设置中启用/禁用 2FA
      - 登录时支持 TOTP 验证流程
      - 管理后台可全局开关 TOTP 功能
      
      安全增强:
      - TOTP 密钥使用 AES-256-GCM 加密存储
      - 添加 TOTP_ENCRYPTION_KEY 配置项,必须手动配置才能启用功能
      - 防止服务重启导致加密密钥变更使用户无法登录
      - 验证失败次数限制,防止暴力破解
      
      配置说明:
      - Docker 部署:在 .env 中设置 TOTP_ENCRYPTION_KEY
      - 非 Docker 部署:在 config.yaml 中设置 totp.encryption_key
      - 生成密钥命令:openssl rand -hex 32
      1245f07a
  9. 24 Jan, 2026 3 commits
    • shaw's avatar
      feat(auth): 密码重置邮件队列化与限流优化 · 9cc83525
      shaw authored
      - 邮件发送改为异步队列处理,避免并发导致发送失败
      - 新增 Email 维度限流(30秒冷却期),防止邮件轰炸
      - Token 验证使用常量时间比较,防止时序攻击
      - 重构代码消除冗余,提取公共验证逻辑
      9cc83525
    • shaw's avatar
      fix(test): 修复订阅相关测试失败问题 · 43a1031e
      shaw authored
      1. 使用未来日期(2099年)作为测试订阅的过期时间,避免
         normalizeSubscriptionStatus 将测试数据标记为过期
      2. 修复 List 方法调用参数不足的问题(新增 sortBy/sortOrder 参数)
      43a1031e
    • shaw's avatar
      feat(subscription): 订阅过期状态自动更新与服务端排序 · b0aa2354
      shaw authored
      - 新增 SubscriptionExpiryService 定时任务,每分钟更新过期订阅状态
      - 订阅列表支持服务端排序(按过期时间、状态、创建时间)
      - 实时显示正确的过期状态,无需等待定时任务
      - 允许对已过期订阅进行续期操作
      - DataTable 组件支持 serverSideSort 模式
      b0aa2354
  10. 23 Jan, 2026 1 commit
  11. 20 Jan, 2026 3 commits
  12. 19 Jan, 2026 6 commits
  13. 18 Jan, 2026 5 commits
  14. 17 Jan, 2026 1 commit
    • ianshaw's avatar
      fix(ops): 统一 request-errors 和 SLA 的错误分类逻辑 · bc1d7edc
      ianshaw authored
      修复 request-errors 接口与 Dashboard Overview SLA 计算不一致的问题:
      - errors 视图现在只排除业务限制错误(余额不足、并发限制等)
      - 上游 429/529 错误现在包含在 errors 视图中,与 SLA 计算保持一致
      - excluded 视图现在只显示业务限制错误
      
      这确保了 request-errors 接口和 Dashboard 的 error_count_sla 使用相同的过滤逻辑。
      bc1d7edc
  15. 16 Jan, 2026 5 commits