dsh-turn-fork:DeepSeek Harness 会话的按回合编辑、重试与版本树导航

前言

在 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、选择下游策略:truncatepreserve
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 必须是 localhost127.0.0.1[::1],且端口精确匹配;
  • 仅在服务器以 0.0.0.0 显式远程暴露时放宽端口匹配;
  • Origin 时,要求 loopback Host
  • 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
羽毛球分组比赛记分
小程序二维码

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

小夜