Files

137 lines
5.7 KiB
TOML

[package]
name = "hanzo-desktop"
version = "0.0.0"
description = "A first class Desktop application to interact with Hanzo Node"
authors = ["[email protected]"]
license = ""
repository = ""
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[build-dependencies]
tauri-build = { version = "2.6", features = [] }
[dependencies]
tauri = { version = "2.11", features = [ "macos-private-api", "tray-icon", "image-png", "devtools"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
# fix this dependency later on
reqwest = { version = "0.11", features = ["json", "stream"] }
lazy_static = "1.4.0"
tokio = { version = "1.36.0", features = ["macros", "rt-multi-thread", "rt", "net", "sync", "io-util"] }
chrono = "0.4.38"
futures-util = "0.3"
regex = "1.10.4"
once_cell = "1.19.0"
wgpu = "0.20.0"
sysinfo = "0.30.12"
ed25519-dalek = { version = "2.1.1", features = ["rand_core"] }
blake3 = "1.5.1"
# Phase-2 on-chain claim signer (mining/claim.rs) — lean secp256k1 stack (not
# alloy/ethers): BIP-39 mnemonic → BIP-44 (m/44'/60'/0'/0/0) → k256 ECDSA, with
# EIP-1559 RLP via `rlp` and keccak via `tiny-keccak`. Derives the SAME address
# as the frontend ethers wallet, so the mining wallet == the user's wallet.
coins-bip39 = { version = "0.8.7", default-features = false, features = ["english"] }
k256 = "0.13"
rlp = "0.5"
tiny-keccak = { version = "2.0", features = ["keccak"] }
opener = "0.7.2"
hex = "0.4.3"
base64 = "0.22.1"
time = "^0.3.36"
listeners = "0.2"
log = "0.4"
anyhow = "1.0.89"
uuid = { version = "1.10.0", features = ["v4"] }
kill_tree = { version = "0.2", features = ["tokio"] }
semver = "1.0"
sha2 = "0.10"
rand = "0.8"
keyring = "3.6"
# hanzo-machined client (UNIX-socket HTTP/JSON)
hyper = { version = "1.4", features = ["client", "http1"] }
http-body-util = "0.1"
bytes = "1"
thiserror = "1.0"
dirs = "6.0"
# Shared AI-chain mining crate (canonical hanzo core), pinned to latest.
# Same crate Zoo & Lux use so all three mine off the same network protocol.
hanzo-mining = "1.1.21"
tauri-plugin-global-shortcut = "2.3"
tauri-plugin-shell = "2.3"
tauri-plugin-single-instance = { version = "2.4", features = ["deep-link"] }
tauri-plugin-updater = "2.10"
tauri-plugin-dialog = "2.7"
tauri-plugin-fs = "2.5"
tauri-plugin-os = "2.3"
tauri-plugin-process = "2.3"
tauri-plugin-log = "2.8"
tauri-plugin-deep-link = "2.4"
tauri-plugin-opener = "2.5"
tauri-plugin-notification = "2.3"
tauri-plugin-http = "2.5"
# Phase 1 AI mining — native-Rust precompile (`mining/precompile.rs`), a pure
# port of lux/precompile/ai/ai_mining.go. No Go FFI / libluxprecompile shared
# library: the crypto is FIPS 204 ML-DSA (`fips204`) + BLAKE3 (`blake3`), so
# hanzo mines with no Go build chain and is identical on every platform.
fips204 = "0.4"
fix-path-env = { git = "https://github.com/tauri-apps/fix-path-env-rs" }
# --- Native Hanzo Engine (embedded, in-process) -----------------------------
# In-process LLM inference via the Hanzo Engine fork at ~/work/hanzo/engine
# (../../../../engine relative to this manifest). The engine workspace was
# rebranded mistralrs-* -> hanzo-*: `hanzo` is the high-level SDK, `hanzo-engine`
# is the core. Optional and OFF by default so the standard build stays light and
# does not require the engine repo checked out as a sibling. Enable with the
# `native-engine` feature plus a backend, e.g.
# cargo build --release --features "native-engine metal" (Apple Silicon)
# cargo build --release --features "native-engine cuda" (NVIDIA)
hanzo = { path = "../../../../engine/hanzo", optional = true }
hanzo-engine = { path = "../../../../engine/hanzo-engine", optional = true }
# The canonical server: the SAME crate `hanzo serve` builds on. The desktop's
# embedded engine reuses its `HanzoForServerBuilder` (state) +
# `HanzoServerRouterBuilder` (axum Router) instead of a hand-rolled server, so
# the node serves /v1/chat/completions, /v1/responses and /v1/messages
# identically. `default-features = false` drops the bundled swagger-ui (the
# inference routes don't need it; the builder gates docs behind that feature).
hanzo-server-core = { path = "../../../../engine/hanzo-server-core", optional = true, default-features = false }
axum = { version = "0.8", optional = true }
# SIGTERM the managed GPU-fleet / studio children so they mark the machine
# offline (fleet) and shut down cleanly, instead of a hard SIGKILL that waits
# out the heartbeat window. Already in the dependency tree.
[target.'cfg(unix)'.dependencies]
libc = "0.2"
[dev-dependencies]
tempfile = "3"
[features]
default = ["machine"]
# this feature is used for production builds or when `devPath` points to the filesystem
# DO NOT REMOVE!!
custom-protocol = ["tauri/custom-protocol"]
# hanzo-machined integration (UNIX-socket HTTP/JSON client + Tauri commands).
# Brand-specific configs (zoo, liquidity) can opt out by disabling default-features.
machine = []
# Embed the native Hanzo Engine for in-process inference. This runs the canonical
# `hanzo-server-core` server (all protocols: chat/responses/messages) on
# 127.0.0.1:36900 plus a thin /v1/engine/* management surface and Tauri IPC
# commands. Pair with a backend feature.
native-engine = ["dep:hanzo", "dep:hanzo-engine", "dep:hanzo-server-core", "dep:axum"]
# GPU/CPU backends forwarded to the engine AND the server crate so their shared
# `hanzo-engine` resolves to one feature set. Weak deps (`pkg?/feat`) so selecting
# a backend never force-enables the engine unless `native-engine` is also on.
metal = ["hanzo?/metal", "hanzo-engine?/metal", "hanzo-server-core?/metal"]
cuda = ["hanzo?/cuda", "hanzo-engine?/cuda", "hanzo-server-core?/cuda"]
accelerate = ["hanzo-engine?/accelerate", "hanzo-server-core?/accelerate"]
flash-attn = ["hanzo?/flash-attn", "hanzo-server-core?/flash-attn"]