pyh 105e86edd5 docs: rewrite the README around the plugin itself
Only the features, the behaviour boundaries, the three ways to install it, and a precise compatibility statement remain; the release pipeline, the file layout and the local-directory install method are gone. The install section now mirrors how a published DSH plugin is described: npm package plus custom registry, a pinned git URL, or a downloaded tgz.
2026-09-30 11:46:17 +08:00
2026-09-30 10:57:21 +08:00

会话彻底删除

DeepSeek Harness(DSH)插件:给会话加上真正不可逆的删除,并清理已删除会话遗留的临时文件。

DSH 原本只能归档会话——归档只是把会话从列表里移开,日志仍然留在磁盘上。这个插件提供两处删除入口,以及设置页里的一次性孤儿文件清理。

功能

1. 删除会话

两个入口,行为一致,都会先弹出确认弹窗(复刻系统 Modal 的样式与键盘行为:Esc 关闭、Tab 焦点圈定、打开时焦点进入、关闭后焦点归位):

  • 会话行右侧 ⋯ 菜单 → 删除会话
  • 会话行悬停时的 🗑 快捷按钮(占用原「归档会话」的位置,归档改从菜单进入)

确认后一次性处理:

对象 处理方式
会话日志目录 整个删除,仅保留 session.lock
子智能体会话 按 parentSession 递归收集,连同日志与溢出文件一并删除
工具输出溢出文件(spill) 删除该会话(含子会话)对应的 spill 目录
工作区登记项 解除绑定、取消置顶、取消归档
客户端列表 广播 api-session/removed,列表行立即消失

有意不处理:

  • 附件对象($DSH_HOME/attachments/v1/objects):按内容 sha256 寻址,同一份内容可能被多个会话共享,而 DSH 没有引用计数,跟着一个会话删除会破坏别的会话;
  • 投影缓存($DSH_HOME/storages/session_projcache):由日志派生的缓存,读取时带生命周期身份校验,永远不会串到别的会话。

2. 清理临时文件

设置 → 通用设置 → 清理临时文件,清理 spill 后端留下的孤儿目录。判定偏保守:

  1. 目录名必须精确等于 session-<sha256(会话 id) 前 12 位>——这是 spill 后端唯一会生成的形状;
  2. 该名字不属于任何已知会话(存量会话与内存中正在运行的会话都算);
  3. 只在 spill 的 root 内操作(后端当前 root + 系统临时目录下的 dsh-spill*);
  4. 符号链接一律跳过、不跟随;单项失败只记警告。

结果直接显示在该行(清理了几个目录、几个文件、释放多少空间),可反复点击。

行为与边界

  • 仍在运行的会话无法被插件从内存里移除:它会先被归档并停止,日志与溢出文件在下次启动 DSH 时删除(界面会明确提示);在此之前取消归档就会取消这次删除。
  • 删除不可恢复,但不是安全擦除:按普通文件删除处理,底层介质上可能有残留。
  • 工作区里的代码文件不受影响。
  • 溢出文件被删除后,fork 出来的会话日志里若仍保留指向它的路径文本,那些路径会失效。

安装

在 DSH 的 插件 → 添加插件 里三选一。

1. npm 包(推荐)

安装源选 自定义地址,填本插件的注册表:

https://gitea.iwake.top/api/packages/dsh-plugin/npm/

包名填:

@dsh-plugin/session-delete

包是公开的,不需要凭据。若你的环境需要认证,把令牌写进本机 ~/.npmrc:

npm config set @dsh-plugin:registry=https://gitea.iwake.top/api/packages/dsh-plugin/npm/
npm config set //gitea.iwake.top/api/packages/dsh-plugin/npm/:_authToken=<token>

2. Git 仓库地址

https://gitea.iwake.top/dsh-plugin/session-delete.git#v1.0.0

# 后面可以跟标签或提交,用来锁定版本。仓库是公开的,不需要凭据。

3. 本地 tgz

把 session-delete-1.0.0.tgz 下载到运行 DSH 的机器上,在安装界面里填它的绝对路径。

安装或升级后:宿主半变更需要重启 DSH(完全退出再打开,仅关闭窗口不一定退出进程);只改浏览器半时刷新页面即可。

兼容性

基于 DeepSeek Harness 0.2.0-rc.2 编写。DSH 仍在演进,其它版本与平台组合未逐一验证。

  • 浏览器半不 import 任何 Harness 客户端包(上游规范如此要求:这些包随时可能变化,渲染抛错会让整个插槽条目变空白),而是复刻 dsh-client-ui-primitives 的 markup、CSS 声明、图标 path 数据与键盘行为,只保留 --dsw-* 主题 token 引用。上游若改动这些内部结构,界面细节可能失配(例如悬停气泡不再出现),但不会导致插件加载失败。
  • 宿主半只依赖稳定的服务契约:sessionPersistence、sessionQuery、workspaceRegistry、sessions、agents、connection.fetch,以及 spill 后端的目录规则。

License

MIT

S
Description
永久删除 DeepSeek Harness 会话的一个插件
Readme MIT
244 KiB
Languages
JavaScript 100%