前言¶
在 DeepSeek Harness(DSH)的 Web GUI 里切换模型时,列表往往只有模型 id 或显示名,缺少和厂商控制台一致的视觉标识。自己给每个模型贴图标既难维护,也容易和上游目录脱节。dsh-model-icons 是社区维护的客户端插件,把提供方站点上的模型目录与 logo 镜像到本机 loopback,再用与提供方控制台相同的方式(CSS mask + currentColor)画在编写器模型菜单、模型按钮和 /model 弹层里,让同一套单色标识适配 hover、选中、禁用等状态,而无需为每种配色准备多份图片。
这是什么¶
- 名称:dsh-model-icons(GitHub:koliy82/dsh-model-icons)
- 维护者:koliy82
- 分类:客户端(
dsh.client.platform: web) - 版本:package.json 标明 1.0.0,MIT 许可,要求 Node.js >= 20
插件不内嵌任何图片。主机侧从可配置的源站(默认 https://rustvy.xyz)拉取公开数据并写入 profile 缓存;浏览器侧只向本机 harness 注册的 HTTP 路由请求标识,因此即使浏览器无法直连源站,只要 DSH 进程能出站,页面仍可显示图标。
会出现标识的界面¶
| 位置 | 表现 |
|---|---|
| 编写器模型菜单 | 每一行模型前 16 px 单色标识 |
| 编写器当前模型按钮 | 选中模型名称前 14 px 标识(可在设置中关闭) |
/model 命令弹层 |
各行同样标识 |
使用 dsh-claude-style 等重绘选择器的皮肤 |
仍显示本插件标识;默认会隐藏皮肤自带 lockup,避免同一行两套 logo |
effort 行、提供商标题、菜单根单元格、搜索框和目录失败行不会匹配标识,保持无图标。
数据从哪来、如何缓存¶
镜像两类公开资源到 <profile>\.dsh-model-icons\:
- 模型目录:源站页面中的
<script id="rustvy-catalog">JSON,包含 model id、显示名、厂商及 logo 文件名,写入catalog.json。目录每 24 小时自动刷新,也可在设置页按需刷新;冷启动最多等待 6 秒,过期目录会在后台刷新而界面仍用旧缓存。源站不可达时,磁盘缓存继续服务。 - Logo 文件:首次需要时从源站
/logos/<name>.svg拉取,存到logos\。
出站顺序与 harness 其它组件一致:先走进程内全局 dispatcher(例如已安装的 dsh-proxy-gui),再走 HTTPS_PROXY / ALL_PROXY / HTTP_PROXY 构建的连接器;NO_PROXY 在两种路径下均生效(实现见 lib/net.js)。
如何把一行模型对应到标识¶
按可见名称匹配,顺序为:
- 镜像目录中的 model id(如
claude-opus-5-5、abyss/glm-5.3); - 显示名(如
OPUS 5.5); - 标签以某 id 为前缀的最长匹配(适配皮肤在同一元素里追加说明文字的情况);
- 对目录中尚未出现的 id,按前缀规则推断厂商(如
claude-*→ Anthropic,gpt-*/o1–o9→ OpenAI,deepseek-*→ DeepSeek 等,详见 README)。
无匹配则不显示图标(不猜测)。有厂商但 logo 拉取失败时,用厂商首字母 monogram 代替,避免 mask 404 变成实心方块。
本机 HTTP 路由¶
插件在 harness 自带 Web 服务器上注册前缀路由;每条路由自行校验仅 loopback、合法 Host、Sec-Fetch-Site 与 Origin。
| 路由 | 方法 | 作用 |
|---|---|---|
/dsh-model-icons/catalog.json |
GET | 返回镜像目录及浏览器绘制所需设置 |
/dsh-model-icons/logo/<name>.svg |
GET, HEAD | 返回缓存的 svg;源站无则 404;文件名须符合 [A-Za-z0-9._-]+.svg 否则 400 |
/dsh-model-icons/state |
GET | 设置页用的镜像状态(版本、模型数、缓存 logo 数、代理信息等) |
/dsh-model-icons/refresh |
POST | 重新拉目录并预热全部 logo |
/dsh-model-icons/config |
POST | 写设置,不触网 |
设置与配置¶
GUI:Settings → Иконки моделей(界面文案为俄文,含义如下)
| 开关 | 默认 | 含义 |
|---|---|---|
| Показывать иконки моделей | 开 | 总开关;关则移除所有标识 |
| Иконка в кнопке выбранной модели | 开 | 是否在编写器模型按钮上显示标识 |
| Прятать логотипы других скинов | 开 | 在本插件已标记的行上隐藏其它皮肤的 lockup |
持久化路径:<profile>\.dsh-model-icons\config.json。另有字段 size(10–32 px,默认 16)控制标识尺寸。
环境变量可覆盖行为,便于部署:
DSH_MODEL_ICONS_ORIGIN:镜像源(默认https://rustvy.xyz)DSH_MODEL_ICONS_DISABLED=1:挂载插件但不生效
安装与卸载¶
官方安装方式为 PowerShell 脚本,将包复制到 profile 的 node_modules 并写入 manifest 的 dsh.profile.bundles;运行中的 harness 会感知 manifest 变化。
pwsh -File .\install.ps1
卸载:从 dsh.profile.bundles 移除包名,删除 <profile>\node_modules\dsh-model-icons;若需清空缓存,再删除 <profile>\.dsh-model-icons。
说明:社区目录页为 skillhub.cn 上的 koliy82/dsh-model-icons,与 DeepSeek / 幻方无官方从属关系;安装前请自行审阅源码与 MIT 许可证。插件以当前 DSH 进程权限出站拉取目录与 svg,并仅在 loopback 上对 GUI 提供资源。
热更新¶
主机侧通过 lib/live.js 与约 1 秒轮询 lib 目录实现自重载(方式类似 dsh-proxy-gui),一般无需重启 harness。浏览器侧依赖 harness 的 live 插件组合;刷新页面亦可加载新客户端逻辑。
典型用法¶
- 在插件仓库根目录执行上述
install.ps1,确认 profile manifest 已包含dsh-model-icons。 - 打开 DSH Web GUI,进入 Settings → Иконки моделей,确认总开关开启;需要时在页面上触发目录刷新。
- 在编写器打开模型菜单或输入
/model,检查各行是否出现与源站一致的厂商标识;若与其它皮肤并用,可保持「隐藏其它皮肤 logo」以避免重复。 - 若需指向自建或备用源站,在启动 harness 前设置
DSH_MODEL_ICONS_ORIGIN;临时禁用显示可设DSH_MODEL_ICONS_DISABLED=1。
仓库提供的探针(不依赖正在运行的应用):
node _probe\model-icons-host-test.mjs
node _probe\dom-test\model-icons-client-test.mjs
适用场景与注意¶
适合长期在 DSH Web GUI 中切换多厂商模型、希望选择与提供方控制台一致标识的开发者。依赖源站公开的 catalog 与 /logos/*.svg 布局;源站结构或命名变化可能影响匹配,未匹配行会故意留空而非显示错误图标。
注意:镜像与缓存写在 profile 目录;代理、出站策略与 harness 主进程一致。若完全离线且尚无缓存,标识可能缺失直至网络恢复。与 dsh-claude-style 等皮肤同时使用时,建议保留默认的「隐藏其它皮肤 lockup」以免视觉冲突。
结尾¶
dsh-model-icons 用「镜像 + loopback + CSS mask」把提供方模型目录里的厂商标识搬进 DSH 模型选择器,并覆盖菜单、当前模型按钮与 /model 弹层。安装以 README 中的 install.ps1 为准;更多细节见 GitHub 仓库 与 SkillHub 目录页。