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 / 幻方無官方從屬關係,安裝與權限請自行評估。

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

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

小夜