Introduction¶
The DeepSeek Harness WebUI model selection menu usually lists a large number of models. When the model list is long, scrolling with a mouse to find a specific model is inefficient. dsh-model-menu-search adds a real-time search box at the top of the model dropdown menu, allowing you to filter the model list directly by typing keywords.
Plugin Overview¶
- Core Functionality: adds a real-time search box to the model dropdown menu.
- Matching Logic: supports matching by name substring, normalized matching, and subsequence/abbreviation matching.
- Filtering Capability: supports filtering by vendor prefix (e.g.,
@bailian). - Compatibility: does not take a slot or modify shared services; usable across versions; zero imports and zero peer dependencies.
- Developer: LovelyDazai.
- License: MIT.
Installation and Activation¶
The plugin must be installed in the desktop profile and references this directory via link: (a symbolic link/junction rather than a copy). After editing the configuration file, refresh the page to take effect.
1. Edit Dependencies
Add the dependency to ~/.dsh/profiles/desktop/package.json:
{
"dependencies": {
"dsh-model-menu-search": "link:D:/workplace/dsh-model-menu-search"
}
}
2. Add to Bundles
Add the plugin name to the dsh.profile.bundles array in the same file:
{
"dsh.profile.bundles": [
"dsh-model-menu-search"
]
}
3. Create Module Link
Create a link pointing to the plugin directory under ~/.dsh/profiles/desktop/node_modules/:
New-Item -ItemType SymbolicLink -Path "$env:USERPROFILE\.dsh\profiles\desktop\node_modules\dsh-model-menu-search" -Target "D:\workplace\dsh-model-menu-search"
After completing these steps, refresh the DeepSeek Harness page to activate the plugin.
Core Features¶
- Semantic Positioning: uses ARIA semantic attributes (
role="menu",role="menuitemradio") to locate elements, without relying on hashed class names (DSH CSS Module class names change with every build), avoiding breakage caused by version updates. - Viewport Adaptation: When the menu height exceeds the viewport, it automatically keeps the search box area within the visible viewport range.
- Error Tolerance: The code never throws errors; on failure it only outputs
console.warnand does not affect overall DSH operation.
Typical Usage¶
The input field supports multiple matching modes. Supported separators include spaces, commas, semicolons, slashes, and pipes.
| Input Example | Matching Result |
|---|---|
glm |
Filters by name substring (case-insensitive), matching models containing glm |
glm53 |
Normalized matching: ignores -, _, ., /, and spaces; matches glm-5.3-prime |
dsr1 |
Subsequence/abbreviation matching, matches deepseek-reasoner-1 |
@bailian |
Shows only models whose vendor is bailian |
@bailian qwen |
Vendor + keyword combined filtering |
reasoner; 32b |
Separator handling; matches multiple keywords simultaneously |
Keyboard Navigation:
* ↓ / ↑: Move between visible model rows.
* Enter: Directly select the currently highlighted model.
* Esc: First clears the input box; press it again to close the menu.
Notes¶
- Update Mechanism: After modifying local plugin code, only refresh the page to take effect; updates from the plugin marketplace will not overwrite it.
- Version Fix: Version 1.0.3 fixed the issue of multiple search boxes appearing in the reasoning tier panel (by adding
titleattribute checks and an automatic hiding mechanism). - Permissions and Source: The plugin runs with the permissions of the current dsh process. Before installing, it is recommended to review the source code and license.
Conclusion¶
This plugin uses zero dependencies and semantic element positioning to solve the problem of plugins becoming invalid after DeepSeek Harness version updates. It is suitable for users who need to switch frequently between many models. The plugin directory and source code are hosted at the links below.