use crate::io::ToolCallDecision;
use crate::storage::RunOrigin;
use crate::thread::Message;
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RunRequest {
pub agent_id: String,
pub thread_id: Option<String>,
pub run_id: Option<String>,
pub parent_run_id: Option<String>,
pub parent_thread_id: Option<String>,
pub resource_id: Option<String>,
#[serde(default)]
pub origin: RunOrigin,
pub state: Option<Value>,
pub messages: Vec<Message>,
#[serde(default)]
pub initial_decisions: Vec<ToolCallDecision>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub source_mailbox_entry_id: Option<String>,
}
#[derive(Debug, Clone)]
pub enum RuntimeInput {
Run(RunRequest),
Decision(ToolCallDecision),
Cancel,
}