/** * Completion-time recovery decisions: when a tool-free (or incomplete) * final answer must be rejected and the agent forced to act. */ export interface RecoveryBudgets { actionIntent: number; errorFix: number; forcePlan: number; featureImpl: number; failedProbe: number; shallowPentest: number; } export declare function createRecoveryBudgets(): RecoveryBudgets; export type RecoveryKind = "error_fix" | "narration" | "force_plan" | "feature_impl" | "failed_probe" | "shallow_pentest"; export interface RecoveryAction { kind: RecoveryKind; /** User/model-facing instruction to append. */ message: string; /** Short terminal notice. */ notice: string; budgetKey: keyof RecoveryBudgets; } export declare function budgetRemaining(budgets: RecoveryBudgets, key: keyof RecoveryBudgets): boolean; export declare function consumeBudget(budgets: RecoveryBudgets, key: keyof RecoveryBudgets): void; export declare function recoveryForErrorDiagnosis(nativeTools: boolean): RecoveryAction; export declare function recoveryForNarration(nativeTools: boolean, mode: "plan_open" | "pentest" | "web" | "build_plan_prose" | "build" | "generic"): RecoveryAction; /** Plan mode only — agent mode must not force plan.create. */ export declare function recoveryForMissingPlan(nativeTools: boolean): RecoveryAction; export declare function recoveryForMissingFeature(projectRoot?: string): RecoveryAction; export declare function recoveryForFailedProbe(): RecoveryAction; /** True when a final pentest write-up looks like skim recon without real coverage. */ export declare function looksLikeShallowPentestReport(text: string, opts: { productiveSteps: number; sawActiveTest: boolean; }): boolean; export declare function recoveryForShallowPentest(): RecoveryAction;