dsh-model-selector:DeepSeek Harness 的增强模型选择器

前言

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(最低),在冲突时默认胜出。

结语

该插件专注于提升模型选择的交互效率,特别是推理强度的可视化控制。适合需要频繁切换模型或关注推理档位配置的开发者使用。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