DeepSeek HarnessDSH自动更新插件 —— 定时检查 DSH…
35.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/26 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add niubi6668889595/dsh-autoupdater该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · market
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 8 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意未发布到 npm registry,仅可从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-autoupdater(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/3 03:20:20
🔴 安全扫描发现高危能力自动 · 静态分析源码
v2.7.0🔴 扫描:高危尚无人工评估
静态扫描发现安装期即执行代码,或命令参数由运行时变量拼接(参数来源无法静态判定,从严处理)。
命令参数由运行时变量拼接读写/删除本地文件发起外部网络请求
查看扫描证据(共 54 处,展示前 40 条)
- 读取本地文件main.js:151
try { return JSON.parse(await readFile(path, 'utf8')); } catch { return null; } - 读取本地文件main.js:183
const candidates = readdirSync(base) - 读取本地文件main.js:185
.filter((dir) => existsSync(`${dir}/node_modules`)); - 读取本地文件main.js:190
.map((dir) => ({ dir, m: statSync(`${dir}/node_modules`).mtimeMs })) - 执行外部命令运行时拼接main.js:219
const out = execSync( - 写入本地文件main.js:247
await mkdir(stateDir, { recursive: true }); - 写入本地文件main.js:248
await writeFile(statePath, JSON.stringify(state, null, 2)); - 写入本地文件main.js:253
await mkdir(stateDir, { recursive: true }); - 写入本地文件main.js:254
await appendFile(historyPath, JSON.stringify({ at: new Date().toISOString(), ...entry }) + '\n'); - 读取本地文件main.js:256
const raw = await readFile(historyPath, 'utf8').catch(() => ''); - 写入本地文件main.js:259
await writeFile(historyPath, lines.slice(-300).join('\n') + '\n'); - 发起网络请求main.js:316
const res = await fetch(`${base}/${encodeURIComponent(pkg)}`, fetchOpts); - 读取本地文件main.js:376
return readFileSync('/proc/self/cmdline', 'utf8').split('\0').filter(Boolean); - 写入本地文件main.js:398
await mkdir(stateDir, { recursive: true }); - 发起网络请求client.js:363
const r = await fetch('/api/autoupdater/config'); - 发起网络请求client.js:381
const r = await fetch('/api/autoupdater/config', { - 发起网络请求client.js:402
const r = await fetch('/api/autoupdater/run-now', { method: 'POST' }); - 写入本地文件apply-update.mjs:22
mkdirSync(stateDir, { recursive: true }); - 写入本地文件apply-update.mjs:23
appendFileSync(logPath, `${new Date().toISOString()} ${msg}\n`); - 写入本地文件apply-update.mjs:27
try { appendFileSync(historyPath, JSON.stringify({ at: new Date().toISOString(), ...obj }) + '\n'); } catch {} - 读取本地文件apply-update.mjs:34
if (!existsSync(pendingPath)) { alog('no pending-update.json'); process.exit(0); } - 读取本地文件apply-update.mjs:36
const instruction = JSON.parse(readFileSync(pendingPath, 'utf8')); - 写入本地文件apply-update.mjs:55
mkdirSync(snapDir, { recursive: true }); - 读取本地文件apply-update.mjs:56
try { snap.dshVersion = JSON.parse(readFileSync(`${globalRoot}/package.json`, 'utf8')).version; } catch {} - 读取本地文件apply-update.mjs:60
if (existsSync(src)) { - 写入本地文件apply-update.mjs:66
writeFileSync(join(snapDir, 'snapshot.json'), JSON.stringify(snap, null, 2)); - 执行外部命令来自配置/变量apply-update.mjs:75
const r = spawnSync(npmBin, ['install', '-g', targetSpec], { encoding: 'utf8', timeout: 900000 }); - 读取本地文件apply-update.mjs:88
try { return JSON.parse(readFileSync(`${globalRoot}/package.json`, 'utf8')).version; } catch { return null; } - 读取本地文件apply-update.mjs:94
if (!existsSync(dshBin)) { - 删除本地文件apply-update.mjs:97
try { rmSync(pendingPath); } catch {} - 执行外部命令固定命令apply-update.mjs:117
const r = spawnSync('grep', ['-rl', '--include=*.js', name, nm], { encoding: 'utf8' }); - 删除本地文件apply-update.mjs:135
try { rmSync(pendingPath); } catch {} - 删除本地文件apply-update.mjs:145
try { rmSync(pendingPath); } catch {} - 执行外部命令固定命令apply-update.mjs:155
const r = spawn('sudo', ['-n', 'systemctl', 'restart', unit], { stdio: 'ignore' }); - 执行外部命令来自配置/变量apply-update.mjs:168
const child = spawn(argv[1], argv.slice(2), { detached: true, stdio: 'ignore' }); - 执行外部命令固定命令apply-update.mjs:184
const r = spawnSync('systemctl', ['is-active', unit], { encoding: 'utf8' }); - 发起网络请求apply-update.mjs:189
const res = await fetch(`http://127.0.0.1:${port}/`, { signal: AbortSignal.timeout(5000) }); - 删除本地文件apply-update.mjs:204
try { rmSync(pendingPath); } catch {} - 删除本地文件apply-update.mjs:228
try { rmSync(pendingPath); } catch {} - 删除本地文件apply-update.mjs:233
try { rmSync(pendingPath); } catch {}
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DeepSeek Harness 的定时空闲自动更新:DSH 本体加已装插件。四种调度模式、双向白名单、网页面板。
README
由 DeepSeek 最新模型翻译生成dsh-autoupdater
DeepSeek Harness(DSH)自动更新插件 —— 定时检查 DSH 本体与已安装插件的更新,只在无人使用的空闲窗口执行。四种调度模式、双向白名单、可视化设置面板。
English below · English
功能
- 定时检查:四种调度模式任选——每日 HH:MM / 每 N 小时(整点对齐)/ 每 N 天 / 每 N 分钟
- 空闲门槛:会话日志 2 分钟无写入 + 无运行中 Agent 才动手;定时触发再叠加持续静默采样,绝不打断使用
- 插件批量更新:遍历已安装插件,逐个对比 npm 最新版并升级(带 包名@版本 显式安装 + 磁盘回读验证,杜绝假更新)
- 双向白名单:白名单内只提醒 / 白名单内自动升级,两种语义随你切换
- DSH 本体更新:三种策略——不管 / 只暂存+通知 / 通知后宽限自动重启(宽限期内任何会话活动即推迟)
- Web 设置面板:插件管理器内嵌卡片,改配置保存即生效(热配置,无需重启)
- 最近活动日志:每次检查/更新/重启都有可读记录,面板内直接查看
- 防变砖检查:本体更新后校验 dsh 二进制存在才重启,npm 中断不留半更新状态
安装
dsh plugin --profile web add dsh-autoupdater
或从 GitHub:
展开完整文档(README 剩余 1 节)
dsh-autoupdater DeepSeek Harness(DSH)自动更新插件 —— 定时检查 DSH 本体与已安装插件的更新,只在无人使用的空闲窗口执行。四种调度模式、双向白名单、可视化设置面板。 English below · English 功能 - 定时检查:四种调度模式任选——每日 HH:MM / 每 N 小时(整点对齐)/ 每 N 天 / 每 N 分钟 - 空闲门槛:会话日志 2 分钟无写入 + 无运行中 Agent 才动手;定时触发再叠加持续静默采样,绝不打断使用 - 插件批量更新:遍历已安装插件,逐个对比 npm 最新版并升级(带 包名@版本 显式安装 + 磁盘回读验证,杜绝假更新) - 双向白名单:白名单内只提醒 / 白名单内自动升级,两种语义随你切换 - DSH 本体更新:三种策略——不管 / 只暂存+通知 / 通知后宽限自动重启(宽限期内任何会话活动即推迟) - Web 设置面板:插件管理器内嵌卡片,改配置保存即生效(热配置,无需重启) - 最近活动日志:每次检查/更新/重启都有可读记录,面板内直接查看 - 防变砖检查:本体更新后校验 dsh 二进制存在才重启,npm 中断不留半更新状态 安装 dsh plugin --profile web add dsh-autoupdater 或从 GitHub: 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,比 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) - 空闲判定基于本机 $DSH_HOME/sessions 的文件 mtime,远程会话(SSH 场景)不计入 致谢 设计借鉴了社区同类项目:dsh-self-upgrade(会话日志 mtime 空闲判定、防变砖校验)、dsh-updater(保守失败语义)、dsh-auto-update(stage + 退出后应用架构)。 License MIT dsh-autoupdater (English) DeepSeek Harness(DSH)自动更新插件 —— 定时检查 DSH 自身和已安装插件的更新,只在空闲窗口内应用。 - 四种调度模式:每天 HH:MM / 每 N 小时(对齐时钟)/ 每 N 天 / 每 N 分钟 - 空闲门控:会话日志 mtime 静默 2 分钟 + 没有运行中的智能体;定时运行还要求持续静默,并做双重采样 - 批量更新插件:逐个插件比对 npm 版本,显式执行 name@version 安装,安装后校验磁盘(杜绝幽灵更新) - 双向白名单:白名单通知其他插件自动更新,或反过来 - Harness 更新策略:off / stage+notify(默认)/ 先通知,宽限期后自动重启,期间任何会话活动都会推迟重启 - Web 设置面板:内嵌在插件管理器里;配置热重载 —— 改动无需重启即可生效 - 活动日志:每次检查、更新、重启都有记录,可在面板中查看 - 防变砖保护:重启前先确认 npm install 之后 dsh 二进制文件仍然存在 安装:dsh plugin --profile web add dsh-autoupdater,然后重启 DSH,在 Plugin Manager → dsh-autoupdater 下配置。 完整细节见上面的中文部分 —— 配置表和空闲检测说明对两种语言都适用。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
niubi6668889595/dsh-autoupdater
DeepSeek HarnessDSH自动更新插件 —— 定时检查 DSH…
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 22,225未汉化DSH
73.6
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 2,049已汉化MCP
72.8
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,370已汉化DSH
71.9
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13941 个插件含 PR 收录与…
★ 355已汉化DSH
71.8
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7
这是你的仓库?认领条目