"""Hard request-scoped access policy for optional research context.""" from __future__ import annotations import logging import os from dataclasses import dataclass logger = logging.getLogger(__name__) @dataclass(frozen=True) class ContextAccessPolicy: project_context_enabled: bool explicit_context_available: bool = False @property def web_available(self) -> bool: return bool(os.getenv("TAVILY_API_KEY")) @property def allow_project_retrieval(self) -> bool: return self.project_context_enabled @property def allow_project_memory(self) -> bool: return self.project_context_enabled def log(self, *, request_id: str, event_type: str) -> None: logger.info( "Context policy request=%s event=%s project=%s explicit_context=%s web=%s", request_id, event_type, self.project_context_enabled, self.explicit_context_available, self.web_available, ) if not self.project_context_enabled: logger.info("Project retrieval skipped request=%s reason=user_disabled", request_id)