//! `AgentDefinition` -- declarative specification for instantiating a //! subagent from workflow scripts or programmatic calls. use serde::{Deserialize, Serialize}; /// Declarative specification for instantiating a subagent: name, role, /// optional system prompt, allowed tools, step budget, and temperature. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct AgentDefinition { pub name: String, pub role: String, pub system_prompt: Option, pub allowed_tools: Option>, pub max_steps: Option, pub temperature: Option, } impl AgentDefinition { /// Create an agent definition with the required name and role; all /// optional fields start as `None`. pub fn new(name: String, role: String) -> Self { AgentDefinition { name, role, system_prompt: None, allowed_tools: None, max_steps: None, temperature: None, } } /// Builder method: limit this agent to at most `steps` LLM calls. #[allow(dead_code)] pub fn with_max_steps(mut self, steps: usize) -> Self { self.max_steps = Some(steps); self } /// Builder method: set the system prompt for this agent. pub fn with_system_prompt(mut self, prompt: String) -> Self { self.system_prompt = Some(prompt); self } /// Builder method: set the allowed tool list for this agent. pub fn with_allowed_tools(mut self, tools: Vec) -> Self { self.allowed_tools = Some(tools); self } }