use crate::types::{AgentMessage, AssistantMessage, LlmMessage, ToolResultMessage};
pub type ConvertToLlmFn = dyn Fn(&AgentMessage) -> Option<LlmMessage> + Send + Sync;
pub struct LoopState {
pub context_messages: Vec<AgentMessage>,
pub pending_messages: Vec<AgentMessage>,
pub initial_new_messages_len: usize,
pub overflow_signal: bool,
pub overflow_recovery_attempted: bool,
pub turn_index: usize,
pub accumulated_usage: crate::types::Usage,
pub accumulated_cost: crate::types::Cost,
pub last_assistant_message: Option<AssistantMessage>,
pub last_tool_results: Vec<ToolResultMessage>,
pub transfer_chain: crate::transfer::TransferChain,
}
pub enum TurnOutcome {
ContinueInner,
BreakInner,
Return,
}
pub struct ToolCallInfo {
pub id: String,
pub name: String,
pub arguments: serde_json::Value,
pub is_incomplete: bool,
}
#[allow(clippy::large_enum_variant)]
pub enum StreamResult {
Message(AssistantMessage),
ContextOverflow,
Aborted,
ChannelClosed,
}
pub enum ToolExecOutcome {
Completed {
results: Vec<ToolResultMessage>,
tool_metrics: Vec<crate::metrics::ToolExecMetrics>,
transfer_signal: Option<crate::transfer::TransferSignal>,
injected_messages: Vec<AgentMessage>,
},
SteeringInterrupt {
completed: Vec<ToolResultMessage>,
cancelled: Vec<ToolResultMessage>,
steering_messages: Vec<AgentMessage>,
tool_metrics: Vec<crate::metrics::ToolExecMetrics>,
injected_messages: Vec<AgentMessage>,
},
Aborted {
results: Vec<ToolResultMessage>,
tool_metrics: Vec<crate::metrics::ToolExecMetrics>,
injected_messages: Vec<AgentMessage>,
},
ChannelClosed,
}