1. 28 Feb, 2026 2 commits
    • QTom's avatar
      feat(admin): 添加管理员直接修改用户 API Key 分组的功能 · 000e621e
      QTom authored
      - 新增 PUT /api/v1/admin/api-keys/:id 端点,允许管理员修改任意用户 API Key 的分组绑定
      - 跳过用户级权限校验但保留分组有效性验证,修改后触发认证缓存失效
      - Service 层支持三态语义:nil=不修改,0=解绑,>0=绑定,<0=拒绝
      - 指针值拷贝保证安全隔离,负数 groupID 返回 400 INVALID_GROUP_ID
      - 前端 UserApiKeysModal 新增可点击的分组选择下拉框,支持多 Key 并发更新
      - 下拉支持视口翻转和滚动关闭,按钮有 disabled 和加载状态
      - 覆盖:后端 20 个单元测试 (Service 11 + Handler 9) + 前端 16 个 E2E 测试
      - golangci-lint 0 issues, make test-unit 全部通过
      000e621e
    • yangjianbo's avatar
      feat(sync): full code sync from release · bb664d9b
      yangjianbo authored
      bb664d9b
  2. 27 Feb, 2026 4 commits
  3. 26 Feb, 2026 6 commits
  4. 25 Feb, 2026 4 commits
  5. 24 Feb, 2026 10 commits
    • erio's avatar
      fix: 统一gemini-3默认映射为非强制3.1 · c671e8dd
      erio authored
      c671e8dd
    • cagedbird043's avatar
    • erio's avatar
      feat: optimize model rate limit indicator layout with short aliases · a3ff317f
      erio authored
      - Change layout from fixed 3-column grid to vertical-first responsive
        columns (1 col for ≤4 items, 2 cols for ≤8, 3 cols for 9+)
      - Add short aliases for all known model scope keys (e.g. COpus46, CSon46,
        G3PH, G3F) to reduce badge width
      - Display countdown timer directly on each badge (supports h/m/s)
      - Retain legacy scope aliases for backward compatibility
      a3ff317f
    • erio's avatar
      fix: enable Gemini model_mapping UI and extend warmup to Antigravity · d8d4b0c0
      erio authored
      - Remove Gemini platform exclusion from model restriction UI in
        Create/Edit account modals (Gemini now supports model_mapping)
      - Remove outdated Gemini model passthrough info cards
      - Add model_mapping field to GeminiCredentials type
      - Extend warmup request interception toggle to Antigravity platform
      - Remove redundant try/catch in API key account creation
      - Remove noisy gateway.request_completed debug log
      - Reorganize Gemini model mapping sections in constants.go
      d8d4b0c0
    • cagedbird043's avatar
      076c0006
    • erio's avatar
      feat: add claude-sonnet-4-6 and gemini-3.1-pro model support · 645f2831
      erio authored
      Add claude-sonnet-4-6 to identity injection modelInfoMap and
      Antigravity model selector. Add gemini-3.1-pro-high/low to
      Antigravity model list and Sonnet 4.6 preset mapping.
      645f2831
    • erio's avatar
      fix(frontend): add Gemini models to bulk edit and fix status grid layout · fb3ef5f3
      erio authored
      Add Gemini model presets to BulkEditAccountModal for bulk model mapping.
      Fix AccountStatusIndicator model rate limit grid layout using proper
      grid container.
      fb3ef5f3
    • erio's avatar
      feat: add mixed-channel precheck API for account-group binding · aaac1aac
      erio authored
      Add a dedicated CheckMixedChannel endpoint that allows the frontend
      to pre-validate mixed channel risk before submitting create/update
      requests. This improves UX by showing warnings earlier in the flow
      instead of only after form submission.
      
      Backend changes:
      - Add CheckMixedChannelRequest struct and CheckMixedChannel handler
      - Register POST /check-mixed-channel route
      - Expose CheckMixedChannelRisk as public method on AdminService
      - Simplify Create/Update 409 responses (remove details/require_confirmation)
      - Add comprehensive handler tests and stub methods
      
      Frontend changes:
      - Add checkMixedChannelRisk API function and TypeScript types
      - Refactor CreateAccountModal to precheck before step transition and submission
      - Refactor EditAccountModal to precheck before update submission
      - Replace pendingPayload pattern with action-based dialog flow
      aaac1aac
    • erio's avatar
      fix: fix intercept_warmup_requests config not being saved · 59898c16
      erio authored
      Extract applyInterceptWarmup utility to unify all credential building
      call sites:
      - Fix upstream account creation missing intercept_warmup_requests write
      - Fix apikey edit mode missing else-branch to clear the setting
      - Add backend unit test for IsInterceptWarmupEnabled
      - Add frontend unit test for credentialsBuilder
      59898c16
    • erio's avatar
      fix: update Claude usage window to support 4.6 models · fdf9f682
      erio authored
      The usage progress bar only matched claude-sonnet-4-5 and
      claude-opus-4-5-thinking. After upgrading to 4.6, the backend returns
      claude-sonnet-4-6/claude-opus-4-6-thinking which didn't match,
      causing the Claude usage bar to not display.
      
      - Add claude-sonnet-4-6 and claude-opus-4-6-thinking to the match list
      - Rename label from "C4.5" to "Claude" for future-proofing
      fdf9f682
  6. 23 Feb, 2026 2 commits
  7. 22 Feb, 2026 3 commits
  8. 21 Feb, 2026 2 commits
  9. 20 Feb, 2026 1 commit
  10. 19 Feb, 2026 3 commits
  11. 18 Feb, 2026 1 commit
  12. 17 Feb, 2026 1 commit
  13. 14 Feb, 2026 1 commit
    • shaw's avatar
      feat: 区分 Anthropic 5m/1h 缓存创建 token 的差异化计费 · a817cafe
      shaw authored
      Anthropic API 的 cache_creation 对象区分了 ephemeral_5m 和 ephemeral_1h
      两种缓存创建 token,1h 单价远高于 5m(如 claude-3-5-haiku: 5m=$1/MTok,
      1h=$6/MTok)。此前系统统一按 5m 单价计费,导致计费偏低。
      
      后端:
      - pricing_service: 加载 LiteLLM 的 cache_creation_input_token_cost_above_1hr
      - billing_service: GetModelPricing 启用分类计费(安全守卫 1h>5m),
        CalculateCost 按 5m/1h 分别计费,无明细时回退到 5m 单价
      - gateway_service: parseSSEUsage/handleNonStreamingResponse 用 gjson
        提取嵌套 cache_creation 对象的 ephemeral_5m/1h_input_tokens
      - antigravity_gateway_service: extractSSEUsage/extractClaudeUsage 同步提取
      - usage_log: 修复 GORM column tag 确保写入正确的数据库列
      - 新增迁移 054: 删除 GORM 自动生成的重复列
      
      前端:
      - 使用记录 tooltip 展示 5m/1h 缓存创建明细(带彩色 badge 区分)
      - 表格单元格缓存写入数值旁显示 1h 标识
      a817cafe