Client UX: profile-filtered sessions, draft persistence, stream safety
- Profile selector now filters session list: only sessions of the selected
  profile are shown; switching profile opens the most recent session for
  that profile (or empty state if none exist)
- openSession() syncs profileSelect to the opened session's profile so
  the list always reflects what's on screen
- Session items no longer show redundant profile name (list is filtered)
- Bug fix: switching sessions while streaming now calls abandonStream()
  before ws.disconnect() β€” resets state without touching DOM, preventing
  WS onClose from calling finishStream() on the wrong session
- Textarea no longer disabled during streaming β€” only the Send button is
  locked; user can type the next message while model is still responding
- Draft auto-saved to localStorage per session on every keystroke, restored
  on session switch, cleared on send β€” survives page refresh

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 108f65d commit a911bfc37822568aaaa3a49cec80c41a43d34ad9
@Eugene Sukhodolskiy Eugene Sukhodolskiy authored on 9 Apr
Showing 3 changed files
View
client/index.html
View
client/js/app.js
View
client/js/sidebar.js