shell-mirror 1.5.42 → 1.5.44

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shell-mirror",
3
- "version": "1.5.42",
3
+ "version": "1.5.44",
4
4
  "description": "Access your Mac shell from any device securely. Perfect for mobile coding with Claude Code CLI, Gemini CLI, and any shell tool.",
5
5
  "main": "server.js",
6
6
  "bin": {
@@ -413,20 +413,26 @@ class ShellMirrorDashboard {
413
413
 
414
414
  // Action handlers
415
415
  async connectToAgent(agentId) {
416
+ console.log('[DASHBOARD] 🔍 DEBUG: connectToAgent called with agentId:', agentId);
417
+ console.log('[DASHBOARD] 🔍 DEBUG: Current agentSessions:', this.agentSessions);
418
+
416
419
  // Check if there are existing sessions for this agent
417
420
  const sessions = this.agentSessions[agentId] || [];
421
+ console.log('[DASHBOARD] 🔍 DEBUG: Sessions for agent:', sessions);
422
+
418
423
  const activeSessions = sessions.filter(s => s.status === 'active');
424
+ console.log('[DASHBOARD] 🔍 DEBUG: Active sessions:', activeSessions);
419
425
 
420
426
  if (activeSessions.length > 0) {
421
427
  // Reconnect to the most recently active session
422
428
  const mostRecentSession = activeSessions.reduce((latest, session) =>
423
429
  session.lastActivity > latest.lastActivity ? session : latest
424
430
  );
425
- console.log(`[DASHBOARD] Reconnecting to existing session: ${mostRecentSession.id}`);
431
+ console.log(`[DASHBOARD] Reconnecting to existing session: ${mostRecentSession.id}`);
426
432
  window.location.href = `/app/terminal.html?agent=${agentId}&session=${mostRecentSession.id}`;
427
433
  } else {
428
434
  // No existing sessions, create new one
429
- console.log(`[DASHBOARD] Creating new session for agent: ${agentId}`);
435
+ console.log(`[DASHBOARD] 🆕 Creating new session for agent: ${agentId}`);
430
436
  window.location.href = `/app/terminal.html?agent=${agentId}`;
431
437
  }
432
438
  }
@@ -532,28 +538,43 @@ class ShellMirrorDashboard {
532
538
  // Session storage management
533
539
  loadSessionsFromStorage() {
534
540
  try {
541
+ console.log('[DASHBOARD] 🔍 DEBUG: Loading sessions from localStorage');
535
542
  const storedSessions = localStorage.getItem('shell-mirror-sessions');
543
+ console.log('[DASHBOARD] 🔍 DEBUG: Raw stored sessions:', storedSessions);
544
+
536
545
  if (storedSessions) {
537
546
  const sessionData = JSON.parse(storedSessions);
547
+ console.log('[DASHBOARD] 🔍 DEBUG: Parsed session data:', sessionData);
538
548
 
539
549
  // Filter out old sessions (older than 24 hours)
540
550
  const now = Date.now();
541
551
  const maxAge = 24 * 60 * 60 * 1000; // 24 hours
542
552
 
543
553
  Object.keys(sessionData).forEach(agentId => {
544
- const validSessions = sessionData[agentId].filter(session =>
545
- (now - session.lastActivity) < maxAge
546
- );
554
+ console.log('[DASHBOARD] 🔍 DEBUG: Processing agent:', agentId);
555
+ const allSessions = sessionData[agentId];
556
+ console.log('[DASHBOARD] 🔍 DEBUG: All sessions for agent:', allSessions);
557
+
558
+ const validSessions = allSessions.filter(session => {
559
+ const age = now - session.lastActivity;
560
+ const isValid = age < maxAge;
561
+ console.log('[DASHBOARD] 🔍 DEBUG: Session', session.id, 'age:', age, 'valid:', isValid);
562
+ return isValid;
563
+ });
564
+
565
+ console.log('[DASHBOARD] 🔍 DEBUG: Valid sessions for agent:', validSessions);
547
566
 
548
567
  if (validSessions.length > 0) {
549
568
  this.agentSessions[agentId] = validSessions;
550
569
  }
551
570
  });
552
571
 
553
- console.log('[DASHBOARD] Loaded sessions from storage:', this.agentSessions);
572
+ console.log('[DASHBOARD] Loaded sessions from storage:', this.agentSessions);
573
+ } else {
574
+ console.log('[DASHBOARD] ⚠️ No stored sessions found in localStorage');
554
575
  }
555
576
  } catch (error) {
556
- console.error('[DASHBOARD] Error loading sessions from storage:', error);
577
+ console.error('[DASHBOARD] Error loading sessions from storage:', error);
557
578
  }
558
579
  }
559
580
 
@@ -222,6 +222,6 @@
222
222
  </div>
223
223
  </footer>
224
224
 
225
- <script src="/app/terminal.js"></script>
225
+ <script src="/app/terminal.js?v=debug-20250819-v2"></script>
226
226
  </body>
227
227
  </html>
@@ -84,10 +84,14 @@ window.addEventListener('load', () => {
84
84
  const agentId = urlParams.get('agent');
85
85
  const sessionId = urlParams.get('session');
86
86
 
87
+ console.log('[CLIENT] 🔍 DEBUG: URL params - agent:', agentId, 'session:', sessionId);
88
+ console.log('[CLIENT] 🔍 DEBUG: Full URL:', window.location.href);
89
+
87
90
  if (agentId) {
88
91
  AGENT_ID = agentId;
89
92
  SELECTED_AGENT = { id: agentId, agentId: agentId };
90
93
  requestedSessionId = sessionId; // Store for session request
94
+ console.log('[CLIENT] 🔍 DEBUG: Set requestedSessionId to:', requestedSessionId);
91
95
  console.log('[CLIENT] 🔗 Connecting to agent:', agentId, sessionId ? `session: ${sessionId}` : '(new session)');
92
96
  startConnection();
93
97
  } else {
@@ -174,6 +178,8 @@ async function initialize() {
174
178
 
175
179
  // Build session request
176
180
  let sessionRequest = null;
181
+ console.log('[CLIENT] 🔍 DEBUG: Building session request, requestedSessionId:', requestedSessionId);
182
+
177
183
  if (requestedSessionId) {
178
184
  sessionRequest = { sessionId: requestedSessionId };
179
185
  console.log(`[CLIENT] 🎯 Requesting existing session: ${requestedSessionId}`);
@@ -221,6 +227,7 @@ async function initialize() {
221
227
  isNewSession: nextData.isNewSession || false
222
228
  };
223
229
  console.log('[CLIENT] 📋 Session assigned:', currentSession);
230
+ console.log('[CLIENT] 🔍 Agent ID for storage:', AGENT_ID);
224
231
 
225
232
  // Update UI to show session info
226
233
  updateSessionDisplay();
@@ -705,7 +712,13 @@ function handleSessionMessage(message) {
705
712
  // Session storage helper
706
713
  function saveSessionToLocalStorage(agentId, sessionInfo) {
707
714
  try {
715
+ console.log('[CLIENT] 🔍 DEBUG: Saving session to localStorage');
716
+ console.log('[CLIENT] 🔍 DEBUG: AgentID:', agentId);
717
+ console.log('[CLIENT] 🔍 DEBUG: SessionInfo:', sessionInfo);
718
+
708
719
  const storedSessions = localStorage.getItem('shell-mirror-sessions');
720
+ console.log('[CLIENT] 🔍 DEBUG: Current stored sessions:', storedSessions);
721
+
709
722
  let sessionData = storedSessions ? JSON.parse(storedSessions) : {};
710
723
 
711
724
  if (!sessionData[agentId]) {
@@ -716,17 +729,24 @@ function saveSessionToLocalStorage(agentId, sessionInfo) {
716
729
  sessionData[agentId] = sessionData[agentId].filter(s => s.id !== sessionInfo.id);
717
730
 
718
731
  // Add updated session info
719
- sessionData[agentId].push({
732
+ const sessionToStore = {
720
733
  id: sessionInfo.id,
721
734
  name: sessionInfo.name,
722
735
  lastActivity: Date.now(),
723
736
  createdAt: sessionInfo.createdAt || Date.now(),
724
737
  status: 'active'
725
- });
738
+ };
739
+
740
+ sessionData[agentId].push(sessionToStore);
726
741
 
727
742
  localStorage.setItem('shell-mirror-sessions', JSON.stringify(sessionData));
728
- console.log('[CLIENT] 💾 Session saved to storage:', sessionInfo);
743
+ console.log('[CLIENT] 💾 Session saved to storage:', sessionToStore);
744
+ console.log('[CLIENT] 🔍 DEBUG: Final stored data:', JSON.stringify(sessionData));
745
+
746
+ // Verify the save worked
747
+ const verification = localStorage.getItem('shell-mirror-sessions');
748
+ console.log('[CLIENT] ✅ DEBUG: Verification read:', verification);
729
749
  } catch (error) {
730
- console.error('[CLIENT] Error saving session to storage:', error);
750
+ console.error('[CLIENT] Error saving session to storage:', error);
731
751
  }
732
752
  }