🩺 New: crew_doctor & crew_syntax - OZMAI würde nicken

"Systeme die sich selbst überprüfen" - Selbstdiagnose implementiert!

 crew_doctor - System-Diagnose:
  📋 waldwaechter.sh Version Check (erkennt veraltete Versionen!)
  📂 CRUMB_LOGS_DIR Pfad-Validierung
  🌲 Alle 17 Waldwächter Scripts vorhanden?
  🔧 Dependencies Check (jq, bc, curl)
  📊 Token-Logging in allen Scripts?
  🔑 API Key konfiguriert?

  → Warnt wenn "source lib/waldwaechter.sh" nötig ist!
  → Löst das Problem von vorhin automatisch

 crew_syntax - Syntax Check:
  🔍 bash -n für alle Scripts
  📝 lib/waldwaechter.sh + 17 Character Scripts
  📋 Alle Mission Scripts
  📊 Detaillierte Fehler-Ausgabe bei Problemen

🔧 Technische Details:
- Version-Marker via mtime (modification time)
- Export WALDWAECHTER_LOADED_${mtime}=1
- crew_doctor erkennt ob Version aktuell ist
- LC-independent (stat -f macOS, stat -c Linux)

🔍 OZMAI-Prinzip: "Ich schau drauf, nicht drüber hinweg"
→ Präventive Diagnose statt reaktive Fehlersuche

Neue Befehle in crew_help dokumentiert.

🤖 Generated with Claude Code
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Branko May Trinkwald
2025-12-21 19:38:35 +01:00
parent 0700ec0a41
commit 7151749826

View File

