import { Run } from '../../context.cjs';
import { Workflow, WorkflowRunOptions, WorkflowRun } from './workflow.cjs';
import { BaseMessage } from '../../llms/primitives/message.cjs';
import { AnyTool } from '../../tools/base.cjs';
import { AnyChatLLM } from '../../llms/chat.cjs';
import { ReadOnlyMemory } from '../../memory/base.cjs';
import { z } from 'zod';
import { a as BaseAgent } from '../../base-CMzON_2C.cjs';
import { BeeRunInput, BeeRunOutput, BeeRunOptions, BeeAgentExecutionConfig } from '../../agents/bee/types.cjs';
import '../../emitter-BWtGHYn0.cjs';
import '../../internals/types.cjs';
import '../../internals/helpers/guards.cjs';
import '../../internals/serializable.cjs';
import '../../internals/helpers/promise.cjs';
import '../../errors.cjs';
import 'ajv';
import 'promise-based-task';
import '../../cache/base.cjs';
import '../../internals/helpers/schema.cjs';
import 'zod-to-json-schema';
import '../../llms/base.cjs';
import '../../agents/bee/prompts.cjs';
import '../../template.cjs';
import '../../agents/parsers/linePrefix.cjs';
import '../../agents/parsers/field.cjs';
import '@streamparser/json';
import 'jsonrepair/stream';
import '../../agents/parsers/errors.cjs';

