dsh-midtalk: 任务内插话 + 可选打断 + 结构化恢复卡

前言

在 DeepSeek Harness (DSH) 的任务执行过程中,如果中途需要插入一句插话,或者需要立刻停止当前步骤,通常只有两个极端做法:要么等待当前轮次跑完(慢),要么按界面停止按钮(直接砍掉当前步骤,留下半截状态)。dsh-midtalk 插件通过两条斜杠命令,将“插话”和“打断”的逻辑拆分,让你按一次回车决定下一步动作,并且在打断时保留现场。

它是什么

dsh-midtalk 是一个由 blueberrymaid 维护的工作流插件。它给 DSH 增加了 midtalk 功能,支持任务内插话与可选打断,并自动生成结构化恢复卡。所有代码均为 Host 侧(Cordis),零客户端代码、零构建、无第三方运行时依赖,不经 npm 分发。

核心能力

  • 任务内插话:无损递话,插入到下一个步骤边界。
  • 可选打断:中止当前步并留下恢复卡。
  • 结构化恢复卡:记录打断时的完整状态,用于后续恢复。
  • 硬规则约束:收到插话必须先输出正文回复,再决定是否调用工具。

安装与启用

方式 A:命令行安装(推荐)

使用 dsh plugin 命令安装。安装后需要重启 dsh web 才能生效。

dsh plugin --profile web add "github:blueberrymaid/dsh-midtalk"

方式 B:手动安装(不依赖网络或 pnpm)

  1. 放置文件:
    将插件的目录(至少包含 index.js 和 lib/core.js)放入 Profile 的模块目录:
    # 假设 Profile 名为 web
    $DSH_HOME/profiles/web/node_modules/dsh-midtalk/
  1. 挂载名册:
    在 $DSH_HOME/profiles/web/cordis.patch.yml 中添加一行 insert:
    - insert:
      - id: midtalk
        name: dsh-midtalk
> **注意**:此文件在启动时一次性读取,修改前请备份。
  1. 重启:
    重启 dsh web 并验证。

验证安装

检查 $DSH_HOME/midtalk/boot.json。文件内容应包含 stage: "registered" 且 commands 列表中包含 "say" 和 "cut"。

使用方法

插件提供两条斜杠命令:

1. /say <你要说的话>

  • 语义:无损插话。
  • 行为:插到下一个步骤边界。不中断当前步骤。
  • 适用场景:默认使用。

2. /cut [你要说的话]

  • 语义:有损打断。
  • 行为:中止当前正在运行的步骤,生成恢复卡。
  • 适用场景:卡在很长的步骤中,必须立刻停止。

两条命令都会返回当前步骤的预估剩余时长,仅作参考。

恢复卡

/cut 触发后会生成结构化恢复卡,保存在 $DSH_HOME/midtalk/last-interrupt-<会话 id>.json。每个会话一张,原子写入。

恢复卡包含以下关键信息:
- at / reason:触发时间与原因。
- agentStatus / sessionId:打断时的状态与会话。
- interruptedAt:被打断的具体位置。
- pendingToolCalls:正在派发/刚派发的工具调用意图。
- lastReasoning / lastText:打断前的推理与正文片段。
- frames:最近 12 个流帧。

恢复流程:
1. 读取恢复卡,列出当前状态。
2. 核实 pendingToolCalls 中的工具调用是否已落地(文件、命令等)。
3. 用户确认后,重做被打断的那一步。

注意事项与边界

  • 兼容性:仅在与实测 DSH 版本(0.1.5-rc.3)兼容的环境下验证过。
  • 队列限制:待送话队列上限为 8,超出会静默丢弃最早的请求(记录在 $DSH_HOME/midtalk/wake.log)。
  • 零依赖:纯 Host 侧实现,不注册模型能力,不上报数据。
  • 安装方式:通过 cordis.patch.yml 挂载,非 npm 包。

总结

dsh-midtalk 通过简单的命令将 DSH 的工作流控制权交还给了用户,提供了“无损插话”和“可控打断”两种模式。对于需要精细控制任务执行流、或在长任务中需要随时介入的开发者来说,这是一项实用的工具。

羽毛球分组比赛记分
小程序二维码

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

小夜