/**
 * 여러 action 모듈이 함께 쓰는 공통 실행 보조 로직을 제공하는 파일이다.
 * 컨텍스트 수집, AI 출력 정리, history 저장 같은 후처리를 action 간에 재사용한다.
 */
import { createPromptHistoryReferences } from '../prompts/history-reference';
import type { ServiceMode } from '../ai-services/internal/types';
import type { AIServiceType, ConversationHistoryScope, HistorySection, ParsedCliArgs, PromptOptimizationAudit, ServicePromptInput, ServiceRunResult, SessionActionRecord, SessionActionStatus, StoragePaths, TraceLogger, WorkspaceSnapshot } from '../types/index';
/** 액션 실행 전 수집된 컨텍스트 */
export type ActionContext = {
    /**
     * history/report 저장에 함께 남길 최근 작업 history 문맥
     */
    historyContext: string;
    /**
     * 프롬프트에 함께 넣을 히스토리 참조 경로
     */
    historyReferences: ReturnType<typeof createPromptHistoryReferences>;
    /**
     * 작업 시작 전 워크스페이스 스냅샷
     */
    workspaceBefore: WorkspaceSnapshot;
};
/**
 * @description 액션 실행 전 워크스페이스 스냅샷과 히스토리 컨텍스트를 수집한다.
 * @param paths 스토리지 경로
 * @returns 액션 컨텍스트
 */
export declare function captureActionContext(paths: StoragePaths): ActionContext;
/**
 * @description 액션 실행 후 히스토리를 기록하고 SessionActionRecord를 반환한다.
 * @param paths 스토리지 경로
 * @param context captureActionContext로 수집한 컨텍스트
 * @param result 액션 결과 정보
 * @returns SessionActionRecord
 */
export declare function finalizeAction(paths: StoragePaths, context: ActionContext, result: {
    /**
     * extra Sections 값
     */
    extraSections?: HistorySection[];
    /**
     * 사용자 입력 원문
     */
    input: string;
    /**
     * AI 응답이나 명령 실행 결과 텍스트
     */
    output: string;
    /**
     * token optimizer가 적용된 경우 로그에 함께 남길 프롬프트 감사 정보
     */
    promptAudit?: PromptOptimizationAudit;
    /**
     * 미리보기나 결과 열기에 사용할 시스템 명령 문자열
     */
    previewCommand: string;
    /**
     * history와 telemetry 분류에 사용할 작업 범위
     */
    scope: ConversationHistoryScope;
    /**
     * 대상 AI 서비스 식별자
     */
    service: AIServiceType;
    /**
     * 테스트 모드 등으로 실제 실행이 생략됐는지 여부
     */
    skipped: boolean;
    /**
     * 목록에서 보여줄 한 줄 요약
     */
    summary: string;
    /**
     * history나 report에 기록할 제목
     */
    title: string;
}): SessionActionRecord;
/**
 * @description
 * `formatDependencyMarkdown` 는 dependency Markdown를 문자열로 포맷한다.
 * 호출부에서 의도를 빠르게 파악하고 책임을 분리하기 위해 사용하는 함수다.
 *
 * @param dependencies dependencies 값
 * @returns formatDependencyMarkdown 실행 결과
 */
export declare function formatDependencyMarkdown(dependencies: Record<string, string>): string;
/**
 * @description
 * `/show-stream` 설정에 따라 spinner 기반 대기 UI와 사람이 읽는 실시간 스트림 표시를 전환한다.
 * 현재 시도 중인 모델과 fallback 전환 메시지는 runAIService 내부에서 attempt 단위로 노출한다.
 * @param options 실행 모드, 프롬프트, 상태 UI를 포함한 AI 호출 옵션
 * @returns AI 서비스 실행 결과
 */
export declare function runAIServiceWithStatus(options: {
    /**
     * 외부에서 현재 AI 작업을 ESC와 동일하게 취소하기 위한 AbortSignal
     */
    abortSignal?: AbortSignal;
    /**
     * 비대화형 권한 요청을 자동으로 yes 처리할지 여부
     */
    autoYes?: boolean;
    /**
     * show-stream 설정과 무관하게 강제로 구조화 스트림 모드로 실행할지 여부
     */
    forceStreamOutput?: boolean;
    /**
     * loading Message 값
     */
    loadingMessage: string;
    /**
     * process.stdin raw-mode/keypress 제어 여부. 백그라운드 호출은 false. (기본 true)
     */
    manageStdin?: boolean;
    /**
     * 실시간 출력 조각을 외부 소비자에게 전달할 때 사용하는 콜백
     */
    onStreamChunk?: (chunk: string, stream: 'stdout' | 'stderr') => void;
    /**
     * mode 값
     */
    mode: ServiceMode;
    /**
     * parsed Args 값
     */
    parsedArgs: ParsedCliArgs;
    /**
     * 작업 디렉터리 기준 저장 경로 집합
     */
    paths: StoragePaths;
    /**
     * prompt 값
     */
    prompt: ServicePromptInput;
    /**
     * 대상 AI 서비스 식별자
     */
    service: AIServiceType;
    /**
     * status 값
     */
    status: SessionActionStatus;
    /**
     * streaming Message 값
     */
    streamingMessage?: string;
    /**
     * 실시간 출력 조각을 현재 터미널에도 그대로 쓸지 여부
     */
    writeStreamOutputToTerminal?: boolean;
    /**
     * 실행 흐름 추적 로거
     */
    trace: TraceLogger;
}): Promise<ServiceRunResult>;
/**
 * @description
 * 실시간 스트림으로 이미 출력한 응답은 종료 후 다시 중복 출력하지 않는다.
 * buffered 모드일 때만 최종 stdout/stderr를 한 번 더 콘솔에 노출한다.
 * @param output 최종 표시할 문자열
 * @param result AI 서비스 실행 결과
 * @param fallback 출력 문자열이 비었을 때 대신 사용할 문구
 */
export declare function printBufferedAIOutput(output: string, result: Pick<ServiceRunResult, 'streamedOutput'>, fallback?: string): void;
//# sourceMappingURL=shared.d.ts.map