/**
 * 보안 정책 검사에 사용하는 공통 타입을 정의한다.
 * 패턴 규칙, validator 규칙, 검사 payload, 검사 결과 구조를 이 파일에서 함께 관리한다.
 */
import type { AIServiceType } from './app';
import type { ServicePromptInput } from './prompt';
/**
 * 문자열 패턴으로 입력을 차단할 때 사용하는 보안 규칙이다.
 * 정규식 매칭과 사용자 메시지 포맷을 한 묶음으로 선언한다.
 */
export type SecurityPatternRule = {
    /**
     * 매칭된 원문을 사용자 메시지용 문자열로 가공하는 선택적 포매터다.
     */
    formatMatch?: (matchedText: string) => string;
    /**
     * 규칙이 감지됐을 때 사용자에게 보여 줄 기본 차단 메시지다.
     */
    message: string;
    /**
     * trace/report에서 규칙을 식별하기 위한 내부 이름이다.
     */
    name: string;
    /**
     * 검사에 사용할 정규식 패턴이다.
     */
    pattern: RegExp;
};
/**
 * 코드로 직접 판단하는 커스텀 보안 validator 규칙이다.
 * payload를 보고 허용/차단을 판단하거나, 차단 사유 문자열을 직접 반환할 수 있다.
 */
export type SecurityValidatorRule = {
    /**
     * validator가 차단을 결정했을 때 기본으로 사용할 메시지다.
     */
    message: string;
    /**
     * trace/report에서 validator를 식별하기 위한 내부 이름이다.
     */
    name: string;
    /**
     * payload를 검사해 허용 여부를 판정한다.
     * `true` 는 통과, `false` 는 기본 메시지로 차단, 문자열은 해당 문자열을 사용자 메시지로 사용한다.
     * @param payload 현재 command 실행에서 검사할 보안 payload
     * @returns 허용 여부 또는 사용자에게 보여 줄 차단 사유 문자열
     */
    validate(payload: SecurityValidationPayload): boolean | Promise<boolean> | string | Promise<string>;
};
/**
 * command 정의에 부착하는 보안 검사 설정이다.
 * 패턴 규칙과 validator 규칙을 함께 선언해 실행 전 차단 정책을 구성한다.
 */
export type CommandSecurityConfig = {
    /**
     * 정규식 기반으로 검사할 패턴 규칙 목록이다.
     */
    patterns?: SecurityPatternRule[];
    /**
     * 코드 기반으로 검사할 validator 규칙 목록이다.
     */
    validators?: SecurityValidatorRule[];
};
/**
 * 보안 정책 엔진이 payload의 어느 범위를 검사할지 결정하는 전역 모드다.
 */
export type SecurityPolicyMode = 'disabled' | 'input-only' | 'prompt-only' | 'prompt-with-resources';
/**
 * 현재 작업 디렉터리에 저장되는 보안 정책 상태 구조다.
 */
export type SecurityPolicyState = {
    /**
     * 현재 세션과 command 실행에 적용할 검사 모드다.
     */
    mode: SecurityPolicyMode;
};
/**
 * 보안 정책 엔진이 실제로 검사하는 입력 묶음이다.
 * 사용자 원문, 파싱된 인자, 생성된 프롬프트, 서비스 정보가 함께 들어간다.
 */
export type SecurityValidationPayload = {
    /**
     * parser가 분해한 command 인자 토큰 목록이다.
     */
    args: string[];
    /**
     * 현재 검사 중인 slash command 이름이다.
     */
    command: string;
    /**
     * 사용자가 입력한 전체 원문이다.
     */
    input: string;
    /**
     * 입력 원문을 기반으로 생성된 구조화 프롬프트 또는 최종 문자열 프롬프트다.
     */
    prompt?: ServicePromptInput;
    /**
     * 프롬프트 자산과 상대 경로를 해석할 때 기준이 되는 루트 디렉터리다.
     */
    promptRootDir?: string;
    /**
     * command 인자 부분의 원본 문자열이다.
     */
    rawArgs: string;
    /**
     * slash command 이름 부분의 원본 문자열이다.
     */
    rawCommand: string;
    /**
     * 현재 세션에서 선택된 실제 AI 서비스다.
     */
    service: AIServiceType;
};
/**
 * 보안 규칙이 어떤 위치에서 무엇을 감지했는지 설명하는 부가 정보다.
 */
export type SecurityValidationDetail = {
    /**
     * 감지 위치를 사람이 읽을 수 있게 표시한 문자열이다.
     */
    location?: string;
    /**
     * 규칙이 실제로 감지한 원문 일부다.
     */
    matchedText?: string;
    /**
     * 감지 대상 범주다.
     * 예: `input`, `rawCommand`, `prompt`, `resource`
     */
    source: string;
};
/**
 * 보안 검사 최종 결과다.
 * 통과 시 단순 성공 구조를, 차단 시 상세 사유를 담은 실패 구조를 반환한다.
 */
export type SecurityValidationResult = {
    /**
     * 검사 통과 여부다.
     * `true` 면 요청을 계속 진행할 수 있다.
     */
    ok: true;
} | {
    /**
     * 어떤 위치에서 차단이 발생했는지 설명하는 부가 정보다.
     */
    detail?: SecurityValidationDetail;
    /**
     * 사용자에게 보여 줄 차단 메시지다.
     */
    message: string;
    /**
     * 검사 통과 여부다.
     * `false` 면 요청을 중단해야 한다.
     */
    ok: false;
    /**
     * 차단을 발생시킨 규칙 이름이다.
     */
    ruleName: string;
};
/**
 * 현재 정책 모드로부터 계산된 실제 검사 범위 옵션이다.
 */
export type SecurityValidationOptions = {
    /**
     * 생성된 AI 프롬프트 본문까지 검사할지 여부다.
     */
    inspectPrompt: boolean;
    /**
     * 프롬프트가 참조한 리소스 경로/URL까지 검사할지 여부다.
     */
    inspectResources: boolean;
    /**
     * 이 옵션 계산의 기준이 된 정책 모드다.
     */
    mode: SecurityPolicyMode;
};
//# sourceMappingURL=security.d.ts.map