@yemi33/minions 0.1.422 → 0.1.424

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,8 +1,9 @@
1
1
  # Changelog
2
2
 
3
- ## 0.1.422 (2026-04-06)
3
+ ## 0.1.424 (2026-04-06)
4
4
 
5
5
  ### Features
6
+ - version check interval on settings page
6
7
  - configurable version check interval, default 1 hour
7
8
  - Dashboard robustness — raw string fixes, plan steering clarity, safeWrite race fix
8
9
  - Low-priority cleanup: dedupe regex, consolidate streaming parse, add path validation alignment
@@ -10,6 +11,7 @@
10
11
  - Convert remaining lifecycle.js safeWrite calls to mutateJsonFileLocked
11
12
 
12
13
  ### Fixes
14
+ - steering messages right-aligned with immediate feedback
13
15
  - CC retry now drains queued messages after success
14
16
  - address review feedback — pipeline.js socket leak and magic numbers
15
17
 
@@ -67,7 +67,7 @@ function renderDetailContent(detail, tab) {
67
67
  } else if (tab === 'live') {
68
68
  el.innerHTML =
69
69
  '<div id="live-chat" style="display:flex;flex-direction:column;height:60vh">' +
70
- '<div id="live-messages" style="flex:1;overflow-y:auto;padding:8px;font-size:11px;line-height:1.6"></div>' +
70
+ '<div id="live-messages" style="flex:1;overflow-y:auto;padding:8px;font-size:11px;line-height:1.6;display:flex;flex-direction:column"></div>' +
71
71
  '<div id="live-status-bar" style="padding:4px 8px;display:flex;align-items:center;gap:8px;border-top:1px solid var(--border)">' +
72
72
  '<span class="pulse"></span><span id="live-status-label" style="font-size:11px;color:var(--green)">Streaming live</span>' +
73
73
  '<button class="pr-pager-btn" onclick="refreshLiveOutput()" style="font-size:10px">Refresh</button>' +
@@ -129,16 +129,30 @@ async function sendSteering() {
129
129
  const message = input.value.trim();
130
130
  input.value = '';
131
131
 
132
+ // Immediate feedback — show the message right away
133
+ const el = document.getElementById('live-messages');
134
+ if (el) {
135
+ el.innerHTML += '<div style="align-self:flex-end;background:var(--blue);color:#fff;padding:6px 12px;border-radius:12px 12px 2px 12px;max-width:80%;margin:4px 0;font-size:12px">' + escHtml(message) + '</div>';
136
+ el.innerHTML += '<div id="steer-pending" style="align-self:flex-end;font-size:10px;color:var(--muted);padding:0 4px;margin-bottom:4px">Sending...</div>';
137
+ el.scrollTop = el.scrollHeight;
138
+ }
139
+
132
140
  try {
133
141
  const res = await fetch('/api/agents/steer', {
134
142
  method: 'POST', headers: { 'Content-Type': 'application/json' },
135
143
  body: JSON.stringify({ agent: currentAgentId, message })
136
144
  });
145
+ const pending = document.getElementById('steer-pending');
137
146
  if (!res.ok) {
138
147
  const d = await res.json().catch(() => ({}));
139
- alert('Steering failed: ' + (d.error || 'unknown'));
148
+ if (pending) { pending.textContent = '\u26A0 Failed: ' + (d.error || 'unknown'); pending.style.color = 'var(--red)'; }
149
+ } else {
150
+ if (pending) { pending.textContent = '\u2713 Queued — agent will see this on next turn'; pending.style.color = 'var(--green)'; }
140
151
  }
141
- } catch (e) { alert('Error: ' + e.message); }
152
+ } catch (e) {
153
+ const pending = document.getElementById('steer-pending');
154
+ if (pending) { pending.textContent = '\u26A0 ' + e.message; pending.style.color = 'var(--red)'; }
155
+ }
142
156
  }
143
157
 
144
158
  window.MinionsLive = { renderLiveChatMessage, startLiveStream, stopLiveStream, startLivePolling, stopLivePolling, refreshLiveOutput, sendSteering };
@@ -47,6 +47,7 @@ async function openSettings() {
47
47
  '<div style="display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:16px">' +
48
48
  settingsField('Eval Max Iterations', 'set-evalMaxIterations', e.evalMaxIterations || 3, '', 'Max review→fix cycles before escalating (1-10)') +
49
49
  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)') +
50
+ settingsField('Version Check Interval', 'set-versionCheckInterval', e.versionCheckInterval || 3600000, 'ms', 'How often to check npm for updates (default: 1 hour)') +
50
51
  '</div>' +
51
52
 
52
53
  '<h3 style="font-size:13px;color:var(--blue);margin-bottom:8px">Claude CLI</h3>' +
@@ -164,6 +165,7 @@ async function saveSettings() {
164
165
  allowTempAgents: document.getElementById('set-allowTempAgents').checked,
165
166
  evalMaxIterations: document.getElementById('set-evalMaxIterations').value,
166
167
  evalMaxCost: document.getElementById('set-evalMaxCost').value || null,
168
+ versionCheckInterval: document.getElementById('set-versionCheckInterval').value,
167
169
  };
168
170
 
169
171
  const claudePayload = {
package/dashboard.js CHANGED
@@ -3358,6 +3358,7 @@ What would you like to discuss or change? When you're happy, say "approve" and I
3358
3358
  worktreeCreateTimeout: [60000], worktreeCreateRetries: [0, 3],
3359
3359
  idleAlertMinutes: [1], shutdownTimeout: [30000], restartGracePeriod: [60000],
3360
3360
  meetingRoundTimeout: [60000],
3361
+ versionCheckInterval: [60000],
3361
3362
  };
3362
3363
  for (const [key, [min, max]] of Object.entries(numericFields)) {
3363
3364
  if (e[key] !== undefined) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.422",
3
+ "version": "0.1.424",
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"