/** * Forgen — Drift Score (Session Drift Detection) * * 세션 내 수정 패턴을 추적하여 drift(산만/반복 수정)를 감지. * EWMA(Exponentially Weighted Moving Average) 기반 이동평균으로 * 최근 수정 강도를 측정하고, 임계값 초과 시 경고. * * Codex 합의: DriftState + evaluateDrift 2개만. 최소 인터페이스. */ /** Drift 상태 (세션 단위, STATE_DIR에 저장) */ export interface DriftState { sessionId: string; totalEdits: number; totalReverts: number; /** EWMA edit rate (0~1, 높을수록 최근 수정 빈도 높음) */ ewmaEditRate: number; /** EWMA revert rate (0~1) */ ewmaRevertRate: number; /** 최근 경고 timestamp (쿨다운용) */ lastWarningAt: number; lastCriticalAt: number; hardCapReached: boolean; /** 최근 hardcap 발화 timestamp (쿨다운용, ADR-013). */ lastHardcapAt?: number; } export interface DriftResult { level: 'normal' | 'warning' | 'critical' | 'hardcap'; score: number; message: string | null; } export interface DriftThresholds { alpha?: number; warningEdits?: number; criticalEdits?: number; criticalReverts?: number; hardCapEdits?: number; warningCooldownMs?: number; criticalCooldownMs?: number; } /** EWMA 업데이트 (순수 함수) */ export declare function updateEwma(prev: number, sample: number, alpha: number): number; /** 새 DriftState 생성 */ export declare function createDriftState(sessionId: string): DriftState; /** * 도구 호출 이벤트로 drift 상태를 갱신하고 평가 결과를 반환. * @param state 현재 상태 (mutate됨) * @param isEdit Write/Edit 도구 호출 여부 * @param isRevert revert 감지 여부 * @param thresholds 커스텀 임계치 (hook-config에서 로드) */ export declare function evaluateDrift(state: DriftState, isEdit: boolean, isRevert: boolean, thresholds?: DriftThresholds): DriftResult;