/**
 * Policies — Agent 执行约束 (横切关注点)
 *
 * Policy 不改变 Agent 做什么，而是约束 Agent 如何做。
 * 多个 Policy 可叠加，形成复合约束。
 *
 * 三类 Policy:
 *   1. BudgetPolicy  — 资源预算 (迭代次数 / Token / 时间)
 *   2. SafetyPolicy  — 安全沙箱 (命令黑名单 / 文件范围 / 发送者鉴权)
 *   3. QualityGatePolicy — 质量门控 (证据数量 / 分析深度)
 *
 * 这就是为什么"飞书远程执行"不需要独立 Agent:
 *   它只是 Conversation + SystemInteraction + SafetyPolicy 的组合。
 *   SafetyPolicy 提供命令沙箱，而不是由 LarkBridgeAgent 硬编码。
 *
 * @module policies
 */
/** 执行前校验的上下文 */
export interface PolicyContext {
    message?: {
        sender?: {
            id?: string;
        };
    };
    [key: string]: unknown;
}
/** 执行步骤状态 */
export interface StepState {
    iteration: number;
    startTime: number;
    [key: string]: unknown;
}
/** Agent 执行结果 */
export interface PolicyResult {
    reply?: string;
    toolCalls?: unknown[];
    [key: string]: unknown;
}
/** SafetyPolicy 构造选项 */
export interface SafetyPolicyOptions {
    fileScope?: string;
    allowedSenders?: string[];
    commandBlacklist?: RegExp[];
    requireApprovalFor?: string[];
}
/** QualityGatePolicy 构造选项 */
export interface QualityGatePolicyOptions {
    minEvidenceLength?: number;
    minFileRefs?: number;
    minToolCalls?: number;
    customValidator?: (result: PolicyResult) => {
        ok: boolean;
        reason?: string;
    };
}
/** Policy 基类 — 所有约束的抽象接口 */
export declare class Policy {
    /** 策略名称 */
    get name(): string;
    /** 执行前校验 — 拒绝不满足条件的请求 */
    validateBefore(_context: PolicyContext): {
        ok: boolean;
        reason?: string;
    };
    /** 执行中校验 — 每轮 ReAct 步骤后检查 */
    validateDuring(_stepState: StepState): {
        ok: boolean;
        action?: string;
        reason?: string;
    };
    /** 执行后校验 — 对最终结果质量把关 */
    validateAfter(_result: PolicyResult): {
        ok: boolean;
        reason?: string;
    };
    /** 修改配置 — 在执行前注入额外约束 */
    applyToConfig(config: Record<string, unknown>): Record<string, unknown>;
}
/**
 * 控制 Agent 的资源消耗上限。
 *
 * 适用于所有场景，不同 Preset 配置不同预算:
 *   - 聊天: { maxIterations: 8, timeoutMs: 120_000 }
 *   - 深度分析: { maxIterations: 24, timeoutMs: 300_000 }
 *   - 冷启动: { maxIterations: 24, timeoutMs: 600_000 }
 *   - 远程执行: { maxIterations: 6, timeoutMs: 60_000 }
 */
export declare class BudgetPolicy extends Policy {
    #private;
    constructor({ maxIterations, maxTokens, timeoutMs, temperature, }?: {
        maxIterations?: number | undefined;
        maxTokens?: number | undefined;
        timeoutMs?: number | undefined;
        temperature?: number | undefined;
    });
    get name(): string;
    get maxIterations(): number;
    get maxTokens(): number;
    get timeoutMs(): number;
    get temperature(): number;
    validateDuring(stepState: StepState): {
        ok: boolean;
        action: string;
        reason: string;
    } | {
        ok: boolean;
        action: string;
        reason?: undefined;
    };
    applyToConfig(config: Record<string, unknown>): {
        budget: {
            maxIterations: number;
            maxTokens: number;
            timeoutMs: number;
            temperature: number;
        };
    };
}
/**
 * 安全约束: 命令过滤、文件范围限制、发送者鉴权。
 *
 * 这取代了旧 LarkBridgeAgent 中硬编码的安全逻辑:
 *   - SafetyPolicy 是可组合的、可配置的、可复用的
 *   - 任何需要安全约束的场景都可以叠加这个 Policy
 *   - 不局限于飞书场景 — CLI 远程执行同样适用
 */
