前言¶
在 DSH 里做多轮智能体任务时,常见诉求不是单纯撤销一条回复,而是把某条用户消息引入后的工作区改动退回去,再从这条消息继续。文件改动和对话历史需要一起处理:文件要恢复,对话要能继续。
dsh-rewind 是面向 DSH 的会话回退插件。它恢复被选中轮改变的文件,并通过 DSH 的 sessions.fork / sessions.create 在新会话中继续。下面介绍它的能力、安装方式和需要注意的边界。
这是什么¶
- 仓库:
2501136589/dsh-rewind - 许可:
MIT - 定位:DSH 会话回退插件
- 目标场景:非 git 工作区中,按轮次恢复文件,并在 fork 出的新会话里继续对话
核心能力¶
- 通过
sessions.fork/sessions.create新建会话,把对话续到选中轮之后。 - 在非 git 场景使用
sha256内容寻址快照恢复文件,支持新增、删除、修改、权限、文本与二进制。 - 在用户消息下方提供回退按钮,点击后预览将被恢复的文件改动。
- 提供
/rewind命令,支持rewind、list-files、dry-run子命令。 /rewind list或/rewind可列出本会话所有可回退的用户消息。- fork 会话可以沿
header.parentSession血缘链继续回退父会话消息。 - 回退范围限制为该会话碰过的文件,提供跨会话隔离。
- 默认归档原会话;可用
archiveOriginalSession: false关闭。
安装与启用¶
安装要求 dsh 与 pnpm 在 PATH 上。
进入插件仓库目录后,执行:
dsh plugin --profile web add .
README 中还提到 npm 发布后的安装方式;由于是否已发布可用未明确,若包可安装,可尝试:
dsh plugin --profile web add @xiaoxin/dsh-rewind
注意:bundle 行需要用 - insert: 包裹在 cordis.patch.yml 中,否则 loader 可能静默忽略,导致按钮不出现。
安装后,需要完全停掉再启动 dsh web,然后在浏览器里执行 Ctrl+F5 强刷。
浏览器回退流程¶
1、打开会话,找到用户消息下方的回退按钮。
2、点击按钮,预览将被恢复的文件改动。
3、确认后,插件先恢复文件,再通过 sessions.fork / sessions.create 新建会话。
4、新会话输入框中填入该条用户消息原文,可以修改后重新发送。
5、默认归档原会话;归档后原会话从侧栏和搜索消失,但数据仍在磁盘。若不想归档,可以设置:
archiveOriginalSession: false
命令回退流程¶
列出本会话可回退的用户消息:
/rewind list
也可以直接执行:
/rewind
执行回退:
/rewind <messageSeq|messageId> rewind
只预览文件改动:
/rewind <messageSeq|messageId> list-files
或者:
/rewind <messageSeq|messageId> dry-run
注意:seq 是会话日志的原始事件流水号,可用 /rewind list 获取可用值。
回退边界¶
- 只能回退到开启采集之后的 turn;启用插件之前的轮次没有快照,无法回退。
- 快照边界为 turn;首轮没有上一轮
turn/end,会走sessions.create。 - 工作区遍历跳过
.git、node_modules和台账目录;超大或超总量会明确失败。 - 跨会话隔离是启发式的;最后一个 turn 的 shell 改动可能不被归因,会话事件缺失时退回全量差异。
- 两个会话改过同一个文件时,后回退的一方可覆盖另一方的该文件改动。
适用场景与注意¶
适合:
- 使用 DSH web 做多轮开发,希望从某条用户消息重新出发。
- 工作区不是 git 仓库,或不想依赖 git 状态做文件回退。
- 需要在脚本或无 UI 环境中用
/rewind命令完成预览和回退。
注意:
- 插件会以当前
dsh进程权限运行;安装前建议检查源码与MIT许可证。 DSH没有删除单个会话的 RPC;默认归档后,原会话从侧栏和搜索消失,但数据仍在磁盘。- 跨会话隔离依赖会话事件和快照漂移;共享工作区、shell 副作用和并发修改都可能影响回退范围。
- 社区目录页是独立站点,不是官方应用商店;选择插件时应自行核对仓库与许可。
相关链接¶
- GitHub:https://github.com/2501136589/dsh-rewind
- 社区目录页:https://www.skillhub.cn/plugins/2501136589/dsh-rewind