前言¶
在 DSH 会话中,一旦提示词发送,通常无法直接回退编辑。这导致开发者需要复制文本并重新生成,效率低下。dsh-undo 插件通过回溯和分叉机制,允许开发者返回到任意历史提示词进行重编辑。
简介¶
dsh-undo 是一个为 DSH 会话提供撤销按钮和侧边尺子的插件。它基于 Cordis 的可逆性范式工作:会话日志即上下文,撤销提示词即恢复到之前的上下文前缀(Withdrawal),而不改变原始日志。由 tofe98 维护,开源协议为 MIT。
核心功能¶
插件提供了两种交互方式:
-
会话头部的 ↶ 按钮
在会话头部显示撤销按钮。悬停后会出现下拉菜单,列出之前的提示词轨迹(按时间倒序,每条用户或引导消息一项)。选择其中一项,会在该提示词的边界前分叉会话,打开子会话并预填充提示词文本。 -
左侧边尺
在对话左侧显示一条边尺,每条用户或引导消息对应一个刻度。点击刻度可跳转到该消息,右键点击刻度则执行撤销操作(需确认)。
安装与启用¶
通过插件市场或直接运行以下命令安装:
dsh plugin --profile web add github:tofe98/dsh-undo
典型用法¶
- 在会话中发送几条提示词。
- 悬停会话头部的 ↶ 按钮,选择一条较早的提示词。
- 系统会打开一个分叉的子会话,对话状态回退到该提示词之前,编辑器中预填充了该提示词文本。
- 编辑文本并重新发送,或者直接右键点击左侧边尺上的对应刻度,执行撤销(需确认)。
技术说明¶
- 分叉语义:原始会话保持不变,撤销操作本质上是创建了一个子会话(Fork)。根据 Cordis 的范式,这被称为“Withdrawal”(恢复),不破坏原始日志。
- 重建机制:子对话通过 DSH 的投影机器重建。
- 副作用保留:被撤销回合的外部副作用(如文件编辑、Web 调用)不会被撤销。这些副作用位于系统边界之外,插件仅负责恢复对话状态。
- 实现细节:撤销调用
sessions.fork({ sessionId, atSeq: boundary })并使用inputActions.setDraft预填充文本。
结尾¶
dsh-undo 通过分叉机制解决了 DSH 会话中无法回退编辑的痛点,适合需要在长对话中调整早期输入的开发者。
- 插件目录:https://www.skillhub.cn/plugins/tofe98/dsh-undo
- 源码仓库:https://github.com/tofe98/dsh-undo