dsh-undo:为 DeepSeek Harness 提供按用户轮次的持久化撤销/重做

前言

在 DSH(DeepSeek Harness)的插件生态中,开发者可以通过插件扩展 Host 行为、命令和 WebUI 行为。社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系,不应把它写成官方应用商店。

对使用 dsh 做多步工具任务的开发者来说,一个具体问题是:模型会按真实用户消息推进会话,工具也可能在某一轮修改工作区文件。如果某轮之后需要回退,只删除可见文本通常不够,还需要把可见 surface 和工作区文件恢复到对应边界。dsh-undo 针对这个边界提供撤销/重做能力。

这是什么

dsh-undo 是 DeepSeek Harness(dsh)的持久化多步上下文撤销/重做插件。它按真实用户消息回退可见 surface,并恢复所选用户轮次中工具修改的工作区文件。

仓库线索指向 LingLambda,许可证为 MITpackage.json 显示版本为 0.3.0-preview.1。已核实资料中对维护者的标注不明确:GitHub 路径与 homepage 线索为 LingLambda,但未明确标注 maintainer。

重要限制:该发布是 forward-looking preview,当前不可用于任何已发布的 DeepSeek Harness 版本。它依赖未发布 Harness 支持 durable surface/rewind / surface/restore events 和 conversation.chat.user-actions WebUI slot。在当前状态安装后,/undo 会 fail closed 并显示升级提示。

核心功能

本地撤销与重做命令

插件提供本地命令,且这些命令不发送给模型:

  • /undo:回退最新可见真实用户消息及其后所有 surface 消息。
  • /undo <user-seq>:从指定可见用户消息回退,并包含后续轮次。
  • /redo:恢复最新活动回退。重复 undo/redo 使用 LIFO 顺序。

会话重放与持久化

插件通过追加 durable surface/rewindsurface/restore 控制事件实现 undo/redo,而不是替换原始消息。它会保留原始消息节点、消息 ID、tool-call 关联和日志事件。

会话重放可重建相同的可见 surface 与 redo 堆栈。

新的普通 surface 输出会使活动 redo 历史失效。

工作区文件恢复

插件在隔离的隐藏 Git 目录中记录工具执行前后的工作区树:

~/.dsh/dsh-undo/snapshots/

它不创建提交、不切换分支、不修改仓库自身 Git index。

文件恢复的范围是:

  • 仅针对所选用户轮次中工具触碰的文件;
  • 支持 tracked 文件和不超过 2 MiB 的 untracked 文件;
  • 限制在检测到的 Git workspace 根内,从不恢复根外文件。

patch 与 redo 元数据按 session 存储,使文件 redo 可在 Host 重启后继续。两阶段日志用于协调重启后中断的文件操作。

WebUI 动作

WebUI 客户端为已确认的真实用户消息气泡提供 undo action。点击后调用 /undo <user-seq>;Host 会验证目标仍为合法回退目标。

后台任务处理

插件将顶层工具返回的 background jobs 关联到其 user turn。undo 请求终止被移除轮次启动的 jobs。

注意以下边界:

  • 通过嵌套工具分派或子代理启动的 background jobs 可能不关联到根 user turn。
  • undo 只向顶层 background jobs 发送终止信号,不无限等待进程退出。

安装与启用

先确认你对当前版本状态有预期:它依赖尚未发布的 Harness 能力,今日安装会使 /undo fail closed 并显示升级提示。如果你只是为了预览和协调未来集成,可以按下面已核实资料给出的 npm 示例安装:

dsh plugin --profile demo add dsh-undo

这里只采用已核实资料中的 npm 示例;资料中也存在 git 安装原文,但未指定唯一官方安装命令。插件会以当前 dsh 进程权限运行,因此安装前应检查源码与许可证。

典型用法

基本命令如下:

/undo
/undo 42
/redo

用法:

1、/undo 回退最新真实用户轮次。

2、/undo 42 从指定 user-seq 回退,包括所有后续轮次。

3、/redo 恢复最新活动回退。

4、在 WebUI 中,也可以在旧用户消息气泡上点击 undo action,调用 /undo <user-seq>

适用场景与注意

适合在以下情况考虑:

  • 你使用 dsh 运行多轮工具任务,希望按真实用户消息边界回退会话表面。
  • 你希望撤销时同时恢复工具在该轮次中修改的工作区文件。
  • 你在 WebUI 中对已确认的真实用户消息气泡做回退。

需要注意:

1、当前发布不可用于任何已发布的 DeepSeek Harness 版本;旧版 Harness 会 fail closed,提示需要兼容的 Harness 升级,而不是写入替换 assistant 消息或复制 transcript events。

2、网络请求、数据库写入、远程 API 调用、已退出进程及其他外部效应无法撤销。

3、文件恢复只覆盖检测到的 Git workspace 根内文件,且 untracked 文件限制为不超过 2 MiB

4、background jobs 关联和终止只针对顶层工具返回的任务,且不会无限等待进程退出。

5、新的普通 surface 输出会使活动 redo 历史失效。

6、插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。

结尾

dsh-undo 的价值在于把“撤销”落到真实用户轮次上:既回退 DSH 的可见 surface,也尝试恢复工具在该轮次中修改的工作区文件。当前资料表明它仍是 preview,需要等待匹配的 Harness 发布;安装前应先确认版本兼容性和权限边界。

目录页(来自插件线索,未从已抓取资料确认):https://www.skillhub.cn/plugins/LingLambda/dsh-undo
GitHub:https://github.com/LingLambda/dsh-undo

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

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

小夜