🩺 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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user