From 3a8532bb301d6b30bd2e65f73b9fb18b8d09f155 Mon Sep 17 00:00:00 2001 From: sol Date: Sat, 7 Mar 2026 18:52:44 +0000 Subject: [PATCH] fix: re-detect sessions after idle cleanup Added forgetSession() to SessionMonitor. When watcher marks a session idle/done, it now clears the key from the monitor's known sessions map. Next poll cycle re-detects the session if the transcript is still active, creating a fresh status post. --- src/session-monitor.js | 9 +++++++++ src/watcher-manager.js | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/session-monitor.js b/src/session-monitor.js index ddaad1c..e0f337a 100644 --- a/src/session-monitor.js +++ b/src/session-monitor.js @@ -67,6 +67,15 @@ class SessionMonitor extends EventEmitter { if (this.logger) this.logger.info('SessionMonitor stopped'); } + /** + * Remove a session from known sessions so it can be re-detected on next poll. + * Called when the watcher marks a session as idle/done. + * @param {string} sessionKey + */ + forgetSession(sessionKey) { + this._knownSessions.delete(sessionKey); + } + /** * Get all agent directories under transcriptDir. * @private diff --git a/src/watcher-manager.js b/src/watcher-manager.js index b5a86e0..b334bf7 100644 --- a/src/watcher-manager.js +++ b/src/watcher-manager.js @@ -339,9 +339,10 @@ async function startDaemon() { logger.warn({ sessionKey, err: unpinErr }, 'Failed to unpin status post'); } - // Clean up + // Clean up — remove from all tracking so session can be re-detected if it becomes active again activeBoxes.delete(sessionKey); watcher.removeSession(sessionKey); + monitor.forgetSession(sessionKey); globalMetrics.activeSessions = activeBoxes.size; // Persist final offsets