1use crate::agent::AgentRegistry;
2use crate::cli::tui::AgentOptionView;
3use crate::config::Settings;
4
5pub fn initialize_agents(
7 settings: &Settings,
8) -> anyhow::Result<(Vec<AgentOptionView>, Option<String>)> {
9 let loader = crate::agent::AgentLoader::new()?;
10 let agents = loader.load_agents()?;
11 let registry = AgentRegistry::new(agents);
12
13 let agent_views: Vec<AgentOptionView> = registry
15 .list_agents()
16 .iter()
17 .map(|agent| AgentOptionView {
18 name: agent.name.clone(),
19 display_name: agent.display_name.clone(),
20 color: agent.color.clone(),
21 mode: format!("{:?}", agent.mode).to_lowercase(),
22 })
23 .collect();
24
25 let selected_agent = settings.selected_agent.clone().or_else(|| {
27 if agent_views.iter().any(|a| a.name == "build") {
29 Some("build".to_string())
30 } else {
31 agent_views
32 .iter()
33 .find(|a| a.mode == "primary")
34 .map(|first_primary| first_primary.name.clone())
35 }
36 });
37
38 Ok((agent_views, selected_agent))
39}