export declare class SafetyPolicy extends Policy {
    #private;
    /** 危险命令正则黑名单 */
    static DANGEROUS_COMMANDS: readonly RegExp[];
    /** 安全命令前缀白名单 */
    static SAFE_COMMANDS: readonly string[];
    /**
     * @param [opts.fileScope] 文件操作范围 (目录路径)
     * @param [opts.allowedSenders] 允许的发送者 ID (空=不限制)
     * @param [opts.commandBlacklist] 额外命令黑名单
     * @param [opts.requireApprovalFor] 需要人工确认的工具名
     */
    constructor({ fileScope, allowedSenders, commandBlacklist, requireApprovalFor, }?: SafetyPolicyOptions);
    get name(): string;
    validateBefore(context: PolicyContext): {
        ok: boolean;
        reason: string;
    } | {
        ok: boolean;
        reason?: undefined;
    };
    /**
     * 检查命令是否安全
     * @returns }
     */
    checkCommand(command: string): {
        safe: boolean;
        reason: string;
    } | {
        safe: boolean;
        reason?: undefined;
    };
    /**
     * 检查文件路径是否在允许范围内
     * @returns }
     */
    checkFilePath(filePath: string): {
        safe: boolean;
        reason?: undefined;
    } | {
        safe: boolean;
        reason: string;
    };
    /** 是否需要人工确认 */
    needsApproval(toolName: string): boolean;
    applyToConfig(config: Record<string, unknown>): Record<string, unknown>;
}
/**
 * 评估 Agent 输出质量，决定是否接受结果。
 *
 * 用于 Pipeline 的 gate 阶段，也可用于最终结果校验。
 * 取代了旧 BootstrapOrchestrator 中硬编码的 qualityCheck。
 */
export declare class QualityGatePolicy extends Policy {
    #private;
    /**
     * @param [opts.minEvidenceLength=500] 分析文本最小长度
     * @param [opts.minFileRefs=3] 最少文件引用数
     * @param [opts.minToolCalls=2] 最少工具调用数
     * @param [opts.customValidator] 自定义校验 (result) => { ok, reason }
     */
    constructor({ minEvidenceLength, minFileRefs, minToolCalls, customValidator, }?: QualityGatePolicyOptions);
    get name(): string;
    validateAfter(result: PolicyResult): {
        ok: boolean;
        reason?: undefined;
    } | {
        ok: boolean;
        reason: string;
    };
    /** 导出为 PipelineStrategy gate 配置格式 */
    toGateConfig(): {
        minEvidenceLength: number;
        minFileRefs: number;
        minToolCalls: number;
        custom: ((result: PolicyResult) => {
            ok: boolean;
            reason?: string;
        }) | null;
    };
}
/**
 * 组合多个 Policy 并统一执行校验。
 *
 * @example
 * const engine = new PolicyEngine([
 *   new BudgetPolicy({ maxIterations: 8 }),
 *   new SafetyPolicy({ fileScope: '/project' }),
 * ]);
 * engine.validateBefore(context); // 所有 policy 依次检查
 */
export declare class PolicyEngine {
    #private;
    constructor(policies?: Policy[]);
    get policies(): Policy[];
    /**
     * 获取特定类型的 Policy
     * @template T
     */
    get<T extends Policy>(PolicyClass: abstract new (...args: never[]) => T): T | null;
    validateBefore(context: PolicyContext): {
        ok: boolean;
        reason?: string;
    };
    validateDuring(stepState: StepState): {
        ok: boolean;
        action?: string;
        reason?: string;
    };
    validateAfter(result: PolicyResult): {
        ok: boolean;
        reason?: string;
    };
    applyToConfig(config: Record<string, unknown>): Record<string, unknown>;
    /** 获取合并后的 Budget (从 BudgetPolicy) */
    getBudget(): {
        maxIterations: number;
        maxTokens: number;
        timeoutMs: number;
        temperature: number;
    } | null;
    /**
     * 工具执行前的安全校验 — 在 reactLoop 中每次工具调用前自动触发
     *
     * 对有副作用的工具 (run_safe_command, write_project_file) 执行安全检查。
     * 委托给 SafetyPolicy，如果没有加载 SafetyPolicy 则放行。
     *
     * @param toolName 工具名称
     * @param args 工具参数
     * @returns }
     */
    validateToolCall(toolName: string, args: Record<string, unknown>): {
        ok: boolean;
        reason?: undefined;
    } | {
        ok: boolean;
        reason: string;
    };
}
declare const _default: {
    Policy: typeof Policy;
    BudgetPolicy: typeof BudgetPolicy;
    SafetyPolicy: typeof SafetyPolicy;
    QualityGatePolicy: typeof QualityGatePolicy;
    PolicyEngine: typeof PolicyEngine;
};
export default _default;
