# dsh-harness-updater [English](README.md) | 简体中文 **DeepSeek Harness 的代理工具更新器。** 检测本地安装的 [Claude Code](https://claude.com/product/claude-code) 和 [Codex CLI](https://developers.openai.com/codex/cli),将其与最新发布的版本进行比较, 在 DSH Web UI 中提示,并且仅在你明确点击后运行适用于对应渠道的正确升级命令。 灵感来自 [T3 Code](https://github.com/pingdotgg/t3code) 的提供商维护模型。 ## 功能 1. **检测**每个位于 `PATH` 中的代理工具(支持 Windows `.cmd`/`.ps1` shim),并在 有限超时时间内探测 ` --version`。 2. **根据解析出的二进制文件路径判断安装渠道**: 原生安装程序、npm / pnpm / bun 全局安装、Homebrew 或仅支持手动更新。 3. **检查 npm**(`registry.npmjs.org//latest`)中的最新版本,超时时间为 4 s,缓存时间为 1 h。离线时可通过设置完全禁用。 4. **提示**:DSH 设置的「插件」分区中会有一张常驻 **Updates** 卡片,列出 每个代理工具及其 `current → latest` 与内联的 **Update** 按钮。在 DSH Native 下运行时还会显示原生应用自身的自更新状态。 5. **仅在点击时更新**——绝不会静默更新。运行器按渠道锁串行执行, 强制执行硬超时并终止进程树,限制捕获的输出量,然后 **重新探测以验证**,并报告 `succeeded`、`unchanged` 或 `failed`。 | 检测到的渠道 | 更新命令 | | --- | --- | | Claude 原生 (~/.local/bin/claude*) | `claude update` | | npm 全局安装 | `npm install -g @latest` | | pnpm 全局安装 | `pnpm add -g @latest` | | bun 全局安装 | `bun install -g @latest` | | Homebrew | `brew upgrade claude-code` / `brew upgrade --cask codex` | | 其他任何渠道(WinGet、独立安装程序) | 手动更新:提供可复制的提示,不支持一键更新 | 更新器使用显式参数调用 npm,并允许安装 CLI 所需的 npm 生命周期脚本。 ## 安全模型 - 每个路由都受**仅限回环地址 + 同源**限制;更新是仅限 POST 的变更操作。 - 每个代理工具一次只能进行一项更新;共享同一包管理器的更新会在 共享锁后排队,而不是相互竞争。 - Harness 环境中的 `DISABLE_UPDATES=1` 会阻止所有自动更新路径。 - 子进程超时时会以进程树为单位终止(Unix signals / taskkill /t /f)。 - 如果没有用户点击,**绝不会**启动更新;任何更新都不会由定时器触发。 ## 安装(本地开发) 在你的 DSH profile 中引用此插件: ```jsonc // ~/.dsh/profiles/web/package.json "dependencies": { "dsh-harness-updater": "link:C:/path/to/dsh-harness-updater" } ``` 添加打包的 patch 条目(仓库中的 cordis.patch.yml 会插入该条目),在 profile 中运行 `pnpm install`,然后重启 DSH Web(host 部分)。 ## 开发 ```sh pnpm install pnpm check # typecheck + build + test ``` ## 配置 所有字段都可以在 **DSH Settings → Plugins → Harness updater** 中编辑(重启后生效): | 字段 | 默认值 | 含义 | | --- | --- | --- | | enableUpdateChecks | true | 查询 npm 中的最新版本 | | statusRefreshIntervalMs | 900000 | 后台状态轮询间隔(最小值 60000) | | hoverRefreshMinAgeMs | 30000 | 允许强制刷新前的最小时间间隔(最小值 5000) | | probeTimeoutMs | 5000 | 每次 --version 探测的超时时间(最小值 1000) | | latestTimeoutMs | 4000 | 每次 registry 查询的超时时间(最小值 1000) | | latestVersionTtlMs | 3600000 | registry 结果缓存生命周期(最小值 30000) | | updateTimeoutMs | 300000 | 更新命令的硬超时时间(最小值 30000) | | claudeCommand / codexCommand / npmCommand | claude/codex/npm | 要使用的可执行文件 | ## 许可证 [MIT](./LICENSE)