@yemi33/minions 0.1.76 → 0.1.78

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,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.78 (2026-03-31)
4
+
5
+ ### Engine
6
+ - engine.js
7
+
8
+ ## 0.1.77 (2026-03-31)
9
+
10
+ ### Engine
11
+ - engine/lifecycle.js
12
+
3
13
  ## 0.1.76 (2026-03-31)
4
14
 
5
15
  ### Engine
@@ -31,7 +31,7 @@ function checkPlanCompletion(meta, config) {
31
31
 
32
32
  const projects = shared.getProjects(config);
33
33
 
34
- // Collect work items from ALL projects (PRD items can span multiple projects)
34
+ // Collect work items from ALL projects + central (PRD items can be in either)
35
35
  let allWorkItems = [];
36
36
  for (const p of projects) {
37
37
  try {
@@ -39,6 +39,13 @@ function checkPlanCompletion(meta, config) {
39
39
  allWorkItems = allWorkItems.concat(wi);
40
40
  } catch { /* optional */ }
41
41
  }
42
+ // Also check central work-items.json (for no-project setups)
43
+ try {
44
+ const central = safeJson(path.join(MINIONS_DIR, 'work-items.json')) || [];
45
+ for (const w of central) {
46
+ if (!allWorkItems.some(existing => existing.id === w.id)) allWorkItems.push(w);
47
+ }
48
+ } catch { /* optional */ }
42
49
  const planItems = allWorkItems.filter(w => w.sourcePlan === planFile && w.itemType !== 'pr' && w.itemType !== 'verify');
43
50
  if (planItems.length === 0) return;
44
51
 
package/engine.js CHANGED
@@ -1967,6 +1967,22 @@ function discoverWork(config) {
1967
1967
  allWorkItems.push(...meetingWork);
1968
1968
  } catch (e) { log('warn', 'discover meeting work: ' + e.message); }
1969
1969
 
1970
+ // Periodic plan completion sweep — catch PRDs that completed while engine was down
1971
+ // or where checkPlanCompletion missed the completion event
1972
+ try {
1973
+ const lifecycle = require('./engine/lifecycle');
1974
+ const prdDir = path.join(MINIONS_DIR, 'prd');
1975
+ if (fs.existsSync(prdDir)) {
1976
+ for (const f of fs.readdirSync(prdDir).filter(f => f.endsWith('.json'))) {
1977
+ const plan = safeJson(path.join(prdDir, f));
1978
+ if (!plan?.missing_features || plan.status === 'completed') continue;
1979
+ if (plan.status !== 'approved' && plan.status !== 'active') continue;
1980
+ // Simulate the meta object checkPlanCompletion expects
1981
+ lifecycle.checkPlanCompletion({ item: { sourcePlan: f } }, config);
1982
+ }
1983
+ }
1984
+ } catch (e) { log('warn', 'plan completion sweep: ' + e.message); }
1985
+
1970
1986
  // Gate reviews and fixes: do not dispatch until all implement items are complete
1971
1987
  const hasIncompleteImplements = projects.some(project => {
1972
1988
  const items = safeJson(projectWorkItemsPath(project)) || [];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.76",
3
+ "version": "0.1.78",
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"