前言¶
在 DSH(DeepSeek Harness)里長期使用後,歸檔列表裏往往會堆積大量歷史會話。官方歸檔通常只把會話移出工作區視圖,轉錄目錄、投影緩存和磁盤上的附件引用未必一併清掉;若手動刪目錄,又容易漏掉 workspace.json 裏的歸屬記錄,或與仍在運行的會話、共享附件發生衝突。
下面介紹的 dsh-session-purge 是社區插件(維護者 w1w218,分類 admin-security),在 DSH 設置裏增加「會話清理」頁,通過官方 registry API 做記賬,再刪除歸檔會話並可選回收不再被任何會話引用的附件 blob。針對的是 DSH 0.2.2-rc.1 的公開 Service 契約;不替換官方 workspace 行、不讀取宿主私有成員。
這是什麼¶
一句話:DSH Web 插件,入口爲設置面板 → 左側導航「會話清理」(見倉庫 assets/session-purge.png)。
- 倉庫:https://github.com/w1w218/dsh-session-purge
- 社區目錄:https://www.skillhub.cn/plugins/w1w218/dsh-session-purge
- 許可證:MIT(
package.json版本 0.1.0)
核心功能¶
列表與刪除流水線¶
插件能列出歸檔集合裏的會話,展示標題、ID、轉錄大小、附件引用數、是否運行中、是否有 subagent 子會話。勾選目標後一次性執行:
- 從所有工作區成員表移除(
Workspace.detachSession,持久化)。 - 從歸檔集合移除(
workspaceRegistry.unarchiveSession,持久化)。 - 刪除會話轉錄目錄(整目錄,含舊代際日誌)。
- 刪除
storages/session_projcache/sessions/<id>.json投影緩存。
刪除前自動備份 storages/workspace.json;備份失敗則整批不執行。成功後通過 api-session/removed 通知已連接頁面,側邊欄對應行可即時消失。
可選回收(默認全開)¶
- 連帶刪除選中會話的 subagent 子會話(遞歸)。
- 回收獨佔附件:僅被待刪會話引用、且無倖存會話引用的對象。
- 回收孤兒附件:磁盤存在但已無任何會話引用(含歷史遺留)。
- 清空
cache/attachments/request-images派生圖緩存(會按需重建)。
引用掃描讀取磁盤上全部會話轉錄(含未歸檔、子會話、多代際日誌),用 sha256:<64hex> 匹配附件 id;只有不在「倖存引用」並集裏的對象纔會被回收。
安全與邊界¶
- 不退出 DSH,歸檔/歸屬變更走官方 registry API;只處理歸檔會話(id 必須在歸檔集合中,級聯子會話除外)。
- 運行中會話拒絕刪除(
ctx.agents.get(id)?.status === 'running');idle 的已加載會話會先sessions.flush()再刪。 - fail-closed:任一倖存會話日誌無法解碼則整次中止,不刪文件。
- 待刪路徑須嚴格位於
sessions/、attachments/v1/、session_projcache/sessions/、cache/等預期根下;HTTP 接口複用connection.admit()的 Host/Origin 與 cookie 認證,僅 POST + JSON。 - 不清理
dsh-spill-*臨時目錄;DSH home 取$DSH_HOME,否則~/.dsh。
附件引用基於日誌文本匹配,偏保守(工具參數裏的 sha256:... 也算引用)。標題取自最後一條 session/title 事件,無標題則顯示會話 ID。
安裝與啓用¶
需要已安裝 DSH(Desktop 或 Web profile 均可)。安裝後需重啓一次 DSH,設置裏纔會出現「會話清理」。
資料中的安裝方式爲本地 bundle(非憑名稱拼接的遠程 add 命令):
git clone https://github.com/w1w218/dsh-session-purge.git
cd dsh-session-purge
dsh plugin --profile <profile> add .
將 <profile> 換成你的 profile 名(Desktop 默認 desktop,Web 默認 web)。也可在 DSH 插件管理器中選擇「安裝本地 bundle」,指向克隆後的目錄。
卸載:
dsh plugin --profile <profile> remove dsh-session-purge
package.json 標明客戶端注入 @deepseek-ai/dsh-client-ui-settings,platform: web,immediately: true。
典型用法¶
- 重啓 DSH 後打開設置,在左側進入「會話清理」。
- 在列表中查看歸檔會話的引用與運行狀態,勾選需要徹底移除的項。
- 按需保留或關閉可選回收項(獨佔/孤兒附件、subagent、request-images 緩存等,默認全開)。
- 確認執行;若備份失敗或存在運行中會話、非歸檔 id,操作會被拒絕或中止。
- 其他已打開頁面依靠
api-session/removed更新;設置頁列表在刪除後會重新掃描。
維護者在倉庫提供自測:
node test/self-test.mjs
覆蓋掃描、獨佔與孤兒識別、備份、運行中拒絕、損壞倖存日誌中止等場景。也可用 npm test(腳本同命令)。
適用場景與注意¶
適合誰:需要定期壓縮 DSH 磁盤佔用、且願意只清理已歸檔會話的管理員或長期單機/Web 部署的開發者。
權限與信任:插件以當前 DSH 進程權限讀寫 home 目錄下的 storages、sessions、attachments 等;安裝前應閱讀源碼與 MIT 許可,確認與自有備份策略一致。社區目錄站點(如 SkillHub)與 DeepSeek / 幻方無官方從屬關係,屬於「一切皆插件」生態中的第三方條目。
與「只歸檔」的區別:本插件做的是 registry 記賬 + 文件刪除 + 可選 blob 回收,不是替代官方歸檔按鈕;共享仍被其他會話引用的附件會被保留。
結尾¶
dsh-session-purge 把「歸檔」從視圖層推進到可審計的真刪流程:先備份 workspace、再走官方 API、再刪轉錄與緩存,並在保守引用掃描下回收獨佔與孤兒附件。若你要在 DSH 裏做會話維度的空間治理,可從社區目錄或 GitHub 獲取倉庫,按上述 profile 安裝並重啓後使用設置中的「會話清理」頁。
- 目錄頁:https://www.skillhub.cn/plugins/w1w218/dsh-session-purge
- GitHub:https://github.com/w1w218/dsh-session-purge