You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(web): adopt the composer state drawers (DEF-5) (#63)
* feat(web): attach composer state drawers (#7150)
(cherry picked from commit 792a1404f6d25838597f8f31b0af144dc1beee12)
* feat(web): collapse tool activity into one line (#7152)
(cherry picked from commit 4a9edff4c1093c1d31b7c97d6d1f32489ea035bd)
Adopted with MessagesTimeline reconciled Pylon-first rather than taken
wholesale: its divergence is only ~93 lines, so upstream's new
`isExpandedToolGroupEntry` plumbing and `GroupContainer` are unioned with
Pylon's response-status group label, session-notification row, and the
failure/success/neutral indicators.
The three-way merge also dropped `activeTurnInProgress` as collateral — upstream
never had it, so its diff context silently removed Pylon's prop from ChatView,
the props interface, the row activity context, and the shared test fixture. All
four are restored; the success and neutral indicators depend on it.
* feat(web): rebuild the composer on upstream's structure (DEF-5)
Closes DEF-5. `#7150` rewrites 1084 lines of a file where Pylon diverged by
1460, and the previous attempt — merging upstream's diff into Pylon's tree
block by block — produced 8 JSX errors because upstream flattens the fragment
and provider-frame divs into one `<form>` while Pylon's layers cannot host its
drawer tree. The two are ends of one restructure.
This takes upstream's composer as the base and replays Pylon's divergence onto
it with `git apply --3way`, which is the same reconciliation in the direction
that actually converges: 8 conflicts instead of a hand-rebuild, and every
feature that was not structural applied clean.
Resolved Pylon-first where the two disagree:
- The command-menu position keeps Pylon's settle loop from `ce5371d41` and
takes upstream's drawer-aware measurement. Upstream schedules from a plain
ResizeObserver on the ancestors, which that commit established does not fire
while the composer glides into place — the bug it fixed and browser-verified
at 2200px. Its measurement is kept; the loop still owns *when*.
- `resolvedRuntimeMode` / `supportedRuntimeModes` over upstream's plain
`runtimeMode`, at both the footer and the compact controls menu.
- Quick question and session-resource controls, and Pylon's superset of props
on ComposerPrimaryActions.
- `ThreadHandoffTab` was lost with upstream's replaced form root and is
restored; a symbol sweep against origin/pylon caught it.
Upstream's structure wins where it is merely different: the flattened `<form>`,
the drawer tree, the inline task and stash badges. `formatProviderSkillDisplayName`
moves to the client-runtime path `#7150` introduced.
Verified: typecheck clean across 7 packages, 370 tests over 26 composer and
timeline suites, and a symbol-by-symbol sweep confirming all 20 Pylon composer
features survive.
* docs(upstream): retire DEF-5, composer drawers adopted
* style(web): collapse the timeline activity dependency array
* docs(upstream): format the DEF-5 ledger entry
---------
Co-authored-by: maria <maria@kuuro.net>
| Command-menu position | Pylon's settle loop from `ce5371d41` with upstream's drawer-aware measurement inside it. Upstream schedules from a plain ResizeObserver on the ancestors, which that commit established does not fire while the composer glides into place — the bug it fixed and browser-verified at 2200px. Measurement kept, scheduling not. |
1970
+
| Runtime mode |`resolvedRuntimeMode` / `supportedRuntimeModes` over upstream's plain `runtimeMode`, at the footer and the compact controls menu. |
1971
+
| Quick question, session resources, ComposerPrimaryActions props | Pylon's, which are supersets. |
| DEF-5 |`#7150``792a1404f` + `#7152``4a9edff4c`| 2026-08-20 | Whenever the composer is next worked on deliberately. This is scheduled work, not a bet on upstream changing, so there is no waiting condition to poll. Before starting, check `git log --oneline 792a1404f..t3code-upstream/main -- apps/web/src/components/chat/ChatComposer.tsx` for follow-ups that should land with it. |`#7150` rewrites 1084 lines of `ChatComposer.tsx` against 50 Pylon commits and a 4837-vs-2824 line divergence. A full block-by-block resolution compiled to 8 JSX errors: upstream flattens the fragment and provider-frame divs into one `<form>`, so its 335-line drawer tree cannot be hosted by Pylon's layers. Needs the composer rebuilt on upstream's structure with Pylon's ThreadHandoffTab, provider frame classes, settle loop, `resolvedRuntimeMode`, and Quick question / session-resource controls grafted back. `#7152` depends on it. |
2011
+
| ID | Upstream | Deferred on | Revisit when | Why deferred |
0 commit comments