@yemi33/minions 0.1.906 → 0.1.907

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,12 +1,13 @@
1
1
  # Changelog
2
2
 
3
- ## 0.1.906 (2026-04-12)
3
+ ## 0.1.907 (2026-04-13)
4
4
 
5
5
  ### Features
6
6
  - add weekly dead code & deprecated cleanup pipeline
7
7
  - add red dot notification on CC tab when response completes (#934) (#946)
8
8
 
9
9
  ### Fixes
10
+ - PRD item display dispatched/in-progress status conflation (closes #950) (#955)
10
11
  - remove KB watchdog — checkpoint never written, restore never worked
11
12
  - make KB sweep endpoint async with status polling (#933)
12
13
  - prohibit agents from self-merging their own PRs
@@ -92,7 +92,7 @@ function renderPrdProgress(prog) {
92
92
  const total = items.length;
93
93
  if (total === 0) return '';
94
94
  const done = items.filter(i => i.status === 'done').length;
95
- const inProgress = items.filter(i => i.status === 'dispatched').length;
95
+ const inProgress = items.filter(i => i.status === 'in-progress').length;
96
96
  const failed = items.filter(i => i.status === 'failed').length;
97
97
  const paused = items.filter(i => i.status === 'paused').length;
98
98
  const updated = items.filter(i => i.status === 'updated').length;
@@ -111,7 +111,7 @@ function renderPrdProgress(prog) {
111
111
 
112
112
  const bar = '<div class="prd-progress-bar">' +
113
113
  '<div class="seg complete" style="width:' + pct(done) + '%"></div>' +
114
- '<div class="seg dispatched" style="width:' + pct(inProgress) + '%"></div>' +
114
+ '<div class="seg in-progress" style="width:' + pct(inProgress) + '%"></div>' +
115
115
  '<div class="seg updated" style="width:' + pct(updated) + '%"></div>' +
116
116
  '<div class="seg paused" style="width:' + pct(paused) + '%"></div>' +
117
117
  '<div class="seg missing" style="width:' + pct(missing) + '%"></div>' +
@@ -120,23 +120,23 @@ function renderPrdProgress(prog) {
120
120
  return '<div style="margin:6px 0 8px 0;padding:0 8px">' + stats + '<div style="margin-top:8px">' + bar + '</div></div>';
121
121
  }
122
122
 
123
- // PRD item statuses: missing → dispatched → done
123
+ // PRD item statuses: missing → in-progress → done
124
124
  const statusBadge = (s, itemId) => {
125
125
  // Decomposed: show WIP if children still running, DONE if all children done
126
126
  if (s === 'decomposed' && itemId) {
127
127
  const children = (window._lastWorkItems || []).filter(w => w.parent_id === itemId);
128
128
  const allChildrenDone = children.length > 0 && children.every(c => c.status === 'done');
129
129
  if (allChildrenDone) { s = 'done'; }
130
- else { s = 'dispatched'; } // show as WIP while children are running
130
+ else { s = 'in-progress'; } // show as WIP while children are running
131
131
  }
132
132
  const styles = {
133
133
  'done': 'background:rgba(63,185,80,0.15);color:var(--green)',
134
- 'dispatched': 'background:rgba(210,153,34,0.15);color:var(--yellow);animation:wipPulse 1.5s infinite',
134
+ 'in-progress': 'background:rgba(210,153,34,0.15);color:var(--yellow);animation:wipPulse 1.5s infinite',
135
135
  'failed': 'background:rgba(248,81,73,0.15);color:var(--red)',
136
136
  'paused': 'background:rgba(139,148,158,0.15);color:var(--muted)',
137
137
  'updated': 'background:rgba(188,140,255,0.15);color:var(--purple)',
138
138
  };
139
- const labels = { 'done': 'DONE', 'dispatched': 'WIP', 'failed': 'FAIL', 'paused': 'PAUSED', 'missing': '\u2014', 'updated': 'REDO' };
139
+ const labels = { 'done': 'DONE', 'in-progress': 'WIP', 'failed': 'FAIL', 'paused': 'PAUSED', 'missing': '\u2014', 'updated': 'REDO' };
140
140
  const style = styles[s] || 'background:var(--surface);color:var(--muted)';
141
141
  const label = labels[s] || '—';
142
142
  return '<span style="font-size:9px;font-weight:700;padding:2px 6px;border-radius:3px;letter-spacing:0.5px;white-space:nowrap;' + style + '">' + label + '</span>';
@@ -253,7 +253,7 @@ function renderPrdProgress(prog) {
253
253
 
254
254
  const renderGroupHeader = (g) => {
255
255
  const done = g.items.filter(i => i.status === 'done').length;
256
- const wip = g.items.filter(i => i.status === 'dispatched' || i.status === 'pending').length;
256
+ const wip = g.items.filter(i => i.status === 'in-progress' || i.status === 'missing').length;
257
257
  const summary = (g.summary || '').replace(/^Convert plan to PRD:\s*/i, '').slice(0, 80);
258
258
  const isAwaitingApproval = g.planStatus === 'awaiting-approval';
259
259
  const isPaused = g.planStatus === 'paused';
@@ -372,7 +372,7 @@ function renderPrdProgress(prog) {
372
372
  return 'var(--yellow)'; // children still running
373
373
  }
374
374
  if (s === 'done') return 'var(--green)';
375
- if (s === 'dispatched') return 'var(--yellow)';
375
+ if (s === 'in-progress') return 'var(--yellow)';
376
376
  if (s === 'failed') return 'var(--red)';
377
377
  if (s === 'updated') return 'var(--purple)';
378
378
  if (s === 'paused') return 'var(--muted)';
@@ -394,7 +394,7 @@ function renderPrdProgress(prog) {
394
394
  const agentInfo = agentId ? (agentData.find(a => a.id === agentId) || {}) : null;
395
395
  const agentDisplay = agentInfo ? (agentInfo.emoji || '') + ' ' + escHtml(agentInfo.name || agentId) : (agentId ? escHtml(agentId) : '');
396
396
  const deps = (i.depends_on || []).join(', ');
397
- const wipAnim = i.status === 'dispatched' ? 'animation:prdWipPulse 2s infinite;' : '';
397
+ const wipAnim = i.status === 'in-progress' ? 'animation:prdWipPulse 2s infinite;' : '';
398
398
  html += '<div onclick="prdItemEdit(\'' + src + '\',\'' + iid + '\')" ' +
399
399
  'style="background:var(--surface2);border:1px solid var(--border);border-left:3px solid ' + borderColor + ';' + wipAnim +
400
400
  'border-radius:4px;padding:6px 8px;margin-bottom:6px;cursor:pointer;font-size:11px">' +
@@ -658,7 +658,7 @@ async function prdItemEdit(source, itemId) {
658
658
  let completionHtml = '';
659
659
  const isDone = item.status === 'done';
660
660
  const isFailed = item.status === 'failed';
661
- const isActive = item.status === 'dispatched' || item.status === 'pending';
661
+ const isActive = item.status === 'in-progress' || item.status === 'missing';
662
662
 
663
663
  if (isDone || isFailed || isActive) {
664
664
  const agent = wi?.dispatched_to || completedEntry?.agent || '';
@@ -170,7 +170,7 @@
170
170
  .prd-progress-bar { width: 100%; height: 20px; background: var(--bg); border-radius: var(--radius-xl); overflow: hidden; display: flex; margin-bottom: var(--space-6); border: 1px solid var(--border); }
171
171
  .prd-progress-bar .seg { height: 100%; transition: width 0.5s ease; }
172
172
  .prd-progress-bar .seg.complete { background: var(--green); }
173
- .prd-progress-bar .seg.dispatched { background: var(--yellow); }
173
+ .prd-progress-bar .seg.in-progress { background: var(--yellow); }
174
174
  .prd-progress-bar .seg.updated { background: var(--purple); }
175
175
  .prd-progress-bar .seg.paused { background: var(--muted); opacity: 0.5; }
176
176
  .prd-progress-bar .seg.missing { background: var(--border); }
@@ -179,7 +179,7 @@
179
179
  .prd-legend-item { display: flex; align-items: center; gap: 5px; font-size: var(--text-base); color: var(--muted); }
180
180
  .prd-legend-dot { width: 10px; height: 10px; border-radius: 2px; }
181
181
  .prd-legend-dot.complete { background: var(--green); }
182
- .prd-legend-dot.dispatched { background: var(--yellow); }
182
+ .prd-legend-dot.in-progress { background: var(--yellow); }
183
183
  .prd-legend-dot.updated { background: var(--purple); }
184
184
  .prd-legend-dot.missing { background: var(--border); }
185
185
 
@@ -210,7 +210,7 @@
210
210
  .prd-items-list { display: flex; flex-direction: column; gap: 3px; max-height: 400px; overflow-y: auto; padding: 0 8px; }
211
211
  .prd-item-row { display: flex; align-items: center; gap: 8px; padding: 4px 8px; border-radius: var(--radius-sm); font-size: var(--text-base); background: var(--surface2); border: 1px solid var(--border); border-left: 3px solid var(--border); }
212
212
  .prd-item-row.st-done { border-left-color: var(--green); }
213
- .prd-item-row.st-dispatched { border-left-color: var(--yellow); animation: prdWipPulse 2s infinite; }
213
+ .prd-item-row.st-in-progress { border-left-color: var(--yellow); animation: prdWipPulse 2s infinite; }
214
214
  @keyframes prdWipPulse { 0%, 100% { box-shadow: 0 0 0 0 rgba(210,153,34,0); } 50% { box-shadow: 0 0 0 4px rgba(210,153,34,0.2); } }
215
215
  .prd-item-row.st-failed { border-left-color: var(--red); }
216
216
  .prd-item-row.st-needs-human-review { border-left-color: var(--orange); }
package/engine/queries.js CHANGED
@@ -952,7 +952,7 @@ function getPrdInfo(config) {
952
952
  // PRD JSON status is the source of truth — kept in sync with work item by syncPrdItemStatus.
953
953
  // Map from PRD JSON values to display values (pending → missing for undispatched items)
954
954
  // Augment each item with execution metadata from the work item.
955
- const statusDisplay = { pending: 'missing' };
955
+ const statusDisplay = { pending: 'missing', dispatched: 'in-progress' };
956
956
  for (const item of items) {
957
957
  const wi = wiById[item.id];
958
958
  // PRD 'updated'/'missing' = intentional rework signal — takes priority over a done work item (#930).
@@ -973,7 +973,7 @@ function getPrdInfo(config) {
973
973
  const byStatus = {};
974
974
  items.forEach(item => { const s = item.status || 'missing'; byStatus[s] = byStatus[s] || []; byStatus[s].push(item); });
975
975
  const complete = (byStatus['done'] || []).length + (byStatus['decomposed'] || []).length;
976
- const inProgress = (byStatus['dispatched'] || []).length;
976
+ const inProgress = (byStatus['in-progress'] || []).length;
977
977
  const paused = (byStatus['paused'] || []).length;
978
978
  const missing = (byStatus['missing'] || []).length;
979
979
  const donePercent = total > 0 ? Math.round((complete / total) * 100) : 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.906",
3
+ "version": "0.1.907",
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"