Add Alt+Up/Down to reorder enabled models in scoped-models selector

- Add move() pure function for swapping adjacent items
- Handle Alt+Up/Down in handleInput to reorder enabled models
- Selection follows the moved item
- Update footer hint with new shortcut

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
thomasmhr 2026-01-12 23:41:20 +01:00 committed by Mario Zechner
parent 15e18f61ab
commit 68f1e30f06

View file

@ -155,7 +155,7 @@ export class ScopedModelsSelectorComponent extends Container {
const enabledCount = this.enabledIds?.length ?? this.allIds.length;
const allEnabled = this.enabledIds === null;
const countText = allEnabled ? "all enabled" : `${enabledCount}/${this.allIds.length} enabled`;
const parts = ["Enter toggle", "^A all", "^X clear", "^P provider", "^S save", countText];
const parts = ["Enter toggle", "^A all", "^X clear", "^P provider", "Alt+↑↓ reorder", "^S save", countText];
return this.isDirty
? theme.fg("dim", ` ${parts.join(" · ")} `) + theme.fg("warning", "(unsaved)")
: theme.fg("dim", ` ${parts.join(" · ")}`);
@ -220,6 +220,25 @@ export class ScopedModelsSelectorComponent extends Container {
return;
}
// Alt+Up/Down - Reorder enabled models
if (matchesKey(data, Key.alt("up")) || matchesKey(data, Key.alt("down"))) {
const item = this.filteredItems[this.selectedIndex];
if (item && isEnabled(this.enabledIds, item.fullId)) {
const delta = matchesKey(data, Key.alt("up")) ? -1 : 1;
const enabledList = this.enabledIds ?? this.allIds;
const currentIndex = enabledList.indexOf(item.fullId);
const newIndex = currentIndex + delta;
// Only move if within bounds
if (newIndex >= 0 && newIndex < enabledList.length) {
this.enabledIds = move(this.enabledIds, this.allIds, item.fullId, delta);
this.isDirty = true;
this.selectedIndex += delta;
this.refresh();
}
}
return;
}
// Toggle on Enter
if (matchesKey(data, Key.enter)) {
const item = this.filteredItems[this.selectedIndex];