/**
 * FilterPipeline — Records every filter decision for auditability.
 *
 * Tracks which findings were dismissed, downgraded, aggregated, or deduplicated
 * at each stage of the scanning pipeline. This enables answering
 * "why was finding X suppressed?" without rerunning the scan.
 *
 * Zero overhead by default — only records when explicitly enabled.
 */
export type FilterStage = 'file_context_adjustment' | 'localhost_aggregation' | 'noisy_aggregation' | 'auto_dismiss' | 'tier_filter' | 'ai_validation' | 'global_context' | 'contradiction_resolution' | 'deduplication' | 'user_suppression';
export type FilterAction = 'kept' | 'dismissed' | 'downgraded' | 'aggregated' | 'deduplicated' | 'suppressed';
export interface FilterDecision {
    stage: FilterStage;
    action: FilterAction;
    reason: string;
    originalSeverity?: string;
    newSeverity?: string;
    ruleName?: string;
}
export interface AnnotatedFinding {
    findingId: string;
    decisions: FilterDecision[];
    finalStatus: 'surfaced' | 'dismissed';
}
export interface FilterStageSummary {
    dismissed: number;
    downgraded: number;
    kept: number;
    aggregated: number;
    deduplicated: number;
    suppressed: number;
}
export declare class FilterPipeline {
    private decisions;
    private readonly enabled;
    constructor(enabled?: boolean);
    /** Record a filter decision for a finding. No-op if pipeline is disabled. */
    record(findingId: string, decision: FilterDecision): void;
    /** Get the full audit trail for all findings. */
    getAuditTrail(): AnnotatedFinding[];
    /** Get all decisions that led to a specific finding being filtered. */
    explainDismissal(findingId: string): FilterDecision[];
    /** Get summary statistics per filter stage. */
    getSummaryStats(): Record<FilterStage, FilterStageSummary>;
    /** Whether this pipeline is actively recording. */
    get isEnabled(): boolean;
}
//# sourceMappingURL=pipeline.d.ts.map