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