前言¶
在 DSH 里启用 Agent Teams 后,Lead 代理可能在 wait_agent 中阻塞,等待队友完成工作或超时。此时用户通过 Steer(插话)发来的新消息会进入收件箱,但按默认流程往往要等到 Team 状态变化或 timeout 之后,才会被 AgentLoop 领取处理。若你希望在队友继续运行的前提下,让这一次等待立刻结束、原消息只被领取一次,就需要在宿主能力之外做一层补丁。下面介绍社区插件 DSH Team Flow(团队插话助手)的定位、安装方式与兼容边界。
这是什么¶
DSH Team Flow 由维护者 jidekaixin2dian 发布,归类为工作流类插件,当前为 alpha 预览版。一句话:主代理停在 Team 等待时,让用户的 Steer 结束本次 wait,再由原生 AgentLoop 按原语义领取那条消息;不取消 Agent,也不改写 Inbox 里的队列逻辑。
实现思路围绕 deepseek-harness Discussion #9214,作为独立插件交付:无需改宿主源码或安装包,但依赖运行时方法装饰,官方尚未将其视为专用扩展 hook。
核心功能¶
下面行为来自仓库 README 中的「已验证的行为」表,在隔离 Mock runtime 与真实 Node PTC 场景下做过回归。
| 输入 / 条件 | 行为 |
|---|---|
| 同一 Lead 的 user Steer | 本次 wait 返回 {timedOut:false, reason:'user-steer'},原消息恰好一次领取 |
| Queue、user-sourced inject、普通 send、直接 Inbox mutation | 不归因为 Steer 唤醒 |
| 其他会话 / teammate 输入 | 不直接结束这里的 Lead 等待 |
| Stop、guard 拒绝、Team-first、原生 timeout | 保留各自结果 |
| 真实 Node PTC | 成功唤醒后,后续程序语句继续执行 |
| 禁用插件时仍在 wait | 仅取消这个 wait,返回明确的插件禁用错误,队友继续运行 |
工作机制概要:插件加载宿主当版的 Team 工具(不冻结复制旧工具);在缺少合法 Steer 成功值时扩展 wait 的 schema / render,已支持则保留契约。它临时装饰公开 Agent.steer(),记录原消息 ID,再通过 tools/execute 的派生 signal 结束单次真实 wait,等待底层 promise 收敛。
README 记载:在 DSH 0.2.1-rc.2 上,插件 0.2.0-alpha.5 已通过 18/18 项隔离测试与严格 TypeScript 检查(含真实 Node PTC 与 interrupt=false 下的 Steer 唤醒)。兼容目标从宿主 0.2.0-rc.2 起维护,不强制旧用户升级。
安装与启用¶
环境要求:DSH >= 0.2.0-rc.2、Node >= 24,并先启用官方 Agent Teams bundle。插件已收录 DSH Market(社区目录,与 DeepSeek / 幻方无官方从属关系);也可从 GitHub Releases 安装 dsh-team-flow-continuous-*.tgz。
- 让所有 Agent idle,备份 profile;建议先用新的测试 profile。
- 启用官方 Agent Teams bundle。
- 在市场搜索
dsh-team-flow,核对来源jidekaixin2dian/dsh-team-flow后安装;或在插件管理器安装本地 tgz,或使用 CLI:
dsh plugin --profile <你的测试profile> add <tgz绝对路径>
- 确保本插件 bundle 排在 Agent Teams bundle 之后(包声明
dsh.bundle.order.after)。它会停用原tool-agent-teamprofile entry 并加载宿主当版官方 Team 工具,避免双重注册。若你曾自定义官方工具的freshProvider/forkProvider,需在插件配置里使用相同值。 - 开新会话,按你的发送设置使用 Steer / 插话。Queue 仍按原语义;普通 Enter 由 DSH 设置决定。
卸载前同样建议 idle,在插件管理器移除,或:
dsh plugin --profile <你的测试profile> remove dsh-team-flow-continuous
主动禁用且仍在 wait 时,可能得到 TEAM_FLOW_RC2_DISABLED;未捕获该错误的 PTC 程序可能停住后续语句。请勿与另一套同名 Team 工具 owner 同时启用。
典型用法¶
没有单独的「业务 API」示例:用法就是 Teams 场景下的日常 Steer。
- Lead 进入
wait_agent,队友仍在执行。 - 用户对同一 Lead 发送 Steer(插话),而不是依赖 Queue 或普通 send 去碰 Inbox。
- 本次等待以
reason:'user-steer'结束,AgentLoop 领取那条 Steer 对应消息一次;队友不被这次插话直接打断。
若你使用 Node PTC 驱动 Team 流程,README 标明唤醒成功后后续语句会继续执行,适合在测试 profile 里先跑通再用于正式工作流。
适用场景与注意¶
适合谁:已经在 DSH 里用 Agent Teams,且经常在 Lead 等待队友时需要用 Steer 改方向或追加指令,又不想等到 timeout 或 Team 事件才处理 inbox 的开发者。
alpha 与验证范围:README 写明尚未验证正式 Desktop UI、SSH、Python PTC 与任意第三方插件组合;请先在隔离 profile 试用。方法装饰可能与其他插件装饰同一方法、或宿主 ABI 变化冲突;不支持时会保留原等待并告警,或加载失败。
权限与信任:插件以当前 DSH 进程权限运行,安装前应阅读 源码 与 MIT 许可证;独立社区项目,不宣称已合并进上游。
版本:package.json 当前公开版本为 0.2.0-alpha.5;engines 要求 dsh >=0.2.0-rc.2、node >=24.0.0。
问题与反馈可走 Issues 或 试用说明与反馈 Discussion,附 DSH / Node / OS 版本与脱敏日志,勿附 API Key 或会话原文。
结尾¶
DSH Team Flow 针对 Agent Teams 里 Lead 阻塞等待的间隙,用 Steer 结束单次 wait、保留队友运行与 inbox 语义,是对 Discussion #9214 的插件化实现。目录页:https://www.skillhub.cn/plugins/jidekaixin2dian/dsh-team-flow;仓库:https://github.com/jidekaixin2dian/dsh-team-flow。