备份会话、体检环境、审计升级并防休眠,共十六件脚本
29.8/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/21 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add kira905/dsh-ops-toolkit该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · dev
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 13 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 39 处,展示前 38 条)
- 执行外部命令固定命令dsh-boot-sync.mjs:131
const r = spawnSync('git', ['-C', dir, ...args], { encoding: 'utf8', windowsHide: true, timeout, maxBuffer: 64 * 1024 * 1024 }); - 执行外部命令固定命令dsh-boot-sync.mjs:140
const r = spawnSync('robocopy', args, { encoding: 'utf8', windowsHide: true, timeout: 900000 }); - 执行外部命令来自配置/变量dsh-bootstrap.mjs:52
const r = spawnSync(cmd, args, { encoding: 'utf8', windowsHide: true, timeout: opts.timeout ?? 120_000, ...opts }); - 执行外部命令固定命令dsh-bootstrap.mjs:95
const r = spawnSync('node', [tickd, '--status'], { encoding: 'utf8', windowsHide: true, timeout: 20_000 }); - 执行外部命令固定命令dsh-bootstrap.mjs:100
const r = spawnSync('schtasks', ['/Query', '/FO', 'CSV'], { encoding: 'buffer', windowsHide: true, timeout: 20_000 }); - 发起网络请求dsh-bootstrap.mjs:271
const res = await fetch(url, { signal: ctrl.signal }); - 执行外部命令来自配置/变量dsh-bootstrap.mjs:300
const r = spawnSync(PS_EXE, ['-NoProfile', '-NonInteractive', '-Command', ps], { encoding: 'utf8', windowsHide: true, timeout: 30_000 }); - 执行外部命令固定命令dsh-bootstrap.mjs:330
const r = spawnSync('cmd.exe', ['/c', ...cmd], { encoding: 'utf8', windowsHide: true, timeout: 300_000 }); - 执行外部命令固定命令dsh-bootstrap.mjs:338
const b = spawnSync('cmd.exe', ['/c', 'npm', 'run', 'build'], { cwd: path.dirname(dep), encoding: 'utf8', windowsHide: true, timeout: 300_000 }); - 发起网络请求dsh-dl-scheduler.mjs:96
const req = mod.request(u, { - 发起网络请求dsh-dl-scheduler.mjs:145
req = mod.request(u, { - 执行外部命令来自配置/变量dsh-dl-scheduler.mjs:196
const child = spawn(findCurl(), args, { stdio: 'inherit' }); - 执行外部命令固定命令dsh-dl-scheduler.mjs:205
const child = spawn('pwsh', ['-NoProfile', '-File', PROXY_SCRIPT, ...args], { stdio: 'inherit' }); - 发起网络请求dsh-dl-scheduler.mjs:254
const req = mod.request(u, { - 执行外部命令来自配置/变量dsh-maintenance.mjs:151
const r = spawnSync(file, args, { - 执行外部命令来自配置/变量dsh-maintenance.mjs:557
const r = spawnSync(process.execPath, [copy, ...argv], { stdio: "inherit" }); - 请求外部主机unpkg.comdsh-upgrade-audit.mjs:293
const res = await fetch(`https://unpkg.com/${p.pkg}@${API_TARGET}/${p.file}`, { headers: { 'user-agent': UA } }); - 发起网络请求dsh-upgrade-audit.mjs:293
const res = await fetch(`https://unpkg.com/${p.pkg}@${API_TARGET}/${p.file}`, { headers: { 'user-agent': UA } }); - 执行外部命令来自配置/变量dsh-upgrade-recover.mjs:167
const r = spawnSync(process.execPath, args, { - 执行外部命令固定命令dsh-upgrade-recover.mjs:180
const r = spawnSync('ssh', [ - 执行外部命令固定命令dsh-upgrade-recover.mjs:300
const r = spawnSync('netstat', ['-ano'], { encoding: 'buffer', windowsHide: true, timeout: 30000, stdio: ['ignore', 'pipe', 'pipe'] }); - 执行外部命令来自配置/变量dsh-upgrade-silence.mjs:95
const r = spawnSync(file, args, { encoding: 'utf8', windowsHide: true, timeout: 120000, ...opts }); - 发起网络请求dsh-upgrade-watch.mjs:79
const res = await fetch(url, { signal: ctrl.signal, headers }) - 读取本地文件dsh-upgrade-watch.mjs:170
profilePkg = JSON.parse(readFileSync(profilePkgPath, 'utf8')) - 读取本地文件dsh-upgrade-watch.mjs:177
mainVersion = JSON.parse(readFileSync(mainPkgGlob, 'utf8')).version - 读取本地文件dsh-upgrade-watch.mjs:257
readFileSync( - 写入本地文件dsh-upgrade-watch.mjs:341
writeFileSync(args.json, JSON.stringify(jsonResult, null, 2), 'utf8') - 执行外部命令来自配置/变量overnight-guard-check.mjs:123
const r = spawnSync(cmd, args, { encoding: null, windowsHide: true, timeout: opts.timeout ?? 60000 }); - 执行外部命令来自配置/变量overnight-mode.mjs:232
const r = spawnSync(cmd, args, { encoding: null, windowsHide: true, timeout: opts.timeout ?? 60000 }); - 执行外部命令来自配置/变量snapshot-upgrade-pre.mjs:121
const r = spawnSync(file, args, { encoding: 'utf8', shell: process.platform === 'win32', timeout: 900000, ...opts }); - 读取本地文件lib/closure-links.mjs:67
entries = readdirSync(dir, { withFileTypes: true }) - 读取本地文件lib/closure-links.mjs:75
st = lstatSync(full) - 读取本地文件lib/closure-links.mjs:96
targetExists: target !== '' && existsSync(full), - 读取本地文件lib/closure-links.mjs:127
if (!linkRoot || !existsSync(linkRoot)) { - 读取本地文件lib/closure-links.mjs:234
if (existsSync(p) && !seen.has(p.toLowerCase())) { - 读取本地文件lib/closure-links.mjs:245
if (existsSync(p) && !out.some((x) => x.path.toLowerCase() === p.toLowerCase())) { - 执行外部命令来自配置/变量lib/upgrade-inputs.mjs:228
r = spawnSync(NODE, [path.join(TOOLS_DIR, 'dsh-upgrade-audit.mjs'), tarballs], { - 执行外部命令来自配置/变量lib/upgrade-inputs.mjs:277
const r = spawnSync(NODE, args, { encoding: 'utf8', windowsHide: true, timeout: RUN_TIMEOUT_MS });
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
涉及外部主机:unpkg.com
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DSH 运维与升级工具箱:备份、自检、快照、升级审计/恢复/静默窗口、插件化防护(16 个零依赖脚本)
README
由 DeepSeek 最新模型翻译生成dsh-ops-toolkit
English · 中文(默认)
DeepSeek Harness(DSH)的运维与升级工具箱:备份采集、宿主自举体检、环境自检、插件快照、升级包审计、升级锁恢复、升级静默窗、插电保护(不睡眠/不休眠/不关屏),共 16 件可直接运行的脚本 (12 个 .mjs + 4 个 .ps1)+ 6 个共享依赖(lib/)。
这些脚本来自一套真实的单机 DSH 运维体系(Windows + Node + PowerShell),按「只读优先、默认 dry-run、改动可回滚」的方式写:绝大多数件都带 --check / --status / --dry-run / --list 这类零副作用入口。
⚠️ 先读这一条:本批脚本没有 --help 实现
--help 对这些脚本不是一个被识别的开关——未识别的参数会被忽略,然后按默认动作直接执行 (例如 dsh-maintenance.mjs --help 会走它的默认分支,不是打印帮助)。
⇒ 请按下面「真实用法」表调用;拿不准时只跑只读项(--check / --plan / --status / --dry-run / --list / --self-test)。
展开完整文档(README 剩余 1 节)
dsh-ops-toolkit
English · 中文(默认)
DeepSeek Harness(DSH)的运维与升级工具箱:备份采集、宿主自举体检、环境自检、插件快照、升级包审计、升级锁恢复、升级静默窗、插电保护(不睡眠/不休眠/不关屏),共 16 件可直接运行的脚本 (12 个 .mjs + 4 个 .ps1)+ 6 个共享依赖(lib/)。
这些脚本来自一套真实的单机 DSH 运维体系(Windows + Node + PowerShell),按「只读优先、默认 dry-run、改动可回滚」的方式写:绝大多数件都带 --check / --status / --dry-run / --list 这类零副作用入口。
⚠️ 先读这一条:本批脚本没有 --help 实现
--help 对这些脚本不是一个被识别的开关——未识别的参数会被忽略,然后按默认动作直接执行 (例如 dsh-maintenance.mjs --help 会走它的默认分支,不是打印帮助)。
⇒ 请按下面「真实用法」表调用;拿不准时只跑只读项(--check / --plan / --status / --dry-run / --list / --self-test)。
环境前提
| 项 | 说明 |
| Node.js | ≥ 20(dsh-maintenance.mjs 的部分任务用 node:sqlite,需 22.5+) |
| PowerShell | pwsh 7 优先(powershell.exe 5.1 兜底);.ps1 为 UTF-8 带 BOM + CRLF |
| DSH_ROOT | DSH 工作区根(缺省 = 本仓的上一级目录);脚本里的「DSH 根」都取它 |
| ~/.dsh | DSH 用户目录(home);可用 DSH_HOME / BUTLER_DSH_HOME 覆盖 |
| DSH_OFFSYNC_ROOT | 盘外备份/快照根(缺省 ~/dsh-offsync) |
| DSH_TOOLS_DIR | 工具树根(缺省 = 本仓目录);指向本地 DSH 工具树时,部分脚本会额外调用本地组件 |
⚠️ 工具箱里若干件(备份、静默窗、恢复)会调用同机的 DSH 组件(例如 dsh-butler 工具树、 guard-ctl.mjs、butler-tickd.mjs)。这些组件不在本仓:对应脚本在缺组件时会明确降级或拒动(不会静默改状态),见每行的「依赖」列。
逐件用途与用法(16 件)
备份与收仓
| 脚本 | 干什么 | 真实用法 | 注意 |
| dsh-backup-sessions.ps1 | 把 ~/.dsh/sessions 采集进会话仓(git + git-crypt),并做拉取/合并/推送 | pwsh -File dsh-backup-sessions.ps1 -Status · -Sync · -Sync -DryRun · -Sync -BackupOnly · -Pull · -Push · -Init · -SetRemote <url> · -HealShells | -DryRun = 一个字节都不写;-Repo / -SessionsDir 可指向沙盒 |
| dsh-backup-workspace.ps1 | 把 DSH 工作区(根启动链 / docs / tools / assets 等白名单)采集进工作区仓 | pwsh -File dsh-backup-workspace.ps1 -Status · -Sync · -DryRun · -Push · -Push -ForcePush · -Pull · -Init | -ForcePush 是逃生舱(跳过挡推体检并留审计);-SourceRoot / -Repo 可指向沙盒 |
| dsh-boot-sync.mjs | 开机「收仓 + 回灌」:把盘外三仓同步回本机工作树 / ~/.dsh | node dsh-boot-sync.mjs · --dry-run · --no-pull · --root-only · --self-test | 禁止 DSH 在跑时回灌(脚本自己会判并拒跑);永不镜像、永不 prune |
| dsh-snapshot.ps1 | 给插件 profile 拍一份轻量快照(package.json + pnpm-lock.yaml + 清单) | pwsh -File dsh-snapshot.ps1 [-ProfileDir <path>] [-SnapRoot <path>] | 只写快照目录,不动生产 |
体检与自检
| 脚本 | 干什么 | 真实用法 | 注意 |
| dsh-bootstrap.mjs | 宿主自举体检:缺什么、怎么补(计划任务 / 桌面快捷方式 / 插件对齐等) | node dsh-bootstrap.mjs --check · --plan · --apply(--safe / --only <步骤,步骤>)· --self-test | --check / --plan 零副作用;--apply 幂等但会真写 |
| dsh-selfcheck.ps1 | 环境自检(根目录白名单 / JSON 健康 / 链接与启动链一致性等),只读 | pwsh -File dsh-selfcheck.ps1 | 无参数;不跟随 junction 进盘外实体树 |
| dsh-upgrade-watch.mjs | 版本体检:本地基线 vs 远端(npm / GitHub)有没有新版 | node dsh-upgrade-watch.mjs · --no-remote · --json <path> · --quiet | 只读;断网用 --no-remote |
| dsh-upgrade-audit.mjs | 升级包审计:对新版 tarball 做符号/词表比对,产出 _tmp/l0-audit-report.md | node dsh-upgrade-audit.mjs [tarballsDir] · --self-test | 只读样本目录;不联网;--self-test 不写报告 |
| dsh-dl-scheduler.mjs | 多网卡下载队列:测速 + 按吞吐分流 + 代理按需拉起 | node dsh-dl-scheduler.mjs status · speedtest [--url ] · add <url> [--out <path>] [--name <n>] · list · remove <index> · clear · run [--force] | 队列目录可用 DSH_DL_DIR 指定;代理脚本路径 DSH_PROXY_SCRIPT |
升级与恢复
| 脚本 | 干什么 | 真实用法 | 注意 |
| dsh-upgrade-silence.mjs | 升级静默窗开关 v2:停/恢复生产自动化(tickd + 计划任务),持有者引用计数 | node dsh-upgrade-silence.mjs --status · --disable --holder <id> · --enable --holder <id> · --check-stale | --status / --check-stale 只读;--disable 会真停自动化(先写盘再停,防半完成态) |
| snapshot-upgrade-pre.mjs | 升级前快照(主包/插件/闭包/配置)+ 自校验 | node snapshot-upgrade-pre.mjs(dry-run)· --apply · --apply --no-tree · --verify [--backup <dir>] | 默认 dry-run;--verify 只读对账 |
| dsh-upgrade-recover.mjs | 升级锁卡死后的判定与恢复(本机 / 跨机 SSH),fail-closed | node dsh-upgrade-recover.mjs [--target local\|peer-a\|peer-b] · --apply · --json · --ssh <别名> | 默认只判定不动作;只放行「持有进程已退出 / 心跳超 TTL」的锁 |
| dsh-maintenance.mjs | 停机维护编排:停 DSH → 跑维护任务 → 起回(含守护进程) | node dsh-maintenance.mjs --list · --task <任务名>(dry-run)· --task <任务名> --go | --go 会真停 DSH;不带开关 = dry-run;退出码 3 = 前置不满足(零副作用) |
| upgrade-triage-cli.mjs | 升级分级授权定档:把「包/版本/输入证据」判成档位(纯判定,不升级) | node upgrade-triage-cli.mjs [--input <json>] [--pkg <名>] [--root <dir>] [--tools-dir <dir>] [--json] | 只出结论;参数不认识会拒跑(fail-closed) |
插电保护(睡眠/休眠/关屏/合盖)
| 脚本 | 干什么 | 真实用法 | 注意 |
| overnight-mode.mjs | 插电保护开关:插电时禁睡眠/休眠/关屏/合盖睡眠 + 堵 Windows 更新自动重启;拔电恢复 | node overnight-mode.mjs auto · on · off · status · on --dry-run · --self-test | status 只读;on/off 真改电源设置(off 按备份写回);--json / --force / --no-events 通用 |
| overnight-guard-check.mjs | 插电保护的只读探针:核对当前电源设置相对基线有没有被改 | node overnight-guard-check.mjs · --json · --section · --fail-on-change · --self-test | 绝不代劳改回(要改回请显式跑 overnight-mode.mjs on) |
共享依赖(lib/)
| 文件 | 作用 |
| lib/dsh-home.mjs | ~/.dsh / 工作区根的唯一解析口径(BUTLER_DSH_HOME > DSH_HOME > ~/.dsh) |
| lib/powershell-exe.mjs | PowerShell 解释器选择:pwsh 7 优先、5.1 兜底(含 WindowsApps 别名的真跑探测) |
| lib/closure-links.mjs | 依赖闭包(profiles/node_modules)链接指向扫描(只读) |
| lib/guard-http.mjs | HTTP 判活口径(isHttpAlive / judgeHttp) |
| lib/upgrade-inputs.mjs · lib/upgrade-triage.mjs | 升级定档的输入采集与纯判定函数 |
除 Node 内置模块外无第三方依赖(yaml 仅在个别件里按需 import,缺了就跳过对应段落)。
本批未包含的 4 件(如实登记)
以下 4 件依赖未公开的内核模块,按开源纪律本批不发(不是遗漏):
| 件 | 卡在哪 |
| dsh-upgrade-gate-cli.mjs | 静态 import dsh-butler/lib/audit.mjs、paths.mjs(授权台账内核) |
| dsh-upgrade-orchestrator.mjs | 静态 import dsh-butler/lib/{paths,autonomy-state,upgrade-lock,audit,host-line}.mjs(升级锁与自治矩阵内核) |
| dsh-upgrade-settings-check.mjs | 静态 import lib/dsh-host-rpc.mjs(读本机凭据通道) |
| imagegen-backup.mjs | 静态 import dsh-butler/lib/host-tag.mjs(本机标识) |
要发这 4 件,需先把「审计 / 锁 / 主机标识」抽成可注入接口(依赖反转),再单独成批。
安全须知
- 默认只读优先:能先跑 --check / --status / --dry-run / --list 的,先跑它。
- 会真动作的开关(点名):--apply / --go / -Sync / -Push / --disable / on / off / --force。
- 本仓脚本不烧钱、不外发:不代发消息、不推别人的仓;跨机动作只走你显式给的 --target / --ssh。
- 备份类脚本涉及 git-crypt 密钥文件路径:那是本地路径,不要把密钥本身放进仓。
许可
AGPL-3.0-only + 商业授权(双许可),全文见 LICENSE。
简单说:要么按 AGPL-3.0 使用并让衍生作品同样开源,要么另行取得商业授权。
修订
见 CHANGELOG.md。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
kira905/dsh-ops-toolkit
备份会话、体检环境、审计升级并防休眠,共十六件脚本
相关插件 · 开发 / 工程
隐私简历生成器reactive-resume/reactive-resume
Reactive Resume 已迁至 GitHub 上的…
★ 45,125已汉化MCP
71.7
AI 架构文档生成器sopaco/deepwiki-rs
🚀 Litho 已进化为 Terrain —— 给你的 AI 智能体一张会呼吸的代码库地图。
★ 3,157已汉化DSH
70.8
长时任务执行闭环AMAP-ML/LongHorizon-Harness
面向 Computer-Use Agent 的 Loop Engineering
★ 1,764已汉化DSH
70.5
AI 编程纪律方法包GanyuanRan/Aegis
让 AI 编程 agent 变得可信:少返工、更安全、说“完成”前先给证据。
★ 1,384已汉化DSH
69.6
多代理编排运行时Enderfga/claw-orchestrator
面向编程智能体的运行时。把 Claude Code、Codex、Antigravity、Grok…
★ 586已汉化MCP
69.4
记忆进化插件csyangwen/dsh-memory-evolve
dsh-memory-evolve 使用场景指南
★ 461已汉化DSH
67.9