deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:yusufameri/dsh-t3-model-picker
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
A model picker for the DeepSeek Harness composer, ported from T3 Code's model selector.

Open the picker with Cmd/Ctrl+Shift+M, search across every provider,
star what you use, and reach the first nine rows with
Cmd/Ctrl+1…9.
The selector this plugin implements is T3 Code's ProviderModelPicker. The
provider rail, the borderless search field, the row layout with a provider
footer, the favorites model, the tiered search ranking, and the Cmd+1…9
jump chords are all theirs. T3 Code is
open source under MIT;
this port keeps the same behaviour and swaps the data underneath for DeepSeek
Harness's model directory. Please support the original project.
Favorites first and one tile per
advertised provider. The active entry carries a primary-colored indicator.dsh.t3-model-picker.favorites.v1 as [{ provider, model }]. The Favorites
rail entry lists them grouped by provider.Cmd+1…9 on macOS, Ctrl+1…9 elsewhere, select
the first nine rows of the visible list; each of those rows shows its chord in
a kbd chip. The listener is live only while the card is open.Cmd+Shift+M on macOS, Ctrl+Shift+M
elsewhere, opens the card when it is closed and closes it when it is open,
from anywhere in the window including the composer editor. The trigger's
tooltip carries the chord. On a locked session the chord is inert, as the
trigger is. The shift leaves the bare Cmd+M text binding alone.From this repository:
dsh plugin --profile web add github:yusufameri/dsh-t3-model-picker
Or from the release tarball, which needs no build step:
dsh plugin --profile web add https://github.com/yusufameri/dsh-t3-model-picker/releases/latest/download/dsh-t3-model-picker.tgz
Once the package is on npm, the registry form is one word shorter:
dsh plugin --profile web add dsh-t3-model-picker
Any of them reconciles the profile's bundle list, so the next boot merges the plugin's patch and loads its client half. Removing the bundle restores the shipped model selector with no residue.
| Picker open on Favorites | Grouped search results | Favorites after starring |
|---|---|---|
![]() |
![]() |
![]() |
The composer's conversation.input.model seat is a single slot. Two
occupants can coexist there at different priorities, and the lowest live
priority renders, so this plugin registers at -1 and the shipped
ModelSelect at its default 0 stops rendering.
Both read the same per-session model directory (ctx.modelDirectories), which
is also what the /model command popup uses. A model chosen here is what those
surfaces show next, and a selection made there is what this picker highlights.
| File | Role |
|---|---|
package.json |
Bundle manifest: dsh.bundle.patch plus the dsh.client web half |
cordis.patch.yml |
One insert row mounting the bundle |
index.js |
Host half — empty; the feature is entirely browser-side |
client.js |
Client half: the picker, its styles, favorites and shortcuts |
Four deliberate departures, all recorded in client.js:
Cmd/Ctrl+Shift+M opens and closes the card. T3 leaves opening to the
trigger alone, so a chord bound to the trigger would mean holding Cmd and
reaching for the mouse.Cmd/Ctrl+Shift+M is the one
chord that works with the card closed.No build step: client.js is plain JavaScript in the format the client module
loader takes. Edit it and reload the page.
scripts/verify-shortcuts.mjs checks the chords against the real component. It
mounts client.js in a jsdom page with React and dispatches real key events at
the window, so a chord change is verified without the desktop app. The plugin
has no dependencies, so the harness brings its own:
npm install --no-save react react-dom jsdom
node scripts/verify-shortcuts.mjs
scripts/ also holds the recording tooling used for the assets above. It drives
the running DeepSeek Harness page over the Chrome DevTools Protocol, so no
browser download is needed:
node scripts/record.mjs <run-dir> # frames + stills + timeline
node scripts/encode-gif.mjs <run-dir> <out.gif> --fps 12 --speed 1.8 --start 1.14
record.mjs expects the page to show a session whose composer carries the
picker, and it restores the browser's favorites when it finishes. The encoder
crops, resizes, and assembles the GIF with sharp; it needs no ffmpeg.
RELEASING.md covers the npm token setup, the tag-driven release workflow, and the manual publish fallback.
MIT. The interface this plugin reproduces comes from T3 Code, MIT licensed, by its authors.
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。