Agent 实践

dsh-antigravity:让 DeepSeek Harness 化身 Antigravity IDE 替身

文章目录
  1. 这是什么
  2. 为什么值得关注
  3. 它怎么转:四层逻辑
  4. 触发层
  5. 核心层
  6. 输出层
  7. 卡点层
  8. 它支持的 11 个模型
  9. 三档推理 Effort 路由
  10. 怎么升级:分三档
  11. 入门(5 分钟跑通)
  12. 进阶(理解 routing + 调优)
  13. 高手(fork + 魔改)
  14. 场景迁移:两个直接可平移的方向

研究日期:2026-09-03 · GitHub: LiZhenNet/dsh-antigravity · 14⭐/6 forks · MIT · v0.0.4

这是什么

dsh-antigravity 是 DSH(DeepSeek Harness)的官方插件,让你不用装 Google 的 Antigravity IDE,直接用 Google 账号登录就能在 DSH 里跑 Gemini 3.x / Claude Opus 4.6 / GPT-OSS 120B 等顶级模型。

Google 给 Antigravity IDE 用户配了 Cloud Code Assist 配额(含 Claude Opus 4.6 这种平时单买很贵的模型)。这插件做的事情,就是把 IDE 里那块"调 Cloud Code Assist 流式 API + OAuth 登录 + Quota 仪表盘"的能力拆出来,打包成 DSH 能吃的菜端上桌。

一句话:你的 Google 账号 + DSH = 11 个高价值模型任选 + 实时看配额。

为什么值得关注

  1. DSH 生态首个明星插件:DeepSeek 8-13 发布 DSH,8-18(5 天后)社区就出了这个插件,14⭐/6 forks 在 2 周内达成,说明 DSH 架构的插件扩展性被验证了。
  2. 逆向官方 IDE 的工程范本:硬编码 Google Antigravity IDE 的 OAuth client_id + 直接调 cloudcode-pa.googleapis.com,等于把"付费 IDE 的云端能力"拆给所有人用。
  3. 包含 11 个模型 + 6 档推理 effort 路由:每个模型对应不同 runtime ID(带 thinking / low / high 等后缀),映射逻辑在静态 ROUTING 表里写得清清楚楚。
  4. 技术深度可观:3034 行服务端 + 661 行 React 客户端,覆盖 OAuth PKCE 流式回调、thoughtSignature 持久化、动态 catalog 匹配、secret redact、双语 i18n 等生产级细节。

它怎么转:四层逻辑

触发层

DSH 用户想用 Gemini 3.x / Claude Opus 4.6,但不想单独配 Anthropic / OpenAI / Google AI Studio 的 API Key → 走「我已经有 Google 账号 + Cloud Code Assist 订阅」这条路。

核心层

1. 安装(两种方式)

# 一行命令(推荐)
dsh plugin --profile web add github:LiZhenNet/dsh-antigravity

# 或本地打包
npm run pack:dist
dsh plugin --profile web add ./dist/dsh-antigravity-0.0.4.tgz

2. OAuth 登录(PKCE 流式回调) - 起本地 51121 端口 loopback HTTP server - 生成 PKCE verifier + state → 拼 AUTH_URL 跳 Google - 浏览器回调 /oauth-callback → 拿 code → 换 access/refresh token - 凭证落盘 $DSH_HOME/storages/antigravity-oauth.json(chmod 600)

