[Desktop] Browser/preview pane is torn down after 30 min hidden (WarmLifecycle:preview, idleTimeoutMs=18e5) and never restored on refocus — please make it configurable or restore on warm-up
Environment: Claude Desktop 1.46388.4 (macOS 26.6.2, Apple Silicon), Code tab; embedded Claude Code 2.1.260. main.log shows [WarmLifecycle:preview] Idle timeout reached 12× today.
What happens: every session's Browser pane has a WarmLifecycle:preview timer hard-coded to idleTimeoutMs: () => 18e5 with timeoutOnHidden: true. When the session tab is hidden for 30 minutes (user is on another session), teardownSessionPreview removes the pane. On refocus, onWarmUp is async () => void 0, so the pane never comes back; only the session itself can reopen it (by navigating again), which requires the user to send a message first.
Why it hurts: I run dozens of parallel sessions. Each keeps a per-session status page in its Browser pane (local HTML served on 127.0.0.1) that I read before replying. Any session I haven't looked at for 30 min has lost its pane, so my first message is always "reopen the status page", which defeats the purpose.
Ask (any of): (1) a setting / env var / managed-settings key for the preview idle timeout, or 0 = never; (2) restore the last Browser-pane tab on refocus instead of a no-op warm-up; (3) don't count a tab that only shows a localhost page against the idle budget. Session idle (900s) is a separate mechanism and can stay as-is.
Related: #82023, #86899, #87777 (other WarmLifecycle idle side-effects).
Why I can't work around it locally (checked before filing): the timeout is a literal in app.asar, not read from any setting or env var; EnableEmbeddedAsarIntegrityValidation and OnlyLoadAppFromAsar fuses are enabled and Info.plist carries the asar hash, so patching is not an option; the only skip condition at fire time is "session tab currently visible", and there is no way to keep one session's tab visible while working in another.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