/**
 * NOTIFY Slack Delivery Reconciliation Service
 *
 * Detects chat messages with pending Slack delivery and retries them.
 * Uses persisted chat messages as the source of truth — when the orchestrator
 * outputs a [NOTIFY] with both conversationId and channelId, the chat message
 * stores Slack routing metadata and delivery status. This service periodically
 * scans for `slackDeliveryStatus === 'pending'` messages and retries delivery.
 *
 * @module services/slack/notify-reconciliation
 */
/**
 * Service that periodically reconciles pending Slack deliveries.
 *
 * Lifecycle:
 * 1. `start()` — schedules first run after startup delay, then at regular intervals
 * 2. `runReconciliation()` — scans for pending messages, retries Slack delivery
 * 3. `stop()` — clears interval and startup timer
 *
 * @example
 * ```typescript
 * const reconciler = new NotifyReconciliationService();
 * reconciler.start();
 * // ... later during shutdown
 * reconciler.stop();
 * ```
 */
export declare class NotifyReconciliationService {
    private logger;
    private intervalHandle;
    private startupTimerHandle;
    private isRunning;
    constructor();
    /**
     * Start the reconciliation scheduler.
     *
     * Schedules the first run after a startup delay (to allow the Slack bridge
     * to initialize), then runs at a regular interval.
     */
    start(): void;
    /**
     * Stop the reconciliation scheduler and clear all timers.
     */
    stop(): void;
    /**
     * Run a single reconciliation pass.
     *
     * Scans all chat messages for pending Slack deliveries within the age cutoff,
     * rebuilds SlackNotification payloads from stored metadata, and retries delivery.
     * Messages that exceed the max attempt count are marked as `'failed'`.
     *
     * Guards against concurrent runs with the `isRunning` flag.
     */
    runReconciliation(): Promise<void>;
    /**
     * Build a SlackNotification from stored chat message metadata.
     *
     * @param msg - The chat message with Slack delivery metadata
     * @returns SlackNotification or null if required fields are missing
     */
    private buildNotificationFromMessage;
}
//# sourceMappingURL=notify-reconciliation.service.d.ts.map