export interface AiBudgetPriceIdentity { currency: string; source: string; version: string; } export interface AiBudgetEstimate { totalTokens: number; costNanos?: number; wallClockMs?: number; modelCalls?: number; toolCalls?: number; price?: AiBudgetPriceIdentity; unknownPriceOverrideAuditId?: string; } export interface AiBudgetMutationSender { reserve(reservationId: string, idempotencyKey: string, estimate: AiBudgetEstimate, createdAt: Date, transitionEventId: string, transitionIdempotencyKey: string): Promise; settle(reservationId: string, invocationId: string, settledAt: Date, transitionEventId: string, transitionIdempotencyKey: string): Promise; resolve(reservationId: string, evidence: 'provider_call_not_started' | 'outcome_unknown', evidenceSha256: string, resolvedAt: Date, transitionEventId: string, transitionIdempotencyKey: string): Promise; } export interface RecoveredAiBudgetSettlement { recoveryId: string; reservationId: string; invocationId: string; toolCallId: string; evidenceSha256: string; settledAt?: Date; } export type RecoveredAiBudgetSettlementSender = (settlement: Required) => Promise; export declare class AiBudgetDeniedError extends Error { constructor(); } export declare class AiBudgetReservationHandle { readonly reservationId: string; private readonly sender; private readonly newId; constructor(reservationId: string, sender: AiBudgetMutationSender, newId: () => string); settle(invocationId: string, settledAt?: Date): Promise; /** Release liability only when the provider request was never dispatched. */ releaseProviderCallNotStarted(evidenceSha256: string, resolvedAt?: Date): Promise; /** Preserve liability in RECONCILE when the external outcome is uncertain. */ markOutcomeUnknown(evidenceSha256: string, resolvedAt?: Date): Promise; private resolve; } export declare function reserveAiBudget(estimate: AiBudgetEstimate, sender: AiBudgetMutationSender, newId: () => string): Promise;