1use crate::context::compact::{CompactConfig, InvokedSkillsMap};
2use crate::infra::hook::HookManager;
3use crate::storage::{ChatMessage, ModelProvider};
4use crate::tools::background::BackgroundManager;
5use crate::tools::definition::ToolRegistry;
6use crate::tools::derived_shared::SubAgentMetrics;
7use crate::tools::todo::TodoManager;
8use std::sync::{Arc, Mutex};
9use tokio_util::sync::CancellationToken;
10
11#[derive(Debug)]
13pub struct AgentLoopConfig {
14 pub provider: ModelProvider,
16 pub max_llm_rounds: usize,
18 pub compact_config: CompactConfig,
20 pub hook_manager: HookManager,
22 pub disabled_hooks: Vec<String>,
24 pub cancel_token: CancellationToken,
26}
27
28#[derive(Debug)]
30pub struct AgentLoopSharedState {
31 pub streaming_content: Arc<Mutex<String>>,
33 pub streaming_reasoning_content: Arc<Mutex<String>>,
35 pub pending_user_messages: Arc<Mutex<Vec<ChatMessage>>>,
37 #[allow(dead_code)]
39 pub background_manager: Arc<BackgroundManager>,
40 pub todo_manager: Arc<TodoManager>,
42 pub display_messages: Arc<Mutex<Vec<ChatMessage>>>,
44 pub context_messages: Arc<Mutex<Vec<ChatMessage>>>,
46 pub estimated_context_tokens: Arc<Mutex<usize>>,
48 pub invoked_skills: InvokedSkillsMap,
50 pub session_id: String,
52 pub derived_system_prompt: Arc<Mutex<Option<String>>>,
54 pub tool_registry: Arc<ToolRegistry>,
56 pub disabled_tools: Vec<String>,
58 pub deferred_tools: Arc<Mutex<Vec<String>>>,
60 #[allow(dead_code)]
62 pub session_loaded_deferred: Arc<Mutex<Vec<String>>>,
63 pub tools_enabled: bool,
65 pub sub_agent_metrics: Arc<Mutex<SubAgentMetrics>>,
68}