@yemi33/minions 0.1.745 → 0.1.747
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 +5 -1
- package/dashboard/js/command-center.js +6 -9
- package/dashboard/styles.css +4 -3
- package/dashboard.js +8 -4
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 0.1.
|
|
3
|
+
## 0.1.747 (2026-04-09)
|
|
4
4
|
|
|
5
5
|
### Features
|
|
6
6
|
- CC multi-tab conversations with session resume
|
|
7
7
|
|
|
8
|
+
### Fixes
|
|
9
|
+
- clear stale sessionId on resume failure, folder-style tab UI
|
|
10
|
+
- CC tabs use per-tab sessions, not shared global session
|
|
11
|
+
|
|
8
12
|
## 0.1.744 (2026-04-09)
|
|
9
13
|
|
|
10
14
|
### Features
|
|
@@ -113,10 +113,7 @@ function ccNewTab(skipServerReset) {
|
|
|
113
113
|
var tab = { id: tabId, title: 'New chat', sessionId: null, messages: [] };
|
|
114
114
|
_ccTabs.push(tab);
|
|
115
115
|
_ccActiveTabId = tabId;
|
|
116
|
-
//
|
|
117
|
-
if (!skipServerReset) {
|
|
118
|
-
fetch('/api/command-center/new-session', { method: 'POST' }).catch(function() {});
|
|
119
|
-
}
|
|
116
|
+
// New tab starts with null sessionId — server creates fresh session on first message
|
|
120
117
|
// Abort any in-flight request
|
|
121
118
|
ccAbort();
|
|
122
119
|
_ccSending = false;
|
|
@@ -462,7 +459,7 @@ async function _ccDoSend(message, skipUserMsg) {
|
|
|
462
459
|
// Stream response via SSE — shows text as it arrives
|
|
463
460
|
var res = await fetch('/api/command-center/stream', {
|
|
464
461
|
method: 'POST', headers: { 'Content-Type': 'application/json' },
|
|
465
|
-
body: JSON.stringify({ message: message, tabId: activeTabId }),
|
|
462
|
+
body: JSON.stringify({ message: message, tabId: activeTabId, sessionId: activeTab.sessionId || null }),
|
|
466
463
|
signal: _ccAbortController ? _ccAbortController.signal : AbortSignal.timeout(960000)
|
|
467
464
|
});
|
|
468
465
|
|
|
@@ -503,9 +500,9 @@ async function _ccDoSend(message, skipUserMsg) {
|
|
|
503
500
|
var ccElapsed = Math.round((Date.now() - ccStartTime) / 1000);
|
|
504
501
|
var rendered = renderMd(evt.text || streamedText || '');
|
|
505
502
|
ccAddMessage('assistant', rendered + '<div style="font-size:9px;color:var(--muted);margin-top:6px;display:flex;justify-content:flex-end;padding-right:30px">' + ccElapsed + 's</div>');
|
|
506
|
-
if (evt.sessionId) {
|
|
503
|
+
if (evt.sessionId !== undefined) {
|
|
507
504
|
var currentTab = _ccActiveTab();
|
|
508
|
-
if (currentTab) { currentTab.sessionId = evt.sessionId; }
|
|
505
|
+
if (currentTab) { currentTab.sessionId = evt.sessionId || null; }
|
|
509
506
|
ccSaveState(); ccUpdateSessionIndicator();
|
|
510
507
|
}
|
|
511
508
|
if (evt.actions && evt.actions.length > 0) {
|
|
@@ -533,9 +530,9 @@ async function _ccDoSend(message, skipUserMsg) {
|
|
|
533
530
|
var ccElapsed2 = Math.round((Date.now() - ccStartTime) / 1000);
|
|
534
531
|
var rendered2 = renderMd(revt.text || streamedText || '');
|
|
535
532
|
ccAddMessage('assistant', rendered2 + '<div style="font-size:9px;color:var(--muted);margin-top:6px;display:flex;justify-content:flex-end;padding-right:30px">' + ccElapsed2 + 's</div>');
|
|
536
|
-
if (revt.sessionId) {
|
|
533
|
+
if (revt.sessionId !== undefined) {
|
|
537
534
|
var currentTab2 = _ccActiveTab();
|
|
538
|
-
if (currentTab2) { currentTab2.sessionId = revt.sessionId; }
|
|
535
|
+
if (currentTab2) { currentTab2.sessionId = revt.sessionId || null; }
|
|
539
536
|
ccSaveState(); ccUpdateSessionIndicator();
|
|
540
537
|
}
|
|
541
538
|
if (revt.actions && revt.actions.length > 0) {
|
package/dashboard/styles.css
CHANGED
|
@@ -621,9 +621,10 @@
|
|
|
621
621
|
@keyframes notifPulse { 0%,100% { opacity: 1; } 50% { opacity: 0.5; } }
|
|
622
622
|
|
|
623
623
|
/* Command Center tab bar */
|
|
624
|
-
.cc-tab { padding:
|
|
625
|
-
.cc-tab.active { color: var(--
|
|
626
|
-
.cc-tab-close { margin-left: 4px; opacity: 0
|
|
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; overflow: hidden; text-overflow: ellipsis; display: inline-flex; align-items: center; gap: 2px; flex-shrink: 0; margin-bottom: -1px; position: relative; }
|
|
625
|
+
.cc-tab.active { color: var(--text); background: var(--bg); border-color: var(--border); z-index: 1; font-weight: 600; }
|
|
626
|
+
.cc-tab-close { margin-left: 4px; opacity: 0; cursor: pointer; font-size: 12px; line-height: 1; }
|
|
627
|
+
.cc-tab:hover .cc-tab-close { opacity: 0.5; }
|
|
627
628
|
.cc-tab-close:hover { opacity: 1; color: var(--red); }
|
|
628
629
|
|
|
629
630
|
/* Command Center resize handle */
|
package/dashboard.js
CHANGED
|
@@ -3333,12 +3333,16 @@ What would you like to discuss or change? When you're happy, say "approve" and I
|
|
|
3333
3333
|
req.on('close', () => { ccInFlight = false; ccInFlightSince = 0; if (_ccStreamAbort) _ccStreamAbort(); });
|
|
3334
3334
|
|
|
3335
3335
|
try {
|
|
3336
|
-
// Session management —
|
|
3337
|
-
|
|
3336
|
+
// Session management — per-tab: use sessionId from request if provided
|
|
3337
|
+
const tabSessionId = body.sessionId || null;
|
|
3338
|
+
if (tabSessionId) {
|
|
3339
|
+
// Resume the tab's specific session
|
|
3340
|
+
ccSession = { sessionId: tabSessionId, createdAt: ccSession.createdAt, lastActiveAt: Date.now(), turnCount: ccSession.turnCount || 0, _promptHash: _ccPromptHash };
|
|
3341
|
+
} else if (!ccSessionValid()) {
|
|
3338
3342
|
ccSession = { sessionId: null, createdAt: null, lastActiveAt: null, turnCount: 0 };
|
|
3339
3343
|
}
|
|
3340
|
-
const wasResume = !!(ccSessionValid() && ccSession.sessionId);
|
|
3341
|
-
const sessionId = wasResume ? ccSession.sessionId : null;
|
|
3344
|
+
const wasResume = !!tabSessionId || !!(ccSessionValid() && ccSession.sessionId);
|
|
3345
|
+
const sessionId = tabSessionId || (wasResume ? ccSession.sessionId : null);
|
|
3342
3346
|
const preamble = wasResume ? '' : buildCCStatePreamble();
|
|
3343
3347
|
const prompt = (preamble ? preamble + '\n\n---\n\n' : '') + body.message;
|
|
3344
3348
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yemi33/minions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.747",
|
|
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"
|