DeepSeek Harness plugin

dsh-better-model-picker-taot

A composable model picker for the DeepSeek Harness Web composer: filters the model list by name or id.

Jump to install

Source facts

Repository
taot/dsh-better-model-picker
Latest update
Aug 19, 2026
Category
Tools & Capabilities
GitHub stars
0
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/taot/dsh-better-model-picker
Plugin: dsh-better-model-picker-taot
Author: taot

Check the source files

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

File explorer2 files
README.mdSource · read only

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 in dsh.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 declaring dsh.client and 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 at priority: -1, shadowing the shipped ui-model-selection entry without disabling it. The shipped plugin keeps owning the /model popup and the model locale namespace, and both surfaces share one directory service (ctx.modelDirectories).

No web-shell rebuild is needed: plugin bundles are served per package from lib/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 the window.__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