/**
 * Attachment tool definitions shared across providers.
 * These definitions describe the metadata and business logic for attachment helpers
 * without binding to a particular agent SDK. Providers can adapt the definitions
 * into concrete tool implementations for their runtime (OpenAI Agents, MCP, etc.).
 */
import type { AdditionalPromptDefinition } from '../types/prompts';
import type { AttachmentCache, AttachmentReferenceMap } from '../hooks/useChatAgent/useChatAgent.types';
export declare const ATTACHMENT_TOOLS_PREAMBLE = "\n  The user can attach files to the conversation using the chat UI.\n  Only use the tools \"get_last_file\", \"list_cached_files\", and \"get_cached_file\" to access information about these attachments.\n  Do not make up file names or attachment ids; only use ones that have been provided by the tools.\n  Never attempt to access or retrieve the contents of a file directly; these tools only provide metadata about the files.\n  If the user references a file but does not specify which one, use \"get_last_file\" to retrieve information about the most recently added attachment.\n  If the user wants to see a list of their uploaded files, use \"list_cached_files\" to get metadata for all attachments in the current conversation.\n  To get information about a specific attachment, use \"get_cached_file\" with the attachment id provided by \"list_cached_files\".\n";
export type StrictToolSchema<T extends Record<string, unknown>> = {
    type: 'object';
    properties: {
        [K in keyof T]: Record<string, unknown>;
    };
    required: (keyof T)[];
    additionalProperties: false;
};
export interface AttachmentToolContext<Definition extends AdditionalPromptDefinition = AdditionalPromptDefinition> {
    attachments?: AttachmentReferenceMap;
    additionalPrompts?: Definition[];
}
export interface AttachmentToolRuntime<Definition extends AdditionalPromptDefinition = AdditionalPromptDefinition> extends AttachmentToolContext<Definition> {
    getAttachmentCache?: () => AttachmentCache | AttachmentReferenceMap | undefined;
}
export type AttachmentToolApprovalFunction = (runContext: unknown, input: Record<string, unknown> | undefined, callId?: string) => Promise<boolean>;
export interface AttachmentToolDefinition<Definition extends AdditionalPromptDefinition = AdditionalPromptDefinition> {
    name: string;
    description: string;
    parameters: StrictToolSchema<Record<string, Record<string, unknown>>>;
    needsApproval?: AttachmentToolApprovalFunction;
    handler: (input: Record<string, unknown> | undefined, runtime: AttachmentToolRuntime<Definition>) => Promise<Record<string, unknown>>;
}
export declare const createAttachmentToolDefinitions: <Definition extends AdditionalPromptDefinition = AdditionalPromptDefinition>() => AttachmentToolDefinition<Definition>[];
//# sourceMappingURL=attachmentTools.d.ts.map