mod agent;
mod cli;
mod dir_context;
mod error;
mod exec;
mod hub;
mod init;
mod pack;
mod packer;
mod pricing;
mod run;
mod runtime;
mod script;
mod support;
mod tui;
mod types;
#[cfg(test)]
mod _test_support;
use crate::cli::CliArgs;
use crate::exec::Executor;
use crate::hub::{HubEvent, get_hub};
use crate::tui::TuiApp;
use clap::{Parser, crate_version};
use error::{Error, Result};
pub static VERSION: &str = crate_version!();
#[tokio::main]
async fn main() -> Result<()> {
let args = CliArgs::parse();
let executor = Executor::new();
let exec_sender = executor.sender();
tokio::spawn(async move {
if let Err(err) = executor.start().await {
let hub = get_hub();
hub.publish(HubEvent::Error { error: err.into() }).await;
hub.publish(HubEvent::Quit).await;
}
});
let tui = TuiApp::new(exec_sender);
tui.start_with_args(args).await?;
tokio::time::sleep(std::time::Duration::from_millis(100)).await;
println!("\n---- Until next time, happy coding! ----");
Ok(())
}