use serde::{Deserialize, Serialize}; use serde_json::Value; use crate::ids::{AgentId, OperationId, WorkspaceId}; #[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)] #[serde(rename_all = "snake_case")] pub enum AgentStatus { Draft, Published, Archived, } #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] pub struct Agent { pub id: AgentId, pub workspace_id: WorkspaceId, pub slug: String, pub display_name: String, pub description: String, pub status: AgentStatus, pub current_draft_version: u32, pub latest_published_version: Option, pub created_at: String, pub updated_at: String, pub published_at: Option, } #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] pub struct AgentVersion { pub agent_id: AgentId, pub version: u32, pub status: AgentStatus, pub instructions: Value, pub tool_selection_policy: Value, pub created_at: String, } #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] pub struct AgentOperationBinding { pub operation_id: OperationId, pub operation_version: u32, pub tool_name: String, pub tool_title: String, pub tool_description_override: Option, pub enabled: bool, }