Skip to main content

codetether_agent/swarm/validation/
validator.rs

1use super::{IssueSeverity, ValidationReport};
2use crate::swarm::{SubTask, SwarmConfig};
3use anyhow::Result;
4
5/// Pre-flight validator for swarm execution.
6pub struct SwarmValidator {
7    pub(super) config: SwarmConfig,
8    pub(super) provider: String,
9    pub(super) model: String,
10}
11
12impl SwarmValidator {
13    /// Create a new validator.
14    pub fn new(config: SwarmConfig, provider: String, model: String) -> Self {
15        Self {
16            config,
17            provider,
18            model,
19        }
20    }
21
22    /// Run all validation checks.
23    pub async fn validate(&self, subtasks: &[SubTask]) -> Result<ValidationReport> {
24        let mut issues = Vec::new();
25        let provider_status = self.validate_provider(&mut issues).await?;
26        let workspace_status = self.validate_workspace(&mut issues)?;
27        self.validate_configuration(&mut issues);
28        self.validate_dependencies(subtasks, &mut issues);
29        let estimated_tokens = self.estimate_token_usage(subtasks, &provider_status, &mut issues);
30        let is_valid = !issues.iter().any(|i| i.severity == IssueSeverity::Error);
31        Ok(ValidationReport {
32            is_valid,
33            issues,
34            estimated_tokens,
35            provider_status,
36            workspace_status,
37        })
38    }
39}