// Agents marketplace page use leptos::prelude::*; use leptos::task::spawn_local; use log::warn; use crate::api::{Agent, ApiClient}; use crate::components::{Badge, Button, Card, GlowColor, NavBar}; use crate::config::AppConfig; /// Agents marketplace page #[component] pub fn AgentsPage() -> impl IntoView { let api_client = ApiClient::new(&AppConfig::load()); let (agents, set_agents) = signal(Vec::::new()); let (loading, set_loading) = signal(true); let (error, set_error) = signal(None::); // Fetch agents on mount Effect::new(move |_| { let api = api_client.clone(); spawn_local(async move { match api.fetch_agents().await { Ok(a) => { set_agents.set(a); set_loading.set(false); } Err(e) => { warn!("Failed to fetch agents: {}", e); set_error.set(Some(e)); set_loading.set(false); } } }); }); view! {

"Agent Marketplace"

"Loading agents..."
} > {move || { if let Some(err) = error.get() { view! {
"Error loading agents"
{err}
}.into_any() } else if agents.get().is_empty() { view! {
"No agents available"
}.into_any() } else { view! {

{name}

{role}

{llm_info}

{capabilities.iter().take(3).map(|cap| { let capability = cap.clone(); view! { {capability} } }).collect_view()}
} } />
}.into_any() } }}
} }