前言¶
跑久了的 Windows 開發機,磁盤一般不是「滿了」,而是「不知道是什麼佔的」。緩存、包管理倉庫、崩潰轉儲、瀏覽器緩存、應用更新器留下的安裝包,混在一起;手動清怕刪錯,不清又看着容量條着急。寫個清理腳本不難,難的是邊界:哪些目錄可以放心刪,哪些只能量不能刪,哪些需要提權才刪得動。
下面介紹的 dsh-disk-cleaner 就是把這件事拆成兩部分的 DSH 插件。安裝命令在資料裏沒有現成寫法,本文只講它的機制和我覈對過的事實。
這是什麼¶
dsh-disk-cleaner 是 stallenlu 維護的 DSH 磁盤空間插件,MIT 許可,倉庫 stallenlu/dsh-disk-cleaner。README 標題行寫的就是「Disk Cleaner for DeepSeek Harness: scan known-safe caches, assess what cannot be cleaned, get a ranked plan」。倉庫當前版本 1.6.0,README 標註的開發與實測版本是 DSH 0.2.1-rc.5,因爲它用到了 plugins.bundle.config 和 settings.section;engines.node 爲 >=22,但僅用於跑冒煙測試。平臺聲明是 Windows,清理路徑按 Windows 目錄佈局構造。
它有意把兩件事分開做:
- Clean:三十二個「已知安全」的位置,先掃描看各佔多少,再按面向用戶的步驟刪除。只有這三十二個位置會被刪。
- Assess:插件不會刪的那些東西——已裝程序、WSL 虛擬磁盤、Windows 組件存儲、聊天應用數據、你自己的文件夾。這部分只做只讀測量和列表,永不刪除。
評估收尾時給一份 plan:同樣的數字,按「你動手要付多少代價」排序;插件自己跑不了的步驟,附上可直接複製的 Windows 命令。
核心功能¶
先講機制上的第一點:面板(HTTP 路由)和 agent 工具走的是同一套操作,清理邏輯只在 lib/catalog.js 裏存在一份,路由和 disk_cleaner 工具是它的兩個調用方。
掃描與分組¶
三十二個目標併發測量,同時給出每個目標占多少空間、有多少文件。頂部有一排已掛載卷的篩選條,掃描或清理可以限定在某個盤;在該盤上沒有目標的行會消失。
三十二個目標按七個標題分組:系統臨時、開發工具、瀏覽器緩存、應用緩存、殘留更新器、備份、孤立數據。整組目標都讀數爲 0 B 的分組默認摺疊,列表打開時先看有東西可清的部分。
風險標籤與按齡刪除¶
每個目標標 safe 或 caution,並給一行理由,理由來自固定詞表:in-use、rebuild、elevation、pending-update、rollback、superseded、history、duplicate、database-backup、orphan。面板裏有常駐的圖例,所以 caution 不會變成「未知」。
刪除不是一刀切:temp 和 windows-temp 只刪一天以上的文件,正在被程序佔用的文件會跳過;app-updaters 等目標按三天空窗和其它年齡線處理。目錄裏所有路徑都由目標 id 在代碼裏構造出來,調用方傳的是 id 而不是路徑,於是用戶給的字符串到不了 unlink。
只讀評估與方案¶
評估階段只讀地遍歷磁盤,結果分成 Windows、已裝軟件、你自己的文件三組,再加十個最大的 app-data 文件夾。任何一行都能在 Explorer 裏打開所在目錄。
方案最多九步,按動手代價從低到高排。下面三段命令來自 lib/plan.js 實際拼出的內容,是插件認爲自己跑不了、交給用戶的步驟:
wsl --shutdown
diskpart
select vdisk file="C:\...\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit
Dism.exe /Online /Cleanup-Image /StartComponentCleanup
powercfg.exe /hibernate off
方案裏還有:可直接清理的 safe 目標、需要用戶同意的 caution 目標、需要提權才能刪的目標、建議去「設置」處理的安裝軟件、可以把文件夾搬到別的盤的場景,以及磁盤餘量不足時的提示行(lib/plan.js 裏把餘量低於總容量 12% 的盤標爲 pressure)。低於 200 MB 的單一步驟被當作噪聲忽略。
面板記憶與 agent 工具¶
掃描結果、勾選項、評估結論在切換面板再切回來後仍在。agent 側有一個 disk_cleaner 工具,把前述「五個動作」以對模型友好的方式暴露出去;面板和 agent 看到的是同一份清理邏輯。
雙語言與入口布局¶
UI 跟隨宿主 locale,倉庫裏 zh 和 en 詞典同時發佈。入口可以只放側邊欄圖標、只放設置區,或兩者都放(默認兩者)。這個偏好以及「掃描後默認勾選哪些」「刪除前是否先確認」,都放在插件自己的配置卡片裏,面板的 ⚙ 按鈕也能切換。
安裝與啓用¶
倉庫把插件寫成一個 bundle:包內的 dsh 字段聲明瞭 patch 和客戶端注入,cordis.patch.yml 只做一件事——插入一個 id 爲 dsh-disk-cleaner 的行,這是 bundle 加載的開關。
# cordis.patch.yml
# The insert row is what makes this bundle load; keep the id on its own line.
- insert:
- id: dsh-disk-cleaner
name: 'dsh-disk-cleaner'
對應到 package.json:
"dsh": {
"bundle": { "patch": "./cordis.patch.yml" },
"client": {
"platform": "web",
"inject": [
"@deepseek-ai/dsh-client-locale",
"@deepseek-ai/dsh-client-ui-slots"
]
}
}
README 沒有給出安裝命令行寫法,本文不憑名稱拼接。如果你已有 DSH 的 bundle 加載路徑,按包名 dsh-disk-cleaner 註冊即可;不確定就先讀 README 的「驗證」一節,再決定怎麼併入。
典型用法¶
按面板流程走一遍,順序是先掃描、再評估、最後執行。
1、打開面板,點掃描。三十二個目標併發測量,結果按七個分組展示,全部爲 0 B 的組自動摺疊。
2、對照圖例看標籤。purge / 純緩存且 safe 的條目,刪掉隻影響下次啓動時打開稍慢;帶 rebuild、elevation、pending-update、rollback 之類的條目先看清理由再勾。
3、只想看某個盤,用頂部卷條過濾。
4、對 safe 目標執行清理;插件默認會先問一次(這個行爲可以在配置卡片裏改)。
5、切到評估頁,看 Windows / 已裝軟件 / 你自己的文件三組佔用,以及十個最大的 app-data 文件夾;點某行在 Explorer 裏打開。
6、讀方案。插件能跑的步驟有按鈕;跑不了的步驟給一段可複製的命令,比如 WSL 虛擬磁盤壓縮、組件存儲清理、關閉休眠。
7、重跑評估會把數字重新測一遍;帶 force 的調用會繞過十分鐘的緩存。
適用場景與注意¶
適合的場景很具體:Windows 開發機,跑着 DSH、VS Code Remote、各種帶緩存的應用,磁盤緊張但不想讓人對着容量條猜。差距在於它把「刪」和「量」分開:能刪的只有那三十二個位置,其它一律只量不刪。
幾點要留意:
- 插件以當前 DSH 進程的權限運行。目錄裏標了
elevation的目標(例如C:\Windows\SoftwareDistribution\Download)在普通權限下刪不掉——方案不會把它包裝成「現在就能釋放」,而是標成提權步驟。要真正清掉這部分,需要以提權方式運行插件。 caution不是「不確定」,是「有代價」:rebuild意味着下次啓動變慢,rollback意味着少一份回滾副本,superseded是版本已經不高於已裝版本,history/database-backup是旁邊有活躍文件的備份。刪除前請按這個順序確認。- 三十二之外的內容(已裝程序、WSL 虛擬磁盤、組件存儲、聊天數據、個人目錄)只出現在評估裏,永遠不會被刪。
- 安裝第三方插件前應檢查源碼和許可證。許可證是 MIT;倉庫在 2026-11-04 創建,最近一次提交在 2026-11-05,星標數爲 0,說明社區驗證還很少。
- 平臺限制寫在 README 裏:清理路徑按 Windows 目錄佈局構造。非 Windows 環境需要自行驗證路徑是否成立。
結尾¶
它的價值不在「又一個磁盤清理器」,而在邊界清楚:三十二個位置可刪,其餘只量不刪,方案按動手代價排序。對想要知道自己機器上到底是什麼在佔空間的人來說,比直接給一段 Cleanmgr /sageset 之類的腳本好定位。目錄頁在 https://www.skillhub.cn/plugins/stallenlu/dsh-disk-cleaner ,源碼在 https://github.com/stallenlu/dsh-disk-cleaner 。