/**
 * IDB Target Cache
 *
 * <architecture>
 * Caches IDB target information to avoid repeated `idb list-targets` calls.
 * Similar to SimulatorCache, tracks:
 * - Available targets (devices + simulators)
 * - Screen dimensions for coordinate validation
 * - Connection status (USB/WiFi for devices)
 * - Last used target for auto-detection
 * - Usage tracking for intelligent defaults
 * </architecture>
 */
export interface IDBTarget {
    udid: string;
    name: string;
    type: 'device' | 'simulator';
    state: 'Booted' | 'Shutdown';
    osVersion: string;
    architecture: string;
    screenDimensions: {
        width: number;
        height: number;
    };
    connectionType?: 'usb' | 'wifi';
    companionPort?: number;
    lastUsed?: number;
    successfulOperations: number;
}
/**
 * IDB Target Cache Manager
 *
 * Why: Avoid expensive `idb list-targets` calls on every operation.
 * Cache targets for 5 seconds (configurable) to balance performance with state accuracy.
 *
 * Note: Short TTL is critical because simulator boot state changes frequently during
 * development. A 60s TTL caused stale "Shutdown" data when simulators were actually "Booted",
 * blocking all IDB operations. 5 seconds provides fast cache while ensuring state accuracy.
 */
declare class IDBTargetCacheManager {
    private cache;
    /**
     * Get target by UDID, refreshing cache if stale
     *
     * Why: Primary method for accessing target info.
     * Auto-refreshes cache if TTL expired.
     *
     * @param udid - Target UDID
     * @returns IDBTarget with full details
     * @throws McpError if target not found
     */
    getTarget(udid: string): Promise<IDBTarget>;
    /**
     * Get last used target for auto-detection
     *
     * Why: Enable UDID auto-detection for better UX.
     * Prefers booted targets, then most recently used.
     *
     * @returns Last used booted target, or undefined if none
     */
    getLastUsedTarget(): Promise<IDBTarget | undefined>;
    /**
     * Find target by UDID (no error if not found)
     *
     * Why: Non-throwing version for existence checks.
     *
     * @param udid - Target UDID
     * @returns IDBTarget if found, undefined otherwise
     */
    findTargetByUdid(udid: string): Promise<IDBTarget | undefined>;
    /**
     * List all cached targets
     *
     * Why: Support idb-targets tool for listing available targets.
     *
     * @param filters - Optional filters for state, type
     * @returns Array of IDBTargets
     */
    listTargets(filters?: {
        state?: 'Booted' | 'Shutdown';
        type?: 'device' | 'simulator';
    }): Promise<IDBTarget[]>;
    /**
     * Record successful operation for usage tracking
     *
     * Why: Track which targets are actively used for intelligent defaults.
     *
     * @param udid - Target UDID
     */
    recordSuccess(udid: string): void;
    /**
     * Clear cache to force refresh
     *
     * Why: Support manual cache invalidation for troubleshooting.
     */
    clearCache(): void;
    /**
     * Set cache TTL
     *
     * Why: Allow runtime configuration of cache duration.
     *
     * @param ttlMs - Time-to-live in milliseconds
     */
    setCacheTTL(ttlMs: number): void;
    /**
     * Get cache statistics
     *
     * Why: Support cache-get-stats tool for monitoring.
     *
     * @returns Cache stats including target count, TTL, last fetch time
     */
    getCacheStats(): {
        targetCount: number;
        ttl: number;
        lastFetched: number;
        cacheAge: number;
    };
    /**
     * Fetch screen dimensions for a target using idb describe
     *
     * Why: idb list-targets doesn't include screen_dimensions.
     * We need to call idb describe to get this information.
     *
     * @param udid - Target UDID
     * @param target - Target object to update
     */
    private fetchScreenDimensions;
    /**
     * Refresh cache from IDB if stale
     *
     * Why: Internal method to maintain cache freshness.
     * Called automatically by public methods.
     */
    private refreshIfStale;
    /**
     * Force cache refresh from IDB
     *
     * Why: Fetch latest target list from IDB.
     * Parses JSON output and populates cache.
     */
    private refreshCache;
}
export declare const IDBTargetCache: IDBTargetCacheManager;
export {};
//# sourceMappingURL=idb-target-cache.d.ts.map