@yemi33/minions 0.1.1102 → 0.1.1104

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,11 +1,12 @@
1
1
  # Changelog
2
2
 
3
- ## 0.1.1102 (2026-04-18)
3
+ ## 0.1.1104 (2026-04-18)
4
4
 
5
5
  ### Features
6
6
  - seed realActivityMap at spawn time, stamp pid in live-output (#1200)
7
7
 
8
8
  ### Fixes
9
+ - preserve VERDICT marker by tail-slicing agent output (#1234) (#1270)
9
10
  - PRD info cache staleness and aggregate PR bleed-through (#1222)
10
11
  - avoid no-op work item writes
11
12
  - resilient claude binary resolution + surface spawn errors
@@ -18,6 +19,40 @@
18
19
  - stamp live-output.log stub before spawn (#1198)
19
20
  - harden settings save and migrate pr poll config
20
21
 
22
+ ### Other
23
+ - refactor: clarify settings page section structure and PR polling dependencies
24
+ - refactor: extract _probeClaudePackage helper, use shared.log for spawn errors
25
+ - Make work item descriptions scrollable
26
+ - Use PAT for publish merges
27
+ - test(queries): add unit tests for invalidateDispatchCache/getInbox/getAgentCharter (#1214)
28
+ - test(shared): add unit tests for truncateTextBytes/tailTextBytes/execSilent/trackReviewMetric/parseCanonicalPrId (#1215)
29
+ - Fix publish workflow merge
30
+ - chore: raise default meeting round timeout
31
+ - Harden prompt context handling
32
+ - Harden loop watch conversion
33
+ - Add watches sidebar activity badge
34
+ - test(cli): add unit tests for handleCommand, start, stop, kill, spawn (#1191)
35
+ - chore: untrack pipeline files — local config only
36
+ - restore: recover daily-arch-improvement and weekly-dead-code-cleanup pipelines
37
+ - Harden CC stream resilience
38
+
39
+ ## 0.1.1101 (2026-04-18)
40
+
41
+ ### Features
42
+ - seed realActivityMap at spawn time, stamp pid in live-output (#1200)
43
+
44
+ ### Fixes
45
+ - avoid no-op work item writes
46
+ - resilient claude binary resolution + surface spawn errors
47
+ - resolve native claude.exe from npm wrapper on Windows
48
+ - cap temp-agent creation at maxConcurrent per tick (#1219)
49
+ - reassign pending items from unspawned temp agents to idle named agents (#1204) (#1212)
50
+ - guard undefined agent in pending dispatch loop (closes #1206) (#1210)
51
+ - improve fallback meeting conclusion
52
+ - remove command center chevron
53
+ - stamp live-output.log stub before spawn (#1198)
54
+ - harden settings save and migrate pr poll config
55
+
21
56
  ### Other
22
57
  - refactor: extract _probeClaudePackage helper, use shared.log for spawn errors
23
58
  - Make work item descriptions scrollable
@@ -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/llm.js CHANGED
@@ -149,7 +149,9 @@ function _createStreamAccumulator({
149
149
  if (obj.session_id) sessionId = obj.session_id;
150
150
  if (obj.type === 'result') {
151
151
  if (typeof obj.result === 'string') {
152
- text = maxTextLength ? obj.result.slice(0, maxTextLength) : obj.result;
152
+ // Tail-slice: VERDICTs, completion blocks, and PR URLs live at the END
153
+ // of agent output. Head-slicing dropped them (#1234).
154
+ text = maxTextLength ? obj.result.slice(-maxTextLength) : obj.result;
153
155
  }
154
156
  if (obj.total_cost_usd || obj.usage) {
155
157
  usage = {
@@ -166,7 +168,8 @@ function _createStreamAccumulator({
166
168
  if (obj.type === 'assistant' && Array.isArray(obj.message?.content)) {
167
169
  for (const block of obj.message.content) {
168
170
  if (block?.type === 'text' && block.text) {
169
- text = maxTextLength ? block.text.slice(0, maxTextLength) : block.text;
171
+ // Tail-slice for consistency with the result branch (see #1234).
172
+ text = maxTextLength ? block.text.slice(-maxTextLength) : block.text;
170
173
  if (onChunk && block.text !== lastTextSent) {
171
174
  lastTextSent = block.text;
172
175
  onChunk(block.text);
package/engine/shared.js CHANGED
@@ -608,7 +608,11 @@ function parseStreamJsonOutput(raw, { maxTextLength = 0 } = {}) {
608
608
 
609
609
  function extractResult(obj) {
610
610
  if (obj.type !== 'result') return false;
611
- if (obj.result) text = maxTextLength ? obj.result.slice(0, maxTextLength) : obj.result;
611
+ // Slice from the tail, not the head — review VERDICTs, structured completion
612
+ // blocks, PR URLs, and agent conclusions all appear at the END of the output.
613
+ // Head-slicing truncated VERDICTs and caused review work items to be
614
+ // re-dispatched up to maxRetries times despite successful completion (#1234).
615
+ if (obj.result) text = maxTextLength ? obj.result.slice(-maxTextLength) : obj.result;
612
616
  if (obj.session_id) sessionId = obj.session_id;
613
617
  if (obj.total_cost_usd || obj.usage) {
614
618
  usage = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.1102",
3
+ "version": "0.1.1104",
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"