[package] name = "magnotia" version = "0.1.0" description = "Magnotia — Think out loud" authors = ["CORBEL Ltd"] edition = "2021" [lib] name = "magnotia_lib" crate-type = ["staticlib", "cdylib", "rlib"] [features] # Default build includes the Whisper backend. Disabling this feature # also drops it from magnotia-transcription (see Cargo.toml in that crate) # so a --no-default-features workspace build does not pull whisper-rs-sys. # load_model_from_disk returns a runtime error for Engine::Whisper when # this feature is off; Parakeet continues to work. default = ["whisper"] whisper = ["magnotia-transcription/whisper"] [build-dependencies] tauri-build = { version = "2", features = [] } # Used by the CSP regression guard in build.rs to parse tauri.conf.json # and pull out app.security.csp rather than substring-matching the raw # file. Keeps the guard robust against unrelated JSON values that # happen to mention a localhost URL. serde_json = "1" [dependencies] # Workspace crates magnotia-core = { path = "../crates/core" } magnotia-audio = { path = "../crates/audio" } magnotia-transcription = { path = "../crates/transcription", default-features = false } magnotia-ai-formatting = { path = "../crates/ai-formatting" } magnotia-storage = { path = "../crates/storage" } magnotia-cloud-providers = { path = "../crates/cloud-providers" } magnotia-hotkey = { path = "../crates/hotkey" } magnotia-llm = { path = "../crates/llm" } # Tauri. The `tray-icon` feature, the global-shortcut/window-state/ # autostart plugins are desktop-only — gated below under # cfg(not(target_os = "android")). The dialog, opener, and notification # plugins all support Android natively so live in the unconditional list. tauri = { version = "2" } tauri-plugin-opener = "2" tauri-plugin-dialog = "2" # Phase 6 nudges: OS-native notifications via the frontend-owned nudge # bus. Permission-request flow happens on the JS side before the first # deliver_nudge call; Windows only delivers for installed apps. tauri-plugin-notification = "2" # Serialisation serde = { version = "1", features = ["derive"] } serde_json = "1" tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] } # Async runtime (spawn_blocking for inference) tokio = { version = "1", features = ["rt", "sync"] } arboard = "3.6.1" # SqlitePool is named directly from src-tauri/src/lib.rs (the AppState # stores it). Must be unconditional, not Linux-only — naming a type from # a transitive dep requires the dep be listed here too. # See crates/storage/Cargo.toml — default-features = false drops macros / # migrate / any / json which this crate doesn't use. Only names SqlitePool. sqlx = { version = "0.8", default-features = false, features = ["runtime-tokio", "sqlite"] } uuid = { version = "1", features = ["v4"] } [dev-dependencies] # Phase 9 fs::write_text_file_cmd tests use a temp directory so we don't # pollute the workspace. tempfile = "3" # Desktop-only Tauri features and plugins. Each item below either fails # to compile against the Android NDK or is a structural no-op on a # single-window mobile app: # - tray-icon: no system tray on mobile. # - global-shortcut: mobile has no global hotkey API; the foreground # notification with a record button is the Android replacement. # - window-state: single-window, fullscreen, no per-window persistence. # - autostart: mobile apps don't auto-start in the desktop sense; if # we ever want a "boot completed" handler that's a separate Android # intent receiver, not this plugin. [target.'cfg(not(target_os = "android"))'.dependencies] tauri = { version = "2", features = ["tray-icon"] } tauri-plugin-global-shortcut = "2" tauri-plugin-window-state = "2" # Phase 5 rituals: register Magnotia as a login-time autostart entry. # Handles platform differences (.desktop file on Linux, LaunchAgents plist # on macOS, registry Run key on Windows) behind a single API. tauri-plugin-autostart = "2" [target.'cfg(target_os = "linux")'.dependencies] webkit2gtk = "2.0" # Needed for setting the preview overlay's WindowTypeHint to Utility via # the Tauri gtk_window() escape hatch. Versions track what webkit2gtk 2.0 # transitively depends on (GTK 3). gtk = "0.18" gdk = "0.18" [target.'cfg(target_os = "macos")'.dependencies] objc2 = "0.6.4" objc2-foundation = { version = "0.3.2", default-features = false, features = ["std", "NSString", "NSProcessInfo"] } [target.'cfg(target_os = "windows")'.dependencies] # Phase 4 TTS: PowerShell -EncodedCommand expects UTF-16-LE base64. # Windows-only because the other platforms' TTS paths pass text via argv. base64 = "0.22"