dsh-branch-inbox-guard:解决 DSH 分支继承父级队列的队列污染问题

前言

在使用 DeepSeek Harness (DSH) 0.1.5 版本进行会话分支操作时,fork 出来的子会话会继承父会话的日志前缀。如果父会话有未处理的队列(即 agent/inbox/spliced 事件),这些事件会被重放进子会话的待办队列中。此时你在新分支输入的问题会被追加到继承队列之后,导致子会话的第一回合优先运行父会话的旧问题,你刚输入的问题看起来“消失”了。这个插件通过宿主机端 bundle 实现,无需修改核心代码。

插件信息

  • 名称: dsh-branch-inbox-guard
  • 功能: 移除 fork 子会话从父会话继承的已排队提示词,使新分支优先执行你输入的内容。
  • 维护者: xine2009cn
  • 许可证: MIT

核心功能

插件在每次 agent/created 事件触发时检查待办队列,移除那些插入在会话继承前缀(seq < session.inheritedEventCount)中的事件。具体行为如下:

  • 移除继承项:对于在分叉点之前插入的队列项,将其作为 agent/inbox/spliced 取消事件持久化删除。
  • 保留自有项:对于会话自身生成的事件,保持不变。
  • 支持子代理:支持 fork-context 下的子代理场景,防止其队列被父级污染。
  • 幂等与保守:不会修改会话历史,不写外部文件,且只在确认来源为父级时才操作。

安装与启用

通过 npm 仓库安装,无需构建步骤。

dsh plugin --profile web add dsh-branch-inbox-guard

安装后,重启 DSH 进程(如 docker restart <container>)并重新加载 Web GUI。插件需要在 profile 的 dsh.profile.bundles 配置中列出,以便在启动时加载。

典型用法

  1. 在一个会话中排队一条消息,此时 Agent 正在运行。
  2. 在已完成的回合处分叉出一个新分支。
  3. 检查新分支的队列,应已清空继承的旧消息。
  4. 在新分支输入一个问题,应立即开始运行,而不是等待父级的旧消息。

日志验证:
当插件移除队列项时,DSH 日志中会出现如下记录:

[branch-inbox-guard] session-xxxxxxxx: dropped 5 inherited prompt(s) from its fork parent

兼容性与注意事项

  • 版本兼容:已验证 DSH 0.1.5-rc.1 和 0.1.5-rc.2。在 DSH 0.1.1-rc.2 上,由于分叉时队列本就是空的,该插件为无操作状态。
  • 无配置:无需任何额外配置。
  • 权限:插件以当前 DSH 进程权限运行,建议安装前检查源码与许可证。

结语

dsh-branch-inbox-guard 提供了一种非侵入式的解决方案,用于修复 DSH 0.1.5 版本中 fork 分支继承队列导致的新输入被阻塞的问题。

  • GitHub: https://github.com/xine2009cn/dsh-branch-inbox-guard
  • DSH 生态目录: https://www.skillhub.cn/plugins/xine2009cn/dsh-branch-inbox-guard
羽毛球分组比赛记分
小程序二维码

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

小夜