DeepSeek Harness 插件

dsh-agy

Google Antigravity (agy) OAuth auth + model access plugin for DeepSeek Harness: multi-account pool, 429 rotation, device fingerprinting, CLI and web login.(英文原文)

跳到安装方式

来源信息

GitHub 仓库
chaos-03x/dsh-agy
最近更新
2026年8月22日
分类
模型与服务商
GitHub stars
20
载体类型
plugin
目录证据
上游声明已找到 dsh.bundle
证据路径
package.json#dsh.bundle
核对版本
0.1.0-rc.8
上游核对日期
2026-08-20

该证据由上游目录提供。本站没有安装、运行或安全审核这个插件。

安装

默认先复制一段 Prompt,让 Agent 读 GitHub 仓库和源码;需要自己装时再切到命令。

复制这段 Prompt,发给 DSH、Codex 或其他 Agent,让它先读 GitHub 仓库和源码。

请先不要安装或执行任何命令。阅读这个插件的 GitHub 仓库、README 和关键源码,然后用清楚、直接的方式回答以下问题,帮助我判断它是否适合我的需求:

1. 这个插件是什么,解决什么问题;
2. 适合哪些用户和典型使用场景;
3. 安装后如何使用,并给出一个最小使用示例;
4. 有哪些已知限制,以及隐私、安全、兼容性或维护风险;
5. 给出“推荐 / 有条件推荐 / 不推荐”的明确建议和理由。

请区分仓库明确说明、根据源码推断和未知信息。证据不足时请明确说明,不要猜测或照抄 README。

GitHub:https://github.com/chaos-03x/dsh-agy
插件名:dsh-agy
作者:chaos-03x

检查来源文件

安装前先看这个插件目录里的 README 和其他文件。

文件资源管理器3 个文件
README.md来源说明 · 只读预览

dsh-agy

![CI](https://github.com/chaos-03x/dsh-agy/actions/workflows/ci.yml) ![npm version](https://www.npmjs.com/package/dsh-agy)

Google Antigravity (agy) access for DeepSeek Harness: OAuth authentication, a multi-account pool with automatic 429 rotation, device fingerprinting, and both CLI and web management.

> 中文文档:[docs/README_zh.md](docs/README_zh.md)

Features

  • OAuth login: one-click sign-in via browser OAuth callback, with headless

paste-URL mode and a remote paste-credential blob channel.

  • Two management surfaces: web and CLI, either one works, core features are

the same.

  • Multi-account pool: encrypted account store, usage-aware account

selection (family-scoped quotas, OMP-aligned ranking), automatic rotation on rate limits, per-account cooldown to the real reset time, per-account device fingerprints.

  • Quota dashboard: only active when DSH Web is running; append /agy to

your dsh web address: login, account management, per-model quota bars, model testing, credential export/import, fingerprint management.

  • CLI: dsh-agy login|status|import|verify|logout works standalone, with or

without a harness.

Screenshots

The /agy dashboard inside DSH Web — account cards, per-model quota bars, and one-shot model tests:

!dsh-agy dashboard

Quickstart

Path A: DSH Web GUI Users (Recommended — 100% Web UI, zero CLI commands)

For users using DeepSeek Harness browser workspace / 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 dashboard at http://127.0.0.1:3080/agy
# Click "Login with Google", complete OAuth authorization, and start using the agy provider

Path B: Headless / Terminal Only (Standalone CLI)

For Linux VPS, SSH remote servers, or headless CI environments:

# 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

CLI reference

CommandOptionsDescription
dsh-agy login--headless — print the auth URL and wait for a pasted redirect URL<br>--blob — print a paste-credential blob instead of storing the account<br>--port <n> — loopback callback port (default 51121)<br>--project <id> — bind the login to a specific project<br>--timeout <ms> — callback timeout (default 300000)Interactive Google OAuth
dsh-agy statusList accounts + per-model quota summary
dsh-agy import <files...>--blob — the pasted value is a credential blob<br>--email <email> — set the account email (skips userinfo verification)<br>--overwrite — replace an existing account with the same emailImport agy auth.json files or credential blobs (multiple files / multi-line paste = batch import)
dsh-agy export--index <n> — export one account by index (default: all)<br>--out <dir> — write one dsh-agy-<index>.blob per account (default: print to stdout, one blob per line)Export account credentials as paste blobs
dsh-agy verify--index <n> — verify one account by index (default: all)Refresh + health check
dsh-agy health--index <n...> — check only these accounts (default: all enabled)<br>--interval <ms> — repeat on an interval instead of onceBatch health check (refresh + userinfo), re-enables accounts whose credentials are live again
dsh-agy logout--index <n> — account index (default: active)<br>--email <email> — account emailRemove an account

Per-account proxy

Each account can have its own proxy; credentials are encrypted at rest and displayed masked as 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)

Fallback: with no per-account proxy, requests use EnvHttpProxyAgent (HTTP_PROXY/HTTPS_PROXY with NO_PROXY honored). Per-account proxies ignore NO_PROXY, are fail-closed (unreachable proxy skips the account without cooldown and clears affinity), and loopback targets (localhost/127.0.0.1/::1) are always forced direct.

