use crate::registry::types::{AgentCard, AgentStatus};
use async_trait::async_trait;
#[async_trait(?Send)]
pub trait PeerSelector {
async fn select(&self, candidates: &[AgentCard], task_description: &str) -> Option<String>;
}
pub struct FirstMatchSelector;
#[async_trait(?Send)]
impl PeerSelector for FirstMatchSelector {
async fn select(&self, candidates: &[AgentCard], _task_description: &str) -> Option<String> {
candidates
.iter()
.find(|card| card.status == AgentStatus::Online)
.map(|card| card.agent_id.clone())
}
}