/** * 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(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; /** * 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;