🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

Antigravity 账号池 chaos-03x/dsh-agy

DeepSeek Harnessv0.4.6
chaos-03x10 天前有提交已提供中文文档扫描:含敏感能力

Google Antigravity(agy)OAuth 认证与模型访问插件,用于 DeepSeek Harness:多账号池、429 轮换、设备指纹、命令行与网页登录。

55.9/100
综合分
61
GitHub 星标
437
npm 周下载
—/5
用户评分

数据截至 2026/10/25 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-agy
npm 源 · dsh-agy 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · model
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 10 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-agy @ 0.4.6
✓Node 引擎要求 >=20.18.1 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/29 20:44:34

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件写入剪贴板(不计风险)读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 72 处,展示前 42 条)
  • 读取本地文件
    lib/web/plugin.mjs:61
    current = readFileSync(this.file, "utf8");
  • 读取本地文件
    lib/web/plugin.mjs:71
    text = readFileSync(this.file, "utf8");
  • 写入本地文件
    lib/web/plugin.mjs:86
    mkdirSync(dirname(this.file), { recursive: true });
  • 写入本地文件
    lib/web/plugin.mjs:87
    writeFileSync(tmp, serialized, { mode: 384 });
  • 写入本地文件
    lib/web/plugin.mjs:88
    renameSync(tmp, this.file);
  • 发起网络请求
    lib/web/plugin.mjs:933
    async fetch(request) {
  • 写入剪贴板
    lib/client.js:3729
    await navigator.clipboard?.writeText(text);
  • 读取本地文件
    lib/accounts-DtIsWCeF.mjs:406
    if (!existsSync(file)) return entries;
  • 读取本地文件
    lib/accounts-DtIsWCeF.mjs:407
    const text = readFileSync(file, "utf8");
  • 读取本地文件
    lib/accounts-DtIsWCeF.mjs:434
    const mode = statSync(file).mode & 511;
  • 读取本地文件
    lib/accounts-DtIsWCeF.mjs:443
    if (!existsSync(file)) return void 0;
  • 写入本地文件
    lib/accounts-DtIsWCeF.mjs:520
    mkdirSync(dirname(file), { recursive: true });
  • 读取本地文件
    lib/accounts-DtIsWCeF.mjs:521
    const existingText = existsSync(file) ? readFileSync(file, "utf8") : "";
  • 读取本地文件
    lib/accounts-DtIsWCeF.mjs:521
    const existingText = existsSync(file) ? readFileSync(file, "utf8") : "";
  • 写入本地文件
    lib/accounts-DtIsWCeF.mjs:525
    writeFileSync(tmp, next, { mode: 384 });
  • 写入本地文件
    lib/accounts-DtIsWCeF.mjs:526
    renameSync(tmp, file);
  • 写入本地文件
    lib/accounts-DtIsWCeF.mjs:612
    mkdirSync(agyDataDir(dshHome), { recursive: true });
  • 写入本地文件
    lib/accounts-DtIsWCeF.mjs:613
    renameSync(legacy, file);
  • 写入本地文件
    lib/accounts-DtIsWCeF.mjs:2969
    mkdirSync(dirname(this.file), { recursive: true });
  • 读取本地文件
    lib/plugin-common-BlGbNHxX.mjs:571
    const raw = readFileSync(this.file, "utf8");
  • 写入本地文件
    lib/plugin-common-BlGbNHxX.mjs:584
    mkdirSync(dirname(this.file), { recursive: true });
  • 写入本地文件
    lib/plugin-common-BlGbNHxX.mjs:586
    writeFileSync(tmp, ModelVisibility.serialize(next), { mode: 384 });
  • 写入本地文件
    lib/plugin-common-BlGbNHxX.mjs:587
    renameSync(tmp, this.file);
  • 读取本地文件
    lib/plugin-common-BlGbNHxX.mjs:666
    current = readFileSync(this.file, "utf8");
  • 读取本地文件
    lib/plugin-common-BlGbNHxX.mjs:804
    const raw = readFileSync(this.file, "utf8");
  • 读取本地文件
    lib/plugin-common-BlGbNHxX.mjs:832
    current = readFileSync(this.file, "utf8");
  • 写入本地文件
    lib/plugin-common-BlGbNHxX.mjs:874
    mkdirSync(dirname(this.file), { recursive: true });
  • 写入本地文件
    lib/plugin-common-BlGbNHxX.mjs:876
    writeFileSync(tmp, text, { mode: 384 });
  • 写入本地文件
    lib/plugin-common-BlGbNHxX.mjs:877
    renameSync(tmp, this.file);
  • 读取本地文件
    lib/plugin-common-BlGbNHxX.mjs:1060
    const raw = readFileSync(this.file, "utf8");
  • 读取本地文件
    lib/plugin-common-BlGbNHxX.mjs:1080
    current = readFileSync(this.file, "utf8");
  • 读取密钥环境变量
    lib/constants-AdsD4sKh.mjs:119
    clientSecret: process.env.AGY_CLIENT_SECRET || "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"
  • 读取密钥环境变量
    lib/constants-AdsD4sKh.mjs:124
    clientSecret: process.env.AGY_CLIENT_SECRET || "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"
  • 发起网络请求
    lib/proxy-B7VnbAfO.mjs:58
    const envAgent = new EnvHttpProxyAgent();
  • 发起网络请求
    lib/proxy-B7VnbAfO.mjs:65
    const envStreamingAgent = new EnvHttpProxyAgent({ bodyTimeout: 0 });
  • 发起网络请求
    lib/proxy-B7VnbAfO.mjs:255
    return new ProxyAgent({
  • 发起网络请求
    lib/proxy-B7VnbAfO.mjs:329
    if (!proxyUrl) return fetch(input, {
  • 发起网络请求
    lib/proxy-B7VnbAfO.mjs:334
    if (targetStr && isLoopbackUrl(targetStr)) return fetch(input, cleanInit);
  • 发起网络请求
    lib/proxy-B7VnbAfO.mjs:354
    return await fetch(input, {
  • 读取本地文件
    lib/cli/index.mjs:111
    const { version: PACKAGE_VERSION } = JSON.parse(readFileSync(new URL("../../package.json", import.meta.url), "utf8"));
  • 读取本地文件
    lib/cli/index.mjs:282
    const raw = readFileSync(file, "utf8");
  • 写入本地文件
    lib/cli/index.mjs:310
    writeFileSync(file, blob + "\n", { mode: 384 });
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-settings-plugins@deepseek-ai/dsh-client-ui-slots@deepseek-ai/cordis@deepseek-ai/dsh-llm
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

4 张 · 点击查看大图

功能亮点

  • OAuth认证接入
  • 多账号池轮换
  • 命令行与网页登录
v0.4.62026-10-10
· 变更内容 · chore(release):0.4.5 · fix(adapter):给卡住的 SSE 响应体加空闲超时限制 · fix(web):管理 RPC 在任意绑定地址上都能提供服务,OAuth 回调按对端做校验 · feat(settings):新增配置标签页,内联上限可配置 · chore:收尾 #106/#107 的评审后续事项 · 新贡献者 · @Suxeca 首次贡献,提交于 完整变更日志:
v0.4.52026-10-08
· 变更内容 · chore:发布 0.4.4 · fix(scripts):从 agy 数据目录读取账户存储 · chore:忽略 node_modules 符号链接,不只是目录 · fix(adapter):把重放的 functionResponse 解析到它自己那次调用的名字(#99 原因 A) · fix(adapter):让 MALFORMED_FUNCTION_CALL 重采样保持诚实 完整变更日志:
v0.4.42026-10-04
· 变更内容 · chore(release): 0.4.3 · fix(adapter): 合并相邻同角色内容,并考虑 fr 系列(#93) 完整变更日志:
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-agy 为 DeepSeek Harness 接入 Google Antigravity (agy):OAuth 认证、多账号池并自动轮换 429、设备指纹,命令行与网页两种管理方式。 中文文档:docs/README_zh.md 功能 - OAuth 登录:在浏览器里走 OAuth 回调,一键登录;也支持无头环境粘贴 URL,以及远程粘贴凭据 blob 的通道。 - 两种管理界面:网页和命令行,用哪个都行,核心功能一致。 - 多账号池:加密存储账号,按用量挑选账号(配额按家族划分,排序规则与 OMP 对齐),遇到限流自动轮换,每个账号按真实重置时间单独冷却,每个账号独立设备指纹。 - 内嵌设置界面:DSH 设置里有一块 Antigravity 区域,分五个标签页——账号(登录、激活、按组展示 5 小时/每周配额窗口、测试调用、指纹与代理管理)、模型(逐个控制可见性)、配置(思考预算、多模态内联上限)、用量(累计 token 与请求统计)、凭据(导入/导出)。 没有单独页面:DSH 设置在哪,这块界面就在哪。 - 会话头部配额徽标:取当前账号所有跟踪窗口(5 小时与每周)里最紧的那个,显示成一个数字,悬停可看各窗口明细和重置时间。它读的就是设置区域展示的那组配额窗口,所以头部和面板不会对不上。 - 模型可见性开关:把单个模型从 DSH 模型选择器里隐藏。
展开完整文档(README 剩余 1 节)
dsh-agy

为 DeepSeek Harness 接入 Google Antigravity (agy):OAuth 认证、多账号池并自动轮换 429、设备指纹,命令行与网页两种管理方式。

中文文档:docs/README_zh.md

功能

- OAuth 登录:在浏览器里走 OAuth 回调,一键登录;也支持无头环境粘贴 URL,以及远程粘贴凭据 blob 的通道。
- 两种管理界面:网页和命令行,用哪个都行,核心功能一致。
- 多账号池:加密存储账号,按用量挑选账号(配额按家族划分,排序规则与 OMP 对齐),遇到限流自动轮换,每个账号按真实重置时间单独冷却,每个账号独立设备指纹。
- 内嵌设置界面:DSH 设置里有一块 Antigravity 区域,分五个标签页——账号(登录、激活、按组展示 5 小时/每周配额窗口、测试调用、指纹与代理管理)、模型(逐个控制可见性)、配置(思考预算、多模态内联上限)、用量(累计 token 与请求统计)、凭据(导入/导出)。
没有单独页面:DSH 设置在哪,这块界面就在哪。
- 会话头部配额徽标:取当前账号所有跟踪窗口(5 小时与每周)里最紧的那个,显示成一个数字,悬停可看各窗口明细和重置时间。它读的就是设置区域展示的那组配额窗口,所以头部和面板不会对不上。
- 模型可见性开关:把单个模型从 DSH 模型选择器里隐藏。黑名单语义——只有你关掉的模型才会隐藏,服务端以后新增的模型仍然可见。
- 用量统计:输入 / 输出 / 缓存读取 / 缓存写入 token、请求数、失败数、限流数、轮换次数、延迟与首 token 时间,按账号和按模型汇总。连不经过 DSH 的调用(命令行、验证、测试调用)也算在内,这是任何基于会话的统计都看不到的。
- 命令行:dsh-agy login|status|import|verify|logout 可独立运行,有没有 harness 都行。

截图

DSH 设置里的 Antigravity 区域。账号邮箱和项目名已打码。

| 账号 | 模型 |
| accounts | models |
| 限额 — 5 小时与每周窗口 | 用量 — 累计、按模型、按账号 |
| limits | usage |

快速开始

路径 A:DSH Web GUI 用户(推荐 —— 全程 Web UI,零命令行操作)

如果你用的是 DeepSeek Harness 浏览器工作区 / Web GUI:

1. Install plugin into DSH web profile (via dsh CLI, or pnpx/npx if dsh is not in PATH)
dsh plugin --profile web add dsh-agy
or: npx @deepseek-ai/dsh plugin --profile web add dsh-agy

2. Launch DSH Web
dsh web

3. Open Settings → Antigravity, then click "登录" (Login) in that section Complete OAuth authorization, and start using the agy provider

这个区块在 Settings → Antigravity(顶层,和 General、Models 并列)。没有单独的仪表盘页面:旧的 /agy URL 已经移除。

路径 B:无头 / 纯终端(独立命令行)

适合 Linux VPS、SSH 远程服务器,或者无头 CI 环境:

Run directly without global install (npx / pnpx)
npx dsh-agy login
npx dsh-agy status

Or install globally
npm install -g dsh-agy
dsh-agy login # interactive OAuth (browser, --headless paste, or --blob)
dsh-agy status # list accounts + quota summary
dsh-agy verify # refresh + health check
dsh-agy health # batch health check (optionally on an interval)
dsh-agy import <file> # import agy auth.json or credential blob (--blob)
dsh-agy logout # remove account

命令行参考

| 命令 | 选项 | 说明 |
| dsh-agy login | --headless —— 打印授权 URL,等待你粘贴重定向 URL--blob —— 打印一段可粘贴的凭据 blob,不存储账号--port <n> —— 回环回调端口(默认 51121)--project <id> —— 把登录绑定到指定项目--timeout <ms> —— 回调超时(默认 300000) | 交互式 Google OAuth |
| dsh-agy status | — | 列出账号 + 每个模型的配额摘要 |
| dsh-agy import <files...> | --blob —— 粘贴的值是凭据 blob--email <email> —— 设置账号邮箱(跳过 userinfo 校验)--overwrite —— 替换邮箱相同的已有账号 | 导入 agy auth.json 文件或凭据 blob(多个文件 / 多行粘贴 = 批量导入) |
| dsh-agy export | --index <n> —— 按索引导出单个账号(默认:全部)--out <dir> —— 每个账号写一个 dsh-agy-<index>.blob(默认:打印到 stdout,每行一个 blob) | 把账号凭据导出为可粘贴的 blob |
| dsh-agy verify | --index <n> —— 按索引校验单个账号(默认:全部) | 刷新 + 健康检查 |
| dsh-agy health | --index <n...> —— 只检查这些账号(默认:全部已启用)--interval <ms> —— 按间隔重复执行,而不是只跑一次 | 批量健康检查(刷新 + userinfo),凭据恢复可用的账号会重新启用 |
| dsh-agy logout | --index <n> —— 账号索引(默认:当前活跃)--email <email> —— 账号邮箱 | 移除账号 |

按账号配置代理

每个账号都能有自己的代理;凭据静态加密,展示时打码为 protocol//host:port。

dsh-agy login --proxy socks5://user:pass@host:1080
dsh-agy import --proxy <url> file.json
dsh-agy proxy set --index 0 --proxy <url> # set / update
dsh-agy proxy clear --index 0 # clear (fall back to env)
dsh-agy proxy test --index 0 # TCP 2s fast-fail probe
dsh-agy proxy list # masked list
dsh-agy status # shows proxy column (masked host:port)

回退:账号没有单独配代理时,请求走 EnvHttpProxyAgent(读 HTTP_PROXY/HTTPS_PROXY,并遵守 NO_PROXY)。账号级代理会忽略 NO_PROXY,且是 fail-closed:代理不可达就跳过该账号,不进入冷却,同时清除亲和性;回环目标(localhost/127.0.0.1/::1)始终强制直连。

Settings → Antigravity → 账号详情里有一行 Proxy,形如 [input] [Save][Clear][Test],并显示打码后的 host:port;写入和探测都走管理 RPC(account.proxy / account.proxyTest)。Save 要求值非空——清除已有代理要用明确的 Clear 操作,绝不能靠误触空值 Save 完成。Test 探测输入框里的内容,所以未保存的代理也能先测再写;结果在提示行里报告可达/不可达,没有可探测内容时该按钮禁用(原因写在 tooltip 里)。

工具栏的 Refresh 会重新加载账号列表和用量账本,还会额外重新测量 5h/每周配额窗口,越过它们 10 分钟的 TTL 缓存——这次强制探测会报告刷新了多少个账号,所以点一下绝不会悄无声息。自动重载遵守 TTL,不消耗上游调用。

路径 C:本地开发与 link

git clone https://github.com/chaos-03x/dsh-agy.git
cd dsh-agy && pnpm install && pnpm run build
dsh plugin --profile web link .

需要 Node >= 22。

卸载

1. Remove the DSH plugin from a profile
dsh plugin --profile web remove dsh-agy

2. Uninstall the CLI
npm uninstall -g dsh-agy

3. Optional: delete local account data (the whole agy data folder)
dsh-agy logout # remove accounts first (or skip)
rm -rf ~/.dsh/agy # accounts, usage stats, model visibility, thinking budgets, recent ring
remove only the AGY_MASTER_KEY line from ~/.dsh/.credentials.yaml — keep other keys!
(an upgrade from ≤0.4 may leave legacy files in ~/.dsh itself: rm -f ~/.dsh/agy-.json)

4. Optional: revoke the Google-side authorization
Google account security → Third-party access → revoke "Antigravity"

删除本地文件不会吊销 Google 侧的 token;refresh token 依然有效,直到它过期,或者你在 Google 账号安全设置里手动吊销。

其他你可能关心的事

思考预算(推理强度)

思考预算是 API 里的隐藏参数,用来控制模型推理时有多用力模型会思考。上游给它的部分取值起了名字,你在模型选择器里看到的 reasoning effort(high / medium / low)就是这些名字。预算会替换掉原本要发送的 high / medium / low 取值,而不是与之叠加。

明白了这一点,下面说说自定义预算能做什么:

- 让低档多想一些 —— 在 Low 行填一个更大的值。
- 让高档少想一些(更快、更便宜)—— 在 High 行填一个更小的值。
- 最大思考量 —— 直接选 High,不用填值。
- 恢复该档默认值 —— 清空该行。

模型会在预算范围内,根据问题难度自行调整思考时长。下表是 Gemini 3.8 Flash 在不同预算下、面对不同难度问题时实际消耗的 token 数:

| 设置 | 简单 | 中等 | 困难 |
| 默认 | ~135 | ~1,100 | ~48,700 |
| Low | ~50 | 0 | ~9,000 |
| Medium | ~150 | ~870 | ~60,400 |
| High | ~165 | ~1,855 | ~63,400 |
| 填入 65535 | ~185 | ~2,130 | ~62,900 |

填入最大值(65535)在困难问题上与选择 High 完全一致,但在简单和中等问题上会把思考量提高约 10–15%。起决定作用的是数值本身 —— 同一个数字填在任何一行,发出的请求都一样。

注意:困难问题是一道组合推导题(推导铺砖递推式并计算第 40 项),中等问题是一道数论证明题(证明 n⁴+4 恒为合数),简单问题则是两位数乘法。

轮换机制

按用量选择:有多个账号可用时,请求会按所请求模型的后端计数族(gemini- → Google,claude- → Anthropic,gpt- → OpenAI)给账号排序:配额即将重置且仍有余额的账号优先使用(「不用就浪费」),接近耗尽的不再选用,已耗尽的则在真实重置时间之前一直封锁该账号。

每个族都要看两个窗口,因为它们的重置节奏不同:

| 窗口 | 重置周期 | 何时算耗尽 | 封锁至 |
| 滚动 5 小时 | 每 5 小时 | 剩余不足 15% | 5 小时重置点 |
| 每周 | 每 7 天 | 剩余 1% 或更少 | 每周重置点 |

这两个门槛相互独立。一个族可能 5 小时预算还剩 90%,但整周额度已经用完 —— 四次 5 小时重置并不会返还每周额度 —— 所以周额度耗尽的账号会被轮换掉,而不是选中后失败。两个阈值刻意不同(5 小时的 15% 约等于 45 分钟余量;一周的 1% 约等于 1.7 小时):5 小时窗口判断得太晚,最多等 5 小时;周窗口判断得太晚,账号就要闲置好几天。

每周读数只来自 retrieveUserQuotaSummary —— 按模型探测的 fetchAvailableModels 根本没有窗口字段 —— 而两个窗口都不报告的探测,无法抹掉已知耗尽的窗口。

429(Too Many Requests)响应:
| 类别 | 行为 |
| soft_rate_limit(Retry-After < 3s) | 同一账号立即重试,不进入冷却 |
| rate_limited | 冷却到服务器报告的恢复时间(上限 30min,兜底 5min),并切换到下一个账号(只有一个账号时仍用同一账号) |
| quota_exhausted("quota reached"、"individual quota"、RESOURCE_EXHAUSTED…) | 冷却到服务器报告的恢复时间(上限 24h)——在此之前不再向该账号发起任何调用 |
| unknown | 指数退避 |

401/403 → 账号被吊销(标记为需要重新认证)。成功会重置失败计数器。

风险控制(环境开关)

| 环境变量 | 作用 |
| DSH_AGY_DISABLE=1 | 紧急开关:插件不注册任何内容(服务商 + Settings 区块 + 头部配额徽标 + OAuth 回调),命令行也拒绝运行。 |
| DSH_AGY_FINGERPRINT_MODE=stable | 每个账号使用一个固定的客户端身份——不做逐请求的请求头随机化,也不重新生成指纹(OMP 风格的固定客户端姿态)。默认值 dynamic 保留逐请求随机化。 |
| DSH_AGY_HEALTH_INTERVAL_MS=<ms> | 在 harness 内部按配置的间隔做后台批量健康探测(refresh + userinfo);默认关闭。 |
| DSH_AGY_IDLE_TIMEOUT_MS=<ms> | 单次 SSE 响应体读取的静默预算(默认 180000,即 3 分钟;0 表示禁用)。响应体停止产生字节时会被放弃,而不是让整个回合挂住;任何一个字节都会重置计时,所以长时间的推理停顿不受影响。也接受别名 AGY_IDLE_TIMEOUT_MS。 |
| DSH_AGY_MULTIMODAL_MAX_INLINE_MB=<mb> | 非图片多模态文件内联的单文件上限,单位 MB(1–100)。会覆盖 Config 标签页里的设置;无法解析或超出范围的值会被忽略,继续沿用已存储的值或默认的 20MB。 |
| AGY_CLIENT_ID / AGY_CLIENT_SECRET | 自带 OAuth 应用的逃生通道:覆盖内置的公共 Antigravity 客户端凭据。 |

关于缓存命中:为什么做不到像 DeepSeek V4 那样的 99%?

说到底:缓存命中策略由模型服务商的缓存机制决定(对我们来说就是 Antigravity 的机制);agy 的机制和 DeepSeek 有两处不同,所以命中率天然比 DeepSeek 低一档。

第一,进入门槛。 DeepSeek 的缓存默认开启,没有门槛——它的第一个请求就已经命中之前缓存过的系统提示词。agy 的 Gemini 分级模型要等请求前缀累积到大约 16k token 才开始缓存,而 DSH 默认的裸系统提示词只有约 13k——没到线。所以每个新会话的前 1-2 个请求都是 0%,直到累积的消息超过 16k。

第二,缓存更新有多快。 DeepSeek 在每个请求结束时刷新缓存——每轮只有最新的一条消息未命中,因此接近 100%。agy 的缓存更新有延迟:这一轮新增的内容下一轮不会命中——大约两轮之后才进入缓存,中间对相同内容的请求全都算未命中。每一轮都会浪费大约是它新增内容的 1.5–2 倍;长对话命中率随上下文增长持续上升,上限由模型的上下文窗口决定。

实用技巧

- 别指望 agy 做到 99%:差距来自上游机制,没有优化空间。
- 如果你对数字有奇怪的执念,就往 System Prompt 里塞点自定义内容(MCP / 工具定义 / 角色扮演……)。

存储与密钥

agy 的所有数据文件都放在一个文件夹里:~/.dsh/agy/(由 $DSH_HOME 整体迁移)。从 ≤0.4 升级时,首次启动会把 ~/.dsh/ 里的旧文件移过去——一次性原子重命名;如果之后旧文件又出现在该文件夹旁边,说明还有旧版本进程在跑,会给出警告。

- 账号:~/.dsh/agy/agy-accounts.json —— AES-256-GCM 加密;主密钥放在 ~/.dsh/.credentials.yaml(AGY_MASTER_KEY,0600)。$DSH_HOME 会迁移整棵目录树。
- 指纹池(版本字符串、SDK 客户端)可通过 ~/.dsh/agy/agy-fingerprint-data.json 由用户覆盖——不用发版就能保持最新。
- 模型可见性:~/.dsh/agy/agy-models.json(0600)—— 隐藏模型黑名单。只保存你关掉的模型,所以重新启用某个模型会删掉它的条目。
- 多模态内联上限:~/.dsh/agy/agy-multimodal.json(0600)—— 单文件内联上限,单位 MB。字段缺失表示使用内置默认值 20MB。
- 用量统计:~/.dsh/agy/agy-stats.json(0600)—— 累计计数器加 30 天滚动窗口。计数在文件锁下合并,所以多个进程(Desktop、web-profile 服务端、命令行)可以并发记录,不会丢彼此的数据。
- 最近活动:~/.dsh/agy/agy-recent.json(0600)—— 最近 200 条请求与轮换记录,持久化保存,面板重启后仍在,也能看到其他进程的历史(外部进程的新记录 30 秒内到达)。
- 这些文件都不存 token、代理或项目 id —— 只存账号邮箱;token 加密存在账号文件里,主密钥存在凭据文档里。

⚠️ 免责声明

本插件使用 Antigravity 桌面产品自带的 Google 消费者 OAuth 客户端做认证,并在该产品之外使用 Antigravity Cloud Code API。这可能违反 Antigravity 的服务条款。风险自负 —— 账号可能被限流、降速或封禁。多账号轮换、设备指纹和签名绕过哨兵默认开启,设计目的是绕开上游限制;你如何使用它们、以及由此产生的任何账号后果,都由你自己负责。

致谢

本项目参考了以下 MIT 许可来源的逻辑与数据:

| 来源 | 内容 |
| opencode-antigravity-auth(已归档) | OAuth 流程形态、账号存储 schema 与版本化迁移、429/退避概念、指纹设计 |
| antigravity-claude-proxy PR #170 | 设备指纹生成(通过 opencode-antigravity-auth) |
| OmniRoute | 线格式(envelope、headers、SSE)、端点顺序、agy token 文件解析、粘贴凭据 blob 编解码、thoughtSignature 重放、429 分类引擎 |
| DeepSeek Harness | 插件外壳、LlmAdapter 接缝、DSH 约定 |

开发

pnpm install
pnpm test # vitest, fixture-driven, no network
pnpm run record:fixtures # re-record real-API fixtures (needs a real account)
pnpm run e2e # real-account end-to-end (needs AGY_REFRESH_TOKEN)
pnpm run debug:request # endpoint/header bisection probe
pnpm run verify:tools # live two-turn tool-signature check
pnpm run verify:proxy-routing # live per-account proxy routing + fail-closed check
npm pack --dry-run # verify the publishable artifact
预览分享卡片长什么样 ↓chaos-03x/dsh-agy
分享 · DeepSeek Harness Hub
chaos-03x/dsh-agy

Google Antigravity(agy)OAuth 认证与模型访问插件,用于 DeepSeek Harness:多账号池、429 轮换、设备指纹、命令行与网页登录。

回到顶部