前言¶
DeepSeek Harness (DSH) 的会话持久化采用追加模式,且公开服务未提供删除方法。在 Agent 运行时,其销毁句柄仅属于创建者,插件无法在活动写入器下安全移出日志。dsh-delete 通过两阶段策略解决这一问题:运行时仅持久化删除请求并隐藏会话,重启时才完成日志的原子移动与归档。
功能概览¶
dsh-delete 是一个 Memory 类插件,由 Hyna-hla 维护。它为 DSH 添加了可恢复的对话删除能力,核心功能包括:
- 会话菜单入口:在会话列表的
…菜单中增加“删除对话”选项。 - 命令行接口:注册
/delete-conversation人类命令。 - 即时隐藏与队列:确认后立即将会话加入删除队列并从列表中隐藏。
- 生命周期验证:Web Workspace 在构建会话索引前,会先验证会话的完整生命周期状态。
- 可恢复归档:重启 DSH 时,将日志目录移动到可恢复的垃圾目录(默认
~/.dsh/conversation-trash)。
安装与启用¶
插件安装后需重启 DSH 生效。使用官方 CLI 命令添加插件:
node /path/to/DSH/apps/cli/lib/bin.js plugin --profile web add /path/to/DSH-DELETE
安装完成后,Web Workspace 会等待 conversationDeletion 服务完成启动恢复,再构建会话索引。
使用方法¶
界面操作¶
在会话列表中找到目标会话,点击行尾的 … 菜单,选择 Delete conversation。确认卡片出现后点击 Delete conversation。
命令行操作¶
命令要求字面量 CONFIRM,且必须区分大小写。
- 删除当前对话:
/delete-conversation CONFIRM - 删除指定会话:
/delete-conversation <session-id> CONFIRM
确认后,目标会话会立即从列表中消失。下次启动 DSH 时,日志会被移入垃圾目录。
配置与注意事项¶
配置项¶
插件支持以下配置(cordis.patch.yml 中配置):
| 字段 | 默认值 | 说明 |
|---|---|---|
stateDir |
~/.dsh/conversation-trash |
垃圾目录,必须为绝对路径且位于会话目录之外 |
commandName |
delete-conversation |
可选的人类命令别名(无前导 /) |
安全与限制¶
- 确认机制:删除操作必须包含字面量
CONFIRM,否则不会执行任何写入。 - 后端限制:仅支持 JSONL 后端,明确拒绝 SQLite 后端。
- 原子操作:日志移动使用同文件系统重命名,不使用
unlink,确保崩溃后可恢复。 - Node 版本:构建和运行需要 Node.js 版本
^22.19.0 || >=24.0.0。 - 数据保留:日志进入可恢复垃圾箱,最终清理策略由部署管理员决定。
恢复数据¶
若需恢复误删的对话,需停止 DSH,进入垃圾目录,删除 deletion.json 文件,然后将对应目录移回原始位置。注意:恢复操作必须在 DSH 停止时进行,运行中恢复可能导致数据损坏。