715 lines · 26.8 KB · Swift
RawDownload
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.