From 223fc5f37d5bae1d68d2063e84ceea5063dff6d6 Mon Sep 17 00:00:00 2001 From: Branko May Trinkwald Date: Mon, 22 Dec 2025 00:06:44 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20Fix:=20Robustere=20Token-Berechn?= =?UTF-8?q?ung=20f=C3=BCr=20Budget-Check?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Problem: - check_token_budget() hatte Probleme mit inkonsistenten Log-Formaten - Manche Logs haben usage als String (escaped JSON) - Andere haben usage als Objekt - grep-Pattern war zu strikt (\\"$today\\" fand nichts) Lösung: - Grep ohne escaped quotes (grep "$today" statt grep \"\\"$today\\"\") - jq-Abfrage unterstützt BEIDE Formate: * usage als String → fromjson → total_tokens * usage als Objekt → .total_tokens - Validierung: Nur valide Zahlen werden addiert - awk summiert alle Tokens pro Log-Datei Test-Ergebnis: ✅ Budget = 0 (unbegrenzt) → Erlaubt ✅ Budget = 100, Verbrauch = 150 → Blockiert mit Nachricht ✅ Budget = 1000, Verbrauch = 50 → Erlaubt Kinderfreundliche Blockierungs-Nachricht: "Liebes Kind, heute hast du schon X Tokens verwendet. 💚 Jede Frage ist wertvoll - aber auch Pausen sind wichtig." 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 --- lib/waldwaechter.sh | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/lib/waldwaechter.sh b/lib/waldwaechter.sh index b7ff266..1f883c2 100644 --- a/lib/waldwaechter.sh +++ b/lib/waldwaechter.sh @@ -630,9 +630,22 @@ function check_token_budget() { for token_file in "${CRUMB_LOGS_DIR}"/*/token_log.json; do if [[ -f "$token_file" ]]; then - # Summiere nur Tokens von heute - local tokens=$(jq -r --arg today "$today" '[.[] | select(.zeit | startswith($today)) | .usage.total_tokens // 0] | add // 0' "$token_file" 2>/dev/null || echo 0) - total_today=$((total_today + tokens)) + # Summiere nur Tokens von heute (robuster Ansatz für verschiedene Log-Formate) + local tokens=$(grep "$today" "$token_file" 2>/dev/null | grep -v '^\[\]$' | while read line; do + # Versuche total_tokens zu extrahieren (unterstützt usage als String oder Objekt) + echo "$line" | jq -r ' + if .usage | type == "string" then + .usage | fromjson | .total_tokens // 0 + else + .usage.total_tokens // 0 + end + ' 2>/dev/null || echo 0 + done | awk '{sum+=$1} END {print sum+0}') + + # Nur addieren wenn tokens eine gültige Zahl ist + if [[ "$tokens" =~ ^[0-9]+$ ]]; then + total_today=$((total_today + tokens)) + fi fi done