/**
 * Tier matrix MCP — single source of truth.
 *
 * Поля:
 *   - reqPerDay         — основной cut-off limit для tool-calls
 *   - concurrentSse     — SSE-сессий per app
 *   - aiPerDay          — лимит на AI-explain (отдельный counter)
 *   - graceFraction     — 10 % grace выше дневного лимита перед hard cut-off
 */
export type Tier = 'FREE' | 'STANDARD' | 'PREMIUM' | 'UNLIMITED';
export interface TierLimits {
    reqPerDay: number;
    concurrentSse: number;
    aiPerDay: number;
    graceFraction: number;
}
export declare const TIER_LIMITS: Record<Tier, TierLimits>;
export interface QuotaDecision {
    /** True → запрос можно пропускать. */
    allowed: boolean;
    /** Сколько req осталось до дневного лимита (или Infinity для UNLIMITED). */
    remaining: number;
    /** True → клиент уже в grace-зоне (warning, но allowed). */
    overage?: boolean;
    /** Если !allowed — сколько секунд до сброса. */
    retryAfter?: number;
    /** Текущий tier (echo back). */
    tier: Tier;
}
/** Секунд до конца текущих UTC-суток. */
export declare function secondsUntilUtcMidnight(now?: Date): number;
/** Чистое решение: принимает текущий счётчик и tier, возвращает decision. */
export declare function decideQuota(currentUsed: number, tier: Tier): QuotaDecision;
/**
 * Чистое решение для AI-quota: принимает текущий AI-счётчик и tier.
 * Используется только для tools, помеченных как AI (например, `explain_error`).
 *
 * Семантика отличается от `decideQuota`: AI-quota — hard cut-off без grace
 * (генерация дорогая, нет смысла превышать).
 */
export declare function decideAiQuota(currentUsed: number, tier: Tier): QuotaDecision;
/** Список tool-имён, считающихся AI (используют отдельную AI-квоту). */
export declare const AI_TOOL_NAMES: ReadonlySet<string>;
export declare function isAiTool(toolName: string): boolean;
//# sourceMappingURL=limits.d.ts.map