前言¶
在 DeepSeek Harness 中使用 Fork 功能,会切断当前会话并创建一个新的空白会话。如果需要在对话的中间某个节点继续,新的会话无法获知该节点之后发生了什么。dsh-message-handoff 解决了这个问题。它为每条已确认的助手消息添加了一个手柄,允许用户在该点进行“移交”操作:复制该点之前的对话历史,同时让 LLM 总结该点之后发生的内容,从而 fork 出一个带有上下文的新会话。
插件介绍¶
dsh-message-handoff 是一个为 DeepSeek Harness 设计的插件,用于实现消息级的会话移交。
- 核心功能:在助手消息旁提供手柄,点击后 fork 新会话。
- 维护者:antonkoatl。
- 开源协议:MIT。
- 技术特点:零运行时依赖,源码由人工维护,无需构建步骤。
安装与启用¶
安装过程无需构建环境,lib/client.js 已预编译。
dsh plugin --profile web add /path/to/dsh-message-handoff
dsh web
安装后,可通过以下命令确认插件已加载:
dsh --profile web --dump-config | grep message-handoff
核心功能¶
该插件提供以下能力:
- 消息级移交:在每条已确认的助手消息旁,渲染
copy · ✋ handoff · fork控制组。 - 历史复制与总结:点击手柄后,将选定消息之前的 verbatim(逐字)历史复制到新会话;同时调用 LLM 仅总结选定消息之后的对话内容。
- 结构化文档注入:在 fork 出的新会话中,注入包含“任务目标”、“当前进度”、“关键决策”、“文件列表”、“下一步计划”和“未解决问题”的结构化文档。
- 自动会话管理:将子会话附加到源会话的工作区,自动重命名标题并打开新会话。
配置¶
插件支持在 cordis.yml 中配置 config: 参数,以控制总结请求的输入输出限制:
- id: message-handoff
name: dsh-message-handoff
config:
maxInputBytes: 24000 # 总结输入的字节上限(UTF-8),超时则丢弃最旧条目
maxTokens: 10000 # 总结输出的 Token 预算
timeoutMs: 120000 # 总结请求的超时时间(毫秒)
总结所使用的模型,默认取自源会话的最新请求路由,若不可用则回退到部署的默认模型。
使用流程¶
- 在 Web 界面中,找到一条已确认的助手消息。
- 点击该消息行右侧的 Handoff 图标(位于 Copy 和 Fork 按钮之间)。
- 系统会自动执行:
- 复制直至该消息的 verbatim 历史到新会话。
- 发送请求给 LLM 总结该消息之后的内容。
- 将结构化总结文档注入新会话。
- 新会话会自动打开,源会话保持不变。
注意事项与限制¶
- 隐私:为了生成总结,选定消息之后的所有对话文本会被发送到配置的模型中。
- 触发限制:该手柄仅渲染在已确认的助手消息上,用户消息不支持此操作。
- 无持久化文件:目前不会在文件系统中生成
HANDOFF.md,总结仅存在于会话日志中。 - 文本限制:总结仅处理文本内容,不包含工具调用和附件。
- 预设继承:fork 出的子会话继承的是源会话创建时的预设配置,而非创建时的最新预设。
总结¶
dsh-message-handoff 是一个实用的工具,旨在解决 DSH 中 fork 会话上下文丢失的问题。它通过自动化的历史复制和 LLM 总结,让开发者能够从任意节点继续对话,而无需手动复制粘贴。对于需要长期维护多轮对话或需要频繁从中间切入的开发场景,该插件提供了明确的路径。