frame-host 0.1.0

Frame host server — boots the frame-core host authority with an embedded liminal component and serves the built frame page
Documentation
//! The full frame server: one binary, one config, one start command.
//!
//! `frame-host --config frame.toml` boots the entire stack in a single process:
//!
//! - the **embedded liminal component** ([`embedded`]) — liminal's TCP wire
//!   listener, browser WebSocket listener, and health endpoint, running
//!   in-process on liminal's own threads (no child process, no side-by-side
//!   server); the host owns its lifecycle but not its bytes;
//! - the **frame-core host authority** ([`runtime`]) — the host-owned
//!   capability table reached only through
//!   [`frame_core::capability::HostCapabilityFacade`], the component registry,
//!   and supervised lifecycle, around the class-(b) client-native graph view
//!   under the `frame:graph-view@v1` contract (D10);
//! - the **console HTTP server** ([`server`]) — the static browser bundle plus
//!   `GET /frame/config.json`.
//!
//! Per ruling D3 the browser is a liminal PARTICIPANT: the served page connects
//! to the embedded liminal directly over the WebSocket transport. This host
//! never proxies or terminates that feed; `/frame/config.json` is DERIVED at
//! runtime from the embedded component's real bound WebSocket address, so the
//! page's endpoint and the server's address can never drift.
//!
//! Console-first (D9): every component lifecycle transition and capability
//! denial is logged to stdout as it happens.

pub mod app;
pub mod cli;
pub mod config;
pub mod embedded;
pub mod error;
pub mod liminal_proxy;
pub mod manifest;
pub mod runtime;
pub mod serve;
pub mod server;

pub use app::run;
pub use cli::Cli;
pub use config::{FrameConfig, FrameSection};
pub use error::HostError;