diff --git a/.agents/skills/impeccable/scripts/live-browser.js b/.agents/skills/impeccable/scripts/live-browser.js index 07f09326a..ecfc212c6 100644 --- a/.agents/skills/impeccable/scripts/live-browser.js +++ b/.agents/skills/impeccable/scripts/live-browser.js @@ -6499,6 +6499,19 @@ if (maybeCompleteSteer(msg)) break; console.error('[impeccable] Error:', msg.message); showToast('Error: ' + msg.message, 5000); + // An agent error reply is terminal for the session it names: tear + // it down exactly like 'discarded' (cleanup includes clearSession), + // or the durable localStorage checkpoint survives and every reload + // resurrects a GENERATING bar for a session the server no longer + // knows about (issue #362). + if (msg.id && msg.id === currentSessionId) { + markSessionHandled(); + cleanup(); + break; + } + // A stored-but-not-current checkpoint naming the errored session + // (the error raced a reload) must not resurrect either. + if (msg.id && loadSession()?.id === msg.id) clearSession(); hideBar(); renderEditBadge('hidden'); setLiveState('PICKING'); diff --git a/.claude/skills/impeccable/scripts/live-browser.js b/.claude/skills/impeccable/scripts/live-browser.js index 07f09326a..ecfc212c6 100644 --- a/.claude/skills/impeccable/scripts/live-browser.js +++ b/.claude/skills/impeccable/scripts/live-browser.js @@ -6499,6 +6499,19 @@ if (maybeCompleteSteer(msg)) break; console.error('[impeccable] Error:', msg.message); showToast('Error: ' + msg.message, 5000); + // An agent error reply is terminal for the session it names: tear + // it down exactly like 'discarded' (cleanup includes clearSession), + // or the durable localStorage checkpoint survives and every reload + // resurrects a GENERATING bar for a session the server no longer + // knows about (issue #362). + if (msg.id && msg.id === currentSessionId) { + markSessionHandled(); + cleanup(); + break; + } + // A stored-but-not-current checkpoint naming the errored session + // (the error raced a reload) must not resurrect either. + if (msg.id && loadSession()?.id === msg.id) clearSession(); hideBar(); renderEditBadge('hidden'); setLiveState('PICKING'); diff --git a/.cursor/skills/impeccable/scripts/live-browser.js b/.cursor/skills/impeccable/scripts/live-browser.js index 07f09326a..ecfc212c6 100644 --- a/.cursor/skills/impeccable/scripts/live-browser.js +++ b/.cursor/skills/impeccable/scripts/live-browser.js @@ -6499,6 +6499,19 @@ if (maybeCompleteSteer(msg)) break; console.error('[impeccable] Error:', msg.message); showToast('Error: ' + msg.message, 5000); + // An agent error reply is terminal for the session it names: tear + // it down exactly like 'discarded' (cleanup includes clearSession), + // or the durable localStorage checkpoint survives and every reload + // resurrects a GENERATING bar for a session the server no longer + // knows about (issue #362). + if (msg.id && msg.id === currentSessionId) { + markSessionHandled(); + cleanup(); + break; + } + // A stored-but-not-current checkpoint naming the errored session + // (the error raced a reload) must not resurrect either. + if (msg.id && loadSession()?.id === msg.id) clearSession(); hideBar(); renderEditBadge('hidden'); setLiveState('PICKING'); diff --git a/.gemini/skills/impeccable/scripts/live-browser.js b/.gemini/skills/impeccable/scripts/live-browser.js index 07f09326a..ecfc212c6 100644 --- a/.gemini/skills/impeccable/scripts/live-browser.js +++ b/.gemini/skills/impeccable/scripts/live-browser.js @@ -6499,6 +6499,19 @@ if (maybeCompleteSteer(msg)) break; console.error('[impeccable] Error:', msg.message); showToast('Error: ' + msg.message, 5000); + // An agent error reply is terminal for the session it names: tear + // it down exactly like 'discarded' (cleanup includes clearSession), + // or the durable localStorage checkpoint survives and every reload + // resurrects a GENERATING bar for a session the server no longer + // knows about (issue #362). + if (msg.id && msg.id === currentSessionId) { + markSessionHandled(); + cleanup(); + break; + } + // A stored-but-not-current checkpoint naming the errored session + // (the error raced a reload) must not resurrect either. + if (msg.id && loadSession()?.id === msg.id) clearSession(); hideBar(); renderEditBadge('hidden'); setLiveState('PICKING'); diff --git a/.github/skills/impeccable/scripts/live-browser.js b/.github/skills/impeccable/scripts/live-browser.js index 07f09326a..ecfc212c6 100644 --- a/.github/skills/impeccable/scripts/live-browser.js +++ b/.github/skills/impeccable/scripts/live-browser.js @@ -6499,6 +6499,19 @@ if (maybeCompleteSteer(msg)) break; console.error('[impeccable] Error:', msg.message); showToast('Error: ' + msg.message, 5000); + // An agent error reply is terminal for the session it names: tear + // it down exactly like 'discarded' (cleanup includes clearSession), + // or the durable localStorage checkpoint survives and every reload + // resurrects a GENERATING bar for a session the server no longer + // knows about (issue #362). + if (msg.id && msg.id === currentSessionId) { + markSessionHandled(); + cleanup(); + break; + } + // A stored-but-not-current checkpoint naming the errored session + // (the error raced a reload) must not resurrect either. + if (msg.id && loadSession()?.id === msg.id) clearSession(); hideBar(); renderEditBadge('hidden'); setLiveState('PICKING'); diff --git a/.grok/skills/impeccable/scripts/live-browser.js b/.grok/skills/impeccable/scripts/live-browser.js index 07f09326a..ecfc212c6 100644 --- a/.grok/skills/impeccable/scripts/live-browser.js +++ b/.grok/skills/impeccable/scripts/live-browser.js @@ -6499,6 +6499,19 @@ if (maybeCompleteSteer(msg)) break; console.error('[impeccable] Error:', msg.message); showToast('Error: ' + msg.message, 5000); + // An agent error reply is terminal for the session it names: tear + // it down exactly like 'discarded' (cleanup includes clearSession), + // or the durable localStorage checkpoint survives and every reload + // resurrects a GENERATING bar for a session the server no longer + // knows about (issue #362). + if (msg.id && msg.id === currentSessionId) { + markSessionHandled(); + cleanup(); + break; + } + // A stored-but-not-current checkpoint naming the errored session + // (the error raced a reload) must not resurrect either. + if (msg.id && loadSession()?.id === msg.id) clearSession(); hideBar(); renderEditBadge('hidden'); setLiveState('PICKING'); diff --git a/.kiro/skills/impeccable/scripts/live-browser.js b/.kiro/skills/impeccable/scripts/live-browser.js index 07f09326a..ecfc212c6 100644 --- a/.kiro/skills/impeccable/scripts/live-browser.js +++ b/.kiro/skills/impeccable/scripts/live-browser.js @@ -6499,6 +6499,19 @@ if (maybeCompleteSteer(msg)) break; console.error('[impeccable] Error:', msg.message); showToast('Error: ' + msg.message, 5000); + // An agent error reply is terminal for the session it names: tear + // it down exactly like 'discarded' (cleanup includes clearSession), + // or the durable localStorage checkpoint survives and every reload + // resurrects a GENERATING bar for a session the server no longer + // knows about (issue #362). + if (msg.id && msg.id === currentSessionId) { + markSessionHandled(); + cleanup(); + break; + } + // A stored-but-not-current checkpoint naming the errored session + // (the error raced a reload) must not resurrect either. + if (msg.id && loadSession()?.id === msg.id) clearSession(); hideBar(); renderEditBadge('hidden'); setLiveState('PICKING'); diff --git a/.opencode/skills/impeccable/scripts/live-browser.js b/.opencode/skills/impeccable/scripts/live-browser.js index 07f09326a..ecfc212c6 100644 --- a/.opencode/skills/impeccable/scripts/live-browser.js +++ b/.opencode/skills/impeccable/scripts/live-browser.js @@ -6499,6 +6499,19 @@ if (maybeCompleteSteer(msg)) break; console.error('[impeccable] Error:', msg.message); showToast('Error: ' + msg.message, 5000); + // An agent error reply is terminal for the session it names: tear + // it down exactly like 'discarded' (cleanup includes clearSession), + // or the durable localStorage checkpoint survives and every reload + // resurrects a GENERATING bar for a session the server no longer + // knows about (issue #362). + if (msg.id && msg.id === currentSessionId) { + markSessionHandled(); + cleanup(); + break; + } + // A stored-but-not-current checkpoint naming the errored session + // (the error raced a reload) must not resurrect either. + if (msg.id && loadSession()?.id === msg.id) clearSession(); hideBar(); renderEditBadge('hidden'); setLiveState('PICKING'); diff --git a/.pi/skills/impeccable/scripts/live-browser.js b/.pi/skills/impeccable/scripts/live-browser.js index 07f09326a..ecfc212c6 100644 --- a/.pi/skills/impeccable/scripts/live-browser.js +++ b/.pi/skills/impeccable/scripts/live-browser.js @@ -6499,6 +6499,19 @@ if (maybeCompleteSteer(msg)) break; console.error('[impeccable] Error:', msg.message); showToast('Error: ' + msg.message, 5000); + // An agent error reply is terminal for the session it names: tear + // it down exactly like 'discarded' (cleanup includes clearSession), + // or the durable localStorage checkpoint survives and every reload + // resurrects a GENERATING bar for a session the server no longer + // knows about (issue #362). + if (msg.id && msg.id === currentSessionId) { + markSessionHandled(); + cleanup(); + break; + } + // A stored-but-not-current checkpoint naming the errored session + // (the error raced a reload) must not resurrect either. + if (msg.id && loadSession()?.id === msg.id) clearSession(); hideBar(); renderEditBadge('hidden'); setLiveState('PICKING'); diff --git a/.qoder/skills/impeccable/scripts/live-browser.js b/.qoder/skills/impeccable/scripts/live-browser.js index 07f09326a..ecfc212c6 100644 --- a/.qoder/skills/impeccable/scripts/live-browser.js +++ b/.qoder/skills/impeccable/scripts/live-browser.js @@ -6499,6 +6499,19 @@ if (maybeCompleteSteer(msg)) break; console.error('[impeccable] Error:', msg.message); showToast('Error: ' + msg.message, 5000); + // An agent error reply is terminal for the session it names: tear + // it down exactly like 'discarded' (cleanup includes clearSession), + // or the durable localStorage checkpoint survives and every reload + // resurrects a GENERATING bar for a session the server no longer + // knows about (issue #362). + if (msg.id && msg.id === currentSessionId) { + markSessionHandled(); + cleanup(); + break; + } + // A stored-but-not-current checkpoint naming the errored session + // (the error raced a reload) must not resurrect either. + if (msg.id && loadSession()?.id === msg.id) clearSession(); hideBar(); renderEditBadge('hidden'); setLiveState('PICKING'); diff --git a/.rovodev/skills/impeccable/scripts/live-browser.js b/.rovodev/skills/impeccable/scripts/live-browser.js index 07f09326a..ecfc212c6 100644 --- a/.rovodev/skills/impeccable/scripts/live-browser.js +++ b/.rovodev/skills/impeccable/scripts/live-browser.js @@ -6499,6 +6499,19 @@ if (maybeCompleteSteer(msg)) break; console.error('[impeccable] Error:', msg.message); showToast('Error: ' + msg.message, 5000); + // An agent error reply is terminal for the session it names: tear + // it down exactly like 'discarded' (cleanup includes clearSession), + // or the durable localStorage checkpoint survives and every reload + // resurrects a GENERATING bar for a session the server no longer + // knows about (issue #362). + if (msg.id && msg.id === currentSessionId) { + markSessionHandled(); + cleanup(); + break; + } + // A stored-but-not-current checkpoint naming the errored session + // (the error raced a reload) must not resurrect either. + if (msg.id && loadSession()?.id === msg.id) clearSession(); hideBar(); renderEditBadge('hidden'); setLiveState('PICKING'); diff --git a/.trae-cn/skills/impeccable/scripts/live-browser.js b/.trae-cn/skills/impeccable/scripts/live-browser.js index 07f09326a..ecfc212c6 100644 --- a/.trae-cn/skills/impeccable/scripts/live-browser.js +++ b/.trae-cn/skills/impeccable/scripts/live-browser.js @@ -6499,6 +6499,19 @@ if (maybeCompleteSteer(msg)) break; console.error('[impeccable] Error:', msg.message); showToast('Error: ' + msg.message, 5000); + // An agent error reply is terminal for the session it names: tear + // it down exactly like 'discarded' (cleanup includes clearSession), + // or the durable localStorage checkpoint survives and every reload + // resurrects a GENERATING bar for a session the server no longer + // knows about (issue #362). + if (msg.id && msg.id === currentSessionId) { + markSessionHandled(); + cleanup(); + break; + } + // A stored-but-not-current checkpoint naming the errored session + // (the error raced a reload) must not resurrect either. + if (msg.id && loadSession()?.id === msg.id) clearSession(); hideBar(); renderEditBadge('hidden'); setLiveState('PICKING'); diff --git a/.trae/skills/impeccable/scripts/live-browser.js b/.trae/skills/impeccable/scripts/live-browser.js index 07f09326a..ecfc212c6 100644 --- a/.trae/skills/impeccable/scripts/live-browser.js +++ b/.trae/skills/impeccable/scripts/live-browser.js @@ -6499,6 +6499,19 @@ if (maybeCompleteSteer(msg)) break; console.error('[impeccable] Error:', msg.message); showToast('Error: ' + msg.message, 5000); + // An agent error reply is terminal for the session it names: tear + // it down exactly like 'discarded' (cleanup includes clearSession), + // or the durable localStorage checkpoint survives and every reload + // resurrects a GENERATING bar for a session the server no longer + // knows about (issue #362). + if (msg.id && msg.id === currentSessionId) { + markSessionHandled(); + cleanup(); + break; + } + // A stored-but-not-current checkpoint naming the errored session + // (the error raced a reload) must not resurrect either. + if (msg.id && loadSession()?.id === msg.id) clearSession(); hideBar(); renderEditBadge('hidden'); setLiveState('PICKING'); diff --git a/.vibe/skills/impeccable/scripts/live-browser.js b/.vibe/skills/impeccable/scripts/live-browser.js index 07f09326a..ecfc212c6 100644 --- a/.vibe/skills/impeccable/scripts/live-browser.js +++ b/.vibe/skills/impeccable/scripts/live-browser.js @@ -6499,6 +6499,19 @@ if (maybeCompleteSteer(msg)) break; console.error('[impeccable] Error:', msg.message); showToast('Error: ' + msg.message, 5000); + // An agent error reply is terminal for the session it names: tear + // it down exactly like 'discarded' (cleanup includes clearSession), + // or the durable localStorage checkpoint survives and every reload + // resurrects a GENERATING bar for a session the server no longer + // knows about (issue #362). + if (msg.id && msg.id === currentSessionId) { + markSessionHandled(); + cleanup(); + break; + } + // A stored-but-not-current checkpoint naming the errored session + // (the error raced a reload) must not resurrect either. + if (msg.id && loadSession()?.id === msg.id) clearSession(); hideBar(); renderEditBadge('hidden'); setLiveState('PICKING'); diff --git a/plugin/skills/impeccable/scripts/live-browser.js b/plugin/skills/impeccable/scripts/live-browser.js index 07f09326a..ecfc212c6 100644 --- a/plugin/skills/impeccable/scripts/live-browser.js +++ b/plugin/skills/impeccable/scripts/live-browser.js @@ -6499,6 +6499,19 @@ if (maybeCompleteSteer(msg)) break; console.error('[impeccable] Error:', msg.message); showToast('Error: ' + msg.message, 5000); + // An agent error reply is terminal for the session it names: tear + // it down exactly like 'discarded' (cleanup includes clearSession), + // or the durable localStorage checkpoint survives and every reload + // resurrects a GENERATING bar for a session the server no longer + // knows about (issue #362). + if (msg.id && msg.id === currentSessionId) { + markSessionHandled(); + cleanup(); + break; + } + // A stored-but-not-current checkpoint naming the errored session + // (the error raced a reload) must not resurrect either. + if (msg.id && loadSession()?.id === msg.id) clearSession(); hideBar(); renderEditBadge('hidden'); setLiveState('PICKING');