From c24b0f172e4ac3045d887b4b004e31df9a7f5bc4 Mon Sep 17 00:00:00 2001 From: Daniel Valladares Date: Fri, 22 May 2026 21:38:16 -0300 Subject: [PATCH] fix(terminal-server): bump session TTL to 90d and bind IPv6 dual-stack - Default TTL increased from 24h to 90 days in both server.js and session-store.js; still overridable via TERMINAL_SESSION_TTL_HOURS env. - Bind address changed from '0.0.0.0' to '::' (IPv6 wildcard, dual-stack) so clients connecting via IPv6 (Tailscale, modern browsers) reach the server. IPv4 is still served via the dual-stack mapping. --- dashboard/terminal-server/src/server.js | 5 +++-- dashboard/terminal-server/src/utils/session-store.js | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/dashboard/terminal-server/src/server.js b/dashboard/terminal-server/src/server.js index f5f8605a..22672d03 100644 --- a/dashboard/terminal-server/src/server.js +++ b/dashboard/terminal-server/src/server.js @@ -18,8 +18,9 @@ class TerminalServer { this.baseFolder = process.cwd(); const ttlHours = Number(process.env.TERMINAL_SESSION_TTL_HOURS); const gcMinutes = Number(process.env.TERMINAL_SESSION_GC_INTERVAL_MINUTES); + // Default TTL bumped to 90 days; override via env TERMINAL_SESSION_TTL_HOURS if needed. this.sessionTtlMs = options.sessionTtlMs ?? ( - Number.isFinite(ttlHours) && ttlHours > 0 ? ttlHours * 60 * 60 * 1000 : (24 * 60 * 60 * 1000) + Number.isFinite(ttlHours) && ttlHours > 0 ? ttlHours * 60 * 60 * 1000 : (90 * 24 * 60 * 60 * 1000) ); this.sessionGcIntervalMs = options.sessionGcIntervalMs ?? ( Number.isFinite(gcMinutes) && gcMinutes >= 0 ? gcMinutes * 60 * 1000 : (15 * 60 * 1000) @@ -535,7 +536,7 @@ class TerminalServer { this.wss.on('connection', (ws, req) => this.handleWebSocketConnection(ws, req)); return new Promise((resolve, reject) => { - server.listen(this.port, '0.0.0.0', (err) => { + server.listen(this.port, '::', (err) => { if (err) return reject(err); this.server = server; resolve(server); diff --git a/dashboard/terminal-server/src/utils/session-store.js b/dashboard/terminal-server/src/utils/session-store.js index a428d67e..f68d722e 100644 --- a/dashboard/terminal-server/src/utils/session-store.js +++ b/dashboard/terminal-server/src/utils/session-store.js @@ -8,8 +8,9 @@ class SessionStore { // Store sessions in user's home directory this.storageDir = options.storageDir || path.join(os.homedir(), '.claude-code-web'); this.sessionsFile = path.join(this.storageDir, 'sessions.json'); - this.sessionTtlMs = options.sessionTtlMs ?? (24 * 60 * 60 * 1000); - this.maxFileAgeDays = options.maxFileAgeDays ?? 7; + // Default TTL bumped to 90 days to preserve long-running sessions. + this.sessionTtlMs = options.sessionTtlMs ?? (90 * 24 * 60 * 60 * 1000); + this.maxFileAgeDays = options.maxFileAgeDays ?? 90; fsSync.mkdirSync(this.storageDir, { recursive: true }); this.initializeStorage(); }