dsh-session-purge:徹底刪除 DSH 會話與磁盤殘留

前言

在 DeepSeek Harness(DSH)裏刪會話,常見做法只會把條目從側邊欄或列表裏拿掉。轉錄目錄、投影緩存、工作區記賬等仍會留在 ~/.dsh 下,佔空間,有時還會讓其它會話管理插件反覆報「缺少列表緩存 / 重建失敗」。若你希望刪除與 DSH 在磁盤上留下的痕跡一致,需要一套專門做「真刪」的工具。下面介紹社區插件 dsh-session-purge(倉庫 EricZhouziRui/dsh-session-purge),維護者爲 EricZhouziRui,SkillHub 分類爲 admin-security。

這是什麼

dsh-session-purge 是 DSH 本地插件(包名 @local/session-purge,當前資料版本 0.1.3,MIT 許可證)。它做的是:在會話從持久化列表中消失之後,一併清理該會話在磁盤上的轉錄目錄、投影緩存、spill 文件、工作區記賬,以及歸檔 / 置頂 / 收藏記錄;並可掃描並清理歷史上「只刪列表、未清目錄」留下的孤兒目錄。安裝後還可掛接官方與其它插件的刪除路徑,在 archive-manager 等執行「永久刪除」後自動收尾,而不必每次手動打開設置頁。

典型殘留路徑(README 中的說明)包括:

~/.dsh/sessions/--Users-you-project--/session-xxxxxxxx-..../   # 對話正文與附件
~/.dsh/storages/session_projcache/sessions/session-xxxxxxxx....json
~/.dsh/storages/workspace.json                                  # 工作區/歸檔/置頂記賬

核心功能

能力 說明
徹底刪除 轉錄目錄、投影緩存、spill、工作區記賬、歸檔/置頂/收藏、空項目目錄
自動收尾 監聽 api-session/removed,包裝 workspaceRegistry 上若干刪除方法;其它入口聲明刪除後約 0.9 秒再清殘留
運行中可刪 先 flush 並從 Host 分離;對仍在寫盤的會話用 tombstone 反覆清除直至 Agent 結束
工作區視圖 設置頁按工作區分組,一級只顯示標題、狀態、時間、大小
一鍵刪空白 頂部「刪除空白會話(N)」批量刪除所有空白會話
安全清理 只識別 DSH 項目目錄;拒絕符號鏈接路徑;讀不到持久化列表時停用「清理殘留」
可審計 支持 dry-run;無磁盤痕跡時返回 missing,不假報成功
子代理 默認隱藏 origin: subagent 的委派會話;父會話消失後的子代理孤兒可清理;刪父會話可級聯刪非運行中的子會話
應用內更新 設置頁檢查 GitHub Release,校驗 SHA-256 後替換 profile 內安裝副本(複製安裝模式)

插件以當前 DSH 進程權限訪問本機 ~/.dsh(Windows 爲 %USERPROFILE%\.dsh);刪除不可恢復,且不刪除附件二進制對象、費用統計、模型憑據(見 README「安全邊界」)。

安裝與啓用

環境要求:DSH 0.2.x、Node.js 18+,且至少啓動過一次 DSH,以便生成 ~/.dsh 與 profile。

  1. 打開 Releases,下載最新的 dsh-session-purge-<version>.zip 並解壓。
  2. 在解壓目錄執行安裝器(先 dry-run 確認會寫入哪個 profile):
node install.mjs --dry-run   # 先看會改哪個 profile
node install.mjs             # 複製安裝

安裝器會定位 $DSH_HOME 和 profile,把插件複製到 <profile>/local-plugins/@local/session-purge,並更新 profile 的依賴與 bundle。常用參數:

node install.mjs --profile web          # 安裝到指定 profile
node install.mjs --home /custom/.dsh    # DSH_HOME 不在默認位置
node install.mjs --link                 # 開發模式:鏈接當前源碼目錄
  1. 完全退出 DSH(macOS 爲 Cmd+Q)後重新打開。
  2. 打開 設置 → 徹底刪除會話。

說明:資料中的標準安裝路徑是 Release zip + install.mjs,並非 SkillHub 名稱拼接的 dsh plugin add 命令。若採用 --link 或從源碼目錄開發,應用內更新器不適用,需自行 git pull 後重新運行 node install.mjs。

典型用法

設置頁

在 設置 → 徹底刪除會話 中:

  • 會話按工作區分組;無工作區歸屬的會話與磁盤殘留排在最後一組。
  • 點「徹底刪除」→「確認刪除」即永久刪除;運行中的會話也可刪,頁面會提示刷新後消失。
  • 頂部「刪除空白會話(N)」一次清空所有空白會話,確認框會顯示數量與大小。
  • 頂部「清理殘留」處理孤兒會話目錄、過期投影緩存、失效工作區/收藏記錄、archive-manager 失效索引和空項目目錄。
  • 「自動收尾」狀態行可查看是否已掛接及最近一次處理結果。

模型工具 session_purge

Agent 可通過工具調用列舉、預演刪除或觸發清理:

session_purge({ "action": "list" })
session_purge({ "action": "purge", "sessionIds": ["session-xxxx"], "dryRun": true })
session_purge({ "action": "purge", "sessionIds": ["session-xxxx"] })
session_purge({ "action": "cleanup" })
session_purge({ "action": "reconcile", "sessionIds": ["session-xxxx"] })

建議對不確定的會話先設 "dryRun": true,覈對標題與路徑後再執行正式 purge。

與其它刪除入口的關係

安裝後插件會監聽 api-session/removed,並包裝 workspaceRegistry 上的 deleteSession、deleteArchivedSessions、cleanOrphanSubagents、deleteSessionCore、publishDeletedSession 等。其它插件或 UI 刪除會話後,只要會話已不在持久化列表中,殘留會在短暫延遲後被清理;普通關閉而會話仍在列表中時會被跳過。

適用場景與注意

適合:長期在本機跑 DSH、會話數量多、用過 archive-manager 等「刪列表」能力、需要回收磁盤或消除索引告警的開發者。也適合需要批量刪空白會話、或希望刪父會話時順帶清理非運行子代理的場景。

使用前請注意:

  • 刪除不可恢復;路徑須符合 <sessionsRoot>/<project>/<session-id> 且整條路徑不經過符號鏈接。
  • 清理孤兒目錄時會跳過創建不足 60 秒的會話目錄,避免誤刪新建會話。
  • 更新來自倉庫公開 Release 並逐文件校驗哈希,不執行遠程腳本;更新後需完全退出並重啓 DSH。舊副本會保留爲 .backup-<timestamp>。
  • 安裝與運行前可自行查閱 GitHub 源碼 與 MIT 許可證;插件在本地以 DSH 用戶權限讀寫配置與會話數據。

卸載(不刪會話數據本身):從 <profile>/package.json 的 dsh.profile.bundles 與 dependencies 移除 @local/session-purge,刪除 local-plugins/@local/session-purge 與對應 node_modules 副本,然後重啓 DSH。

結尾

dsh-session-purge 把「刪會話」從 UI 列表操作延伸到磁盤與工作區記賬的一致清理,並通過自動掛接減少手工收尾。若你要在本地 DSH 環境做會話衛生管理,可從 SkillHub 目錄頁瞭解歸類,再按 Release 安裝包與 README 步驟啓用。

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

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

小夜