1use crate::agent::{AgentConfig, AgentMode};
2use std::collections::HashMap;
3
4#[derive(Default)]
5pub struct AgentRegistry {
6 agents: HashMap<String, AgentConfig>,
7}
8
9impl AgentRegistry {
10 pub fn new(agents: Vec<AgentConfig>) -> Self {
11 let mut registry = HashMap::new();
12 for agent in agents {
13 registry.insert(agent.name.clone(), agent);
14 }
15 Self { agents: registry }
16 }
17
18 pub fn get_agent(&self, name: &str) -> Option<&AgentConfig> {
19 self.agents.get(name)
20 }
21
22 pub fn list_agents(&self) -> Vec<&AgentConfig> {
23 self.agents.values().collect()
24 }
25
26 pub fn list_primary_agents(&self) -> Vec<&AgentConfig> {
27 self.agents
28 .values()
29 .filter(|a| a.mode == AgentMode::Primary)
30 .collect()
31 }
32
33 pub fn register_agent(&mut self, agent: AgentConfig) {
34 self.agents.insert(agent.name.clone(), agent);
35 }
36
37 pub fn get_primary_agent_names(&self) -> Vec<String> {
38 self.agents
39 .values()
40 .filter(|a| a.mode == AgentMode::Primary)
41 .map(|a| a.name.clone())
42 .collect()
43 }
44}