/**
 * ExplorationTracker — 统一的 AI 探索生命周期控制器
 *
 * 合并了三个原本各自为政的系统:
 *   1. PhaseRouter (ContextWindow.js) — 阶段状态机
 *   2. 探索进度追踪 (原内联逻辑) — 信息增量检测
 *   3. ReasoningLayer 行为控制部分 — 反思/规划/停滞 nudge
 *
 * 职责（拆分后的编排层）:
 *   - 阶段状态机: phase 持有 + 转换规则
 *   - 信号收集: 委托 SignalDetector
 *   - Nudge 生成: 委托 NudgeGenerator
 *   - 计划跟踪: 委托 PlanTracker
 *   - Graceful exit: 管理轮次耗尽后的优雅退出流程
 *
 * 不拥有的职责:
 *   - 推理链数据收集 → ReasoningTrace (纯数据，不影响行为)
 *   - 上下文压缩 → ContextWindow
 *   - 工具注册与执行 → ToolRegistry
 *   - 跨对话记忆 → Memory / WorkingMemory
 *
 * @module ExplorationTracker
 */
import type { SignalBus } from '#infra/signal/SignalBus.js';
import type { ExplorationBudget, ExplorationStrategy, ExplorationTrace, PipelineType } from './exploration/ExplorationStrategies.js';
/** resolve() 选项 */
interface ResolveOptions {
    source?: unknown;
    strategy?: unknown;
    dimensionMeta?: {
        outputType?: string;
    };
}
/** 预算输入（带默认值） */
interface BudgetInput extends Partial<ExplorationBudget> {
    submitToolName?: string;
    pipelineType?: PipelineType;
    signalBus?: SignalBus | null;
}
export declare class ExplorationTracker {
    #private;
    /**
     * @param strategy 策略配置对象
     * @param budget 预算配置 { maxIterations, searchBudget, ... }
     */
    constructor(strategy: ExplorationStrategy, budget: BudgetInput);
    /**
     * 根据调用参数解析应使用的策略
     * @param opts AgentRuntime execute 的选项
     * @param budget 预算配置
     * @returns User 模式返回 null
     */
    static resolve(opts: ResolveOptions, budget: BudgetInput): ExplorationTracker | null;
    /** 每轮迭代开始时调用 — 递增计数 */
    tick(): void;
    /** 撤销 tick（AI 调用失败或空响应时，不计入迭代） */
    rollbackTick(): void;
    /** 提交工具名 */
    get submitToolName(): string;
    /** 管线类型标识 */
    get pipelineType(): PipelineType;
    /** 是否应退出主循环 */
    shouldExit(): boolean;
    /**
     * 获取本轮的 Nudge（每轮最多一条）
     * @param trace 推理链
     * @returns |null}
     */
    getNudge(trace: ExplorationTrace | null): {
        type: string;
        text: string;
    } | null;
    /** 获取当前阶段的上下文状态行（注入 systemPrompt 尾部） */
    getPhaseContext(): string;
    /** 获取当前阶段的 toolChoice */
    getToolChoice(): "none" | "auto" | "required";
    /**
     * 记录一次工具调用结果，更新内部指标
     *
     * @returns }
     */
    recordToolCall(toolName: string, args: Record<string, unknown>, result: unknown): {
        isNew: boolean;
    };
    /**
     * 结束本轮迭代 — 更新轮次级指标 + 检查阶段转换
     *
     * @returns |null} 阶段转换 nudge
     */
    endRound({ hasNewInfo, submitCount, toolNames, skipped, }?: {
        hasNewInfo?: boolean | undefined;
        submitCount?: number | undefined;
        toolNames?: string[] | undefined;
        skipped?: boolean | undefined;
    }): {
        type: string;
        text: string;
    } | null;
    /**
     * 处理 AI 返回纯文本响应（无工具调用）
     * @returns }
     */
    onTextResponse(): {
        isFinalAnswer: boolean;
        needsDigestNudge: boolean;
        shouldContinue: boolean;
        nudge: string | null;
    };
    /** 记录被截断的工具调用数量 */
    recordTruncatedCalls(count: number): void;
    get isGracefulExit(): boolean;
    get isHardExit(): boolean;
    get phase(): string;
    get iteration(): number;
    get totalSubmits(): number;
    get strategyName(): string;
    getMetrics(): {
        iteration: number;
        phase: string;
        phaseRounds: number;
        submitCount: number;
        uniqueFiles: number;
        uniquePatterns: number;
        uniqueQueries: number;
        totalToolCalls: number;
        roundsSinceNewInfo: number;
    };
    get metrics(): {
        iteration: number;
        phase: string;
        phaseRounds: number;
        submitCount: number;
        uniqueFiles: number;
        uniquePatterns: number;
        uniqueQueries: number;
        totalToolCalls: number;
        roundsSinceNewInfo: number;
    };
    getPlanProgress(): {
        coveredSteps: number;
        totalSteps: number;
        deviationScore: number;
        unplannedActions: number;
        lastReplanIteration: number | null;
        consecutiveOffPlan: number;
    };
    /** 更新计划进度 — 委托 PlanTracker */
    updatePlanProgress(trace: ExplorationTrace | null): void;
    /**
     * 推理质量评分 — 委托 PlanTracker
     * @returns }
     */
    getQualityMetrics(trace: ExplorationTrace | null): {
        score: number;
        breakdown: Record<string, number>;
    };
}
export default ExplorationTracker;
