mod agent;
mod cli;
mod error;
mod exec;
mod hub;
mod init;
mod run;
mod script;
mod support;
mod tui;
mod types;
#[cfg(test)]
mod _test_support;
use crate::cli::CliArgs;
use crate::exec::Executor;
use crate::hub::{get_hub, HubEvent};
use crate::tui::TuiApp;
use clap::{crate_version, Parser};
use error::{Error, Result};
use std::time::Duration;
pub static VERSION: &str = crate_version!();
#[tokio::main]
async fn main() -> Result<()> {
let args = CliArgs::parse();
let mut executor = Executor::new();
let executor_tx = executor.command_tx();
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(executor_tx);
tui.start_with_args(args).await?;
tokio::time::sleep(Duration::from_millis(100)).await;
println!("\n ---- Until next one, happy coding! ----");
Ok(())
}