dsh-update-detector
检测上游 harness 更新,并驱动 update-status.json 状态机。
给 Agent: Markdown · JSON · tarball
在已有插件市场的机器上安装
curl -fsSL https://addon.dshdo.com/install-plugin-market.sh | sh
# then in /plugin-market/ install dsh-update-detector and enable it
打开本机 /plugin-market/ 云端市场,安装该 id,再启用。安装只登记,启用才运行。
版本
0.1.3· 发布时间0.1.2· 发布时间 — 0.1.2 安全改造:只读检测 + 手动检查。移除自动更新执行链;update/restart/apply/kill 端点明确 not-supported;配置统一分层校验(fail-visible);检查间隔上限 1..35791 分钟;分支目标按祖先关系判定;非构造型 apply 使返回的清理函数被 Cordis 收集,fiber.dispose 统一反注册页面路由与 RPC。0.1.1· 发布时间 — Catalog distribution of the update detector with vendored lib and executor.
文件
README
dsh-update-detector
English | 中文
检测 Harness 更新,并在既有 Web 服务上提供 /dsh-update/。0.1.2 仅负责检测,不安装更新,也不重启 Harness。
行为
配置有效时,启动两秒后进行首次检查,随后按 checkIntervalMinutes 定时检查。打开页面只读取状态;手动检查按钮请求一次可合并的检查。检查从 origin 获取提交,并比较祖先关系。Fetch 会更新 Git 元数据,但插件不会 pull、checkout、reset、stash、安装、构建或重启 Harness。
默认 stable 目标仅接受 vX.Y.Z 和 dsh-vX.Y.Z 标签,不接受版本分量前导零或预发布后缀。注释标签使用 peeled 提交。已经包含目标发布的本地提交不算落后;历史分叉或上游没有稳定标签时,会明确报告无法比较。跟踪分支必须显式配置 ref,例如 origin/master。
已跟踪文件的修改和普通未跟踪文件都计入本地改动。遗留执行器状态 busy、preparing、ready、restarting、running 保持只读,并阻止检查。归档执行器是退出码为 3 的拒绝桩;不可安装其 LaunchAgent 模板。
配置
每次应用插件时仅解析一份配置:内置默认值、Cordis Config、$DSH_HOME/update-config.json 依次覆盖。未知键被忽略。非法值、畸形文件或不可读配置会产生可见问题,并禁用检查。显式配置的仓库路径非法时,不会改选另一个仓库。修改配置后需要重新应用插件或重启服务。
| 键 | 有效值 | 默认值 |
|---|---|---|
checkIntervalMinutes | 1 到 35791 的数值 | 360 |
maxOutputBytes | 1 到 16777216 的整数,每条命令单流的字节上限 | 1048576 |
graceMs | 1 到 60000 的整数,终止宽限毫秒数 | 1000 |
harnessPath | 存在的本地 Harness 仓库 | 探测本地仓库 |
target | stable 或 branch | stable |
ref | 分支跟踪所需的显式 Git 引用,不能以 - 开头 | 未设置 |
notify | 布尔值,保留字段;尚未实现通知 | true |
插件依赖 webServer、connection 和 subprocess。命令通过注入的受管子进程服务执行,沿用该服务清理后的环境。Fetch 和远端标签查询的超时为 60 秒,本地探测为 5 秒。输出被截断时,命令直接失败,不会拿保留的尾部内容参与比较。执行器返回码 -1 表示执行失败,-2 表示取消或超时,-3 表示输出超限。
卸载时停止调度、注销页面及 RPC、中止在途命令,并等待进程树退出及异步注销完成。并发卸载调用等待同一次完成。已取消的检查不能在卸载完成后写入持久状态。
HTTP 与 RPC
页面在 /dsh-update、/dsh-update/、/dsh-update/index.html 支持 GET 和 HEAD。Connection 注册仅允许本机访问的 /dsh-update RPC 通道,并执行可信 Host 及跨源检查。
| 端点 | 行为 |
|---|---|
status | 持久状态加只读 Git 改动探测;配置非法时跳过探测 |
readiness | 配置、问题及能力摘要,不执行 Git |
check | 合并的 fetch 和比较;拒绝非法配置、缺失仓库和遗留忙碌状态 |
update、restart、apply、kill | 明确返回不支持错误 |
RPC 向 /dsh-update/<endpoint> POST JSON:{ "type": "client-request", "rpcId": "request-id", "method": "<endpoint>", "payload": {} }。响应为 { "type": "server-response", "rpcId": "request-id", "result": ... }。状态保存在 $DSH_HOME/update-status.json,保留既有字段及未知的遗留字段。
开发
运行 node --test 'tests/*.test.mjs'。测试使用临时主目录、模拟 Git 响应和显式注入的执行器,覆盖祖先关系、配置拒绝、持久状态、输出限制、独立控制的进程树退出、重复卸载及页面与 RPC 注册。不获取真实 Harness 仓库的更新,也不修改真实用户配置。
已知限制与后续工作
插件要求本地仓库及匹配的主机子进程服务,默认可执行文件为 /usr/bin/git。不提供更新执行器、桌面通知或 Harness 自身的回退。替换插件文件不代表运行中的 Node 进程已经加载新代码;启用新代码需要经过验证的重新加载或服务重启。
模型体验
插件不提供模型提示词、工具定义或模型可见消息。
KV 缓存影响
插件不改变模型请求或可复用的请求前缀。