agcodex_core/subagents/built_in/
mod.rs1pub mod code_reviewer;
8pub mod debugger;
9pub mod performance;
10pub mod refactorer;
11pub mod test_writer;
12
13pub use code_reviewer::CodeReviewerAgent;
15pub use code_reviewer::IntelligenceLevel;
16pub use debugger::DebugDepth;
17pub use debugger::DebuggerAgent;
18pub use performance::OptimizationLevel;
19pub use performance::PerformanceAgent;
20pub use refactorer::RefactorerAgent;
21pub use refactorer::RiskLevel;
22pub use test_writer::TestStrategy;
23pub use test_writer::TestWriterAgent;
24
25use crate::subagents::Subagent;
26use crate::subagents::SubagentRegistry;
27use std::sync::Arc;
28
29pub fn register_built_in_agents(registry: &SubagentRegistry) {
31 registry.register(
33 "code-reviewer",
34 Arc::new(CodeReviewerAgent::new()) as Arc<dyn Subagent>,
35 );
36
37 registry.register(
39 "refactorer",
40 Arc::new(RefactorerAgent::new()) as Arc<dyn Subagent>,
41 );
42
43 registry.register(
45 "debugger",
46 Arc::new(DebuggerAgent::new()) as Arc<dyn Subagent>,
47 );
48
49 registry.register(
51 "test-writer",
52 Arc::new(TestWriterAgent::new()) as Arc<dyn Subagent>,
53 );
54
55 registry.register(
57 "performance",
58 Arc::new(PerformanceAgent::new()) as Arc<dyn Subagent>,
59 );
60
61 registry.register(
63 "reviewer",
64 Arc::new(CodeReviewerAgent::new()) as Arc<dyn Subagent>,
65 );
66
67 registry.register(
68 "refactor",
69 Arc::new(RefactorerAgent::new()) as Arc<dyn Subagent>,
70 );
71
72 registry.register("debug", Arc::new(DebuggerAgent::new()) as Arc<dyn Subagent>);
73
74 registry.register(
75 "test",
76 Arc::new(TestWriterAgent::new()) as Arc<dyn Subagent>,
77 );
78
79 registry.register(
80 "perf",
81 Arc::new(PerformanceAgent::new()) as Arc<dyn Subagent>,
82 );
83}
84
85pub fn create_default_registry() -> SubagentRegistry {
87 let registry = SubagentRegistry::new().expect("Failed to create registry");
88 register_built_in_agents(®istry);
89 registry
90}
91
92pub fn get_agent_descriptions() -> Vec<(&'static str, &'static str)> {
94 vec![
95 (
96 "@agent-code-reviewer",
97 "Reviews code for quality, security, and maintainability issues",
98 ),
99 (
100 "@agent-refactorer",
101 "Performs systematic code refactoring with risk assessment",
102 ),
103 (
104 "@agent-debugger",
105 "Deep debugging analysis and root cause identification",
106 ),
107 (
108 "@agent-test-writer",
109 "Generates comprehensive test suites with high coverage",
110 ),
111 (
112 "@agent-performance",
113 "Identifies and optimizes performance bottlenecks",
114 ),
115 ]
116}
117
118pub fn get_agent_examples() -> Vec<(&'static str, &'static str)> {
120 vec![
121 (
122 "@agent-code-reviewer",
123 "Review this file for security issues",
124 ),
125 (
126 "@agent-refactorer → @agent-test-writer",
127 "Refactor and then add tests",
128 ),
129 (
130 "@agent-performance + @agent-security",
131 "Run performance and security analysis in parallel",
132 ),
133 (
134 "@agent-debugger if errors",
135 "Debug only if errors are detected",
136 ),
137 (
138 "@agent-test-writer --strategy=comprehensive",
139 "Generate comprehensive test suite",
140 ),
141 ]
142}
143
144#[cfg(test)]
145mod tests {
146 use super::*;
147
148 #[test]
149 fn test_built_in_agents_registration() {
150 let registry = create_default_registry();
151
152 assert!(registry.get_agent("code-reviewer").is_some());
154 assert!(registry.get_agent("refactorer").is_some());
155 assert!(registry.get_agent("debugger").is_some());
156 assert!(registry.get_agent("test-writer").is_some());
157 assert!(registry.get_agent("performance").is_some());
158
159 assert!(registry.get_agent("reviewer").is_some());
161 assert!(registry.get_agent("refactor").is_some());
162 assert!(registry.get_agent("debug").is_some());
163 assert!(registry.get_agent("test").is_some());
164 assert!(registry.get_agent("perf").is_some());
165 }
166
167 #[test]
168 fn test_agent_descriptions() {
169 let descriptions = get_agent_descriptions();
170 assert_eq!(descriptions.len(), 5);
171
172 for (name, desc) in descriptions {
174 assert!(name.starts_with("@agent-"));
175 assert!(!desc.is_empty());
176 }
177 }
178
179 #[test]
180 fn test_agent_examples() {
181 let examples = get_agent_examples();
182 assert!(!examples.is_empty());
183
184 for (invocation, _description) in examples {
186 assert!(invocation.contains("@agent-"));
187 }
188 }
189}