dsh-archive-delete:在 DSH 侧栏永久删除已归档会话

前言

DeepSeek Harness(DSH)默认把会话设计成「只能归档、不能从磁盘上抹掉」:归档后列表里看不见,但 JSONL 日志仍在 $DSH_HOME/sessions 下,仍可能被检索占用空间。若你希望归档区里的对话彻底清理掉,官方 UI 没有对应入口。下面介绍社区插件 dsh-archive-delete 如何补上这一步,且只作用于已归档、无运行中 Agent / 无其他写锁的会话。

这是什么

dsh-archive-delete 是 DSH 的 Web 端插件(Host + client bundle),维护者为 ZenithJoyH,在 SkillHub 分类为「记忆」。它在侧栏归档会话的「⋯」菜单中增加「永久删除…」,经确认后由 Host 删除会话日志目录,并同步清理 Workspace 记账与归档集合;不删除可见会话、工作区目录或内容寻址的共享附件。

核心功能

侧栏入口与安全条件

  • 仅已归档会话的菜单会出现「永久删除…」;普通会话与置顶会话无此项。
  • Host 端校验:会话须在归档集合中,且不能存在 live Agent 或其他写入者,否则拒绝。
  • 浏览器弹出确认框,展示会话标题与不可撤销提示;失败时在界面就地显示原因。

删除范围与幂等

  • 删除对象是会话日志目录(与官方 JSONL 后端布局一致);附件等工作区共享文件不删。
  • 若日志目录已不存在但归档记账仍在,重试只做清理,不报错。
  • 中英案文随 dsh 语言设置;样式使用 dsh 主题 token,适配明暗主题。

Host 路由与权限边界

插件注册 POST /plugin/archive-delete/delete,复用与官方 /api 同级的连接校验(Host/Origin 围栏 + 浏览器会话认证)。只接受 POST,请求体上限 64 KiB;Session id 经与官方一致的 projectKey / encodeSegment 计算路径并限制在会话根目录内;删除前通过 sessionPersistence.open(id, 'write') 抢占写所有权。不提供批量清空归档按钮,当前版本按单会话删除。

安装与启用

包版本为 0.1.0(见仓库 package.json)。兼容 DSH 0.2.x(Web / 桌面共用 client bundle),Node.js ≥ 22,许可证 MIT。插件以当前 dsh 进程权限访问 $DSH_HOME/sessions 与会话持久化服务,安装前宜浏览仓库源码与许可证。

从 npm 或 GitHub(README 发布后示例)

Web profile:

dsh plugin --profile web add dsh-archive-delete

桌面 profile:

dsh plugin --profile desktop add dsh-archive-delete

或从 GitHub 源码安装:

dsh plugin --profile web add github:ZenithJoyH/dsh-archive-delete
dsh plugin --profile desktop add github:ZenithJoyH/dsh-archive-delete

包内 dsh.bundle.patch 会由插件管理器自动插入加载行,一般无需手工改 cordis.patch.yml。安装后刷新页面;若 Host 未自动加载,可重启 dsh / 桌面端。

本机源码安装(桌面端)

DSH="/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh"
"$DSH" plugin --profile desktop add /absolute/path/to/dsh-archive-delete

手动复制安装

将仓库复制到 profile 的 node_modules/dsh-archive-delete,在 ~/.dsh/profiles/desktop/cordis.patch.yml 末尾加入:

- insert:
    - id: archive-delete
      name: "dsh-archive-delete"

卸载

dsh plugin --profile desktop remove dsh-archive-delete

并删除 cordis.patch.yml 中 archive-delete 条目后重启。

可选配置

仅在 JSONL 会话根目录或 DSH_HOME 与默认不一致时,可在 cordis.patch.yml 对应条目下配置 sessionsRoot、dshHome 等(见仓库 README)。

典型用法

按 README 交互流程操作即可:

  1. 在侧栏对目标会话执行官方 Archive 归档。
  2. 将视图切到「全部对话」或「仅显示已归档」,定位该归档行。
  3. 打开该行「⋯」→ 永久删除…。
  4. 在确认弹窗中点击 永久删除。
  5. 成功后日志目录移除,归档与 Workspace 记账同步清理,侧栏该行消失。

若要连同附件做引用计数式清理,需另行实现;本插件不处理共享附件文件。

适用场景与注意

适合:长期使用 DSH、归档会话积累较多、需要在确认后从磁盘删除日志以释放空间或降低检索面片的开发者。

不适合或未覆盖:

  • 未归档会话无法通过本插件删除(即使知道 Session id)。
  • 正在运行的会话须先停止或归档,不能「先删后停」。
  • 依赖 JSONL 持久化后端的目录布局;若组合启用 SQLite 全文索引,删除后索引行不会立刻清除,重索引时才会消失。
  • 确认弹窗无「输入标题」类强确认;需要可自行扩展。

DSH 生态主张「一切皆插件」;SkillHub 目录为社区站点,与 DeepSeek / 幻方无官方从属关系。本插件星标数为 0(目录页统计),属个人维护的开源组件,使用前请自行评估风险。

链接

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

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

小夜