Skip to content

Rework model selector with loadout-backed slots - #356

Draft
senxd wants to merge 11 commits into
zeronsh:mainfrom
senxd:rework-model-selector
Draft

Rework model selector with loadout-backed slots#356
senxd wants to merge 11 commits into
zeronsh:mainfrom
senxd:rework-model-selector

Conversation

@senxd

@senxd senxd commented Sep 14, 2026

Copy link
Copy Markdown

Summary

  • Rebuild the model picker on top of the five-slot loadout: slots carry harness, model, effort, provider model options, and a per-slot activation shortcut
  • Per-slot shortcut recording with physical-key conflict detection against the keymap, other loadouts, and reserved composer/app chords; Some("") disables a slot shortcut while None keeps the positional mod-shift-N default
  • Slot cards reorder via drag-and-drop or arrow keys, keeping model options and shortcuts attached to the card; provider catalog columns reorder the same way and persist a device-local provider_order
  • Slot menus split into frosted root + submenu cards (agent / model / effort / model options / speed / shortcut / remove) with full keyboard navigation, replacing the single glass slab over union bounds
  • Catalog requests are scoped to the effective device and workspace cwd, and reload on scope change; pending agent selections never persist an empty model
  • Claude harness passes model[1m] idempotently via a shared model_argument helper; picker rows show each row's resolved loadout shortcut badge
  • Split the loadout page into loadout/{bindings,cards,catalog,indicator,options}.rs and add extensive unit + gpui tests (shortcut normalization, reorder semantics, menu navigation, macOS shifted-digit aliases)

Screenshots

Redesigned the model selector (Reasoning bar, repositioned layout) Custom model loadouts
Redesigned model selector Custom model loadouts

Test plan

  • cargo check --workspace --all-targets
  • cargo test -p zeron-ui loadout (67 tests)
  • cargo fmt --check
  • Manual: record/clear/reorder slot shortcuts on macOS and verify Cmd+Shift+1-5 defaults still work
  • Manual: drag models from provider columns (incl. OpenRouter partition) into slots

Generated with Devin

senxd and others added 11 commits September 11, 2026 21:00
Co-authored-by: Cursor <cursoragent@cursor.com>
Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
# Conflicts:
#	crates/ui/src/composer.rs
#	crates/ui/src/motion.rs
#	crates/ui/src/pickers.rs
#	crates/ui/src/settings.rs
#	crates/ui/src/settings/shortcuts.rs
#	crates/ui/src/shell.rs
Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
The reset button's job is better served by jumping to the Model Loadout
settings page, and the traits tray painted a second hairline under the
tab row's own bottom border. Also switches the loadouts tab glyph to a
star and lands the remaining upstream-merge adaptations (draft options
now live in defaults, test call sites updated).

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
@senxd

senxd commented Sep 14, 2026

Copy link
Copy Markdown
Author

Also this was not listed above but the Pi provider in the model selector respects the model filter that is set in the Pi config. It should accurately represent what /models looks like in the pi cli.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant