dsh-trash:在 DSH 側欄一次性刪除會話

前言

DeepSeek Harness(DSH)默認支持把會話歸檔(Archive):側欄裏仍能看到該行,磁盤上的日誌也會一直保留。對臨時調試、一次性探索或已過期的會話,歸檔並不能真正騰出工作區計數,也不會清掉持久化目錄。若只靠手動刪目錄或改登記文件,還容易漏掉 workspace 分組、歸檔集與 pin 集裏的 session id。

下面介紹的 dsh-trash(維護者 BarryAlllen,社區目錄見 SkillHub 條目)把「刪除會話」做成與 Rename、Pin、Archive 並列的一級操作:側欄菜單一行即可完成;智能體也可通過同名工具批量刪除。插件歸類爲客戶端,與 DSH 自帶的 Web/Desktop 配置配合使用。

這是什麼

dsh-trash 是一個 DSH bundle 插件(npm 包名 @local/dsh-session-trash,版本 1.0.0)。它在不改變 DSH 核心的前提下,補全「徹底刪除會話」路徑:側欄即時移除行、遞歸刪除該會話的 log 目錄,並同步清理 workspace 記賬以及全局 archive / pin 集合中的 id。

許可證爲 MIT(見 GitHub 倉庫 README 徽章說明)。

核心功能

依據倉庫 README,當前覈實的能力包括:

  • 側欄會話菜單:在會話行 ⋯(或右鍵)菜單末尾、分隔線之後出現 Delete session;危險樣式、獨立圖標、確認對話框與 toast 反饋,由內置 Context Menu 渲染。
  • 無殘留刪除:行立即消失(無需整頁刷新);對應 log 目錄刪除;會話不再計入 Workspace、archive、pin bookkeeping。
  • 智能體工具 session_delete:傳入多個 sessionIds,可一次處理多條會話;返回按會話粒度的成功/失敗結果。
  • 實現特點:Host 側爲純 ESM,瀏覽器側爲 window.__ModuleLoader__ 工廠;README 標明零依賴、零構建步驟;不注入 system prompt,除工具 schema 外無額外 prompt 成本。

環境與依賴

項 要求
DSH 0.2.2-rc.1(README 標註爲 verified);需已內置的 connection、webServer 服務(任意 Web/Desktop profile)
Node.js 隨 DSH 捆綁,無需單獨安裝
持久化後端 @deepseek-ai/dsh-session-persistence-jsonl(發行版默認),用於定位 log 目錄
可選 workspaceRegistry:用於分組清理;缺失時其餘功能仍可用

平臺徽章寫明支持 macOS、Linux、Windows。

安裝與啓用

官方 README 的安裝路徑是:先把倉庫放到本機,再通過 plugin_manager 把目錄安裝進你實際使用的 profile。install_bundle 會把目錄鏈入 profile、註冊 bundle patch 並熱應用;對該 profile 下所有會話生效,重啓後仍保留。鏈接目錄意味着後續在目錄裏 git pull 後,需 DSH 重啓(或 Client 側刷新頁面)纔會載入更新。

若菜單未出現,README 建議先刷新頁面一次(Client 模塊在啓動時提供)。

也可用 DSH 界面:Plugins → Install,指向同一克隆目錄,效果與 install_bundle 相同。

安裝命令須與資料原文一致,如下。

git clone https://github.com/BarryAlllen/dsh-trash.git
plugin_manager
  action: install_bundle
  target: /absolute/path/to/dsh-trash

將 target 換成你機器上 dsh-trash 目錄的絕對路徑。

卸載時 README 給出:

plugin_manager
  action: remove_bundle
  target: @local/dsh-session-trash

已刪除的會話不會恢復;其他插件不受影響。

安全提示:插件在當前 DSH 進程的權限下執行刪除與 API 註冊。安裝前請自行閱讀 index.js 等源碼,並確認 MIT 許可證是否符合你的合規要求。社區目錄 SkillHub 與 DeepSeek / 幻方無官方從屬關係,不宜當作官方應用商店條目理解。

