mirror of
https://github.com/block/buzz.git
synced 2026-11-13 12:51:34 +00:00
The mesh-llm feature previously statically linked the whole mesh node (~52 MB binary weight, +17.5 MB compressed) which kept it off by default behind 'just mesh=1' builds. Replace the in-process embedding with the pattern Buzz already uses for every other capability binary: - mesh_llm/node_install.rs: first use downloads the official pinned mesh-llm release (~30 MB), verifies the published sha256, extracts to a versioned cache dir, and emits progress app events for the UI. - mesh_llm/node_process.rs: spawns 'mesh-llm serve/client --headless' as a supervised child process (own process group, SIGTERM-then-kill teardown) and drives it over its local management API — the same HTTP surface the SDK's embedded handle used internally. - DesktopMeshRuntime keeps its exact API; dial_endpoint_addr respawns with the extra --join token (the standalone node has no join-at- runtime endpoint yet; upstream candidate: POST /api/join). - mesh_node_install_status command so the UI can say 'first start will download the mesh runtime' up front. - mesh-llm-sdk/host-runtime git deps removed entirely; the mesh-llm cargo feature is now a few KB of client code (57.9 MB binary with the feature on vs 57.3 without — was 109.7 MB). Admission/coordination is unchanged and mesh-native: nostr discovery, invite-token admission, iroh transport — private by default (no --publish), same flags as the embedded config used. Ignored e2e test covers the full first-use flow (download, checksum, cache hit, spawn, status + attestation verification, /v1/models, stop): cargo test --features mesh-llm -- --ignored mesh_node_e2e
115 lines
4.2 KiB
TOML
115 lines
4.2 KiB
TOML
[workspace]
|
|
|
|
[package]
|
|
name = "buzz-desktop"
|
|
version = "0.3.45"
|
|
description = "Buzz desktop app"
|
|
authors = ["you"]
|
|
edition = "2021"
|
|
|
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
|
|
|
[lib]
|
|
# The `_lib` suffix may seem redundant but it is necessary
|
|
# to make the lib name unique and wouldn't conflict with the bin name.
|
|
# This seems to be only an issue on Windows, see https://github.com/rust-lang/cargo/issues/8519
|
|
name = "buzz_lib"
|
|
crate-type = ["staticlib", "cdylib", "rlib"]
|
|
|
|
[features]
|
|
default = ["system-keyring"]
|
|
# Mesh compute UI + node management. The mesh-llm node itself is NOT
|
|
# compiled in (that cost ~52 MB) — it is downloaded on first use as a
|
|
# checksum-verified release binary and run as a supervised child process
|
|
# (see mesh_llm/node_install.rs). This feature is therefore only a few KB
|
|
# of client code and stays cheap to enable everywhere.
|
|
mesh-llm = []
|
|
# OS keyring backing for desktop secret storage (nsec private keys). When
|
|
# disabled, secrets fall back to 0o600 files. On by default for real builds.
|
|
system-keyring = ["dep:keyring"]
|
|
|
|
[build-dependencies]
|
|
base64 = "0.22"
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
tauri-build = { version = "2", features = [] }
|
|
|
|
[target.'cfg(unix)'.dependencies]
|
|
libc = "0.2"
|
|
ctrlc = { version = "3", features = ["termination"] }
|
|
|
|
[target.'cfg(target_os = "linux")'.dependencies]
|
|
keyring = { version = "3.6.3", default-features = false, features = ["sync-secret-service", "vendored"], optional = true }
|
|
# Used directly (alongside tauri-plugin-notification) so we can hold the posting
|
|
# D-Bus connection open. GNOME 46+ dismisses a notification the moment that
|
|
# connection is dropped, which the plugin does immediately. Default features
|
|
# keep the pure-Rust zbus backend, matching the plugin (no libdbus needed).
|
|
notify-rust = "4"
|
|
|
|
[target.'cfg(target_os = "macos")'.dependencies]
|
|
objc2-app-kit = { version = "0.3.2", default-features = false, features = ["NSHapticFeedback"] }
|
|
keyring = { version = "3.6.3", default-features = false, features = ["apple-native", "vendored"], optional = true }
|
|
security-framework = { version = "3.7.0", features = ["OSX_10_15"] }
|
|
|
|
[target.'cfg(windows)'.dependencies]
|
|
windows-sys = { version = "0.61", features = ["Win32_Security", "Win32_Storage_FileSystem", "Win32_System_JobObjects", "Win32_System_Threading", "Win32_Foundation"] }
|
|
keyring = { version = "3.6.3", default-features = false, features = ["windows-native", "vendored"], optional = true }
|
|
|
|
[dependencies]
|
|
atomic-write-file = "0.3"
|
|
anyhow = "1"
|
|
dirs = "6"
|
|
tauri = { version = "2", features = [] }
|
|
tauri-plugin-deep-link = "2"
|
|
tauri-plugin-opener = "2"
|
|
tauri-plugin-single-instance = { version = "2", features = ["deep-link"] }
|
|
tauri-plugin-window-state = "2"
|
|
tauri-plugin-websocket = "2"
|
|
tauri-plugin-dialog = "2"
|
|
tauri-plugin-updater = "2"
|
|
tauri-plugin-process = "2"
|
|
infer = "0.19"
|
|
hex = "0.4"
|
|
tokio = { version = "1", features = ["fs", "sync", "rt", "macros", "time", "process"] }
|
|
tokio-tungstenite = { version = "0.29", features = ["rustls-tls-webpki-roots"] }
|
|
tokio-util = { version = "0.7", features = ["rt"] }
|
|
bytes = "1"
|
|
futures-util = "0.3"
|
|
opus = "0.3"
|
|
neteq = { version = "0.8", default-features = false }
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
serde_yaml = "0.9"
|
|
toml = "0.8"
|
|
nostr = { version = "0.44", features = ["nip44"] }
|
|
zeroize = "1"
|
|
reqwest = { version = "0.13", features = ["json", "query", "stream"] }
|
|
url = "2"
|
|
buzz_core_pkg = { package = "buzz-core", path = "../../crates/buzz-core" }
|
|
buzz_persona_pkg = { package = "buzz-persona", path = "../../crates/buzz-persona" }
|
|
buzz_sdk_pkg = { package = "buzz-sdk", path = "../../crates/buzz-sdk" }
|
|
buzz_agent_pkg = { package = "buzz-agent", path = "../../crates/buzz-agent" }
|
|
base64 = "0.22"
|
|
sha2 = "0.11"
|
|
tar = "0.4"
|
|
flate2 = "1"
|
|
bzip2 = "0.6"
|
|
chrono = { version = "0.4", features = ["serde"] }
|
|
tauri-plugin-global-shortcut = "2"
|
|
tauri-plugin-notification = "2.3.3"
|
|
uuid = { version = "1", features = ["v4"] }
|
|
png = "0.18"
|
|
zip = "8"
|
|
sherpa-onnx = "1.12"
|
|
regex = "1"
|
|
rusqlite = { version = "0.37", features = ["bundled"] }
|
|
axum = "0.8"
|
|
rodio = "0.22"
|
|
earshot = "1.0"
|
|
rubato = "3.0"
|
|
audioadapter-buffers = "3.0"
|
|
tempfile = "3"
|
|
strip-ansi-escapes = "0.2"
|
|
|
|
[dev-dependencies]
|