1. 18 Mar, 2026 9 commits
    • shaw's avatar
      fix: 修复 hotpath 测试中 metadata.user_id 格式不合法导致 CI 失败 · 7414bdf0
      shaw authored
      测试数据使用的 session ID "abc-123" 不符合 ParseMetadataUserID
      要求的 36 字符 UUID 格式,替换为合法 UUID。
      7414bdf0
    • Wesley Liddick's avatar
      Merge pull request #1108 from DaydreamCoding/feat/admin-group-capacity-and-usage · e6326b29
      Wesley Liddick authored
      feat(admin): 分组管理列表新增用量、账号分类与容量列
      e6326b29
    • Wesley Liddick's avatar
      Merge pull request #1109 from GuangYiDing/feat/subscription-guide · 17cdcebd
      Wesley Liddick authored
      feat(subscriptions): 订阅管理页面添加教程指南弹窗
      17cdcebd
    • shaw's avatar
      fix: 兼容 Claude Code v2.1.78+ 新 JSON 格式 metadata.user_id · a14babdc
      shaw authored
      Claude Code v2.1.78 起将 metadata.user_id 从拼接字符串改为 JSON:
      旧: user_{hex}_account_{uuid}_session_{uuid}
      新: {"device_id":"...","account_uuid":"...","session_id":"..."}
      
      新增集中解析/格式化模块 metadata_userid.go:
      - ParseMetadataUserID: 自动识别两种格式,提取 DeviceID/AccountUUID/SessionID
      - FormatMetadataUserID: 根据 UA 版本输出对应格式(>= 2.1.78 输出 JSON)
      - ExtractCLIVersion: 从 UA 提取版本号,消除与 ClaudeCodeValidator.ExtractVersion 的重复
      
      修改消费者统一使用新模块:
      - claude_code_validator: 用 ParseMetadataUserID 替代只匹配旧格式的 userIDPattern
      - identity_service: RewriteUserID/WithMasking 增加 fingerprintUA 参数,
        解析用 ParseMetadataUserID,输出用 FormatMetadataUserID(版本感知)
      - gateway_service: GenerateSessionHash 用 ParseMetadataUserID 提取 session_id,
        buildOAuthMetadataUserID 用 FormatMetadataUserID 输出版本匹配格式,
        两处 RewriteUserIDWithMasking 调用传入 fp.UserAgent
      - account_test_service: generateSessionString 改用 FormatMetadataUserID,
        自动跟随 DefaultHeaders UA 版本
      
      删除三个旧正则: userIDPattern, userIDRegex, sessionIDRegex
      统一 hex 匹配为 [a-fA-F0-9],修复旧 userIDRegex 只匹配小写的不一致
      a14babdc
    • Rose Ding's avatar
      feat(subscriptions): 订阅管理页面添加教程指南弹窗 · aadc6a76
      Rose Ding authored
      
      
      在订阅管理页面工具栏添加教程指南按钮(? 图标),点击弹出模态框,
      引导管理员完成订阅功能的完整使用流程:
      
      - 步骤一:创建订阅分组(含跳转分组管理链接)
      - 步骤二:分配订阅给用户(搜索用户、选择分组、设置有效期)
      - 步骤三:管理已有订阅(调整/重置配额/撤销操作说明表格)
      - 底部提示:说明下拉列表为空时的解决方案
      
      弹窗样式参照 BackupView 的 R2 Guide 模态框实现,保持 UI 一致性。
      Co-Authored-By: default avatarClaude Opus 4.6 <noreply@anthropic.com>
      aadc6a76
    • Rose Ding's avatar
      feat(i18n): 添加订阅管理教程指南英文翻译 · f16af8bf
      Rose Ding authored
      
      
      在 en.ts 中为订阅管理页面新增 guide 相关翻译词条,
      与中文翻译保持结构一致,支持中英文切换。
      Co-Authored-By: default avatarClaude Opus 4.6 <noreply@anthropic.com>
      f16af8bf
    • Rose Ding's avatar
      feat(i18n): 添加订阅管理教程指南中文翻译 · 5ceaef45
      Rose Ding authored
      
      
      在 zh.ts 中为订阅管理页面新增 guide 相关翻译词条,包括:
      - 教程弹窗标题与副标题
      - 三步操作引导文案(创建分组、分配订阅、管理订阅)
      - 操作说明表格(调整/重置配额/撤销)
      - 底部提示信息
      Co-Authored-By: default avatarClaude Opus 4.6 <noreply@anthropic.com>
      5ceaef45
    • 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
    • QTom's avatar
      feat(admin): 分组管理列表新增用量列与账号数分类 · 961c30e7
      QTom authored
      
      
      分组管理列表增强:
      
      1. 今日/累计用量列:
         - 新增独立端点 GET /admin/groups/usage-summary
         - 一次查询返回所有分组的今日费用和累计费用(actual_cost)
         - 前端异步加载后合并显示在分组列表中
      
      2. 账号数区分可用/限流/总量:
         - 将账号数列从单一总量改为 badge 内多行展示
         - 可用: active + schedulable 的账号数(绿色)
         - 限流: rate_limit/overload/temp_unschedulable 的账号数(橙色,无限流时隐藏)
         - 总量: 全部关联账号数
      Co-Authored-By: default avatarClaude Opus 4.6 (1M context) <noreply@anthropic.com>
      961c30e7
  2. 17 Mar, 2026 15 commits
  3. 16 Mar, 2026 16 commits