110 lines
3.6 KiB
Bash
Executable File
110 lines
3.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# Analysiert welche Skills in welchen Projekten genutzt wurden
|
|
# Liest Claude-Logs aus ~/.claude/projects/*/memory/ und Vault-Logs
|
|
|
|
set -e
|
|
|
|
VAULT="$HOME/Work/claude-vault"
|
|
OUTPUT="$VAULT/memory/skill-usage-matrix.md"
|
|
TEMP_FILE="/tmp/skill-usage-temp.txt"
|
|
|
|
echo "🔍 Analysiere Skill-Nutzung..."
|
|
|
|
# Header erstellen
|
|
cat > "$OUTPUT" <<EOF
|
|
# Skill Usage Matrix
|
|
**Letzte Aktualisierung:** $(date +%Y-%m-%d %H:%M)
|
|
|
|
Zeigt welche Skills in welchen Projekten genutzt wurden.
|
|
|
|
| Skill | Projekt | Häufigkeit | Letzte Nutzung |
|
|
|-------|---------|------------|----------------|
|
|
EOF
|
|
|
|
# Temporäre Datei leeren
|
|
> "$TEMP_FILE"
|
|
|
|
# 1. Durchsuche Vault-Memory-Logs nach Skill-Erwähnungen
|
|
if [ -d "$VAULT/memory/log" ]; then
|
|
find "$VAULT/memory/log" -name "*.md" -type f | while read log_file; do
|
|
# Extrahiere Projekt-Namen aus dem Log
|
|
PROJECT=$(grep "^\*\*Projekt:\*\*" "$log_file" | head -1 | sed 's/\*\*Projekt:\*\* //' | xargs)
|
|
|
|
# Wenn kein Projekt gefunden, skip
|
|
[ -z "$PROJECT" ] && continue
|
|
|
|
# Extrahiere Skill-Erwähnungen (z.B. /lp-django-model oder lp-django-model)
|
|
grep -oE '(/[a-z][a-z0-9-]+|skill-creator|vault-janitor|reviewer|doc-gen|sparring-partner|lp-[a-z-]+)' "$log_file" 2>/dev/null | \
|
|
sed 's|^/||' | \
|
|
grep -v '^-' | \
|
|
while read skill; do
|
|
# Letzte Nutzung (Datum aus Filename)
|
|
LAST_USED=$(basename "$log_file" | grep -oE '[0-9]{4}-[0-9]{2}-[0-9]{2}')
|
|
echo "${skill}|${PROJECT}|${LAST_USED}" >> "$TEMP_FILE"
|
|
done
|
|
done
|
|
fi
|
|
|
|
# 2. Durchsuche Projekt-MEMORYs in ~/.claude/projects/
|
|
if [ -d "$HOME/.claude/projects" ]; then
|
|
find "$HOME/.claude/projects" -name "MEMORY.md" -type f | while read memory_file; do
|
|
PROJECT=$(basename "$(dirname "$(dirname "$memory_file")")" | sed 's|-|/|g')
|
|
|
|
# Extrahiere Skill-Erwähnungen
|
|
grep -oE '(/[a-z][a-z0-9-]+|skill-creator|vault-janitor|reviewer|doc-gen|sparring-partner|lp-[a-z-]+)' "$memory_file" 2>/dev/null | \
|
|
sed 's|^/||' | \
|
|
grep -v '^-' | \
|
|
while read skill; do
|
|
# Letzte Nutzung (Modification Time der MEMORY.md)
|
|
LAST_USED=$(stat -f "%Sm" -t "%Y-%m-%d" "$memory_file" 2>/dev/null || echo "Unknown")
|
|
echo "${skill}|${PROJECT}|${LAST_USED}" >> "$TEMP_FILE"
|
|
done
|
|
done
|
|
fi
|
|
|
|
# 3. Aggregiere Daten und erstelle Tabelle
|
|
if [ -s "$TEMP_FILE" ]; then
|
|
# Sortiere, zähle und formatiere
|
|
sort "$TEMP_FILE" | \
|
|
awk -F'|' '{count[$1"|"$2]++; last[$1"|"$2]=$3} END {
|
|
for (key in count) {
|
|
split(key, parts, "|")
|
|
skill = parts[1]
|
|
project = parts[2]
|
|
printf "| %s | %s | %d | %s |\n", skill, project, count[key], last[key]
|
|
}
|
|
}' | \
|
|
sort -t'|' -k4 -r >> "$OUTPUT"
|
|
|
|
# Füge Statistiken hinzu
|
|
TOTAL_USAGE=$(wc -l < "$TEMP_FILE")
|
|
UNIQUE_SKILLS=$(cut -d'|' -f1 "$TEMP_FILE" | sort -u | wc -l)
|
|
UNIQUE_PROJECTS=$(cut -d'|' -f2 "$TEMP_FILE" | sort -u | wc -l)
|
|
|
|
cat >> "$OUTPUT" <<EOF
|
|
|
|
## Statistiken
|
|
|
|
- **Gesamt-Nutzungen:** ${TOTAL_USAGE}
|
|
- **Verschiedene Skills:** ${UNIQUE_SKILLS}
|
|
- **Verschiedene Projekte:** ${UNIQUE_PROJECTS}
|
|
|
|
## Top 5 Skills
|
|
|
|
EOF
|
|
|
|
# Top 5 Skills nach Häufigkeit
|
|
cut -d'|' -f1 "$TEMP_FILE" | sort | uniq -c | sort -rn | head -5 | \
|
|
awk '{printf "1. **%s** (%d Nutzungen)\n", $2, $1}' >> "$OUTPUT"
|
|
else
|
|
echo "<!-- Keine Skill-Nutzung gefunden -->" >> "$OUTPUT"
|
|
fi
|
|
|
|
# Cleanup
|
|
rm -f "$TEMP_FILE"
|
|
|
|
echo "✅ Skill-Usage-Matrix aktualisiert: $OUTPUT"
|
|
echo ""
|
|
echo "Statistiken:"
|
|
cat "$OUTPUT" | grep "^- \*\*"
|