pub fn auto_assign_agents(project_type: &str) -> Vec<String> {
let lower = project_type.to_lowercase();
let mut agents: Vec<String> = Vec::new();
agents.push("dependency-auditor".to_string());
agents.push("ci-optimizer".to_string());
if lower.contains("rust") || lower.contains("cargo") {
agents.push("security-scanner".to_string());
return agents;
}
if lower.contains("node")
|| lower.contains("next")
|| lower.contains("react")
|| lower.contains("vue")
|| lower.contains("typescript")
|| lower.contains("javascript")
{
agents.push("lighthouse-auditor".to_string());
return agents;
}
if lower.contains("python") || lower.contains("django") || lower.contains("fastapi") {
agents.push("security-scanner".to_string());
return agents;
}
agents
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn rust_project_gets_security_scanner() {
let agents = auto_assign_agents("rust");
assert!(agents.contains(&"dependency-auditor".to_string()));
assert!(agents.contains(&"ci-optimizer".to_string()));
assert!(agents.contains(&"security-scanner".to_string()));
assert!(!agents.contains(&"lighthouse-auditor".to_string()));
}
#[test]
fn nextjs_project_gets_lighthouse() {
let agents = auto_assign_agents("nextjs");
assert!(agents.contains(&"dependency-auditor".to_string()));
assert!(agents.contains(&"lighthouse-auditor".to_string()));
assert!(!agents.contains(&"security-scanner".to_string()));
}
#[test]
fn unknown_project_gets_universal_only() {
let agents = auto_assign_agents("unknown");
assert_eq!(agents.len(), 2);
assert!(agents.contains(&"dependency-auditor".to_string()));
assert!(agents.contains(&"ci-optimizer".to_string()));
}
#[test]
fn python_project_gets_security_scanner() {
let agents = auto_assign_agents("python");
assert!(agents.contains(&"security-scanner".to_string()));
}
}