Skip to content

Conversation

@ehgen0ng
Copy link
Collaborator

概述

本 PR 为 AMP Code 透明代理实现了 Claude API 会话标识自动生成功能,当请求缺少 metadata.user_id 时自动注入,确保会话上下文的连续性。

功能亮点

🔑 会话标识自动生成

  • 格式兼容官方user_{64位hex}_account__session_{uuid}
  • 智能检测:仅在 metadata.user_id 缺失或为空时生成
  • 会话复用:相同对话内容生成相同 session,支持上下文连续

🔐 安全增强

  • 用户指纹SHA256(API_Key + User-Agent) 生成 64 位 hex
    • 使用完整 API Key 避免碰撞
  • 会话标识:基于消息内容或随机 UUID
    • 有消息内容:SHA256(messages[:3]) → UUID 格式(支持复用)
    • 无消息内容:UUID v4 随机生成(避免碰撞)

📋 字段顺序保持

  • 按官方顺序注入 metadata 字段
  • 字段顺序:modelsystemmessagestoolsmetadatamax_tokensthinkingstream

数据流设计

AMP Code CLI 请求 → 透明代理 (8790)
  └─ Claude API 请求
      ├─ metadata.user_id 存在 → 保持原样
      └─ metadata.user_id 缺失
          ├─ 生成 user_hash: SHA256(API_Key + UA) → 64位hex
          ├─ 生成 session_uuid:
          │   ├─ messages 非空 → SHA256(messages[:3]) → UUID格式
          │   └─ messages 为空 → UUID v4 随机
          └─ 注入: user_{hash}_account__session_{uuid}

技术实现

后端(Rust)

新增依赖

uuid = { version = "1", features = ["v4"] }

新增函数services/proxy/headers/amp_processor.rs

函数 功能
generate_user_hash() SHA256(API_Key + UA) → 64位hex 用户指纹
generate_session_uuid() 消息内容哈希或随机 UUID v4
inject_metadata_with_order() 按官方顺序注入 metadata.user_id

修改逻辑

  • ApiType::Claude 分支:在调用 ClaudeHeadersProcessor 前检查并注入 metadata.user_id

生成示例

user_a3b7c9d2e4f61805927346ab8c1df5e09273a4b6c8d0e2f4a6b8c0d2e4f6a8b0_account__session_4f2a8c6e-1d3b-5a7f-9e2c-0b4d6f8a1c3e
     ↑ 64位hex (API_Key + UA)                                                    ↑ UUID格式 (对话内容或随机)

测试情况

代码质量检查

  • ESLint 检查通过
  • Clippy 检查通过
  • Prettier 检查通过
  • cargo fmt 检查通过

功能测试

  • 有 user_id 时保持原样
  • 无 user_id 时自动生成
  • 空消息使用随机 UUID
  • 非空消息基于内容生成(可复用)
  • 字段顺序符合官方格式

风险评估

低风险 ✅

  • 仅影响 AMP Code → Claude 的请求路径
  • 已有 user_id 的请求不受影响
  • 使用完整 API Key 哈希,碰撞概率极低

需注意 ⚠️

  • 空消息请求每次生成不同 session(设计如此,防止碰撞)
  • User-Agent 变化会导致 user_hash 变化

Breaking Changes: 无
依赖变更: 新增 uuid = { version = "1", features = ["v4"] }

@github-actions
Copy link

github-actions bot commented Jan 16, 2026

本评论会随各平台任务完成自动更新:
如首轮 npm run check 失败,请在本地执行 npm run check:fixnpm run check 并提交修复 commit。
如 fix 仍失败,请在本地排查并确保 npm run check 通过后再提交。
跨平台差异若无法复现,请复制日志交给 AI 获取排查建议。

平台 结果 明细 日志包 运行链接
ubuntu-22.04 ✅ 直接通过 check=success / fix=skipped / recheck=skipped pr-check-ubuntu-22.04 日志
windows-latest ✅ 直接通过 check=success / fix=skipped / recheck=skipped pr-check-windows-latest 日志
macos-14 (arm64) ✅ 直接通过 check=success / fix=skipped / recheck=skipped pr-check-macos-arm64 日志
macos-15 (x64) ✅ 直接通过 check=success / fix=skipped / recheck=skipped pr-check-macos-x64 日志

This comment auto-updates as each platform finishes:
If the first npm run check fails, run locally: npm run check:fixnpm run check and commit the fix.
If fix still fails, investigate locally and ensure npm run check passes before committing.
If cross-platform issues can't be reproduced, copy logs to an AI for hints.

Platform Status Detail Artifact Run
ubuntu-22.04 ✅ Passed check=success / fix=skipped / recheck=skipped pr-check-ubuntu-22.04 日志
windows-latest ✅ Passed check=success / fix=skipped / recheck=skipped pr-check-windows-latest 日志
macos-14 (arm64) ✅ Passed check=success / fix=skipped / recheck=skipped pr-check-macos-arm64 日志
macos-15 (x64) ✅ Passed check=success / fix=skipped / recheck=skipped pr-check-macos-x64 日志

- 【fix】实现 `user_id` 自动生成与注入逻辑,解决 AMP Code 缓存失效问题
- 【feat】基于 API Key 和 UA 生成用户指纹,并根据消息内容生成会话 UUID
- 【refactor】新增 `inject_metadata_with_order` 确保注入字段时保持 JSON 顺序
- 【chore】引入 `uuid` 依赖库以支持随机及基于内容的标识符生成
@jsrcode jsrcode merged commit 071d256 into DuckCoding-dev:main Jan 17, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants