use super::core::MoFAAgent;
use super::types::AgentState;
use std::sync::Arc;
use tokio::sync::RwLock;
pub type DynAgent = Arc<RwLock<dyn MoFAAgent>>;
#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub enum HealthStatus {
#[default]
Healthy,
Degraded(String),
Unhealthy(String),
}
#[derive(Debug, Clone, Default)]
pub struct AgentStats {
pub total_executions: u64,
pub successful_executions: u64,
pub failed_executions: u64,
pub avg_execution_time_ms: f64,
pub total_tokens_used: u64,
pub total_tool_calls: u64,
}
#[derive(Debug, Clone)]
pub struct AgentMetadata {
pub id: String,
pub name: String,
pub description: Option<String>,
pub version: Option<String>,
pub capabilities: crate::agent::capabilities::AgentCapabilities,
pub state: AgentState,
}
impl AgentMetadata {
pub fn from_agent(agent: &dyn MoFAAgent) -> Self {
Self {
id: agent.id().to_string(),
name: agent.name().to_string(),
description: None,
version: None,
capabilities: agent.capabilities().clone(),
state: agent.state(),
}
}
}