@yemi33/minions 0.1.1101 → 0.1.1103

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,40 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.1103 (2026-04-18)
4
+
5
+ ### Features
6
+ - seed realActivityMap at spawn time, stamp pid in live-output (#1200)
7
+
8
+ ### Fixes
9
+ - PRD info cache staleness and aggregate PR bleed-through (#1222)
10
+ - avoid no-op work item writes
11
+ - resilient claude binary resolution + surface spawn errors
12
+ - resolve native claude.exe from npm wrapper on Windows
13
+ - cap temp-agent creation at maxConcurrent per tick (#1219)
14
+ - reassign pending items from unspawned temp agents to idle named agents (#1204) (#1212)
15
+ - guard undefined agent in pending dispatch loop (closes #1206) (#1210)
16
+ - improve fallback meeting conclusion
17
+ - remove command center chevron
18
+ - stamp live-output.log stub before spawn (#1198)
19
+ - harden settings save and migrate pr poll config
20
+
21
+ ### Other
22
+ - refactor: clarify settings page section structure and PR polling dependencies
23
+ - refactor: extract _probeClaudePackage helper, use shared.log for spawn errors
24
+ - Make work item descriptions scrollable
25
+ - Use PAT for publish merges
26
+ - test(queries): add unit tests for invalidateDispatchCache/getInbox/getAgentCharter (#1214)
27
+ - test(shared): add unit tests for truncateTextBytes/tailTextBytes/execSilent/trackReviewMetric/parseCanonicalPrId (#1215)
28
+ - Fix publish workflow merge
29
+ - chore: raise default meeting round timeout
30
+ - Harden prompt context handling
31
+ - Harden loop watch conversion
32
+ - Add watches sidebar activity badge
33
+ - test(cli): add unit tests for handleCommand, start, stop, kill, spawn (#1191)
34
+ - chore: untrack pipeline files — local config only
35
+ - restore: recover daily-arch-improvement and weekly-dead-code-cleanup pipelines
36
+ - Harden CC stream resilience
37
+
3
38
  ## 0.1.1101 (2026-04-18)
4
39
 
5
40
  ### Features
@@ -488,7 +488,9 @@ function renderPrdProgress(prog) {
488
488
  }
489
489
 
490
490
  function renderE2eSection(planFile) {
491
- const prs = e2eByPlan[planFile] || [];
491
+ // Filter out abandoned E2E PRs — superseded aggregate branches should not
492
+ // linger in the E2E section after their constituents merged individually.
493
+ const prs = (e2eByPlan[planFile] || []).filter(pr => pr.status !== 'abandoned');
492
494
  const guide = guideByPlan[planFile];
493
495
  if (prs.length === 0 && !guide) return '';
494
496
  let html = '<div style="margin:6px 0 10px;padding:6px 10px;background:rgba(56,139,253,0.08);border:1px solid rgba(56,139,253,0.25);border-radius:4px">';
@@ -47,22 +47,33 @@ async function openSettings() {
47
47
  settingsField('Restart Grace Period', 'set-restartGracePeriod', e.restartGracePeriod || 1200000, 'ms', 'Grace period before orphan detection on restart') +
48
48
  settingsField('Meeting Round Timeout', 'set-meetingRoundTimeout', e.meetingRoundTimeout || 900000, 'ms', 'Auto-advance meeting round after this') +
49
49
  '</div>' +
50
+ '<h3 style="font-size:13px;color:var(--blue);margin-bottom:8px">Automation</h3>' +
50
51
  '<div style="display:flex;flex-direction:column;gap:6px;margin-bottom:16px">' +
51
52
  settingsToggle('Auto-approve Plans', 'set-autoApprovePlans', !!e.autoApprovePlans, 'PRDs are approved automatically without human review') +
52
53
  settingsToggle('Eval Loop', 'set-evalLoop', e.evalLoop !== false, 'Auto-review implementations and iterate fix cycles until pass') +
53
54
  settingsToggle('Auto-decompose', 'set-autoDecompose', e.autoDecompose !== false, 'Large implement items are auto-split into sub-tasks') +
54
55
  settingsToggle('Allow Temp Agents', 'set-allowTempAgents', !!e.allowTempAgents, 'Spawn ephemeral agents when all permanent agents are busy') +
55
56
  settingsToggle('Auto-archive Plans', 'set-autoArchive', !!e.autoArchive, 'Automatically archive plans after verify completes (off = manual archive via dashboard)') +
56
- settingsToggle('Auto-fix Builds', 'set-autoFixBuilds', e.autoFixBuilds !== false, 'Auto-dispatch fix agents when a PR build fails') +
57
- settingsToggle('Auto-fix Conflicts', 'set-autoFixConflicts', e.autoFixConflicts !== false, 'Auto-dispatch fix agents when a PR has merge conflicts') +
58
57
  settingsToggle('Auto-complete PRs', 'set-autoCompletePrs', !!e.autoCompletePrs, 'Auto-merge PRs when builds pass and review is approved (opt-in)') +
59
- settingsToggle('ADO Polling', 'set-adoPollEnabled', e.adoPollEnabled !== false, 'Poll ADO PR status and comments each tick (reconciliation always runs)') +
60
- settingsToggle('GitHub Polling', 'set-ghPollEnabled', e.ghPollEnabled !== false, 'Poll GitHub PR status and comments each tick (reconciliation always runs)') +
61
58
  '</div>' +
62
- '<div style="display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:16px">' +
63
- settingsField('PR Status Poll Frequency', 'set-prPollStatusEvery', e.prPollStatusEvery ?? e.adoPollStatusEvery ?? 12, 'ticks', 'Poll PR build/review/merge status every N ticks for both ADO and GitHub (~12 min at default tick rate)') +
64
- settingsField('PR Comments Poll Frequency', 'set-prPollCommentsEvery', e.prPollCommentsEvery ?? e.adoPollCommentsEvery ?? 12, 'ticks', 'Poll PR human comments every N ticks for both ADO and GitHub (~12 min at default tick rate)') +
59
+
60
+ '<h3 style="font-size:13px;color:var(--blue);margin-bottom:8px">PR Polling &amp; Dispatch Gates</h3>' +
61
+ '<div style="border:1px solid var(--border);border-radius:6px;padding:10px 12px;margin-bottom:16px">' +
62
+ '<div style="display:flex;flex-direction:column;gap:6px;margin-bottom:10px">' +
63
+ settingsToggle('ADO Polling', 'set-adoPollEnabled', e.adoPollEnabled !== false, 'Keeps ADO PR build results, votes, and comments fresh each tick — the two fix gates below are silently inert when this is off') +
64
+ '<div style="margin-left:20px;padding-left:10px;border-left:2px solid var(--border);display:flex;flex-direction:column;gap:4px">' +
65
+ settingsToggle('Auto-fix Builds', 'set-autoFixBuilds', e.autoFixBuilds !== false, 'Dispatch gate: auto-fix agent when build fails (downstream of ADO Polling)') +
66
+ settingsToggle('Auto-fix Conflicts', 'set-autoFixConflicts', e.autoFixConflicts !== false, 'Dispatch gate: auto-fix agent when merge conflict detected (downstream of ADO Polling)') +
67
+ '</div>' +
68
+ '</div>' +
69
+ settingsToggle('GitHub Polling', 'set-ghPollEnabled', e.ghPollEnabled !== false, 'Keeps GitHub PR build results, votes, and comments fresh each tick (reconciliation always runs regardless)') +
70
+ '<div style="display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:10px">' +
71
+ settingsField('Status Poll Frequency', 'set-prPollStatusEvery', e.prPollStatusEvery ?? e.adoPollStatusEvery ?? 12, 'ticks', 'Poll PR build/review/merge status every N ticks for both ADO and GitHub (~12 min at default tick rate)') +
72
+ settingsField('Comments Poll Frequency', 'set-prPollCommentsEvery', e.prPollCommentsEvery ?? e.adoPollCommentsEvery ?? 12, 'ticks', 'Poll PR human comments every N ticks for both ADO and GitHub (~12 min at default tick rate)') +
73
+ '</div>' +
65
74
  '</div>' +
75
+
76
+ '<h3 style="font-size:13px;color:var(--blue);margin-bottom:8px">Limits &amp; Thresholds</h3>' +
66
77
  '<div style="display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:16px">' +
67
78
  settingsField('Eval Max Iterations', 'set-evalMaxIterations', e.evalMaxIterations || 3, '', 'Max review→fix cycles before escalating (1-10)') +
68
79
  settingsField('Eval Max Cost', 'set-evalMaxCost', e.evalMaxCost === null || e.evalMaxCost === undefined ? '' : e.evalMaxCost, '$', 'USD ceiling per work item across all eval iterations (blank = no limit)') +
@@ -78,7 +89,7 @@ async function openSettings() {
78
89
  return '<div style="border:1px solid var(--border);border-radius:6px;padding:10px 12px">' +
79
90
  '<div style="font-size:12px;font-weight:600;margin-bottom:8px">' + escHtml(p.name) + '</div>' +
80
91
  '<div style="display:flex;flex-direction:column;gap:6px">' +
81
- settingsToggle('Discover from PRs', 'set-ws-prs-' + p.name, p.workSources.pullRequests.enabled, 'Auto-discover work from open pull requests') +
92
+ settingsToggle('Discover from PRs', 'set-ws-prs-' + p.name, p.workSources.pullRequests.enabled, 'Discovery gate: scan repo for open PRs and surface them as review tasks. Independent of ADO/GitHub polling — does not affect already-tracked PRs.') +
82
93
  settingsToggle('Discover from Work Items', 'set-ws-wi-' + p.name, p.workSources.workItems.enabled, 'Auto-discover work from ADO/GitHub work items') +
83
94
  '</div></div>';
84
95
  }).join('') +
package/engine/queries.js CHANGED
@@ -922,6 +922,8 @@ function _getPrdInputHash(projects) {
922
922
  for (const project of projects) {
923
923
  try { mtimes.push(fs.statSync(projectPrPath(project)).mtimeMs); } catch { mtimes.push(0); }
924
924
  }
925
+ // Static pr-links.json overrides (affect shared.getPrLinks(); missing project mtimes otherwise)
926
+ try { mtimes.push(fs.statSync(path.join(MINIONS_DIR, 'engine', 'pr-links.json')).mtimeMs); } catch { mtimes.push(0); }
925
927
  return { hash: mtimes.join(','), prdDirMtime, archiveDirMtime };
926
928
  }
927
929
 
@@ -1024,6 +1026,10 @@ function getPrdInfo(config) {
1024
1026
  const prLinks = shared.getPrLinks(); // { "PR-xxxx": ["P-xxxx", "P-yyyy"] }
1025
1027
  for (const [prId, itemIds] of Object.entries(prLinks)) {
1026
1028
  const pr = prById[prId];
1029
+ // Skip aggregate / E2E PRs from per-item mapping — they link to multiple items
1030
+ // (or are typed as verify) and would bleed through as duplicate entries on every
1031
+ // constituent item. They are surfaced via renderE2eSection instead.
1032
+ if ((itemIds || []).length > 1 || pr?.itemType === 'verify' || pr?.title?.startsWith('[E2E]')) continue;
1027
1033
  const project = projects.find(p => p.name === pr?._project) || projects[0] || null;
1028
1034
  const prNumber = shared.getPrNumber(pr || prId);
1029
1035
  const url = pr?.url || (project?.prUrlBase && prNumber != null ? project.prUrlBase + prNumber : '');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.1101",
3
+ "version": "0.1.1103",
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"