CLI for Frame — five intention-verbs over one application: frame new scaffolds it, frame run serves it, frame test proves it (real browser included), frame check verifies it statically, frame doctor walks the prerequisites
//! Frame CLI — five intention-verbs over one application, without hiding
//! typed failures.
useclap::Parser;useframe_cli::Cli;fnmain()->std::process::ExitCode{// Without a tracing subscriber, the host library's own `tracing::warn!`
// and `tracing::error!` calls (its documented LOUD failure surfaces,
// reached through `frame host` and config loading) are silent no-ops —
// so this binary always installs one.
tracing_subscriber::fmt().with_env_filter(tracing_subscriber::EnvFilter::try_from_default_env().unwrap_or_else(|_|tracing_subscriber::EnvFilter::new("info")),).init();matchframe_cli::execute(Cli::parse()){Ok(())=>std::process::ExitCode::SUCCESS,Err(error)=>{eprintln!("frame: {error}");letmut source =std::error::Error::source(&error);whileletSome(cause)= source {eprintln!(" caused by: {cause}");
source = cause.source();}std::process::ExitCode::FAILURE}}}