export interface BrainEntity { id: string; category?: string; content: string; importance?: number; /** Optional precomputed embedding. If absent, we compute lazily. */ vector?: number[]; metadata?: Record; } export interface BrainSnapshot { /** Optional friendly label ("brain-A", "January 2026", etc.) */ label?: string; entities: BrainEntity[]; source?: string; } export interface ConflictPair { a: BrainEntity; b: BrainEntity; reason: 'same-id-different-content' | 'high-similarity-different-position'; similarity: number; } export interface BrainDiffReport { labelA: string; labelB: string; onlyInA: BrainEntity[]; onlyInB: BrainEntity[]; bothShared: BrainEntity[]; conflicting: ConflictPair[]; stats: { addedCount: number; removedCount: number; conflictCount: number; similarityScore: number; sizeA: number; sizeB: number; }; narrative: string; svg: string; } export interface ApplyDiffOptions { strategy: 'mergeAll' | 'addOnly' | 'interactive'; /** Called for each entity when strategy is 'interactive'. Return true to keep. */ decide?: (entity: BrainEntity, from: 'A' | 'B') => boolean | Promise; } export declare class BrainDiff { /** Compute a semantic diff between two brains. */ diff(brainA: BrainSnapshot | string, brainB: BrainSnapshot | string): Promise; /** * Apply a diff back into a target brain snapshot. Returns the merged entities. * Caller is responsible for persisting them. */ applyDiff(targetBrain: BrainSnapshot, diff: BrainDiffReport, opts: ApplyDiffOptions): Promise; private normalize; /** Cosine similarity between two entities. Embeds lazily if needed. */ private cosine; private narrate; private renderSvg; } export declare function getBrainDiff(): BrainDiff; export declare function resetBrainDiffForTests(): void; //# sourceMappingURL=brain-diff.d.ts.map