Skip to content

chore: backport upstream desktop UI fixes (2026-09-29) - #243

Merged
TheDarkPhantom merged 14 commits into
mainfrom
chore/upstream-web-fixes-2026-09-29
Sep 29, 2026
Merged

TheDarkPhantom merged 14 commits into
mainfrom
chore/upstream-web-fixes-2026-09-29

Conversation

@TheDarkPhantom

Copy link
Copy Markdown
Owner

Batch 2 of the 2026-09-29 upstream backport: desktop UI responsiveness and polish from pingdotgg/t3code.

Landed

Cherry-picks (-x):

Hand-ports (one commit each, Ported from pingdotgg/t3code#NNNN):

Skipped

None. pingdotgg#13553 landed as hardening only, as noted above.

Verification

  • vp test run on the touched tests (shortcutModifierState, storage, Sidebar.logic, terminal-links, markdown-clipboard, persistence, threadSort, McpHttpServer, McpInvocationContext, PreviewAutomationBroker, session-logic, client-runtime state, parseChangelog): all pass.
  • tsgo --noEmit passes for apps/web, apps/server, packages/client-runtime, and packages/contracts.
  • vp lint and vp fmt on the changed files: clean.
  • vp run check:avicode: passes.
  • No hook-level test for fix(web): skip unchanged shortcut modifier updates - 195x typing latency improvement pingdotgg/t3code#13884: apps/web has no DOM test environment (upstream added jsdom). The pure helper tests still pass.
  • No integrated client pass was run. The user-visible changes (typing latency, terminal memory, selection tint) still need the coordinator's desktop pass.

🤖 Generated with Claude Code

TheDarkPhantom and others added 12 commits September 30, 2026 01:10
Ordinary keystrokes dispatched a no-op React state update on every
keydown/keyup, which re-rendered work across the large sidebar tree.
Track the current state in a ref and return before dispatching when the
modifiers did not change. The fork has no paste-reset listener, so the
guard covers keydown, keyup, and blur.

Ported from pingdotgg#13884

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Encoding the whole shell snapshot through Schema walked thousands of
threads on the UI thread. Decoded thread shells are already in encoded
form, so only projects go through Schema and the rest is stringified
directly; the cache format is unchanged (verified by a generated-value
test). IndexedDB writes now listen for "abort" so quota failures that
never fire "error" still fail the write. Mobile cache store not ported
(desktop-only fork).

Ported from pingdotgg#13767

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…oading it twice (pingdotgg#13683)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
(cherry picked from commit b2577d6)
… in memory

Mounted-but-hidden terminal drawers subscribed to each thread's full
detail. They now read only the thread shell; the visible drawer keeps
the detail subscription it shares with ChatView (which also covers
archived threads without a shell). The fork's prop is `visible`.

Ported from pingdotgg#13686

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… per comparison

Project activity sorting recomputed each project's timestamp (walking all
of its threads) on every comparison, and settled-thread sorting re-parsed
dates per comparison. Both now compute keys once per sort. The fork keeps
its own sortSettledThreadsForSidebarV2 resolver in Sidebar.logic.ts, so
the upstream move into client-runtime threadSort is not ported.

Ported from pingdotgg#13759

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Popups that stay mounted while closed matched the floating-layer
selector and made type-to-focus think a menu was open. Popup selectors
now match only while open or closing. The fork's find-bar and dialog
entries are kept; the fork has no paste-to-focus handler, so only
type-to-focus consumes this selector.

Ported from pingdotgg#13553

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
)

Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
(cherry picked from commit 20f0ff1)
The reveal tint set background-color on the row, which covered the
editor's selection layer. Tint through --diffs-line-bg instead so the
selection paints on top. Upstream's fileSurfaceChrome.tsx does not exist
in the fork; the same CSS lives in FilePreviewPanel.tsx.

Ported from pingdotgg#13548

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 1e192b2)

Conflicts resolved for the fork: kept the fork's TaggedErrorClass
structure (no McpCapabilityUnavailableError, no snapshot bounding or
screenshot saving here), dropped the "Agent browser access" settings hint
(the fork always grants the preview capability), and replaced the
upstream brand name with "desktop app" in the no-host message. Error
messages only; no schema fields change.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
preview_snapshot returned the full accessibility tree, page text, and
logs, which could exceed the provider's tool output limit and cost the
agent its locators. Snapshots are now bounded near 20 KB: the tree is
dropped, text, names, identifiers, and log strings are capped, only the
newest log entries are kept, and lists (then page text, then locators)
are halved until the JSON fits. Both the text block and
structuredContent carry the bounded value plus an "omitted" note.

The fork had no bounding at all, so this ports boundSnapshotMetadata as
introduced in pingdotgg#10501 in its pingdotgg#13558 form. Screenshot
saving, includeImage, and the url identity block from those upstream
PRs are not ported.

Ported from pingdotgg#13558

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L labels Sep 29, 2026
TheDarkPhantom and others added 2 commits September 30, 2026 01:32
@TheDarkPhantom
TheDarkPhantom merged commit fb947c8 into main Sep 29, 2026
12 checks passed
@TheDarkPhantom
TheDarkPhantom deleted the chore/upstream-web-fixes-2026-09-29 branch September 29, 2026 17:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants