Files
claude-engineering-plugin/plugins/compound-engineering/skills/ce-resolve-pr-feedback/scripts/get-thread-for-comment
Trevin Chow 153bea8669
Some checks failed
CI / pr-title (push) Has been cancelled
CI / test (push) Has been cancelled
Release PR / release-pr (push) Has been cancelled
Release PR / publish-cli (push) Has been cancelled
fix(ce-resolve-pr-feedback): stop dropping unresolved and actionable feedback (#617)
2026-04-20 20:44:16 -07:00

63 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
# Maps a PR review comment node ID to its parent thread.
# Fetches thread IDs and first comment IDs to find the match,
# then returns the matching thread with full comment details.
set -e
if [ $# -lt 2 ]; then
echo "Usage: get-thread-for-comment PR_NUMBER COMMENT_NODE_ID [OWNER/REPO]"
echo "Example: get-thread-for-comment 378 PRRC_kwDOP_gZVc6ySv89"
exit 1
fi
PR_NUMBER=$1
COMMENT_NODE_ID=$2
if [ -n "$3" ]; then
OWNER=$(echo "$3" | cut -d/ -f1)
REPO=$(echo "$3" | cut -d/ -f2)
else
OWNER=$(gh repo view --json owner -q .owner.login 2>/dev/null)
REPO=$(gh repo view --json name -q .name 2>/dev/null)
fi
if [ -z "$OWNER" ] || [ -z "$REPO" ]; then
echo "Error: Could not detect repository. Pass OWNER/REPO as third argument."
exit 1
fi
gh api graphql -f owner="$OWNER" -f repo="$REPO" -F pr="$PR_NUMBER" -f query='
query($owner: String!, $repo: String!, $pr: Int!) {
repository(owner: $owner, name: $repo) {
pullRequest(number: $pr) {
reviewThreads(first: 100) {
nodes {
id
isResolved
isOutdated
path
line
originalLine
startLine
originalStartLine
comments(first: 100) {
nodes {
id
author { login }
body
createdAt
url
}
}
}
}
}
}
}' | jq -e --arg cid "$COMMENT_NODE_ID" '
[.data.repository.pullRequest.reviewThreads.nodes[]
| select(.comments.nodes | map(.id) | index($cid))]
| if length == 0 then error("No thread found for comment \($cid)") else .[0] end
'