From 430ed2a3a3312bf7a6bc1035aa377b4d81ed0f8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pascal=20Andr=C3=A9?= Date: Tue, 25 Aug 2026 10:54:14 +0200 Subject: [PATCH] fix(ui): restore model and session authority Move model search into the picker popover and keep the favorites filter beside it. Add an Advanced preference, translated across every locale, that hides only supplemental provider credit balances by default. Reconcile terminal native events against session.active with generation guards so stale completions cannot stop continuing work. Keep inbox admission from prematurely confirming optimistic sends and follow the V2 previous/next message cursor contract in both directions. Cover provider balance visibility, terminal reconciliation races, optimistic send settlement, and message pagination. Validation: 52 focused tests, full UI and Electron typecheck, 287 runnable UI tests, 126 browser integration tests, and release Tauri build. --- .github/workflows/pr-build.yml | 1 + packages/ui/src/components/model-selector.tsx | 83 ++++++++++--------- .../session/provider-usage-panel.test.ts | 10 +++ .../session/provider-usage-panel.tsx | 10 ++- .../settings/advanced-settings-section.tsx | 3 +- .../ui/src/lib/i18n/messages/de/settings.ts | 2 + .../ui/src/lib/i18n/messages/en/settings.ts | 2 + .../ui/src/lib/i18n/messages/es/settings.ts | 2 + .../ui/src/lib/i18n/messages/fr/settings.ts | 2 + .../ui/src/lib/i18n/messages/he/settings.ts | 2 + .../ui/src/lib/i18n/messages/ja/settings.ts | 2 + .../ui/src/lib/i18n/messages/ne/settings.ts | 2 + .../ui/src/lib/i18n/messages/ru/settings.ts | 2 + .../src/lib/i18n/messages/zh-Hans/settings.ts | 2 + packages/ui/src/lib/model-visibility.test.ts | 13 ++- .../ui/src/lib/settings/behavior-registry.ts | 10 +++ packages/ui/src/stores/instances.ts | 8 +- packages/ui/src/stores/message-v2/bridge.ts | 3 +- .../src/stores/message-v2/instance-store.ts | 18 ++-- packages/ui/src/stores/opencode-data.ts | 9 +- packages/ui/src/stores/preferences.tsx | 4 + packages/ui/src/stores/session-api.ts | 27 +++--- packages/ui/src/stores/session-events.ts | 77 +++++++++++++++-- .../src/stores/session-native-events.test.ts | 50 +++++++++++ .../stores/session-request-authority.test.ts | 32 +++---- 25 files changed, 280 insertions(+), 96 deletions(-) create mode 100644 packages/ui/src/components/session/provider-usage-panel.test.ts diff --git a/.github/workflows/pr-build.yml b/.github/workflows/pr-build.yml index 73c714b9..6c88109c 100644 --- a/.github/workflows/pr-build.yml +++ b/.github/workflows/pr-build.yml @@ -156,6 +156,7 @@ jobs: node --conditions=browser --import tsx --test --test-force-exit packages/ui/src/components/form-request-tool-target.test.ts packages/ui/src/components/form-request.test.ts + packages/ui/src/components/session/provider-usage-panel.test.ts packages/ui/src/lib/hooks/use-active-session-message-load.test.ts packages/ui/src/stores/app-tabs.test.ts packages/ui/src/stores/forms.test.ts diff --git a/packages/ui/src/components/model-selector.tsx b/packages/ui/src/components/model-selector.tsx index bccc3ce1..9166b4d5 100644 --- a/packages/ui/src/components/model-selector.tsx +++ b/packages/ui/src/components/model-selector.tsx @@ -399,33 +399,20 @@ export default function ModelSelector(props: ModelSelectorProps) { }} > - -
- { - if (!isOpen()) searchInputRef.select() - }} - onKeyDown={(event) => { - if (event.key === "Escape") queueMicrotask(restoreSelectedInput) - }} - /> - {currentModelValue() && ( - - {currentModelValue()!.providerId}/{currentModelValue()!.id} + + + +
+ + {currentModelLabel()} - )} -
- - + {currentModelValue() && ( + + {currentModelValue()!.providerId}/{currentModelValue()!.id} + + )} +
+ @@ -433,23 +420,37 @@ export default function ModelSelector(props: ModelSelectorProps) { +
+
+ { + if (event.key === "Escape") queueMicrotask(restoreSelectedInput) + }} + /> + +
+