dsh-session-deleter:在风险确认后永久删除 Harness 会话

前言

在 DeepSeek Harness 里处理敏感对话或调试草稿时,侧栏常见的「归档」只是把会话从导航里藏起来,磁盘上的会话日志仍在。持久化组件 @deepseek-ai/dsh-session-persistence-jsonl 的文档也说明:没有内置逻辑会删除会话文件,接口侧也没有删除 API。若需要让某次会话及其子代理遗留从本机彻底消失,需要额外手段。下面介绍社区插件 dsh-session-deleter(维护者 sczHiccup,目录分类 admin-security),它在用户明确确认风险之后,停止仍在运行的工作,并删除该会话自身的日志与投影缓存。

这是什么

dsh-session-deleter 是面向 DeepSeek Harness 的本地 bundle 插件(包名 @local/session-deleter,当前版本 1.1.0)。一句话定位:在确认不可撤销之后,永久删除指定会话,并级联处理子代理会话。

插件以 MIT 许可发布,源码仓库:https://github.com/sczHiccup/dsh-session-deleter。社区目录页:https://www.skillhub.cn/plugins/sczHiccup/dsh-session-deleter。DSH 生态强调「一切皆插件」;SkillHub 等目录由社区维护,与 DeepSeek / 幻方无官方从属关系。

核心功能

核实自 README 与仓库说明的能力如下。

界面入口

  • 会话顶部的垃圾桶按钮,位于会话头部右侧工具区。
  • 侧栏会话行 ... 菜单中的「删除会话」,与内置「重命名 / 归档 / 固定」同菜单,带危险样式与分隔线。

风险确认

  • 弹窗说明不可撤销、显示目标会话名,必须勾选确认项才能继续。
  • 支持 Esc、点遮罩、取消关闭,关闭后焦点回到原控件。
  • 若会话仍在运行,会先额外警告;用户仍确认时,先停止该回合、子代理、后台任务与提醒,再执行删除。

删除范围

会删除:

内容 路径
会话日志(含历史格式代) <DSH_HOME>/sessions/--<cwd>--/<sessionId>/session[.vN].jsonl[.zstd]
子代理后代会话日志 同上,对 parentSession 指向的子会话递归处理
投影检查点缓存 <DSH_HOME>/storages/session_projcache/sessions/<sessionId>.json(含子会话)
侧栏导航入口 通过 Workspace 归档移出导航

不会删除共享附件(内容寻址,可能被其他会话引用)与全文检索派生库(dsh-session-query-sqlite 会随来源消失自行清理)。

级联与结果

  • 会话日志头里 parentSession 链上的子代理会话会一并删除;这些子会话在 UI 中往往没有独立入口。
  • 成功后展示服务端返回的结果摘要;若删除的正是当前停留的会话,会自动切到新会话。

安全侧设计(Host)

删除仅在 Host 侧执行:停止运行走 workspaceRegistry.archiveSession(id, { stopActivity: true }),与用户点「停止并归档」同一套 provider。目录守卫只接受符合文档布局的会话目录;非递归 rmdir;删除后再次读取持久化状态,仍有残留则报错。面向模型的工具不暴露删除能力,只能由用户在 UI 确认后触发。README 还描述了归档标记寿命、补写清扫(1.2s / 5s / 20s / 60s / 180s)与启动回收等细节,用于应对仍驻留内存的 Agent 可能把日志写回的情况。

兼容性

  • 面向 DeepSeek Harness 0.2.2-rc.1 编写,使用公开服务:commands、sessionPersistence、workspaceRegistry、storageDomain,以及客户端 slots、contextMenus、sessions、remote.commands。
  • 不 import Harness Client 包;样式使用 --dsw-alias-* 主题令牌。

安装与启用

插件是本地 bundle,需要先具备已安装的 DeepSeek Harness 环境。安装步骤以仓库 README 为准。

先把仓库放到本机(README 给出的命令):

git clone https://github.com/sczHiccup/dsh-session-deleter.git

再让当前 Harness Agent 把该目录装进当前 profile:

plugin_manager → action: install_bundle → target: <本仓库目录的绝对路径>

安装后 Harness 会按仓库内 cordis.patch.yml 插入插件行,对当前 profile 的每个会话生效,重启后仍保留。若按钮未立刻出现,刷新页面一次即可。

注意: 插件以当前 DSH 进程权限读写 <DSH_HOME> 下的会话与缓存;安装前应自行审阅 index.js、client.js 源码并确认 MIT 许可证是否符合你的合规要求。README 写明仓库使用 git clone 获取源码,并无 dsh plugin add github:… 一类一行式安装命令。

卸载(README 原文):

plugin_manager → action: set_plugin → target: include:session-deleter → enabled: false
plugin_manager → action: remove_bundle → target: @local/session-deleter

典型用法

  1. 打开任意会话,点顶部垃圾桶;或在侧栏将鼠标移到某会话行,打开 ... →「删除会话」。
  2. 在弹窗中核对会话名与删除范围,勾选确认项。
  3. 点「删除会话」。

高级用户可在输入框执行与 UI 共用实现的命令:

/delete-session <sessionId>

适用场景与已知限制

适合谁

  • 需要在本地彻底移除某次对话痕迹(含子代理会话)的 Harness 用户。
  • 已理解归档与「永久删除」差别,并愿意在确认弹窗中承担不可撤销操作的人。

限制(README 已列出)

  • 删除时若该会话的 Agent 仍驻留内存,Host 会话列表里可能仍能看到该 id,直到进程结束;归档过滤与 Workspace 记账的完全清理依赖 Agent 释放或下次启动清扫。
  • 「运行中」提示依赖会话列表投影里的 running;取不到时只是少一条警告,删除逻辑不变。
  • 若未来 Harness 改动日志目录布局,守卫会拒绝删除而不是误删。

结尾

dsh-session-deleter 补上 Harness 默认归档无法完成的「磁盘级」会话清理,并把删除放在显式风险确认与 Host 侧守卫之后。若你在本机长期跑 Agent、又需要管控敏感或试验性会话的残留文件,可从目录页或 GitHub 获取源码,按 install_bundle 流程装入当前 profile。

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

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

Xiaoye