#!/bin/bash echo "Getting status..." echo "" echo "" epic_name="$1" if [ -z "$epic_name" ]; then echo "❌ Please specify an epic name" echo "Usage: /pm:epic-status " echo "" echo "Available epics:" for dir in .claude/epics/*/; do [ -d "$dir" ] && echo " β€’ $(basename "$dir")" done exit 1 else # Show status for specific epic epic_dir=".claude/epics/$epic_name" epic_file="$epic_dir/epic.md" if [ ! -f "$epic_file" ]; then echo "❌ Epic not found: $epic_name" echo "" echo "Available epics:" for dir in .claude/epics/*/; do [ -d "$dir" ] && echo " β€’ $(basename "$dir")" done exit 1 fi echo "πŸ“š Epic Status: $epic_name" echo "================================" echo "" # Extract metadata status=$(grep "^status:" "$epic_file" | head -1 | sed 's/^status: *//') progress=$(grep "^progress:" "$epic_file" | head -1 | sed 's/^progress: *//') github=$(grep "^github:" "$epic_file" | head -1 | sed 's/^github: *//') # Count tasks total=0 open=0 closed=0 blocked=0 # Use find to safely iterate over task files for task_file in "$epic_dir"/[0-9]*.md; do [ -f "$task_file" ] || continue ((total++)) task_status=$(grep "^status:" "$task_file" | head -1 | sed 's/^status: *//') deps=$(grep "^depends_on:" "$task_file" | head -1 | sed 's/^depends_on: *\[//' | sed 's/\]//') if [ "$task_status" = "closed" ] || [ "$task_status" = "completed" ]; then ((closed++)) elif [ -n "$deps" ] && [ "$deps" != "depends_on:" ]; then ((blocked++)) else ((open++)) fi done # Display progress bar if [ $total -gt 0 ]; then percent=$((closed * 100 / total)) filled=$((percent * 20 / 100)) empty=$((20 - filled)) echo -n "Progress: [" [ $filled -gt 0 ] && printf '%0.sβ–ˆ' $(seq 1 $filled) [ $empty -gt 0 ] && printf '%0.sβ–‘' $(seq 1 $empty) echo "] $percent%" else echo "Progress: No tasks created" fi echo "" echo "πŸ“Š Breakdown:" echo " Total tasks: $total" echo " βœ… Completed: $closed" echo " πŸ”„ Available: $open" echo " ⏸️ Blocked: $blocked" [ -n "$github" ] && echo "" [ -n "$github" ] && echo "πŸ”— GitHub: $github" fi exit 0