dsh-session-bin:为 DeepSeek Harness 补上可撤销的会话物理删除

前言

在 DeepSeek Harness(DSH)里长期跑智能体,工作区会话列表会不断变长。宿主自带的「归档」只会把会话从列表里藏起来,~/.dsh/sessions 下的日志目录仍然占着磁盘。想真正清掉某次试验、过期对话或误开的会话,单靠归档不够;若粗暴删目录,又很难回到「删之前还能恢复」的状态。

下面介绍社区插件 @jingmei2/dsh-session-bin(仓库 jingmei2/dsh-session-bin):在归档语义之上,把会话目录移入本地回收站,支持恢复或从磁盘彻底删除,并暴露与界面一致的 Agent 工具。

这是什么

@jingmei2/dsh-session-bin 由维护者 jingmei2 发布,在 SkillHub 目录中归类为「记忆」。当前包版本为 0.1.0,许可证 MIT。它不改变 DSH 的会话模型,而是补上「物理删除日志 + 可撤销回收站」这一层:删除先走宿主归档,再把目录 rename 到 ~/.dsh/session-trash,失败时自动回滚。

与宿主「归档」的关系

DSH 默认只支持归档:会话行从工作区列表消失,但 ~/.dsh/sessions 下文件原样保留。本插件的「移入回收站」使用宿主归档通道 workspaceRegistry.archiveSession,而不是把工作区里的会话「摘除」。摘除后实例仍可能留在内存,并出现在列表底部「未分组」里,形成难以清理的行;归档则保留工作区归属,行干净消失,恢复时回到原工作区、原位置。归档与置顶状态会写入元数据,恢复时一并还原。

核心功能

界面操作

操作 效果
会话行 … 菜单 → 彻底删除… 会话目录(含子代理会话)移入回收站,会话行从工作区列表隐藏
设置 → 会话回收站 → 恢复 目录移回原位置,会话回到原工作区、原位置
设置 → 会话回收站 → 批量清理 按工作区分组勾选,一次移入回收站多个会话;正在生成回复的会被跳过并列出原因
设置 → 会话回收站 → 彻底删除 / 清空回收站 从磁盘上真正删除,不可恢复

菜单行复用宿主 MenuItemButton(经 require('@deepseek-ai/dsh-client-ui-primitives'));取不到模块时退回 role="menuitem" 按钮。设置页与确认弹窗使用 --dsw-alias-* 主题令牌。

Agent 工具 session_trash

插件注册工具 session_trash,参数 action 取 list / trash / restore / purge / empty,与设置页走同一套宿主逻辑。action=trash 可传 sessionIds 数组批量删除(最多 200 个),返回 { results, trashed, skipped },单条失败不影响其余。

磁盘布局

~/.dsh/sessions/--<cwd-slug>--/session-<uuid>/     # 原始位置
~/.dsh/session-trash/
  20261019-165233-a1b2c3/
    meta.json                                      # 会话、工作区、时间、字节数、子会话清单
    data/--<cwd-slug>--/session-<uuid>/             # 被移动的日志

卸载插件不会自动清空 ~/.dsh/session-trash,需手动删除该目录。

安装与启用

指定 profile 后执行官方安装命令:

dsh plugin --profile <profile> add @jingmei2/dsh-session-bin

也可在插件市场按包名 @jingmei2/dsh-session-bin 搜索安装。装完后:Host 侧改动需重启应用,Client 侧刷新页面即可。

package.json 要求 Node ^22.19.0 || >=24.0.0,DSH >=0.2.0-rc.1 <0.3.0-0。

典型用法

  1. 在某一工作区打开会话列表,对不再需要的会话使用 … → 彻底删除…,确认后目录进入回收站,列表中该行消失。
  2. 打开 设置 → 会话回收站:误删则 恢复;确认不再需要则对条目 彻底删除,或 清空回收站 一次性清空。
  3. 需要一次清理多个会话时,在回收站设置里使用 批量清理,按工作区勾选;若某会话正在生成回复,会被跳过并在结果中说明原因。
  4. 在 Agent 侧调用 session_trash:例如 action=list 查看回收站,action=trash 并传入 sessionIds 做批量移入回收站。

安全边界与适用注意

  • 拒绝删除:仅当会话「正在生成回复」(agent running、仍有写入)时拒绝移动,避免后续写入落到旧路径;含正在运行子代理的整条会话同样拒绝。批量清理会跳过这些会话并列出原因。
  • 仅警告不拒绝:仅开着标签页、未在生成时,删除会警告但不阻止;DSH 不会因切换会话就释放实例。
  • 事务性:先归档再 rename 到回收站;任一步失败会回滚(含撤销归档),避免「列表没了、文件在别处」的半成品。
  • 其它:同一会话重复删除会提示已在回收站;元数据损坏的条目在列表中标记,且只允许彻底删除,不可误恢复半份数据。

适合需要定期清理磁盘、又希望误删可恢复一段时间的 DSH 用户。插件以当前 DSH 进程权限读写 ~/.dsh,安装前建议阅读 GitHub 仓库 源码与 MIT 许可证,确认符合本机安全策略。SkillHub 目录页(jingmei2/dsh-session-bin)为社区收录站点,与 DeepSeek / 幻方无官方从属关系。

结尾

@jingmei2/dsh-session-bin 在 DSH「一切皆插件」的生态里,把会话从「只能归档」延伸到「可撤销的物理删除」:归档隐藏列表、回收站承载恢复,purge 才真正释放磁盘。目录与文档见 SkillHub 插件页 与 GitHub。

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

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

小夜