Reverts the query/response approach from #3037 and fixes the actual bugs
that caused empty ephemeral directories:
- directory_listing.rs: Restore async indexer dispatch (return empty,
populate via events). Subdirectories from a parent's shallow index now
correctly fall through to trigger their own indexer job.
- subscriptionManager.ts: Pre-register initial listener before calling
transport.subscribe() so buffer replay events aren't broadcast to an
empty listener Set.
- useNormalizedQuery.ts: Seed TanStack Query cache when oldData is
undefined, so events arriving before the query response aren't silently
dropped by the setQueryData updater.
Adds bridge test (Rust harness + TS integration) that reproduces the
ephemeral event streaming flow end-to-end.