Repository navigation
feat(panel): deep links to review threads in the Pull request tab - #3884
Merged
Merged
Conversation
A review thread gets a Luke link of its own, LINK_PLACE.PULL_REQUEST_THREAD (`…/agent/<id>/changes/<conversation|files>/thread/<threadId>`), routed by openLink to the agent's Pull request tab on the view it names, which brings the thread into view by GitHub's node id. - Conversation → Files changed: a thread's file and lines, or its ⋯'s View in Files changed, opens the file (collapsed or folded as viewed), clears a filter hiding it, shows a minimized line's chip, opens the thread, scrolls Pierre's list to its line (or the file's above-the-diff list for a line no hunk shows or an outdated thread), lights its lines until its ring ends, and moves the focus to it. A thread whose file left the diff says so and is shown in the Conversation instead. - Files changed → Conversation: View in Conversation scrolls to, opens, rings and focuses the card there, standing through Hide resolved and Hide bots. - Copy link in a thread's ⋯ copies its link in the view it is drawn in. Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
luke-agent Bot
added a commit
that referenced
this pull request
Oct 19, 2026
Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
luke-agent Bot
added a commit
that referenced
this pull request
Oct 19, 2026
Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
Contributor
There was a problem hiding this comment.
Devin Review found 2 potential issues.
1 flag not posted on this PR by your GitHub settings — view it in Devin Review. (Configure)
14 tasks done
14 tasks done
Merged
14 tasks done
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Deep links for review comments in an agent's Pull request tab: press a thread in the Conversation to open it in Files changed, and back again. Each thread also gets a Luke link of its own.
What it does
A link place for one thread. It's
LINK_PLACE.PULL_REQUEST_THREAD { planId, agentId, threadId, view }, written under the agent's Changes link:threadIdis GitHub's GraphQL node id for the thread (ReviewThread.id), the same id reply and resolve already use. Opening the link:openLink(use-tasks-tab) opens the agent's Pull request tab, reusing a shared tab the wayCHANGESdoes, on the view the link names.threadRevealask on a context (thread-reveal.tsx), the same pattern asMessageReveal.Both in-tab jumps call
openPlacewith this place, so they take the same route as a link from anywhere. Copy link in a thread's ⋯ copies the link for the view the thread is drawn in, throughuseCopyLinkItem.Conversation → Files changed. Pressing a thread's file/lines header, or ⋯ › View in Files changed:
ChangesList.expand), and clears a filter that hides itDiffListHandle.revealLine, usingCodeView.scrollTo({ type: "line" }))data-search-landed) and focuses its summary withpreventScrollA thread whose file is no longer in the diff gets a toast saying so, and is shown in the Conversation instead.
Files changed → Conversation. ⋯ › View in Conversation scrolls the Conversation's own scroller to the card (
centreWithin, neverscrollIntoView), then opens, rings and focuses it. A thread brought into view stays visible even if Hide resolved or Hide bots would hide it.How the scroll stays right while things expand
The jump is a pending state that resolves over renders, not in one call:
useListLandingopens the file, shows the chip, and records the place.PierreDiffList's reveal effect runs after its update effect, so Pierre already has the file open and its notes laid out. Only then does it callrevealLineorreveal.The card's focus and ring wait, through
focusSeek, until the card stands inside the list's box.Screenshots
Tests
luke-link.test: both views round-trip, plus refusals for a bad view, a misspelled step, a missing or trailing id, a taskless agent, and an id with characters outside the pattern.use-tasks-tab.test: the route opens the Pull request tab, sets the view, and leaves counted asks; letting go of an older ask leaves the newer one standing.agent-pull-request-tab.test:Checks
pnpm check:affectedran out of memory on this sandbox (exit 137 on the service and web typecheck, and features workers timing out). I ran the fallback set instead, and it passed:tscfor features, panel, desktop, ui and web./scripts/oxlint.sh, biomepnpm knip./scripts/repository-checks.sh@luke/features/luke-linkonly, with no service change, so no Preview run is needed.The stacked follow-up will open GitHub anchors (
#discussion_r…,#issuecomment-…,#pullrequestreview-…) inside the tab.Made with Luke