Skip to content

feat(desktop): add customizable PR link provider setting#2333

Open
chasemcdo wants to merge 3 commits into
superset-sh:mainfrom
chasemcdo:customizable-pr-links
Open

feat(desktop): add customizable PR link provider setting#2333
chasemcdo wants to merge 3 commits into
superset-sh:mainfrom
chasemcdo:customizable-pr-links

Conversation

@chasemcdo
Copy link
Copy Markdown
Contributor

@chasemcdo chasemcdo commented Mar 10, 2026

Summary

  • Add a PR Link Provider setting (Settings > Git) that lets users open PR links in GitHub (default), BetterHub, Devin, or a custom domain
  • URL transformation is applied at render/open time — raw GitHub URLs in DB/cache are never modified
  • All PR link consumption points (PRButton, ⌘⇧P hotkey, useCreateOrOpenPR hook) respect the setting

Test plan

  • Settings > Git — confirm "PR Link Provider" dropdown with GitHub/BetterHub/Devin/Custom options
  • Select BetterHub → open existing PR → URL uses https://www.better-hub.com/owner/repo/pull/123
  • Select Devin → open existing PR → URL uses https://app.devin.ai/review/owner/repo/pull/123
  • Select Custom → enter base URL → open PR → uses custom base URL
  • Select GitHub → confirm original behavior unchanged
  • ⌘⇧P shortcut → respects provider setting
  • PRButton links → use transformed URL
  • Creating a new PR (no existing PR) → always opens GitHub compare URL (not transformed)
  • bun run typecheck and bun run lint:fix pass

Summary by cubic

Adds a PR Link Provider setting so users can open pull requests in GitHub (default), BetterHub, Devin, or a custom domain. All PR links and shortcuts now honor this setting without changing stored GitHub URLs.

  • New Features

    • New “PR Link Provider” in Settings > Git with GitHub, BetterHub, Devin, or Custom (base domain).
    • PR URLs transform at open time; raw GitHub URLs remain in DB/cache.
    • Applied across the app: PR buttons, sidebar PR badge and hover card, ⌘⇧P, and the create-or-open PR flow.
    • New PR creation opens the GitHub compare URL (not transformed); default provider is GitHub.
    • Added settings endpoints (getPrLinkProvider, setPrLinkProvider) and transformPrUrl utility.
  • Migration

    • Local DB adds settings.pr_link_provider and settings.pr_link_custom_domain columns.

Written for commit e7367f8. Summary will update on new commits.

Summary by CodeRabbit

  • New Features
    • Added a PR Link Provider setting in Git settings to choose GitHub, BetterHub, Devin, or a custom domain; a default provider is applied.
    • PR URLs are now transformed app-wide (links, buttons, hotkeys, and open/retry flows) according to the selected provider and optional custom domain.
    • Settings search and UI updated to surface and manage the new PR Link Provider, with user feedback during open actions (e.g., "Opening pull request...").

Open with Devin

Allow users to open PR links in alternative code review tools
(BetterHub, Devin) instead of GitHub, with a custom domain option.
Transforms PR URLs at render/open time while keeping raw GitHub
URLs as the source of truth.
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Mar 10, 2026

📝 Walkthrough

Walkthrough

Adds a PR Link Provider feature: DB schema and types, TRPC get/set procedures, a URL transform utility, settings UI and search entry, and integration into PR-open flows to apply provider-based URL transformation.

Changes

