fix: preserve sessions when bootstrap races with event stream
Two fixes for intermittent "sessions missing at app launch": - loadSessions: if session.list comes back empty but the store already has sessions populated via WS events, don't clobber. OpenCode can answer HTTP with [] while the WS snapshot is still arriving. - loadSessions: wrap SDK errors preserving HTTP status so retry()'s transient detection (5xx) actually fires. String(errorObject) was erasing the status and retry gave up after one attempt. - retry: broaden transient 5xx window from just 502/503 to any 5xx. OpenCode can return 500/504 while warming up (session store reading from disk), and those deserve the same retry treatment. - Log bootstrap empty-session retries for future diagnosis.
This commit is contained in:
@@ -24,9 +24,10 @@ function isTransientError(error: unknown): boolean {
|
||||
if (!error) return false
|
||||
const message = String(error instanceof Error ? error.message : error).toLowerCase()
|
||||
if (TRANSIENT_MESSAGES.some((m) => message.includes(m))) return true
|
||||
// SDK errors from HTTP 502/503 responses (VS Code bridge returns these before OpenCode is ready)
|
||||
// Any HTTP 5xx is considered transient — server-side issues during warmup
|
||||
// (OpenCode reading sessions from disk, bridge not ready, etc.) are retryable.
|
||||
const status = (error as { status?: number })?.status
|
||||
if (status === 502 || status === 503) return true
|
||||
if (typeof status === "number" && status >= 500 && status < 600) return true
|
||||
return false
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user