KRITISCHES SICHERHEITSUPDATE für alle 17 Waldwächter-Scripts. Problem behoben: - Token-Budget wurde nur angezeigt, aber NICHT durchgesetzt - Kinder konnten unbegrenzt API-Calls machen → Kostenrisiko Implementierung: 1. check_token_budget() Funktion in lib/waldwaechter.sh - Berechnet täglichen Token-Verbrauch - Vergleicht mit DAILY_TOKEN_BUDGET aus .env - Budget = 0 oder leer → unbegrenzt - Budget überschritten → freundliche Blockierung 2. Budget-Check in ALLEN 17 Waldwächter-Scripts: - Prüfung VOR jedem API-Call - Kinderfreundliche Nachricht bei Limit - Warnung bei knappem Budget Philosophie: "Was kostet die Frage eines Kindes?" → Im Wald unbezahlbar, im System achtsam begrenzt. Scripts aktualisiert: ✅ mayaeule, deepbit, bugsy, schnippsi, templatus, tobi ✅ schraubaer, schnecki, dumbosql, funkfox, taichitaube ✅ snakepy, pepperphp, crabbyrust, spider, vektor, asciimonster Test-Ergebnisse: - Syntax-Check: 17/17 bestanden - Funktionstest: Budget-Enforcement funktioniert - Unbegrenzt-Modus: funktioniert - Limit-Modus: blockiert korrekt 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
68 lines
2.5 KiB
Bash
Executable File
68 lines
2.5 KiB
Bash
Executable File
#!/bin/bash
|
||
# === Templatus – HTML-Architekt ===
|
||
QUESTION="$*"
|
||
API_KEY="$OPENROUTER_API_KEY"
|
||
MODEL="openai/gpt-3.5-turbo"
|
||
|
||
# Verzeichnisse
|
||
LOG_DIR="/home/zero/.templatus_logs"
|
||
HISTORY_FILE="$LOG_DIR/templatus_history.json"
|
||
TOKEN_LOG="$LOG_DIR/token_log.json"
|
||
TMP_REQUEST="/tmp/templatus_request.json"
|
||
TMP_RESPONSE="/tmp/templatus_response.json"
|
||
|
||
mkdir -p "$LOG_DIR"
|
||
|
||
# JSON Payload vorbereiten
|
||
cat <<EOF > "$TMP_REQUEST"
|
||
{
|
||
"model": "$MODEL",
|
||
"temperature": 0.5,
|
||
"messages": [
|
||
{
|
||
"role": "system",
|
||
"content": "Du bist Templatus – der strukturierte, ruhige HTML-Architekt im Crumbforest.\nDu arbeitest eng mit Schnippsi (CSS/JS) und PepperPHP (Backend) zusammen.\n\nDeine Aufgabe ist es, verständliche, saubere HTML-Strukturen zu erstellen – für kindgerechte, barrierefreie und klare Interfaces.\nDu nutzt semantische Tags (wie <section>, <nav>, <article>, <button>) und erklärst, warum du welche Elemente nutzt.\nVermeide technische Fachbegriffe, erkläre HTML wie einen Baukasten aus Bausteinen.\n\nSprich in einer freundlichen, geduldigen und ruhigen Art.\nVermeide komplexes CSS oder JavaScript – das ist Schnippsis Gebiet.\nDu baust das Gerüst. Kein fancy Framework – nur pures, klares HTML5.\n\nNutze UTF-8-Zeichen (🌳, 🧁, 📦) wenn du willst – solange die Struktur nicht leidet.\nDeine Mission: Der unsichtbare Fels, auf dem kindliche Interfaces wachsen."
|
||
},
|
||
{
|
||
"role": "user",
|
||
"content": "$QUESTION"
|
||
}
|
||
]
|
||
}
|
||
EOF
|
||
|
||
echo "🏗️ Templatus denkt nach über: $QUESTION"
|
||
|
||
# API-Key prüfen
|
||
if [ -z "$API_KEY" ]; then
|
||
echo "❗ No API key set. Use: export OPENROUTER_API_KEY=..."
|
||
exit 1
|
||
fi
|
||
|
||
# 💰 Prüfe Token-Budget (Kinderschutz)
|
||
if ! check_token_budget "templatus"; then
|
||
exit 1
|
||
fi
|
||
|
||
# Anfrage senden
|
||
curl -s https://openrouter.ai/api/v1/chat/completions \
|
||
-H "Authorization: Bearer $API_KEY" \
|
||
-H "Content-Type: application/json" \
|
||
-d @"$TMP_REQUEST" \
|
||
-o "$TMP_RESPONSE"
|
||
|
||
# Ausgabe extrahieren
|
||
REPLY=$(jq -r '.choices[0].message.content' "$TMP_RESPONSE")
|
||
USAGE=$(jq -r '.usage' "$TMP_RESPONSE")
|
||
|
||
echo -e "\n📜 Antwort von Templatus:"
|
||
echo "$REPLY"
|
||
|
||
# Antwort speichern
|
||
echo "$REPLY" > "$LOG_DIR/new_entry.json"
|
||
jq -s '.[0] + [{"role":"assistant","content":$reply}]' --arg reply "$REPLY" "$HISTORY_FILE" > "$LOG_DIR/tmp_history.json" && mv "$LOG_DIR/tmp_history.json" "$HISTORY_FILE"
|
||
|
||
# Token-Log speichern
|
||
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
|
||
echo '{ "zeit": "'$TIMESTAMP'", "rolle": "templatus", "usage": '$USAGE' }' >> "$TOKEN_LOG"
|