mermaid_cli/tui/state/
operation.rs1use std::collections::VecDeque;
6use std::sync::{Arc, Mutex};
7
8use crate::agents::SubagentProgress;
9use crate::utils::MutexExt;
10
11pub struct OperationState {
13 pub accumulated_tool_calls: Vec<crate::models::ToolCall>,
15 pub queued_messages: VecDeque<String>,
17 pub active_subagents: Option<Arc<Mutex<Vec<SubagentProgress>>>>,
19}
20
21impl OperationState {
22 pub fn new() -> Self {
24 Self {
25 accumulated_tool_calls: Vec::new(),
26 queued_messages: VecDeque::new(),
27 active_subagents: None,
28 }
29 }
30
31 pub fn queue_message(&mut self, message: String) {
33 self.queued_messages.push_back(message);
34 }
35
36 pub fn take_queued_message(&mut self) -> Option<String> {
38 self.queued_messages.pop_front()
39 }
40
41 pub fn has_queued_message(&self) -> bool {
43 !self.queued_messages.is_empty()
44 }
45
46 pub fn get_queued_messages(&self) -> &VecDeque<String> {
48 &self.queued_messages
49 }
50
51 pub fn queued_message_count(&self) -> usize {
53 self.queued_messages.len()
54 }
55
56 pub fn snapshot_subagent_progress(&self) -> Option<Vec<SubagentProgress>> {
59 self.active_subagents
60 .as_ref()
61 .map(|p| p.lock_mut_safe().clone())
62 }
63
64 pub fn clear_subagents(&mut self) {
66 self.active_subagents = None;
67 }
68}
69
70impl Default for OperationState {
71 fn default() -> Self {
72 Self::new()
73 }
74}