pub struct LoopState {Show 24 fields
pub iteration: u32,
pub consecutive_failures: u32,
pub cumulative_cost: f64,
pub started_at: Instant,
pub last_hat: Option<HatId>,
pub consecutive_blocked: u32,
pub last_blocked_hat: Option<HatId>,
pub task_block_counts: HashMap<String, u32>,
pub abandoned_tasks: Vec<String>,
pub abandoned_task_redispatches: u32,
pub consecutive_malformed_events: u32,
pub completion_requested: bool,
pub hat_activation_counts: HashMap<HatId, u32>,
pub exhausted_hats: HashSet<HatId>,
pub last_checkin_at: Option<Instant>,
pub last_active_hat_ids: Vec<HatId>,
pub seen_topics: HashSet<String>,
pub last_emitted_signature: Option<EventSignature>,
pub consecutive_same_signature: u32,
pub cancellation_requested: bool,
pub peak_input_tokens: u64,
pub last_input_tokens: Option<u64>,
pub hat_peak_input_tokens: HashMap<HatId, u64>,
pub unacknowledged_guidance: Vec<String>,
}Expand description
Current state of the event loop.
Fields§
§iteration: u32Current iteration number (1-indexed).
consecutive_failures: u32Number of consecutive failures.
cumulative_cost: f64Cumulative cost in USD (if tracked).
started_at: InstantWhen the loop started.
last_hat: Option<HatId>The last hat that executed.
consecutive_blocked: u32Consecutive blocked events from the same hat.
last_blocked_hat: Option<HatId>Hat that emitted the last blocked event.
task_block_counts: HashMap<String, u32>Per-task block counts for task-level thrashing detection.
abandoned_tasks: Vec<String>Tasks that have been abandoned after 3+ blocks.
abandoned_task_redispatches: u32Count of times planner dispatched an already-abandoned task.
consecutive_malformed_events: u32Consecutive malformed JSONL lines encountered (for validation backpressure).
completion_requested: boolWhether a completion event has been observed in JSONL.
hat_activation_counts: HashMap<HatId, u32>Per-hat activation counts (used for max_activations).
exhausted_hats: HashSet<HatId>Hats for which <hat_id>.exhausted has been emitted.
last_checkin_at: Option<Instant>When the last Telegram check-in message was sent.
None means no check-in has been sent yet.
last_active_hat_ids: Vec<HatId>Hat IDs that were active in the last iteration.
Used to inject default_publishes when agent writes no events.
seen_topics: HashSet<String>Topics seen during the loop’s lifetime (for event chain validation).
last_emitted_signature: Option<EventSignature>The last event signature emitted (for stale loop detection).
consecutive_same_signature: u32Consecutive times the same event signature was emitted (for stale loop detection).
cancellation_requested: boolSet to true when a loop.cancel event is detected.
peak_input_tokens: u64Session-scoped peak context-token count across all iterations.
last_input_tokens: Option<u64>Last iteration’s context-token count (if any).
hat_peak_input_tokens: HashMap<HatId, u64>Per-hat session-scoped peak context-token count.
unacknowledged_guidance: Vec<String>Human guidance messages that must be acknowledged before completion.
Implementations§
Source§impl LoopState
impl LoopState
Sourcepub fn record_event(&mut self, event: &Event)
pub fn record_event(&mut self, event: &Event)
Record that an event has been seen during this loop run.
Also tracks consecutive same-signature emissions for stale loop detection.
Sourcepub fn record_iteration_tokens(&mut self, hat: &HatId, tokens: u64)
pub fn record_iteration_tokens(&mut self, hat: &HatId, tokens: u64)
Record this iteration’s context-token usage for the hat that ran it.
tokens is the iteration’s adapter-reported live context occupancy.
No-op when tokens == 0 (ACP / non-token backends suppressed).
Peaks are session-scoped — they never reset on iteration boundaries.
Sourcepub fn missing_required_events<'a>(
&self,
required: &'a [String],
) -> Vec<&'a String>
pub fn missing_required_events<'a>( &self, required: &'a [String], ) -> Vec<&'a String>
Check if all required topics have been seen.