Repository navigation
feat(conversations): Name conversations after linked issues - #2218
Open
sentry-junior[bot] wants to merge 4 commits into
Open
sentry-junior[bot] wants to merge 4 commits into
sentry-junior[bot] wants to merge 4 commits into
Conversation
Add a conversationTitleContext plugin hook. Core passes the first human message to plugins and gives the returned facts to the title model under Linked objects. The GitHub plugin reads the titles of linked issues and pull requests with a read-only token scoped to each repository. Co-Authored-By: BYK <burak.kaya@sentry.io>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
BYK
requested changes
Oct 23, 2026
BYK
left a comment
Member
There was a problem hiding this comment.
Ideally it would detect anything listed here, assuming github: https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/autolinked-references-and-urls
Also alternatives like:
- Let's fix issue 1583 on getsentry/junior
- Let's get PR 1234 fixed up
etc.
…itles Detect issue, pull request, and commit references in the forms that GitHub autolinks, and in prose such as "issue 1583 on getsentry/junior" or "PR 1234". A reference without a repository uses the one repository that the message names, or else the configured github.repo. The title context hook now gets the plugin's config values for the Location.
Add the linked object instruction only when plugins return title context. Other title requests then match their eval recordings again, so evals such as the image edit case replay instead of running live.
BYK
approved these changes
Oct 25, 2026
The title context hook minted its own installation token and called GitHub directly. That skipped Junior's credential proxy: egress policy, grant selection, lease reuse, and audit telemetry. Core now gives the hook host-owned egress as a conversation-title system actor. The GitHub hook reads issues, pull requests, and commits through it. The system actor gets only installation grants, never user tokens, and title work never starts authorization. Reads reuse the shared installation lease, so title context no longer mints a token per object. Co-Authored-By: BYK <burak.kaya@sentry.io>
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.
A conversation that starts with "Fix this " gets a vague title like "Verify Issue 1583 and Submit PR if Valid". The title model only sees the URL, so it can't tell what the issue is about.
This adds a provider-neutral
conversationTitleContextplugin hook. Before core generates a title from the first human message, it asks plugins for short facts about objects linked in that message. The title model sees those facts under "Linked objects", and the prompt tells it to name the object by number and title (for example,Fix #1583: Login fails on Safari).The GitHub plugin implements the hook. It finds up to 3 distinct issue, pull request, and commit references (URLs, GitHub autolinks such as
owner/repo#123, and prose such as "issue 1583 on getsentry/junior") and reads each title.The hook reads through host-owned credentialed egress (
ctx.egress), not a token it mints itself. Title work runs outside the Turn, so core gives it aconversation-titlesystem actor. Egress policy, grant selection, and audit telemetry apply. The system actor gets only installation grants, never user tokens, and title work never starts authorization. Reads reuse the shared installation lease, so no extra token is minted per object.The hook is optional and fails open. Core stops waiting after 5 seconds, ignores hooks that throw, and caps how many lines plugins can return and how long each line can be. If nothing comes back, titles are generated the same way as before. Dispatched runs, which have no human message, don't call the hook.
Note: titles from private repositories in the installation can now show up in conversation titles. Junior can already read and quote that content in replies in the same conversation, with the same installation-read grant.
The new lifecycle eval (
when the first message links a tracked issue…) needs a Roach recording. I couldn't record it locally without the write token, so it will record on its first CI run.via BYK.
--
View Junior Session in Sentry