/** * Template Comparator * * Compares template files with local files to detect changes. * Determines file state: identical, safe-update, conflict, new, deleted, user-only. */ import type { DatabaseClient } from '../db/client.js'; import type { FileComparison, FileState, TemplateSubdir } from './types.js'; /** * Comparison options */ export interface ComparisonOptions { /** Subdirectories to compare (default: all) */ subdirectories?: TemplateSubdir[]; /** Whether to check user modifications from manifest */ checkUserModifications?: boolean; /** Verbose output */ verbose?: boolean; } /** * Comparison result with metadata */ export interface ComparisonResult { /** File comparisons */ comparisons: FileComparison[]; /** Count by state */ counts: Record; /** Total files compared */ total: number; /** Duration in milliseconds */ durationMs: number; } /** * Compares template versions to detect changes */ export declare class TemplateComparator { private db; private projectRoot; private templateRoot; private manifestManager; private verbose; constructor(db: DatabaseClient, projectRoot: string | undefined, templateRoot: string, verbose?: boolean); /** * Compare template files with local files * * @param options - Comparison options * @returns Array of file comparisons */ compare(options?: ComparisonOptions): Promise; /** * Scan local files in .claude/ * * @param localBasePath - Base path to .claude/ * @param subdirectories - Subdirectories to scan * @returns Map of relative path to hash */ private scanLocalFiles; /** * Recursively scan local files within a subdirectory */ private scanLocalFilesRecursive; /** * Check if a file should be excluded from scanning */ private shouldExcludeFile; /** * Build comparison results * * @param templateFiles - Files from templates/base/.claude/ * @param localFiles - Files from local .claude/ * @param manifest - Template manifest * @param templateBasePath - Template base path * @param localBasePath - Local base path * @returns Array of file comparisons */ private buildComparisons; /** * Compare a single file * * @param templateFile - Template file metadata * @param localHash - Local file hash (if exists) * @param localExists - Whether local file exists * @param manifestEntry - Manifest entry (if any) * @returns File comparison */ private compareFile; /** * Count comparisons by state * * @param comparisons - Array of comparisons * @returns Record of state to count */ private countByState; /** * Filter comparisons by state * * @param comparisons - Array of comparisons * @param states - States to include * @returns Filtered comparisons */ static filterByState(comparisons: FileComparison[], states: FileState[]): FileComparison[]; /** * Get comparisons needing action * * @param comparisons - Array of comparisons * @returns Comparisons that need user action or update */ static getActionableComparisons(comparisons: FileComparison[]): FileComparison[]; /** * Get comparisons with conflicts * * @param comparisons - Array of comparisons * @returns Comparisons with conflicts */ static getConflicts(comparisons: FileComparison[]): FileComparison[]; /** * Get safe updates * * @param comparisons - Array of comparisons * @returns Comparisons that can be safely updated */ static getSafeUpdates(comparisons: FileComparison[]): FileComparison[]; /** * Format comparison for display * * @param comparison - File comparison * @returns Formatted string */ static formatComparison(comparison: FileComparison): string; /** * Generate summary text for comparison results * * @param result - Comparison result * @returns Formatted summary */ static generateSummary(result: ComparisonResult): string; } //# sourceMappingURL=comparator.d.ts.map