from abc import ABC, abstractmethod from enum import Enum from typing import ClassVar, Protocol class AppMode(Enum): OSS = 'oss' SAAS = 'saas' class SessionMiddlewareInterface(Protocol): """Protocol for session middleware classes.""" pass class OpenhandsConfigInterface(ABC): CONFIG_PATH: ClassVar[str | None] APP_MODE: ClassVar[AppMode] POSTHOG_CLIENT_KEY: ClassVar[str] GITHUB_CLIENT_ID: ClassVar[str] ATTACH_SESSION_MIDDLEWARE_PATH: ClassVar[str] @abstractmethod def verify_config(self) -> None: """Verify configuration settings.""" raise NotImplementedError @abstractmethod async def verify_github_repo_list(self, installation_id: int | None) -> None: """Verify that repo list is being called via user's profile or Github App installations.""" raise NotImplementedError @abstractmethod async def get_config(self) -> dict[str, str]: """Configure attributes for frontend""" raise NotImplementedError class MissingSettingsError(ValueError): """Raised when settings are missing or not found.""" pass class LLMAuthenticationError(ValueError): """Raised when there is an issue with LLM authentication.""" pass