import { type FileMetadata } from './core-bridge.js';
import type { DriftMonitorConfig, DriftAlertRule, DriftSummaryReport, DriftScoreResult, SpecDriftInfo } from '../types/index.js';
export declare function buildDriftMonitorConfig(projectPath: string, existing: DriftMonitorConfig | null, enabled: boolean, scheduleHours: number, threshold: number): DriftMonitorConfig;
export declare function buildAlertRules(rules: Omit<DriftAlertRule, 'id' | 'createdAt'>[]): DriftAlertRule[];
export declare function computeSummaryReport(projectPath: string, specList: string[], config: DriftMonitorConfig | null, rules: DriftAlertRule[], specTechnicalPaths?: Map<string, string>): Promise<DriftSummaryReport>;
/**
 * Compute a real drift score (0-100) for a spec using a 3-layer algorithm:
 *
 * Layer 1 — File existence (weight 40%):
 *   fileScore = (filesPresent / totalFiles) × 100
 *   Returns 100 when no files are listed (cannot assess → assume clean).
 *
 * Layer 2 — Temporal drift (weight 40%):
 *   Files modified more than TEMPORAL_DRIFT_DAYS days after spec approval are
 *   treated as drift signals.
 *   temporalScore = 100 - (driftedFiles / totalFiles × 100)
 *   Returns 100 when no files are listed or no approval date is known.
 *
 * Layer 3 — AC coverage (weight 20%):
 *   Key terms from criteria are grepped across implementation files.
 *   acScore = (coveredCriteria / totalCriteria) × 100
 *   Returns 100 when criteria list is empty.
 *
 * Final score: fileScore×0.4 + temporalScore×0.4 + acScore×0.2, clamped [0,100].
 * Note: score represents HEALTH (100 = no drift). Callers may invert if needed.
 */
export declare function computeDriftScore(projectPath: string, specId: string, spec?: SpecDriftInfo, technicalPath?: string, metadataMap?: Map<string, FileMetadata>): Promise<DriftScoreResult>;
//# sourceMappingURL=drift-monitor.d.ts.map