import { Agent } from "./agent";
import { Task } from "./task";
import { Model as OpenAIModel } from "./models/openai";
import { Model as ClaudeModel } from "./models/claude";
type MemoryTrue = {
    memory: true;
};
type MemoryFalse = {
    memory: false;
};
type MemoryNotSet = {
    memory?: undefined;
};
type ProcessHierarchical = {
    process: "hierarchical";
};
type ProcessSequential = {
    process: "sequential";
};
type ProcessNotSet = {
    process?: undefined;
};
type AgencyProps = {
    agents: ReturnType<typeof Agent>[];
    tasks: ReturnType<typeof Task>[];
    llm?: OpenAIModel | ClaudeModel;
    process?: "sequential" | "hierarchical";
    memory?: boolean;
    humanFeedback?: boolean;
    outFile?: string;
    selfReflect?: boolean;
} & ((MemoryTrue & {
    resources?: string[];
}) | (MemoryFalse & {
    resources?: never;
}) | (MemoryNotSet & {
    resources?: never;
})) & ((ProcessHierarchical & {
    llm: OpenAIModel;
}) | (ProcessSequential & {
    llm?: never;
}) | (ProcessNotSet & {
    llm: OpenAIModel;
}) | (ProcessHierarchical & {
    llm: ClaudeModel;
}) | (ProcessNotSet & {
    llm: ClaudeModel;
}));
type UserMessage = {
    role: "user" | "assistant";
    content: string;
};
type HistoryItem = UserMessage;
export type History = HistoryItem[];
export declare const Agency: ({ agents, tasks, llm, process, memory, resources, humanFeedback, outFile, selfReflect, }: AgencyProps) => {
    kickoff: () => Promise<string>;
    execute: (prompt: string, history?: History) => Promise<string>;
    executeStream: (prompt: string, history?: History) => Promise<AsyncIterableIterator<string>>;
};
export {};
//# sourceMappingURL=agency.d.ts.map