fix(web): port upstream chat view, composer and timeline fixes - #457
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
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. |
(cherry picked from commit 2c3353578098a9e55e203a72217abe993f97987e)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> (cherry picked from commit aea9ecbc482a3d2c14d1828cb5eeaaa9294d1320)
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> (cherry picked from commit 076d753ae6cb97136b6b4199fb8fc0b379282dba)
…(#10478) (cherry picked from commit b919d6389929698ddf223d35d20139f01c8bc899)
Co-authored-by: Cursor Agent <cursoragent@cursor.com> (cherry picked from commit dadba6d95d2c4515956a6c7fef184378987e13b7)
Adds thread.stop with no default shortcut. The Stop button, the new command palette action, and the shortcut share one interrupt path, which also covers a turn still awaiting provider admission. Adopted from 09e8de9c655ae85410bf6b00446f272a01da81c7 (#4308)
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com> (cherry picked from commit 8588d7f63bf57e6285daafe035708cc22a99619c)
(cherry picked from commit 50a76cee7c56ac22568e549dc855248967bfb9ab)
(cherry picked from commit 134b7194b125dd4881ff6040f66997b23489b72e)
…ad (#10727) Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> (cherry picked from commit de545c41737aca08359244b7778ab52e55934f17)
…768) Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> (cherry picked from commit 7fbc545ae8c7866ac2b39648120cb2a17250d8b4)
Optimistic sends and /feedback transcripts sit in the timeline but never exist on the server. A transcript sorted between a request and its checkpointed response took that request's revert button. The projection now derives targets from server messages only, using a local id set that keeps its identity while a turn streams. Also covers a checkpoint landing after a turn settles, a later count moving the target, and revoking its proof.
rynfar
force-pushed
the
upstream/2026-09-10-web-composer
branch
from
September 11, 2026 01:28
0cfab37 to
1004a33
Compare
This was referenced Sep 11, 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.
Several chat view, composer and timeline fixes landed upstream in T3 Code: timestamp tooltips could mix languages, task rows only showed state as a glyph colour, streaming rebuilt checkpoint maps on every token, the composer footer and branch bar shifted while a thread loaded, and there was no shortcut to stop a running turn.
This ports 11 upstream sources through the frozen head
6c583620ff7ad3235b135af7107c0543467eecfa(tracking #414), one cherry-pick per source, each spliced into Pylon's version of the file. The 12th source in this lane, #9871 (attach files to question answers), crosses contracts, server, web and mobile, so it lands in its own PR.Sources
2c3353578098a9e55e203a72217abe993f97987eaea9ecbc482a3d2c14d1828cb5eeaaa9294d1320waitingstate kept076d753ae6cb97136b6b4199fb8fc0b379282dbab919d6389929698ddf223d35d20139f01c8bc899dadba6d95d2c4515956a6c7fef184378987e13b709e8de9c655ae85410bf6b00446f272a01da81c78588d7f63bf57e6285daafe035708cc22a99619c50a76cee7c56ac22568e549dc855248967bfb9ab134b7194b125dd4881ff6040f66997b23489b72ede545c41737aca08359244b7778ab52e55934f177fbc545ae8c7866ac2b39648120cb2a17250d8b47220dfe2c949476eaa7d21eccbcd3a0ce0eddb49Pylon adaptations
readywithrollbackAvailabilityverified. Upstream's inferred turn counts are not used. The projection derives targets withderiveRollbackTargetsover server messages only: optimistic sends and/feedbacktranscripts are excluded through a local id set that keeps its identity while a turn streams, so a local message can never claim a revert button. A click derives the full target (expected source revision and label) again from the server thread.buildRollbackTurnCountByMessageIdand ChatView's per-token target memo are gone. Tests cover proof revocation, the unsupported state, a checkpoint landing after the turn settles, a later count moving the target, a feedback transcript between a request and its checkpointed response, and a 250-turn thread streaming with zero checkpoint reads.thread.stopand a new Stop the running turn command palette action (via the composer handle) share one interrupt. Pylon's Stop button also works while a turn is still waiting for provider admission (session.status === "starting"), so the guard covers that case too. Upstream's guard allows only a running session, which would have silently broken Stop during admission. Covered by a test.fastModeoptions (Codex, Claude and Cursor models); Prime's speed control is aserviceTierselect and is unaffected either way. Pylon's background text generation dispatches descriptor defaults, and its Settings pickers show those defaults, so keeping generation out of the implicit Normal keeps what is sent matching what Settings shows. Covered by a test.waitingstatus and a screen-reader-only status prefix. The new visible labels replace that prefix, so status is announced once, and the shared label map now says "Running", matching upstream. Waiting steps keep their owner label.contextWindowIndicatorEnabledsetting and its on-by-default behaviour.reportsContextWindowistruefor Codex, Claude, and Prime in daemon mode, which emitthread.token-usage.updated. It isfalsefor Prime's ACP compatibility mode (stamped per backend, with a test). Cursor, Grok, OpenCode and Antigravity emit no usage, so they leave it unset and reserve no slot.thread.stopand its palette action are web/desktop only, because mobile has no keybinding system or command palette and keeps its own Stop button. The minimap turn navigation does not apply, since mobile has no minimap.reportsContextWindowis advertised in every provider snapshot, but only the web composer reserves the meter slot; the mobile composer's context ring is unchanged, as upstream's #10768 is web-only.docs/user/keybindings.mddocumentsthread.stop.docs/user/source-control.mdsays proactive panels open the linked review and the latest completed turn's diff when you enter a thread.docs/user/status-indicators.mddescribes the visible task states and theN/M completecount.Nothing Pylon-original was removed. The screen-reader-only task status prefix is replaced by visible text that carries the same information.
Verification
vp test runon 25 files: 853 tests pass. Files: timestampFormat, ComposerTasksBadge, TaskProgressStatus, ChatView.logic, MessagesTimeline logic and component, BranchToolbar.logic, composerProviderState, composerDraftStore, keybindings (web and contracts), KeybindingsSettings.logic, CommandPalette.logic, rightPanelStore, composerFooterLayout, ComposerBannerStack, ContextWindowMeter logic and component, ComposerPrimaryActions, ProviderModelPicker, GitActionsControl.logic, providerSnapshot, CodexProvider, PrimeAgentProvider, client-runtime rollback.@t3tools/web,t3,@t3tools/contractsand@t3tools/client-runtimereport no errors.vp linton 40 changed TypeScript files: 0 warnings, 0 errors.vp fmt --checkon all 44 changed files is clean.Ported by Claude Opus 5 in Claude Code.