export type StatusReactionAdapter = {
    /** Add or replace emoji. `previousEmoji` allows Discord to remove the old one; WhatsApp ignores it. */
    sendReaction(emoji: string, previousEmoji: string | null): Promise<void>;
    /** Remove all reactions. WhatsApp sends empty string; Discord iterates and removes each. */
    clearReactions(knownEmojis: Set<string>, activeEmoji: string | null): Promise<void>;
};
export type StatusReactionController = {
    setQueued: () => Promise<void>;
    setThinking: () => Promise<void>;
    setTool: (toolName?: string) => Promise<void>;
    setDone: () => Promise<void>;
    setError: () => Promise<void>;
    clear: () => Promise<void>;
    restoreInitial: () => Promise<void>;
    /** Reset the terminal state so the controller can accept new phase transitions.
     *  Used when an error is set but processing continues (e.g. S2S→chained fallback). */
    resetTerminal: () => void;
};
export type StatusEmojiConfig = {
    /** Override emojis for each lifecycle phase. */
    phaseEmojis?: Partial<Record<StatusPhase, string>>;
    /** Per-tool emoji overrides. Key = tool name, value = emoji. */
    toolEmojis?: Record<string, string>;
};
declare const DEFAULTS: {
    readonly queued: "👀";
    readonly thinking: "🧠";
    readonly writing: "✏️";
    readonly coding: "💻";
    readonly web: "🌐";
    readonly tool: "🛠️";
    readonly done: "✅";
    readonly error: "❌";
    readonly stallSoft: "⏳";
    readonly stallHard: "⚠️";
};
export type StatusPhase = keyof typeof DEFAULTS;
export declare const STATUS_DEFAULTS: {
    readonly queued: "👀";
    readonly thinking: "🧠";
    readonly writing: "✏️";
    readonly coding: "💻";
    readonly web: "🌐";
    readonly tool: "🛠️";
    readonly done: "✅";
    readonly error: "❌";
    readonly stallSoft: "⏳";
    readonly stallHard: "⚠️";
};
export declare const STATUS_TIMING: {
    readonly DEBOUNCE_MS: 700;
    readonly STALL_SOFT_MS: 10000;
    readonly STALL_HARD_MS: 30000;
    readonly DONE_HOLD_MS: 1500;
    readonly ERROR_HOLD_MS: 2500;
};
export declare function resolvePhaseEmoji(phase: StatusPhase, emojiConfig?: StatusEmojiConfig): string;
export declare function resolveToolStatusEmoji(toolName: string | undefined, emojiConfig?: StatusEmojiConfig, options?: {
    useToolDisplayJson?: boolean;
}): string;
export declare function createStatusReactionController(params: {
    enabled: boolean;
    adapter: StatusReactionAdapter;
    initialEmoji: string;
    emojiConfig?: StatusEmojiConfig;
    useToolDisplayJson?: boolean;
    logTarget: string;
    channelLabel: string;
}): StatusReactionController;
export {};
