Skip to main content
Glama

MCP Memory Service

thread_status.sh5.87 kB
#!/bin/bash # scripts/pr/thread_status.sh - Display PR review thread status # # Shows comprehensive status of all review threads on a PR with filtering options. # Uses GitHub GraphQL API to access review thread data. # # Usage: bash scripts/pr/thread_status.sh <PR_NUMBER> [--unresolved|--resolved|--outdated] # Example: bash scripts/pr/thread_status.sh 212 --unresolved # # Flags: # --unresolved: Show only unresolved threads # --resolved: Show only resolved threads # --outdated: Show only outdated threads # (no flag): Show all threads with summary set -e # Get script directory for sourcing helpers SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # Source GraphQL helpers if [ -f "$SCRIPT_DIR/lib/graphql_helpers.sh" ]; then source "$SCRIPT_DIR/lib/graphql_helpers.sh" else echo "Error: GraphQL helpers not found at $SCRIPT_DIR/lib/graphql_helpers.sh" exit 1 fi # Parse arguments PR_NUMBER=$1 FILTER=${2:-all} if [ -z "$PR_NUMBER" ]; then echo "Usage: $0 <PR_NUMBER> [--unresolved|--resolved|--outdated]" echo "Example: $0 212 --unresolved" exit 1 fi # Verify gh CLI supports GraphQL if ! check_graphql_support; then exit 1 fi # Color codes for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' GRAY='\033[0;90m' NC='\033[0m' # No Color echo "========================================" echo " PR Review Thread Status" echo "========================================" echo "PR Number: #$PR_NUMBER" echo "Filter: ${FILTER/--/}" echo "" # Get all review threads echo "Fetching review threads..." threads_json=$(get_review_threads "$PR_NUMBER") # Get thread statistics stats=$(get_thread_stats "$PR_NUMBER") total=$(echo "$stats" | jq -r '.total') resolved=$(echo "$stats" | jq -r '.resolved') unresolved=$(echo "$stats" | jq -r '.unresolved') outdated=$(echo "$stats" | jq -r '.outdated') # Display summary echo "========================================" echo " Summary" echo "========================================" echo -e "Total Threads: $total" echo -e "${GREEN}Resolved:${NC} $resolved" echo -e "${RED}Unresolved:${NC} $unresolved" echo -e "${YELLOW}Outdated:${NC} $outdated" echo "" if [ "$total" -eq 0 ]; then echo "✅ No review threads found for PR #$PR_NUMBER" exit 0 fi # Display detailed thread list echo "========================================" echo " Thread Details" echo "========================================" # Determine jq filter based on flag case "$FILTER" in --unresolved) jq_filter='select(.isResolved == false)' ;; --resolved) jq_filter='select(.isResolved == true)' ;; --outdated) jq_filter='select(.isOutdated == true)' ;; *) jq_filter='.' ;; esac # Process and display threads thread_count=0 echo "$threads_json" | jq -r ".data.repository.pullRequest.reviewThreads.nodes[] | $jq_filter | @json" | while IFS= read -r thread_json; do thread_count=$((thread_count + 1)) thread_id=$(echo "$thread_json" | jq -r '.id') path=$(echo "$thread_json" | jq -r '.path // "unknown"') line=$(echo "$thread_json" | jq -r '.line // 0') original_line=$(echo "$thread_json" | jq -r '.originalLine // 0') diff_side=$(echo "$thread_json" | jq -r '.diffSide // "unknown"') is_resolved=$(echo "$thread_json" | jq -r '.isResolved') is_outdated=$(echo "$thread_json" | jq -r '.isOutdated') # Get first comment details author=$(echo "$thread_json" | jq -r '.comments.nodes[0].author.login // "unknown"') comment_body=$(echo "$thread_json" | jq -r '.comments.nodes[0].body // "No comment"') created_at=$(echo "$thread_json" | jq -r '.comments.nodes[0].createdAt // "unknown"') comment_count=$(echo "$thread_json" | jq -r '.comments.nodes | length') # Truncate comment to 150 chars for display comment_preview=$(echo "$comment_body" | head -c 150 | tr '\n' ' ') if [ ${#comment_body} -gt 150 ]; then comment_preview="${comment_preview}..." fi # Format status indicators if [ "$is_resolved" = "true" ]; then status_icon="${GREEN}✓${NC}" status_text="${GREEN}RESOLVED${NC}" else status_icon="${RED}○${NC}" status_text="${RED}UNRESOLVED${NC}" fi if [ "$is_outdated" = "true" ]; then outdated_icon="${YELLOW}⚠${NC}" outdated_text="${YELLOW}OUTDATED${NC}" else outdated_icon=" " outdated_text="${GRAY}current${NC}" fi # Display thread echo "" echo -e "$status_icon Thread #$thread_count" echo -e " Status: $status_text | $outdated_text" echo -e " File: ${BLUE}$path${NC}:$line (original: $original_line)" echo -e " Side: $diff_side" echo -e " Author: $author" echo -e " Created: $created_at" echo -e " Comments: $comment_count" echo -e " ${GRAY}\"${comment_preview}\"${NC}" # Show thread ID for reference (can be used with resolve_threads.sh) echo -e " ${GRAY}Thread ID: ${thread_id:0:20}...${NC}" done echo "" echo "========================================" # Provide actionable next steps if [ "$unresolved" -gt 0 ]; then echo "" echo "📝 Next Steps:" echo "" echo " 1. Review unresolved threads:" echo " gh pr view $PR_NUMBER --web" echo "" echo " 2. After fixing issues and pushing commits, resolve threads:" echo " bash scripts/pr/resolve_threads.sh $PR_NUMBER HEAD --auto" echo "" echo " 3. Manually resolve specific threads via GitHub web interface" echo "" echo " 4. Trigger new Gemini review after fixes:" echo " gh pr comment $PR_NUMBER --body '/gemini review'" echo "" fi # Exit with status indicating unresolved threads if [ "$unresolved" -gt 0 ]; then exit 1 else echo "✅ All review threads resolved!" exit 0 fi

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/doobidoo/mcp-memory-service'

If you have feedback or need assistance with the MCP directory API, please join our Discord server