前言¶
跑 DeepSeek Harness(DSH)时,本体和插件版本会随 npm 发布变动。手动逐个 npm update 或盯着 changelog 既费时间,也容易在有人正在用 Agent 时重启服务。社区里已有若干「自检升级」类插件,侧重点各不相同:有的只关心 Harness 本体,有的用会话状态判断是否在忙——实测 turn 结束后 agent.status 仍可能长时间停在 running。
下面介绍 dsh-autoupdater(维护者 niubi6668889595,SkillHub 分类:工作流):在可配置的定时节奏下检查 DSH 本体与已安装插件的更新,并只在判定为「无人使用」的空闲窗口里执行升级或暂存通知,配合 Web 面板改配置、看活动日志。
这是什么¶
dsh-autoupdater 是 DSH 的自动更新插件(npm 包名 dsh-autoupdater,当前资料中版本 0.6.0,MIT 许可证)。它解决两类问题:
- 何时检查:四种调度模式(每日时刻 / 每 N 小时整点对齐 / 每 N 天 / 每 N 分钟)任选。
- 何时动手:定时任务触发后,还要满足空闲门槛(会话日志静默 + 无运行中 Agent);手动「立即检查」则只要求此刻无运行中会话。
插件在 插件管理器 内嵌 自动更新 卡片;配置写入本地并热加载,无需重启 DSH 进程即可生效(本体若需重启则另按策略处理)。
目录页:https://www.skillhub.cn/plugins/niubi6668889595/dsh-autoupdater
源码:https://github.com/niubi6668889595/dsh-autoupdater
SkillHub 为社区插件目录,与 DeepSeek / 幻方无官方从属关系;安装前请自行审阅源码与许可证。插件以当前 DSH 进程的用户与权限运行。
核心功能¶
定时检查¶
四种 scheduleMode:
daily:每天在dailyTime(默认"04:30")触发。everyHours:每 N 小时,整点对齐(默认6,范围 1–168)。everyDays:每 N 天,锚定dailyTime(默认1,范围 1–365)。everyMinutes:每 N 分钟(默认60,范围 1–10080)。
空闲门槛¶
设计借鉴社区项目 dsh-self-upgrade,用 $DSH_HOME/sessions 下文件的 mtime 判断是否在干活:
- 任意会话日志 2 分钟内无写入,且 无运行中 Agent,才视为可更新。
- 定时触发时,在触发点之外还要 持续静默
idleSeconds秒(默认 300),双重采样,避免瞬时空档误判。 - 面板手动「立即检查」:只要求此刻无运行中会话,不再等待额外静默。
- 探测失败时 保守当作仍在忙,宁可跳过更新也不打断使用。
另可配置 idleTimeoutMinutes(默认 120):单次检查等待空闲的最长时间。
插件批量更新¶
遍历已安装插件,与 npm 最新版对比;升级时使用显式 包名@版本 安装,并在磁盘上回读验证,避免「假更新」。
限制:仅适用于声明了 dsh.bundle 的 npm 形态插件;从 GitHub 源码安装的插件不做版本比对。
双向白名单¶
通过 pluginMode 与 whitelist(插件包名列表)组合,语义包括:白名单内只提醒、其余自动;或白名单内自动、其余只提醒;以及全自动、全提醒、关闭等(默认 regexmode-ignore)。具体枚举以 README 与面板为准。
DSH 本体更新¶
harnessMode 三种策略(默认 notify):
off:不处理本体更新。notify:暂存并通知,不自动重启。auto:通知后在graceMinutes(默认 30)宽限期内自动重启;宽限期内任何会话活动会推迟重启。
npm 全局安装完成后会 校验 dsh 二进制是否存在,缺失则 放弃重启,降低半更新变砖风险。git checkout 形态的本体更新 README 建议改用 dsh-updater。
Web 设置面板与活动日志¶
配置项可在 插件管理器 → 自动更新 卡片中修改,保存即生效。每次检查、更新、重启会写入可读记录,面板内可查看;磁盘上还有 ~/.dsh/autoupdater/history.jsonl。API 仅写本地 config.json,不修改系统级配置。
安全与默认策略¶
- 默认
harnessMode: notify,自动重启需显式改为auto。 - 面板 不提供「忽略空闲」开关。
- 空闲判定基于本机
$DSH_HOME/sessions;远程 SSH 会话不计入。
安装与启用¶
环境要求:Node >= 20(见 package.json 的 engines)。
从 npm 安装(README 原文):
dsh plugin --profile web add dsh-autoupdater
或从 GitHub(将 <owner> 换为仓库所有者,README 原文为占位形式):
dsh plugin --profile web add github:<owner>/dsh-autoupdater
安装后 重启 DSH。若使用 systemd,例如:
sudo systemctl restart <你的dsh服务名>
然后在 插件管理器 → 自动更新 卡片中完成配置。
配置要点¶
初始默认值来自 cordis.patch.yml,面板可覆盖并热生效。常用字段如下:
| 字段 | 默认值 | 说明 |
|---|---|---|
scheduleMode |
daily |
daily / everyHours / everyDays / everyMinutes |
dailyTime |
"04:30" |
每日 / 每 N 天模式的锚定时刻 |
everyHours |
6 |
每 N 小时(整点对齐,1–168) |
everyDays |
1 |
每 N 天(锚定 dailyTime,1–365) |
everyMinutes |
60 |
每 N 分钟(1–10080) |
idleSeconds |
300 |
判定无人使用的持续静默秒数 |
idleTimeoutMinutes |
120 |
每次检查等待空闲的最长时间 |
harnessMode |
notify |
off / notify / auto |
graceMinutes |
30 |
auto 模式通知后的宽限分钟数 |
systemdUnit |
"" |
重启用的 systemd 服务名;空则尝试从 cgroup 自动探测 |
pluginMode |
regexmode-ignore |
白名单与自动/提醒的组合策略 |
whitelist |
[] |
插件包名列表,含义随 pluginMode |
典型用法¶
- 日常维护:
scheduleMode: daily,dailyTime设为业务低峰;harnessMode: notify,先看通知再决定是否改为auto。 - 插件全自动、个别包只提醒:在
whitelist填入包名,将pluginMode设为「白名单内只提醒、其余自动」或反向语义(以面板/README 枚举为准)。 - 本体 auto 重启:配置
systemdUnit或依赖自动探测;部署用户需对systemctl restart配置 sudoers 免密,例如:
youruser ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart your-dsh-service
未配置免密时 sudo 会失败,日志会记录,插件不会反复重试。未探测到 systemd 时,会按原 argv 脱离子进程拉起作为兜底。
- 急需检查:在面板使用「立即检查」——只要当前无运行中会话即可执行,无需再等
idleSeconds。
适用场景与注意¶
适合:长期跑 DSH Web 形态、插件以 npm 包安装、希望定时对齐上游版本又不愿打断正在进行的 Agent 会话的部署。
注意:
- 插件更新不覆盖 GitHub 源码安装的插件;本体更新依赖 npm 全局安装形态。
- 重启与 npm 操作依赖主机权限与 sudo 策略,生产环境安装前应通读仓库源码。
- 设计还参考 dsh-updater、dsh-auto-update 等社区项目的思路,可按需对比选型。
结尾¶
dsh-autoupdater 把「什么时候查更新」和「什么时候真的改磁盘/重启」拆开:调度可配,执行受空闲门槛约束,本体默认只通知,插件支持白名单双向语义,并在面板里完成配置与日志查看。若你在 SkillHub 浏览工作流类插件,可从目录页进入详情,或直接打开 GitHub README 核对安装命令与配置表。