from __future__ import annotations from typing import Any from pydantic import BaseModel, Field class EdgeHeartbeatRequest(BaseModel): edge_id: str hostname: str os_type: str agent_version: str capabilities: list[str] = Field(default_factory=list) class EdgeHeartbeatData(BaseModel): edge_id: str node_status: str last_heartbeat_at: str class EdgePullTasksRequest(BaseModel): edge_id: str max_tasks: int = 5 class EdgeTaskItem(BaseModel): task_id: str step_id: str tool_name: str params: dict[str, Any] expire_at: str class EdgePullTasksData(BaseModel): tasks: list[EdgeTaskItem] class EdgeTaskReportRequest(BaseModel): edge_id: str task_id: str step_id: str tool_name: str success: bool code: str message: str data: dict[str, Any] = Field(default_factory=dict) evidence: dict[str, Any] = Field(default_factory=dict) started_at: str finished_at: str class EdgeTaskReportData(BaseModel): task_id: str step_id: str step_status: str task_status: str class EdgeEventRequest(BaseModel): edge_id: str event_type: str message: str detail: dict[str, Any] = Field(default_factory=dict) class EdgeEventData(BaseModel): edge_id: str event_type: str accepted: bool