DTSFO/dsh-conversation-rewind ↗★ 0
dsh-conversation-rewind
Append-only conversation rewind and safe message editing for DeepSeek Harness
安装
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:DTSFO/dsh-conversation-rewind说明文档
阅读完整 README ↗dsh-conversation-rewind
为 DeepSeek Harness Web UI 增加 append-only(只追加)的会话回退与安全历史消息编辑。
功能
- 在会话中增加“回退”视图,并在 Session Header 增加“编辑历史消息”入口。
- 编辑时在所选消息入队之前创建一个普通子 Session;原 Session 日志不会被改写或删除。
- 在可用时继承闭合的历史前缀、来源 Session 关系、兼容的 agent preset 与最近模型路由。
- 继承历史不包含目标消息及其旧助手回复;修改后的文本会作为新一轮用户消息发送。
- 提供
truncate与preserve两种后续轮次处理方式。 - 通过 DSH 受保护的 Host Remote 接口通信,并用显式结果返回业务失败。
分支语义
本插件的“回退”刻意采用 append-only 设计:它不会修改来源 Session 中的任何事件,也不会制造“旧回复由新文本生成”的错误历史。
- 插件先验证目标是已经完成且可以安全重放的用户轮次。
- 创建普通子 Session,并用
parentSession记录来源。 - 子 Session 只继承目标消息入队前已经闭合的事件前缀。在 DSH
0.1.0-rc.6中编辑第一轮时,插件会显式传入空 seed(seed: []),生成持久化的session/end-seed标记,并令seedLength: 0。 - 修改后的文本作为新的用户轮次提交,之后的助手输出都会重新生成。
两种 cascade 模式决定编辑点之后如何处理:
truncate(从这里重新开始)——只发送修改后的消息,然后从新分支继续。preserve(重放后续消息)——先发送修改后的消息,再按顺序重发后续每条普通纯文本用户消息。旧助手回复不会复制;只要任一后续轮次无法忠实重放,插件会在创建分支前拒绝整个操作。
安全边界
只有“已完成轮次中唯一一条、由用户直接发送的普通纯文本消息”可编辑。包含附件、非文本内容、多条用户消息、尚未结束/仍在运行的轮次,或消息入队边界存在歧义和风险时,目标会被隐藏或请求会被拒绝。
创建子 Session 前会再次检查来源,避免并发变化造成错误分支。子 Session 一旦发布,若之后发生工作区关联、follow-up 或持久化 flush 失败,插件不会删除它;错误结果会带上保留的子 Session ID,便于继续打开和检查。
插件可以把工作区关联带给子 Session,但不会快照或恢复工作区文件。它只对会话历史创建分支,不会撤销文件修改、工具副作用、已执行命令、网络操作或任何其他外部状态。
环境要求
- DeepSeek Harness
>=0.1.0-rc.6 - Node.js
^22.19或>=24 - DSH Web profile
安装
dsh plugin --profile web add \
https://github.com/DTSFO/dsh-conversation-rewind/archive/refs/tags/v0.1.0.tar.gz
dsh web
卸载:
dsh plugin --profile web remove dsh-conversation-rewind
使用
- 在 DSH Web 中打开一个已经完成的 Session。
- 进入“回退”视图,或点击 Session Header 中的“编辑历史消息”。
- 选择一轮可编辑的用户消息并修改文本。
- 选择“从这里重新开始”(
truncate)或“重放后续消息”(preserve)。 - 创建分支。界面会打开新的子 Session,来源 Session 保持不变。