@yemi33/minions 0.1.814 → 0.1.815
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/dashboard.js +8 -0
- package/engine/cleanup.js +36 -1
- package/engine/queries.js +3 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 0.1.
|
|
3
|
+
## 0.1.815 (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
|
+
- reset PRD item status when work item is deleted (closes #779) (#823)
|
|
16
17
|
- add smoke test for checkTimeouts ReferenceError regression (closes #775) (#822)
|
|
17
18
|
- replace safeWrite with mutateDispatch in CLI kill handler (#654)
|
|
18
19
|
- CC queue drain uses combined flush, not one-at-a-time while loop (#818)
|
|
@@ -32,7 +33,6 @@
|
|
|
32
33
|
- include PR title in all dispatch labels and escalation alerts
|
|
33
34
|
- never downgrade reviewStatus from 'approved' unless explicitly rejected
|
|
34
35
|
- warn on invalid pipeline JSON instead of silently dropping + add test
|
|
35
|
-
- repair invalid JSON in daily-arch-improvement pipeline
|
|
36
36
|
|
|
37
37
|
## 0.1.782 (2026-04-10)
|
|
38
38
|
|
package/dashboard.js
CHANGED
|
@@ -1210,6 +1210,14 @@ const server = http.createServer(async (req, res) => {
|
|
|
1210
1210
|
if (cleaned) safeWrite(cooldownPath, cooldowns);
|
|
1211
1211
|
} catch (e) { console.error('cooldown cleanup:', e.message); }
|
|
1212
1212
|
|
|
1213
|
+
// Reset PRD item status so it doesn't stay 'dispatched' with no work item (#779)
|
|
1214
|
+
if (item && item.sourcePlan) {
|
|
1215
|
+
try {
|
|
1216
|
+
const lifecycle = require('./engine/lifecycle');
|
|
1217
|
+
lifecycle.syncPrdItemStatus(id, WI_STATUS.PENDING, item.sourcePlan);
|
|
1218
|
+
} catch (e) { console.error('PRD status reset on delete:', e.message); }
|
|
1219
|
+
}
|
|
1220
|
+
|
|
1213
1221
|
invalidateStatusCache();
|
|
1214
1222
|
return jsonReply(res, 200, { ok: true, id, dispatchRemoved });
|
|
1215
1223
|
} catch (e) { return jsonReply(res, 400, { error: e.message }); }
|
package/engine/cleanup.js
CHANGED
|
@@ -582,6 +582,41 @@ function runCleanup(config, verbose = false) {
|
|
|
582
582
|
}
|
|
583
583
|
} catch (e) { log('warn', 'migrate PRD legacy statuses: ' + e.message); }
|
|
584
584
|
|
|
585
|
+
// Reset orphaned PRD item statuses — dispatched/failed with no matching work item (#779)
|
|
586
|
+
cleaned.orphanedPrdStatuses = 0;
|
|
587
|
+
try {
|
|
588
|
+
const wiIds = new Set();
|
|
589
|
+
for (const project of projects) {
|
|
590
|
+
const items = safeJson(projectWorkItemsPath(project)) || [];
|
|
591
|
+
for (const wi of items) { if (wi?.id) wiIds.add(wi.id); }
|
|
592
|
+
}
|
|
593
|
+
try {
|
|
594
|
+
const centralWi = safeJson(path.join(MINIONS_DIR, 'work-items.json')) || [];
|
|
595
|
+
for (const wi of centralWi) { if (wi?.id) wiIds.add(wi.id); }
|
|
596
|
+
} catch { /* optional */ }
|
|
597
|
+
|
|
598
|
+
let orphanPrdEntries;
|
|
599
|
+
try { orphanPrdEntries = fs.readdirSync(PRD_DIR).filter(f => f.endsWith('.json')); }
|
|
600
|
+
catch { orphanPrdEntries = []; }
|
|
601
|
+
for (const pf of orphanPrdEntries) {
|
|
602
|
+
const prdPath = path.join(PRD_DIR, pf);
|
|
603
|
+
const prd = safeJson(prdPath);
|
|
604
|
+
if (!prd?.missing_features) continue;
|
|
605
|
+
let reset = 0;
|
|
606
|
+
for (const feat of prd.missing_features) {
|
|
607
|
+
if ((feat.status === shared.WI_STATUS.DISPATCHED || feat.status === shared.WI_STATUS.FAILED) && !wiIds.has(feat.id)) {
|
|
608
|
+
feat.status = shared.WI_STATUS.PENDING;
|
|
609
|
+
reset++;
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
if (reset > 0) {
|
|
613
|
+
safeWrite(prdPath, prd);
|
|
614
|
+
log('info', `Reset ${reset} orphaned PRD item status(es) → pending in ${pf}`);
|
|
615
|
+
cleaned.orphanedPrdStatuses += reset;
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
} catch (e) { log('warn', 'orphan PRD status reset: ' + e.message); }
|
|
619
|
+
|
|
585
620
|
// 10. Prune CC tab sessions — cap at 50 entries, remove oldest beyond cap
|
|
586
621
|
cleaned.ccSessions = 0;
|
|
587
622
|
try {
|
|
@@ -606,7 +641,7 @@ function runCleanup(config, verbose = false) {
|
|
|
606
641
|
const entries = Object.entries(docSessions);
|
|
607
642
|
const DOC_SESSIONS_CAP = 100;
|
|
608
643
|
if (entries.length > DOC_SESSIONS_CAP) {
|
|
609
|
-
entries.sort((a, b) => new Date(b
|
|
644
|
+
entries.sort((a, b) => new Date(b.lastActiveAt || 0) - new Date(a.lastActiveAt || 0));
|
|
610
645
|
const keep = Object.fromEntries(entries.slice(0, DOC_SESSIONS_CAP));
|
|
611
646
|
cleaned.docSessions = entries.length - DOC_SESSIONS_CAP;
|
|
612
647
|
safeWrite(docSessionsPath, keep);
|
package/engine/queries.js
CHANGED
|
@@ -953,7 +953,9 @@ function getPrdInfo(config) {
|
|
|
953
953
|
for (const item of items) {
|
|
954
954
|
const wi = wiById[item.id];
|
|
955
955
|
// Work item status is source of truth when available (PRD JSON may lag behind)
|
|
956
|
-
|
|
956
|
+
// If PRD says dispatched/failed but no work item exists, treat as pending (orphaned — #779)
|
|
957
|
+
const rawStatus = wi ? (wi.status || item.status)
|
|
958
|
+
: ((item.status === WI_STATUS.DISPATCHED || item.status === WI_STATUS.FAILED) ? WI_STATUS.PENDING : item.status);
|
|
957
959
|
item.status = statusDisplay[rawStatus] || rawStatus || 'missing';
|
|
958
960
|
// Attach execution metadata for display (agent, PR link, fail reason)
|
|
959
961
|
if (wi) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yemi33/minions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.815",
|
|
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"
|