會話回收站:給 DSH 加上可恢復的刪除能力

前言

DSH 沒有刪除會話的接口,只能歸檔或直接關閉。要徹底清理時,往往需要手動找文件、刪目錄,容易誤刪或遺漏。會話回收站(Session Recycle Bin)給 DSH 補上這個能力:刪除即移入可恢復的回收站,只有「徹底刪除」才真正銷燬磁盤上的字節。

是什麼

會話回收站是 DSH 桌面端的一個插件,由維護者 WangLemna 提供。它把「刪除」拆成兩步:先移入回收站,隨時可以恢復;再通過「徹底刪除」真正清空磁盤。插件圍繞三條約定設計:一條條目 = 一棵樹、不會悄悄銷燬任何東西、側欄入口、會話菜單、模型工具三處入口共用同一批 Host 方法。

核心功能

刪除與徹底刪除

  • 刪除:先彈確認框,寫明有多少個子會話會一併移入回收站;會話日誌與投影緩存被移動到 ~/.dsh/session-recycle-bin/<時間戳>-<id>/,並從工作區登記裏摘除。
  • 徹底刪除:同樣先過確認框,寫明要銷燬的條目數與子會話日誌數;只有在確認後纔會真正銷燬磁盤上的字節。

會話樹處理

插件按會話日誌 header 裏的 origin: 'subagent' + parentSession 解析整棵樹,刪除一個會話會帶走整棵樹;恢復與徹底刪除都把樹當成一個整體。恢復時會先檢查整棵樹的所有目標路徑,避免出現「父會話回來了、子會話還在回收站」的半棵樹。

入口與操作

  • 會話右鍵菜單 → 紅色「刪除會話…」:先確認,寫明子會話數。
  • 會話右鍵菜單 →「批量操作…」:對某個工作區的全部會話批量歸檔或刪除,確認框寫明整個選中集合帶多少子會話。
  • 側欄「會話回收站」:主區打開完整頁面,每條會話行首有複選框、行尾是恢復與徹底刪除,上方是選擇欄,可批量操作。
  • 右鍵側欄圖標 →「清空回收站…」:一鍵清空的捷徑,同樣先過寫明條數的確認框。
  • 設置 → 會話回收站:同一個回收站頁,給習慣在設置裏操作的人。
  • delete_session 工具(給模型用):preview / trash / trashMany / archiveMany / list / restore / restoreMany / purge / purgeMany / purgeAll,與 UI 共用同一批 Host 方法。

安全邊界

  • 只有「還有工作」的會話會被拒絕刪除;只是打開過會話、沒有在跑的任務,可以被刪除,恢復後也能繼續對話。
  • 不會誤銷燬:清空回收站不可撤銷,對話框打開期間整個回收站頁凍結,正文永遠寫明要銷燬的條目數與子會話日誌數。
  • 永遠不碰:附件目錄(~/.dsh/attachments/v1/objects)、~/.dsh/sessions 下的項目目錄本身、以及任何同 ID 的既有會話。
  • 父會話還在時,子會話不能被單獨刪除(返回 session-child),正確動作是刪父會話;父會話已不存在的孤兒子會話仍可按 id 清理。
  • 回收站條目仍佔磁盤,直到顯式徹底刪除,沒有自動過期清理。
  • Windows 上跨卷移動會從 rename 回退到複製(EXDEV);同卷內是原子 rename。
  • 恢復後側欄可能需要刷新一次頁面——DSH 沒有「會話出現」事件可爲恢復的日誌合成行。
  • Auto review 權限預設可能拒絕模型發起的 delete_session 寫調用,那是 DSH 的權限策略,不是插件行爲。

安裝與啓用

插件已在 npm 發佈爲 dsh-recycle-bin。

dsh plugin --profile <profile> add dsh-recycle-bin

也可以直接在市場裏搜索「會話回收站 / Session Recycle Bin」點安裝。裝完刷新一次頁面(Ctrl+F5),側欄入口會出現在「插件」「定時」「市場」那一排。

本地開發安裝(源碼即運行代碼,不需要 build):

plugin_manager { action: "install_bundle", target: "<本目錄絕對路徑>" }

卸載

plugin_manager { action: "remove_bundle" }

回收站裏尚未恢復的條目會保留在 ~/.dsh/session-recycle-bin。如果插件已卸載又想把會話找回來,每個條目裏都有 entry.json 清單寫明每個文件該去哪:把 session/(以及每個 children/<id>/session/)搬回 ~/.dsh/sessions/<projectDir>/<id>/,把 projcache.json 搬回 ~/.dsh/storages/session_projcache/sessions/<id>.json 即可。

版本兼容

插件要求 DSH 版本:0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2。engines.dsh 與 peerDependencies 中 9 個 @deepseek-ai/dsh-* 包也都在 0.2.x-rc.* 區間,並依賴 @deepseek-ai/cordis ~4.0.5。

適用場景與注意

  • 適合需要頻繁清理會話、希望避免誤刪或手動找文件的 DSH 桌面端用戶。
  • 插件以當前 DSH 進程權限運行,安裝前建議檢查源碼與許可證。

小結

會話回收站爲 DSH 補上了刪除會話的能力,把「刪除」拆成兩步,保留恢復餘地,同時通過確認框、樹處理、安全邊界等設計,避免誤操作與數據丟失。更多細節與源碼可在插件目錄頁與 GitHub 倉庫查看。

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

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

小夜