[package] name = "tsunagi-tray" version = "0.1.0" description = "Tray application to manage a running tsunagi agent." edition.workspace = true rust-version.workspace = true license.workspace = true repository.workspace = true [[bin]] name = "tsunagi-tray" path = "src/main.rs" [dependencies] # The agent control client and the report types: the GUI is a thin client over # the same local control interface the CLI uses, so it reuses these directly # and never re-implements the protocol. tsunagi-core = { path = "../tsunagi-core", version = "0.1.0" } # Native, lightweight GUI — no web engine. eframe re-exports egui. eframe = { version = "0.31", default-features = false, features = ["default_fonts", "glow", "wayland", "x11"] } # Cross-platform tray icon + menu (Windows tray, macOS menu bar, Linux SNI). tray-icon = "0.21" # Background worker that talks to the agent off the UI thread. tokio = { version = "1.53", features = ["rt", "rt-multi-thread", "sync", "time", "macros"] } tracing.workspace = true tracing-subscriber.workspace = true egui-phosphor = "0.9" # Linux only: tray-icon (already GTK-based there) needs the app to initialise # GTK and run its main loop. [target.'cfg(target_os = "linux")'.dependencies] gtk = "0.18" # Windows and macOS: the tray process has no GUI toolkit, only an event loop to # serve the icon (and, on macOS, the Accessory activation policy that keeps it # out of the Dock). Pinned to eframe's winit so the types unify. [target.'cfg(any(windows, target_os = "macos"))'.dependencies] winit = "0.30" [lints] workspace = true