dsh-model-icons:在 DSH 模型选择器里显示厂商标识

前言

在 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\:

  1. 模型目录:源站页面中的 <script id="rustvy-catalog"> JSON,包含 model id、显示名、厂商及 logo 文件名,写入 catalog.json。目录每 24 小时自动刷新,也可在设置页按需刷新;冷启动最多等待 6 秒,过期目录会在后台刷新而界面仍用旧缓存。源站不可达时,磁盘缓存继续服务。
  2. Logo 文件:首次需要时从源站 /logos/<name>.svg 拉取,存到 logos\。

出站顺序与 harness 其它组件一致:先走进程内全局 dispatcher(例如已安装的 dsh-proxy-gui),再走 HTTPS_PROXY / ALL_PROXY / HTTP_PROXY 构建的连接器;NO_PROXY 在两种路径下均生效(实现见 lib/net.js)。

如何把一行模型对应到标识

按可见名称匹配,顺序为:

  1. 镜像目录中的 model id(如 claude-opus-5-5、abyss/glm-5.3);
  2. 显示名(如 OPUS 5.5);
  3. 标签以某 id 为前缀的最长匹配(适配皮肤在同一元素里追加说明文字的情况);
  4. 对目录中尚未出现的 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 插件组合;刷新页面亦可加载新客户端逻辑。

典型用法

  1. 在插件仓库根目录执行上述 install.ps1,确认 profile manifest 已包含 dsh-model-icons。
  2. 打开 DSH Web GUI,进入 Settings → Иконки моделей,确认总开关开启;需要时在页面上触发目录刷新。
  3. 在编写器打开模型菜单或输入 /model,检查各行是否出现与源站一致的厂商标识;若与其它皮肤并用,可保持「隐藏其它皮肤 logo」以避免重复。
  4. 若需指向自建或备用源站,在启动 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 目录页。

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

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

Xiaoye