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.
This commit is contained in:
@@ -67,6 +67,15 @@ class SessionMonitor extends EventEmitter {
|
|||||||
if (this.logger) this.logger.info('SessionMonitor stopped');
|
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.
|
* Get all agent directories under transcriptDir.
|
||||||
* @private
|
* @private
|
||||||
|
|||||||
@@ -339,9 +339,10 @@ async function startDaemon() {
|
|||||||
logger.warn({ sessionKey, err: unpinErr }, 'Failed to unpin status post');
|
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);
|
activeBoxes.delete(sessionKey);
|
||||||
watcher.removeSession(sessionKey);
|
watcher.removeSession(sessionKey);
|
||||||
|
monitor.forgetSession(sessionKey);
|
||||||
globalMetrics.activeSessions = activeBoxes.size;
|
globalMetrics.activeSessions = activeBoxes.size;
|
||||||
|
|
||||||
// Persist final offsets
|
// Persist final offsets
|
||||||
|
|||||||
Reference in New Issue
Block a user