dsh-session-trash:为 DSH 补上带回收站的会话删除

前言

在 DeepSeek Harness(dsh)里整理会话时,内置能力主要是「归档」:会话从侧栏藏起来,并阻止后续运行,但日志仍占磁盘,也不能像常见产品那样「删错了还能捞回来」。若你希望右键就能删除会话,且先进入回收站、可撤销或在设置里统一恢复/清空,需要客户端侧的扩展。skyrocks/dsh-session-trash(npm 包名 @skyrocks/dsh-session-trash)由维护者 skyrocks 发布,分类为客户端插件,当前 GitHub 星标为 0,版本 0.1.2,许可证 MIT。

下面介绍它做什么、如何安装,以及使用时需要留意的边界。

这是什么

dsh-session-trash 是 DSH 的 Host + 客户端插件:在会话列表右键增加「删除会话…」,确认后先把整棵会话目录移入本机回收站,而不是立即抹掉;提示条可即时撤销,也可在「设置 → 回收站」里逐条恢复、彻底删除或一次清空。

与内置归档对比:归档不释放目录;本插件把删除拆成「移入回收站 → 再决定是否 purge」,降低误删风险。删除父会话时,origin === 'subagent' 的子会话会进入同一条回收站记录并一并恢复;fork 出来的会话视为独立会话,不会随父会话被带走。

核心功能

删除与撤销

  1. 右键目标会话 → 菜单底部「删除会话…」。
  2. 确认框点「移入回收站」:侧栏消失,数据搬到 ~/.dsh/trash/sessions/<删除时间>-<会话 id>/。
  3. 提示条点「撤销」:目录原样搬回,归档/置顶状态一并还原。
  4. 未点撤销时,在 设置 → 回收站 对每条执行「恢复」或「彻底删除」,或清空全部。

安全拒绝

插件会在两种情况下拒绝删除,并给出说明:

情况 表现 原因
会话(或其子会话)正在本机打开 提示先切换或重启 写句柄仍持有锁,边写边删会冲突
仍有运行中工作 列出回合/子会话/后台或定时任务 复用归档侧活动检查,避免删掉正在跑的任务

未归档会话也可直接删:插件会先逐个替你归档(含活动检查);任一被拒则整体回滚,全部成功后才清理归档/置顶标记。

配置

在 profile 的 cordis.patch.yml 中按插件 id 覆盖:

- id: session-trash
  config:
    retentionDays: 0        # >0 时打开回收站会清理超过 N 天的条目;0 表示不自动清理
    trashRoot: ""           # 自定义回收站根目录;空则使用 <DSH_HOME>/trash/sessions

磁盘布局与手动救援

回收站条目结构如下:

~/.dsh/trash/sessions/<deletedAt>-<rootSessionId>/
  meta.json                        # 根会话 id/标题/cwd、删除时间、字节数、各会话原路径与归档/置顶状态
  sessions/<escaped-session-id>/…  # 各被删会话目录

恢复只依赖 meta.json:搬回原路径并还原 wasArchived / wasPinned;恢复前会预检目标路径,任一占用则整条中止。也可手动 mv 回原路径。会话目录与回收站不在同一磁盘时会退化为「复制 + 删除」(EXDEV)。插件不联网、不发送遥测,仅在 ~/.dsh 下读写会话与回收站路径。

安装与启用

发布后从 GitHub 默认分支安装(桌面 profile):

dsh plugin --profile desktop add github:skyrocks/dsh-session-trash

使用 dsh web 时,将 --profile desktop 换为 --profile web。装完后完全退出 DSH 再打开——Host 插件只在启动时加载。

兼容性(来自仓库说明):DSH >= 0.2.1-rc.3 < 0.3.0(在 0.2.2-rc.1 桌面端验证),Node >= 18;无额外运行时依赖,使用 DSH 已有的 cordis 等 peer。

插件以当前 dsh 进程权限读写本机会话与回收站目录;安装前建议在 GitHub 仓库 查看源码与 MIT 许可证。

已知取舍

  • workspace.json 可能留下悬空 id(工作区注册表无公开「移除成员」API);侧栏会过滤无 summary 的 id,视觉无影响。
  • 不删除附件:附件在 ~/.dsh/attachments/v1/objects 内容寻址共享,不随单会话删除;空间回收需单独 GC。
  • 不能删除当前正在使用的会话,需先切换到其他会话。
  • 删除后列表依赖 sessions.refresh() 对账;Host 卡顿时可能需要手动刷新页面。

结尾

若你希望在 DSH 里用「回收站」模型管理会话删除,而不是仅归档或不可逆清目录,可按上述命令安装 @skyrocks/dsh-session-trash,并在误删时利用撤销或设置页回收站恢复。

(SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系;DSH 生态遵循「一切皆插件」,本介绍事实以仓库 README 与 package.json 为准。)

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

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

小夜