import { LlmAgent, LlmAgentDefinition, TaskExecution, TaskExecutionDefinition, TaskExecutionEnvironment } from "../agents";
import { Nullable } from "../shared";
import { LlmTool, LlmToolConfiguration, LlmToolKit } from "../tools";
import { JorElTaskInput } from "./jorel";
import { JorElCoreStore } from "./jorel.core";
/**
 * Manages teams of agents for JorEl
 */
export declare class JorElAgentManager {
    readonly tools: LlmToolKit;
    readonly delegateToAgentToolName = "ask_agent";
    readonly transferToAgentToolName = "handover_to_agent";
    private readonly _agents;
    constructor(_core: JorElCoreStore);
    /**
     * Change the default agent
     * @param value
     */
    set defaultAgentId(value: Nullable<string>);
    /**
     * Currently registered agents
     */
    get agents(): LlmAgent[];
    /**
     * Get the default agent
     */
    get defaultAgent(): Nullable<LlmAgent>;
    get logger(): import("..").LogService;
    /**
     * Get an agent by name
     * @param name
     */
    getAgent(name: string): Nullable<LlmAgent>;
    /**
     * Add an agent
     * @param agent Agent instance or definition
     */
    addAgent(agent: LlmAgent | LlmAgentDefinition): LlmAgent;
    /**
     * Remove an agent. Will also remove the agent from the allowed delegates of other agents
     * @param agent
     */
    removeAgent(agent: LlmAgent | string): JorElAgentManager;
    /**
     * Register tools for the agents to use (if allowed)
     * @param tools
     */
    addTools(tools: (LlmTool | LlmToolConfiguration)[] | LlmToolKit): JorElAgentManager;
    /**
     * Hydrate a task definition into a task execution
     * If a task execution is passed, it will be returned as a copy
     * @param taskOrDefinition
     */
    hydrateTask(taskOrDefinition: TaskExecution | TaskExecutionDefinition): TaskExecution;
    /**
     * Create a new task
     * @param task
     * @param config
     */
    createTask(task: JorElTaskInput, config?: {
        agent?: string;
    }): Promise<TaskExecution>;
    /**
     * Resume a task execution. Will
     * @param taskOrDefinition
     * @param env
     */
    resumeTask(taskOrDefinition: TaskExecution | TaskExecutionDefinition, env?: Omit<TaskExecutionEnvironment, "limits">): Promise<TaskExecution>;
    /**
     * Execute a task to completion, or until stop condition is met (limit, approval, failure)
     * @param taskOrDefinition
     * @param env
     */
    executeTask(taskOrDefinition: TaskExecution | TaskExecutionDefinition, env: TaskExecutionEnvironment): Promise<TaskExecution>;
}