@@ -221,6 +221,192 @@ function crew_memory() {
fi
}
# 🩺 crew_doctor - System-Diagnose
function crew_doctor() {
echo "🩺 CrumbCrew System-Diagnose"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
local issues=0
# 1. Waldwaechter.sh Version Check
echo "📋 Checking waldwaechter.sh..."
local lib_file="${WALDWAECHTER_DIR}/lib/waldwaechter.sh"
if [[ -f "$lib_file" ]]; then
local lib_mtime=$(stat -f "%m" "$lib_file" 2>/dev/null || stat -c "%Y" "$lib_file" 2>/dev/null)
local loaded_check_var="WALDWAECHTER_LOADED_${lib_mtime}"
if [[ -z "${!loaded_check_var}" ]]; then
echo " ⚠️ waldwaechter.sh wurde aktualisiert!"
echo " → Bitte neu laden: source lib/waldwaechter.sh"
issues=$((issues + 1))
else
echo " ✅ waldwaechter.sh ist aktuell"
fi
else
echo " ❌ waldwaechter.sh nicht gefunden!"
issues=$((issues + 1))
fi
# 2. CRUMB_LOGS_DIR Check
echo ""
echo "📂 Checking CRUMB_LOGS_DIR..."
if [[ -d "$CRUMB_LOGS_DIR" ]]; then
echo "$CRUMB_LOGS_DIR existiert"
# Prüfe ob es der richtige Pfad ist (sollte im Repo sein)
if [[ "$CRUMB_LOGS_DIR" == *"CF_Zero_V1/logs"* ]]; then
echo " ✅ Pfad sieht korrekt aus"
else
echo " ⚠️ Pfad sieht ungewöhnlich aus: $CRUMB_LOGS_DIR"
echo " Erwartet: .../CF_Zero_V1/logs"
issues=$((issues + 1))
fi
else
echo "$CRUMB_LOGS_DIR existiert nicht!"
issues=$((issues + 1))
fi
# 3. Character Scripts Check
echo ""
echo "🌲 Checking 17 Waldwächter Scripts..."
local expected_chars=("mayaeule" "deepbit" "bugsy" "schnippsi" "templatus" "tobi" "schraubaer" "schnecki" "dumbosql" "funkfox" "taichitaube" "snakepy" "pepperphp" "crabbyrust" "spider" "vektor" "asciimonster")
local missing_count=0
for char in "${expected_chars[@]}"; do
local script="${ROLES_DIR}/${char}_zero.sh"
[[ "$char" == "schraubaer" ]] && script="${ROLES_DIR}/schraubaer_zero_final.sh"
if [[ ! -f "$script" ]]; then
echo "$char Script fehlt!"
missing_count=$((missing_count + 1))
fi
done
if [[ $missing_count -eq 0 ]]; then
echo " ✅ Alle 17 Waldwächter Scripts vorhanden"
else
echo "$missing_count Scripts fehlen!"
issues=$((issues + 1))
fi
# 4. Dependencies Check
echo ""
echo "🔧 Checking Dependencies..."
local deps_ok=0
for cmd in jq bc curl; do
if command -v "$cmd" &> /dev/null; then
echo "$cmd verfügbar"
deps_ok=$((deps_ok + 1))
else
echo "$cmd fehlt!"
issues=$((issues + 1))
fi
done
# 5. Token-Logging Check
echo ""
echo "📊 Checking Token-Logging..."
local scripts_with_logging=$(grep -l "token_log.json" "${ROLES_DIR}"/*.sh 2>/dev/null | wc -l | tr -d ' ')
if [[ $scripts_with_logging -eq 17 ]]; then
echo " ✅ Alle 17 Scripts haben Token-Logging"
else
echo " ⚠️ Nur $scripts_with_logging/17 Scripts haben Token-Logging"
issues=$((issues + 1))
fi
# 6. API Key Check
echo ""
echo "🔑 Checking API Key..."
if [[ -n "$OPENROUTER_API_KEY" ]]; then
echo " ✅ OPENROUTER_API_KEY gesetzt"
else
echo " ⚠️ OPENROUTER_API_KEY nicht gesetzt"
echo " → Bitte in .env konfigurieren"
issues=$((issues + 1))
fi
# Summary
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
if [[ $issues -eq 0 ]]; then
echo " ✅ Alle Checks bestanden! System gesund 💚"
else
echo " ⚠️ $issues Problem(e) gefunden"
echo " Bitte oben genannte Punkte beheben"
fi
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
}
# 🔍 crew_syntax - Syntax Check aller Scripts
function crew_syntax() {
echo "🔍 CrumbCrew Syntax Check"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
local errors=0
local checked=0
echo "Prüfe Waldwächter Scripts..."
echo ""
# Check lib/waldwaechter.sh
if bash -n "${WALDWAECHTER_DIR}/lib/waldwaechter.sh" 2>/dev/null; then
echo " ✅ lib/waldwaechter.sh"
else
echo " ❌ lib/waldwaechter.sh - SYNTAX ERROR!"
bash -n "${WALDWAECHTER_DIR}/lib/waldwaechter.sh"
errors=$((errors + 1))
fi
checked=$((checked + 1))
# Check all character scripts
for script in "${ROLES_DIR}"/*_zero*.sh; do
if [[ -f "$script" ]]; then
local name=$(basename "$script")
if bash -n "$script" 2>/dev/null; then
echo "$name"
else
echo "$name - SYNTAX ERROR!"
echo ""
bash -n "$script" 2>&1 | sed 's/^/ /'
echo ""
errors=$((errors + 1))
fi
checked=$((checked + 1))
fi
done
# Check mission scripts (optional)
echo ""
echo "Prüfe Mission Scripts..."
echo ""
for script in "${WALDWAECHTER_DIR}/missions"/*/*.sh; do
if [[ -f "$script" ]]; then
local name=$(basename "$script")
if bash -n "$script" 2>/dev/null; then
echo "$name"
else
echo "$name - SYNTAX ERROR!"
errors=$((errors + 1))
fi
checked=$((checked + 1))
fi
done
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
if [[ $errors -eq 0 ]]; then
echo "$checked Scripts geprüft - Keine Syntax-Fehler! 💚"
else
echo "$errors von $checked Scripts haben Syntax-Fehler"
fi
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
}
# ❓ crew_help - Hilfe für Crew-Befehle
function crew_help() {
cat << 'EOF'
@@ -233,6 +419,8 @@ Crew-Verwaltung:
crew_status Status aller 17 Waldwächter
crew_tokens Token-Verbrauch ALLER Charaktere
crew_memory Erinnerungen durchsuchen
crew_doctor System-Diagnose (Version, Pfade, Dependencies)
crew_syntax Syntax Check aller Scripts
Einzelne Waldwächter:
@@ -295,4 +483,12 @@ export -f asciimonster
export -f crew_tokens
export -f crew_status
export -f crew_memory
export -f crew_doctor
export -f crew_syntax
export -f crew_help
# Set version marker for crew_doctor to detect reloads
if [[ -f "${WALDWAECHTER_DIR}/lib/waldwaechter.sh" ]]; then
WALDWAECHTER_LIB_MTIME=$(stat -f "%m" "${WALDWAECHTER_DIR}/lib/waldwaechter.sh" 2>/dev/null || stat -c "%Y" "${WALDWAECHTER_DIR}/lib/waldwaechter.sh" 2>/dev/null)
export "WALDWAECHTER_LOADED_${WALDWAECHTER_LIB_MTIME}=1"
fi