import { type QuotaBlock, type QuotaReport, type QuotaWarning, type QuotaWindow } from '../../../spi/quota-provider.js'; import { type AgentBackend } from '../backend.js'; export interface UseQuotaOptions { /** Default: the enclosing ``'s. Must implement `getQuota`. */ backend?: AgentBackend; /** `false` holds the request. Default `true`. */ enabled?: boolean; /** Re-read every `pollMs` ms as well. Default: only on mount, after runs, and on `refresh`. */ pollMs?: number; } export interface QuotaState { /** The full report, once loaded. */ report: QuotaReport | undefined; windows: QuotaWindow[]; /** The `day` / `month` windows, when the server reports them. */ day: QuotaWindow | undefined; month: QuotaWindow | undefined; /** The window that blocks sends, or `null` — pass it to `useAgentChat({ blocked })`. */ blocked: QuotaBlock | null; /** * The soft limit: the fullest window past its `warnAt` (`{ period, ratio, reason? }`), or `null`. * The server's `warning`, else derived from the windows; never set while `blocked`. */ warning: QuotaWarning | null; isLoading: boolean; error: Error | null; refresh: () => Promise; } /** * The caller's budget (`GET /quota`): every window's usage against its ceilings, and which * one — if any — blocks sends. Re-read after every run a chat on the same backend settles, so a * meter moves with the conversation. Headless: draw the meter yourself. */ export declare function useQuota(options?: UseQuotaOptions): QuotaState; //# sourceMappingURL=use-quota.d.ts.map