前言¶
DeepSeek Harness(DSH)CLI 本身没有内置的 update 子命令。升级主程序需要手动运行 npm install,而且一旦在服务运行时原地覆盖安装,旧进程会紧握旧模块,新版本启动失败时也无法回退。这个插件的前提只有一条:永不原地升级正在运行的实例。
这是什么¶
这是 Wonderow666 维护的一个 DSH 插件,用于从网页设置页检查、安装并回滚 @deepseek-ai/dsh 的更新。新版本会装到独立目录,先通过配置冒烟验证,再切换启动指针,失败时自动回滚。插件运行在当前 dsh 进程权限下,安装前建议检查源码与许可证。
核心能力¶
- 旁路安装:新版本装到
<installBase>\dsh-install-<version>,与当前实例隔离。 - 健康检查与自动回滚:切换指针后由宿主之外(WMI 拉起)的进程重启,失败则回退指针并写入
last-result.json(status: "rolled-back")。 - 安装目录可配置:支持在设置页浏览/输入目录,支持迁移当前安装到新目录,失败时指针与目录一起回滚。
- 网页端管理:设置页“载具更新”卡片提供版本检查、安装、回滚、目录配置与自动更新开关。
安装与启用¶
推荐从 GitHub 安装:
dsh plugin --profile web add github:Wonderow666/dsh-auto-update
或从本地目录安装:
dsh plugin --profile web add link:C:\path\to\dsh-auto-update
安装后需在 profile 的 bundles 里启用:
{
"dsh": { "profile": { "bundles": [ "...", "dsh-auto-update" ] } }
}
最后重启一次 web 宿主让插件加载。之后的升级无需再手动重启。
配置¶
插件通过环境变量与 profile 配置来约定目录结构与启动方式:
| 变量 | 默认 | 说明 |
|---|---|---|
DSH_AUTO_UPDATE_LAUNCH_CMD |
(空) | 切换版本后重启 web 宿主的脚本;未配置则不允许升级 |
DSH_AUTO_UPDATE_LAUNCHER_DIR |
%DSH_HOME%\auto-update\launcher |
启动指针 current-root.txt 所在目录 |
DSH_AUTO_UPDATE_BOOT_LOG |
(空) | 启动日志路径;配了才能在卡片上显示“起不来”的具体原因 |
DSH_HOME |
~/.dsh |
DSH 数据根;安装目录默认在它旁边 |
DSH_AUTO_UPDATE_INSTALL_BASE |
(空) | 安装目录的兜底默认值,会被 install-base.txt 覆盖 |
示例:
setx DSH_AUTO_UPDATE_LAUNCH_CMD "C:\tools\start-dsh-web.cmd"
setx DSH_AUTO_UPDATE_LAUNCHER_DIR "C:\tools\dsh-launcher"
setx DSH_AUTO_UPDATE_BOOT_LOG "C:\tools\start-dsh-web.log"
profile 配置(cordis.patch.yml):
- id: dsh-auto-update
name: dsh-auto-update
config:
enabled: true
channel: latest
intervalHours: 6
autoApply: false
registry: ""
运行时修改(设置页开关、接口调用)落到 %DSH_HOME%\auto-update\config.json,优先级高于 patch 里的默认值。
启动脚本契约¶
插件只负责切换指针,起进程这一步交给你自己的脚本。examples/start-dsh-web.cmd 是一份可直接改的模板:
- 指针只写版本号(如
0.2.1-rc.2),脚本自己拼出安装目录。 - 读不到指针时,按
dsh-install-*目录名倒序回退到最新的完整安装。 - 一定要把 stdout/stderr 落盘(模板写同目录
web-run.out.log,并自行轮转)。 - 用了自定义安装目录时,脚本还要读同目录的
install-base.txt决定去哪个目录找dsh-install-<版本>,读之前先执行chcp 65001。
安装目录(可改)¶
默认安装目录是 %DSH_HOME% 的上一级(例如 ...\w),每个版本装在 <安装目录>\dsh-install-<版本> 里。设置页的「安装目录」区块可以把它换到别的盘:
- 浏览…:弹出系统的选目录窗口,选完直接把路径填进输入框。服务绑定在
127.0.0.1时是 Windows 原生对话框;从手机或别处访问时对话框出现在运行 dsh 的那台机器的屏幕上,这时手动输入或粘贴路径即可。 - 输入框旁边的提示会实时预览落点:
将安装到 <安装目录>\dsh-install-<当前版本>。你填/选的路径里出现 Windows 禁止的字符(" * ? < > |)会立刻标红并禁用两个写入按钮。中文目录名可以。 - 改到这里:只写配置,不动正在跑的安装;之后
/apply装的新版本会落在新目录。 - 把当前安装迁过去:整体复制(robocopy)→ 自检(版本号 +
--dump-config冒烟)→ 写install-base.txt→ 切指针 → 重启 → 健康检查 + 版本核对。任何一步失败,指针和install-base.txt会一起回滚。 - 恢复默认位置:删掉
install-base.txt。
契约(<指针目录>\install-base.txt,默认 %DSH_HOME%\auto-update\launcher\):
D:\dsh-installs
- 只有一行、UTF-8(无 BOM)的绝对路径、无换行。启动脚本读这个文件之前必须切到 UTF-8 代码页(
chcp 65001),否则 cmd 会按 OEM 代码页解码,中文目录名变成乱码后静默指向空目录。 - 文件不存在 = 用默认安装目录。
- 迁移后旧目录不会自动删(它就是回滚路径),确认新版稳定后自己清理。
- 指针存的是版本号而不是路径,所以“同一版本在两个目录里都有”时按
install-base.txt→ 默认目录的顺序找,再退到该目录下最新的完整安装。
限制:自定义目录必须是绝对路径、不含 " * ? < > |、不以空格或点结尾,磁盘剩余空间需 ≥ 安装体积的 1.2 倍(0.2.x 每个版本约 300–700 MB)。
接口¶
全部在 /dsh-auto-update/api 下。写操作必须带 x-dsh-auto-update: 1 头。
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /status |
当前/最新版本、通道、可用更新、上次结果、挂起任务、canRestart |
| GET | /health |
存活探针 |
| POST | /check |
查 registry 的 latest/next/alpha,写 state.json |
| POST | /apply |
后台安装,body 可带 {"version":"x.y.z"},默认最新版 |
| POST | /rollback |
回到 previous-root.txt 记录的版本 |
| POST | /config |
改 autoApply / intervalHours / channel / registry,落 config.json |
| POST | /install-base |
设置安装目录,body {"base":"D:\\dsh-installs"};传 "" 恢复默认位置(只影响以后的新版本) |
| POST | /migrate |
把当前安装复制到新目录并重启过去,body {"base":"..."};失败自动回滚指针与目录 |
示例:
$base = "http://127.0.0.1:3080/dsh-auto-update/api"
curl.exe -s "$base/status"
curl.exe -s -X POST "$base/check" -H "x-dsh-auto-update: 1"
curl.exe -s -X POST "$base/apply" -H "x-dsh-auto-update: 1" -H "content-type: application/json" -d "{}"
curl.exe -s -X POST "$base/rollback" -H "x-dsh-auto-update: 1"
curl.exe -s -X POST "$base/install-base" -H "x-dsh-auto-update: 1" -H "content-type: application/json" -d '{"base":"D:\\dsh-installs"}'
curl.exe -s -X POST "$base/migrate" -H "x-dsh-auto-update: 1" -H "content-type: application/json" -d '{"base":"D:\\dsh-installs"}'
适用场景与注意¶
适合需要频繁升级 @deepseek-ai/dsh 的 DSH / 智能体开发场景,尤其是需要避免原地覆盖、保证升级可回退的情况。插件以当前 dsh 进程权限运行,安装前建议检查源码与许可证。注意:Windows Only(PowerShell 5.1 + cmd),依赖 WmiPrvSE.exe 进行进程交接,以宿主之外的重启保证切换可靠性。
短结尾¶
这个插件在网页端提供了一套完整的安全升级流程:旁路安装、健康检查与自动回滚,让 DSH 主程序升级不再依赖手动 npm install。安装与配置见上方代码块与说明。目录页与 GitHub 链接见下方。