Plugin directory / Developer / dsh-better-model-picker
dsh-better-model-picker
Verified · install-tested on dsh taot
What it does
A better model picker for Deepseek Harness
Works — verified, early-stage project
A better model picker for Deepseek Harness It installs cleanly and boots without issues in our testing. It's early-stage but functional.
“Verified” means our automated CI actually ran dsh plugin add in a clean profile and it booted — nothing more. Feature descriptions and version compatibility are the author’s claims. This is not a security audit and not an endorsement of third-party code.
README
dsh-better-model-picker
An installable bundle for the DeepSeek Harness (DSH) Web GUI that replaces
the composer's model selector with an upgraded version. It shares the session's
model directory, so models picked here stay in sync with the /model popup.
Features
- Filter — a text box that narrows the model list as you type, using
space-separated terms. - Star-pin — an ☆/★ toggle on each model. Starred models stay pinned to the
top under a "Starred" section with their provider headings, and persist
across refresh and restart.
Install
pnpm install && pnpm run build # produces lib/index.js + lib/client.js
dsh plugin --profile web add /path/to/dsh-better-model-picker
Then restart Deepseek Harness. dsh plugin add does both halves of the job because
this package declares dsh.bundle.patch: pnpm links it into the profile, and
the CLI appends it to that profile's dsh.profile.bundles layer stack. It is
the bundle's own cordis.patch.yml that inserts the plugin row.
Adding or removing the plugin only takes effect after restarting DeepSeek
Harness. The bundle layer is read at boot, so any change to the profile's
plugin set requires the harness process to be restarted before the new
configuration is reflected in the Web GUI.
Verify it landed without booting:
dsh --profile web --dump-config | grep -A2 better-model-picker
Uninstall
dsh plugin --profile web remove dsh-better-model-picker
As with installation, removal only takes effect after restarting DeepSeek
Harness.
Publish
prepare is intentionally omitted; run pnpm pack after pnpm run build to
ship prebuilt artifacts, or publish to a registry with lib/ built. Consumers
then need no build step:
dsh plugin --profile web add dsh-better-model-picker # registry
dsh plugin --profile web add ./dsh-better-model-picker-0.1.0.tgz # tarball
How it works
- A bundle ships a configuration layer (
dsh.bundle.patch→cordis.patch.yml). A profile listing this package indsh.profile.bundles
applies that layer. - One row serves as both halves. The loader mounts
main(lib/index.js) as
the host half (a no-op: selection rides the shipped session RPCs). The
client-modules node half scans loader entries for packages declaringdsh.clientand serves this one's browser bundle at/plugins/dsh-better-model-picker/client.js. - The client half registers as the occupant of the
conversation.input.model
slot atpriority: -1, shadowing the shippedui-model-selectionentry
without disabling it. The shipped plugin keeps owning the/modelpopup
and themodellocale namespace, and both surfaces share one directory
service (ctx.modelDirectories).
No web-shell rebuild is needed: plugin bundles are served per package fromlib/client.js and reach the page through window.__DSH_BOOT__ at boot.
Build
pnpm run build # tsdown -> lib/index.js (ESM) + lib/client.js (CJS browser)
pnpm run typecheck # optional; see tsconfig.json paths (needs a harness checkout)
The browser artifact is a CJS body wrapped in thewindow.__ModuleLoader__.load({ id, factory }) closure the client module
system expects. react and the other shell-owned platform modules stay
external so the plugin shares the page's single React instance; everything else
is bundled. CSS Modules are inlined by lightningcss and inject a<style data-plugin> tag at factory execution.
Layout
dsh-better-model-picker/
├── package.json # dsh.bundle (layer) + dsh.client (browser roster)
├── cordis.patch.yml # the layer: inserts the plugin row
├── tsdown.config.ts # both build faces
├── tsconfig.json # opt-in typecheck only
└── src/
├── index.ts # host half (no-op)
└── client/
├── index.ts # plugin body + slot registration
├── slots.ts # ModelSelectInjected face
├── FilteredModelSelect.tsx # the component
├── FilteredModelSelect.module.css
└── css-modules.d.ts
Install
Install the catalog once, then DeepSeek Harness can find and install any plugin from this site automatically:
dsh plugin add dshbase-catalog Then say "install dsh-better-model-picker for me" — your agent finds it in the directory and installs it. Docs: dshbase-catalog · verified packs.
This plugin is GitHub source (not published to npm) — install it straight from the repo:
Web profile:
dsh plugin --profile web add github:taot/dsh-better-model-picker Headless (CLI) profile:
dsh plugin --profile headless add github:taot/dsh-better-model-picker Test report
Verified: L1 install + L2 load + L3 runtime from GitHub source on dsh 0.1.0-rc.6.