mod panel;
mod parse;
mod walk;
pub use panel::{
Confidence, MAX_PANEL_REVIEWERS, MIN_PANEL_REVIEWERS, NO_VERDICT_REPORTED, PANEL_PROMPT_ROOT,
Panel, PanelOutcome, Reviewer, ReviewerReport, aggregate,
};
pub use parse::parse;
pub use walk::{
HaltReason, Reported, StageEvidence, Step, Verdict, VerdictSource, next_step, resolve_verdict,
return_trigger,
};
use serde::{Deserialize, Serialize};
pub const DEFAULT_FLOW_NAME: &str = "default";
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Flow {
pub name: String,
pub stages: Vec<Stage>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Stage {
pub name: String,
pub action: Actor,
pub result_check: Check,
pub fail_action: FailAction,
#[serde(default, skip_serializing_if = "is_false")]
pub ff_only: bool,
}
fn is_false(value: &bool) -> bool {
!*value
}
pub const MAX_RETURN_ATTEMPTS: u32 = 3;
pub const MAX_FLOW_EXECUTIONS: u64 = 32;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum Actor {
Agent,
Exec { cmd: Vec<String> },
Builtin(Builtin),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum Builtin {
Merge,
Commits,
Sync,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum Check {
None,
Reported,
Actor(Actor),
Panel(Panel),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum FailAction {
Halt,
Continue,
ReturnTo { stage: String, attempts: u32 },
}
pub(crate) fn built_in_default() -> Flow {
let stages = vec![
Stage {
name: "build".into(),
action: Actor::Agent,
result_check: Check::Actor(Actor::Builtin(Builtin::Commits)),
fail_action: FailAction::Halt,
ff_only: false,
},
Stage {
name: "merge".into(),
action: Actor::Builtin(Builtin::Merge),
result_check: Check::None,
fail_action: FailAction::Halt,
ff_only: false,
},
];
Flow {
name: DEFAULT_FLOW_NAME.into(),
stages,
}
}