ryu-hardware 0.1.12

Ryu Hardware Protocol (RHP v1) node backend — an extracted Core capability crate: the paired-device registry (SQLite store + revocable per-device tokens), pairing nonce verification, the Opus/WAV codec edge, the per-connection realtime session state machine (audio buffering + ambient meeting bridge), the live device-sender registry, the display-nudge loop, and the device-registry + TRMNL display HTTP surface. In-process default; Core consumes it as a NON-optional path dependency (the codec is also used by the voice module, the store backs ServerState in every build). The public ws/pair ingress route + the chat-turn orchestration (welded to Core's run_text_turn/voice/TTS session loop) stay Core-side as consumers of this crate's types.
Documentation
[package]
name = "ryu-hardware"
version = "0.1.12"
edition = "2021"
license = "Apache-2.0"
description = "Ryu Hardware Protocol (RHP v1) node backend — an extracted Core capability crate: the paired-device registry (SQLite store + revocable per-device tokens), pairing nonce verification, the Opus/WAV codec edge, the per-connection realtime session state machine (audio buffering + ambient meeting bridge), the live device-sender registry, the display-nudge loop, and the device-registry + TRMNL display HTTP surface. In-process default; Core consumes it as a NON-optional path dependency (the codec is also used by the voice module, the store backs ServerState in every build). The public ws/pair ingress route + the chat-turn orchestration (welded to Core's run_text_turn/voice/TTS session loop) stay Core-side as consumers of this crate's types."
repository = "https://github.com/amajorai/ryu"

# Versions are matched to apps/core/Cargo.toml so the in-process merge into Core's
# axum router has no version skew. This crate has ZERO dependency on apps/core.
[dependencies]
tokio = { version = "1", features = ["sync", "rt", "macros"] }
axum = "0.7"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
anyhow = "1"
chrono = { version = "0.4", features = ["serde"] }
uuid = { version = "1", features = ["v4", "serde"] }
rusqlite = { version = "0.40.0", features = ["bundled"] }
utoipa = { version = "5", features = ["axum_extras", "chrono", "uuid"] }
tracing = "0.1"
sha2 = "0.10"
hex = "0.4"
rand = "0.8"
opus = "0.3"
hound = "3"
async-trait = "0.1"
# Both cross-cutting app couplings are inverted through in-crate trait seams so this
# kernel crate links NEITHER swappable app:
#   - the dashboards device-render coupling → the `DashboardFeed` trait (`feed.rs`);
#   - the ambient meetings-ingest coupling → the `MeetingIngest` trait (`ingest.rs`).
# Core supplies in-process or sidecar-backed impls of each.

[dev-dependencies]
tokio = { version = "1", features = ["macros", "rt"] }