Cohort / File(s) Summary
Database Schema & Types
packages/local-db/src/schema/zod.ts, packages/local-db/src/schema/schema.ts, packages/local-db/drizzle/0036_add_pr_link_provider_settings.sql, packages/local-db/drizzle/meta/0036_snapshot.json, packages/local-db/drizzle/meta/_journal.json
Added PR_LINK_PROVIDERS and PrLinkProvider type; extended settings table with pr_link_provider and pr_link_custom_domain; added migration and snapshot.
TRPC Settings Router
apps/desktop/src/lib/trpc/routers/settings/index.ts
Added getPrLinkProvider and setPrLinkProvider procedures to read and persist provider and custom domain.
Shared Constants
apps/desktop/src/shared/constants.ts
Added DEFAULT_PR_LINK_PROVIDER = "github".
PR URL Utilities
apps/desktop/src/renderer/utils/pr-url/pr-url.ts, apps/desktop/src/renderer/utils/pr-url/index.ts
New transformPrUrl(githubUrl, provider, customBaseUrl?) and re-export; maps GitHub PR URLs to provider bases and supports custom base.
Settings UI & Search
apps/desktop/src/renderer/routes/_authenticated/settings/utils/pr-link-provider/pr-link-provider.ts, .../index.ts, .../settings-search/settings-search.ts, apps/desktop/src/renderer/routes/_authenticated/settings/git/components/GitSettings/GitSettings.tsx
Added PR_LINK_PROVIDER_LABELS, settings search item, provider selector and optional custom domain input, query/mutation handling and validation.
PR Open Flows & Components
apps/desktop/src/renderer/screens/main/hooks/useCreateOrOpenPR/useCreateOrOpenPR.ts, apps/desktop/src/renderer/screens/main/components/.../PRButton/PRButton.tsx, apps/desktop/src/renderer/routes/.../workspace/$workspaceId/page.tsx, apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/.../*.tsx
Fetches provider settings and uses transformPrUrl when opening PR links (hotkey and UI), updates dependency arrays and toast messaging.
Renderer exports
apps/desktop/src/renderer/utils/pr-url/index.ts
Re-exported transformPrUrl for public usage.

Sequence Diagram

sequenceDiagram
    actor User
    participant SettingsUI as Settings UI
    participant Client as PR Flow / UI
    participant TRPC as Settings Router
    participant DB as Database

    User->>SettingsUI: select provider / enter custom domain
    SettingsUI->>TRPC: setPrLinkProvider(provider, customDomain)
    TRPC->>DB: upsert settings (pr_link_provider, pr_link_custom_domain)
    DB-->>TRPC: ok
    TRPC-->>SettingsUI: success

    User->>Client: click "Open PR" / press hotkey
    Client->>TRPC: getPrLinkProvider()
    TRPC->>DB: read settings
    DB-->>TRPC: provider, customDomain
    TRPC-->>Client: provider, customDomain
    Client->>Client: transformPrUrl(githubUrl, provider, customDomain)
    Client->>Client: window.open(transformedUrl)
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Poem

🐰 I nudge the links, a tweak so neat,

From GitHub hops to a custom street,
Providers chosen, domains trimmed fine,
Pull requests open right on time,
Rabbity cheers — the URLs align!

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the primary change: adding a customizable PR link provider setting to the desktop application.
Description check ✅ Passed The PR description is well-structured and comprehensive, covering the feature summary, test plan, and additional context via auto-generated summary.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

3 issues found across 13 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="apps/desktop/src/renderer/utils/pr-url/pr-url.ts">

<violation number="1" location="apps/desktop/src/renderer/utils/pr-url/pr-url.ts:20">
P2: Use exact URL origin/hostname validation instead of `startsWith` to avoid transforming non-GitHub domains that share the same prefix.</violation>
</file>

<file name="packages/local-db/src/schema/schema.ts">

<violation number="1" location="packages/local-db/src/schema/schema.ts:212">
P1: New `settings` columns were added in schema without a corresponding SQL migration, which will break existing local DBs at runtime.</violation>
</file>

<file name="apps/desktop/src/renderer/routes/_authenticated/_dashboard/workspace/$workspaceId/page.tsx">

<violation number="1" location="apps/desktop/src/renderer/routes/_authenticated/_dashboard/workspace/$workspaceId/page.tsx:389">
P2: Add `noopener,noreferrer` when opening PR links from the hotkey to prevent opener access from external pages.</violation>
</file>

Since this is your first cubic review, here's how it works:

  • cubic automatically reviews your code and comments on bugs and improvements
  • Teach cubic by replying to its comments. cubic learns from your replies and gets better over time
  • Add one-off context when rerunning by tagging @cubic-dev-ai with guidance or docs links (including llms.txt)
  • Ask questions if you need clarification on any suggestion

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

worktreeBaseDir: text("worktree_base_dir"),
openLinksInApp: integer("open_links_in_app", { mode: "boolean" }),
defaultEditor: text("default_editor").$type<ExternalApp>(),
prLinkProvider: text("pr_link_provider").$type<PrLinkProvider>(),
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot Mar 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1: New settings columns were added in schema without a corresponding SQL migration, which will break existing local DBs at runtime.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/local-db/src/schema/schema.ts, line 212:

<comment>New `settings` columns were added in schema without a corresponding SQL migration, which will break existing local DBs at runtime.</comment>

<file context>
@@ -208,6 +209,8 @@ export const settings = sqliteTable("settings", {
 	worktreeBaseDir: text("worktree_base_dir"),
 	openLinksInApp: integer("open_links_in_app", { mode: "boolean" }),
 	defaultEditor: text("default_editor").$type<ExternalApp>(),
+	prLinkProvider: text("pr_link_provider").$type<PrLinkProvider>(),
+	prLinkCustomDomain: text("pr_link_custom_domain"),
 });
</file context>
Fix with Cubic

if (!githubUrl.includes("/pull/")) return githubUrl;

const githubBase = "https://github.com";
if (!githubUrl.startsWith(githubBase)) return githubUrl;
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot Mar 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Use exact URL origin/hostname validation instead of startsWith to avoid transforming non-GitHub domains that share the same prefix.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At apps/desktop/src/renderer/utils/pr-url/pr-url.ts, line 20:

<comment>Use exact URL origin/hostname validation instead of `startsWith` to avoid transforming non-GitHub domains that share the same prefix.</comment>

<file context>
@@ -0,0 +1,29 @@
+	if (!githubUrl.includes("/pull/")) return githubUrl;
+
+	const githubBase = "https://github.com";
+	if (!githubUrl.startsWith(githubBase)) return githubUrl;
+
+	if (provider === "custom") {
</file context>
Fix with Cubic

Comment on lines +389 to +392
window.open(
transformPrUrl(pr.url, prProvider, prCustomDomain),
"_blank",
);
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot Mar 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Add noopener,noreferrer when opening PR links from the hotkey to prevent opener access from external pages.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At apps/desktop/src/renderer/routes/_authenticated/_dashboard/workspace/$workspaceId/page.tsx, line 389:

<comment>Add `noopener,noreferrer` when opening PR links from the hotkey to prevent opener access from external pages.</comment>

<file context>
@@ -376,17 +378,24 @@ function WorkspacePage() {
 		() => {
 			if (pr?.url) {
-				window.open(pr.url, "_blank");
+				window.open(
+					transformPrUrl(pr.url, prProvider, prCustomDomain),
+					"_blank",
</file context>
Suggested change
window.open(
transformPrUrl(pr.url, prProvider, prCustomDomain),
"_blank",
);
window.open(
transformPrUrl(pr.url, prProvider, prCustomDomain),
"_blank",
"noopener,noreferrer",
);
Fix with Cubic

Use transformPrUrl in WorkspaceStatusBadge and WorkspaceHoverCard so
clicking the PR badge or "View on …" button respects the user's chosen
PR link provider (BetterHub, Devin, custom, etc.).
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In
`@apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceListItem/components/WorkspaceHoverCard/WorkspaceHoverCard.tsx`:
- Around line 46-49: The code is defaulting prProvider to
DEFAULT_PR_LINK_PROVIDER before the query settles; update the
electronTrpc.settings.getPrLinkProvider.useQuery() usage to account for
loading/error state (e.g., check isLoading/isFetching or data === undefined) and
avoid falling back to DEFAULT_PR_LINK_PROVIDER until prLinkSettings is defined
or you have a synchronous hydrate source; modify the logic around
prLinkSettings/prProvider in WorkspaceHoverCard (references:
electronTrpc.settings.getPrLinkProvider.useQuery(), prLinkSettings, prProvider,
DEFAULT_PR_LINK_PROVIDER) so the PR link is either not rendered (or disabled)
while settings are loading or is sourced from a synchronous settings
cache/hydration to prevent briefly rendering a GitHub link for users of
BetterHub/Devin/custom.

In
`@apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceListItem/WorkspaceStatusBadge.tsx`:
- Around line 24-27: The badge's click handler assumes prLinkSettings
immediately, causing DEFAULT_PR_LINK_PROVIDER to be used while the query is
unresolved; update WorkspaceStatusBadge (and similar components: PRButton,
WorkspaceHoverCard, useCreateOrOpenPR) to check the query loading/state (e.g.,
useQuery's isLoading/isFetching or whether prLinkSettings is defined) and
disable or no-op the click until prLinkSettings is available (or show a loading
state), rather than using DEFAULT_PR_LINK_PROVIDER; alternatively, hydrate the
query at app load so prLinkSettings is defined before the badge is interactive.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 5905c94f-c041-4b9f-bd5f-7fa31481462c

📥 Commits

Reviewing files that changed from the base of the PR and between 3a9c37c and e7367f8.

📒 Files selected for processing (2)
  • apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceListItem/WorkspaceStatusBadge.tsx
  • apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceListItem/components/WorkspaceHoverCard/WorkspaceHoverCard.tsx

Comment on lines +46 to +49
const { data: prLinkSettings } =
electronTrpc.settings.getPrLinkProvider.useQuery();
const prProvider = prLinkSettings?.provider ?? DEFAULT_PR_LINK_PROVIDER;
const prCustomDomain = prLinkSettings?.customDomain;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

cat -n "apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceListItem/components/WorkspaceHoverCard/WorkspaceHoverCard.tsx"

Repository: superset-sh/superset

Length of output: 7968


The PR link can temporarily default to GitHub while settings are loading, allowing users to click through to the wrong provider.

Lines 46-47 don't capture the loading state from getPrLinkProvider, so prProvider falls back to "github" before the query settles. When the PR data loads first (lines 179-189), the link renders immediately with this default, creating a window where users who configured BetterHub/Devin/custom can still be sent to GitHub. Either gate the PR link's rendering until prLinkSettings is available, or hydrate this value from a synchronously available settings source.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceListItem/components/WorkspaceHoverCard/WorkspaceHoverCard.tsx`
around lines 46 - 49, The code is defaulting prProvider to
DEFAULT_PR_LINK_PROVIDER before the query settles; update the
electronTrpc.settings.getPrLinkProvider.useQuery() usage to account for
loading/error state (e.g., check isLoading/isFetching or data === undefined) and
avoid falling back to DEFAULT_PR_LINK_PROVIDER until prLinkSettings is defined
or you have a synchronous hydrate source; modify the logic around
prLinkSettings/prProvider in WorkspaceHoverCard (references:
electronTrpc.settings.getPrLinkProvider.useQuery(), prLinkSettings, prProvider,
DEFAULT_PR_LINK_PROVIDER) so the PR link is either not rendered (or disabled)
while settings are loading or is sourced from a synchronous settings
cache/hydration to prevent briefly rendering a GitHub link for users of
BetterHub/Devin/custom.

Comment on lines +24 to +27
const { data: prLinkSettings } =
electronTrpc.settings.getPrLinkProvider.useQuery();
const prProvider = prLinkSettings?.provider ?? DEFAULT_PR_LINK_PROVIDER;
const prCustomDomain = prLinkSettings?.customDomain;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Router and persistence paths for PR link settings:"
rg -n -C3 '\bgetPrLinkProvider\b|\bsetPrLinkProvider\b|pr_link_provider|pr_link_custom_domain' apps/desktop/src

echo
echo "All query consumers:"
rg -n -C3 'getPrLinkProvider\.useQuery\(' apps/desktop/src

echo
echo "Any prefetch/initial-data/hydration for this query:"
rg -n -C3 'initialData|placeholderData|prefetch|prefetchQuery|ensureQueryData|hydrate' apps/desktop/src

Repository: superset-sh/superset

Length of output: 48122


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "=== tRPC client configuration and QueryClient setup ==="
fd -e ts -e tsx 'providers|ElectronTRPC|QueryClient' apps/desktop/src/renderer --type f | head -20 | xargs grep -l 'QueryClient\|prefetch\|defaultOptions' 2>/dev/null | head -5

echo
echo "=== ElectronTRPCProvider setup (checking for default behavior) ==="
cat apps/desktop/src/renderer/providers/ElectronTRPCProvider/ElectronTRPCProvider.tsx | head -100

echo
echo "=== Root layout or app initialization (checking for prefetch on startup) ==="
rg -n 'getPrLinkProvider' apps/desktop/src/renderer/routes --type ts --type tsx

echo
echo "=== Check if settings query is called during app initialization ==="
rg -n -B3 -A3 'useEffect|useLayoutEffect' apps/desktop/src/renderer/providers --type ts --type tsx | grep -A5 -B5 'getPrLink\|settings' || echo "No settings query in providers"

Repository: superset-sh/superset

Length of output: 1328


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "=== Root layout files ==="
find apps/desktop/src/renderer -name 'layout.*' -o -name 'root.*' -o -name '_app.*' -o -name 'page.tsx' | grep -E '(root|_app|layout)' | head -10

echo
echo "=== Check main app entry point ==="
cat apps/desktop/src/renderer/routes/_app.tsx 2>/dev/null | head -150 || cat apps/desktop/src/renderer/routes/layout.tsx 2>/dev/null | head -150 || echo "No main layout found at common paths"

echo
echo "=== Check if getPrLinkProvider query is prefetched anywhere in loaders ==="
rg 'getPrLinkProvider' apps/desktop/src/renderer/routes -A2 -B2

echo
echo "=== Check the specific component tree for WorkspaceStatusBadge ==="
cat apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceListItem/WorkspaceStatusBadge.tsx | head -100

Repository: superset-sh/superset

Length of output: 5166


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "=== Full WorkspaceStatusBadge component to verify click gating ==="
cat apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceListItem/WorkspaceStatusBadge.tsx

echo
echo "=== Check other components using getPrLinkProvider for comparison ==="
echo "--- PRButton.tsx ---"
cat apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/ChangesView/components/ChangesHeader/components/PRButton/PRButton.tsx | grep -A20 'getPrLinkProvider' | head -30

echo
echo "--- WorkspaceHoverCard.tsx ---"
cat apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceListItem/components/WorkspaceHoverCard/WorkspaceHoverCard.tsx | grep -A20 'getPrLinkProvider' | head -30

Repository: superset-sh/superset

Length of output: 4134


Gate the click handler until the settings query is resolved.

On the initial render, prLinkSettings is undefined, so prProvider falls back to DEFAULT_PR_LINK_PROVIDER (GitHub). If the user clicks before the query resolves, this badge opens GitHub even when they've saved BetterHub, Devin, or a custom domain. Either gate the click until data is defined, or hydrate this query with initial data on app load instead of treating the loading state as "GitHub".

This pattern affects multiple components using getPrLinkProvider.useQuery() without checking the loading state (PRButton, WorkspaceHoverCard, useCreateOrOpenPR hook). Only GitSettings properly checks isPrLinkProviderLoading.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceListItem/WorkspaceStatusBadge.tsx`
around lines 24 - 27, The badge's click handler assumes prLinkSettings
immediately, causing DEFAULT_PR_LINK_PROVIDER to be used while the query is
unresolved; update WorkspaceStatusBadge (and similar components: PRButton,
WorkspaceHoverCard, useCreateOrOpenPR) to check the query loading/state (e.g.,
useQuery's isLoading/isFetching or whether prLinkSettings is defined) and
disable or no-op the click until prLinkSettings is available (or show a loading
state), rather than using DEFAULT_PR_LINK_PROVIDER; alternatively, hydrate the
query at app load so prLinkSettings is defined before the badge is interactive.

Copy link
Copy Markdown

@devin-ai-integration devin-ai-integration Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 potential issue.

🐛 1 issue in files not directly in the diff

🐛 Missed transformPrUrl application in CommitInput's handleOpenPR (apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/ChangesView/components/CommitInput/CommitInput.tsx:147)

The PR's intent is to transform all PR URLs through the new transformPrUrl utility based on the user's PR link provider setting. However, CommitInput.tsx:147 still opens the raw GitHub PR URL directly via window.open(prUrl, "_blank") without applying the transform. Every other site that opens a PR URL in the diff was updated (page.tsx, WorkspaceStatusBadge, WorkspaceHoverCard, PRButton, useCreateOrOpenPR), but this one was missed. When a user has configured a non-GitHub PR link provider (e.g., BetterHub, Devin, or custom), clicking "Open PR" from the commit input area will still navigate to GitHub instead of the configured provider.

View 4 additional findings in Devin Review.

Open in Devin Review

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