模型书架 · DSH Model Shelf
更大的模型选择面板、可折叠的服务商分组,以及完全由用户手动整理的“不常用”列表。
作者:Hobartoakes · 许可证:MIT · 问题反馈
源码采用 MIT 公开。预构建安装包见 GitHub Release v1.0.0。本项目尚未发布 npm,也未被 dsh-market 收录。
当前工作副本为 1.1.0 候选版(尚未发布),新增收藏与账号备注。下面的公开 Release 链接仍指向 1.0.0,旧版不包含这两项新增功能。
演示
以下截图来自离线测试页面,所有服务商、模型名称和 ID 均为演示数据,不包含真实对话、密钥或本机配置。
主列表:完整身份与服务商分组

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

深色主题

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

功能
- 选择面板最大宽度 640px、最大高度 720px,窗口较小时自动收缩。
- 按服务商分组,支持单独折叠、全部展开和全部折叠。
- 主列表 / 不常用两个分类,外加独立的收藏列表。首次使用时所有模型均在主列表,收藏为空。
- 点击“☆ 收藏 / ★ 已收藏”手动收藏或取消;收藏是快捷入口,不改变主列表 / 不常用分类。
- 服务商分组支持账号备注,例如“工作账号 / 个人账号 / 备用账号”;按服务商配置 ID 分开保存,在模型行、当前模型按钮和搜索中显示。
- 分类仅由你决定:点击“移至不常用”或“移回主列表”。不统计使用频率,不自动分类。
- 移动分类不会选择模型、删除 API 配置或影响其他服务商的同名模型。
- 每款模型显示模型名称、服务商名称、服务商 ID 和精确模型 ID。
- 以
(provider ID, model ID)区分模型;不同服务商的同名模型互不影响。 - 支持搜索模型名称、模型 ID、服务商名称、服务商 ID 和账号备注;搜索作用于当前列表。
- 搜索临时展开匹配分组,不改变原折叠状态。
- 沿用 DSH 原生模型切换和思考强度选项,保留会话锁定与失败提示。
- 适配宿主浅色 / 深色主题,支持键盘操作。
模型 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 版本、macOS 或 Linux。不要绕过宿主的兼容性检查。同一插槽上的其他增强插件可能与本插件竞争;遇到重复界面或未生效时,先关闭其中一个插件。
安装与卸载
无需 npm 账号,直接安装 GitHub Release 的预构建包:
dsh plugin --profile desktop add "https://github.com/Hobartoakes/dsh-model-shelf/releases/download/v1.0.0/dsh-model-shelf-1.0.0.tgz" --ignore-scripts
如果 CLI 下载受网络限制,可先从 Release 页面下载归档,再使用本地路径(将路径替换为实际归档位置):
dsh plugin --profile desktop add "C:/path/to/dsh-model-shelf-1.0.0.tgz" --ignore-scripts
安装后刷新现有 DSH 页面。内置模型选择器保持加载;禁用或卸载本插件后恢复内置选择器。
dsh plugin --profile desktop remove dsh-model-shelf
归档包含预构建文件,不需要在用户机器上运行安装构建脚本。插件不会修改应用安装包。
早期本地原型名称为 dsh-model-organizer。两者占用相同选择器插槽,不建议同时启用;从原型迁移时,先禁用旧插件,再安装新插件。同一浏览器 origin 下首次读取新偏好时,会导入旧原型偏好,且不会删除旧键。已有新偏好时不会覆盖。
使用
- 点击输入框当前模型按钮。
- 在主列表找到模型,点击右侧“移至不常用”,将该款模型移到独立列表。
- 切换“不常用”标签页,仍可选择其中的模型,或点击“移回主列表”。
- 点击服务商标题折叠分组,或使用“全部展开 / 全部折叠”。
- 点击模型旁的“☆ 收藏”,之后可在“收藏”标签页快速使用。
- 搜索结果只来自当前列表;未找到时可切换另一列表继续搜索。
当前模型属于不常用列表时,再次打开选择器会自动打开该列表,但不会改变其分类。
收藏与账号备注(1.1.0)
- 在任一列表点击模型旁的“☆ 收藏”,再打开“收藏”标签页使用;取消收藏不删除模型,也不改变原分类。
- 点击服务商标题旁的“账号备注”,输入备注并保存。Enter 保存,Escape 或“取消”放弃编辑,清空后保存可删除备注。
- 同一 API 配置的所有模型共用该账号备注。请勿把 API 密钥、密码或令牌填入备注;备注只在当前浏览器保存。
- 插件不会自动读取或验证这个配置实际登录了哪个账号;备注只是你手动贴的标签。
为什么同平台的多个账号要各自建一个 API 配置
插件按服务商配置 ID(每行显示的 服务商 ID:xxx)保存备注,相当于给每个“抽屉”贴标签:
| 做法 | 结果 |
|---|---|
| 只建一个平台配置,在里面换着用两个 Key | ❌ 插件只看到一个 ID,只能贴一个备注,无法区分 |
| 建两个配置(如“工作”“个人”),各填各的 Key | ✅ 两个 ID,可分别备注,模型列表也会分成两组 |
判断方法:打开选择器看 服务商 ID。若两个账号显示的 ID 相同,说明它们在 DSH 里是同一个配置,需要到宿主的 API 服务商配置里再新增一条。新增后即使两个分组的模型一样,也能分别备注。
键盘
- 搜索框中的 ↑ / ↓:高亮结果;Enter:选择模型。
- Tab / Shift+Tab:在面板控件间移动。
- Escape:关闭面板并返回模型按钮;在备注输入框中则只放弃备注编辑,不关闭面板。
数据保存与隐私
- 分类、收藏、账号备注和折叠偏好保存在当前浏览器的
localStorage,键名为dsh-model-shelf.preferences.v1。 - 保存模型身份、收藏、折叠分组及用户输入的账号备注,不自动读取或保存 API 密钥、对话内容或调用记录。
- 同一浏览器、同一 origin 的窗口共享偏好,刷新后保留。
- 更换浏览器、设备、访问域名或端口后,不保证共享同一份偏好;清除站点数据会重置。
- 目前不跨设备同步,也不纳入 DSH profile 备份。
- 浏览器存储不可用时显示警告,当前页面仍可操作,但刷新后可能丢失偏好。
- 卸载不主动清空浏览器偏好,便于重装后恢复。
- 插件不新增外部网络请求;模型目录及切换沿用宿主已有接口,实际模型调用仍受宿主与服务商配置约束。
详见 隐私说明。
开发与测试
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 宿主集成。
另有显式执行的 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.0.0 预构建安装包,不需要 npm 注册或登录。当前源码 main 分支为 1.1.0 候选版,尚未发布安装包,因此 Release 页面暂无 1.1.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.
No comments yet. Be the first to write one.