Back to home@AndyZHENG0715

dsh-client-ui-model-search

No description

Stars
0
Language
JavaScript
Created
Sep 2, 2026
Updated
Sep 3, 2026
GitHub repo

Introduction

dsh-client-ui-model-search

A small client UI plugin for DeepSeek Harness that makes the web composer's model selector usable at scale:

  • 🔍 Search box at the top of the model list — filters as you type.
    • Tokenized AND matching: opencode-go deepseek finds OpenCode Go's DeepSeek models (hyphens and underscores are treated as spaces).
    • Matches model name, model id, description, provider name, and provider id.
  • 🗂️ Collapsible provider groups — click a group header to collapse/expand it. A count badge shows how many models a group holds.
  • 🌗 Theme-aware — uses DSH design tokens (--dsw-*), so light/dark follows the active theme.
  • 🌐 Bilingual — zh-CN and en dictionary via the official locale service.
  • ♻️ Non-destructive — registers on the official conversation.input.model seat with priority: -1, so the shipped selector stays mounted underneath as a fallback. Uninstall (or stop the plugin) and the native selector returns.

Not an official DeepSeek product. No endorsement, review, or store listing by DeepSeek.

How it works

The official @deepseek-ai/dsh-client-ui-model-selection package owns a per-session ModelDirectory service (ctx.modelDirectories) shared by the composer model seat and the /model popup. This plugin reuses that exact directory — including select() — so a picked model lands on the standard directory.select() path and stays in sync with /model.

Install

Requires a DSH profile with the web UI.

dsh plugin --profile <name> add dsh-client-ui-model-search

Then restart the profile:

dsh --profile <name> web

Open the model selector in the composer (bottom-right). The search box appears above the model list; group headers are clickable.

Local checkout

dsh plugin --profile <name> add ./dsh-client-ui-model-search

Uninstall

dsh plugin --profile <name> remove dsh-client-ui-model-search

Restart the profile: the native selector returns (it was never removed).

Screenshots

模型列表:多提供方分组、计数徽标、当前选中模型

分词搜索:输入 opencode flash 同时匹配 OpenCode-Go 与 OmniRoute 下的 Flash 模型

分组折叠:DeepSeek 展开,其他提供方分组已收起

demo.html renders the exact menu UI (same CSS classes and mock data) standalone in any browser — open it to take additional screenshots.

Compatibility notes (DSH is pre-release)

  • The package is authored against the official bundle format: package.json dsh.bundle.patchcordis.patch.yml, plus a dsh.client web entry, matching @deepseek-ai/dsh-client-ui-model-selection@0.1.1-rc.2.
  • dsh-plugin.json is a Community Draft v0.15 manifest (dsh-std, schema validated). It declares a no-op host facet because the v0.15 draft has no web-slot contract; the composer-seat contribution therefore rides the official web slot, not a dsh-std contract. When upstream adds a web contract, this can be upgraded.
  • If upstream renames conversation.input.model or the modelDirectories service, this plugin stops taking effect (and the native selector simply stays). That is the documented cost of riding an official seam; the dsh-std adapter path is the mitigation once a web contract lands.

License

MIT