dsh-session-delete:在 DSH Web 側欄永久刪除會話

前言

DeepSeek Harness(DSH)的會話列表支持隱藏或歸檔,但本地仍保留會話日誌、投影緩存、工作區關聯和定時任務等數據。若需要徹底清掉某次對話及其子代理派生會話,而不是僅讓它從列表裏看不見,就需要在 Host 側按 DSH 的數據佈局做 staged 刪除。社區插件 dsh-session-delete(維護者 Sartherland)在 Web 側欄每條會話的 ... 菜單中增加 Delete permanently…,經確認後從 DSH 數據目錄中移除對應會話及相關元數據;操作不可撤銷。

下面介紹該插件的定位、刪除範圍、安裝步驟與使用方式,並說明安全機制與使用限制。

這是什麼

dsh-session-delete 是一個面向 DSH Web profile 的插件:在側邊欄會話行菜單裏提供永久刪除入口,由 Host 進程執行刪除邏輯。它解決的是「僅歸檔/隱藏無法清除本地持久化數據」的問題;與手動刪目錄不同,插件會一併處理工作區歸屬、置頂/歸檔狀態、投影緩存、定時任務、子代理子會話以及可選的全文搜索索引對賬。

插件在 DSH 進程內運行,會直接改動 ~/.dsh 等 persistence 根下的文件。README 明確標註爲 destructive plugin,安裝前應閱讀刪除範圍並自行審閱源碼與 MIT 許可證。當前 package 版本爲 0.1.0,要求 DSH >= 0.2.1-rc.3(Web profile),無構建步驟,客戶端爲預構建的 Module Loader bundle。

核心功能

菜單與確認

每條會話行懸停後點擊 ...,會出現 Delete permanently…。確認對話框會寫明會話名稱並說明將被移除的內容;確認後執行刪除,沒有 undo。若 Host 拒絕(例如會話仍打開),對話框會顯示原因且不改動數據。

會刪除什麼

針對選中的會話,Host 會移除或清理如下項(與 README 表格一致):

數據 行爲
Session log 刪除 sessions/<project>/<session-id>/ 下各格式版本的日誌
Subagent descendants 遞歸刪除 origin: "subagent" 的子會話;fork 不算後代,會保留
Projection cache 刪除 session_projcache 記錄及 .bak.* 備份
Workspace membership 從工作區 detach,陳舊行消失
Pin / archive 刪除前先取消置頂與歸檔
Scheduled tasks 刪除綁定到該會話的全部定時任務(含 inactive)
Spill files 刪除本地 spill 後端的 session-<hash> 目錄( oversized 工具輸出)
Search index 若啓用組合全文後端,觸發一次 reconcile,去掉已刪會話的索引行

當前 正在打開的會話會被拒絕刪除:DSH 仍持有 Agent 與 log handle,刪底層文件可能導致損壞或會話再次出現。需先切換到其他會話再刪舊會話。

刻意保留的內容

  • Attachments:位於 <DSH_HOME>/attachments,內容尋址,可能被其他會話引用,插件不觸碰。
  • 瀏覽器側側欄排序/草稿:非 Host 數據;列表刷新後陳舊 id 會被 UI 忽略。
  • 已上傳到模型提供商、手動導出或遙測捕獲的外部副本:不在 Host 本地存儲範圍內。

HTTP 路由爲 /api/session-delete,註冊在 DSH 已認證的 owner-only Fetch channel 上,繼承瀏覽器 cookie 與常規 /api 的 Host/Origin fence,無需單獨配置未認證端口或密鑰。

刪除如何分階段保證安全

README 描述的四步流程:

  1. Preflight — 解析會話及全部 subagent 後代,確認無 live 會話;拒絕符號鏈接的 session 目錄;驗證路徑在 persistence 根內。
  2. Quarantine — 將會話目錄重命名爲隱藏 sibling;失敗時回滾已移動的目錄。
  3. Metadata cleanup — 清理工作區、pin/archive、投影緩存、定時任務、session-scoped spill;失敗收集爲 warning,不故意把 log 留在原位。
  4. Purge — 遞歸刪除隔離目錄;若 OS 仍佔用文件,warning 會給出殘留路徑供手動清理。

安裝與啓用

要求 DSH Web profile >= 0.2.1-rc.3。任選一種方式安裝後,在 Plugins 頁面啓用 Session Delete(bundle 名 dsh-session-delete);若 profile 未啓用 HMR,需重啓 DSH。

從 DSH UI

打開 Plugins → Install,粘貼 GitHub 倉庫 URL,啓用 Session Delete,按需重啓。

從 CLI

官方命令:

dsh plugin add github:Sartherland/dsh-session-delete

本地 checkout 開發時可用 link:

dsh plugin add link:/absolute/path/to/dsh-session-delete

手動編輯 profile

在 ~/.dsh/profiles/<profile>/package.json 中加入依賴並在 dsh.profile.bundles 中列出 bundle 名;示例見倉庫 README。bundle 通過 cordis.patch.yml 向 Host 註冊 session-delete 行。

典型用法

  1. 打開側邊欄會話列表。
  2. 懸停目標會話,點擊 ...。
  3. 選擇 Delete permanently…。
  4. 閱讀確認文案,點擊 Delete permanently。

菜單在 row 不可用時隱藏。若因會話仍打開而被拒絕,按提示先切換會話再試。

適用場景與注意

適合:需要在本機 DSH 數據中徹底移除某次對話及由其派生的 subagent 會話;清理投影緩存、定時任務與 spill,並同步工作區列表;在啓用全文搜索時希望索引與本地刪除一致。

務必注意:

  • 插件以 當前 DSH Host 進程權限 運行,刪除的是本機 persistence 數據,不可恢復。
  • 安裝前閱讀 README 的「What it deletes / keeps」並查看 lib/delete.js 等實現;社區目錄 SkillHub 插件頁 與 GitHub 倉庫相互獨立,非 DeepSeek / 幻方官方應用商店,歸屬與維護以 Sartherland 倉庫爲準。
  • 附件、外部導出與 provider 側副本不在刪除範圍內;隱私或合規需求需另行處理。

開發側可運行 npm test(node –test)與 npm run check 做語法檢查;Host 半無運行時依賴,Client 由 DSH Module Loader 注入 react 與 @deepseek-ai/dsh-client-ui-primitives。

結尾

dsh-session-delete 把 DSH Web 裏「永久刪除會話」做成一條可確認的菜單操作,並在 Host 側按 preflight → quarantine → metadata → purge 刪除日誌、子代理後代、緩存、工作區與定時任務等,同時保留共享附件與 fork 會話。使用前確認 DSH 版本與 Web profile,並理解破壞性範圍。

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

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

小夜