前言¶
DSH 側邊欄的刪除是「假刪除」。刪除一條對話時,Harness 只是把它歸檔,日誌還留在磁盤上,下次會重新出現在虛擬的 Ungrouped 分組裏;刪除一個工作區時,也只註銷了註冊信息,它下面的對話原樣保留。這類殘留會隨時間堆積,側邊欄越來越髒,而在磁盤裏找不到對應關係,清理起來沒有可靠入口。
下面介紹的 xuenann/dsh-workspace-purge 就是針對這一痛點的插件:它直接把會話日誌、投影緩存和工作區註冊一起刪除,工作區目錄也可以一併放進回收站。
這是什麼¶
dsh-workspace-purge 是一個 DSH 插件,維護者是 xuenann,歸類爲「記憶」。它解決的問題是:內置的刪除操作只做歸檔和註銷,真正佔用磁盤的數據還在;本插件把刪除落到實處,並且把刪除目標移入回收站,保證手滑之後可以恢復。它目前沒有進入 awesome-dsh-plugin 註冊表,星標爲 0,屬於很新的社區項目。
刪除的是什麼¶
插件只處理四類數據,全部位於 DSH_HOME 之下:
| 位置 | 內容 |
|---|---|
~/.dsh/sessions/<cwd-slug>/<session>/ |
會話日誌 session.v4.jsonl.zstd |
~/.dsh/storages/session_projcache/sessions/<session>.json |
標題與行投影緩存 |
~/.dsh/storages/workspace.json |
工作區註冊記錄,以及該會話的歸檔/置頂標記 |
| 工作區目錄(可選) | 僅在勾選並重新輸入目錄名後刪除 |
在 Windows 上,這些內容會先移入回收站,出錯可以還原;其他平臺則直接刪除,沒有回收站這一步。
三種刪除入口¶
1、側邊欄底部按鈕。按鈕文字是「刪除數據 / Delete data」,點開後是一個面板,列出所有工作區及其對話、已歸檔對話、以及不屬於任何工作區的對話。可以勾選要刪的內容,也可以對單行使用刪除按鈕。
2、對話菜單。每條對話的「…」菜單會多出一行,只刪除該條對話,點之前會先彈確認框。
3、Agent 工具。同一套代碼還暴露成 workspace_purge 工具,助手可以帶同樣的保護條件執行 list、delete-sessions、delete-workspaces。
一個硬約束:當前正在對話的那條不會被刪。面板會把它標出來,Host 端也會拒絕,因爲刪掉自己正在寫的日誌,運行中的會話就沒有了依據。
實現要點¶
插件沒有複用 sessionPersistence(它沒有刪除能力),也沒有隻依賴 workspaceRegistry.delete。按 README 的描述,刪除單條對話的順序是:停止 agent、斷開實時 store 條目、清掉歸檔/置頂標記、把日誌目錄和投影記錄移入回收站、最後從所在工作區裏摘掉。刪除工作區則是先刪它下面的對話,再刪註冊記錄,最後(如果勾選了)刪目錄。
目錄接收前有三類檢查:不能是盤符根目錄,不能是 Harness home 的上級,也不能是其他已註冊工作區的父目錄。
回收站不可用、或 PowerShell 拒絕時,條目會被重命名爲 <name>.purge-<timestamp>,而不是悄悄留下,因此不會殘留半刪除狀態的記錄。
安裝與啓用¶
插件尚未進入 awesome-dsh-plugin 註冊表,目前不能從 Plugins → Discover 直接安裝。需要自行打包並加入 profile:
npm pack
dsh plugin --profile desktop add ./dsh-workspace-purge-1.0.0.tgz
npm pack 生成的是 dsh-workspace-purge-1.0.0.tgz,第二行命令按這個實際產物執行,不要憑名稱改寫成 dsh plugin add github:xuenann/dsh-workspace-purge。註冊表收錄之後,可以從 Harness 內的 Plugins → Discover 安裝。
適用場景與注意¶
適合在本地 DSH 里長期積累對話、被歸檔和半刪除數據困擾的使用者,尤其是 Windows 環境——回收站提供了刪除後的兜底,這一點比非 Windows 平臺安全得多。
使用前有幾點要留意:
- 插件以當前 dsh 進程的權限運行,能接觸到
DSH_HOME下的這些路徑。安裝前先檢查源碼和許可證(倉庫標註爲 MIT),確認目錄約束符合你自己的工作區佈局。 - 非 Windows 平臺沒有回收站,刪除是永久的,點之前先確認勾選範圍。
- 插件不聯網、不採集遙測、不碰憑據,只操作上面列出的四個路徑。
- 卸載插件會把側邊欄恢復成默認行爲,但不會做數據遷移或改寫,之前刪掉的東西也不會回來。
- 開發或調試時可以用
node --check index.js、node --check client.js做語法檢查,node test/host-sim.mjs在內存裏跑 Host 端邏輯;tools/purge-orphans.mjs是清理「不屬於任何工作區」對話的一次性腳本,不加--apply時只做 dry run。
結尾¶
內置刪除只是把數據換個地方放着,側邊欄干淨了,磁盤上還在。dsh-workspace-purge 把會話日誌、投影緩存、工作區註冊統一納入刪除路徑,並提供回收站兜底,把「刪掉」這件事真正做完。
目錄頁:https://www.skillhub.cn/plugins/xuenann/dsh-workspace-purge
GitHub:https://github.com/xuenann/dsh-workspace-purge