@@ -95,41 +95,47 @@ extension CodexBarCLI {
9595 let verbose = values. flags. contains ( " verbose " )
9696
9797 guard let window = Self . decodeGuardWindow ( from: values) else {
98- Self . exitGuardArgumentError ( " --window must be session|weekly. " )
98+ Self . exitGuardArgumentError ( " --window must be session|weekly. " , output : output )
9999 }
100100
101101 let minimumRemainingPercent : Double
102102 switch Self . decodeGuardMinimumRemaining ( from: values) {
103103 case let . success( value) :
104104 minimumRemainingPercent = value
105105 case . failure:
106- Self . exitGuardArgumentError ( " --min-remaining must be a finite percent between 0 and 100. " )
106+ Self . exitGuardArgumentError (
107+ " --min-remaining must be a finite percent between 0 and 100. " ,
108+ output: output)
107109 }
108110
109111 let timeout : TimeInterval
110112 switch Self . decodeGuardTimeout ( from: values) {
111113 case let . success( value) :
112114 timeout = value
113115 case . failure:
114- Self . exitGuardArgumentError ( " --timeout must be a finite number of seconds from 0 through 86400. " )
116+ Self . exitGuardArgumentError (
117+ " --timeout must be a finite number of seconds from 0 through 86400. " ,
118+ output: output)
115119 }
116120
117121 let provider : UsageProvider
118122 switch Self . decodeGuardProvider ( from: values) {
119123 case let . success( value) :
120124 provider = value
121125 case let . failure( error) :
122- Self . exitGuardArgumentError ( error. localizedDescription)
126+ Self . exitGuardArgumentError ( error. localizedDescription, output : output )
123127 }
124128 let config = Self . loadConfig ( output: output)
125129
126130 let outcome = await Self . runGuardFetch ( timeout: timeout) {
127- await Self . guardFetchOutcome (
128- provider: provider,
129- window: window,
130- config: config,
131- verbose: verbose,
132- webTimeout: timeout > 0 ? timeout : 60 )
131+ await ProviderInteractionContext . $current. withValue ( . background) {
132+ await Self . guardFetchOutcome (
133+ provider: provider,
134+ window: window,
135+ config: config,
136+ verbose: verbose,
137+ webTimeout: timeout > 0 ? timeout : 60 )
138+ }
133139 }
134140 if case . unavailable( . timeout) = outcome {
135141 TTYCommandRunner . terminateActiveProcessesForAppShutdown ( )
@@ -152,9 +158,8 @@ extension CodexBarCLI {
152158
153159 // MARK: - Argument decoding
154160
155- private static func exitGuardArgumentError( _ message: String ) -> Never {
156- writeStderr ( " Error: \( message) \n " )
157- platformExit ( ExitCode . usage. rawValue)
161+ private static func exitGuardArgumentError( _ message: String , output: CLIOutputPreferences ) -> Never {
162+ self . exit ( code: . usage, message: " Error: \( message) " , output: output, kind: . args)
158163 }
159164
160165 static func decodeGuardWindow( from values: ParsedValues ) -> GuardWindow ? {
@@ -273,13 +278,10 @@ extension CodexBarCLI {
273278 fetcher: tokenContext. fetcher ( base: fetcher, provider: provider, env: env) ,
274279 claudeFetcher: claudeFetcher,
275280 browserDetection: browserDetection,
276- selectedTokenAccountID: account? . id,
277- tokenAccountTokenUpdater: tokenContext. tokenUpdater ( for: account) ,
278- providerManualTokenUpdater: tokenContext. manualTokenUpdater ( ) )
281+ // Guard is read-only: omit updater callbacks so refresh-dependent credentials fail unavailable.
282+ selectedTokenAccountID: account? . id)
279283
280- let outcome = await ProviderInteractionContext . $current. withValue ( . background) {
281- await Self . fetchProviderUsage ( provider: provider, context: fetchContext)
282- }
284+ let outcome = await Self . fetchProviderUsage ( provider: provider, context: fetchContext)
283285 if verbose {
284286 Self . printFetchAttempts ( provider: provider, attempts: outcome. attempts)
285287 }
0 commit comments