DeepSeek Harness plugin

dsh-llm-oauth

DeepSeek Harness plugin: OAuth / subscription-plan LLM providers (Grok, GitHub Copilot, OpenAI Codex, Anthropic, OpenRouter)

Jump to install

Source facts

Repository
ziyou979/dsh-llm-oauth
Latest update
Aug 14, 2026
Category
Tools & Capabilities
GitHub stars
6
Format
plugin
Catalog evidence
Upstream dsh.bundle evidence
Evidence path
package.json#dsh.bundle
Checked against
0.1.0-rc.8
Upstream check date
2026-08-20

This evidence comes from the upstream catalog. This site has not installed, run, or security-reviewed the plugin.

Install

Start with a prompt that asks an agent to review the GitHub repository and source. Switch to the command if you want to install it yourself.

Copy this prompt into DSH, Codex, or another agent and ask it to review the GitHub repository and source first.

Do not install or run any commands yet. Read this plugin's GitHub repository, README, and relevant source code. Then answer the questions below clearly and directly so I can decide whether it fits my needs:

1. What is this plugin, and what problem does it solve?
2. Who is it for, and what are its typical use cases?
3. How is it used after installation? Include one minimal example.
4. What known limitations or privacy, security, compatibility, or maintenance risks does it have?
5. Give a clear recommendation: recommend, conditionally recommend, or do not recommend, with reasons.

Distinguish statements documented by the repository, inferences from source code, and unknowns. If evidence is insufficient, say so explicitly. Do not guess or simply repeat the README.

GitHub: https://github.com/ziyou979/dsh-llm-oauth
Plugin: dsh-llm-oauth
Author: ziyou979

Check the source files

Read the README and other files from this plugin directory before installing.

File explorer4 files
README.mdSource · read only
README language

dsh-llm-oauth

English | 中文

Standalone OAuth / subscription-plan LLM plugin for DeepSeek Harness. Install it into your own profile with dsh plugin add — it does not patch the Harness repo.

![Settings → OAuth / Subscriptions](docs/oauth-subscriptions.png)

Official dsh-llm-pi-ai authenticates with API keys only and never runs an OAuth login or refresh. This plugin reuses the same catalog package, @earendil-works/pi-ai, but constructs Models with a durable CredentialStore so subscription tokens refresh on the request path.

Packaging follows the official plugin guides — your first plugin and publish / install:

  • package.jsondsh.bundle.patch plus optional dsh.client (Web Settings face)
  • cordis.patch.yml inserts one plugin row
  • prepare bundles src/lib/ (including lib/client.js) on git install
  • function plugin: export name, inject, Config, applyno export default

Providers

SubscriptionProvider idNotes
Grok (SuperGrok / X Premium)xaiModel ids come from the installed pi-ai catalog.
GitHub Copilotgithub-copilotOptional Enterprise URL defaults to public github.com.
ChatGPT / Codex planopenai-codexNot the openai API-key route. Needs device-code authorization enabled in ChatGPT — see below. Account-ban risk.
Anthropic subscriptionanthropic
OpenRouteropenrouterLarge catalog — enable only if you need it.
Kimi For Codingkimi-coding

Model ids come from the installed @earendil-works/pi-ai catalog, not from this plugin. Bump that dependency and rebuild when you want a newer catalog.

Enable vs sign-in

After install the plugin is dormant: the catalog lists the providers above, but providers: {}, so the model picker is not flooded with hundreds of models.

ConceptMeaningHow
EnableRegister the LLM route; provider appears in the pickerSettings → OAuth / Subscriptions, /oauth enable xai, or auto on login
Sign inStore tokens in pi-ai-oauth.jsonSettings panel, /oauth login xai, or bin/login.mjs
DisableRemove from picker; keep stored tokensSettings panel or /oauth disable xai

Only enabled providers list models. They sit alongside API-key providers under Settings → Models once enabled.

Install

dsh plugin --profile web add github:ziyou979/dsh-llm-oauth

From a local checkout:

dsh plugin --profile web add ./dsh-llm-oauth

Confirm the layer:

dsh --profile web --dump-config

