@yemi33/minions 0.1.425 → 0.1.427

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,6 +1,6 @@
1
1
  # Changelog
2
2
 
3
- ## 0.1.425 (2026-04-06)
3
+ ## 0.1.427 (2026-04-06)
4
4
 
5
5
  ### Features
6
6
  - version check interval on settings page
@@ -11,6 +11,8 @@
11
11
  - Convert remaining lifecycle.js safeWrite calls to mutateJsonFileLocked
12
12
 
13
13
  ### Fixes
14
+ - Notes & KB sidebar notifies on inbox changes and notes.md edits
15
+ - live output no longer clobbered by steering send
14
16
  - plan-to-prd playbook — don't include verify item, engine adds it
15
17
  - steering messages right-aligned with immediate feedback
16
18
  - CC retry now drains queued messages after success
@@ -2,6 +2,7 @@
2
2
 
3
3
  let livePollingInterval = null;
4
4
  let liveEventSource = null;
5
+ let _steerInFlight = false;
5
6
 
6
7
  function renderLiveChatMessage(raw) {
7
8
  const el = document.getElementById('live-messages');
@@ -43,7 +44,8 @@ function renderLiveChatMessage(raw) {
43
44
  // Human steering messages
44
45
  if (trimmed.startsWith('[human-steering]')) {
45
46
  const msg = trimmed.replace('[human-steering] ', '');
46
- 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(msg) + '</div>';
47
+ 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(msg) +
48
+ '<div style="font-size:9px;opacity:0.7;margin-top:2px">\u2713 Queued</div></div>';
47
49
  continue;
48
50
  }
49
51
 
@@ -111,6 +113,7 @@ function stopLivePolling() {
111
113
 
112
114
  async function refreshLiveOutput() {
113
115
  if (!currentAgentId || currentTab !== 'live') { stopLivePolling(); return; }
116
+ if (_steerInFlight) return; // Don't clobber immediate steering feedback
114
117
  try {
115
118
  const text = await fetch('/api/agent/' + currentAgentId + '/live?tail=16384').then(r => r.text());
116
119
  const el = document.getElementById('live-messages');
@@ -129,11 +132,14 @@ async function sendSteering() {
129
132
  const message = input.value.trim();
130
133
  input.value = '';
131
134
 
135
+ // Pause polling so the immediate feedback isn't clobbered
136
+ _steerInFlight = true;
137
+
132
138
  // Immediate feedback — show the message right away
133
139
  const el = document.getElementById('live-messages');
134
140
  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>';
141
+ 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) +
142
+ '<div id="steer-pending" style="font-size:9px;opacity:0.7;margin-top:2px">Sending...</div></div>';
137
143
  el.scrollTop = el.scrollHeight;
138
144
  }
139
145
 
@@ -145,13 +151,16 @@ async function sendSteering() {
145
151
  const pending = document.getElementById('steer-pending');
146
152
  if (!res.ok) {
147
153
  const d = await res.json().catch(() => ({}));
148
- if (pending) { pending.textContent = '\u26A0 Failed: ' + (d.error || 'unknown'); pending.style.color = 'var(--red)'; }
154
+ if (pending) { pending.textContent = '\u26A0 Failed: ' + (d.error || 'unknown'); pending.style.opacity = '1'; }
149
155
  } else {
150
- if (pending) { pending.textContent = '\u2713 Queued — agent will see this on next turn'; pending.style.color = 'var(--green)'; }
156
+ if (pending) pending.textContent = '\u2713 Queued — agent will see this on next turn';
151
157
  }
152
158
  } catch (e) {
153
159
  const pending = document.getElementById('steer-pending');
154
- if (pending) { pending.textContent = '\u26A0 ' + e.message; pending.style.color = 'var(--red)'; }
160
+ if (pending) { pending.textContent = '\u26A0 ' + e.message; pending.style.opacity = '1'; }
161
+ } finally {
162
+ // Resume polling after a short delay so the log has the [human-steering] line
163
+ setTimeout(() => { _steerInFlight = false; refreshLiveOutput(); }, 500);
155
164
  }
156
165
  }
157
166
 
@@ -7,7 +7,7 @@ const _pageCounters = {
7
7
  work: function(d) { return (d.workItems || []).length + '|' + (d.workItems || []).filter(function(w) { return w.status === 'done' || w.status === 'failed'; }).length; },
8
8
  plans: function(d) { return (d.prdProgress?.complete || 0) + '|' + (d.plans || []).length; },
9
9
  prs: function(d) { return (d.pullRequests || []).filter(function(p) { return p.status === 'merged'; }).length; },
10
- inbox: function(d) { return (d.inbox?.items || []).length; },
10
+ inbox: function(d) { return (d.inbox || []).length + '|' + (d.notes?.content || '').length; },
11
11
  meetings: function(d) { return (d.meetings || []).reduce(function(s, m) { return s + (m.round || 0); }, 0); },
12
12
  pipelines: function(d) { return (d.pipelines || []).reduce(function(s, p) { return s + (p.runs || []).length; }, 0); },
13
13
  schedule: function(d) { return (d.schedules || []).length; },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.425",
3
+ "version": "0.1.427",
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"