dashboard-nanobot/backend/schemas/edge.py

129 lines
3.3 KiB
Python

from typing import Any, Dict, List, Optional
from pydantic import BaseModel, Field
NODE_PROTOCOL_VERSION = "1"
class EdgeNodeIdentityBase(BaseModel):
protocol_version: str = NODE_PROTOCOL_VERSION
node_id: str
display_name: str
service: str = "dashboard-edge"
transport_kind: str = "edge"
runtime_kind: str = "docker"
core_adapter: str = "nanobot"
class EdgeStatusResponse(BaseModel):
status: str
class EdgeStateWriteRequest(BaseModel):
data: Dict[str, Any] = Field(default_factory=dict)
workspace_root: Optional[str] = None
class EdgeStateResponse(BaseModel):
bot_id: str
state_key: str
data: Dict[str, Any] = Field(default_factory=dict)
class EdgeNativePreflightRequest(BaseModel):
native_command: Optional[str] = None
native_workdir: Optional[str] = None
class EdgeNativePreflightResponse(BaseModel):
ok: bool = False
command: List[str] = Field(default_factory=list)
workdir: str = ""
command_available: bool = False
workdir_exists: bool = False
detail: str = ""
class EdgeStartBotRequest(BaseModel):
image_tag: str
runtime_kind: str = "docker"
env_vars: Dict[str, str] = Field(default_factory=dict)
workspace_root: Optional[str] = None
native_command: Optional[str] = None
native_workdir: Optional[str] = None
cpu_cores: float = 1.0
memory_mb: int = 1024
storage_gb: int = 10
class EdgeCommandRequest(BaseModel):
command: str
media: List[str] = Field(default_factory=list)
class EdgeLogsResponse(BaseModel):
bot_id: str
logs: List[str] = Field(default_factory=list)
class EdgeMonitorEnsureResponse(BaseModel):
ensured: bool = False
class EdgeMonitorPacket(BaseModel):
protocol_version: str = NODE_PROTOCOL_VERSION
node_id: str = ""
bot_id: str = ""
seq: int = 0
captured_at: str = ""
packet: Dict[str, Any] = Field(default_factory=dict)
class EdgeMonitorPacketsResponse(BaseModel):
protocol_version: str = NODE_PROTOCOL_VERSION
node_id: str = ""
bot_id: str
latest_seq: int = 0
packets: List[EdgeMonitorPacket] = Field(default_factory=list)
class EdgeWorkspaceSyncRequest(BaseModel):
channels_override: Optional[List[Dict[str, Any]]] = None
global_delivery_override: Optional[Dict[str, Any]] = None
runtime_overrides: Optional[Dict[str, Any]] = None
class EdgeMarkdownWriteRequest(BaseModel):
content: str = ""
class EdgeNodeResourcesResponse(BaseModel):
protocol_version: str = NODE_PROTOCOL_VERSION
node_id: str
display_name: str = ""
service: str = "dashboard-edge"
transport_kind: str = "edge"
runtime_kind: str = "docker"
core_adapter: str = "nanobot"
resources: Dict[str, Any] = Field(default_factory=dict)
reported_at: str = ""
class EdgeNodeSelfResponse(BaseModel):
protocol_version: str = NODE_PROTOCOL_VERSION
node_id: str
display_name: str
service: str = "dashboard-edge"
transport_kind: str = "edge"
runtime_kind: str = "docker"
core_adapter: str = "nanobot"
capabilities: Dict[str, Any] = Field(default_factory=dict)
resources: Dict[str, Any] = Field(default_factory=dict)
reported_at: str = ""
class EdgeNodeHeartbeatResponse(EdgeNodeIdentityBase):
capabilities: Dict[str, Any] = Field(default_factory=dict)
resources: Dict[str, Any] = Field(default_factory=dict)
reported_at: str = ""