#![deny(unsafe_code)]
#![deny(missing_docs)]
#![deny(clippy::all)]
#![deny(unreachable_pub)]
#![deny(clippy::unwrap_used)]
#![cfg_attr(test, allow(clippy::unwrap_used))]
#![expect(
dead_code,
reason = "incremental development — some plumbing used by later features"
)]
use std::process::ExitCode;
use clap::Parser;
mod admin_client;
mod bootstrap;
mod cli;
mod commands;
mod context;
mod dispatch;
mod formatter;
mod principal;
mod repl;
pub mod socket_client;
mod theme;
mod tui;
mod value_formatter;
mod workspace_layout;
#[tokio::main]
async fn main() -> ExitCode {
let parsed = cli::Cli::parse();
if workspace_layout::initialize(parsed.workspace_state_dir.clone()).is_err() {
eprintln!("error: workspace layout was already initialized");
return ExitCode::from(1);
}
bootstrap::init_logging(&parsed);
match principal::resolve_process(parsed.principal.as_deref()) {
Ok(p) => principal::set(p),
Err(e) => {
eprintln!("{}", theme::Theme::error(&format!("error: {e:#}")));
return ExitCode::from(1);
},
}
match dispatch::dispatch(parsed).await {
Ok(code) => code,
Err(e) => {
eprintln!("{}", theme::Theme::error(&format!("error: {e:#}")));
ExitCode::from(1)
},
}
}