3. 模型路由(最巧的一步) - 用户选 Claude Opus 4.6 + reasoning effort=high - 查静态 ROUTING 表 → 映射到 runtime ID claude-opus-4-6-thinking - 同时调 /v1internal:fetchAvailableModels 拿后端真实 catalog,用正则 + 标签匹配确认 runtime ID 还活着 - 死了就 fallback 到降级档(如 gemini-3.6-flash-low

4. 流式对话 - POST /v1internal:streamGenerateContent?alt=sse - Headers 带 Authorization: Bearer ... + Client-Metadata: {ideType: ANTIGRAVITY} 假装是 IDE - SSE 流回 → 解析 parts (text/thought/functionCall) → 还原带 thoughtSignature 的块 - DSH 拿到 block-start/text-delta/tool-call-delta 事件喂给前端

输出层

  • DSH 模型选择器多出 11 个 Antigravity 模型(启用模型置顶)
  • 每个模型副标题实时显示「Quota: 87%」
  • Settings 页面有登录态、Quota 仪表盘、模型启用勾选器
  • 持久化用户勾选到 $DSH_HOME/storages/antigravity-settings.json

卡点层

  1. 账号无 Cloud Code Assist 权限 → 登录成功但 quota 接口返回 403
  2. 端口 51121 被占用 → OAuth callback 失败(可用 ANTIGRAVITY_CALLBACK_PORT 改)
  3. ROUTING 表里写的 runtime ID 被 Google 改名 → 静态 fallback 兜底但不一定准
  4. 国内不通 cloudcode-pa.googleapis.com → 必备梯子
  5. 非 Google AI Pro 订阅 只能看 Gemini 池 + 极少 Claude 池

它支持的 11 个模型

模型 ID 名称 配额池 上下文
gemini-3.7-flash Gemini 3.7 Flash Gemini 池(绿) 1M
gemini-3.6-flash Gemini 3.6 Flash Gemini 池 1M
gemini-3.5-flash Gemini 3.5 Flash Gemini 池 1M
gemini-3.1-pro Gemini 3.1 Pro Gemini 池 1M
gemini-3.1-flash-image Gemini 3.1 Flash Image Gemini 池 1M
gemini-3-flash Gemini 3 Flash Gemini 池 1M
gemini-2.5-pro Gemini 2.5 Pro Gemini 池 1M
gemini-2.5-flash Gemini 2.5 Flash Gemini 池 1M
claude-sonnet-4-6 Claude Sonnet 4.6 Claude & GPT 池(青) 200K
claude-opus-4-6 Claude Opus 4.6 Claude & GPT 池 250K
gpt-oss-120b GPT-OSS 120B Claude & GPT 池 131K

两套池分账:Gemini 池(绿色进度条)和 Claude & GPT 3P 池(青色进度条)独立计算 5h 限额 + 周限额。

三档推理 Effort 路由

每个模型支持 off/minimal/low/medium/high/xhigh 六档 effort,映射到不同 runtime ID:

// lib/index.js 里的 ROUTING 表(简化)
"claude-opus-4-6": {
  off: "claude-opus-4-6-thinking",
  routing: {
    minimal: "claude-opus-4-6-thinking",
    low: "claude-opus-4-6-thinking",
    medium: "claude-opus-4-6-thinking",
    high: "claude-opus-4-6-thinking",
    xhigh: "claude-opus-4-6-thinking",
  },
  defaultRequestId: "claude-opus-4-6-thinking",
}

"gemini-3.6-flash": {
  off: "gemini-3.6-flash-low",
  routing: {
    minimal: "gemini-3.6-flash-low",
    low: "gemini-3.6-flash-low",
    medium: "gemini-3.6-flash-medium",
    high: "gemini-3.6-flash-high",
    xhigh: "gemini-3.6-flash-high",
  },
  defaultRequestId: "gemini-3.6-flash-high",
}

Claude 系列无论选什么 effort 都强制走 thinking 变体(白嫖思考能力);Gemini 3.6 Flash 才是真的分档位。

怎么升级:分三档

入门(5 分钟跑通)

  1. 一行命令装插件
  2. DSH Web → Settings → Antigravity → 登录
  3. Gemini 3.5 Flash → 发「你好」
  4. 验收:能正常流式回复 + Settings 页能看到绿色进度条

进阶(理解 routing + 调优)

  1. lib/index.jsROUTING 常量,理解"用户选 X 模型 + Y effort → 后端用 Z runtime ID"
  2. 任务分类选模型: - 闲聊/简单问答 → gemini-3.5-flash(快便宜) - 写代码 → claude-sonnet-4-6gemini-3.1-pro-high - 复杂推理 → claude-opus-4-6-thinking(重模型,省着用)
  3. 看 Quota 进度条:5h 限额触底就切到 3P 池或缓一缓

高手(fork + 魔改)

  1. 新增 runtime model:Google 上新模型时,PR 加 ROUTING 条目
  2. 自定义 fallback 链:修改 getFallbackRuntimeModel,让"3.7 不可用"时降级到 3.1 而不是 3.6
  3. 写 quota 监控:用 /antigravity/api/quota 端点 + cron 跑脚本,quota < 20% 时通知飞书
  4. 替换 client_id:如果你有自己的 Google Cloud OAuth App,走 ANTIGRAVITY_CLIENT_ID/SECRET 环境变量

场景迁移:两个直接可平移的方向

方向 1:把任何「付费 IDE 的隐藏 API」反向工程到 DSH

底层逻辑:「厂商给 IDE 的云端 API + OAuth 配额 ≠ 必须用 IDE」

可平移对象: - Cursor(已有 cursor-api,套进 DSH 同理) - Codeium / Windsurf Cascade - Trae IDE(字节,海外版) - Amazon Q Developer

迁移变量: - OAuth client_id / client_secret(不同 IDE 不同) - API endpoint(每个厂商一个) - 模型清单(要持续跟踪 IDE 版本更新)

方向 2:DSH 插件开发的样板

底层逻辑:「LlmAdapter + OAuth + Web UI 注入 = DSH 插件三件套」

本插件就是个教科书: - 服务端:apply(ctx) → 注册 adapter + 注入 web API - 客户端:window.__ModuleLoader__.load() → 注入 settings 页 + locale 翻译 - 配置:cordis.patch.yml 一行 insert 让 Cordis 自动加载

迁移变量: - LLM API 协议(OpenAI 兼容 / Anthropic 原生 / Google 流式) - 凭证存储(OAuth / API Key / Service Account) - UI 复杂度(要不要 quota 仪表盘 / 模型选择器 / 登录流程)

部署风险与收益

收益

  • ✅ 白嫖 Google AI Pro / Ultra 订阅的 Cloud Code Assist 配额
  • ✅ 11 个高价值模型(含 Claude Opus 4.6,平时单买很贵)
  • ✅ DSH 统一 UI 里看 quota,不用切来切去
  • ✅ 思考档/轻量档灵活切,省配额

风险

  • 🔴 封号风险:非官方 client,理论上违反 Google ToS(实际检测力度未知)
  • 🟡 可用性风险:Google 改 API 协议 = 插件失效,作者不一定跟得上
  • 🟡 配额误读:UI 上 "85% 剩余" 是整个池子的,重模型消耗快(Claude Opus 一问可能掉 5%)
  • 🟢 数据隐私:所有对话走 Google 后端,敏感数据别传

关键技术亮点

  1. OAuth PKCE + loopback callback server:用 node:http 自起回调,无 headless 浏览器依赖
  2. 静态 ROUTING 表 + 动态 catalog 双保险:离线能用,运行时也能校正
  3. thoughtSignature 持久化:多轮思考签名能跨会话 replay,Claude/Gemini thinking 模式不丢上下文
  4. secret 自动 redact:错误信息里所有 ya29./1\//Bearer/client_secret 全替换为 [redacted]
  5. 安全 URL 校验assertSafeApiBaseUrl 强制 https + 白名单 *.googleapis.com + 拒绝带 userinfo 的 URL
  6. 写盘原子化:先写 .tmp 再 rename,文件权限 0o600
  7. endpoints 故障转移:prod → sandbox,403/404/429/5xx 才切下一个
  8. 30min project/model cache + inFlight 去重:防并发请求重复打 API

项目元数据

维度 数据
仓库 LiZhenNet/dsh-antigravity
创建 2026-08-18(DSH 发布后 5 天)
Stars / Forks 14 / 6
Open issues 8
版本 0.0.4(早期迭代)
License MIT
代码量 lib/index.js 3034 行 / lib/client.js 661 行
PeerDeps @deepseek-ai/dsh-llm / dsh-home-paths / dsh-host-webserver / dsh-timeout

一句话总结

dsh-antigravity 的灵魂 =「官方 IDE 给的云端能力不该被锁在 IDE 里」,把 Google Cloud Code Assist 拆成 DSH 能直接吃的 OAuth + 流式 API + Quota 仪表盘三件套。

它既是 DSH 插件生态的"开山之作",也是"逆向官方 IDE → 自托管用配额"模式的工程范本。如果你有 Google AI Pro 订阅但懒得装 Antigravity IDE,这个插件就是你的菜。


研究方法:阅读 RESEARCH.md → 克隆仓库 → 通读 lib/index.js (3034 行) + lib/client.js (661 行) + bin/antigravity-login.mjs + cordis.patch.yml + package.json + GitHub API 元数据 → 结合 DSH 本体研究(2026-08-14)上下文交叉验证。

记录到这里,判断留给实践。