/** * Frame Deduplication Logic * * Implements consolidation strategies for duplicate frames. * Supports merge, supersede, and keep-both modes. */ import type { Frame } from "./frames/types.js"; import { type SimilarityResult } from "./similarity.js"; /** * Consolidation mode for duplicate frames */ export type ConsolidationMode = "merge" | "supersede" | "keep-both"; /** * Strategy for consolidating duplicate frames */ export interface ConsolidationStrategy { mode: ConsolidationMode; mergedFrame?: Frame; rationale: string; } /** * Extended Frame type with deduplication metadata */ export interface FrameWithDeduplication extends Frame { /** ID of frame that supersedes this one */ superseded_by?: string; /** IDs of frames that were merged into this one */ merged_from?: string[]; } /** * Determine consolidation strategy for two similar frames * @param frameA - First frame (typically newer) * @param frameB - Second frame (typically older) * @returns Consolidation strategy with merged frame if applicable */ export declare function determineConsolidationStrategy(frameA: Frame, frameB: Frame): ConsolidationStrategy; /** * Options for deduplication operation */ export interface DeduplicationOptions { /** Similarity threshold (0.0 - 1.0, default: 0.85) */ threshold?: number; /** If true, only detect duplicates without consolidating */ dryRun?: boolean; /** If true, automatically consolidate without prompting */ auto?: boolean; } /** * Result of deduplication operation */ export interface DeduplicationResult { /** Total frames analyzed */ totalFrames: number; /** Number of duplicate groups found */ duplicateGroups: number; /** Similarity results for detected duplicates */ duplicates: SimilarityResult[]; /** Consolidation strategies for each duplicate pair */ strategies: ConsolidationStrategy[]; /** Frames that were consolidated (if not dry-run) */ consolidated?: Frame[]; } /** * Detect duplicate frames in a collection * @param frames - Frames to analyze for duplicates * @param options - Deduplication options * @returns Deduplication result with detected duplicates and strategies */ export declare function detectDuplicateFrames(frames: Frame[], options?: DeduplicationOptions): DeduplicationResult;