dsh-model-tabs:为大模型目录增加两级 Tab 的 DSH 客户端插件

前言

DeepSeek Harness(DSH)的 composer 输入框里,模型选择器已按提供商分组,但仍是一层平铺列表:所有提供商的模型排在同一个可滚动区域。本机若挂接多个提供商、模型条目上百,要找某一个模型,往往得滚过多个分组头和大量行。官方在模型数超过一定规模时会出搜索框,搜索能缩小范围,但分组头仍在同一长列表里,视觉负担不小。

社区插件 dsh-model-tabs(维护者 LINGTIAN303,分类:客户端)在列表上方增加提供商 Tab + 模型系列 Tab 两级筛选;目录较小时保持官方平铺样式,不强行加控件。下面按「是什么 → 能力 → 安装 → 用法 → 设置与注意」说明。

这是什么

dsh-model-tabs 是纯客户端 DSH 插件:接管 composer 输入框里 conversation.input.model 槽上的模型按钮 UI(不是 /model 斜杠命令那条 popupSelect 链路)。它在模型菜单顶部叠两层 Tab,先选提供商、再选该提供商下的模型系列,并与原有搜索框叠加过滤。模型系列的划分规则内置一套最长前缀表,也可在设置页用 JSON 覆盖或追加。

插件在 SkillHub 目录 与 GitHub 发布;当前 package 版本 0.1.1,许可证 MIT。

核心功能

两级 Tab 怎么分

层级 分类键 作用
一级 Tab provider.id 先收敛到一个提供商
二级 Tab 模型名前缀族 再收敛到该提供商下的一个系列

两级 Tab 都保留「全部」,默认停在「全部」,不打字也能先缩小范围;搜索框仍可用,与 Tab 条件叠加。

系列识别流程(README 原文逻辑):

  1. 归一化模型名:取最后一个 / 之后 → 去掉 : 后缀 → 小写
  2. 按最长前缀命中内置规则表(如 deepseek、glm、kimi、qwen 等)
  3. 未命中则取模型名前导字母串;仍无则归入「其他」

作者说明采用「最长前缀」而非「纯首 token」,是为避免同厂商模型被拆成多个单例族(例如部分 Qwen、hy 系列命名)。

仅在大目录时启用 Tab

与官方「模型够多才出搜索」的思路一致,小目录不出现 Tab 条,保持官方平铺:

阈值 默认值 含义
totalModels 20 模型总数超过即启用
perProvider 30 或单个提供商模型数超过即启用

两项阈值可在设置页调整。

与官方选择器的关系

  • 视觉对齐官方 ModelSelect.module.css 的尺寸、token、焦点环、菜单定位等,换装后尽量不跳变。
  • /model 命令不受影响:走官方 commandUi,第三方暂无注入点。
  • 注册槽时使用 priority: -1000(single 槽按 priority 升序取第一个);与同样接管该槽的其他插件同一时刻只能留一个,见下文兼容说明。

其它能力

  • 菜单内保留与原生相近的推理等级相关 UI(与部分第三方 effort 插件存在替代关系)。
  • 无 Host 服务、无 HTTP、不读写文件;配置仅存浏览器 localStorage。
  • sessions / modelDirectories 不可用时静默退让,官方选择器照常显示。

安装与启用

任选一种方式安装(<你的 profile> 换成实际 profile 名),装完需重启 DSH:

# 方式一:npm(预构建,免构建脚本授权)
dsh plugin --profile <你的 profile> add dsh-model-tabs

# 方式二:GitHub 源码
dsh plugin --profile <你的 profile> add github:LINGTIAN303/dsh-model-tabs

# 方式三:本地开发
dsh plugin --profile <你的 profile> add "link:<本插件目录绝对路径>"

也可在 DSH 设置 → 插件 里安装。

适用环境与权限:插件以当前 DSH 进程在浏览器侧运行;安装前建议浏览仓库源码与 LICENSE。声明兼容 DSH 0.2.1-rc.5(作者本机实测)、0.2.2-rc.1;package.json 要求 Node.js >= 22.12.0,DSH >= 0.2.1-rc.2 < 0.3.0。官方 README 写明可能有破坏性变更,若官方调整 conversation.input.model 契约,插件需跟进。

典型用法

  1. 打开对话,点输入框左下角模型按钮。
  2. 进入模型列表;若目录达到阈值,顶部出现提供商 Tab。
  3. 点某一提供商后,出现该提供商下的系列 Tab。
  4. 两级均可点「全部」回到上一级全集。
  5. 键盘:← / → 在 Tab 间切换,↑ / ↓ 移动模型高亮,Enter 选中,Esc 逐级返回。

设置页

路径:设置 → 「模型 Tab」。

可配置:

  • 总模型数、单提供商模型数两个生效阈值。
  • 族规则 JSON(overrides 数组):同 key 覆盖内置规则,新 key 追加。示例:
[
  { "key": "deepseek", "label": "DeepSeek", "prefixes": ["deepseek", "ds"] },
  { "key": "my-family", "label": "我的系列", "prefixes": ["myfam"] }
]

提供「填入模板」「保存」「恢复默认」。配置键:localStorage['dsh-model-tabs.config']。

与其它插件、安全与兼容

槽位冲突(README 表格摘要):

插件 影响
@ayanehana/dsh-reasoning-effort 其推理等级 UI 不再上屏;功能由本插件推理等级面板覆盖
@txc2768651338/dsh-effort-slider 依赖 DOM 扫描,找不到匹配行时无效果
dsh-client-ui-deepseek-model-label-1017 角标子槽与原生声明冲突,可能抛 SlotOwnershipError

若需保留上述某一插件对模型按钮的装饰,可卸载本插件,只保留对方。

安全方面:不写全局 CSS 选择器(类名带 mt- / mts- 前缀),不碰官方 /model 弹窗相关选择器。

结尾

dsh-model-tabs 针对 composer 里模型很多、滚动翻找成本高的情况,用可配置阈值的两级 Tab 做分层收敛,小目录仍用官方列表。族规则可 JSON 扩展,纯前端存储、无 Host 依赖。

  • 目录页:https://www.skillhub.cn/plugins/LINGTIAN303/dsh-model-tabs
  • 源码与 README:https://github.com/LINGTIAN303/dsh-model-tabs

DSH 生态强调「一切皆插件」;SkillHub 等为社区目录,与 DeepSeek / 幻方无官方从属关系。选用插件时以仓库说明与自身环境为准即可。

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

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

Xiaoye