feat: add searchable Active Profile picker

This commit is contained in:
proxyctl coordinator
2026-07-17 22:32:41 +08:00
parent 7c0b4481d7
commit 306b02331f
10 changed files with 483 additions and 22 deletions
@@ -4,16 +4,16 @@
**Blocked by:** 02 — Deliver the Operations Console dashboard; 04 — Unify operation coordination and status feedback.
**Status:** ready-for-agent
**Status:** done
- [ ] A dashboard action opens a keyboard-only modal Profile picker.
- [ ] The Active Profile is pinned first and all remaining Profiles are sorted by name.
- [ ] The picker supports filtering and scrolling across more Profiles than fit in the terminal.
- [ ] Enter activates the selected Profile and Escape closes the picker without mutation.
- [ ] Activation uses the unified progressive operation contract and displays per-Target progress on the dashboard.
- [ ] Docker restart confirmation appears when required, with cancellation as the safe default.
- [ ] Partial failure retains successful Target updates, closes or preserves the picker predictably, and focuses the first failed Target.
- [ ] Search text and selection survive resize when the selected Profile still exists.
- [ ] Empty and no-match states provide clear next actions without conflating switching with creation.
- [ ] Profile names and all operation text are defensively redacted before rendering.
- [ ] Complete-Model tests cover ordering, search, keyboard selection, resize, activation, confirmation, cancellation, partial failure, and empty states.
- [x] A dashboard action opens a keyboard-only modal Profile picker.
- [x] The Active Profile is pinned first and all remaining Profiles are sorted by name.
- [x] The picker supports filtering and scrolling across more Profiles than fit in the terminal.
- [x] Enter activates the selected Profile and Escape closes the picker without mutation.
- [x] Activation uses the unified progressive operation contract and displays per-Target progress on the dashboard.
- [x] Docker restart confirmation appears when required, with cancellation as the safe default.
- [x] Partial failure retains successful Target updates, closes or preserves the picker predictably, and focuses the first failed Target.
- [x] Search text and selection survive resize when the selected Profile still exists.
- [x] Empty and no-match states provide clear next actions without conflating switching with creation.
- [x] Profile names and all operation text are defensively redacted before rendering.
- [x] Complete-Model tests cover ordering, search, keyboard selection, resize, activation, confirmation, cancellation, partial failure, and empty states.