import { AssistantDefinition, FunctionTool } from "./definition";
import { Assistant, AssistantCreateParams, OpenAI } from "./types/openai";
export interface LinkedDefinition<T extends Record<string, FunctionTool>> extends AssistantDefinition<T> {
    openai: OpenAI;
    id: string;
    remote: Assistant;
}
export type LinkOptions = {
    /** pass a OpenAI id to retrieve by id instead of `metadata-->__key__` search */
    assistantId?: string;
    /** Will create assistant if not found. Default: `true` */
    allowCreate?: boolean;
    /** Run after creating assistant */
    afterCreate?: (assistant: Assistant) => void;
    /** What to do if drift is detected.  Default: `update` */
    updateMode?: "update" | "throw" | "skip";
    /** Runs before updating an assistant. Return false to skip update */
    beforeUpdate?: (diff: string[], local: AssistantCreateParams, remote: Assistant) => boolean;
    /** Runs after updating an assistant */
    afterUpdate?: (assistant: Assistant) => void;
    fileMode?: "update" | "throw" | "skip";
    /** Deletes files that are no longer linked to the assistant after syncing */
    pruneFiles?: boolean;
};
export declare const link: <T extends Record<string, FunctionTool>>(definition: AssistantDefinition<T>) => (openai: OpenAI, options: LinkOptions) => Promise<LinkedDefinition<T>>;
//# sourceMappingURL=link.d.ts.map