1. 30 Mar, 2026 1 commit
  2. 27 Mar, 2026 2 commits
    • QTom's avatar
      feat(privacy): 为 OpenAI OAuth 账号添加前端手动设置隐私按钮 · c13c81f0
      QTom authored
      
      
      复用已有的 set-privacy API 端点,Handler 通过 platform 分发到
      ForceOpenAIPrivacy / ForceAntigravityPrivacy,前端 AccountActionMenu
      扩展隐私按钮支持 OpenAI OAuth 账号。
      Co-Authored-By: default avatarClaude Opus 4.6 (1M context) <noreply@anthropic.com>
      c13c81f0
    • shaw's avatar
      feat(tls-fingerprint): 新增 TLS 指纹 Profile 数据库管理及代码质量优化 · 1854050d
      shaw authored
      新增功能:
      - 新增 TLS 指纹 Profile CRUD 管理(Ent schema + 迁移 + Admin API + 前端管理界面)
      - 支持账号绑定数据库中的自定义 TLS Profile,或随机选择(profile_id=-1)
      - HTTPUpstream.DoWithTLS 接口从 bool 改为 *tlsfingerprint.Profile,支持按账号指定 Profile
      - AccountUsageService 注入 TLSFingerprintProfileService,统一 usage 场景与网关的 Profile 解析逻辑
      
      代码优化:
      - 删除已被 TLSFingerprintProfileService 完全取代的 registry.go 死代码(418 行)
      - 提取 3 个 dialer 的重复 TLS 握手逻辑为 performTLSHandshake() 共用函数
      - 修复 GetTLSFingerprintProfileID 缺少 json.Number 处理的 bug
      - gateway_service.Forward 中 ResolveTLSProfile 从重试循环内重复调用改为预解析局部变量
      - 删除冗余的 buildClientHelloSpec() 单行 wrapper 和 int64(e.ID) 无效转换
      - tls_fingerprint_profile_cache.go 日志从 log.Printf 改为 slog 结构化日志
      - dialer_capture_test.go 添加 //go:build integration 标签,防止 CI 失败
      - 去重 TestProfileExpectation 类型至共享 test_types_test.go
      - 修复 9 个测试文件缺少 tlsfingerprint import 的编译错误
      - 修复 error_policy_integration_test.go 中 handleError 回调签名被错误替换的问题
      1854050d
  3. 25 Mar, 2026 2 commits
    • QTom's avatar
      feat(antigravity): 从 LoadCodeAssist 复用 TierInfo 提取 plan_type · f6fd7c83
      QTom authored
      复用已有 GetTier() 返回的 tier ID(free-tier / g1-pro-tier /
      g1-ultra-tier),通过 TierIDToPlanType 映射为 Free / Pro / Ultra,
      在 loadProjectIDWithRetry 中顺带提取并写入 credentials.plan_type;
      前端增加 Abnormal 异常套餐红色标记。
      
      Made-with: Cursor
      f6fd7c83
    • QTom's avatar
      feat(antigravity): 自动设置隐私并支持后台手动重试 · c2965c0f
      QTom authored
      新增 Antigravity OAuth 隐私设置能力,在账号创建、刷新、导入和后台
      Token 刷新路径自动调用 setUserSettings + fetchUserInfo 关闭遥测;
      持久化后同步内存 Extra,错误处理改为日志记录。
      
      Made-with: Cursor
      c2965c0f
  4. 24 Mar, 2026 2 commits
  5. 23 Mar, 2026 3 commits
  6. 20 Mar, 2026 2 commits
  7. 19 Mar, 2026 6 commits
  8. 18 Mar, 2026 2 commits
    • erio's avatar
      perf(frontend): add virtual scrolling to DataTable · a20c2111
      erio authored
      Replace direct row rendering with @tanstack/vue-virtual. The table
      now only renders visible rows (~20) via padding <tr> placeholders,
      eliminating the rendering bottleneck when displaying 100+ rows with
      heavy cell components.
      
      Key changes:
      - DataTable.vue: integrate useVirtualizer (always-on), virtual row
        template with measureElement for variable row heights, defineExpose
        virtualizer/sortedData for external access, overflow-y/flex CSS
      - useSwipeSelect.ts: dual-mode support via optional
        SwipeSelectVirtualContext — data-driven row index lookup and
        selection range when virtualizer is present, original DOM-based
        path preserved for callers that don't pass virtualContext
      a20c2111
    • QTom's avatar
      feat(admin): 分组管理新增容量列(并发/会话/RPM 实时聚合) · d4cc9871
      QTom authored
      
      
      复用 GroupCapacityService,在 admin 分组列表中添加容量列,
      显示每个分组的实时并发/会话/RPM 使用量和上限。
      Co-Authored-By: default avatarClaude Opus 4.6 (1M context) <noreply@anthropic.com>
      d4cc9871
  9. 17 Mar, 2026 5 commits
  10. 16 Mar, 2026 7 commits
  11. 15 Mar, 2026 8 commits
    • erio's avatar
      refactor: replace sync.Map credits state with AICredits rate limit key · 8a260def
      erio authored
      Replace process-memory sync.Map + per-model runtime state with a single
      "AICredits" key in model_rate_limits, making credits exhaustion fully
      isomorphic with model-level rate limiting.
      
      Scheduler: rate-limited accounts with overages enabled + credits available
      are now scheduled instead of excluded.
      
      Forwarding: when model is rate-limited + credits available, inject credits
      proactively without waiting for a 429 round trip.
      
      Storage: credits exhaustion stored as model_rate_limits["AICredits"] with
      5h duration, reusing SetModelRateLimit/isRateLimitActiveForKey.
      
      Frontend: show credits_active (yellow ) when model rate-limited but
      credits available, credits_exhausted (red) when AICredits key active.
      
      Tests: add unit tests for shouldMarkCreditsExhausted, injectEnabledCreditTypes,
      clearCreditsExhausted, and update existing overages tests.
      8a260def
    • SilentFlower's avatar
    • SilentFlower's avatar
    • SilentFlower's avatar
    • SilentFlower's avatar
      feat: implement resolveCreditsOveragesModelKey function to stabilize model key... · 17e40333
      SilentFlower authored
      feat: implement resolveCreditsOveragesModelKey function to stabilize model key resolution for credit overages
      17e40333
    • Peter's avatar
      8147866c
    • shaw's avatar
      fix: 恢复 UsageProgressBar 中被意外移除的窗口统计数据展示 · 220fbe65
      shaw authored
      commit 0debe0a8 在修复 OpenAI WS 用量窗口刷新问题时,意外删除了
      UsageProgressBar 中的 window stats 渲染逻辑和格式化函数。
      
      恢复进度条上方的统计行(requests, tokens, account cost, user cost)
      及对应的 4 个格式化 computed 属性。
      220fbe65
    • IanShaw027's avatar
      fix: 修复批量编辑账号时模型白名单显示与实际不一致的问题 #982 · 19d3ecc7
      IanShaw027 authored
      修复批量编辑账号时,UI 显示的是 plain 模型名(如 GPT-5),但实际落库的是 dated 模型名的问题。
      
      核心改动:
      1. 批量编辑白名单不再使用 BulkEditAccountModal.vue 中手写的过期模型列表
         - 移除了 allModels 和 presetMappings 的硬编码列表(共 200+ 行)
         - 直接复用 ModelWhitelistSelector.vue 组件
      
      2. ModelWhitelistSelector 组件支持多平台联合过滤
         - 新增 platforms 属性支持传入多个平台
         - 添加 normalizedPlatforms 计算属性统一处理单平台和多平台场景
         - availableOptions 根据选中的多个平台动态联合过滤模型列表
         - fillRelated 功能支持一次性填充多个平台的相关模型
      
      3. 模型映射预设改为动态生成
         - filteredPresets 改用 getPresetMappingsByPlatform 从统一模型源按平台动态生成
         - 不再依赖弹窗中的手写预设列表
      
      现在的行为:
      - UI 显示什么模型,勾选什么模型,传给后端的就是什么模型
      - 彻底解决了批量编辑链路上"显示与实际不一致"的问题
      - 模型列表和映射预设始终与系统定义保持同步
      19d3ecc7