Перейти к основному содержимому
H

dsh-model-shelf

hobartoakes/dsh-model-shelf

Replaces the chat model picker with a collapsible provider-grouped list (640x720 max) that shows each model name, provider name, provider ID and exact model ID, plus a manually managed uncommon list and a separate favorites list. Classification is user-driven only: no usage tracking and no auto-sorting. Search covers model name, model ID, provider name, provider ID and account notes.

Установка

dsh plugin --profile web add github:hobartoakes/dsh-model-shelf

README

模型书架 · DSH Model Shelf

更大的模型选择面板、可折叠的服务商分组,以及完全由用户手动整理的“不常用”列表。

作者:Hobartoakes · 许可证:MIT · 问题反馈

源码采用 MIT 公开。预构建安装包见 GitHub Release。本项目尚未发布 npm,也未被 dsh-market 收录。

最新发布 v1.2.0:思考强度就地检测、恢复服务商默认,以及(对打了 CTXPATCH 补丁的 dsh-workbuddy-connect)逐模型上下文容量。上一个版本 v1.1.1 修复了界面文字无法拖选复制的问题。

演示

以下截图来自离线测试页面,所有服务商、模型名称和 ID 均为演示数据,不包含真实对话、密钥或本机配置。

主列表:完整身份与服务商分组

主列表:模型名称、服务商和模型 ID

不常用列表:手动移入,随时移回

不常用列表:独立管理且可移回主列表

深色主题

深色主题下的增强选择器

收藏列表:手动标记常用模型

收藏列表:手动收藏,独立于主列表与不常用分类

功能

  • 选择面板最大宽度 640px、最大高度 720px,窗口较小时自动收缩。
  • 按服务商分组,支持单独折叠、全部展开和全部折叠。
  • 主列表 / 不常用两个分类,外加独立的收藏列表。首次使用时所有模型均在主列表,收藏为空。
  • 点击“☆ 收藏 / ★ 已收藏”手动收藏或取消;收藏是快捷入口,不改变主列表 / 不常用分类。
  • 服务商分组支持账号备注,例如“工作账号 / 个人账号 / 备用账号”;按服务商配置 ID 分开保存,在模型行、当前模型按钮和搜索中显示。
  • 分类仅由你决定:点击“移至不常用”或“移回主列表”。不统计使用频率,不自动分类。
  • 移动分类不会选择模型、删除 API 配置或影响其他服务商的同名模型。
  • 每款模型显示模型名称、服务商名称、服务商 ID 和精确模型 ID。
  • 以 (provider ID, model ID) 区分模型;不同服务商的同名模型互不影响。
  • 支持搜索模型名称、模型 ID、服务商名称、服务商 ID 和账号备注;搜索作用于当前列表。
  • 搜索临时展开匹配分组,不改变原折叠状态。
  • 沿用 DSH 原生模型切换和思考强度选项,保留会话锁定与失败提示。
  • 思考强度可随时恢复服务商默认;未声明档位的模型若装了 dsh-workbuddy-connect,可在面板内就地检测档位,并在档位旁标注来源(1.2.0)。
  • 逐模型上下文容量:对打了 CTXPATCH 补丁的 dsh-workbuddy-connect,面板底部按模型选择 300K / 1M 等它声明的容量,并显示“当前生效”;未打补丁时该控件不出现(1.2.0)。
  • 适配宿主浅色 / 深色主题,支持键盘操作。

模型 ID 是服务商目录提供的调用标识。若中转 API 将该标识映射到其他上游模型,插件无法验证实际上游身份,不会猜测或额外标注未经验证的模型厂商。

兼容性

项目已验证范围
DSH 宿主0.2.0-rc.2,元数据暂限定这一版本
实际环境Windows 桌面版 DSH 的现有 Web GUI
浏览器回归测试本机 Microsoft Edge;浅色、深色和窄窗口
必需服务内置 modelDirectories、sessions、remote.session 和 UI slots
替换位置conversation.input.model,priority -100
可选依赖dsh-workbuddy-connect(1.2.0 的思考强度检测与逐模型容量)。未安装、未登录、路由不可达,或未打 CTXPATCH 补丁时,对应控件不显示,其余功能不受影响

尚未验证其他 DSH 版本、macOS 或 Linux。不要绕过宿主的兼容性检查。同一插槽上的其他增强插件可能与本插件竞争;遇到重复界面或未生效时,先关闭其中一个插件。

安装与卸载

无需 npm 账号,直接安装 GitHub Release 的预构建包:

dsh plugin --profile desktop add "https://github.com/Hobartoakes/dsh-model-shelf/releases/download/v1.2.0/dsh-model-shelf-1.2.0.tgz" --ignore-scripts

如果 CLI 下载受网络限制,可先从 Release 页面下载归档,再使用本地路径(将路径替换为实际归档位置):

dsh plugin --profile desktop add "C:/path/to/dsh-model-shelf-1.2.0.tgz" --ignore-scripts

