"""Domain models for OpsBridge.""" from __future__ import annotations from dataclasses import dataclass, field from enum import Enum from typing import Optional class BridgeState(str, Enum): STOPPED = "stopped" STARTING = "starting" CONNECTED = "connected" DEGRADED = "degraded" RECONNECTING = "reconnecting" FAILED = "failed" class ActorType(str, Enum): ADM = "adm" # human operator AGT = "agt" # LLM-powered autonomous agent ATM = "atm" # deterministic script / pipeline class CertAcquisitionError(Exception): """Raised when cert_command fails to produce a certificate.""" @dataclass class ReconnectPolicy: max_attempts: int = 0 # 0 = infinite backoff_initial: int = 5 backoff_max: int = 60 @dataclass class HealthCheckConfig: url: str interval_seconds: int = 30 timeout_seconds: int = 5 @dataclass class TunnelConfig: name: str host: str remote_port: int local_port: int ssh_user: str ssh_key: str actor: str reconnect: ReconnectPolicy = field(default_factory=ReconnectPolicy) health_check: Optional[HealthCheckConfig] = None direction: str = "reverse" # "reverse" (-R) or "local" (-L) # Forward-destination host as seen from the remote end (direction "local") # or from this workstation (direction "reverse"). Defaults to loopback; # set e.g. a k3s ClusterIP to tunnel to an in-cluster Service. remote_host: str = "127.0.0.1" cert_command: Optional[str] = None @dataclass class ActorInfo: name: str actor_type: ActorType description: str = ""