前言¶
在 DeepSeek Harness(DSH)里切换模型,默认输入框上的选择器会把各来源下的模型平铺在同一层菜单里。来源一多、模型一长,查找和对比都不顺手。社区插件 dsh-model-source-picker(维护者 BEAVER-awa,分类:模型推理)把交互改成 Provider-first:第一层放大展示 模型来源,点进来源后再选具体模型与推理强度,和「先定账号/供应方、再定型号」的习惯更一致。
DSH 生态强调「一切皆插件」;目录站在 skillhub.cn 等平台展示社区作品,与 DeepSeek / 幻方无官方从属关系。下文基于仓库 README 与 package.json 核实后的内容编写。
这是什么¶
dsh-model-source-picker 是仅作用于 客户端 UI 的 bundle:占用 conversation.input.model 座位,替换输入框旁的模型选择控件。它不修改 agent 循环、工具或提示词,数据与 /model 命令共用同一套 modelDirectories 目录,不自建 catalog、不额外发请求。
| 维度 | 说明 |
|---|---|
| 仓库 | github.com/BEAVER-awa/dsh-model-source-picker |
| 当前版本(package.json) | 0.1.0 |
| 许可证 | MIT |
| 运行要求 | DeepSeek Harness ≥ 0.2.1(依赖 modelDirectories 服务);Node ≥ 22 |
与原生选择器的差异¶
下面用表格概括 README 中的对比(事实以仓库为准)。
| 原生选择器 | 本插件 | |
|---|---|---|
| 输入框触发器 | 图标 + 模型名 | 来源名(如 TokenPlan)+ 模型名 + 推理强度 |
| 菜单第一层 | 各来源模型平铺 | 来源列表(名称放大、首字母徽标、模型数量、当前来源标记) |
| 菜单第二层 | 无 | 该来源下的模型(可搜索、当前项打勾、描述与推理档数) |
| 推理强度 | 平铺在菜单里 | 第一层独立一行,或带推理档模型的第三层 |
插件以 priority: -20 注册,可盖过官方选择器(0)及 dsh-codex-subscription 的替换版(-10)。
核心交互¶
- 点击来源 → 进入该来源的模型列表;左上角
‹ 模型来源或Esc返回上一层。 - 模型超过 6 个时出现搜索框,输入即可过滤。
- 选中即生效,行为与原选择器一致:会话运行中仍可切换;被指派的子代理会话不显示该控件(与原选择器一致)。
样式使用主题 token(--dsw-alias-*、--dsw-font-*),随深浅色切换;菜单 portal 到 document.body,避免被停靠输入框裁剪。文案走 model-source-picker 命名空间的 locale(中英);注册失败会打印 [model-source-picker] ... 并让位,界面回落到原生选择器而不崩溃。
安装与启用¶
在已配置 DSH CLI 的环境中,README 给出的安装命令为:
dsh plugin --profile desktop add github:BEAVER-awa/dsh-model-source-picker
安装后若界面无变化,在插件管理器里将 bundle 关掉再打开一次,或重启应用——这比反复刷新页面更能刷新客户端模块图(原因见下文「诊断」)。
注意: 插件随当前 DSH 进程与用户配置运行,安装前请自行审阅 仓库源码 与 MIT 许可证,确认符合你的安全与合规要求。
典型用法¶
无需单独配置文件:启用 bundle 后,在会话输入框旁打开模型控件即可。
- 打开控件,在第一层浏览或选中 模型来源(可见名称、徽标、模型数、当前来源标记)。
- 进入第二层,在模型较多时用搜索框筛选,点选目标模型。
- 若模型带推理档位,按菜单中的第三层或第一层独立行调整推理强度。
目录数据通过 ctx.get('modelDirectories').directoryFor(sessionId) 与官方 store 的 load() / select() 同步,可选列表应与 /model 命令一致。
诊断、关闭与卸载¶
诊断: 作者在 shell.overlay 中注册了占位条目 model-source-picker-probe(不绘制 UI),仅用于证明 bundle 已在浏览器侧加载。可在 Slots 检查面板查看 shell.overlay 的 occupants 是否包含该项,以区分「模块未送达」与「注册被拒绝」。
关闭 / 卸载: 在插件管理器中禁用 bundle dsh-model-source-picker,或删除 cordis.patch.yml 中对应的 insert 行后刷新页面,即可回到原生选择器。
实现要点(供排查参考)¶
- 客户端逻辑在
lib/client.js;lib/index.js为 Host 侧占位;cordis.patch.yml插入 bundle 行。 - 动态 client 仅获得受限 ctx(
get/on/provide/effect),服务均通过ctx.get()读取并判空,避免静默不挂载却难以排查。 package.json中dsh.client为platform: web、immediately: true。
结尾¶
若你希望在大模型来源较多时 先收窄到某一供应方再选型号,dsh-model-source-picker 用两级菜单和共用 modelDirectories 的方式,在不动 agent 核心的前提下改写了输入框模型选择体验。