style: replace emojis with clean minimal terminal symbols
This commit is contained in:
parent
e8dd01509c
commit
659de0dc04
3 changed files with 21 additions and 21 deletions
|
|
@ -1,4 +1,4 @@
|
|||
# BrokeCrew 🤖⚡
|
||||
# BrokeCrew
|
||||
|
||||
[](https://github.com/oiupoyt/brokecrew/actions)
|
||||
[](LICENSE-MIT)
|
||||
|
|
@ -31,8 +31,8 @@ Simply run `brokecrew` to enter the rich, full-screen interactive TUI:
|
|||
brokecrew
|
||||
```
|
||||
|
||||
- **Live Team View**: Color-coded persona avatars (`⚡ 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`).
|
||||
- **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`).
|
||||
- **Interactive Modals**:
|
||||
- `[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`).
|
||||
|
|
|
|||
18
src/main.rs
18
src/main.rs
|
|
@ -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}"))?;
|
||||
println!(
|
||||
"{}",
|
||||
"✔ OpenRouter API key saved securely in OS credential store."
|
||||
"✓ OpenRouter API key saved securely in OS credential store."
|
||||
.bright_green()
|
||||
.bold()
|
||||
);
|
||||
|
|
@ -263,7 +263,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||
);
|
||||
println!(" Daily requests today: {}", daily_color);
|
||||
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) => {
|
||||
|
|
@ -323,7 +323,7 @@ fn ensure_api_key(config: &AppConfig) -> Result<String, Box<dyn std::error::Erro
|
|||
if io::stdin().is_terminal() {
|
||||
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()
|
||||
.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);
|
||||
eprintln!(
|
||||
"{}",
|
||||
"✔ OpenRouter API key saved securely in OS credential store."
|
||||
"✓ OpenRouter API key saved securely in OS credential store."
|
||||
.bright_green()
|
||||
.bold()
|
||||
);
|
||||
|
|
@ -454,7 +454,7 @@ async fn execute_prompt(
|
|||
if status.approaching_daily_limit {
|
||||
eprintln!(
|
||||
"{} Daily usage: {}/{}",
|
||||
"⚠ Budget notice: Approaching daily ceiling.".yellow(),
|
||||
"! Budget notice: Approaching daily ceiling.".yellow(),
|
||||
status.daily_requests,
|
||||
status.daily_limit
|
||||
);
|
||||
|
|
@ -526,7 +526,7 @@ async fn execute_prompt(
|
|||
if let Some(info) = route_info {
|
||||
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 {
|
||||
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
|
||||
|
|
@ -597,7 +597,7 @@ async fn run_pipeline(
|
|||
) -> Result<(), Box<dyn std::error::Error>> {
|
||||
println!(
|
||||
"\n{} Starting pipeline '{}' ({} steps)",
|
||||
"⚡".bright_cyan(),
|
||||
"›".bright_cyan(),
|
||||
pipeline.name.bold(),
|
||||
pipeline.steps.len()
|
||||
);
|
||||
|
|
@ -667,7 +667,7 @@ async fn run_pipeline(
|
|||
}
|
||||
println!();
|
||||
if fell_back {
|
||||
eprintln!("{}", "⚠ Fallback occurred during step execution".yellow());
|
||||
eprintln!("{}", "! Fallback occurred during step execution".yellow());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -603,7 +603,7 @@ fn render_minimal_messages(frame: &mut Frame, app: &AppState, area: Rect, palett
|
|||
let mut header_spans = vec![
|
||||
Span::raw(" "),
|
||||
Span::styled(
|
||||
format!("⚡ {name}"),
|
||||
format!("● {name}"),
|
||||
Style::default().fg(persona_color).bold(),
|
||||
),
|
||||
Span::styled(
|
||||
|
|
@ -614,7 +614,7 @@ fn render_minimal_messages(frame: &mut Frame, app: &AppState, area: Rect, palett
|
|||
if msg.fell_back {
|
||||
header_spans.push(Span::raw(" "));
|
||||
header_spans.push(Span::styled(
|
||||
"⚠ fallback",
|
||||
"[fallback]",
|
||||
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![
|
||||
Span::raw(" "),
|
||||
Span::styled(
|
||||
format!("⚡ Step {}/{}: {persona}", step_index + 1, total_steps),
|
||||
format!("● Step {}/{}: {persona}", step_index + 1, total_steps),
|
||||
Style::default().fg(persona_color).bold(),
|
||||
),
|
||||
Span::styled(
|
||||
|
|
@ -651,7 +651,7 @@ fn render_minimal_messages(frame: &mut Frame, app: &AppState, area: Rect, palett
|
|||
if msg.fell_back {
|
||||
header_spans.push(Span::raw(" "));
|
||||
header_spans.push(Span::styled(
|
||||
"⚠ fallback",
|
||||
"[fallback]",
|
||||
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![
|
||||
Span::raw(" "),
|
||||
Span::styled(
|
||||
format!("⚡ pipeline: {pipe_name}"),
|
||||
format!("› pipeline: {pipe_name}"),
|
||||
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 {
|
||||
lines.push(Line::from(vec![
|
||||
Span::raw(" "),
|
||||
Span::styled("[✔] ", Style::default().fg(Color::LightGreen).bold()),
|
||||
Span::styled("[✓] ", Style::default().fg(Color::LightGreen).bold()),
|
||||
Span::styled(
|
||||
format!("{}. {}", idx + 1, step.persona),
|
||||
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 {
|
||||
lines.push(Line::from(vec![
|
||||
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()),
|
||||
]));
|
||||
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 {
|
||||
("•", Color::LightGreen)
|
||||
} else if att.is_error {
|
||||
("✖", Color::LightRed)
|
||||
("×", Color::LightRed)
|
||||
} else {
|
||||
(sp, Color::Yellow)
|
||||
};
|
||||
|
|
@ -1231,7 +1231,7 @@ fn render_workings_pane(frame: &mut Frame, app: &AppState, area: Rect, palette:
|
|||
]));
|
||||
for pipe in &app.pipelines {
|
||||
lines.push(Line::from(vec![
|
||||
Span::raw(" ⚡ "),
|
||||
Span::raw(" › "),
|
||||
Span::styled(&pipe.name, Style::default().fg(Color::Yellow)),
|
||||
]));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue