前言¶
DeepSeek Harness 的原生插件(如 sharp、node-pty)在运行期间会被操作系统加锁,直接覆盖文件会导致 EBUSY 错误;在容器环境中,主进程退出意味着容器销毁,常规热替换无法生效。dsh-auto-update 通过“暂存 + 退出后脱离子进程替换”的三阶段设计,解决 Harness 在 Windows、Linux/macOS 及容器环境下的自动升级难题。
核心功能¶
- 突破文件锁与容器限制:运行期仅做暂存,主进程退出释放文件句柄后再执行原子替换。智能感知容器环境,避免触发
process.exit(0)。 - 跨平台软链适配:支持 Windows (
dsh.cmd) 与 Linux/macOS (bin/dsh) 的重启寻址。 - 安全与并发控制:内置原子并发锁,防止多进程并发更新导致环境损坏。
- 轻量交互:集成于 Web 界面,提供胶囊徽标展示版本状态及手动触发更新入口。
安装与启用¶
插件安装后会自动注入配置。如需自定义参数,可在 ~/.dsh/profiles/web/cordis.patch.yml 中调整。
dsh plugin add dsh-auto-update
典型用法¶
- 启动检查:插件启动时会自动检查 npm 最新版本并暂存。
- Web 交互:Web 面板右下角显示胶囊徽标,点击可查看版本差异或手动触发更新。
- 自动应用:正常退出 Harness 时,插件会自动应用暂存的更新;Web 面板也提供“更新并重启”按钮。
- 容器环境:检测到容器环境时,会禁用进程退出逻辑,并在 UI 提示通过镜像更新。
配置项示例:
- insert:
- id: auto-update
name: 'dsh-auto-update'
config:
distTag: latest
checkOnStart: true
checkIntervalMinutes: 240
autoStage: true
applyOnExit: true
relaunch: false
注意事项¶
- 依赖 Node.js >= 20。
- 需要具备 npm 全局安装权限。
- 容器环境禁止
process.exit(0)。 - 原生模块更新需等待主进程彻底退出释放文件句柄。
结语¶
该插件由 a1113622001 维护,采用 MIT 许可证开源。适用于需要长期无人值守运行 Harness 的场景。