Skip to content

fix(desktop): refresh v2 terminal link tooltip editor + nudge plain clicks#3552

Merged
saddlepaddle merged 3 commits intomainfrom
external-link-text-stale
Apr 18, 2026
Merged

fix(desktop): refresh v2 terminal link tooltip editor + nudge plain clicks#3552
saddlepaddle merged 3 commits intomainfrom
external-link-text-stale

Conversation

@saddlepaddle
Copy link
Copy Markdown
Collaborator

@saddlepaddle saddlepaddle commented Apr 18, 2026

Summary

  • Stale editor label: LinkHoverTooltip fetched the default editor in a mount-only useEffect, so the modifier-shift label (Open in Cursor, etc.) stayed frozen at whatever the setting was when the terminal pane first mounted. Now refetches on every hover-start — the tooltip uses the imperative electronTrpcClient (v2 workspaces hijack the electronTrpc React-hooks context), so there's no react-query cache to invalidate; fresh fetch-on-hover is the right primitive.
  • Discoverability nudge: plain (no-modifier) clicks on a detected file path in the v2 terminal did nothing, which made the ⌘-click affordance effectively undiscoverable. On a plain file-link click we now flash Hold ⌘ to open · ⌘⇧ for external (or Ctrl / Ctrl+Shift off-mac) at the click position.
  • Module-level counter caps the nudge at two shows per renderer session so it teaches once or twice and then gets out of the way. Suppressed while the modifier-hover tooltip is already on screen (if you held the modifier, you've graduated). Uses framer-motion's AnimatePresence for fade in/out.
  • URL links are unchanged — plain-click already opens URLs in the in-app browser, so there's no failed attempt to nudge.

Test plan

  • In a v2 workspace terminal, hover a file path with ⌘ held and confirm the tooltip shows Open in editor / Reveal in sidebar / Open in <editor name>.
  • Change the default editor in Settings (e.g., Cursor → VS Code) without closing the terminal pane, hover a file with ⌘⇧ held, and confirm the label reflects the new editor.
  • Plain-click a file path in the v2 terminal; confirm the hint fades in, lingers ~2s, fades out.
  • Plain-click a third file path in the same session; confirm no hint (cap honored).
  • Plain-click a file path, then hold ⌘ and hover the same link; confirm the hover tooltip supersedes the hint.
  • Plain-click a URL in the v2 terminal; confirm it still opens in the in-app browser and no hint appears.

Summary by cubic

Fixes v2 terminal link tooltip labels and adds a small nudge for plain file‑link clicks. ⌘/Ctrl hover now shows clear, generic text (e.g., “Open in pane” for files and URLs, “Open in external editor” with Shift), and plain clicks briefly teach the modifier shortcuts.

  • Bug Fixes

    • Replaced editor-specific labels and fetches with stable text: file=“Open in pane”, Shift=“Open in external editor”, URL ⌘=“Open in pane”, URL ⌘⇧=“Open in external browser”.
  • New Features

    • Plain-clicking a file path shows “Hold ⌘ to open · ⌘⇧ for external” (Ctrl/Ctrl+Shift on non‑Mac) at the click position; fades via framer-motion, capped at two per session, suppressed when the modifier-hover tooltip is visible; URL behavior unchanged.

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

Summary by CodeRabbit

  • New Features

    • Animated "hold modifier" hint appears at the click location when file links are clicked without modifier keys, showing platform-specific modifier key text.
    • Hover tooltips now compute labels synchronously and render smoother animations; tooltips can show either hover info or the hold-hint.
  • Bug Fixes / UX

    • Clicking file links reliably triggers the hint (and exits) instead of doing nothing.
    • Hints auto-clear after a short duration and are rate-limited to avoid repetition.

…lain clicks

- LinkHoverTooltip fetched the default editor in a mount-only useEffect, so
  changing the default editor in settings left the modifier-shift label
  ("Open in Cursor", etc.) stale until the terminal pane unmounted. Refetch on
  every hover-start instead.
- Plain (no-modifier) clicks on a detected file path in the v2 terminal were
  silent, which made the modifier-key affordance undiscoverable. On a plain
  file-link click, show a transient tooltip at the click position
  ("Hold ⌘ to open · ⌘⇧ for external", or Ctrl/Ctrl+Shift off-mac). Capped at
  two shows per renderer session via a module-level counter, and suppressed
  while the modifier-hover tooltip is already visible. Uses framer-motion's
  AnimatePresence for fade in/out.
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 18, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: a1a494d5-3cbb-4323-a500-c06111377143

📥 Commits

Reviewing files that changed from the base of the PR and between 48254eb and 1196764.

📒 Files selected for processing (1)
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/TerminalPane/components/LinkHoverTooltip/LinkHoverTooltip.tsx

📝 Walkthrough

Walkthrough

Adds a transient click-hint system: a new useLinkClickHint hook tracks hint coordinates and limits usages; TerminalPane calls showHint on non-modifier file-link clicks and passes hint into LinkHoverTooltip, which now renders an animated modifier-key hint when present.

Changes

Cohort / File(s) Summary
TerminalPane Integration
apps/desktop/src/renderer/.../TerminalPane/TerminalPane.tsx
Uses useLinkClickHint(); onFileLinkClick now calls showHint(clientX, clientY) for non-modifier clicks and returns; passes hint into LinkHoverTooltip; added showHint to effect deps.
LinkHoverTooltip Enhancement
apps/desktop/src/renderer/.../LinkHoverTooltip/LinkHoverTooltip.tsx
Component API extended to accept hint; removed async default-editor fetch and related state; label logic simplified; when no hovered modifier, renders an animated “hold modifier” hint at hint coords; centralized tooltip classes and platform-specific modifier label.
Hook Implementation & Re-export
apps/desktop/src/renderer/.../useLinkClickHint/useLinkClickHint.ts, apps/desktop/src/renderer/.../useLinkClickHint/index.ts
Added useLinkClickHint hook and LinkClickHint type; manages hint state, auto-clear timeout (2000ms), and module-level hintsRemaining counter; added index re-export.

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant TerminalPane
  participant useLinkClickHint
  participant LinkHoverTooltip

  User->>TerminalPane: click file link (no Ctrl/Meta)
  TerminalPane->>useLinkClickHint: showHint(clientX, clientY)
  useLinkClickHint-->>TerminalPane: hint (updated)
  TerminalPane->>LinkHoverTooltip: pass hint prop
  LinkHoverTooltip->>LinkHoverTooltip: render animated modifier hint
  Note right of useLinkClickHint: hint auto-clears after 2000ms
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Poem

🐰 I tapped a link, a tiny spark,
A hint appeared — a guiding mark.
Hold the key, the tooltip sings,
Two seconds of helpful wings.
Hop on — small magic for curious paws!

🚥 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 captures the two main changes: fixing stale editor labels in the v2 terminal link tooltip and adding a discoverability nudge for plain file-link clicks.
Description check ✅ Passed The PR description is comprehensive and detailed, covering all required sections including Summary, Related Issues context, Type of Change (Bug fix and New feature), Testing checklist, and Additional Notes.

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

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch external-link-text-stale

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.

@greptile-apps
Copy link
Copy Markdown

greptile-apps Bot commented Apr 18, 2026

Greptile Summary

This PR fixes two UX gaps in the v2 workspace terminal's link-click handling: it corrects a stale editor name in the modifier-hover tooltip (previously frozen at mount time, now refreshed on every hover-start via electronTrpcClient), and adds a discoverability nudge that flashes a Hold ⌘ to open hint when a user plain-clicks a file path — teaching the modifier-key affordance without being permanently intrusive.

Key changes:

  • LinkHoverTooltip: useEffect dependency changed from [] to [hovering] so getDefaultEditor is re-queried on every hover-start, keeping the ⌘⇧ Open in <editor> label fresh after settings changes without restarting the terminal pane.
  • useLinkClickHint (new hook): manages a hint state and a module-level hintsRemaining counter (capped at 2 per renderer session) that auto-clears after 2 s via a timeout, with proper cleanup on unmount.
  • TerminalPane: plain file-link clicks now call showHint(clientX, clientY) instead of silently returning; showHint is correctly included in the useEffect dependency array (it's a stable useCallback, so no extra re-runs).
  • Framer Motion's AnimatePresence handles the hint fade-in/out; the hover tooltip (modifier-only) supersedes the hint when both are active, avoiding overlapping messages.

Confidence Score: 4/5

Safe to merge — fixes a real stale-state bug and adds a well-scoped discoverability feature with no regressions to existing click/URL behavior.

Logic is correct throughout: the per-hover getDefaultEditor fetch properly cancels in-flight requests, the AnimatePresence pattern is used correctly, the stable useCallback doesn't cause unintended effect re-runs, and the module-level counter is an intentional design choice matching the stated 'per renderer session' goal. Only P2 style suggestions remain.

No files require special attention. The two P2 suggestions (deprecated navigator.platform and a clarifying comment on the module-level counter) are non-blocking.

Important Files Changed

Filename Overview
apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/TerminalPane/hooks/useLinkClickHint/useLinkClickHint.ts New hook managing a per-session hint nudge with a module-level counter (intentional design), stable useCallback, and proper timeout cleanup on unmount. Logic is sound; the module-level counter is a deliberate trade-off documented in the PR.
apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/TerminalPane/hooks/useLinkClickHint/index.ts Barrel re-export for the new hook; no issues.
apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/TerminalPane/components/LinkHoverTooltip/LinkHoverTooltip.tsx Refactored to fetch the default editor on every hover-start (fixes stale label bug), added AnimatePresence-animated hint overlay for plain-click nudge. The navigator.platform usage is deprecated but functional in Electron; effect dependency on hovering boolean is correct.
apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/TerminalPane/TerminalPane.tsx Integrates useLinkClickHint, calls showHint on plain file-link clicks, adds it to the useEffect dependency array (stable callback, no extra runs), and threads hint through to LinkHoverTooltip.

Sequence Diagram

sequenceDiagram
    participant User
    participant TerminalPane
    participant useLinkClickHint
    participant LinkHoverTooltip
    participant electronTrpcClient

    Note over User,electronTrpcClient: Plain file-link click (no modifier)
    User->>TerminalPane: click file link (no ⌘/Ctrl)
    TerminalPane->>useLinkClickHint: showHint(clientX, clientY)
    useLinkClickHint-->>useLinkClickHint: hintsRemaining > 0? decrement, setHint, setTimeout 2s
    useLinkClickHint-->>LinkHoverTooltip: hint state updated
    LinkHoverTooltip-->>User: fade-in "Hold ⌘ to open · ⌘⇧ for external"
    Note over useLinkClickHint: after 2000ms
    useLinkClickHint-->>LinkHoverTooltip: setHint(null)
    LinkHoverTooltip-->>User: fade-out hint

    Note over User,electronTrpcClient: Modifier-key hover (⌘ held)
    User->>TerminalPane: hover file link with ⌘
    TerminalPane->>LinkHoverTooltip: hoveredLink (modifier=true)
    LinkHoverTooltip->>electronTrpcClient: getDefaultEditor.query()
    electronTrpcClient-->>LinkHoverTooltip: ExternalApp (e.g. Cursor)
    LinkHoverTooltip-->>User: show "Open in Cursor" tooltip (suppresses hint if visible)
Loading
Prompt To Fix All With AI
This is a comment left during a code review.
Path: apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/TerminalPane/components/LinkHoverTooltip/LinkHoverTooltip.tsx
Line: 15-17

Comment:
**`navigator.platform` is deprecated**

`navigator.platform` has been deprecated in modern browser/Electron versions. The recommended alternative is `navigator.userAgentData?.platform` (with a fallback for non-supporting environments) or parsing `navigator.userAgent`. While this still works fine in current Electron, it may produce warnings in future versions.

```suggestion
const isMac =
	typeof navigator !== "undefined" &&
	(navigator.userAgentData
		? navigator.userAgentData.platform.toLowerCase().includes("mac")
		: navigator.userAgent.toLowerCase().includes("mac"));
```

How can I resolve this? If you propose a fix, please make it concise.

---

This is a comment left during a code review.
Path: apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/TerminalPane/hooks/useLinkClickHint/useLinkClickHint.ts
Line: 11

Comment:
**Module-level counter survives HMR reloads in dev**

`hintsRemaining` is initialized at module evaluation time and never resets as long as the module stays in memory. In development with hot module replacement, a file save that reloads only the component (not the module) won't reset the counter, so developers testing the nudge will see it fire fewer times than expected after the first two clicks. A comment noting this is intentional (or using `sessionStorage` to survive actual page reloads while still being resettable on dev reload) would help future contributors understand the choice.

This is non-critical for production users since HMR isn't active there.

How can I resolve this? If you propose a fix, please make it concise.

Reviews (1): Last reviewed commit: "fix(desktop): refresh v2 terminal link t..." | Re-trigger Greptile

Comment on lines +15 to +17
const isMac =
typeof navigator !== "undefined" &&
navigator.platform.toLowerCase().includes("mac");
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 navigator.platform is deprecated

navigator.platform has been deprecated in modern browser/Electron versions. The recommended alternative is navigator.userAgentData?.platform (with a fallback for non-supporting environments) or parsing navigator.userAgent. While this still works fine in current Electron, it may produce warnings in future versions.

Suggested change
const isMac =
typeof navigator !== "undefined" &&
navigator.platform.toLowerCase().includes("mac");
const isMac =
typeof navigator !== "undefined" &&
(navigator.userAgentData
? navigator.userAgentData.platform.toLowerCase().includes("mac")
: navigator.userAgent.toLowerCase().includes("mac"));
Prompt To Fix With AI
This is a comment left during a code review.
Path: apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/TerminalPane/components/LinkHoverTooltip/LinkHoverTooltip.tsx
Line: 15-17

Comment:
**`navigator.platform` is deprecated**

`navigator.platform` has been deprecated in modern browser/Electron versions. The recommended alternative is `navigator.userAgentData?.platform` (with a fallback for non-supporting environments) or parsing `navigator.userAgent`. While this still works fine in current Electron, it may produce warnings in future versions.

```suggestion
const isMac =
	typeof navigator !== "undefined" &&
	(navigator.userAgentData
		? navigator.userAgentData.platform.toLowerCase().includes("mac")
		: navigator.userAgent.toLowerCase().includes("mac"));
```

How can I resolve this? If you propose a fix, please make it concise.

const HINT_DURATION_MS = 2000;
const MAX_HINTS_PER_SESSION = 2;

let hintsRemaining = MAX_HINTS_PER_SESSION;
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Module-level counter survives HMR reloads in dev

hintsRemaining is initialized at module evaluation time and never resets as long as the module stays in memory. In development with hot module replacement, a file save that reloads only the component (not the module) won't reset the counter, so developers testing the nudge will see it fire fewer times than expected after the first two clicks. A comment noting this is intentional (or using sessionStorage to survive actual page reloads while still being resettable on dev reload) would help future contributors understand the choice.

This is non-critical for production users since HMR isn't active there.

Prompt To Fix With AI
This is a comment left during a code review.
Path: apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/TerminalPane/hooks/useLinkClickHint/useLinkClickHint.ts
Line: 11

Comment:
**Module-level counter survives HMR reloads in dev**

`hintsRemaining` is initialized at module evaluation time and never resets as long as the module stays in memory. In development with hot module replacement, a file save that reloads only the component (not the module) won't reset the counter, so developers testing the nudge will see it fire fewer times than expected after the first two clicks. A comment noting this is intentional (or using `sessionStorage` to survive actual page reloads while still being resettable on dev reload) would help future contributors understand the choice.

This is non-critical for production users since HMR isn't active there.

How can I resolve this? If you propose a fix, please make it concise.

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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/TerminalPane/components/LinkHoverTooltip/LinkHoverTooltip.tsx (1)

50-71: ⚠️ Potential issue | 🟡 Minor

Refetch on the hovered link identity, not just the boolean hover state.

Line 71 only reruns the default-editor query when hovering flips between false and true. If hoveredLink is replaced while it remains non-null, the tooltip can keep the previous editor label instead of refetching for that hover-start. Track the hovered link identity while preserving the guard against modifier-key-only updates.

Proposed fix
-	const hovering = hoveredLink !== null;
+	const hoveredInfo = hoveredLink?.info ?? null;
 
 	useEffect(() => {
-		if (!hovering) return;
+		if (!hoveredInfo) return;
 		let cancelled = false;
 		electronTrpcClient.settings.getDefaultEditor
 			.query()
@@
 		return () => {
 			cancelled = true;
 		};
-	}, [hovering]);
+	}, [hoveredInfo]);
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/`$workspaceId/hooks/usePaneRegistry/components/TerminalPane/components/LinkHoverTooltip/LinkHoverTooltip.tsx
around lines 50 - 71, The effect currently only depends on hovering, so it won't
refetch when hoveredLink changes identity while remaining non-null; update the
useEffect dependency array to include a stable identity from hoveredLink (e.g.,
hoveredLink?.href or hoveredLink?.id) in addition to hovering, and keep the
early guard (if (!hovering) return) and cancellation logic; in other words,
change useEffect([...]) to useEffect([hovering, hoveredLink?.href]) (or another
unique property) so electronTrpcClient.settings.getDefaultEditor.query() is
re-run for each distinct hovered link while still ignoring modifier-key-only
updates.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Outside diff comments:
In
`@apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/`$workspaceId/hooks/usePaneRegistry/components/TerminalPane/components/LinkHoverTooltip/LinkHoverTooltip.tsx:
- Around line 50-71: The effect currently only depends on hovering, so it won't
refetch when hoveredLink changes identity while remaining non-null; update the
useEffect dependency array to include a stable identity from hoveredLink (e.g.,
hoveredLink?.href or hoveredLink?.id) in addition to hovering, and keep the
early guard (if (!hovering) return) and cancellation logic; in other words,
change useEffect([...]) to useEffect([hovering, hoveredLink?.href]) (or another
unique property) so electronTrpcClient.settings.getDefaultEditor.query() is
re-run for each distinct hovered link while still ignoring modifier-key-only
updates.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: a66a3868-ecdf-4df9-b866-3dc27d21a6fd

📥 Commits

Reviewing files that changed from the base of the PR and between bb657ec and d930ff5.

📒 Files selected for processing (4)
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/TerminalPane/TerminalPane.tsx
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/TerminalPane/components/LinkHoverTooltip/LinkHoverTooltip.tsx
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/TerminalPane/hooks/useLinkClickHint/index.ts
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/TerminalPane/hooks/useLinkClickHint/useLinkClickHint.ts

- "Open in editor" → "Open in pane" for the ⌘-click file case (native in-app
  file pane is what actually happens).
- Shift variant always says "Open in external editor" instead of interpolating
  the configured editor name. openFileInEditor uses the global settings
  defaultEditor (non-editor apps like Finder can't be set there), so the
  interpolated name could disagree with a user's per-project preference — the
  generic label never lies.
- Drops the getDefaultEditor fetch, defaultEditor state, and getAppOption/
  getAppLabel plumbing that went with it.
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.

No issues found across 4 files

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.

1 issue found across 1 file (changes from recent commits).

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/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/TerminalPane/components/LinkHoverTooltip/LinkHoverTooltip.tsx">

<violation number="1" location="apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/TerminalPane/components/LinkHoverTooltip/LinkHoverTooltip.tsx:27">
P2: Keep the shift-hover label tied to the current default editor instead of hard-coding a generic string.</violation>
</file>

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

: "Open externally";
}
return info.isDirectory ? "Reveal in sidebar" : "Open in editor";
if (shift) return "Open in external editor";
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot Apr 18, 2026

Choose a reason for hiding this comment

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

P2: Keep the shift-hover label tied to the current default editor instead of hard-coding a generic string.

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/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/TerminalPane/components/LinkHoverTooltip/LinkHoverTooltip.tsx, line 27:

<comment>Keep the shift-hover label tied to the current default editor instead of hard-coding a generic string.</comment>

<file context>
@@ -24,52 +20,15 @@ interface LinkHoverTooltipProps {
-			: "Open externally";
-	}
-	return info.isDirectory ? "Reveal in sidebar" : "Open in editor";
+	if (shift) return "Open in external editor";
+	return info.isDirectory ? "Reveal in sidebar" : "Open in pane";
 }
</file context>
Fix with Cubic

@saddlepaddle saddlepaddle merged commit 5e8fc2d into main Apr 18, 2026
5 of 6 checks passed
@github-actions
Copy link
Copy Markdown
Contributor

🧹 Preview Cleanup Complete

The following preview resources have been cleaned up:

  • ⚠️ Neon database branch
  • ⚠️ Electric Fly.io app

Thank you for your contribution! 🎉

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.

1 issue found across 1 file (changes from recent commits).

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/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/TerminalPane/components/LinkHoverTooltip/LinkHoverTooltip.tsx">

<violation number="1" location="apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/TerminalPane/components/LinkHoverTooltip/LinkHoverTooltip.tsx:25">
P2: Restore the non-shift URL tooltip label to match the browser action.</violation>
</file>

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

return defaultEditor
? `Open in ${getAppLabel(defaultEditor)}`
: "Open externally";
return shift ? "Open in external browser" : "Open in pane";
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot Apr 18, 2026

Choose a reason for hiding this comment

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

P2: Restore the non-shift URL tooltip label to match the browser action.

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/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/TerminalPane/components/LinkHoverTooltip/LinkHoverTooltip.tsx, line 25:

<comment>Restore the non-shift URL tooltip label to match the browser action.</comment>

<file context>
@@ -22,7 +22,7 @@ interface LinkHoverTooltipProps {
 function getLabel(info: LinkHoverInfo, shift: boolean): string {
 	if (info.kind === "url") {
-		return shift ? "Open in external browser" : "Open in browser";
+		return shift ? "Open in external browser" : "Open in pane";
 	}
 	if (shift) return "Open in external editor";
</file context>
Suggested change
return shift ? "Open in external browser" : "Open in pane";
return shift ? "Open in external browser" : "Open in browser";
Fix with Cubic

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