@yemi33/minions 0.1.757 → 0.1.758

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,11 +1,12 @@
1
1
  # Changelog
2
2
 
3
- ## 0.1.757 (2026-04-09)
3
+ ## 0.1.758 (2026-04-09)
4
4
 
5
5
  ### Features
6
6
  - show branch strategy badge on PRD group header
7
7
 
8
8
  ### Fixes
9
+ - restore full streaming state (tools + partial text) on tab switch
9
10
  - restored thinking UX matches original exactly (same bubble, layout)
10
11
  - skip merged dependency branches instead of failing worktree setup
11
12
  - restore same thinking UX when switching back to processing tab
@@ -135,28 +135,38 @@ function ccSwitchTab(id) {
135
135
  for (var i = 0; i < tab.messages.length; i++) {
136
136
  ccAddMessage(tab.messages[i].role, tab.messages[i].html, true);
137
137
  }
138
- // If this tab is still processing, restore the same thinking UX via addMessage (identical to original)
138
+ // If this tab is still processing, restore the full streaming UX (tools, partial text, thinking)
139
139
  if (tab._sending) {
140
140
  var dotPulse = '<span style="display:inline-flex;gap:3px;margin-left:6px;vertical-align:middle"><span style="width:4px;height:4px;background:var(--blue);border-radius:50%;animation:dotPulse 1.2s infinite"></span><span style="width:4px;height:4px;background:var(--blue);border-radius:50%;animation:dotPulse 1.2s infinite;animation-delay:0.2s"></span><span style="width:4px;height:4px;background:var(--blue);border-radius:50%;animation:dotPulse 1.2s infinite;animation-delay:0.4s"></span></span>';
141
141
  var restoreStart = tab._sendStartedAt || Date.now();
142
142
  var phases = [[0,'Thinking...'],[3000,'Reading minions context...'],[8000,'Analyzing...'],[15000,'Using tools to dig deeper...'],[30000,'Still working (multi-turn)...'],[60000,'Deep research in progress...']];
143
- function _restoreThinkingHtml() {
143
+ function _restoreStreamHtml() {
144
+ var html = '';
145
+ var tools = tab._toolsUsed || [];
146
+ if (tools.length > 0) {
147
+ html += '<div style="margin-bottom:6px">';
148
+ tools.forEach(function(t) { html += '<div style="color:var(--blue);font-size:11px">\uD83D\uDD27 ' + escHtml(t) + '</div>'; });
149
+ html += '</div>';
150
+ }
151
+ var text = tab._streamedText || '';
152
+ if (text) html += renderMd(text);
144
153
  var ms = Date.now() - restoreStart;
145
154
  var label = 'Thinking...';
146
155
  for (var pi = phases.length - 1; pi >= 0; pi--) { if (ms >= phases[pi][0]) { label = phases[pi][1]; break; } }
147
156
  var secs = Math.floor(ms / 1000);
148
- return '<div style="display:flex;align-items:center;gap:6px"><span style="color:var(--muted);font-size:11px">' + label + '</span>' + dotPulse + '<span style="margin-left:auto;font-size:10px;color:var(--muted)">' + secs + 's</span>' +
157
+ html += '<div style="margin-top:' + (text ? '6px' : '0') + ';display:flex;align-items:center;gap:6px"><span style="color:var(--muted);font-size:11px">' + label + '</span>' + dotPulse + '<span style="margin-left:auto;font-size:10px;color:var(--muted)">' + secs + 's</span>' +
149
158
  '<button onclick="ccAbort()" style="font-size:9px;padding:2px 8px;background:var(--surface2);border:1px solid var(--border);border-radius:4px;color:var(--red);cursor:pointer;margin-left:4px">Stop</button></div>';
159
+ return html;
150
160
  }
151
- // Create as assistant message bubble (same as original)
152
- ccAddMessage('assistant', _restoreThinkingHtml(), true);
161
+ ccAddMessage('assistant', _restoreStreamHtml(), true);
153
162
  var restoreDiv = el.lastElementChild;
154
163
  restoreDiv.id = 'cc-restore-thinking';
155
164
  el.scrollTop = el.scrollHeight;
156
165
  var restoreInterval = setInterval(function() {
157
166
  var re = document.getElementById('cc-restore-thinking');
158
167
  if (!re || !tab._sending) { clearInterval(restoreInterval); if (re) re.remove(); return; }
159
- re.innerHTML = (typeof llmCopyBtn === 'function' ? '' : '') + _restoreThinkingHtml();
168
+ re.innerHTML = _restoreStreamHtml();
169
+ if (el.scrollHeight - el.scrollTop - el.clientHeight < 150) el.scrollTop = el.scrollHeight;
160
170
  }, 1000);
161
171
  }
162
172
  ccRenderTabBar();
@@ -448,8 +458,10 @@ async function _ccDoSend(message, skipUserMsg) {
448
458
  ];
449
459
 
450
460
  // Streaming state — declared before try so updateStreamDiv works during fetch
461
+ // Also saved on tab for restore when switching back
451
462
  var streamedText = '';
452
463
  var toolsUsed = [];
464
+ if (activeTab) { activeTab._streamedText = ''; activeTab._toolsUsed = []; }
453
465
 
454
466
  // Get active tab's sessionId to send with request
455
467
  var activeTab = _ccActiveTab();
@@ -526,9 +538,11 @@ async function _ccDoSend(message, skipUserMsg) {
526
538
  var evt = JSON.parse(line.slice(6));
527
539
  if (evt.type === 'chunk') {
528
540
  streamedText = evt.text;
541
+ if (activeTab) activeTab._streamedText = streamedText;
529
542
  updateStreamDiv();
530
543
  } else if (evt.type === 'tool') {
531
544
  toolsUsed.push(evt.name);
545
+ if (activeTab) activeTab._toolsUsed = toolsUsed.slice();
532
546
  updateStreamDiv();
533
547
  if (msgs.scrollHeight - msgs.scrollTop - msgs.clientHeight < 150) msgs.scrollTop = msgs.scrollHeight;
534
548
  } else if (evt.type === 'done') {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.757",
3
+ "version": "0.1.758",
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"