dsh-team-autopilot:原生 Agent Teams 的确定性自动派发

前言

DeepSeek Harness(DSH)在实验性 Agent Teams 组合里已经提供 roster、任务板和 mailbox,但任务变成可执行之后不会自动指定持有者,成员停摆后 in_progress 任务也不会被系统收回,写域重叠在原生侧只是提示。若 Lead 只靠手动发消息推进度,多成员并行时容易出现任务挂着没人接、写域被占满却仍在派发的局面。下面介绍社区插件 dsh-team-autopilot:它挂在原生 ctx.agentTeams 接缝上,用代码做调度决策,不另建第二层团队存储,也不向主 agent 注入策略文本来花 token 做判断。

这是什么

dsh-team-autopilot 由维护者 wooden-tan 发布,npm 包名同为 dsh-team-autopilot,在 SkillHub 社区目录中归类为「工作流」。一句话定位:对原生 Agent Teams 做确定性自动派发——任务 ready 时按规则唤醒空闲成员,持有者僵死或失败时回收任务,派发时刻把 writeScopes 重叠当作软锁拦截第二次派发。

官方 README 注明:项目已于 2026-11-02 停止维护,代码停在 0.6.7;停项原因、能力边界与卸载方式见仓库 docs/stopped.md。本文仍按 README 说明安装与配置,使用前请自行评估是否接受停维状态。

它补的三个空档

原生 Agent Teams 模型策略里写死的三件事,与本插件的对应关系如下(摘自 README 表格):

空档 本插件的做法
任务可执行后无人自动叫醒,需 Lead 手动推 后台 tick 扫板,按规则挑人并 sendMessage 唤醒;一轮一个团队只 tick 一次
成员停摆后认领任务永久 in_progress,占写域与并发槽 用 agent/status 回合边界(可关)或计时判定僵死,按上限回收;超限停派
写域重叠仅 advisory,不拦截 派发时按 writeScopes 判冲突,重叠则软锁,不派第二个

插件不自建任务存储、成员注册表或消息通道;卸载即失效、不留插件侧持久状态。决策由代码完成,不向主 agent 注入调度策略文本。

安装与前置条件

先做 npm 安装,或交给 CLI 插件管理器(命令须与 README 一致):

npm i dsh-team-autopilot
dsh plugin --profile web add dsh-team-autopilot

已发布包自带预构建 dist/,安装后无需再构建。@deepseek-ai/* 为 optional peer,由宿主 profile 提供;在宿主外单独 import 会在运行时抛 Cannot find package '@deepseek-ai/schemastery',属预期行为。

必须先有提供 ctx.agentTeams 的组合,再把本插件叠在其后。README 给出的顺序示例:

dsh plugin --profile web add @deepseek-ai/dsh-experimental-agent-team-profile
dsh plugin --profile web add dsh-team-autopilot

cordis.patch.yml 会插入 team-autopilot 一行。若环境中不存在 agentTeams,插件因 inject 无法解析而不会加载——README 明确这是预期行为,不是 bug。

运行环境:package.json 要求 Node ^22.19.0 || >=24,DSH 版本 >=0.2.1-rc.2 <0.3.0 || >=0.2.2-alpha.2 <0.3.0-0。许可证为 MIT。

配置要点

在 profile 里按插件 id team-autopilot 覆盖配置;cordis.patch.yml 默认只设 enabled: true,其余走 schema 默认值。常用键如下(默认值以 README 配置表为准):

键 默认 说明
enabled true 关闭后只保留状态工具,不跑循环
tickTimeoutMs 30000 每次等待窗口(原生硬限制 10000–3600000)
maxConcurrent 2 团队并发预算默认值
wakeCooldownMs 60000 同一任务窗口内不重复唤醒
dryRun false 只记录决策,不发消息
teamBudgets {} 按 TeamId 覆盖并发预算
reclaimAfterMs 300000 持有者 inactive 多久后收回任务
reclaimOnFailed true 持有者 failed 时是否立即回收
livenessEnabled true 是否订阅 agent/status 用回合边界判定应答
wakeBudgetPerHour 0 每队滚动一小时内最多唤醒次数,0 为不限

另有熔断相关项(errorThreshold、openCooldownMs、halfOpenProbe)、回收次数上限 reclaimRetryLimit、零 token 观测用的 statusFile / statusHeartbeatMs 等,完整表见 GitHub README。

README 提醒:maxConcurrent: 0 或 halfOpenProbe: 0 会被收敛到「永久不派发」且不一定报错,外观像「今天没活」。改配置时勿把默认值整表抄进 patch,以免上游默认值变更时覆盖用户意图。

典型用法与验证

联调前:在已挂载 Agent Teams profile 的宿主上安装本插件;需要观察决策时可先设 dryRun: true,只记日志不发消息。真机端到端需真实 DSH 宿主与可用 LLM provider;README 将逐场景步骤、可粘贴提示词放在 docs/verify.md,并把成员改成被动等待的任务模板放在 docs/team-collab-task-v2.md,以便 autopilot 成为唯一派发源。

仓库内自检(无需 LLM)示例:

node node_modules/typescript/bin/tsc --noEmit
node tests/verify.ts
node tests/integration.ts
node scripts/acceptance.mjs

npm test 聚合 verify、integration、acceptance 与 verify:status(用真实 dsh-tools schema 编译器校验 team_autopilot_status 输出)。挂载自检:

node scripts/verify-mount.mjs

运行中观测:状态工具或 statusFile 会输出类似一行摘要:

autopilot active health=ok version=0.6.7 up=17m rounds=42 dispatched=3 reclaimed=0 ...

health=ok|off|error;dispatched / reclaimed / skipped 为累计值。字段详解见 docs/design.md。

适用场景与注意

适合:已在 DSH 上使用原生 Agent Teams(实验 profile),希望任务板在无人手动 @ 成员时仍能按规则推进,并需要在成员无响应或写域冲突时做确定性回收与拦截的团队编排场景。

务必注意:

  1. 停维:2026-11-02 起不再维护,末版 0.6.7;官方 Agent Teams 行为若变更,插件不会跟进。
  2. 权限:插件以当前 DSH 进程权限运行;安装前应阅读源码与 MIT 许可证,确认 sendMessage、任务回收等行为符合你的安全预期。
  3. 生态:DSH 社区目录(如 SkillHub 插件页)为独立站点,与 DeepSeek / 幻方无官方从属关系;星标与目录信息以各站点为准(当前 GitHub 星标为 0)。
  4. 卸载:dsh plugin --profile web remove dsh-team-autopilot 后完全退出宿主并重启;插件不持有持久状态。若配置过 statusFile,该文件为普通日志,可自行删除。

结尾

dsh-team-autopilot 的价值在于:在不复制一套团队中间层的前提下,用确定性 tick 与配置化规则补上「ready 不派、停摆不收、写域不锁」三处原生缝隙,并支持 dryRun、熔断与 status 观测便于联调。需要设计理由、真机记录与停项说明时,请直接读仓库文档链:docs/design.md、docs/stopped.md、docs/verify.md。

羽毛球分组比赛记分
小程序二维码

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

Xiaoye