style: replace emojis with clean minimal terminal symbols

This commit is contained in:
katR 2026-09-29 07:25:13 +05:30
parent e8dd01509c
commit 659de0dc04
3 changed files with 21 additions and 21 deletions

View file

@ -1,4 +1,4 @@
# BrokeCrew 🤖⚡ # BrokeCrew
[![CI](https://github.com/oiupoyt/brokecrew/actions/workflows/ci.yml/badge.svg)](https://github.com/oiupoyt/brokecrew/actions) [![CI](https://github.com/oiupoyt/brokecrew/actions/workflows/ci.yml/badge.svg)](https://github.com/oiupoyt/brokecrew/actions)
[![License](https://img.shields.io/badge/license-MIT%20OR%20Apache--2.0-blue.svg)](LICENSE-MIT) [![License](https://img.shields.io/badge/license-MIT%20OR%20Apache--2.0-blue.svg)](LICENSE-MIT)
@ -31,8 +31,8 @@ Simply run `brokecrew` to enter the rich, full-screen interactive TUI:
brokecrew brokecrew
``` ```
- **Live Team View**: Color-coded persona avatars (`⚡ coder`, `🔍 reviewer`, `🏛️ architect`), token streaming with markdown & syntax formatting. - **Live Team View**: Color-coded persona indicators (`● coder`, `● reviewer`, `● architect`), token streaming with markdown & syntax formatting.
- **Quota & Budget Monitor**: Real-time headers displaying rolling minute and 24h limits (`⏱ 1m: 2/20`, `📅 24h: 14/50`). - **Quota & Budget Monitor**: Real-time headers displaying rolling minute and 24h limits (`1m: 2/20`, `24h: 14/50`).
- **Interactive Modals**: - **Interactive Modals**:
- `[Tab]` — Open Persona Selector (switch between intelligent Stage A/B `Auto-Route` and dedicated personas). - `[Tab]` — Open Persona Selector (switch between intelligent Stage A/B `Auto-Route` and dedicated personas).
- `[Ctrl+P]` — Open Pipeline Selector (execute multi-agent pipelines like `build-and-review`). - `[Ctrl+P]` — Open Pipeline Selector (execute multi-agent pipelines like `build-and-review`).

View file

@ -144,7 +144,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
.map_err(|e| format!("Failed to save API key to OS credential store: {e}"))?; .map_err(|e| format!("Failed to save API key to OS credential store: {e}"))?;
println!( println!(
"{}", "{}",
"✔ OpenRouter API key saved securely in OS credential store." "✓ OpenRouter API key saved securely in OS credential store."
.bright_green() .bright_green()
.bold() .bold()
); );
@ -263,7 +263,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
); );
println!(" Daily requests today: {}", daily_color); println!(" Daily requests today: {}", daily_color);
if status.approaching_daily_limit { if status.approaching_daily_limit {
println!(" {}", "⚠ Notice: Approaching daily free-tier limit. Non-urgent calls may be deferred.".yellow().bold()); println!(" {}", "! Notice: Approaching daily free-tier limit. Non-urgent calls may be deferred.".yellow().bold());
} }
} }
Err(e) => { Err(e) => {
@ -323,7 +323,7 @@ fn ensure_api_key(config: &AppConfig) -> Result<String, Box<dyn std::error::Erro
if io::stdin().is_terminal() { if io::stdin().is_terminal() {
eprintln!( eprintln!(
"{}", "{}",
"⚡ Welcome to BrokeCrew! No OpenRouter API key found in keyring, env, or config." ":: Welcome to BrokeCrew! No OpenRouter API key found in keyring, env, or config."
.bright_cyan() .bright_cyan()
.bold() .bold()
); );
@ -339,7 +339,7 @@ fn ensure_api_key(config: &AppConfig) -> Result<String, Box<dyn std::error::Erro
let _ = AppConfig::save_api_key_to_keyring(&trimmed); let _ = AppConfig::save_api_key_to_keyring(&trimmed);
eprintln!( eprintln!(
"{}", "{}",
"✔ OpenRouter API key saved securely in OS credential store." "✓ OpenRouter API key saved securely in OS credential store."
.bright_green() .bright_green()
.bold() .bold()
); );
@ -454,7 +454,7 @@ async fn execute_prompt(
if status.approaching_daily_limit { if status.approaching_daily_limit {
eprintln!( eprintln!(
"{} Daily usage: {}/{}", "{} Daily usage: {}/{}",
"⚠ Budget notice: Approaching daily ceiling.".yellow(), "! Budget notice: Approaching daily ceiling.".yellow(),
status.daily_requests, status.daily_requests,
status.daily_limit status.daily_limit
); );
@ -526,7 +526,7 @@ async fn execute_prompt(
if let Some(info) = route_info { if let Some(info) = route_info {
eprintln!( eprintln!(
"{}", "{}",
format!("⚡ [BrokeCrew: {info} ➔ {}]", target_persona).dimmed() format!("› [BrokeCrew: {info} ➔ {}]", target_persona).dimmed()
); );
} }
@ -567,7 +567,7 @@ async fn execute_prompt(
if res.fell_back { if res.fell_back {
eprintln!( eprintln!(
"{}", "{}",
format!("⚠ Candidate fallback: served by {}", res.model_used).yellow() format!("! Candidate fallback: served by {}", res.model_used).yellow()
); );
} }
// Record budget for each failed attempt plus the successful one // Record budget for each failed attempt plus the successful one
@ -597,7 +597,7 @@ async fn run_pipeline(
) -> Result<(), Box<dyn std::error::Error>> { ) -> Result<(), Box<dyn std::error::Error>> {
println!( println!(
"\n{} Starting pipeline '{}' ({} steps)", "\n{} Starting pipeline '{}' ({} steps)",
"⚡".bright_cyan(), "›".bright_cyan(),
pipeline.name.bold(), pipeline.name.bold(),
pipeline.steps.len() pipeline.steps.len()
); );
@ -667,7 +667,7 @@ async fn run_pipeline(
} }
println!(); println!();
if fell_back { if fell_back {
eprintln!("{}", "⚠ Fallback occurred during step execution".yellow()); eprintln!("{}", "! Fallback occurred during step execution".yellow());
} }
} }
} }

View file

@ -603,7 +603,7 @@ fn render_minimal_messages(frame: &mut Frame, app: &AppState, area: Rect, palett
let mut header_spans = vec![ let mut header_spans = vec![
Span::raw(" "), Span::raw(" "),
Span::styled( Span::styled(
format!("⚡ {name}"), format!("● {name}"),
Style::default().fg(persona_color).bold(), Style::default().fg(persona_color).bold(),
), ),
Span::styled( Span::styled(
@ -614,7 +614,7 @@ fn render_minimal_messages(frame: &mut Frame, app: &AppState, area: Rect, palett
if msg.fell_back { if msg.fell_back {
header_spans.push(Span::raw(" ")); header_spans.push(Span::raw(" "));
header_spans.push(Span::styled( header_spans.push(Span::styled(
"⚠ fallback", "[fallback]",
Style::default().fg(Color::Yellow).bold(), Style::default().fg(Color::Yellow).bold(),
)); ));
} }
@ -640,7 +640,7 @@ fn render_minimal_messages(frame: &mut Frame, app: &AppState, area: Rect, palett
let mut header_spans = vec![ let mut header_spans = vec![
Span::raw(" "), Span::raw(" "),
Span::styled( Span::styled(
format!("⚡ Step {}/{}: {persona}", step_index + 1, total_steps), format!("● Step {}/{}: {persona}", step_index + 1, total_steps),
Style::default().fg(persona_color).bold(), Style::default().fg(persona_color).bold(),
), ),
Span::styled( Span::styled(
@ -651,7 +651,7 @@ fn render_minimal_messages(frame: &mut Frame, app: &AppState, area: Rect, palett
if msg.fell_back { if msg.fell_back {
header_spans.push(Span::raw(" ")); header_spans.push(Span::raw(" "));
header_spans.push(Span::styled( header_spans.push(Span::styled(
"⚠ fallback", "[fallback]",
Style::default().fg(Color::Yellow).bold(), Style::default().fg(Color::Yellow).bold(),
)); ));
} }
@ -986,7 +986,7 @@ fn render_workings_pane(frame: &mut Frame, app: &AppState, area: Rect, palette:
lines.push(Line::from(vec![ lines.push(Line::from(vec![
Span::raw(" "), Span::raw(" "),
Span::styled( Span::styled(
format!("⚡ pipeline: {pipe_name}"), format!("› pipeline: {pipe_name}"),
Style::default().fg(palette.accent).bold(), Style::default().fg(palette.accent).bold(),
), ),
])); ]));
@ -1035,7 +1035,7 @@ fn render_workings_pane(frame: &mut Frame, app: &AppState, area: Rect, palette:
} else if step.is_completed { } else if step.is_completed {
lines.push(Line::from(vec![ lines.push(Line::from(vec![
Span::raw(" "), Span::raw(" "),
Span::styled("[✔] ", Style::default().fg(Color::LightGreen).bold()), Span::styled("[✓] ", Style::default().fg(Color::LightGreen).bold()),
Span::styled( Span::styled(
format!("{}. {}", idx + 1, step.persona), format!("{}. {}", idx + 1, step.persona),
Style::default().fg(Color::White).bold(), Style::default().fg(Color::White).bold(),
@ -1084,7 +1084,7 @@ fn render_workings_pane(frame: &mut Frame, app: &AppState, area: Rect, palette:
if let Some(stage) = &app.workings.route_stage { if let Some(stage) = &app.workings.route_stage {
lines.push(Line::from(vec![ lines.push(Line::from(vec![
Span::raw(" "), Span::raw(" "),
Span::styled("⚡ ", Style::default().fg(palette.accent).bold()), Span::styled("● ", Style::default().fg(palette.accent).bold()),
Span::styled(stage.clone(), Style::default().fg(palette.accent).bold()), Span::styled(stage.clone(), Style::default().fg(palette.accent).bold()),
])); ]));
if let Some(details) = &app.workings.route_details { if let Some(details) = &app.workings.route_details {
@ -1132,7 +1132,7 @@ fn render_workings_pane(frame: &mut Frame, app: &AppState, area: Rect, palette:
let (icon, color) = if att.is_success { let (icon, color) = if att.is_success {
("•", Color::LightGreen) ("•", Color::LightGreen)
} else if att.is_error { } else if att.is_error {
("✖", Color::LightRed) ("×", Color::LightRed)
} else { } else {
(sp, Color::Yellow) (sp, Color::Yellow)
}; };
@ -1231,7 +1231,7 @@ fn render_workings_pane(frame: &mut Frame, app: &AppState, area: Rect, palette:
])); ]));
for pipe in &app.pipelines { for pipe in &app.pipelines {
lines.push(Line::from(vec![ lines.push(Line::from(vec![
Span::raw(" ⚡ "), Span::raw(" › "),
Span::styled(&pipe.name, Style::default().fg(Color::Yellow)), Span::styled(&pipe.name, Style::default().fg(Color::Yellow)),
])); ]));
} }