@yemi33/minions 0.1.971 → 0.1.973

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.971 (2026-04-14)
3
+ ## 0.1.973 (2026-04-14)
4
4
 
5
5
  ### Features
6
6
  - flush queued CC messages as single combined request
@@ -25,6 +25,7 @@
25
25
  - replace magic string 'active' with PR_STATUS.ACTIVE in lifecycle.js (#969)
26
26
 
27
27
  ### Fixes
28
+ - skip isAlreadyDispatched in needsReReview to allow re-review within 1hr
28
29
  - loop queue flush so messages queued during combined send aren't orphaned
29
30
  - set lastPushedAt on fix completion to unblock re-review without poller
30
31
  - trigger second-pass re-review after fix agent completes
@@ -34,6 +35,7 @@
34
35
  - CC stale lock auto-release + queue drain on abort
35
36
  - CC streaming 'tabId' TDZ error on new tab first message
36
37
  - fix tabId scope and close-event lock race in CC handlers
38
+ - defer setCooldown to post-gating in discoverWork
37
39
  - fix CC queued message 'already processing' and thinking UX stacking
38
40
  - enforce --timeout 1 on all azureauth calls to prevent agent orphans (#1063)
39
41
  - cancel steering kill watcher on resume spawn (#1052) (#1062)
@@ -43,8 +45,6 @@
43
45
  - tighten build query guard to require mergeCommitId
44
46
  - restore sourceVersion filter after refs/pull merge ref switch
45
47
  - use refs/pull/{id}/merge for build status scoping
46
- - use repositoryId+reasonFilter for ADO build query
47
- - deduplicate work item creation by title
48
48
 
49
49
  ### Other
50
50
  - refactor(dashboard): extract _releaseCCTab helper and CC_LOCK_WAIT_MS constant
package/engine.js CHANGED
@@ -1981,7 +1981,7 @@ async function discoverFromPrs(config, project) {
1981
1981
  pr_id: pr.id, pr_number: prNumber, pr_title: pr.title || '', pr_branch: pr.branch || '',
1982
1982
  pr_author: pr.agent || '', pr_url: pr.url || '',
1983
1983
  }, `Review ${pr.id}: ${pr.title}`, { dispatchKey: key, source: 'pr', pr, branch: pr.branch, project: projMeta });
1984
- if (item) { newWork.push(item); setCooldown(key); }
1984
+ if (item) { newWork.push(item); }
1985
1985
  }
1986
1986
 
1987
1987
  // Re-review after fix: fall back to fixedAt > lastReviewedAt when lastPushedAt lags poller
@@ -1991,7 +1991,9 @@ async function discoverFromPrs(config, project) {
1991
1991
  (fixedAfterReview || (!alreadyReviewed && !!pr.minionsReview?.fixedAt)) && !evalEscalated;
1992
1992
  if (needsReReview) {
1993
1993
  const key = `review-${project?.name || 'default'}-${pr.id}`;
1994
- if (isAlreadyDispatched(key) || isOnCooldown(key, cooldownMs)) continue;
1994
+ // Skip isAlreadyDispatched fixedAfterReview/alreadyReviewed already dedup; the 1hr
1995
+ // completed-dispatch window would block legitimate re-reviews within the hour after a fix
1996
+ if (isOnCooldown(key, cooldownMs)) continue;
1995
1997
 
1996
1998
  // Pre-dispatch live vote check — cached 'waiting' may be stale if reviewer already acted
1997
1999
  try {
@@ -2034,7 +2036,7 @@ async function discoverFromPrs(config, project) {
2034
2036
  review_note: pr.minionsReview?.note || pr.reviewNote || 'See PR thread comments',
2035
2037
  }, `Fix ${pr.id}: ${pr.title || ''} — review feedback`, { dispatchKey: key, source: 'pr', pr, branch: pr.branch, project: projMeta });
2036
2038
  if (item) {
2037
- newWork.push(item); setCooldown(key); fixDispatched = true;
2039
+ newWork.push(item); fixDispatched = true;
2038
2040
  // Increment review→fix cycle counter
2039
2041
  try {
2040
2042
  mutatePullRequests(projectPrPath(project), prs => {
@@ -2072,7 +2074,7 @@ async function discoverFromPrs(config, project) {
2072
2074
  reviewer: 'Human Reviewer',
2073
2075
  review_note: reviewNote,
2074
2076
  }, `Fix ${pr.id}: ${pr.title || ''} — human feedback`, { dispatchKey: key, source: 'pr-human-feedback', pr, branch: pr.branch, project: projMeta });
2075
- if (item) { newWork.push(item); setCooldown(key); fixDispatched = true; }
2077
+ if (item) { newWork.push(item); fixDispatched = true; }
2076
2078
  }
2077
2079
 
2078
2080
  // PRs with build failures — route to author (has session context from implementing)
@@ -2121,7 +2123,7 @@ async function discoverFromPrs(config, project) {
2121
2123
  review_note: reviewNote,
2122
2124
  }, `Fix build failure on ${pr.id}: ${pr.title || ''}`, { dispatchKey: key, source: 'pr', pr, branch: pr.branch, project: projMeta });
2123
2125
  if (item) {
2124
- newWork.push(item); setCooldown(key);
2126
+ newWork.push(item);
2125
2127
  // Increment build fix attempts counter
2126
2128
  try {
2127
2129
  const prPath = projectPrPath(project);
@@ -2178,7 +2180,6 @@ async function discoverFromPrs(config, project) {
2178
2180
  }, `Fix merge conflicts on ${pr.id}: ${pr.title || ''}`, { dispatchKey: key, source: 'pr', pr, branch: pr.branch, project: projMeta });
2179
2181
  if (item) {
2180
2182
  newWork.push(item);
2181
- setCooldown(key);
2182
2183
  // Record dispatch timestamp so re-dispatch is suppressed during ADO lag window
2183
2184
  try {
2184
2185
  mutatePullRequests(projectPrPath(project), prs => {
@@ -3079,6 +3080,7 @@ async function discoverWork(config) {
3079
3080
 
3080
3081
  for (const item of allWork) {
3081
3082
  addToDispatch(item);
3083
+ if (item.meta?.dispatchKey) setCooldown(item.meta.dispatchKey);
3082
3084
  if (item.meta?.source === 'pr-human-feedback') {
3083
3085
  clearPendingHumanFeedbackFlag(item.meta.project, item.meta.pr?.id);
3084
3086
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.971",
3
+ "version": "0.1.973",
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"