trax/scripts/tm_analyze.sh

331 lines
11 KiB
Bash
Executable File

#!/bin/bash
# Taskmaster Analysis Helper
# Analyze task complexity and project insights for Trax project
set -e
# Color codes
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
RED='\033[0;31m'
CYAN='\033[0;36m'
MAGENTA='\033[0;35m'
NC='\033[0m'
# Navigate to project root
cd "$(dirname "$0")/.."
PROJECT_ROOT=$(pwd)
# Set Task Master project root
export TM_PROJECT_ROOT="$PROJECT_ROOT"
# Function to print header
print_header() {
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${CYAN}$1${NC}"
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
}
# Function to check if task-master is available
check_taskmaster() {
if ! command -v task-master &> /dev/null; then
echo -e "${RED}❌ task-master command not found${NC}"
echo "Please install task-master-ai: npm install -g task-master-ai"
exit 1
fi
}
# Function to analyze task complexity
analyze_complexity() {
print_header "🔍 ANALYZING TASK COMPLEXITY"
echo -e "${BLUE}📊 Running complexity analysis...${NC}"
echo "This may take a moment..."
# Run complexity analysis
task-master analyze-complexity --research 2>/dev/null || {
echo -e "${YELLOW}⚠️ Research-based analysis failed, trying basic analysis...${NC}"
task-master analyze-complexity 2>/dev/null || {
echo -e "${RED}❌ Complexity analysis failed${NC}"
exit 1
}
}
echo -e "${GREEN}✅ Complexity analysis completed!${NC}"
echo ""
echo -e "${CYAN}📋 View the report with: $0 report${NC}"
}
# Function to show complexity report
show_complexity_report() {
print_header "📊 COMPLEXITY REPORT"
echo -e "${BLUE}📄 Loading complexity report...${NC}"
# Show the complexity report
task-master complexity-report 2>/dev/null || {
echo -e "${RED}❌ Complexity report not found${NC}"
echo "Run '$0 analyze' first to generate the report"
exit 1
}
}
# Function to analyze dependencies
analyze_dependencies() {
print_header "🔗 DEPENDENCY ANALYSIS"
echo -e "${BLUE}🔍 Checking task dependencies...${NC}"
# Validate dependencies
task-master validate-dependencies 2>/dev/null || {
echo -e "${YELLOW}⚠️ Dependency validation failed${NC}"
exit 1
}
echo -e "${GREEN}✅ Dependencies validated!${NC}"
# Show dependency statistics
echo ""
echo -e "${CYAN}📊 Dependency Statistics:${NC}"
# Count tasks with dependencies
local all_tasks=$(task-master list 2>/dev/null)
local total_tasks=$(echo "$all_tasks" | grep -c "^\s*[0-9]" || echo "0")
local tasks_with_deps=$(echo "$all_tasks" | grep -c "dependencies" || echo "0")
echo -e "${BLUE}Total tasks: $total_tasks${NC}"
echo -e "${BLUE}Tasks with dependencies: $tasks_with_deps${NC}"
if [ "$total_tasks" -gt 0 ]; then
local dep_percentage=$((tasks_with_deps * 100 / total_tasks))
echo -e "${CYAN}Dependency coverage: ${dep_percentage}%${NC}"
fi
}
# Function to analyze task distribution
analyze_distribution() {
print_header "📈 TASK DISTRIBUTION ANALYSIS"
echo -e "${BLUE}📊 Analyzing task distribution...${NC}"
# Get task counts by status
local total=$(task-master list 2>/dev/null | grep -c "^\s*[0-9]" || echo "0")
local done=$(task-master list --status=done 2>/dev/null | grep -c "^\s*[0-9]" || echo "0")
local pending=$(task-master list --status=pending 2>/dev/null | grep -c "^\s*[0-9]" || echo "0")
local in_progress=$(task-master list --status=in-progress 2>/dev/null | grep -c "^\s*[0-9]" || echo "0")
local review=$(task-master list --status=review 2>/dev/null | grep -c "^\s*[0-9]" || echo "0")
local deferred=$(task-master list --status=deferred 2>/dev/null | grep -c "^\s*[0-9]" || echo "0")
echo -e "${GREEN}✅ Done: $done${NC}"
echo -e "${YELLOW}🚧 In Progress: $in_progress${NC}"
echo -e "${BLUE}📋 Pending: $pending${NC}"
echo -e "${MAGENTA}👀 Review: $review${NC}"
echo -e "${RED}⏸️ Deferred: $deferred${NC}"
echo -e "${CYAN}📊 Total: $total${NC}"
if [ "$total" -gt 0 ]; then
echo ""
echo -e "${CYAN}📈 Distribution Percentages:${NC}"
echo -e "${GREEN}Done: $((done * 100 / total))%${NC}"
echo -e "${YELLOW}In Progress: $((in_progress * 100 / total))%${NC}"
echo -e "${BLUE}Pending: $((pending * 100 / total))%${NC}"
echo -e "${MAGENTA}Review: $((review * 100 / total))%${NC}"
echo -e "${RED}Deferred: $((deferred * 100 / total))%${NC}"
fi
}
# Function to analyze pipeline progress
analyze_pipeline() {
print_header "🔄 PIPELINE PROGRESS ANALYSIS"
echo -e "${BLUE}📊 Analyzing pipeline versions...${NC}"
# Use the Python script for pipeline analysis
if [ -f "scripts/tm_trax.py" ]; then
python3 scripts/tm_trax.py --stats 2>/dev/null || {
echo -e "${YELLOW}⚠️ Pipeline analysis not available${NC}"
echo "Basic pipeline search:"
for version in v1 v2 v3 v4; do
local count=$(task-master list 2>/dev/null | grep -i "$version" | wc -l)
echo -e "${BLUE}$version: $count tasks${NC}"
done
}
else
echo "Pipeline analysis requires tm_trax.py"
# Basic pipeline search
for version in v1 v2 v3 v4; do
local count=$(task-master list 2>/dev/null | grep -i "$version" | wc -l)
echo -e "${BLUE}$version: $count tasks${NC}"
done
fi
}
# Function to analyze bottlenecks
analyze_bottlenecks() {
print_header "🚧 BOTTLENECK ANALYSIS"
echo -e "${BLUE}🔍 Identifying potential bottlenecks...${NC}"
# Find tasks with many dependencies
echo -e "${CYAN}📋 Tasks with many dependencies (potential bottlenecks):${NC}"
task-master list 2>/dev/null | grep -E "dependencies.*[0-9]{2,}" || echo "No high-dependency tasks found"
echo ""
echo -e "${CYAN}📋 Tasks in review (potential blockers):${NC}"
task-master list --status=review 2>/dev/null || echo "No tasks in review"
echo ""
echo -e "${CYAN}📋 Deferred tasks (potential issues):${NC}"
task-master list --status=deferred 2>/dev/null || echo "No deferred tasks"
echo ""
echo -e "${CYAN}📋 Long-running in-progress tasks:${NC}"
task-master list --status=in-progress 2>/dev/null || echo "No in-progress tasks"
}
# Function to generate insights
generate_insights() {
print_header "💡 PROJECT INSIGHTS"
echo -e "${BLUE}🧠 Generating project insights...${NC}"
# Get basic stats
local total=$(task-master list 2>/dev/null | grep -c "^\s*[0-9]" || echo "0")
local done=$(task-master list --status=done 2>/dev/null | grep -c "^\s*[0-9]" || echo "0")
local pending=$(task-master list --status=pending 2>/dev/null | grep -c "^\s*[0-9]" || echo "0")
echo -e "${CYAN}📊 Key Metrics:${NC}"
echo -e "${BLUE}Total tasks: $total${NC}"
echo -e "${GREEN}Completed: $done${NC}"
echo -e "${BLUE}Remaining: $pending${NC}"
if [ "$total" -gt 0 ]; then
local completion=$((done * 100 / total))
local remaining=$((pending * 100 / total))
echo ""
echo -e "${CYAN}📈 Progress Insights:${NC}"
echo -e "${GREEN}Project completion: ${completion}%${NC}"
echo -e "${BLUE}Work remaining: ${remaining}%${NC}"
if [ "$completion" -gt 75 ]; then
echo -e "${GREEN}🎉 Great progress! Project is in final stages${NC}"
elif [ "$completion" -gt 50 ]; then
echo -e "${YELLOW}📈 Good progress! Project is past halfway${NC}"
elif [ "$completion" -gt 25 ]; then
echo -e "${BLUE}🚀 Steady progress! Project is building momentum${NC}"
else
echo -e "${CYAN}🌱 Early stages! Focus on foundational tasks${NC}"
fi
fi
echo ""
echo -e "${CYAN}🎯 Recommendations:${NC}"
# Check for next task
local next_task=$(task-master next 2>/dev/null | head -5)
if [ -n "$next_task" ]; then
echo -e "${BLUE}Next priority: Focus on the next available task${NC}"
fi
# Check for blocked tasks
local blocked=$(task-master list --status=deferred 2>/dev/null | wc -l)
if [ "$blocked" -gt 0 ]; then
echo -e "${YELLOW}⚠️ Address $blocked deferred tasks to unblock progress${NC}"
fi
# Check for review tasks
local review=$(task-master list --status=review 2>/dev/null | wc -l)
if [ "$review" -gt 0 ]; then
echo -e "${MAGENTA}👀 Review $review tasks to complete them${NC}"
fi
}
# Function to show analysis help
show_help() {
echo -e "${CYAN}🔍 Taskmaster Analysis Helper${NC}"
echo ""
echo "Usage: $0 [command] [args]"
echo ""
echo "Analysis Commands:"
echo " analyze - Run complexity analysis"
echo " report - Show complexity report"
echo " dependencies - Analyze task dependencies"
echo " distribution - Analyze task distribution"
echo " pipeline - Analyze pipeline progress"
echo " bottlenecks - Identify potential bottlenecks"
echo " insights - Generate project insights"
echo " full - Run comprehensive analysis"
echo " help - Show this help"
echo ""
echo "Examples:"
echo " $0 analyze"
echo " $0 report"
echo " $0 dependencies"
echo " $0 insights"
echo " $0 full"
echo ""
echo "Analysis Tips:"
echo " - Run 'analyze' first to generate complexity data"
echo " - Use 'report' to view detailed complexity breakdown"
echo " - Use 'insights' for high-level project recommendations"
echo " - Use 'full' for comprehensive project analysis"
}
# Main execution
check_taskmaster
CMD=${1:-help}
shift || true
case "$CMD" in
analyze)
analyze_complexity
;;
report)
show_complexity_report
;;
dependencies)
analyze_dependencies
;;
distribution)
analyze_distribution
;;
pipeline)
analyze_pipeline
;;
bottlenecks)
analyze_bottlenecks
;;
insights)
generate_insights
;;
full)
analyze_complexity
echo ""
show_complexity_report
echo ""
analyze_dependencies
echo ""
analyze_distribution
echo ""
analyze_pipeline
echo ""
analyze_bottlenecks
echo ""
generate_insights
;;
help|h|*)
show_help
;;
esac