import { ToolDefinition } from '../types/tool-types.js';
export type ToolHandler = (args: any) => Promise<any>;
export type ToolLoader = () => Promise<ToolHandler>;
export interface ToolManifest {
    version: string;
    generated: string;
    categories: Record<string, CategoryInfo>;
    tools: Record<string, ToolInfo>;
}
export interface CategoryInfo {
    displayName: string;
    description: string;
    tools: string[];
}
export interface ToolInfo {
    category: string;
    operation: string;
    description: string;
    requiredParams: string[];
    optionalParams: string[];
    implementation: string;
}
/**
 * Dynamic tool registry that supports lazy loading
 */
export declare class ToolRegistry {
    private manifest;
    private toolLoaders;
    private loadedHandlers;
    private enabledCategories;
    private maxLoadedHandlers;
    private handlerAccessCount;
    private lastAccessTime;
    private customTools;
    constructor(enabledCategories?: string[]);
    /**
     * Load tool manifest
     */
    loadManifest(manifestPath: string): void;
    /**
     * Register a tool loader function
     */
    registerLoader(toolName: string, loader: ToolLoader): void;
    /**
     * Register tool loaders from manifest
     */
    registerFromManifest(): Promise<void>;
    /**
     * Register a custom tool (not from manifest/OpenAPI)
     */
    registerCustomTool(name: string, tool: ToolDefinition): void;
    /**
     * Get tool definitions for enabled categories
     */
    getToolDefinitions(): Promise<ToolDefinition[]>;
    /**
     * Execute a tool by name
     */
    executeTool(toolName: string, args: any): Promise<any>;
    /**
     * Update enabled categories at runtime
     */
    updateEnabledCategories(categories: string[]): void;
    /**
     * Get available categories
     */
    getCategories(): CategoryInfo[];
    /**
     * Get tools for a specific category
     */
    getToolsForCategory(category: string): string[];
    /**
     * Cleanup least used handlers to prevent memory leaks
     */
    private cleanupLeastUsedHandlers;
    /**
     * Clear all loaded handlers (for testing or manual cleanup)
     */
    clearLoadedHandlers(): void;
}
