/**
 * Bot review comment parsing and resolution filtering.
 *
 * Normalizes CodeRabbit and GCA inline review comments into
 * structured findings, then filters to only resolved (accepted) threads
 * so that `review-learn` extracts lessons only from findings the
 * developer actually fixed.
 */
export interface NormalizedBotFinding {
    tool: 'coderabbit' | 'gca' | 'unknown';
    severity: string;
    file: string;
    line?: number;
    body: string;
    /** The raw suggestion text if present */
    suggestion?: string;
    /** How we determined this was resolved */
    resolutionSignal?: 'reply' | 'resolved_thread' | 'none';
    /** The root comment ID of the thread this finding originated from */
    rootCommentId?: number;
    /**
     * Round disposition per the canonical decline taxonomy
     * (doctrine bot-protocols.md §8.1; mmnto-ai/totem#2124). `declined` findings are
     * kept out of lesson extraction so a refuted claim is never laundered into a rule.
     * `undefined` means no disposition signal was available (treated as not-declined).
     */
    disposition?: 'accepted' | 'declined';
    /** For `declined` findings: the human reply that signalled the decline (audit-breadcrumb / mmnto-ai/totem#2038 backfill reference). */
    dispositionRationale?: string;
}
export interface CommentThread {
    path: string;
    diffHunk: string;
    comments: Array<{
        id?: number;
        author: string;
        body: string;
    }>;
}
export declare function isBotComment(author: string): boolean;
export declare function detectBot(author: string): 'coderabbit' | 'gca' | 'unknown';
/** Extract severity from CR comment body (red circle Critical, orange circle Major, yellow circle Minor) */
export declare function parseCRSeverity(body: string): string;
/** Strip HTML wrapper tags but keep content. Unwraps <details>, <summary>, <blockquote>. */
export declare function stripHtmlWrappers(html: string): string;
/** Extract suggestion blocks from CR/GCA comments */
export declare function extractSuggestion(body: string): string | undefined;
/** Extract severity from GCA comment body (SVG priority images) */
export declare function parseGCASeverity(body: string): string;
/** Patterns indicating human pushback (false positive signal). */
export declare const PUSHBACK_PATTERNS: RegExp[];
/**
 * Check if a bot comment thread was "fixed" (resolved positively).
 * Conservative heuristic: requires explicit agreement, not just thread resolution.
 */
export declare function isThreadResolved(thread: CommentThread): boolean;
/**
 * Normalize bot review comments into structured findings.
 * Only returns findings from threads that were resolved positively.
 */
/**
 * Extract findings from CodeRabbit review bodies (outside-diff + nits).
 * Shared by triage-pr and review-learn to avoid duplication.
 */
export declare function extractReviewBodyFindings(reviews: Array<{
    author: string;
    body: string;
}>): NormalizedBotFinding[];
/**
 * Extract findings from threads where the human explicitly pushed back (false positive signals).
 * Inverse of extractResolvedBotFindings — captures "intentional", "by design", "won't fix" threads.
 */
export declare function extractPushbackFindings(threads: CommentThread[]): NormalizedBotFinding[];
export declare function extractResolvedBotFindings(threads: CommentThread[]): NormalizedBotFinding[];
//# sourceMappingURL=bot-review-parser.d.ts.map