diff --git a/crumb-mission-selector.sh b/crumb-mission-selector.sh index ea7cd10..a8c19c8 100755 --- a/crumb-mission-selector.sh +++ b/crumb-mission-selector.sh @@ -589,6 +589,224 @@ EOF rm -f "${EULE_RC}" } +# ============================================================ +# CRUMBCREW COMMAND CENTRAL (Alle WaldwΓ€chter) +# ============================================================ + +function crumbcrew_doktor() { + echo -e "${GREEN}--- 🌲 CrumbCrew Command Central ---${NC}" + echo -e "${CYAN}Alle WaldwΓ€chter versammeln sich!${NC}" + echo "" + + if [[ "$AI_AVAILABLE" == "false" ]] || [[ -z "$OPENROUTER_API_KEY" ]]; then + echo -e "${YELLOW}⚠️ CrumbCrew braucht einen API-Key${NC}" + echo "" + echo "Bitte konfiguriere .env mit OPENROUTER_API_KEY" + read -p "DrΓΌcke Enter..." -r + return + fi + + # TemporΓ€res RC File fΓΌr die Shell + CREW_RC="/tmp/crumb_crew_$$.rc" + + # Pfade zu allen Charakteren + CREW_DIR="${SCRIPT_DIR}/crumbforest_roles" + + cat > "${CREW_RC}" << EOF +# Load .bashrc if exists +if [ -f /etc/bashrc ]; then source /etc/bashrc; fi +if [ -f ~/.bashrc ]; then source ~/.bashrc; fi + +# Farben +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +CYAN='\033[0;36m' +BLUE='\033[0;34m' +RED='\033[0;31m' +MAGENTA='\033[1;35m' +NC='\033[0m' + +# Prompt im CrumbCrew-Style +export PS1="\[\033[1;32m\](🌲 CrumbCrew) \u@\h:\w\$ \[\033[0m\]" + +# Pfad zu den Charakteren +CREW_DIR="${CREW_DIR}" + +# === WALDWΓ„CHTER FUNKTIONEN === + +function mayaeule() { + if [[ -z "\$1" ]]; then + echo -e "\${YELLOW}Verwendung: mayaeule \"Deine Frage\"\${NC}" + return + fi + echo -e "\${MAGENTA}πŸ¦‰ Maya-Eule erwacht...\${NC}" + "\$CREW_DIR/mayaeule_zero.sh" "\$@" +} + +function deepbit() { + if [[ -z "\$1" ]]; then + echo -e "\${YELLOW}Verwendung: deepbit \"Deine Frage\"\${NC}" + return + fi + echo -e "\${BLUE}πŸ™ Deepbit taucht auf...\${NC}" + "\$CREW_DIR/deepbit_zero.sh" "\$@" +} + +function bugsy() { + if [[ -z "\$1" ]]; then + echo -e "\${YELLOW}Verwendung: bugsy \"Deine Frage\"\${NC}" + return + fi + echo -e "\${RED}🐞 Bugsy analysiert...\${NC}" + "\$CREW_DIR/bugsy_zero.sh" "\$@" +} + +function schnippsi() { + if [[ -z "\$1" ]]; then + echo -e "\${YELLOW}Verwendung: schnippsi \"Deine Frage\"\${NC}" + return + fi + echo -e "\${CYAN}βœ‚οΈ Schnippsi schnippelt...\${NC}" + "\$CREW_DIR/schnippsi_zero.sh" "\$@" +} + +function tobi() { + if [[ -z "\$1" ]]; then + echo -e "\${YELLOW}Verwendung: tobi \"Deine Frage\"\${NC}" + return + fi + echo -e "\${GREEN}πŸ€– Tobi rechnet...\${NC}" + "\$CREW_DIR/tobi_zero.sh" "\$@" +} + +# === CREW MANAGEMENT === + +function crew_help() { + echo -e "\${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\${NC}" + echo -e "\${GREEN} 🌲 CrumbCrew Command Central 🌲 \${NC}" + echo -e "\${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\${NC}" + echo "" + echo -e "\${CYAN}Die WaldwΓ€chter (VerfΓΌgbare Charaktere):\${NC}" + echo "" + echo -e " \${MAGENTA}πŸ¦‰ mayaeule\${NC} - Die weise Eule (Philosophie, Weisheit)" + echo -e " \${BLUE}πŸ™ deepbit\${NC} - Der poetische Oktopus (Bash-Konzepte)" + echo -e " \${RED}🐞 bugsy\${NC} - Der Debugging-Clown (Fehlersuche)" + echo -e " \${CYAN}βœ‚οΈ schnippsi\${NC} - Der Shell-Helfer (Kommandos)" + echo -e " \${GREEN}πŸ€– tobi\${NC} - Der Daten-Experte (JSON, Daten)" + echo "" + echo -e "\${YELLOW}Crew-Befehle:\${NC}" + echo " crew_status - Status aller WaldwΓ€chter" + echo " crew_tokens - Token-Verbrauch aller Charaktere" + echo " crew_memory - Erinnerungen aller Charaktere" + echo " crew_help - Diese Hilfe" + echo " exit - ZurΓΌck zum HauptmenΓΌ" + echo "" + echo -e "\${CYAN}Beispiele:\${NC}" + echo " mayaeule \"Was ist das Leben?\"" + echo " deepbit \"ErklΓ€re Pipes und Redirects\"" + echo " bugsy \"Warum funktioniert mein Script nicht?\"" + echo " schnippsi \"Wie nutze ich grep?\"" + echo " tobi \"Parse dieses JSON\"" + echo "" + echo -e "\${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\${NC}" +} + +function crew_status() { + echo -e "\${CYAN}🌲 CrumbCrew Status\${NC}" + echo "" + + CHARS=("mayaeule:πŸ¦‰:Maya-Eule" "deepbit:πŸ™:Deepbit" "bugsy:🐞:Bugsy" "schnippsi:βœ‚οΈ:Schnippsi" "tobi:πŸ€–:Tobi") + + for char_info in "\${CHARS[@]}"; do + IFS=: read -r name icon display <<< "\$char_info" + if [[ -x "\$CREW_DIR/\${name}_zero.sh" ]]; then + echo -e " \${GREEN}βœ… \$icon \$display\${NC} - Bereit" + else + echo -e " \${RED}❌ \$icon \$display\${NC} - Nicht verfΓΌgbar" + fi + done + + echo "" + echo -e "\${YELLOW}API Status:\${NC}" + if [[ -n "\$OPENROUTER_API_KEY" ]]; then + echo -e " \${GREEN}βœ… OpenRouter API\${NC} - Konfiguriert" + else + echo -e " \${RED}❌ Kein API-Key\${NC}" + fi +} + +function crew_tokens() { + echo -e "\${CYAN}πŸ“Š CrumbCrew Token-Verbrauch\${NC}" + echo "" + + TOTAL=0 + + for logdir in ~/.{mayaeule,eule,deepbit,bugsy,schnippsi,tobi}_logs; do + if [[ -d "\$logdir" ]] && [[ -f "\$logdir/token_log.json" ]]; then + char_name=\$(basename "\$logdir" | sed 's/_logs//') + char_tokens=0 + + while IFS= read -r line; do + tokens=\$(echo "\$line" | jq -r '.usage.total_tokens' 2>/dev/null) + if [[ "\$tokens" != "null" ]] && [[ -n "\$tokens" ]]; then + char_tokens=\$((char_tokens + tokens)) + fi + done < "\$logdir/token_log.json" + + if [[ \$char_tokens -gt 0 ]]; then + echo -e " \${GREEN}\$char_name:\${NC} \$char_tokens Tokens" + TOTAL=\$((TOTAL + char_tokens)) + fi + fi + done + + echo "" + echo -e "\${YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\${NC}" + echo -e " \${GREEN}Gesamt: \$TOTAL Tokens\${NC}" + echo -e " \${CYAN}Jede Frage ist wertvoll 🌲\${NC}" + echo -e "\${YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\${NC}" +} + +function crew_memory() { + echo -e "\${CYAN}πŸ“œ CrumbCrew Erinnerungen\${NC}" + echo "" + + for logdir in ~/.{mayaeule,eule,deepbit,bugsy,schnippsi,tobi}_logs; do + if [[ -d "\$logdir" ]] && [[ -f "\$logdir/*_history.json" ]]; then + char_name=\$(basename "\$logdir" | sed 's/_logs//') + count=\$(jq '. | length' "\$logdir/*_history.json" 2>/dev/null) + if [[ "\$count" != "null" ]] && [[ \$count -gt 0 ]]; then + echo -e " \${GREEN}\$char_name:\${NC} \$count GesprΓ€che" + fi + fi + done +} + +alias help="crew_help" +alias status="crew_status" +alias tokens="crew_tokens" +alias memory="crew_memory" + +# Willkommensnachricht +clear +echo -e "\${GREEN}" +cat << 'CREWEOF' + 🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲 + + CrumbCrew Command Central + Alle WaldwΓ€chter vereint! + + 🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲 +CREWEOF +echo -e "\${NC}" +echo "" +crew_help +EOF + + bash --rcfile "${CREW_RC}" + rm -f "${CREW_RC}" +} + # ============================================================ # HAUPTMENÜ # ============================================================ @@ -606,10 +824,11 @@ function main_menu() { echo "6) 🌲 Git Doktor" echo "7) πŸ€– AI & Token-Tracking" echo "8) πŸ¦‰ Maya-Eule Weisheit" + echo "9) 🌲 CrumbCrew - Alle WaldwΓ€chter" echo "" - echo "9) πŸ‘‹ Beenden" + echo "10) πŸ‘‹ Beenden" echo "" - read -p "Auswahl [1-9]: " CHOICE + read -p "Auswahl [1-10]: " CHOICE case $CHOICE in 1) run_mission_menu "basics" "πŸ“š Basics - Einsteiger" ;; @@ -620,7 +839,8 @@ function main_menu() { 6) git_doktor ;; 7) ai_doktor ;; 8) mayaeule_doktor ;; - 9) + 9) crumbcrew_doktor ;; + 10) clear echo -e "${GREEN}" echo "πŸ‘‹ Auf bald im Crumbforest!" @@ -628,7 +848,7 @@ function main_menu() { exit 0 ;; *) - echo -e "${RED}Bitte 1-9 wΓ€hlen.${NC}" + echo -e "${RED}Bitte 1-10 wΓ€hlen.${NC}" sleep 1 ;; esac