msyrain/ui-dsh-updater:DSH Web GUI 中的版本检测与一键升级

前言

用 dsh web 跑源码 checkout,或装 DeepSeek Harness 桌面版时,版本信息往往分散在 git tag、GitHub Release、安装包清单和应用内更新通道里。自己 git fetch 对照 tag、再查桌面 app-update.yml,既费事也容易在信息不全时误判「有更新」或「已是最新」。下面介绍的 msyrain/ui-dsh-updater(npm 包名 @deepseek-ai/dsh-client-ui-dsh-updater)把检测入口固定在 Web GUI 左侧边栏底部、设置上方,由主机半部拉齐当前版本与远端事实;在无法可靠判断时只提示「无法判断」,不谎报有更新。

这是什么

维护者 msyrain 在 SkillHub 分类为客户端的 DSH profile 插件。它打包成可直接安装的 DSH bundle:浏览器半部注册 sidebar.footer.action,弹出面板展示当前版本、最新版本与是否有更新;主机半部提供 GET /api/dsh-updater/status 与 POST /api/dsh-updater/update(挂在 connection 的传输中立鉴权 Fetch 通道上)。通过 cordis.patch.yml 声明 dsh.bundle.patch,另有 install.mjs 把同一行 patch 写入 profile 自己的 cordis.patch.yml,无需修改 DSH 仓库任何文件。

仓库:https://github.com/msyrain/ui-dsh-updater
目录页:https://www.skillhub.cn/plugins/msyrain/ui-dsh-updater
许可证:MIT(README / package.json)

核心功能

界面入口

侧边栏底部(设置之上)增加更新入口。面板显示「当前版本 / 最新版本 / 是否有更新」;在适用环境下支持一键升级。

两套 profile、两套版本逻辑

dsh web 与 DeepSeek Harness 桌面版使用独立 profile,各装一次:

dsh web(源码版) DeepSeek Harness 桌面版
当前版本来源 git tag / commit(或 .dsh-build 记录) 桌面安装包清单(app.asar/package.json 等)
最新版本来源 GitHub 仓库 桌面应用自己的发布通道
一键升级 可用 不适用(面板引导应用内更新)
改动生效 重启 dsh 服务;仅改浏览器半部时可刷新页面 重启桌面应用

桌面版当前版本读取顺序包括 DSH_CLIENT_VERSION、app.asar/package.json、desktop-runtime.json;最新版本来自 app-update.yml 与对应通道清单。

不误报

版本判定逻辑在主机半部(含 src/version.ts)。测试覆盖 semver 预发布排序、更新源清单解析,以及 decideUpdate 在各类「不能判断」分支下的行为:事实不全时界面不谎报「有更新」,也不谎报「已是最新」。

安装与启用

本插件是标准 profile 插件:安装器在目标 profile 里放置可被 DSH 解析的模块(默认是指向源码目录的 junction),并写入 profile 的 cordis.patch.yml,不修改 profile 的 package.json。

要求 Node >= 22(package.json engines)。命令均在插件目录(含 install.mjs 的目录)执行;源码可放在任意路径,安装器按 import.meta.url 推算包根,profile 内不保存源码绝对路径。

装到 dsh web

前提:dsh web 已至少跑过一次,%USERPROFILE%\.dsh\profiles\web 存在。自定义 DSH_HOME 时加 --dsh-home <路径>。

cd <插件目录>
node install.mjs

repoPath 未配置时,当前版本以 dsh 服务进程工作目录(启动 dsh web 的 checkout 根)为准;最新版本来自 GitHub。装完后重启一次 dsh 服务;之后仅改浏览器半部可 Ctrl+F5 刷新,改插件主机半部仍须重启宿主。

装到桌面版

前提:桌面版至少启动过一次(%USERPROFILE%\.dsh\profiles\desktop 由首次启动创建)。

cd <插件目录>
node install.mjs --profile desktop

装完或改完插件后重启 DeepSeek Harness。卸载:

node install.mjs --profile desktop --uninstall

另一种方式:dsh plugin add

在可用 dsh 命令的环境里,也可使用官方组合包安装(桌面版将 --profile web 改为 --profile desktop):

dsh plugin --profile web add "<插件目录>"

该方式经 pnpm 安装副本,下次启动才加入层栈,无 junction 的实时性。安装器与 dsh plugin add 二选一,同时使用会在层栈插入两条 ui-dsh-updater,安装器检测到已登记时会提醒。

联接与副本

默认 node install.mjs 在 profile 内建 junction,改源码目录后主机与浏览器半部随联接自动跟上。若使用 node install.mjs --copy,改源码后须同步:

node sync.mjs
node sync.mjs --check

开发建议默认联接模式。移动源码目录后重跑 node install.mjs 可重建联接。

验证

dsh --profile web --dump-config | Select-String ui-dsh-updater
Select-String -Path "$env:USERPROFILE\.dsh\profiles\web\cordis.patch.yml" -Pattern 'ui-dsh-updater'

应看到 - id: ui-dsh-updater 与 name: './ui-dsh-updater/lib/index.js'。随后刷新 dsh web 页面或重启桌面应用,确认设置上方出现更新入口。

卸载(联接/副本):node install.mjs --uninstall 或带 --profile desktop。组合包方式:dsh plugin --profile <web|desktop> remove @deepseek-ai/dsh-client-ui-dsh-updater。联接模式下勿用资源管理器递归删除 profile 内安装目录,以免误删源码树。

典型用法

  1. 在插件目录执行 node install.mjs(或桌面版加 --profile desktop),按上文重启宿主。
  2. 打开 DSH Web GUI,点侧边栏底部(设置上方)的更新入口,查看状态面板中的当前版本与最新版本。
  3. 源码版:若判定有更新且环境允许,可通过面板触发一键升级(对应 POST /api/dsh-updater/update;仓库随包分发 dsh-updater-run.ps1 作为升级脚本)。升级仍受本机 git 与网络约束。
  4. 桌面版:面板用于知晓版本与是否有新版本,实际升级走应用内更新流程。

改 src/ 后需在插件目录构建(仓库已附带预构建 lib/):

pnpm install --ignore-scripts
pnpm run build
pnpm run verify
pnpm test

适用场景与注意

适合长期在单一机器上维护 dsh web checkout、或希望桌面版也能在 GUI 里一眼看到版本与更新状态的用户。SkillHub 等社区目录与 DeepSeek / 幻方无官方从属关系,安装前请自行阅读仓库源码与 MIT 许可证。

插件主机半部以当前 dsh 进程权限运行;一键升级会调用 git 与脚本,安装前确认你信任维护者与本地 checkout 路径。repoPath 等配置若存在,以 profile / 插件文档为准。

联接模式下路径可含空格或中文;不要用 Windows PowerShell 5.1 手工 New-Item -ItemType Junction 建联接,以免非 ASCII 路径被错误转码。

结尾

msyrain/ui-dsh-updater 把 DSH 版本事实收敛到侧边栏一处:源码版对齐 GitHub,桌面版对齐应用发布通道,信息不足时明确「无法判断」。需要细节、构建与贡献约束时见仓库 README、CHANGELOG 与 CONTRIBUTING。

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

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

小夜