/** * IMP-917 rate gate: when the signed-in user hits a plan rate limit * (backend responds HTTP 429 code=RATE_LIMITED with details.retryAfterMs), * every bridge process on this machine pauses outbound requests until the * window resets - then resumes automatically. * * Design guarantees: * - Shared state via ~/.teamshare/rate-limit.json so the daemon and spawned * CLI subprocesses all observe the same gate. * - Waits are async sleeps (never block the event loop). * - MAX_PAUSE_MS caps auto-waiting: longer limits fail FAST with an enriched * error so sessions never hang for hours. */ export declare const DEFAULT_MAX_PAUSE_MS: number; export interface GateState { scope?: string; resetAt: number; seenAt: number; } /** Max auto-pause window (ms) - overridable for tests/ops. */ export declare function maxPauseMs(): number; /** * Parse the retry wait out of a RATE_LIMITED ApiError: * 1. details.retryAfterMs / retryAfterSec (machine-readable, preferred) * 2. "Try again in N seconds/minutes/hours" in the message * 3. 60s default */ export declare function parseRetryAfterMs(err: unknown): number; /** True when the error is a user rate-limit hit (HTTP 429 RATE_LIMITED). */ export declare function isRateLimitError(err: unknown): boolean; /** * Record a fresh limit hit. Waits are capped at maxPauseMs + jitter so the * shared file never asks anyone to sleep for hours. */ export declare function noteRateLimit(err: unknown, now?: number): GateState; /** * Remaining ms until the shared gate lifts (0 when clear/expired). Reads the * file every call so subprocesses stay in sync. */ export declare function gateRemainingMs(now?: number): number; /** Async-sleep until the shared gate lifts. Returns ms actually waited. */ export declare function waitIfGated(log?: (text: string) => void, now?: number): Promise;