import { Agent, AgentOutputType } from '../agent';
import { OutputGuardrailTripwireTriggered } from '../errors';
import { InputGuardrailDefinition, InputGuardrailResult, OutputGuardrailDefinition, OutputGuardrailMetadata, OutputGuardrailResult } from '../guardrail';
import { RunState } from '../runState';
import type { AgentInputItem } from '../types';
export type GuardrailTracker = {
    readonly pending: boolean;
    readonly failed: boolean;
    readonly error: unknown;
    markPending: () => void;
    setPromise: (promise?: Promise<InputGuardrailResult[]>) => void;
    setError: (err: unknown) => void;
    throwIfError: () => Promise<void>;
    awaitCompletion: (options?: {
        suppressErrors?: boolean;
    }) => Promise<void>;
};
export declare const createGuardrailTracker: () => GuardrailTracker;
/** Validates restored result ownership without publishing live ownership evidence. */
export declare function getSerializedOutputGuardrailResults(state: RunState<any, any>, blockedOutput: string): Set<OutputGuardrailResult<any, any>>;
export declare function buildInputGuardrailDefinitions<TContext, TAgent extends Agent<TContext, AgentOutputType>>(state: RunState<TContext, TAgent>, runnerGuardrails: InputGuardrailDefinition[]): InputGuardrailDefinition[];
export declare function splitInputGuardrails(guardrails: InputGuardrailDefinition[]): {
    blocking: InputGuardrailDefinition[];
    parallel: InputGuardrailDefinition[];
};
export declare function runInputGuardrails<TContext, TAgent extends Agent<TContext, AgentOutputType>>(state: RunState<TContext, TAgent>, guardrails: InputGuardrailDefinition[], options?: {
    onErrorObserved?: (error: unknown) => void;
    input?: string | AgentInputItem[];
}): Promise<InputGuardrailResult[]>;
export declare function runOutputGuardrails<TContext, TOutput extends AgentOutputType, TAgent extends Agent<TContext, TOutput>>(state: RunState<TContext, TAgent>, runnerOutputGuardrails: OutputGuardrailDefinition<OutputGuardrailMetadata, AgentOutputType<unknown>>[], output: string, onResultObserved?: (result: OutputGuardrailResult<any, any>, tripwireTriggered: boolean) => void): Promise<void>;
export declare function finalizeOutputGuardrails<TContext, TAgent extends Agent<TContext, any>>(options: {
    state: RunState<TContext, TAgent>;
    runnerOutputGuardrails: OutputGuardrailDefinition<OutputGuardrailMetadata, AgentOutputType<unknown>>[];
    output: string;
    redactedOutput: string;
    guardedTerminalToolOutput: boolean;
    signal?: AbortSignal;
    sanitizeRejectedOutput: (state: RunState<TContext, TAgent>, resultStart: number, completedTripwireResult: OutputGuardrailResult<any, any> | undefined, observedResults: ReadonlyMap<OutputGuardrailResult<any, any>, boolean>, tripwire?: OutputGuardrailTripwireTriggered<any, any>, ownedGuardrailResults?: ReadonlySet<OutputGuardrailResult<any, any>>) => false | string | Promise<false | string>;
    persistBlockedOutput?: () => Promise<void>;
    persistUnblockedFailure?: () => Promise<void>;
    onBlockedOutput?: () => void;
    releaseBlockedOutputPersistence: (state: RunState<TContext, TAgent>) => void;
}): Promise<void>;
export declare function sanitizeBlockedOutputGuardrailError(error: unknown, rejectedOutput: string, redactedOutput: string, state: RunState<any, any>, currentTripwireResult?: OutputGuardrailResult<any, any>): unknown;
export declare function sanitizeBlockedOutputGuardrailErrorDetails(error: unknown, rejectedOutput: string, redactedOutput: string, state: RunState<any, any>): Error;
export declare function sanitizeBlockedOutputGuardrailResults(state: RunState<any, any>, resultStartIndex: number, redactedOutput: string, observedTripwireResults: ReadonlyMap<OutputGuardrailResult<any, any>, boolean>, tripwire?: OutputGuardrailTripwireTriggered<any, any>, ownedGuardrailResults?: ReadonlySet<OutputGuardrailResult<any, any>>): ReadonlySet<OutputGuardrailResult<any, any>>;
export declare function replaceSanitizedOutputGuardrailMessages(state: RunState<any, any>, sanitizedOwnedResults: ReadonlySet<OutputGuardrailResult<any, any>>, redactedOutput: string, tripwire?: OutputGuardrailTripwireTriggered<any, any>): void;
export declare function sanitizeBlockedToolOutputGuardrailResults(state: RunState<any, any>, resultStartIndex: number, redactedOutput: string): void;
