dsh-session-trash:侧栏删除会话与多选批量删除

前言

在 DeepSeek Harness(DSH)里,侧栏会积累大量会话记录。官方会话持久化方案在文档中说明 seam 层没有删除接口,日志会一直累积,直到外部手段移除。若只想清掉某次对话的聊天记录、又不想动工作区里的项目文件,单靠隐藏列表项也解决不了磁盘上的会话目录问题。dsh-session-trash 是社区维护的客户端插件,在侧栏会话「…」菜单里补上「真删」能力,并在删前备份、删后可撤销。

这是什么

插件名 dsh-session-trash(npm 包名同),维护者 ozjxnxh,分类为客户端。它在 DSH 侧栏每条会话的「…」菜单中增加两个入口:删除单条会话,以及带搜索与全选/清空的多选批量删除。删除的是聊天记录本身(会话日志目录与相关元数据),不是仅从列表里隐藏;工作区目录中的项目文件与内容寻址的上传附件不会被改动。

核心功能

菜单与交互

侧栏(含归档行)会话「…」菜单新增:

  • 删除会话:危险色样式并带分隔线,点击后弹出确认框,确认后删除该条会话。
  • 多选批量删除…:弹出带复选框的列表,支持搜索、全选与清空,一次删除多条。

删除完成后,界面右下角出现提示条,可一键撤销(将备份移回原位)。单条删除会连带其全部子代理会话,确认文案中用一行汇总子代理数量,而不是逐条平铺。

删什么、不删什么

数据 处理
会话日志 ~/.dsh/sessions/<项目>/<会话id>/ 删除(删除前先整目录迁入备份)
投影缓存 session_projcache 记录 删除
工作区记账(workspace 域的 sessionIds / 置顶 / 归档) 摘除
该会话的定时提醒(schedule 域) 删除
工作区目录里的项目文件 不动
上传附件(内容寻址、跨会话共享) 不动

备份默认位于 ~/.dsh/trash-backup/<时间戳>/,内含 manifest.json;默认保留最近 20 批,也可手工从备份目录拷回。

多选列表与子代理

侧栏主列表本身不展示 origin === "subagent" 的会话;多选批量删除对话框会按树形展示主会话与子代理关系。默认收起子节点;选中主会话时可一并选中其家族内的子代理;展开/收起仅影响展示,与选中态分离。分叉会话(fork)仍留在主列表,判定子代理只认 origin,与侧栏过滤规则一致。

宿主侧行为

插件在 DSH 0.2.1-alpha.2 缺少官方删除会话 API 的前提下,自建 Remote 面 trash,经 typertGateway 的 SRC 接收路径注册。删除前会请求各 workspace/session-stop 提供方停会话并落盘;若日志仍被占用则退避重试最多 6 次,仍失败则回滚备份并在对话框报错,避免半删。成功后广播 api-session/removed,并配合工作区 domain/changed 与 sessions.refresh() 刷新侧栏。

当前版本在 package.json 中为 0.1.0,许可证 MIT。

安装与启用

DSH 生态采用「一切皆插件」的思路;社区目录由独立站点维护,与 DeepSeek / 幻方无官方从属关系。本插件被 awesome-dsh-plugin 目录 收录后,可在 DSH 设置 → 插件市场 一键安装。命令行等价形式如下(资料原文,走 bundle 层 patch,勿在 profile 层重复插入同一条 loader 条目):

dsh plugin --profile web add github:YuJunZhiXue/dsh-session-trash

若在本机 desktop profile 手工安装(Windows 示例),需要:

  1. 将插件目录链接到 profile 的 node_modules:
junction C:\Users\<你>\.dsh\profiles\desktop\node_modules\dsh-session-trash <本目录>
  1. 在 profile 的 cordis.patch.yml 中增加 insert:id: session-trash,name: 'dsh-session-trash'。

  2. 重启 DSH(客户端 bundle 与 loader 条目均在启动时组合;改 patch 或插件文件不会热加载)。

重启后可在 ~/.dsh/logs/desktop-next-<日期>.0.jsonl 中搜索 session-trash,应看到类似:

session-trash 就绪(日志根:…\sessions,备份:…\trash-backup)

若出现 启动降级 或 loader 报错,需按 README 排查 apply(ctx, config) 与 package.json exports 等问题。卸载时删除 profile patch 中的 insert 并去掉链接,再重启即可。

插件目录页:https://www.skillhub.cn/plugins/ozjxnxh/dsh-session-trash
源码:https://github.com/ozjxnxh/dsh-session-trash

典型用法

  1. 打开 DSH 客户端,在侧栏找到要清理的会话,点击该行「…」。
  2. 选 删除会话,在确认框中核对「将删除」说明(含子代理汇总),确认后等待提示条;若误删,在提示条上点撤销。
  3. 若要一次清理多条,选 多选批量删除…,搜索或全选目标会话,确认批量删除;同样可通过提示条撤销最近一批操作。

上述步骤只影响会话日志与相关 DSH 元数据,不会删除仓库或工作区内的项目产物。

适用场景与注意

适合需要定期清理会话磁盘占用、又希望保留工作区文件与共享附件的 DSH 用户。批量整理归档区或测试产生的会话时,多选入口比逐条操作更省事。

使用前请注意:

  • 插件以当前 DSH 进程的权限读写 ~/.dsh/sessions 与备份目录;安装前应自行查看源码与 MIT 许可证,确认可接受其行为。
  • 正在运行的会话删除前会先尝试停止;极端占用情况下可能整次操作失败并回滚,不会留下半删状态。
  • 若启用了 SQLite 全文搜索索引(非默认的 :memory: 配置),索引会在 reconcile 中跟进,必要时需重启后重建。
  • 撤销依赖默认保留的最近 20 批备份;更早的批次会被轮转丢弃,无法通过内置撤销恢复。

结尾

dsh-session-trash 补上了侧栏「真删会话」与多选批量删除,删前自动备份、删后可撤销,并明确不动工作区项目文件。需要安装或细节时,可查阅 SkillHub 目录页 与 GitHub 仓库 中的 README。

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

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

小夜