fix(MOC-59): antigravity 传输指纹层对齐官方客户端(抓包实证)#310
Conversation
基于 2026-05-29 本机 mitmproxy local 模式抓包(Antigravity IDE 2.0.10),把发往
daily-cloudcode-pa 的请求【传输指纹层】对齐官方客户端,推翻多个 CLIProxyAPI 旧假设。
按决策,【内容层】(system prompt + tools)保持 Codex 原样不动 —— Codex 工具
(shell/apply_patch)与官方 Cascade 22 工具是两套不同 agent 架构,无法无损映射,
强行替换会命令偏差。指纹层是封号主信号且零功能影响。
- UA 统一为 antigravity/hub/2.0.10 <plat>/<arch>(运行时检测;原 1.23.2 + 硬编码
darwin/arm64 + 控制面错误的 nodejs-client 长形式)
- clientMetadata 精简为 {"ideType":"ANTIGRAVITY"}(camelCase;原 snake_case 3 字段)
- 控制面 loadCodeAssist/onboardUser 删 X-Goog-Api-Client(实证不发)
- envelope requestId: agent-<uuid> → agent/<uuid>/<ms>/<uuid>/<seq>
- antigravity 路径删 user_prompt_id(实证 envelope 不含;gemini-cli 路径保留)
- 抽 node_platform_arch 共享 helper(gemini-cli + antigravity UA 共用,防 OS/ARCH drift)
- 同步 module doc(mod.rs 差异表 / cloud_code.rs 头 / models.rs)为实证值
测试: gemini-oauth 52 + adapters 557 全过;cargo check --workspace 通过。
2-agent review(code-reviewer + silent-failure-hunter)无 BLOCKER。
Refs MOC-59
e2e + 协议层验证结论(2026-05-29)协议转换层(2-agent 实证 dump):Codex Responses → cloudcode envelope 无 drop bug、无转换错误。被 drop 的 传输层 e2e(真实出站):临时 example 起本地 proxy(antigravity active)发真实 Codex 请求到 验证局限:生成层返 403 新发现(followup → MOC-67,本 PR 不做):
review:Devin + 2-agent(code-reviewer/silent-failure-hunter)无 BLOCKER;CI 全绿;0 unresolved thread。 |
e2e 补充:完整生成成功(未封账号)✅承上条 —— 用新 build(含本 PR 改动)的 app、重新 OAuth 登录未封账号后重跑 e2e: HTTP 200 → response.completed → 模型正常生成文本「二」(1+1=2) + 真实计费(usage 71/1 tokens)。 对齐后的完整请求(UA (上条的 403 是另一测试账号 MOC-59 指纹对齐端到端闭环:单测 609 ✓ + 协议审查无 bug ✓ + e2e 真实 200/completed/生成成功 ✓。 |
MOC-59:Antigravity 传输指纹层对齐(抓包实证)
背景
Antigravity 检测到非官方客户端时容易封号。本 PR 基于 2026-05-29 本机 mitmproxy local 模式抓包(Antigravity IDE 2.0.10),把 codex-app-transfer 发往
daily-cloudcode-pa.googleapis.com的请求【传输指纹层】对齐官方客户端,推翻了多个基于 CLIProxyAPI 的旧假设。范围决策
只对齐【传输指纹层】(UA / clientMetadata / requestId / envelope / header)。【内容层】(system prompt + tools 定义)保持 Codex 原样不动 —— 因为 Codex 工具(
shell/apply_patch)与官方 Cascade 的 22 个工具是两套不同 agent 架构,16/22 无法无损映射,强行替换 prompt/工具会造成命令偏差。指纹层是封号主信号,且改动零功能影响。改动(实证 vs 旧推测)
antigravity/1.23.2 darwin/arm64(控制面还带google-api-nodejs-client长形式)antigravity/hub/2.0.10 <plat>/<arch>(运行时检测平台/架构,统一){ide_type,ide_name,ide_version}(snake){"ideType":"ANTIGRAVITY"}(camel,仅此字段)gl-node/22.21.1agent-<uuid>agent/<uuid>/<ms>/<uuid>/<seq>另:抽
node_platform_arch共享 helper(gemini-cli + antigravity UA 共用,防两份 OS/ARCH 映射 drift);同步mod.rs差异表 /cloud_code.rs头 /models.rs的 module doc 为实证值。验证
cargo check --workspace通过user_prompt_idwrite-only 不被 SSE/session 读、续连靠response_id+sessionId;删 header/字段不破坏控制面);findings 均为 module doc 同步,已修Followup(MOC-59 后续,本 PR 不做)
labels字段(需trajectory_id↔requestId一致性 + 完整语义)toolConfig.mode=VALIDATED(需先验证对 Codex 工具调用的兼容性)2.0.10)onboardUserbody 实证(本次没触发到)OauthProviderConfig.x_goog_api_client字段 +ANTIGRAVITY_X_GOOG_API_CLIENT常量Refs MOC-59
🤖 Generated with Claude Code