claude-vault/scripts/update-dashboard.sh
2026-02-04 22:35:40 +01:00

196 lines
6.1 KiB
Bash
Executable File

#!/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-generated via analyze-skill-usage.sh -->
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"