把 T3 Code 的模型选择器移植到 DSH 输入框:提供方侧栏、按提供方分组的搜索结果、浏览器本地收藏、不可用提供方标记,以及用 Cmd/Ctrl+1..9 直接选中可见列表的前九行。
安装
# npm 包(预构建)
dsh plugin --profile web add dsh-t3-model-picker
# Release 预构建包
dsh plugin --profile web add "https://github.com/yusufameri/dsh-t3-model-picker/releases/latest/download/dsh-t3-model-picker.tgz"
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:yusufameri/dsh-t3-model-picker
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
该插件的 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.
Credit
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.
Features
- Provider rail. A 44px column with
Favoritesfirst and one tile per advertised provider. The active entry carries a primary-colored indicator. - Search. The field takes focus when the picker opens. Matching uses tiered scoring over the model name, its description, the provider id and the provider name, including subsequence matching for queries of three characters or more, with a small boost for favorites. Results are grouped under provider headings.
- Favorites. A star on every row, stored in the browser under
dsh.t3-model-picker.favorites.v1as[{ provider, model }]. The Favorites rail entry lists them grouped by provider. - Jump shortcuts.
Cmd+1…9on macOS,Ctrl+1…9elsewhere, select the first nine rows of the visible list; each of those rows shows its chord in akbdchip. The listener is live only while the card is open. - Toggle shortcut.
Cmd+Shift+Mon macOS,Ctrl+Shift+Melsewhere, 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 bareCmd+Mtext binding alone. - Unavailable models. Providers the host does not report as routable are marked on their rows, on the rail tile's tooltip, and on the trigger.
- Reasoning effort. A footer row opens the effort levels the current model advertises. It is hidden when the model exposes none.
Install
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.
Screenshots
| Picker open on Favorites | Grouped search results | Favorites after starring |
|---|---|---|
![]() |
![]() |
![]() |
How it works
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 |
Differences from T3 Code
Four deliberate departures, all recorded in client.js:
- Search results are grouped under provider headings. T3 renders one flat ranked list with the provider named on each row.
- A footer row keeps the reasoning-effort selector reachable. T3 keeps effort in a sibling control, while in DeepSeek Harness this seat is the composer's only effort control.
- The row of the model in use carries a check mark. This seat is single-select and the trigger is not always in view.
Cmd/Ctrl+Shift+Mopens and closes the card. T3 leaves opening to the trigger alone, so a chord bound to the trigger would mean holdingCmdand reaching for the mouse.
Known limits
- The picker needs a session-scoped model directory. Addressed subagent sessions expose none, so the seat stays absent there and the chord has nothing to open.
- Jump chords stay open-only, as in T3.
Cmd/Ctrl+Shift+Mis the one chord that works with the card closed. - The effort footer only ever shows models whose provider advertises reasoning metadata.
Development
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
RELEASING.md covers the npm token setup, the tag-driven release workflow, and the manual publish fallback.
License
MIT. The interface this plugin reproduces comes from T3 Code, MIT licensed, by its authors.
链接
同类插件
zhu1090093659/dsh-web#packages/dsh-task-board★ 10247
侧边栏多列任务看板:卡片交给真实 DSH 智能体会话执行,支持 cron 定时(Host 侧到点执行,关浏览器也生效)。
zhu1090093659/dsh-web#packages/dsh-web-all★ 10247
DSH Web UI 插件与皮肤合集:任务看板、git 图、右侧面板、远程移动端 UI、桌宠、实时 token 统计与皮肤中心。
ccch1mneyyy/dsh-TUI★ 7252
Claude Code 风格全屏终端 UI:像素鲸鱼顶栏、实时工作状态行、思考流式展开。
MeteorNOX/DeepSeek-Balance-Whale-Widget★ 7046
右下角常驻的小鲸鱼挂件:余额、今日已用与每轮对话消耗(含峰谷价),余额预警与今日预算的泡泡内容都可编辑;泡泡点击序列模块化自定义,支持并列加权 A/B、随机台词与随机图片;内置 30+ 厂商模板(OpenAI / OpenRouter / Kimi / 硅基流动 / 方舟 / 智谱 / MiniMax 等),按模型查余额与订阅额度;另有任务结束音效、导入音频、自定义角色与资源管理。数据全在本机,无遥测。
omdsh-dev/DSH-better-sidebar★ 5011
侧边栏完整工作台:内置文件渲染编辑、终端、Git 与子代理,支持三方插件注册新 Tab。
Devin-AXIS/deepseek-design#deepseek-idesign★ 1778
可视化设计工作室,支持网站、App 原型、海报、信息卡、报告和杂志的模板创建、元素编辑、选区级 AI 草稿衔接与导出。



社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。