典型用法

側欄刪除

  1. 將指針懸停在會話行上,打開 ⋯,或右鍵該行。
  2. 在菜單底部選擇 Delete session(分隔線下方)。
  3. 在確認框中核對會話名稱後確認。

智能體調用 session_delete

請求體示例(README):

{ "sessionIds": ["session-c9456202-3d3d-4cf9-9aa8-a1fd883a0fbc"] }

批量時結果爲逐條報告,便於定位失敗項:

{
  "results": [
    {
      "sessionId": "session-c9456202-3d3d-4cf9-9aa8-a1fd883a0fbc",
      "ok": true,
      "title": "雜活",
      "dir": "/Users/you/.dsh/sessions/--Users-you-workspace-tmp--/session-c9456202-3d3d-4cf9-9aa8-a1fd883a0fbc",
      "resident": false
    },
    {
      "sessionId": "session-does-not-exist",
      "ok": false,
      "error": "session \"session-does-not-exist\" does not exist"
    }
  ]
}

不確定要刪哪些會話時,README 建議在刪除前先用 session_search / session_list 覈對。

刪除時實際發生什麼

對通過檢查的會話,README 按順序說明:

  1. Workspace 記賬:從所屬 Workspace 的 sessionIds 中移除該 id。
  2. Archive 與 pin 集合:從 registry 全局集合中移除該 id。
  3. 持久化 log:遞歸刪除 <session-root>/<project-key>/<encoded-id>/(含各代 session.*.jsonl.zstd、session.lock 等)。
  4. Client 通知:發出 api-session/removed,由現有 Client 走 list remove 突變,側欄行消失。

步驟 1–2 爲派生面;若失敗會記日誌且不阻斷步驟 3 的目錄刪除。

限制與安全

  • 不可恢復:無回收站、無撤銷、無自動備份。
  • 運行中的會話拒絕刪除:需先停止會話再刪。
  • 當前運行中仍打開過的會話:可從磁盤刪除,但在本次 DSH 運行週期內可能仍駐留內存;toast 會提示,重啓前不會在磁盤上再出現。
  • 主要刪除對象是 log 目錄;附件、spill、投影與搜索索引等派生或共享數據,README 說明會話消失後可能仍留殘留但不可達,插件不會主動清理這些共享資源。
  • 路徑安全:目錄路徑由持久化後端佈局重算,若結果逃逸 session root 則拒絕。

配置與排錯

配置:README 明確無 config schema、無憑據、無設置項。

常見症狀(摘自 README 排錯表):

現象 處理
沒有 Delete session 菜單項 刷新頁面;仍無則確認 Plugins 中 bundle 已啓用
toast 出現 HTTP 404 Host 半未激活或傳輸層缺少 /api 通道
提示 session is running 先停止會話
行消失但 id 仍在 workspace.json 分組清理可能僅警告跳過;可憑日誌提 issue
已刪會話仍在列表 本 run 內內存駐留;重啓 DSH

工作機制(簡要)

組件 方式
菜單項 ctx.contextMenus.register({ target: 'session' }) 及 contextMenu 圖標槽
Client → Host POST /api/session-trash/delete,經 ctx.connection.fetch.register
Agent → Host session_delete 工具,輸出經 JSON Schema 校驗
共享邏輯 index.js 單一實現,兩路調用返回相同 per-session 結構
根目錄 從 ctx.sessionPersistence.root 讀取,回退 profile 配置

結尾

若你需要在 DSH 裏把「刪會話」當成與歸檔對稱的一級能力——側欄一點清掉 log,並讓 workspace / archive / pin 登記一致——dsh-trash 提供了現成的客戶端插件與 session_delete 工具路徑。使用前務必理解不可逆刪除與運行中會話限制。

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

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

小夜