diff --git a/home-configs/claude/statusline-command.sh b/home-configs/claude/statusline-command.sh index 8405887..92e55f2 100755 --- a/home-configs/claude/statusline-command.sh +++ b/home-configs/claude/statusline-command.sh @@ -4,6 +4,12 @@ input=$(cat) cwd=$(echo "$input" | jq -r '.cwd') model=$(echo "$input" | jq -r '.model.display_name // empty') model_id=$(echo "$input" | jq -r '.model.id // empty') +# Суффикс [1m] в отображении не нужен: окно контекста задаётся +# CLAUDE_CODE_MAX_CONTEXT_TOKENS, а не суффиксом модели +model="${model/\[1m\]/}" +model="${model% \[1M\]}" +model="${model% (1M context)}" +model_id="${model_id/\[1m\]/}" five_pct=$(echo "$input" | jq -r '.rate_limits.five_hour.used_percentage // empty') five_reset=$(echo "$input" | jq -r '.rate_limits.five_hour.resets_at // empty') week_pct=$(echo "$input" | jq -r '.rate_limits.seven_day.used_percentage // empty') @@ -11,15 +17,18 @@ week_reset=$(echo "$input" | jq -r '.rate_limits.seven_day.resets_at // empty') ctx_pct=$(echo "$input" | jq -r '.context_window.used_percentage // empty') +# Разделитель сегментов: жирная серая средняя точка · +_sep() { printf " \033[1m\033[38;5;240m·\033[00m "; } + # Цвет effort: насыщенные, глубже чем пастельные (jewel tones) _effort_color() { case "$1" in - low) printf '\033[38;5;220m[low]\033[00m' ;; # золотой - medium) printf '\033[38;5;50m[medium]\033[00m' ;; # насыщенный teal - high) printf '\033[38;5;38m[high]\033[00m' ;; # глубокий голубой - xhigh) printf '\033[38;5;206m[xhigh]\033[00m' ;; # насыщенный фиолетовый - max) printf '\033[38;5;210m[\033[38;5;220mm\033[38;5;114ma\033[38;5;50mx\033[38;5;206m]\033[00m' ;; # радуга - *) printf '\033[38;5;252m[%s]\033[00m' "$1" ;; + low) printf '\033[38;5;220mlow\033[00m' ;; # золотой + medium) printf '\033[38;5;50mmedium\033[00m' ;; # насыщенный teal + high) printf '\033[38;5;38mhigh\033[00m' ;; # глубокий голубой + xhigh) printf '\033[38;5;206mxhigh\033[00m' ;; # насыщенный фиолетовый + max) printf '\033[38;5;220mm\033[38;5;114ma\033[38;5;50mx\033[38;5;206m\033[00m' ;; # радуга + *) printf '\033[38;5;252m%s\033[00m' "$1" ;; esac } @@ -29,6 +38,7 @@ _brand_color() { deepseek) printf '\033[38;5;69m' ;; # DeepSeek фирменный синий claude) printf '\033[38;5;173m' ;; # Anthropic оранжевый kimi) printf '\033[38;5;81m' ;; # Kimi голубой + glm) printf '\033[38;5;223m' ;; # Z.ai кремовый (бренд-фон z.ai, #FFE4B5) openrouter) printf '\033[38;5;135m' ;; # OpenRouter фиолетовый *) printf '\033[38;5;223m' ;; # кремовый (fallback) esac @@ -39,7 +49,7 @@ branch=$(git -C "$cwd" --no-optional-locks symbolic-ref --short HEAD 2>/dev/null short_cwd="${cwd/#$HOME/\~}" printf "\033[38;5;252m%s\033[00m" "$short_cwd" -[ -n "$branch" ] && printf " \033[38;5;252m[%s]\033[00m" "$branch" +[ -n "$branch" ] && { _sep; printf "\033[38;5;111m%s\033[00m" "$branch"; } if [ -n "$model" ]; then brand_color=$(_brand_color "${AI_LAUNCHER:-}") effort=$(echo "$input" | jq -r ".effort.level // empty") @@ -84,19 +94,21 @@ if [ -n "$model" ]; then fi fi fi - [ -n "$account" ] && printf " %s[%s]\033[00m" "$brand_color" "$account" + [ -n "$account" ] && { _sep; printf "%s%s\033[00m" "$brand_color" "$account"; } fi # Аккаунт/ключ Kimi — показываем alias (account1/account2/...). if [ "${AI_LAUNCHER:-}" = "kimi" ]; then kimi_account=$(cat "$HOME/.config/ai-setup/kimi_keys/current" 2>/dev/null) - [ -n "$kimi_account" ] && printf " %s[%s]\033[00m" "$brand_color" "$kimi_account" + [ -n "$kimi_account" ] && { _sep; printf "%s%s\033[00m" "$brand_color" "$kimi_account"; } fi if [ -n "$effort" ]; then - printf " %s%s " "$brand_color" "$model" + _sep + printf "%s%s " "$brand_color" "$model" _effort_color "$effort" else - printf " %s%s\033[00m" "$brand_color" "$model" + _sep + printf "%s%s\033[00m" "$brand_color" "$model" fi fi @@ -138,7 +150,7 @@ if [[ "$model_id" == *deepseek* ]]; then cache_file="$HOME/.cache/ai-setup/deepseek_balance" if [ -f "$cache_file" ]; then balance=$(head -1 "$cache_file") - [ -n "$balance" ] && printf " \033[38;5;78m%s\033[00m" "$balance" + [ -n "$balance" ] && { _sep; printf "\033[38;5;78m%s\033[00m" "$balance"; } fi # Фоновое обновление баланса (не чаще раза в 30 секунд) @@ -182,7 +194,7 @@ elif [ "${AI_LAUNCHER:-}" = "openrouter" ]; then cache_file="$HOME/.cache/ai-setup/openrouter_balance" if [ -f "$cache_file" ]; then balance=$(head -1 "$cache_file") - [ -n "$balance" ] && printf " \033[38;5;78m%s\033[00m" "$balance" + [ -n "$balance" ] && { _sep; printf "\033[38;5;78m%s\033[00m" "$balance"; } fi # Фоновое обновление баланса (не чаще раза в 30 секунд) @@ -247,13 +259,13 @@ else five_int=$(printf '%.0f' "$five_pct") remaining=$(fmt_remaining "$five_reset") color=$(pct_color "$five_int") - printf " %s%s:%s%%\033[00m" "$color" "$remaining" "$five_int" + _sep; printf "%s%s:%s%%\033[00m" "$color" "$remaining" "$five_int" fi if [ -n "$week_pct" ] && [ -n "$week_reset" ]; then week_int=$(printf '%.0f' "$week_pct") remaining=$(fmt_remaining "$week_reset") color=$(pct_color "$week_int") - printf " %s%s:%s%%\033[00m" "$color" "$remaining" "$week_int" + _sep; printf "%s%s:%s%%\033[00m" "$color" "$remaining" "$week_int" fi fi @@ -263,7 +275,7 @@ fi if [ -n "$ctx_pct" ]; then ctx_int=$(printf '%.0f' "$ctx_pct") color=$(pct_color "$ctx_int") - printf " %sctx:%s%%\033[00m" "$color" "$ctx_int" + _sep; printf "%sctx:%s%%\033[00m" "$color" "$ctx_int" # Звуковой сигнал при первом достижении 60% alert_file="$HOME/.cache/ai-setup/ctx_alert_state"