feat(web): terminal link context menu actions - #7280

Open
flamboh wants to merge 2 commits into
pingdotgg:mainfrom
flamboh:t3code/fix-terminal-directory-hover
Open

feat(web): terminal link context menu actions#7280
flamboh wants to merge 2 commits into
pingdotgg:mainfrom
flamboh:t3code/fix-terminal-directory-hover

Conversation

@flamboh

@flambohflamboh commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

What Changed

Right-clicking a terminal path or URL now offers Open, Add to chat, and Copy for the target under the pointer. The highlight stays for as long as the menu is open.

Add to chat inserts paths with the file chip appearance and URLs as plain text.

Why

Right-clicking threw away the detected target and offered only the selection actions and Paste, so you couldn't open or copy the path or link you were pointing at. Putting this in the context menu is a natural addition.

Behavior precedent

Ghostty-based terminals do the same thing: right-click offers actions for the target under the pointer and pins the highlight while the menu is open.

UI Changes

Before

image

After

image
Cap.2026-08-19.at.00.22.13.mp4

Related PRs

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes

Implemented by GPT-5.6 Sol and Fable 5 via Codex and T3 Code.

Note

Add terminal link context menu actions for chat, copy, and open

  • Right-clicking a link in the terminal now shows a context menu with link-aware actions: add to chat, copy, open in editor (for paths), or open in browser/preview (for URLs)
  • terminalLinkChatText resolves paths against cwd and strips position suffixes; terminalLinkCopyText returns clean URLs or paths without position info
  • Clicked links/paths are inserted into the chat composer via addTerminalLinkToDraft in ChatView, with a toast on failure
  • GhosttyTerminalSurface pins the link highlight while the context menu is open and passes linkText through the onContextMenu callback
  • openTerminalLinkInPreview is split into a capability check (canOpenTerminalLinkInPreview) and a direct-open path, with showTerminalLinkOpenMenu presenting the integrated-vs-system browser choice
  • Behavioral Change: GhosttyTerminalSurfaceOptions.onContextMenu signature changes from (event) to (event, linkText) returning void | Promise<void>; existing callers must update

Macroscope summarized f4fd4ba.

@coderabbitai

coderabbitaiBot commented Aug 17, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: d01b6203-2825-4cfb-baa1-307b36f90ed6

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 17, 2026
Comment threadapps/web/src/terminal/ghostty/surface.ts Outdated
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from e3f1bc3 to ba7c971CompareAugust 17, 2026 01:23
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated
Comment threadapps/web/src/terminal/ghostty/surface.ts Outdated

@macroscopeappmacroscopeappBot left a comment

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.

One finding: the newly pinned right-click link highlight can be unpinned by a superseded menu flow (browser fallback menu), leaving the open menu with no highlighted target. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/terminal/ghostty/surface.ts

@macroscopeappmacroscopeappBot left a comment

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.

Reviewed the terminal link changes for UI/interaction consistency. One finding: the new "Add path/link to chat" action silently drops the target when the composer refuses input, unlike the other add-to-chat surface and unlike every other failure path in the terminal context menu. Everything else (menu item shape/labels/icon: "copy", pinned-highlight lifetime, modifier-gated hover matching activation, focused tests) matches existing repo contracts.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.tsx Outdated
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch 2 times, most recently from cb9f05f to c54a206CompareAugust 17, 2026 01:40

@macroscopeappmacroscopeappBot left a comment

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.

UI consistency review: one finding on how terminal paths are inserted into the composer.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

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.

One finding: terminalLinkChatText can emit a composer file link with an empty label for directory-style terminal links, which renders as a label-less chip in the composer. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from c54a206 to cf2bb08CompareAugust 17, 2026 01:50
@flamboh
flamboh marked this pull request as ready for review August 17, 2026 02:01
@macroscopeapp

macroscopeappBot commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR introduces several new terminal link workflows—editor opening, system or integrated browser navigation, clipboard handling, chat insertion, and persistent link highlighting—across shared terminal and composer code. The cross-component interactive behavior and external side effects are broader than a minor self-contained UI change.

You can add or adjust custom eligibility rules. Learn more.

@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from cf2bb08 to 278b617CompareAugust 19, 2026 06:59
@flambohflamboh changed the title fix(web): make terminal links actionablefeat(web): terminal link context menu actionsAug 19, 2026
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch 2 times, most recently from 6864071 to 27c4e07CompareAugust 23, 2026 10:04

@macroscopeappmacroscopeappBot left a comment

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.

