Newer
Older
navi-1 / clients / terminal / config.py
"""Pydantic settings for the terminal client."""

from __future__ import annotations

from pathlib import Path

from pydantic_settings import BaseSettings, SettingsConfigDict


class Settings(BaseSettings):
    """Configuration loaded from environment / .env file."""

    model_config = SettingsConfigDict(
        env_prefix="NAVI_CODE_",
        env_file=".env",
        env_file_encoding="utf-8",
        extra="ignore",
    )

    base_url: str = "http://localhost:8000"
    ws_url: str | None = None
    state_dir: Path = Path.home() / ".navi_code"
    default_profile_id: str = "navi_code"
    show_thinking: bool = False
    show_events: bool = True

    def websocket_url(self, session_id: str) -> str:
        """Build WebSocket URL for a session."""
        base = (self.ws_url or self.base_url).rstrip("/")
        if base.startswith("http://"):
            base = base.replace("http://", "ws://", 1)
        elif base.startswith("https://"):
            base = base.replace("https://", "wss://", 1)
        return f"{base}/ws/sessions/{session_id}"


settings = Settings()