diff --git a/src/env.ts b/src/env.ts index 8a38b74..25f8922 100644 --- a/src/env.ts +++ b/src/env.ts @@ -4,29 +4,20 @@ import * as os from 'os'; const GLOBAL_ENV_PATH = path.join(os.homedir(), '.openclaw', '.env'); -/** Keys that were loaded from .env (not pre-existing in process.env) */ -const loadedKeys = new Set(); -let loaded = false; - /** - * Load ~/.openclaw/.env into process.env (once, won't overwrite explicitly set env vars). + * Load ~/.openclaw/.env into process.env. + * Always reads fresh from disk — no caching. + * File values always override process.env. */ export function loadGlobalEnv(): void { - if (loaded) return; - loaded = true; applyEnvFile(); } /** - * Force re-read ~/.openclaw/.env. Overwrites keys that were originally loaded - * from .env, but still won't touch keys set externally (e.g. shell export). + * Force re-read ~/.openclaw/.env. + * Same as loadGlobalEnv — always reads fresh. */ export function reloadGlobalEnv(): void { - // Clear values we previously loaded so applyEnvFile can overwrite them - for (const key of loadedKeys) { - delete process.env[key]; - } - loadedKeys.clear(); applyEnvFile(); } @@ -53,10 +44,7 @@ function applyEnvFile(): void { value = value.slice(1, -1); } - // don't overwrite explicitly set env vars - if (process.env[key] === undefined) { - process.env[key] = value; - loadedKeys.add(key); - } + // Always use file value — real-time read, no caching + process.env[key] = value; } }