use crate::channels::session_backend::SessionBackend;
use crate::config::DelegateAgentConfig;
use crate::config::workspace::WorkspaceManager;
use crate::memory::Memory;
use crate::providers::ProviderRuntimeOptions;
use crate::tools::Tool;
use crate::tools::ask_user::ChannelMapHandle;
use std::collections::HashMap;
use std::sync::Arc;
use tokio::sync::RwLock as TokioRwLock;
#[derive(Default, Clone)]
pub struct RuntimeHandles {
pub workspace_manager: Option<Arc<TokioRwLock<WorkspaceManager>>>,
pub channel_map: Option<ChannelMapHandle>,
pub reaction_channels: Option<ChannelMapHandle>,
pub ask_user_channels: Option<ChannelMapHandle>,
pub escalate_channels: Option<ChannelMapHandle>,
pub discord_memory: Option<Arc<dyn Memory>>,
pub session_store: Option<Arc<dyn SessionBackend>>,
pub agent_config: Option<Arc<HashMap<String, DelegateAgentConfig>>>,
pub provider_runtime_options: Option<Arc<ProviderRuntimeOptions>>,
pub fallback_api_key: Option<Arc<str>>,
pub pre_built_tools: Option<Vec<Arc<dyn Tool>>>,
}
impl RuntimeHandles {
#[must_use]
pub fn empty() -> Self {
Self::default()
}
}