Conversation
The scheme metadata pill duplicated the URL prefix and read as a code field on a security dialog. Replace it with a one-line action subtitle that answers "where will this go?": browser, local file, email app, phone app, or unknown scheme handler. Blocked URLs get a prohibit icon, inline reason, and a single Close button instead of a disabled Open URL. Also flattens the nested-card borders on the URL block and the blocked-reason box, per the bg-only chrome rule in DESIGN.md. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Returns match / plain / deceptive based on whether the visible link text matches the URL, is a generic label, or is URL-shaped with a different host. The dialog will use this to pick a title, gate the action, and decide what the user is really being asked. Subdomain mismatch is treated as deceptive on the conservative side of the false-positive line; legit redirects between same-host pages stay plain. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
xterm's linkHandler.activate gets the URL but not the rendered link text. Read it from the buffer using the activate range and pass it through requestExternalLinkConfirmation so the dialog can compare what the user clicked against what would actually open. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
terminal.options.linkHandler = … blew up under the test mock, which doesn't expose an .options object. Inline the handler in the constructor options instead. The closure capture of `terminal` is safe because the callback only fires on user click, well after construction. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The dialog now answers three questions in its title bar: - match: "Open <noun>?" where <noun> follows the URL scheme (URL, file, email, phone app, SMS app, or "custom protocol <prefix>" for unknown schemes). - plain: 'Open <noun>: "<link text>"?' — title carries the human label that was actually clicked. - deceptive: 'Deceptive link text was "<label>", URL was:' with a red WarningOctagon icon. The Open action is replaced with "Copy deceptive URL to clipboard" so the user has to paste manually if they really want to follow the link. The merged title also subsumes the previous "Opens in your browser" subtitle and the generic "terminal output can hide..." footer; per-link verdict carries that signal now. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Mirrors the deceptive-title pattern: the Prohibit icon + Blocked message become the title bar, instead of "Open URL?" plus a separate Blocked row below. One verdict, one place to read it. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
DESIGN.md disallows nested cards, but in this dialog the framed URL block IS the artifact the user is being asked to scrutinize, and a bordered box reads better than the bare bg-shift. Documented the exception inline so the next pass doesn't re-flatten it. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Titles no longer carry blanket font-semibold; the bold weight is reserved for the inline value being called out (the link label or the deceptive display text). Surrounding sentence stays regular. Replaces the previous pattern of wrapping values in "..." with text-muted color — quotes plus muting made the extracted value recede instead of pop. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Title for unknown schemes is now just "Open URL?" (or "Open URL: <label>?") — the scheme prefix lives in the URL block and the "Open vscode://" button, so duplicating it in the title bar was noise. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Title is now a header ("Confirm open" or "Confirm open: <label>")
instead of a question ("Open URL?"). The scheme noun only lives in
the button now — title doesn't vary by scheme, which simplifies the
mental model: the title says "you're being asked to confirm", the
URL block shows what, the button names the action.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Deploying mouseterm with
|
| Latest commit: |
023a1bd
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://f3cbb6db.mouseterm.pages.dev |
| Branch Preview URL: | https://url-open.mouseterm.pages.dev |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
ExternalLinkDialogwith verdict-aware titling, copy action, and classification of mismatches between display text and URLdesign.tsxand reuses them across the kill confirm and link dialogsTest plan
ExternalLinkDialog, long URL variant)🤖 Generated with Claude Code