dsh-disk-cleaner:在 DSH 里给塞满的 Windows 系统盘腾空间

前言

DeepSeek Harness(DSH)在 Windows 上会把 pwsh、bash 等 shell 工具放在沙箱里跑。沙箱里启动子进程会失败(常见为 0xC0000142,即 STATUS_DLL_INIT_FAILED),因此模型无法直接调用 WizTree.exe、robocopy、mklink 或系统卸载器。C 盘爆满时,若只靠对话里「建议你手动清缓存」,智能体既扫不准体积,也执行不了搬迁。

下面介绍社区插件 dsh-disk-cleaner(维护者 lvyue1314)。插件代码运行在 DSH 宿主进程内、沙箱之外,把「定位 → 判断 → 清理 → 搬迁」拆成六个可调用的工具;破坏性操作默认 dry-run,需显式确认才执行。插件归类为 admin-security,当前版本 0.2.1,许可证 MIT,要求 Windows、Node >= 22、DSH >= 0.2.1-rc.5。

它解决什么问题

系统盘满时,占用往往来自可再生缓存(Windows 更新下载、临时文件、IDE 索引、浏览器缓存、会话快照等),以及装错盘的大目录(Maven .m2、Gradle、Docker 数据等)。个人文档通常不是主因。

插件按步骤对应工具:

1. 定位   wiztree_scan / disk_free      谁在占空间
2. 判断   local_apps_list               已装软件、路径与体积
3. 清理   system_cleanup                白名单可再生垃圾,默认只统计
4. 搬迁   disk_migrate                  目录迁到其他卷,原地留目录联接(junction)
5. 兜底   local_apps_run                启动本地程序(如卸载器),回收退出码与输出

全程设计为不碰个人文档;system_cleanup 只处理固定白名单路径。

六个工具

工具 作用
wiztree_scan 调用 WizTree 无界面导出 CSV 并解析,返回最大目录、最大文件和常见缓存体积;依赖本机 WizTree
disk_free 各卷总容量与可用空间
system_cleanup 白名单清理:更新缓存、WER、CBS 日志、临时文件、浏览器缓存、回收站、WinSxS 等;默认 dry-run,执行需 confirm: true
disk_migrate 将目录复制到另一卷并在原路径留 junction;默认 dry-run;校验体积达标后才删源
local_apps_list 读注册表 Uninstall 项,列出软件、版本、发布者、安装路径与占用
local_apps_run 用绝对路径启动本地可执行文件,返回退出码、stdout、stderr 与耗时;拒绝相对路径

wiztree_scan 以外五个工具不依赖 WizTree。

前置:安装 WizTree

wiztree_scan 需要本机 WizTree(免费,MFT 直读)。安装方式任选:

方式 命令 / 地址
官网下载(推荐) https://www.diskanalyzer.com/download
winget winget install AntibodySoftware.WizTree
便携版 官网下载页 portable 压缩包,解压即用

默认安装路径为 C:\Program Files\WizTree\WizTree64.exe。插件按顺序查找:DSH_WIZTREE 环境变量 → PATH 中的 WizTree64.exe / WizTree.exe → 注册表 InstallLocation → 各盘 Program Files\WizTree 等。找不到时 wiztree_scan 会报错并提示设置 DSH_WIZTREE。

WizTree 以管理员权限运行时可走 MFT 快通道;插件以 DSH 进程权限调用——DSH 以管理员运行则扫描更快,否则退化为普通遍历。

安装与启用

插件是 Cordis bundle,包内 cordis.patch.yml 负责插入插件配置。在 DSH profile 目录 执行:

cd <你的 DSH profile 目录>
pnpm add link:/path/to/dsh-disk-cleaner

挂载方式二选一。

A. 写入 profile 的 package.json

{
  "dependencies": { "dsh-disk-cleaner": "link:/path/to/dsh-disk-cleaner" },
  "dsh": {
    "profile": {
      "bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "dsh-disk-cleaner"]
    }
  }
}

B. 写入 profile 的 cordis.patch.yml

- insert:
    - id: dsh-disk-cleaner
      name: dsh-disk-cleaner

若 profile 配置了 patchReload: live,下一次模型调用即可看到工具;否则需重启 DSH。

安装前建议自行查看 GitHub 仓库 源码与 MIT 许可证。插件以当前 DSH 进程权限运行,清理与迁移会真实改动磁盘,admin-security 类能力应仅在可信环境启用。

配置

环境变量 说明
DSH_WIZTREE WizTree64.exe 绝对路径;可选
DSH_DISK_CLEANER_TMP 扫描导出 CSV 的临时目录;默认 %TEMP%;系统盘快满时自动改用空闲最大的卷;含非 ASCII 的路径会被跳过

典型用法

在对话中由模型调用工具,参数形态如下(摘自 README):

# 1. 看看谁在占空间
wiztree_scan({ target: "C:\\", depth: 2, top: 30 })

# 2. 先量一下能清多少(不会删任何东西)
system_cleanup({ dryRun: true })

# 3. 确认清单后执行
system_cleanup({ dryRun: false, confirm: true, items: ["user-temp", "update-cache"] })

# 4. 大目录搬到别的盘,原地留联接
disk_migrate({ source: "C:\\Users\\me\\.m2", target: "D:\\moved\\m2", dryRun: true })

常见可搬迁目标包括 .m2、.gradle、.nuget、扩展目录、JetBrains / VS Code 缓存、pnpm / npm-cache、Docker 数据等可重建目录。不建议直接搬迁已安装程序本体(会破坏卸载与注册表),应卸载后重装到目标盘。

若把系统 TEMP 迁到其他盘,目标路径应使用纯英文(例如 E:\Temp),避免 conda 等批处理脚本在含中文 TEMP 下报错。disk_migrate 对含非 ASCII 的源/目标会在 warnings 中提示:迁移本身可用,但不要把这类路径写进 TEMP / PATH。

安全设计

  • 破坏性工具默认 dry-run,须 confirm: true 才执行删除或删源。
  • disk_migrate 在校验复制体积前不删源;复制失败保留源并报告原因。
  • system_cleanup 不遍历个人文档、聊天记录或已安装程序目录。
  • local_apps_run 要求绝对路径且文件存在。

仓库 examples/ 提供 migrate-to-e.ps1(批量迁移与联接)和 monthly-cleanup.ps1(计划任务无人值守清理),可按需参考。

结尾

dsh-disk-cleaner 把 Windows 系统盘腾空间收成 DSH 可调用的六步工具链:WizTree 定位、注册表看安装、白名单清缓存、junction 搬迁,并默认 dry-run。适合在 DSH 里做磁盘运维对话、又需要真实调用本机工具的场景。

  • 社区目录页:https://www.skillhub.cn/plugins/lvyue1314/dsh-disk-cleaner
  • 源码与文档:https://github.com/lvyue1314/dsh-disk-cleaner

DSH 生态强调「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系,安装与权限请自行评估。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