dsh-continuechat:从断点手动续跑被中断的 DSH 对话

前言

在 DeepSeek Harness(DSH)里跑智能体时,一轮对话未必总能正常收尾:你可能误点停止,网络或模型请求失败,或者回复被输出 token 上限截断。Harness 往往只留下「已停止」一类标记,接下来要么自己再打一遍「continue」,要么重新交代上下文,容易重复劳动,也偏离「从断点接着干」的意图。

社区插件 dsh-continuechat(维护者 CaiBai-Fish,GitHub:CaiBai-Fish/dsh-continuechat)补的是这一步:提供 /continue 命令,并在被中断的那条助手回复下方的操作行里增加 Continue 按钮,让会话从停下的位置续跑,而不是从头重来。在 SkillHub 社区目录中,它归类为「工作流」。

这是什么

dsh-continuechat 的定位是:在 DSH 会话中手动恢复被提前结束的一轮对话。当前 package 版本为 0.1.1,许可证 MIT,运行环境要求 Node.js >= 22。插件不提供自动续跑;需要无人值守的连续执行时,README 指向使用 goal 工具等其他能力。

核心功能

命令 /continue

在聊天里执行:

/continue
/continue also fix the remaining three files

命令名后面的文字会作为续跑提示里的「Additional instruction from the user」附加说明。Harness 会在命令平面渲染结果(例如「已请求继续对话(中断原因:手动停止)。」),该结果不会作为模型消息进入对话。

输入 / 后也可从命令菜单选择 continue(描述为 “Continue the interrupted conversation from where it stopped”),用方向键和 Enter 即可,不必先敲完整命令。

操作行 Continue 按钮

被截断的那一轮,在最后一条助手消息下方的操作行(与复制、赞/踩、分支同一行)会出现 Continue:

  • 仅在中断真实发生时出现;正常完成、被 blocked 拒绝、或仅为 fork 收尾的轮次不显示。
  • 只有结束该轮的那条助手消息带按钮;Agent 重新运行后按钮会消失。
  • 点击等价于执行一次 /continue;失败时操作旁会显示短错误,悬停可看全文。

是否显示按钮,取决于会话持久事件窗口里最新的 turn/end 是否属于可续跑原因,且该轮是否已有持久化的助手消息。若在产出任何助手输出之前就中断(请求直接失败、进程在流式开始前退出),界面上没有可挂载按钮的消息,此时应使用 /continue 命令。

续跑时发给模型的内容

插件不会只发一句裸的 “continue”,而是排队一条结构化的用户消息,包在 <continue-conversation> 中,说明上一轮为何结束、要求在同一 session 从断点继续、勿重复已有输出,并附上 Harness 记录的中断失败信息;你在命令后输入的附加说明也会写入。触发消息的 source.kind 为 continue-chat,在 Chat 里作为注入上下文节点处理,普通文本不会出现在可见气泡里。

续跑完成后,新回答会作为新的助手消息出现(DSH 事件溯源日志不允许把续写合并进原 assistant 消息);插件会通过 system/message 替换等方式收起触发用的续跑提示,界面上被中断的回复后面直接跟新内容。

哪些中断可以续跑

插件订阅 session/event,根据 turn/end 的 reason.kind 判断是否可续跑:

reason.kind 含义 可续跑
aborted 运行被取消(含用户手动停止等) 是
error 模型请求失败 是
max-tokens 输出 token 上限截断 是
interrupted 宿主进程中断后的崩溃恢复 是
completed 正常结束 否
blocked 进入前被 agent/pre-step 拒绝 否
forked fork 种子关闭继承前缀 否

之后若出现新的 user/message,会清空中断记录(用户接管或已续跑)。

安装与启用

README 给出的安装方式(需指向插件目录的绝对路径):

dsh plugin --profile desktop add <absolute path to this directory>

package.json 中 dsh.bundle.patch 指向 cordis.patch.yml,用于把 continue-chat 写入 profile;dsh.client.platform = "web" 时由宿主提供 lib/client.js 作为浏览器端 bundle。

卸载:

dsh plugin --profile desktop remove dsh-continuechat

也可在 SkillHub 目录页查看该插件的收录信息与安装说明:https://www.skillhub.cn/plugins/CaiBai-Fish/dsh-continuechat。SkillHub 是社区插件目录,与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,具体装哪些插件由你自行选择。

安装前建议阅读仓库源码与 MIT 许可证。插件在当前 DSH 进程权限下运行,与宿主共享会话与工具能力,只安装你信任的来源。

典型用法

  1. 让 Agent 跑一轮任务,因手动停止、请求失败或 token 截断而中断。
  2. 若该轮已有助手输出:在最后一条助手消息操作行点击 Continue;或在任意时刻执行 /continue,必要时在命令后加补充指令(例如 /continue also fix the remaining three files)。
  3. 若中断时尚未产生助手消息:只能使用 /continue,不要期待操作行按钮。
  4. Agent 仍在运行时不要续跑;应先停止当前轮,再执行 /continue(对运行中的 Agent 执行会报错)。

对比 README 中的场景:误点停止时不必自己重打 continue;网络失败时插件会把 Harness 记录的失败信息交给模型;token 截断时有一键或一条命令的入口,而不只是提示你「发送 continue」却没有统一入口。

适用场景与注意

适合谁: 经常在 DSH Web 桌面 profile 里长对话、改代码、调工具,且会遇到人为停止、Provider 错误或输出被截断的开发者。

刻意不做的事(README 原文要点):

  • 不会自动续跑;所有触发都来自命令、按钮或你自己输入。
  • 不会在正常结束的对话下显示 Continue。
  • 不会把新回答合并进旧助手消息。
  • 不会在 Agent 运行中插入续跑。
  • 不会重写历史;续跑只是追加一条新的用户消息。
  • DSH 重启后首次 /continue 可能提示「未记录中断原因」(插件只观察当前进程内追加的事件),续跑仍可进行,但缺少具体中断原因细节。

宿主侧仅依赖 node:crypto,无 runtime peerDependencies;客户端 bundle 仅要求平台 seed 中的 react。

结尾

dsh-continuechat 把「中断后的下一步」收成 /continue 与操作行 Continue,并用结构化提示和 Harness 失败记录帮助模型从断点接着做,而不是重开任务。需要查阅分类与收录信息时打开 SkillHub 目录页;需要用法细节、架构说明与开发测试命令时见 GitHub 仓库:

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

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

小夜