mimajiushi/dsh-plugins--plugins-dsh-agent-teams-limits ↗★ 0

dsh-agent-teams-limits

DSH plugin: Settings → Plugins card for AgentTeams member cap and per-team concurrency cap. 适合需要精细控制AgentTeams成员规模和并发数的团队协作场景。

패키지
dsh-agent-teams-limits
호환성
미검증
버전
0.1.0
라이선스
MIT
최근 업데이트
2026. 9. 27.

설치

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:mimajiushi/dsh-plugins#1aa8b9d851070af475ca10703d84c000562ef8d7&path:plugins/dsh-agent-teams-limits

怎么做到的(都不改第三方源码的配置语义)

宿主半(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):

  1. lib/index.js:配置字段 maxConcurrentMembers(默认 0 = 不限)、resolved 透传、__limits 活体桥;
  2. lib/tools.js:把 installTeamScheduler 的实参从拷贝字面量改成对 resolved 的活体 getter——这是并发闸能不能生效的关键(第一代补丁漏了这一步,scheduler 拿到的 config 里根本没有这个字段,闸恒为「不限」;2026-09-27 独立复审发现,verify-agent-teams-limits.mjs 的「负控制」用例就是钉这条);
  3. lib/scheduler.js:memberCap / occupantHoldsSlot / holdsClaim / idleEdgePark / memberOccupiesSlot / activeMemberCount + fresh 认领前的上限判定(恢复已有 attempt 永不拦;两类 park 分开看,见下)+ 空闲边界改用 kickTeam 补位 + 邮箱投递被闸不再吞掉整个回合;
  4. lib/tools.js:dispatchMember 里对 steer 唤醒同样受上限约束——到上限时返回 false,这是上游自己的「现在不行」语义:消息留在邮箱,空位出现后重投,不丢消息(可能等一整个成员回合)。被闸的那一轮不再整轮白等:scheduler 会把 release 后的流程落到认领分支(那里的 cap 判定同样拒新任务,但不会拦已有 attempt 的 recovery);
  5. lib/types/index.d.ts:声明同步。