Files
hack/tools/scripts/llm-key-hunter/results/_cache/content/alpha-1-design_nexus.json
T

1 line
46 KiB
JSON

{"repo": "alpha-1-design/nexus", "files": {"nexus/config.py": {"d556d3f9671df1df7ede38ce54ce3848b202e85d": {"t": 1785745435.5422425, "n": 8826, "h": "58b293bcbe871730", "c": "\"\"\"Configuration management for Nexus.\"\"\"\n\nimport json\nimport os\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\nfrom typing import Any\n\nDEFAULT_CONFIG_DIR = Path.home() / \".nexus\"\nDEFAULT_CONFIG_FILE = DEFAULT_CONFIG_DIR / \"config.json\"\nDEFAULT_MEMORY_DIR = DEFAULT_CONFIG_DIR / \"memory\"\nDEFAULT_SKILLS_DIR = DEFAULT_CONFIG_DIR / \"skills\"\nDEFAULT_PLUGINS_DIR = DEFAULT_CONFIG_DIR / \"plugins\"\nDEFAULT_MCP_DIR = DEFAULT_CONFIG_DIR / \"mcp_servers\"\n\n\n@dataclass\nclass ProviderConfig:\n \"\"\"Configuration for an AI provider.\"\"\"\n\n name: str\n provider_type: str # openai, anthropic, google, ollama, groq, deepseek, etc.\n api_key: str | None = None\n base_url: str | None = None\n model: str = \"gpt-4o\"\n max_tokens: int = 4096\n temperature: float = 0.7\n timeout: int = 120\n enabled: bool = True\n\n def to_dict(self) -> dict[str, Any]:\n return {\n \"name\": self.name,\n \"provider_type\": self.provider_type,\n \"api_key\": self.api_key,\n \"base_url\": self.base_url,\n \"model\": self.model,\n \"max_tokens\": self.max_tokens,\n \"temperature\": self.temperature,\n \"timeout\": self.timeout,\n \"enabled\": self.enabled,\n }\n\n\n@dataclass\nclass NexusConfig:\n \"\"\"Main configuration for Nexus.\"\"\"\n\n providers: dict[str, ProviderConfig] = field(default_factory=dict)\n active_provider: str = \"openai\"\n planner_model: str | None = None\n worker_model: str | None = None\n config_dir: Path = field(default_factory=lambda: DEFAULT_CONFIG_DIR)\n memory_dir: Path = field(default_factory=lambda: DEFAULT_MEMORY_DIR)\n skills_dir: Path = field(default_factory=lambda: DEFAULT_SKILLS_DIR)\n plugins_dir: Path = field(default_factory=lambda: DEFAULT_PLUGINS_DIR)\n mcp_dir: Path = field(default_factory=lambda: DEFAULT_MCP_DIR)\n log_level: str = \"INFO\"\n sandbox_mode: str = \"off\" # off, non-main, all\n tool_profile: str = \"coding\" # minimal, default, coding, all\n\n # Search providers\n search_provider: str = \"exa\"\n tavily_api_key: str | None = None\n brave_api_key: str | None = None\n exa_api_key: str | None = None\n\n # Personalisation\n user_name: str = \"\"\n\n # Termux-specific\n termux_mode: bool = False\n clipboard_tool: str = \"termux-clipboard-set\"\n\n def ensure_dirs(self) -> None:\n \"\"\"Ensure all required directories exist.\"\"\"\n for d in [self.memory_dir, self.skills_dir, self.plugins_dir, self.mcp_dir]:\n d.mkdir(parents=True, exist_ok=True)\n\n def to_dict(self) -> dict[str, Any]:\n return {\n \"providers\": {k: v.to_dict() for k, v in self.providers.items()},\n \"active_provider\": self.active_provider,\n \"planner_model\": self.planner_model,\n \"worker_model\": self.worker_model,\n \"memory_dir\": str(self.memory_dir),\n \"skills_dir\": str(self.skills_dir),\n \"plugins_dir\": str(self.plugins_dir),\n \"mcp_dir\": str(self.mcp_dir),\n \"log_level\": self.log_level,\n \"sandbox_mode\": self.sandbox_mode,\n \"tool_profile\": self.tool_profile,\n \"search_provider\": self.search_provider,\n \"user_name\": self.user_name,\n \"tavily_api_key\": self.tavily_api_key,\n \"brave_api_key\": self.brave_api_key,\n \"exa_api_key\": self.exa_api_key,\n \"termux_mode\": self.termux_mode,\n \"clipboard_tool\": self.clipboard_tool,\n }\n\n @classmethod\n def from_dict(cls, data: dict[str, Any]) -> \"NexusConfig\":\n config = cls()\n if \"providers\" in data:\n config.providers = {k: ProviderConfig(**v) for k, v in data[\"providers\"].items()}\n config.active_provider = data.get(\"active_provider\", \"openai\")\n config.planner_model = data.get(\"planner_model\")\n config.worker_model = data.get(\"worker_model\")\n if \"memory_dir\" in data:\n config.memory_dir = Path(data[\"memory_dir\"])\n if \"skills_dir\" in data:\n config.skills_dir = Path(data[\"skills_dir\"])\n if \"plugins_dir\" in data:\n config.plugins_dir = Path(data[\"plugins_dir\"])\n if \"mcp_dir\" in data:\n config.mcp_dir = Path(data[\"mcp_dir\"])\n config.log_level = data.get(\"log_level\", \"INFO\")\n config.sandbox_mode = data.get(\"sandbox_mode\", \"off\")\n config.tool_profile = data.get(\"tool_profile\", \"coding\")\n config.search_provider = data.get(\"search_provider\", \"exa\")\n config.user_name = data.get(\"user_name\", \"\")\n config.tavily_api_key = data.get(\"tavily_api_key\")\n config.brave_api_key = data.get(\"brave_api_key\")\n config.exa_api_key = data.get(\"exa_api_key\")\n config.termux_mode = data.get(\"termux_mode\", False)\n config.clipboard_tool = data.get(\"clipboard_tool\", \"termux-clipboard-set\")\n return config\n\n\ndef load_config(config_path: Path | None = None) -> NexusConfig:\n \"\"\"Load configuration from file, auto-creating from env vars if needed.\"\"\"\n path = config_path or DEFAULT_CONFIG_FILE\n if path.exists():\n with open(path) as f:\n data = json.load(f)\n return NexusConfig.from_dict(data)\n\n config = NexusConfig()\n\n # Auto-detect Termux\n if os.path.exists(\"/data/data/com.termux\"):\n config.termux_mode = True\n\n # Auto-detect providers from env vars\n if os.environ.get(\"OPENAI_API_KEY\"):\n config.providers[\"openai\"] = ProviderConfig(\n name=\"openai\",\n provider_type=\"openai\",\n api_key=os.environ[\"OPENAI_API_KEY\"],\n model=os.environ.get(\"OPENAI_MODEL\", \"gpt-4o\"),\n )\n config.active_provider = \"openai\"\n\n if os.environ.get(\"ANTHROPIC_API_KEY\"):\n config.providers[\"anthropic\"] = ProviderConfig(\n name=\"anthropic\",\n provider_type=\"anthropic\",\n api_key=os.environ[\"ANTHROPIC_API_KEY\"],\n model=os.environ.get(\"ANTHROPIC_MODEL\", \"claude-sonnet-4-20250514\"),\n )\n if config.active_provider == \"openai\":\n config.active_provider = \"anthropic\"\n\n if os.environ.get(\"GOOGLE_API_KEY\"):\n config.providers[\"google\"] = ProviderConfig(\n name=\"google\",\n provider_type=\"google\",\n api_key=os.environ[\"GOOGLE_API_KEY\"],\n model=os.environ.get(\"GOOGLE_MODEL\", \"gemini-2.0-flash\"),\n )\n\n if os.environ.get(\"OLLAMA_HOST\"):\n config.providers[\"ollama\"] = ProviderConfig(\n name=\"ollama\",\n provider_type=\"ollama\",\n base_url=os.environ.get(\"OLLAMA_HOST\", \"http://localhost:11434\"),\n model=os.environ.get(\"OLLAMA_MODEL\", \"llama3\"),\n )\n\n if os.environ.get(\"GROQ_API_KEY\"):\n config.providers[\"groq\"] = ProviderConfig(\n name=\"groq\",\n provider_type=\"groq\",\n api_key=os.environ[\"GROQ_API_KEY\"],\n model=os.environ.get(\"GROQ_MODEL\", \"llama-3.3-70b-versatile\"),\n )\n\n if os.environ.get(\"DEEPSEEK_API_KEY\"):\n config.providers[\"deepseek\"] = ProviderConfig(\n name=\"deepseek\",\n provider_type=\"deepseek\",\n api_key=os.environ[\"DEEPSEEK_API_KEY\"],\n model=os.environ.get(\"DEEPSEEK_MODEL\", \"deepseek-chat\"),\n )\n\n if os.environ.get(\"MISTRAL_API_KEY\"):\n config.providers[\"mistral\"] = ProviderConfig(\n name=\"mistral\",\n provider_type=\"mistral\",\n api_key=os.environ[\"MISTRAL_API_KEY\"],\n model=os.environ.get(\"MISTRAL_MODEL\", \"mistral-large-latest\"),\n )\n\n if os.environ.get(\"OPENCODE_ZEN_API_KEY\"):\n config.providers[\"opencode-zen\"] = ProviderConfig(\n name=\"opencode-zen\",\n provider_type=\"opencode-zen\",\n api_key=os.environ[\"OPENCODE_ZEN_API_KEY\"],\n base_url=\"https://opencode.ai/zen/v1\",\n model=os.environ.get(\"OPENCODE_ZEN_MODEL\", \"minimax-m2.5-free\"),\n )\n if config.active_provider == \"openai\":\n config.active_provider = \"opencode-zen\"\n\n if os.environ.get(\"OPENCODE_GO_API_KEY\"):\n config.providers[\"opencode-go\"] = ProviderConfig(\n name=\"opencode-go\",\n provider_type=\"opencode-go\",\n api_key=os.environ[\"OPENCODE_GO_API_KEY\"],\n base_url=\"https://opencode.ai/zen/go/v1\",\n model=os.environ.get(\"OPENCODE_GO_MODEL\", \"kimi-k2.5\"),\n )\n\n # Auto-save detected config\n save_config(config, path)\n\n return config\n\n\ndef save_config(config: NexusConfig, config_path: Path | None = None) -> None:\n \"\"\"Save configuration to file.\"\"\"\n path = config_path or DEFAULT_CONFIG_FILE\n path.parent.mkdir(parents=True, exist_ok=True)\n with open(path, \"w\") as f:\n json.dump(config.to_dict(), f, indent=2)\n"}, "cb53d4f8d16759c1ad2bf6d3c19521b83207fe6f": {"t": 1785753189.692864, "n": 8826, "h": "58b293bcbe871730", "c": "\"\"\"Configuration management for Nexus.\"\"\"\n\nimport json\nimport os\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\nfrom typing import Any\n\nDEFAULT_CONFIG_DIR = Path.home() / \".nexus\"\nDEFAULT_CONFIG_FILE = DEFAULT_CONFIG_DIR / \"config.json\"\nDEFAULT_MEMORY_DIR = DEFAULT_CONFIG_DIR / \"memory\"\nDEFAULT_SKILLS_DIR = DEFAULT_CONFIG_DIR / \"skills\"\nDEFAULT_PLUGINS_DIR = DEFAULT_CONFIG_DIR / \"plugins\"\nDEFAULT_MCP_DIR = DEFAULT_CONFIG_DIR / \"mcp_servers\"\n\n\n@dataclass\nclass ProviderConfig:\n \"\"\"Configuration for an AI provider.\"\"\"\n\n name: str\n provider_type: str # openai, anthropic, google, ollama, groq, deepseek, etc.\n api_key: str | None = None\n base_url: str | None = None\n model: str = \"gpt-4o\"\n max_tokens: int = 4096\n temperature: float = 0.7\n timeout: int = 120\n enabled: bool = True\n\n def to_dict(self) -> dict[str, Any]:\n return {\n \"name\": self.name,\n \"provider_type\": self.provider_type,\n \"api_key\": self.api_key,\n \"base_url\": self.base_url,\n \"model\": self.model,\n \"max_tokens\": self.max_tokens,\n \"temperature\": self.temperature,\n \"timeout\": self.timeout,\n \"enabled\": self.enabled,\n }\n\n\n@dataclass\nclass NexusConfig:\n \"\"\"Main configuration for Nexus.\"\"\"\n\n providers: dict[str, ProviderConfig] = field(default_factory=dict)\n active_provider: str = \"openai\"\n planner_model: str | None = None\n worker_model: str | None = None\n config_dir: Path = field(default_factory=lambda: DEFAULT_CONFIG_DIR)\n memory_dir: Path = field(default_factory=lambda: DEFAULT_MEMORY_DIR)\n skills_dir: Path = field(default_factory=lambda: DEFAULT_SKILLS_DIR)\n plugins_dir: Path = field(default_factory=lambda: DEFAULT_PLUGINS_DIR)\n mcp_dir: Path = field(default_factory=lambda: DEFAULT_MCP_DIR)\n log_level: str = \"INFO\"\n sandbox_mode: str = \"off\" # off, non-main, all\n tool_profile: str = \"coding\" # minimal, default, coding, all\n\n # Search providers\n search_provider: str = \"exa\"\n tavily_api_key: str | None = None\n brave_api_key: str | None = None\n exa_api_key: str | None = None\n\n # Personalisation\n user_name: str = \"\"\n\n # Termux-specific\n termux_mode: bool = False\n clipboard_tool: str = \"termux-clipboard-set\"\n\n def ensure_dirs(self) -> None:\n \"\"\"Ensure all required directories exist.\"\"\"\n for d in [self.memory_dir, self.skills_dir, self.plugins_dir, self.mcp_dir]:\n d.mkdir(parents=True, exist_ok=True)\n\n def to_dict(self) -> dict[str, Any]:\n return {\n \"providers\": {k: v.to_dict() for k, v in self.providers.items()},\n \"active_provider\": self.active_provider,\n \"planner_model\": self.planner_model,\n \"worker_model\": self.worker_model,\n \"memory_dir\": str(self.memory_dir),\n \"skills_dir\": str(self.skills_dir),\n \"plugins_dir\": str(self.plugins_dir),\n \"mcp_dir\": str(self.mcp_dir),\n \"log_level\": self.log_level,\n \"sandbox_mode\": self.sandbox_mode,\n \"tool_profile\": self.tool_profile,\n \"search_provider\": self.search_provider,\n \"user_name\": self.user_name,\n \"tavily_api_key\": self.tavily_api_key,\n \"brave_api_key\": self.brave_api_key,\n \"exa_api_key\": self.exa_api_key,\n \"termux_mode\": self.termux_mode,\n \"clipboard_tool\": self.clipboard_tool,\n }\n\n @classmethod\n def from_dict(cls, data: dict[str, Any]) -> \"NexusConfig\":\n config = cls()\n if \"providers\" in data:\n config.providers = {k: ProviderConfig(**v) for k, v in data[\"providers\"].items()}\n config.active_provider = data.get(\"active_provider\", \"openai\")\n config.planner_model = data.get(\"planner_model\")\n config.worker_model = data.get(\"worker_model\")\n if \"memory_dir\" in data:\n config.memory_dir = Path(data[\"memory_dir\"])\n if \"skills_dir\" in data:\n config.skills_dir = Path(data[\"skills_dir\"])\n if \"plugins_dir\" in data:\n config.plugins_dir = Path(data[\"plugins_dir\"])\n if \"mcp_dir\" in data:\n config.mcp_dir = Path(data[\"mcp_dir\"])\n config.log_level = data.get(\"log_level\", \"INFO\")\n config.sandbox_mode = data.get(\"sandbox_mode\", \"off\")\n config.tool_profile = data.get(\"tool_profile\", \"coding\")\n config.search_provider = data.get(\"search_provider\", \"exa\")\n config.user_name = data.get(\"user_name\", \"\")\n config.tavily_api_key = data.get(\"tavily_api_key\")\n config.brave_api_key = data.get(\"brave_api_key\")\n config.exa_api_key = data.get(\"exa_api_key\")\n config.termux_mode = data.get(\"termux_mode\", False)\n config.clipboard_tool = data.get(\"clipboard_tool\", \"termux-clipboard-set\")\n return config\n\n\ndef load_config(config_path: Path | None = None) -> NexusConfig:\n \"\"\"Load configuration from file, auto-creating from env vars if needed.\"\"\"\n path = config_path or DEFAULT_CONFIG_FILE\n if path.exists():\n with open(path) as f:\n data = json.load(f)\n return NexusConfig.from_dict(data)\n\n config = NexusConfig()\n\n # Auto-detect Termux\n if os.path.exists(\"/data/data/com.termux\"):\n config.termux_mode = True\n\n # Auto-detect providers from env vars\n if os.environ.get(\"OPENAI_API_KEY\"):\n config.providers[\"openai\"] = ProviderConfig(\n name=\"openai\",\n provider_type=\"openai\",\n api_key=os.environ[\"OPENAI_API_KEY\"],\n model=os.environ.get(\"OPENAI_MODEL\", \"gpt-4o\"),\n )\n config.active_provider = \"openai\"\n\n if os.environ.get(\"ANTHROPIC_API_KEY\"):\n config.providers[\"anthropic\"] = ProviderConfig(\n name=\"anthropic\",\n provider_type=\"anthropic\",\n api_key=os.environ[\"ANTHROPIC_API_KEY\"],\n model=os.environ.get(\"ANTHROPIC_MODEL\", \"claude-sonnet-4-20250514\"),\n )\n if config.active_provider == \"openai\":\n config.active_provider = \"anthropic\"\n\n if os.environ.get(\"GOOGLE_API_KEY\"):\n config.providers[\"google\"] = ProviderConfig(\n name=\"google\",\n provider_type=\"google\",\n api_key=os.environ[\"GOOGLE_API_KEY\"],\n model=os.environ.get(\"GOOGLE_MODEL\", \"gemini-2.0-flash\"),\n )\n\n if os.environ.get(\"OLLAMA_HOST\"):\n config.providers[\"ollama\"] = ProviderConfig(\n name=\"ollama\",\n provider_type=\"ollama\",\n base_url=os.environ.get(\"OLLAMA_HOST\", \"http://localhost:11434\"),\n model=os.environ.get(\"OLLAMA_MODEL\", \"llama3\"),\n )\n\n if os.environ.get(\"GROQ_API_KEY\"):\n config.providers[\"groq\"] = ProviderConfig(\n name=\"groq\",\n provider_type=\"groq\",\n api_key=os.environ[\"GROQ_API_KEY\"],\n model=os.environ.get(\"GROQ_MODEL\", \"llama-3.3-70b-versatile\"),\n )\n\n if os.environ.get(\"DEEPSEEK_API_KEY\"):\n config.providers[\"deepseek\"] = ProviderConfig(\n name=\"deepseek\",\n provider_type=\"deepseek\",\n api_key=os.environ[\"DEEPSEEK_API_KEY\"],\n model=os.environ.get(\"DEEPSEEK_MODEL\", \"deepseek-chat\"),\n )\n\n if os.environ.get(\"MISTRAL_API_KEY\"):\n config.providers[\"mistral\"] = ProviderConfig(\n name=\"mistral\",\n provider_type=\"mistral\",\n api_key=os.environ[\"MISTRAL_API_KEY\"],\n model=os.environ.get(\"MISTRAL_MODEL\", \"mistral-large-latest\"),\n )\n\n if os.environ.get(\"OPENCODE_ZEN_API_KEY\"):\n config.providers[\"opencode-zen\"] = ProviderConfig(\n name=\"opencode-zen\",\n provider_type=\"opencode-zen\",\n api_key=os.environ[\"OPENCODE_ZEN_API_KEY\"],\n base_url=\"https://opencode.ai/zen/v1\",\n model=os.environ.get(\"OPENCODE_ZEN_MODEL\", \"minimax-m2.5-free\"),\n )\n if config.active_provider == \"openai\":\n config.active_provider = \"opencode-zen\"\n\n if os.environ.get(\"OPENCODE_GO_API_KEY\"):\n config.providers[\"opencode-go\"] = ProviderConfig(\n name=\"opencode-go\",\n provider_type=\"opencode-go\",\n api_key=os.environ[\"OPENCODE_GO_API_KEY\"],\n base_url=\"https://opencode.ai/zen/go/v1\",\n model=os.environ.get(\"OPENCODE_GO_MODEL\", \"kimi-k2.5\"),\n )\n\n # Auto-save detected config\n save_config(config, path)\n\n return config\n\n\ndef save_config(config: NexusConfig, config_path: Path | None = None) -> None:\n \"\"\"Save configuration to file.\"\"\"\n path = config_path or DEFAULT_CONFIG_FILE\n path.parent.mkdir(parents=True, exist_ok=True)\n with open(path, \"w\") as f:\n json.dump(config.to_dict(), f, indent=2)\n"}, "87b5af77b18a79f839b61b83b804ab7ea5b78ad0": {"t": 1785753192.886848, "n": 8685, "h": "5a9ec35652eb34d8", "c": "\"\"\"Configuration management for Nexus.\"\"\"\n\nimport json\nimport os\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\nfrom typing import Any\n\nDEFAULT_CONFIG_DIR = Path.home() / \".nexus\"\nDEFAULT_CONFIG_FILE = DEFAULT_CONFIG_DIR / \"config.json\"\nDEFAULT_MEMORY_DIR = DEFAULT_CONFIG_DIR / \"memory\"\nDEFAULT_SKILLS_DIR = DEFAULT_CONFIG_DIR / \"skills\"\nDEFAULT_PLUGINS_DIR = DEFAULT_CONFIG_DIR / \"plugins\"\nDEFAULT_MCP_DIR = DEFAULT_CONFIG_DIR / \"mcp_servers\"\n\n\n@dataclass\nclass ProviderConfig:\n \"\"\"Configuration for an AI provider.\"\"\"\n\n name: str\n provider_type: str # openai, anthropic, google, ollama, groq, deepseek, etc.\n api_key: str | None = None\n base_url: str | None = None\n model: str = \"gpt-4o\"\n max_tokens: int = 4096\n temperature: float = 0.7\n timeout: int = 120\n enabled: bool = True\n\n def to_dict(self) -> dict[str, Any]:\n return {\n \"name\": self.name,\n \"provider_type\": self.provider_type,\n \"api_key\": self.api_key,\n \"base_url\": self.base_url,\n \"model\": self.model,\n \"max_tokens\": self.max_tokens,\n \"temperature\": self.temperature,\n \"timeout\": self.timeout,\n \"enabled\": self.enabled,\n }\n\n\n@dataclass\nclass NexusConfig:\n \"\"\"Main configuration for Nexus.\"\"\"\n\n providers: dict[str, ProviderConfig] = field(default_factory=dict)\n active_provider: str = \"openai\"\n planner_model: str | None = None\n worker_model: str | None = None\n config_dir: Path = field(default_factory=lambda: DEFAULT_CONFIG_DIR)\n memory_dir: Path = field(default_factory=lambda: DEFAULT_MEMORY_DIR)\n skills_dir: Path = field(default_factory=lambda: DEFAULT_SKILLS_DIR)\n plugins_dir: Path = field(default_factory=lambda: DEFAULT_PLUGINS_DIR)\n mcp_dir: Path = field(default_factory=lambda: DEFAULT_MCP_DIR)\n log_level: str = \"INFO\"\n sandbox_mode: str = \"off\" # off, non-main, all\n tool_profile: str = \"coding\" # minimal, default, coding, all\n\n # Search providers\n search_provider: str = \"exa\"\n tavily_api_key: str | None = None\n brave_api_key: str | None = None\n exa_api_key: str | None = None\n\n # Termux-specific\n termux_mode: bool = False\n clipboard_tool: str = \"termux-clipboard-set\"\n\n def ensure_dirs(self) -> None:\n \"\"\"Ensure all required directories exist.\"\"\"\n for d in [self.memory_dir, self.skills_dir, self.plugins_dir, self.mcp_dir]:\n d.mkdir(parents=True, exist_ok=True)\n\n def to_dict(self) -> dict[str, Any]:\n return {\n \"providers\": {k: v.to_dict() for k, v in self.providers.items()},\n \"active_provider\": self.active_provider,\n \"planner_model\": self.planner_model,\n \"worker_model\": self.worker_model,\n \"memory_dir\": str(self.memory_dir),\n \"skills_dir\": str(self.skills_dir),\n \"plugins_dir\": str(self.plugins_dir),\n \"mcp_dir\": str(self.mcp_dir),\n \"log_level\": self.log_level,\n \"sandbox_mode\": self.sandbox_mode,\n \"tool_profile\": self.tool_profile,\n \"search_provider\": self.search_provider,\n \"tavily_api_key\": self.tavily_api_key,\n \"brave_api_key\": self.brave_api_key,\n \"exa_api_key\": self.exa_api_key,\n \"termux_mode\": self.termux_mode,\n \"clipboard_tool\": self.clipboard_tool,\n }\n\n @classmethod\n def from_dict(cls, data: dict[str, Any]) -> \"NexusConfig\":\n config = cls()\n if \"providers\" in data:\n config.providers = {k: ProviderConfig(**v) for k, v in data[\"providers\"].items()}\n config.active_provider = data.get(\"active_provider\", \"openai\")\n config.planner_model = data.get(\"planner_model\")\n config.worker_model = data.get(\"worker_model\")\n if \"memory_dir\" in data:\n config.memory_dir = Path(data[\"memory_dir\"])\n if \"skills_dir\" in data:\n config.skills_dir = Path(data[\"skills_dir\"])\n if \"plugins_dir\" in data:\n config.plugins_dir = Path(data[\"plugins_dir\"])\n if \"mcp_dir\" in data:\n config.mcp_dir = Path(data[\"mcp_dir\"])\n config.log_level = data.get(\"log_level\", \"INFO\")\n config.sandbox_mode = data.get(\"sandbox_mode\", \"off\")\n config.tool_profile = data.get(\"tool_profile\", \"coding\")\n config.search_provider = data.get(\"search_provider\", \"exa\")\n config.tavily_api_key = data.get(\"tavily_api_key\")\n config.brave_api_key = data.get(\"brave_api_key\")\n config.exa_api_key = data.get(\"exa_api_key\")\n config.termux_mode = data.get(\"termux_mode\", False)\n config.clipboard_tool = data.get(\"clipboard_tool\", \"termux-clipboard-set\")\n return config\n\n\ndef load_config(config_path: Path | None = None) -> NexusConfig:\n \"\"\"Load configuration from file, auto-creating from env vars if needed.\"\"\"\n path = config_path or DEFAULT_CONFIG_FILE\n if path.exists():\n with open(path) as f:\n data = json.load(f)\n return NexusConfig.from_dict(data)\n\n config = NexusConfig()\n\n # Auto-detect Termux\n if os.path.exists(\"/data/data/com.termux\"):\n config.termux_mode = True\n\n # Auto-detect providers from env vars\n if os.environ.get(\"OPENAI_API_KEY\"):\n config.providers[\"openai\"] = ProviderConfig(\n name=\"openai\",\n provider_type=\"openai\",\n api_key=os.environ[\"OPENAI_API_KEY\"],\n model=os.environ.get(\"OPENAI_MODEL\", \"gpt-4o\"),\n )\n config.active_provider = \"openai\"\n\n if os.environ.get(\"ANTHROPIC_API_KEY\"):\n config.providers[\"anthropic\"] = ProviderConfig(\n name=\"anthropic\",\n provider_type=\"anthropic\",\n api_key=os.environ[\"ANTHROPIC_API_KEY\"],\n model=os.environ.get(\"ANTHROPIC_MODEL\", \"claude-sonnet-4-20250514\"),\n )\n if config.active_provider == \"openai\":\n config.active_provider = \"anthropic\"\n\n if os.environ.get(\"GOOGLE_API_KEY\"):\n config.providers[\"google\"] = ProviderConfig(\n name=\"google\",\n provider_type=\"google\",\n api_key=os.environ[\"GOOGLE_API_KEY\"],\n model=os.environ.get(\"GOOGLE_MODEL\", \"gemini-2.0-flash\"),\n )\n\n if os.environ.get(\"OLLAMA_HOST\"):\n config.providers[\"ollama\"] = ProviderConfig(\n name=\"ollama\",\n provider_type=\"ollama\",\n base_url=os.environ.get(\"OLLAMA_HOST\", \"http://localhost:11434\"),\n model=os.environ.get(\"OLLAMA_MODEL\", \"llama3\"),\n )\n\n if os.environ.get(\"GROQ_API_KEY\"):\n config.providers[\"groq\"] = ProviderConfig(\n name=\"groq\",\n provider_type=\"groq\",\n api_key=os.environ[\"GROQ_API_KEY\"],\n model=os.environ.get(\"GROQ_MODEL\", \"llama-3.3-70b-versatile\"),\n )\n\n if os.environ.get(\"DEEPSEEK_API_KEY\"):\n config.providers[\"deepseek\"] = ProviderConfig(\n name=\"deepseek\",\n provider_type=\"deepseek\",\n api_key=os.environ[\"DEEPSEEK_API_KEY\"],\n model=os.environ.get(\"DEEPSEEK_MODEL\", \"deepseek-chat\"),\n )\n\n if os.environ.get(\"MISTRAL_API_KEY\"):\n config.providers[\"mistral\"] = ProviderConfig(\n name=\"mistral\",\n provider_type=\"mistral\",\n api_key=os.environ[\"MISTRAL_API_KEY\"],\n model=os.environ.get(\"MISTRAL_MODEL\", \"mistral-large-latest\"),\n )\n\n if os.environ.get(\"OPENCODE_ZEN_API_KEY\"):\n config.providers[\"opencode-zen\"] = ProviderConfig(\n name=\"opencode-zen\",\n provider_type=\"opencode-zen\",\n api_key=os.environ[\"OPENCODE_ZEN_API_KEY\"],\n base_url=\"https://opencode.ai/zen/v1\",\n model=os.environ.get(\"OPENCODE_ZEN_MODEL\", \"minimax-m2.5-free\"),\n )\n if config.active_provider == \"openai\":\n config.active_provider = \"opencode-zen\"\n\n if os.environ.get(\"OPENCODE_GO_API_KEY\"):\n config.providers[\"opencode-go\"] = ProviderConfig(\n name=\"opencode-go\",\n provider_type=\"opencode-go\",\n api_key=os.environ[\"OPENCODE_GO_API_KEY\"],\n base_url=\"https://opencode.ai/zen/go/v1\",\n model=os.environ.get(\"OPENCODE_GO_MODEL\", \"kimi-k2.5\"),\n )\n\n # Auto-save detected config\n save_config(config, path)\n\n return config\n\n\ndef save_config(config: NexusConfig, config_path: Path | None = None) -> None:\n \"\"\"Save configuration to file.\"\"\"\n path = config_path or DEFAULT_CONFIG_FILE\n path.parent.mkdir(parents=True, exist_ok=True)\n with open(path, \"w\") as f:\n json.dump(config.to_dict(), f, indent=2)\n"}, "221cbb92ecb9d24650ea4fed813fdc3cb5adbd26": {"t": 1785753194.589292, "n": 8605, "h": "3a053d7aee4ef9d4", "c": "\"\"\"Configuration management for Nexus.\"\"\"\n\nimport json\nimport os\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\nfrom typing import Any\n\nDEFAULT_CONFIG_DIR = Path.home() / \".nexus\"\nDEFAULT_CONFIG_FILE = DEFAULT_CONFIG_DIR / \"config.json\"\nDEFAULT_MEMORY_DIR = DEFAULT_CONFIG_DIR / \"memory\"\nDEFAULT_SKILLS_DIR = DEFAULT_CONFIG_DIR / \"skills\"\nDEFAULT_PLUGINS_DIR = DEFAULT_CONFIG_DIR / \"plugins\"\nDEFAULT_MCP_DIR = DEFAULT_CONFIG_DIR / \"mcp_servers\"\n\n\n@dataclass\nclass ProviderConfig:\n \"\"\"Configuration for an AI provider.\"\"\"\n name: str\n provider_type: str # openai, anthropic, google, ollama, groq, deepseek, etc.\n api_key: str | None = None\n base_url: str | None = None\n model: str = \"gpt-4o\"\n max_tokens: int = 4096\n temperature: float = 0.7\n timeout: int = 120\n enabled: bool = True\n\n def to_dict(self) -> dict[str, Any]:\n return {\n \"name\": self.name,\n \"provider_type\": self.provider_type,\n \"api_key\": self.api_key,\n \"base_url\": self.base_url,\n \"model\": self.model,\n \"max_tokens\": self.max_tokens,\n \"temperature\": self.temperature,\n \"timeout\": self.timeout,\n \"enabled\": self.enabled,\n }\n\n\n@dataclass\nclass NexusConfig:\n \"\"\"Main configuration for Nexus.\"\"\"\n providers: dict[str, ProviderConfig] = field(default_factory=dict)\n active_provider: str = \"openai\"\n planner_model: str | None = None\n worker_model: str | None = None\n config_dir: Path = field(default_factory=lambda: DEFAULT_CONFIG_DIR)\n memory_dir: Path = field(default_factory=lambda: DEFAULT_MEMORY_DIR)\n skills_dir: Path = field(default_factory=lambda: DEFAULT_SKILLS_DIR)\n plugins_dir: Path = field(default_factory=lambda: DEFAULT_PLUGINS_DIR)\n mcp_dir: Path = field(default_factory=lambda: DEFAULT_MCP_DIR)\n log_level: str = \"INFO\"\n sandbox_mode: str = \"off\" # off, non-main, all\n tool_profile: str = \"coding\" # minimal, default, coding, all\n\n # Search providers\n search_provider: str = \"exa\"\n tavily_api_key: str | None = None\n brave_api_key: str | None = None\n exa_api_key: str | None = None\n\n # Termux-specific\n termux_mode: bool = False\n clipboard_tool: str = \"termux-clipboard-set\"\n\n def ensure_dirs(self) -> None:\n \"\"\"Ensure all required directories exist.\"\"\"\n for d in [self.memory_dir, self.skills_dir, self.plugins_dir, self.mcp_dir]:\n d.mkdir(parents=True, exist_ok=True)\n\n def to_dict(self) -> dict[str, Any]:\n return {\n \"providers\": {k: v.to_dict() for k, v in self.providers.items()},\n \"active_provider\": self.active_provider,\n \"planner_model\": self.planner_model,\n \"worker_model\": self.worker_model,\n \"memory_dir\": str(self.memory_dir),\n \"skills_dir\": str(self.skills_dir),\n \"plugins_dir\": str(self.plugins_dir),\n \"mcp_dir\": str(self.mcp_dir),\n \"log_level\": self.log_level,\n \"sandbox_mode\": self.sandbox_mode,\n \"tool_profile\": self.tool_profile,\n \"search_provider\": self.search_provider,\n \"tavily_api_key\": self.tavily_api_key,\n \"brave_api_key\": self.brave_api_key,\n \"exa_api_key\": self.exa_api_key,\n \"termux_mode\": self.termux_mode,\n \"clipboard_tool\": self.clipboard_tool,\n }\n\n @classmethod\n def from_dict(cls, data: dict[str, Any]) -> \"NexusConfig\":\n config = cls()\n if \"providers\" in data:\n config.providers = {\n k: ProviderConfig(**v) for k, v in data[\"providers\"].items()\n }\n config.active_provider = data.get(\"active_provider\", \"openai\")\n config.planner_model = data.get(\"planner_model\")\n config.worker_model = data.get(\"worker_model\")\n if \"memory_dir\" in data:\n config.memory_dir = Path(data[\"memory_dir\"])\n if \"skills_dir\" in data:\n config.skills_dir = Path(data[\"skills_dir\"])\n if \"plugins_dir\" in data:\n config.plugins_dir = Path(data[\"plugins_dir\"])\n if \"mcp_dir\" in data:\n config.mcp_dir = Path(data[\"mcp_dir\"])\n config.log_level = data.get(\"log_level\", \"INFO\")\n config.sandbox_mode = data.get(\"sandbox_mode\", \"off\")\n config.tool_profile = data.get(\"tool_profile\", \"coding\")\n config.search_provider = data.get(\"search_provider\", \"exa\")\n config.tavily_api_key = data.get(\"tavily_api_key\")\n config.brave_api_key = data.get(\"brave_api_key\")\n config.exa_api_key = data.get(\"exa_api_key\")\n config.termux_mode = data.get(\"termux_mode\", False)\n config.clipboard_tool = data.get(\"clipboard_tool\", \"termux-clipboard-set\")\n return config\n\n\ndef load_config(config_path: Path | None = None) -> NexusConfig:\n \"\"\"Load configuration from file, auto-creating from env vars if needed.\"\"\"\n path = config_path or DEFAULT_CONFIG_FILE\n if path.exists():\n with open(path) as f:\n data = json.load(f)\n return NexusConfig.from_dict(data)\n\n config = NexusConfig()\n\n # Auto-detect Termux\n if os.path.exists(\"/data/data/com.termux\"):\n config.termux_mode = True\n\n # Auto-detect providers from env vars\n if os.environ.get(\"OPENAI_API_KEY\"):\n config.providers[\"openai\"] = ProviderConfig(\n name=\"openai\", provider_type=\"openai\",\n api_key=os.environ[\"OPENAI_API_KEY\"],\n model=os.environ.get(\"OPENAI_MODEL\", \"gpt-4o\"),\n )\n config.active_provider = \"openai\"\n\n if os.environ.get(\"ANTHROPIC_API_KEY\"):\n config.providers[\"anthropic\"] = ProviderConfig(\n name=\"anthropic\", provider_type=\"anthropic\",\n api_key=os.environ[\"ANTHROPIC_API_KEY\"],\n model=os.environ.get(\"ANTHROPIC_MODEL\", \"claude-sonnet-4-20250514\"),\n )\n if config.active_provider == \"openai\":\n config.active_provider = \"anthropic\"\n\n if os.environ.get(\"GOOGLE_API_KEY\"):\n config.providers[\"google\"] = ProviderConfig(\n name=\"google\", provider_type=\"google\",\n api_key=os.environ[\"GOOGLE_API_KEY\"],\n model=os.environ.get(\"GOOGLE_MODEL\", \"gemini-2.0-flash\"),\n )\n\n if os.environ.get(\"OLLAMA_HOST\"):\n config.providers[\"ollama\"] = ProviderConfig(\n name=\"ollama\", provider_type=\"ollama\",\n base_url=os.environ.get(\"OLLAMA_HOST\", \"http://localhost:11434\"),\n model=os.environ.get(\"OLLAMA_MODEL\", \"llama3\"),\n )\n\n if os.environ.get(\"GROQ_API_KEY\"):\n config.providers[\"groq\"] = ProviderConfig(\n name=\"groq\", provider_type=\"groq\",\n api_key=os.environ[\"GROQ_API_KEY\"],\n model=os.environ.get(\"GROQ_MODEL\", \"llama-3.3-70b-versatile\"),\n )\n\n if os.environ.get(\"DEEPSEEK_API_KEY\"):\n config.providers[\"deepseek\"] = ProviderConfig(\n name=\"deepseek\", provider_type=\"deepseek\",\n api_key=os.environ[\"DEEPSEEK_API_KEY\"],\n model=os.environ.get(\"DEEPSEEK_MODEL\", \"deepseek-chat\"),\n )\n\n if os.environ.get(\"MISTRAL_API_KEY\"):\n config.providers[\"mistral\"] = ProviderConfig(\n name=\"mistral\", provider_type=\"mistral\",\n api_key=os.environ[\"MISTRAL_API_KEY\"],\n model=os.environ.get(\"MISTRAL_MODEL\", \"mistral-large-latest\"),\n )\n\n if os.environ.get(\"OPENCODE_ZEN_API_KEY\"):\n config.providers[\"opencode-zen\"] = ProviderConfig(\n name=\"opencode-zen\", provider_type=\"opencode-zen\",\n api_key=os.environ[\"OPENCODE_ZEN_API_KEY\"],\n base_url=\"https://opencode.ai/zen/v1\",\n model=os.environ.get(\"OPENCODE_ZEN_MODEL\", \"minimax-m2.5-free\"),\n )\n if config.active_provider == \"openai\":\n config.active_provider = \"opencode-zen\"\n\n if os.environ.get(\"OPENCODE_GO_API_KEY\"):\n config.providers[\"opencode-go\"] = ProviderConfig(\n name=\"opencode-go\", provider_type=\"opencode-go\",\n api_key=os.environ[\"OPENCODE_GO_API_KEY\"],\n base_url=\"https://opencode.ai/zen/go/v1\",\n model=os.environ.get(\"OPENCODE_GO_MODEL\", \"kimi-k2.5\"),\n )\n\n # Auto-save detected config\n save_config(config, path)\n\n return config\n\n\ndef save_config(config: NexusConfig, config_path: Path | None = None) -> None:\n \"\"\"Save configuration to file.\"\"\"\n path = config_path or DEFAULT_CONFIG_FILE\n path.parent.mkdir(parents=True, exist_ok=True)\n with open(path, \"w\") as f:\n json.dump(config.to_dict(), f, indent=2)\n"}, "514a4c66b7d21b3a27abce00cbddbfb62d6e90b5": {"t": 1785753195.8668246, "n": 8650, "h": "44f8d10483d631ee", "c": "\"\"\"Configuration management for Nexus.\"\"\"\n\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\nfrom typing import Any\nimport json\nimport os\n\n\nDEFAULT_CONFIG_DIR = Path.home() / \".nexus\"\nDEFAULT_CONFIG_FILE = DEFAULT_CONFIG_DIR / \"config.json\"\nDEFAULT_MEMORY_DIR = DEFAULT_CONFIG_DIR / \"memory\"\nDEFAULT_SKILLS_DIR = DEFAULT_CONFIG_DIR / \"skills\"\nDEFAULT_PLUGINS_DIR = DEFAULT_CONFIG_DIR / \"plugins\"\nDEFAULT_MCP_DIR = DEFAULT_CONFIG_DIR / \"mcp_servers\"\n\n\n@dataclass\nclass ProviderConfig:\n \"\"\"Configuration for an AI provider.\"\"\"\n name: str\n provider_type: str # openai, anthropic, google, ollama, groq, deepseek, etc.\n api_key: str | None = None\n base_url: str | None = None\n model: str = \"gpt-4o\"\n max_tokens: int = 4096\n temperature: float = 0.7\n timeout: int = 120\n enabled: bool = True\n\n def to_dict(self) -> dict[str, Any]:\n return {\n \"name\": self.name,\n \"provider_type\": self.provider_type,\n \"api_key\": self.api_key,\n \"base_url\": self.base_url,\n \"model\": self.model,\n \"max_tokens\": self.max_tokens,\n \"temperature\": self.temperature,\n \"timeout\": self.timeout,\n \"enabled\": self.enabled,\n }\n\n\n@dataclass\nclass NexusConfig:\n \"\"\"Main configuration for Nexus.\"\"\"\n providers: dict[str, ProviderConfig] = field(default_factory=dict)\n active_provider: str = \"openai\"\n planner_model: str | None = None\n worker_model: str | None = None\n config_dir: Path = field(default_factory=lambda: DEFAULT_CONFIG_DIR)\n memory_dir: Path = field(default_factory=lambda: DEFAULT_MEMORY_DIR)\n skills_dir: Path = field(default_factory=lambda: DEFAULT_SKILLS_DIR)\n plugins_dir: Path = field(default_factory=lambda: DEFAULT_PLUGINS_DIR)\n mcp_dir: Path = field(default_factory=lambda: DEFAULT_MCP_DIR)\n log_level: str = \"INFO\"\n sandbox_mode: str = \"off\" # off, non-main, all\n tool_profile: str = \"coding\" # minimal, default, coding, all\n\n # Search providers\n search_provider: str = \"exa\"\n tavily_api_key: str | None = None\n brave_api_key: str | None = None\n exa_api_key: str | None = None\n\n # Termux-specific\n termux_mode: bool = False\n clipboard_tool: str = \"termux-clipboard-set\"\n\n def ensure_dirs(self) -> None:\n \"\"\"Ensure all required directories exist.\"\"\"\n for d in [self.memory_dir, self.skills_dir, self.plugins_dir, self.mcp_dir]:\n d.mkdir(parents=True, exist_ok=True)\n\n def to_dict(self) -> dict[str, Any]:\n return {\n \"providers\": {k: v.to_dict() for k, v in self.providers.items()},\n \"active_provider\": self.active_provider,\n \"planner_model\": self.planner_model,\n \"worker_model\": self.worker_model,\n \"memory_dir\": str(self.memory_dir),\n \"skills_dir\": str(self.skills_dir),\n \"plugins_dir\": str(self.plugins_dir),\n \"mcp_dir\": str(self.mcp_dir),\n \"log_level\": self.log_level,\n \"sandbox_mode\": self.sandbox_mode,\n \"tool_profile\": self.tool_profile,\n \"search_provider\": self.search_provider,\n \"tavily_api_key\": self.tavily_api_key,\n \"brave_api_key\": self.brave_api_key,\n \"exa_api_key\": self.exa_api_key,\n \"termux_mode\": self.termux_mode,\n \"clipboard_tool\": self.clipboard_tool,\n }\n\n @classmethod\n def from_dict(cls, data: dict[str, Any]) -> \"NexusConfig\":\n config = cls()\n if \"providers\" in data:\n config.providers = {\n k: ProviderConfig(**v) for k, v in data[\"providers\"].items()\n }\n config.active_provider = data.get(\"active_provider\", \"openai\")\n config.planner_model = data.get(\"planner_model\")\n config.worker_model = data.get(\"worker_model\")\n if \"memory_dir\" in data:\n config.memory_dir = Path(data[\"memory_dir\"])\n if \"skills_dir\" in data:\n config.skills_dir = Path(data[\"skills_dir\"])\n if \"plugins_dir\" in data:\n config.plugins_dir = Path(data[\"plugins_dir\"])\n if \"mcp_dir\" in data:\n config.mcp_dir = Path(data[\"mcp_dir\"])\n config.log_level = data.get(\"log_level\", \"INFO\")\n config.sandbox_mode = data.get(\"sandbox_mode\", \"off\")\n config.tool_profile = data.get(\"tool_profile\", \"coding\")\n config.search_provider = data.get(\"search_provider\", \"exa\")\n config.tavily_api_key = data.get(\"tavily_api_key\")\n config.brave_api_key = data.get(\"brave_api_key\")\n config.exa_api_key = data.get(\"exa_api_key\")\n config.termux_mode = data.get(\"termux_mode\", False)\n config.clipboard_tool = data.get(\"clipboard_tool\", \"termux-clipboard-set\")\n return config\n\n\ndef load_config(config_path: Path | None = None) -> NexusConfig:\n \"\"\"Load configuration from file, auto-creating from env vars if needed.\"\"\"\n path = config_path or DEFAULT_CONFIG_FILE\n if path.exists():\n with open(path) as f:\n data = json.load(f)\n return NexusConfig.from_dict(data)\n \n config = NexusConfig()\n \n # Auto-detect Termux\n if os.path.exists(\"/data/data/com.termux\"):\n config.termux_mode = True\n \n # Auto-detect providers from env vars\n if os.environ.get(\"OPENAI_API_KEY\"):\n config.providers[\"openai\"] = ProviderConfig(\n name=\"openai\", provider_type=\"openai\",\n api_key=os.environ[\"OPENAI_API_KEY\"],\n model=os.environ.get(\"OPENAI_MODEL\", \"gpt-4o\"),\n )\n config.active_provider = \"openai\"\n \n if os.environ.get(\"ANTHROPIC_API_KEY\"):\n config.providers[\"anthropic\"] = ProviderConfig(\n name=\"anthropic\", provider_type=\"anthropic\",\n api_key=os.environ[\"ANTHROPIC_API_KEY\"],\n model=os.environ.get(\"ANTHROPIC_MODEL\", \"claude-sonnet-4-20250514\"),\n )\n if config.active_provider == \"openai\":\n config.active_provider = \"anthropic\"\n \n if os.environ.get(\"GOOGLE_API_KEY\"):\n config.providers[\"google\"] = ProviderConfig(\n name=\"google\", provider_type=\"google\",\n api_key=os.environ[\"GOOGLE_API_KEY\"],\n model=os.environ.get(\"GOOGLE_MODEL\", \"gemini-2.0-flash\"),\n )\n \n if os.environ.get(\"OLLAMA_HOST\"):\n config.providers[\"ollama\"] = ProviderConfig(\n name=\"ollama\", provider_type=\"ollama\",\n base_url=os.environ.get(\"OLLAMA_HOST\", \"http://localhost:11434\"),\n model=os.environ.get(\"OLLAMA_MODEL\", \"llama3\"),\n )\n \n if os.environ.get(\"GROQ_API_KEY\"):\n config.providers[\"groq\"] = ProviderConfig(\n name=\"groq\", provider_type=\"groq\",\n api_key=os.environ[\"GROQ_API_KEY\"],\n model=os.environ.get(\"GROQ_MODEL\", \"llama-3.3-70b-versatile\"),\n )\n \n if os.environ.get(\"DEEPSEEK_API_KEY\"):\n config.providers[\"deepseek\"] = ProviderConfig(\n name=\"deepseek\", provider_type=\"deepseek\",\n api_key=os.environ[\"DEEPSEEK_API_KEY\"],\n model=os.environ.get(\"DEEPSEEK_MODEL\", \"deepseek-chat\"),\n )\n \n if os.environ.get(\"MISTRAL_API_KEY\"):\n config.providers[\"mistral\"] = ProviderConfig(\n name=\"mistral\", provider_type=\"mistral\",\n api_key=os.environ[\"MISTRAL_API_KEY\"],\n model=os.environ.get(\"MISTRAL_MODEL\", \"mistral-large-latest\"),\n )\n\n if os.environ.get(\"OPENCODE_ZEN_API_KEY\"):\n config.providers[\"opencode-zen\"] = ProviderConfig(\n name=\"opencode-zen\", provider_type=\"opencode-zen\",\n api_key=os.environ[\"OPENCODE_ZEN_API_KEY\"],\n base_url=\"https://opencode.ai/zen/v1\",\n model=os.environ.get(\"OPENCODE_ZEN_MODEL\", \"minimax-m2.5-free\"),\n )\n if config.active_provider == \"openai\":\n config.active_provider = \"opencode-zen\"\n\n if os.environ.get(\"OPENCODE_GO_API_KEY\"):\n config.providers[\"opencode-go\"] = ProviderConfig(\n name=\"opencode-go\", provider_type=\"opencode-go\",\n api_key=os.environ[\"OPENCODE_GO_API_KEY\"],\n base_url=\"https://opencode.ai/zen/go/v1\",\n model=os.environ.get(\"OPENCODE_GO_MODEL\", \"kimi-k2.5\"),\n )\n \n # Auto-save detected config\n save_config(config, path)\n \n return config\n\n\ndef save_config(config: NexusConfig, config_path: Path | None = None) -> None:\n \"\"\"Save configuration to file.\"\"\"\n path = config_path or DEFAULT_CONFIG_FILE\n path.parent.mkdir(parents=True, exist_ok=True)\n with open(path, \"w\") as f:\n json.dump(config.to_dict(), f, indent=2)\n"}}}}