Back to home@snow930

dsh-self-upgrade

No description

Stars
0
Language
JavaScript
Created
Aug 23, 2026
Updated
Aug 23, 2026
GitHub repo

Introduction

dsh-self-upgrade

DSH (DeepSeek Harness) 自升级插件:在 Web GUI 设置页添加「系统更新」区块,一键检查版本并执行升级。

功能

  • 版本检查:自动对比运行中 DSH 宿主版本与 npm registry 最新版
  • 一键升级:点击按钮执行 npm install -g @deepseek-ai/dsh@latest
  • 实时进度:SSE 流式推送安装日志,无需刷新即可看到每行输出
  • 自动重启:安装完成后自动停止旧实例、等待端口释放、后台拉起新实例、刷新页面
  • 安全回滚:npm 安装失败时旧实例不受影响,天然回滚

安装

# 在 DSH web profile 目录下
dsh plugin --profile web add link:/path/to/dsh-self-upgrade
# 或手动编辑 profile package.json 添加依赖 + bundles 条目后 pnpm install

工作原理

服务端(lib/index.js

Cordis 插件,注册 4 个 loopback-only HTTP 端点:

端点方法功能
/api/self-upgrade/checkGET返回 {current, latest, hasUpdate}
/api/self-upgrade/runPOST生成升级脚本并以 detached 进程执行
/api/self-upgrade/statusGET返回阶段推断 + 日志尾部(轮询用)
/api/self-upgrade/streamGETSSE 实时流式推送日志(安装阶段用)

升级脚本流程:npm install -gkill 旧进程等端口释放setsid nohup dsh web

客户端(lib/client.js

通过 settings.section slot 注册设置页一级区块「系统更新」。安装阶段用 EventSource 接收 SSE 实时日志;重启阶段(旧进程已死)自动 fallback 到轮询。

安全

  • 所有端点仅接受 loopback(127.0.0.1 / ::1)请求
  • 升级脚本内容由服务端固定生成,不接受任意命令注入
  • 目标版本白名单校验(仅 semver 格式)
  • npm 安装失败 = 旧进程不动,零影响

文件结构

dsh-self-upgrade/
├── package.json        # 插件清单 + dsh.client 声明
├── cordis.patch.yml    # loader entry 注册
├── lib/
│   ├── index.js        # 服务端 cordis 插件
│   └── client.js       # 客户端 settings.section UI
└── README.md

卸载

从 profile package.json 删除 dsh-self-upgrade 依赖和 bundles 条目,pnpm install 即可。