前言¶
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(取第一個存在且含項目子目錄的候選)。
典型用法¶
- 日常刪單個會話:側邊欄該會話「…」→ Delete session → 確認;若要恢復,打開 Settings → Workspace Cleanup,在 Trash 裏 Restore。
- 清理某個工作區下大量歷史會話:設置頁對該工作區 Archive sessions,或需要時 Delete workspace(僅刪註冊,磁盤日誌需另管)。
- 確認不再需要回收站條目:設置頁 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 倉庫。