import CodexBarCoreimport Foundationimport ServiceManagement extension SettingsStore { private static let mergedOverviewSelectionEditedActiveProvidersKey = "mergedOverviewSelectionEditedActiveProviders" var refreshFrequency: RefreshFrequency { get { self.defaultsState.refreshFrequency } set { self.defaultsState.refreshFrequency = newValue self.userDefaults.set(newValue.rawValue, forKey: "refreshFrequency") } } var launchAtLogin: Bool { get { self.defaultsState.launchAtLogin } set { self.defaultsState.launchAtLogin = newValue self.userDefaults.set(newValue, forKey: "launchAtLogin") LaunchAtLoginManager.setEnabled(newValue) } } var debugMenuEnabled: Bool { get { self.defaultsState.debugMenuEnabled } set { self.defaultsState.debugMenuEnabled = newValue self.userDefaults.set(newValue, forKey: "debugMenuEnabled") } } var debugDisableKeychainAccess: Bool { get { self.defaultsState.debugDisableKeychainAccess } set { self.defaultsState.debugDisableKeychainAccess = newValue self.userDefaults.set(newValue, forKey: "debugDisableKeychainAccess") if Self.shouldBridgeSharedDefaults(for: self.userDefaults) { Self.sharedDefaults?.set(newValue, forKey: "debugDisableKeychainAccess") } KeychainAccessGate.isDisabled = newValue } } var debugFileLoggingEnabled: Bool { get { self.defaultsState.debugFileLoggingEnabled } set { self.defaultsState.debugFileLoggingEnabled = newValue self.userDefaults.set(newValue, forKey: "debugFileLoggingEnabled") CodexBarLog.setFileLoggingEnabled(newValue) } } var debugLogLevel: CodexBarLog.Level { get { let raw = self.defaultsState.debugLogLevelRaw return CodexBarLog.parseLevel(raw) ?? .verbose } set { self.defaultsState.debugLogLevelRaw = newValue.rawValue self.userDefaults.set(newValue.rawValue, forKey: "debugLogLevel") CodexBarLog.setLogLevel(newValue) } } var debugKeepCLISessionsAlive: Bool { get { self.defaultsState.debugKeepCLISessionsAlive } set { self.defaultsState.debugKeepCLISessionsAlive = newValue self.userDefaults.set(newValue, forKey: "debugKeepCLISessionsAlive") } } var isVerboseLoggingEnabled: Bool { self.debugLogLevel.rank <= CodexBarLog.Level.verbose.rank } private var debugLoadingPatternRaw: String? { get { self.defaultsState.debugLoadingPatternRaw } set { self.defaultsState.debugLoadingPatternRaw = newValue if let raw = newValue { self.userDefaults.set(raw, forKey: "debugLoadingPattern") } else { self.userDefaults.removeObject(forKey: "debugLoadingPattern") } } } var statusChecksEnabled: Bool { get { self.defaultsState.statusChecksEnabled } set { self.defaultsState.statusChecksEnabled = newValue self.userDefaults.set(newValue, forKey: "statusChecksEnabled") } } var sessionQuotaNotificationsEnabled: Bool { get { self.defaultsState.sessionQuotaNotificationsEnabled } set { self.defaultsState.sessionQuotaNotificationsEnabled = newValue self.userDefaults.set(newValue, forKey: "sessionQuotaNotificationsEnabled") } } var quotaWarningNotificationsEnabled: Bool { get { self.defaultsState.quotaWarningNotificationsEnabled } set { self.defaultsState.quotaWarningNotificationsEnabled = newValue self.userDefaults.set(newValue, forKey: "quotaWarningNotificationsEnabled") } } var quotaWarningThresholds: [Int] { get { QuotaWarningThresholds.sanitized(self.defaultsState.quotaWarningThresholdsRaw) } set { let sanitized = QuotaWarningThresholds.sanitized(newValue) self.defaultsState.quotaWarningThresholdsRaw = sanitized self.defaultsState.quotaWarningSessionThresholdsRaw = sanitized self.defaultsState.quotaWarningWeeklyThresholdsRaw = sanitized self.userDefaults.set(sanitized, forKey: "quotaWarningThresholds") self.userDefaults.set(sanitized, forKey: "quotaWarningSessionThresholds") self.userDefaults.set(sanitized, forKey: "quotaWarningWeeklyThresholds") } } func quotaWarningThresholds(_ window: QuotaWarningWindow) -> [Int] { switch window { case .session: QuotaWarningThresholds.sanitized(self.defaultsState.quotaWarningSessionThresholdsRaw) case .weekly: QuotaWarningThresholds.sanitized(self.defaultsState.quotaWarningWeeklyThresholdsRaw) } } func setQuotaWarningThresholds(_ window: QuotaWarningWindow, thresholds: [Int]) { let sanitized = QuotaWarningThresholds.sanitized(thresholds) switch window { case .session: self.defaultsState.quotaWarningSessionThresholdsRaw = sanitized self.userDefaults.set(sanitized, forKey: "quotaWarningSessionThresholds") case .weekly: self.defaultsState.quotaWarningWeeklyThresholdsRaw = sanitized self.userDefaults.set(sanitized, forKey: "quotaWarningWeeklyThresholds") } } func quotaWarningWindowEnabled(_ window: QuotaWarningWindow) -> Bool { switch window { case .session: self.defaultsState.quotaWarningSessionEnabled case .weekly: self.defaultsState.quotaWarningWeeklyEnabled } } func setQuotaWarningWindowEnabled(_ window: QuotaWarningWindow, enabled: Bool) { switch window { case .session: self.defaultsState.quotaWarningSessionEnabled = enabled self.userDefaults.set(enabled, forKey: "quotaWarningSessionEnabled") case .weekly: self.defaultsState.quotaWarningWeeklyEnabled = enabled self.userDefaults.set(enabled, forKey: "quotaWarningWeeklyEnabled") } } var quotaWarningSoundEnabled: Bool { get { self.defaultsState.quotaWarningSoundEnabled } set { self.defaultsState.quotaWarningSoundEnabled = newValue self.userDefaults.set(newValue, forKey: "quotaWarningSoundEnabled") } } var quotaWarningMarkersVisible: Bool { get { self.defaultsState.quotaWarningMarkersVisible } set { self.defaultsState.quotaWarningMarkersVisible = newValue self.userDefaults.set(newValue, forKey: "quotaWarningMarkersVisible") } } var weeklyProgressWorkDays: Int? { get { self.defaultsState.weeklyProgressWorkDays } set { self.defaultsState.weeklyProgressWorkDays = newValue if let newValue { self.userDefaults.set(newValue, forKey: "weeklyProgressWorkDays") } else { self.userDefaults.removeObject(forKey: "weeklyProgressWorkDays") } } } var usageBarsShowUsed: Bool { get { self.defaultsState.usageBarsShowUsed } set { self.defaultsState.usageBarsShowUsed = newValue self.userDefaults.set(newValue, forKey: "usageBarsShowUsed") } } var resetTimesShowAbsolute: Bool { get { self.defaultsState.resetTimesShowAbsolute } set { self.defaultsState.resetTimesShowAbsolute = newValue self.userDefaults.set(newValue, forKey: "resetTimesShowAbsolute") } } var providerChangelogLinksEnabled: Bool { get { self.defaultsState.providerChangelogLinksEnabled } set { self.defaultsState.providerChangelogLinksEnabled = newValue self.userDefaults.set(newValue, forKey: "providerChangelogLinksEnabled") } } var menuBarShowsBrandIconWithPercent: Bool { get { self.defaultsState.menuBarShowsBrandIconWithPercent } set { self.defaultsState.menuBarShowsBrandIconWithPercent = newValue self.userDefaults.set(newValue, forKey: "menuBarShowsBrandIconWithPercent") } } private var menuBarDisplayModeRaw: String? { get { self.defaultsState.menuBarDisplayModeRaw } set { self.defaultsState.menuBarDisplayModeRaw = newValue if let raw = newValue { self.userDefaults.set(raw, forKey: "menuBarDisplayMode") } else { self.userDefaults.removeObject(forKey: "menuBarDisplayMode") } } } var menuBarDisplayMode: MenuBarDisplayMode { get { MenuBarDisplayMode(rawValue: self.menuBarDisplayModeRaw ?? "") ?? .percent } set { self.menuBarDisplayModeRaw = newValue.rawValue } } private var kiroMenuBarDisplayModeRaw: String? { get { self.defaultsState.kiroMenuBarDisplayModeRaw } set { self.defaultsState.kiroMenuBarDisplayModeRaw = newValue if let raw = newValue { self.userDefaults.set(raw, forKey: "kiroMenuBarDisplayMode") } else { self.userDefaults.removeObject(forKey: "kiroMenuBarDisplayMode") } } } var kiroMenuBarDisplayMode: KiroMenuBarDisplayMode { get { KiroMenuBarDisplayMode(rawValue: self.kiroMenuBarDisplayModeRaw ?? "") ?? .automatic } set { self.kiroMenuBarDisplayModeRaw = newValue.rawValue } } var multiAccountMenuLayout: MultiAccountMenuLayout { get { MultiAccountMenuLayout(rawValue: self.defaultsState.multiAccountMenuLayoutRaw) ?? .segmented } set { self.defaultsState.multiAccountMenuLayoutRaw = newValue.rawValue self.userDefaults.set(newValue.rawValue, forKey: "multiAccountMenuLayout") } } var showAllTokenAccountsInMenu: Bool { get { self.multiAccountMenuLayout == .stacked } set { self.multiAccountMenuLayout = newValue ? .stacked : .segmented } } var historicalTrackingEnabled: Bool { get { self.defaultsState.historicalTrackingEnabled } set { self.defaultsState.historicalTrackingEnabled = newValue self.userDefaults.set(newValue, forKey: "historicalTrackingEnabled") } } var menuBarMetricPreferencesRaw: [String: String] { get { self.defaultsState.menuBarMetricPreferencesRaw } set { self.defaultsState.menuBarMetricPreferencesRaw = newValue self.userDefaults.set(newValue, forKey: "menuBarMetricPreferences") } } var copilotIconSecondaryWindowIDRaw: String { get { self.defaultsState.copilotIconSecondaryWindowIDRaw } set { self.defaultsState.copilotIconSecondaryWindowIDRaw = newValue self.userDefaults.set(newValue, forKey: "copilotIconSecondaryWindowID") } } var costUsageEnabled: Bool { get { self.defaultsState.costUsageEnabled } set { self.defaultsState.costUsageEnabled = newValue self.userDefaults.set(newValue, forKey: "tokenCostUsageEnabled") } } var costUsageHistoryDays: Int { get { self.defaultsState.costUsageHistoryDays } set { let clamped = max(1, min(365, newValue)) self.defaultsState.costUsageHistoryDays = clamped self.userDefaults.set(clamped, forKey: "tokenCostUsageHistoryDays") } } var hidePersonalInfo: Bool { get { self.defaultsState.hidePersonalInfo } set { self.defaultsState.hidePersonalInfo = newValue self.userDefaults.set(newValue, forKey: "hidePersonalInfo") } } var randomBlinkEnabled: Bool { get { self.defaultsState.randomBlinkEnabled } set { self.defaultsState.randomBlinkEnabled = newValue self.userDefaults.set(newValue, forKey: "randomBlinkEnabled") } } var confettiOnWeeklyLimitResetsEnabled: Bool { get { self.defaultsState.confettiOnWeeklyLimitResetsEnabled } set { self.defaultsState.confettiOnWeeklyLimitResetsEnabled = newValue self.userDefaults.set(newValue, forKey: "confettiOnWeeklyLimitResetsEnabled") } } var menuBarShowsHighestUsage: Bool { get { self.defaultsState.menuBarShowsHighestUsage } set { self.defaultsState.menuBarShowsHighestUsage = newValue self.userDefaults.set(newValue, forKey: "menuBarShowsHighestUsage") } } var claudeOAuthKeychainPromptMode: ClaudeOAuthKeychainPromptMode { get { let raw = self.defaultsState.claudeOAuthKeychainPromptModeRaw return ClaudeOAuthKeychainPromptMode(rawValue: raw ?? "") ?? .onlyOnUserAction } set { self.defaultsState.claudeOAuthKeychainPromptModeRaw = newValue.rawValue self.userDefaults.set(newValue.rawValue, forKey: "claudeOAuthKeychainPromptMode") } } var claudeOAuthKeychainReadStrategy: ClaudeOAuthKeychainReadStrategy { get { guard let raw = self.defaultsState.claudeOAuthKeychainReadStrategyRaw else { return .securityCLIExperimental } return ClaudeOAuthKeychainReadStrategy(rawValue: raw) ?? .securityFramework } set { self.defaultsState.claudeOAuthKeychainReadStrategyRaw = newValue.rawValue self.userDefaults.set(newValue.rawValue, forKey: "claudeOAuthKeychainReadStrategy") } } var claudeOAuthPromptFreeCredentialsEnabled: Bool { get { self.claudeOAuthKeychainReadStrategy == .securityCLIExperimental } set { self.claudeOAuthKeychainReadStrategy = newValue ? .securityCLIExperimental : .securityFramework } } var claudeWebExtrasEnabled: Bool { get { self.claudeWebExtrasEnabledRaw } set { self.claudeWebExtrasEnabledRaw = newValue } } var copilotBudgetExtrasEnabled: Bool { get { self.defaultsState.copilotBudgetExtrasEnabled } set { self.defaultsState.copilotBudgetExtrasEnabled = newValue self.userDefaults.set(newValue, forKey: "copilotBudgetExtrasEnabled") CodexBarLog.logger(LogCategories.settings).info( "Copilot budget extras updated", metadata: ["enabled": newValue ? "1" : "0"]) } } private var claudeWebExtrasEnabledRaw: Bool { get { self.defaultsState.claudeWebExtrasEnabledRaw } set { self.defaultsState.claudeWebExtrasEnabledRaw = newValue self.userDefaults.set(newValue, forKey: "claudeWebExtrasEnabled") CodexBarLog.logger(LogCategories.settings).info( "Claude web extras updated", metadata: ["enabled": newValue ? "1" : "0"]) } } var showOptionalCreditsAndExtraUsage: Bool { get { self.defaultsState.showOptionalCreditsAndExtraUsage } set { self.defaultsState.showOptionalCreditsAndExtraUsage = newValue self.userDefaults.set(newValue, forKey: "showOptionalCreditsAndExtraUsage") } } var openAIWebAccessEnabled: Bool { get { self.defaultsState.openAIWebAccessEnabled } set { self.defaultsState.openAIWebAccessEnabled = newValue self.userDefaults.set(newValue, forKey: "openAIWebAccessEnabled") CodexBarLog.logger(LogCategories.settings).info( "OpenAI web access updated", metadata: ["enabled": newValue ? "1" : "0"]) } } var openAIWebBatterySaverEnabled: Bool { get { self.defaultsState.openAIWebBatterySaverEnabled } set { self.defaultsState.openAIWebBatterySaverEnabled = newValue self.userDefaults.set(newValue, forKey: "openAIWebBatterySaverEnabled") CodexBarLog.logger(LogCategories.settings).info( "OpenAI web battery saver updated", metadata: ["enabled": newValue ? "1" : "0"]) } } var providerStorageFootprintsEnabled: Bool { get { self.defaultsState.providerStorageFootprintsEnabled } set { self.defaultsState.providerStorageFootprintsEnabled = newValue self.userDefaults.set(newValue, forKey: "providerStorageFootprintsEnabled") CodexBarLog.logger(LogCategories.settings).info( "Provider storage footprints updated", metadata: ["enabled": newValue ? "1" : "0"]) } } var jetbrainsIDEBasePath: String { get { self.defaultsState.jetbrainsIDEBasePath } set { self.defaultsState.jetbrainsIDEBasePath = newValue self.userDefaults.set(newValue, forKey: "jetbrainsIDEBasePath") } } var mergeIcons: Bool { get { self.defaultsState.mergeIcons } set { self.defaultsState.mergeIcons = newValue self.userDefaults.set(newValue, forKey: "mergeIcons") } } var switcherShowsIcons: Bool { get { self.defaultsState.switcherShowsIcons } set { self.defaultsState.switcherShowsIcons = newValue self.userDefaults.set(newValue, forKey: "switcherShowsIcons") } } var mergedMenuLastSelectedWasOverview: Bool { get { self.mergedMenuLastSelectedWasOverviewStorage } set { self.mergedMenuLastSelectedWasOverviewStorage = newValue self.userDefaults.set(newValue, forKey: "mergedMenuLastSelectedWasOverview") } } private var mergedOverviewSelectedProvidersRaw: [String] { get { self.defaultsState.mergedOverviewSelectedProvidersRaw } set { self.defaultsState.mergedOverviewSelectedProvidersRaw = newValue self.userDefaults.set(newValue, forKey: "mergedOverviewSelectedProviders") } } private var selectedMenuProviderRaw: String? { get { self.selectedMenuProviderRawStorage } set { self.selectedMenuProviderRawStorage = newValue if let raw = newValue { self.userDefaults.set(raw, forKey: "selectedMenuProvider") } else { self.userDefaults.removeObject(forKey: "selectedMenuProvider") } } } Lines 1–500 of 715. Load more
import CodexBarCore import Foundation import ServiceManagement extension SettingsStore { private static let mergedOverviewSelectionEditedActiveProvidersKey = "mergedOverviewSelectionEditedActiveProviders" var refreshFrequency: RefreshFrequency { get { self.defaultsState.refreshFrequency } set { self.defaultsState.refreshFrequency = newValue self.userDefaults.set(newValue.rawValue, forKey: "refreshFrequency") } } var launchAtLogin: Bool { get { self.defaultsState.launchAtLogin } set { self.defaultsState.launchAtLogin = newValue self.userDefaults.set(newValue, forKey: "launchAtLogin") LaunchAtLoginManager.setEnabled(newValue) } } var debugMenuEnabled: Bool { get { self.defaultsState.debugMenuEnabled } set { self.defaultsState.debugMenuEnabled = newValue self.userDefaults.set(newValue, forKey: "debugMenuEnabled") } } var debugDisableKeychainAccess: Bool { get { self.defaultsState.debugDisableKeychainAccess } set { self.defaultsState.debugDisableKeychainAccess = newValue self.userDefaults.set(newValue, forKey: "debugDisableKeychainAccess") if Self.shouldBridgeSharedDefaults(for: self.userDefaults) { Self.sharedDefaults?.set(newValue, forKey: "debugDisableKeychainAccess") } KeychainAccessGate.isDisabled = newValue } } var debugFileLoggingEnabled: Bool { get { self.defaultsState.debugFileLoggingEnabled } set { self.defaultsState.debugFileLoggingEnabled = newValue self.userDefaults.set(newValue, forKey: "debugFileLoggingEnabled") CodexBarLog.setFileLoggingEnabled(newValue) } } var debugLogLevel: CodexBarLog.Level { get { let raw = self.defaultsState.debugLogLevelRaw return CodexBarLog.parseLevel(raw) ?? .verbose } set { self.defaultsState.debugLogLevelRaw = newValue.rawValue self.userDefaults.set(newValue.rawValue, forKey: "debugLogLevel") CodexBarLog.setLogLevel(newValue) } } var debugKeepCLISessionsAlive: Bool { get { self.defaultsState.debugKeepCLISessionsAlive } set { self.defaultsState.debugKeepCLISessionsAlive = newValue self.userDefaults.set(newValue, forKey: "debugKeepCLISessionsAlive") } } var isVerboseLoggingEnabled: Bool { self.debugLogLevel.rank <= CodexBarLog.Level.verbose.rank } private var debugLoadingPatternRaw: String? { get { self.defaultsState.debugLoadingPatternRaw } set { self.defaultsState.debugLoadingPatternRaw = newValue if let raw = newValue { self.userDefaults.set(raw, forKey: "debugLoadingPattern") } else { self.userDefaults.removeObject(forKey: "debugLoadingPattern") } } } var statusChecksEnabled: Bool { get { self.defaultsState.statusChecksEnabled } set { self.defaultsState.statusChecksEnabled = newValue self.userDefaults.set(newValue, forKey: "statusChecksEnabled") } } var sessionQuotaNotificationsEnabled: Bool { get { self.defaultsState.sessionQuotaNotificationsEnabled } set { self.defaultsState.sessionQuotaNotificationsEnabled = newValue self.userDefaults.set(newValue, forKey: "sessionQuotaNotificationsEnabled") } } var quotaWarningNotificationsEnabled: Bool { get { self.defaultsState.quotaWarningNotificationsEnabled } set { self.defaultsState.quotaWarningNotificationsEnabled = newValue self.userDefaults.set(newValue, forKey: "quotaWarningNotificationsEnabled") } } var quotaWarningThresholds: [Int] { get { QuotaWarningThresholds.sanitized(self.defaultsState.quotaWarningThresholdsRaw) } set { let sanitized = QuotaWarningThresholds.sanitized(newValue) self.defaultsState.quotaWarningThresholdsRaw = sanitized self.defaultsState.quotaWarningSessionThresholdsRaw = sanitized self.defaultsState.quotaWarningWeeklyThresholdsRaw = sanitized self.userDefaults.set(sanitized, forKey: "quotaWarningThresholds") self.userDefaults.set(sanitized, forKey: "quotaWarningSessionThresholds") self.userDefaults.set(sanitized, forKey: "quotaWarningWeeklyThresholds") } } func quotaWarningThresholds(_ window: QuotaWarningWindow) -> [Int] { switch window { case .session: QuotaWarningThresholds.sanitized(self.defaultsState.quotaWarningSessionThresholdsRaw) case .weekly: QuotaWarningThresholds.sanitized(self.defaultsState.quotaWarningWeeklyThresholdsRaw) } } func setQuotaWarningThresholds(_ window: QuotaWarningWindow, thresholds: [Int]) { let sanitized = QuotaWarningThresholds.sanitized(thresholds) switch window { case .session: self.defaultsState.quotaWarningSessionThresholdsRaw = sanitized self.userDefaults.set(sanitized, forKey: "quotaWarningSessionThresholds") case .weekly: self.defaultsState.quotaWarningWeeklyThresholdsRaw = sanitized self.userDefaults.set(sanitized, forKey: "quotaWarningWeeklyThresholds") } } func quotaWarningWindowEnabled(_ window: QuotaWarningWindow) -> Bool { switch window { case .session: self.defaultsState.quotaWarningSessionEnabled case .weekly: self.defaultsState.quotaWarningWeeklyEnabled } } func setQuotaWarningWindowEnabled(_ window: QuotaWarningWindow, enabled: Bool) { switch window { case .session: self.defaultsState.quotaWarningSessionEnabled = enabled self.userDefaults.set(enabled, forKey: "quotaWarningSessionEnabled") case .weekly: self.defaultsState.quotaWarningWeeklyEnabled = enabled self.userDefaults.set(enabled, forKey: "quotaWarningWeeklyEnabled") } } var quotaWarningSoundEnabled: Bool { get { self.defaultsState.quotaWarningSoundEnabled } set { self.defaultsState.quotaWarningSoundEnabled = newValue self.userDefaults.set(newValue, forKey: "quotaWarningSoundEnabled") } } var quotaWarningMarkersVisible: Bool { get { self.defaultsState.quotaWarningMarkersVisible } set { self.defaultsState.quotaWarningMarkersVisible = newValue self.userDefaults.set(newValue, forKey: "quotaWarningMarkersVisible") } } var weeklyProgressWorkDays: Int? { get { self.defaultsState.weeklyProgressWorkDays } set { self.defaultsState.weeklyProgressWorkDays = newValue if let newValue { self.userDefaults.set(newValue, forKey: "weeklyProgressWorkDays") } else { self.userDefaults.removeObject(forKey: "weeklyProgressWorkDays") } } } var usageBarsShowUsed: Bool { get { self.defaultsState.usageBarsShowUsed } set { self.defaultsState.usageBarsShowUsed = newValue self.userDefaults.set(newValue, forKey: "usageBarsShowUsed") } } var resetTimesShowAbsolute: Bool { get { self.defaultsState.resetTimesShowAbsolute } set { self.defaultsState.resetTimesShowAbsolute = newValue self.userDefaults.set(newValue, forKey: "resetTimesShowAbsolute") } } var providerChangelogLinksEnabled: Bool { get { self.defaultsState.providerChangelogLinksEnabled } set { self.defaultsState.providerChangelogLinksEnabled = newValue self.userDefaults.set(newValue, forKey: "providerChangelogLinksEnabled") } } var menuBarShowsBrandIconWithPercent: Bool { get { self.defaultsState.menuBarShowsBrandIconWithPercent } set { self.defaultsState.menuBarShowsBrandIconWithPercent = newValue self.userDefaults.set(newValue, forKey: "menuBarShowsBrandIconWithPercent") } } private var menuBarDisplayModeRaw: String? { get { self.defaultsState.menuBarDisplayModeRaw } set { self.defaultsState.menuBarDisplayModeRaw = newValue if let raw = newValue { self.userDefaults.set(raw, forKey: "menuBarDisplayMode") } else { self.userDefaults.removeObject(forKey: "menuBarDisplayMode") } } } var menuBarDisplayMode: MenuBarDisplayMode { get { MenuBarDisplayMode(rawValue: self.menuBarDisplayModeRaw ?? "") ?? .percent } set { self.menuBarDisplayModeRaw = newValue.rawValue } } private var kiroMenuBarDisplayModeRaw: String? { get { self.defaultsState.kiroMenuBarDisplayModeRaw } set { self.defaultsState.kiroMenuBarDisplayModeRaw = newValue if let raw = newValue { self.userDefaults.set(raw, forKey: "kiroMenuBarDisplayMode") } else { self.userDefaults.removeObject(forKey: "kiroMenuBarDisplayMode") } } } var kiroMenuBarDisplayMode: KiroMenuBarDisplayMode { get { KiroMenuBarDisplayMode(rawValue: self.kiroMenuBarDisplayModeRaw ?? "") ?? .automatic } set { self.kiroMenuBarDisplayModeRaw = newValue.rawValue } } var multiAccountMenuLayout: MultiAccountMenuLayout { get { MultiAccountMenuLayout(rawValue: self.defaultsState.multiAccountMenuLayoutRaw) ?? .segmented } set { self.defaultsState.multiAccountMenuLayoutRaw = newValue.rawValue self.userDefaults.set(newValue.rawValue, forKey: "multiAccountMenuLayout") } } var showAllTokenAccountsInMenu: Bool { get { self.multiAccountMenuLayout == .stacked } set { self.multiAccountMenuLayout = newValue ? .stacked : .segmented } } var historicalTrackingEnabled: Bool { get { self.defaultsState.historicalTrackingEnabled } set { self.defaultsState.historicalTrackingEnabled = newValue self.userDefaults.set(newValue, forKey: "historicalTrackingEnabled") } } var menuBarMetricPreferencesRaw: [String: String] { get { self.defaultsState.menuBarMetricPreferencesRaw } set { self.defaultsState.menuBarMetricPreferencesRaw = newValue self.userDefaults.set(newValue, forKey: "menuBarMetricPreferences") } } var copilotIconSecondaryWindowIDRaw: String { get { self.defaultsState.copilotIconSecondaryWindowIDRaw } set { self.defaultsState.copilotIconSecondaryWindowIDRaw = newValue self.userDefaults.set(newValue, forKey: "copilotIconSecondaryWindowID") } } var costUsageEnabled: Bool { get { self.defaultsState.costUsageEnabled } set { self.defaultsState.costUsageEnabled = newValue self.userDefaults.set(newValue, forKey: "tokenCostUsageEnabled") } } var costUsageHistoryDays: Int { get { self.defaultsState.costUsageHistoryDays } set { let clamped = max(1, min(365, newValue)) self.defaultsState.costUsageHistoryDays = clamped self.userDefaults.set(clamped, forKey: "tokenCostUsageHistoryDays") } } var hidePersonalInfo: Bool { get { self.defaultsState.hidePersonalInfo } set { self.defaultsState.hidePersonalInfo = newValue self.userDefaults.set(newValue, forKey: "hidePersonalInfo") } } var randomBlinkEnabled: Bool { get { self.defaultsState.randomBlinkEnabled } set { self.defaultsState.randomBlinkEnabled = newValue self.userDefaults.set(newValue, forKey: "randomBlinkEnabled") } } var confettiOnWeeklyLimitResetsEnabled: Bool { get { self.defaultsState.confettiOnWeeklyLimitResetsEnabled } set { self.defaultsState.confettiOnWeeklyLimitResetsEnabled = newValue self.userDefaults.set(newValue, forKey: "confettiOnWeeklyLimitResetsEnabled") } } var menuBarShowsHighestUsage: Bool { get { self.defaultsState.menuBarShowsHighestUsage } set { self.defaultsState.menuBarShowsHighestUsage = newValue self.userDefaults.set(newValue, forKey: "menuBarShowsHighestUsage") } } var claudeOAuthKeychainPromptMode: ClaudeOAuthKeychainPromptMode { get { let raw = self.defaultsState.claudeOAuthKeychainPromptModeRaw return ClaudeOAuthKeychainPromptMode(rawValue: raw ?? "") ?? .onlyOnUserAction } set { self.defaultsState.claudeOAuthKeychainPromptModeRaw = newValue.rawValue self.userDefaults.set(newValue.rawValue, forKey: "claudeOAuthKeychainPromptMode") } } var claudeOAuthKeychainReadStrategy: ClaudeOAuthKeychainReadStrategy { get { guard let raw = self.defaultsState.claudeOAuthKeychainReadStrategyRaw else { return .securityCLIExperimental } return ClaudeOAuthKeychainReadStrategy(rawValue: raw) ?? .securityFramework } set { self.defaultsState.claudeOAuthKeychainReadStrategyRaw = newValue.rawValue self.userDefaults.set(newValue.rawValue, forKey: "claudeOAuthKeychainReadStrategy") } } var claudeOAuthPromptFreeCredentialsEnabled: Bool { get { self.claudeOAuthKeychainReadStrategy == .securityCLIExperimental } set { self.claudeOAuthKeychainReadStrategy = newValue ? .securityCLIExperimental : .securityFramework } } var claudeWebExtrasEnabled: Bool { get { self.claudeWebExtrasEnabledRaw } set { self.claudeWebExtrasEnabledRaw = newValue } } var copilotBudgetExtrasEnabled: Bool { get { self.defaultsState.copilotBudgetExtrasEnabled } set { self.defaultsState.copilotBudgetExtrasEnabled = newValue self.userDefaults.set(newValue, forKey: "copilotBudgetExtrasEnabled") CodexBarLog.logger(LogCategories.settings).info( "Copilot budget extras updated", metadata: ["enabled": newValue ? "1" : "0"]) } } private var claudeWebExtrasEnabledRaw: Bool { get { self.defaultsState.claudeWebExtrasEnabledRaw } set { self.defaultsState.claudeWebExtrasEnabledRaw = newValue self.userDefaults.set(newValue, forKey: "claudeWebExtrasEnabled") CodexBarLog.logger(LogCategories.settings).info( "Claude web extras updated", metadata: ["enabled": newValue ? "1" : "0"]) } } var showOptionalCreditsAndExtraUsage: Bool { get { self.defaultsState.showOptionalCreditsAndExtraUsage } set { self.defaultsState.showOptionalCreditsAndExtraUsage = newValue self.userDefaults.set(newValue, forKey: "showOptionalCreditsAndExtraUsage") } } var openAIWebAccessEnabled: Bool { get { self.defaultsState.openAIWebAccessEnabled } set { self.defaultsState.openAIWebAccessEnabled = newValue self.userDefaults.set(newValue, forKey: "openAIWebAccessEnabled") CodexBarLog.logger(LogCategories.settings).info( "OpenAI web access updated", metadata: ["enabled": newValue ? "1" : "0"]) } } var openAIWebBatterySaverEnabled: Bool { get { self.defaultsState.openAIWebBatterySaverEnabled } set { self.defaultsState.openAIWebBatterySaverEnabled = newValue self.userDefaults.set(newValue, forKey: "openAIWebBatterySaverEnabled") CodexBarLog.logger(LogCategories.settings).info( "OpenAI web battery saver updated", metadata: ["enabled": newValue ? "1" : "0"]) } } var providerStorageFootprintsEnabled: Bool { get { self.defaultsState.providerStorageFootprintsEnabled } set { self.defaultsState.providerStorageFootprintsEnabled = newValue self.userDefaults.set(newValue, forKey: "providerStorageFootprintsEnabled") CodexBarLog.logger(LogCategories.settings).info( "Provider storage footprints updated", metadata: ["enabled": newValue ? "1" : "0"]) } } var jetbrainsIDEBasePath: String { get { self.defaultsState.jetbrainsIDEBasePath } set { self.defaultsState.jetbrainsIDEBasePath = newValue self.userDefaults.set(newValue, forKey: "jetbrainsIDEBasePath") } } var mergeIcons: Bool { get { self.defaultsState.mergeIcons } set { self.defaultsState.mergeIcons = newValue self.userDefaults.set(newValue, forKey: "mergeIcons") } } var switcherShowsIcons: Bool { get { self.defaultsState.switcherShowsIcons } set { self.defaultsState.switcherShowsIcons = newValue self.userDefaults.set(newValue, forKey: "switcherShowsIcons") } } var mergedMenuLastSelectedWasOverview: Bool { get { self.mergedMenuLastSelectedWasOverviewStorage } set { self.mergedMenuLastSelectedWasOverviewStorage = newValue self.userDefaults.set(newValue, forKey: "mergedMenuLastSelectedWasOverview") } } private var mergedOverviewSelectedProvidersRaw: [String] { get { self.defaultsState.mergedOverviewSelectedProvidersRaw } set { self.defaultsState.mergedOverviewSelectedProvidersRaw = newValue self.userDefaults.set(newValue, forKey: "mergedOverviewSelectedProviders") } } private var selectedMenuProviderRaw: String? { get { self.selectedMenuProviderRawStorage } set { self.selectedMenuProviderRawStorage = newValue if let raw = newValue { self.userDefaults.set(raw, forKey: "selectedMenuProvider") } else { self.userDefaults.removeObject(forKey: "selectedMenuProvider") } } }