Web dashboard (/agy): each account card shows an inline Proxy row [input] [Save][Clear][Test] with masked host:port; writes via POST /agy/api/proxy, probes via POST /agy/api/proxy/test.

Path C: Local Development & Link

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

Requires Node >= 22.

Uninstall

# 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 (accounts + master key + fingerprint override)
dsh-agy logout              # remove accounts first (or skip)
rm -f ~/.dsh/agy-accounts.json
# remove only the AGY_MASTER_KEY line from ~/.dsh/.credentials.yaml — keep other keys!
rm -f ~/.dsh/agy-fingerprint-data.json   # only if you created an override

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

Deleting local files does not revoke Google-side tokens; the refresh token stays valid until it expires or you revoke it in your Google account security settings.

Other things you may care about

Rotation mechanics

Usage-aware selection: when several accounts are available, requests rank them by the requested model's backend counter family (gemini-* → Google, claude-* → Anthropic, gpt-* → OpenAI): accounts whose quota is about to reset with headroom left are used first ("use it or lose it"), near-exhausted families are avoided, and exhausted families block the account until the real reset time.

429 (Too Many Requests) responses:

CategoryBehavior
soft_rate_limit (Retry-After < 3s)immediate retry on the same account, no cooldown
rate_limitedcooldown until the server-reported reset time (capped 30min, 5min fallback) + switch to the next account (same account when single)
quota_exhausted ("quota reached", "individual quota", RESOURCE_EXHAUSTED…)cooldown until the server-reported reset time (capped 24h) — no further calls to that account until then
unknownexponential backoff

401/403 → account revoked (marked for re-authentication). Success resets the failure counter.

Risk controls (environment switches)

EnvEffect
DSH_AGY_DISABLE=1Kill switch: the plugin registers nothing (provider + /agy routes) and the CLI refuses to run.
DSH_AGY_FINGERPRINT_MODE=stableOne fixed client identity per account — no per-request header randomization, no fingerprint regeneration (OMP-style fixed-client posture). Default dynamic keeps per-request randomization.
DSH_AGY_HEALTH_INTERVAL_MS=<ms>Background batch health probe inside the harness (refresh + userinfo on the configured interval); off by default.
AGY_CLIENT_ID / AGY_CLIENT_SECRETBYO OAuth app escape hatch: override the embedded public Antigravity client credentials.

About cache hits: why not 99% like DeepSeek V4?

Bottom line: the cache hit strategy is decided by the model provider's cache mechanics (for us, Antigravity's); agy's mechanics differ from DeepSeek's in two ways, so its hit rate is naturally a notch below DeepSeek's.

First, the entry threshold. DeepSeek's caching is on by default with no threshold — its very first request already hits a previously cached system prompt. agy's Gemini-tiered models only start caching once the request prefix reaches roughly 16k tokens, while DSH's default bare system prompt is only about 13k — below the line. So every new conversation's first 1-2 requests are 0%, until the accumulated messages pass 16k.

Second, how fast the cache updates. DeepSeek refreshes its cache at the end of every request — only the newest message misses each round, giving near-100%. agy's cache updates lag: this round's additions are not hit in the next round — they enter the cache roughly two rounds later, and requests for the same content in between all count as misses. Every round wastes about 1.5-2× its additions; the long-conversation hit rate keeps rising as the context grows, bounded by the model's context window.

Practical tips

  • Don't expect 99% from agy: the gap comes from upstream mechanics, with no

room to optimize.

  • If you have a weird number obsession, stuff some custom content into the

System Prompt (MCP / tool definitions / roleplay ...).

Storage & secrets

  • Accounts: ~/.dsh/agy-accounts.json — AES-256-GCM encrypted; the master key lives

in ~/.dsh/.credentials.yaml (AGY_MASTER_KEY, 0600). $DSH_HOME relocates both.

  • Fingerprint pools (version strings, SDK clients) are user-overridable via

~/.dsh/agy-fingerprint-data.json — no code release needed to keep them current.

⚠️ Disclaimer

This plugin authenticates with Google's consumer OAuth client that ships with the Antigravity desktop product and uses the Antigravity Cloud Code API outside of that product. This may violate Antigravity's terms of service. Use at your own risk — accounts can be rate-limited, throttled, or banned. Multi-account rotation, device fingerprinting, and the signature-bypass sentinel are enabled by default and are designed to work around upstream limits; you are responsible for how you use them and for any account consequences.

Credits

This project references logic and data from the following MIT-licensed sources:

SourceContent
opencode-antigravity-auth (archived)OAuth flow shape, account-store schema & versioned migration, 429/backoff concepts, fingerprint design
antigravity-claude-proxy PR #170Device fingerprint generation (via opencode-antigravity-auth)
OmniRouteWire format (envelope, headers, SSE), endpoint order, agy token-file parsing, paste-credential blob codec, thoughtSignature replay, 429 category engine
DeepSeek HarnessPlugin shell, LlmAdapter seam, DSH conventions

Development

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
npm pack --dry-run             # verify the publishable artifact