dsh-session-delete:DSH 会话删除与回收站可恢复清理

前言

DeepSeek Harness(DSH)在桌面端会把每次对话持久化成会话记录,侧边栏里可以归档、分叉、重命名,但官方到 0.2.0-rc.2 仍没有「删掉这条会话」的能力:sessionPersistence 契约里只有 create / open / stat / list / flush,没有 delete;会话级移除只剩 archiveSession,只是把记录藏起来,日志和投影缓存都还在。会话一多,列表和磁盘都会堆起来,又不敢随便动文件。

社区里 npm 上还有一个同名包 dsh-session-delete(作者 vtxf,与本项目无关),装错的话会话记录会被永久删掉且不可恢复。维护者 wuuuuu123-32 在 GitHub 发布的 dsh-session-delete 走客户端插件路线:在会话列表「⋯」菜单里提供删除与批量删除,记录移入 Windows 回收站,误删可从回收站还原;删除前还会扫描该会话写过的产出,由你决定是否一并移入回收站。下面介绍定位、安装和用法。

这是什么

dsh-session-delete 是 DSH 的客户端插件(分类:客户端),仓库 wuuuuu123-32/dsh-session-delete,当前 package 版本 0.1.2,MIT 许可证,依赖 Node >=20。它补的是官方缺失的会话删除能力,并刻意与 npm 同名包区分:只从 GitHub 安装,且删除语义是回收站而非永久删除。

和归档、npm 同名包怎么选

方案 会话记录 产出文件 可恢复
官方「归档」 保留,只隐藏 不动 —
npm 上的 dsh-session-delete(vtxf,与本项目无关) 永久删除 不动 不可恢复
本插件 移入回收站 扫描后由你勾选,默认不动 回收站还原

核心功能

菜单与确认流程

会话列表某一行的「⋯」菜单里有两个动作:

菜单项 行为
删除会话 删这一条。先扫产出,弹确认框显示产出清单 + 各项占用 + 记录大小,勾选「我已了解后果」才能确认
批量删除会话… 打开面板多选(支持全选/清空,运行中的不可勾),确认后先只扫选中项,再进确认框

产出默认原地保留;只有勾选「把上面的产出目录也一并移入回收站」才会动产出目录。

「产出」怎么界定

插件只认工作区(cwd)下的专属子目录(例如 lab-report-9\、my-plugin\)为可删产出;cwd 根目录下的散文件(如 AGENTS.md、升级日志.md、prompt-*.md、临时脚本等)会单独列在「不会被移动」提示区,永远不动。原因是 DSH 自带的 turn-deliverables 规则会把「某个会话写过」的文件都算产出,公用资产也会被算进某次对话;无法可靠区分根目录里的公用文件和临时文件,因此安全优先、一律不移动。

扫描事件来源包括:模型直接 write / edit 时的 tool/call,以及 run_code(PTC)里 tools.write 对应的 tool/ptc-dispatch,避免整场对话都走 run_code 时被算成零产出。

批量面板

  • 顺序与侧边栏一致:按 workspace.json 里 DSH 维护的 sessionIds 排列。
  • 默认只列侧边栏可见的主会话;子代理等不在 sessionIds 里的项默认收起,可取消「只看侧边栏里的会话」展开(带 子代理/未分组 标记)。
  • 切回「只看侧边栏」会自动取消被隐藏项的勾选,避免看不见却被删。

删除链路(宿主侧)

运行中的会话直接拒绝(409)。删之前先扫描产出,再 flush 活动会话,然后把会话日志目录与投影缓存移入回收站,并校验回收站 $I 条目数是否增加(防止受限令牌下静默永久删除)。之后摘工作区记账、发 api-session/removed 让列表行当场消失;删完后不能重拉列表,否则宿主基线会把行合并回来。

菜单项走官方插槽 sidebar.workspaces.session.menu.item(order 500 / 501),删除动作在 host 侧通过 HTTP 路由完成;客户端经 fetch 调用。

安装与启用

⚠️ 安装时必须带 github: 前缀,否则会装到 npm 上别人的永久删除包:

dsh plugin --profile desktop add dsh-session-delete          # ❌ 装到别人的包
dsh plugin --profile desktop add github:wuuuuu123-32/dsh-session-delete   # ✅ 本插件

桌面端标准安装(profile 名换成你自己的):

dsh plugin --profile desktop add github:wuuuuu123-32/dsh-session-delete

装完必须重启 DSH。客户端插件对新增插槽项的 HMR 不可靠,不重启菜单可能出不来。

典型用法

  1. 重启 DSH 后,在侧边栏某条会话右侧打开「⋯」。
  2. 选「删除会话」:看确认框里的产出清单与大小,按需勾选是否连同产出目录进回收站,勾选「我已了解后果」后确认。
  3. 要清多条:选「批量删除会话…」,多选(运行中不可选),同样经过扫描与确认后再执行。

误删会话记录时,到 Windows 回收站还原即可;产出若未勾选一并删除,仍留在工作区原路径。

适用场景与注意

适合谁:在 DSH 0.2.0-rc.2 桌面端 profile 上长期开很多会话、需要真正移除记录又希望可恢复的用户;需要批量整理侧边栏、且愿意在确认框里核对产出清单的场景。

环境与兼容:

  • DSH 0.2.0-rc.2(桌面端),依赖 webServer / sessionPersistence / workspaceRegistry / sessions 等服务。
  • Windows only:回收站逻辑依赖 Shell COM 与 $Recycle.Bin 元数据;非 Windows 环境不适用。
  • 旧版 web 端 0.1.5-rc.2 不支持前端插槽体系,菜单注入不成立(host 侧能力可单独跑,但完整体验需新客户端)。

安全与信任:插件以当前 DSH 进程权限运行,删除与扫描都会访问会话日志与工作区路径。安装前建议在 GitHub 仓库 查看源码与 MIT 许可证;真实删除前自行备份。仓库提供离线测试与可选 e2e 删除脚本,仅供开发者自测,日常使用以客户端菜单为准。

手动改 ~/.dsh/profiles/desktop/package.json 登记 bundle 时,JSON 不要带 BOM,否则 DSH 启动可能 JSON.parse 失败、界面打不开。

结尾

dsh-session-delete 用官方会话菜单插槽补上 DSH 缺的 delete 能力:记录进回收站可还原,产出先扫后选、根目录散文件不动,并与 npm 同名永久删除包明确区分。社区插件目录与 DeepSeek / 幻方无官方从属关系,安装与版本以你本机 DSH 与仓库说明为准。

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

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

Xiaoye