DeepSeek Harness 会话彻底删除插件

前言

DeepSeek Harness 默认提供“归档”会话功能:会话行从列表消失,但底层文件仍完整保留在磁盘上。若需要在本地完全清除某段对话留下的所有痕迹,现有方式并不支持。下面介绍一个能实现“永久删除”的插件。

插件定位

  • 名称:dsh-session-delete
  • 维护者:HHHHHH233333
  • 分类:admin-security
  • 简介:在会话右键菜单增加“彻底删除会话…”项,删除聊天日志、投影缓存、溢出文件以及派生的子代理会话。

删除什么

确认框中点击“彻底删除”后,依次执行以下步骤:

  1. 停止并隐藏:调用 Workspace 注册表的 archiveSession(id, { stopActivity: true }),停止当前回合、子代理、后台任务与定时器,并将会话行移出所有分组视图。
  2. 删除聊天记录:删除 $DSH_HOME/sessions/<项目目录>/<会话 id>/ 下的 session.v4.jsonl.zstd 及同目录文件。
  3. 删除派生数据:删除 $DSH_HOME/storages/session_projcache/sessions/<会话 id>.json(标题、标题候选、token 统计、回合大纲等)。
  4. 删除临时文件:删除 %TEMP%/dsh-spill-*/session-<sha256(id)[:12]>/ 下的工具输出溢出文件。

删除操作不依赖“回收站”,也不发送网络请求,全部为本地文件系统操作。若某文件正被占用导致删除失败,会将失败清单返回给界面,提示“重启应用后重试”。系统会在删除后约 6 秒及 12 秒各扫一次(投影缓存有 5 秒写回窗口),晚到的检查点不会重新写入记录。

子代理会话

默认勾选“同时删除它派生的子代理会话”。规则如下:

  • 只沿 origin: "subagent" 的 parentSession 链向下展开(含多级)。
  • 分叉(fork)不会被连带删除——分叉是一段独立对话,origin 为空。
  • 取消勾选时只删除你点的那一个会话。

安装与启用

插件安装方式之一是使用 link: 依赖,将本目录链接到桌面应用 profile。在 %USERPROFILE%\.dsh\profiles\desktop\package.json 中添加:

dependencies:  "dsh-session-delete": "link:<本目录>"
dsh.profile.bundles: [ ..., "dsh-session-delete" ]

注意:这个目录不能删除或改名。安装后需要重启桌面应用,插件行会在启动时按 dsh.profile.bundles 组合进 profile。重启后访问 http://127.0.0.1:<端口>/.dsh-session-delete/health 应返回 {"ok":true,...};侧栏会话行右键菜单最后一项会出现“彻底删除会话…”。

分享给别人

插件为自包含的 npm 包,无运行时依赖与构建步骤。

  • 直接给文件夹:压缩整个 dsh-session-delete 目录,对方在该目录执行 powershell -ExecutionPolicy Bypass -File .\install.ps1,脚本会自动写入依赖、追加 bundle 并校验。
  • 给一个 tarball:从 Releases 下载 dsh-session-delete-0.1.0.tgz 或本地 pnpm pack,对方执行 pnpm add .\dsh-session-delete-0.1.0.tgz,再在 profile 中追加 bundle 并重启。
  • 从仓库装:在 DSH 插件管理中填入仓库地址 https://github.com/HHHHHH233333/dsh-session-delete,管理器会自动安装并添加 bundle。
  • 发到 npm:将 "private": true 改为 false 后 npm publish。注意包名可能被占用,必要时使用 scope 前缀,并同步修改 dsh.profile.bundles 中的条目与 link: 路径。

使用方法

  1. 在侧栏中右键点击会话(或通过“…”菜单)。
  2. 选择“彻底删除会话…”(位于“归档会话”和“复制会话 ID”之后,带分隔线)。
  3. 确认框会显示会话标题、将要删除的会话数与文件数、是否包含子代理。
  4. 点击“彻底删除”。成功后,该会话行从列表消失,磁盘上不再有对应记录。

配置(可选)

在 cordis.patch.yml 中添加 config 可覆盖默认值:

- id: dsh-session-delete
  config:
    sessionsRoot: D:\dsh\sessions   # 默认 $DSH_HOME/sessions
    dshHome: D:\dsh                 # 默认 $DSH_HOME,其次 ~/.dsh
    spillRoots: [D:\temp\dsh-spill] # 额外的溢出根目录;系统临时目录总会扫描
    settleMs: 1200                  # 停止后等待多久再删文件
    lateSweepMs: 6000               # 后台补扫延迟;0 关闭

HTTP 接口

接口仅本机界面调用,服务监听回环地址,跨站 Origin 会被拒绝,sessionId 必须为单个安全路径段。

  • GET /.dsh-session-delete/health
  • GET /.dsh-session-delete/preview?sessionId=<id>&subagents=1
  • POST /.dsh-session-delete/delete,body { "sessionId": "<id>", "deleteSubagents": true }

preview 仅统计不删除;delete 返回 { ok, found, targets, artifacts, files, bytes, complete, failures }。

已知边界

  • 共享附件:内容寻址的附件/图片仓库跨会话共享,不属于某一个会话,不会被删除。
  • 工作区成员表:storages/workspace.json 的 sessionIds 中会留下已删会话的 id,插件会在下次启动时清理 archivedSessionIds / pinnedSessionIds 中不存在的 id。
  • 归档 id 的保留:删除后故意不立即取消归档,以免正在运行的界面把该行重新显示;清理放在下次启动。
  • 搜索索引:当前使用内存数据库构建会话检索,从不落盘,无需清理索引文件。
  • 文件占用:Windows 上若文件被子进程占用,删除会失败并回报清单;关闭相关任务或重启应用后再删一次。
  • 其它机器的副本:本插件只处理本机文件,不影响远端备份。

适用场景与注意

  • 适合需要在本地彻底清除会话痕迹的 DSH 用户,尤其是对隐私敏感、希望清理磁盘占用与历史记录的场景。
  • 插件以当前 DSH 进程的权限运行,安装前应检查源码与许可证。
  • 删除当前正在使用的会话会成功,但会话行消失后当前视图随之失效,需自行确认结果。

结尾

该插件补齐了 DSH 在会话清理上的“删除”能力,让用户能真正从本地移除会话及其相关数据。更多细节与源码:https://github.com/HHHHHH233333/dsh-session-delete

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

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

小夜