dsh-plugin-session-cascade-delete:在 DSH 裏徹底刪除會話與子代理

前言

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

典型用法

  1. 在側欄選中要刪的會話,點標題旁垃圾桶,或在該行「…」裏選「刪除會話」,在確認彈窗中確認。
  2. 若會話仍在跑 agent,插件會先停止並釋放,再清理磁盤與列表。
  3. 在 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。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