fix(dashboard): clear orphaned chat pane state

This commit is contained in:
Brennan Benson
2026-08-12 20:00:40 -07:00
parent 43eb1103ca
commit e910f63081
2 changed files with 18 additions and 1 deletions
@@ -64,7 +64,8 @@ function seedDrafts(store: ReturnType<typeof createTestStore>): void {
nativeChatLaunchDraftByTabId: {
[TAB1]: draft(TAB1, 'https://github.com/o/r/issues/1'),
[TAB2]: draft(TAB2, 'https://github.com/o/r/issues/2')
}
},
runtimeNativeChatLeafIdByTabId: { [TAB1]: 'leaf-1', [TAB2]: 'leaf-2' }
})
}
@@ -96,6 +97,16 @@ describe('nativeChatLaunchDraftByTabId teardown', () => {
expect(s.nativeChatLaunchDraftByTabId[TAB2]).toBeDefined()
})
it('orphan cleanup drops runtime chat ownership for the removed tab only', () => {
const store = createTestStore()
seedDrafts(store)
const patch = buildOrphanTerminalCleanupPatch(store.getState(), WT1, new Set([TAB1]))
expect(patch.runtimeNativeChatLeafIdByTabId[TAB1]).toBeUndefined()
expect(patch.runtimeNativeChatLeafIdByTabId[TAB2]).toBe('leaf-2')
})
it('single removeWorktree drops drafts for the removed worktree only', async () => {
const store = createTestStore()
seedDrafts(store)
@@ -39,6 +39,7 @@ type OrphanTerminalCleanupState = Pick<
| 'tabsByWorktree'
| 'ptyIdsByTabId'
| 'runtimePaneTitlesByTabId'
| 'runtimeNativeChatLeafIdByTabId'
| 'expandedPaneByTabId'
| 'canExpandPaneByTabId'
| 'terminalLayoutsByTabId'
@@ -91,6 +92,7 @@ export function buildOrphanTerminalCleanupPatch(
| 'tabsByWorktree'
| 'ptyIdsByTabId'
| 'runtimePaneTitlesByTabId'
| 'runtimeNativeChatLeafIdByTabId'
| 'expandedPaneByTabId'
| 'canExpandPaneByTabId'
| 'terminalLayoutsByTabId'
@@ -111,6 +113,7 @@ export function buildOrphanTerminalCleanupPatch(
tabsByWorktree: state.tabsByWorktree,
ptyIdsByTabId: state.ptyIdsByTabId,
runtimePaneTitlesByTabId: state.runtimePaneTitlesByTabId,
runtimeNativeChatLeafIdByTabId: state.runtimeNativeChatLeafIdByTabId,
expandedPaneByTabId: state.expandedPaneByTabId,
canExpandPaneByTabId: state.canExpandPaneByTabId,
terminalLayoutsByTabId: state.terminalLayoutsByTabId,
@@ -133,6 +136,7 @@ export function buildOrphanTerminalCleanupPatch(
)
const nextPtyIdsByTabId = { ...state.ptyIdsByTabId }
const nextRuntimePaneTitlesByTabId = { ...state.runtimePaneTitlesByTabId }
const nextRuntimeNativeChatLeafIdByTabId = { ...state.runtimeNativeChatLeafIdByTabId }
const nextExpandedPaneByTabId = { ...state.expandedPaneByTabId }
const nextCanExpandPaneByTabId = { ...state.canExpandPaneByTabId }
const nextTerminalLayoutsByTabId = { ...state.terminalLayoutsByTabId }
@@ -160,6 +164,7 @@ export function buildOrphanTerminalCleanupPatch(
for (const orphanTabId of orphanTerminalIds) {
delete nextPtyIdsByTabId[orphanTabId]
delete nextRuntimePaneTitlesByTabId[orphanTabId]
delete nextRuntimeNativeChatLeafIdByTabId[orphanTabId]
delete nextExpandedPaneByTabId[orphanTabId]
delete nextCanExpandPaneByTabId[orphanTabId]
delete nextTerminalLayoutsByTabId[orphanTabId]
@@ -191,6 +196,7 @@ export function buildOrphanTerminalCleanupPatch(
},
ptyIdsByTabId: nextPtyIdsByTabId,
runtimePaneTitlesByTabId: nextRuntimePaneTitlesByTabId,
runtimeNativeChatLeafIdByTabId: nextRuntimeNativeChatLeafIdByTabId,
expandedPaneByTabId: nextExpandedPaneByTabId,
canExpandPaneByTabId: nextCanExpandPaneByTabId,
terminalLayoutsByTabId: nextTerminalLayoutsByTabId,