@yemi33/minions 0.1.168 → 0.1.170

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,21 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.170 (2026-04-02)
4
+
5
+ ### Engine
6
+ - engine/pipeline.js
7
+
8
+ ### Dashboard
9
+ - dashboard/js/command-center.js
10
+ - dashboard/js/render-pipelines.js
11
+ - dashboard/layout.html
12
+ - dashboard/styles.css
13
+
14
+ ## 0.1.169 (2026-04-02)
15
+
16
+ ### Engine
17
+ - engine/lifecycle.js
18
+
3
19
  ## 0.1.168 (2026-04-02)
4
20
 
5
21
  ### Engine
@@ -16,11 +16,11 @@ function toggleCommandCenter() {
16
16
  document.getElementById('cc-input').focus();
17
17
  ccRestoreMessages();
18
18
  } else if (_ccSending) {
19
- // Closing drawer while CC is processing — show animated badge
20
19
  showNotifBadge(document.getElementById('cc-toggle-btn'), 'processing');
21
20
  }
22
21
  }
23
22
 
23
+
24
24
  function ccNewSession() {
25
25
  fetch('/api/command-center/new-session', { method: 'POST' }).catch(() => {});
26
26
  _ccSessionId = null;
@@ -88,7 +88,7 @@ function ccAddMessage(role, html, skipSave) {
88
88
  const isUser = role === 'user';
89
89
  const div = document.createElement('div');
90
90
  const isAssistant = !isUser;
91
- div.className = isAssistant ? 'cc-msg-assistant md-content' : '';
91
+ div.className = isAssistant ? 'cc-msg-assistant' : '';
92
92
  div.style.cssText = 'padding:8px 12px;border-radius:8px;font-size:12px;line-height:1.6;max-width:95%;' +
93
93
  (isUser ? 'background:var(--blue);color:#fff;align-self:flex-end' : 'background:var(--surface2);color:var(--text);align-self:flex-start;border:1px solid var(--border);position:relative');
94
94
  div.innerHTML = (isAssistant && !html.includes('color:var(--red)') && !html.includes('cc-queued-pill') ? llmCopyBtn() : '') + html;
@@ -93,7 +93,7 @@ function renderPipelines(pipelines) {
93
93
 
94
94
  // Build step-progress indicator for pipelines with a run
95
95
  var progressHtml = '';
96
- var displayRun = activeRun || lastRun;
96
+ var displayRun = activeRun;
97
97
  if (displayRun && (p.stages || []).length > 0) {
98
98
  var totalStages = (p.stages || []).length;
99
99
  var completedCount = 0;
@@ -164,7 +164,7 @@ function openPipelineDetail(id) {
164
164
  '</div>';
165
165
 
166
166
  // Stage detail with progress bar
167
- var detailRun = activeRun || (p.runs || []).slice(-1)[0];
167
+ var detailRun = activeRun;
168
168
  if (detailRun && (p.stages || []).length > 0) {
169
169
  var dtotal = (p.stages || []).length;
170
170
  var ddone = 0, drun = 0, dfail = 0;
@@ -21,7 +21,7 @@
21
21
  <div class="engine-alert" id="engine-alert"></div>
22
22
 
23
23
  <!-- Command Center Drawer -->
24
- <div id="cc-drawer" style="display:none;position:fixed;top:0;right:0;bottom:0;width:420px;background:var(--surface);border-left:1px solid var(--border);z-index:300;flex-direction:column">
24
+ <div id="cc-drawer" style="display:none;position:fixed;top:0;right:0;bottom:0;width:420px;background:var(--surface);border-left:1px solid var(--border);z-index:300;flex-direction:column;overscroll-behavior:contain">
25
25
  <div id="cc-resize-handle" class="cc-resize-handle"></div>
26
26
  <div style="padding:12px 16px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between">
27
27
  <div style="display:flex;align-items:center;gap:8px">
@@ -567,11 +567,11 @@
567
567
  .detail-content .section { margin-bottom: var(--space-7); padding: var(--space-6); background: var(--surface2); border: 1px solid var(--border); border-radius: var(--radius-md); }
568
568
 
569
569
  /* Markdown content — consistent styling everywhere renderMd() is used */
570
- .md-content { font-family: 'Segoe UI', system-ui, sans-serif; font-size: 12px; line-height: 1.6; white-space: normal; word-break: break-word; }
570
+ .md-content { font-family: 'Segoe UI', system-ui, sans-serif; font-size: 12px; line-height: 1.6; white-space: normal; word-break: break-word; overflow-x: auto; }
571
571
  .md-content pre { font-family: Consolas, 'Courier New', monospace; white-space: pre-wrap; }
572
572
  .md-content code { font-family: Consolas, 'Courier New', monospace; }
573
- .md-content table { border-collapse: collapse; width: 100%; margin: 6px 0; }
574
- .md-content th, .md-content td { padding: 4px 8px; border: 1px solid var(--border); text-align: left; font-size: 11px; }
573
+ .md-content table { border-collapse: collapse; width: 100%; margin: 6px 0; table-layout: fixed; }
574
+ .md-content th, .md-content td { padding: 4px 8px; border: 1px solid var(--border); text-align: left; font-size: 11px; word-wrap: break-word; overflow-wrap: break-word; }
575
575
  .md-content th { background: var(--surface); font-weight: 600; }
576
576
  .status-line { display: flex; align-items: center; gap: var(--space-5); padding: var(--space-5) var(--space-7); background: var(--bg); border-bottom: 1px solid var(--border); font-size: var(--text-md); }
577
577
 
@@ -478,6 +478,7 @@ function updateWorkItemStatus(meta, status, reason) {
478
478
  if (status === 'done') {
479
479
  delete target.failReason;
480
480
  delete target.failedAt;
481
+ delete target._retryCount;
481
482
  target.completedAt = ts();
482
483
  } else if (status === 'failed') {
483
484
  if (reason) target.failReason = reason;
@@ -345,7 +345,7 @@ function isStageComplete(stage, stageState, run, config) {
345
345
  if (ids.length === 0) return false;
346
346
  return ids.every(id => {
347
347
  const wi = workItems.find(w => w.id === id);
348
- return wi && (wi.status === 'done' || wi.status === 'failed');
348
+ return !wi || wi.status === 'done' || wi.status === 'failed'; // missing = treat as done
349
349
  });
350
350
  }
351
351
  case 'meeting': {
@@ -370,7 +370,7 @@ function isStageComplete(stage, stageState, run, config) {
370
370
  const prdWiIds = artifacts.workItems || [];
371
371
  const prdDone = prdWiIds.every(id => {
372
372
  const wi = all.find(w => w.id === id);
373
- return wi && wi.status === 'done';
373
+ return !wi || wi.status === 'done' || wi.status === 'failed'; // missing = treat as done
374
374
  });
375
375
  if (!prdDone) return false;
376
376
 
@@ -418,7 +418,7 @@ function isStageComplete(stage, stageState, run, config) {
418
418
  if (implementIds.length === 0 && artifacts.prds?.length > 0) return false; // items not materialized yet
419
419
  return implementIds.every(id => {
420
420
  const wi = all.find(w => w.id === id);
421
- return wi && (wi.status === 'done' || wi.status === 'failed');
421
+ return !wi || wi.status === 'done' || wi.status === 'failed'; // missing = treat as done
422
422
  });
423
423
  }
424
424
  case 'merge-prs': {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.168",
3
+ "version": "0.1.170",
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"