dsh-archive-purge:为已归档 DSH 会话提供真正删除

前言

DeepSeek Harness(DSH)可以把会话归档,侧栏里「仅显示已归档」能筛出历史会话,但归档并不等于从磁盘和工作区记录里抹掉。会话日志仍躺在 $DSH_HOME/sessions/<项目键>/<会话 id>/,工作区归属与归档标记也还在持久化状态里。长期开发、多项目并行时,试过的会话、废弃分支上的对话会越积越多,既占空间,也容易在列表里造成干扰。

社区插件 dsh-archive-purge(维护者 Angela-lwh,分类 admin-security)针对的正是这一点:在已归档会话上提供「删除会话」入口,按固定顺序清日志目录、工作区归属与归档标记;宿主仍持有会话时则写入待办,下次启动或手动触发再完成。下面介绍它的能力边界、安装方式与日常用法。

这是什么

dsh-archive-purge 是 DSH 的 npm 包插件,包名 @angela_lwh/dsh-archive-purge(当前资料中的版本为 1.0.3,MIT 许可证,要求 Node >= 22)。一句话:给已归档会话加「真正删除」——移除该会话的日志世代、工作区 membership 与归档标记;对宿主暂时放不掉的会话提供延迟删除($DSH_HOME/archive-purge/pending.json),登记期间取消归档可撤销登记。

它不替代 DSH 自带的归档流程;不删除附件($DSH_HOME/attachments)与投影缓存。删除不可逆,不进回收站。

界面与删除流程

装好后,侧栏 Plugins 页会出现「归档会话清理」卡片(中英双语,随 app 语言),可开关插件。

界面入口(仅出现在已归档会话行;正在使用或仅未归档的会话不会出现):

  • 行内 ... 菜单中的 删除会话;
  • 悬停时出现的垃圾桶按钮。

两者都会先弹出确认框,写明会话名并声明不可撤销。

一次确认后,宿主按顺序执行(资料原文顺序):

  1. 拒绝正在干活的会话(有进行中的对话);
  2. 拒绝未归档的会话——归档标记是删除的授权;
  3. 定位目录 $DSH_HOME/sessions/<项目键>/<会话 id>/,校验内容确属该会话日志,路径不对则不删;
  4. 若宿主仍加载该会话,在已归档且空闲的前提下释放持有(正在干活的永不释放);
  5. 递归删除该目录(全部日志世代);
  6. 清除工作区归属与归档标记等持久记录,并通过 api-session/removed 让已连接界面立刻去掉该行。

当场删不掉时:正在干活的会话一律不删;暂时无法释放的会写入 pending.json,下次 DSH 启动自动完成,也可随时手动完成(见下文)。登记期间会话历史不变;取消归档可撤销这次登记。

安装与启用

安装时把 desktop 换成你的 profile 名。以下命令均来自仓库 README,任选其一即可;五种方式都会写入 profile 依赖、把 @angela_lwh/dsh-archive-purge 加入 dsh.profile.bundles,并装进 profile 的 node_modules。

# 从 npm 安装(包名带 scope;npm 上无 scope 的 dsh-archive-purge 已被他人占用)
dsh plugin --profile desktop add @angela_lwh/dsh-archive-purge

# GitHub 仓库地址
dsh plugin --profile desktop add https://github.com/Angela-lwh/dsh-archive-purge

# 固定到 40 位完整 commit(推荐给别人用,避免 main 漂移)
dsh plugin --profile desktop add https://github.com/Angela-lwh/dsh-archive-purge#<40 位完整 commit>

# Release tarball
dsh plugin --profile desktop add https://github.com/Angela-lwh/dsh-archive-purge/releases/download/v1.0.3/dsh-archive-purge-1.0.3.tgz

# 本机已有检出(开发时改代码即时生效)
dsh plugin --profile desktop add file:<本仓库的绝对路径>/plugin

README 明确提醒:不要使用 github:owner/repo#<sha>&path:/子目录 这类写法,pnpm 可能报 ERR_PNPM_INVALID_DEPENDENCY_NAME;指定 commit 用带 #<commit> 的 HTTPS 地址即可。

卸载:

dsh plugin --profile desktop remove @angela_lwh/dsh-archive-purge

改动插件后如何生效(README 实测说明):浏览器侧的 plugin/lib/client.js 刷新页面即可;宿主侧的 plugin/index.js 需重启 DSH,或关闭再打开该 bundle 以重新挂载。

典型用法

  1. 侧栏视图筛选切到 仅显示已归档;
  2. 悬停该行点垃圾桶,或 ... → 删除会话;
  3. 在确认框中确认。宿主能释放的会当场删除、行立即消失;被登记的会在下次启动完成,弹窗会说明情况。

手动完成待删除清理:任意会话行的 ... → 完成待删除清理 → 立即清理。

权限、适用场景与注意

插件以当前 dsh 进程权限在本地运行。README 中的权限与副作用表可概括为:

方面 行为
文件系统 读取并递归删除会话目录;写入 $DSH_HOME/archive-purge/pending.json
DSH 持久状态 经 Workspace API 移除工作区归属与归档标记(涉及 $DSH_HOME/storages/workspace.json)
本地 HTTP 注册 POST /api/archive-purge/deleteSession,继承 DSH 鉴权
界面 注册侧栏菜单与悬停按钮;删除后通知 UI 移除行
网络 无(宿主仅 node: 内置模块)
安装脚本 无 postinstall 等

适合谁:需要定期清理已归档试跑会话、希望列表与磁盘状态一致的 DSH 用户;归类在 admin-security,涉及不可逆删日志,安装前宜浏览 GitHub 源码 与许可证。

不适合或需知:未归档会话、正在对话的会话无法通过此入口删除;跨会话共享的附件与投影缓存不会被碰;不要指望回收站或一键恢复。

DSH 生态强调「一切皆插件」;社区目录 SkillHub 插件页 是独立站点,与 DeepSeek / 幻方无官方从属关系。若你已在用归档筛历史会话,dsh-archive-purge 补的是归档之后的那一步——在确认无误后,把日志与工作区记录一并清掉,必要时交给延迟队列处理宿主占用。

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

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

小夜