前言¶
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 / 幻方无官方从属关系,安装与权限请自行评估。