import type { WsHub } from '../server/ws-hub.js';
import type { NotificationService } from './notification-service.js';
import type { AuthUser } from './auth-service.js';
export interface BroadcastMentionInput {
    /** User who was @mentioned. */
    recipient: AuthUser;
    /** What kind of artifact the mention lives on. Phase 1: 'comment'. */
    sourceType: string;
    /** Stable public id of the source (e.g. comment_id). */
    sourceId: string;
    /** Body excerpt to render in the notifications dropdown row. Truncated to 200 chars on insert. */
    preview: string;
    /** Who did the mentioning. */
    mentioner: AuthUser;
    /** Entry coords for deep-linking from the notifications dropdown directly
     *  to the commented entry. Null for sources that don't live on an entry. */
    entry: {
        repo: string;
        entryType: string;
        entryId: string;
        threadId: string;
    } | null;
}
/**
 * Persist + broadcast a mention. The persisted row is what the notifications
 * dropdown reads on next load; the WS event is the live nudge that surfaces
 * the toast and bumps the unread badge without waiting for a poll.
 *
 * One-stop call site so messaging-era split between "write row" and "fire
 * event" can never drift — every mention goes through this.
 */
export declare function broadcastMention(notifications: NotificationService, wsHub: WsHub, input: BroadcastMentionInput): number;
