前言¶
DeepSeek Harness(DSH)裏每個會話都會留下日誌目錄、投影緩存和工作區記賬;若還 spawn 過子代理,磁盤和列表裏會多出一棵「歸屬父會話」的子樹。官方流程裏「歸檔」或關掉界面並不等於從存儲裏抹乾淨,長期開發時容易堆積無用會話、佔空間,也難在側欄裏一眼分清哪些可以刪。
下面介紹的插件 @liuyu-f/dsh-plugin-session-cascade-delete 面向同一痛點:在 Web 界面或 agent 工具裏永久刪除指定會話,並按 DSH 的歸屬規則級聯清理其擁有的子代理會話;分叉(fork)會話不會被誤傷。維護者爲 liuyu-f,npm 包當前版本爲 1.0.5,許可證 MIT。文檔寫明適配 DeepSeek Harness V0.2.0-rc.2 到 0.2.1-rc.2,槽位名與服務簽名會隨 DSH 版本變化,其他版本需自行覈對。
這是什麼¶
一句話:客戶端插件,在 DSH 中從 UI 或 session_delete 工具徹底刪除會話及相關數據。
它源自 @huanlin/dsh-plugin-session-delete 的 DSH 適配與增強(上游見 lsz-asd/dsh-plugin-session-delete),改動重點在子代理:級聯刪除、分叉保護、運行中會話先停再刪、會話 id 兩種拼寫的處理。
核心功能¶
界面入口¶
| 入口 | 位置 |
|---|---|
| 頭部垃圾桶 | 會話標題旁的動作區 |
| 菜單項 | 側欄會話行「…」→「刪除會話」 |
確認後會執行完整清理;刪除完成後該會話立即從界面和會話列表消失,無需重啓 DSH。適用於 Web 界面及一切基於 Web 外殼的客戶端。
一次刪除會清理什麼¶
順序大致爲:若會話正在運行,先停止任務並釋放運行中的 Agent 與會話;再刪除會話日誌目錄、投影緩存(緩存行與磁盤文檔)、工作區記賬(所屬工作區成員、歸檔、置頂);然後按「由深到淺」刪除該會話擁有的子代理會話;最後通知界面移除對應行。
任一步失敗不會靜默:結果報告裏會出現 INCOMPLETE,說明是哪一步、什麼原因。文檔強調:日誌確認刪淨之後纔會動記賬,避免「刪一半、會話掉進未分組」的壞行。
子代理與分叉¶
- 刪除父會話時,默認會一併刪除它擁有的子代理會話(最深者先刪)。
- 分叉會話(fork)是獨立的:刪分叉不會連帶刪任何東西,也不會牽連子代理。
- 子代理歸屬「創建它的那個會話」:若在會話 A 裏創建了子代理,再從 A 分叉出 B,則刪 B 不影響子代理,刪 A 纔會刪掉它們。
agent 工具 session_delete¶
Agent 也可調用該工具刪除會話,並在結果裏報告實際刪掉了什麼。
| 參數 | 作用 |
|---|---|
sessionId |
直接指定要刪的會話 id(推薦) |
title |
僅知標題時使用;只有標題唯一時纔會刪,否則報錯並列出候選 |
discover |
只列出本 profile 知道的會話,不刪;當前會話在標題後標 > (當前會話) |
discoverTree |
只列出某一 session 擁有的子代理樹(id、深度、父級),不刪 |
keepSubagents |
只刪當前會話,保留其子代理(默認連子會話一起刪) |
兩條安全約束:
- 拒絕刪除本次工具調用所在的會話(以及其樹中包含該會話的會話)。
- 界面上正打開着的會話,若與「工具調用所在會話」不是同一個,可以正常刪除。
安裝與啓用¶
兩種安裝方式任選其一。
UI(推薦):打開 DSH → 左上方「插件」→ 右上方「+ 添加插件」,輸入:
@liuyu-f/dsh-plugin-session-cascade-delete
終端:
web profile:
dsh plugin --profile web add @liuyu-f/dsh-plugin-session-cascade-delete
desktop profile:
dsh plugin --profile desktop add @liuyu-f/dsh-plugin-session-cascade-delete
換版本時需先移除再安裝(已安裝狀態下直接再裝會報 ambiguous-install):
dsh plugin --profile desktop remove @liuyu-f/dsh-plugin-session-cascade-delete
dsh plugin --profile desktop add @liuyu-f/dsh-plugin-session-cascade-delete
典型用法¶
- 在側欄選中要刪的會話,點標題旁垃圾桶,或在該行「…」裏選「刪除會話」,在確認彈窗中確認。
- 若會話仍在跑 agent,插件會先停止並釋放,再清理磁盤與列表。
- 在 agent 對話中需要程序化刪除時,優先傳
sessionId調用session_delete;不確定 id 時可先用discover或discoverTree查看,再刪除(刪除本身會級聯,結果會報告刪了什麼,預覽非必須步驟)。
可選配置¶
寫在 profile 的 cordis.patch.yml 裏(本插件不導出 Config schema,設置頁無表單):
- id: session-delete
name: "@liuyu-f/dsh-plugin-session-cascade-delete"
config:
deleteSubagents: false # 默認 true:刪父會話時連子代理會話一起刪
sessionsRoot: "" # 可選:覆蓋會話日誌根目錄,默認 $DSH_HOME/sessions
將 deleteSubagents 設爲 false 時,等價於 UI/工具裏「只刪本會話、保留子代理」的行爲。
適用場景與注意¶
適合誰:經常在 DSH 裏開長會話、spawn 子代理做探索或並行任務,又希望從磁盤和側欄裏乾淨移除整條會話鏈的開發者。
權限與安全:插件以當前 DSH 進程權限運行,刪除的是 $DSH_HOME/sessions(或你配置的 sessionsRoot)下的日誌與相關緩存、記賬。安裝前建議閱讀 GitHub 倉庫 源碼與 MIT 許可證,確認行爲符合預期;刪除不可恢復。
生態說明:DSH 社區插件目錄在 SkillHub 插件頁 等處收錄,與 DeepSeek / 幻方無官方從屬關係,並非官方應用商店。
結尾¶
若你需要在 Harness 裏「刪乾淨」而不只是關掉界面,@liuyu-f/dsh-plugin-session-cascade-delete 把 UI 入口、session_delete 與級聯子代理、分叉保護、運行中先停再刪串成一條路徑。更多細節與截圖見倉庫 README;收錄頁:SkillHub,源碼:GitHub。