eb79823fd2
Older messages (beyond the newest 500) now load as you scroll to the top — the thread endpoint takes a ?before=<created_at> cursor, the client prepends the older page and preserves scroll position (renderThread keepScroll). _hasMoreOlder stops paging when a short page returns. Search now covers the ENTIRE thread, not just the loaded window: new /api/messages/search (DM + group, LIKE with escaped wildcards) returns all matching message ids; the client debounces the query, and jumping to a hit older than the loaded window pages history back (ensureLoadedBack) until the match is in view, then highlights + flashes it. Cap raised to 500. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>