dsh-model-pin
DeepSeek Harness(DSH)对话输入框「选择模型」菜单的小插件:订阅的模型太多时,把常用的置顶到最前面,并可给不同供应商的模型加显示前缀,一眼分清同名模型。
English: a small DSH plugin for the model picker in the chat composer — pin your favourite models to the top (drag to reorder), and add a per-provider display prefix so same-named models from different providers are easy to tell apart.
效果
置顶的模型集中在菜单顶部的「已固定」框里,每行行首是拖动手柄,行尾是图钉;供应商前缀(如 [公司])直接显示在模型名前。
功能
1. 模型置顶
| 操作 | 效果 |
|---|---|
| 鼠标移到模型行 | 行尾出现图钉 |
| 点图钉 | 该模型置顶,出现在菜单最上方的「已固定」框里,图钉变实心 |
| 再点图钉(原位置或「已固定」里都行) | 取消置顶 |
| 点「已固定」里的模型名 | 等同于点原模型:选择并关闭菜单 |
- 置顶记录保存在本机浏览器存储里,重启 DSH 后仍在;只对对话输入框的模型选择菜单生效。
- 搜索过滤时,「已固定」只显示仍然匹配的模型。
- 已固定的模型在原分组里仍保留一份,键盘 ↑↓ 导航不受影响。
2. 拖拽排序
在「已固定」框里,按住行首的 ⠿ 手柄拖动即可调整顺序:拖到目标行的上半部分排到它前面,下半部分排到它后面,拖动时有插入线提示,顺序同样会保存。
只有手柄能拖动,按在模型名上仍是正常的选择,不会误触。
3. 供应商显示前缀
在「设置 → 模型」里,供应商的「显示名称」输入框下方会多出一个显示前缀。填写后,该供应商下所有模型在对话里的显示名变成「前缀 + 空格 + 原名」,例如 [官] DeepSeek-V4.1-Flash。
- 对话里的模型选择菜单、「已固定」框、输入框旁的当前模型名都会显示前缀;设置页保持原样。
- 只改显示,不改模型 ID,不影响调用。
- 输入即保存,清空即恢复;「添加自定义模型 API」时按填写的 Provider ID 记录。
- 没有「显示名称」的内置供应商,输入框出现在它的「自定义」折叠区最上面。
- 限制:菜单自带的搜索只匹配原模型名,搜不到前缀。
4. 滚动行为
当前选中的模型已置顶时,打开菜单(或列表刷新)会停在顶部的「已固定」框,而不是被拉到下面的原分组。鼠标悬停、方向键导航、或你已手动滚动菜单之后,不再干预。选中的模型没置顶时,保持 DSH 原样。
安装(DSH 桌面版)
本插件是 DSH 的浏览器侧插件,按 DSH profile 的依赖方式接入。profile 目录通常是 ~/.dsh/profiles/<profile>/(Windows:C:\Users\<你>\.dsh\profiles\<profile>\)。
- 克隆或下载本仓库到本机任意位置。
- 修改 profile 的
package.json(先备份):dependencies加一行"dsh-model-pin": "link:<本仓库的绝对路径>";dsh.profile.bundles数组里加"dsh-model-pin"。
- 在 profile 目录执行一次依赖安装,或手动把
node_modules/dsh-model-pin链接到本仓库目录。 - 重启 DSH,或刷新页面。
卸载:删掉上面两处条目和 node_modules/dsh-model-pin 链接即可,已保存的置顶/前缀数据只在浏览器本地,不影响其他功能。
兼容性
插件按 DSH 当前版本的模型选择菜单结构工作,纯浏览器侧、不改 DSH 源码。DSH 升级若改了菜单结构,图钉或「已固定」框可能失效,欢迎提 issue。
开发与测试
npm install # 只安装测试用的 jsdom
npm test
测试在 jsdom 里模拟菜单和设置页,不需要运行 DSH。
实现说明- 全部逻辑在
lib/client.js;lib/index.js只是空apply,让本包成为合法的 DSH 插件条目。 - 菜单结构取自
@deepseek-ai/dsh-client-ui-model-selection:div[role=menu][id$="-models"] > section[data-menu-group] > button[role=menuitemradio],模型由span[data-provider-id][data-model-id]标识。 - 「已固定」框里的行是原按钮的克隆,点击时转发给原按钮,选择与关闭菜单仍由 DSH 自己处理。
- 拖拽用 pointer 事件自实现:DSH 菜单会在按钮的 mousedown 里取消默认行为,浏览器原生拖拽起不来。
- 显示前缀通过给模型名标签插入一个前缀节点实现,设置页的输入框通过 React fiber 识别所属供应商。
- 本地存储键:
dsh-model-pin:v1(置顶顺序)、dsh-model-pin:prefix:v1(供应商前缀)。
No comments yet. Be the first to write one.