/**
 * LLM 统一网关 — 控制流零 AI 依赖，决策节点强 AI 依赖。
 *
 * 职责:
 * 1. 定义 AI 依赖边界: 明确哪些操作需要 LLM 算力，哪些可以本地完成
 * 2. Token 消耗监控: 按 operation_type 估算和追踪 Token 用量
 * 3. 硬熔断: 超过 Token 预算上限时拦截后续 AI 调用
 * 4. 调用审计: 记录每次 AI 调用的类型、Token 估算和耗时
 * 5. 单任务阈值: 单次任务 Token 支出超过阈值时强制熔断
 * 6. 流式心跳: 重型推演(>10s)期间每5秒发送进度，防止客户端超时断连
 */
/** 熔断器状态 */
export type CircuitState = "closed" | "open" | "half-open";
/** AI 操作类型分级 */
export type AIOperationTier = "light" | "medium" | "heavy";
/** AI 依赖的操作类型 */
export type AIOperationType = "intent_refinement" | "solution_brainstorm" | "verification_reasoning" | "code_generation" | "test_generation" | "review_deep_analysis" | "debug_analysis";
/** 操作类型配置: 级别 + Token 估算 */
interface OperationProfile {
    tier: AIOperationTier;
    estimated_tokens: number;
    description: string;
}
/** 调用审计记录 */
export interface GatewayAuditEntry {
    /** 操作类型 */
    operation: AIOperationType;
    /** 估算 Token 数 */
    estimated_tokens: number;
    /** 调用时间戳 */
    timestamp: string;
    /** 是否被熔断拦截 */
    blocked: boolean;
    /** 关联的任务 ID */
    task_id?: string;
}
/** 网关状态快照 */
export interface GatewayStatus {
    /** Token 总预算 */
    budget_total: number;
    /** 已使用 Token 数 */
    budget_used: number;
    /** 剩余 Token 数 */
    budget_remaining: number;
    /** 使用比例 */
    usage_ratio: number;
    /** 熔断器状态 */
    circuit_open: boolean;
    /** 熔断器详细状态 */
    circuit_state: CircuitState;
    /** 总调用次数 */
    call_count: number;
    /** 被拦截次数 */
    blocked_count: number;
    /** 当前任务已用 Token */
    task_tokens_used: number;
    /** 审计日志 */
    audit_log: GatewayAuditEntry[];
}
/** 心跳进度回调 */
export type HeartbeatCallback = (progress: {
    elapsed_ms: number;
    tokens_used: number;
    operation: AIOperationType;
    message: string;
}) => void;
/**
 * LLM 统一网关 — 管理 Token 预算、熔断和调用审计。
 */
export declare class LLMGateway {
    private budgetTotal;
    private budgetUsed;
    private taskBudget;
    private taskTokensUsed;
    private currentTaskId;
    private callCount;
    private blockedCount;
    private auditLog;
    private circuitState;
    /** 熔断器进入 open 状态的时间戳，用于 half-open 超时恢复 */
    private circuitOpenedAt;
    /** half-open 状态下允许的探测请求次数 */
    private halfOpenProbeBudget;
    /** half-open 探测已用次数（当前周期） */
    private halfOpenProbeUsed;
    /** 当前时间函数 — 生产环境用 Date.now，测试可注入 */
    readonly now: () => number;
    private heartbeatTimer;
    private heartbeatCallback;
    private operationStart;
    private currentOperation;
    private config;
    /**
     * 创建 LLM 网关实例。
     * @param budget - 可选，Token 总预算，默认从配置读取
     * @param taskBudget - 可选，单任务 Token 预算，默认从配置读取
     */
    constructor(budget?: number, taskBudget?: number);
    /** 设置心跳回调（用于 stdio 输出进度） */
    setHeartbeatCallback(cb: HeartbeatCallback): void;
    /**
     * 开始新任务的 Token 计量。
     * @param taskId - 任务 ID
     */
    beginTask(taskId: string): void;
    /** 结束任务计量，停止心跳 */
    endTask(): void;
    /**
     * 请求 AI 操作许可 — 检查 Token 预算和熔断状态。
     * 被拦截时返回原因说明。
     *
     * @param operation - AI 操作类型
     * @param taskId - 可选的任务 ID
     * @returns 许可结果，包含是否允许、剩余预算和拦截原因
     */
    request(operation: AIOperationType, taskId?: string): {
        allowed: boolean;
        estimated_tokens: number;
        remaining_budget: number;
        remaining_task_budget: number;
        reason?: string;
    };
    /**
     * 置信度闸口: 低于阈值禁止执行代码，必须调用 sf_brainstorm。
     * @param confidence - 当前置信度
     * @returns 闸口结果，包含是否允许和阈值
     */
    confidenceGate(confidence: number): {
        allowed: boolean;
        threshold: number;
        reason?: string;
    };
    /**
     * 标记操作失败 — half-open 状态下探测失败时回退到 open 状态。
     * 防止故障未恢复时大量请求涌入。
     */
    failOperation(): void;
    /** 标记操作完成，停止心跳。half-open 状态下探测成功则关闭熔断器 */
    completeOperation(): void;
    /**
     * 报告实际 Token 用量 — 根据估算与实际的差值调整预算计数。
     * 差值为正时增加消耗，为负时回退多计部分。熔断器根据实际消耗重新评估。
     * @param operation - 操作类型
     * @param actualTokens - 实际消耗的 Token 数
     */
    reportActualUsage(operation: AIOperationType, actualTokens: number): void;
    /**
     * 获取网关当前状态快照。
     * @returns 网关状态，包含预算、调用统计和审计日志
     */
    getStatus(): GatewayStatus;
    /**
     * 重置网关状态 — 清零所有计数器、审计日志和熔断器。
     * @param budget - 可选的新 Token 总预算
     */
    reset(budget?: number): void;
    /**
     * 判断操作是否为本地操作（不需要 LLM 算力）。
     * @param op - 操作名称
     * @returns 是否为本地操作
     */
    static isLocalOperation(op: string): boolean;
    /**
     * 判断操作是否为 AI 操作。
     * @param op - 操作类型
     * @returns 是否为 AI 操作
     */
    static isAIOperation(op: AIOperationType): boolean;
    /**
     * 获取操作类型的配置信息。
     * @param op - 操作类型
     * @returns 操作配置（级别、Token 估算、描述）
     */
    static getProfile(op: AIOperationType): OperationProfile;
    /**
     * 启动流式心跳 — 重型操作期间定期发送进度报告，防止客户端超时断连。
     * @param operation - 当前 AI 操作类型
     */
    private startHeartbeat;
    /** 停止流式心跳计时器 */
    private stopHeartbeat;
}
export {};
//# sourceMappingURL=llm_gateway.d.ts.map