前言¶
在 DeepSeek Harness(下称 DSH)中,一个已确定(settled)的用户消息往往不是孤立文本,而是后续所有回合的前置条件。对于需要修正提示、重跑任务或比较不同分支结果的 DSH 使用者来说,核心问题不是“再发一条新消息”,而是:能否回到某个已确定的用户消息,修改它,并让会话从该回合重新运行?
dsh-turn-fork 就是针对这个问题提供的 DSH 插件。它围绕“回合”组织编辑、重试、重新生成和版本树导航,并强调分支日志在 dsh 进程重启后仍可读取。
这是什么¶
ruby1304/dsh-turn-fork 是面向 DeepSeek Harness 会话的插件,许可证为 MIT。它的核心定位是 turn-atomic:围绕单个已确定用户消息做编辑与重跑,而不是简单地在会话末尾追加新消息。
基础信息如下:
- 插件名:
dsh-turn-fork - 许可证:
MIT - 安装命令:
dsh plugin add dsh-turn-fork - 插件目录页:
https://www.skillhub.cn/plugins/ruby1304/dsh-turn-fork - GitHub:
https://github.com/ruby1304/dsh-turn-fork
package.json 中与本次介绍相关的关键配置如下,说明它面向 DSH web 客户端,并注入若干 DSH 客户端模块:
{
"version": "0.1.0",
"dsh": {
"client": {
"platform": "web",
"inject": [
"@deepseek-ai/dsh-client-connection",
"@deepseek-ai/dsh-client-runtime",
"@deepseek-ai/dsh-client-ui-conversation"
]
}
}
}
插件通过 dsh-client-locale 服务提供中文/英文双语界面。
核心功能¶
下面介绍插件已提供的能力。
编辑已确定用户消息¶
插件支持编辑已确定(settled)的用户消息,并从该回合重新运行对话。
操作路径是:打开 Turn Fork 标签,选择一条用户消息,修改文本,选择下游策略,然后保存。保存后,会从已完成前缀创建新分支会话,并重跑该回合。
下游策略有两种:
1、truncate:丢弃编辑回合之后的所有内容。
2、preserve:重放编辑回合及之后的每个回合,并在确认前显示将重放的回合数。
重试历史回合与重新生成最新回复¶
插件提供三类操作入口:
- 标签中的 per-turn 按钮,用于重试任意历史回合;
- 助手回复上的 per-message 按钮,用于重新生成对应回复;
- session header 的 regenerate 按钮,用于重新生成最新助手回复。
版本树 Timeline¶
插件提供版本树 Timeline,用于查看和管理不同分支。
版本树标签会:
- 列出每个分支及操作摘要;
- 标记当前版本;
- 提供 Undo / Redo 导航;
- 提供 Open 操作;
- 对运行中的分支显示警告,并提供 Stop 控件。
分支日志持久化¶
插件的分支日志在 dsh 进程重启后仍可读取。资料指出,它修复了 dsh-message-edit 的 P0 持久化缺陷。
仅使用官方插槽¶
插件只使用以下官方插槽:
- Timeline 标签;
- session-header 操作;
- 每条助手消息操作。
它不做 DOM 注入,也不通过文本猜测来定位消息。
安装与启用¶
先安装插件:
dsh plugin add dsh-turn-fork
然后重启 dsh。
安装完成后,插件会注册 Turn Fork 标签、session header 操作,以及每条助手消息上的操作。
典型用法¶
下面给出可复现的使用路径。
编辑一条用户消息¶
1、打开 Turn Fork 标签。
2、选择要修改的用户消息。
3、修改消息文本。
4、选择下游策略:truncate 或 preserve。
5、保存。
保存后,插件会从已完成前缀创建新分支会话,并重跑该回合。
重试或重新生成¶
可以按目标选择入口:
- 使用标签中的 per-turn 按钮,重试某个历史回合;
- 使用助手回复上的 per-message 按钮,重新生成该回复;
- 使用 session header 的 regenerate 按钮,重新生成最新回复。
查看版本树¶
在 Turn Fork 标签中查看版本树:
- 查看每个分支及其操作摘要;
- 查看当前版本标记;
- 使用 Undo / Redo 在分支间导航;
- 使用 Open 打开某个分支;
- 如果分支正在运行,查看警告并使用 Stop 控件。
选择级联策略¶
编辑保存前,需要选择下游策略:
truncate:丢弃编辑回合之后所有内容;preserve:重放编辑回合及之后的每个回合,并在确认前显示将重放的回合数。
适用场景与注意¶
适合谁¶
适合在 DSH 会话中需要修正历史用户消息、重跑某个回合、比较不同分支结果的开发者。尤其适合反复调整提示或任务输入,并希望保留分支谱系的场景。
权限与许可证¶
插件以当前 dsh 进程权限运行,安装前应检查源码、许可证和它暴露的接口。
许可证为 MIT;客户端 bundle preset vendored 自 DeepSeek Harness 仓库(MIT,© DeepSeek)。
不支持助手消息编辑¶
本插件明确不支持助手消息编辑。资料指出,助手编辑会伪造 source: {kind:'model'} 并丢弃 tool calls,因此该能力被排除。
分支删除与垃圾回收¶
平台当前没有 session-delete API,分支暂不能 GC。版本树只是谱系展示,不代表分支可以被平台回收。
从 dsh-message-edit 迁移¶
旧损坏事件格式日志会被持久层拒绝,无法就地修复。升级前需使用官方导出流程,或等待上游修复。
HTTP 信任围栏¶
/turn-fork 路由有信任围栏要求:
- 浏览器
Origin必须是localhost、127.0.0.1或[::1],且端口精确匹配; - 仅在服务器以
0.0.0.0显式远程暴露时放宽端口匹配; - 无
Origin时,要求 loopbackHost; POST请求必须使用application/json,且 body 不超过64 KiB。
测试口径¶
dsh-test --suite full 在 local runner 下报告 flaky,原因是每次尝试的绝对路径/时间戳不同。quick suite 是权威生命周期 gate,CI 在 Docker 中运行。
结尾¶
dsh-turn-fork 的价值,是把“修改历史用户消息并重跑”变成 DSH 会话中一个可操作、可回退、可追踪的分支流程。它围绕回合、分支和持久化日志组织功能,适合作为 DSH 会话调试和分支比较场景中的客户端插件。
相关地址:
- 插件目录页:
https://www.skillhub.cn/plugins/ruby1304/dsh-turn-fork - GitHub:
https://github.com/ruby1304/dsh-turn-fork