fix(web): remember Composer Fast mode across new chats#2981
Conversation
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>
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
ApprovabilityVerdict: 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. |
There was a problem hiding this comment.
💡 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".
| const selections = withImplicitFastModeDefault(caps, modelOptions); | ||
| const descriptors = getProviderOptionDescriptors({ caps, selections }); |
There was a problem hiding this comment.
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>
Dismissing prior approval to re-evaluate c1a38de
What Changed
fastModeto Normal when the user has not explicitly chosen Fast, instead of using Cursor ACP’s provider-reported default.fastModeoptions when switching models, so changing to Composer 2.5 (or another model) no longer clears the last Fast/Normal choice.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: trueas 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
Note
Fix Composer Fast mode to persist across new chats
withImplicitFastModeDefaultin composerProviderState.tsx to injectfastMode=falsewhen a model exposes the fast mode option but the user has made no explicit selection, preventing the provider default from being silently applied.setStickyModelSelectionin 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.fastMode=falseentry when the model supports fast mode and no user selection exists, rather than leaving it unset.Macroscope summarized c1a38de.