仅限 Windows 的 DSH Desktop 自动更新:检查官方更新源,下载并校验 SHA-512 安装包,由一次性计划任务强制关闭应用后静默安装(默认自动),重启后按更新前快照重装插件、恢复设置。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:zhkkjF/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 Desktop 的 Host + Web 插件:
- 自动检查 DSH Desktop 官方更新通道(读取安装目录的
app-update.yml,支持nightly/latest)。 - 发现新版本后:备份 profile 与插件设置 → 下载并校验安装包(SHA-512)→ 以官方相同的静默参数启动 electron-builder NSIS 安装器。
- 新版本首次启动时:按更新前的快照恢复设置、重新安装 profile 里的插件、恢复插件的启用/禁用状态。
- 设置页提供「自动更新」面板:状态、开关、立即检查/安装、手动快照、重装插件、恢复设置。
安装更新会让 DSH 关闭并重新打开,请先保存当前工作。默认「等待运行中的任务结束」开启,有对话回合或后台任务时会推迟安装。
面板位置
设置 → 自动更新(settings.section,id auto-update)。
工作流程
检查:读取
<resources>/app-update.yml的 feed 地址与 channel,请求<url>/<channel>.yml,解析version与安装包url / size / sha512,与<resources>/app.asar/package.json的当前版本比较。准备:在
$DSH_HOME/dsh-auto-update/snapshots/<timestamp>/创建快照:profile/package.json、cordis.patch.yml(插件设置)、pnpm-lock.yaml、pnpm-workspace.yaml、compatibility.json、.npmrcstorages/(插件设置存储)data/<插件目录>/(默认dsh-pet、dsh-market、skills-manager、pet-indesktop、archive-desk、llm-deepseek、skill-mcp-manager、mcp-bundles,可在配置里改)manifest.json:版本、bundle 列表、依赖、禁用行
下载:流式下载到
$DSH_HOME/dsh-auto-update/downloads/,边下边算 SHA-512,与 feed 校验一致后才使用。安装:写
pending.json后创建一个一次性的 Windows 计划任务(Task Scheduler),由它接管安装:- 等待 3 秒,核对当前 Electron 主进程的 PID 与可执行文件路径;
taskkill /PID <pid> /T /F,确保安装目录里的文件不再被占用;- 以
--updated /S --force-run启动安装器(与 electron-updater 的quitAndInstall(true, true)一致),安装完成后自动重新打开应用。
这一步必须绕开插件自身:electron-builder 的 NSIS 安装器在应用仍在运行时直接退出(observed exit code 2,electron-builder#8026),而 Host 插件没有退出 Electron 主进程的入口。计划任务由 Task Scheduler 服务启动,不属于应用的进程树,因此能安全地先关闭应用再安装;任务结束时自行删除。
恢复:新版本启动后,插件检测到
pending.json的fromVersion与当前版本不同,执行:- 从快照恢复 profile 文件、
storages与插件数据目录(覆盖前先把当前状态备份到<snapshot>/pre-restore-<timestamp>/) - 用 Desktop 自带的 pnpm 在 profile 里执行
pnpm install重建node_modules - 通过 Plugin Manager 服务补装缺失/损坏的 bundle,恢复启用与禁用状态
- 结果写入
$DSH_HOME/dsh-auto-update/recovery.json,面板显示
- 从快照恢复 profile 文件、
配置(cordis.patch.yml)
| 字段 | 默认 | 说明 |
|---|---|---|
checkIntervalMinutes |
30 |
自动检查间隔(分钟);0 关闭定时检查 |
autoInstall |
true |
发现新版本时自动下载并静默安装 |
autoInstallWhenIdle |
true |
有运行中的任务时推迟安装 |
snapshotKeep |
5 |
保留最近几份快照 |
restoreSettings |
true |
更新后恢复 storages 与插件数据目录 |
restorePolicy |
overwrite |
overwrite 覆盖为更新前设置;missing-only 只补缺失文件 |
dataDirs |
见上 | 需要一并备份/恢复的 $DSH_HOME 插件数据目录 |
面板里的开关与间隔会写入 $DSH_HOME/dsh-auto-update/settings.json,优先于 patch 里的默认值。
安全与限制
- 只支持打包的 DSH Desktop(存在
app-update.yml与app.asar);普通dsh web会话里面板会显示「仅在 DSH Desktop 中可用」。 - 「自动」更新与官方「手动确认」更新的区别在确认环节:插件用一次性计划任务先关闭应用再静默安装,不经过 Electron 主进程的更新对话框。安装期间 DSH 会关闭并重新打开,进行中的对话会中断;默认「等待运行中的任务结束」会在有任务时推迟安装。
- 下载源与 app-update.yml 一致,仅接受 SHA-512 匹配的安装包。
- 恢复前会备份当前状态;
restorePolicy: overwrite会把更新前的设置写回,可能覆盖更新后手工改过的同名设置,可改成missing-only。 pnpm install由 Desktop 传给 Host 的 pnpm 入口执行,运行在 profile 目录;失败时面板会显示错误,并保留快照供手动恢复。- 所有状态与日志都位于
$DSH_HOME/dsh-auto-update/,不写 profile 之外的系统位置。
链接
同类插件
yjh051108/dsh-routing-suite★ 6994
一个仓库三件套:DSH 插件包的运行时注入器(注入、热重载、卸载、开发侧挂区一键转正、路由自愈,外带设置页插件管理:列出、卸载、拖入文件夹内化)、任务感知的思维模式路由 agent 预设(router-standard / router-spec / router-react)、以及分级两级任务协议(commit_star / lock_stage / revise_do / edit_plan / mark_task / redteam_verdict 六个工具,任务状态落盘)。注入器实现直接在库内,安装的是它自己的行为而不是一份依赖清单。
strukto-ai/mirage#dsh★ 3762
把文件系统与 bash 提供者换成 mirage 虚拟工作区:文件工具与 shell 命令作用于挂载的资源(RAM、S3、Redis、Slack、Gmail、Notion、Postgres)而非宿主磁盘,支持按挂载点设置读/写/执行模式、按命令选择沙箱(进程内 monty、pyodide、quickjs;远程 docker、e2b、daytona),并可在虚拟终端中安装 CLI(git、gh、slack、linear、ntn、gws,或自行注册的程序树)作为命令头词。
first-fluke/oh-my-agent#dsh★ 1357
在工具执行前后以及尝试结束当前轮次时运行项目 OMA 检查。随插件安装 OMA CLI 依赖,并在首次使用时初始化未配置的项目。需要 Node.js 22+;首次初始化需要网络连接和项目目录写入权限。
MichengAI/dsh-skills-manager★ 444
在设置里管理本地 DSH 技能,并只读查看公共 Agent 技能。
hust-open-atom-club/oh-dsh★ 324
社区发行版:TUI、桌面端与 Web UI 统一体验,分层安装、一步到位。
Fishquito7/dsh-skill-mcp-panel★ 248
在 DSH Web 设置中管理技能与 MCP 服务器:技能卡片热启停、工作区作用域、分组、批量迁移与拖拽导入,以及 stdio/HTTP MCP 增删改查、连接测试、密钥脱敏,并附带统一 dsh-panel 命令行。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。