diff --git a/apps/frontend/src/main/ipc-handlers/terminal-handlers.ts b/apps/frontend/src/main/ipc-handlers/terminal-handlers.ts index 0bfef37956..70c0c3065a 100644 --- a/apps/frontend/src/main/ipc-handlers/terminal-handlers.ts +++ b/apps/frontend/src/main/ipc-handlers/terminal-handlers.ts @@ -10,7 +10,7 @@ import { terminalNameGenerator } from '../terminal-name-generator'; import { readSettingsFileAsync } from '../settings-utils'; import { debugLog, } from '../../shared/utils/debug-logger'; import { migrateSession } from '../claude-profile/session-utils'; -import { createProfileDirectory } from '../claude-profile/profile-utils'; +import { createProfileDirectory, expandHomePath } from '../claude-profile/profile-utils'; import { isValidConfigDir } from '../utils/config-path-validator'; @@ -161,10 +161,13 @@ export function registerTerminalHandlers( }; } - // Ensure config directory exists + // Ensure config directory exists (expand ~ before passing to Node.js fs functions, + // which do not perform shell tilde expansion) + const resolvedConfigDir = expandHomePath(profile.configDir); + profile.configDir = resolvedConfigDir; const { mkdirSync, existsSync } = await import('fs'); - if (!existsSync(profile.configDir)) { - mkdirSync(profile.configDir, { recursive: true }); + if (!existsSync(resolvedConfigDir)) { + mkdirSync(resolvedConfigDir, { recursive: true }); } } diff --git a/apps/frontend/src/renderer/components/settings/AccountSettings.tsx b/apps/frontend/src/renderer/components/settings/AccountSettings.tsx index c59c3232d8..ec1dcf9d2f 100644 --- a/apps/frontend/src/renderer/components/settings/AccountSettings.tsx +++ b/apps/frontend/src/renderer/components/settings/AccountSettings.tsx @@ -339,6 +339,12 @@ export function AccountSettings({ settings, onSettingsChange, isOpen }: AccountS description: authResult.error || t('accounts.toast.tryAgain'), }); } + } else if (!result.success) { + toast({ + variant: 'destructive', + title: t('accounts.toast.addProfileFailed'), + description: result.error || t('accounts.toast.tryAgain'), + }); } } catch (_err) { toast({