"""Configuration loader for the Matrix Bridge. Loads settings from config.json and provides typed access via dataclasses. """ from __future__ import annotations import json import os from dataclasses import dataclass, field from typing import Optional DEFAULT_CONFIG_PATH = os.path.join(os.path.dirname(__file__), "config.json") @dataclass class MatrixConfig: server: str user_id: str room_id: str credentials_file: str @dataclass class AgentConfig: base_url: str @dataclass class BridgeConfig: poll_interval_seconds: int = 1 state_file: str = "/home/admin/agent-dir/bridge-state.json" matrix_poll_timeout: int = 0 agent_timeout_seconds: int = 30 agent_retries: int = 3 max_message_length: int = 40000 processed_ids_limit: int = 200 agent_response_timeout: int = 300 api_host: str = "127.0.0.1" api_port: int = 8082 @dataclass class Config: matrix: MatrixConfig agent: AgentConfig bridge: BridgeConfig = field(default_factory=BridgeConfig) @classmethod def load(cls, path: str = DEFAULT_CONFIG_PATH) -> "Config": """Load configuration from a JSON file.""" with open(path, "r") as f: data = json.load(f) matrix = MatrixConfig(**data.get("matrix", {})) agent = AgentConfig(**data.get("agent", {})) bridge_data = data.get("bridge", {}) bridge = BridgeConfig(**bridge_data) return cls(matrix=matrix, agent=agent, bridge=bridge)