Skip to content

fix(web): remember Composer Fast mode across new chats#2981

Open
aravhawk wants to merge 2 commits into
pingdotgg:mainfrom
aravhawk:fix/composer-fast-mode-sticky
Open

fix(web): remember Composer Fast mode across new chats#2981
aravhawk wants to merge 2 commits into
pingdotgg:mainfrom
aravhawk:fix/composer-fast-mode-sticky

Conversation

@aravhawk

@aravhawk aravhawk commented Jun 6, 2026

Copy link
Copy Markdown

What Changed

  • Default Cursor Composer fastMode to Normal when the user has not explicitly chosen Fast, instead of using Cursor ACP’s provider-reported default.
  • Preserve sticky fastMode options when switching models, so changing to Composer 2.5 (or another model) no longer clears the last Fast/Normal choice.
  • Added tests for default dispatch behavior and sticky option preservation.

Why

Selecting Composer 2.5 in a new chat was defaulting to Fast mode every time, even after manually turning it off. Cursor ACP reports fastMode: true as the provider default, and T3 was treating that as the user’s selection. Model switches also cleared sticky trait options, so the last manual Fast/Normal choice did not carry into new chats.

This keeps Fast mode opt-in and remembers the user’s last manual choice across new chats and model changes.

UI Changes

N/A — behavior-only change. New Composer chats start in Normal unless the user previously chose Fast, and switching models no longer resets Fast/Normal to the provider default.

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Note

Fix Composer Fast mode to persist across new chats

  • Adds withImplicitFastModeDefault in composerProviderState.tsx to inject fastMode=false when a model exposes the fast mode option but the user has made no explicit selection, preventing the provider default from being silently applied.
  • Updates setStickyModelSelection in composerDraftStore.ts to retain existing provider options when a new sticky model selection omits them, so fast mode preference survives model changes and new chats.
  • Behavioral Change: Composer state now always includes an explicit fastMode=false entry when the model supports fast mode and no user selection exists, rather than leaving it unset.

Macroscope summarized c1a38de.

Default Cursor fastMode to Normal when the user has not chosen Fast, and
preserve sticky fastMode options when switching models so new chats reuse
the last manual Fast/Normal selection.

Co-authored-by: Cursor <cursoragent@cursor.com>
@coderabbitai

coderabbitai Bot commented Jun 6, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: d806cebb-e90f-4041-838e-f8263b21fc82

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jun 6, 2026
@macroscopeapp

macroscopeapp Bot commented Jun 6, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

Self-contained UX fix that ensures Composer Fast mode preferences persist across new chats. Changes are well-tested with comprehensive unit tests and limited in scope to composer state management. The open review comment appears to be based on an incorrect reading of the code.

You can customize Macroscope's approvability policy. Learn more.

macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Jun 6, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1b512d0cba

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +75 to +76
const selections = withImplicitFastModeDefault(caps, modelOptions);
const descriptors = getProviderOptionDescriptors({ caps, selections });

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Apply implicit Fast default to trait controls too

When Cursor reports fastMode.currentValue === true and the user has no explicit selection, this implicit false is only fed into getComposerProviderState for dispatch. The rendered trait controls still receive the raw modelOptions via renderProviderTraitsPicker/MenuContent, so TraitsPicker builds descriptors from the provider default and shows the toggle/label as Fast even though the send path dispatches Normal. This leaves new Composer chats in a misleading state until the user toggles Fast/Normal.

Useful? React with 👍 / 👎.

Apply withImplicitFastModeDefault in trait controls so the Fast/Normal
badge matches dispatch when Cursor reports fastMode true as the provider
default but the user has not explicitly chosen Fast.

Co-authored-by: Cursor <cursoragent@cursor.com>
@macroscopeapp macroscopeapp Bot dismissed their stale review June 7, 2026 13:43

Dismissing prior approval to re-evaluate c1a38de

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

Labels

size:M 30-99 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant