Skip to content

ccproxy.services.codex_detection_service

ccproxy.services.codex_detection_service

Service for automatically detecting Codex CLI headers at startup.

CodexDetectionService

CodexDetectionService(settings)

Service for automatically detecting Codex CLI headers at startup.

Source code in ccproxy/services/codex_detection_service.py
def __init__(self, settings: Settings) -> None:
    """Initialize Codex detection service."""
    self.settings = settings
    self.cache_dir = get_ccproxy_cache_dir()
    self.cache_dir.mkdir(parents=True, exist_ok=True)
    self._cached_data: CodexCacheData | None = None

initialize_detection async

initialize_detection()

Initialize Codex detection at startup.

Source code in ccproxy/services/codex_detection_service.py
async def initialize_detection(self) -> CodexCacheData:
    """Initialize Codex detection at startup."""
    try:
        # Get current Codex version
        current_version = await self._get_codex_version()

        # Try to load from cache first
        detected_data = self._load_from_cache(current_version)
        cached = detected_data is not None
        if cached:
            logger.debug("detection_codex_headers_debug", version=current_version)
        else:
            # No cache or version changed - detect fresh
            detected_data = await self._detect_codex_headers(current_version)
            # Cache the results
            self._save_to_cache(detected_data)

        self._cached_data = detected_data

        logger.info(
            "detection_codex_headers_completed",
            version=current_version,
            cached=cached,
        )

        # TODO: add proper testing without codex cli installed
        if detected_data is None:
            raise ValueError("Codex detection failed")
        return detected_data

    except Exception as e:
        logger.warning("detection_codex_headers_failed", fallback=True, error=e)
        # Return fallback data
        fallback_data = self._get_fallback_data()
        self._cached_data = fallback_data
        return fallback_data

get_cached_data

get_cached_data()

Get currently cached detection data.

Source code in ccproxy/services/codex_detection_service.py
def get_cached_data(self) -> CodexCacheData | None:
    """Get currently cached detection data."""
    return self._cached_data