🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

自动更新 lc23313/dsh-autoupdate

DeepSeek Harnessv1.1.3
lc2331361 天前有提交已提供中文文档扫描:含敏感能力

一键检查并安全升级 dsh 本体与插件

29.4/100
综合分
1
GitHub 星标
47
npm 周下载
—/5
用户评分

数据截至 2026/9/17 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-autoupdate
npm 源 · dsh-autoupdate 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · other
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/10/26·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 61 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-autoupdate @ 1.1.3
✓Node 引擎要求 >=18 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/9/22 17:51:25

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 27 处,展示前 26 条)
  • 发起网络请求
    lib/client.js:111
    return fetch(location.origin + "/dsh-autoupdate/" + endpoint, {
  • 写入本地文件
    lib/updater.js:139
    safe(() => mkdirSync(this.dataDir, { recursive: true }));
  • 读取本地文件
    lib/updater.js:282
    if (!existsSync(HELPER_PATH)) throw new Error("更新助手脚本缺失,请重新安装插件");
  • 读取本地文件
    lib/updater.js:331
    const persisted = JSON.parse(readFileSync(join(this.dataDir, "state.json"), "utf8"));
  • 执行外部命令来自配置/变量
    lib/updater.js:333
    const child = spawn(process.execPath, [HELPER_PATH, ...args], {
  • 读取本地文件
    lib/updater.js:364
    for (const name of readdirSync(dir)) {
  • 读取本地文件
    lib/updater.js:365
    const manifest = safe(() => JSON.parse(readFileSync(join(dir, name, "package.json"), "utf8")));
  • 读取本地文件
    lib/updater.js:376
    if (!existsSync(file)) return;
  • 读取本地文件
    lib/updater.js:379
    res = JSON.parse(readFileSync(file, "utf8"));
  • 删除本地文件
    lib/updater.js:384
    safe(() => unlinkSync(file));
  • 执行外部命令固定命令
    lib/install.js:31
    spawn("taskkill", ["/pid", String(child.pid), "/T", "/F"], {
  • 执行外部命令来自配置/变量
    lib/install.js:51
    child = spawn(line, {
  • 执行外部命令来自配置/变量
    lib/install.js:59
    child = spawn(cmd, args, {
  • 读取本地文件
    lib/install.js:113
    const manifest = JSON.parse(readFileSync(join(dir, "package.json"), "utf8"));
  • 读取本地文件
    lib/install.js:136
    manifest = JSON.parse(readFileSync(join(pkgDir, "package.json"), "utf8"));
  • 读取本地文件
    lib/install.js:232
    const manifest = JSON.parse(readFileSync(join(pkgDir, "package.json"), "utf8"));
  • 读取本地文件
    lib/state.js:56
    if (existsSync(file) && statSync(file).size > this.maxBytes) {
  • 读取本地文件
    lib/state.js:56
    if (existsSync(file) && statSync(file).size > this.maxBytes) {
  • 读取本地文件
    lib/state.js:59
    if (existsSync(old)) unlinkSync(old);
  • 删除本地文件
    lib/state.js:59
    if (existsSync(old)) unlinkSync(old);
  • 写入本地文件
    lib/state.js:62
    renameSync(file, old);
  • 写入本地文件
    lib/state.js:65
    appendFileSync(file, `${nowIso()} [${level}] ${msg}\n`, "utf8");
  • 读取本地文件
    lib/state.js:114
    const raw = readFileSync(join(this.dir, STATE_FILE), "utf8");
  • 写入本地文件
    lib/state.js:125
    mkdirSync(this.dir, { recursive: true });
  • 写入本地文件
    lib/state.js:128
    writeFileSync(tmp, JSON.stringify(this.data, null, 2), "utf8");
  • 写入本地文件
    lib/state.js:129
    renameSync(tmp, file);
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 检查版本更新
  • 退出时应用升级
  • 健康检查与自动回滚

dsh 内置自动更新插件:为 DeepSeek Harness 自动更新,支持安全版本检测、退出时应用、健康检查、自动回滚和熔断。

v1.1.32026-09-04
修复检查更新、退出后安装和失败回滚流程中的多处问题。 · 修复内容 · 正确定位运行中的 dsh 安装目录,支持符号链接和不同入口深度;安装前缀未知时明确报错,避免更新错误的安装。 · 修复 macOS/Linux 的全局安装验证路径,以及 Windows 含空格路径的进程启动。 · 移除更新助手的一小时等待上限,长时间运行 dsh 后仍可在退出时更新。 · 为更新计划增加唯一标识,避免旧助手覆盖新计划;正确处理启动和状态保存失败。 · 回滚未通过验证时准确报告失败;profile 插件刷新使用刚更新的 dsh。 · 设置页状态读取失败后允许重试,校验检查和排定响应,并修复英文提示。 · 断路器支持恢复检测,修复冒烟测试未等待异步断言的问题。 · 安装或升级 从 npm 安装(已发布,latest 为 1.1.3): dsh.cmd plugin --profile web add dsh-autoupdate@1.1.3 或下载本 Release 附件,在下载目录执行: dsh.cmd plugin --profile web add ./dsh-autoupdate-1.1.3.tgz macOS/Linux 将 dsh.cmd 替换为 dsh。安装插件后重启 dsh,再进入「设置 → 自动更新 → 检查更新」。确认更新后须退出 dsh 进程;只关闭浏览器页面不会触发安装。自动应用需要可定位的 npm 全局安装。 · 验证 Windows 本地 14 项离线回归测试及 UI 冒烟测试通过,覆盖更新成功、新版验证失败后回滚、回滚失败和设置页重试。回归测试中的安装使用临时模拟目录。 附件与 npm 发布包一致,SHA-1:1f957e4c55732a78cca84b136489d54ccb89be6a。
v1.1.02026-08-23
v1.1.0 (2026-08-23) 新增手动触发更新 UI(设置页集成),触发规则从"静默自动检测"改为"手动点击检测"。原有更新逻辑(检测/定点安装/双验证/回滚/断路器)一行未改。 · 新增(NEW) | 文件 | 内容 | |---|---| | lib/client.js | 浏览器端 UI 模块:注册 settings.section 插槽(id: dsh-autoupdate),渲染【检查更新】按钮行 + 结果弹窗;内置 zh/en 字典与 dsw 变量回退样式 | | lib/channel.js | 后端 RPC 通道:注册 POST /dsh-autoupdate/autoupdate/{status,check,apply};纯函数 handler 可独立单测;connection 服务缺席时静默不注册 |
v1.0.02026-08-23
dsh-autoupdate v1.0.0 内置自动更新插件:自动检测 @deepseek-ai/dsh 新版本,dsh 退出后自动执行带健康检查与自动回滚的更新事务。 · 退出时应用(detached helper 轮询父进程,规避 Windows 文件锁,强杀也能完成更新) · 定点安装:从运行中的 dsh 反推 npm 前缀,--prefix 精确命中 · 双重验证(manifest + bin 实跑)→ 失败自动回滚旧版本 · 断路器降级:auto → notify → off,任何一次成功自动复位 · 可选刷新 profile 用户插件(带 manifest 备份/恢复) · 抗破坏性更新六层防护,零 dsh 运行时 API 依赖 安装:dsh plugin --profile web add dsh-autoupdate 文档:README.md / README.zh.md
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-autoupdate — dsh 内置自动更新插件 一个嵌入 dsh 内部运行的 Cordis 插件:在 dsh 设置页提供【检查更新】按钮,点击后检测 @deepseek-ai/dsh 新版本,弹窗确认后在 dsh 退出时自动执行带健康检查与自动回滚的更新事务,把"手动 npm install + 手动刷 profile"压缩为两次点击。 English README - 设置页 UI(v1.1.0):设置 → 自动更新 里的【检查更新】按钮;有新版本弹窗显示版本信息 +【确认更新】【取消】;已最新弹窗提示"当前已是最新版本,暂无可用更新" - 手动触发(v1.1.0):默认不做任何静默周期检测,只有点按钮才检测(配置 autoCheck: true 可恢复 v1.0.0 的自动模式) - 更新通道:npm dist-tag(latest / rc / 任意已发布 tag) - 更新目标:精确固定版本 + 精确安装前缀(从运行中的 dsh 进程反推,不依赖 PATH 上的 npm 指向哪里) - 应用时机:dsh 进程退出后(detached helper 轮询父进程退出,规避 Windows 文件锁;即使 dsh 被强杀,已武装的更新仍会执行)
展开完整文档(README 剩余 1 节)
dsh-autoupdate — dsh 内置自动更新插件

一个嵌入 dsh 内部运行的 Cordis 插件:在 dsh 设置页提供【检查更新】按钮,点击后检测 @deepseek-ai/dsh 新版本,弹窗确认后在 dsh 退出时自动执行带健康检查与自动回滚的更新事务,把"手动 npm install + 手动刷 profile"压缩为两次点击。

English README

- 设置页 UI(v1.1.0):设置 → 自动更新 里的【检查更新】按钮;有新版本弹窗显示版本信息 +【确认更新】【取消】;已最新弹窗提示"当前已是最新版本,暂无可用更新"
- 手动触发(v1.1.0):默认不做任何静默周期检测,只有点按钮才检测(配置 autoCheck: true 可恢复 v1.0.0 的自动模式)
- 更新通道:npm dist-tag(latest / rc / 任意已发布 tag)
- 更新目标:精确固定版本 + 精确安装前缀(从运行中的 dsh 进程反推,不依赖 PATH 上的 npm 指向哪里)
- 应用时机:dsh 进程退出后(detached helper 轮询父进程退出,规避 Windows 文件锁;即使 dsh 被强杀,已武装的更新仍会执行)
- 失败处理:安装失败重试 ×3 → 验证失败自动回滚到原版本并复验 → 断路器降级(auto → notify → off)
- 范围:CLI 本体更新(含随 CLI 分发的 in-box bundles)+ 可选的 profile 用户插件刷新(dsh plugin --profile update,带 manifest 备份/恢复)

目录结构

dsh-autoupdate/
├── package.json # 声明 dsh.bundle.patch → dsh 会把它登记为 profile 的 bundle 层 ├── cordis.patch.yml # 插件行(id: auto-update, name: dsh-autoupdate)+ 默认配置 ├── lib/ │ ├── index.js # cordis 插件入口(name / Config / apply) │ ├── updater.js # 编排器:检测 → 决策 → 武装 helper / 通知 │ ├── install.js # 安装定位/安装/验证原语(--prefix 定向,超时沙箱) │ ├── registry.js # npm dist-tag 查询(容错 JSON 提取 + 重试) │ ├── guard.js # 断路器 + 冷却(降级梯子) │ ├── semver.js # 零依赖 SemVer 解析/比较 │ └── state.js # 独立状态存储 + 滚动日志($DSH_HOME/plugins-data/) ├── scripts/ │ ├── update-agent.mjs # 退出时更新 helper(自包含,仅用 Node 内置模块) │ └── dev-smoke.mjs # 离线冒烟测试(只读检测,永不安装) └── docs/ └── COMPATIBILITY.zh.md # 抗破坏性更新实现思路(核心设计文档)

一、安装嵌入步骤

v1.1.3 修复版的本地安装(在本项目目录执行):

dsh plugin --profile web add ./dsh-autoupdate-1.1.3.tgz

重启 dsh 后进入设置 → 自动更新 → 检查更新。确认更新后须退出 dsh 进程,只关闭浏览器页面不会触发安装。等待 helper-result.json 出现 phase: "done" 后再启动 dsh。

自动应用需要能定位到运行中的 npm 全局安装。源码启动或无法确定安装前缀时会报错,请先确认 dsh 的安装方式。

通过 dsh 官方插件通道装进任意 profile,三种来源任选其一:

① 从 npm 安装(发布后)
dsh plugin --profile web add dsh-autoupdate

② 从 GitHub 安装
dsh plugin --profile web add github:lc23313/dsh-autoupdate

③ 从源码目录 / 离线 tarball 安装(pnpm 以本地路径链接,源目录须长期存在)
dsh plugin --profile web add /path/to/dsh-autoupdate
dsh plugin --profile web add /path/to/dsh-autoupdate-1.1.3.tgz

dsh 会:初始化 profile 工作区 → pnpm 安装该包 → 因其 package.json 声明了 dsh.bundle.patch,自动把它加入 dsh.profile.bundles 层列表。

macOS / Linux 用户:三种安装命令完全一致(把路径换成 POSIX 风格即可);插件内部已按平台适配(prefix 布局、非 shell spawn、信号处理均不同)。

验证嵌入成功

组合后的插件树里应出现 auto-update 行(name: dsh-autoupdate)
dsh --dump-config --profile web | grep -A3 "auto-update"

重启 dsh 生效

dsh web
默认在设置 → 自动更新中点击检查更新;autoCheck: true 时才会自动定期检测
cat ~/.dsh/plugins-data/dsh-autoupdate/autoupdate.log # 查看运行日志(Windows: type)

诊断模式(打印环境体检报告,只读):

DSH_AUTOUPDATE_DOCTOR=1 dsh web

二、配置

默认配置在插件包自身的 cordis.patch.yml(config: 块)里,直接编辑后重启 dsh 即可。也可以在 profile 的 ~/.dsh/profiles/web/cordis.patch.yml 里按 id 覆盖(用户层会整行替换 config,省略的键回落到 schema 默认值):

~/.dsh/profiles/web/cordis.patch.yml
- id: auto-update
config:
channel: rc # 跟踪 rc 通道 checkIntervalMs: 3600000 # 每小时检查

| 配置项 | 默认值 | 说明 |
| enabled | true | 总开关;false 时插件空转 |
| channel | "latest" | npm dist-tag 通道;找不到时回落 latest |
| autoApply | true | false = 只检测+通知(手动模式),给出一条手动升级命令 |
| autoCheck | false | v1.1.0:false = 手动模式(仅设置页按钮触发检测);true = 恢复 v1.0.0 周期检测 |
| checkIntervalMs | 21600000 | autoCheck: true 时的检查间隔(6 小时;下限 5 分钟) |
| startupDelayMs | 30000 | 启动后延迟首检,避免拖慢 dsh 启动 |
| maxConsecutiveFailures | 3 | 连续失败 N 次降级为 notify,2N 次降级为 off |
| cooldownMs | 86400000 | 应用失败后的冷却期(默认 24 小时内不再自动应用) |
| npmTimeoutMs | 30000 | npm 查询类命令超时 |
| installTimeoutMs | 300000 | npm install / pnpm update 超时 |
| npmCommand / dshCommand | npm / dsh | 命令覆盖(如需指定绝对路径) |
| registry | "" | npm registry 覆盖(镜像源场景) |
| updateProfilePlugins | true | CLI 更新成功后刷新 profile 内用户插件(带备份/恢复) |
| profiles | [] | 刷新哪些 profile;空 = 自动探测依赖本插件的 profile |
| logToConsole | true | 是否同时把日志打到 dsh 控制台 |

三、运行时行为(更新事务)

检测到新版本 X └─ 武装:spawn detached helper(轮询本 dsh 进程 pid) └─ dsh 进程退出(正常或被杀) └─ helper 二次确认 state.json 中的武装记录仍匹配(防过期/被覆盖) └─ npm install -g @deepseek-ai/dsh@X --prefix └─ 失败 → 重试 ×3(间隔递增)→ 仍失败 → 校验旧版本完好后结束 └─ 验证:manifest 版本 == X 且 node --version 输出 X └─ 不符 → npm install -g @deepseek-ai/dsh@旧版本 → 复验 → 记录 rolled-back └─ (可选)逐 profile 备份 package.json/pnpm-lock.yaml → dsh plugin --profile p update └─ 失败 → 恢复备份 → dsh plugin --profile p install 重新对齐 └─ 写 helper-result.json + 更新 state.json → 退出下次 dsh 启动 → 消费 result → 记录成功/失败进断路器 → 日志播报结果

四、手动操作

| 场景 | 操作 |
| 查看状态 | cat ~/.dsh/plugins-data/dsh-autoupdate/state.json(Windows: type "%USERPROFILE%\.dsh\plugins-data\dsh-autoupdate\state.json") |
| 查看日志 | cat ~/.dsh/plugins-data/dsh-autoupdate/autoupdate.log |
| 重置断路器 | 删除 state.json(或把配置 maxConsecutiveFailures 调大后重启) |
| 手动回滚 | npm install -g @deepseek-ai/dsh@ |
| 立即检查 | 设置 → 自动更新 → 检查更新 |
| 临时禁用自动应用 | 配置 autoApply: false(保留检测与通知) |
| 彻底卸载 | dsh plugin --profile web remove dsh-autoupdate,再删除 ~/.dsh/plugins-data/dsh-autoupdate(及本地源码目录) |

五、安全与信任说明

安装任何能执行包安装操作的插件前,应清楚它到底做了什么:

- 只 spawn npm(版本查询、npm install -g @deepseek-ai/dsh@,安装目标为运行中 dsh 自身的前缀)以及可选的 dsh plugin --profile update|install(仅限依赖本插件的 profile)。
- 从不写 dsh 自己的文件(settings.yaml / cordis.patch.yml / profile manifest);所有状态与日志限制在 $DSH_HOME/plugins-data/dsh-autoupdate/。
- 不读取、不传输任何凭据;npm 在你自己的环境与 registry 配置下运行。
- 每一步决策都完整记录在 autoupdate.log,可随时审计。
- 所有安装都固定为检测时解析出的精确版本;回滚同样精确重装旧版本。

六、测试与构建

node scripts/dev-smoke.mjs # 端到端冒烟:真实检测流程(强制 autoApply=false,零副作用)
npm test # 离线回归测试 + UI 冒烟测试
npm pack # 生成离线安装包 dsh-autoupdate-.tgz

冒烟已覆盖:插件加载(mock Context)、版本定位三层回退、dist-tag 查询、状态/日志落盘、优雅 dispose。helper 的中止路径与安装验证原语也已单独测试通过。

七、已知限制

1. 多实例并发:helper 只等待武装它的那个 dsh 进程退出;若另一个 dsh 实例仍在运行且锁住全局目录,npm 安装会失败重试(×3,间隔递增),最终失败则记入断路器,下个周期重试。
2. 长期离线:网络不可达只计"检查失败";连续 6 次后降级为 off 静默(定期探测恢复联网后解除检查失败导致的降级)。
3. headless 一次性任务:进程存活时间可能短于 startupDelayMs(30s),首检来不及执行;此类场景请把 startupDelayMs 调到 5000 以下。

抗破坏性更新(接口变更/结构改动/大版本重构下的存活策略)完整设计见 docs/COMPATIBILITY.zh.md。
预览分享卡片长什么样 ↓lc23313/dsh-autoupdate
分享 · DeepSeek Harness Hub
lc23313/dsh-autoupdate

一键检查并安全升级 dsh 本体与插件

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部