diff --git a/shared/statusline/statusline.ps1 b/shared/statusline/statusline.ps1 index 73ec014..b31b9d7 100644 --- a/shared/statusline/statusline.ps1 +++ b/shared/statusline/statusline.ps1 @@ -1,3 +1,5 @@ +[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 +$invariantCulture = [System.Globalization.CultureInfo]::InvariantCulture $data = ($input | Out-String) | ConvertFrom-Json $model = if ($data.model.display_name) { $data.model.display_name } else { '-' } $effort = if ($data.effort.level) { $data.effort.level } else { '-' } @@ -5,7 +7,22 @@ $directory = if ($data.workspace.current_dir) { $data.workspace.current_dir } el $repo = if ($data.workspace.repo.name) { $data.workspace.repo.name } elseif ($directory) { Split-Path $directory -Leaf } else { '-' } $branch = if ($directory -and (Get-Command git -ErrorAction SilentlyContinue)) { (& git -C $directory branch --show-current 2>$null | Select-Object -First 1) } else { $null } if (-not $branch) { $branch = '-' } -$maxContext = if ($data.context_window.context_window_size) { [long]$data.context_window.context_window_size } else { 0 } -$usedContext = if ($null -ne $data.context_window.used_percentage) { "$([math]::Round([double]$data.context_window.used_percentage, [MidpointRounding]::AwayFromZero))%" } else { '-' } +$usedPercentage = if ($null -ne $data.context_window.used_percentage) { [double]$data.context_window.used_percentage } else { $null } +$usedContext = if ($null -ne $usedPercentage) { "$([math]::Round($usedPercentage, [MidpointRounding]::AwayFromZero).ToString($invariantCulture))%" } else { '-' } $usedTokens = [long]$data.context_window.total_input_tokens + [long]$data.context_window.total_output_tokens -Write-Output "Model: $model | Effort: $effort | Repo: $repo | Branch: $branch | Max Context: $maxContext | Used Context: $usedContext | Used Tokens: $usedTokens" +$usedTokensDisplay = if ($usedTokens -ge 1000) { ($usedTokens / 1000).ToString('0.0', $invariantCulture) + 'k' } else { $usedTokens.ToString($invariantCulture) } + +$esc = [char]27 +$reset = "$esc[0m" +$dim = "$esc[90m" +$cyan = "$esc[36m" +$magenta = "$esc[35m" +$blue = "$esc[34m" +$green = "$esc[32m" +$contextColor = if ($null -eq $usedPercentage) { $dim } elseif ($usedPercentage -ge 85) { "$esc[31m" } elseif ($usedPercentage -ge 60) { "$esc[33m" } else { $green } +$middot = [char]0x00B7 +$sep = "$dim$middot$reset" + +$line1 = "$cyan$model$reset $sep $magenta$effort$reset" +$line2 = "$blue$repo$reset$dim on$reset $green$branch$reset $sep $contextColor$usedContext ctx$reset $dim($usedTokensDisplay tok)$reset" +Write-Output "$line1`n$line2" diff --git a/shared/statusline/statusline.sh b/shared/statusline/statusline.sh index d644cbc..32e2478 100755 --- a/shared/statusline/statusline.sh +++ b/shared/statusline/statusline.sh @@ -4,19 +4,51 @@ set -euo pipefail command -v jq >/dev/null 2>&1 || exit 0 input= while IFS= read -r line || [ -n "$line" ]; do input+="$line"; done -IFS=$'\t' read -r model effort repo directory max_context used_context used_tokens < <( +IFS=$'\t' read -r model effort repo directory used_percentage used_tokens < <( printf '%s' "$input" | jq -r '[ (.model.display_name // "-"), (.effort.level // "-"), (.workspace.repo.name // "-"), (.workspace.current_dir // .cwd // "."), - (.context_window.context_window_size // 0), - (if .context_window.used_percentage == null then "-" else ((.context_window.used_percentage | round | tostring) + "%") end), + (if .context_window.used_percentage == null then "-" else (.context_window.used_percentage | round) end), ((.context_window.total_input_tokens // 0) + (.context_window.total_output_tokens // 0)) ] | @tsv' ) +used_percentage=${used_percentage%$'\r'} +used_tokens=${used_tokens%$'\r'} [ "$repo" != - ] || repo=$(basename -- "$directory") [ -n "$repo" ] || repo=- branch=$(git -C "$directory" branch --show-current 2>/dev/null || true) [ -n "$branch" ] || branch=- -printf 'Model: %s | Effort: %s | Repo: %s | Branch: %s | Max Context: %s | Used Context: %s | Used Tokens: %s\n' "$model" "$effort" "$repo" "$branch" "$max_context" "$used_context" "$used_tokens" + +if [ "$used_percentage" != - ]; then + used_context="${used_percentage}%" +else + used_context=- +fi +if [ "$used_tokens" -ge 1000 ]; then + used_tokens_display=$(awk -v t="$used_tokens" 'BEGIN { printf "%.1fk", t / 1000 }') +else + used_tokens_display=$used_tokens +fi + +esc=$'\033' +reset="$esc[0m" +dim="$esc[90m" +cyan="$esc[36m" +magenta="$esc[35m" +blue="$esc[34m" +green="$esc[32m" +if [ "$used_percentage" = - ]; then + context_color=$dim +elif [ "$used_percentage" -ge 85 ]; then + context_color="$esc[31m" +elif [ "$used_percentage" -ge 60 ]; then + context_color="$esc[33m" +else + context_color=$green +fi +sep="${dim}ยท${reset}" + +printf "${cyan}%s${reset} ${sep} ${magenta}%s${reset}\n${blue}%s${reset}${dim} on${reset} ${green}%s${reset} ${sep} ${context_color}%s ctx${reset} ${dim}(%s tok)${reset}\n" \ + "$model" "$effort" "$repo" "$branch" "$used_context" "$used_tokens_display"