{t('settings.general.defaultPermissionDescription')}
+{t('settings.general.thinkingDescription')}
diff --git a/desktop/src/stores/sessionStore.test.ts b/desktop/src/stores/sessionStore.test.ts index 51e7d340..699e37ac 100644 --- a/desktop/src/stores/sessionStore.test.ts +++ b/desktop/src/stores/sessionStore.test.ts @@ -17,6 +17,7 @@ vi.mock('../api/sessions', () => ({ })) import { useSessionStore } from './sessionStore' +import { useSettingsStore } from './settingsStore' import { useTabStore } from './tabStore' const initialState = useSessionStore.getState() @@ -59,11 +60,13 @@ describe('sessionStore', () => { isLoading: false, error: null, }) + useSettingsStore.setState({ permissionMode: 'default' }) useTabStore.setState({ tabs: [], activeTabId: null }) }) afterEach(() => { useSessionStore.setState(initialState) + useSettingsStore.setState({ permissionMode: 'default' }) useTabStore.setState({ tabs: [], activeTabId: null }) }) @@ -262,6 +265,36 @@ describe('sessionStore', () => { .toBe('/workspace/repo/.claude/worktrees/desktop-feature-rail-12345678') }) + it('uses the global default permission mode for new sessions when no session override is provided', async () => { + useSettingsStore.setState({ permissionMode: 'bypassPermissions' }) + createMock.mockResolvedValue({ sessionId: 'session-default-permission', workDir: '/workspace/repo' }) + listMock.mockImplementation(() => new Promise(() => {})) + + await useSessionStore.getState().createSession('/workspace/repo') + + expect(createMock).toHaveBeenCalledWith({ + workDir: '/workspace/repo', + permissionMode: 'bypassPermissions', + }) + expect(useSessionStore.getState().sessions[0]?.permissionMode).toBe('bypassPermissions') + }) + + it('keeps an explicit session permission override ahead of the global default', async () => { + useSettingsStore.setState({ permissionMode: 'bypassPermissions' }) + createMock.mockResolvedValue({ sessionId: 'session-explicit-permission', workDir: '/workspace/repo' }) + listMock.mockImplementation(() => new Promise(() => {})) + + await useSessionStore.getState().createSession('/workspace/repo', { + permissionMode: 'acceptEdits', + }) + + expect(createMock).toHaveBeenCalledWith({ + workDir: '/workspace/repo', + permissionMode: 'acceptEdits', + }) + expect(useSessionStore.getState().sessions[0]?.permissionMode).toBe('acceptEdits') + }) + it('returns the branched session before the background refresh completes', async () => { branchMock.mockResolvedValue({ sessionId: 'session-branch-1', diff --git a/desktop/src/stores/sessionStore.ts b/desktop/src/stores/sessionStore.ts index ceeaaf82..2728c57a 100644 --- a/desktop/src/stores/sessionStore.ts +++ b/desktop/src/stores/sessionStore.ts @@ -6,6 +6,7 @@ import { type CreateSessionRepositoryOptions, } from '../api/sessions' import { useSessionRuntimeStore } from './sessionRuntimeStore' +import { useSettingsStore } from './settingsStore' import { useTabStore } from './tabStore' import type { SessionListItem } from '../types/session' import type { PermissionMode } from '../types/settings' @@ -79,10 +80,11 @@ export const useSessionStore = create