import fs from 'node:fs/promises' import os from 'node:os' import path from 'node:path' import type { DesktopSettings } from '../src/types/ipc' const SETTINGS_PATH = path.join( os.homedir(), '.local', 'share', 'copilot-api', 'desktop-config.json' ) const DEFAULT_SETTINGS: DesktopSettings = { apiHome: '', oauthApp: 'default', enterpriseUrl: '', lastPort: 4141, minimizeToTray: false, accountType: 'individual', verbose: false, showToken: false, language: 'auto' } function normalizeSettings(settings: Partial | null | undefined): DesktopSettings { return { apiHome: typeof settings?.apiHome === 'string' ? settings.apiHome : DEFAULT_SETTINGS.apiHome, oauthApp: settings?.oauthApp === 'opencode' ? 'opencode' : DEFAULT_SETTINGS.oauthApp, enterpriseUrl: typeof settings?.enterpriseUrl === 'string' ? settings.enterpriseUrl : DEFAULT_SETTINGS.enterpriseUrl, lastPort: typeof settings?.lastPort === 'number' ? settings.lastPort : DEFAULT_SETTINGS.lastPort, minimizeToTray: typeof settings?.minimizeToTray === 'boolean' ? settings.minimizeToTray : DEFAULT_SETTINGS.minimizeToTray, accountType: settings?.accountType === 'business' || settings?.accountType === 'enterprise' ? settings.accountType : DEFAULT_SETTINGS.accountType, verbose: typeof settings?.verbose === 'boolean' ? settings.verbose : DEFAULT_SETTINGS.verbose, showToken: typeof settings?.showToken === 'boolean' ? settings.showToken : DEFAULT_SETTINGS.showToken, language: settings?.language === 'en' || settings?.language === 'zh' || settings?.language === 'auto' ? settings.language : DEFAULT_SETTINGS.language } } export async function readSettings(): Promise { try { const raw = await fs.readFile(SETTINGS_PATH, 'utf8') return normalizeSettings(JSON.parse(raw) as Partial) } catch { return { ...DEFAULT_SETTINGS } } } export async function writeSettings(settings: DesktopSettings): Promise { await fs.mkdir(path.dirname(SETTINGS_PATH), { recursive: true }) await fs.writeFile(SETTINGS_PATH, JSON.stringify(normalizeSettings(settings), null, 2), 'utf8') }