前言¶
DeepSeek Harness 默認提供“歸檔”會話功能:會話行從列表消失,但底層文件仍完整保留在磁盤上。若需要在本地完全清除某段對話留下的所有痕跡,現有方式並不支持。下面介紹一個能實現“永久刪除”的插件。
插件定位¶
- 名稱:dsh-session-delete
- 維護者:HHHHHH233333
- 分類:admin-security
- 簡介:在會話右鍵菜單增加“徹底刪除會話…”項,刪除聊天日誌、投影緩存、溢出文件以及派生的子代理會話。
刪除什麼¶
確認框中點擊“徹底刪除”後,依次執行以下步驟:
- 停止並隱藏:調用 Workspace 註冊表的
archiveSession(id, { stopActivity: true }),停止當前回合、子代理、後臺任務與定時器,並將會話行移出所有分組視圖。 - 刪除聊天記錄:刪除
$DSH_HOME/sessions/<項目目錄>/<會話 id>/下的session.v4.jsonl.zstd及同目錄文件。 - 刪除派生數據:刪除
$DSH_HOME/storages/session_projcache/sessions/<會話 id>.json(標題、標題候選、token 統計、回合大綱等)。 - 刪除臨時文件:刪除
%TEMP%/dsh-spill-*/session-<sha256(id)[:12]>/下的工具輸出溢出文件。
刪除操作不依賴“回收站”,也不發送網絡請求,全部爲本地文件系統操作。若某文件正被佔用導致刪除失敗,會將失敗清單返回給界面,提示“重啓應用後重試”。系統會在刪除後約 6 秒及 12 秒各掃一次(投影緩存有 5 秒寫回窗口),晚到的檢查點不會重新寫入記錄。
子代理會話¶
默認勾選“同時刪除它派生的子代理會話”。規則如下:
- 只沿
origin: "subagent"的parentSession鏈向下展開(含多級)。 - 分叉(fork)不會被連帶刪除——分叉是一段獨立對話,
origin爲空。 - 取消勾選時只刪除你點的那一個會話。
安裝與啓用¶
插件安裝方式之一是使用 link: 依賴,將本目錄鏈接到桌面應用 profile。在 %USERPROFILE%\.dsh\profiles\desktop\package.json 中添加:
dependencies: "dsh-session-delete": "link:<本目錄>"
dsh.profile.bundles: [ ..., "dsh-session-delete" ]
注意:這個目錄不能刪除或改名。安裝後需要重啓桌面應用,插件行會在啓動時按
dsh.profile.bundles組合進 profile。重啓後訪問http://127.0.0.1:<端口>/.dsh-session-delete/health應返回{"ok":true,...};側欄會話行右鍵菜單最後一項會出現“徹底刪除會話…”。
分享給別人¶
插件爲自包含的 npm 包,無運行時依賴與構建步驟。
- 直接給文件夾:壓縮整個
dsh-session-delete目錄,對方在該目錄執行powershell -ExecutionPolicy Bypass -File .\install.ps1,腳本會自動寫入依賴、追加 bundle 並校驗。 - 給一個 tarball:從 Releases 下載
dsh-session-delete-0.1.0.tgz或本地pnpm pack,對方執行pnpm add .\dsh-session-delete-0.1.0.tgz,再在 profile 中追加 bundle 並重啓。 - 從倉庫裝:在 DSH 插件管理中填入倉庫地址
https://github.com/HHHHHH233333/dsh-session-delete,管理器會自動安裝並添加 bundle。 - 發到 npm:將
"private": true改爲false後npm publish。注意包名可能被佔用,必要時使用 scope 前綴,並同步修改dsh.profile.bundles中的條目與link:路徑。
使用方法¶
- 在側欄中右鍵點擊會話(或通過“…”菜單)。
- 選擇“徹底刪除會話…”(位於“歸檔會話”和“複製會話 ID”之後,帶分隔線)。
- 確認框會顯示會話標題、將要刪除的會話數與文件數、是否包含子代理。
- 點擊“徹底刪除”。成功後,該會話行從列表消失,磁盤上不再有對應記錄。
配置(可選)¶
在 cordis.patch.yml 中添加 config 可覆蓋默認值:
- id: dsh-session-delete
config:
sessionsRoot: D:\dsh\sessions # 默認 $DSH_HOME/sessions
dshHome: D:\dsh # 默認 $DSH_HOME,其次 ~/.dsh
spillRoots: [D:\temp\dsh-spill] # 額外的溢出根目錄;系統臨時目錄總會掃描
settleMs: 1200 # 停止後等待多久再刪文件
lateSweepMs: 6000 # 後臺補掃延遲;0 關閉
HTTP 接口¶
接口僅本機界面調用,服務監聽迴環地址,跨站 Origin 會被拒絕,sessionId 必須爲單個安全路徑段。
GET /.dsh-session-delete/healthGET /.dsh-session-delete/preview?sessionId=<id>&subagents=1POST /.dsh-session-delete/delete,body{ "sessionId": "<id>", "deleteSubagents": true }
preview 僅統計不刪除;delete 返回 { ok, found, targets, artifacts, files, bytes, complete, failures }。
已知邊界¶
- 共享附件:內容尋址的附件/圖片倉庫跨會話共享,不屬於某一個會話,不會被刪除。
- 工作區成員表:
storages/workspace.json的sessionIds中會留下已刪會話的 id,插件會在下次啓動時清理archivedSessionIds/pinnedSessionIds中不存在的 id。 - 歸檔 id 的保留:刪除後故意不立即取消歸檔,以免正在運行的界面把該行重新顯示;清理放在下次啓動。
- 搜索索引:當前使用內存數據庫構建會話檢索,從不落盤,無需清理索引文件。
- 文件佔用:Windows 上若文件被子進程佔用,刪除會失敗並回報清單;關閉相關任務或重啓應用後再刪一次。
- 其它機器的副本:本插件只處理本機文件,不影響遠端備份。
適用場景與注意¶
- 適合需要在本地徹底清除會話痕跡的 DSH 用戶,尤其是對隱私敏感、希望清理磁盤佔用與歷史記錄的場景。
- 插件以當前 DSH 進程的權限運行,安裝前應檢查源碼與許可證。
- 刪除當前正在使用的會話會成功,但會話行消失後當前視圖隨之失效,需自行確認結果。
結尾¶
該插件補齊了 DSH 在會話清理上的“刪除”能力,讓用戶能真正從本地移除會話及其相關數據。更多細節與源碼:https://github.com/HHHHHH233333/dsh-session-delete