/**
 * Message Queue with Steer/Followup/Collect Modes
 *
 * OpenClaw-inspired message handling during agent execution.
 *
 * Modes:
 * - steer: New messages interrupt the current execution (injected as user message)
 * - followup: Messages are queued and processed after the current turn completes
 * - collect: Messages are batched into a single string for the next turn
 */
import { EventEmitter } from 'events';
export type MessageQueueMode = 'steer' | 'followup' | 'collect';
export interface QueuedMessage {
    /** Message content */
    content: string;
    /** Source identifier (e.g., 'user', 'telegram', 'discord') */
    source: string;
    /** When the message was enqueued */
    timestamp: Date;
}
export declare class MessageQueue extends EventEmitter {
    private mode;
    private queue;
    private processing;
    /**
     * Set the queue mode
     */
    setMode(mode: MessageQueueMode): void;
    /**
     * Get current mode
     */
    getMode(): MessageQueueMode;
    /**
     * Enqueue a message
     */
    enqueue(msg: QueuedMessage): void;
    /**
     * Check if a steering message is available (steer mode)
     */
    hasSteeringMessage(): boolean;
    /**
     * Consume the first steering message (steer mode)
     */
    consumeSteeringMessage(): QueuedMessage | null;
    /**
     * Drain all queued messages (followup mode)
     */
    drain(): QueuedMessage[];
    /**
     * Collect all queued messages into a single string (collect mode)
     */
    collect(): string;
    /**
     * Signal that agent is starting processing
     */
    startProcessing(): void;
    /**
     * Signal that agent has finished processing
     */
    endProcessing(): void;
    /**
     * Check if there are pending messages
     */
    hasPendingMessages(): boolean;
    /**
     * Get the number of pending messages
     */
    get length(): number;
    /**
     * Check if the agent is currently processing
     */
    isProcessing(): boolean;
    /**
     * Clear the queue
     */
    clear(): void;
}
