前言¶
在 DeepSeek Harness (DSH) 中,利用 run_in_background 启动后台子 agent 是常见的开发模式。然而,后台子 agent 完成时的通知或汇报消息,往往会在父会话仍处于忙碌状态(如正在生成回复或调用工具)时直接进入收件箱或显示在界面上。这会导致消息混入正在进行的回合,或者提前打断用户的注意力。
@momojie-s/dsh-subagent-idle-delivery 解决了这个问题。它通过“挂起并释放”(hold-and-release)机制,拦截后台子 agent 的完成通知,直到父会话完全空闲后,才将这些消息作为新的对话回合投递。
插件简介¶
这是一个 DSH 插件,由开发者 Momojie-S 维护。
其核心逻辑是拦截后台子 agent 的完成通知,并在父会话空闲时投递。挂载后无需任何额外操作即可生效。它支持拦截 subagent-settled(后台子 agent 结算通知)、subagent-report(旧版汇报工具)和 agent-message(新版 send_message 回复)等类型。
安装与启用¶
通过命令行安装插件:
dsh plugin --profile web add github:Momojie-s/dsh-subagent-idle-delivery
首次安装时,如果使用 pnpm,可能需要在 profile 目录下的 pnpm-workspace.yaml 文件中添加 allowBuilds 授权构建。安装完成后重启 DSH 以生效。
配置项¶
插件支持通过 patch config 字段进行扩展配置。
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
heldKinds |
string[] | ['subagent-settled', 'subagent-report', 'agent-message'] |
指定需要拦截的 source.kind 列表。扩展前需确认该类型的全部来源,以免误拦审批或任务完成通知。 |
maxHoldMs |
number | 600000 |
放水阀时限。如果扣留时间超过该毫秒数仍未进入空闲状态,消息将以“排队到当前回合之后”的方式释放。设为 0 可严格扣留到空闲,但慎用(连续驱动的 goal 会话可能长期不空闲)。 |
验证与使用场景¶
典型用法:
让模型起一个后台子 agent(使用 run_in_background),同时父会话继续执行当前任务。
验证步骤:
1. 启动后台子 agent。
2. 观察日志,应出现 holding N notice(s) ... until idle,表示消息已被拦截。
3. 此时界面不应出现子 agent 的汇报消息。
4. 完成父会话当前回合的工作。
5. 子 agent 的汇报作为新回合出现在历史记录中,日志显示 released ... (idle)。
注意事项¶
- 环境依赖:插件依赖 DSH 版本
>= 0.1.0-rc.7。 - 类型变更:默认拦截
agent-message类型(在 DSHrc.1steer 统一后,此类消息取代了旧的 report 工具)。 - 权限:本插件以当前 DSH 进程权限运行,安装前请检查源码与许可证。