dsh-delete-chat: DSH sessions are moved to the recycle bin before permanent deletion

前言

在 DeepSeek Harness(DSH)里,会话列表上的「删除」往往只影响界面:行从列表消失,或进入归档,但 ~/.dsh/sessions 下的会话目录和日志仍留在磁盘上。官方包文档里也明确提到会话文件不会因列表操作而删除,长期开发时目录只会越来越大。若你需要可控地清掉某次对话占用的空间,又希望误删还能找回,就需要在「归档」和「手删文件夹」之间多一层机制。

下面介绍社区客户端插件 dsh-delete-chat(维护者 abangbang):把删除做成「先移入回收站、再在回收站里永久清除」,并附带侧边栏 Trash 页与 CLI。

这是什么

dsh-delete-chat 是 DSH 的客户端插件(分类:客户端)。它在不立刻抹掉磁盘数据的前提下,实现「真正删除会话目录」:会话行菜单里的 Delete chat 会把对应 session-<uuid>/ 目录 rename 到 ~/.dsh/session-trash,同时更新工作区记账;侧边栏增加 Trash 面板,用于筛选、多选、恢复或永久删除;还提供 dsh-delete-chat 命令行,可在无 GUI 时操作同一套回收站。

插件目标 DSH 版本在仓库 badge 中为 0.2.1-rc.2;包版本以 package.json 为准(当前资料中为 0.4.6),许可证 MIT。

核心功能

软删除(移入回收站)

在会话行 「⋯」→ Delete chat 并确认后:

  1. 调用宿主归档并停止进行中的回合,列表里立即看不到该行。
  2. 将会话目录从 <sessions-root>/…/session-<uuid>/ 移到 ~/.dsh/session-trash/<project>/session-<uuid>/(同卷上为原子 rename;跨卷时按 EXDEV 回退为复制再删源目录)。
  3. 改写 storages/workspace.json,从 sessionIds 去掉该 id(并保留 .bak-<stamp> 备份)。
  4. 更新 ~/.dsh/session-trash/index.json,记录标题、cwd、大小、最后活动与删除时间,无需解析 zstd 日志。

对话框会展示例如 Status moved to trash 与占用大小;此步可逆,直到在回收站里执行永久删除。

侧边栏 Trash 页

全局面板列表(aria-label="全局面板")会出现 Trash 行,括号内为回收站条目数(为 0 时隐藏计数,超过 99 显示 99+)。选中后中央区域变为与插件管理类似的页面,可:

  • 按标题、路径或项目 筛选;
  • 多选 或全选,页脚显示选中数量;
  • Restore:目录移回会话根并重新入账、取消归档;
  • Delete permanently、Empty trash:仅在此页提供,弹窗确认数量、释放字节、是否可逆;永久类操作为红色确认,恢复为琥珀色。

列表行展示大小、回收站内绝对路径、最后活动(日志 mtime)与删除时间(YYYY-MM-DD HH:mm:ss)。

布局与国际化

同时支持按项目 <root>/<project>/session-<uuid>/ 与扁平 <root>/session-<uuid>/。界面文案随宿主语言(中/英)切换,行菜单、弹窗与 Trash 页会随之重渲染。

CLI

安装后可用二进制 dsh-delete-chat,常用参数包括:

  • --trash / --trash-list
  • --restore
  • --purge --yes
  • --empty --yes

GUI 被目录锁阻塞时,可先退出 DSH 再用 CLI 兜底(README 建议锁常来自宿主自身句柄)。

其他

仓库自带 format-1 市场索引,可添加为私有插件市场源;插件以当前 DSH 进程权限读写 ~/.dsh 下路径。

安装与启用

在 DSH 对话里直接请求安装(中英文均可):

Install https://github.com/abangbang/dsh-delete-chat

或:

帮我安装 https://github.com/abangbang/dsh-delete-chat

安装完成后 需要重启 DSH。插件树与客户端 bundle 在启动时组装,且客户端带 immutable 缓存头,仅刷新页面不够。

典型用法

从列表删除一次对话

  1. 在目标会话行打开 「⋯」。
  2. 选择 Delete chat。
  3. 在确认框中确认;行从列表消失,目录进入 ~/.dsh/session-trash。

在回收站恢复或清空

  1. 在侧边栏全局面板点 Trash。
  2. 用筛选找到目标会话,勾选一行或多行。
  3. 点 Restore 移回原位置;或点 Delete permanently / Empty trash,在弹窗中再次确认(不可撤销)。

回收站目录结构示意:

~/.dsh/
├── sessions/
│   └── <project>/session-<uuid>/
└── session-trash/
    ├── index.json
    └── <project>/session-<uuid>/

命令行(无 GUI)

退出 DSH 后,在 shell 中调用 dsh-delete-chat 与上述 flags;具体子命令以 --help 与 README 为准。

适用场景与注意

适合谁: 长期在 DSH 里开大量会话、希望列表「删掉」后磁盘也收敛,但又想保留误删恢复窗口的开发者。

务必知晓:

  • 回收站 不是 操作系统回收站;路径在 <DSH home>/session-trash。手动删除该目录等于跳过所有确认,永久丢失。
  • 插件与 DSH 同源信任:安装前请查看 GitHub 仓库 源码与 MIT 许可证,确认可接受其读写会话目录与 workspace.json 的行为。
  • 部分失败场景(如 Windows 上目录被占用导致 move 失败)可能已归档但未移走;README 给出恢复顺序:优先 Restore、重试、CLI、必要时用 workspace.json.bak-<stamp> 回滚。永久删除仅能从 Trash 页触发。

DSH 生态强调「一切皆插件」;SkillHub 目录页 是社区索引,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-delete-chat 补上了 DSH 默认缺失的「删目录 + 清记账」链路,并用 session-trash 与确认弹窗把不可逆操作限制在回收站里。需要安装说明与故障表时,以仓库 README 为准。

  • 目录页:https://www.skillhub.cn/plugins/abangbang/dsh-delete-chat
  • GitHub:https://github.com/abangbang/dsh-delete-chat
羽毛球分组比赛记分
小程序二维码

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

Xiaoye