前言¶
如果你以 git checkout 方式运行 DeepSeek Harness(DSH),例如在 checkout 目录中执行 pnpm dsh web,升级时通常需要手工执行 git pull、pnpm install、pnpm clean、pnpm build:official,然后再重启服务;如果更新失败,还要手工处理旧版本。
DSH 的理念是「一切皆插件」。下面介绍 dsh-self-update:它是 Shane-Jay 维护的一个 DSH 插件,采用 MIT 许可,面向 DeepSeek Harness 的 git-source installs,提供应用内检查、一键更新、回滚和重启能力,并可选原生 macOS shell。
这是什么¶
dsh-self-update 是一个用于 DeepSeek Harness git checkout 安装的应用内自更新插件。
它解决的核心问题是:让 git-source 安装的 DSH 在应用内完成版本检查、更新、失败回滚和服务重启,而不是完全依赖手工命令。
它只适用于 DeepSeek Harness 的 git checkout 安装场景。如果通过 npm i -g @deepseek-ai/dsh 安装 DSH,插件会隐藏自身,不适用于该安装方式。
核心功能¶
- 后台默认每 6 小时检查一次新版本,也支持从设置页或 macOS 菜单栏按需检查。
- 有新版本时,在侧边栏显示
new version入口;打开更新面板可查看版本对比和即将执行的命令。 - 一键执行以下更新步骤,并按步骤显示进度:
git pull --ff-only
pnpm install
pnpm clean
pnpm build:official
- 拒绝改动 dirty working tree,不会丢弃本地修改。
- 对分叉 checkout 提供 guided exit:将本地独有提交保存到
local-backup-<timestamp>分支,再将工作树硬重置到远程后继续更新。 - 更新步骤失败时支持一键回滚,并提供 CLI 回退命令。
- 通过进程退出码
75请求服务重启,可配合 systemd、PM2 或 macOS shell 重新拉起。 - 可选原生 macOS shell:菜单中触发
Check for Updates…,并在进程退出码75时自动重新拉起服务。 - 对 npm 全局安装场景隐藏自身,不适用于
npm i -g @deepseek-ai/dsh。
安装与启用¶
在 DeepSeek Harness 的 git checkout 中执行:
cd <your-deepseek-harness-checkout>
pnpm dsh plugin --profile web add dsh-self-update
安装后重启一次 dsh service。
插件默认使用进程工作目录作为 harness checkout;如果实际 checkout 路径不同,可用 plugin config repoRoot 覆盖。
典型用法¶
按需检查¶
后台默认每 6 小时检查一次新版本。
也可以从设置页或 macOS 菜单栏按需检查。当检测到新版本时,侧边栏会出现 new version 入口,点击后打开更新面板,面板会展示版本对比和即将执行的命令。
重启服务¶
插件通过进程退出码 75 表达“请重启”。运行方需要按自身方式处理这个退出码。
常见运行方式可以这样配置:
- systemd:配置
RestartForceExitStatus=75 - PM2:配置
autorestart: true - bare terminal:再次运行
pnpm dsh web - macOS shell:内置处理退出码
75并重新拉起服务
CLI 回滚¶
当更新失败或需要回退时,可以使用 CLI 回退命令:
node scripts/rollback-harness.mjs
如果明确要回滚到某个 commit:
node scripts/rollback-harness.mjs --sha <commit>
macOS shell¶
构建 macOS app:
node macapp/build-mac-app.mjs
输出位置为:
~/Applications/DSH.app
构建需要 Xcode command line tools。首次启动可右键选择 Open;应用为 ad-hoc signed,not notarized。
打开更新面板¶
也可以通过在 window 上派发事件打开面板:
window.dispatchEvent(new Event('dsh-self-update:open'))
如果需要立即检查,可在 detail 中设置 { check: true }:
window.dispatchEvent(new Event('dsh-self-update:open', { detail: { check: true } }))
HTTP 写接口¶
HTTP 写接口要求:
Content-Type: application/json
并要求 local Origin,作为 CSRF 防线。
适用场景与注意¶
适合的场景:
- 使用 DeepSeek Harness 的 git checkout 安装方式。
- 希望从 DSH 应用内完成版本检查、更新、回滚和重启。
- 希望为 systemd、PM2、macOS shell 或 bare terminal 提供统一的重启约定。
不适合或需要注意的场景:
- 通过
npm i -g @deepseek-ai/dsh安装 DSH 的场景。该场景没有 git working copy,插件会隐藏自身。 - 插件会以当前
dsh进程权限运行;安装前应检查源码和许可证。 - 工作树处于 dirty 状态时,插件拒绝改动,不会丢弃本地修改。
- guided exit / realign 路径要求工作树不 dirty;本地独有提交会先保存到
local-backup-<timestamp>分支,然后硬重置到远程。 - 退出码
75重启依赖 supervisor 识别;systemd、PM2、macOS shell 或 bare terminal 需要按前面说明配置或操作。 - macOS shell 需要 Xcode command line tools;应用为 ad-hoc signed,not notarized,首次启动需右键
Open。 - 已核实资料中显示
package.json的 peerDependencies 包含@deepseek-ai/dsh-client-ui-renderer >=0.1.2-alpha.1 <0.2.0-0;README中的 DSH badge 显示>= 0.1.2-alpha.1。
结尾¶
dsh-self-update 的价值在于:把 DeepSeek Harness git 源安装常见的更新、回滚和重启流程纳入应用内操作,同时保留 CLI 回退和退出码 75 重启约定。
参考链接:
- 插件目录:dsh-self-update
- GitHub:Shane-Jay/dsh-self-update
这里列出的目录页只是社区插件索引,不是官方应用商店。