A git install may ask you to allow prepare in the profile's pnpm-workspace.yaml (pnpm ≥10 refuses lifecycle scripts otherwise):

allowBuilds:
  dsh-llm-oauth: true

Settings → OAuth / Subscriptions

The Web UI adds a settings section (between Models and Plugins) with:

  • Every catalog subscription provider
  • Badges: enabled / disabled, signed-in / out, login-in-progress
  • Actions: enable, disable, sign in, sign out (buttons on this page — no need to type /oauth in chat)
  • Successful sign-in stores tokens and auto-enables the provider
  • Device codes show on the page (with copy); authorization URLs open in a new tab, or via Open authorization page if the popup is blocked

Providers that ask “pick a login method” (e.g. openai-codex) auto-select device code on Web (browser login needs a local :1455 callback). If you still see an interactive-prompt error, use bin/login.mjs in a terminal.

After a provider is enabled (and signed in), it also appears under Settings → Models next to API-key routes:

![Settings → Models after enabling subscription providers](docs/models.png)

API-key providers stay curated under Settings → Models. OAuth enable + login live on this plugin’s page.

Host HTTP API (same-origin Web):

MethodPathBody
GET/dsh-llm-oauth/status
POST/dsh-llm-oauth/enable{ "provider": "xai" }
POST/dsh-llm-oauth/disable{ "provider": "xai" }
POST/dsh-llm-oauth/login{ "provider": "xai" }
POST/dsh-llm-oauth/logout{ "provider": "xai" }

ChatGPT / Codex: enable device-code auth first

openai-codex on Web uses device code, not the localhost :1455 browser callback. ChatGPT hides that flow until you turn it on:

1. Open ChatGPT → Settings → Apps & connectors (or Settings → Connectors / Codex, depending on the current UI). 2. Find Codex and enable Enable device code authorization for Codex. 3. Come back here, click Sign in on openai-codex, then open the authorization URL and enter the code shown on the Settings page.

![Enable device-code authorization for Codex](docs/codex-auth.png)

Without that toggle, the device page rejects the code even though this plugin already picked the device-code method.

Risk: signing in to Codex / ChatGPT this way (device code or any unofficial client OAuth) can get the ChatGPT account restricted or banned. OpenAI treats this as using the subscription outside official Codex / ChatGPT apps. Use a disposable account if you try it; do not put a main or paid account you cannot afford to lose on this route. This plugin cannot prevent or reverse a ban.

Login / commands

In the Web UI:

/oauth status
/oauth list
/oauth enable xai
/oauth login xai
/oauth disable xai
/oauth logout xai

/oauth login returns the authorization URL and user code immediately so the chat UI does not hang. Finish in the browser, then run /oauth status or refresh the Settings page. The poll continues in the background.

Credentials are stored at $DSH_HOME/pi-ai-oauth.json (default ~/.dsh/pi-ai-oauth.json).

If you need a terminal (or a provider still requires an interactive prompt):

node bin/login.mjs --list
node bin/login.mjs xai

After a profile install:

node %USERPROFILE%\.dsh\profiles\web\node_modules\dsh-llm-oauth\bin\login.mjs xai

Or enable in settings.yaml without the UI:

llm-oauth:
  providers:
    xai: {}

Do not collide with llm-pi-ai

dsh-base mounts dormant dsh-llm-pi-ai. Declaring the same provider id under an llm-pi-ai: settings section throws DUPLICATE_ADAPTER.

  • Subscription / OAuth → this plugin only
  • API keys (DeepSeek, official OpenAI API) → llm-deepseek / llm-pi-ai

Develop

pnpm install
pnpm test
pnpm run build
node bin/login.mjs --list

@deepseek-ai/* packages are peers supplied by the DSH profile. Unit tests (catalog / store / service) only need @earendil-works/pi-ai.

Limits

  • Model list follows @earendil-works/pi-ai; this plugin does not maintain a private model table
  • No image / vision path
  • No full native replay signatures
  • No in-browser OAuth callback server (device code / open URL)
  • Plain OpenAI API and DeepSeek official stay on API keys
  • Settings → Models curated editors still target API keys; OAuth enable + login live under Settings → OAuth / Subscriptions

License

MIT