dsh-delete
DSH-DELETE: recoverable conversation deletion for DeepSeek Harness — a session menu item and /delete-conversation command that queue deletions, hide sessions immediately, and move logs to a recoverable trash on restart
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:Hyna-hla/DSH-DELETE说明文档
阅读完整 README ↗DSH-DELETE
English | 中文
面向 DeepSeek Harness 的可恢复对话删除插件:在会话行 … 菜单中添加「删除对话」,并注册人工命令 /delete-conversation。用户确认后,目标 Session 进入删除队列,立即通过 Workspace 的持久归档投影从列表中隐藏;DSH 下次启动时,插件会在 Web Workspace 建立会话索引之前校验该 Session 的完整生命周期,并把其日志目录原子移动到可恢复垃圾箱。
代码源自 omdsh-dev/dsh-essential(MIT,Copyright (c) 2026 ExDragine)。本仓库将包名/Remote ID/UI 类名统一重命名为
dsh-delete,并为stateDir增加了默认值(~/.dsh/conversation-trash),使插件市场一键安装无需手写配置。
为什么删除是两阶段的
当前 DSH 的 Session 持久化约定是只追加的,公开服务没有删除方法;活动 Agent 的销毁句柄只属于创建者。插件不能安全地从活动写入者脚下移走日志。因此删除分两阶段:当前进程只写入一条持久请求并立即隐藏会话行,下一次启动在任何会话恢复之前完成日志移动。这个边界避免日志重建、部分写入和生命周期竞争。
安装
方式一:DSH 插件市场(推荐)
本仓库自带构建产物(lib/),市场可一键安装,无需构建、无需填写配置:
- 打开 DSH Web GUI → 设置 → DSH插件市场
- 搜索
DSH-DELETE,点「安装」 - 重启 DSH
方式二:官方 bundle 安装
node /path/to/DSH/apps/cli/lib/bin.js plugin --profile web add /path/to/DSH-DELETE
安装后重启 DSH。Bundle 会挂载 dsh-delete,并让 Web Workspace 等待 conversationDeletion 服务完成启动恢复后再建立 Session 索引。
方式三:直接写 cordis.patch.yml
- insert:
- id: dsh-delete
name: dsh-delete
config:
stateDir: /absolute/path/to/conversation-trash
- id: workspace
inject: [conversationDeletion]
stateDir 必须是绝对路径且位于 Session 工件目录之外;缺省时使用 ~/.dsh/conversation-trash。
使用
- 在会话列表中打开目标会话右侧的
…菜单,选择「删除对话」。确认卡片为站内 UI(标题「确认删除该对话吗?」,操作「取消 / 删除对话」),不用浏览器原生弹窗。 - 删除请求成功后立即归档该 Session,使其从所有会话分组中隐藏(完全成功时行消失即为反馈)。
- 若删除请求已写入但归档接口失败,卡片会提示「已加入队列但暂时无法隐藏」,不会误报为删除失败。
- 人工命令:
/delete-conversation CONFIRM(删除当前对话);/delete-conversation CONFIRM(按 Session id 删除其他对话)。
确认成功后重启 DSH,日志被移至 /trash//。目录中的 deletion.json 记录原目录。
恢复
先停止 DSH,删除恢复目录中的 deletion.json,再把该目录移回 originalDirectory。不要在 DSH 运行时恢复。
配置
| 字段 | 类型 | 默认值 | 说明 |
|---|