From c108c8175e72e5f5e013d44cff46222151bbaf01 Mon Sep 17 00:00:00 2001 From: Daniel Newman Date: Fri, 15 May 2026 12:26:40 -0400 Subject: [PATCH] make it so much better --- bin/burn | 288 +++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 193 insertions(+), 95 deletions(-) diff --git a/bin/burn b/bin/burn index 8886f22..3ff1e60 100755 --- a/bin/burn +++ b/bin/burn @@ -4,9 +4,9 @@ set -euo pipefail FILLER_TOKENS=1000 -SYSTEM_OVERHEAD_TOKENS=9000 # measured: claude -p system prompt + tool defs -TOKENS_PER_CALL=$(( SYSTEM_OVERHEAD_TOKENS + FILLER_TOKENS )) -MIN_TOKENS=$TOKENS_PER_CALL # asking for less than one call can't be honored +SYSTEM_OVERHEAD_TOKENS=9000 # measured: claude -p system prompt + tool defs +TOKENS_PER_CALL=$((SYSTEM_OVERHEAD_TOKENS + FILLER_TOKENS)) +MIN_TOKENS=$TOKENS_PER_CALL # asking for less than one call can't be honored FILLER_LINE="Burn baby burn, this is a disco inferno, burning tokens is for great engineers. " usage() { @@ -29,30 +29,53 @@ model="" tokens="" while [[ $# -gt 0 ]]; do case "$1" in - -h|--help) usage; exit 0 ;; - --model) - if [[ $# -lt 2 ]]; then echo "error: --model requires a value" >&2; exit 2; fi - model="$2"; shift 2 ;; - --model=*) model="${1#*=}"; shift ;; - --) shift; break ;; - -*) echo "error: unknown flag: $1" >&2; usage >&2; exit 2 ;; - *) - if [[ -n "$tokens" ]]; then - echo "error: unexpected extra argument: $1" >&2 - exit 2 - fi - tokens="$1"; shift ;; + -h | --help) + usage + exit 0 + ;; + --model) + if [[ $# -lt 2 ]]; then + echo "error: --model requires a value" >&2 + exit 2 + fi + model="$2" + shift 2 + ;; + --model=*) + model="${1#*=}" + shift + ;; + --) + shift + break + ;; + -*) + echo "error: unknown flag: $1" >&2 + usage >&2 + exit 2 + ;; + *) + if [[ -n "$tokens" ]]; then + echo "error: unexpected extra argument: $1" >&2 + exit 2 + fi + tokens="$1" + shift + ;; esac done if [[ -z "$tokens" ]]; then - usage >&2; exit 2 + usage >&2 + exit 2 fi if ! [[ "$tokens" =~ ^[0-9]+$ ]]; then - echo "error: TOKENS must be a positive integer (got '$tokens')" >&2; exit 2 + echo "error: TOKENS must be a positive integer (got '$tokens')" >&2 + exit 2 fi -if (( tokens < MIN_TOKENS )); then - echo "error: tokens must be at least ${MIN_TOKENS} (got ${tokens})" >&2; exit 2 +if ((tokens < MIN_TOKENS)); then + echo "error: tokens must be at least ${MIN_TOKENS} (got ${tokens})" >&2 + exit 2 fi if ! command -v claude >/dev/null 2>&1; then @@ -67,26 +90,32 @@ if ! command -v jq >/dev/null 2>&1; then fi # ~4 chars/token is the standard rule of thumb for English text. -target_chars=$(( FILLER_TOKENS * 4 )) +target_chars=$((FILLER_TOKENS * 4)) filler_len=${#FILLER_LINE} -repeats=$(( target_chars / filler_len )) -(( repeats < 1 )) && repeats=1 +repeats=$((target_chars / filler_len)) +((repeats < 1)) && repeats=1 filler="" -for ((i=0; i ' ;; + 2_6) printf '%s' ' | ' ;; + 2_7) printf '%s' ' / \ ' ;; + 2_8) printf '%s' ' ā–“ā–’ā–“ā–’ā–“ā–’ā–“ā–’ā–“ā–’ā–“ā–’ā–“ā–’ā–“ā–’ā–“ā–’ā–“ ' ;; + # frame 3 — lean right, mirror Travolta; sparkles on the chain + 3_0) printf '%s' ' * | * ' ;; + 3_1) printf '%s' ' 🪩 ' ;; + 3_2) printf '%s' ' \|/ ' ;; + 3_3) printf '%s' ' \ ' ;; + 3_4) printf '%s' ' \o ' ;; + 3_5) printf '%s' ' |> ' ;; + 3_6) printf '%s' ' | ' ;; + 3_7) printf '%s' ' / \ ' ;; + 3_8) printf '%s' ' ā–’ā–“ā–’ā–“ā–’ā–“ā–’ā–“ā–’ā–“ā–’ā–“ā–’ā–“ā–’ā–“ā–’ā–“ā–’ ' ;; esac } -flame_color_for_row() { +disco_color_for_row() { case "$1" in - 0|1) printf '%s' "$ORANGE" ;; - *) printf '%s' "$RED" ;; + 0 | 2) printf '%s' "$ORANGE" ;; # chain sparkles + light rays + 1 | 8) printf '%s' "$MAGENTA" ;; # disco ball + dance floor + *) printf '%s' "$CYAN" ;; # dancer (and blank rows) esac } -print_flame_row() { - local frame=$1 row=$2 content color - content=$(flame_frame "$frame" "$row") - color=$(flame_color_for_row "$row") - printf '%s%s│░░░│%s%s%s%s%s│░░░│%s\n' \ - "$PAD" "$DIM" "$RESET" "$color" "$content" "$RESET" "$DIM" "$RESET" +# Render `count` copies of `char` colored across a cycling fire palette +# (red → orange → yellow). `offset` rotates the cycle so the strip flickers. +fire_strip() { + local count=$1 char=$2 offset=${3:-0} + local palette=("$RED" "$ORANGE" "$YELLOW") + local n=${#palette[@]} + local i out="" + for ((i = 0; i < count; i++)); do + out+="${palette[$(((i + offset) % n))]}${char}" + done + printf '%s' "$out" } -draw_fireplace() { +print_disco_row() { + local frame=$1 row=$2 content color fl + content=$(disco_frame "$frame" "$row") + color=$(disco_color_for_row "$row") + fl=$(fire_strip 3 'ā–‘' "$frame") + printf '%s%s│%s%s│%s%s%s%s%s│%s%s│%s\n' \ + "$PAD" "$RED" "$fl" "$YELLOW" "$RESET" \ + "$color" "$content" "$RESET" \ + "$YELLOW" "$fl" "$RED" "$RESET" +} + +draw_disco() { local frame=${1:-0} - printf '%s%sā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”%s\n' "$PAD" "$DIM" "$RESET" - printf '%s%s│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│%s\n' "$PAD" "$DIM" "$RESET" - printf '%s%sā”‚ā–‘ā–‘ā–‘ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”ā–‘ā–‘ā–‘ā”‚%s\n' "$PAD" "$DIM" "$RESET" - printf '%s%s│░░░│ │░░░│%s\n' "$PAD" "$DIM" "$RESET" - printf '%s%s│░░░│ │░░░│%s\n' "$PAD" "$DIM" "$RESET" - for row in 0 1 2 3 4; do - print_flame_row "$frame" "$row" + local flames fr3 + flames=$(fire_strip 31 'ā–²') + fr3=$(fire_strip 3 'ā–‘') + printf '%s%sā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”%s\n' "$PAD" "$RED" "$RESET" + printf '%s%s│%s%s│%s\n' "$PAD" "$RED" "$flames" "$RED" "$RESET" + printf '%s%s│%s%sā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”%s%s│%s\n' \ + "$PAD" "$RED" "$fr3" "$YELLOW" "$fr3" "$RED" "$RESET" + for row in 0 1 2 3 4 5 6 7 8; do + print_disco_row "$frame" "$row" done - printf '%s%s│░░░│ │░░░│%s\n' "$PAD" "$DIM" "$RESET" - printf '%s%s│░░░│%s %sā–“ā–“ā–“ā–“ā–“ā–“ā–“ā–“ā–“ā–“ā–“ā–“ā–“ā–“ā–“ā–“ā–“ā–“ā–“%s %s│░░░│%s\n' \ - "$PAD" "$DIM" "$RESET" "$RED" "$RESET" "$DIM" "$RESET" - printf '%s%sā”‚ā–‘ā–‘ā–‘ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ā–‘ā–‘ā–‘ā”‚%s\n' "$PAD" "$DIM" "$RESET" - printf '%s%sā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜%s\n' "$PAD" "$DIM" "$RESET" + printf '%s%s│%s%sā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜%s%s│%s\n' \ + "$PAD" "$RED" "$fr3" "$YELLOW" "$fr3" "$RED" "$RESET" + printf '%s%sā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜%s\n' "$PAD" "$RED" "$RESET" } -# Distance (in lines) from the progress-bar cursor up to the top flame row: -# blank line above bar + outer-bottom + inner-bottom + log + blank-below-flames -# + 5 flame rows = 10. -FLAME_OFFSET=10 +# Distance (in lines) from the progress-bar cursor up to the top inner row: +# blank line above bar + outer-bottom + inner-bottom + 9 inner rows = 12. +DISCO_OFFSET=12 -redraw_flames() { +redraw_disco() { local frame=$1 - printf '\033[s' # save cursor - printf '\033[%dA\r' "$FLAME_OFFSET" # move up to top flame row - for row in 0 1 2 3 4; do - print_flame_row "$frame" "$row" + printf '\033[s' # save cursor + printf '\033[%dA\r' "$DISCO_OFFSET" # move up to top inner row + for row in 0 1 2 3 4 5 6 7 8; do + print_disco_row "$frame" "$row" done - printf '\033[u' # restore cursor + printf '\033[u' # restore cursor } burned=0 @@ -180,12 +251,12 @@ claude_cmd+=(--) draw_bar() { local pct filled empty bar="" i suffix="${1:-}" - pct=$(( burned * 100 / tokens )) - (( pct > 100 )) && pct=100 - filled=$(( pct * BAR_WIDTH / 100 )) - empty=$(( BAR_WIDTH - filled )) - for ((i=0; i 100)) && pct=100 + filled=$((pct * BAR_WIDTH / 100)) + empty=$((BAR_WIDTH - filled)) + for ((i = 0; i < filled; i++)); do bar+='ā–ˆ'; done + for ((i = 0; i < empty; i++)); do bar+='ā–‘'; done # \033[K clears any leftover characters from a longer previous draw. printf "\r[%s] %3d%% • %d/%d tokens • \$%s • %d call(s)%s\033[K" \ "$bar" "$pct" "$burned" "$tokens" "$total_cost" "$iteration" "$suffix" @@ -196,14 +267,37 @@ restore_cursor() { } trap restore_cursor EXIT +CELEBRATIONS=( + "šŸ”§ You are a great engineer!" + "šŸŖ„ You are an AI wizard!" + "šŸ•ŗ Tokens burned. Groove restored." + "✨ Claude never saw that coming." + "šŸš€ You shipped faster than the flame could spread." + "šŸ’ƒ The code is hot and the vibes are immaculate." + "🪩 Groovy job. Productivity achieved." + "⚔ The tokens are gone, but the legend remains." + "šŸ† Another glorious victory for human-machine collaboration." + "⚔ You turned tokens into pure developer energy." + "šŸŽ© Behold: a masterclass in responsible token combustion." + "🌈 The code goblins approve this burn." + "šŸ› ļø Great work. The token furnace is pleased." +) + +# Round a dollar amount to the nearest cent. +round_cents() { + awk -v c="$1" 'BEGIN{printf "%.2f", c}' +} + on_interrupt() { if [[ -n "$claude_pid" ]]; then kill "$claude_pid" 2>/dev/null || true wait "$claude_pid" 2>/dev/null || true fi - echo - printf "stopped. burned %s tokens across %s call(s), spent \$%s.\n" \ - "$burned" "$iteration" "$total_cost" + local cost_rounded + cost_rounded=$(round_cents "$total_cost") + printf "\n\nšŸ›‘ stopped early.\n\n" + printf " šŸ”„ You torched %s tokens across %s call(s), and spent \$%s\n\n" "$cost_rounded šŸ’°šŸ’°šŸ’°" "$burned" "$iteration" + printf " šŸ’° spent " exit 130 } trap on_interrupt INT @@ -213,14 +307,14 @@ trap on_interrupt INT run_claude() { local output_file output_file=$(mktemp) - "${claude_cmd[@]}" "$prompt" > "$output_file" 2>/dev/null & + "${claude_cmd[@]}" "$prompt" >"$output_file" 2>/dev/null & claude_pid=$! local frame=0 while kill -0 "$claude_pid" 2>/dev/null; do - redraw_flames $(( frame % 3 )) - frame=$(( frame + 1 )) - sleep 0.25 + redraw_disco $((frame % 4)) + frame=$((frame + 1)) + sleep 0.4 done if wait "$claude_pid" 2>/dev/null; then @@ -237,12 +331,12 @@ run_claude() { printf '%s' "$HIDE_CURSOR" echo -draw_fireplace 0 +draw_disco 0 echo draw_bar -while (( burned < tokens )); do - iteration=$(( iteration + 1 )) +while ((burned < tokens)); do + iteration=$((iteration + 1)) if ! run_claude; then draw_bar " (retrying)" @@ -265,11 +359,15 @@ while (( burned < tokens )); do exit 1 fi - burned=$(( burned + this_call )) + burned=$((burned + this_call)) total_cost=$(awk -v a="$total_cost" -v b="$this_cost" 'BEGIN{printf "%.6f", a+b}') draw_bar done -echo -printf "done. burned %s tokens across %s call(s) (target was %s), spent \$%s.\n" \ - "$burned" "$iteration" "$tokens" "$total_cost" +cost_rounded=$(round_cents "$total_cost") +msg="${CELEBRATIONS[RANDOM % ${#CELEBRATIONS[@]}]}" + +printf "\n\n%s\n\n" "$msg" +printf " šŸ”„ torched %s fire tokens across %s call(s) (target: %s)\n" \ + "$burned" "$iteration" "$tokens" +printf " šŸ’° spent \$%s\n\n" "$cost_rounded"