Aaron Brown
Remove hardcoded fallbacks, add snapshot-driven service lifecycle
7fedc25
"""Shared OpenEnv data models for OpenRange.
These models are intentionally defined outside ``server/`` so both the client
and server depend on the same shared contract without crossing the client/server
boundary encouraged by OpenEnv.
"""
from __future__ import annotations
from typing import Any, Literal
from pydantic import Field
from openenv.core.env_server.types import Action, Observation, State
class RangeAction(Action):
"""Command action for either the Red or Blue operator."""
command: str
mode: Literal["red", "blue"]
class RangeObservation(Observation):
"""Command/result observation for a range step."""
stdout: str = ""
stderr: str = ""
flags_captured: list[str] = Field(default_factory=list)
alerts: list[str] = Field(default_factory=list)
class RangeState(State):
"""Mutable episode state exposed through the OpenEnv state endpoint."""
mode: str = ""
flags_found: list[str] = Field(default_factory=list)
services_status: dict[str, Any] = Field(default_factory=dict)
tier: int = 1
active_sessions: dict[str, str] = Field(default_factory=dict)
auth_attempts: list[dict[str, Any]] = Field(default_factory=list)
access_grants: list[str] = Field(default_factory=list)
pivot_history: list[dict[str, str]] = Field(default_factory=list)
milestones_completed: list[str] = Field(default_factory=list)