前言¶
DeepSeek Harness(DSH)对“撤销几步对话”的官方流程要么创建新分叉,要么手动编辑状态。dsh-session-rewind 提供一条 /rewind 命令,将当前对话的尾部折叠到之前的某个回合,保持 sessionId 不变、事件日志只追加一次 checkpoint,模型在下一请求中确实不再访问被折叠的节点。它不是分叉,不重写磁盘上的 .jsonl,也不在侧边栏产生新会话。
插件定位¶
插件名:dsh-session-rewind
维护者:ixietv
分类:客户端
核心价值:在当前会话内原地折叠尾部,不创建新会话或新标签页。
核心功能¶
- 原地折叠:使用
session.append('user/message', checkpoint, { surfaceOp: 'replace' }),sessionId保持不变。 - 仅追加日志:早期事件保留序列号,仅追加一个 checkpoint 事件。
- 模型可见:折叠节点从
deriveMessages()中消失,下一请求真正不包含它们。 - 双入口:
/rewind [<turn>]命令,以及在conversation.chat.assistant-actions行中的图标按钮。 - 默认安全:智能体运行时拒绝回退,单会话单次回退,持久失败报告
PERSIST_FAILED。 - 零额外运行时依赖:Host 半边不导入任何东西;Client 半边仅依赖
react。
安装与启用¶
git clone https://github.com/ixietv/dsh-session-rewind.git "$HOME/.dsh/plugins/dsh-session-rewind"
安装完成后重启 DeepSeek Harness。Loader 会读取 cordis.patch.yml 并插入 Host 行;Web shell 通过 dsh.client.platform: "web" 加载 lib/client.js。
典型用法¶
| 入口 | 语法 | 行为 |
|---|---|---|
| 命令 | /rewind |
回退到最近一条消息之后 |
| 命令 | /rewind 3 |
回退到第 3 条消息之前 |
| UI | Turn action-row 图标 | 悬停一条消息,点击将其作为回退终点 |
工作流程¶
User: /rewind <turn>
│
▼
Host (lib/host.js) ── 验证回合、智能体空闲、无进行中的回退
│
▼
定位目标回合 / 起始序列 ── 收集直到尾部的所有 surface 节点
│
▼
session.append('user/message', checkpoint, { surfaceOp: 'replace', sourceEventSeqs })
│
▼
ctx.sessions.flush(session) ── 持久化;失败则返回 PERSIST_FAILED
│
▼
Client (lib/client.js) ── 隐藏折叠的 DOM 行,通过 sessionStorage 标记
适用场景与注意¶
适合需要在当前会话内快速“重置”尾部、避免丢失上下文的场景:例如某一步走偏、需要重新定向,或需要修剪冗长的探索路径。
务必注意:插件以当前 DSH 进程权限运行,安装前应检查源码与许可证(MIT)。
结尾¶
dsh-session-rewind 通过原地折叠与单次追加,在保持会话一致性的前提下提供了轻量级的对话回退能力。更多细节与源码,见插件目录页与 GitHub 仓库。