/**
 * Function Registry - Register and manage custom functions for Cline
 *
 * This allows users to register their own JavaScript functions that can be
 * called by the AI assistant like built-in tools or MCP server functions.
 */
export interface FunctionParameter {
    name: string;
    type: "string" | "number" | "boolean" | "object" | "array";
    description: string;
    required?: boolean;
    enum?: string[];
    properties?: Record<string, FunctionParameter>;
    items?: FunctionParameter;
}
export interface FunctionDefinition {
    name: string;
    description: string;
    parameters: FunctionParameter[];
    examples?: string[];
    category?: string;
}
export interface RegisteredFunction {
    definition: FunctionDefinition;
    implementation: (...args: any[]) => Promise<any> | any;
    metadata: {
        registeredAt: Date;
        callCount: number;
        lastCalled?: Date;
    };
}
export declare class FunctionRegistry {
    private functions;
    /**
     * Register a new custom function
     */
    register(definition: FunctionDefinition, implementation: (...args: any[]) => Promise<any> | any): void;
    /**
     * Unregister a function
     */
    unregister(name: string): boolean;
    /**
     * Call a registered function
     */
    call(name: string, args: any[]): Promise<any>;
    /**
     * Get a function definition by name
     */
    getFunction(name: string): RegisteredFunction | undefined;
    /**
     * Get all registered functions
     */
    getAllFunctions(): RegisteredFunction[];
    /**
     * Get function names
     */
    getFunctionNames(): string[];
    /**
     * Get functions by category
     */
    getFunctionsByCategory(category: string): RegisteredFunction[];
    /**
     * Get function metadata/stats
     */
    getStats(): {
        totalFunctions: number;
        totalCalls: number;
        categories: Record<string, number>;
        mostUsed: {
            name: string;
            calls: number;
        } | null;
    };
    /**
     * Clear all registered functions
     */
    clear(): void;
    /**
     * Validate function definition
     */
    private validateDefinition;
    /**
     * Convert to tool definition format for AI
     */
    getToolDefinitions(): Array<{
        name: string;
        description: string;
        inputSchema: any;
    }>;
    /**
     * Convert parameters to JSON schema format
     */
    private parametersToSchema;
}
//# sourceMappingURL=function-registry.d.ts.map