One finding: a comment documenting a browser/Electron constraint was dropped from terminalContextMenuItems while the behavior it explains is unchanged. Everything else in the diff looks consistent — the new menu entries reuse the shared ContextMenuItem contract (labels and the copy icon match pullRequestLinkContextMenu / ChatMarkdown's file-link menu), the new "Unable to add to chat" toast matches the sibling flow in FileBrowserPanel, and the pinned link highlight is re-projected through screen coordinates so scrolling and superseded menus don't strand it.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx
@flamboh

Copy link
Copy Markdown
ContributorAuthor

last failed macroscope check is over a suggested comment, not actually any functionality issues

@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from be165ee to a4a9704CompareAugust 24, 2026 21:43

@macroscopeappmacroscopeappBot left a comment

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.

One finding on the new terminal link context menu: the open-link entry chains into a second context menu for previewable URLs instead of offering the destinations in the menu the user already opened.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

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.

One consistency finding: the terminal link's two open destinations are now labelled two different ways depending on the gesture (right-click vs modifier-click). Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/openTerminalLinkInPreview.ts
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from c15945b to 386ce1cCompareAugust 24, 2026 21:57

@macroscopeappmacroscopeappBot left a comment

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.

Reviewed the changed TypeScript against the Effect service conventions. No Effect service definitions, layers, error classes, or runtime boundaries are introduced or modified here: openTerminalLinkInPreview.ts keeps its existing Schema.TaggedErrorClass errors with structural attributes plus a preserved cause, no ManagedRuntime.make, Layer.succeed, or runPromise* usage is added, and no service instances are passed as constructor parameters. One change-discipline nit below.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx

@macroscopeappmacroscopeappBot left a comment

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.

One finding on the new terminal link menu: Copy path copies the raw matched token, so it can include a :line:col position that no other path-copy action in the app includes.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from 386ce1c to bf2bf77CompareAugust 24, 2026 22:05
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from bf2bf77 to f4fd4baCompareAugust 24, 2026 23:12
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@flamboh
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat(web): terminal link context menu actions - #7280

Open
flamboh wants to merge 2 commits into
pingdotgg:mainfrom
flamboh:t3code/fix-terminal-directory-hover
Open

feat(web): terminal link context menu actions#7280
flamboh wants to merge 2 commits into
pingdotgg:mainfrom
flamboh:t3code/fix-terminal-directory-hover

Conversation

@flamboh

@flambohflamboh commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

What Changed

Right-clicking a terminal path or URL now offers Open, Add to chat, and Copy for the target under the pointer. The highlight stays for as long as the menu is open.

Add to chat inserts paths with the file chip appearance and URLs as plain text.

Why

Right-clicking threw away the detected target and offered only the selection actions and Paste, so you couldn't open or copy the path or link you were pointing at. Putting this in the context menu is a natural addition.

Behavior precedent

Ghostty-based terminals do the same thing: right-click offers actions for the target under the pointer and pins the highlight while the menu is open.

UI Changes

Before

image

After

image
Cap.2026-08-19.at.00.22.13.mp4

Related PRs

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes

Implemented by GPT-5.6 Sol and Fable 5 via Codex and T3 Code.

Note

Add terminal link context menu actions for chat, copy, and open

  • Right-clicking a link in the terminal now shows a context menu with link-aware actions: add to chat, copy, open in editor (for paths), or open in browser/preview (for URLs)
  • terminalLinkChatText resolves paths against cwd and strips position suffixes; terminalLinkCopyText returns clean URLs or paths without position info
  • Clicked links/paths are inserted into the chat composer via addTerminalLinkToDraft in ChatView, with a toast on failure
  • GhosttyTerminalSurface pins the link highlight while the context menu is open and passes linkText through the onContextMenu callback
  • openTerminalLinkInPreview is split into a capability check (canOpenTerminalLinkInPreview) and a direct-open path, with showTerminalLinkOpenMenu presenting the integrated-vs-system browser choice
  • Behavioral Change: GhosttyTerminalSurfaceOptions.onContextMenu signature changes from (event) to (event, linkText) returning void | Promise<void>; existing callers must update

Macroscope summarized f4fd4ba.

@coderabbitai

coderabbitaiBot commented Aug 17, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: d01b6203-2825-4cfb-baa1-307b36f90ed6

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 17, 2026
Comment threadapps/web/src/terminal/ghostty/surface.ts Outdated
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from e3f1bc3 to ba7c971CompareAugust 17, 2026 01:23
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated
Comment threadapps/web/src/terminal/ghostty/surface.ts Outdated

@macroscopeappmacroscopeappBot left a comment

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.

One finding: the newly pinned right-click link highlight can be unpinned by a superseded menu flow (browser fallback menu), leaving the open menu with no highlighted target. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/terminal/ghostty/surface.ts

@macroscopeappmacroscopeappBot left a comment

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.

Reviewed the terminal link changes for UI/interaction consistency. One finding: the new "Add path/link to chat" action silently drops the target when the composer refuses input, unlike the other add-to-chat surface and unlike every other failure path in the terminal context menu. Everything else (menu item shape/labels/icon: "copy", pinned-highlight lifetime, modifier-gated hover matching activation, focused tests) matches existing repo contracts.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.tsx Outdated
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch 2 times, most recently from cb9f05f to c54a206CompareAugust 17, 2026 01:40

@macroscopeappmacroscopeappBot left a comment

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.

UI consistency review: one finding on how terminal paths are inserted into the composer.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

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.

One finding: terminalLinkChatText can emit a composer file link with an empty label for directory-style terminal links, which renders as a label-less chip in the composer. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from c54a206 to cf2bb08CompareAugust 17, 2026 01:50
@flamboh
flamboh marked this pull request as ready for review August 17, 2026 02:01
@macroscopeapp

macroscopeappBot commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR introduces several new terminal link workflows—editor opening, system or integrated browser navigation, clipboard handling, chat insertion, and persistent link highlighting—across shared terminal and composer code. The cross-component interactive behavior and external side effects are broader than a minor self-contained UI change.

You can add or adjust custom eligibility rules. Learn more.

@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from cf2bb08 to 278b617CompareAugust 19, 2026 06:59
@flambohflamboh changed the title fix(web): make terminal links actionablefeat(web): terminal link context menu actionsAug 19, 2026
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch 2 times, most recently from 6864071 to 27c4e07CompareAugust 23, 2026 10:04

@macroscopeappmacroscopeappBot left a comment

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.

One finding: a comment documenting a browser/Electron constraint was dropped from terminalContextMenuItems while the behavior it explains is unchanged. Everything else in the diff looks consistent — the new menu entries reuse the shared ContextMenuItem contract (labels and the copy icon match pullRequestLinkContextMenu / ChatMarkdown's file-link menu), the new "Unable to add to chat" toast matches the sibling flow in FileBrowserPanel, and the pinned link highlight is re-projected through screen coordinates so scrolling and superseded menus don't strand it.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx
@flamboh

Copy link
Copy Markdown
ContributorAuthor

last failed macroscope check is over a suggested comment, not actually any functionality issues

@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from be165ee to a4a9704CompareAugust 24, 2026 21:43

@macroscopeappmacroscopeappBot left a comment

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.

One finding on the new terminal link context menu: the open-link entry chains into a second context menu for previewable URLs instead of offering the destinations in the menu the user already opened.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

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.

One consistency finding: the terminal link's two open destinations are now labelled two different ways depending on the gesture (right-click vs modifier-click). Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/openTerminalLinkInPreview.ts
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from c15945b to 386ce1cCompareAugust 24, 2026 21:57

@macroscopeappmacroscopeappBot left a comment

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.

Reviewed the changed TypeScript against the Effect service conventions. No Effect service definitions, layers, error classes, or runtime boundaries are introduced or modified here: openTerminalLinkInPreview.ts keeps its existing Schema.TaggedErrorClass errors with structural attributes plus a preserved cause, no ManagedRuntime.make, Layer.succeed, or runPromise* usage is added, and no service instances are passed as constructor parameters. One change-discipline nit below.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx

@macroscopeappmacroscopeappBot left a comment

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.

One finding on the new terminal link menu: Copy path copies the raw matched token, so it can include a :line:col position that no other path-copy action in the app includes.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from 386ce1c to bf2bf77CompareAugust 24, 2026 22:05
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from bf2bf77 to f4fd4baCompareAugust 24, 2026 23:12
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@flamboh
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(web): terminal link context menu actions - #7280

Open
flamboh wants to merge 2 commits into
pingdotgg:mainfrom
flamboh:t3code/fix-terminal-directory-hover
Open

feat(web): terminal link context menu actions#7280
flamboh wants to merge 2 commits into
pingdotgg:mainfrom
flamboh:t3code/fix-terminal-directory-hover

Conversation

@flamboh

@flambohflamboh commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

What Changed

Right-clicking a terminal path or URL now offers Open, Add to chat, and Copy for the target under the pointer. The highlight stays for as long as the menu is open.

Add to chat inserts paths with the file chip appearance and URLs as plain text.

Why

Right-clicking threw away the detected target and offered only the selection actions and Paste, so you couldn't open or copy the path or link you were pointing at. Putting this in the context menu is a natural addition.

Behavior precedent

Ghostty-based terminals do the same thing: right-click offers actions for the target under the pointer and pins the highlight while the menu is open.

UI Changes

Before

image

After

image
Cap.2026-08-19.at.00.22.13.mp4

Related PRs

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes

Implemented by GPT-5.6 Sol and Fable 5 via Codex and T3 Code.

Note

Add terminal link context menu actions for chat, copy, and open

  • Right-clicking a link in the terminal now shows a context menu with link-aware actions: add to chat, copy, open in editor (for paths), or open in browser/preview (for URLs)
  • terminalLinkChatText resolves paths against cwd and strips position suffixes; terminalLinkCopyText returns clean URLs or paths without position info
  • Clicked links/paths are inserted into the chat composer via addTerminalLinkToDraft in ChatView, with a toast on failure
  • GhosttyTerminalSurface pins the link highlight while the context menu is open and passes linkText through the onContextMenu callback
  • openTerminalLinkInPreview is split into a capability check (canOpenTerminalLinkInPreview) and a direct-open path, with showTerminalLinkOpenMenu presenting the integrated-vs-system browser choice
  • Behavioral Change: GhosttyTerminalSurfaceOptions.onContextMenu signature changes from (event) to (event, linkText) returning void | Promise<void>; existing callers must update

Macroscope summarized f4fd4ba.

@coderabbitai

coderabbitaiBot commented Aug 17, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: d01b6203-2825-4cfb-baa1-307b36f90ed6

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 17, 2026
Comment threadapps/web/src/terminal/ghostty/surface.ts Outdated
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from e3f1bc3 to ba7c971CompareAugust 17, 2026 01:23
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated
Comment threadapps/web/src/terminal/ghostty/surface.ts Outdated

@macroscopeappmacroscopeappBot left a comment

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.

One finding: the newly pinned right-click link highlight can be unpinned by a superseded menu flow (browser fallback menu), leaving the open menu with no highlighted target. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/terminal/ghostty/surface.ts

@macroscopeappmacroscopeappBot left a comment

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.

Reviewed the terminal link changes for UI/interaction consistency. One finding: the new "Add path/link to chat" action silently drops the target when the composer refuses input, unlike the other add-to-chat surface and unlike every other failure path in the terminal context menu. Everything else (menu item shape/labels/icon: "copy", pinned-highlight lifetime, modifier-gated hover matching activation, focused tests) matches existing repo contracts.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.tsx Outdated
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch 2 times, most recently from cb9f05f to c54a206CompareAugust 17, 2026 01:40

@macroscopeappmacroscopeappBot left a comment

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.

UI consistency review: one finding on how terminal paths are inserted into the composer.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

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.

One finding: terminalLinkChatText can emit a composer file link with an empty label for directory-style terminal links, which renders as a label-less chip in the composer. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from c54a206 to cf2bb08CompareAugust 17, 2026 01:50
@flamboh
flamboh marked this pull request as ready for review August 17, 2026 02:01
@macroscopeapp

macroscopeappBot commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR introduces several new terminal link workflows—editor opening, system or integrated browser navigation, clipboard handling, chat insertion, and persistent link highlighting—across shared terminal and composer code. The cross-component interactive behavior and external side effects are broader than a minor self-contained UI change.

You can add or adjust custom eligibility rules. Learn more.

@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from cf2bb08 to 278b617CompareAugust 19, 2026 06:59
@flambohflamboh changed the title fix(web): make terminal links actionablefeat(web): terminal link context menu actionsAug 19, 2026
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch 2 times, most recently from 6864071 to 27c4e07CompareAugust 23, 2026 10:04

@macroscopeappmacroscopeappBot left a comment

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.

One finding: a comment documenting a browser/Electron constraint was dropped from terminalContextMenuItems while the behavior it explains is unchanged. Everything else in the diff looks consistent — the new menu entries reuse the shared ContextMenuItem contract (labels and the copy icon match pullRequestLinkContextMenu / ChatMarkdown's file-link menu), the new "Unable to add to chat" toast matches the sibling flow in FileBrowserPanel, and the pinned link highlight is re-projected through screen coordinates so scrolling and superseded menus don't strand it.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx
@flamboh

Copy link
Copy Markdown
ContributorAuthor

last failed macroscope check is over a suggested comment, not actually any functionality issues

@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from be165ee to a4a9704CompareAugust 24, 2026 21:43

@macroscopeappmacroscopeappBot left a comment

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.

One finding on the new terminal link context menu: the open-link entry chains into a second context menu for previewable URLs instead of offering the destinations in the menu the user already opened.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

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.

One consistency finding: the terminal link's two open destinations are now labelled two different ways depending on the gesture (right-click vs modifier-click). Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/openTerminalLinkInPreview.ts
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from c15945b to 386ce1cCompareAugust 24, 2026 21:57

@macroscopeappmacroscopeappBot left a comment

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.

Reviewed the changed TypeScript against the Effect service conventions. No Effect service definitions, layers, error classes, or runtime boundaries are introduced or modified here: openTerminalLinkInPreview.ts keeps its existing Schema.TaggedErrorClass errors with structural attributes plus a preserved cause, no ManagedRuntime.make, Layer.succeed, or runPromise* usage is added, and no service instances are passed as constructor parameters. One change-discipline nit below.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx

@macroscopeappmacroscopeappBot left a comment

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.

One finding on the new terminal link menu: Copy path copies the raw matched token, so it can include a :line:col position that no other path-copy action in the app includes.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from 386ce1c to bf2bf77CompareAugust 24, 2026 22:05
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from bf2bf77 to f4fd4baCompareAugust 24, 2026 23:12
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@flamboh
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(web): terminal link context menu actions - #7280

Open
flamboh wants to merge 2 commits into
pingdotgg:mainfrom
flamboh:t3code/fix-terminal-directory-hover
Open

feat(web): terminal link context menu actions#7280
flamboh wants to merge 2 commits into
pingdotgg:mainfrom
flamboh:t3code/fix-terminal-directory-hover

Conversation

@flamboh

@flambohflamboh commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

What Changed

Right-clicking a terminal path or URL now offers Open, Add to chat, and Copy for the target under the pointer. The highlight stays for as long as the menu is open.

Add to chat inserts paths with the file chip appearance and URLs as plain text.

Why

Right-clicking threw away the detected target and offered only the selection actions and Paste, so you couldn't open or copy the path or link you were pointing at. Putting this in the context menu is a natural addition.

Behavior precedent

Ghostty-based terminals do the same thing: right-click offers actions for the target under the pointer and pins the highlight while the menu is open.

UI Changes

Before

image

After

image
Cap.2026-08-19.at.00.22.13.mp4

Related PRs

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes

Implemented by GPT-5.6 Sol and Fable 5 via Codex and T3 Code.

Note

Add terminal link context menu actions for chat, copy, and open

  • Right-clicking a link in the terminal now shows a context menu with link-aware actions: add to chat, copy, open in editor (for paths), or open in browser/preview (for URLs)
  • terminalLinkChatText resolves paths against cwd and strips position suffixes; terminalLinkCopyText returns clean URLs or paths without position info
  • Clicked links/paths are inserted into the chat composer via addTerminalLinkToDraft in ChatView, with a toast on failure
  • GhosttyTerminalSurface pins the link highlight while the context menu is open and passes linkText through the onContextMenu callback
  • openTerminalLinkInPreview is split into a capability check (canOpenTerminalLinkInPreview) and a direct-open path, with showTerminalLinkOpenMenu presenting the integrated-vs-system browser choice
  • Behavioral Change: GhosttyTerminalSurfaceOptions.onContextMenu signature changes from (event) to (event, linkText) returning void | Promise<void>; existing callers must update

Macroscope summarized f4fd4ba.

@coderabbitai

coderabbitaiBot commented Aug 17, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: d01b6203-2825-4cfb-baa1-307b36f90ed6

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 17, 2026
Comment threadapps/web/src/terminal/ghostty/surface.ts Outdated
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from e3f1bc3 to ba7c971CompareAugust 17, 2026 01:23
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated
Comment threadapps/web/src/terminal/ghostty/surface.ts Outdated

@macroscopeappmacroscopeappBot left a comment

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.

One finding: the newly pinned right-click link highlight can be unpinned by a superseded menu flow (browser fallback menu), leaving the open menu with no highlighted target. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/terminal/ghostty/surface.ts

@macroscopeappmacroscopeappBot left a comment

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.

Reviewed the terminal link changes for UI/interaction consistency. One finding: the new "Add path/link to chat" action silently drops the target when the composer refuses input, unlike the other add-to-chat surface and unlike every other failure path in the terminal context menu. Everything else (menu item shape/labels/icon: "copy", pinned-highlight lifetime, modifier-gated hover matching activation, focused tests) matches existing repo contracts.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.tsx Outdated
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch 2 times, most recently from cb9f05f to c54a206CompareAugust 17, 2026 01:40

@macroscopeappmacroscopeappBot left a comment

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.

UI consistency review: one finding on how terminal paths are inserted into the composer.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

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.

One finding: terminalLinkChatText can emit a composer file link with an empty label for directory-style terminal links, which renders as a label-less chip in the composer. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from c54a206 to cf2bb08CompareAugust 17, 2026 01:50
@flamboh
flamboh marked this pull request as ready for review August 17, 2026 02:01
@macroscopeapp

macroscopeappBot commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR introduces several new terminal link workflows—editor opening, system or integrated browser navigation, clipboard handling, chat insertion, and persistent link highlighting—across shared terminal and composer code. The cross-component interactive behavior and external side effects are broader than a minor self-contained UI change.

You can add or adjust custom eligibility rules. Learn more.

@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from cf2bb08 to 278b617CompareAugust 19, 2026 06:59
@flambohflamboh changed the title fix(web): make terminal links actionablefeat(web): terminal link context menu actionsAug 19, 2026
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch 2 times, most recently from 6864071 to 27c4e07CompareAugust 23, 2026 10:04

@macroscopeappmacroscopeappBot left a comment

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.

One finding: a comment documenting a browser/Electron constraint was dropped from terminalContextMenuItems while the behavior it explains is unchanged. Everything else in the diff looks consistent — the new menu entries reuse the shared ContextMenuItem contract (labels and the copy icon match pullRequestLinkContextMenu / ChatMarkdown's file-link menu), the new "Unable to add to chat" toast matches the sibling flow in FileBrowserPanel, and the pinned link highlight is re-projected through screen coordinates so scrolling and superseded menus don't strand it.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx
@flamboh

Copy link
Copy Markdown
ContributorAuthor

last failed macroscope check is over a suggested comment, not actually any functionality issues

@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from be165ee to a4a9704CompareAugust 24, 2026 21:43

@macroscopeappmacroscopeappBot left a comment

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.

One finding on the new terminal link context menu: the open-link entry chains into a second context menu for previewable URLs instead of offering the destinations in the menu the user already opened.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

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.

One consistency finding: the terminal link's two open destinations are now labelled two different ways depending on the gesture (right-click vs modifier-click). Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/openTerminalLinkInPreview.ts
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from c15945b to 386ce1cCompareAugust 24, 2026 21:57

@macroscopeappmacroscopeappBot left a comment

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.

Reviewed the changed TypeScript against the Effect service conventions. No Effect service definitions, layers, error classes, or runtime boundaries are introduced or modified here: openTerminalLinkInPreview.ts keeps its existing Schema.TaggedErrorClass errors with structural attributes plus a preserved cause, no ManagedRuntime.make, Layer.succeed, or runPromise* usage is added, and no service instances are passed as constructor parameters. One change-discipline nit below.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx

@macroscopeappmacroscopeappBot left a comment

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.

One finding on the new terminal link menu: Copy path copies the raw matched token, so it can include a :line:col position that no other path-copy action in the app includes.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from 386ce1c to bf2bf77CompareAugust 24, 2026 22:05
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from bf2bf77 to f4fd4baCompareAugust 24, 2026 23:12
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@flamboh
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat(web): terminal link context menu actions - #7280

Open
flamboh wants to merge 2 commits into
pingdotgg:mainfrom
flamboh:t3code/fix-terminal-directory-hover
Open

feat(web): terminal link context menu actions#7280
flamboh wants to merge 2 commits into
pingdotgg:mainfrom
flamboh:t3code/fix-terminal-directory-hover

Conversation

@flamboh

@flambohflamboh commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

What Changed

Right-clicking a terminal path or URL now offers Open, Add to chat, and Copy for the target under the pointer. The highlight stays for as long as the menu is open.

Add to chat inserts paths with the file chip appearance and URLs as plain text.

Why

Right-clicking threw away the detected target and offered only the selection actions and Paste, so you couldn't open or copy the path or link you were pointing at. Putting this in the context menu is a natural addition.

Behavior precedent

Ghostty-based terminals do the same thing: right-click offers actions for the target under the pointer and pins the highlight while the menu is open.

UI Changes

Before

image

After

image
Cap.2026-08-19.at.00.22.13.mp4

Related PRs

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes

Implemented by GPT-5.6 Sol and Fable 5 via Codex and T3 Code.

Note

Add terminal link context menu actions for chat, copy, and open

  • Right-clicking a link in the terminal now shows a context menu with link-aware actions: add to chat, copy, open in editor (for paths), or open in browser/preview (for URLs)
  • terminalLinkChatText resolves paths against cwd and strips position suffixes; terminalLinkCopyText returns clean URLs or paths without position info
  • Clicked links/paths are inserted into the chat composer via addTerminalLinkToDraft in ChatView, with a toast on failure
  • GhosttyTerminalSurface pins the link highlight while the context menu is open and passes linkText through the onContextMenu callback
  • openTerminalLinkInPreview is split into a capability check (canOpenTerminalLinkInPreview) and a direct-open path, with showTerminalLinkOpenMenu presenting the integrated-vs-system browser choice
  • Behavioral Change: GhosttyTerminalSurfaceOptions.onContextMenu signature changes from (event) to (event, linkText) returning void | Promise<void>; existing callers must update

Macroscope summarized f4fd4ba.

@coderabbitai

coderabbitaiBot commented Aug 17, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: d01b6203-2825-4cfb-baa1-307b36f90ed6

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 17, 2026
Comment threadapps/web/src/terminal/ghostty/surface.ts Outdated
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from e3f1bc3 to ba7c971CompareAugust 17, 2026 01:23
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated
Comment threadapps/web/src/terminal/ghostty/surface.ts Outdated

@macroscopeappmacroscopeappBot left a comment

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.

One finding: the newly pinned right-click link highlight can be unpinned by a superseded menu flow (browser fallback menu), leaving the open menu with no highlighted target. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/terminal/ghostty/surface.ts

@macroscopeappmacroscopeappBot left a comment

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.

Reviewed the terminal link changes for UI/interaction consistency. One finding: the new "Add path/link to chat" action silently drops the target when the composer refuses input, unlike the other add-to-chat surface and unlike every other failure path in the terminal context menu. Everything else (menu item shape/labels/icon: "copy", pinned-highlight lifetime, modifier-gated hover matching activation, focused tests) matches existing repo contracts.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.tsx Outdated
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch 2 times, most recently from cb9f05f to c54a206CompareAugust 17, 2026 01:40

@macroscopeappmacroscopeappBot left a comment

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.

UI consistency review: one finding on how terminal paths are inserted into the composer.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

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.

One finding: terminalLinkChatText can emit a composer file link with an empty label for directory-style terminal links, which renders as a label-less chip in the composer. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from c54a206 to cf2bb08CompareAugust 17, 2026 01:50
@flamboh
flamboh marked this pull request as ready for review August 17, 2026 02:01
@macroscopeapp

macroscopeappBot commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR introduces several new terminal link workflows—editor opening, system or integrated browser navigation, clipboard handling, chat insertion, and persistent link highlighting—across shared terminal and composer code. The cross-component interactive behavior and external side effects are broader than a minor self-contained UI change.

You can add or adjust custom eligibility rules. Learn more.

@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from cf2bb08 to 278b617CompareAugust 19, 2026 06:59
@flambohflamboh changed the title fix(web): make terminal links actionablefeat(web): terminal link context menu actionsAug 19, 2026
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch 2 times, most recently from 6864071 to 27c4e07CompareAugust 23, 2026 10:04

@macroscopeappmacroscopeappBot left a comment

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.

One finding: a comment documenting a browser/Electron constraint was dropped from terminalContextMenuItems while the behavior it explains is unchanged. Everything else in the diff looks consistent — the new menu entries reuse the shared ContextMenuItem contract (labels and the copy icon match pullRequestLinkContextMenu / ChatMarkdown's file-link menu), the new "Unable to add to chat" toast matches the sibling flow in FileBrowserPanel, and the pinned link highlight is re-projected through screen coordinates so scrolling and superseded menus don't strand it.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx
@flamboh

Copy link
Copy Markdown
ContributorAuthor

last failed macroscope check is over a suggested comment, not actually any functionality issues

@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from be165ee to a4a9704CompareAugust 24, 2026 21:43

@macroscopeappmacroscopeappBot left a comment

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.

One finding on the new terminal link context menu: the open-link entry chains into a second context menu for previewable URLs instead of offering the destinations in the menu the user already opened.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

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.

One consistency finding: the terminal link's two open destinations are now labelled two different ways depending on the gesture (right-click vs modifier-click). Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/openTerminalLinkInPreview.ts
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from c15945b to 386ce1cCompareAugust 24, 2026 21:57

@macroscopeappmacroscopeappBot left a comment

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.

Reviewed the changed TypeScript against the Effect service conventions. No Effect service definitions, layers, error classes, or runtime boundaries are introduced or modified here: openTerminalLinkInPreview.ts keeps its existing Schema.TaggedErrorClass errors with structural attributes plus a preserved cause, no ManagedRuntime.make, Layer.succeed, or runPromise* usage is added, and no service instances are passed as constructor parameters. One change-discipline nit below.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx

@macroscopeappmacroscopeappBot left a comment

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.

One finding on the new terminal link menu: Copy path copies the raw matched token, so it can include a :line:col position that no other path-copy action in the app includes.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from 386ce1c to bf2bf77CompareAugust 24, 2026 22:05
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from bf2bf77 to f4fd4baCompareAugust 24, 2026 23:12
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@flamboh
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(web): terminal link context menu actions - #7280

Open
flamboh wants to merge 2 commits into
pingdotgg:mainfrom
flamboh:t3code/fix-terminal-directory-hover
Open

feat(web): terminal link context menu actions#7280
flamboh wants to merge 2 commits into
pingdotgg:mainfrom
flamboh:t3code/fix-terminal-directory-hover

Conversation

@flamboh

@flambohflamboh commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

What Changed

Right-clicking a terminal path or URL now offers Open, Add to chat, and Copy for the target under the pointer. The highlight stays for as long as the menu is open.

Add to chat inserts paths with the file chip appearance and URLs as plain text.

Why

Right-clicking threw away the detected target and offered only the selection actions and Paste, so you couldn't open or copy the path or link you were pointing at. Putting this in the context menu is a natural addition.

Behavior precedent

Ghostty-based terminals do the same thing: right-click offers actions for the target under the pointer and pins the highlight while the menu is open.

UI Changes

Before

image

After

image
Cap.2026-08-19.at.00.22.13.mp4

Related PRs

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes

Implemented by GPT-5.6 Sol and Fable 5 via Codex and T3 Code.

Note

Add terminal link context menu actions for chat, copy, and open

  • Right-clicking a link in the terminal now shows a context menu with link-aware actions: add to chat, copy, open in editor (for paths), or open in browser/preview (for URLs)
  • terminalLinkChatText resolves paths against cwd and strips position suffixes; terminalLinkCopyText returns clean URLs or paths without position info
  • Clicked links/paths are inserted into the chat composer via addTerminalLinkToDraft in ChatView, with a toast on failure
  • GhosttyTerminalSurface pins the link highlight while the context menu is open and passes linkText through the onContextMenu callback
  • openTerminalLinkInPreview is split into a capability check (canOpenTerminalLinkInPreview) and a direct-open path, with showTerminalLinkOpenMenu presenting the integrated-vs-system browser choice
  • Behavioral Change: GhosttyTerminalSurfaceOptions.onContextMenu signature changes from (event) to (event, linkText) returning void | Promise<void>; existing callers must update

Macroscope summarized f4fd4ba.

@coderabbitai

coderabbitaiBot commented Aug 17, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: d01b6203-2825-4cfb-baa1-307b36f90ed6

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 17, 2026
Comment threadapps/web/src/terminal/ghostty/surface.ts Outdated
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from e3f1bc3 to ba7c971CompareAugust 17, 2026 01:23
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated
Comment threadapps/web/src/terminal/ghostty/surface.ts Outdated

@macroscopeappmacroscopeappBot left a comment

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.

One finding: the newly pinned right-click link highlight can be unpinned by a superseded menu flow (browser fallback menu), leaving the open menu with no highlighted target. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/terminal/ghostty/surface.ts

@macroscopeappmacroscopeappBot left a comment

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.

Reviewed the terminal link changes for UI/interaction consistency. One finding: the new "Add path/link to chat" action silently drops the target when the composer refuses input, unlike the other add-to-chat surface and unlike every other failure path in the terminal context menu. Everything else (menu item shape/labels/icon: "copy", pinned-highlight lifetime, modifier-gated hover matching activation, focused tests) matches existing repo contracts.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.tsx Outdated
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch 2 times, most recently from cb9f05f to c54a206CompareAugust 17, 2026 01:40

@macroscopeappmacroscopeappBot left a comment

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.

UI consistency review: one finding on how terminal paths are inserted into the composer.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

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.

One finding: terminalLinkChatText can emit a composer file link with an empty label for directory-style terminal links, which renders as a label-less chip in the composer. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from c54a206 to cf2bb08CompareAugust 17, 2026 01:50
@flamboh
flamboh marked this pull request as ready for review August 17, 2026 02:01
@macroscopeapp

macroscopeappBot commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR introduces several new terminal link workflows—editor opening, system or integrated browser navigation, clipboard handling, chat insertion, and persistent link highlighting—across shared terminal and composer code. The cross-component interactive behavior and external side effects are broader than a minor self-contained UI change.

You can add or adjust custom eligibility rules. Learn more.

@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from cf2bb08 to 278b617CompareAugust 19, 2026 06:59
@flambohflamboh changed the title fix(web): make terminal links actionablefeat(web): terminal link context menu actionsAug 19, 2026
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch 2 times, most recently from 6864071 to 27c4e07CompareAugust 23, 2026 10:04

@macroscopeappmacroscopeappBot left a comment

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.

One finding: a comment documenting a browser/Electron constraint was dropped from terminalContextMenuItems while the behavior it explains is unchanged. Everything else in the diff looks consistent — the new menu entries reuse the shared ContextMenuItem contract (labels and the copy icon match pullRequestLinkContextMenu / ChatMarkdown's file-link menu), the new "Unable to add to chat" toast matches the sibling flow in FileBrowserPanel, and the pinned link highlight is re-projected through screen coordinates so scrolling and superseded menus don't strand it.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx
@flamboh

Copy link
Copy Markdown
ContributorAuthor

last failed macroscope check is over a suggested comment, not actually any functionality issues

@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from be165ee to a4a9704CompareAugust 24, 2026 21:43

@macroscopeappmacroscopeappBot left a comment

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.

One finding on the new terminal link context menu: the open-link entry chains into a second context menu for previewable URLs instead of offering the destinations in the menu the user already opened.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

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.

One consistency finding: the terminal link's two open destinations are now labelled two different ways depending on the gesture (right-click vs modifier-click). Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/openTerminalLinkInPreview.ts
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from c15945b to 386ce1cCompareAugust 24, 2026 21:57

@macroscopeappmacroscopeappBot left a comment

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.

Reviewed the changed TypeScript against the Effect service conventions. No Effect service definitions, layers, error classes, or runtime boundaries are introduced or modified here: openTerminalLinkInPreview.ts keeps its existing Schema.TaggedErrorClass errors with structural attributes plus a preserved cause, no ManagedRuntime.make, Layer.succeed, or runPromise* usage is added, and no service instances are passed as constructor parameters. One change-discipline nit below.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx

@macroscopeappmacroscopeappBot left a comment

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.

One finding on the new terminal link menu: Copy path copies the raw matched token, so it can include a :line:col position that no other path-copy action in the app includes.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from 386ce1c to bf2bf77CompareAugust 24, 2026 22:05
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from bf2bf77 to f4fd4baCompareAugust 24, 2026 23:12
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@flamboh
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(web): terminal link context menu actions - #7280

Open
flamboh wants to merge 2 commits into
pingdotgg:mainfrom
flamboh:t3code/fix-terminal-directory-hover
Open

feat(web): terminal link context menu actions#7280
flamboh wants to merge 2 commits into
pingdotgg:mainfrom
flamboh:t3code/fix-terminal-directory-hover

Conversation

@flamboh

@flambohflamboh commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

What Changed

Right-clicking a terminal path or URL now offers Open, Add to chat, and Copy for the target under the pointer. The highlight stays for as long as the menu is open.

Add to chat inserts paths with the file chip appearance and URLs as plain text.

Why

Right-clicking threw away the detected target and offered only the selection actions and Paste, so you couldn't open or copy the path or link you were pointing at. Putting this in the context menu is a natural addition.

Behavior precedent

Ghostty-based terminals do the same thing: right-click offers actions for the target under the pointer and pins the highlight while the menu is open.

UI Changes

Before

image

After

image
Cap.2026-08-19.at.00.22.13.mp4

Related PRs

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes

Implemented by GPT-5.6 Sol and Fable 5 via Codex and T3 Code.

Note

Add terminal link context menu actions for chat, copy, and open

  • Right-clicking a link in the terminal now shows a context menu with link-aware actions: add to chat, copy, open in editor (for paths), or open in browser/preview (for URLs)
  • terminalLinkChatText resolves paths against cwd and strips position suffixes; terminalLinkCopyText returns clean URLs or paths without position info
  • Clicked links/paths are inserted into the chat composer via addTerminalLinkToDraft in ChatView, with a toast on failure
  • GhosttyTerminalSurface pins the link highlight while the context menu is open and passes linkText through the onContextMenu callback
  • openTerminalLinkInPreview is split into a capability check (canOpenTerminalLinkInPreview) and a direct-open path, with showTerminalLinkOpenMenu presenting the integrated-vs-system browser choice
  • Behavioral Change: GhosttyTerminalSurfaceOptions.onContextMenu signature changes from (event) to (event, linkText) returning void | Promise<void>; existing callers must update

Macroscope summarized f4fd4ba.

@coderabbitai

coderabbitaiBot commented Aug 17, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: d01b6203-2825-4cfb-baa1-307b36f90ed6

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 17, 2026
Comment threadapps/web/src/terminal/ghostty/surface.ts Outdated
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from e3f1bc3 to ba7c971CompareAugust 17, 2026 01:23
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated
Comment threadapps/web/src/terminal/ghostty/surface.ts Outdated

@macroscopeappmacroscopeappBot left a comment

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.

One finding: the newly pinned right-click link highlight can be unpinned by a superseded menu flow (browser fallback menu), leaving the open menu with no highlighted target. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/terminal/ghostty/surface.ts

@macroscopeappmacroscopeappBot left a comment

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.

Reviewed the terminal link changes for UI/interaction consistency. One finding: the new "Add path/link to chat" action silently drops the target when the composer refuses input, unlike the other add-to-chat surface and unlike every other failure path in the terminal context menu. Everything else (menu item shape/labels/icon: "copy", pinned-highlight lifetime, modifier-gated hover matching activation, focused tests) matches existing repo contracts.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.tsx Outdated
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch 2 times, most recently from cb9f05f to c54a206CompareAugust 17, 2026 01:40

@macroscopeappmacroscopeappBot left a comment

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.

UI consistency review: one finding on how terminal paths are inserted into the composer.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

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.

One finding: terminalLinkChatText can emit a composer file link with an empty label for directory-style terminal links, which renders as a label-less chip in the composer. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from c54a206 to cf2bb08CompareAugust 17, 2026 01:50
@flamboh
flamboh marked this pull request as ready for review August 17, 2026 02:01
@macroscopeapp

macroscopeappBot commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR introduces several new terminal link workflows—editor opening, system or integrated browser navigation, clipboard handling, chat insertion, and persistent link highlighting—across shared terminal and composer code. The cross-component interactive behavior and external side effects are broader than a minor self-contained UI change.

You can add or adjust custom eligibility rules. Learn more.

@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from cf2bb08 to 278b617CompareAugust 19, 2026 06:59
@flambohflamboh changed the title fix(web): make terminal links actionablefeat(web): terminal link context menu actionsAug 19, 2026
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch 2 times, most recently from 6864071 to 27c4e07CompareAugust 23, 2026 10:04

@macroscopeappmacroscopeappBot left a comment

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.

One finding: a comment documenting a browser/Electron constraint was dropped from terminalContextMenuItems while the behavior it explains is unchanged. Everything else in the diff looks consistent — the new menu entries reuse the shared ContextMenuItem contract (labels and the copy icon match pullRequestLinkContextMenu / ChatMarkdown's file-link menu), the new "Unable to add to chat" toast matches the sibling flow in FileBrowserPanel, and the pinned link highlight is re-projected through screen coordinates so scrolling and superseded menus don't strand it.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx
@flamboh

Copy link
Copy Markdown
ContributorAuthor

last failed macroscope check is over a suggested comment, not actually any functionality issues

@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from be165ee to a4a9704CompareAugust 24, 2026 21:43

@macroscopeappmacroscopeappBot left a comment

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.

One finding on the new terminal link context menu: the open-link entry chains into a second context menu for previewable URLs instead of offering the destinations in the menu the user already opened.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

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.

One consistency finding: the terminal link's two open destinations are now labelled two different ways depending on the gesture (right-click vs modifier-click). Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/openTerminalLinkInPreview.ts
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from c15945b to 386ce1cCompareAugust 24, 2026 21:57

@macroscopeappmacroscopeappBot left a comment

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.

Reviewed the changed TypeScript against the Effect service conventions. No Effect service definitions, layers, error classes, or runtime boundaries are introduced or modified here: openTerminalLinkInPreview.ts keeps its existing Schema.TaggedErrorClass errors with structural attributes plus a preserved cause, no ManagedRuntime.make, Layer.succeed, or runPromise* usage is added, and no service instances are passed as constructor parameters. One change-discipline nit below.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx

@macroscopeappmacroscopeappBot left a comment

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.

One finding on the new terminal link menu: Copy path copies the raw matched token, so it can include a :line:col position that no other path-copy action in the app includes.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from 386ce1c to bf2bf77CompareAugust 24, 2026 22:05
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from bf2bf77 to f4fd4baCompareAugust 24, 2026 23:12
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@flamboh
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat(web): terminal link context menu actions - #7280

Open
flamboh wants to merge 2 commits into
pingdotgg:mainfrom
flamboh:t3code/fix-terminal-directory-hover
Open

feat(web): terminal link context menu actions#7280
flamboh wants to merge 2 commits into
pingdotgg:mainfrom
flamboh:t3code/fix-terminal-directory-hover

Conversation

@flamboh

@flambohflamboh commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

What Changed

Right-clicking a terminal path or URL now offers Open, Add to chat, and Copy for the target under the pointer. The highlight stays for as long as the menu is open.

Add to chat inserts paths with the file chip appearance and URLs as plain text.

Why

Right-clicking threw away the detected target and offered only the selection actions and Paste, so you couldn't open or copy the path or link you were pointing at. Putting this in the context menu is a natural addition.

Behavior precedent

Ghostty-based terminals do the same thing: right-click offers actions for the target under the pointer and pins the highlight while the menu is open.

UI Changes

Before

image

After

image
Cap.2026-08-19.at.00.22.13.mp4

Related PRs

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes

Implemented by GPT-5.6 Sol and Fable 5 via Codex and T3 Code.

Note

Add terminal link context menu actions for chat, copy, and open

  • Right-clicking a link in the terminal now shows a context menu with link-aware actions: add to chat, copy, open in editor (for paths), or open in browser/preview (for URLs)
  • terminalLinkChatText resolves paths against cwd and strips position suffixes; terminalLinkCopyText returns clean URLs or paths without position info
  • Clicked links/paths are inserted into the chat composer via addTerminalLinkToDraft in ChatView, with a toast on failure
  • GhosttyTerminalSurface pins the link highlight while the context menu is open and passes linkText through the onContextMenu callback
  • openTerminalLinkInPreview is split into a capability check (canOpenTerminalLinkInPreview) and a direct-open path, with showTerminalLinkOpenMenu presenting the integrated-vs-system browser choice
  • Behavioral Change: GhosttyTerminalSurfaceOptions.onContextMenu signature changes from (event) to (event, linkText) returning void | Promise<void>; existing callers must update

Macroscope summarized f4fd4ba.

@coderabbitai

coderabbitaiBot commented Aug 17, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: d01b6203-2825-4cfb-baa1-307b36f90ed6

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 17, 2026
Comment threadapps/web/src/terminal/ghostty/surface.ts Outdated
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from e3f1bc3 to ba7c971CompareAugust 17, 2026 01:23
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated
Comment threadapps/web/src/terminal/ghostty/surface.ts Outdated

@macroscopeappmacroscopeappBot left a comment

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.

One finding: the newly pinned right-click link highlight can be unpinned by a superseded menu flow (browser fallback menu), leaving the open menu with no highlighted target. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/terminal/ghostty/surface.ts

@macroscopeappmacroscopeappBot left a comment

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.

Reviewed the terminal link changes for UI/interaction consistency. One finding: the new "Add path/link to chat" action silently drops the target when the composer refuses input, unlike the other add-to-chat surface and unlike every other failure path in the terminal context menu. Everything else (menu item shape/labels/icon: "copy", pinned-highlight lifetime, modifier-gated hover matching activation, focused tests) matches existing repo contracts.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.tsx Outdated
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch 2 times, most recently from cb9f05f to c54a206CompareAugust 17, 2026 01:40

@macroscopeappmacroscopeappBot left a comment

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.

UI consistency review: one finding on how terminal paths are inserted into the composer.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

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.

One finding: terminalLinkChatText can emit a composer file link with an empty label for directory-style terminal links, which renders as a label-less chip in the composer. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from c54a206 to cf2bb08CompareAugust 17, 2026 01:50
@flamboh
flamboh marked this pull request as ready for review August 17, 2026 02:01
@macroscopeapp

macroscopeappBot commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR introduces several new terminal link workflows—editor opening, system or integrated browser navigation, clipboard handling, chat insertion, and persistent link highlighting—across shared terminal and composer code. The cross-component interactive behavior and external side effects are broader than a minor self-contained UI change.

You can add or adjust custom eligibility rules. Learn more.

@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from cf2bb08 to 278b617CompareAugust 19, 2026 06:59
@flambohflamboh changed the title fix(web): make terminal links actionablefeat(web): terminal link context menu actionsAug 19, 2026
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch 2 times, most recently from 6864071 to 27c4e07CompareAugust 23, 2026 10:04

@macroscopeappmacroscopeappBot left a comment

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.

One finding: a comment documenting a browser/Electron constraint was dropped from terminalContextMenuItems while the behavior it explains is unchanged. Everything else in the diff looks consistent — the new menu entries reuse the shared ContextMenuItem contract (labels and the copy icon match pullRequestLinkContextMenu / ChatMarkdown's file-link menu), the new "Unable to add to chat" toast matches the sibling flow in FileBrowserPanel, and the pinned link highlight is re-projected through screen coordinates so scrolling and superseded menus don't strand it.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx
@flamboh

Copy link
Copy Markdown
ContributorAuthor

last failed macroscope check is over a suggested comment, not actually any functionality issues

@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from be165ee to a4a9704CompareAugust 24, 2026 21:43

@macroscopeappmacroscopeappBot left a comment

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.

One finding on the new terminal link context menu: the open-link entry chains into a second context menu for previewable URLs instead of offering the destinations in the menu the user already opened.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

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.

One consistency finding: the terminal link's two open destinations are now labelled two different ways depending on the gesture (right-click vs modifier-click). Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/openTerminalLinkInPreview.ts
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from c15945b to 386ce1cCompareAugust 24, 2026 21:57

@macroscopeappmacroscopeappBot left a comment

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.

Reviewed the changed TypeScript against the Effect service conventions. No Effect service definitions, layers, error classes, or runtime boundaries are introduced or modified here: openTerminalLinkInPreview.ts keeps its existing Schema.TaggedErrorClass errors with structural attributes plus a preserved cause, no ManagedRuntime.make, Layer.succeed, or runPromise* usage is added, and no service instances are passed as constructor parameters. One change-discipline nit below.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx

@macroscopeappmacroscopeappBot left a comment

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.

One finding on the new terminal link menu: Copy path copies the raw matched token, so it can include a :line:col position that no other path-copy action in the app includes.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ThreadTerminalDrawer.tsx Outdated
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from 386ce1c to bf2bf77CompareAugust 24, 2026 22:05
@flamboh
flambohforce-pushed the t3code/fix-terminal-directory-hover branch from bf2bf77 to f4fd4baCompareAugust 24, 2026 23:12
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@flamboh