feat(ui): select model effort in compare and review dialogs - #250
Merged
Conversation
Compare and Review could pick a model but never a reasoning effort, so both always ran at the provider's configured tier. - add src/lib/providers/model-effort.ts as the single source for supported effort values, settings-derived defaults, cross-model clamping, and provider runtime-override mapping - give ModelSelector an opt-in effort axis so the trigger reads "model · effort" and the search dialog gains an effort row - replace the Compare provider/model dropdown pair with the searchable ModelSelector, per candidate and for the independent judge - carry candidate effort into task runtime overrides and judge effort into the judge runtime options, dropping values a model rejects - expand review focuses to seven with per-item descriptions sourced from the same module that builds the prompt instructions - drop the hardcoded bg-surface on the Compare textareas so they match the Review dialog in every theme Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
astyfx
enabled auto-merge (squash)
July 27, 2026 07:37
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.
Summary
Compare and Review let you choose a model but never a reasoning effort, so both surfaces always ran at the provider's configured tier. This adds a shared effort axis to the model picker, brings Compare onto the same searchable selector Review uses, reworks the Review focus list, and fixes the Compare textarea background.
Changes
Features
src/lib/providers/model-effort.tsowns supported effort values per provider/model, settings-derived defaults, cross-model clamping, and theclaudeEffort/codexReasoningEffortruntime-override mappingModelSelectorgains an opt-in effort axis — the trigger readsmodel · effortand the search dialog gets an effort rowModelSelectorinstead of the provider/model dropdown pairUI & accessibilityandError handling) and each item now carries a one-line description explaining what it instructs the reviewer to doFixes
bg-surfaceon the shared-brief and review-contract textareas so they match the Review dialog in every themeRefactors / Chores
src/lib/local-change-review.ts) so they cannot driftlaunchCompareRunVariantstakes a runtime-override patch instead of a bare model string, keeping the provider branch out ofapp.store.tsBreaking Changes
Test Evidence
New coverage:
tests/model-effort.test.ts(clamping, provider override mapping),tests/model-selector-effort.test.tsx(trigger renders the effort suffix only when opted in), plus compare/review cases for effort persistence, judge runtime options, and the expanded focus prompt.A full
bun testrun also surfaces 11 pre-existing parallel flakes (provider binary discovery, PR-diff timeouts) that pass when their files run individually — unrelated to this change.Notes
ultra→max), and a value with no ladder on the target provider is dropped so the provider's configured effort applies.primary/muted/bordertokens, and the textarea fix removes a hardcoded surface instead of adding one.