@yemi33/minions 0.1.815 → 0.1.816
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 +2 -2
- package/engine.js +20 -3
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 0.1.
|
|
3
|
+
## 0.1.816 (2026-04-11)
|
|
4
4
|
|
|
5
5
|
### Features
|
|
6
6
|
- Bidirectional Teams integration for Command Center (#764)
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
- cap review→fix cycles at evalMaxIterations (default 3)
|
|
14
14
|
|
|
15
15
|
### Fixes
|
|
16
|
+
- handle local-only dependency branches in dep merge (closes #782) (#825)
|
|
16
17
|
- reset PRD item status when work item is deleted (closes #779) (#823)
|
|
17
18
|
- add smoke test for checkTimeouts ReferenceError regression (closes #775) (#822)
|
|
18
19
|
- replace safeWrite with mutateDispatch in CLI kill handler (#654)
|
|
@@ -32,7 +33,6 @@
|
|
|
32
33
|
- remove redundant 'PR' prefix from dispatch labels (id already has it)
|
|
33
34
|
- include PR title in all dispatch labels and escalation alerts
|
|
34
35
|
- never downgrade reviewStatus from 'approved' unless explicitly rejected
|
|
35
|
-
- warn on invalid pipeline JSON instead of silently dropping + add test
|
|
36
36
|
|
|
37
37
|
## 0.1.782 (2026-04-10)
|
|
38
38
|
|
package/engine.js
CHANGED
|
@@ -471,22 +471,39 @@ async function spawnAgent(dispatchItem, config) {
|
|
|
471
471
|
);
|
|
472
472
|
const hasFetchFailures = fetchResults.some(r => r.status === 'rejected');
|
|
473
473
|
const allPrsForFetch = hasFetchFailures ? shared.getProjects(config).reduce((acc, p) => acc.concat(safeJson(shared.projectPrPath(p)) || []), []) : [];
|
|
474
|
+
// Track branches recovered by local-only push so they can be merged
|
|
475
|
+
const recoveredBranches = new Set();
|
|
474
476
|
for (let i = 0; i < fetchResults.length; i++) {
|
|
475
477
|
if (fetchResults[i].status === 'rejected') {
|
|
476
478
|
const failedBranch = fetchable[i].branch;
|
|
477
479
|
const failedPrId = fetchable[i].prId;
|
|
480
|
+
const errMsg = fetchResults[i].reason?.message || '';
|
|
478
481
|
const pr = allPrsForFetch.find(p => p.id === failedPrId);
|
|
479
482
|
if (pr && (pr.status === 'merged' || pr.status === 'closed')) {
|
|
480
483
|
log('info', `Dependency ${failedBranch} (${failedPrId}) already merged — skipping, changes already in main`);
|
|
481
484
|
continue;
|
|
482
485
|
}
|
|
486
|
+
// If remote ref missing, check if branch exists locally and push it (#782)
|
|
487
|
+
if (errMsg.includes('couldn\'t find remote ref') || errMsg.includes('not found in upstream')) {
|
|
488
|
+
try {
|
|
489
|
+
await execAsync(`git rev-parse --verify "refs/heads/${failedBranch}"`, { ..._gitOpts, cwd: rootDir });
|
|
490
|
+
// Branch exists locally — push it to origin
|
|
491
|
+
log('info', `Dependency ${failedBranch} exists locally but not on remote — pushing to origin`);
|
|
492
|
+
await execAsync(`git push origin "${failedBranch}"`, { ..._gitOpts, cwd: rootDir, timeout: 60000 });
|
|
493
|
+
log('info', `Successfully pushed local-only dependency branch ${failedBranch} to origin`);
|
|
494
|
+
recoveredBranches.add(failedBranch);
|
|
495
|
+
continue;
|
|
496
|
+
} catch (localErr) {
|
|
497
|
+
log('warn', `Dependency ${failedBranch} not found locally or push failed: ${localErr.message}`);
|
|
498
|
+
}
|
|
499
|
+
}
|
|
483
500
|
_failedRefCache.add(failedBranch);
|
|
484
|
-
log('warn', `Failed to fetch dependency ${failedBranch}: ${
|
|
501
|
+
log('warn', `Failed to fetch dependency ${failedBranch}: ${errMsg}`);
|
|
485
502
|
depMergeFailed = true;
|
|
486
503
|
}
|
|
487
504
|
}
|
|
488
|
-
// Merge successfully-fetched
|
|
489
|
-
const fetched = fetchable.filter((_, i) => fetchResults[i].status === 'fulfilled');
|
|
505
|
+
// Merge successfully-fetched + recovered (local-only pushed) branches sequentially
|
|
506
|
+
const fetched = fetchable.filter((_, i) => fetchResults[i].status === 'fulfilled' || recoveredBranches.has(fetchable[i].branch));
|
|
490
507
|
if (!depMergeFailed) {
|
|
491
508
|
for (const { branch: depBranch, prId } of fetched) {
|
|
492
509
|
try {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yemi33/minions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.816",
|
|
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"
|