/**
 * Extension Slot System
 *
 * Slot exclusivity for capabilities that allow only one active implementation.
 * Some capabilities (memory backend, TTS provider) can only have one active implementation.
 */
export type SlotKey = 'memory' | 'tts' | 'imageGeneration' | 'webSearch';
export interface SlotClaim {
    pluginId: string;
    instance: unknown;
    claimedAt: Date;
}
export interface SlotConfig {
    /** Slot key */
    key: SlotKey;
    /** Preferred plugin ID (from config) */
    preferredPlugin?: string;
}
/**
 * Manages exclusive slots for extensions.
 * Ensures only one plugin can claim a specific slot at a time.
 */
export declare class SlotRegistry {
    private slots;
    /**
     * Claim a slot for a plugin
     * @returns true if claim succeeded, false if slot already taken
     */
    claim(key: SlotKey, pluginId: string, instance: unknown): boolean;
    /**
     * Release a slot
     * @returns true if released, false if not owned by the plugin
     */
    release(key: SlotKey, pluginId: string): boolean;
    /**
     * Get the instance in a slot
     */
    get<T>(key: SlotKey): T | undefined;
    /**
     * Check if a slot is claimed
     */
    isClaimed(key: SlotKey): boolean;
    /**
     * Get which plugin claimed a slot
     */
    getClaimant(key: SlotKey): string | undefined;
    /**
     * Get all claimed slots
     */
    getAllClaims(): Map<SlotKey, SlotClaim>;
    /**
     * Clear all slots (useful for testing or reset)
     */
    clear(): void;
    /**
     * Force release a slot (admin operation)
     */
    forceRelease(key: SlotKey): boolean;
}
/**
 * Register a new slot type (for extensibility)
 */
export declare function registerSlotType(key: SlotKey): void;
/**
 * Get all registered slot types
 */
export declare function getRegisteredSlotTypes(): SlotKey[];
export declare function getSlotRegistry(): SlotRegistry;
export declare function setSlotRegistry(registry: SlotRegistry): void;
