@yemi33/minions 0.1.2418 → 0.1.2419

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.
@@ -626,6 +626,15 @@ function ccAbort() {
626
626
  }
627
627
  }
628
628
 
629
+ function _ccSetButtonProcessing(on) {
630
+ // Toggle the animated gradient shimmer on the Command Center header button while
631
+ // CC is working. Driven purely by _ccSending so it reflects busy state whether the
632
+ // drawer is open or closed. Replaces the old top-right "..." processing notif-badge.
633
+ var btn = document.getElementById('cc-toggle-btn');
634
+ if (!btn) return;
635
+ btn.classList.toggle('cc-processing', !!on);
636
+ }
637
+
629
638
  function _ccRenderSuggestedPrompts() {
630
639
  var el = document.getElementById('cc-messages');
631
640
  var tab = _ccActiveTab();
@@ -656,9 +665,10 @@ function toggleCommandCenter() {
656
665
  ccRenderTabBar();
657
666
  document.getElementById('cc-input').focus();
658
667
  ccRestoreMessages();
659
- } else if (_ccSending) {
660
- showNotifBadge(document.getElementById('cc-toggle-btn'), 'processing');
661
668
  }
669
+ // Shimmer persists on the button element across open/close — it is driven by
670
+ // _ccSending (see _ccSetButtonProcessing call sites), so reopening while still
671
+ // sending keeps it consistent without any extra work here.
662
672
  }
663
673
 
664
674
 
@@ -770,6 +780,7 @@ function ccCloseTab(id) {
770
780
  closingTab._sending = false;
771
781
  closingTab._queue = [];
772
782
  _ccSending = (_ccTabs.some(function(t) { return t._sending; }));
783
+ _ccSetButtonProcessing(_ccSending);
773
784
  }
774
785
  // Tabs are non-expiring on the server — explicit close is the only path that
775
786
  // removes the persisted session. Fire-and-forget DELETE so closing a tab
@@ -915,6 +926,7 @@ function ccRestoreMessages() {
915
926
  // Only restore sending state if very recent (< 10s) — page refresh kills the SSE stream
916
927
  if (sendingState?.sending && (Date.now() - sendingState.startedAt) < 10000) {
917
928
  _ccSending = true;
929
+ _ccSetButtonProcessing(true);
918
930
  var elapsed = Date.now() - sendingState.startedAt;
919
931
  var thinking = document.createElement('div');
920
932
  thinking.id = 'cc-thinking';
@@ -1128,6 +1140,7 @@ async function _ccDoSend(message, skipUserMsg, forceTabId, intentMetadata) {
1128
1140
  activeTab._abortController = new AbortController();
1129
1141
  activeTab._userAborted = false;
1130
1142
  _ccSending = true;
1143
+ _ccSetButtonProcessing(true);
1131
1144
  ccRenderTabBar();
1132
1145
  var _wasAborted = false;
1133
1146
  try { localStorage.setItem('cc-sending', JSON.stringify({ sending: true, startedAt: Date.now() })); } catch {}
@@ -1551,6 +1564,8 @@ async function _ccDoSend(message, skipUserMsg, forceTabId, intentMetadata) {
1551
1564
  } finally {
1552
1565
  if (activeTab) { activeTab._sending = false; activeTab._abortController = null; activeTab._429retries = 0; delete activeTab._segments; delete activeTab._sendStartedAt; delete activeTab._userAborted; }
1553
1566
  _ccSending = (_ccTabs.some(function(t) { return t._sending; }));
1567
+ // Clear the button shimmer before the completion "done" red-dot badge below.
1568
+ _ccSetButtonProcessing(_ccSending);
1554
1569
  // Mark tab unread if response completed on a background tab or while drawer is closed
1555
1570
  if (activeTab && !_wasAborted && (activeTab.id !== _ccActiveTabId || !_ccOpen)) activeTab._unread = true;
1556
1571
  ccRenderTabBar();
@@ -981,6 +981,27 @@
981
981
  .try-slim-ux-btn:disabled { opacity: 0.6; cursor: default; animation: none; }
982
982
  @media (prefers-reduced-motion: reduce) { .try-slim-ux-btn { animation: none; } }
983
983
 
984
+ /* Command Center header button — clearly animated "working" indicator: a silver sheen
985
+ sweeps continuously across the button. Keeps the button's idle blue-on-dark identity
986
+ (blue text + blue border); the sweep is a translucent streak over the dark
987
+ background, not a solid fill.
988
+ Uses background-image (NOT the `background` shorthand): the shorthand also resets
989
+ background-position, and an !important on it pins position 0% 0% and beats the
990
+ keyframe — animations lose to !important author declarations in the cascade — so
991
+ the sweep would never move. background-image/-size keep their !important to
992
+ override the inline `background:none`, while background-position stays animatable. */
993
+ #cc-toggle-btn.cc-processing {
994
+ color: var(--blue) !important;
995
+ border-color: var(--blue) !important;
996
+ background-image: linear-gradient(90deg, transparent 0%, rgba(192, 192, 192, 0.5) 50%, transparent 100%) !important;
997
+ background-size: 200% auto !important;
998
+ animation: trySlimShimmer 1.8s linear infinite reverse;
999
+ }
1000
+ /* Deliberately exempt from prefers-reduced-motion: this sweep is the ONLY "Command
1001
+ Center is working" indicator (it replaced the old top-right "..." badge), so it is
1002
+ functional busy feedback, not decoration — suppressing it would leave no in-progress
1003
+ cue at all. Kept subtle (a slow, translucent silver sweep) to stay easy on the eyes. */
1004
+
984
1005
  /* Engine Status */
985
1006
  .engine-badge { padding: var(--space-2) var(--space-6); border-radius: var(--radius-xl); font-size: var(--text-base); font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; margin-right: var(--space-6); }
986
1007
  .engine-badge.running { background: rgba(63,185,80,0.15); color: var(--green); border: 1px solid var(--green); }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.2418",
3
+ "version": "0.1.2419",
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"