use super::types::*;
use crate::devteam::{coder::Coder, planner::Planner, reviewer::Reviewer, sec_auditor::SecAuditor};
pub fn run_once(task: TaskSpec) -> TeamState {
let agents: Vec<Box<dyn Agent>> = vec![
Box::new(Planner),
Box::new(Coder),
Box::new(Reviewer),
Box::new(SecAuditor),
];
let mut state = TeamState::default();
for a in agents {
match a.step(&task, &state) {
TeamEvent::Planned(steps) => state.plan = steps,
TeamEvent::ProposedPatch(p) => state.patches.push(p),
TeamEvent::ReviewNotes(n) => state.notes.extend(n),
TeamEvent::SecNotes(n) => state.notes.extend(n),
TeamEvent::Idle => {}
}
}
state
}