dsh-safe-session-delete:爲 DSH 補上可恢復的會話刪除

前言

DeepSeek Harness(DSH)在 Web 側邊欄裏管理多項目、多會話時,原生能力以歸檔爲主,並沒有面向日常整理的「刪除會話」入口。會話 JSONL 和投影緩存會長期留在 <DSH_HOME> 下,列表裏刪不掉、誤操作也難有緩衝。社區插件 dsh-safe-session-delete(維護者 tz-Wang510,分類:記憶)在菜單、懸停按鈕和「設置 → 會話管理」裏補上刪除流程:確認後由宿主端移入回收站並刷新列表,默認保留 30 天,便於手動找回。

這是什麼

一句話:給 DSH Web 側邊欄提供真正可用的刪除會話能力,日誌進回收站而非直接抹掉。

核心功能

下面介紹插件在界面與宿主端分別做了什麼(均來自 README 說明)。

界面入口

  1. 會話行 ... 菜單新增「刪除會話」。
  2. 會話行懸停時右側出現紅色 ×,無需展開菜單。
  3. 「設置 → 會話管理」列出所有會話,每行一個「刪除會話」按鈕。
  4. 中英文界面自適應;刪除前確認框會顯示會話標題。

宿主端刪除流程

確認後,宿主按會話 id 定位 <DSH_HOME>/sessions/<項目目錄>/<session-id>,並依次:

  1. 歸檔會話並停止正在運行的工作;
  2. 摘除內存中的 live 會話;
  3. 移動日誌到回收站,避免運行中寫入把文件重新創建。

同時會:

  • 刪除投影緩存 <DSH_HOME>/storages/session_projcache/sessions/<id>.json,防止列表刷新複用舊標題;
  • 遞歸處理該會話的 subagent 子會話目錄(側邊欄本就不顯示它們);
  • 調用瀏覽器端 sessions.refresh(),側邊欄立即更新。

當前正在主視圖打開的會話也可刪除:確認框會額外提示,刪除後對話關閉、清除保存的選擇並刷新頁面。

回收站與保留策略

日誌移動到:

<DSH_HOME>/session-trash/<時間戳>/<項目目錄>/<session-id>/

Windows 上常見路徑爲 C:\Users\<你>\.dsh\session-trash\。

  • 默認 30 天保留;過期批次在 DSH 啓動時及之後每 24 小時自動清理。
  • 設置頁可查看當前保留天數,並用「清理過期回收站」立即執行一次清理。
  • retentionDays: 0 表示關閉自動清理,僅手動清理。

profile 插件配置示例:

- id: dsh-safe-session-delete
  name: dsh-safe-session-delete
  config:
    retentionDays: 30

應用內無法撤銷;恢復需把回收站中的會話目錄移回原項目目錄下,再重啓 DSH。

安裝與啓用

從 GitHub Release 的預構建 tarball 安裝(<profile> 換成 desktop、web 等):

dsh plugin --profile <profile> add "https://github.com/tz-Wang510/dsh-safe-session-delete/releases/download/v0.2.0/dsh-safe-session-delete-0.2.0.tgz"

若本機 pnpm 報 UNABLE_TO_VERIFY_LEAF_SIGNATURE,在命令前設置:

$env:NODE_OPTIONS="--use-system-ca"

再執行安裝命令。安裝後重啓 DSH(插件在啓動時加載)。README 註明 npm 包發佈後還會補充 dsh plugin add dsh-safe-session-delete 的安裝方式。

從本地插件目錄安裝到其他 profile:

dsh plugin --profile <profile> add "<插件目錄>"

確認 package.json 的 dsh.profile.bundles 中出現 dsh-safe-session-delete 後重啓 DSH。

典型用法

經過上面的安裝與重啓,可按任一路徑刪除:

  1. 鼠標移到會話行,點 ... →「刪除會話」;
  2. 或直接點懸停時的紅色 ×;
  3. 或打開 設置 → 會話管理,在列表中點「刪除會話」。

確認後,該行從側邊欄消失。若確認不再需要回收站內容,可手動清空(示例爲 PowerShell):

Remove-Item "<DSH_HOME>\session-trash" -Recurse -Force

宿主 HTTP 路由(與內置 API 一樣受啓動令牌 / 簽名 Cookie 保護)包括:

POST /api/dsh-safe-session-delete/delete
Content-Type: application/json

{ "sessionId": "session-xxxx" }

另有 POST /api/dsh-safe-session-delete/status 與 POST /api/dsh-safe-session-delete/purge-trash,供設置頁與清理邏輯使用。

適用場景與注意

適合誰: 長期在 DSH 裏開大量會話、需要側邊欄和設置頁統一刪除入口,又希望誤刪能在 30 天內從 session-trash 手動恢復的用戶。

權限與安全: 插件以當前 DSH 進程權限讀寫 <DSH_HOME>;安裝前應閱讀倉庫 SECURITY.md 與源碼。路由非 owner Peer 會被拒絕。

已知限制(README):

  • 依賴 DSH 默認 JSONL 佈局(dshHomePath('sessions'));若 profile 修改了 session-persistence-jsonl.root,需自行適配。
  • 刪除是宿主端文件操作,非 DSH 官方持久化 API;DSH 升級若改存儲佈局,需同步適配插件。
  • 自動清理僅在 DSH 運行時執行;長期不啓動則過期批次保留到下次啓動。
  • 側邊欄入口依賴官方 slot;設置頁是相對更穩定的入口。

兼容性說明:已在 DSH 0.2.1-rc.5(Desktop / Windows)上通過真實瀏覽器點擊驗證;DSH 插件 API 仍處預覽階段,升級 DSH 後建議在隔離 profile 試裝並運行 npm test。

結尾

dsh-safe-session-delete 補上了 DSH 原生缺失的刪除路徑,並把日誌放進帶保留期的回收站,同時清理投影緩存與子會話目錄,列表可立即刷新。需要安裝包、截圖與變更記錄時,以 GitHub 倉庫爲準。

  • 目錄頁:https://www.skillhub.cn/plugins/tz-Wang510/dsh-safe-session-delete
  • GitHub:https://github.com/tz-Wang510/dsh-safe-session-delete
羽毛球分组比赛记分
小程序二维码

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

小夜