0ac805b6fc
Critical Fixes: - Docker permissions for PostgreSQL/Redis bind mounts Fixes #59, fixes #62 - Audio analyzer memory consumption and OOM crashes Fixes #21, fixes #26, fixes #53 - LastFM array normalization preventing .map crashes Fixes #37, fixes #39 - Wikidata 403 errors from missing User-Agent Fixes #57 - Singles directory creation race conditions Fixes #58 - Firefox FLAC playback stopping at ~4:34 mark Fixes #42, fixes #17 Quality of Life: - Add Releases link to desktop sidebar navigation Fixes #41 - iPhone safe area insets for Dynamic Island/notch Fixes #54 Contributors: @arsaboo, @rustyricky, @RustyJonez, @tombatossals No regressions detected, backward compatible, production ready.
201 lines
8.1 KiB
Bash
Executable File
201 lines
8.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# ==============================================================================
|
|
# analyze-context-bloat.sh
|
|
# ==============================================================================
|
|
# Purpose: Find large files in your project that are bloating Roo Code context
|
|
# Usage: Run this in your Lidify project root directory
|
|
# chmod +x analyze-context-bloat.sh && ./analyze-context-bloat.sh
|
|
# ==============================================================================
|
|
|
|
echo "=============================================================================="
|
|
echo "Lidify Context Bloat Analysis"
|
|
echo "=============================================================================="
|
|
echo ""
|
|
echo "Analyzing your project to find files that should be excluded from Roo Code..."
|
|
echo ""
|
|
|
|
# Check if we're in a project directory (monorepo structure)
|
|
if [ ! -f "backend/package.json" ] && [ ! -f "frontend/package.json" ] && [ ! -f "package.json" ]; then
|
|
echo "❌ Error: Run this script from your Lidify project root directory"
|
|
echo " (Looking for backend/package.json or frontend/package.json or package.json)"
|
|
exit 1
|
|
fi
|
|
|
|
echo "✅ Found project structure (monorepo detected)"
|
|
echo ""
|
|
|
|
echo "📊 TOP 30 LARGEST FILES (excluding node_modules):"
|
|
echo "=============================================================================="
|
|
find . -type f -not -path "*/node_modules/*" -not -path "*/.git/*" -not -path "*/.next/*" -not -path "*/dist/*" -exec du -h {} + 2>/dev/null | sort -rh | head -30
|
|
echo ""
|
|
|
|
echo "📦 DIRECTORY SIZES (top-level):"
|
|
echo "=============================================================================="
|
|
du -h --max-depth=1 . 2>/dev/null | sort -rh
|
|
echo ""
|
|
|
|
echo "📦 SUBDIRECTORY SIZES (backend, frontend, services):"
|
|
echo "=============================================================================="
|
|
for dir in backend frontend services scripts; do
|
|
if [ -d "$dir" ]; then
|
|
echo ""
|
|
echo "--- $dir/ ---"
|
|
du -h --max-depth=2 "$dir" 2>/dev/null | sort -rh | head -10
|
|
fi
|
|
done
|
|
echo ""
|
|
|
|
echo "🖼️ IMAGE FILES (all types):"
|
|
echo "=============================================================================="
|
|
find . -type f \( -name "*.png" -o -name "*.jpg" -o -name "*.jpeg" -o -name "*.gif" -o -name "*.webp" -o -name "*.svg" -o -name "*.ico" \) -not -path "*/node_modules/*" 2>/dev/null | wc -l
|
|
echo "Total image files found"
|
|
echo ""
|
|
echo "Largest images:"
|
|
find . -type f \( -name "*.png" -o -name "*.jpg" -o -name "*.jpeg" -o -name "*.gif" -o -name "*.webp" \) -not -path "*/node_modules/*" -exec du -h {} + 2>/dev/null | sort -rh | head -20
|
|
echo ""
|
|
|
|
echo "📝 LOCK FILES & GENERATED CODE:"
|
|
echo "=============================================================================="
|
|
find . -type f \( -name "package-lock.json" -o -name "yarn.lock" -o -name "pnpm-lock.yaml" -o -name "*.tsbuildinfo" \) -exec du -h {} \; 2>/dev/null
|
|
echo ""
|
|
|
|
echo "📜 MIGRATION FILES:"
|
|
echo "=============================================================================="
|
|
if [ -d "backend/prisma/migrations" ]; then
|
|
echo "Total migration directory size:"
|
|
du -sh backend/prisma/migrations 2>/dev/null
|
|
echo ""
|
|
echo "Number of migrations:"
|
|
ls -1 backend/prisma/migrations 2>/dev/null | wc -l
|
|
echo ""
|
|
echo "Oldest migrations (first 10):"
|
|
ls -1 backend/prisma/migrations 2>/dev/null | head -10
|
|
echo ""
|
|
echo "Newest migrations (last 5):"
|
|
ls -1 backend/prisma/migrations 2>/dev/null | tail -5
|
|
else
|
|
echo "No migrations directory found"
|
|
fi
|
|
echo ""
|
|
|
|
echo "🗂️ FILE TYPE BREAKDOWN:"
|
|
echo "=============================================================================="
|
|
echo "TypeScript/JavaScript files:"
|
|
find . -type f \( -name "*.ts" -o -name "*.tsx" -o -name "*.js" -o -name "*.jsx" \) -not -path "*/node_modules/*" -not -path "*/.next/*" 2>/dev/null | wc -l
|
|
echo ""
|
|
echo "JSON files:"
|
|
find . -type f -name "*.json" -not -path "*/node_modules/*" 2>/dev/null | wc -l
|
|
echo ""
|
|
echo "CSS/Style files:"
|
|
find . -type f \( -name "*.css" -o -name "*.scss" -o -name "*.sass" \) -not -path "*/node_modules/*" 2>/dev/null | wc -l
|
|
echo ""
|
|
echo "Markdown files:"
|
|
find . -type f -name "*.md" 2>/dev/null | wc -l
|
|
echo ""
|
|
|
|
echo "💾 ESTIMATED TOKEN COUNT:"
|
|
echo "=============================================================================="
|
|
# Rough estimation: 1 token ≈ 4 characters
|
|
total_chars=$(find . -type f \( -name "*.ts" -o -name "*.tsx" -o -name "*.js" -o -name "*.jsx" -o -name "*.json" -o -name "*.md" -o -name "*.css" -o -name "*.yml" -o -name "*.yaml" \) -not -path "*/node_modules/*" -not -path "*/.git/*" -not -path "*/.next/*" -not -path "*/dist/*" -exec cat {} \; 2>/dev/null | wc -c)
|
|
estimated_tokens=$((total_chars / 4))
|
|
|
|
if [ $estimated_tokens -gt 0 ]; then
|
|
echo "Total characters in text files: $(printf "%'d" $total_chars)"
|
|
echo "Estimated current token count: ~$(printf "%'d" $estimated_tokens) tokens"
|
|
echo ""
|
|
|
|
optimized_tokens=$((estimated_tokens * 40 / 100))
|
|
echo "Estimated AFTER .rooignore: ~$(printf "%'d" $optimized_tokens) tokens (60% reduction)"
|
|
else
|
|
echo "Could not calculate token estimate"
|
|
fi
|
|
echo ""
|
|
|
|
echo "🎯 LARGE FILES ANALYSIS:"
|
|
echo "=============================================================================="
|
|
|
|
echo "Large JSON files (>50KB):"
|
|
large_json=$(find . -type f -name "*.json" -not -path "*/node_modules/*" -not -name "package.json" -not -name "tsconfig.json" -size +50k 2>/dev/null)
|
|
if [ -n "$large_json" ]; then
|
|
echo "$large_json" | while read file; do
|
|
size=$(du -h "$file" | cut -f1)
|
|
echo " $size - $file"
|
|
done
|
|
else
|
|
echo " None found"
|
|
fi
|
|
echo ""
|
|
|
|
echo "Large CSS files (>30KB):"
|
|
large_css=$(find . -type f \( -name "*.css" -o -name "*.scss" \) -not -path "*/node_modules/*" -size +30k 2>/dev/null)
|
|
if [ -n "$large_css" ]; then
|
|
echo "$large_css" | while read file; do
|
|
size=$(du -h "$file" | cut -f1)
|
|
echo " $size - $file"
|
|
done
|
|
else
|
|
echo " None found"
|
|
fi
|
|
echo ""
|
|
|
|
echo "Test files:"
|
|
test_count=$(find . -type f \( -name "*.test.*" -o -name "*.spec.*" \) -not -path "*/node_modules/*" 2>/dev/null | wc -l)
|
|
echo " Found $test_count test files"
|
|
if [ "$test_count" -gt 0 ]; then
|
|
echo " Consider excluding with: *.test.* and *.spec.*"
|
|
fi
|
|
echo ""
|
|
|
|
python_files=$(find . -type f -name "*.py" -not -path "*/node_modules/*" 2>/dev/null | wc -l)
|
|
if [ "$python_files" -gt 0 ]; then
|
|
echo "Python files (services):"
|
|
echo " Found $python_files Python files"
|
|
echo " Largest Python files:"
|
|
find . -type f -name "*.py" -not -path "*/node_modules/*" -exec du -h {} + 2>/dev/null | sort -rh | head -5
|
|
echo ""
|
|
fi
|
|
|
|
docker_files=$(find . -maxdepth 2 -type f \( -name "Dockerfile*" -o -name "docker-compose*.yml" \) 2>/dev/null | wc -l)
|
|
if [ "$docker_files" -gt 0 ]; then
|
|
echo "Docker configuration files:"
|
|
find . -maxdepth 2 -type f \( -name "Dockerfile*" -o -name "docker-compose*.yml" \) -exec du -h {} \; 2>/dev/null
|
|
echo ""
|
|
fi
|
|
|
|
echo "=============================================================================="
|
|
echo "🎯 RECOMMENDED .rooignore ADDITIONS:"
|
|
echo "=============================================================================="
|
|
echo ""
|
|
echo "Based on this analysis, your .rooignore should definitely include:"
|
|
echo ""
|
|
echo "1. node_modules/ (if exists)"
|
|
echo "2. Lock files (package-lock.json, yarn.lock)"
|
|
echo "3. All images in assets/screenshots/"
|
|
echo "4. Build artifacts (.next/, dist/, build/)"
|
|
echo "5. Old migrations (backend/prisma/migrations/2024*/)"
|
|
echo ""
|
|
|
|
if [ -n "$large_json" ]; then
|
|
echo "6. Large JSON files:"
|
|
echo "$large_json" | while read file; do
|
|
echo " $file"
|
|
done
|
|
echo ""
|
|
fi
|
|
|
|
if [ "$test_count" -gt 5 ]; then
|
|
echo "7. Test files (*.test.*, *.spec.*)"
|
|
echo ""
|
|
fi
|
|
|
|
echo "=============================================================================="
|
|
echo "✅ Analysis complete!"
|
|
echo ""
|
|
echo "Next steps:"
|
|
echo "1. Share this output with Claude"
|
|
echo "2. Claude will create a custom .rooignore for your project"
|
|
echo "3. Copy .rooignore to project root"
|
|
echo "4. Make a Roo Code request and verify token reduction"
|
|
echo "=============================================================================="
|