/**
 * watch-pr-review 폴링 루프의 OS 레벨 제어(에디터 열기, 중단 신호, 지연)를 담당하는 파일이다.
 * 포그라운드 watch 모드를 Ctrl+C로 깔끔하게 빠져나갈 수 있도록 SIGINT 처리를 캡슐화한다.
 */
/** 폴링 루프 중단 여부를 조회하고, 종료 시 신호 처리를 원복하는 컨트롤러다. */
export interface StopController {
    /** 현재 중단 요청이 들어왔는지 여부를 반환한다. */
    isStopped: () => boolean;
    /** SIGINT 없이도 프로그램적으로 중단을 요청한다. (예외/정리 경로에서 워커 종료용) */
    requestStop: () => void;
    /** 등록한 SIGINT 처리기를 제거하고 원래 처리기를 복원한다. */
    dispose: () => void;
}
/**
 * @description Ctrl+C(SIGINT)를 가로채 루프 중단 플래그로 변환하는 컨트롤러를 만든다.
 * 기존에 등록된 SIGINT 리스너를 잠시 제거했다가 dispose 시 복원해, 세션 본래의 동작을 보존한다.
 * @returns 중단 컨트롤러
 */
export declare function createStopController(): StopController;
/**
 * @description 지정 시간만큼 대기하되, 중단 요청이 들어오면 즉시 깨어난다.
 * @param durationMs 총 대기 시간(ms)
 * @param isStopped 중단 여부를 조회하는 함수
 * @returns 대기 완료 시 resolve되는 Promise
 */
export declare function waitInterruptible(durationMs: number, isStopped: () => boolean): Promise<void>;
/**
 * @description 비동기 작업을 직렬화하는 간단한 in-process mutex를 만든다.
 * 여러 워커가 동시에 같은 파일(history.json)을 읽고 쓰며 발생하는 갱신 유실(race)을 막는다.
 * @returns 전달한 작업을 순차 실행하는 함수
 */
export declare function createMutex(): <T>(task: () => Promise<T> | T) => Promise<T>;
/**
 * @description 파일을 사용자 기본 에디터로 연다. `$VISUAL`/`$EDITOR`가 있으면 우선 사용한다.
 * @param filePath 열 파일 경로
 */
export declare function openInEditor(filePath: string): void;
//# sourceMappingURL=system.d.ts.map