wooden-tan/dsh-team-autopilot ↗★ 0
dsh-team-autopilot
Deterministic auto-dispatch for native DeepSeek Harness Agent Teams: wakes idle members when a task becomes ready, and turns advisory write scopes into an effective soft lock.
Install
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add dsh-team-autopilotREADME
Read the full README ↗配置
| 键 | 默认 | 说明 |
|---|---|---|
enabled | true | 关掉后只保留状态工具,不跑循环 |
tickTimeoutMs | 30000 | 每次等待窗口,原生硬限制 10000–3600000 |
maxConcurrent | 2 | 团队并发预算默认值(见下) |
wakeCooldownMs | 60000 | 同一任务在该窗口内不重复唤醒 |
dryRun | false | 只记录决策,不发消息 |
teamBudgets | {} | 按团队覆盖并发预算,key 为团队 TeamId(root Session 标识) |
errorThreshold | 3 | 连续 sendMessage 失败几次后切开熔断 |
openCooldownMs | 60000 | 熔断打开后保持多久再半开探针 |
halfOpenProbe | 1 | 半开阶段允许的探针派发次数 |
reclaimAfterMs | 300000 | 持有者 inactive 持续多久后把任务收回池子(1000–3600000) |
reclaimOnFailed | true | 持有者 failed 时是否立即回收 |
reclaimRetryLimit | 3 | 同一任务被回收几次后停止派发(0 = 不限,0–32)。见第 9 条 |
statusFile | '' | 状态有变化时追加一行到该文件(绝对路径),空 = 关闭。见下「零 token 观测」 |
statusHeartbeatMs | 600000 | 状态未变也至少这么久写一行;0 = 逐轮写 |
livenessEnabled | true | 是否订阅 agent/status 用真实的回合边界判定「唤醒是否被答复」,关掉则退回纯计时 |
livenessGraceMs | 60000 | 有回合边界证据时,回合结束后多久仍没完成就回收(替代 reclaimAfterMs) |
livenessSettleGraceMs | 3000 | 回合结束后再等多久才把一次唤醒判定为「已被答复」,避开状态写入的竞态 |
stalledRunningMs | 900000 | 持有者持续 running/provisioning 多久算卡死并上报;0 = 关闭。只上报,不动任务板 |
interruptStalled | false | 卡死时是否真的 interrupt 那个成员。默认关:中断会掐掉正在做的工作 |
wakeBudgetPerHour | 0 | 每队滚动一小时内最多发起多少次唤醒(一次唤醒 = 一个模型回合,也就是钱)。0 = 不设上限。花完的那一轮不再派发,记 why=budget 并累加 budgetSkips |
数值越界会被收敛:schema 先拒绝明显非法的输入,resolveConfig 再兜一层。兜底这一层不是装饰——maxConcurrent: 0 会把槽位永久归零,halfOpenProbe: 0 会让熔断器卡在 half-open、从此再不发一条唤醒,而两者都不报错,看起来和「今天没活」一模一样。cordis.patch.yml 只设 enabled: true,其余全部走 schema 默认值——默认值只有一份,把数字抄进 patch 会在默认值改动时悄悄覆盖掉用户意图。要改就在自己的 profile 里按 id: team-autopilot 覆盖。