import { EventEmitter } from 'eventemitter3';
import { AgentId, AgentMetadata, AgentRegistry, AgentCommunicationChannel, AgentLogger, AgentMetrics, AgentState, AgentHealth, AgentRequest, AgentResponse, AgentContext, AgentEventType, AgentStatus, RequestPriority, AgentLifecycle } from '../types/agent.js';
export declare abstract class BaseAgent extends EventEmitter implements AgentLifecycle {
    protected readonly metadata: AgentMetadata;
    protected readonly registry: AgentRegistry;
    protected readonly channel: AgentCommunicationChannel;
    protected readonly logger: AgentLogger;
    protected readonly metrics: AgentMetrics;
    protected state: AgentState;
    protected health: AgentHealth;
    protected startTime: Date;
    protected activeRequests: number;
    protected totalRequests: number;
    protected errors: number;
    protected heartbeatInterval?: NodeJS.Timeout;
    protected healthCheckInterval?: NodeJS.Timeout;
    constructor(metadata: AgentMetadata, registry: AgentRegistry, channel: AgentCommunicationChannel, logger: AgentLogger, metrics: AgentMetrics);
    initialize(): Promise<void>;
    start(): Promise<void>;
    stop(): Promise<void>;
    destroy(): Promise<void>;
    healthCheck(): Promise<AgentHealth>;
    protected abstract onInitialize(): Promise<void>;
    protected abstract onStart(): Promise<void>;
    protected abstract onStop(): Promise<void>;
    protected abstract onDestroy(): Promise<void>;
    protected abstract onHealthCheck(): Promise<AgentHealth>;
    protected abstract handleRequest(request: AgentRequest, context: AgentContext): Promise<any>;
    getId(): AgentId;
    getMetadata(): AgentMetadata;
    getState(): AgentState;
    getHealth(): AgentHealth;
    getUptime(): number;
    getStatus(): AgentStatus;
    protected setState(state: AgentState): void;
    protected setHealth(health: AgentHealth): void;
    protected emitEvent(type: AgentEventType, data: any): void;
    sendRequest(targetAgentId: AgentId, capability: string, payload: any, priority?: RequestPriority, timeout?: number): Promise<AgentResponse>;
    private handleIncomingRequest;
    private handleAgentEvent;
    private startHeartbeat;
    private startHealthChecks;
    private getStateValue;
    private getHealthValue;
}
//# sourceMappingURL=base-agent.d.ts.map