pub mod adapter;
pub mod prior_agent;
use serde::{Deserialize, Serialize};
use uuid::Uuid;
pub use prior_agent::PlanningPriorAgent;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LearningEpisode {
pub id: Uuid,
pub intent_id: Uuid,
pub plan_id: Uuid,
pub predicted_outcome: String,
pub actual_outcome: Option<String>,
pub run_status: Option<String>,
pub prediction_error: Option<PredictionError>,
pub adversarial_signals: Vec<AdversarialContext>,
pub lessons: Vec<Lesson>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PredictionError {
pub magnitude: f64,
pub dimensions: Vec<ErrorDimension>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ErrorDimension {
pub name: String,
pub predicted: f64,
pub actual: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Lesson {
pub insight: String,
pub context: String,
pub confidence: f64,
pub planning_adjustment: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PriorCalibration {
pub assumption_type: String,
pub context: String,
pub prior_confidence: f64,
pub posterior_confidence: f64,
pub evidence_count: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AdversarialContext {
pub kind: String,
pub failed_assumption: String,
pub revision_summary: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LearningSignal {
pub kind: SignalKind,
pub weight: f32,
pub note: String,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum SignalKind {
OutcomeMatchedExpectation,
OutcomeBeatExpectation,
OutcomeMissedExpectation,
AdversarialBlocker,
AdversarialWarning,
}