Skip to content

feat(claude-tty): link owner/repo#123 issue references in Claude's replies - #154

Merged
sleeyax merged 1 commit into
mainfrom
feat/claude-tty-issue-links
Oct 14, 2026
Merged

sleeyax merged 1 commit into
mainfrom
feat/claude-tty-issue-links

Conversation

@sleeyax

@sleeyax sleeyax commented Oct 14, 2026

Copy link
Copy Markdown
Owner

Issue and PR references in a claude-tty session show up as plain or bold text in Paseo, while the same reply in Claude CLI has them as clickable links.

The difference is in rendering, not in what the model writes. Claude Code's terminal turns owner/repo#123 into a link itself when it draws a reply, so the model writes the reference bare and the transcript holds no URL. The adapter forwards the transcript's text as is, and Paseo renders exactly that. Paseo has no issue or discussion about linking these references in its own renderer, so the adapter now does what the CLI does.

What this changes

  • References become markdown links (linkIssueReferences in src/issue-links.ts): **owner/repo#12** reaches Paseo as **[owner/repo#12](https://github.com/owner/repo/issues/12)**. Code spans, fenced blocks, existing links and URLs are left as written.
  • The host comes from the session's origin remote (readIssueForge), read once per session with git remote get-url origin. A host containing "gitlab" gets GitLab's /-/issues/N path and accepts nested groups (group/sub/project#42). Any other host gets /issues/N. Without a remote it falls back to github.com, as the CLI does.
  • Only Claude's replies are rewritten (translateAssistant). Thinking, user messages and subagent logs are unchanged.

Out of scope

  • Bare #123 stays unlinked, as it has in Claude Code since 2.1.84.
  • A reference to a repository on another forge links to the session's own host, as the CLI does with github.com and gitlab.com.
  • An SSH host alias such as git@github-work:owner/repo is taken as the host.

Verification

  • Tests: unit tests for the rewrite, the protected spans, nested GitLab groups, remote parsing and the no-repository fallback, and a translator test for the whole path.
  • Checks: claude-tty-acp typecheck is clean and the full suite passes.
  • Not tested against a live session: the plugin has not been rebuilt or reloaded.

…plies

Claude Code's terminal turns `owner/repo#123` into a link when it draws a reply, so the model writes these references bare and the transcript carries no URL.
Paseo renders the text as written, which left them unclickable.
The adapter now rewrites them into markdown links to the origin remote's host, using GitLab's issue path when the host is a GitLab, and github.com when there is no remote.
Bare `#123` stays unlinked, as it does in Claude Code since 2.1.84.
Paseo has no issue or discussion on linking these references itself.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@sleeyax
sleeyax merged commit 7ea605c into main Oct 14, 2026
1 check passed
@github-actions github-actions Bot mentioned this pull request Oct 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant