From 2dc740402502e7aebf8e567f898ff9fb21e9ff9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E5=91=98=E9=98=BF=E6=B1=9F=28Relakkes?= =?UTF-8?q?=29?= Date: Fri, 3 Jul 2026 19:12:30 +0800 Subject: [PATCH] fix: treat skill center as non-session tab --- desktop/src/components/layout/TabBar.test.tsx | 32 +++++++++++++++++++ desktop/src/components/layout/TabBar.tsx | 2 ++ 2 files changed, 34 insertions(+) diff --git a/desktop/src/components/layout/TabBar.test.tsx b/desktop/src/components/layout/TabBar.test.tsx index 47b09cd9..395c7a3c 100644 --- a/desktop/src/components/layout/TabBar.test.tsx +++ b/desktop/src/components/layout/TabBar.test.tsx @@ -1166,6 +1166,38 @@ describe('TabBar', () => { expect(useActivityPanelStore.getState().isOpen(tabId)).toBe(false) }) + it('treats the skill center tab as a non-session toolbar target', async () => { + const { TabBar } = await import('./TabBar') + const { SKILL_CENTER_TAB_ID, useTabStore } = await import('../../stores/tabStore') + const { useChatStore } = await import('../../stores/chatStore') + const { useTerminalPanelStore } = await import('../../stores/terminalPanelStore') + + useTabStore.setState({ + tabs: [ + { sessionId: SKILL_CENTER_TAB_ID, title: 'Skills', type: 'skill-center', status: 'idle' }, + ], + activeTabId: SKILL_CENTER_TAB_ID, + }) + useChatStore.setState({ + sessions: {}, + disconnectSession: vi.fn(), + } as Partial>) + + await act(async () => { + render() + }) + + expect(screen.queryByTestId('open-project-menu')).not.toBeInTheDocument() + expect(screen.queryByRole('button', { name: 'Show Workspace' })).not.toBeInTheDocument() + + fireEvent.click(screen.getByRole('button', { name: 'Open Terminal' })) + + const terminalTabs = useTabStore.getState().tabs.filter((tab) => tab.type === 'terminal') + expect(terminalTabs).toHaveLength(1) + expect(useTabStore.getState().activeTabId).toBe(terminalTabs[0]?.sessionId) + expect(useTerminalPanelStore.getState().isPanelOpen(SKILL_CENTER_TAB_ID)).toBe(false) + }) + it('clears session panel state when closing a session tab', async () => { const { TabBar } = await import('./TabBar') const { useTabStore } = await import('../../stores/tabStore') diff --git a/desktop/src/components/layout/TabBar.tsx b/desktop/src/components/layout/TabBar.tsx index d0399d08..3c55e3ab 100644 --- a/desktop/src/components/layout/TabBar.tsx +++ b/desktop/src/components/layout/TabBar.tsx @@ -3,6 +3,7 @@ import { useShallow } from 'zustand/react/shallow' import { SCHEDULED_TAB_ID, SETTINGS_TAB_ID, + SKILL_CENTER_TAB_ID, SUBAGENT_TAB_PREFIX, TERMINAL_TAB_PREFIX, TRACE_LIST_TAB_ID, @@ -51,6 +52,7 @@ function isSessionTabId(tabId: string | null) { if (!tabId) return false return tabId !== SETTINGS_TAB_ID && tabId !== SCHEDULED_TAB_ID && + tabId !== SKILL_CENTER_TAB_ID && tabId !== TRACE_LIST_TAB_ID && !tabId.startsWith(TERMINAL_TAB_PREFIX) && !tabId.startsWith(TRACE_TAB_PREFIX) &&