dsh-history-purge:管理並刪除 DSH 歷史會話

前言

在 DeepSeek Harness(DSH)裏做智能體開發,會話會不斷累積:側欄變長、磁盤佔用上升,原生界面又缺少「批量清理、誤刪可恢復」的能力。手動刪 $DSH_HOME/sessions 下的目錄容易漏掉工作區賬本、投影緩存,刪完還可能出現側欄「幽靈會話」——文件已進回收站,列表仍掛在「未分組」下。

下面介紹社區插件 dsh-history-purge(維護者 123456robust),在 SkillHub 目錄中歸類爲「記憶」。它圍繞本機 $DSH_HOME 提供設置頁批量管理、側欄單條刪除、回收站還原,以及宿主未啓動時仍可用的離線 CLI。

這是什麼

dsh-history-purge 的職責可以概括爲:刪除或回收 DSH 的歷史對話(會話),默認移入插件自管的回收站,而不是直接抹盤。

項目 說明
目錄頁 https://www.skillhub.cn/plugins/123456robust/dsh-history-purge
源碼 https://github.com/123456robust/dsh-history-purge
當前版本(package.json) 0.1.1
許可證 MIT
Node >=22.15

插件只處理本機 $DSH_HOME;遠端或多機歷史不在範圍內。回收站目錄爲 $DSH_HOME/history-purge/trash/<時間戳>-<sessionId>/,DSH 原生沒有會話回收站,被刪會話不會出現在其他原生界面,只有本插件能還原。

核心功能

四個入口

入口 位置 能力
設置 → 歷史對話 設置面板左側導航(order 26) 列出全部會話(標題、最近活動、大小、歸屬工作區、運行中、置頂、歸檔),勾選批量刪除;回收站頁可還原、永久刪除、清空
側欄會話「⋯」菜單 → 刪除對話 每個會話行菜單末尾(order 500) 單條刪除,進回收站
Agent 工具 history_purge 模型可調用 list / delete / restore / empty
CLI dsh-history-purge 終端 宿主沒啓動時也能刪

默認刪除等於移入回收站;配置 permanentByDefault: true 時刪除直接抹盤。回收站默認保留 30 天,宿主啓動時會按策略清掃;permanent 或 CLI 的 --permanent 纔是跳過回收站直接刪除。

正在運行的會話默認拒刪;設置頁可勾選「運行中的也刪除」,HTTP/API 側需 force: true。強行刪除運行中會話只會刪盤,Agent 若仍在跑,下一次 flush 可能把日誌寫回——README 中已說明這一邊界。

刪除會動哪些數據

經過上面的步驟,一次完整刪除會涉及:

  1. $DSH_HOME/sessions/<project>/<sessionId>/ —— 會話日誌目錄(移走或刪除);
  2. $DSH_HOME/storages/session_projcache/sessions/<sessionId>.json —— 投影緩存(含標題);
  3. $DSH_HOME/storages/workspace.json —— 歸賬、歸檔、置頂三個 id 列表(宿主內走 workspaceRegistry.detachSession,CLI 直接修剪 JSON);
  4. 宿主內存裏的 live 會話 —— 自 0.1.1 起會從 sessions store 摘出並廣播 api-session/removed,避免只刪磁盤後側欄仍顯示「未分組」幽靈行;重複刪除對已進回收站的 id 返回冪等結果(如 already-trashed),不再誤報 session not found。

HTTP 橋(Web 宿主)

宿主在 webServer 上註冊五條同源路由;跨站或 Origin: null 返回 403:

GET  /history-purge/state      -> { sessions[], trash[], stats }
POST /history-purge/delete     { ids: string[], permanent?: boolean, force?: boolean }
POST /history-purge/restore    { entries: string[] }
POST /history-purge/purge      { entries?: string[], empty?: boolean }
POST /history-purge/sweep      {}

安裝與啓用

