dsh-session-purge:彻底删除 DSH 会话与磁盘残留

前言

在 DeepSeek Harness(DSH)里删会话,常见做法只会把条目从侧边栏或列表里拿掉。转录目录、投影缓存、工作区记账等仍会留在 ~/.dsh 下,占空间,有时还会让其它会话管理插件反复报「缺少列表缓存 / 重建失败」。若你希望删除与 DSH 在磁盘上留下的痕迹一致,需要一套专门做「真删」的工具。下面介绍社区插件 dsh-session-purge(仓库 EricZhouziRui/dsh-session-purge),维护者为 EricZhouziRui,SkillHub 分类为 admin-security。

这是什么

dsh-session-purge 是 DSH 本地插件(包名 @local/session-purge,当前资料版本 0.1.3,MIT 许可证)。它做的是:在会话从持久化列表中消失之后,一并清理该会话在磁盘上的转录目录、投影缓存、spill 文件、工作区记账,以及归档 / 置顶 / 收藏记录;并可扫描并清理历史上「只删列表、未清目录」留下的孤儿目录。安装后还可挂接官方与其它插件的删除路径,在 archive-manager 等执行「永久删除」后自动收尾,而不必每次手动打开设置页。

典型残留路径(README 中的说明)包括:

~/.dsh/sessions/--Users-you-project--/session-xxxxxxxx-..../   # 对话正文与附件
~/.dsh/storages/session_projcache/sessions/session-xxxxxxxx....json
~/.dsh/storages/workspace.json                                  # 工作区/归档/置顶记账

核心功能

能力 说明
彻底删除 转录目录、投影缓存、spill、工作区记账、归档/置顶/收藏、空项目目录
自动收尾 监听 api-session/removed,包装 workspaceRegistry 上若干删除方法;其它入口声明删除后约 0.9 秒再清残留
运行中可删 先 flush 并从 Host 分离;对仍在写盘的会话用 tombstone 反复清除直至 Agent 结束
工作区视图 设置页按工作区分组,一级只显示标题、状态、时间、大小
一键删空白 顶部「删除空白会话(N)」批量删除所有空白会话
安全清理 只识别 DSH 项目目录;拒绝符号链接路径;读不到持久化列表时停用「清理残留」
可审计 支持 dry-run;无磁盘痕迹时返回 missing,不假报成功
子代理 默认隐藏 origin: subagent 的委派会话;父会话消失后的子代理孤儿可清理;删父会话可级联删非运行中的子会话
应用内更新 设置页检查 GitHub Release,校验 SHA-256 后替换 profile 内安装副本(复制安装模式)

插件以当前 DSH 进程权限访问本机 ~/.dsh(Windows 为 %USERPROFILE%\.dsh);删除不可恢复,且不删除附件二进制对象、费用统计、模型凭据(见 README「安全边界」)。

安装与启用

环境要求:DSH 0.2.x、Node.js 18+,且至少启动过一次 DSH,以便生成 ~/.dsh 与 profile。

  1. 打开 Releases,下载最新的 dsh-session-purge-<version>.zip 并解压。
  2. 在解压目录执行安装器(先 dry-run 确认会写入哪个 profile):
node install.mjs --dry-run   # 先看会改哪个 profile
node install.mjs             # 复制安装

安装器会定位 $DSH_HOME 和 profile,把插件复制到 <profile>/local-plugins/@local/session-purge,并更新 profile 的依赖与 bundle。常用参数:

node install.mjs --profile web          # 安装到指定 profile
node install.mjs --home /custom/.dsh    # DSH_HOME 不在默认位置
node install.mjs --link                 # 开发模式:链接当前源码目录
  1. 完全退出 DSH(macOS 为 Cmd+Q)后重新打开。
  2. 打开 设置 → 彻底删除会话。

说明:资料中的标准安装路径是 Release zip + install.mjs,并非 SkillHub 名称拼接的 dsh plugin add 命令。若采用 --link 或从源码目录开发,应用内更新器不适用,需自行 git pull 后重新运行 node install.mjs。

典型用法

设置页

在 设置 → 彻底删除会话 中:

  • 会话按工作区分组;无工作区归属的会话与磁盘残留排在最后一组。
  • 点「彻底删除」→「确认删除」即永久删除;运行中的会话也可删,页面会提示刷新后消失。
  • 顶部「删除空白会话(N)」一次清空所有空白会话,确认框会显示数量与大小。
  • 顶部「清理残留」处理孤儿会话目录、过期投影缓存、失效工作区/收藏记录、archive-manager 失效索引和空项目目录。
  • 「自动收尾」状态行可查看是否已挂接及最近一次处理结果。

模型工具 session_purge

Agent 可通过工具调用列举、预演删除或触发清理:

session_purge({ "action": "list" })
session_purge({ "action": "purge", "sessionIds": ["session-xxxx"], "dryRun": true })
session_purge({ "action": "purge", "sessionIds": ["session-xxxx"] })
session_purge({ "action": "cleanup" })
session_purge({ "action": "reconcile", "sessionIds": ["session-xxxx"] })

建议对不确定的会话先设 "dryRun": true,核对标题与路径后再执行正式 purge。

与其它删除入口的关系

安装后插件会监听 api-session/removed,并包装 workspaceRegistry 上的 deleteSession、deleteArchivedSessions、cleanOrphanSubagents、deleteSessionCore、publishDeletedSession 等。其它插件或 UI 删除会话后,只要会话已不在持久化列表中,残留会在短暂延迟后被清理;普通关闭而会话仍在列表中时会被跳过。

适用场景与注意

适合:长期在本机跑 DSH、会话数量多、用过 archive-manager 等「删列表」能力、需要回收磁盘或消除索引告警的开发者。也适合需要批量删空白会话、或希望删父会话时顺带清理非运行子代理的场景。

使用前请注意:

  • 删除不可恢复;路径须符合 <sessionsRoot>/<project>/<session-id> 且整条路径不经过符号链接。
  • 清理孤儿目录时会跳过创建不足 60 秒的会话目录,避免误删新建会话。
  • 更新来自仓库公开 Release 并逐文件校验哈希,不执行远程脚本;更新后需完全退出并重启 DSH。旧副本会保留为 .backup-<timestamp>。
  • 安装与运行前可自行查阅 GitHub 源码 与 MIT 许可证;插件在本地以 DSH 用户权限读写配置与会话数据。

卸载(不删会话数据本身):从 <profile>/package.json 的 dsh.profile.bundles 与 dependencies 移除 @local/session-purge,删除 local-plugins/@local/session-purge 与对应 node_modules 副本,然后重启 DSH。

结尾

dsh-session-purge 把「删会话」从 UI 列表操作延伸到磁盘与工作区记账的一致清理,并通过自动挂接减少手工收尾。若你要在本地 DSH 环境做会话卫生管理,可从 SkillHub 目录页了解归类,再按 Release 安装包与 README 步骤启用。

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

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

Xiaoye