dsh-hide-account-models
A DeepSeek Harness bundle that hides the signed-in DeepSeek account model group from the model picker and keeps every dispatch on the official API-key provider.
| In the picker | After enabling |
|---|---|
| DeepSeek account models (signed-in quota) | hidden |
deepseek-official models (API key) |
kept, and the only selectable group |
The plugin has no settings page and no client half. Turn it on or off from Plugins, exactly like any other bundle.
Why
Signing in to the desktop app adds a deepseek-account provider next to the
deepseek-official API-key provider. Both appear in the composer menu. If a
conversation keeps an account model selected, its next request can spend on the
account even when you intended to use your API key.
This bundle removes the account group from the catalog the picker is built from,
and rewrites an already-saved account selection to deepseek-official before the
request leaves the Host.
Requirements
- DeepSeek Harness
>=0.2.2-rc.1 <0.3.0(declared inengines.dsh). - An official API key configured under Settings → Models (
deepseek-official). Without it there is no model left to select after the account group is hidden. Configure the key first, then enable this plugin. - Any operating system. The plugin is platform-neutral.
Install
Replace desktop with the profile you actually start. GitHub installs need Git
on the machine, because DSH asks the repository before downloading.
From GitHub (recommended, pinned to a tag)
dsh plugin --profile desktop add github:nanwu98/dsh-hide-account-models#v1.0.0
From the Release tarball (no Git needed)
dsh plugin --profile desktop add https://github.com/nanwu98/dsh-hide-account-models/releases/download/v1.0.0/dsh-hide-account-models-1.0.0.tgz
From the Plugins page
Open Plugins → Add plugin, paste the repository address or the tarball URL, and restart DSH if the page asks. Installing by bare package name only works for a package published to npm; this bundle is currently distributed from GitHub.
After a restart, deepseek-account is gone from the model menu. Nothing else
changes: no new page, no new toolbar item.
How it works
Three seams, all in the Host process:
- The catalog. Both browser model surfaces build their catalog from
ctx.llm.listProviders(). The plugin wraps that method and drops thedeepseek-accountentry, so the account group disappears from the menu, the search index, and keyboard navigation at the same time. - Prepared calls. A conversation that already saved an account model would
still have it in the Host's per-session selection cache. The plugin wraps
llm.prepareCall()(the Agent loop and title generation) and rewrites onlyprovider: "deepseek-account"todeepseek-official. Every other field, including the model id, is preserved. - Direct streams. Some callers dispatch through
llm.stream()without preparing first — the default compaction summarizer is one. The same provider rewrite is applied there.
The plugin intentionally does not listen to agent/request: that hook is
deprecated in DSH 0.2.x, and the Agent loop rejects a provider or model change
there before dispatch. Rewriting at prepareCall/stream is the supported
place to keep the route on the API key.
Disabling or removing the plugin restores the original methods and announces the change, so the account group comes back immediately without a restart.
Before you enable it
- Configure
deepseek-officialfirst. The plugin does not check whether the official route has a usable key. If it does not, the picker will be empty and requests will fail with the official route's error instead of spending on the account. That failure is intentional; it is safer than a silent fallback. - Old conversations. A session saved with an account model shows the
"select a model" prompt until you choose an official model. If you send before
choosing, the request is prepared against
deepseek-officialwith the same model id. - Model ids are not translated. If the account catalog and the official catalog name a model differently, a rewritten request can be rejected by the provider. Pick an official model in that conversation once and the problem does not come back.
- Nothing is rewritten on disk. Session logs keep their history; only the outgoing request is rerouted.
Privacy
The plugin is a pure in-process filter:
- No network requests. It never contacts DeepSeek or any other host.
- No files. It does not read or write configuration, credentials, logs, or session data.
- No telemetry. It reports nothing anywhere.
- No credential access. It only calls the
llmservice that DSH already mounted; it never resolves, reads, or copies an API key or account token.
It reads provider metadata (id, name) from the llm service and writes only
one thing: the in-memory provider list that the UI reads.
Enable, disable, remove
Turn the bundle off with its switch in Plugins; the account group returns at once. Remove it entirely with:
dsh plugin --profile desktop remove dsh-hide-account-models
Removing the plugin does the same; it has no state to clean up.
Compatibility
- DSH
0.2.2-rc.1through0.2.x. The bundle relies on the provider idsdeepseek-account/deepseek-officialand onctx.llm.listProviders()andctx.llm.prepareCall()from that release line. - A future DSH release that renames those providers or stops projecting the provider list into the catalog will make the filter a no-op. Disable the bundle if the picker misbehaves rather than leaving it installed.
- This is a community plugin, not an official DeepSeek project.
Development
Pure ESM JavaScript, zero dependencies, no build step. Run the unit tests:
npm test
The tests use a fake llm service and a fake Cordis context. They cover the
provider filter, the prepareCall and stream rewrites, restoration of the
prototype methods through a traceable proxy, and coexistence with another plugin
that patches the same method later.
Plugin index
The repository also publishes a format-1 market index for Plugins → Discover → Index sources:
- jsDelivr (recommended):
https://cdn.jsdelivr.net/gh/nanwu98/dsh-hide-account-models@main/index.json - GitHub raw:
https://raw.githubusercontent.com/nanwu98/dsh-hide-account-models/main/index.json
License
MIT. See LICENSE.
The plugin is not affiliated with DeepSeek. It manipulates the harness's in-process provider registry; review the source before enabling it in a profile you depend on.
No comments yet. Be the first to write one.