use super::{AgentInfo, AgentMode, builtin};
use std::collections::HashMap;
pub struct AgentRegistry {
agents: HashMap<String, AgentInfo>,
}
impl AgentRegistry {
pub fn new() -> Self {
Self {
agents: HashMap::new(),
}
}
pub fn register(&mut self, info: AgentInfo) {
self.agents.insert(info.name.clone(), info);
}
#[allow(dead_code)]
pub fn get(&self, name: &str) -> Option<&AgentInfo> {
self.agents.get(name)
}
pub fn list(&self) -> Vec<&AgentInfo> {
self.agents.values().collect()
}
#[allow(dead_code)]
pub fn list_primary(&self) -> Vec<&AgentInfo> {
self.agents
.values()
.filter(|agent| agent.mode == AgentMode::Primary && !agent.hidden)
.collect()
}
pub fn with_builtins() -> Self {
let mut registry = Self::new();
registry.register(builtin::build_agent());
registry.register(builtin::plan_agent());
registry.register(builtin::explore_agent());
registry
}
}
impl Default for AgentRegistry {
fn default() -> Self {
Self::with_builtins()
}
}