export interface ManagedResource {
    id: string;
    type: 'interval' | 'timeout' | 'process' | 'custom';
    resource: any;
    cleanup: () => void | Promise<void>;
    createdAt: number;
    description?: string;
}
export interface ResourceManagerOptions {
    autoCleanupOnExit?: boolean;
    maxAge?: number;
    maxResources?: number;
}
export declare class ResourceManager {
    private static instance;
    private resources;
    private cleanupInterval?;
    private options;
    private constructor();
    static getInstance(options?: ResourceManagerOptions): ResourceManager;
    createInterval(callback: () => void | Promise<void>, delay: number, description?: string): {
        id: string;
        intervalId: NodeJS.Timeout;
    };
    createTimeout(callback: () => void | Promise<void>, delay: number, description?: string): {
        id: string;
        timeoutId: NodeJS.Timeout;
    };
    registerResource(type: 'process' | 'custom', resource: any, cleanup: () => void | Promise<void>, description?: string): string;
    cleanup(id: string): Promise<boolean>;
    cleanupByType(type: ManagedResource['type']): Promise<number>;
    cleanupAll(): Promise<number>;
    getStats(): {
        total: number;
        byType: Record<string, number>;
        oldestAge: number;
        averageAge: number;
    };
    listResources(): ManagedResource[];
    createScope(description?: string): ResourceScope;
    private generateId;
    private setupExitHandlers;
    private performPeriodicCleanup;
    private enforceResourceLimits;
}
export declare class ResourceScope {
    private resourceIds;
    private manager;
    private description?;
    constructor(manager: ResourceManager, description?: string);
    createInterval(callback: () => void | Promise<void>, delay: number, description?: string): {
        id: string;
        intervalId: NodeJS.Timeout;
    };
    createTimeout(callback: () => void | Promise<void>, delay: number, description?: string): {
        id: string;
        timeoutId: NodeJS.Timeout;
    };
    registerResource(type: 'process' | 'custom', resource: any, cleanup: () => void | Promise<void>, description?: string): string;
    cleanup(): Promise<number>;
    getResourceCount(): number;
}
export declare const resourceManager: ResourceManager;
