dsh-self-update:DeepSeek Harness git 源安装的应用内自更新插件

前言

如果你以 git checkout 方式运行 DeepSeek Harness(DSH),例如在 checkout 目录中执行 pnpm dsh web,升级时通常需要手工执行 git pullpnpm installpnpm cleanpnpm 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-0README 中的 DSH badge 显示 >= 0.1.2-alpha.1

结尾

dsh-self-update 的价值在于:把 DeepSeek Harness git 源安装常见的更新、回滚和重启流程纳入应用内操作,同时保留 CLI 回退和退出码 75 重启约定。

参考链接:

这里列出的目录页只是社区插件索引,不是官方应用商店。

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

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

小夜