会话回收站:给 DSH 加上可恢复的删除能力

前言

DSH 没有删除会话的接口,只能归档或直接关闭。要彻底清理时,往往需要手动找文件、删目录,容易误删或遗漏。会话回收站(Session Recycle Bin)给 DSH 补上这个能力:删除即移入可恢复的回收站,只有「彻底删除」才真正销毁磁盘上的字节。

是什么

会话回收站是 DSH 桌面端的一个插件,由维护者 WangLemna 提供。它把「删除」拆成两步:先移入回收站,随时可以恢复;再通过「彻底删除」真正清空磁盘。插件围绕三条约定设计:一条条目 = 一棵树、不会悄悄销毁任何东西、侧栏入口、会话菜单、模型工具三处入口共用同一批 Host 方法。

核心功能

删除与彻底删除

  • 删除:先弹确认框,写明有多少个子会话会一并移入回收站;会话日志与投影缓存被移动到 ~/.dsh/session-recycle-bin/<时间戳>-<id>/,并从工作区登记里摘除。
  • 彻底删除:同样先过确认框,写明要销毁的条目数与子会话日志数;只有在确认后才会真正销毁磁盘上的字节。

会话树处理

插件按会话日志 header 里的 origin: 'subagent' + parentSession 解析整棵树,删除一个会话会带走整棵树;恢复与彻底删除都把树当成一个整体。恢复时会先检查整棵树的所有目标路径,避免出现「父会话回来了、子会话还在回收站」的半棵树。

入口与操作

  • 会话右键菜单 → 红色「删除会话…」:先确认,写明子会话数。
  • 会话右键菜单 →「批量操作…」:对某个工作区的全部会话批量归档或删除,确认框写明整个选中集合带多少子会话。
  • 侧栏「会话回收站」:主区打开完整页面,每条会话行首有复选框、行尾是恢复与彻底删除,上方是选择栏,可批量操作。
  • 右键侧栏图标 →「清空回收站…」:一键清空的捷径,同样先过写明条数的确认框。
  • 设置 → 会话回收站:同一个回收站页,给习惯在设置里操作的人。
  • delete_session 工具(给模型用):preview / trash / trashMany / archiveMany / list / restore / restoreMany / purge / purgeMany / purgeAll,与 UI 共用同一批 Host 方法。

安全边界

  • 只有「还有工作」的会话会被拒绝删除;只是打开过会话、没有在跑的任务,可以被删除,恢复后也能继续对话。
  • 不会误销毁:清空回收站不可撤销,对话框打开期间整个回收站页冻结,正文永远写明要销毁的条目数与子会话日志数。
  • 永远不碰:附件目录(~/.dsh/attachments/v1/objects)、~/.dsh/sessions 下的项目目录本身、以及任何同 ID 的既有会话。
  • 父会话还在时,子会话不能被单独删除(返回 session-child),正确动作是删父会话;父会话已不存在的孤儿子会话仍可按 id 清理。
  • 回收站条目仍占磁盘,直到显式彻底删除,没有自动过期清理。
  • Windows 上跨卷移动会从 rename 回退到复制(EXDEV);同卷内是原子 rename。
  • 恢复后侧栏可能需要刷新一次页面——DSH 没有「会话出现」事件可为恢复的日志合成行。
  • Auto review 权限预设可能拒绝模型发起的 delete_session 写调用,那是 DSH 的权限策略,不是插件行为。

安装与启用

插件已在 npm 发布为 dsh-recycle-bin。

dsh plugin --profile <profile> add dsh-recycle-bin

也可以直接在市场里搜索「会话回收站 / Session Recycle Bin」点安装。装完刷新一次页面(Ctrl+F5),侧栏入口会出现在「插件」「定时」「市场」那一排。

本地开发安装(源码即运行代码,不需要 build):

plugin_manager { action: "install_bundle", target: "<本目录绝对路径>" }

卸载

plugin_manager { action: "remove_bundle" }

回收站里尚未恢复的条目会保留在 ~/.dsh/session-recycle-bin。如果插件已卸载又想把会话找回来,每个条目里都有 entry.json 清单写明每个文件该去哪:把 session/(以及每个 children/<id>/session/)搬回 ~/.dsh/sessions/<projectDir>/<id>/,把 projcache.json 搬回 ~/.dsh/storages/session_projcache/sessions/<id>.json 即可。

版本兼容

插件要求 DSH 版本:0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2。engines.dsh 与 peerDependencies 中 9 个 @deepseek-ai/dsh-* 包也都在 0.2.x-rc.* 区间,并依赖 @deepseek-ai/cordis ~4.0.5。

适用场景与注意

  • 适合需要频繁清理会话、希望避免误删或手动找文件的 DSH 桌面端用户。
  • 插件以当前 DSH 进程权限运行,安装前建议检查源码与许可证。

小结

会话回收站为 DSH 补上了删除会话的能力,把「删除」拆成两步,保留恢复余地,同时通过确认框、树处理、安全边界等设计,避免误操作与数据丢失。更多细节与源码可在插件目录页与 GitHub 仓库查看。

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

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

小夜