/**
 * Constraining a turn's ANSWER to a schema. See `AgentLoopDeps.outputSchema` for where this sits in
 * the loop and why it is a separate model call rather than a constraint on the turn's own calls.
 */
import type { StandardSchemaV1 } from '@standard-schema/spec';
/**
 * The turn produced an answer that does not satisfy `outputSchema`, and the bounded repair attempts
 * did not fix it. A DEFINED outcome of asking for structured output, not a crash: it carries the
 * validation issues and the text that failed them, so a caller can log what the model actually said
 * instead of guessing from a parse error.
 */
export declare class StructuredOutputError extends Error {
    /** Why it failed the schema. Empty only when the text was not JSON at all. */
    readonly issues: readonly StandardSchemaV1.Issue[];
    /** The last text the model produced, verbatim. */
    readonly text: string;
    /** How many model calls were spent trying (1 = the formatting pass, no repairs). */
    readonly attempts: number;
    constructor(issues: readonly StandardSchemaV1.Issue[], text: string, attempts: number);
}
/** A validated answer, or the issues that stopped it being one. */
export type StructuredOutcome<T> = {
    ok: true;
    value: T;
} | {
    ok: false;
    issues: readonly StandardSchemaV1.Issue[];
};
/**
 * Pull a JSON value out of a model reply, tolerating the code fences and lead-in prose a provider
 * that cannot constrain its own generation still emits. `undefined` when there is no JSON in there
 * at all — distinct from a JSON `null`, which is a value the schema may well accept.
 */
export declare function extractJson(text: string): unknown;
/**
 * Validate one attempt. The provider's own parsed `object` is preferred when it reported one (a
 * provider that constrained generation already did the parse), but it is validated all the same —
 * "the provider says it matched" is not the same claim as "it matches", and a provider that ignored
 * `outputSchema` entirely must fail here rather than downstream.
 */
export declare function validateStructured<T>(args: {
    schema: StandardSchemaV1<unknown, T>;
    text: string;
    reported: unknown;
}): Promise<StructuredOutcome<T>>;
/**
 * What the formatting pass is told to do. Written for a model that is being shown a finished answer
 * and asked to restate it — never to extend or improve it, which would make the structured result
 * disagree with the prose the user already read.
 */
export declare const DEFAULT_STRUCTURED_OUTPUT_INSTRUCTION = "Restate the assistant's final answer as a single JSON value matching the required schema. Use only information already present in the conversation \u2014 add nothing, and answer nothing that was not asked. Reply with ONLY the JSON: no prose, no explanation, no code fences.";
/** Appends the previous attempt's validation issues, so a repair call knows what to fix. */
export declare function repairInstruction(args: {
    instruction: string;
    issues: readonly StandardSchemaV1.Issue[];
}): string;
//# sourceMappingURL=structured-output.d.ts.map