/**
 * Base Agent Class
 *
 * Abstract base class for all specialized agents in the multi-agent system.
 * Provides common functionality for LLM interaction, tool execution, and messaging.
 */
import { EventEmitter } from "events";
import { CodeBuddyClient, CodeBuddyMessage, CodeBuddyTool } from "../../codebuddy/client.js";
import { AgentRole, AgentConfig, AgentTask, AgentExecutionResult, AgentMessage, AgentFeedback, TaskArtifact, SharedContext, ToolExecutor } from "./types.js";
/**
 * Abstract base class for all agents
 */
export declare abstract class BaseAgent extends EventEmitter {
    protected config: AgentConfig;
    protected client: CodeBuddyClient;
    protected messages: CodeBuddyMessage[];
    protected isRunning: boolean;
    protected currentTask: AgentTask | null;
    protected artifacts: TaskArtifact[];
    protected toolsUsed: string[];
    protected rounds: number;
    protected startTime: number;
    constructor(config: AgentConfig, apiKey: string, baseURL?: string);
    /**
     * Initialize the system prompt with agent-specific instructions
     */
    protected initializeSystemPrompt(): void;
    /**
     * Build the complete system prompt for this agent
     */
    protected buildSystemPrompt(): string;
    /**
     * Execute a task assigned to this agent
     */
    execute(task: AgentTask, context: SharedContext, tools: CodeBuddyTool[], executeTool: ToolExecutor): Promise<AgentExecutionResult>;
    /**
     * Build the task-specific prompt
     */
    protected buildTaskPrompt(task: AgentTask, context: SharedContext): string;
    /**
     * Filter tools based on agent's allowed tools
     */
    protected filterTools(tools: CodeBuddyTool[]): CodeBuddyTool[];
    /**
     * Run the main agent loop
     */
    protected runAgentLoop(tools: CodeBuddyTool[], executeTool: ToolExecutor): Promise<string>;
    /**
     * Parse artifacts from the output
     */
    protected parseArtifacts(output: string): void;
    /**
     * Parse feedback from the output
     */
    protected parseFeedback(output: string, taskId: string): AgentFeedback[];
    /**
     * Send a message to another agent
     */
    sendMessage(to: AgentRole | "all", type: AgentMessage["type"], content: string, data?: unknown): AgentMessage;
    /**
     * Receive a message from another agent
     */
    receiveMessage(message: AgentMessage): void;
    /**
     * Stop the agent
     */
    stop(): void;
    /**
     * Get agent configuration
     */
    getConfig(): AgentConfig;
    /**
     * Get agent role
     */
    getRole(): AgentRole;
    /**
     * Check if agent has a specific capability
     */
    hasCapability(capability: string): boolean;
    /**
     * Reset agent state for new task
     */
    reset(): void;
    /**
     * Abstract method: Each agent must implement its specific behavior
     */
    abstract getSpecializedPrompt(): string;
}
/**
 * Create a unique ID
 */
export declare function createId(prefix?: string): string;
