@yemi33/minions 0.1.762 → 0.1.763

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,12 @@
1
1
  # Changelog
2
2
 
3
- ## 0.1.762 (2026-04-10)
3
+ ## 0.1.763 (2026-04-10)
4
+
5
+ ### Features
6
+ - pulsing blue dot on CC tabs with active requests
4
7
 
5
8
  ### Fixes
9
+ - only trigger verify when all PRD items succeed, not on partial failure
6
10
  - clean handoff between restore and original stream intervals
7
11
  - prevent competing thinking intervals on tab switch
8
12
 
@@ -244,7 +244,7 @@ function ccRenderTabBar() {
244
244
  for (var i = 0; i < _ccTabs.length; i++) {
245
245
  var t = _ccTabs[i];
246
246
  var isActive = t.id === _ccActiveTabId;
247
- html += '<div class="cc-tab' + (isActive ? ' active' : '') + '" onclick="ccSwitchTab(\'' + t.id + '\')" title="' + escHtml(t.title) + '">';
247
+ html += '<div class="cc-tab' + (isActive ? ' active' : '') + (t._sending ? ' working' : '') + '" onclick="ccSwitchTab(\'' + t.id + '\')" title="' + escHtml(t.title) + '">';
248
248
  html += '<span class="cc-tab-text">' + escHtml(t.title) + '</span>';
249
249
  html += '<span class="cc-tab-close" onclick="event.stopPropagation();ccCloseTab(\'' + t.id + '\')">&times;</span>';
250
250
  html += '</div>';
@@ -433,7 +433,8 @@ async function _ccDoSend(message, skipUserMsg) {
433
433
  activeTab._sending = true;
434
434
  activeTab._sendStartedAt = Date.now();
435
435
  activeTab._abortController = new AbortController();
436
- _ccSending = true; // UI indicator
436
+ _ccSending = true;
437
+ ccRenderTabBar();
437
438
  var _wasAborted = false;
438
439
  try { localStorage.setItem('cc-sending', JSON.stringify({ sending: true, startedAt: Date.now() })); } catch {}
439
440
 
@@ -635,9 +636,9 @@ async function _ccDoSend(message, skipUserMsg) {
635
636
  } finally {
636
637
  if (activeTab) { activeTab._sending = false; activeTab._abortController = null; delete activeTab._streamedText; delete activeTab._toolsUsed; delete activeTab._sendStartedAt; }
637
638
  _ccSending = (_ccTabs.some(function(t) { return t._sending; }));
639
+ ccRenderTabBar();
638
640
  try { clearInterval(phaseTimer); } catch { /* may not be defined if error before reader */ }
639
641
  try { localStorage.removeItem('cc-sending'); } catch {}
640
- // Show notification badge on CC button if drawer is closed
641
642
  if (!_ccOpen) showNotifBadge(document.getElementById('cc-toggle-btn'));
642
643
  }
643
644
  return _wasAborted;
@@ -624,6 +624,9 @@
624
624
  .cc-tab { padding: 4px 10px; font-size: 10px; border: 1px solid var(--border); border-bottom: none; border-radius: 6px 6px 0 0; background: var(--surface2); color: var(--muted); cursor: pointer; white-space: nowrap; max-width: 140px; display: inline-flex; align-items: center; gap: 2px; flex-shrink: 0; margin-bottom: -1px; position: relative; }
625
625
  .cc-tab-text { overflow: hidden; text-overflow: ellipsis; flex: 1; min-width: 0; }
626
626
  .cc-tab.active { color: var(--text); background: var(--bg); border-color: var(--border); z-index: 1; font-weight: 600; }
627
+ .cc-tab.working { border-color: var(--blue); }
628
+ .cc-tab.working::before { content: ''; position: absolute; top: 3px; left: 5px; width: 4px; height: 4px; border-radius: 50%; background: var(--blue); animation: pulse 1.5s infinite; }
629
+ .cc-tab.working.active::before { background: var(--blue); }
627
630
  .cc-tab-close { flex-shrink: 0; margin-left: 4px; opacity: 0; cursor: pointer; font-size: 12px; line-height: 1; }
628
631
  .cc-tab:hover .cc-tab-close { opacity: 0.5; }
629
632
  .cc-tab-close:hover { opacity: 1; color: var(--red); }
@@ -185,7 +185,7 @@ function checkPlanCompletion(meta, config) {
185
185
 
186
186
  // 4. Create verification work item (build, test, start webapp, write testing guide)
187
187
  const existingVerify = allWorkItems.find(w => w.sourcePlan === planFile && w.itemType === 'verify');
188
- if (!existingVerify && doneItems.length > 0) {
188
+ if (!existingVerify && doneItems.length > 0 && failedItems.length === 0) {
189
189
  const verifyId = 'PL-' + shared.uid();
190
190
  const planSlug = planFile.replace('.json', '');
191
191
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.762",
3
+ "version": "0.1.763",
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"