pub mod state;
pub mod summary;
pub use state::{
ExecutionContext, ExecutionEnvironment, SessionState, SessionStatus, StepResult, WorkflowState,
WorkflowType,
};
pub use summary::SessionSummary;
use anyhow::Result;
use async_trait::async_trait;
use std::path::Path;
#[async_trait]
pub trait SessionManager: Send + Sync {
async fn start_session(&self, session_id: &str) -> Result<()>;
async fn update_session(&self, update: SessionUpdate) -> Result<()>;
async fn complete_session(&self) -> Result<SessionSummary>;
fn get_state(&self) -> Result<SessionState>;
async fn save_state(&self, path: &Path) -> Result<()>;
async fn load_state(&self, path: &Path) -> Result<()>;
async fn load_session(&self, session_id: &str) -> Result<SessionState>;
async fn save_checkpoint(&self, state: &SessionState) -> Result<()>;
async fn list_resumable(&self) -> Result<Vec<SessionInfo>>;
async fn get_last_interrupted(&self) -> Result<Option<String>>;
}
#[derive(Debug, Clone)]
pub struct SessionInfo {
pub session_id: String,
pub status: SessionStatus,
pub started_at: chrono::DateTime<chrono::Utc>,
pub workflow_path: std::path::PathBuf,
pub progress: String,
}
#[derive(Debug, Clone)]
pub enum SessionUpdate {
IncrementIteration,
AddFilesChanged(usize),
UpdateStatus(SessionStatus),
AddError(String),
StartWorkflow,
StartIteration(u32),
CompleteIteration,
RecordCommandTiming(String, std::time::Duration),
UpdateWorkflowState(state::WorkflowState),
MarkInterrupted,
SetWorkflowHash(String),
SetWorkflowType(state::WorkflowType),
UpdateExecutionContext(state::ExecutionContext),
}