前言¶
DeepSeek Harness(dsh)會把會話歸檔後仍保留日誌目錄與歸檔記錄,便於日後取消歸檔。長期下來,歸檔區裏會堆着確定不再需要的會話:佔磁盤、佔列表,而宿主本身不提供「從歸檔直接永久刪除」這一動作。社區裏也有帶歸檔面板、批量操作的插件;若你只想在會話行自己的「…」菜單裏補上一刀,且不要額外面板或側邊欄,dsh-shredder(碎紙機)就是針對這一缺口的客戶端 bundle 插件。
這是什麼¶
dsh-shredder 由社區組織 LEEKINBUN-dsh-tools 維護,當前 npm 包版本爲 0.2.1(MIT)。它不是 DeepSeek 官方產品,通過 Cordis bundle 注入客戶端:在原生會話行「…」菜單中、緊挨「取消歸檔」下方,增加一行紅色 徹底刪除 / Shred session,且僅當該會話已歸檔時纔會出現;普通未歸檔會話在這裏看不到刪除項。
歸檔列表仍由 dsh 自帶的工作區視圖與 View options → hide / show / only archived 過濾完成,本插件不另做歸檔頁、側邊欄入口或批量刪除。
核心功能¶
下面介紹 README 中已寫明的行爲,均可對照 GitHub 倉庫 覈實。
菜單與確認¶
- 打開已歸檔會話行的「…」菜單。
- 點擊 徹底刪除 / Shred session;第一次點擊後文案變爲 Confirm permanent delete(確認永久刪除)。
- 第二次點擊執行刪除;關閉菜單會重置確認狀態。
刪除效果¶
- 成功後,該會話從工作區列表、未分組列表和歸檔集合中一併消失。
- 若日誌目錄已不存在但 id 仍留在歸檔集合(陳舊歸檔記錄),同一菜單項會改爲僅清除記錄,並給出相應提示。
刻意不提供的能力¶
- 無歸檔面板、無額外頁面、無側邊欄項;無批量刪除、搜索、預覽、先恢復再打開。
- 無回收站、無撤銷。「Shred」指從文件系統 unlink 會話目錄,並不覆寫磁盤塊;恢復只能依賴文件恢復工具,成功率不保證。
實現概要(供排查)¶
宿主側 lib/index.js 提供 loopback HTTP;客戶端 lib/client.js 在 sidebar.workspaces.session.menu.item(order: 450)注入菜單行。刪除接口:
| Method | Path | Body | Result |
|---|---|---|---|
| POST | /dsh-shredder/delete |
{ sessionId } |
{ ok, action: 'deleted' \| 'record-only', … } |
刪除順序包括:經官方 workspace/session-stop 停任務、flush、從 session store 驅逐實例、WorkspaceEntity.detachSession、刪除 <session root>/<project>/<id>/、再 unarchiveSession 清歸檔記錄等;並在 +2s / +6s / +15s 做後臺複查,以防遲到的 flush 把目錄寫回。
環境與要求¶
- 作者在 dsh 0.2.0-rc.2 上驗證;更舊宿主可通過 fallback 路徑支持(缺少公開
unarchiveSession時能力受限),但以當前發佈爲準。 - 需要加載 bundle 的 profile(隨 dsh 提供的
desktop/web)。 - Node >= 20(見
package.json的engines)。
安裝與啓用¶
安裝方式以 README 爲準:通過 profile 的 package.json 聲明 file: 依賴並把 bundle 名寫入 dsh.profile.bundles,再用 dsh 自帶的 pnpm 安裝。bundle 在進程啓動時解析,僅刷新頁面不夠,需重啓 dsh。
-
將插件源碼放到穩定目錄,例如
C:\plugins\dsh-shredder(路徑與下文 JSON、pnpm 參數保持一致)。 -
編輯 profile manifest:
~/.dsh/profiles/<profile>/package.json,增加依賴與 bundle:
{
"dependencies": { "dsh-shredder": "file:C:/plugins/dsh-shredder" },
"dsh": { "profile": { "bundles": [ /* …existing bundles…, */ "dsh-shredder" ] } }
}
- 使用 dsh 安裝目錄內的 pnpm 安裝並重啓 dsh。桌面版 profile 一般爲
desktop;該環境下dsh --profile desktop --dump-config會被拒絕(由 Electron 獨佔管理),可通過重啓後打開歸檔會話的「…」菜單驗證是否出現刪除行:
& "<dsh install>\resources\runtime\pnpm\bin\pnpm.cjs" --dir "$HOME\.dsh\profiles\<profile>" add "file:C:/plugins/dsh-shredder"
- 典型驗證:歸檔某會話 → 打開其「…」→ 徹底刪除 / Shred session → 連續點擊兩次。
修改本地源碼後更新¶
file: 依賴會以拷貝形式安裝,不是符號鏈接。只刪 node_modules 再 pnpm install 可能不會重新拷貝(pnpm 可能報 Already up to date,插件靜默不再掛載)。應重新聲明依賴並確認輸出含 Packages: +1,必要時對比兩側 lib/*.js 的 sha256 後重啓:
Remove-Item "$HOME\.dsh\profiles\<profile>\node_modules\dsh-shredder" -Recurse -Force
& "<pnpm.cjs>" --dir "$HOME\.dsh\profiles\<profile>" add "file:C:/plugins/dsh-shredder"
卸載¶
從 dependencies 與 dsh.profile.bundles 中移除對應項,再執行安裝並重啓。若只想停止掛載而不刪依賴,可只移除 bundles 項。不要用樹中不存在的 id 寫 disabled: true,否則每次啓動 stderr 會出現 patch: entry "shredder" not found。
典型用法¶
- 在 dsh 中將會話歸檔(歸檔會話仍可在對應工作區內通過視圖過濾看到)。
- 在該會話行打開「…」菜單,確認出現紅色刪除行(未歸檔會話不會出現)。
- 第一次點擊進入確認態,第二次點擊執行;需要保留內容時,務必在操作前自行導出會話或日誌。
適用場景與注意¶
適合誰: 已在用 dsh 原生歸檔流程、偶爾需要永久清理個別歸檔會話、且希望操作留在會話行菜單裏的桌面或 Web profile 用戶。
權限與安全: 插件以當前 dsh 進程的權限運行,刪除的是本機(或當前宿主可見的)會話目錄。安裝前請閱讀源碼與 MIT 許可證,確認信任維護者與刪除邏輯。
不可逆與邊界(README Known boundaries):
- 刪除前請導出可能需要的內容。
- 會話實例正忙、或當前進程未駐留該會話時,可能出現「文件已刪但歸檔行暫留」;客戶端會嘗試通過官方
sessions服務refresh()後再清記錄,失敗時行仍顯示爲歸檔,後臺約 15 秒內可能清掉延遲實例的記錄。 - 其他瀏覽器標籤在部分「absent」場景下不會即時收到通知,需自行重新拉列表。
- 舊格式會話日誌刪除可能更慢(與
sessionPersistence.stat()對整個 session 根目錄的 stat 有關,非本插件單獨引入的 I/O)。 - 碎紙後會話日誌目錄被移除;
storages/session_projcache/sessions/下的投影緩存及attachments/中內容尋址上傳等仍由 dsh 自身管理,本插件不清理。 - 固定(pin)與會話歸檔在 dsh 中互斥,經此菜單操作的會話不會處於 pin 狀態。
結尾¶
dsh-shredder 在 DeepSeek Harness「一切皆插件」的社區生態裏,只補一件事:在原生會話菜單裏給已歸檔會話增加紅色「徹底刪除」,兩步確認、無額外歸檔 UI。目錄與源碼:
- SkillHub 目錄頁:https://www.skillhub.cn/plugins/LEEKINBUN-dsh-tools/dsh-shredder
- GitHub:https://github.com/LEEKINBUN-dsh-tools/dsh-shredder
社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;使用前請以倉庫 README 與本地 dsh 版本爲準。