Search the mail servers too, as Spark does

A second after the search field rests, the search also goes to every
account's server, for mail that isn't stored yet: Microsoft 365 through
Graph's $search (KQL), Gmail with X-GM-RAW, other IMAP servers with
UID SEARCH TEXT. Up to 100 of the newest hits per place are fetched and
stored like synced mail (inbox mail as reaching back stores it, folder
mail as the folder's sync does), so the full-text index has them and the
local search, run again, shows them. Trash, Junk and Drafts are left out.

The search syntax parser moves from the agents' tool into the store as
spark_store::Query, which the mail crate also translates for servers.

IMAP mail a search brings in from below the inbox floor isn't taken for
gone by the next sync, and reaching back passes over it.

The list says it's still searching rather than "No emails found" while
the servers are asked, with a spinner next to the count.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
cc5184769dMichael Rodriguez committed on 10/23/2026, 10:50:27 PMparentac73900
21 files changedLine totals unavailable