use awaken_server_contract::AgentSpec;
use awaken_server_contract::registry_spec::IssueSeverity;
pub(crate) fn collect_catalog_errors(agent: &AgentSpec) -> Vec<String> {
let mut errors: Vec<String> = Vec::new();
for issue in agent.validate_catalog() {
match issue.severity {
IssueSeverity::Error => errors.push(issue.message),
IssueSeverity::Warning => tracing::warn!(
target: "awaken_server::agent_catalog",
agent_id = %agent.id, field = issue.field, entry = %issue.entry,
"{}", issue.message,
),
}
}
errors
}
pub(crate) fn check_catalog_errors(agents: &[AgentSpec]) -> Result<(), String> {
let mut out: Vec<String> = Vec::new();
for agent in agents {
for msg in collect_catalog_errors(agent) {
out.push(format!("{}: {msg}", agent.id));
}
}
if out.is_empty() {
Ok(())
} else {
Err(out.join("; "))
}
}