前言¶
DeepSeek Harness 的會話數據默認持久化在本地(<DSH_HOME>/sessions,DSH_HOME 默認 ~/.dsh)。隨着調試推進,同一個項目裏往往會積攢幾十個會話:有的是跑掛的半截任務,有的是不再需要的試錯記錄。內置的歸檔(Archive)只是把入口收起來,數據仍在磁盤上,側邊欄裏也還能翻到。項目需要清理存儲、或者某個會話涉及敏感內容需要徹底消失時,你得自己去 sessions/ 目錄裏定位、手工刪目錄,還要連帶清理 projection-cache 記錄——操作繁瑣且容易漏掉派生數據。
下面介紹的 eyadagharire/dsh-plugin-delete-chat 就是針對這個痛點的插件:它給每個會話的「…」菜單加了一行 Delete chat,帶確認對話框,確認後在該設備上永久刪除這個會話及其存儲數據。維護者是 EYADAGHARIRE,分類 admin-security,目錄頁與 GitHub 上目前星標爲 0,屬於較早但關注還不多的工具插件。
這是什麼¶
一句話定位:給 DeepSeek Harness Web UI 的每個會話行菜單注入「Delete chat」動作的官方插件,刪除動作只在 UI 裏可用,agent 無法調用。
它解決兩個具體問題:
- 刪除是永久的,而不是歸檔式的隱藏;
- 刪除一個會話前要先停掉裏面還在跑的活,避免刪完數據還在繼續寫入。
插件發佈在 npm(dsh-plugin-delete-chat),源碼在 GitHub,許可證 MIT,倉庫裏帶中英雙語 locale(locale/en.json、locale/zh.json),UI 文案跟隨應用的語言設置。
核心功能¶
只描述 README 裏寫明的能力。
1、菜單位置與外觀。在隨應用自帶的菜單項(Pin、Rename、Fork、Archive、Copy Session ID)之後插入一行 Delete chat,樣式與自帶的 Delete workspace 行完全一致:錯誤紅的標籤、同一個 IconTrashOutlineRegular 垃圾簍字形(路徑相同、16×16 viewBox、1px 描邊)、懸停時的危險色調填充。
2、確認對話框。使用宿主自己的 Modal 樣式,明確提示「不可撤銷」,提供 Cancel/Delete 兩個按鈕,支持 Escape 關閉和 focus trap。
3、先停活,再刪數據。通過和自帶歸檔流程相同的 activity seam 停掉會話內正在進行的工作:進行中的 turn、subagent、後臺 job、定時提醒。
4、刪除範圍。刪除後以下內容被永久移除:
<DSH_HOME>/sessions/--<project>--/<session-id>/下的會話日誌目錄;- 該會話對應的 projection-cache 派生記錄。
5、側邊欄即時消失。刪除完成後發佈 api-session/removed 事件,行立即從側邊欄移除。
6、當前會話被刪時自動切到新會話,不會留下指向已刪會話的主視圖。
7、權限邊界。只有用戶能從 UI 觸發;agent 沒有任何工具可以刪會話;subagent 會話會被拒絕刪除(它們隨父會話一起被移除)。
8、workspace 文件不受影響。會話所在 workspace 裏的工作區文件永遠不會被碰。
安裝與啓用¶
安裝前先看環境要求:DeepSeek Harness 0.2.1-rc.5 或更高版本(寫在 engines.dsh 字段裏)。
方式一:在 Harness UI 裏安裝(最直接)。
打開 Plugins → Add plugin,輸入包名並確認:
dsh-plugin-delete-chat
宿主側(Host)立即激活,連着的頁面裏就會出現 Delete chat 這一行。
方式二:從插件市場安裝。
在 Plugins → Discover → Add index source 中添加下面這個索引源:
https://eyadagharire.github.io/dsh-plugin-delete-chat/index.json
然後安裝 Delete chat 卡片。其他列出該包的插件市場索引源也可以用。
方式三:從源碼安裝。
把插件管理器指向包目錄——插件管理器的 install_bundle 動作接受該目錄的絕對路徑。
典型用法¶
README 沒有給出命令行示例,操作入口都在 UI 裏:
1、在側邊欄點開某個會話的「…」菜單;
2、在隨應用內置項之後找到紅色的 Delete chat 行,點擊;
3、在宿主風格的確認對話框裏看清「不可撤銷」提示;
4、點 Delete,或按 Escape / Cancel 放棄。
確認之後插件依次做三件事:停掉這個會話正在運行的工作(turn、subagent、後臺 job、定時提醒),刪除該會話的日誌目錄和 projection-cache 記錄,然後通知 UI 移除側邊欄裏這一行。如果刪的是當前在主視圖裏打開的會話,界面會自動跳到一個新會話。
如果刪的是 subagent 會話,操作會被拒絕——這類會話隨父會話一起被移除,不需要單獨刪。
卸載方式:在 Settings → Plugins 裏禁用或移除該 bundle。已刪的會話保持刪除狀態,不會因爲卸載插件而恢復。
適用場景與注意¶
適合這幾類情況:
- 本地
sessions/目錄被長期調試產生的大量會話佔滿,需要真正釋放空間,而不是歸檔; - 某個會話承載了敏感內容,要求在本設備上不留殘餘;
- 開發自己的會話管理插件時,需要參考「先停活、再刪數據、再通知 UI」這條完整鏈路。
注意事項:
1、刪除不可撤銷,這是設計目標而非缺陷。確認對話框裏的提示就是這個含義,點 Delete 前請確認選的是要刪的會話。
2、插件以當前 dsh 進程的權限運行。它直接讀寫 <DSH_HOME>/sessions,安裝前建議先審閱源碼和 MIT 許可證,確認來源可信再啓用。
3、不要與「Delete workspace」混淆。兩者的視覺樣式刻意做了一致,但本插件只刪會話存儲,不會碰 workspace 裏的文件;需要清工作區要選自帶那個動作。
4、Host 側依賴 connection、webServer、sessionPersistence 三個服務,Client 側註冊到 sidebar.workspaces.session.menu.item 和 shell.overlay 兩個 slot。宿主版本低於 0.2.1-rc.5 時無法加載。
5、subagent 會話和 agent 工具調用都被排除在外。如果自動化腳本里想加刪除邏輯,本插件不支持,行爲上是明確的拒絕。
小結¶
這個插件的價值在於把一個原本要手工翻目錄的運維動作,收進了會話菜單:刪除範圍明確(會話日誌 + projection-cache,不碰 workspace 文件)、順序明確(先停活再刪)、權限明確(僅用戶、僅 UI)。對 DSH「一切皆插件」的理念來說,它也示範瞭如何在不改動宿主的前提下,用標準的 slot 和 activity seam 擴展一次會話生命週期操作。社區目錄頁在 https://www.skillhub.cn/plugins/EYADAGHARIRE/dsh-plugin-delete-chat,源碼與安裝說明在 https://github.com/EYADAGHARIRE/dsh-plugin-delete-chat 。