/**
 * Proactive Agent
 *
 * Enables the agent to initiate communication, send notifications,
 * and ask questions via channels.
 */
import { EventEmitter } from 'events';
export type MessagePriority = 'low' | 'normal' | 'high' | 'urgent';
export interface ProactiveMessage {
    channelType: 'telegram' | 'discord' | 'slack' | 'cli' | 'web' | 'api';
    channelId: string;
    message: string;
    priority: MessagePriority;
    requiresResponse?: boolean;
    timeoutMs?: number;
    metadata?: Record<string, unknown>;
}
export interface DeliveryResult {
    delivered: boolean;
    channelType: string;
    channelId: string;
    messageId?: string;
    error?: string;
    timestamp: Date;
}
export interface QuestionResult {
    answered: boolean;
    response: string | null;
    channelType: string;
    timedOut: boolean;
}
export declare class ProactiveAgent extends EventEmitter {
    private sendImpl;
    private questionResolvers;
    /**
     * Set the message sending implementation
     */
    setSendMethod(send: (msg: ProactiveMessage) => Promise<DeliveryResult>): void;
    /**
     * Send a proactive message
     */
    sendMessage(msg: ProactiveMessage): Promise<DeliveryResult>;
    /**
     * Ask a question and wait for response
     */
    askQuestion(question: string, options: string[], channelType: ProactiveMessage['channelType'], channelId: string, timeoutMs?: number): Promise<QuestionResult>;
    /**
     * Receive a response to a pending question
     */
    receiveResponse(questionId: string, response: string): boolean;
    /**
     * Notify task completion
     */
    notifyCompletion(taskId: string, result: {
        success: boolean;
        output?: string;
        error?: string;
    }, channelType: ProactiveMessage['channelType'], channelId: string): Promise<DeliveryResult>;
    /**
     * Get pending question count
     */
    getPendingQuestions(): number;
}
export declare function getProactiveAgent(): ProactiveAgent;
export declare function resetProactiveAgent(): void;
