@yemi33/minions 0.1.967 → 0.1.969
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 +3 -3
- package/engine/lifecycle.js +2 -0
- package/engine.js +37 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 0.1.
|
|
3
|
+
## 0.1.969 (2026-04-14)
|
|
4
4
|
|
|
5
5
|
### Features
|
|
6
6
|
- add quality standard reminder to all agent and CC prompts
|
|
@@ -25,6 +25,8 @@
|
|
|
25
25
|
- fix dashboard plan-pause nested lock violation (#968)
|
|
26
26
|
|
|
27
27
|
### Fixes
|
|
28
|
+
- set lastPushedAt on fix completion to unblock re-review without poller
|
|
29
|
+
- trigger second-pass re-review after fix agent completes
|
|
28
30
|
- update ccInFlightAborts when retry LLM replaces original
|
|
29
31
|
- skip orphaned LLM retry when client disconnected during CC stream
|
|
30
32
|
- restore queue flush after abort — queued messages are user intent
|
|
@@ -43,8 +45,6 @@
|
|
|
43
45
|
- use repositoryId+reasonFilter for ADO build query
|
|
44
46
|
- deduplicate work item creation by title
|
|
45
47
|
- ADO build query uses repositoryId+pullRequest instead of branchName
|
|
46
|
-
- persist adoPollEnabled/ghPollEnabled in settings save
|
|
47
|
-
- prevent _consolidationInFlight race from stale force-reset timeout (#1023)
|
|
48
48
|
|
|
49
49
|
### Other
|
|
50
50
|
- refactor(dashboard): extract _releaseCCTab helper and CC_LOCK_WAIT_MS constant
|
package/engine/lifecycle.js
CHANGED
|
@@ -940,6 +940,8 @@ function updatePrAfterFix(pr, project, source) {
|
|
|
940
940
|
if (!target) return prs;
|
|
941
941
|
// Never downgrade from approved — fix was dispatched but PR is already approved
|
|
942
942
|
if (target.reviewStatus !== 'approved') target.reviewStatus = 'waiting';
|
|
943
|
+
// Advance lastPushedAt so alreadyReviewed resets immediately, without waiting for the poller
|
|
944
|
+
target.lastPushedAt = ts();
|
|
943
945
|
// Always clear pendingFix — a fix dispatch (regardless of source) addresses all pending feedback
|
|
944
946
|
if (target.humanFeedback) target.humanFeedback.pendingFix = false;
|
|
945
947
|
if (source === 'pr-human-feedback') {
|
package/engine.js
CHANGED
|
@@ -1984,6 +1984,43 @@ async function discoverFromPrs(config, project) {
|
|
|
1984
1984
|
if (item) { newWork.push(item); setCooldown(key); }
|
|
1985
1985
|
}
|
|
1986
1986
|
|
|
1987
|
+
// Re-review after fix: fall back to fixedAt > lastReviewedAt when lastPushedAt lags poller
|
|
1988
|
+
const fixedAfterReview = !!(pr.minionsReview?.fixedAt &&
|
|
1989
|
+
pr.lastReviewedAt && pr.minionsReview.fixedAt > pr.lastReviewedAt);
|
|
1990
|
+
const needsReReview = autoReview && reviewStatus === 'waiting' &&
|
|
1991
|
+
(fixedAfterReview || (!alreadyReviewed && !!pr.minionsReview?.fixedAt)) && !evalEscalated;
|
|
1992
|
+
if (needsReReview) {
|
|
1993
|
+
const key = `review-${project?.name || 'default'}-${pr.id}`;
|
|
1994
|
+
if (isAlreadyDispatched(key) || isOnCooldown(key, cooldownMs)) continue;
|
|
1995
|
+
|
|
1996
|
+
// Pre-dispatch live vote check — cached 'waiting' may be stale if reviewer already acted
|
|
1997
|
+
try {
|
|
1998
|
+
const checkFn = project.repoHost === 'github' ? ghCheckLiveReview : adoCheckLiveReview;
|
|
1999
|
+
const liveStatus = await checkFn(pr, project);
|
|
2000
|
+
if (liveStatus && liveStatus !== 'waiting') {
|
|
2001
|
+
log('info', `Pre-dispatch vote check: ${pr.id} is ${liveStatus} (cached was waiting) — skipping re-review`);
|
|
2002
|
+
if (pr.reviewStatus !== 'approved') pr.reviewStatus = liveStatus;
|
|
2003
|
+
try {
|
|
2004
|
+
mutateJsonFileLocked(projectPrPath(project), data => {
|
|
2005
|
+
if (!Array.isArray(data)) return data;
|
|
2006
|
+
const target = data.find(p => p.id === pr.id);
|
|
2007
|
+
if (target && target.reviewStatus !== 'approved') target.reviewStatus = liveStatus;
|
|
2008
|
+
return data;
|
|
2009
|
+
});
|
|
2010
|
+
} catch {}
|
|
2011
|
+
continue;
|
|
2012
|
+
}
|
|
2013
|
+
} catch (e) { log('warn', `Pre-dispatch vote check for ${pr.id}: ${e.message}`); }
|
|
2014
|
+
|
|
2015
|
+
const agentId = resolveAgent('review', config);
|
|
2016
|
+
if (!agentId) continue;
|
|
2017
|
+
const item = buildPrDispatch(agentId, config, project, pr, 'review', {
|
|
2018
|
+
pr_id: pr.id, pr_number: prNumber, pr_title: pr.title || '', pr_branch: pr.branch || '',
|
|
2019
|
+
pr_author: pr.agent || '', pr_url: pr.url || '',
|
|
2020
|
+
}, `Review ${pr.id}: ${pr.title}`, { dispatchKey: key, source: 'pr', pr, branch: pr.branch, project: projMeta });
|
|
2021
|
+
if (item) { newWork.push(item); setCooldown(key); }
|
|
2022
|
+
}
|
|
2023
|
+
|
|
1987
2024
|
// PRs with changes requested → route back to author for fix
|
|
1988
2025
|
let fixDispatched = false;
|
|
1989
2026
|
if (reviewStatus === 'changes-requested' && !awaitingReReview && !evalEscalated) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yemi33/minions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.969",
|
|
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"
|