/**
 * AI 서비스 CLI 호출 계획과 실행 결과 타입을 정의한다.
 * 재시도 후보, 실제 명령 미리보기, subprocess 결과를 한 구조로 공유하기 위해 사용한다.
 */
import type { AIServiceType } from './app';
import type { PromptOptimizationAudit } from './prompt';
/**
 * 서비스 CLI를 한 번 시도할 때 사용할 명령 인자 세트다.
 * 모델 fallback이나 옵션 차이를 가진 여러 시도를 순서대로 준비할 때 사용한다.
 */
export type ServiceCommandAttemptSpec = {
    /**
     * subprocess에 전달할 실제 CLI 인자 목록이다.
     */
    args: string[];
    /**
     * trace와 디버깅 로그에 표시할 시도 이름이다.
     * 예: `default`, `fallback`, `haiku`
     */
    label: string;
    /**
     * 현재 시도에서 사용할 모델 이름이다.
     */
    modelName: string;
    /**
     * 사람이 읽기 쉬운 shell preview 문자열이다.
     */
    preview: string;
    /**
     * 이 시도의 stdout 을 어떤 프로토콜로 해석할지 지정한다.
     * 기본값은 plain-text 이며, 구조화 JSONL 스트림이 필요한 서비스만 별도 값을 사용한다.
     */
    outputProtocol?: ServiceCommandOutputProtocol;
    /**
     * stdout 원문은 그대로 스트리밍하되, 최종 결과 텍스트를 별도 파일에서 복원해야 하는 경우의 캡처 모드다.
     * 예: Codex `--json` + `--output-last-message`
     */
    stdoutCaptureMode?: ServiceCommandStdoutCaptureMode;
};
/**
 * 서비스 CLI stdout 의 해석 방식을 구분하는 enum 이다.
 * 일반 text 출력과 구조화 JSONL 스트림을 같은 공통 실행기에서 분기 처리할 때 사용한다.
 */
export type ServiceCommandOutputProtocol = 'plain-text' | 'claude-stream-json' | 'codex-stream-json' | 'gemini-stream-json';
/**
 * 구조화 스트림 사용 시 최종 stdout 을 별도 경로에서 복원하는 방식을 구분한다.
 */
export type ServiceCommandStdoutCaptureMode = 'codex-last-message-file';
/**
 * 한 서비스 요청을 실행하기 전에 준비한 전체 명령 계획이다.
 * `attempts` 는 실제 실행 후보 목록이고, `preview` 는 전체 시나리오를 요약한 문자열이다.
 */
export type ServiceCommandSpec = {
    /**
     * 순서대로 실행할 CLI 시도 목록이다.
     */
    attempts: ServiceCommandAttemptSpec[];
    /**
     * 기본 실행 파일 이름이다.
     * 예: `codex`, `claude`, `gemini`
     */
    command: string;
    /**
     * token optimizer가 켜져 있을 때 기록할 프롬프트 감사 정보다.
     */
    promptAudit?: PromptOptimizationAudit;
    /**
     * 전체 시도 계획을 요약한 shell preview 문자열이다.
     */
    preview: string;
};
/**
 * 서비스 CLI 실행이 끝난 뒤 상위 action 모듈에 반환하는 결과 구조다.
 * 차단 여부, CLI 가용성, stdout/stderr, preview 명령을 함께 담아 후처리에 사용한다.
 */
export type ServiceRunResult = {
    /**
     * 보안 정책 등으로 실행이 시작되기 전에 중단됐는지 여부다.
     */
    blocked: boolean;
    /**
     * 대상 서비스 CLI를 현재 환경에서 찾을 수 있었는지 여부다.
     */
    cliAvailable: boolean;
    /**
     * subprocess 종료 코드다.
     * 실행 자체가 되지 않았으면 보통 `0` 또는 상위 로직 기본값이 들어간다.
     */
    exitCode: number;
    /**
     * token optimizer가 켜져 있을 때 기록할 프롬프트 감사 정보다.
     */
    promptAudit?: PromptOptimizationAudit;
    /**
     * 사용자가 확인할 수 있도록 남기는 shell preview 문자열이다.
     */
    preview: string;
    /**
     * 이 결과를 만든 대상 AI 서비스 식별자다.
     */
    service: AIServiceType;
    /**
     * 테스트 모드 등으로 실제 CLI 호출을 생략했는지 여부다.
     */
    skipped: boolean;
    /**
     * 서비스 CLI 표준 에러 출력이다.
     */
    stderr: string;
    /**
     * stdout/stderr를 실시간 스트리밍으로 이미 사용자에게 노출했는지 여부다.
     */
    streamedOutput: boolean;
    /**
     * 서비스 CLI 표준 출력이다.
     */
    stdout: string;
};
//# sourceMappingURL=service-run.d.ts.map