diff --git a/src/renderer/src/components/sidebar/use-worktree-sleep-state.ts b/src/renderer/src/components/sidebar/use-worktree-sleep-state.ts index 0db546d8652..1fe5d72063d 100644 --- a/src/renderer/src/components/sidebar/use-worktree-sleep-state.ts +++ b/src/renderer/src/components/sidebar/use-worktree-sleep-state.ts @@ -22,7 +22,16 @@ type LiveAgentGeneration = { worktreeIds: ReadonlySet } +type SleepingWorktreeGeneration = { + tabsByWorktree: SleepStateInput['tabsByWorktree'] + ptyIdsByTabId: SleepStateInput['ptyIdsByTabId'] + browserTabsByWorktree: SleepStateInput['browserTabsByWorktree'] + worktreeIdsWithLiveAgent: ReadonlySet + sleepingByWorktree: Map +} + let liveAgentGeneration: LiveAgentGeneration | null = null +let sleepingWorktreeGeneration: SleepingWorktreeGeneration | null = null // Why cached across cards: zustand re-runs every mounted card's selector on every // store write, and the live-agent set is a whole-store scan. Keyed on the same @@ -52,6 +61,44 @@ function selectWorktreeIdsWithLiveAgent(state: SleepStateInput): ReadonlySet - isInactiveWorkspace( - worktreeId, - state.tabsByWorktree, - state.ptyIdsByTabId, - state.browserTabsByWorktree, - selectWorktreeIdsWithLiveAgent(state) - ) - ) + return useAppStore((state) => selectIsSleepingWorktree(state, worktreeId)) } export function resetWorktreeSleepStateCacheForTests(): void { liveAgentGeneration = null + sleepingWorktreeGeneration = null }