Files
buzz/desktop/src-tauri
Michael Neale c391a9af18 feat(mesh): download mesh-llm node on demand instead of compiling it in
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
2026-07-07 08:39:10 -07:00
..