安装后刷新现有 DSH 页面。内置模型选择器保持加载;禁用或卸载本插件后恢复内置选择器。

dsh plugin --profile desktop remove dsh-model-shelf

归档包含预构建文件,不需要在用户机器上运行安装构建脚本。插件不会修改应用安装包。

早期本地原型名称为 dsh-model-organizer。两者占用相同选择器插槽,不建议同时启用;从原型迁移时,先禁用旧插件,再安装新插件。同一浏览器 origin 下首次读取新偏好时,会导入旧原型偏好,且不会删除旧键。已有新偏好时不会覆盖。

使用

  1. 点击输入框当前模型按钮。
  2. 在主列表找到模型,点击右侧“移至不常用”,将该款模型移到独立列表。
  3. 切换“不常用”标签页,仍可选择其中的模型,或点击“移回主列表”。
  4. 点击服务商标题折叠分组,或使用“全部展开 / 全部折叠”。
  5. 点击模型旁的“☆ 收藏”,之后可在“收藏”标签页快速使用。
  6. 搜索结果只来自当前列表;未找到时可切换另一列表继续搜索。

当前模型属于不常用列表时,再次打开选择器会自动打开该列表,但不会改变其分类。

收藏与账号备注(1.1.0)

  • 在任一列表点击模型旁的“☆ 收藏”,再打开“收藏”标签页使用;取消收藏不删除模型,也不改变原分类。
  • 点击服务商标题旁的“账号备注”,输入备注并保存。Enter 保存,Escape 或“取消”放弃编辑,清空后保存可删除备注。
  • 同一 API 配置的所有模型共用该账号备注。请勿把 API 密钥、密码或令牌填入备注;备注只在当前浏览器保存。
  • 插件不会自动读取或验证这个配置实际登录了哪个账号;备注只是你手动贴的标签。
为什么同平台的多个账号要各自建一个 API 配置

插件按服务商配置 ID(每行显示的 服务商 ID:xxx)保存备注,相当于给每个“抽屉”贴标签:

做法结果
只建一个平台配置,在里面换着用两个 Key❌ 插件只看到一个 ID,只能贴一个备注,无法区分
建两个配置(如“工作”“个人”),各填各的 Key✅ 两个 ID,可分别备注,模型列表也会分成两组

判断方法:打开选择器看 服务商 ID。若两个账号显示的 ID 相同,说明它们在 DSH 里是同一个配置,需要到宿主的 API 服务商配置里再新增一条。新增后即使两个分组的模型一样,也能分别备注。

思考强度:检测与恢复默认(1.2.0)

Dsh 的思考强度由模型目录声明。WorkBuddy 线路的 deepseek-v4.1-* 等模型不声明档位:档位只能由 dsh-workbuddy-connect 向上游探测得出。过去的体验是分裂的——档位要在这个插件的下拉里选,能不能测出来却要在另一个插件的气泡里点。

  • 就地检测:当某模型没有声明档位、且 WorkBuddy 把它列为待检测对象时,面板底部会出现「检测思考强度」。点击后先显示确认(探测会向上游发送请求),确认后由 WorkBuddy 完成探测;成功后面板随即出现档位下拉,并在旁边标注「已探测」。
  • 恢复服务商默认:当前模型被固定过档位时,面板底部出现「恢复服务商默认」。它按“不下发 reasoningEffort”恢复为服务商默认,而不是把档位写死成某个值;模型不声明档位时同样可用(此时下拉根本不存在,只能靠这个按钮解除固定)。
  • 已检测但面板没更新:显示「已探测到档位:…(模型面板尚未更新)」和「刷新档位」,不会伪造一个上游并不接受的档位。
  • WorkBuddy 没装 / 没登录 / 探测不可用:不显示检测入口,其余功能完全不受影响。若已登录但该模型被判定为“接受任意档位取值”,面板会说明因此不提供档位选择。
  • 面板只读取 WorkBuddy 的同源只读状态路由并用它自己的进程密钥发起操作;检测与容量写入都由 WorkBuddy 在宿主侧完成,授权、限流与“仅本机 + 密钥”校验一律不绕过。状态读取按服务商缓存 60 秒,避免每次打开面板都触发它的额度查询。详见 跨插件契约。

逐模型上下文容量(1.2.0,需要宿主补丁)

WorkBuddy 原本只有一个全局开关(“使用最大上下文窗口”),一开就让该线路所有模型都跑到最大窗口,不能单独把某个模型留在小窗口。想让“逐模型”真正生效,只能改它自己——所以配了一个独立工程 dsh-workbuddy-connect-patch(node patch.mjs --install):它给该插件的目录行加一张按模型 id 的容量覆盖表,并新增一个控制动作与状态字段,安装为本地 file: 包。

  • 打上之后:面板底部出现「上下文容量」,列出该模型声明的每个容量(如 300K / 1M),旁边显示“当前生效”;选「服务商默认」即可解除固定。
  • 容量是按模型存的(~/.dsh/.workbuddy-ai-context.json),换账号也不丢;一个模型固定在 300K 不影响其他模型继续用 1M。
  • 没打补丁:状态文档里没有 contextWindowPatch,模型书架直接不显示这个控件,其余功能完全不变——补丁的缺失只会让功能消失,不会让面板出错。
  • 上游每次发版后需要重跑补丁脚本;脚本的每一处替换都要求唯一命中,上游改动会让它报错而不是改错地方。

