/** * ContextBudgetGuard * * Tracks aggregate token usage across all context sources per session. * Prevents context window stuffing and many-shot jailbreaking attacks. * * Why this exists: Anthropic's research shows 256 faux dialogues in a single * prompt override safety training. Individual guards have per-source limits, * but nothing tracks the AGGREGATE context size. An attacker can fill the * context window to push out system prompts. */ export interface ContextBudgetGuardConfig { /** Max total estimated tokens across all sources (default: 8000) */ maxTotalTokens?: number; /** Tokens reserved for system prompt - never consumed by user content (default: 2000) */ systemPromptReserve?: number; /** Max conversation turns per session (default: 50) */ maxTurnsPerSession?: number; /** Max number of similar-structure messages before flagging (default: 5) */ maxSimilarMessages?: number; /** Custom token estimator (default: Math.ceil(text.length / 3.5)) */ tokenEstimator?: (text: string) => number; } export interface ContextBudgetResult { allowed: boolean; reason?: string; violations: string[]; budget: { used_tokens: number; remaining_tokens: number; system_reserve: number; sources: Record; turn_count: number; }; many_shot_detected: boolean; } export declare class ContextBudgetGuard { private config; private sessions; constructor(config?: ContextBudgetGuardConfig); /** * Track context from any source and check budget */ trackContext(sessionId: string, source: string, content: string, requestId?: string): ContextBudgetResult; /** * Get current budget status for a session */ getSessionBudget(sessionId: string): ContextBudgetResult["budget"] | null; /** * Reset session budget */ resetSession(sessionId: string): void; /** * Destroy and release all resources */ destroy(): void; private detectManyShotPattern; private getOrCreateSession; }