前言¶
DeepSeek Harness(dsh)通过 npm 全局安装后,版本升级往往要自行查 registry、执行 npm install -g,再手动停掉旧进程并重新拉起 dsh web。对长期开着 Web 界面的开发者来说,这一步容易拖后,也可能在重启环节失手。
下面介绍社区插件 dsh-auto-update(npm 包名 @marvinlee2011/dsh-auto-update,仓库 lee-nihao2333/dsh-auto-update)。它在会话标题栏右上角提供「更新」按钮:仅在 registry 上确有更新时显示,点击后由当前用户执行全局安装并重启 dsh,新进程就绪后页面自动刷新。与静默自更新不同,是否升级完全由你点按钮决定。
这是什么¶
该插件属于 DSH 生态中的客户端类 bundle:Host 侧无构建步骤、无额外运行时依赖,仅在 Web profile 下向会话 UI 注入控件,并与内置 /api 共用同一套 Host/Origin 校验与浏览器认证。
维护者 GitHub 账号为 lee-nihao2333;源码与文档托管于上述仓库,npm 发布名为 @marvinlee2011/dsh-auto-update(当前资料记载版本 1.0.0),许可证 MIT。插件与 DeepSeek 官方无隶属关系。
核心功能¶
- 版本探测:读取 npm registry 上目标包的
dist-tags(默认latest),与当前磁盘上的dsh版本比较;无更新时不显示按钮。 - 一键升级:点击后在当前用户权限下执行
npm install --global,使用解析后的精确版本号(例如@deepseek-ai/dsh@x.y.z)。 - 安装后校验:安装完成后重新读取
package.json核对版本;不一致则不重启并报错。 - 受控重启:通过独立脚本等待当前进程退出,再以相同 node、启动脚本、参数与工作目录拉起
dsh;当前进程经appExit优雅退出。 - 周期检查:默认启动时检查一次,之后每 30 分钟检查一次;页面约每 60 秒读取一次 Host 状态。检查只读 packument,不改动磁盘。
- 失败可重试:安装失败时按钮变为「重试更新」;安装成功但重启未完成时显示「重启」,可单独重试。
对外暴露三个经认证的路由:GET /dsh-auto-update/status、POST /dsh-auto-update/apply、POST /dsh-auto-update/restart。页面侧无法指定包名、版本或 shell 命令。
安装与启用¶
环境要求(来自插件 engines):
dsh:>=0.2.1-rc.2且<0.3.0- Node.js:
^22.19.0 || >=24.0.0 - 当前用户对 npm 全局前缀具备写权限(升级动作为
npm install --global)
方式一:插件管理器(推荐)¶
- 打开 DSH Web → 设置 → 插件。
- 点击 安装第三方插件,输入包名
@marvinlee2011/dsh-auto-update并确认。 - 插件出现在列表中并启用后,刷新页面。
插件管理器会同时将包装进 profile、把 bundle 加入启动列表并启用。
方式二:命令行¶
先安装依赖:
dsh plugin --profile web add @marvinlee2011/dsh-auto-update
再把包名加入 profile 启动列表 ~/.dsh/profiles/web/package.json 中的 dsh.profile.bundles:
{
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"@marvinlee2011/dsh-auto-update"
]
}
}
}
然后重启 dsh web。注意:dsh plugin add 只安装依赖,不会自动把 bundle 写入启动列表;漏配时启动日志会提示 bundle 未启动。
典型用法¶
- 打开任意会话,在标题栏右上角工具区最右侧查看是否出现「更新」(英文界面为 “Update”)。
- 悬停按钮可看到「当前版本 → 目标版本」。
- 点击后状态依次为「正在更新…」「正在重启…」,随后页面自动刷新。
按钮出现条件:registry 上 distTag 指向的版本高于本机;或上次安装成功但重启尚未完成(此时显示「重启」)。
配置¶
在 profile 的 cordis.patch.yml 中覆盖插件行,修改后需重启 dsh(或在插件管理器中重载插件):
- id: dsh-auto-update
name: '@marvinlee2011/dsh-auto-update'
config:
packageName: '@deepseek-ai/dsh' # 要升级的包
distTag: latest # 比较的 dist-tag
registry: '' # 空 = 沿用 npm 自身的 registry 配置
checkIntervalMinutes: 30 # 自动检查间隔,1–1440
常见调整:
- 跟进预发布:将
distTag改为next或alpha(视目标包实际标签而定)。 - 降低检查频率:增大
checkIntervalMinutes;打开页面仍会反映当前状态。 - 镜像或私有源:
registry留空时插件执行npm config get registry,也可写死地址。
调整 distTag 后,点击「更新」会按该标签当时解析出的精确版本安装。
适用场景与注意¶
适合谁:经常在浏览器里用 DSH Web、希望 registry 有新版本时能一眼看到、并愿意在确认后让本机全局 dsh 升级的用户。
务必注意:
- 插件以当前
dsh进程的 Node 用户身份执行全局 npm 安装与重启脚本。安装前建议在 GitHub 阅读源码与 MIT 许可证,确认行为符合你的环境策略。 - 只在 Web profile 生效;CLI 或其它 profile 不会出现该按钮。
- 不会静默升级;无更新时界面无额外提示,属预期行为。
- 诊断文件位于
<DSH_HOME>/cache/dsh-auto-update/:state.json(最近检查与阶段)、restart.log(重启脚本输出)、restart.json(最近重启记录)。
右上角没有按钮时,可按 README 排查:当前 latest 是否等于已装版本(可用 npm view @deepseek-ai/dsh dist-tags 核对)、是否已打开会话、页面是否已加载插件(可刷新)。预发布在 next/alpha 时需改 distTag。
卸载¶
在插件管理器中停用或移除;或执行:
dsh plugin --profile web remove @marvinlee2011/dsh-auto-update
并从 dsh.profile.bundles 中删除 @marvinlee2011/dsh-auto-update,重启 dsh web。
结尾¶
dsh-auto-update 把「查 registry → 全局安装 → 重启进程 → 刷新页面」收成标题栏上的一个显式操作,默认只跟 latest,也可通过 cordis.patch.yml 改包名、dist-tag 与检查间隔。社区插件目录页:skillhub.cn/plugins/lee-nihao2333/dsh-auto-update;源码与完整 FAQ:github.com/lee-nihao2333/dsh-auto-update。