//! Long-lived Core services shared by commands (composition in `bootstrap.rs`). use crate::core::availability::AvailabilityMonitor; use crate::core::biometrics::BiometricService; use crate::core::disks::service::DiskService; use crate::core::diagnostics::service::DiagnosticsService; use crate::core::files::service::RemoteFileService; use crate::core::files::transfers::TransferManager; use crate::core::hashing::service::LocalHashService; use crate::core::keys::KeyGeneratorService; use crate::core::system::virtual_memory::VirtualMemoryService; use crate::core::users::service::UserAdmin; use crate::core::lock::LockController; use crate::core::modules::service::ModuleService; use crate::core::net::https::HttpsClient; use crate::core::ssh::privileged::PrivilegedExecutor; use crate::core::ssh::session::SessionManager; use crate::core::ssh::windows_exec::WindowsExecutor; use crate::core::updates::service::UpdateService; use std::sync::Arc; pub struct Services { pub https: Arc, pub sessions: Arc, pub privileged: Arc, pub windows: Arc, pub modules: Arc, pub biometrics: Arc, pub diagnostics: Arc, pub updates: Arc, pub lock: LockController, pub keys: KeyGeneratorService, pub hashing: Arc, pub files: Arc, pub transfers: Arc, pub users: Arc, pub virtual_memory: Arc, pub disks: Arc, pub availability: Arc, } impl Services { /// Releases per-module state when a module window closes (tokens, edits, …). pub fn on_module_closed(&self, module_id: &str) { self.hashing.cleanup_module(module_id); // Transfers keep running while the module is closed (0.1.0 behaviour). self.files.cleanup_module(module_id); } }