Repository navigation
feat(web): web, desktop and composer fixes (upstream G5) - #1000
Merged
Merged
Conversation
…s (#15008) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> (cherry picked from commit 798e945aa77939937464ff45deaa8947be8d402f) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…wser tabs (#14727) Co-authored-by: PR Batch Tester <agent@local.test> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> (cherry picked from commit 7ff2eabf56d30af15a8ac86b0eb46013a9e910ee) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ns (#12615) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> (cherry picked from commit 6c8fed35dded9ff71c5b46807125457acbb76be6) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: yashranaway <yashranaway@users.noreply.github.com> Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> (cherry picked from commit f391794a35c604d57e166a3ab48d56fc6e4e469a) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Manual port of upstream ce96e4c3de1973c7e0088ef8806043841f902080 (#14756): Pylon's mobile surfaces diverge (no Android MaterialListRow variants, merged ThreadSettingsRows, no CursorEnableLimits card), so the bg-card -> bg-grouped-card swap was applied to the equivalent Pylon surfaces. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…d (#15005) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> (cherry picked from commit d1034d62b28e19c19240085566a39a92c5f9b466) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…retries back off (#15034) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> (cherry picked from commit c5a929e1ac05dec15945a36905ab8bb2f1982e59) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…thread (#15050) Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com> (cherry picked from commit 5c0429b1578cff3307c35c51a305e2749a6dcb6e) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> (cherry picked from commit 263097a8da038a143f2b7b7817250f0ad390ea32) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Changes now diffs the merge-base against the working tree, so a mode-only change staged with update-index alone is invisible where Git trusts file modes. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Pylon's web unit suite has no DOM environment, so model the focus behavior with a fake document as other web unit tests do. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…igration Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Contributor
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
…nges totals Older servers report no `branchChanges` and diff the branch range only up to HEAD, while the thread panel counts uncommitted edits. Generic diff panel openings now drop the explicit selection and resolve the default live from git status: Changes when the server reports Changes totals, Uncommitted otherwise. Mobile review prefers the Uncommitted section on such servers, waits for status before persisting a default, and describes a working-tree Changes range as "Since <base>, including uncommitted files". Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This was referenced Oct 3, 2026
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.
Ports upstream group G5 (web, desktop and composer) from T3 Code into Pylon.
Sources
798e945aa7agent browser clicks no longer steal composer focus (#15008)@vitest-environment jsdom, but Pylon's web suite has no jsdom, so the test now uses a fake document throughvi.stubGlobal, ascontextMenuFallback.test.tsdoes. I checked that 6 of the 8 cases fail when the restore is disabled.7ff2eabf56desktop markdown no longer loads invisible in new dark-mode browser tabs (#14727)prepareWebviewwhile keeping Pylon'snavigate/goBack/goForward/refresh(…, origin)signatures and thepersist:pylon-code-preview-*partition mocks.6c8fed35ddmarkdown keeps Windows paths intact in link/image destinations (#12615)f391794a35classify workspace previews by literal filenames (#10311)docs/user/composer.mdconflict: placed the upstream sentence inside Pylon's section, which already says "your Pylon session" and has the collapse-composer section.ce96e4c3demobile project picker cards match settings card color (#14756)bg-cardtobg-grouped-card, a token Pylon already has and uses on settings surfaces. Pylon's mobile screens differ (no AndroidMaterialListRowvariants in these pickers, noThreadSettingsRows.shared.tsx, noCursorEnableLimitscard), so the swap was applied to the matching Pylon surfaces: ArchivedThreads, ConnectOnboarding, ConnectionsNew, AddProject, NewTaskContextPicker, NewTaskRoute (including the Scratch "No project" card), ThreadSettingsSheet, UsageLimitsPooled and the UsageRoute chart. Not applied: the Android-onlyclassName="bg-grouped-card"row props and the CursorEnableLimits card.d1034d62b2diff panel opens on all branch changes (#15005)branchChangestotals (optional contract field, so older servers still work), the default diff view is "Changes" (merge-base to the working tree), and "Working tree" is renamed "Uncommitted". MobileReviewSheetconflict: Pylon's iOS native header toolbar and Android menu got the new order and labels (Changes, Uncommitted, Latest turn). The settings description keeps Pylon's "Manual panel choices take priority." Pylon docsdocs/user/source-control.mdupdated.c5a929e1acWoke dismiss syncs, preview mute back, subscription retries back off (#15034)threadWokeAt,previewRuntimeTabId, visited tracking,retryExpectedFailureAfterandsidebarProjectSortOrder. Conflicts resolved to keep Pylon'suseThreadActions/threadUndoimports inSidebar.tsx, thegetBackgroundTextGenerationProviders/capabilityContextcode inmodelSelection.ts, theDEFAULT_BROWSER_PROFILE_IDimport in the RPC client, andsidebarCompactThreadRowsplustriggerVariant="outline"in settings. This also removes the plan-agent selection heal (planAgentSelectionHeal.tsx), as upstream did, and adds the Project order settings row.5c0429b157mod+alt+enter on an existing thread sends and opens a new thread (#15050)composer.sendAndNewThread(contracts and shared defaults). ChatView conflict: Pylon's failed-follow-up recovery block is kept, and the newelse ifbranch follows it.263097a8damod+enter starts a new thread in background again (#15060)keybindings.tsconflict: upstream'sLATE_DEFAULT_KEYBINDINGSandkeybindings-migrationsrecord now sit next to Pylon's legacy numbered-defaults migration (.desktop-numbered-defaults-v1marker). The config is written when defaults are appended or the legacy block was migrated, and both markers are recorded.Keybinding conflict review
mod+enter→composer.sendBackground(composerFocus && draftThreadRoute),mod+alt+enter→composer.sendAndNewThread(composerFocus && !draftThreadRoute). These don't collide with Pylon'smod+alt+n(chat.newWithoutProject, Scratch feat: start threads without a project (Scratch) (upstream) #994) or withmod+enter→composer.sendAlternate(turnRunning). Thewhencontexts differ.handleNewThreadInActiveProject, which reuses the Scratch project, the same way the draft background path does.docs/user/keybindings.md: took upstream's wording and added a Pylon note. If the send shortcut requiresmod+Enter, pressingmod+Enterin a new thread starts it in the background, so clicking Send is how you start it in the foreground.Other Pylon adaptations
GitVcsDriverCore.test.ts"preserves renames, unusual paths, modes…": Changes now diffs the merge-base against the working tree, so a mode change staged only withupdate-index --chmod=+xdoesn't show where Git trusts file modes. This fails on unmodified upstream code too; the test now also sets the executable bit on disk (except on win32).branchChanges(an older server, or totals that could not be read), a generic web diff-panel opening resolves to Uncommitted instead of Changes. That keeps the view in step with the thread panel's counts, which fall back to the uncommitted totals. The default is now resolved live: generic opens clear the explicit selection withselectDefaultGitScope, and any custom base is kept. Mobile review prefers the Uncommitted section on such servers, waits for git status before saving a default, and labels a working-tree Changes range "Since , including uncommitted files". Covered indiffPanelStore.test.tsandreviewModel.test.ts.mod+enterdefault and the legacy numbered migration together.Verification
vp run -F t3 typecheck,@t3tools/web,@t3tools/desktop,@t3tools/mobile,@t3tools/contracts,@t3tools/client-runtime,@t3tools/shared: all exit 0 with 0error TS(each confirmed to run).vp test runon all 16 touched test files (server keybindings/AssetAccess/GitVcsDriverCore/VcsStatusBroadcaster, shared filePreview, client-runtime rpc client, web previewClickFocus/ChatMarkdown/composer-logic/diffPanelStore/keybindings/modelSelection, mobile reviewModel/nativeMarkdownText, desktop Manager/DesktopWindow): 16 files, 804 tests passed. After the mixed-version fix:diffPanelStore.test.ts+reviewModel.test.ts29 passed; web and mobile typechecks 0 errors; lint/fmt clean.vp linton changed TS files: exit 0 (existing warnings only).vp fmt --checkon changed files: clean.Unverified
thread.visiton servers with visited tracking. Only typechecked, not exercised end to end.Part of upstream cycle #996.
🤖 Generated with Claude Code