Run a websearch_to_tsquery search over transcript content.
Returns ranked results with <mark>-delimited snippets. On
non-PostgreSQL dialects (e.g. unit-test SQLite), the underlying
search service returns an empty list without raising.
Args:
q: Natural-language search query.
limit: Maximum results to return (1-100).
offset: Number of results to skip for pagination.
user: Authenticated user context.
db: Async DB session.
Returns:
Envelope {"data": [MeetingSearchResult], "meta": {...}}
where meta carries the echoed query and pagination.