[package] name = "joule-ui-serve" version.workspace = true edition.workspace = true license.workspace = true repository.workspace = true authors.workspace = true description = "joule-ui reference host — the transport binding. Serves a rendered surface, runs the metered interaction on each action fire, returns the next surface + the sealed receipt, and exposes the hash-chained interaction log. Pure handle() over any transport; a std-only HTTP/1.1 driver ships as the reference." [dependencies] joule-ui-core = { path = "../joule-ui-core" } joule-ui-interaction = { path = "../joule-ui-interaction" } joule-ui-render = { path = "../joule-ui-render" } serde = { workspace = true } serde_json = { workspace = true } ed25519-dalek = { workspace = true } # Render the host's own verifying key as a `did:key:z…` — the default actor # attributed to interactions fired against an unauthenticated served surface. bs58 = "0.5" # The reference Meter edge (SPEC §5): the live demo meters each interaction as # a Sandbox PowerMeter span, from `PowerMeter::detect_in_process()` since every # handler runs in this process. A receipt is HwShunt only when its span was a # hardware reading of the CPU (this process's own CPU energy counter where it # is live; else a live RAPL or IOReport counter, with any live NVML GPU reading # beside it), and Estimator otherwise, with the meter's # wall-clock estimate as its figure: a GPU reading alone does not cover work # that ran on the CPU. The joules vary with the work either way, and no # estimate is sealed as a measurement. sandbox-meter = { path = "../../../../sandbox/sandbox-rs/crates/sandbox-meter" } [dev-dependencies] # Device classes for the scripted spans the binary's tests replay. sandbox-schema = { path = "../../../../sandbox/sandbox-rs/crates/sandbox-schema" } [[bin]] name = "joule-ui-serve" path = "src/bin/joule_ui_serve.rs"