Files
goose/crates/goose-cli/src/main.rs
Douwe Osinga 64edb978cd Flush OTLP traces reliably on exit with configurable timeout (#9228)
Signed-off-by: Douwe Osinga <douwe@squareup.com>
Co-authored-by: Douwe Osinga <douwe@squareup.com>
2026-05-18 09:58:05 -04:00

52 lines
1.6 KiB
Rust

use anyhow::Result;
use goose_cli::cli::cli;
/// Enable ANSI/VT escape sequence processing on Windows Console Host.
///
/// Without this, spinners and progress bars from cliclack/indicatif render as
/// repeated new lines instead of updating in place, because Windows Console Host
/// does not process ANSI escapes by default.
#[cfg(windows)]
fn enable_windows_vt_processing() {
// colors_supported() has the side effect of calling SetConsoleMode with
// ENABLE_VIRTUAL_TERMINAL_PROCESSING on the underlying console handle.
let _ = console::Term::stdout().features().colors_supported();
let _ = console::Term::stderr().features().colors_supported();
}
async fn run() -> Result<()> {
if let Err(e) = goose_cli::logging::setup_logging(None) {
eprintln!("Warning: Failed to initialize logging: {}", e);
}
let result = cli().await;
#[cfg(feature = "otel")]
if goose::otel::otlp::is_otlp_initialized() {
goose::otel::otlp::shutdown_otlp();
}
result
}
fn main() -> Result<()> {
#[cfg(windows)]
enable_windows_vt_processing();
let handle = std::thread::Builder::new()
.name("goose-cli-main".to_string())
.stack_size(8 * 1024 * 1024)
.spawn(|| {
let runtime = tokio::runtime::Builder::new_multi_thread()
.enable_all()
.build()
.expect("Failed to build Tokio runtime");
runtime.block_on(run())
})
.map_err(|e| anyhow::anyhow!("Failed to spawn goose-cli main thread: {}", e))?;
handle
.join()
.map_err(|_| anyhow::anyhow!("goose-cli main thread panicked"))?
}