From 6d31d77567c51de21742e89210d0a2249b0559eb Mon Sep 17 00:00:00 2001 From: sol Date: Sat, 7 Mar 2026 18:47:25 +0000 Subject: [PATCH] fix: stream from current position, faster session detection (500ms) - New sessions start from current file offset, not 0. Shows live thinking from the moment of detection, not a backlog dump. - Session poll reduced from 2s to 500ms for faster pickup. - Auto-pin with null body (MM pin API quirk). --- src/session-monitor.js | 2 +- src/status-watcher.js | 22 ++++++++++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/session-monitor.js b/src/session-monitor.js index a3e7819..ddaad1c 100644 --- a/src/session-monitor.js +++ b/src/session-monitor.js @@ -34,7 +34,7 @@ class SessionMonitor extends EventEmitter { constructor(opts) { super(); this.transcriptDir = opts.transcriptDir; - this.pollMs = opts.pollMs || 2000; + this.pollMs = opts.pollMs || 500; this.defaultChannel = opts.defaultChannel || null; this.logger = opts.logger || null; diff --git a/src/status-watcher.js b/src/status-watcher.js index d7ffdbc..32a353d 100644 --- a/src/status-watcher.js +++ b/src/status-watcher.js @@ -51,6 +51,18 @@ class StatusWatcher extends EventEmitter { addSession(sessionKey, transcriptFile, initialState = {}) { if (this.sessions.has(sessionKey)) return; + // For new sessions (no saved offset), start from current file position + // so we only show NEW content going forward — not the entire backlog + let startOffset = initialState.lastOffset || 0; + if (!initialState.lastOffset) { + try { + var stat = fs.statSync(transcriptFile); + startOffset = stat.size; + } catch (_e) { + startOffset = 0; + } + } + const state = { sessionKey, transcriptFile, @@ -58,7 +70,7 @@ class StatusWatcher extends EventEmitter { startTime: initialState.startTime || Date.now(), lines: initialState.lines || [], pendingToolCalls: 0, - lastOffset: initialState.lastOffset || 0, + lastOffset: startOffset, lastActivityAt: Date.now(), agentId: initialState.agentId || extractAgentId(sessionKey), depth: initialState.depth || 0, @@ -71,11 +83,13 @@ class StatusWatcher extends EventEmitter { this.fileToSession.set(transcriptFile, sessionKey); if (this.logger) { - this.logger.debug({ sessionKey, transcriptFile }, 'Session added to watcher'); + this.logger.debug({ sessionKey, transcriptFile, startOffset }, 'Session added to watcher'); } - // Immediately read any existing content - this._readFile(sessionKey, state); + // Only read if we have a saved offset (recovery) — new sessions start streaming from current position + if (initialState.lastOffset) { + this._readFile(sessionKey, state); + } } /**