DSH-Quickly-clear:在已歸檔對話裏永久刪除會話及其磁盤數據

前言

DeepSeek Harness(DSH)可以把對話歸檔,從側邊欄列表裏挪走,但 Host 側並沒有「刪除會話」的入口:workspaceRegistry 能歸檔、置頂、改名、把工作區裏的會話摘出來;sessionPersistence 只有 create / open / flush / stat / list;磁盤上的會話日誌、投影緩存和工作區記賬文件仍會留在 ~/.dsh 下。若你本地試過很多歸檔對話、想真正騰出空間或清理索引,只能手動刪目錄,還容易漏掉 workspace.json 裏的 archivedSessionIds / sessionIds,下次快照又可能把會話推導回列表。

DSH-Quickly-clear 是維護者 zsenpro 發佈的客戶端插件(GitHub:zsenpro/DSH-Quickly-clear),在已歸檔對話的 ⋯ 菜單裏增加「刪除對話」,通過 Host API 按固定順序清記賬、刪日誌目錄和投影緩存,並在成功後刷新頁面。未歸檔的對話不會出現該菜單項。

這是什麼

一句話:DSH 側邊欄插件,給已歸檔 Session 的 ⋯ 菜單加「刪除對話」,連同會話日誌、投影緩存和工作區記賬一起清掉。

  • 名稱:DSH-Quickly-clear(目錄頁:zsenpro/dsh-quickly-clear)
  • 分類:客戶端
  • 許可證:MIT(package.json 中版本爲 1.0.1)
  • 生態說明:DSH 奉行「一切皆插件」;SkillHub 等社區目錄與 DeepSeek / 幻方無官方從屬關係,本文僅介紹該開源插件本身。

核心功能

側邊欄與確認流程

  1. 菜單項註冊在 sidebar.workspaces.session.menu.item,cell id quickly-clear,order: 500(出廠菜單中 pin 100、rename 200、fork 300、archive 400、session-id 450 之後)。
  2. 可見性依賴 useWorkspaces(...).archivedSessionIds:未歸檔會話不渲染該行。
  3. 確認框註冊在 shell.overlay,cell id quickly-clear-dialog;卡片會展示會話標題與刪除後果,確認「永久刪除」後執行清掃;刪除成功後頁面會自動刷新(側邊欄會話目錄是客戶端快照,Host 刪文件後不重掛會殘留一行)。

Host 端清掃(POST /DSH-Quickly-clear/api/delete)

按 README 描述,順序大致爲:

  1. 所有 workspace 記錄的 sessionIds 去掉該 sessionId(workspace.mutate 寫盤)。
  2. unarchiveSession + unpinSession。
  3. 清空 registry 的 headers / sessionPaths / missingSessionPaths / invalidSessionPaths 四個緩存,避免下次從 cwd 索引把會話推回工作區。
  4. 刪除 sessions/<project>/<encodeSegment(sessionId)>/ 整目錄,project 目錄空則一併刪除。
  5. 刪除 storages/session_projcache/sessions/<sessionId>.json。
  6. 再次清空 registry 緩存。

正在運行的會話會被拒絕(session-live);歸檔通常會停掉會話,正常路徑不會撞上。

涉及的主要路徑

歸檔後磁盤上仍可能存在的文件包括:

~/.dsh/sessions/<project>/<sessionId>/session.v4.jsonl.zstd
~/.dsh/storages/session_projcache/sessions/<sessionId>.json
~/.dsh/storages/workspace.json           # archivedSessionIds / sessionIds

(實際目錄名經 encodeSegment 編碼,與 JSONL store 一致。)

它不刪什麼

  • attachments/v1/objects/:內容尋址,多會話共享,無法按會話歸屬刪除。
  • storages/cost-meter/ledger.json:按會話記賬的共享賬本,刪會話後歷史花費仍保留。
  • sessionQuery 的 SQLite 全文索引:服務無刪除 API,搜索裏可能仍有陳舊命中。

二次開發端點

均需通過 ctx.connection.requestRejection(同源 / 可信連接校驗)。調用記錄寫入 ~/.dsh/DSH-Quickly-clear.log。

方法 路徑 body 作用
POST /DSH-Quickly-clear/api/delete {"sessionId":"..."} 執行清掃,返回刪掉的路徑與記賬
POST /DSH-Quickly-clear/api/inspect {"sessionId":"..."} 只讀:列出命中的日誌目錄、緩存文件、是否在運行

安裝與啓用

環境要求:DSH 桌面版或 dsh web(走 profile 機制),Node >= 20。

將倉庫放到任意本地目錄後,二選一(資料原文未提供 dsh plugin add github:... 一類命令,請勿憑名稱拼接)。

首選:插件管理器

plugin_manager install_bundle target=<克隆目錄>

install_bundle 會給 profile 加依賴並掛上 bundle。若 profile 裏已有需本地編譯的依賴(例如帶 cpu-features 的包),pnpm 可能在 install script 批准處卡住,可改用手工登記。

與 @yg/dsh-session-mover 等本地插件形態相同。示例爲 Windows PowerShell:

$src = '<克隆目錄>'
$profile = Join-Path $env:USERPROFILE '.dsh\profiles\desktop'
New-Item -ItemType Junction -Path (Join-Path $profile 'node_modules\DSH-Quickly-clear') -Target $src

編輯 $profile\package.json 兩處(路徑用正斜槓):

{
  "dependencies": {
    "DSH-Quickly-clear": "link:<克隆目錄>"
  },
  "dsh": {
    "profile": {
      "bundles": [
        // ... 其它 bundle
        "DSH-Quickly-clear"
      ]
    }
  }
}

改動 index.js 需重啓 DSH Host;只改 client.js 可走 HMR。

卸載

從 bundles 刪除對應行、刪除依賴項、刪除 Junction,並刪除 ~/.dsh/DSH-Quickly-clear.log。

典型用法

  1. 對目標對話執行歸檔(⋯ → 歸檔對話)。
  2. 再次打開該對話的 ⋯ 菜單,末尾會出現「刪除對話」。
  3. 點擊後在確認卡片中核對標題與後果,選擇「永久刪除」。
  4. 成功後頁面刷新,側邊欄與磁盤數據與插件清掃邏輯一致。

倉庫內可用自檢腳本(臨時目錄、不連 Host、不碰真實數據):

node verify.js

README 說明爲 19 項自檢,覆蓋 encodeSegment、findSessionFolders、清掃流程樁服務等。

適用場景與注意

適合誰

  • 長期在 DSH 裏積累大量已歸檔對話,希望從磁盤和工作區記賬中徹底移除,而不是隻隱藏列表項。
  • 需要在刪除前用 /api/inspect 查看將命中的路徑,或基於同插件 API 做工具集成。

使用前請知悉

  • 插件以當前 DSH Host 進程權限讀寫 ~/.dsh;安裝前應閱讀源碼與 MIT 許可證,確認刪除範圍符合預期。
  • 刪除不可恢復(至少插件不會恢復附件對象、cost-meter 賬本與全文索引)。
  • 僅已歸檔會話顯示刪除入口;若菜單未出現,先完成歸檔步驟。

結尾

DSH 自帶歸檔但沒有一等公民的「刪除會話」;DSH-Quickly-clear 用客戶端菜單 + Host API 補上這條路徑,並刻意先改工作區記賬再刪文件,降低 Windows 句柄未釋放時會話仍掛在側邊欄的風險。若你在本地維護 DSH 會話數據,可在歸檔後用它做一次可確認的永久清理。

  • 目錄頁:https://www.skillhub.cn/plugins/zsenpro/DSH-Quickly-clear
  • 源碼與 README:https://github.com/zsenpro/DSH-Quickly-clear
羽毛球分组比赛记分
小程序二维码

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

小夜