/**
 * AI 서비스에 전달하는 프롬프트 자산과 구조화된 입력 타입을 정의한다.
 * 명령별 markdown 자산과 런타임 문맥을 어떤 형태로 조합하는지 이 파일에서 설명한다.
 */
import type { AIServiceType } from './app';
import type { WorkspaceSnapshot } from './history';
/**
 * 프롬프트에 직접 본문을 싣지 않고 markdown 파일 경로만 전달할 때 사용하는 참조 타입이다.
 */
export type PromptMarkdownFileReference = {
    /**
     * 런타임에서 AI가 직접 읽을 markdown 파일 절대 경로다.
     */
    filePath: string;
    /**
     * 프롬프트 렌더러가 파일 참조 자산임을 식별하기 위한 고정 값이다.
     */
    kind: 'file-reference';
};
/**
 * 프롬프트 자산 한 개를 표현하는 타입이다.
 * 기존 문자열 본문 주입과 신규 파일 경로 참조 방식을 모두 허용한다.
 */
export type PromptMarkdownAsset = string | PromptMarkdownFileReference;
/**
 * 파일 경로 패턴 기반으로 조건부 rule을 선택 주입할 때 사용하는 규칙 그룹이다.
 */
export type PromptRuleGroup = {
    /**
     * 이 그룹을 적용할 대상 파일명 패턴 목록이다.
     * 각 값은 JavaScript `RegExp` source 문자열로 해석되며, 정규화된 파일 경로나 basename에 대해 검사한다.
     * 값을 생략하면 모든 대상 파일에 공통으로 적용된다.
     */
    fileNamePatterns?: string[];
    /**
     * 조건이 매칭될 때 함께 주입할 rule 자산 목록이다.
     */
    rules?: PromptMarkdownAsset[];
};
/**
 * 프롬프트에 직접 주입할 단일 markdown 자산 또는 조건부 rule 그룹이다.
 */
export type PromptRuleAsset = PromptMarkdownAsset | PromptRuleGroup;
/**
 * 프롬프트를 만들 때 함께 읽을 markdown 자산 묶음이다.
 * command definition은 이 구조를 통해 forms, instructions, rules 파일 경로를 선언한다.
 */
export type PromptAssetSet = {
    /**
     * 비대화형 AI CLI 실행 시 권한 요청을 자동으로 `yes` 처리할지 여부다.
     * 서비스별 빌더는 이 값을 보고 auto approval 옵션을 추가한다.
     */
    autoYes?: boolean;
    /**
     * 사용자에게 추가 입력을 요청할 때 참고하는 form 자산 목록이다.
     */
    forms?: PromptMarkdownAsset[];
    /**
     * AI에게 전달할 지시사항 markdown 자산 목록이다.
     */
    instructions?: PromptMarkdownAsset[];
    /**
     * 서비스나 도메인별 제약을 담은 rule 자산 또는 조건부 rule 그룹 목록이다.
     */
    rules?: PromptRuleAsset[];
};
/**
 * 최종 프롬프트를 렌더링할 때 사용하는 markdown 섹션 한 개다.
 * 제목과 본문을 분리해 history, workspace, user input을 순서대로 조합한다.
 */
export type PromptSection = {
    /**
     * 렌더링된 markdown에서 섹션 제목으로 사용할 문자열이다.
     */
    heading: string;
    /**
     * 해당 섹션에 포함할 markdown 본문이다.
     */
    markdown: string;
};
/**
 * AI가 필요 시 외부 히스토리 파일을 직접 참조할 수 있게 전달하는 경로 묶음이다.
 */
export type PromptHistoryReferences = {
    /**
     * 전체 AI 작업 히스토리 디렉터리 경로다.
     */
    aiHistoryDirectoryPath: string;
    /**
     * 사용자가 입력한 프롬프트 히스토리 파일 경로다.
     */
    promptHistoryFilePath: string;
};
/**
 * 문자열 프롬프트 대신 구조화된 입력을 전달할 때 사용하는 형태다.
 * 프롬프트 자산, 히스토리 참조 경로, workspace 스냅샷을 함께 넘겨 최종 요청 본문을 만들 수 있다.
 */
export type StructuredServicePrompt = Omit<PromptAssetSet, 'rules'> & {
    /**
     * 조건부 그룹 해석이 끝난 뒤 실제 프롬프트에 주입할 rule 자산 목록이다.
     */
    rules?: PromptMarkdownAsset[];
    /**
     * 필요 시 AI가 직접 조회할 히스토리 참조 경로다.
     */
    historyReferences?: PromptHistoryReferences;
    /**
     * 최종 프롬프트에 순서대로 렌더링할 추가 섹션 목록이다.
     */
    sections?: PromptSection[];
    /**
     * 이 프롬프트를 처리할 대상 AI 서비스다.
     */
    service: AIServiceType;
    /**
     * history 및 리포트에 기록할 작업 제목이다.
     */
    title: string;
    /**
     * 현재 워크스페이스 상태를 설명하는 git 스냅샷이다.
     */
    workspaceSnapshot: WorkspaceSnapshot;
};
/**
 * token optimizer 적용 전후 프롬프트를 turn history에 남기기 위한 감사 정보다.
 * 실제 서비스 CLI에 전달된 문자열과 크기 변화를 함께 기록해 최적화 효과를 추적한다.
 */
export type PromptOptimizationAudit = {
    /**
     * 프롬프트를 렌더링한 서비스 실행 모드다.
     */
    mode: string;
    /**
     * token optimizer 적용 전 프롬프트 문자열이다.
     */
    originalPrompt: string;
    /**
     * token optimizer 적용 후 실제 전달된 프롬프트 문자열이다.
     */
    optimizedPrompt: string;
    /**
     * 최적화 전 UTF-8 바이트 수다.
     */
    originalBytes: number;
    /**
     * 최적화 후 UTF-8 바이트 수다.
     */
    optimizedBytes: number;
    /**
     * 최적화로 줄어든 UTF-8 바이트 수다.
     */
    reducedBytes: number;
    /**
     * 바이트 기준 감소 비율(%)이다.
     */
    reductionPercent: number;
    /**
     * 최적화 전 예상 토큰 수다.
     */
    originalEstimatedTokens: number;
    /**
     * 최적화 후 예상 토큰 수다.
     */
    optimizedEstimatedTokens: number;
    /**
     * 최적화로 줄어든 예상 토큰 수다.
     */
    reducedEstimatedTokens: number;
    /**
     * 예상 토큰 기준 감소 비율(%)이다.
     */
    tokenReductionPercent: number;
};
/**
 * 구조화 프롬프트 렌더링 결과다.
 * 최종 문자열과 token optimizer 감사 정보를 함께 전달한다.
 */
export type RenderedPromptResult = {
    /**
     * 실제 서비스 CLI에 전달할 최종 프롬프트 문자열이다.
     */
    text: string;
    /**
     * token optimizer가 켜져 있었을 때만 채워지는 감사 정보다.
     */
    promptAudit?: PromptOptimizationAudit;
};
/**
 * AI 서비스 실행기가 받아들이는 최종 프롬프트 입력 타입이다.
 * 단순 문자열 요청과 구조화된 프롬프트 요청을 모두 지원한다.
 */
export type ServicePromptInput = string | StructuredServicePrompt;
//# sourceMappingURL=prompt.d.ts.map