前言¶
在 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