mimajiushi/dsh-plugins--plugins-dsh-agent-teams-limits ↗★ 0
dsh-agent-teams-limits
配置团队成员上限与单团队并发数上限 适合需要精细控制AgentTeams成员规模和并发数的团队协作场景。
安装
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:mimajiushi/dsh-plugins#1aa8b9d851070af475ca10703d84c000562ef8d7&path:plugins/dsh-agent-teams-limits说明文档
阅读完整 README ↗怎么做到的(都不改第三方源码的配置语义)
宿主半(lib/index.js + lib/logic.js):
| 缝 | 作用 | 出处 |
|---|---|---|
全局 internal/config 瀑布({ global: true }) | 每次 AgentTeams 行被加载(含重启)时,把两个值注入它的 config。只改目标行,其它键原样保留;没配值时返回 next(),一个字节都不动 | 与 dsh-compact-model 同一条缝,本机宿主日志有实证 |
活体桥 __limits(本地补丁提供) | 改设置时直接改写已挂载实例的 resolved config。两个值都是取用时刻读取——maxMembers 由 tools 直接读 resolved,maxConcurrentMembers 由 scheduler 通过补丁加进 installTeamScheduler 调用点的活体 getter 读回 resolved——所以立刻生效;桥找不到时只告警一次并说明「下一次启动才生效」 | 主路径走 fiber 的 runtime.callback.__limits,兜底走 globalThis[Symbol.for('dsh.agent-teams.limits')] |
ctx.settings.register('agent-teams-limits', …) | 持久化到 ~/.dsh/settings.yaml,scope.watch 实时同步 | dsh 0.1.5 的用户设置服务 |
ctx.systemPrompt.section({ order: 119 }) | 配了值才追加一行「本机限制」,让队长不去撞墙;没配值返回空串(该段被丢弃,提示与未装插件逐字相同) | 118 是审批覆盖、117 是队长协议 |
客户端 settings.plugin.item 座位 + ctx.settingsScope | 卡片本体(数字输入),0.1.7 线改挂插件管理器的 plugins.bundle.config 座位 | 与 dsh-llm-retry-all / dsh-compact-model 同一套 |
并发上限需要配套补丁(成员上限不需要):
node scripts/patch-agent-teams-limits.mjs --apply
node scripts/verify-agent-teams-limits.mjs
补丁做五件事(可用 --revert 整段还原,备份后缀 .bak-agent-teams-limits;从第一代补丁升级要先 --revert):
lib/index.js:配置字段maxConcurrentMembers(默认0= 不限)、resolved透传、__limits活体桥;lib/tools.js:把installTeamScheduler的实参从拷贝字面量改成对resolved的活体 getter——这是并发闸能不能生效的关键(第一代补丁漏了这一步,scheduler 拿到的 config 里根本没有这个字段,闸恒为「不限」;2026-09-27 独立复审发现,verify-agent-teams-limits.mjs的「负控制」用例就是钉这条);lib/scheduler.js:memberCap/occupantHoldsSlot/holdsClaim/idleEdgePark/memberOccupiesSlot/activeMemberCount+ fresh 认领前的上限判定(恢复已有 attempt 永不拦;两类 park 分开看,见下)+ 空闲边界改用kickTeam补位 + 邮箱投递被闸不再吞掉整个回合;lib/tools.js:dispatchMember里对steer唤醒同样受上限约束——到上限时返回false,这是上游自己的「现在不行」语义:消息留在邮箱,空位出现后重投,不丢消息(可能等一整个成员回合)。被闸的那一轮不再整轮白等:scheduler 会把 release 后的流程落到认领分支(那里的 cap 判定同样拒新任务,但不会拦已有 attempt 的 recovery);lib/types/index.d.ts:声明同步。