dsh-session-trash: Make DSH session deletion revocable

前言

在 DeepSeek Harness(DSH) 里,会话不是数据库里的一行记录,而是磁盘上的目录:~/.dsh/sessions/<工作区目录名>/<sessionId>/ 下的 session.v4.jsonl.zstd 等文件;工作区与会话的对应关系写在 ~/.dsh/storages/workspace.json。原生「删除会话」相当于从名单里摘掉并删掉目录,没有回收站,误删后只能依赖备份或文件恢复工具。社区插件 dsh-session-trash(维护者 a307608689-afk)把删除改成「先移入回收站、保留期内可恢复、到期自动清理」,并在删除前做分析、留档与运维向的自检。本文基于仓库 README 与 package.json(当前版本 0.1.7,MIT 许可证)整理用法与注意点;该插件属社区「记忆」类扩展,与 DeepSeek 官方无隶属关系。

这是什么

dsh-session-trash 是 DSH 的 Web 客户端插件:通过 package.json 的 dsh 字段与 cordis.patch.yml 声明,由宿主半端 index.js 与浏览器半端 client.js 协同工作。它针对三类常见问题:手滑删除无法撤销、删除前不清楚会话体积与状态、删完后侧栏仍显示旧项等。实现上强调「搬目录 + 改名单」、对 workspace.json 的唯一写入口、纯本地无出站网络(Node.js ≥ 20,零第三方运行时依赖)。

目录页:SkillHub 插件页 · 源码:GitHub — a307608689-afk/dsh-session-trash

核心功能

删除与回收站

  • 会话「⋯」菜单最下方增加红色 删除会话 项。
  • 删除前分析:确认前展示会话是否在本地、目录大小、是否归档 / 置顶 / 仍在运行等。
  • 移入回收站:会话目录搬到 ~/.dsh/session-trash/payload/<trashId>/,并从 workspace.json 相关名单中移除;改动前自动备份。
  • 设置 → 回收站:列出条目,支持恢复(回原位并恢复归档 / 置顶)、彻底删除、批量操作。

保留期与留档

  • 默认保留 30 天,到期自动清理;插件约每分钟检查,默认约每 30 分钟执行一轮清理。
  • 删除前生成元数据快照(zstd 压缩 + sha256 校验);留档失败会中止删除。留档目录默认配额 2 GB。
  • 审计写入 ~/.dsh/session-trash/journal.jsonl(超过 2 MB 轮转,保留 5 份)。

运维向能力

  • 启动时将回收站索引与磁盘目录对齐;页面退出时只读自检。
  • 孤儿会话目录:找出磁盘上不属于任何工作区的会话目录,可批量移入回收站。
  • 同源 HTTP 接口(如 /dsh-session-trash/health、/list、/delete、/restore 等)供 UI 与脚本调用;详见 README「HTTP 接口」表。

安装与启用

本插件无资料记载的 dsh plugin add github:... 一键命令,安装方式以仓库说明与你所用 DSH 版本的插件文档为准。README 给出的流程如下:

  1. 获取本仓库源码(例如从 GitHub 下载压缩包或按你习惯的方式取得目录树)。
  2. 将插件目录放到 DSH 能加载的位置,或在 DSH 插件管理界面中添加该本地路径。
  3. 完全退出并重新启动 DSH。
  4. 打开 设置 → 回收站,若能看到条目列表(或空列表界面),说明加载成功。

环境要求:Node.js ≥ 20、DSH Web 端。

典型用法

删除一个会话

  1. 在侧栏选中会话,打开右侧「⋯」菜单。
  2. 选择最下方的 删除会话。
  3. 阅读分析信息后确认,会话进入回收站而非立即从磁盘抹除。

恢复或彻底删除

在 设置 → 回收站 中:

  • 恢复:目录搬回原路径,归档 / 置顶状态一并恢复。
  • 彻底删除:不可撤销;执行前会再做留档。
  • 可勾选多条进行批量操作。

调整保留期与自动清理

默认保留 30 天。若需改为 90 天,可在 DSH 同源地址下 POST 配置(端口替换为你本机 DSH Web 端口):

curl -X POST http://127.0.0.1:<端口>/dsh-session-trash/config \
  -H 'content-type: application/json' \
  -d '{"retentionDays":90}'

README 说明:retentionDays 在接口校验中接受 7 / 30 / 90;autoPurgeMinutes 可设 5–1440,0 表示关闭自动清理。

数据位置与隐私

插件不向外部服务器发送数据;前端仅请求同源 /dsh-session-trash/*。

数据 路径
回收站索引 ~/.dsh/session-trash/index.json
被移走的会话 ~/.dsh/session-trash/payload/<trashId>/
workspace.json 备份 ~/.dsh/session-trash/backups/
留档 ~/.dsh/session-trash/archive/

会被改写的宿主文件主要是 ~/.dsh/storages/workspace.json,且经 writeWorkspaceDoc() 做校验与原子写入。设置 → 回收站 → 安全 → 导出诊断包 不含对话正文,仅含健康状态、条目摘要与近期 journal,便于排查。

适用场景与注意

适合:长期在 DSH 中积累大量会话、需要误删可恢复、希望在彻底删除前留元数据证据的开发者。

使用前请知悉:

  • 插件以当前 DSH 进程权限读写 DSH_HOME 下目录;安装前应自行审阅源码与 MIT 许可证,并在重要环境先备份。
  • 彻底删除 与卸载前未回滚回收站内容会导致数据不可恢复;卸载顺序应为:先 node tools/rollback-trash.mjs(必要时 --write),再移除插件并重启。
  • README 列出的已知边界包括:删除后侧栏可能需手动刷新列表;恢复按原 workspace.json 插回、跨工作区移动未覆盖;部分附件与团队会话相关能力仍在演进。
  • 若重启后出现工作区全空、workspaceController is unavailable,可能与 workspace.json 时间字段格式有关;README 提供只读排查与 tools/fix-workspace-timestamps.mjs,出现症状时不要随意「重新选择文件夹」覆盖名单。

结尾

dsh-session-trash 把 DSH 的会话删除从「一步到位抹掉」改为「回收站 + 留档 + 可配置保留期」,并补了删除前分析与孤儿目录清理,适合把会话当长期资产来管理的用法。更多截图、架构说明与故障排查见仓库 README。

  • 插件目录页:https://www.skillhub.cn/plugins/a307608689-afk/dsh-session-trash
  • GitHub:https://github.com/a307608689-afk/dsh-session-trash
羽毛球分组比赛记分
小程序二维码

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

Xiaoye