/**
 * slash command 등록과 실행에 필요한 핵심 타입 계약을 정의한다.
 * builtin 명령 정의, 실행 컨텍스트, parser 결과 구조를 이 파일에서 함께 관리한다.
 */
import type { AIServiceType, ParsedCliArgs, TraceLogger } from './app';
import type { SessionActionRecord } from './history';
import type { PromptAssetSet } from './prompt';
import type { CommandSecurityConfig } from './security';
import type { StoragePaths } from './storage';
import type { SlashCommandOption } from './ui';
/**
 * command 실행 함수가 상위 세션 루프에 돌려주는 결과 구조다.
 * 서비스 변경, history 기록, 세션 종료 여부처럼 실행 후 후처리에 필요한 정보만 담는다.
 */
export type CommandExecutionResult = {
    /**
     * 실행 후 기본 AI 서비스를 다른 값으로 변경해야 할 때 사용하는 다음 서비스다.
     */
    nextService?: AIServiceType;
    /**
     * 실행 결과를 세션 history에 남기기 위한 요약 레코드다.
     */
    record?: SessionActionRecord;
    /**
     * 현재 세션 루프를 종료해야 하는 명령인지 여부다.
     */
    shouldExit?: boolean;
    /**
     * 실행 후 세션 배너를 다시 출력해야 하는 명령인지 여부다.
     */
    shouldPrintBanner?: boolean;
};
/**
 * 현재 세션에서 사용자에게 노출할 builtin command 목록 묶음이다.
 * prompt 자동완성은 이 카탈로그만 보고 명령을 렌더링한다.
 */
export type SessionCommandCatalog = {
    /**
     * 현재 엔트리 프로필에서 허용된 builtin 명령 정의 목록이다.
     */
    builtinCommands: JuHongECommandDefinition[];
    /**
     * prompt UI 자동완성에 실제로 전달할 최종 slash command 옵션 목록이다.
     */
    slashCommands: SlashCommandOption[];
};
/**
 * builtin command가 사용하는 실행 컨텍스트다.
 * parser 결과, 저장 경로, trace 로거, 원본 입력을 한 묶음으로 전달한다.
 */
type BaseCommandContext = {
    /**
     * slash command 뒤에 파싱된 인자 토큰 목록이다.
     */
    args: string[];
    /**
     * 현재 세션 prompt가 사용 중인 command 카탈로그다.
     */
    catalog: SessionCommandCatalog;
    /**
     * 사용자가 터미널에 입력한 전체 원문이다.
     */
    input: string;
    /**
     * 세션 시작 시 파싱된 전역 CLI 옵션이다.
     */
    parsedArgs: ParsedCliArgs;
    /**
     * 현재 작업 디렉터리에 매핑된 `.ju-hong-e` 저장 경로 묶음이다.
     */
    paths: StoragePaths;
    /**
     * slash command 뒤 인자 부분만 잘라낸 원본 문자열이다.
     */
    rawArgs: string;
    /**
     * `/review`, `/help` 처럼 command 이름만 남긴 원본 slash command 문자열이다.
     */
    rawCommand: string;
    /**
     * 현재 세션에서 선택된 AI 서비스다.
     */
    service: AIServiceType;
    /**
     * 디버깅과 report 생성에 사용하는 trace 함수다.
     */
    trace: TraceLogger;
};
/**
 * 주홍이 builtin 명령이 받는 실행 컨텍스트다.
 * builtin 명령 정의 자체를 함께 전달해 forms/instructions/rules 등 메타데이터 접근을 가능하게 한다.
 */
export type JuHongECommandContext = BaseCommandContext & {
    /**
     * 사용자가 실행한 builtin slash command 이름이다.
     */
    command: `/${string}`;
    /**
     * 현재 실행 중인 builtin 명령 정의 전체다.
     */
    definition: JuHongECommandDefinition;
};
/**
 * 주홍이 builtin slash command 한 개를 등록할 때 사용하는 정의 구조다.
 * 자동완성 노출 정보와 실행 함수, 프롬프트 자산 경로를 함께 포함한다.
 * `rules` 는 평면 문자열 배열뿐 아니라 `fileNamePatterns`/`rules` 조건부 그룹도 허용한다.
 */
export type JuHongECommandDefinition = PromptAssetSet & {
    /**
     * 사용자 입력으로 매칭할 builtin slash command 문자열이다.
     */
    command: `/${string}`;
    /**
     * 도움말과 자동완성에 노출할 한 줄 설명이다.
     */
    description: string;
    /**
     * builtin slash command가 선택됐을 때 실제 동작을 수행한다.
     * @param context 현재 builtin 명령 실행에 필요한 런타임 컨텍스트
     * @returns 서비스 변경, history 기록, 세션 제어 플래그를 담은 실행 결과
     */
    execute(context: JuHongECommandContext): CommandExecutionResult | Promise<CommandExecutionResult>;
    /**
     * 자동완성 선택 시 입력창에 채워 넣을 문자열이다.
     * 지정하지 않으면 `command` 값을 그대로 사용한다.
     */
    insertValue?: string;
    /**
     * 레지스트리 내부에서 builtin 명령임을 구분하기 위한 고정 식별자다.
     */
    kind: 'ju-hong-e';
    /**
     * 자동완성 검색 시 함께 매칭할 추가 키워드 목록이다.
     */
    matchKeywords?: string[];
    /**
     * 도움말과 자동완성 정렬 우선순위다.
     * 값이 작을수록 앞에 노출된다.
     */
    order?: number;
    /**
     * 실행 전에 적용할 보안 검사 설정이다.
     */
    security?: CommandSecurityConfig;
};
/**
 * 명령 등록 팩토리 함수에 주입되는 헬퍼 API다.
 * 명령 정의를 직접 객체로 만들지 않고, 공통 후처리가 들어간 생성 함수를 통해 등록하도록 강제한다.
 */
export type CommandRegistrationApi = {
    /**
     * builtin slash command 정의를 생성한다.
     * `autoYes`, forms, instructions, rules 같은 프롬프트 메타데이터를 안전하게 복사하고 `kind` 를 자동으로 채운다.
     * @param definition 등록할 builtin 명령 메타데이터와 실행 함수
     * @returns 레지스트리에 바로 넣을 수 있는 정규화된 builtin 명령 정의
     */
    createCommand(definition: Omit<JuHongECommandDefinition, 'kind'>): JuHongECommandDefinition;
};
/**
 * 등록 시점까지 command 정의 생성을 지연시키는 팩토리 함수 계약이다.
 * 공통 API를 인자로 받아 명령 정의를 반환하므로, 등록 파일은 구현 디테일보다 선언에 집중할 수 있다.
 */
export type CommandRegistrationFactory<T> = (api: CommandRegistrationApi) => T;
/**
 * 사용자 입력을 parser가 builtin slash command로 해석한 최종 결과다.
 * 등록되지 않은 slash command는 일반 대화 입력으로 처리되도록 `undefined` 를 반환한다.
 */
export type ResolvedSlashCommandInput = {
    /**
     * slash command 뒤에 파싱된 인자 토큰 목록이다.
     */
    args: string[];
    /**
     * 사용자가 입력한 builtin slash command 이름이다.
     */
    command: `/${string}`;
    /**
     * parser가 builtin 명령으로 해석했음을 나타내는 고정 식별자다.
     */
    kind: 'builtin';
    /**
     * slash command 뒤 인자 부분의 원본 문자열이다.
     */
    rawArgs: string;
    /**
     * command 이름 부분의 원본 slash command 문자열이다.
     */
    rawCommand: string;
};
export {};
//# sourceMappingURL=command.d.ts.map