use serde::{Deserialize, Serialize};
use starweaver_context::{AgentCheckpoint, ResumableState};
use starweaver_stream::AgentStreamRecord;
use crate::{
approval::{ApprovalRecord, DeferredToolRecord},
records::{EnvironmentStateRef, RunRecord, SessionRecord, StreamCursorRef},
};
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct SessionResumeSnapshot {
pub session: SessionRecord,
pub run: RunRecord,
pub state: ResumableState,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub environment_state: Option<EnvironmentStateRef>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub latest_checkpoint: Option<AgentCheckpoint>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub stream_records: Vec<AgentStreamRecord>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub approvals: Vec<ApprovalRecord>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub deferred_tools: Vec<DeferredToolRecord>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub stream_cursors: Vec<StreamCursorRef>,
}