@@ -81,10 +81,9 @@ function hasProviderAuthEnvCredentialSource(params: {
8181} ) : boolean {
8282 const candidates = resolveProviderAuthEnvVarCandidates ( {
8383 config : params . state . cfg ,
84- env : {
85- ...( process . env . VITEST ? process . env : { } ) ,
86- ...params . state . env ,
87- } ,
84+ env : process . env . VITEST
85+ ? { ...process . env , ...params . state . env }
86+ : { ...params . state . env } ,
8887 } ) ;
8988 for ( const providerId of normalizeProviderIds ( params . providerIds ) ) {
9089 const envVars = Object . hasOwn ( candidates , providerId ) ? candidates [ providerId ] : undefined ;
@@ -207,17 +206,27 @@ function resolveUsageCredentialProviderIds(params: {
207206async function resolveOAuthToken ( params : {
208207 state : UsageAuthState ;
209208 provider : string ;
209+ preferredProfileId ?: string ;
210210} ) : Promise < ProviderAuth | null > {
211211 if ( ! params . state . allowAuthProfileStore ) {
212212 return null ;
213213 }
214214 const store = resolveUsageAuthStore ( params . state ) ;
215+ const preferredProfileId = params . preferredProfileId ?. trim ( ) ;
216+ const preferredProfile = preferredProfileId ? store . profiles [ preferredProfileId ] : undefined ;
217+ const normalizedProvider = normalizeProviderId ( params . provider ) ;
215218 const order = resolveAuthProfileOrder ( {
216219 cfg : params . state . cfg ,
217220 store,
218221 provider : params . provider ,
219222 } ) ;
220- const deduped = dedupeProfileIds ( order ) ;
223+ const deduped = dedupeProfileIds (
224+ preferredProfileId &&
225+ preferredProfile &&
226+ normalizeProviderId ( preferredProfile . provider ) === normalizedProvider
227+ ? [ preferredProfileId , ...order ]
228+ : order ,
229+ ) ;
221230
222231 for ( const profileId of deduped ) {
223232 const cred = store . profiles [ profileId ] ;
@@ -236,14 +245,19 @@ async function resolveOAuthToken(params: {
236245 if ( ! resolved ) {
237246 continue ;
238247 }
239- return {
248+ const auth : ProviderAuth = {
240249 provider : params . provider as UsageProviderId ,
241250 token : resolved . apiKey ,
242- accountId :
243- cred . type === "oauth" && "accountId" in cred
244- ? ( cred as { accountId ?: string } ) . accountId
245- : undefined ,
246251 } ;
252+ if (
253+ cred . type === "oauth" &&
254+ "accountId" in cred &&
255+ typeof ( cred as { accountId ?: string } ) . accountId === "string" &&
256+ ( cred as { accountId ?: string } ) . accountId
257+ ) {
258+ auth . accountId = ( cred as { accountId ?: string } ) . accountId ;
259+ }
260+ return auth ;
247261 } catch {
248262 // ignore
249263 }
@@ -255,6 +269,7 @@ async function resolveOAuthToken(params: {
255269async function resolveProviderUsageAuthViaPlugin ( params : {
256270 state : UsageAuthState ;
257271 provider : UsageProviderId ;
272+ preferredProfileId ?: string ;
258273} ) : Promise < ProviderAuth | null > {
259274 const resolved = await resolveProviderUsageAuthWithPlugin ( {
260275 provider : params . provider ,
@@ -275,33 +290,41 @@ async function resolveProviderUsageAuthViaPlugin(params: {
275290 const auth = await resolveOAuthToken ( {
276291 state : params . state ,
277292 provider : options ?. provider ?? params . provider ,
293+ preferredProfileId : params . preferredProfileId ,
278294 } ) ;
279- return auth
280- ? {
281- token : auth . token ,
282- ...( auth . accountId ? { accountId : auth . accountId } : { } ) ,
283- }
284- : null ;
295+ if ( ! auth ) {
296+ return null ;
297+ }
298+ const resolvedAuth : { token : string ; accountId ?: string } = { token : auth . token } ;
299+ if ( auth . accountId ) {
300+ resolvedAuth . accountId = auth . accountId ;
301+ }
302+ return resolvedAuth ;
285303 } ,
286304 } ,
287305 } ) ;
288306 if ( ! resolved ?. token ) {
289307 return null ;
290308 }
291- return {
309+ const auth : ProviderAuth = {
292310 provider : params . provider ,
293311 token : resolved . token ,
294- ...( resolved . accountId ? { accountId : resolved . accountId } : { } ) ,
295312 } ;
313+ if ( resolved . accountId ) {
314+ auth . accountId = resolved . accountId ;
315+ }
316+ return auth ;
296317}
297318
298319async function resolveProviderUsageAuthFallback ( params : {
299320 state : UsageAuthState ;
300321 provider : UsageProviderId ;
322+ preferredProfileId ?: string ;
301323} ) : Promise < ProviderAuth | null > {
302324 const oauthToken = await resolveOAuthToken ( {
303325 state : params . state ,
304326 provider : params . provider ,
327+ preferredProfileId : params . preferredProfileId ,
305328 } ) ;
306329 if ( oauthToken ) {
307330 return oauthToken ;
@@ -356,6 +379,7 @@ export async function resolveProviderAuths(params: {
356379 agentDir ?: string ;
357380 config ?: OpenClawConfig ;
358381 env ?: NodeJS . ProcessEnv ;
382+ preferredProfileIds ?: Partial < Record < UsageProviderId , string | undefined > > ;
359383 skipPluginAuthWithoutCredentialSource ?: boolean ;
360384} ) : Promise < ProviderAuth [ ] > {
361385 if ( params . auth ) {
@@ -381,6 +405,7 @@ export async function resolveProviderAuths(params: {
381405 const pluginAuth = await resolveProviderUsageAuthViaPlugin ( {
382406 state : authProfileSourceState ,
383407 provider,
408+ preferredProfileId : params . preferredProfileIds ?. [ provider ] ,
384409 } ) ;
385410 if ( pluginAuth ) {
386411 auths . push ( pluginAuth ) ;
@@ -389,6 +414,7 @@ export async function resolveProviderAuths(params: {
389414 const fallbackAuth = await resolveProviderUsageAuthFallback ( {
390415 state : authProfileSourceState ,
391416 provider,
417+ preferredProfileId : params . preferredProfileIds ?. [ provider ] ,
392418 } ) ;
393419 if ( fallbackAuth ) {
394420 auths . push ( fallbackAuth ) ;
@@ -433,6 +459,7 @@ export async function resolveProviderAuths(params: {
433459 const pluginAuth = await resolveProviderUsageAuthViaPlugin ( {
434460 state,
435461 provider,
462+ preferredProfileId : params . preferredProfileIds ?. [ provider ] ,
436463 } ) ;
437464 if ( pluginAuth ) {
438465 auths . push ( pluginAuth ) ;
@@ -442,6 +469,7 @@ export async function resolveProviderAuths(params: {
442469 const fallbackAuth = await resolveProviderUsageAuthFallback ( {
443470 state,
444471 provider,
472+ preferredProfileId : params . preferredProfileIds ?. [ provider ] ,
445473 } ) ;
446474 if ( fallbackAuth ) {
447475 auths . push ( fallbackAuth ) ;
0 commit comments