前言¶
DeepSeek Harness(DSH)侧栏里的「归档」只会把会话从列表里藏起来,对话日志、投影缓存、附件目录和工作区归属记录仍留在磁盘上。长期开发或频繁切换工作区时,这些残留会占空间,也不利于本地数据治理。若需要真正从硬盘上清掉某条或一批会话,需要额外能力。下面介绍社区插件 dsh-brutal-delete(仓库 bingzhu44-blip/brutal-monkey,npm 包名 dsh-brutal-delete),由维护者 bingzhu44-blip 发布,分类为 admin-security,做的是不可恢复的永久删除,而不是归档。
这是什么¶
dsh暴力删除 是 DSH Desktop Web UI 上的插件:在侧栏提供单条删除与跨工作区批量删除,确认后从磁盘移除会话相关数据,并清理子会话(subagent)在可读缓存中的关联项。DSH 自带归档无法删除 session.v4.jsonl.zstd、投影缓存、附件与 workspace.json 中的槽位;本插件按固定顺序解绑并删文件,删完无回收站。
与归档的差异¶
| DSH 自带「归档」 | dsh-brutal-delete | |
|---|---|---|
| 侧栏不再显示 | 是 | 是 |
对话记录(session.v4.jsonl.zstd) |
仍占磁盘 | 删除 |
投影缓存(session_projcache) |
仍保留 | 删除 |
工作区归属(workspace.json) |
仍占槽位 | 解绑 |
附件目录(attachments/) |
仍保留 | 删除 |
| 子会话(subagent) | 仍保留 | 一并清理 |
| 可恢复 | 是 | 否,不可恢复 |
核心功能¶
单条删除¶
侧栏任意会话行「⋯」菜单中,在「归档会话」与「复制 session id」之间(order: 425)多出一项 「删除会话」。点击后弹出确认框,展示会话标题并说明不可撤销;确认后从磁盘彻底删除。
跨工作区批量删除¶
单条确认框里,「永久删除」右侧有 「批量删除」。进入批量选择模式后:
- 每条非归档会话名称左侧为白色空心圆点;点击圆点或整行可选中,选中后圆点变实心。
- 侧栏左下角出现 全选、删除 (N)、退出。
全选覆盖所有工作区的会话,一次勾选、一次删完,无需逐个工作区切换。归档会话与空白占位行不参与批量选择。
快捷键¶
批量模式下(插件自身输入控件内不触发):
| 快捷键 | 作用 |
|---|---|
Ctrl + A |
全选 / 取消全选 |
Delete |
快速删除(弹确认框) |
Backspace |
同上 |
Esc |
退出批量模式 |
底部按钮带有 title 提示;批量模式下聊天输入框不再抢占快捷键。
正在使用的会话¶
DSH 没有内置删除接口,插件自行实现安全流程。当前打开或运行中的会话也可删除。删除前会尽力停掉常驻 Agent(cancel + whenIdle,最长等 5 秒),强制 flush 写缓冲,再删目录。Windows 上 JSONL 后端使用命名内核信号量而非文件句柄锁,日志目录可在上述步骤后删除。
宿主端删除顺序¶
确认后依次:
- 移除归档 / 置顶标记
- 从
workspace.json的sessionIds解绑 - 删除
storages/session_projcache/sessions/<id>.json - 删除
sessions/<编码工作区>/<id>/与attachments/<id> - 广播
api-session/removed,侧栏行消失
子会话在缓存可读时一并清理。各步独立容错,单个文件失败不会中断整体;失败项会在结果框中列出。
HTTP 接口¶
同源 POST /dsh-brutal-delete/delete,body 为 { "sessionId": "session-…" }。请求体上限 64 KB,单会话静默等待上限 5 秒。常见响应:400(invalid-id / invalid-body)、403(forbidden)、404(not-found)、500(delete-failed)。路由经 ctx.connection.requestRejection 做同源校验;session id 校验 UUID 格式,不接受任意路径。
安装与启用¶
DSH 生态是「一切皆插件」;社区目录页在 SkillHub,与 DeepSeek / 幻方无官方从属关系,可按习惯在市场中搜索安装或自行审阅源码后安装。插件以当前 DSH 进程权限操作本地文件,安装前建议查看仓库与 MIT 许可证。
方式一:插件市场(推荐)¶
在 DSH 插件市场中搜索 暴力删除 或 dsh-brutal-delete,一键安装。
方式二:命令行¶
dsh plugin --profile desktop add dsh-brutal-delete
方式三:本地开发¶
在本仓库目录执行依赖链接,并在 %DSH_HOME%\profiles\desktop\package.json 声明:
"dependencies": { "dsh-brutal-delete": "link:D:\\path\\to\\dsh-brutal-delete" }
在 %DSH_HOME%\profiles\desktop\cordis.patch.yml 加入:
- insert:
- id: dsh-brutal-delete
name: dsh-brutal-delete
node_modules\dsh-brutal-delete 需指向本目录。包内自带 cordis.patch.yml,也可通过 dsh.profile.bundles 加载;二选一,勿与 profile 补丁 insert 同时启用同一 id。
安装完成后刷新页面或重启 DSH。
卸载:
dsh plugin --profile desktop remove dsh-brutal-delete
卸载插件不会恢复已删除的会话。
典型用法¶
- 清掉一条旧会话:侧栏该会话「⋯」→ 删除会话 → 阅读不可撤销提示 → 确认。
- 跨工作区大扫除:先走单条删除流程打开确认框 → 点 批量删除 → 点选或 全选 → 删除 (N) 或按
Delete/Backspace确认 → 用 退出 或Esc离开批量模式。 - 脚本或同源页面:对已知
sessionId调用POST /dsh-brutal-delete/delete(须同源,且 id 为合法 UUID 格式)。
适用场景与注意¶
适合需要释放磁盘、彻底移除本地会话痕迹、或批量清理多工作区非归档会话的管理员或日常用户。不适合仍可能依赖归档恢复的场景。
- 删除不可撤销,无回收站与备份。
- 路由要求同源;破坏性操作均有确认框。
- 兼容 DSH Desktop Web UI(
platform: web),依赖@deepseek-ai/dsh-client-ui-slots、dsh-api-session-controller、dsh-api-workspace-controller等宿主注入能力。
结尾¶
dsh-brutal-delete 补的是 DSH 归档之外的「真删除」:单条菜单、跨工作区批量与快捷键,并覆盖日志、投影缓存、附件与工作区解绑。使用前请确认数据无需恢复。