ai-agent-session-center 1.0.0 → 1.0.1

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/README.md CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  A real-time dashboard for monitoring and managing all your AI coding agent sessions. Launch, monitor, and control Claude Code, Codex CLI, and Gemini CLI sessions from a unified interface with embedded SSH terminals, approval alerts, and comprehensive analytics.
4
4
 
5
- ![Node.js](https://img.shields.io/badge/Node.js-18+-green)
6
- ![Express](https://img.shields.io/badge/Express-5.0-blue)
7
- ![License](https://img.shields.io/badge/License-MIT-yellow)
5
+ [![npm version](https://img.shields.io/npm/v/ai-agent-session-center.svg)](https://www.npmjs.com/package/ai-agent-session-center)
6
+ [![Node.js](https://img.shields.io/badge/Node.js-18+-green)](https://nodejs.org)
7
+ [![License](https://img.shields.io/badge/License-MIT-yellow)](./LICENSE)
8
8
 
9
9
  ---
10
10
 
@@ -28,7 +28,7 @@ ai-agent-session-center
28
28
  ### From Source
29
29
 
30
30
  ```bash
31
- git clone <repo-url>
31
+ git clone https://github.com/coding-by-feng/ai-agent-session-center.git
32
32
  cd ai-agent-session-center
33
33
  npm install
34
34
  npm start
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-agent-session-center",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "A real-time dashboard for monitoring AI agent sessions (Claude Code, Gemini CLI, Codex) with 3D visualization",
5
5
  "type": "module",
6
6
  "main": "server/index.js",
package/public/index.html CHANGED
@@ -65,7 +65,7 @@
65
65
  <div class="shortcut-row"><kbd>S</kbd><span>Toggle settings</span></div>
66
66
  <div class="shortcut-row"><kbd>M</kbd><span>Mute / unmute all</span></div>
67
67
  <div class="shortcut-row"><kbd>T</kbd><span>New session (none selected)</span></div>
68
- <div class="shortcut-row"><kbd>Esc</kbd><span>Close panel / modal</span></div>
68
+ <div class="shortcut-row"><kbd>Esc</kbd><span>Close modal / panel (except terminal tab)</span></div>
69
69
  <div class="shortcut-row"><kbd>?</kbd><span>Toggle this panel</span></div>
70
70
  </div>
71
71
  <div class="shortcuts-section">
@@ -75,7 +75,7 @@
75
75
  </div>
76
76
  <div class="shortcuts-section">
77
77
  <h4>Terminal</h4>
78
- <div class="shortcut-row"><kbd>F11</kbd><span>Toggle fullscreen</span></div>
78
+ <div class="shortcut-row"><kbd>Alt+F11</kbd><span>Toggle fullscreen</span></div>
79
79
  <div class="shortcut-row"><kbd>Ctrl+Enter</kbd><span>Send queued prompt</span></div>
80
80
  </div>
81
81
  </div>
package/public/js/app.js CHANGED
@@ -429,7 +429,7 @@ function initKeyboardShortcuts() {
429
429
  break;
430
430
  }
431
431
  case 'Escape': {
432
- // Close in priority order: kill, alert, summarize, team, shortcuts, settings, detail
432
+ // Check if we should close modals first (highest priority)
433
433
  const kill = document.getElementById('kill-modal');
434
434
  const alert = document.getElementById('alert-modal');
435
435
  const summarizeModal = document.getElementById('summarize-modal');
@@ -438,25 +438,43 @@ function initKeyboardShortcuts() {
438
438
  const quickSessionModal = document.getElementById('quick-session-modal');
439
439
  const shortcutsModal = document.getElementById('shortcuts-modal');
440
440
  const settings = document.getElementById('settings-modal');
441
- const detail = document.getElementById('session-detail-overlay');
442
441
 
442
+ // Close modals in priority order (always handle these first)
443
443
  if (kill && !kill.classList.contains('hidden')) {
444
444
  kill.classList.add('hidden');
445
+ break;
445
446
  } else if (alert && !alert.classList.contains('hidden')) {
446
447
  alert.classList.add('hidden');
448
+ break;
447
449
  } else if (summarizeModal && !summarizeModal.classList.contains('hidden')) {
448
450
  summarizeModal.classList.add('hidden');
451
+ break;
449
452
  } else if (newSessionModal && !newSessionModal.classList.contains('hidden')) {
450
453
  newSessionModal.classList.add('hidden');
454
+ break;
451
455
  } else if (quickSessionModal && !quickSessionModal.classList.contains('hidden')) {
452
456
  quickSessionModal.classList.add('hidden');
457
+ break;
453
458
  } else if (teamModal && !teamModal.classList.contains('hidden')) {
454
459
  teamModal.classList.add('hidden');
460
+ break;
455
461
  } else if (shortcutsModal && !shortcutsModal.classList.contains('hidden')) {
456
462
  shortcutsModal.classList.add('hidden');
463
+ break;
457
464
  } else if (settings && !settings.classList.contains('hidden')) {
458
465
  settings.classList.add('hidden');
459
- } else if (detail && !detail.classList.contains('hidden')) {
466
+ break;
467
+ }
468
+
469
+ // Don't close detail panel if terminal tab is active - let terminal handle ESC
470
+ const detail = document.getElementById('session-detail-overlay');
471
+ if (detail && !detail.classList.contains('hidden')) {
472
+ const activeTab = document.querySelector('.detail-tabs .tab.active');
473
+ if (activeTab && activeTab.dataset.tab === 'terminal') {
474
+ // Don't do anything - let ESC pass through to terminal
475
+ return;
476
+ }
477
+ // Not on terminal tab, close the detail panel
460
478
  deselectSession();
461
479
  }
462
480
  break;
@@ -373,9 +373,9 @@ document.addEventListener('visibilitychange', () => {
373
373
  }
374
374
  });
375
375
 
376
- // F11 toggles fullscreen (no Escape — it's a valid terminal key)
376
+ // Alt+F11 toggles fullscreen (no Escape — it's a valid terminal key)
377
377
  document.addEventListener('keydown', (e) => {
378
- if (e.key === 'F11' && activeTerminal) {
378
+ if (e.key === 'F11' && e.altKey && activeTerminal) {
379
379
  e.preventDefault();
380
380
  toggleFullscreen();
381
381
  }