dsh-deep-purge:在 DSH 里彻底删除会话及其附属数据

前言

在 DeepSeek Harness(DSH)里做智能体开发,会话会不断积累:对话日志、投影缓存、工作区里的 session 记账,以及按内容哈希存放的附件副本。归档或普通删除往往只动其中一部分,磁盘上仍会留下目录和对象,既占空间,也不利于在测试环境或敏感场景里「清干净」。

若手动删目录、改工作区 JSON、再猜哪些附件还能删,容易漏项,更可能误删仍被其他会话引用的共享附件(例如从父会话分叉出来的子会话会继承同一批图片对象)。下面介绍的 dsh-deep-purge 由维护者 HunLongBaiZe 发布,分类为 admin-security,目标是在一次确认后,按引用关系安全地回收本会话独占的数据,并给出逐项汇总。

这是什么

dsh-deep-purge 是 DSH 插件:在侧栏会话行的「…」菜单中增加「彻底删除…」,删除前有风险确认弹窗,删除后展示删了多少日志目录、附件引用/删除/保留数量及释放空间。它不替代 DSH 自带的归档,而是面向「需要从日志、缓存、记账到可安全删除的附件,一次性收尾」的管理需求。

仓库:https://github.com/HunLongBaiZe/dsh-deep-purge
社区目录页:https://www.skillhub.cn/plugins/HunLongBaiZe/dsh-deep-purge(独立站点,与 DeepSeek / 幻方无官方从属关系)。

核心功能

界面与确认流程

  • 侧栏会话行「…」菜单增加「彻底删除…」,危险配色,排在归档之后。
  • 使用 RiskConfirmation:须勾选「我明白此操作不可撤销」后,确认按钮才可用。
  • 界面接入不依赖 DOM 注入:菜单项注册进 sidebar.workspaces.session.menu.item,对话框注册进 shell.overlay,使用 primitives 的 RiskConfirmation 与 Modal。

删除范围

一次操作会处理(在通过安全校验的前提下):

  1. 会话日志目录:同时兼容 uuid 与 session- 前缀两种 id 拼写;若因此空掉的工作区目录,一并清理。
  2. 投影缓存:session_projcache 的 sessions 表,经活动 storageDomain,保证内存与磁盘一致。
  3. 工作区记账:workspaces.sessionIds 与全局 archivedSessionIds。
  4. 附件对象:仅删除「本会话引用、且没有其他会话引用」的对象;不删仍被其他会话引用的附件。附件按内容哈希存储,分叉会话会继承父会话图片并共享对象;删掉共享对象会导致其他会话图片坏引用,因此一律保留。
  5. 请求图片转码缓存:纯缓存,可重建。

删除完成后弹出汇总:日志目录数量、附件引用/删除/保留计数与释放空间。

安全措施(README 原文要点)

  • 回收附件前扫描所有幸存会话的日志;任一日志读失败则整体跳过附件回收。
  • 收集引用时倾向过度收集:任何形如 sha256:<64hex> 的 attachmentId 均计为引用;误判只会让对象多保留一段时间,漏判才会毁数据。
  • 有活跃 agent 的会话拒绝删除,返回 409。
  • 宿主端点要求请求体里的 confirm 与 sessionId 完全一致,防误触与脚本误调。
  • 删除附件对象前校验路径必须落在 objects/ 之下,且文件名为 64 位十六进制。

兼容性

需要 DSH ≥ 0.1.6。所用客户端 slot、sessionPersistence 读句柄与 storageDomain 域服务在该版本已具备;维护者在 0.1.6-alpha.2 与 0.1.7-rc.2 上核对过。插件当前版本 v0.1.0(2026-09-25 首个版本),许可证 MIT。

安装与启用

插件以当前 DSH 进程的权限读写本地数据。安装前建议浏览仓库源码与 LICENSE,确认符合你的环境策略。

从 GitHub 安装:

dsh plugin --profile <profile> add github:HunLongBaiZe/dsh-deep-purge

或使用本地目录(例如自研分支或离线包):

dsh plugin --profile <profile> add file:/path/to/dsh-deep-purge

将 <profile> 换成你实际使用的 DSH profile 名称。安装后重启该 profile 生效。

典型用法

  1. 在 DSH 侧栏找到要清理的会话,点击该行「…」菜单。
  2. 选择「彻底删除…」(位于归档项之后)。
  3. 在风险确认框中勾选「我明白此操作不可撤销」,再确认。
  4. 若该会话仍有活跃 agent,操作会被拒绝(409);否则执行清理并查看汇总弹窗。

无额外配置文件:行为由插件与 DSH 内置存储布局决定。不要在该会话仍被 agent 占用时强行删除。

适用场景与注意

适合谁

  • 需要在测试或本地环境反复建会话、希望磁盘与记账一致收尾的开发者。
  • 处理含附件的对话,且理解「共享附件因分叉等原因必须保留」的管理员。
  • 归类为 admin-security 的运维式清理,而非日常对话内的普通删除。

务必注意

  • 操作不可撤销;删除前确认 session 选对、且无未保存依赖。
  • 插件与 DSH 同进程权限,安装即信任其读写会话与对象存储;仅从未核对过的来源安装有风险。
  • 附件回收在日志扫描失败时会整段跳过,磁盘上可能仍留部分对象,但可避免误删共享数据。

维护者提供 26 项离线测试(node test/run-tests.mjs),覆盖引用计数(共享保留/独占删除)、fail-safe 跳过、运行中拒删、confirm 校验及两种 id 拼写;若你 fork 或改行为,可在本地跑一遍再启用。

结尾

dsh-deep-purge 把「日志 + 投影缓存 + 工作区记账 + 引用计数式附件回收」收进侧栏里的一次「彻底删除…」,用确认框和风险策略降低误删与共享附件损坏的概率。DSH 生态强调「一切皆插件」;若你需要比归档更彻底的会话清理,可按上文命令安装并在 DSH ≥ 0.1.6 上使用。

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

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

小夜