/**
 * Budget Guard Provider
 *
 * Decorator that wraps any LLMProvider and enforces spending limits.
 * Tracks daily/monthly costs, fires notifications, and blocks requests
 * when budget is exceeded.
 *
 * Usage persistence: Stores cost data in a JSON file that survives restarts.
 */
import type { LLMProvider, AnalyzeOptions, AnalyzeResult, StructuredOptions, BudgetConfig } from './types.js';
import { Logger } from '../../utils/logger.js';
interface NotificationInput {
    type: string;
    severity: 'info' | 'warning' | 'critical';
    title: string;
    message: string;
    data?: Record<string, unknown>;
}
type NotifyFn = (input: NotificationInput) => void;
/**
 * Error thrown when budget limit is exceeded
 */
export declare class BudgetExceededError extends Error {
    readonly budgetType: 'daily' | 'monthly';
    readonly currentCost: number;
    readonly limit: number;
    constructor(budgetType: 'daily' | 'monthly', currentCost: number, limit: number);
}
export declare class BudgetGuardProvider implements LLMProvider {
    get name(): import("./types.js").LLMProviderType;
    get defaultModel(): string;
    private inner;
    private budget;
    private usageFilePath;
    private notify?;
    private logger;
    constructor(inner: LLMProvider, budget: BudgetConfig, usageFilePath: string, notify?: NotifyFn, logger?: Logger);
    analyze(prompt: string, options?: AnalyzeOptions): Promise<AnalyzeResult>;
    analyzeStructured<T>(prompt: string, options: StructuredOptions<T>): Promise<{
        data: T;
        usage: AnalyzeResult['usage'];
        estimatedCost: number;
    }>;
    estimateCost(inputTokens: number, outputTokens: number, model?: string): number;
    isAvailable(): Promise<boolean>;
    getStatus(): Promise<{
        available: boolean;
        latencyMs?: number;
        error?: string;
    }>;
    private loadUsage;
    private saveUsage;
    private fireNotifications;
}
export {};
//# sourceMappingURL=budget-guard.d.ts.map