Repository navigation
Conversation
… a dead webview A WSL-only desktop primary is bootstrapped over stdin, so it never gets the desktop browser channel fds. Its tabs run on its own headless page, but the desktop still mounted a local <webview> for them because it assumed every primary holds the channel. Typed URLs went to that webview, the server never heard about them, and the address bar reset to empty. The server now advertises `desktopBrowser` only when it holds both channel fds, and the desktop draws a primary's server tabs natively only when that capability is present. Otherwise it streams them like any other environment. Fixes pingdotgg#17009 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a focused WSL browser bug fix that adds a backward-compatible capability flag and routes only primaries without the desktop browser channel through the existing server-streaming path. Native rendering remains unchanged when the channel is available, and focused server and web tests cover the decision logic. You can add or adjust custom eligibility rules. Learn more. |
JerkyTreats
added a commit
to JerkyTreats/t3code
that referenced
this pull request
Oct 16, 2026
…er channel The desktop app drew the primary environment's server browser tabs in a local webview even when that server had no desktop browser channel, as on a desktop connected to an external server or a WSL-only primary. Entered URLs loaded in a hidden guest, the server never saw the navigation, and the pane stayed on its empty state. The server now advertises the optional desktopBrowser capability only when both desktop browser channel descriptors are present. Native rendering of server tabs, and the fork's native-tab classification for close history and host actions, require it; otherwise the tab streams like any other environment's server tab. Follows the direction in pingdotgg#17009 and the unmerged upstream PR pingdotgg#17926. Older peers ignore the new optional capability. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Problem
On a WSL-only desktop install, the Browser panel does nothing: you type a URL, press Enter, the address bar resets to "Search or enter URL", and no page loads. Agent
preview_open/preview_navigateon the same environment work. Reported in #17009.Change
This follows the first fix option in the maintainer's diagnosis on #17009 . A WSL primary is bootstrapped over stdin, so it never gets the desktop browser channel fds. Its server runs tabs on its own headless page, but the desktop still mounted a local
serverDriven<webview>for them, becauserendersServerTabNativelyassumed every primary holds the channel. Typed URLs went to that webview, and the server never heard about them.desktopBrowser.ServerEnvironmentadvertises it only when bothdesktopBrowserFdanddesktopBrowserControlFdare set. This uses the same static-fd reasoning asdesktopAppUpdate.rendersServerTabNativelyalso requires the primary'sdesktopBrowser. Without it,ElectronBrowserHostmounts no webview andPreviewView/ThreadPreviewMiniPlayerstream the tab, the same as for any other environment's server tabs.Every native-vs-stream decision in the web client goes through
rendersServerTabNatively, so this covers the panel, the mini player, and the host. Mobile always streams and is unchanged. The client and its primary server ship in one desktop artifact, so the primary never runs an older server without the key.Scope and approval
This is a bug fix for triaged issue #17009. A maintainer traced it to this code path and proposed this direction ("the server could advertise a capability only when
DesktopBrowserChannel.available, andrendersServerTabNativelycould require it"). The change covers that one problem only.Verification
0.0.46nightly). On a new tab, typingexample.comorhttps://x.com/homeand pressing Enter left the tab withurl: null. Results were the same with the Incognito profile, when typing the URL instead of pasting it, and after a full restart.preview_open/preview_navigateto the same URLs loaded fine in that environment, which matches the headless-page split described in the issue.vp test run apps/web/src/browser/previewRuntime.test.ts apps/server/src/environment/ServerEnvironment.test.tsgives 14/14 passing.desktopBrowseris advertised with both channel fds and absent without them (the WSL primary case), whileserverBrowserstays true.desktopBrowser. Remote environments and non-server tabs are unchanged.tsc --noEmitpasses for@t3tools/contracts,@t3tools/webandt3.vp lintandvp fmt --checkare clean on the changed files; the one lint warning inElectronBrowserHost.tsxwas already there before this change.Model: Claude Opus 5.5 (
claude-opus-5-5), harness: Claude Code in T3 Code.🤖 Generated with Claude Code