前言¶
DeepSeek Harness(DSH)在会话管理上已经提供了会话 fork、导出等基础能力,但对单条消息的回滚、删除与恢复仍然缺失。官方 SurfaceOp 只有 append 和 replace,没有「解除遮蔽」的操作;官方文档也明确指出会话只能归档,不能删除。这意味着在多轮对话中,一旦出现错误或需要调整历史内容,只能通过「重新开始对话」或手动编辑会话文件来处理,操作成本高且容易破坏会话结构。
@240xu/dsh-message-ops 是一个 DSH web 插件,专注于补齐官方缺失的消息级操作能力:消息回滚(遮蔽该条及其后续内容)、单条删除、以及回滚/删除的恢复。插件通过 surfaceOp: replace 的 system 事件实现这些操作,不直接重写日志文件,由 DSH 引擎的 assertProvenance 校验权限与来源。分支功能在 0.9.0 中已移除,改用官方 session/fork;导出功能也改为使用官方 /api/session.export,避免重复造轮子。
核心功能¶
本插件提供三类核心能力:
- 消息回滚:将指定消息及其后的所有内容遮蔽,相当于「向前撤销」到该消息状态。
- 单条删除:仅遮蔽指定消息,保留其后的内容。
- 恢复:撤销一次回滚或删除,通过重放被遮蔽区间的消息文本实现,而非直接解除遮蔽。
插件通过右侧 OpsPanel 抽屉提供 UI 入口,支持在消息列表中选择单条消息进行回滚、删除或分支;整会话删除则进入回收站 tab,需输入会话标题确认后保留 7 天,可通过 purge 永久删除。
安装与启用¶
插件为纯 Node.js 实现,零 npm 依赖,仅使用 node:fs / node:zlib / node:path / node:url,压缩使用 Node 内建 zlib.zstdCompressSync,需要 Node ≥ 23.5,在 Termux 与 Windows 上通用。
安装命令如下:
# Termux / Linux
dsh plugin --profile web add @240xu/dsh-message-ops
# Windows
dsh plugin --profile web add @240xu/dsh-message-ops
# 或本地目录:
dsh plugin --profile web add file:C:/path/to/dsh-message-ops
安装完成后,重启 DSH web 实例,在会话头部点击 Message ops 按钮,即可打开 OpsPanel 抽屉。
典型用法¶
在会话列表中打开一个会话后,通过以下方式触发消息操作:
- 会话头部的
Message ops按钮 → 右侧OpsPanel抽屉(消息 / 回收站双 tab)。 - 助手消息 hover 行的
Revert to here/Quote to composer。 - 用户消息 hover 行的
Revert to here。 - 输入框上方的回撤贴条:展开后可逐条
Restore。 - 侧栏会话行菜单。
在 OpsPanel 中选择一条消息,点击「回滚」或「仅删除」后,系统会进行二次确认;运行中的会话会被拒绝,提示先停止会话。回滚或删除后,可通过「恢复」按钮或输入框上方的贴条逐条撤销操作。
适用场景与注意¶
本插件适合需要在单次会话中调整历史消息、清理错误内容或回退到某个中间状态的场景。由于插件以当前 DSH 进程的权限运行,安装前建议查看源码与许可证,确保符合你的使用策略。
插件当前版本为 0.11.2,修复了在 live 会话中可能产生重复 turn、历史日志格式兼容性以及合成 turn 竞态等问题。在使用前请确保 DSH 引擎版本与插件兼容。
结语¶
@240xu/dsh-message-ops 在不破坏 DSH 日志结构的前提下,为会话提供了消息级的回滚、删除与恢复能力,让对话调试与历史调整更加可控。插件目录页与源码仓库如下: