前言¶
在 DeepSeek Harness(DSH)的工作流中,分叉(Fork)会话是一个常用操作。当源会话处于运行状态或存在排队消息时,如果直接进行分叉,子会话会继承源会话的待领提示词。这导致子会话优先执行源会话遗留的命令,而你刚刚发送的新提示词被推迟到下一轮。这不仅造成指令重复执行,还打乱了预期的对话流程。
dsh-fork-inbox-guard 是一个 Host 插件,它通过清理分叉后继承的待领消息队列,确保子会话的第一次交互直接响应当前发送的提示词。
核心功能¶
- 丢弃继承消息:在创建子会话时,移除从源会话继承来的待领提示词。
- 优先响应新提示:保证子会话的第一个回合回答的是你当前发送的消息。
- 日志记录:将被丢弃的消息标记为
outcome: canceled,保留agent/inbox/spliced事件记录。 - 入口覆盖:拦截侧边栏的 Fork 会话入口以及消息菜单的 Branch 入口,防止误操作导致继承旧队列。
安装与启用¶
在插件目录下执行以下命令进行安装:
dsh plugin --profile web add "link:$(pwd)"
安装完成后重启 dsh web 服务。卸载时使用:
dsh plugin --profile web remove dsh-fork-inbox-guard
本插件仅修改 Host 半区逻辑,不注册 Client 模块,因此不需要重新构建前端。
典型用法¶
插件生效后,可以通过子会话的日志确认行为。在分叉出的会话日志中查找 agent/inbox/spliced 事件,其 outcome 字段应为 canceled,且 removedCount 为 1。这条记录对应的是被丢弃的继承消息,随后的 user/message 事件则是你新发送的提示词。
插件本身会输出一条日志信息,表明丢弃了某个带种子会话的待领 Inbox:
fork-inbox-guard: dropped the pending inbox of seeded session "session-xxxx"
默认的 web profile 未安装控制台日志插件,该信息不会显示在终端。若需在终端查看,需要挂载 @deepseek-ai/cordis-plugin-logger-console。
适用场景与注意¶
- 生效范围:仅对新建的子会话生效,不会反向修复已经建立的历史会话。
- Fork 算法:不修改 Harness 内部的 fork 切点算法,因此子会话日志中仍会先出现源会话的 insert 事件,紧接着才是 canceled 的 splice 事件。
- API 依赖:依赖 Harness 的公开 API(在 1.0 之前版本不保证稳定),升级 DSH 后建议重跑
just test。 - 冲突处理:上游如果在 fork 时直接清空了子会话的 inbox,本插件检测到空队列时会跳过操作,不会产生冲突。
- Resume 与无 Seed:
resume操作不受影响;对于没有新 seed 的新会话,插件也不会进行干预。
短结尾¶
该插件通过清理继承队列,解决了 Fork 操作中指令错位和重复执行的问题,适合需要精细化控制会话继承行为的场景。