pub mod apple_speech;
pub mod autoresearch;
pub mod calendar;
pub mod capture;
pub mod config;
pub mod context_store;
pub mod daily_notes;
pub mod desktop_context;
pub mod desktop_control;
pub mod device_monitor;
pub mod diarize;
pub mod dictation_memory;
pub mod error;
pub mod events;
pub mod graph;
pub mod health;
pub mod jobs;
pub mod knowledge;
pub mod knowledge_extract;
pub mod logging;
pub mod macos_permissions;
pub mod markdown;
pub mod notes;
pub mod overlays;
pub mod palette;
pub mod parakeet;
pub mod parakeet_sidecar;
pub(crate) mod person_identity;
pub mod pid;
pub mod pipeline;
pub mod retention;
pub(crate) mod resample;
pub mod screen;
pub mod search;
pub mod search_index;
pub mod summarize;
pub mod system_audio_backend;
pub mod template;
pub mod transcribe;
pub mod transcription_coordinator;
pub mod vault;
pub mod vocabulary;
pub mod voice;
pub mod watch;
#[cfg(feature = "streaming")]
pub mod streaming;
#[cfg(feature = "streaming")]
pub mod vad;
#[cfg(feature = "streaming")]
pub mod silero_smoothing;
#[cfg(feature = "vad-ort")]
pub mod silero_vad;
#[cfg(all(feature = "streaming", feature = "whisper"))]
pub mod streaming_whisper;
#[cfg(all(feature = "streaming", feature = "whisper"))]
pub mod dictation;
#[cfg(all(feature = "streaming", feature = "whisper"))]
pub mod live_transcript;
#[cfg(target_os = "macos")]
pub mod hotkey_macos;
pub use config::Config;
pub use error::{MinutesError, Result};
pub use markdown::{ContentType, WriteResult};
pub use pid::CaptureMode;
pub use pipeline::process;
pub use template::{Template, TemplateResolver, TemplateSource, DEFAULT_TEMPLATE_SLUG};
#[cfg(feature = "streaming")]
pub use streaming::{AudioChunk, AudioStream};
#[cfg(feature = "streaming")]
pub use vad::{Vad, VadEngine, VadResult};
pub fn install_whisper_logging_hooks() {
#[cfg(feature = "whisper")]
whisper_rs::install_logging_hooks();
}
#[cfg(test)]
pub(crate) fn test_home_env_lock() -> std::sync::MutexGuard<'static, ()> {
use std::sync::{Mutex, OnceLock};
static LOCK: OnceLock<Mutex<()>> = OnceLock::new();
LOCK.get_or_init(|| Mutex::new(()))
.lock()
.unwrap_or_else(|poisoned| poisoned.into_inner())
}