/**
 * 세션 history, report, git 스냅샷 기록에 사용하는 공통 타입을 정의한다.
 * action 실행 전후 상태와 사용자가 나중에 다시 읽을 markdown 문서를 같은 구조로 묶기 위해 사용한다.
 */
import type { ActionScope, AIServiceType } from './app';
/**
 * 특정 시점의 워크스페이스 상태를 요약한 git 스냅샷이다.
 * review, commit, history report가 공통으로 사용하는 입력 문맥이다.
 */
export type WorkspaceSnapshot = {
    /**
     * git 저장소 정보를 정상적으로 읽어 왔는지 여부다.
     */
    available: boolean;
    /**
     * 스냅샷 생성 시점의 현재 브랜치 이름이다.
     */
    branch: string;
    /**
     * `git diff --name-status` 결과 문자열이다.
     */
    diffNameStatus: string;
    /**
     * `git diff --stat` 결과 문자열이다.
     */
    diffStat: string;
    /**
     * 감지한 git 저장소 루트 경로다.
     */
    gitRoot: string;
    /**
     * 수집 실패나 예외 상황을 설명하는 부가 메모다.
     */
    note: string;
    /**
     * 최근 커밋 요약 문자열 목록이다.
     */
    recentCommits: string[];
    /**
     * `git status --short` 결과 라인 목록이다.
     */
    statusLines: string[];
};
/**
 * 두 워크스페이스 스냅샷을 비교한 차이 정보다.
 * 실행 전후 어떤 파일 상태가 바뀌었는지 report에 요약할 때 사용한다.
 */
export type WorkspaceDelta = {
    /**
     * 이전 스냅샷에는 없고 이후 스냅샷에만 존재하는 상태 라인 목록이다.
     */
    afterOnly: string[];
    /**
     * 이후 스냅샷에는 없고 이전 스냅샷에만 존재하던 상태 라인 목록이다.
     */
    beforeOnly: string[];
    /**
     * 비교 결과 변경된 것으로 판단한 파일 경로 목록이다.
     */
    touchedFiles: string[];
};
/**
 * history markdown 안에 추가로 붙일 섹션 한 개다.
 * 공통 본문 외에 command 전용 세부 정보를 덧붙일 때 사용한다.
 */
export type HistorySection = {
    /**
     * markdown 섹션 제목이다.
     */
    heading: string;
    /**
     * 해당 섹션에 포함할 markdown 본문이다.
     */
    markdown: string;
};
/**
 * 대화형 history에 기록 가능한 scope 집합이다.
 * 세션 전체를 뜻하는 `session` 은 개별 대화 엔트리에 저장하지 않으므로 제외한다.
 */
export type ConversationHistoryScope = Exclude<ActionScope, 'session'>;
/**
 * 대화형 세션에서 한 번의 요청/응답을 요약해 저장하는 엔트리 구조다.
 * 최근 문맥을 다시 프롬프트에 붙일 때 이 구조를 기반으로 markdown을 재생성한다.
 */
export type ConversationHistoryEntry = {
    /**
     * 사용자가 입력한 원문이다.
     * 서비스 변경처럼 입력보다 결과 요약이 중요한 엔트리는 비어 있을 수 있다.
     */
    input?: string;
    /**
     * 실행 후 다음 기본 서비스가 변경된 경우 그 서비스다.
     */
    nextService?: AIServiceType;
    /**
     * AI 응답 또는 command 실행 결과 요약 텍스트다.
     */
    output?: string;
    /**
     * 서비스 변경 전 사용 중이던 이전 서비스다.
     * 초기 선택 시에는 빈 문자열이 들어갈 수 있다.
     */
    previousService?: AIServiceType | '';
    /**
     * 이 엔트리가 어떤 작업에서 생성됐는지 나타내는 history scope다.
     */
    scope: ConversationHistoryScope;
    /**
     * 이 엔트리를 생성한 현재 서비스다.
     */
    service: AIServiceType;
    /**
     * 목록과 요약 report에 노출할 한 줄 설명이다.
     */
    summary: string;
    /**
     * 사람이 읽을 수 있는 기록 시각 문자열이다.
     */
    timestamp: string;
    /**
     * history 문서와 UI 목록에 표시할 제목이다.
     */
    title: string;
};
/**
 * 실제 turn history markdown 파일을 만들 때 사용하는 입력 구조다.
 * 프롬프트 문맥, 실행 결과, 워크스페이스 스냅샷을 모두 포함한다.
 */
