export interface ErrorTypeDelays {
    connectionDropped?: number;
    fetchError?: number;
    econnreset?: number;
    econnrefused?: number;
    sseAborted?: number;
    noBytes?: number;
    partialChunks?: number;
    runtimeKilled?: number;
    backgroundThrottle?: number;
    dnsError?: number;
    timeout?: number;
    unknown?: number;
}
export interface RetryConfig {
    attempts: number;
    maxRetries?: number;
    baseDelay: number;
    maxDelay?: number;
    backoff: BackoffStrategy;
    retryOn: RetryReason[];
    errorTypeDelays?: ErrorTypeDelays;
    maxErrorHistory?: number;
}
export type RetryReason = "zero_output" | "guardrail_violation" | "drift" | "unknown" | "incomplete" | "network_error" | "timeout" | "rate_limit" | "server_error";
export type BackoffStrategy = "exponential" | "linear" | "fixed" | "full-jitter" | "fixed-jitter";
export declare const RETRY_DEFAULTS: {
    readonly attempts: 3;
    readonly maxRetries: 6;
    readonly baseDelay: 1000;
    readonly maxDelay: 10000;
    readonly networkMaxDelay: 30000;
    readonly backoff: "fixed-jitter";
    readonly retryOn: RetryReason[];
};
export declare const ERROR_TYPE_DELAY_DEFAULTS: Required<ErrorTypeDelays>;
export declare enum ErrorCategory {
    NETWORK = "network",
    TRANSIENT = "transient",
    MODEL = "model",
    CONTENT = "content",
    PROVIDER = "provider",
    FATAL = "fatal",
    INTERNAL = "internal"
}
export interface RetryState {
    attempt: number;
    networkRetryCount: number;
    transientRetries: number;
    lastError?: CategorizedError;
    errorHistory: CategorizedError[];
    totalDelay: number;
    limitReached: boolean;
}
export interface CategorizedError {
    error: Error;
    category: ErrorCategory;
    reason: RetryReason;
    countsTowardLimit: boolean;
    retryable: boolean;
    timestamp: number;
    statusCode?: number;
}
export interface BackoffResult {
    delay: number;
    cappedAtMax: boolean;
    rawDelay: number;
}
export interface RetryDecision {
    shouldRetry: boolean;
    delay: number;
    reason: string;
    category: ErrorCategory;
    countsTowardLimit: boolean;
}
export interface ErrorClassification {
    isNetwork: boolean;
    isRateLimit: boolean;
    isServerError: boolean;
    isTimeout: boolean;
    isAuthError: boolean;
    isClientError: boolean;
    statusCode?: number;
}
export interface RetryContext {
    state: RetryState;
    config: RetryConfig;
    error: CategorizedError;
    backoff: BackoffResult;
}
//# sourceMappingURL=retry.d.ts.map