前言¶
在 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。
删除范围¶
一次操作会处理(在通过安全校验的前提下):
- 会话日志目录:同时兼容
uuid与session-前缀两种 id 拼写;若因此空掉的工作区目录,一并清理。 - 投影缓存:
session_projcache的sessions表,经活动storageDomain,保证内存与磁盘一致。 - 工作区记账:
workspaces.sessionIds与全局archivedSessionIds。 - 附件对象:仅删除「本会话引用、且没有其他会话引用」的对象;不删仍被其他会话引用的附件。附件按内容哈希存储,分叉会话会继承父会话图片并共享对象;删掉共享对象会导致其他会话图片坏引用,因此一律保留。
- 请求图片转码缓存:纯缓存,可重建。
删除完成后弹出汇总:日志目录数量、附件引用/删除/保留计数与释放空间。
安全措施(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 生效。
典型用法¶
- 在 DSH 侧栏找到要清理的会话,点击该行「…」菜单。
- 选择「彻底删除…」(位于归档项之后)。
- 在风险确认框中勾选「我明白此操作不可撤销」,再确认。
- 若该会话仍有活跃 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 上使用。