feat(qbzd): scaffold headless daemon binary (Phase 0)

New workspace member crates/qbzd/ with:
- CLI interface (clap): port, bind, data-dir, config, token, log-level
- Config system (TOML): server, audio, cache, data, mpris, qconnect, mdns
- Resource detection (sysinfo): auto-size cache from available RAM
- DaemonAdapter: FrontendAdapter impl routing CoreEvents to broadcast channel
- DaemonCore: state container replacing Tauri's app.state
- Minimal HTTP server (Axum): /api/ping + /api/info
- Graceful shutdown on SIGTERM/SIGINT

Zero Tauri dependency. Desktop app unaffected.

cc
This commit is contained in:
vicrodh committed 2026-04-08 21:18:01 -06:00
1 parent 242b27bb1b
commit b0ed467664
7 files changed
+611

No files matched your search

+46
View File
@@ -0,0 +1,46 @@
[package]
name = "qbzd"
version.workspace = true
edition.workspace = true
license.workspace = true
description = "QBZ headless music daemon for SBCs and servers"
[[bin]]
name = "qbzd"
path = "src/main.rs"
[dependencies]
# Core crates (all Tauri-free)
qbz-models = { path = "../qbz-models" }
qbz-core = { path = "../qbz-core" }
qbz-player = { path = "../qbz-player" }
qbz-audio = { path = "../qbz-audio" }
qbz-qobuz = { path = "../qbz-qobuz" }
qbz-library = { path = "../qbz-library" }
qbz-cache = { path = "../qbz-cache" }
qbz-integrations = { path = "../qbz-integrations" }
# HTTP server
axum = { version = "0.8", features = ["ws"] }
tower-http = { version = "0.6", features = ["cors"] }
# Async
tokio = { workspace = true }
async-trait = { workspace = true }
# Serialization
serde = { workspace = true }
serde_json = { workspace = true }
# Config
toml = "0.8"
clap = { version = "4", features = ["derive"] }
# System
dirs = "6"
log = { workspace = true }
env_logger = "0.11"
sysinfo = "0.34"
# Database
rusqlite = { version = "0.31", features = ["bundled"] }