type AgentInstance = BaseAgent<BeeRunInput, BeeRunOutput, BeeRunOptions>;
type AgentFactory = (memory: ReadOnlyMemory) => AgentInstance | Promise<AgentInstance>;
interface AgentFactoryInput {
    name: string;
    llm: AnyChatLLM;
    instructions?: string;
    tools?: AnyTool[];
    execution?: BeeAgentExecutionConfig;
}
declare class AgentWorkflow {
    protected readonly workflow: Workflow<z.ZodObject<{
        messages: z.ZodArray<z.ZodType<BaseMessage, z.ZodTypeDef, BaseMessage>, "many">;
        finalAnswer: z.ZodOptional<z.ZodString>;
        newMessages: z.ZodDefault<z.ZodArray<z.ZodType<BaseMessage, z.ZodTypeDef, BaseMessage>, "many">>;
    }, "strip", z.ZodTypeAny, {
        messages: BaseMessage[];
        newMessages: BaseMessage[];
        finalAnswer?: string | undefined;
    }, {
        messages: BaseMessage[];
        finalAnswer?: string | undefined;
        newMessages?: BaseMessage[] | undefined;
    }>, z.ZodObject<{
        messages: z.ZodArray<z.ZodType<BaseMessage, z.ZodTypeDef, BaseMessage>, "many">;
        finalAnswer: z.ZodString;
        newMessages: z.ZodDefault<z.ZodArray<z.ZodType<BaseMessage, z.ZodTypeDef, BaseMessage>, "many">>;
    }, "strip", z.ZodTypeAny, {
        messages: BaseMessage[];
        finalAnswer: string;
        newMessages: BaseMessage[];
    }, {
        messages: BaseMessage[];
        finalAnswer: string;
        newMessages?: BaseMessage[] | undefined;
    }>, string>;
    static readonly schema: z.ZodObject<{
        messages: z.ZodArray<z.ZodType<BaseMessage, z.ZodTypeDef, BaseMessage>, "many">;
        finalAnswer: z.ZodOptional<z.ZodString>;
        newMessages: z.ZodDefault<z.ZodArray<z.ZodType<BaseMessage, z.ZodTypeDef, BaseMessage>, "many">>;
    }, "strip", z.ZodTypeAny, {
        messages: BaseMessage[];
        newMessages: BaseMessage[];
        finalAnswer?: string | undefined;
    }, {
        messages: BaseMessage[];
        finalAnswer?: string | undefined;
        newMessages?: BaseMessage[] | undefined;
    }>;
    constructor(name?: string);
    run(messages: BaseMessage[], options?: WorkflowRunOptions<string>): Run<WorkflowRun<z.ZodObject<{
        messages: z.ZodArray<z.ZodType<BaseMessage, z.ZodTypeDef, BaseMessage>, "many">;
        finalAnswer: z.ZodOptional<z.ZodString>;
        newMessages: z.ZodDefault<z.ZodArray<z.ZodType<BaseMessage, z.ZodTypeDef, BaseMessage>, "many">>;
    }, "strip", z.ZodTypeAny, {
        messages: BaseMessage[];
        newMessages: BaseMessage[];
        finalAnswer?: string | undefined;
    }, {
        messages: BaseMessage[];
        finalAnswer?: string | undefined;
        newMessages?: BaseMessage[] | undefined;
    }>, z.ZodObject<{
        messages: z.ZodArray<z.ZodType<BaseMessage, z.ZodTypeDef, BaseMessage>, "many">;
        finalAnswer: z.ZodString;
        newMessages: z.ZodDefault<z.ZodArray<z.ZodType<BaseMessage, z.ZodTypeDef, BaseMessage>, "many">>;
    }, "strip", z.ZodTypeAny, {
        messages: BaseMessage[];
        finalAnswer: string;
        newMessages: BaseMessage[];
    }, {
        messages: BaseMessage[];
        finalAnswer: string;
        newMessages?: BaseMessage[] | undefined;
    }>, string>, Workflow<z.ZodObject<{
        messages: z.ZodArray<z.ZodType<BaseMessage, z.ZodTypeDef, BaseMessage>, "many">;
        finalAnswer: z.ZodOptional<z.ZodString>;
        newMessages: z.ZodDefault<z.ZodArray<z.ZodType<BaseMessage, z.ZodTypeDef, BaseMessage>, "many">>;
    }, "strip", z.ZodTypeAny, {
        messages: BaseMessage[];
        newMessages: BaseMessage[];
        finalAnswer?: string | undefined;
    }, {
        messages: BaseMessage[];
        finalAnswer?: string | undefined;
        newMessages?: BaseMessage[] | undefined;
    }>, z.ZodObject<{
        messages: z.ZodArray<z.ZodType<BaseMessage, z.ZodTypeDef, BaseMessage>, "many">;
        finalAnswer: z.ZodString;
        newMessages: z.ZodDefault<z.ZodArray<z.ZodType<BaseMessage, z.ZodTypeDef, BaseMessage>, "many">>;
    }, "strip", z.ZodTypeAny, {
        messages: BaseMessage[];
        finalAnswer: string;
        newMessages: BaseMessage[];
    }, {
        messages: BaseMessage[];
        finalAnswer: string;
        newMessages?: BaseMessage[] | undefined;
    }>, string>, readonly [{
        messages: BaseMessage[];
        finalAnswer?: string | undefined;
        newMessages?: BaseMessage[] | undefined;
    }, WorkflowRunOptions<string>]>;
    addAgent(agent: AgentInstance | AgentFactory | AgentFactoryInput): this;
    delAgent(name: string): Workflow<z.ZodObject<{
        messages: z.ZodArray<z.ZodType<BaseMessage, z.ZodTypeDef, BaseMessage>, "many">;
        finalAnswer: z.ZodOptional<z.ZodString>;
        newMessages: z.ZodDefault<z.ZodArray<z.ZodType<BaseMessage, z.ZodTypeDef, BaseMessage>, "many">>;
    }, "strip", z.ZodTypeAny, {
        messages: BaseMessage[];
        newMessages: BaseMessage[];
        finalAnswer?: string | undefined;
    }, {
        messages: BaseMessage[];
        finalAnswer?: string | undefined;
        newMessages?: BaseMessage[] | undefined;
    }>, z.ZodObject<{
        messages: z.ZodArray<z.ZodType<BaseMessage, z.ZodTypeDef, BaseMessage>, "many">;
        finalAnswer: z.ZodString;
        newMessages: z.ZodDefault<z.ZodArray<z.ZodType<BaseMessage, z.ZodTypeDef, BaseMessage>, "many">>;
    }, "strip", z.ZodTypeAny, {
        messages: BaseMessage[];
        finalAnswer: string;
        newMessages: BaseMessage[];
    }, {
        messages: BaseMessage[];
        finalAnswer: string;
        newMessages?: BaseMessage[] | undefined;
    }>, never>;
    protected _createFactory(input: AgentFactoryInput): AgentFactory;
    protected _add(name: string, factory: AgentFactory): this;
}

export { AgentWorkflow };
