Bundle
dsh-autoupdater
Scheduled update checks for DSH itself and installed plugins, applied only in idle windows. Four schedule modes, dual-direction whitelist, web settings panel under the plugin manager.
- Source
- niubi6668889595
- License
- MIT
- Updated
- Updated 8 days ago
Readme
# dsh-autoupdater **Auto-update plugin for DeepSeek Harness (DSH)** — 定时检查 DSH 本体与已安装插件的更新,只在无人使用的空闲窗口执行。四种调度模式、双向白名单、可视化设置面板。 English below · [English](#english) ## 功能 - **定时检查**:四种调度模式任选——每日 HH:MM / 每 N 小时(整点对齐)/ 每 N 天 / 每 N 分钟 - **空闲门槛**:会话日志 2 分钟无写入 + 无运行中 Agent 才动手;定时触发再叠加持续静默采样,绝不打断使用 - **插件批量更新**:遍历已安装插件,逐个对比 npm 最新版并升级(带 `包名@版本` 显式安装 + 磁盘回读验证,杜绝假更新) - **双向白名单**:白名单内只提醒 / 白名单内自动升级,两种语义随你切换 - **DSH 本体更新**:三种策略——不管 / 只暂存+通知 / 通知后宽限自动重启(宽限期内任何会话活动即推迟) - **Web 设置面板**:插件管理器内嵌卡片,改配置保存即生效(热配置,无需重启) - **最近活动日志**:每次检查/更新/重启都有可读记录,面板内直接查看 - **防变砖检查**:本体更新后校验 dsh 二进制存在才重启,npm 中断不留半更新状态 ## 安装 ```sh dsh plugin --profile web add dsh-autoupdater ``` 或从 GitHub: ```sh 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 | ## 空闲判定原理 1. **会话日志 mtime**:`$DSH_HOME/sessions` 下任意文件 2 分钟内无写入 = 无进行中的工作(借鉴 [dsh-self-upgrade](https://github.com/raomaiping-hash/dsh-self-upgrade),比 `agent.status` 可靠——实测 turn 结束后 status 可能停留 `running`) 2. **定时触发**额外要求持续静默 `idleSeconds` 秒,双重采样防瞬时空档误判 3. **手动触发**(面板"立即检查")只要求此刻无运行中会话——你主动点的,不再等静默 4. 探测失败保守当忙,宁可不更新也不冒险 ## 本体更新的重启方式 - 配置了 `systemdUnit`(或自动探测到)→ `sudo -n systemctl restart <unit>`。**前置条件**:你的部署用户已配置该命令的 sudoers 免密,例如: ``` youruser ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart your-dsh-service ``` 未配置免密时 sudo 会失败,日志里如实记录,插件不会反复重试 - 未探测到 systemd → 按原 argv 脱离子进程拉起(兜底) - npm 全局安装后校验 dsh 二进制存在,缺失则**放弃重启**(防变砖) ## 安全模型 - 默认 `harnessMode: notify`——只暂存并通知,重启动作需你显式改为 auto - 空闲门槛不可绕过:面板不提供"忽略空闲"开关 - 更新前后均有磁盘版本校验,结果写入 `~/.dsh/autoupdater/history.jsonl` - API 仅写本地 `config.json`,不触碰系统配置 ## 已知限制 - 插件更新只覆盖声明 `dsh.bundle` 的 npm 形态插件;GitHub 源码安装的插件版本比对不适用 - 本体更新依赖 npm 全局安装形态(git checkout 形态请用 [dsh-updater](https://github.com/GodCC6/dsh-updater)) - 空闲判定基于本机 `$DSH_HOME/sessions` 的文件 mtime,远程会话(SSH 场景)不计入 ## 致谢 设计借鉴了社区同类项目:[dsh-self-upgrade](https://github.com/raomaiping-hash/dsh-self-upgrade)(会话日志 mtime 空闲判定、防变砖校验)、[dsh-updater](https://github.com/GodCC6/dsh-updater)(保守失败语义)、[dsh-auto-update](https://github.com/a1113622001/dsh-auto-update)(stage + 退出后应用架构)。 ## License MIT --- <a name="english"></a> # dsh-autoupdater (English) **Auto-update plugin for DeepSeek Harness (DSH)** — scheduled update checks for DSH itself and installed plugins, applied only in idle windows. - **Four schedule modes**: daily HH:MM / every N hours (aligned to clock) / every N days / every N minutes - **Idle gating**: session-log mtime quiet for 2 minutes + no running agents; scheduled runs additionally require sustained quiet with double sampling - **Bulk plugin updates**: per-plugin npm version comparison with explicit `name@version` install and post-install disk verification (no phantom updates) - **Bidirectional whitelist**: whitelist-notified-others-auto, or the reverse - **Harness update strategies**: off / stage+notify (default) / notify then auto-restart after a grace period where any session activity defers it - **Web settings panel** embedded in the plugin manager; hot-reload config — changes apply without restart - **Activity log**: every check, update, and restart recorded and viewable in the panel - **Brick protection**: verifies the dsh binary exists after npm install before restarting Install: `dsh plugin --profile web add dsh-autoupdater`, then restart DSH and configure under **Plugin Manager → dsh-autoupdater**. See the Chinese sections above for full details — the configuration table and idle-detection notes apply to both languages.
Install
dsh plugin --profile web add github:niubi6668889595/dsh-autoupdater
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-autoupdater from the hub
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.