Provider loading fix (#623)
* add mistral and gemini provider type for profile provider field * load latest locally selected * env variables take precedence over json save * add gemini context windows and fix gemini defaulting for env * load on startup fix * fix failing tests * clarify test message * fix variable mismatches * fix failing test * delete keys and set profile.apiKey for mistral and gemini * switch model as well when switching provider * set model when adding a new model
This commit is contained in:
@@ -29,6 +29,9 @@ export {
|
||||
sanitizeApiKey,
|
||||
sanitizeProviderConfigValue,
|
||||
} from './providerSecrets.js'
|
||||
import { isEnvTruthy } from './envUtils.ts'
|
||||
|
||||
import { PROVIDERS } from './configConstants.js'
|
||||
|
||||
export const PROFILE_FILE_NAME = '.openclaude-profile.json'
|
||||
export const DEFAULT_GEMINI_BASE_URL =
|
||||
@@ -498,13 +501,13 @@ export function hasExplicitProviderSelection(
|
||||
}
|
||||
|
||||
return (
|
||||
processEnv.CLAUDE_CODE_USE_OPENAI !== undefined ||
|
||||
processEnv.CLAUDE_CODE_USE_GITHUB !== undefined ||
|
||||
processEnv.CLAUDE_CODE_USE_GEMINI !== undefined ||
|
||||
processEnv.CLAUDE_CODE_USE_MISTRAL !== undefined ||
|
||||
processEnv.CLAUDE_CODE_USE_BEDROCK !== undefined ||
|
||||
processEnv.CLAUDE_CODE_USE_VERTEX !== undefined ||
|
||||
processEnv.CLAUDE_CODE_USE_FOUNDRY !== undefined
|
||||
isEnvTruthy(processEnv.CLAUDE_CODE_USE_OPENAI) ||
|
||||
isEnvTruthy(processEnv.CLAUDE_CODE_USE_GITHUB) ||
|
||||
isEnvTruthy(processEnv.CLAUDE_CODE_USE_GEMINI) ||
|
||||
isEnvTruthy(processEnv.CLAUDE_CODE_USE_MISTRAL) ||
|
||||
isEnvTruthy(processEnv.CLAUDE_CODE_USE_BEDROCK) ||
|
||||
isEnvTruthy(processEnv.CLAUDE_CODE_USE_VERTEX) ||
|
||||
isEnvTruthy(processEnv.CLAUDE_CODE_USE_FOUNDRY)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -573,6 +576,20 @@ export async function buildLaunchEnv(options: {
|
||||
const persistedGeminiKey = sanitizeApiKey(persistedEnv.GEMINI_API_KEY)
|
||||
const persistedGeminiAuthMode = persistedEnv.GEMINI_AUTH_MODE
|
||||
|
||||
if (hasExplicitProviderSelection(processEnv)) {
|
||||
for (let provider of PROVIDERS) {
|
||||
if (provider === "anthropic") {
|
||||
continue;
|
||||
}
|
||||
|
||||
const env_key_name = `CLAUDE_CODE_USE_${provider.toUpperCase()}`
|
||||
|
||||
if (env_key_name in processEnv && isEnvTruthy(processEnv[env_key_name])) {
|
||||
options.profile = provider;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (options.profile === 'gemini') {
|
||||
const env: NodeJS.ProcessEnv = {
|
||||
...processEnv,
|
||||
@@ -825,12 +842,18 @@ export async function buildStartupEnvFromProfile(options?: {
|
||||
const persisted = options?.persisted ?? loadProfileFile()
|
||||
|
||||
// Saved /provider profiles should still win over provider-manager env that was
|
||||
// auto-applied during startup. Only explicit shell/flag provider selection
|
||||
// auto-applied during startup. Only an explicit shell/flag provider selection
|
||||
// should bypass the persisted startup profile.
|
||||
//
|
||||
const profileManagedEnv = processEnv.CLAUDE_CODE_PROVIDER_PROFILE_ENV_APPLIED === '1'
|
||||
if (hasExplicitProviderSelection(processEnv) && !profileManagedEnv) {
|
||||
return processEnv
|
||||
}
|
||||
|
||||
// If the user explicitly selected a provider via env, allow it to bypass
|
||||
// the persisted profile only when we can prove it was managed by the
|
||||
// persisted profile env itself.
|
||||
//
|
||||
// Practically: on initial startup, provider routing env vars can already
|
||||
// be present due to earlier auto-application steps. We should still apply
|
||||
// the persisted profile rather than returning early.
|
||||
|
||||
if (!persisted) {
|
||||
return processEnv
|
||||
|
||||
Reference in New Issue
Block a user