@yemi33/minions 0.1.1002 → 0.1.1003

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Changelog
2
2
 
3
- ## 0.1.1002 (2026-04-15)
3
+ ## 0.1.1003 (2026-04-15)
4
4
 
5
5
  ### Features
6
6
  - fix stopAfter=0 watch expiry — run forever for all conditions (#1117)
@@ -25,6 +25,7 @@
25
25
  - gate auto-fix conflict dispatch behind autoFixConflicts flag
26
26
 
27
27
  ### Fixes
28
+ - only gate reviews/fixes when no free agent slots remain
28
29
  - extend auto-link fallback to ADO projects
29
30
  - auto-link existing GitHub PR when agent completes without creating one
30
31
  - preserve ordered lists across blank lines in markdown renderer
@@ -44,7 +45,6 @@
44
45
  - move review verdict check before updateWorkItemStatus(DONE)
45
46
  - address review feedback — move writeToInbox outside lock, add absolute condition auto-expire
46
47
  - fix watches feature gaps — human notifications, branch stub, status-change init, unique keys
47
- - skip isAlreadyDispatched in needsReReview to allow re-review within 1hr
48
48
 
49
49
  ### Other
50
50
  - docs: update CLAUDE.md with recent Minions architecture changes
package/engine.js CHANGED
@@ -3081,18 +3081,24 @@ async function discoverWork(config) {
3081
3081
  } catch (e) { log('warn', 'plan completion sweep: ' + e.message); }
3082
3082
  }
3083
3083
 
3084
- // Gate reviews and fixes: do not dispatch until all implement items are complete
3084
+ // Gate reviews and fixes: only when at max concurrency idle agents should pick up reviews
3085
+ // even if implement items are in progress (implements get priority via sort order, not by blocking)
3085
3086
  const hasIncompleteImplements = queries.getWorkItems(config).some(i =>
3086
3087
  ['queued', 'pending', 'dispatched'].includes(i.status) && (i.type || '').startsWith('implement')
3087
3088
  );
3088
3089
  if (hasIncompleteImplements) {
3089
- if (allReviews.length > 0) {
3090
- log('info', `Gating ${allReviews.length} reviews — implement items still in progress`);
3091
- allReviews = [];
3092
- }
3093
- if (allFixes.length > 0) {
3094
- log('info', `Gating ${allFixes.length} fixes — implement items still in progress`);
3095
- allFixes = [];
3090
+ const activeCount = (getDispatch().active || []).length;
3091
+ const maxConcurrent = config.engine?.maxConcurrent ?? DEFAULTS.maxConcurrent;
3092
+ const freeSlots = Math.max(0, maxConcurrent - activeCount);
3093
+ if (freeSlots === 0) {
3094
+ if (allReviews.length > 0) {
3095
+ log('info', `Gating ${allReviews.length} reviews — implement items in progress and no free slots`);
3096
+ allReviews = [];
3097
+ }
3098
+ if (allFixes.length > 0) {
3099
+ log('info', `Gating ${allFixes.length} fixes — implement items in progress and no free slots`);
3100
+ allFixes = [];
3101
+ }
3096
3102
  }
3097
3103
  }
3098
3104
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.1002",
3
+ "version": "0.1.1003",
4
4
  "description": "Multi-agent AI dev team that runs from ~/.minions/ — five autonomous agents share a single engine, dashboard, and knowledge base",
5
5
  "bin": {
6
6
  "minions": "bin/minions.js"