use best_claude_hud::cli::Cli; use best_claude_hud::config::{Config, InputData}; use best_claude_hud::core::{collect_all_segments, StatusLineGenerator}; use best_claude_hud::ui::{MainMenu, MenuResult}; use std::io::{self, IsTerminal}; fn main() -> Result<(), Box> { let cli = Cli::parse_args(); if cli.config { best_claude_hud::ui::run_configurator()?; return Ok(()); } if cli.setup { let settings_path = best_claude_hud::utils::install_statusline()?; println!( "Configured Claude Code statusLine in {}", settings_path.display() ); println!("Restart Claude Code for the statusline to take effect."); return Ok(()); } // Handle Claude Code patcher if let Some(claude_path) = cli.patch { use best_claude_hud::utils::ClaudeCodePatcher; println!("šŸ”§ Claude Code Context Warning Disabler"); println!("Target file: {}", claude_path); // Create backup in same directory let backup_path = format!("{}.backup", claude_path); std::fs::copy(&claude_path, &backup_path)?; println!("šŸ“¦ Created backup: {}", backup_path); // Load and patch let mut patcher = ClaudeCodePatcher::new(&claude_path)?; println!("\nšŸ”„ Applying patches..."); let results = patcher.apply_all_patches(); patcher.save()?; ClaudeCodePatcher::print_summary(&results); println!("šŸ’” To restore warnings, replace your cli.js with the backup file:"); println!(" cp {} {}", backup_path, claude_path); return Ok(()); } // Load configuration let mut config = Config::load().unwrap_or_else(|_| Config::default()); // Apply theme override if provided if let Some(theme) = cli.theme { config = best_claude_hud::ui::themes::ThemePresets::get_theme(&theme); } // Check if stdin has data if io::stdin().is_terminal() { if let Some(result) = MainMenu::run()? { match result { MenuResult::LaunchConfigurator => { best_claude_hud::ui::run_configurator()?; } MenuResult::InitConfig | MenuResult::CheckConfig => {} MenuResult::Exit => {} } } return Ok(()); } // Read Claude Code data from stdin let stdin = io::stdin(); let input: InputData = serde_json::from_reader(stdin.lock())?; // Collect segment data let segments_data = collect_all_segments(&config, &input); // Render statusline let generator = StatusLineGenerator::new(config); let statusline = generator.generate(segments_data); println!("{}", statusline); Ok(()) }