• 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
metadata_userid_test.go 7.94 KB