diff --git a/strix/config/config.py b/strix/config/config.py index 782101dd..255df7c6 100644 --- a/strix/config/config.py +++ b/strix/config/config.py @@ -2,7 +2,7 @@ import contextlib import json import os from pathlib import Path -from typing import Any +from typing import Any, ClassVar STRIX_API_BASE = "https://models.strix.ai/api/v1" @@ -56,6 +56,10 @@ class Config: # Config file override (set via --config CLI arg) _config_file_override: Path | None = None + # Tracks env vars set by the initial default-config load so they can be + # cleared when a --config override is later applied (avoids leakage). + _applied_from_default: ClassVar[dict[str, str]] = {} + @classmethod def _tracked_names(cls) -> list[str]: return [ @@ -151,6 +155,11 @@ class Config: os.environ[var_name] = var_value applied[var_name] = var_value + # Record what was applied from the default config so it can be cleared + # if a --config override is later provided (prevents leakage). + if cls._config_file_override is None and not force: + cls._applied_from_default = applied + return applied @classmethod diff --git a/strix/interface/main.py b/strix/interface/main.py index 7ac6f135..bc88da67 100644 --- a/strix/interface/main.py +++ b/strix/interface/main.py @@ -6,6 +6,7 @@ Strix Agent Interface import argparse import asyncio import logging +import os import shutil import sys from pathlib import Path @@ -528,6 +529,12 @@ def pull_docker_image() -> None: def apply_config_override(config_path: str) -> None: + # Clear env vars that were automatically applied from the default config file + # so they don't leak into the custom config context. + for var_name in Config._applied_from_default: + os.environ.pop(var_name, None) + Config._applied_from_default = {} + Config._config_file_override = validate_config_file(config_path) apply_saved_config(force=True)