Skip to content

IDEA: separate the composer pickers and preserve draft input - #27929

Draft
bmdavis419 wants to merge 5 commits into
mainfrom
t3/fix-composer
Draft

bmdavis419 wants to merge 5 commits into
mainfrom
t3/fix-composer

Conversation

@bmdavis419

Copy link
Copy Markdown
Contributor

Generated by one of Ben Davis' agents

  • Harness: Codex
  • Orchestrator: T3 Code
  • Model: gpt-6.1 sol on medium reasoning

IDEA for discussion: keep the composer quiet at rest, make its two pickers discoverable, and preserve what the user meant to send.

  • Separate model and reasoning with a single divider. Each has its own hover and click target; the highlights meet at the divider without a gap or permanent boxes.
  • Preserve literal paths, URLs, and inline code through paste and display. Multiline paste replaces the selection in place and keeps Windows blank lines. The literal-paste work builds on Julius’s fix(web): pasted URLs and paths keep their underscores #25264.
  • Preserve edits made while a send is preparing, including multi-model sends. When an edited queued turn starts, recover its attachments and context chips without overwriting a separate draft.
  • Give the collapsed phone web composer the same primary actions as the expanded one, including Stop. Space activates a focused sidebar thread, and desktop typing skips phone-only layout measurements. Native mobile is unchanged.

Proposed picker treatment

Hovered model picker beside the reasoning picker, separated by one flush divider

Before / after

Interaction Before After
Paste paths and inline code Before: Paste paths and inline code After: Paste paths and inline code
Replace selected text with a multiline paste Before: Replace selected text with a multiline paste After: Replace selected text with a multiline paste
Collapsed phone web composer during a turn Before: Collapsed phone web composer during a turn After: Collapsed phone web composer during a turn

Important files

  • apps/web/src/components/chat/ComposerControlsBar.tsx — model/effort divider and adjoining hit targets.
  • apps/web/src/components/ComposerPromptEditorTiptap.tsx — paste and caret behavior.
  • apps/web/src/composerDraftStore.ts — stale-send guard and queued-edit recovery.
  • apps/web/src/components/chat/ChatComposer.tsx — shared primary actions and mobile-only wrap measurement.

Validation: vp run check:changed passed (377 affected tests, plus compiler checks). Exercised independent picker menus, exact pasted text through a Replay turn, and Stop at a 390px browser width. Measured 0px between the hovered model button and the divider.

Built with Codex in T3 Code · gpt-6.1 sol on medium reasoning.

Keep paths and code literal through paste and display, and splice multiline text at the caret. The path and inline-code paste handling builds on Julius Marminge’s work in #25264.

Preserve newer drafts and queued-edit context during asynchronous sends. Share primary actions across phone layouts, leave Space activation to sidebar rows, and skip mobile-only text measurements on desktop.
@bmdavis419 bmdavis419 added the IDEA A proposed direction for discussion label Oct 31, 2026
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Oct 31, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

IDEA A proposed direction for discussion size:XL 500-999 changed lines (additions + deletions). 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.

1 participant