/** * Message edit scheduler - throttles message edits to avoid rate limits. * Adapted from IdleHands. */ export type EditErrorClass = "retry" | "fatal" | "ignore"; export type ClassifiedError = { kind: EditErrorClass; retryAfterMs?: number; message?: string; }; export type MessageSchedulerOptions = { /** How often to check for updates (default: 1500ms) */ intervalMs?: number; /** Max backoff on rate limits (default: 30000ms) */ maxBackoffMs?: number; /** Jitter for backoff (default: 500ms) */ jitterMs?: number; }; export type MessageSchedulerCallbacks = { /** Render current content to string */ render: () => string; /** Apply text to the message (edit API call) */ apply: (text: string) => Promise; /** Check if content has changed since last render */ isDirty: () => boolean; /** Clear dirty flag after successful apply */ clearDirty: () => void; /** Classify an error for retry/fatal/ignore */ classifyError?: (error: unknown) => ClassifiedError; }; export declare class MessageEditScheduler { private readonly intervalMs; private readonly maxBackoffMs; private readonly jitterMs; private readonly callbacks; private readonly classifyError; private timer; private backoffMs; private lastText; private stopped; private inFlight; constructor(callbacks: MessageSchedulerCallbacks, opts?: MessageSchedulerOptions); start(): void; stop(): void; /** Force an immediate edit (bypasses throttle, used for finalization) */ flush(): Promise; private tick; }