use crate::agents::adapter::Adapter;
use crate::agents::claude_code::ClaudeCodeAdapter;
pub fn all_adapters() -> Vec<Box<dyn Adapter>> {
vec![Box::new(ClaudeCodeAdapter::new())]
}
pub fn find_adapter(name: &str) -> Option<Box<dyn Adapter>> {
all_adapters().into_iter().find(|a| a.name() == name)
}
pub fn known_agent_names() -> String {
all_adapters()
.iter()
.map(|a| a.name())
.collect::<Vec<_>>()
.join(", ")
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn all_adapters_ships_claude_code() {
let adapters = all_adapters();
assert_eq!(adapters.len(), 1);
assert_eq!(adapters[0].name(), "claude-code");
}
#[test]
fn find_adapter_returns_claude_code() {
let adapter = find_adapter("claude-code").expect("present");
assert_eq!(adapter.name(), "claude-code");
}
#[test]
fn find_adapter_returns_none_for_unknown() {
assert!(find_adapter("cursor").is_none());
assert!(find_adapter("").is_none());
assert!(find_adapter("CLAUDE-CODE").is_none());
}
#[test]
fn known_agent_names_is_comma_joined() {
let names = known_agent_names();
assert_eq!(names, "claude-code");
}
}