pub struct AgentSessionState {Show 27 fields
pub session_id: String,
pub conversation: Vec<Content>,
pub messages: Vec<Message>,
pub stats: SessionStats,
pub constraints: SessionConstraints,
pub outcome: TaskOutcome,
pub stop_reason: Option<String>,
pub total_cost_usd: Option<f64>,
pub is_completed: bool,
pub current_stage: Option<String>,
pub created_contexts: Vec<String>,
pub modified_files: Vec<String>,
pub executed_commands: Vec<String>,
pub warnings: Vec<String>,
pub last_file_path: Option<String>,
pub last_dir_path: Option<String>,
pub consecutive_tool_loops: usize,
pub tool_loop_limit_hit: bool,
pub last_processed_message_idx: usize,
pub previous_response_chains: HashMap<(String, String), ResponsesContinuationState>,
pub error_recovery: Arc<Mutex<ErrorRecoveryState>>,
pub consecutive_idle_turns: usize,
pub max_tool_loop_streak: usize,
pub turn_count: usize,
pub turn_total_ms: u128,
pub turn_max_ms: u128,
pub turn_durations_ms: Vec<u128>,
}Expand description
Manages the state of an active agent session, including conversation history, statistics, and turn-based constraints.
Fields§
§session_id: StringThe thread or session ID.
conversation: Vec<Content>Provider-specific conversation history (e.g., Gemini style).
messages: Vec<Message>Standardized conversation messages (OpenAI/Anthropic style).
stats: SessionStatsStatistics for the current session.
constraints: SessionConstraintsConstraints and limits for the session.
outcome: TaskOutcomeOutcome of the session if completed.
stop_reason: Option<String>Provider stop reason associated with the last model turn, when available.
total_cost_usd: Option<f64>Estimated total API cost in USD for the session, when available.
is_completed: boolWhether the session has completed.
current_stage: Option<String>Current reasoning stage.
created_contexts: Vec<String>§modified_files: Vec<String>§executed_commands: Vec<String>§warnings: Vec<String>§last_file_path: Option<String>§last_dir_path: Option<String>§consecutive_tool_loops: usize§tool_loop_limit_hit: bool§last_processed_message_idx: usize§previous_response_chains: HashMap<(String, String), ResponsesContinuationState>Responses-style continuation state keyed by normalized provider/model pairs.
error_recovery: Arc<Mutex<ErrorRecoveryState>>Agent-local recent error diagnostics for interrupted or repeated tool failures.
consecutive_idle_turns: usize§max_tool_loop_streak: usize§turn_count: usize§turn_total_ms: u128§turn_max_ms: u128§turn_durations_ms: Vec<u128>Implementations§
Source§impl AgentSessionState
impl AgentSessionState
pub fn new( session_id: String, max_turns: usize, max_tool_loops: usize, max_context_tokens: usize, ) -> Self
Sourcepub fn record_turn(&mut self, start: &Instant, recorded: &mut bool)
pub fn record_turn(&mut self, start: &Instant, recorded: &mut bool)
Record a completed turn.
pub fn finalize_outcome(&mut self, max_turns: usize)
pub fn register_tool_loop(&mut self) -> usize
pub fn reset_tool_loop_guard(&mut self)
pub fn previous_response_id_for( &self, provider: &str, model: &str, ) -> Option<String>
pub fn previous_response_chain_for( &self, provider: &str, model: &str, ) -> Option<&ResponsesContinuationState>
pub fn set_previous_response_chain( &mut self, provider: &str, model: &str, response_id: Option<&str>, messages: Vec<Message>, )
pub fn clear_previous_response_chain_for(&mut self, provider: &str, model: &str)
pub fn clear_previous_response_chain(&mut self)
pub fn mark_tool_loop_limit_hit(&mut self)
Sourcepub fn add_user_message(&mut self, text: String)
pub fn add_user_message(&mut self, text: String)
Add a user message to the history.
Sourcepub fn utilization(&self) -> f64
pub fn utilization(&self) -> f64
Check if context limits are approaching.
Sourcepub fn total_tokens(&self) -> usize
pub fn total_tokens(&self) -> usize
Calculate total estimated tokens in the conversation.
Sourcepub fn find_safe_split_point(&self, preferred_split_at: usize) -> usize
pub fn find_safe_split_point(&self, preferred_split_at: usize) -> usize
Find a safe split point for history trimming that doesn’t break tool call/output pairs.
pub fn into_results( self, summary: String, thread_events: Vec<ThreadEvent>, total_duration_ms: u128, ) -> TaskResults
Sourcepub fn push_tool_result(
&mut self,
call_id: String,
tool_name: &str,
result: &Value,
is_gemini: bool,
)
pub fn push_tool_result( &mut self, call_id: String, tool_name: &str, result: &Value, is_gemini: bool, )
Push a successful tool result to both conversation (for Gemini) and messages.
Accepts a &Value to avoid redundant serialize/deserialize cycles for
Gemini providers — the value is used directly in FunctionResponse
instead of being serialized to a string and then re-parsed.
Auto Trait Implementations§
impl !RefUnwindSafe for AgentSessionState
impl !UnwindSafe for AgentSessionState
impl Freeze for AgentSessionState
impl Send for AgentSessionState
impl Sync for AgentSessionState
impl Unpin for AgentSessionState
impl UnsafeUnpin for AgentSessionState
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more