#!/bin/bash # Aktualisiert memory/dashboard.md mit aktuellen Statistiken set -e VAULT="$HOME/Work/claude-vault" DASHBOARD="$VAULT/memory/dashboard.md" echo "📊 Aktualisiere Dashboard..." # Berechne Statistiken TOTAL_LOGS=$(find "$VAULT/memory/log" -name "*.md" -type f 2>/dev/null | wc -l | xargs) LOGS_THIS_WEEK=$(find "$VAULT/memory/log" -name "*.md" -type f -mtime -7 2>/dev/null | wc -l | xargs) TOTAL_PROPOSALS=$(find "$VAULT/skills/proposals" -name "*.md" -type f 2>/dev/null | wc -l | xargs) PATTERNS_COUNT=$(grep -c "^## " "$VAULT/memory/patterns.md" 2>/dev/null || echo 0) TOTAL_SKILLS=$(find "$VAULT/skills" -name "SKILL.md" -type f 2>/dev/null | wc -l | xargs) TOTAL_AGENTS=$(find "$VAULT/agents" -name "*.md" -type f 2>/dev/null | wc -l | xargs) TOTAL_PROJECTS=$(find "$VAULT/projects" -mindepth 1 -maxdepth 1 -type d 2>/dev/null | wc -l | xargs) # Erstelle Dashboard falls nicht vorhanden if [ ! -f "$DASHBOARD" ]; then cat > "$DASHBOARD" <<'EOF' # Vault Dashboard **Letzte Aktualisierung:** AUTO_UPDATE_DATE Zentraler Überblick über Claude-Vault Aktivität und Gesundheit. --- ## 📊 Aktivität (Letzte 30 Tage) ### Sessions - **Gesamt:** AUTO_TOTAL_LOGS - **Diese Woche:** AUTO_LOGS_THIS_WEEK - **Durchschnitt/Tag:** AUTO_AVG_PER_DAY ### Skill-Nutzung (Top 5) AUTO_TOP_SKILLS --- ## 🗂️ Ressourcen ### Skills - **Total:** AUTO_TOTAL_SKILLS - **League-Planner (lp-*):** AUTO_LP_SKILLS - **Generic:** AUTO_GENERIC_SKILLS ### Agents - **Total:** AUTO_TOTAL_AGENTS ### Projekte (Aktiv) - **Total:** AUTO_TOTAL_PROJECTS AUTO_PROJECT_LIST --- ## 💾 Memory-Gesundheit ### Logs - **Total:** AUTO_TOTAL_LOGS - **Diese Woche:** AUTO_LOGS_THIS_WEEK - **Archiviert:** AUTO_ARCHIVED_LOGS ### Patterns - **Extrahiert:** AUTO_PATTERNS_COUNT - **Letzte Distillation:** AUTO_LAST_DISTILL ### Skill-Proposals - **Offen:** AUTO_TOTAL_PROPOSALS - **Umgesetzt:** AUTO_IMPLEMENTED_PROPOSALS --- ## 🔧 Wartung ### Nächste Tasks - [ ] /vault-janitor distill (monatlich) - [ ] sync-project-memory.sh (täglich via Cron) - [ ] detect-skill-proposals.sh (wöchentlich via Cron) - [ ] analyze-skill-usage.sh (wöchentlich via Cron) ### Letzte Runs - **vault-janitor:** AUTO_LAST_JANITOR - **sync-projects:** AUTO_LAST_SYNC - **skill-detection:** AUTO_LAST_SKILL_DETECT --- ## 🎯 Handlungsempfehlungen AUTO_RECOMMENDATIONS EOF fi # Berechne zusätzliche Metriken LP_SKILLS=$(grep -l "^name: lp-" "$VAULT"/skills/*/SKILL.md 2>/dev/null | wc -l | xargs) GENERIC_SKILLS=$((TOTAL_SKILLS - LP_SKILLS)) ARCHIVED_LOGS=$(find "$VAULT/memory/log/archive" -name "*.md" -type f 2>/dev/null | wc -l | xargs) AVG_PER_DAY="0.0" if [ "$TOTAL_LOGS" -gt 0 ]; then AVG_PER_DAY=$(echo "scale=1; $LOGS_THIS_WEEK / 7" | bc) fi # Projekt-Liste PROJECT_LIST="" if [ -d "$VAULT/projects" ]; then PROJECT_LIST=$(find "$VAULT/projects" -mindepth 1 -maxdepth 1 -type d -exec basename {} \; | sed 's/^/- /' | paste -sd '\n' -) fi # Top Skills (aus skill-usage-matrix.md falls vorhanden) TOP_SKILLS="1. (Führe analyze-skill-usage.sh aus)" if [ -f "$VAULT/memory/skill-usage-matrix.md" ]; then TOP_SKILLS=$(grep "^1\. " "$VAULT/memory/skill-usage-matrix.md" 2>/dev/null | head -5 | paste -sd '\n' - || echo "1. (Keine Daten)") fi # Letzte Runs (aus Script-Modification-Times) LAST_JANITOR="Never" LAST_SYNC="Never" LAST_SKILL_DETECT="Never" if [ -f "$VAULT/memory/patterns.md" ]; then LAST_JANITOR=$(stat -f "%Sm" -t "%Y-%m-%d %H:%M" "$VAULT/memory/patterns.md" 2>/dev/null || echo "Never") fi if [ -f "$VAULT/memory/skill-usage-matrix.md" ]; then LAST_SKILL_DETECT=$(stat -f "%Sm" -t "%Y-%m-%d %H:%M" "$VAULT/memory/skill-usage-matrix.md" 2>/dev/null || echo "Never") fi # Handlungsempfehlungen generieren RECOMMENDATIONS="" if [ "$LOGS_THIS_WEEK" -eq 0 ]; then RECOMMENDATIONS="${RECOMMENDATIONS}- ⚠️ **Keine Logs diese Woche** → Session-Logging aktivieren mit \`claude-done\`\n" fi if [ "$TOTAL_PROPOSALS" -gt 0 ]; then RECOMMENDATIONS="${RECOMMENDATIONS}- 💡 **${TOTAL_PROPOSALS} offene Skill-Proposals** → Reviewen mit \`vault-proposals\`\n" fi if [ "$PATTERNS_COUNT" -lt 5 ]; then RECOMMENDATIONS="${RECOMMENDATIONS}- 📚 **Wenig Patterns extrahiert** → \`/vault-janitor distill\` ausführen\n" fi if [ -z "$RECOMMENDATIONS" ]; then RECOMMENDATIONS="✅ Alles im grünen Bereich!" fi # Ersetze Platzhalter im Dashboard sed -i.bak \ -e "s|AUTO_UPDATE_DATE|$(date +%Y-%m-%d\ %H:%M)|" \ -e "s|AUTO_TOTAL_LOGS|${TOTAL_LOGS}|g" \ -e "s|AUTO_LOGS_THIS_WEEK|${LOGS_THIS_WEEK}|g" \ -e "s|AUTO_AVG_PER_DAY|${AVG_PER_DAY}|" \ -e "s|AUTO_TOTAL_SKILLS|${TOTAL_SKILLS}|" \ -e "s|AUTO_LP_SKILLS|${LP_SKILLS}|" \ -e "s|AUTO_GENERIC_SKILLS|${GENERIC_SKILLS}|" \ -e "s|AUTO_TOTAL_AGENTS|${TOTAL_AGENTS}|" \ -e "s|AUTO_TOTAL_PROJECTS|${TOTAL_PROJECTS}|" \ -e "s|AUTO_ARCHIVED_LOGS|${ARCHIVED_LOGS}|" \ -e "s|AUTO_PATTERNS_COUNT|${PATTERNS_COUNT}|" \ -e "s|AUTO_TOTAL_PROPOSALS|${TOTAL_PROPOSALS}|" \ -e "s|AUTO_IMPLEMENTED_PROPOSALS|0|" \ -e "s|AUTO_LAST_DISTILL|${LAST_JANITOR}|" \ -e "s|AUTO_LAST_JANITOR|${LAST_JANITOR}|" \ -e "s|AUTO_LAST_SYNC|${LAST_SYNC}|" \ -e "s|AUTO_LAST_SKILL_DETECT|${LAST_SKILL_DETECT}|" \ "$DASHBOARD" # Ersetze dynamische Listen (komplexer) awk -v top_skills="$TOP_SKILLS" ' /AUTO_TOP_SKILLS/ {print top_skills; next} {print} ' "$DASHBOARD" > "$DASHBOARD.tmp" && mv "$DASHBOARD.tmp" "$DASHBOARD" awk -v project_list="$PROJECT_LIST" ' /AUTO_PROJECT_LIST/ {print project_list; next} {print} ' "$DASHBOARD" > "$DASHBOARD.tmp" && mv "$DASHBOARD.tmp" "$DASHBOARD" awk -v recs="$RECOMMENDATIONS" ' /AUTO_RECOMMENDATIONS/ {printf "%s\n", recs; next} {print} ' "$DASHBOARD" > "$DASHBOARD.tmp" && mv "$DASHBOARD.tmp" "$DASHBOARD" rm -f "$DASHBOARD.bak" "$DASHBOARD.tmp" echo "✅ Dashboard aktualisiert: $DASHBOARD" echo "" echo "Quick Stats:" echo " - Skills: $TOTAL_SKILLS ($LP_SKILLS lp-*, $GENERIC_SKILLS generic)" echo " - Logs: $TOTAL_LOGS total, $LOGS_THIS_WEEK diese Woche" echo " - Proposals: $TOTAL_PROPOSALS offen" echo " - Patterns: $PATTERNS_COUNT extrahiert"