键盘

  • 搜索框中的 ↑ / ↓:高亮结果;Enter:选择模型。
  • Tab / Shift+Tab:在面板控件间移动。
  • Escape:关闭面板并返回模型按钮;在备注输入框中则只放弃备注编辑,不关闭面板。

数据保存与隐私

  • 分类、收藏、账号备注和折叠偏好保存在当前浏览器的 localStorage,键名为 dsh-model-shelf.preferences.v1。
  • 保存模型身份、收藏、折叠分组及用户输入的账号备注,不自动读取或保存 API 密钥、对话内容或调用记录。
  • 同一浏览器、同一 origin 的窗口共享偏好,刷新后保留。
  • 更换浏览器、设备、访问域名或端口后,不保证共享同一份偏好;清除站点数据会重置。
  • 目前不跨设备同步,也不纳入 DSH profile 备份。
  • 浏览器存储不可用时显示警告,当前页面仍可操作,但刷新后可能丢失偏好。
  • 卸载不主动清空浏览器偏好,便于重装后恢复。
  • 不发起任何外部网络请求;除宿主已有的模型目录与切换接口外,仅在已安装 dsh-workbuddy-connect 且当前模型属于它时,向该插件在本机监听的同源路由读取思考强度与容量状态,并在你确认后请它发起探测或写入你选择的容量。插件不读取该插件的私有文件,也不代它绕过授权。

详见 隐私说明。

开发与测试

pnpm install --frozen-lockfile
pnpm run build
pnpm test
pnpm run test:browser
pnpm pack --pack-destination dist-draft

test:browser 使用离线 HTML 和模拟目录,不启动 DSH 服务器,也不发起真实模型调用。Windows 默认使用已安装的 Edge;其他平台默认尝试已安装的 Chrome。可通过 DSH_TEST_BROWSER_EXECUTABLE 指定浏览器程序路径;若当前环境不允许由测试自行拉起浏览器,可用 DSH_TEST_CDP_URL=http://127.0.0.1:9222 挂到已用 --remote-debugging-port 启动的浏览器上运行同一套检查。其他平台运行测试不等于已验证其 DSH 宿主集成。

另有显式执行的 pnpm run test:clean-profile,在 Windows 上用独立 DSH_HOME 和随机本地端口启动临时测试宿主,验证安装 / 禁用 / 重新启用 / 卸载;不替换当前 GUI,结束后停止测试进程。详见 验证报告。

React、ReactDOM 和 playwright-core 仅用于开发测试。插件运行时复用 DSH 的 React,不附带第二份 React。

构建是显式步骤,不设置安装期构建钩子。发布前必须重新构建、运行测试,并检查归档内容。

发布状态

  • 作者:Hobartoakes。
  • GitHub 仓库:Hobartoakes/dsh-model-shelf。
  • 许可证:MIT,详见 LICENSE。
  • npm 包名:dsh-model-shelf,首次发布前查询可用性,查询不等于预留。
  • GitHub Release:v1.2.0 预构建安装包,不需要 npm 注册或登录,含思考强度就地检测、恢复服务商默认与逐模型上下文容量;v1.1.1 修复了界面文字无法拖选复制的问题;v1.1.0 含收藏与账号备注;v1.0.0 为不含这两项功能的历史版本。
  • npm:本项目尚未发布,请勿将裸包名当作可用安装来源。
  • dsh-market:尚未提交收录 PR;发布 Release 不代表已经收录。

发布检查清单 · 版本记录

执行 pnpm run check:release 检查发布文件。维护者实际发布前仍需确认授权、npm 登录身份、包名 / 版本可用性及归档内容;发布检查本身不执行上传。干净 profile 的集成验证记录见 验证报告。

English summary

A wide, collapsible model picker for DSH, with Main and Uncommon lists plus a separate Favorites list. Users explicitly move models between lists; no automatic usage-based classification is performed. Each row shows the provider name, provider ID, model name and model ID. Per-provider account notes let you label multiple API accounts on the same platform, saved by provider configuration ID. Preferences are stored in the current browser only; no cross-device synchronization is implemented.

Author: Hobartoakes. Licensed under MIT. Tested with DSH 0.2.0-rc.2 on Windows and Microsoft Edge. Other host versions/platforms are unverified. Prebuilt packages are distributed through GitHub Releases; no npm account is needed to install them. This project has not been published to npm. Market listing is a separate process and has not been submitted.

Похожие плагины