import type { SlackCall } from "./slack-access.js"; export declare const SLACK_THREAD_STATUS_HEARTBEAT_MS = 90000; export declare const SLACK_THREAD_LOADING_MESSAGES: readonly ["Schlepping...", "Combobulating...", "Vibing...", "Noodling...", "Percolating...", "Ruminating...", "Consulting the void...", "Asking the electrons...", "Reticulating splines...", "Consulting the rubber duck..."]; export declare const DEFAULT_SLACK_THREAD_STATUS = "is thinking\u2026"; export declare const SLACK_THREAD_SAFE_STATUSES: readonly ["is thinking…", "Reading context…", "Calling tool…", "Drafting reply…", "Checking Slack…"]; export interface SlackThreadStatusInput { slack: SlackCall; token: string; channelId: string; threadTs: string; status: string; loadingMessages?: readonly string[]; } export declare function setSlackThreadStatus(input: SlackThreadStatusInput): Promise; export interface SlackThreadStatusManagerDeps { slack: SlackCall; getBotToken: () => string; formatError: (error: unknown) => string; setInterval?: typeof setInterval; clearInterval?: typeof clearInterval; heartbeatMs?: number; logger?: Pick; maxActiveThreads?: number; maxConsecutiveFailures?: number; } export declare function normalizeSlackThreadStatus(status: string | undefined): string; export declare class SlackThreadStatusManager { private readonly deps; private readonly active; constructor(deps: SlackThreadStatusManagerDeps); begin(channelId: string, threadTs: string, status?: string): Promise; update(channelId: string, threadTs: string, status: string, options?: { startHeartbeat?: boolean; }): Promise; clear(channelId: string, threadTs: string): Promise; clearAll(): Promise; private heartbeat; private evictOldestIfNeeded; private stopHeartbeat; private trySet; }