Skip to content

UI polish: model display fixes, dock badges, sidebar sync, and throttling#13

Merged
PureWeen merged 1 commit intomainfrom
dev/shneuvil/ui-polish-and-model-fixes
Feb 10, 2026
Merged

UI polish: model display fixes, dock badges, sidebar sync, and throttling#13
PureWeen merged 1 commit intomainfrom
dev/shneuvil/ui-polish-and-model-fixes

Conversation

@PureWeen
Copy link
Copy Markdown
Owner

Changes

Model display fixes

  • Handle SessionModelChangeEvent from SDK to track actual model used by backend
  • Update session.Model from all usage events (not just resumed sessions)
  • Add GetSessionModel() for consistent model display across grid and expanded views
  • Add session's actual model to dropdown options if not in available list (prevents select mismatch)

Dock badge notifications

  • Show badge count on app icon for completed sessions (Mac Catalyst/iOS)
  • Badge clears automatically when app becomes active via OnActivated lifecycle event

Dynamic model list

  • Fetch available models from SDK via ListModelsAsync() with hardcoded fallback
  • Model selection persists across app restarts via UiState.SelectedModel

Sidebar ↔ Dashboard sync

  • Tab/Shift+Tab in grid/expanded mode updates sidebar highlight
  • Clicking session in sidebar switches to it in dashboard

UI improvements

  • Card :focus-within highlight (blue border + glow) for active session
  • Card message windowing with "Load earlier messages" button
  • Throttle SafeRefreshAsync (250ms) and sidebar RefreshSessions (500ms) to prevent rapid DOM re-renders from blocking click events during streaming

…ling

- Fix model display inconsistency between grid and expanded views
  - Handle SessionModelChangeEvent from SDK to track actual model
  - Update session.Model from all usage events (not just resumed sessions)
  - Add GetSessionModel() for consistent model display across views
  - Add session model to dropdown options if not in available list
- Add dock badge notifications for completed sessions (Mac Catalyst/iOS)
  - Badge clears automatically when app becomes active
- Dynamic model list from SDK (ListModelsAsync) with fallback
- Model selection persistence across app restarts via UiState
- Sidebar session sync with Tab/Shift+Tab navigation
- Card focus-within highlight for active session
- Card message windowing with load-more button
- Throttle Dashboard SafeRefreshAsync and sidebar RefreshSessions
  to prevent rapid re-renders from blocking click events
@PureWeen PureWeen merged commit 2e9ea68 into main Feb 10, 2026
@PureWeen PureWeen deleted the dev/shneuvil/ui-polish-and-model-fixes branch February 22, 2026 00:16
PureWeen added a commit that referenced this pull request Apr 17, 2026
…ion, case sensitivity

Finding #13: PathsEqual now accepts nullable parameters and returns false
for null/empty/whitespace inputs instead of throwing ArgumentNullException.
This prevents crashes when existing.BareClonePath is null or empty (e.g.,
old/migrated state or failed clone).

Finding #10: Split the else branch in AddRepositoryFromLocalAsync so a
true hash collision (same localId, different path) generates a fresh GUID-
based ID instead of silently creating a duplicate.

DeterministicPathHash: Case-fold only on Windows/macOS (case-insensitive
filesystems). Linux (case-sensitive) preserves original casing so two
paths differing only in case produce distinct hashes.

Added 4 tests for PathsEqual null/empty/whitespace handling.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
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