use super::lanes::{PriorReviewContext, ReviewTier, UserMessage};
use super::verdict::{ReviewPassEvidence, ReviewVerdict};
use crate::relay::AnalyzeDeltaRepository;
use std::collections::BTreeMap;
use std::path::PathBuf;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ReviewRequest {
CaptureDelta {
baselines: BTreeMap<PathBuf, String>,
},
AnalyzeDelta {
repositories: Vec<AnalyzeDeltaRepository>,
},
StartRole { role: String, fresh: bool },
PromptRole {
role: String,
command_id: String,
prompt: String,
},
PromptPrimary { command_id: String, prompt: String },
PauseRole { role: String },
AdvanceBaseline {
trees: BTreeMap<PathBuf, String>,
reviewed_through_ordinal: u64,
},
RecordPriorReview { prior: PriorReviewContext },
ClearPriorReview,
Close,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum RoleState {
Pending,
Running,
Clean,
Findings,
Failed,
}
impl RoleState {
#[must_use]
pub const fn label(self) -> &'static str {
match self {
Self::Pending => "pending",
Self::Running => "running",
Self::Clean => "done",
Self::Findings => "findings",
Self::Failed => "failed",
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[serde(deny_unknown_fields)]
pub struct RoleStatus {
pub role: String,
pub label: String,
pub state: RoleState,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum Resolution {
Forwarded,
Dismissed,
Cancelled,
NothingToReview,
CoverageStarted,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
#[serde(tag = "phase", rename_all = "snake_case")]
pub enum TurnReviewPhase {
CapturingDelta,
LaunchingReviewer,
Running {
roles: Vec<RoleStatus>,
},
Verdict(ReviewVerdict),
Forwarding {
synthesis: String,
evidence: ReviewPassEvidence,
command_id: String,
error: Option<String>,
},
Resolved(Resolution),
}
pub const REVIEWER_ROLE: &str = "reviewer";
pub const VALIDATOR_ROLE: &str = "validator";
pub const SUPERVISOR_ROLE: &str = "supervisor";
pub const INTENT_ROLE: &str = "intent";
#[derive(Debug, Clone)]
pub struct TurnReviewSeed {
pub tier: ReviewTier,
pub task: String,
pub user_messages: Vec<UserMessage>,
pub initial_result: String,
pub trajectory: String,
pub baselines: BTreeMap<PathBuf, String>,
pub through_ordinal: u64,
pub prior_review: Option<PriorReviewContext>,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[serde(deny_unknown_fields)]
pub struct PendingForward {
pub synthesis: String,
#[serde(default)]
pub evidence: ReviewPassEvidence,
pub command_id: String,
pub trees: BTreeMap<PathBuf, String>,
pub reviewed_through_ordinal: u64,
}