magi-code 0.96.1

Repository-aware CLI coding agent for terminal work
Documentation
use super::*;

#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct ChangesReadModel {
    pub(crate) turns: Vec<ChangeTurn>,
    pub(crate) diagnostics: Vec<String>,
}

#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct ChangeTurn {
    pub(crate) user_turn: u64,
    pub(crate) changes: Vec<ChangeEntry>,
}

#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct ChangeEntry {
    pub(crate) tool: SnapshotTool,
    pub(crate) relative_path: PathBuf,
    pub(crate) classification: ChangeClassification,
    pub(crate) rewindable: bool,
    pub(crate) unavailable_reason: Option<String>,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum ChangeClassification {
    Created,
    Modified,
    Deleted,
    NonRewindable,
}

#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct RestorePlan {
    pub(crate) session_id: String,
    pub(crate) target_turn: u64,
    pub(crate) latest_turn: Option<u64>,
    pub(crate) operations: Vec<RestoreOperation>,
    pub(crate) diagnostics: Vec<String>,
}

#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct RestoreOperation {
    pub(crate) relative_path: PathBuf,
    pub(crate) kind: RestoreOperationKind,
}

#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) enum RestoreOperationKind {
    Restore {
        pre: SnapshotBlobRef,
        expected_current: SnapshotBlobRef,
    },
    DeleteCreated {
        expected_current: SnapshotBlobRef,
    },
    ResurrectDeleted {
        pre: SnapshotBlobRef,
    },
    SkipConflict {
        reason: String,
    },
    SkipUnavailable {
        reason: String,
    },
}

impl RestoreOperationKind {
    pub(crate) fn label(&self) -> &'static str {
        match self {
            Self::Restore { .. } => "restore",
            Self::DeleteCreated { .. } => "delete-created",
            Self::ResurrectDeleted { .. } => "resurrect-deleted",
            Self::SkipConflict { .. } => "skip-conflict",
            Self::SkipUnavailable { .. } => "skip-unavailable",
        }
    }
}

#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct RewindExecution {
    pub(crate) results: Vec<RestoreOperationResult>,
}

#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct RestoreOperationResult {
    pub(crate) relative_path: PathBuf,
    pub(crate) status: RestoreStatus,
    pub(crate) reason: Option<String>,
}

#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)]
#[serde(rename_all = "snake_case")]
pub(crate) enum RestoreStatus {
    Restored,
    DeletedCreated,
    ResurrectedDeleted,
    SkipConflict,
    SkipUnavailable,
}