pub trait AgentCatalog: Send + Sync {
// Required methods
fn len(&self) -> usize;
fn get(&self, id: &str) -> Option<ResolvedAgent>;
fn ids(&self) -> Vec<String>;
fn snapshot(&self) -> HashMap<String, ResolvedAgent>;
// Provided methods
fn is_empty(&self) -> bool { ... }
fn descriptor(&self, id: &str) -> Option<AgentDescriptor> { ... }
fn descriptors(&self) -> HashMap<String, AgentDescriptor> { ... }
}