dsh-commandcode-providerDeepSeek Harness plugin
Unofficial DeepSeek Harness LLM provider plugin for Command Code: live model catalog, plan-aware model picker, reasoning-effort + image input support, Command Code web search for dsh, multi-account rotation with browser sign-in. Ported from pi-commandcode-provider.
- Stars
- 140
- Forks
- 12
- License
- MIT
- Last commit
- Sep 3, 2026
- Latest release
- v0.10.0-alpha.6
Overview
Unofficial DeepSeek Harness LLM provider plugin for Command Code: live model catalog, plan-aware model picker, reasoning-effort + image input support, Command Code web search for dsh, multi-account rotation with browser sign-in. Ported from pi-commandcode-provider.
Original README
Cached from the project repository on Sep 3, 2026. This is source content, separate from the Agents.md review above.
dsh-commandcode-provider
English | 简体中文
Unofficial DeepSeek Harness LLM provider plugin for Command Code, ported from pi-commandcode-provider (MIT).
This is a community integration. You need your own Command Code account and API key or subscription, and Command Code's terms apply. This project is not affiliated with Command Code, Inc.
What you get
- Plugin bundle — install into any dsh profile with
dsh plugin add; registers acommandcodeprovider route with a live model catalog. - Dedicated settings page — API key, connection options, a live account-usage card, and a "Hide out-of-plan models" toggle.
- Models-page key card — the Settings → Models → Command Code card carries the key status, a paste field, and the sign-in button inline.
- In-browser sign-in for keys — start the official authorization flow (the same one
cmd loginruns) from the settings page; the approved key lands in the local credential service automatically. Manual paste remains the fallback. - Multi-account rotation — when one account hits its usage limit, requests switch to the next account automatically. See Account rotation.
- Flexible API key setup — via the settings page, an environment variable, or the official CLI login file.
- Model-picker annotations — minimum plan, active deal or
FREEbadge, peak/off-peak state, image support, and context window; free models listed first. - Plan-aware picker — models above your subscription tier are hidden by default (toggleable).
- Reasoning-effort support — models with selectable reasoning effort levels expose them in the picker.
- Image input — Vision-capable models accept images.
- Web search — the dsh
web_searchtool is backed by the Command Code Provider API (/alpha/web-search) with the same key/endpoint as chat, so no separate search key or base URL is needed. See Web search.
See Screenshots below for what the UI looks like.
Install
Pick the release line that matches your DeepSeek Harness version:
-
dsh 0.1.2-alpha.2 or later (the current alpha line) — use the matching alpha plugin release. Install explicitly with the
alphatag:shdsh plugin --profile web add @mars-sea/dsh-commandcode-provider@alpha -
Older dsh releases (the 0.5.0 line and earlier, which use the rc-era Host/browser APIs) — the 0.9.1 plugin keeps working there and stays on the
latesttag:shdsh plugin --profile web add @mars-sea/dsh-commandcode-provider@latest
The
alphatag never moveslatest: a plain@latestinstall always gets the newest stable release for older Harness versions, and upgrading to the alpha line is always an explicit opt-in.
Fresh pnpm 10 marketplace generations are supported directly. Do not add a separate @deepseek-ai/dsh-invariants dependency; the plugin declares it as a Host peer so the active dsh profile remains the owner of Harness packages.
Updating
Update with the same tag you installed with:
shdsh plugin --profile web update @mars-sea/dsh-commandcode-provider@alpha # dsh 0.1.2-alpha.2+ dsh plugin --profile web update @mars-sea/dsh-commandcode-provider@latest # older dsh (0.5.0 line)
Then restart the web app.
Getting an API key
The easiest path is the official CLI (Node.js 22+):
shnpm i -g command-code@latest cmd login # macOS/Linux; native Windows: cmdc login
Or skip the CLI: click Sign in to Command Code under Settings → Command Code — your browser opens the commandcode.ai authorization page (the same flow cmd login uses) and the key is stored in the local credential service when you approve. You can still create a key on the Keys settings page and paste it into Settings → Command Code, or export COMMANDCODE_API_KEY="user_...".
The sign-in flow needs the Host and your browser on the same machine (loopback callback). With a remote Host, paste the key manually; a literal composition-level
apiKey, if set, still takes precedence over a signed-in credential.
Verify it works
After restart, enter your API key in Settings → Command Code and save; Settings → Models shows a Command Code card, and the model picker lists the live catalog under commandcode. Send a message with a model your plan includes.
Usage dashboard
The plugin registers a /commandcode slash command showing per-account usage:
/commandcode (or /commandcode status)
The command's user-facing copy follows the shell's locale: explicit lang: 'en' | 'zh' in the llm-commandcode plugin config wins, otherwise LC_ALL/LANG is read, otherwise it falls back to zh. The web settings page is independent — it follows the browser's language preference on its own.
Account rotation
With several Command Code subscriptions, the plugin switches to the next account automatically when one hits its usage limit:
- Setup — use the Account rotation card at Settings → Command Code to add accounts with a label and API key; the top-level key always serves first as the
defaultaccount. - Manual switching — the Active account dropdown pins a preferred account; if it is exhausted, requests fall back to other accounts and return once its window resets.
- Route models to accounts — the Route models to accounts card picks catalog models (multi-select, fetched from the live catalog) and routes them to an account. A request whose model is in a rule serves from that account while it is usable; an exhausted or invalid routed account falls back to the normal rotation. Rules match in list order — the first hit wins.
- Status — the Account usage card and
/commandcodereport per-account state.
The equivalent YAML ($DSH_HOME/settings.yaml or composition config):
yaml1llm-commandcode: 2 apiKeyEnv: COMMANDCODE_API_KEY # first (default) account 3 activeAccount: COMMANDCODE_API_KEY_2 # optional: pin the active account (`default` or an account's credential ref) 4 accounts: # rotation order after it 5 - label: Go #2 6 apiKeyEnv: COMMANDCODE_API_KEY_2 7 - label: Go #3 8 apiKeyEnv: COMMANDCODE_API_KEY_3 9 modelAccountRules: # optional: route models to accounts (first match wins) 10 - models: # catalog model ids (multi-select) 11 - deepseek/deepseek-v4-pro 12 - deepseek/deepseek-v4-flash-vision-exp 13 account: COMMANDCODE_API_KEY_2 14 - models: 15 - tencent/hy4-preview 16 account: default
Configure
Settings → Command Code covers the API key, API base URL, working directory, and request/stream timeouts; once a key is saved, a live Account usage card appears at the top of the page.
The same options live in $DSH_HOME/settings.yaml (changes apply immediately, no restart):
yamlllm-commandcode: apiKeyEnv: COMMANDCODE_API_KEY # credential reference apiBase: https://api.commandcode.ai workingDir: /path/to/project # optional modelsCachePath: ~/.commandcode/models-cache.json requestTimeoutMs: 60000 # default 60s streamIdleTimeoutMs: 300000 # default 300s
Web search
When your deployment's dsh shell mounts the web capability (@deepseek-ai/dsh-web + @deepseek-ai/dsh-tool-web), the model's web_search tool is served by this plugin's commandcode search provider — it calls the Command Code Provider API's /alpha/web-search endpoint with the same API key and base URL as chat. You do not configure a separate search key, endpoint, or model.
On by default. The plugin's Settings → Command Code page has a "Serve dsh web search with Command Code" toggle (webSearch, default on). When on, the plugin selects commandcode as the active search backend automatically; turn it off to fall back to dsh's shipped DeepSeek search. The toggle takes effect on the next search — no restart needed.
- The provider registers as
commandcodeonctx.webonly when the web service is present; without it this stays a chat-only plugin. - The toggle works by selecting
commandcodein the web seam at boot and on every settings change. If you'd rather pin it durably, setsearchProvider: commandcode(or$DSH_WEB_SEARCH_PROVIDER=commandcode); that remains effective even if this plugin's runtime selection is unavailable. numResultsfrom the dsh tool is clamped to the Command Code range (1–10, default 5); results map to the dshWebSearchSourceshape (url/title/snippet).
This reuses the Command Code Provider API directly (like the official CLI's built-in
web_search), so it is distinct from a DeepSeek-native search backend.
Notes & limitations
- Image input is model-gated — only Vision models accept images; text-only models refuse them.
- Switching to a text-only model in an image-bearing session is rejected by dsh — pick a model marked
Imageor remove the images first. - No
stopsequences — requests carrying one fail. - Reasoning blocks are not replayed into later turns; only tool calls with a paired tool result are replayed.
- The model catalog is browsable without a key; chat requests need one.
Permissions & privacy
The plugin only communicates between your local dsh profile and your Command Code account: locally it touches only the credential store and the models cache (plus ~/.commandcode/auth.json as a last-resort fallback); on the network it calls only the Command Code API. No telemetry.
Disabling / uninstalling
-
Disable without removing: edit your profile's
cordis.patch.ymland comment out (or remove) thellm-commandcoderow, or setdisabled: true, then restart. -
Uninstall completely:
shdsh plugin --profile web remove @mars-sea/dsh-commandcode-providerYour API key in the dsh credential store and
~/.commandcode/auth.jsonare left untouched.
Development
shnpm install npm run typecheck # tsc --noEmit npm run build # tsdown -> lib/
To try a local build in a profile:
shdsh plugin --profile web add /path/to/dsh-commandcode-provider
After changing src/, re-run npm run build and restart the app.
Community & feedback
License
MIT — see LICENSE. Portions ported from pi-commandcode-provider (MIT).
Screenshots
Model picker — plan tier, deal/FREE, peak/off-peak, Image and context annotations:
Usage dashboard — /commandcode per-account report:
Settings page — API key, connection knobs, account rotation and the live account-usage card:
