dsh-workspace-cleaner:DSH 工作區與會話清理

前言

DeepSeek Harness(DSH)的會話持久化後端在文檔裏寫得很清楚:沒有任何機制會刪除會話文件——日誌在 root 下一直累積,框架側也沒有刪除 API。側邊欄會話菜單裏因此只有 Archive,會話堆到幾百條後,列表難用,磁盤佔用也會一直漲。

社區插件 dsh-workspace-cleaner(維護者 1052088090,分類:客戶端)補了兩塊能力:設置頁裏彙總每個工作區及其會話數,並支持批量歸檔、註銷工作區註冊;側邊欄會話菜單裏增加 Delete session,把會話日誌挪到可恢復的回收站,而不是隻做界面上的歸檔。

這是什麼

dsh-workspace-cleaner 是面向 DSH 的客戶端插件(當前 package 版本 0.1.0,MIT 許可證)。它不改變 DSH 核心,而是在 Host 側通過 HTTP 路由操作 workspaceRegistry、會話持久化與文件系統,在 Client 側註冊「Workspace Cleanup」設置頁和側邊欄「Delete session」菜單項。第一次刪除採用 重命名 進回收站,不是直接 unlink,便於誤刪後恢復。

目錄頁:https://www.skillhub.cn/plugins/1052088090/dsh-workspace-cleaner
源碼:https://github.com/1052088090/dsh-workspace-cleaner

核心功能

設置 → Workspace Cleanup

一張表列出每個已註冊工作區:路徑、會話數量、目錄是否仍存在。可對單個或批量工作區執行:

操作 效果
Archive sessions 調用 workspaceRegistry.archiveSession,會話從分組列表消失,仍可從歸檔列表恢復
Delete workspace 調用 workspaceRegistry.delete,僅去掉註冊;會話日誌與項目目錄保留
Trash → Restore 日誌移回,取消歸檔並重新掛到原工作區
Trash → Delete permanently 永久刪除回收站目錄並報告釋放的字節數

側邊欄 → Delete session

打開某會話的「…」菜單 → Delete session → 確認。

  • 正在寫入的 live 會話拒絕刪除:當前 Agent 仍持有日誌,需先切到其他會話。
  • 行會立刻從側邊欄消失:插件先歸檔(與側邊欄過濾一致),再移動日誌,避免內存中的會話索引在重啓前仍列出該文件。
  • 日誌目錄被重命名爲 <dsh-home>/session-trash/<timestamp>--<session-id>/,並附帶 meta.json 記錄標題、項目目錄、cwd 與刪除時間。

安裝與啓用

在包含該插件包的目錄的上一級,或已 checkout 的絕對路徑處執行(命令來自 README,勿用未在文檔出現的 github:owner/repo 形式):

# from the directory that contains this package
dsh plugin add /absolute/path/to/dsh-workspace-cleaner

也可在 DSH 會話裏讓 Agent 從本地目錄安裝 bundle;plugin_manager install_bundle 會把 checkout 鏈到 profile 的 node_modules/dsh-workspace-cleaner,之後改文件只需重啓。

安裝後 重啓 DSH(Host 半部要註冊 HTTP 路由),再 刷新 Web GUI。運行環境要求 Node.js >= 20。

可選配置(寫入 profile 的插件 config):

- id: workspace-cleaner
  name: dsh-workspace-cleaner
  config:
    sessionRoot: 'D:\somewhere\session-logs'   # optional override
字段 默認 含義
sessionRoot 自動探測 JSONL 會話日誌根的絕對路徑

探測順序爲:config.sessionRoot → $DSH_PROFILE_DIR/../../sessions → $DSH_PROFILE_DIR/sessions → $DSH_HOME/sessions → ~/.dsh/sessions(取第一個存在且含項目子目錄的候選)。

典型用法

  1. 日常刪單個會話:側邊欄該會話「…」→ Delete session → 確認;若要恢復,打開 Settings → Workspace Cleanup,在 Trash 裏 Restore。
  2. 清理某個工作區下大量歷史會話:設置頁對該工作區 Archive sessions,或需要時 Delete workspace(僅刪註冊,磁盤日誌需另管)。
  3. 確認不再需要回收站條目:設置頁 Trash → Delete permanently。

架構與安全(簡要)

client.js  ──POST /workspace-cleaner/api/{list,apply,trash,deleteSession,restore,purge}──►  index.js
   (settings.section + sidebar session menu)                                              (Host)

Host 是唯一碰文件系統的部分,路由與內置 browser 路由一樣受 ctx.connection.requestRejection 約束。Client 從 Host 拉數據,而不是隻用 ctx.workspaces(該 face 無法枚舉全部工作區供插件頁使用)。

安全行爲包括:live Agent 返回 409 session/live;日誌缺失時清理賬務並返回 unmaterialized / alreadyDeleted 而非硬失敗;重命名失敗會回滾歸檔;回收站 id 校驗禁止 .. 與路徑分隔符。

適用場景與注意

適合長期用 DSH、會話與工作區註冊不斷增多、需要真實刪日誌或集中管理工作區的開發者。SkillHub 等社區目錄是獨立站點,與 DeepSeek / 幻方無官方從屬關係;插件以 當前 dsh 進程權限 讀寫會話目錄與回收站,安裝前應自行審閱源碼與 MIT 許可證。

已知限制(README):GUI 緩存導致已刪會話在歸檔列表裏可能需刷新或重啓才消失;SQLite 搜索索引可能在下次 DSH 啓動前保留 stale 命中;會話 id 若與後端轉義規則不一致可能報「磁盤上無日誌」;回收站位於日誌根旁 <dsh-home>/session-trash,後端不會掃描該目錄。

結尾

DSH 設計上會話刪除留空,由插件填補。dsh-workspace-cleaner 用設置頁 + 側邊欄刪除,把「歸檔」與「日誌進回收站」分開,並保留恢復與永久清除路徑。進一步瞭解可訪問 SkillHub 目錄頁 與 GitHub 倉庫。

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

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

小夜