@ybbmm/dsh-session-delete:在 DSH 侧边栏删除对话(可回收或永久)

前言

DeepSeek Harness(DSH)默认可以把对话归档,但不会从本地彻底移除会话日志;~/.dsh/sessions 下的记录会一直累积。对长期在同一工作区里跑智能体、反复 fork 和试错的开发者来说,侧边栏里会堆满不再需要的对话,既占磁盘,也干扰检索。

社区插件 @ybbmm/dsh-session-delete(仓库 jack-001-a/deepseek-harness-session-delete)在会话菜单和列表行上补上「删除对话」能力:默认进可回收站,支持还原与彻底删除;也可配置为直接永久删除,并带路径校验与审计日志。维护者为 jack-001-a,分类为客户端插件。

这是什么

一句话:在 DeepSeek Harness 侧边栏为每个会话增加删除入口,按桌面软件常见方式处理本地会话产物——默认移入回收站,可恢复或升级为永久删除。

DSH 生态里能力以插件形式扩展;插件目录站 SkillHub 上的条目 与 GitHub 仓库由社区维护,与 DeepSeek / 幻方无官方从属关系。安装前请自行查看源码与许可证(MIT),插件以当前 dsh 进程权限读写本机 ~/.dsh 目录。

核心功能

界面入口

位置 行为
会话 「…」菜单 在自带的置顶、重命名、fork、归档等项之后,增加红色 Delete conversation(删除对话)
会话行悬停 在自带归档、置顶按钮旁增加垃圾桶按钮
确认对话框 显示对话名称;说明删除是否可恢复;永久模式下需输入对话标题才能解锁 destructive 操作
删除完成后 同一对话框内可 Restore(还原) 或 Delete permanently(永久删除)

若删除的是当前正在打开的对话,工作区内会重新打开一个新会话;对话框会短暂保留以便确认结果。

回收站与还原(默认 mode: trash)

  1. 会话产物被 移动 到会话存储旁的回收区,并附带一份 manifest(原路径、删除时间、子对话信息)。
  2. 侧边栏行消失,工作区记账与 projection 缓存按宿主原有逻辑释放。
  3. Restore 将产物移回原位。
  4. Delete permanently 从回收站中真正删除。
  5. 超过 retentionDays(默认 7 天)仍未处理的回收项会被自动清理。

在插件配置里设置 mode: permanent 时,跳过回收站,直接删除;对话框同样要求输入对话标题后才能执行。

实际会动哪些本地数据

对象 效果
会话日志目录 ~/.dsh/sessions/<project-key>/<session-id>/(含 log 与锁文件) 移入回收站,或永久模式下直接删除
Projection 缓存 ~/.dsh/storages/session_projcache/sessions/<id>.json 丢弃,并对迟到的 checkpoint 写入做再校验
工作区记账(成员关系、排序、置顶、归档标记) 释放
活跃会话与 agent store 条目 在移动文件 之前 先 detach,避免写端重建日志
附件 ~/.dsh/attachments 保留(按内容寻址,多会话共享)
临时溢出文件 不处理(由宿主按年龄清理)
从该对话 fork 出的子对话 保留;对话框会说明仍指向已删父会话的数量

安全与失败行为(摘要)

删除按事务顺序执行:解析目标 → 运行中则拒绝 → 停止并 detach 活跃会话 → 先把日志产物移出存储 → 释放记账与缓存 → 通知 UI。若产物无法移动(常见为写端仍在关闭),会以 session-delete/io 失败,且 不 改动记账与缓存,侧边栏行仍在,可重试。

仅当存储定位器指向插件已知的 kind(dir、file 或宿主自带的 jsonl),且解析路径落在会话存储根目录内时才会执行删除;否则返回 session-delete/unsafe-path 且不做任何变更。对话仍在跑 turn、子 agent、后台任务或定时提醒时,宿主会拒绝并说明原因。

每次变更会追加一条记录到回收站旁的 audit.jsonl(动作、session id、结果、时间戳),不写对话正文,并对文件做长度裁剪。

远程接口(供集成或排查)

端点 用途
sessionDelete/delete 删除一个对话
sessionDelete/describe 报告当前模式、保留窗口与存储能力
sessionDelete/restore 从回收站还原
sessionDelete/purge 永久删除回收站中的项
sessionDelete/listTrash 列出回收站(新到旧)

常见错误码包括:session-delete/active、session-delete/not-found、session-delete/io、session-delete/unsafe-path、session-delete/trash-unavailable 等;对话框会做本地化展示。

安装与启用

从插件市场搜索 Session Delete 安装,或在本机执行:

dsh plugin add @ybbmm/dsh-session-delete

本地开发目录安装(README 示例):

dsh plugin add ./session-delete

若当前 profile 不会热加载插件包,安装后需 重启 DeepSeek Harness。

package.json 标明 Node >= 22;插件 bundle 仅使用 Node 内置模块,无额外运行时依赖。README 记载在 DeepSeek Harness 0.2.1-rc.2(Desktop/Web GUI,Windows,中英文 UI)上构建验证。

配置

可调项写在插件的 cordis.patch.yml 中,升级后仍会保留;各键均可选:

- id: ybbmm-dsh-session-delete
  name: '@ybbmm/dsh-session-delete'
  config:
    mode: trash          # 'trash'(可恢复)或 'permanent'
    retentionDays: 7     # 回收站保留天数
    # trashRoot: ~/.dsh/.trash
键 默认 含义
mode trash trash 可恢复;permanent 直接永久删除
retentionDays 7 回收站保留时长
trashRoot 会话存储父目录下的 .trash 回收站与审计日志位置

回收站 故意 放在会话存储树之外:宿主会把 ~/.dsh/sessions 下每个目录都当作候选项目,若把回收站放在 sessions 内部,可能被误读为活跃对话。

典型用法

  1. 安装并重启 Harness 后,在侧边栏选中要清理的对话。
  2. 打开该会话的 「…」菜单,点 Delete conversation,或悬停该行点垃圾桶图标。
  3. 在确认框中阅读提示(默认可恢复)。确认后对话从列表消失,本地日志进入回收站(或按 permanent 配置直接删除)。
  4. 若误删,在同一结果对话框点 Restore;确定不要了再点 Delete permanently。
  5. 需要长期自动清理时,保持默认 retentionDays: 7,或按需改 cordis.patch.yml 后重启。

适用场景与注意

适合谁: 经常在 DSH 里留下大量试验对话、需要主动清理本地会话目录的开发者;希望删除可反悔、或要在永久删除前二次确认标题的场景。

注意:

  • 插件以 当前 dsh 进程的用户权限 操作 ~/.dsh;安装前请阅读 GitHub 源码 与 MIT 许可证。
  • 附件不会因删会话而删;fork 出的子对话会保留。
  • 宿主内部接口(会话存储、持久化、工作区注册、projection 缓存、API Gateway SRC 等)若在未来版本重构,可能需要插件跟进适配;README 对此有说明。

结尾

@ybbmm/dsh-session-delete 补上了 DSH 侧边栏缺失的「删除对话」路径:默认可回收、可审计,也可配置为永久删除,并对存储路径做约束,避免误删会话树以外的目录。

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

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

Xiaoye