前言¶
DeepSeek Harness (DSH) 采用插件化架构。在模型选择这一环节,官方组件提供了基础功能。bittersmilezzz/dsh-model-selector 插件旨在优化这一体验:它通过 shadow 方式叠加在官方输入区的模型选择 seat(conversation.input.model)之上,不覆盖也不禁用官方组件,而是提供一层更直观的交互层。
插件定位¶
- 名称:dsh-model-selector
- 维护者:bitterSmilezzz
- 分类:模型推理
- 核心价值:提供单层模型菜单(支持搜索与分组折叠)以及底部内联的推理强度(Effort)滑杆。
安装与启用¶
插件通过 DSH CLI 安装。
1、执行以下命令安装插件(替换 <profile> 为你的 DSH 配置文件名):
dsh plugin --profile <profile> add @bittersmilezzz/dsh-model-selector
2、启用后刷新浏览器页面(web profile)。页面加载完成后,官方输入区的模型选择 seat 会被插件替换,菜单和滑杆将出现在界面中。
核心功能¶
该插件主要包含以下功能点:
- 单层菜单与搜索:菜单采用单层结构,支持按名称搜索。搜索结果支持命中片段高亮,并提供按供应商分组的折叠功能。选中行与供应商标签可见高亮,打开菜单时自动滚动到当前选中行。
- 搜索宽容机制:支持大小写、变音符以及 Unicode 折叠差异(如
café与cafe)的匹配,采用 NFKD 归一化处理。 - 自适应布局:菜单高度和宽度会根据视口实测进行钳位,弹出方向自动适应(取上下空间较大的一侧),确保在矮窗口或窄边栏中不会溢出。
- 完整键盘操作:支持方向键在结果间移动、Enter 选中首个命中、Escape 清空搜索词并关闭菜单。IME 组合输入的确认键不会被误判为选中。
- 无障碍支持:搜索框被识别为 combobox,结果列表为 listbox 或分组视图;采用 roving tabindex 机制,确保焦点在列表项间移动时只保留一个停靠点;状态变化通过 live region 播报。
- 推理强度滑杆:选中推理模型后,底部会出现内联推理强度滑杆。该滑杆实时显示当前档位名与说明。
- 错误提示:当宿主拒绝切换模型时,会通过官方 Toast 在输入区上方播报失败原因,即便菜单已关闭也能看到。
- 自动选择最强档:选择推理模型后,会自动落到最强的思考档位(仅限已知档位,适配器自造档位不猜测),并在成功后提示落到的档位。
- 目录同步:与官方
/model弹窗共用modelDirectories目录,两处数据实时同步。
配置与权限¶
- 配置项:插件无任何设置项,属于纯 UI 插件,不占用“设置 → 插件 → 配置”卡片位。
- 权限等级:low。插件运行在纯 client UI 环境,不注册 host 工具、不读写宿主文件、不访问凭据、不发起自有网络请求。模型目录与切换动作通过官方 session RPC(
ctx.remote.session)进行。
注意事项¶
- 依赖与运行环境:需要依赖 DSH web profile(client 半区)及官方注入包(如
@deepseek-ai/dsh-client-ui-slots)。 - Shadow 机制与优先级:插件通过 slot 优先级(priority: -1)shadow 官方 seat。若官方后续改动该 seat 的注入面,需同步适配。与其他也 shadow
conversation.input.model的插件同时安装时,优先级决定渲染赢家。由于本插件优先级为 -1(最低),在冲突时默认胜出。
结语¶
该插件专注于提升模型选择的交互效率,特别是推理强度的可视化控制。适合需要频繁切换模型或关注推理档位配置的开发者使用。