/** * UsageTracker - Tracks token usage across LLM calls * * @example * ```typescript * const tracker = new UsageTracker({ * budget: { * maxTotalTokens: 100000, * warningThreshold: 0.8, * }, * }); * * tracker.onEvent((event) => { * if (event.type === 'usage:budget_warning') { * console.log('Budget warning!', event.status); * } * }); * * // Record usage after each LLM call * tracker.record({ * model: 'claude-sonnet-4-6', * provider: 'anthropic', * tokens: { inputTokens: 1000, outputTokens: 500, totalTokens: 1500 }, * }); * * // Get stats * console.log(tracker.getStats()); * console.log(tracker.formatTokens(tracker.getTotalTokens())); * ``` */ import type { UsageRecord, UsageStats, BudgetStatus, UsageEventHandler, UsageTrackerOptions, RecordUsageInput } from './types.js'; /** * UsageTracker tracks token usage across LLM calls */ export declare class UsageTracker { private readonly enabled; private readonly budget?; private readonly sessionId?; private readonly eventHandlers; /** All usage records */ private readonly records; /** Cached stats (invalidated on new records) */ private cachedStats?; constructor(options?: UsageTrackerOptions); /** * Record token usage from an LLM call */ record(input: RecordUsageInput): UsageRecord | undefined; /** * Get aggregated usage statistics */ getStats(): UsageStats; /** * Get stats for a specific session */ getSessionStats(sessionId: string): UsageStats; /** * Get total tokens used */ getTotalTokens(): number; /** * Get total input tokens */ getTotalInputTokens(): number; /** * Get total output tokens */ getTotalOutputTokens(): number; /** * Get budget status */ getBudgetStatus(): BudgetStatus; /** * Check if budget is exceeded */ isBudgetExceeded(): boolean; /** * Check budget and emit events */ private checkBudget; /** * Reset all tracking data */ reset(): void; /** * Get all records */ getRecords(): readonly UsageRecord[]; /** * Get records for a specific session */ getSessionRecords(sessionId: string): UsageRecord[]; /** * Format tokens with commas for display */ formatTokens(tokens: number): string; /** * Get a human-readable summary */ getSummary(): string; /** * Register an event handler */ onEvent(handler: UsageEventHandler): () => void; /** * Emit an event */ private emit; /** * Check if tracking is enabled */ get isEnabled(): boolean; /** * Get the number of records */ get size(): number; } /** * Create a UsageTracker instance */ export declare function createUsageTracker(options?: UsageTrackerOptions): UsageTracker;