import type { IBatchScheduler } from '../../shared/interfaces/batch-scheduler.interface.js';
import type { RuntimeDiagnosticsLogger } from '../../domains/monitoring/services/runtime-diagnostics-logger.js';
import Database from 'better-sqlite3';
import type { IReflexionWorker } from '../../shared/interfaces/reflexion-worker.interface.js';
import { JobQueue } from './job-queue.js';
import { RetryManager } from './retry-manager.js';
import { HealthChecker } from './health-checker.js';
import { FileLogger } from './file-logger.js';
import { RelationValidatorExecutor } from './relation-validator-executor.js';
import type { SleepConsolidationService } from '../../domains/consolidation/services/sleep-consolidation-service.js';
import type { TelemetryRepository } from '../../domains/telemetry/repositories/telemetry-repository.js';
import type { IntrospectionScanCache } from '../../domains/memory/services/introspection-scan-cache.js';
import type { BatchJobConfig, BatchJobResult, SchedulerStatus } from './batch-scheduler-types.js';
export type { BatchJobConfig, BatchJobResult, SchedulerStatus } from './batch-scheduler-types.js';
/** Async augmentation pipeline worker; groups config, intervals, and failure handling. */
export declare class BatchScheduler implements IBatchScheduler {
    private config;
    private forgettingService;
    private performanceMonitor;
    private consolidationScoreWorker;
    private reflexionWorker;
    private db;
    private intervals;
    private isRunning;
    private startTime;
    private lastExecution;
    /** 마지막 작업 종료 시각, 성공 여부, 소요 ms (텔레메트리 system.background_jobs 노출용) */
    private lastJobRunMeta;
    private totalExecutions;
    private introspectionScanCache;
    private jobProcessorInterval;
    private jobQueue;
    private retryManager;
    private healthChecker;
    private fileLogger;
    private relationValidatorExecutor;
    private tripleExtractionBatchJob;
    private qualityMeasurementBatchJob;
    private sleepConsolidationService;
    private sleepConsolidationBatchJob;
    private telemetryCleanupRepository;
    private telemetryCleanupBatchJob;
    private diagnosticsLogger?;
    private jobExecutionCoordinator;
    constructor(config?: Partial<BatchJobConfig>, dependencies?: {
        jobQueue?: JobQueue;
        retryManager?: RetryManager;
        healthChecker?: HealthChecker;
        fileLogger?: FileLogger;
        relationValidatorExecutor?: RelationValidatorExecutor;
        diagnosticsLogger?: Pick<RuntimeDiagnosticsLogger, 'writeEvent'>;
    });
    private buildRunContext;
    /**
     * 스케줄러 시작
     * @param db 데이터베이스 인스턴스
     * @param reflexionWorker Reflexion Worker 인스턴스 (선택적)
     */
    start(db: Database.Database, reflexionWorker?: IReflexionWorker): Promise<void>;
    private clearLeftoverJobsFromPreviousSession;
    private attachReflexionWorker;
    private buildRecurringScheduleContext;
    private scheduleAllRecurringJobs;
    /**
     * 스케줄러 중지
     * 재시작 시 의도하지 않은 배치 실행과 상태 오염을 방지하기 위해 큐를 비움
     */
    stop(): Promise<void>;
    /**
     * 외부에서 작업을 큐에 추가하는 public 메서드
     * AriGraph Pipeline 등 외부 컴포넌트에서 사용
     *
     * @param name 작업 이름 (고유 식별자)
     * @param job 실행할 작업 함수
     * @param priority 우선순위 (낮을수록 높은 우선순위, 기본값: 10)
     * @param retryCount 재시도 횟수 (기본값: 0)
     * @returns 추가 성공 여부
     */
    addJob(name: string, job: () => Promise<void>, priority?: number, retryCount?: number): boolean;
    /**
     * 작업 스케줄링
     * 시작 시 maxConcurrentJobs를 보장하기 위해 무조건 큐를 통해 실행
     * 여러 작업이 동시에 시작될 때 race condition을 방지하기 위함
     */
    private scheduleJob;
    /**
     * 작업 큐 처리기 시작
     * 재시도 큐에서도 동일한 래퍼(타임아웃+상태 관리)를 사용하도록 수정
     *
     * PRD 6.2: 기존 배치 작업과 충돌 방지
     * - maxConcurrentJobs 설정을 통해 동시 실행 작업 수 제한
     * - Triple 추출 배치 작업도 이 제한에 포함되어 다른 배치 작업과 충돌 방지
     * - 우선순위 기반 실행으로 중요한 작업 우선 처리
     */
    private startJobProcessor;
    /**
     * 실행 중인 작업 완료 대기
     */
    private waitForRunningJobs;
    private writeDiagnosticsEvent;
    /**
     * Issue 293: memory_review_candidates 실행 메타(고정 키)를 diagnostics에 기록한다.
     * diagnostics가 꺼져 있으면 동일 스키마로 앱 로그에 남겨 운영에서 grep/후처리할 수 있게 한다.
     */
    private emitMemoryReviewCandidatesRunRecord;
    /**
     * 메모리 정리 작업 실행
     */
    private runMemoryCleanup;
    private runMemoryReviewCandidatesJob;
    /**
     * 모니터링 작업 실행
     */
    private runMonitoring;
    /**
     * 헬스체크 작업 실행
     */
    private runHealthCheck;
    /**
     * Consolidation Score 증분 재계산 작업 실행
     */
    private runConsolidationScoreIncremental;
    /**
     * 주간 관계 추출 품질 검증 실행
     * 타임아웃 및 강제 종료 로직 포함
     */
    private runWeeklyRelationValidation;
    /**
     * Consolidation Score 전체 스윕 작업 실행
     */
    private runConsolidationScoreFullSweep;
    /**
     * 로깅
     * data 객체에 level 속성이 있으면 이를 우선적으로 사용하여 호출부의 편의성을 높임
     */
    private log;
    /**
     * 수동으로 작업 실행
     * 직접 실행하되 lastExecution과 totalExecutions을 기록함
     */
    runJob(jobType: 'cleanup' | 'monitoring' | 'healthcheck' | 'meta_memory_introspection' | 'memory_review_candidates'): Promise<BatchJobResult>;
    /**
     * 스케줄러 상태 확인
     */
    getStatus(): SchedulerStatus;
    /**
     * 설정 업데이트
     */
    updateConfig(newConfig: Partial<BatchJobConfig>): void;
    /**
     * 특정 작업 중지
     */
    stopJob(jobName: string): boolean;
    /**
     * 특정 작업 재시작
     */
    restartJob(jobName: string): boolean;
    /**
     * 스케줄러 헬스체크
     */
    private checkSchedulerHealth;
    /**
     * Triple 추출 배치 작업 실행
     *
     * PRD 6.1: 주기적 배치 실행
     * - 대상: triple_extracted=false 또는 null인 Episodic Memory
     * - 재시도 정책 적용 (최대 시도 횟수 확인)
     * - abandoned 상태는 제외
     */
    private runTripleExtractionBatch;
    /**
     * M2 자기성찰 스캔 실행 (Issue 21)
     * meta_memory_stats를 스캔하여 저신뢰, 고실패 메모리를 식별하고 요약합니다.
     */
    private runMetaMemoryIntrospection;
    /**
     * 품질 측정 배치 작업 실행
     *
     * PRD FR-5.6: 일일 품질 측정 배치 작업
     */
    private runQualityMeasurementBatch;
    /**
     * 로그 로테이션 실행
     * 30일 이상 된 Triple 추출 로그 파일을 삭제합니다.
     */
    private runLogRotation;
    /**
     * 스케줄러 통계 조회
     */
    getDetailedStats(): {
        status: SchedulerStatus;
        health: {
            memoryUsage: number;
            runningJobs: number;
            queueSize: number;
            errorRate: number;
            uptime: number;
        };
        jobs: Array<{
            name: string;
            lastExecution: Date | null;
            totalExecutions: number;
            errorCount: number;
            errorRate: number;
            isRunning: boolean;
        }>;
    };
    /**
     * 작업이 큐에 대기 중인지 여부. jobQueue private 멤버 대신 공개 API로 상태 조회용.
     */
    isJobQueued(name: string): boolean;
    /**
     * 작업이 현재 실행 중인지 여부. jobQueue private 멤버 대신 공개 API로 상태 조회용.
     */
    isJobRunning(name: string): boolean;
    /**
     * Issue 21 Phase B: 인트로스펙션 스캔 결과 캐시 설정.
     * bootstrap에서 생성한 IntrospectionScanCache를 주입합니다.
     */
    setIntrospectionScanCache(cache: IntrospectionScanCache | null): void;
    /**
     * Sleep consolidation 서비스 주입 (bootstrap). 미주입 시 배치 미스케줄.
     */
    setSleepConsolidationService(service: SleepConsolidationService | null): void;
    /**
     * 텔레메트리 원시 이벤트 정리용 저장소 (bootstrap에서 주입, start 전에 설정)
     */
    setTelemetryCleanupRepository(repository: TelemetryRepository | null): void;
    setDiagnosticsLogger(logger: Pick<RuntimeDiagnosticsLogger, 'writeEvent'> | undefined): void;
    getLastJobRunMeta(name: string): {
        at: Date;
        success: boolean;
        durationMs: number;
    } | undefined;
    private runTelemetryCleanupBatch;
    private runSleepConsolidationBatch;
}
export declare function getBatchScheduler(): BatchScheduler;
export declare function createBatchScheduler(config?: Partial<BatchJobConfig>): BatchScheduler;
export declare function resetBatchScheduler(): void;
//# sourceMappingURL=batch-scheduler.d.ts.map