Bundle
dsh-plugin-subs
DSH plugin: OAuth sign-in for Claude, Codex, Grok, Antigravity, OpenRouter, Agnes AI, Qwen, Spark, ERNIE — expose subscription LLMs as DeepSeek Harness providers
- Source
- randomix777
- License
- MIT
- Updated
- Updated 6 days ago
Readme
# DSH Plugin Subscriptions
AI LLM plugin for DeepSeek Harness that signs in to consumer AI subscriptions with OAuth and exposes them as LLM providers.
## Providers
### Live
| Provider | Subscription | Notes |
|----------|-------------|-------|
| **Claude** | Anthropic Pro/Max | Imports credentials from Claude Code automatically; run `claude` first |
| **Codex** | ChatGPT Plus/Pro | Real-time model discovery from `chatgpt.com/backend-api/codex/models` |
| **Grok** | X Premium/Premium+ | Real-time model discovery; includes `x_search`, `image_generate`, `video_generate` tools |
| **Google Antigravity** | Google One AI Premium | 静态目录(Gemini 3 Pro / 3.1 Pro / 3 Flash, Claude 4.6 Sonnet / Opus);直接 OAuth,无需环境变量 |
| **OpenRouter** | OpenRouter account | OAuth PKCE → permanent API key; static catalog (GPT-4o, Claude Sonnet/Haiku 4.5, Gemini 2.5 Flash) |
| **Agnes AI** | AgnesCode account | OAuth PKCE → access token (reverse-engineered); static catalog (Agnes 2.5/2.0 Flash, GPT-4o, Claude Sonnet 4.5 via AgnesCode) |
| **Qwen Code** | Qwen Coding Plan | Device-flow OAuth via `chat.qwen.ai`;无需 API Key |
| **iFlytek Spark** | Spark API subscription | OAuth PKCE via `spark-api.xf-yun.com`; env vars: `SPARK_CLIENT_ID`, `SPARK_CLIENT_SECRET` |
| **Baidu ERNIE** | ERNIE Bot subscription | OAuth PKCE via `openapi.baidu.com`; env vars: `ERNIE_CLIENT_ID`, `ERNIE_CLIENT_SECRET` |
### Coming soon
Gemini, Perplexity AI, GitHub Copilot, Mistral AI, Cursor, Hugging Face, Windsurf, Replicate, fal.ai, Cohere, Voyage AI, Lepton AI, OctoAI.
## Features
- OAuth sign-in for subscription providers — no API keys required
- Composer model resolution straight from your subscription
- Streaming, tool calling, and image input where the provider supports them
- Usage status shown in the Subscriptions settings section
- Built-in model catalogs per provider, overridable in config
## Installation
```bash
# From npm (pre-built, no build step)
dsh plugin --profile web add dsh-plugin-subs
# Or from GitHub source
dsh plugin --profile web add github:randomix777/dsh-plugin-subs
```
## Usage
1. Launch DSH (`dsh web`) and open the printed URL.
2. Go to **Settings → Subscriptions** and press **Connect** next to a provider.
3. Complete the OAuth flow in the browser tab that opens. On headless setups, paste the callback URL or authorization code manually.
- **Claude**: imports from existing Claude Code credentials (run `claude` once if not logged in).
- **Antigravity**: no env vars needed, complete OAuth in browser directly; optionally override with `ANTIGRAVITY_CLIENT_ID` / `ANTIGRAVITY_CLIENT_SECRET`.
- **Qwen Code**: device-flow OAuth via `chat.qwen.ai`; no API key or env vars required, click Connect to authenticate.
- **Agnes AI**: after browser authorization, paste the full callback URL (or just the auth code) into the DSH UI — the `agnes://` deep link cannot be auto-captured by DSH.
4. In any chat, open the model selector (`/model`) and pick a model under the desired provider.
Untreated providers show no card in the model picker until signed in.
## Environment Variables
Antigravity and Qwen use embedded public client credentials — no setup required. Only Spark and ERNIE need env vars:
```bash
# Optional: override the built-in Antigravity OAuth client credentials
export ANTIGRAVITY_CLIENT_ID="your-custom-oauth-client-id"
export ANTIGRAVITY_CLIENT_SECRET="your-custom-oauth-client-secret"
# iFlytek Spark (register at https://console.xfyun.cn)
export SPARK_CLIENT_ID="your-spark-client-id"
export SPARK_CLIENT_SECRET="your-spark-client-secret"
# Baidu ERNIE (register at https://console.bce.baidu.com/ai/)
export ERNIE_CLIENT_ID="your-ernie-client-id"
export ERNIE_CLIENT_SECRET="your-ernie-client-secret"
```
Spark and ERNIE require you to register an OAuth app on the respective platform and set the env vars above.
## Configuration
```yaml
providers:
- id: llm-subscriptions
name: dsh-plugin-subs
config:
providers: [codex, claude, grok, antigravity, openrouter, agnes, qwen, spark, ernie] # subset allowed; all nine enabled by default
streamIdleTimeoutMs: 300000
models: # override built-in catalogs
codex:
- { id: gpt-5.6-sol, name: GPT-5.6 Sol, contextWindow: 272000, inputModalities: [text, image] }
```
## Tools
Auto-registered when the corresponding provider is active:
- **`x_search`** (Grok) — xAI-hosted X search, returns `{ answer, citations }`
- **`image_generate`** (Codex or Grok) — calls `gpt-image-2` via Codex backend or `grok-imagine-image-2.0` via Grok; saves to `~/.dsh/plugins/subscriptions/images/`
- **`video_generate`** (Grok) — calls `grok-imagine-video-1.5` via `api.x.ai/v1/videos`; async poll, saves MP4 to `~/.dsh/plugins/subscriptions/videos/`
## Limitations
- Provider availability depends on your subscription status; unsigned-in providers are hidden
- Image generation requires an active Codex or Grok session
- `x_search` requires Grok login and an API-capable subscription tier
- OpenRouter API key is permanent (no refresh); log out and re-login to replace
- Agnes AI requires manual callback URL/code paste (no `agnes://` protocol handler in DSH)
- Chinese providers (Spark, ERNIE) require a registered OAuth app on the respective platform and env var credentials
- Qwen Code uses device-flow OAuth: enter the user code at the verification URL in any browser; the flow is cancellable and expires after `expires_in` seconds
## Project Structure
- `lib/index.js` — Main bundle (compiled output), all backend logic
- `lib/client.js` — Browser bundle, UI components
- `lib/client/*.js` — Split client source files (locales, UI components)
## License
MIT
Install
dsh plugin --profile web add github:randomix777/dsh-plugin-subs
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-plugin-subs from the hub
- This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.