import { type ObservabilityCategory } from './budgets.js'; export interface TimedMetricInput { category: ObservabilityCategory; name: string; durationMs: number; ok: boolean; } export interface MetricEvent extends TimedMetricInput { observedAt: string; budgetStatus: 'ok' | 'warn' | 'fail'; } export interface CacheMetricsSnapshot { hits: number; misses: number; writes: number; deletes: number; hitRate: number; } export interface VendorMetricsSnapshot { requestCount: number; errorCount: number; averageDurationMs: number; lastStatusCode?: number; } export interface MetricsSnapshot { generatedAt: string; startedAt: string; toolCalls: number; bridgeCalls: number; budgetWarnings: number; budgetFailures: number; recentEvents: MetricEvent[]; byCategory: Record; cache: CacheMetricsSnapshot; vendors: Record; } export declare class MetricsCollector { private readonly maxEvents; private readonly startedAt; private events; private categoryStats; private cacheStats; private vendorStats; constructor(maxEvents?: number); recordTimed(input: TimedMetricInput): MetricEvent; recordCache(result: 'hit' | 'miss' | 'write' | 'delete'): void; recordVendor(vendor: string, durationMs: number, ok: boolean, statusCode?: number): void; snapshot(): MetricsSnapshot; reset(): void; } export declare function getGlobalMetricsCollector(): MetricsCollector; export declare function resetGlobalMetricsCollector(): void;