DSH 生態強調「一切皆插件」;SkillHub(skillhub.cn)是社區插件目錄,與 DeepSeek / 幻方無官方從屬關係。安裝前應自行閱讀倉庫源碼與 MIT 許可證——插件以當前 dsh 進程權限讀寫本機 $DSH_HOME。

README 中的安裝示例爲本機路徑安裝(非憑倉庫名拼接的 github: 命令):

dsh plugin --profile web add /home/qq/dsh-plugins/dsh-history-purge

plugin add 不會自動寫入 bundle 列表,需要把 dsh-history-purge 加進 profile 的 dsh.profile.bundles。

重啓 dsh web 生效:

~/.dsh/restart-dsh-web.sh

配置

在 profile 的 cordis.patch.yml 中(或通過 dump 後的等價配置):

- id: dsh-history-purge
  name: dsh-history-purge
  config:
    trashRetentionDays: 30      # 回收站保留天數,0 = 永不自動清理
    permanentByDefault: false   # true = 刪除直接抹盤,不進回收站

回滾

dsh plugin --profile web remove dsh-history-purge
# 再從 profiles/web/package.json 的 dsh.profile.bundles 刪掉該行

移除插件不會恢復已刪會話;回收站內容仍在 $DSH_HOME/history-purge/trash/,可重新安裝插件還原,或手工搬回 sessions/<project>/<id>/。

典型用法

CLI

先做列表,再按需刪除或還原:

dsh-history-purge list --limit 20          # 看會話;--json 出機器可讀
dsh-history-purge delete <id> [<id>...]    # 進回收站
dsh-history-purge delete <id> --permanent  # 直接抹盤
dsh-history-purge restore <trash-entry>    # 從回收站還原
dsh-history-purge purge --all --yes        # 永久清空回收站
dsh-history-purge sweep --days 7           # 按保留期清理
dsh-history-purge stats

在倉庫目錄內可直接指定 home 做調試:

node bin/dsh-history-purge.js list --home /tmp/fixture

設置頁與側欄

  1. 打開 DSH Web 設置,左側進入「歷史對話」,按標題、大小、工作區、運行狀態篩選後批量勾選刪除。
  2. 打開「回收站」分區,對誤刪條目執行還原,或對確定不要的數據永久刪除、清空。
  3. 日常在側欄某會話的「⋯」菜單末尾選「刪除對話」,單條進回收站。

Agent 側若已暴露 history_purge 工具,模型可按 list / delete / restore / empty 與上述語義一致地操作(具體以宿主加載的插件版本爲準)。

適用場景與注意

適合誰: 長期在本機跑 DSH Web、會話數量多、需要可控清理與誤刪恢復的智能體開發者;需要在 cron 或 SSH 裏清理、而 Web 未啓動時,CLI 可單獨使用。

務必注意:

  • 權限與數據範圍等於運行 dsh 的用戶對本機 $DSH_HOME 的讀寫權;安裝前檢查 lib/core.js、lib/index.js 等實現是否符合你的安全策略。
  • 只刪本機歷史;不包含遠端同步或多機副本。
  • 會話日誌爲 app 私有格式(zstd + JSONL);插件只讀首行取 id / cwd / createdAt,其餘字節原樣搬動,不做改寫。
  • 對 live 會話的摘取依賴宿主 SessionStore 內部結構;若宿主升級導致結構變化,README 說明可能退化爲「沒摘掉」,但不會讓磁盤刪除失敗——此時可能需要重啓宿主或手動確認側欄。

結尾

dsh-history-purge 把「列會話、刪會話、回收站、還原、過期清掃」收到同一套磁盤邏輯(lib/core.js)與 Web/CLI/Agent 入口裏,並處理了刪盤未摘 live 會話時的側欄一致性問題。若你需要在 DSH 上主動管理歷史對話而不是手工刪目錄,可以從目錄頁或 GitHub 拉取源碼,按 README 安裝到 web profile。

  • 目錄頁:https://www.skillhub.cn/plugins/123456robust/dsh-history-purge
  • GitHub:https://github.com/123456robust/dsh-history-purge
羽毛球分组比赛记分
小程序二维码

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

小夜