dsh-plugin-undo:DeepSeek Harness 会话原地撤销插件

前言

在使用 DeepSeek Harness(DSH)进行对话调试或智能体开发时,回退对话步骤是常见需求。大多数现有的回退插件通过 sessions.fork 将历史前缀复制到新会话中,这会导致侧边栏出现冗余会话,且原会话与 fork 会话的上下文管理变得复杂。

dsh-plugin-undo 提供了另一种方案:它直接在当前会话表面进行撤销操作。这种方式不需要分叉会话,也不会修改项目文件,保持了会话 ID 的唯一性。

插件简介

名称:dsh-plugin-undo
作者:wang-xudong
类型:客户端插件
协议:MIT

该插件的核心价值在于“原地撤销”。它通过修改会话表面(surface),将最后 \(n\) 轮对话从模型可见的历史中移除,同时在 Web UI 中将这部分内容折叠为紧凑的页眉。原始会话日志保持追加写入(append-only)状态,未被重写。

核心功能

  1. 撤销最后 \(n\) 轮:支持撤销最近 1 轮、多轮或全部可见轮次。
  2. 无分叉会话:操作在当前会话进行,Session ID 保持不变,侧边栏不会出现重复会话。
  3. 日志追加写入:底层的原始会话日志仅追加新内容,不进行重写。
  4. UI 折叠展示:Web 界面将已撤销的轮次折叠为 ↩ 第 N 轮已撤销 · 点击展开 的紧凑头部,点击即可展开或折叠。
  5. 模型上下文隔离:仅重置模型可见的对话历史,项目文件不受影响。

安装与启用

插件通过本地文件路径安装。请将下载好的插件文件放置在目标路径。

dsh plugin --profile <profile> add file:/path/to/dsh-plugin-undo

安装完成后,重启 profile 即可生效:

dsh --profile <profile>

典型用法

在会话处于空闲状态时,在输入框输入以下命令:

  • /undo:撤销最后 1 轮对话。
  • /undo 1:同上。
  • /undo 3:撤销最后 3 轮对话。
  • /undo all:撤销当前模型可见的所有对话轮次。

注意:命令执行时,会话必须处于空闲状态。如果 UI 显示当前有正在运行的轮次,需先停止该轮次再执行撤销。

实现细节

插件通过以下机制工作:

  1. 表面操作:主机根据 turn/start 和 turn/end 推导当前模型可见的轮次,对尾部轮次应用 surfaceOp: { op: 'replace', start, end }。
  2. 检查点机制:在轮次边界外创建一个空的助手消息作为检查点。由于消息推导会跳过空内容,模型将只看到保留的历史。
  3. UI 折叠:客户端读取 /undo 命令节点,利用 DOM 和 CSS 将已撤销的轮次折叠,隐藏命令卡片本身,仅保留折叠后的页眉供用户交互。

适用场景与注意

该插件适合需要在单一会话流中快速修正对话走向的场景。使用时需注意:

  • 仅支持撤销连续的尾部轮次,不支持任意中间轮次的撤销。
  • 仅影响模型可见的对话历史,不会修改或删除项目文件。
  • 必须在会话空闲时执行命令。

生态背景

DeepSeek Harness 采用插件化架构,允许开发者通过社区目录或本地文件扩展功能。该插件收录于社区目录,与 DeepSeek 或幻方无官方从属关系。

参考资料

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

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

小夜