dsh-brutal-delete:DSH 会话永久删除与跨工作区批量清理

前言

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 后端使用命名内核信号量而非文件句柄锁,日志目录可在上述步骤后删除。

宿主端删除顺序

确认后依次:

  1. 移除归档 / 置顶标记
  2. 从 workspace.json 的 sessionIds 解绑
  3. 删除 storages/session_projcache/sessions/<id>.json
  4. 删除 sessions/<编码工作区>/<id>/ 与 attachments/<id>
  5. 广播 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

卸载插件不会恢复已删除的会话。

典型用法

  1. 清掉一条旧会话:侧栏该会话「⋯」→ 删除会话 → 阅读不可撤销提示 → 确认。
  2. 跨工作区大扫除:先走单条删除流程打开确认框 → 点 批量删除 → 点选或 全选 → 删除 (N) 或按 Delete / Backspace 确认 → 用 退出 或 Esc 离开批量模式。
  3. 脚本或同源页面:对已知 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 归档之外的「真删除」:单条菜单、跨工作区批量与快捷键,并覆盖日志、投影缓存、附件与工作区解绑。使用前请确认数据无需恢复。

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

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

小夜