Skip to main content

hh_cli/agent/
registry.rs

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}