export type TurnHistoryRecord = {
    /**
     * 기본 섹션 뒤에 추가로 붙일 command 전용 섹션 목록이다.
     */
    extraSections?: HistorySection[];
    /**
     * 최근 대화와 작업 기록을 요약한 markdown 문맥이다.
     */
    historyContext: string;
    /**
     * 이번 turn의 사용자 입력 원문이다.
     */
    input: string;
    /**
     * 이번 turn의 출력 결과 본문이다.
     */
    output: string;
    /**
     * 결과 미리보기나 재현용으로 함께 남길 shell 명령 문자열이다.
     */
    previewCommand: string;
    /**
     * 어떤 action이 이 history를 만들었는지 구분하는 scope다.
     */
    scope: Exclude<ActionScope, 'session'>;
    /**
     * 이 turn을 실행한 AI 서비스다.
     */
    service: AIServiceType;
    /**
     * 테스트 모드 등으로 실제 실행이 생략됐는지 여부다.
     */
    skipped: boolean;
    /**
     * history 문서 제목이다.
     */
    title: string;
    /**
     * 작업 완료 후 워크스페이스 스냅샷이다.
     */
    workspaceAfter: WorkspaceSnapshot;
    /**
     * 작업 시작 전 워크스페이스 스냅샷이다.
     */
    workspaceBefore: WorkspaceSnapshot;
    /**
     * 작업 전후 스냅샷 비교 결과다.
     */
    workspaceDelta: WorkspaceDelta;
};
/**
 * 세션 루프가 한 action 실행 후 잠깐 들고 있는 요약 레코드다.
 * 상세 markdown 경로와 리스트 노출용 제목/요약만 보관해 후속 출력에 사용한다.
 */
export type SessionActionRecord = {
    /**
     * 생성된 history markdown 파일 경로다.
     */
    historyPath?: string;
    /**
     * preview나 재현용으로 함께 보여 줄 shell 명령 문자열이다.
     */
    previewCommand?: string;
    /**
     * 이 레코드가 어떤 action에서 생성됐는지 구분하는 scope다.
     */
    scope: Exclude<ActionScope, 'session'>;
    /**
     * 이 action을 수행한 AI 서비스다.
     */
    service: AIServiceType;
    /**
     * 테스트 모드 등으로 실제 실행이 생략됐는지 여부다.
     */
    skipped: boolean;
    /**
     * 목록에 노출할 한 줄 요약이다.
     */
    summary: string;
    /**
     * 목록 및 report에 노출할 제목이다.
     */
    title: string;
    /**
     * 실행 중 수집한 trace 메시지 목록이다.
     */
    traceMessages: string[];
};
/**
 * `/review` 와 `/commit` 대상 선택 UI에서 사용하는 커밋 후보 메타데이터다.
 * staged/unstaged 가상 항목과 실제 커밋 로그 항목을 같은 구조로 다루기 위해 사용한다.
 */
export type CommitOption = {
    /**
     * 커밋 작성자 표시 문자열이다.
     */
    author: string;
    /**
     * 실제 커밋 해시 또는 가상 항목 식별에 쓰는 값이다.
     */
    hash: string;
    /**
     * 선택 항목 종류다.
     * `commit` 은 실제 커밋, `staged`/`unstaged` 는 가상 작업 트리 선택지를 뜻한다.
     */
    kind: 'commit' | 'staged' | 'unstaged';
    /**
     * 선택 UI에 그대로 노출할 라벨 문자열이다.
     */
    label: string;
    /**
     * 상대 시간 형식으로 표시한 커밋 시각이다.
     */
    relativeDate: string;
    /**
     * 커밋 제목 본문이다.
     */
    subject: string;
};
//# sourceMappingURL=history.d.ts.map