@yemi33/minions 0.1.300 → 0.1.302

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,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.302 (2026-04-03)
4
+
5
+ ### Fixes
6
+ - sort team meetings by timestamp descending (newest first)
7
+ - PR dedup strict equality, work-items parse logging, undefined minionsVerdict
8
+
3
9
  ## 0.1.300 (2026-04-03)
4
10
 
5
11
  ### Fixes
@@ -6,6 +6,7 @@ let _mtgPage = 0;
6
6
 
7
7
  function renderMeetings(meetings) {
8
8
  meetings = (meetings || []).filter(function(m) { return !isDeleted('mtg:' + m.id); });
9
+ meetings.sort((a, b) => (b.created || b.startedAt || '').localeCompare(a.created || a.startedAt || ''));
9
10
  const el = document.getElementById('meetings-content');
10
11
  const countEl = document.getElementById('meetings-count');
11
12
  if (!meetings || meetings.length === 0) {
@@ -436,7 +436,10 @@ function chainPlanToPrd(dispatchItem, meta, config) {
436
436
  log('info', `Plan chaining: queuing plan-to-prd for next tick (chained from ${dispatchItem.id})`);
437
437
  const wiPath = path.join(MINIONS_DIR, 'work-items.json');
438
438
  let items = [];
439
- try { items = JSON.parse(fs.readFileSync(wiPath, 'utf8')); } catch {}
439
+ try { items = JSON.parse(fs.readFileSync(wiPath, 'utf8')); } catch (err) {
440
+ log('warn', `Failed to parse ${wiPath}: ${err.message} — creating .bak and starting fresh`);
441
+ try { fs.copyFileSync(wiPath, wiPath + '.bak'); } catch {}
442
+ }
440
443
  items.push({
441
444
  id: 'W-' + shared.uid(),
442
445
  title: `Convert plan to PRD: ${meta?.item?.title || planFile.name}`,
@@ -623,7 +626,7 @@ function syncPrsFromOutput(output, agentId, meta, config) {
623
626
  dirtyTargets.set(targetName, { prs: safeJson(prPath) || [], prPath });
624
627
  }
625
628
  const entry = dirtyTargets.get(targetName);
626
- if (entry.prs.some(p => p.id === fullId || String(p.id).includes(prId))) continue;
629
+ if (entry.prs.some(p => p.id === fullId || String(p.id) === String(prId))) continue;
627
630
 
628
631
  let title = meta?.item?.title || '';
629
632
  const titleMatch = output.match(new RegExp(`${prId}[^\\n]*?[—–-]\\s*([^\\n]+)`, 'i'));
@@ -694,7 +697,7 @@ function updatePrAfterReview(agentId, pr, project) {
694
697
  }
695
698
 
696
699
  shared.safeWrite(project ? shared.projectPrPath(project) : path.join(path.resolve(MINIONS_DIR, '..'), '.minions', 'pull-requests.json'), prs);
697
- log('info', `Updated ${pr.id} → minions review: ${minionsVerdict} by ${reviewerName}`);
700
+ log('info', `Updated ${pr.id} → minions review: ${target.reviewStatus} by ${reviewerName}`);
698
701
  createReviewFeedbackForAuthor(agentId, { ...pr, ...target }, config);
699
702
  }
700
703
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.300",
3
+ "version": "0.1.302",
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"