Session Trash:给 DSH 加上可撤销的删除与回收站

前言

DeepSeek Harness(DSH)桌面端目前只有“归档”,它会隐藏会话但不会删除日志。如果你需要真正移走对话,只能依赖手动删除文件,无法撤销,也不适合日常清理。Session Trash 插件为 DSH 增加了确认删除、立即从侧栏移除、7 天回收站和撤销恢复的能力,把删除变成一个可控的操作。

插件简介

这是社区维护的 DSH 插件 yycf1/dsh-plugin-delete-session,归类在“记忆”类。它通过内部接口拦截删除流程,先归档、再复制日志到回收站、最后删除原文件;支持运行中任务拒绝删除、失败回滚、自动过期清理等。

核心功能

  • 删除对话:每个会话的 ... 菜单新增红色“删除对话”选项,确认框显示标题和保留天数。
  • 立即消失:删除成功后侧栏行立即移除,包括“未分组”会话,无需刷新或重启。
  • 7 天回收站:日志、投影缓存和元数据先完整复制到 $DSH_HOME/session-trash/,复制成功后才删除原文件。
  • 撤销 / 恢复:删除提示条内嵌“撤销”;侧栏底部的回收站按钮可以恢复任意未过期会话。
  • 彻底删除:在回收站中可立即永久删除,不必等 7 天。
  • 只拦截真正运行中的任务:Agent 回合处于 running 时立即拒绝删除,不归档、不取消、不等待;空闲但仍驻留内存的会话可以正常删除。
  • 失败安全:归档、从工作区摘除、flush、复制任一步失败都会在动原文件之前中止并回滚;不会出现“原文件删了、回收站也没有”的状态。
  • 与归档一致的提示:复用 DSH 的 Toast 原语,位置和样式与“会话已归档,可撤销”一致。

安装

从 npm 安装(推荐)

dsh plugin --profile web add dsh-plugin-delete-session

安装后完全退出并重新打开 DSH(Host 半是 ESM 模块,刷新页面不会重新加载它),再按 Ctrl+Shift+R 刷新页面。

从 GitHub 源码安装

dsh plugin --profile web add github:yycf1/dsh-plugin-delete-session

这是纯 JavaScript 包,不需要构建授权。安装后同样需要完整重启 DSH。

在 DSH 内浏览

本仓库同时发布了一个符合 DSH 插件市场格式的索引:

https://yycf1.github.io/dsh-plugin-delete-session/index.json

打开 设置 → 插件 → 实验性插件 → 自定义插件市场,添加上面的索引地址,即可在“发现”中查看并安装。已提交 DSH Plugin Hub(dsh-plugin.org),收录后可在其站点搜索。

典型用法

  1. 在左侧会话列表找到目标对话,打开 ... 菜单;
  2. 点击 删除对话,确认;
  3. 会话立即从列表消失,顶部出现带“撤销”的提示;
  4. 7 天内点击提示里的“撤销”,或打开侧栏底部的回收站点击“恢复”;
  5. 在回收站点击“彻底删除”可立即永久删除。

删除的是会话日志和它的投影缓存;全局附件库按内容寻址共享,不会被删除。

配置

默认配置在 cordis.patch.yml:

- insert:
    - id: dsh-plugin-delete-session
      name: 'dsh-plugin-delete-session'
      config:
        retentionDays: 7
字段 默认值 说明
retentionDays 7 回收站保留天数(1–3650)。
trashRoot $DSH_HOME/session-trash 回收站目录。
sessionsRoot session-persistence 的 root,否则 $DSH_HOME/sessions 会话日志根目录。
projectionCacheDir $DSH_HOME/storages/session_projcache/sessions 投影缓存目录。
homeDir $DSH_HOME,否则 ~/.dsh 未显式给出路径时使用的数据目录。
purgeIntervalMs 3600000 自动清理间隔(最小 60 秒)。

在 profile 的 cordis.patch.yml 中覆盖 config 可以修改保留天数;patch 会替换整行配置,因此请同时写出需要保留的其他字段。

适用场景与注意

  • 适合需要在 DSH 中真正删除对话并希望保留撤销能力的场景,例如清理测试会话或误删后补救。
  • 插件依赖 DSH 内部接口(ctx.sessions.retireScope、sessions.detachEntered、agents.detachEntered、@deepseek-ai/dsh-client-ui-primitives 的 Toast),DSH 升级后可能需要适配。
  • 空闲 Agent 的底层 scope 仍会保留到本次进程结束(DSH 没有公开的 Agent close 接口);它已被摘除注册,不能从侧栏或 session API 访问,也不会再写日志,重启后彻底释放。
  • 回收站操作在单个 DSH 进程内串行;不要同时运行多个共享同一 $DSH_HOME 的 DSH 实例。
  • Windows 已验证;macOS/Linux 未完整验证。
  • 运行中的回合不会被删除顺手取消;请先停止任务,这是数据安全选择。
  • 删除后恢复的会话会出现在 workspace 最前面,不保留原手动排序位置。
  • 本插件没有注册 Agent 工具,模型不能自行删除对话;删除只通过 GUI 暴露。

兼容性

  • DSH:>=0.2.1-rc.2 <0.3.0
  • 平台:Windows 已验证;macOS/Linux 未完整验证
  • 运行时:DSH Desktop 或带 Web UI 的 DSH profile

短结尾

Session Trash 为 DSH 提供了可撤销的删除与 7 天回收站,让删除对话变成可控的操作。如需了解更多,可访问插件目录页或 GitHub 仓库。

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

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

Xiaoye