dsh-model-tidy
一个让 DeepSeek Harness 的模型选择器保持整洁的插件——决定哪些模型出现、给模型和渠道起你认得的名字、按你觉得顺手的顺序排列,并保住厂商标注的计费倍率。

它解决的问题
装两三个 provider 插件,模型菜单就变成一堵墙。一条免费车道、一个工作台 App、两个自己配的网关,转眼三十来项——大多数你根本不会选,还有几个是同一模型走了不同渠道的近似重复项。
模型选择器是做决定的地方,不是仓库。它应该只摆你真正在用的那几个,用你认得的名字,按你定义好的顺序。
它做什么
安装后,DSH 设置里会出现「模型整理」分区。模型按来源渠道分组,每个渠道一张卡片,每一项各带一个开关:
┌─ WorkBuddy ──────── 8/12 ─ [渠道备注] [恢复排序] [隐藏本渠道] [显示本渠道] ─┐
│ ▲▼ Auto ●─── │
│ ▲▼ GLM-5.3 · x0.79 ●─── │
│ ▲▼ GLM-5.2 · x0.79 · 夜间折扣 ● [改备注] ───● │
│ ▲▼ Grok-4.7 · x1.90 ───● │
└──────────────────────────────────────────────────────────────────────────┘
┌─ our-free-model ── 6/6 ─ [渠道备注] [恢复排序] [隐藏本渠道] [显示本渠道] ─┐
│ ▲▼ Kilo Auto Free ●─── │
└──────────────────────────────────────────────────────────────────────────┘
- 每个模型一个开关:关掉即从模型选择器消失,打开即回来。
- 上/下箭头:渠道卡片与其内部模型都能用箭头调整先后顺序(图标
▲▼)。 - 模型备注名:给模型起个你认得的名字,选择器就以它显示;厂商的计费后缀会原样留在末尾。
- 渠道备注名:给渠道本身起个名字,选择器里的分组标题就换成它,渠道 id 以小字保留在旁边。
- 搜索:按模型名、渠道、备注名过滤。
- 渠道级批量:一键隐藏或显示某个渠道的全部模型。
- 全局显示 / 隐藏:两个按钮作用于整个目录。
- 返回顶部:列表很长时,右下角有一个按钮直接回到顶部。
- 恢复:一个按钮清空全部备注,另一个让全部模型回来。
自定义排序(模型)
每个模型左侧有一对箭头,用来调整它在所属渠道内的先后顺序。排序是显式保存的:调完重启 DSH、换一台机器同步配置,顺序都还在。
- 只影响排列,不影响可见性:排过序的模型被隐藏后,它的位置记在保存的顺序里;重新显示时回到原来的位置。
- 新模型排在你排过的那些之后:渠道以后上架新模型,不会插进你精心安排的那一段中间。
- 搜索时可以继续排序:筛选状态下点箭头,交换的是当前可见的相邻两项,所以点一下就能看到变化;被筛掉的模型保持它自己的相对位置。
- 一键回退:渠道头的「恢复排序」清掉该渠道的自定义顺序,回到目录原本的排列。
自定义排序(渠道)
每个渠道卡片头部也有一对箭头,可以把常用的渠道调到最上面。渠道顺序独立存储(providerOrder),与会话无关,重启后仍然生效。
- 只重排你动过的:你从未移动过的渠道、以及之后新注册的渠道,都保持它们原有的位置、排在最后。
- 与内部排序互不干扰:移动渠道不影响每个渠道内部的模型顺序。
- 一键回退:控制区顶部的「恢复渠道默认顺序」回到 harness 自带的渠道排列。
给渠道改名
渠道也可以备注。点卡片头的「渠道备注」,输入你认得的名字,模型选择器里的分组标题就会换成它——比如把 our-free-model 叫成「白嫖车道」。
- 只改标题:路由按渠道 id 走,改名不影响任何请求;正在进行的会话照常继续。
- id 仍然可见:改名后原渠道 id 以小字留在标题旁边,方便对照配置。
- 留空即恢复:把备注清空,标题就回到渠道自己发布的名字。
- 与模型备注互不干扰:两张表分开存储,改渠道名不会动模型名,反之亦然。
返回顶部
模型列表可以很长。右下角固定一个圆形按钮,点一下就把当前可见区域平滑滚回顶部——不用再手动向上拖。
它会自动找到真正的滚动容器(设置页的外层滚动区,而不是整个页面),所以滚动目标永远是对的。
改备注不会弄丢倍率
厂商把计费倍率拼在模型的显示名里——GLM-5.3 · x0.79——因为 harness 的模型目录没有倍率字段。直接替换这个名字(大多数改名的做法)会把倍率一并丢掉。
本插件按厂商自己的分隔符切开名字,并保留后半段:
| 选择器里显示的名字 | |
|---|---|
| 厂商原名 | GLM-5.3 · x0.79 |
| 改备注为「GLM 便宜」 | GLM 便宜 · x0.79 |
| 带促销标签时改备注 | GLM 便宜 · x0.79 · 夜间折扣 |
| 本身没有倍率的模型 | 自动 ← 不会多出分隔符 |
隐藏一个模型不会让它跑位
被隐藏的模型不在目录里(harness 会把它过滤掉),所以它的行只能靠保存下来的信息重建。顺理成章地把行追加到末尾,会让它一被隐藏就跳到分组底部。本插件记住每一行首次出现的位置,所以隐藏五个里的第三个,它仍然排在第三。
它刻意不做的事
整理是显示层的决定,绝不是配置改动。
- 不重写你的渠道配置。隐藏列表、模型备注、渠道备注与排序记录都只存在本插件自己的设置命名空间里。
- 正在使用某模型的会话不受影响——路由按模型 id 走,改的只是显示名。
- 卸载插件后列表完全恢复原样。
- 渠道新上架的模型默认可见。本插件记录的是「要隐藏什么、要改什么名、要排什么序」,从不是「要显示什么」。
- 不做可用性检测:各渠道有自己的排查方式,一个列表整理插件不该消耗你的 token 去试探模型。
覆盖范围
开关作用于所有模型来源,不限于手工配置的渠道。插件过滤的是 harness 自己的目录枚举——ctx.llm.listModels 与 ctx.llm.listProviders,也就是每个界面都会读的那一份列表。其他插件通过 ctx.llm.registerAdapter 注册的模型、以及 llm-pi-ai 下声明的渠道,都落在这一份列表里,因此都被覆盖。
行按 渠道 + 模型 作键,所以同一模型名经两条路由进来仍是两行独立控制:workbuddy/gemini-3.8-flash 与 gemini/gemini-3.8-flash 是不同的上游服务,各有各的开关和备注。
安装
dsh plugin --profile <你的 profile> add dsh-model-tidy
然后重新打开 DSH Web GUI,设置导航里会出现「模型整理」。
开发
无需构建:两半都以 harness 直接加载的原始文件形式发布。宿主半是 ES 模块;浏览器半是 window.__ModuleLoader__.load 工厂——客户端模块系统调用的格式。
npm test
一次跑完十二套测试:目录过滤器、倍率后缀切分、浏览器半行为、备注后缀抓取、行序保持、模型自定义排序、渠道自定义排序、渠道改名、排序渲染、返回顶部、渲染结构,以及与另一个包装同一个方法的插件共存。
npm run check:packaging 校验客户端依赖声明指向的包在 harness 中真实存在。
兼容性
针对 DSH 0.2.0-rc.2 开发。要求 DSH >= 0.2.0-rc.1——该版本起设置层才提供本插件分区写入所用的 configForms 服务。宿主兼容声明以 package.json 的 dsh.compatibility.dsh 为准(当前 >=0.2.0-rc.1),并已在 DSH 0.2.1 实机完成安装、启动、功能与卸载还原验证。
Node 支持范围声明为 ^22.19.0 || >=24.0.0(engines.node);开发与 CI 均在 Node 24 上运行,全部测试通过。
联系
有想改进的功能、或遇到使用问题,欢迎到 Issues 提;也可以直接发邮件给作者:chenbin2004sz@163.com。
许可证
MIT
No comments yet. Be the first to write one.