DeepSeek Harness 插件

dsh-better-model-picker-taot

A composable model picker for the DeepSeek Harness Web composer: filters the model list by name or id.(英文原文)

跳到安装方式

来源信息

GitHub 仓库
taot/dsh-better-model-picker
最近更新
2026年8月19日
分类
工具与能力
GitHub stars
0
载体类型
plugin
目录证据
上游声明已找到 dsh.bundle
证据路径
package.json#dsh.bundle
核对版本
0.1.0-rc.8
上游核对日期
2026-08-20

该证据由上游目录提供。本站没有安装、运行或安全审核这个插件。

安装

默认先复制一段 Prompt,让 Agent 读 GitHub 仓库和源码;需要自己装时再切到命令。

复制这段 Prompt,发给 DSH、Codex 或其他 Agent,让它先读 GitHub 仓库和源码。

请先不要安装或执行任何命令。阅读这个插件的 GitHub 仓库、README 和关键源码,然后用清楚、直接的方式回答以下问题,帮助我判断它是否适合我的需求:

1. 这个插件是什么,解决什么问题;
2. 适合哪些用户和典型使用场景;
3. 安装后如何使用,并给出一个最小使用示例;
4. 有哪些已知限制,以及隐私、安全、兼容性或维护风险;
5. 给出“推荐 / 有条件推荐 / 不推荐”的明确建议和理由。

请区分仓库明确说明、根据源码推断和未知信息。证据不足时请明确说明,不要猜测或照抄 README。

GitHub:https://github.com/taot/dsh-better-model-picker
插件名:dsh-better-model-picker-taot
作者:taot

检查来源文件

安装前先看这个插件目录里的 README 和其他文件。

文件资源管理器2 个文件
README.md来源说明 · 只读预览

dsh-better-model-picker

An installable bundle for the DeepSeek Harness (DSH) Web GUI that replaces the composer's model selector with an upgraded version. It shares the session's model directory, so models picked here stay in sync with the /model popup.

Features

  • Filter — a text box that narrows the model list as you type, using

space-separated terms.

  • Star-pin — an ☆/★ toggle on each model. Starred models stay pinned to the

top under a "Starred" section with their provider headings, and persist across refresh and restart.

Install

pnpm install && pnpm run build      # produces lib/index.js + lib/client.js
dsh plugin --profile web add /path/to/dsh-better-model-picker

Then restart Deepseek Harness. dsh plugin add does both halves of the job because this package declares dsh.bundle.patch: pnpm links it into the profile, and the CLI appends it to that profile's dsh.profile.bundles layer stack. It is the bundle's own cordis.patch.yml that inserts the plugin row.

Adding or removing the plugin only takes effect after restarting DeepSeek Harness. The bundle layer is read at boot, so any change to the profile's plugin set requires the harness process to be restarted before the new configuration is reflected in the Web GUI.

Verify it landed without booting:

dsh --profile web --dump-config | grep -A2 better-model-picker

Uninstall

dsh plugin --profile web remove dsh-better-model-picker

As with installation, removal only takes effect after restarting DeepSeek Harness.

Publish

prepare is intentionally omitted; run pnpm pack after pnpm run build to ship prebuilt artifacts, or publish to a registry with lib/ built. Consumers then need no build step:

dsh plugin --profile web add dsh-better-model-picker              # registry
dsh plugin --profile web add ./dsh-better-model-picker-0.1.0.tgz  # tarball

How it works

  • A bundle ships a configuration layer (dsh.bundle.patch

cordis.patch.yml). A profile listing this package in dsh.profile.bundles applies that layer.

  • One row serves as both halves. The loader mounts main (lib/index.js) as

the host half (a no-op: selection rides the shipped session RPCs). The client-modules node half scans loader entries for packages declaring dsh.client and serves this one's browser bundle at /plugins/dsh-better-model-picker/client.js.

  • The client half registers as the occupant of the conversation.input.model

slot at priority: -1, shadowing the shipped ui-model-selection entry without disabling it. The shipped plugin keeps owning the /model popup and the model locale namespace, and both surfaces share one directory service (ctx.modelDirectories).

No web-shell rebuild is needed: plugin bundles are served per package from lib/client.js and reach the page through window.__DSH_BOOT__ at boot.

Build

pnpm run build        # tsdown -> lib/index.js (ESM) + lib/client.js (CJS browser)
pnpm run typecheck    # optional; see tsconfig.json paths (needs a harness checkout)

The browser artifact is a CJS body wrapped in the window.__ModuleLoader__.load({ id, factory }) closure the client module system expects. react and the other shell-owned platform modules stay external so the plugin shares the page's single React instance; everything else is bundled. CSS Modules are inlined by lightningcss and inject a <style data-plugin> tag at factory execution.

Layout

dsh-better-model-picker/
├── package.json                    # dsh.bundle (layer) + dsh.client (browser roster)
├── cordis.patch.yml                # the layer: inserts the plugin row
├── tsdown.config.ts                # both build faces
├── tsconfig.json                   # opt-in typecheck only
└── src/
    ├── index.ts                    # host half (no-op)
    └── client/
        ├── index.ts                # plugin body + slot registration
        ├── slots.ts                # ModelSelectInjected face
        ├── FilteredModelSelect.tsx # the component
        ├── FilteredModelSelect.module.css
        └── css-modules.d.ts