import { z } from 'zod';
export declare const NarrowingOptionSchema: z.ZodObject<{
    description: z.ZodString;
    argv: z.ZodArray<z.ZodString>;
    projectedTokens: z.ZodNumber;
}, z.core.$strip>;
export type NarrowingOption = z.infer<typeof NarrowingOptionSchema>;
export declare const TokenBudgetRefusalSchema: z.ZodObject<{
    refused: z.ZodLiteral<true>;
    reason: z.ZodLiteral<"token-budget-exceeded">;
    required: z.ZodNumber;
    budget: z.ZodNumber;
    options: z.ZodArray<z.ZodObject<{
        description: z.ZodString;
        argv: z.ZodArray<z.ZodString>;
        projectedTokens: z.ZodNumber;
    }, z.core.$strip>>;
}, z.core.$strip>;
export type TokenBudgetRefusal = z.infer<typeof TokenBudgetRefusalSchema>;
/**
 * Build the one shared refusal arm for output envelopes that cannot fit their
 * own fixed chrome. Producers calculate projections from data they already
 * hold; this builder validates and freezes the vocabulary carried over wire.
 */
export declare function buildTokenBudgetRefusal(required: number, budget: number, options: readonly NarrowingOption[]): TokenBudgetRefusal;
export declare function isTokenBudgetRefusal(value: unknown): value is TokenBudgetRefusal;
export declare function describeProjectedFit(action: string, projectedTokens: number): string;
export declare class TokenBudgetRefusalError extends Error {
    readonly refusal: TokenBudgetRefusal;
    readonly name: string;
    constructor(refusal: TokenBudgetRefusal, envelope?: string);
}
/** Human-readable refusal output. Projected costs are explicitly non-evidence. */
export declare function renderTokenBudgetRefusal(refusal: TokenBudgetRefusal): string;
