前言¶
在 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 中已說明這一邊界。
刪除會動哪些數據¶
經過上面的步驟,一次完整刪除會涉及:
$DSH_HOME/sessions/<project>/<sessionId>/—— 會話日誌目錄(移走或刪除);$DSH_HOME/storages/session_projcache/sessions/<sessionId>.json—— 投影緩存(含標題);$DSH_HOME/storages/workspace.json—— 歸賬、歸檔、置頂三個 id 列表(宿主內走workspaceRegistry.detachSession,CLI 直接修剪 JSON);- 宿主內存裏的 live 會話 —— 自 0.1.1 起會從
sessionsstore 摘出並廣播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
設置頁與側欄¶
- 打開 DSH Web 設置,左側進入「歷史對話」,按標題、大小、工作區、運行狀態篩選後批量勾選刪除。
- 打開「回收站」分區,對誤刪條目執行還原,或對確定不要的數據永久刪除、清空。
- 日常在側欄某會話的「⋯」菜單末尾選「刪除對話」,單條進回收站。
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