-
Notifications
You must be signed in to change notification settings - Fork 28
Expand file tree
/
Copy pathstatusline.sh
More file actions
executable file
·78 lines (61 loc) · 2.44 KB
/
statusline.sh
File metadata and controls
executable file
·78 lines (61 loc) · 2.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/bin/bash
# Read JSON input from stdin
input=$(cat)
# Extract information from JSON
model_name=$(echo "$input" | jq -r '.model.display_name')
current_dir=$(echo "$input" | jq -r '.workspace.current_dir')
# Extract context window information
context_size=$(echo "$input" | jq -r '.context_window.context_window_size // 200000')
current_usage=$(echo "$input" | jq '.context_window.current_usage')
# Calculate context percentage
if [ "$current_usage" != "null" ]; then
current_tokens=$(echo "$current_usage" | jq '.input_tokens + .cache_creation_input_tokens + .cache_read_input_tokens')
context_percent=$((current_tokens * 100 / context_size))
else
context_percent=0
fi
# Build context progress bar (20 chars wide)
bar_width=15
filled=$((context_percent * bar_width / 100))
empty=$((bar_width - filled))
bar=""
for ((i=0; i<filled; i++)); do bar+="█"; done
for ((i=0; i<empty; i++)); do bar+="░"; done
# Get directory name (basename)
dir_name=$(basename "$current_dir")
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[0;33m'
CYAN='\033[0;36m'
GRAY='\033[0;90m'
NC='\033[0m' # No Color
# Change to the current directory to get git info
cd "$current_dir" 2>/dev/null || cd /
# Get git branch
if git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
branch=$(git branch --show-current 2>/dev/null || echo "detached")
# Get git status with file counts
status_output=$(git status --porcelain 2>/dev/null)
if [ -n "$status_output" ]; then
# Count files and get basic line stats
total_files=$(echo "$status_output" | wc -l | xargs)
line_stats=$(git diff --numstat HEAD 2>/dev/null | awk '{added+=$1; removed+=$2} END {print added+0, removed+0}')
added=$(echo $line_stats | cut -d' ' -f1)
removed=$(echo $line_stats | cut -d' ' -f2)
# Build status display
git_info=" ${YELLOW}($branch${NC} ${YELLOW}|${NC} ${GRAY}${total_files} files${NC}"
[ "$added" -gt 0 ] && git_info="${git_info} ${GREEN}+${added}${NC}"
[ "$removed" -gt 0 ] && git_info="${git_info} ${RED}-${removed}${NC}"
git_info="${git_info} ${YELLOW})${NC}"
else
git_info=" ${YELLOW}($branch)${NC}"
fi
else
git_info=""
fi
# Build context bar display
context_info="${GRAY}${bar}${NC} ${context_percent}%"
# Output the status line
echo -e "${BLUE}${dir_name}${NC} ${GRAY}|${NC} ${CYAN}${model_name}${NC} ${GRAY}|${NC} ${context_info}${git_info:+ ${GRAY}|${NC}}${git_info}"