前言¶
DeepSeek Harness(DSH)在 composer 和 /model 命令里提供模型选择。当配置里接入多家供应商、每家又有多个模型时,官方 ui-model-selection 会把全部模型平铺成一条长列表,只有吸顶小标题做视觉分组,不能折叠。供应商一多,每次换模型都要从列表顶部往下扫,官方搜索框还要等模型数大于 4 才出现。下面介绍社区插件 dsh-model-groups:在同样两个入口上,把列表改成「供应商手风琴 + 常驻搜索 + 推理等级侧栏」,减轻长列表带来的操作成本。
这是什么¶
dsh-model-groups 是 DSH 的客户端 UI 插件,由维护者 YMC521 发布在 GitHub,社区目录页见 skillhub.cn。它 fork 自官方 @deepseek-ai/dsh-client-ui-model-selection,替换 composer 模型位(slot conversation.input.model)与 /model 命令的界面,实现按供应商折叠的模型菜单,并保留搜索与推理等级切换。宿主侧是纯 UI 插件(lib/index.js 的 apply 为空),行为集中在构建产物 lib/client.js 与可手改的 src/region.js。
DSH 生态强调「一切皆插件」;skillhub 等目录是社区站点,与 DeepSeek / 幻方无官方从属关系。安装前建议自行阅读仓库源码与 MIT 许可证;插件随当前 DSH profile 在浏览器或桌面端加载,权限与你在用的 Harness 进程一致。
核心功能¶
资料中已说明的能力如下。
| 能力 | 行为 |
|---|---|
| 供应商手风琴 | 一级行显示供应商名、模型数量与当前选中标记;点击展开该供应商下全部模型,再点收起 |
| 打开即定位 | 打开菜单时默认全部收起,仅当前模型所在供应商自动展开,且只显示当前选中的那一个模型 |
| 搜索常驻 | 搜索框始终显示,打开菜单自动聚焦;命中模型的供应商自动展开并只显示命中项,无命中的供应商整行隐藏 |
| 键盘 | ↑↓ 在可见模型间移动、Enter 选中;搜索框按 ↓ 进入列表;Esc 依次:收等级面板 → 清搜索 → 关菜单 |
| 推理等级 | 从列表中抽出,固定在列表下方;鼠标移上去在菜单外侧弹出面板,点选切换;空间不足时面板翻到左侧 |
| 双入口一致 | composer 模型位与 /model 使用同一套手风琴(官方 /model 为 popupSelect 平铺弹窗) |
与官方 ui-model-selection 的主要差异:官方打开即平铺全部模型、搜索在模型数 ≤4 时不出现、分组不可折叠、推理等级在菜单内;本插件启用后需在 cordis.patch.yml 里 disabled: true 关掉官方行,避免重复注册。
安装与启用¶
前置:本地已有可运行的 DSH(Web 或桌面端),以及 git。README 未给出 dsh plugin add github:... 一类命令;推荐做法是克隆仓库、软链进 profile 的 node_modules,再 patch profile。桌面端请把下文中的 profiles/web 换成你实际使用的 profile 目录名。
方式 A:挂到现有 profile(推荐)¶
先做克隆,再做链接,最后在 patch 里禁用官方插件并插入本插件。
- 克隆到 profile 外的目录(不要直接放进 profile 的
node_modules,避免被依赖工具清理):
mkdir -p ~/dsh-plugins && git clone https://github.com/YMC521/dsh-model-groups.git ~/dsh-plugins/dsh-model-groups
Windows 示例(README 命令汇总):
git clone https://github.com/YMC521/dsh-model-groups.git "$env:USERPROFILE\dsh-plugins\dsh-model-groups"
- 链接进 profile 的
node_modules(软链便于之后git pull升级):
PROFILE=~/.dsh/profiles/web
ln -s ~/dsh-plugins/dsh-model-groups "$PROFILE/node_modules/dsh-model-groups"
Windows PowerShell:
$p = "$env:USERPROFILE\.dsh\profiles\web"
New-Item -ItemType Junction -Path "$p\node_modules\dsh-model-groups" -Target "$env:USERPROFILE\dsh-plugins\dsh-model-groups"
若链接已存在(重装或升级),先删除旧链接再重建,例如:
Remove-Item "$env:USERPROFILE\.dsh\profiles\web\node_modules\dsh-model-groups"
- 在
<profile>/cordis.patch.yml末尾追加(关闭官方模型选择 + 插入本插件):
# dsh-model-groups:官方模型选择是它的上游,同开会重复注册
- id: ui-model-selection
disabled: true
- insert:
- id: dsh-model-groups
name: dsh-model-groups
- 刷新页面(浏览器
Ctrl+F5)。profile 的 patch 由宿主监听,一般不必重启进程;浏览器需重新拉取插件 bundle。
验证接线是否成功:
cd ~/.dsh/profiles/web && node -e "console.log(require.resolve('dsh-model-groups'))"
能打印插件目录路径即可;界面上模型菜单应变为按供应商折叠。也可在控制台检查 document.querySelector('style[data-plugin="dsh-model-groups"]') 是否有值。
方式 B:作为 profile bundle¶
将 dsh-model-groups 加入 profile 的 package.json → dsh.profile.bundles,并确保依赖可解析(例如 dsh plugin --profile web install)。包内自带的 cordis.patch.yml 会禁用官方行并插入自身,不要再手动改 profile 的 patch。方式 A 与方式 B 二选一,同时启用会重复注册。
典型用法¶
安装并刷新后,日常操作与官方相同:在 composer 点击模型位,或执行 /model,打开的都是同一手风琴菜单。
- 换模型:展开目标供应商行,点选模型;或打开后直接在当前已展开的供应商下切换(打开时仅当前供应商展开且只显示当前模型)。
- 搜索:菜单打开后搜索框已聚焦,输入即筛;命中项所在供应商会自动展开。
- 推理等级:在列表下方固定条上操作,移入弹出外侧面板选择等级,不占用可滚动模型列表的高度。
- 键盘:用方向键与 Enter 完成选择与 Esc 阶梯关闭,适合不想鼠标长距离滚动长列表的场景。
设置页里的模型列表仍是官方实现,本插件只接管 composer 模型位与 /model。
适用场景与注意¶
适合:已在 DSH 里配置多家 remote / 供应商、模型条目经常超过十几行,希望按供应商折叠、搜索框随时可用、推理等级不挤占列表的用户。
注意:
- 插件依赖官方
ModelSelect区域标记、slot 名与commandUi形状;DSH 大版本升级若改动这些位置,需按构建报错同步src/region.js并重新运行node scripts/build.mjs(升级 DSH 后亦建议重跑构建)。 - 回退:删除
cordis.patch.yml末尾的disabled与insert两段,并移除node_modules中的链接,刷新即可恢复官方界面,不改动会话数据。 - 当前 package 版本为 0.1.0,peer 依赖
@deepseek-ai/cordis~4.0.5;界面文案随 DSH 中英文 locale,插件仅补充插件列表中的标题与描述(locale/zh.json、locale/en.json)。
结尾¶
dsh-model-groups 把「平铺长列表」改成「供应商 + 模型」两级结构,并在 composer 与 /model 上保持一致。若你正在维护一个模型越来越多的 DSH profile,可以按 README 的软链 + patch 方式接入,并在启用前通读 GitHub 仓库 与 社区目录页。