use std::sync::Arc;
use tokio::sync::{Mutex as AsyncMutex, mpsc};
use crate::lsp::LspManager;
use crate::mcp::McpPool;
use crate::tools::approval_cache::ApprovalCache;
use crate::tools::large_output_router::WorkshopVariables;
use crate::tools::shell::SharedShellManager;
use crate::tools::subagent::{SharedSubAgentManager, SubAgentCompletion};
use crate::long_horizon::LongHorizonSessionState;
use super::types::EngineConfigExt;
pub struct EngineRuntimeExt {
pub config_ext: EngineConfigExt,
pub long_horizon_state: LongHorizonSessionState,
pub turn_app_mode: crate::agent_surface::AppMode,
pub turn_lht_mode: Option<zagens_core::long_horizon::LhtMode>,
pub lsp_manager: Arc<LspManager>,
pub shell_manager: SharedShellManager,
pub workshop_vars: Option<Arc<AsyncMutex<WorkshopVariables>>>,
pub subagent_manager: SharedSubAgentManager,
pub mcp_pool: Option<Arc<AsyncMutex<McpPool>>>,
pub approval_cache: ApprovalCache,
pub tx_subagent_completion: mpsc::UnboundedSender<SubAgentCompletion>,
pub rx_subagent_completion: Arc<AsyncMutex<mpsc::UnboundedReceiver<SubAgentCompletion>>>,
pub sandbox_init_warning: Option<String>,
}