/**
 * Procedural Memory 변경 감지 유틸리티
 *
 * 이 유틸리티는 Procedural Memory의 변경 사항을 감지하고 분류합니다.
 * PRD FR4: 판정 기준 구현을 위한 유틸리티 함수 제공
 *
 * 주요 기능:
 * - Procedural Memory 스냅샷 생성
 * - 변경 타입 분류 (version_created, steps_modified, metadata_modified, content_modified, reflection_added, deleted, none)
 * - JSON 정규화 및 해시 계산
 */
import Database from 'better-sqlite3';
/**
 * Procedural Memory 스냅샷 인터페이스
 *
 * 변경 감지를 위해 필요한 모든 필드를 포함합니다.
 * memory_item 테이블과 memory_link 테이블의 version_of 관계를 조합하여 생성됩니다.
 */
export interface ProceduralMemorySnapshot {
    /** 메모리 ID */
    id: string | null;
    /** 메모리 내용 */
    content: string | null;
    /** 중요도 (0-1) */
    importance: number | null;
    /** 프라이버시 범위 */
    privacy_scope: string | null;
    /** 프로세스 이름 */
    workflow_name: string | null;
    /** 기술/능력 이름 */
    skill_name: string | null;
    /** steps JSON 배열의 해시값 */
    steps_hash: string | null;
    /** trigger_conditions JSON 객체의 해시값 */
    trigger_conditions_hash: string | null;
    /** 작업 목표 */
    task_goal: string | null;
    /** reflection_notes 배열의 길이 (JSON 파싱 후) */
    reflection_notes_count: number | null;
    /** 편집 횟수 */
    edit_count: number | null;
    /** version_of 관계의 target_id (memory_link에서 조회) */
    version_of_target_id: string | null;
}
/**
 * 변경 타입 열거형
 *
 * PRD FR4 기반 판정 기준:
 * - version_created: versioned 모드로 새 버전 생성
 * - steps_modified: steps JSON 배열 변경
 * - metadata_modified: workflow_name, skill_name, trigger_conditions_hash, task_goal, edit_count 변경
 * - content_modified: content 필드 변경
 * - reflection_added: reflection_notes 배열 길이 증가
 * - deleted: 메모리 삭제
 * - none: 변경 없음
 */
export type ChangeType = 'version_created' | 'steps_modified' | 'metadata_modified' | 'content_modified' | 'reflection_added' | 'deleted' | 'none';
/**
 * 변경 감지 결과 인터페이스
 *
 * 변경 여부와 변경 타입, 상세 변경 내역을 포함합니다.
 */
export interface ChangeDetectionResult {
    /** 변경 여부 */
    hasChanged: boolean;
    /** 변경 타입 */
    changeType: ChangeType;
    /** 변경된 필드 목록 (디버깅 및 로깅용) */
    changedFields: string[];
    /** 변경 전 스냅샷 */
    before: ProceduralMemorySnapshot | null;
    /** 변경 후 스냅샷 */
    after: ProceduralMemorySnapshot | null;
}
/**
 * JSON 정규화 유틸리티 함수
 *
 * 해시 계산을 위해 일관된 JSON 문자열을 생성합니다.
 *
 * 정규화 규칙:
 * - 객체의 키를 알파벳 순서로 정렬
 * - 숫자는 일관된 형식으로 직렬화 (JSON.stringify의 기본 동작 사용)
 * - 배열의 순서는 유지 (배열은 순서가 중요하므로 정렬하지 않음)
 * - null 값은 "null" 문자열로 처리
 * - undefined는 제외 (객체에서 undefined 필드는 제외됨)
 *
 * @param value - 정규화할 값 (객체, 배열, 원시 타입)
 * @returns 정규화된 JSON 문자열
 */
export declare function normalizeJson(value: unknown): string;
/**
 * JSON 문자열의 SHA-256 해시 계산
 *
 * 해시 계산 전에 JSON을 정규화하여 일관된 해시값을 생성합니다.
 *
 * 처리 규칙:
 * - `jsonString === null`: `"null"` 문자열을 해시 (SHA-256 hash of `"null"`)
 * - `jsonString === ""` (빈 문자열): 빈 문자열을 해시 (SHA-256 hash of `""`)
 * - `jsonString === "null"` (문자열 "null"): JSON 파싱 시도 → `null`로 파싱되면 정규화 후 해시, 실패 시 원문 해시
 * - 일반 JSON 문자열: JSON 파싱 → 정규화 → 해시
 * - 파싱 실패 시: 원문 문자열을 해시 (fallback)
 *
 * **일관성**: null 입력과 "null" 문자열 입력은 다른 해시값을 반환
 * - null → "null" 문자열 해시
 * - "null" → JSON 파싱 후 정규화된 해시
 *
 * @param jsonString - 해시할 JSON 문자열 (또는 null)
 * @returns SHA-256 해시값 (hex 문자열)
 */
export declare function computeJsonHash(jsonString: string | null): string;
/**
 * Procedural Memory 스냅샷 생성
 *
 * memory_item 테이블에서 메모리를 조회하고, memory_link 테이블에서 version_of 관계를 조회하여
 * 변경 감지에 필요한 모든 정보를 포함한 스냅샷을 생성합니다.
 *
 * @param db - 데이터베이스 인스턴스
 * @param memoryId - 메모리 ID
 * @returns ProceduralMemorySnapshot 또는 null (메모리가 없거나 procedural 타입이 아닌 경우)
 */
export declare function createProceduralMemorySnapshot(db: Database.Database, memoryId: string): ProceduralMemorySnapshot | null;
/**
 * Procedural Memory 변경 감지
 *
 * PRD FR4 기반 판정 기준에 따라 변경 여부와 변경 타입을 판정합니다.
 *
 * 판정 우선순위:
 * 1. 경계값 처리 (null 체크)
 * 2. version_created
 * 3. steps_modified
 * 4. metadata_modified
 * 5. content_modified
 * 6. reflection_added
 * 7. deleted (경계값 처리에서 이미 처리됨)
 * 8. none
 *
 * @param before - 변경 전 스냅샷 (또는 null)
 * @param after - 변경 후 스냅샷 (또는 null)
 * @returns 변경 감지 결과
 */
export declare function hasProceduralMemoryChanged(before: ProceduralMemorySnapshot | null, after: ProceduralMemorySnapshot | null): ChangeDetectionResult;
//# sourceMappingURL=procedural-memory-change-detector.d.ts.map