Type 'from:@name' in the search box to filter by sender — a dropdown
of matching users (avatar + display name + full ID) appears as you type
and selecting one converts it into a removable sender chip in the filter
bar. Multiple senders supported. Also works via manual entry on submit.
- SearchInput: detects trailing 'from:@...' pattern on every keystroke,
shows PopOut autocomplete from mx.getUsers(), onMouseDown prevents
input blur when selecting, cleans up fragment after selection
- SearchFilters: selectedSenders/onSelectedSendersChange props, sender
chips rendered with user icon and X to remove
- useLocalMessageSearch: filters cached events by sender set when senders
param is provided (encrypted room search respects the filter too)
- MessageSearch: handleSenderAdd deduplicates and writes to ?senders= URL
param; localResult now passes senders to the local search
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
No Matrix web client supports E2EE message search server-side — the
homeserver only sees ciphertext. This is the same approach FluffyChat
takes: scan locally decrypted events already in the live timeline.
Changes:
- useLocalMessageSearch: searches getLiveTimeline().getEvents() in
encrypted rooms using decrypted content (getContent(), not event.content)
- MessageSearch: runs client-side search in parallel with server search,
shows results in a dedicated 'Encrypted Rooms' section with clear notice
about scope (only cached/recently viewed messages)
- Encryption notice shown when encrypted rooms are in scope — explains
why results may be missing and what to do
- Server result limit raised from 20 → 50
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>