Harness 启动器自更新插件;检查 npm 上的 @deepseek-ai/dsh 新版本,暂存 tarball,并在退出或通过面板「更新并重启」时应用。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:a1113622001/dsh-auto-update
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
🔄 dsh-auto-update
🚀 DeepSeek Harness 自更新守护插件 · 跨平台/容器环境自适应
📖 项目简介
dsh-auto-update 是已收录于 dsh-plugin.org(DeepSeek Harness 社区插件市场)的自更新守护插件。
在 Windows 及 POSIX 平台上,运行中的 Node 原生插件(sharp/koffi/node-pty)会被操作系统加锁,直接热覆盖必报 EBUSY;而在容器中,主进程退出又会直接导致容器销毁。
本项目通过 Stage(暂存) + Post-Exit Detached Apply(退出后脱离子进程替换) + 容器智能感知保护 三阶段设计,完美解决了 Harness 在各类环境下的自动升级难题。
🛒 插件市场与安装方式
方式 1:通过插件市场安装(推荐)
Harness 自身不内置市场界面;市场 UI 由社区插件 dsh-plugin 提供,需先安装它:
dsh plugin --profile web add dsh-plugin
- 重启
dsh web(默认http://127.0.0.1:3080); - 打开
设置 (Settings)->插件市场; - 搜索
dsh-auto-update,点击安装即可完成热加载。
方式 2:通过 Harness CLI 命令行安装
# 从 GitHub 仓库安装(推荐)
dsh plugin --profile web add github:a1113622001/dsh-auto-update
本插件目前仅通过 GitHub 仓库分发,尚未发布到 npm registry, 因此
dsh plugin add dsh-auto-update(不带github:前缀)会因包不存在而失败。
🏗️ 架构与生命周期
sequenceDiagram
autonumber
participant H as Harness 主进程
participant C as 客户端 UI 面板
participant NPM as npm 官方源 / 镜像
participant F as 磁盘暂存区 (DSH_HOME/updates)
participant D as 脱离执行器 (apply-update.js)
Note over H,C: 阶段 1: 探测与暂存 (Stage)
H->>NPM: 检查 dist-tag 远端最新版本
H->>F: 下载精确 tarball 并写入 pending-update.json
H-->>C: 前端显示可更新状态 (胶囊徽标)
Note over H,D: 阶段 2: 退出与句柄释放
C->>H: 用户点击 "更新并重启" (或正常退出)
H->>D: 派生独立脱离子进程 (detached child)
H->>H: process.exit(0) 释放原生模块文件句柄
Note over D: 阶段 3: 执行替换与自动拉起 (Apply)
D->>D: 等待父进程 PID 彻底终止
D->>NPM: 执行 npm install -g tarball
D->>D: 写入 update-history.jsonl
D->>H: 按原启动参数重启 dsh web
✨ 核心特性
- 🛡️ 突破 Windows EBUSY 文件锁:两阶段更新设计,运行期仅做暂存,主进程退出释放原生 DLL 句柄后再执行原子替换。
- 🐳 容器智能感知(Container-Aware):自动检测 Docker / K8s / Podman 容器环境,禁止触发
process.exit(0),并在 UI 友好提示“请拉取最新镜像更新”。 - 🌐 全平台软链适配:支持 Windows (
<prefix>/dsh.cmd) 与 Linux/macOS POSIX (<prefix>/bin/dsh) 重启寻址。 - 💊 极简胶囊交互:Web 界面右下角默认折叠为轻量胶囊,点击展开查看版本差异、手动检查或一键重启。
- 🔄 原子并发锁保护:内置
apply.lock,防止多个更新进程并发冲突损坏全局环境。
⚙️ 配置文件说明 (cordis.patch.yml)
插件安装后会自动注入配置。如需自定义参数,可在 %USERPROFILE%\.dsh\profiles\web\cordis.patch.yml 中调整:
# dsh-auto-update 配置项
- insert:
- id: auto-update
name: 'dsh-auto-update'
config:
distTag: latest # 跟踪的 npm dist-tag (如 latest, next)
checkOnStart: true # 启动时立即执行一次版本检查
checkIntervalMinutes: 240 # 定期检查间隔 (分钟)
autoStage: true # 发现新版本后自动下载暂存
applyOnExit: true # Harness 退出时自动应用更新
relaunch: false # 应用更新后是否自动重启 harness
📄 开源许可证
本项目采用 MIT License 授权开源。
链接
同类插件
yjh051108/dsh-routing-suite★ 7005
一个仓库三件套:DSH 插件包的运行时注入器(注入、热重载、卸载、开发侧挂区一键转正、路由自愈,外带设置页插件管理:列出、卸载、拖入文件夹内化)、任务感知的思维模式路由 agent 预设(router-standard / router-spec / router-react)、以及分级两级任务协议(commit_star / lock_stage / revise_do / edit_plan / mark_task / redteam_verdict 六个工具,任务状态落盘)。注入器实现直接在库内,安装的是它自己的行为而不是一份依赖清单。
strukto-ai/mirage#dsh★ 3675
把文件系统与 bash 提供者换成 mirage 虚拟工作区:文件工具与 shell 命令作用于挂载的资源(RAM、S3、Redis、Slack、Gmail、Notion、Postgres)而非宿主磁盘,支持按挂载点设置读/写/执行模式、按命令选择沙箱(进程内 monty、pyodide、quickjs;远程 docker、e2b、daytona),并可在虚拟终端中安装 CLI(git、gh、slack、linear、ntn、gws,或自行注册的程序树)作为命令头词。
hust-open-atom-club/oh-dsh★ 322
社区发行版:TUI、桌面端与 Web UI 统一体验,分层安装、一步到位。
weijiafu14/pi2dsh★ 212
Pi Host ABI 兼容引擎:装一次之后,npm 上的 Pi 扩展原包经 `dsh plugin add <pi-package>` 直接作为 DSH 原生插件挂载。已在官方 DSH 上端到端验证 pi-mcp-adapter(完整 MCP 管理面:OAuth、resources、prompts、MCP Apps、elicitation、sampling)、@tintinweb/pi-subagents、pi-code、pi-hermes-memory、pi-background-tasks;`pi2dsh inspect` 在安装前报告一个包的兼容情况。
Fishquito7/dsh-skill-mcp-panel★ 179
在 DSH Web 设置中管理技能与 MCP 服务器:技能卡片热启停、工作区作用域、分组、批量迁移与拖拽导入,以及 stdio/HTTP MCP 增删改查、连接测试、密钥脱敏,并附带统一 dsh-panel 命令行。
lire1131/dsh-undo-savepoint★ 176
DSH 撤销/回退系统:配置变更自动存档,一键撤销/恢复/回退到任意版本,支持 WebUI 与离线 CLI/GUI 工具(DSH 启动失败也能救)。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。