use crate::agent::capabilities::AgentCapabilities;
use crate::agent::config::AgentConfig;
use crate::agent::core::MoFAAgent;
use crate::agent::error::AgentResult;
use async_trait::async_trait;
use std::sync::Arc;
use tokio::sync::RwLock;
#[async_trait]
pub trait AgentFactory: Send + Sync {
async fn create(&self, config: AgentConfig) -> AgentResult<Arc<RwLock<dyn MoFAAgent>>>;
fn type_id(&self) -> &str;
fn default_capabilities(&self) -> AgentCapabilities;
fn validate_config(&self, config: &AgentConfig) -> AgentResult<()> {
let _ = config;
Ok(())
}
fn description(&self) -> Option<&str> {
None
}
}