dsh-model-organizer:把 DSH 模型菜单按厂商折叠并整理

前言

在 DeepSeek Harness(DSH)里写 Composer 时,模型选择菜单往往按来源把一长串模型平铺出来。来源一多,找常用模型就要反复滚动;想给长名字起短称呼、或把用不上的条目藏起来,原生菜单也帮不上忙。下面介绍的是维护者 oliblue-evan 的纯客户端插件 dsh-model-organizer(npm 包名 dsh-liao-models):只增强 Composer 的模型面板,不发起网络请求,偏好落在本机 localStorage。它从社区插件 dsh-model-fold 的思路出发重写,并针对样式泄漏、/model 弹窗误伤、监听器未清理等问题做了作用域隔离与 dispose 对账,README 中附有回归测试说明。

这是什么

模型菜单整理器:主菜单只列厂商(及可见模型数量),悬浮或点击厂商时从侧边滑出该厂商的模型浮框;支持置顶、最近使用、厂商内与跨厂商搜索、别名与隐藏。分类为客户端插件,面向 DSH Web GUI(Electron renderer)下的 Composer 模型选择器。

核心功能

厂商列表与模型浮框

主菜单折叠为来源(厂商)列表。鼠标划过或点击某一来源,会在菜单侧边打开模型浮框;空间不足时自动翻到另一侧。原生菜单顶部的搜索框在此用于筛选厂商名称,不会按模型名展开全部条目;搜到厂商后可用回车或方向键进入对应浮框。

浮框内默认只搜当前厂商,可切换到全部厂商;匹配原名、别名与模型 ID,切换范围时保留查询词,全局结果按厂商分层展示。无查询时,Esc、点击外部或选中模型可关闭;有查询时 Esc 先清空。移开鼠标不会自动收起。

左上角入口可打开常用模型总览(置顶、最近与各来源)。厂商内可按 DeepSeek、GPT、Claude 等系列缩进分组,可在设置中关闭;组内支持名称自然序或倍率升序/降序(倍率仅作组内排序参考,不代表跨渠道实际费用)。

插件通过属性与 CSS 隐藏原生模型行,保留 React 节点与真实选择按钮,不替换内核组件。

置顶、最近与整理

  • 置顶:列表行或整理视图中点星标;总览顶部展示,上限 12 个,达上限会提示。
  • 最近:每次选模型会记入最近(去重、置前);总览中可配置展示 4 / 8 / 12 条,最多保留 24 条记录,改展示条数不删历史。
  • 整理视图:点「整理」可筛选全部 / 已置顶 / 已隐藏,支持置顶、隐藏、改名;整理时点击模型名用于改名,不会切换当前聊天模型。

搜索与别名、隐藏

浮框与总览搜索同时匹配别名与原始名,采用子序列模糊匹配(例如敲 dsv4f 可匹配 DeepSeek-V4.1-Flash),排序优先级为完全命中、前缀、子串、子序列。

  • 别名:在整理视图点「改名」展开输入;显示名与搜索均跟随别名,原名与模型 ID 可在悬停提示中查看。
  • 隐藏:模型从浏览列表与浏览搜索中消失;整理视图搜索仍包含隐藏项,可随时恢复。偏好以宿主目录的厂商 ID 与模型 ID 为键,显示名或费用后缀变化不影响记录。

设置页与偏好

在 插件管理 → dsh-liao-models 打开设置(写入官方 plugins.bundle.config,与 README 描述一致)。0.9.x 起采用紧凑布局,主要能力包括:

类别 说明
显示 面板字号 12 / 13 / 14;列表密度;宽度 300 / 360 / 440px;最大高度 60 / 70 / 85vh
浏览 悬停或点击展开;悬停延迟 0 / 150 / 300ms;默认搜索范围;重开记忆;系列初始折叠状态
排序 可按厂商分别记忆排序;设置页可打开「整理模型」浮框,读取宿主已缓存目录,不额外请求模型目录
总览 可分别关闭置顶与最近展示
备份 偏好 JSON 导出、导入预览、合并或替换及撤销

设置页与菜单面板共享同一份 localStorage,改字号时已打开的浮框会同步更新。「恢复默认」仅恢复字号、分组与排序,保留模型记录。

其它约束

  • 不联网:零额外网络请求。
  • 主题:颜色使用官方 --dsw-* 令牌,深浅主题跟随宿主。
  • 内核若改动模型菜单 DOM 结构,插件会静默不生效,不破坏原菜单、不碰 role="listbox" 的 /model 弹窗。

安装与启用

从 GitHub 安装 bundle(README 推荐,依赖 dsh.bundle 自声明,无需手改 cordis.patch.yml):

dsh plugin --profile <profile> add github:oliblue-evan/dsh-liao-models

或在 DSH 内通过 plugin_manager:

plugin_manager(action: "install_bundle", target: "github:oliblue-evan/dsh-liao-models")

本地开发时可将目录作为 bundle 路径安装:

dsh plugin --profile <profile> add /path/to/your/model-organizer

装完需重启 DSH 一次,新 bundle 在启动时挂入客户端插件图。若 profile 已启用 @deepseek-ai/dsh-client-hmr,之后改 client.js 存盘并刷新页面即可热替换,无需每次重启。

package.json 声明引擎为 dsh >=0.2.1-rc.2 <0.3.0-0;README 另记载在 @deepseek-ai/dsh 0.2.0-rc.2 与 @deepseek-ai/dsh-client-ui-model-selection 0.2.0-rc.2 上做过验证,升级宿主后若菜单无增强,可用 DevTools 确认 div[role="menu"] 下仍存在 section[role="group"] > [data-menu-group-heading] 与 button[role="menuitemradio"]。

卸载示例(README):

dsh plugin --profile desktop remove dsh-liao-models

典型用法

  1. 重启 DSH 后,在 Composer 打开模型菜单:先看到按厂商折叠的列表,原搜索框用来找厂商。
  2. 悬浮或点击目标厂商,在滑出的浮框里搜索或切换「全部厂商」,选中模型即写入「最近」。
  3. 在浮框或总览中对常用模型点星标置顶;进入整理,对长名称设别名,对不用的图像类等模型隐藏。
  4. 需要批量查看记录或改显示习惯时,打开 插件管理 → dsh-liao-models:调字号与密度、导出 JSON 备份,或从设置页直接打开「整理模型」浮框(若目录未就绪,README 提示需先在聊天中打开一次模型菜单)。

适用场景与注意

适合:长期在 DSH Composer 里切换多来源、多系列模型,希望菜单按厂商折叠、常用项前置,并能在本机持久化别名与隐藏列表的开发者。

注意:

  • 插件以当前 DSH 进程权限在客户端运行;安装前请自行阅读源码与 MIT 许可证(见仓库 LICENSE)。
  • 安装命令以 README 为准(github:oliblue-evan/dsh-liao-models),与 SkillHub 上的插件 slug dsh-model-organizer 并存时以文档命令为准。
  • 社区目录 SkillHub 为独立站点,与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,本插件仅增强 UI,不修改服务端模型目录。

结尾

dsh-model-organizer 把 Composer 模型菜单收成「厂商 + 侧滑浮框 + 总览整理」三层结构,在本机完成置顶、最近、搜索、别名与隐藏,并尽量把样式与监听器限制在模型菜单作用域内。更多细节与测试说明见 GitHub README;插件条目见 SkillHub 目录页与 GitHub 仓库。

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

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

Xiaoye