lovstudio/dsh-model-select-search ↗★ 0
@lovstudio/dsh-model-select-search
接管输入框模型选择器,在保留原生分组的基础上,新增固定搜索框与模糊匹配功能。
AI 分析
核心用途是优化模型切换的搜索体验。适合配置了大量模型、需要通过模糊搜索快速切换当前会话模型的 DSH 用户。
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:lovstudio/dsh-model-select-search说明文档
阅读完整 README ↗@lovstudio/dsh-model-select-search
Search-enabled composer model seat for the DeepSeek Harness web GUI.
The built-in composer model seat (conversation.input.model) only lists
provider-grouped models. This plugin takes over that single seat cell with a
ModelSelect that adds a pinned search field and fuzzy matching while
keeping the built-in package running underneath — the /model popup and the
shared per-session model directory still come from
@deepseek-ai/dsh-client-ui-model-selection.
What the takeover adds:
- Sticky search — the field is pinned above the scrolling option list, so typing filters while rows scroll and the field never leaves the viewport.
- Fuzzy matching — each whitespace-separated term matches as a plain
substring, a separator-free spelling (
v4profindsdeepseek-v4-pro), or an ordered subsequence within one provider/model name or id (v4pstill findsdeepseek-v4-pro); order is preserved, never permuted. Descriptions are intentionally not searchable (this surface never shows them), and a query with no hits shows a distinct "no matching models" message instead of the catalog-empty copy. - Keyboard + ARIA — entering the pane focuses the search; ArrowUp/Down
enter the visible rows at the correct edge; Escape is staged (clear query →
back to the Model/Effort root → close). The model list owns its own
role="menu"region so the textbox never sits inside a menu.
How it takes over the seat
conversation.input.model is a single slot; occupants coexist at distinct
priorities and the lowest live entry renders. The built-in registers at the
default priority 0; this plugin registers the same seat at priority -100,
so its ModelSelect renders while the built-in package keeps providing the
modelDirectories service and the /model command. No data logic is copied:
the seat's injected directory/load/select face is built over the shared
ctx.modelDirectories service, so the takeover shares one catalog and one
session projection with the /model popup.
Removing the plugin restores the built-in seat exactly.
Install
Prerequisites: Node.js 22.19+ or 24+, pnpm 11 (corepack enable or
npm i -g pnpm) — dsh plugin forwards to pnpm inside the profile directory.
From a git checkout:
dsh plugin --profile web add github:lovstudio/dsh-model-select-search
Then restart the web profile so the new client bundle is served:
dsh --profile web --no-open
Load gate
After installing, open the web GUI, click the composer model seat (e.g.
DeepSeek-V4-Flash · High), drill into the model list and confirm the search
field with the placeholder Search by name or ID appears above the groups.
Typing v4p should narrow to DeepSeek-V4-Pro rows while other models stay
hidden — that proves the takeover bundle, not the built-in seat, is rendering.