@yemi33/minions 0.1.308 → 0.1.310

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.
Files changed (3) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/engine.js +13 -7
  3. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.310 (2026-04-03)
4
+
5
+ ### Fixes
6
+ - wrap all tickInner phases in try-catch for resilient dispatch
7
+
8
+ ## 0.1.309 (2026-04-03)
9
+
10
+ ### Fixes
11
+ - per-item try-catch in discovery loops — one bad item no longer blocks tick
12
+
3
13
  ## 0.1.308 (2026-04-03)
4
14
 
5
15
  ### Features
package/engine.js CHANGED
@@ -1373,6 +1373,7 @@ function discoverFromWorkItems(config, project) {
1373
1373
  let needsWrite = false;
1374
1374
 
1375
1375
  for (const item of items) {
1376
+ try {
1376
1377
  // Re-evaluate failed items: if deps have recovered, reset to pending
1377
1378
  if (item.status === 'failed' && item.failReason === 'Dependency failed — cannot proceed') {
1378
1379
  const depStatus = areDependenciesMet(item, config);
@@ -1562,6 +1563,7 @@ function discoverFromWorkItems(config, project) {
1562
1563
  });
1563
1564
 
1564
1565
  setCooldown(key);
1566
+ } catch (err) { log('warn', `discoverFromWorkItems: skipping ${item.id}: ${err.message}`); }
1565
1567
  }
1566
1568
 
1567
1569
  // Write back updated statuses (always, since we mark items dispatched before newWork check)
@@ -1768,6 +1770,7 @@ function discoverCentralWorkItems(config) {
1768
1770
  const newWork = [];
1769
1771
 
1770
1772
  for (const item of items) {
1773
+ try {
1771
1774
  if (item.status !== 'queued' && item.status !== 'pending') continue;
1772
1775
 
1773
1776
  const key = `central-work-${item.id}`;
@@ -2001,6 +2004,7 @@ function discoverCentralWorkItems(config) {
2001
2004
  item.dispatched_to = agentId;
2002
2005
  setCooldown(key);
2003
2006
  }
2007
+ } catch (err) { log('warn', `discoverCentralWorkItems: skipping ${item.id}: ${err.message}`); }
2004
2008
  }
2005
2009
 
2006
2010
  if (newWork.length > 0) safeWrite(centralPath, items);
@@ -2179,9 +2183,9 @@ async function tickInner() {
2179
2183
  tickCount++;
2180
2184
 
2181
2185
  // 1. Check for timed-out agents, steering messages, and idle threshold
2182
- checkTimeouts(config);
2183
- checkSteering(config);
2184
- checkIdleThreshold(config);
2186
+ try { checkTimeouts(config); } catch (e) { log('warn', 'checkTimeouts: ' + e.message); }
2187
+ try { checkSteering(config); } catch (e) { log('warn', 'checkSteering: ' + e.message); }
2188
+ try { checkIdleThreshold(config); } catch (e) { log('warn', 'checkIdleThreshold: ' + e.message); }
2185
2189
 
2186
2190
  // 1b. Check for meeting round timeouts
2187
2191
  try {
@@ -2196,11 +2200,11 @@ async function tickInner() {
2196
2200
  }
2197
2201
 
2198
2202
  // 2. Consolidate inbox
2199
- consolidateInbox(config);
2203
+ try { consolidateInbox(config); } catch (e) { log('warn', 'consolidateInbox: ' + e.message); }
2200
2204
 
2201
2205
  // 2.5. Periodic cleanup + MCP sync (every 10 ticks = ~5 minutes)
2202
2206
  if (tickCount % 10 === 0) {
2203
- runCleanup(config);
2207
+ try { runCleanup(config); } catch (e) { log('warn', 'runCleanup: ' + e.message); }
2204
2208
  }
2205
2209
 
2206
2210
  // 2.6. Poll PR status: build, review, merge (every 6 ticks = ~3 minutes)
@@ -2331,12 +2335,13 @@ async function tickInner() {
2331
2335
  }
2332
2336
 
2333
2337
  // 3. Discover new work from sources
2334
- discoverWork(config);
2338
+ try { discoverWork(config); } catch (e) { log('warn', 'discoverWork: ' + e.message); }
2335
2339
 
2336
2340
  // 4. Update snapshot
2337
- updateSnapshot(config);
2341
+ try { updateSnapshot(config); } catch (e) { log('warn', 'updateSnapshot: ' + e.message); }
2338
2342
 
2339
2343
  // 5. Process pending dispatches — auto-spawn agents
2344
+ try {
2340
2345
  const dispatch = getDispatch();
2341
2346
  const activeCount = (dispatch.active || []).length;
2342
2347
  const maxConcurrent = config.engine?.maxConcurrent || 5;
@@ -2444,6 +2449,7 @@ async function tickInner() {
2444
2449
  if (skipReasonChanged) {
2445
2450
  mutateDispatch((dp) => { dp.pending = postDispatch.pending; return dp; });
2446
2451
  }
2452
+ } catch (e) { log('warn', 'dispatch: ' + e.message); }
2447
2453
  }
2448
2454
 
2449
2455
  // ─── Exports (for engine/cli.js and other modules) ──────────────────────────
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.308",
3
+ "version": "0.1.310",
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"