""" Standard OpenEnv Client for Autonomous SRE Control Center. Provides a universal interface for interacting with the SRE Sandbox. """ from __future__ import annotations import os import requests from typing import Optional, Dict, Any from models import Action, Observation, StepResult, EnvState class SREEnvClient: """Standard HTTP Client for SRE Environment (spec ยง9.3).""" def __init__(self, base_url: str = "http://localhost:7860", api_key: Optional[str] = None): self.base_url = base_url.rstrip("/") self.session_id: Optional[str] = None self.api_key = api_key or os.environ.get("CODEORGANISM_API_KEY") or os.environ.get("CODEORGANISM_API_KEYS", "").split(",", 1)[0] def _headers(self) -> Dict[str, str]: headers: Dict[str, str] = {} if self.api_key: headers["x-api-key"] = self.api_key if self.session_id: headers["x-session-id"] = self.session_id return headers def reset(self, task_id: str = "phase_1") -> Observation: """Provision a fresh cluster and start incident response.""" resp = requests.post( f"{self.base_url}/reset", json={"task_id": task_id}, headers=self._headers(), ) resp.raise_for_status() data = resp.json() return Observation(**data) def step(self, action: Action) -> StepResult: """Submit a remediation protocol to the cluster.""" resp = requests.post( f"{self.base_url}/step", json=action.model_dump(), headers=self._headers(), ) resp.raise_for_status() data = resp.json() return StepResult(**data) def state(self) -> EnvState: """Retrieve the current SLA and infrastructure state.""" resp = requests.get(f"{self.base_url}/state", headers=self._headers()) resp.raise_for_status() data = resp.json() return EnvState(**data) def health(self) -> Dict[str, Any]: """Check cluster connection health.""" resp = requests.get(f"{self.base_url}/health") resp.raise_for_status() return resp.json() if __name__ == "__main__": # Quick sanity check client = SREEnvClient() try: print("Connecting to Autonomous SRE Control Center...") health = client.health() print(f"Connection established. Environment Version: {health.get('version')}") print("Provisioning Phase 1 Cluster...") obs = client.reset("phase_1") print(f"Cluster Online. Initial SLA Index: {obs.vitality_score}%") except Exception as e: print(f"Connection failed: {e}") print("Ensure 'python app.py' is running.")