use super::verdict::ReviewPassEvidence;
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ReviewTier {
#[default]
Quick,
Extended,
}
impl ReviewTier {
#[must_use]
pub const fn label(self) -> &'static str {
match self {
Self::Quick => "quick",
Self::Extended => "extended",
}
}
#[must_use]
pub fn parse(text: &str) -> Option<Self> {
match text.trim().to_ascii_lowercase().as_str() {
"quick" => Some(Self::Quick),
"extended" => Some(Self::Extended),
_ => None,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct UserMessage {
pub text: String,
}
impl UserMessage {
#[must_use]
pub fn prompt(text: impl Into<String>) -> Self {
Self { text: text.into() }
}
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub struct PriorReviewContext {
pub synthesis: String,
#[serde(default)]
pub evidence: ReviewPassEvidence,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ReviewSubagentRequest {
pub agent_type: String,
pub hypothesis: String,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[serde(deny_unknown_fields)]
pub struct LaneDispatch {
pub reviewers: Vec<ReviewSubagentRequest>,
}
#[derive(Debug, Clone, PartialEq, Eq, Default, serde::Serialize, serde::Deserialize)]
#[serde(deny_unknown_fields)]
pub struct LaneDispatchReply {
#[serde(default)]
pub started: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub error: Option<String>,
}