feat(claude): add statusline
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -122,3 +122,4 @@ mako/*
|
|||||||
claude/*
|
claude/*
|
||||||
!claude/CLAUDE.md
|
!claude/CLAUDE.md
|
||||||
!claude/settings.json
|
!claude/settings.json
|
||||||
|
!claude/statusline-command.sh
|
||||||
|
|||||||
@@ -7,8 +7,12 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hooks": {},
|
"hooks": {},
|
||||||
"voiceEnabled": true,
|
"statusLine": {
|
||||||
|
"type": "command",
|
||||||
|
"command": "sh \"${CLAUDE_CONFIG_DIR:-$HOME/.claude}/statusline-command.sh\""
|
||||||
|
},
|
||||||
|
"effortLevel": "xhigh",
|
||||||
"skipDangerousModePermissionPrompt": true,
|
"skipDangerousModePermissionPrompt": true,
|
||||||
"effortLevel": "high",
|
"voiceEnabled": true,
|
||||||
"mcpServers": {}
|
"mcpServers": {}
|
||||||
}
|
}
|
||||||
|
|||||||
52
claude/statusline-command.sh
Normal file
52
claude/statusline-command.sh
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
input=$(cat)
|
||||||
|
|
||||||
|
model=$(echo "$input" | jq -r '.model.display_name // empty')
|
||||||
|
total_in=$(echo "$input" | jq -r '.context_window.total_input_tokens // 0')
|
||||||
|
total_out=$(echo "$input" | jq -r '.context_window.total_output_tokens // 0')
|
||||||
|
ctx=$(echo "$input" | jq -r '.context_window.used_percentage // empty')
|
||||||
|
five_hr=$(echo "$input" | jq -r '.rate_limits.five_hour.used_percentage // empty')
|
||||||
|
five_hr_reset=$(echo "$input" | jq -r '.rate_limits.five_hour.resets_at // empty')
|
||||||
|
seven_day=$(echo "$input" | jq -r '.rate_limits.seven_day.used_percentage // empty')
|
||||||
|
seven_day_reset=$(echo "$input" | jq -r '.rate_limits.seven_day.resets_at // empty')
|
||||||
|
|
||||||
|
# format seconds until reset as human-readable
|
||||||
|
fmt_remaining() {
|
||||||
|
now=$(date +%s)
|
||||||
|
diff=$(( $1 - now ))
|
||||||
|
[ "$diff" -le 0 ] && return
|
||||||
|
h=$(( diff / 3600 ))
|
||||||
|
m=$(( (diff % 3600) / 60 ))
|
||||||
|
if [ "$h" -gt 0 ]; then
|
||||||
|
printf '%dh%dm' "$h" "$m"
|
||||||
|
else
|
||||||
|
printf '%dm' "$m"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
parts=""
|
||||||
|
|
||||||
|
[ -n "$model" ] && parts="$model"
|
||||||
|
|
||||||
|
if [ -n "$total_in" ] && [ "$total_in" != "0" ]; then
|
||||||
|
total=$((total_in + total_out))
|
||||||
|
parts="${parts:+$parts | }tokens:${total}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$ctx" ]; then
|
||||||
|
parts="${parts:+$parts | }ctx:$(printf '%.0f' "$ctx")%"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$five_hr" ]; then
|
||||||
|
five_hr_ttl=""
|
||||||
|
[ -n "$five_hr_reset" ] && five_hr_ttl=$(fmt_remaining "$five_hr_reset")
|
||||||
|
parts="${parts:+$parts | }5h:$(printf '%.0f' "$five_hr")%${five_hr_ttl:+($five_hr_ttl)}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$seven_day" ]; then
|
||||||
|
seven_day_ttl=""
|
||||||
|
[ -n "$seven_day_reset" ] && seven_day_ttl=$(fmt_remaining "$seven_day_reset")
|
||||||
|
parts="${parts:+$parts | }7d:$(printf '%.0f' "$seven_day")%${seven_day_ttl:+($seven_day_ttl)}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ -n "$parts" ] && printf '%s' "$parts"
|
||||||
Reference in New Issue
Block a user