@affectively/aeon 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +10 -0
  2. package/dist/compression/index.cjs +580 -0
  3. package/dist/compression/index.cjs.map +1 -0
  4. package/dist/compression/index.d.cts +189 -0
  5. package/dist/compression/index.d.ts +189 -0
  6. package/dist/compression/index.js +573 -0
  7. package/dist/compression/index.js.map +1 -0
  8. package/dist/core/index.d.cts +70 -5
  9. package/dist/core/index.d.ts +70 -5
  10. package/dist/crypto/index.cjs +100 -0
  11. package/dist/crypto/index.cjs.map +1 -0
  12. package/dist/crypto/index.d.cts +407 -0
  13. package/dist/crypto/index.d.ts +407 -0
  14. package/dist/crypto/index.js +96 -0
  15. package/dist/crypto/index.js.map +1 -0
  16. package/dist/distributed/index.cjs +420 -23
  17. package/dist/distributed/index.cjs.map +1 -1
  18. package/dist/distributed/index.d.cts +901 -2
  19. package/dist/distributed/index.d.ts +901 -2
  20. package/dist/distributed/index.js +420 -23
  21. package/dist/distributed/index.js.map +1 -1
  22. package/dist/index.cjs +1222 -55
  23. package/dist/index.cjs.map +1 -1
  24. package/dist/index.d.cts +11 -811
  25. package/dist/index.d.ts +11 -811
  26. package/dist/index.js +1221 -56
  27. package/dist/index.js.map +1 -1
  28. package/dist/offline/index.cjs +419 -0
  29. package/dist/offline/index.cjs.map +1 -0
  30. package/dist/offline/index.d.cts +148 -0
  31. package/dist/offline/index.d.ts +148 -0
  32. package/dist/offline/index.js +415 -0
  33. package/dist/offline/index.js.map +1 -0
  34. package/dist/optimization/index.cjs +797 -0
  35. package/dist/optimization/index.cjs.map +1 -0
  36. package/dist/optimization/index.d.cts +347 -0
  37. package/dist/optimization/index.d.ts +347 -0
  38. package/dist/optimization/index.js +787 -0
  39. package/dist/optimization/index.js.map +1 -0
  40. package/dist/persistence/index.cjs +145 -0
  41. package/dist/persistence/index.cjs.map +1 -0
  42. package/dist/persistence/index.d.cts +63 -0
  43. package/dist/persistence/index.d.ts +63 -0
  44. package/dist/persistence/index.js +142 -0
  45. package/dist/persistence/index.js.map +1 -0
  46. package/dist/presence/index.cjs +489 -0
  47. package/dist/presence/index.cjs.map +1 -0
  48. package/dist/presence/index.d.cts +283 -0
  49. package/dist/presence/index.d.ts +283 -0
  50. package/dist/presence/index.js +485 -0
  51. package/dist/presence/index.js.map +1 -0
  52. package/dist/types-CMxO7QF0.d.cts +33 -0
  53. package/dist/types-CMxO7QF0.d.ts +33 -0
  54. package/dist/versioning/index.cjs +296 -14
  55. package/dist/versioning/index.cjs.map +1 -1
  56. package/dist/versioning/index.d.cts +66 -1
  57. package/dist/versioning/index.d.ts +66 -1
  58. package/dist/versioning/index.js +296 -14
  59. package/dist/versioning/index.js.map +1 -1
  60. package/package.json +51 -1
  61. package/dist/index-C_4CMV5c.d.cts +0 -1207
  62. package/dist/index-C_4CMV5c.d.ts +0 -1207
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/logger.ts","../../src/optimization/PrefetchingEngine.ts","../../src/optimization/BatchTimingOptimizer.ts","../../src/optimization/AdaptiveCompressionOptimizer.ts"],"names":["logger"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Aeon Logger Interface\n *\n * Provides a pluggable logging interface that can be configured\n * by consumers to integrate with their preferred logging solution.\n */\n\n/**\n * Logger interface that consumers can implement\n */\nexport interface Logger {\n debug: (...args: unknown[]) => void;\n info: (...args: unknown[]) => void;\n warn: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n}\n\n/**\n * Default console logger implementation\n */\nconst consoleLogger: Logger = {\n debug: (...args: unknown[]) => {\n // eslint-disable-next-line no-console\n console.debug('[AEON:DEBUG]', ...args);\n },\n info: (...args: unknown[]) => {\n // eslint-disable-next-line no-console\n console.info('[AEON:INFO]', ...args);\n },\n warn: (...args: unknown[]) => {\n // eslint-disable-next-line no-console\n console.warn('[AEON:WARN]', ...args);\n },\n error: (...args: unknown[]) => {\n // eslint-disable-next-line no-console\n console.error('[AEON:ERROR]', ...args);\n },\n};\n\n/**\n * No-op logger for production or when logging is disabled\n */\nconst noopLogger: Logger = {\n debug: () => {},\n info: () => {},\n warn: () => {},\n error: () => {},\n};\n\n/**\n * Current logger instance\n */\nlet currentLogger: Logger = consoleLogger;\n\n/**\n * Get the current logger instance\n */\nexport function getLogger(): Logger {\n return currentLogger;\n}\n\n/**\n * Set a custom logger implementation\n */\nexport function setLogger(logger: Logger): void {\n currentLogger = logger;\n}\n\n/**\n * Reset to the default console logger\n */\nexport function resetLogger(): void {\n currentLogger = consoleLogger;\n}\n\n/**\n * Disable all logging\n */\nexport function disableLogging(): void {\n currentLogger = noopLogger;\n}\n\n/**\n * Create a namespaced logger\n */\nexport function createNamespacedLogger(namespace: string): Logger {\n const logger = getLogger();\n return {\n debug: (...args: unknown[]) => logger.debug(`[${namespace}]`, ...args),\n info: (...args: unknown[]) => logger.info(`[${namespace}]`, ...args),\n warn: (...args: unknown[]) => logger.warn(`[${namespace}]`, ...args),\n error: (...args: unknown[]) => logger.error(`[${namespace}]`, ...args),\n };\n}\n\n// Export default logger for convenience\nexport const logger: Logger = {\n debug: (...args: unknown[]) => getLogger().debug(...args),\n info: (...args: unknown[]) => getLogger().info(...args),\n warn: (...args: unknown[]) => getLogger().warn(...args),\n error: (...args: unknown[]) => getLogger().error(...args),\n};\n","/**\n * Prefetching Engine (Phase 13)\n *\n * Predictively pre-compresses batches based on detected operation patterns.\n * Analyzes historical data to predict which operations are most likely to occur.\n */\n\nimport { getLogger } from '../utils/logger';\nimport type { Operation } from '../core/types';\n\nconst logger = getLogger();\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Pattern in operation sequence\n */\nexport interface OperationPattern {\n sequence: string[];\n frequency: number;\n probability: number;\n lastOccurred: number;\n avgIntervalMs: number;\n}\n\n/**\n * Prediction for next operations\n */\nexport interface OperationPrediction {\n operationType: string;\n probability: number;\n reason: string;\n shouldPrefetch: boolean;\n estimatedTimeMs: number;\n}\n\n/**\n * Prefetched batch\n */\nexport interface PrefetchedBatch {\n id: string;\n operationType: string;\n compressed: Uint8Array;\n compressedSize: number;\n originalSize: number;\n compressionRatio: number;\n compressed_at: number;\n created_at: number;\n ttl: number;\n expiresAt: number;\n hitCount: number;\n missCount: number;\n}\n\n/**\n * Prefetching statistics\n */\nexport interface PrefetchingStats {\n totalPrefetched: number;\n totalHits: number;\n totalMisses: number;\n totalOverwrites: number;\n hitRatio: number;\n bandwidthSaved: number;\n patternsDetected: number;\n predictionAccuracy: number;\n}\n\n// ============================================================================\n// Prefetching Engine\n// ============================================================================\n\nexport class PrefetchingEngine {\n private operationHistory: Array<{\n type: string;\n timestamp: number;\n size: number;\n }> = [];\n private patterns: Map<string, OperationPattern> = new Map();\n private prefetchCache: Map<string, PrefetchedBatch[]> = new Map();\n private maxHistoryEntries = 1000;\n private maxCachePerType = 5;\n private prefetchTTL = 5 * 60 * 1000; // 5 minutes\n private predictionThreshold = 0.3;\n private stats: PrefetchingStats = {\n totalPrefetched: 0,\n totalHits: 0,\n totalMisses: 0,\n totalOverwrites: 0,\n hitRatio: 0,\n bandwidthSaved: 0,\n patternsDetected: 0,\n predictionAccuracy: 0,\n };\n private lastPredictionTime = 0;\n private predictionInterval = 30 * 1000;\n\n constructor() {\n logger.debug('[PrefetchingEngine] Initialized', {\n ttl: this.prefetchTTL,\n threshold: this.predictionThreshold,\n });\n }\n\n /**\n * Record operation for pattern analysis\n */\n recordOperation(operationType: string, size: number): void {\n const now = Date.now();\n\n this.operationHistory.push({\n type: operationType,\n timestamp: now,\n size,\n });\n\n if (this.operationHistory.length > this.maxHistoryEntries) {\n this.operationHistory.shift();\n }\n\n // Clean expired prefetches periodically\n if (Math.random() < 0.1) {\n this.cleanExpiredPrefetches();\n }\n\n logger.debug('[PrefetchingEngine] Operation recorded', {\n type: operationType,\n size,\n historySize: this.operationHistory.length,\n });\n }\n\n /**\n * Analyze patterns in operation history\n */\n private analyzePatterns(): void {\n if (this.operationHistory.length < 5) {\n return;\n }\n\n const patterns = new Map<string, OperationPattern>();\n\n // Find 2-3 operation sequences\n for (let length = 2; length <= 3; length++) {\n for (let i = 0; i < this.operationHistory.length - length; i++) {\n const sequence = this.operationHistory\n .slice(i, i + length)\n .map((op) => op.type);\n const key = sequence.join(' → ');\n\n if (!patterns.has(key)) {\n patterns.set(key, {\n sequence,\n frequency: 0,\n probability: 0,\n lastOccurred: 0,\n avgIntervalMs: 0,\n });\n }\n\n const pattern = patterns.get(key)!;\n pattern.frequency++;\n pattern.lastOccurred = Date.now();\n }\n }\n\n // Calculate probabilities\n const totalSequences = this.operationHistory.length;\n\n for (const [key, pattern] of patterns.entries()) {\n pattern.probability = Math.min(1, pattern.frequency / totalSequences);\n }\n\n this.patterns = patterns;\n this.stats.patternsDetected = patterns.size;\n\n logger.debug('[PrefetchingEngine] Patterns analyzed', {\n patternsFound: patterns.size,\n });\n }\n\n /**\n * Predict next operations\n */\n predictNextOperations(recentOperations: Operation[]): OperationPrediction[] {\n const now = Date.now();\n\n if (now - this.lastPredictionTime > this.predictionInterval) {\n this.analyzePatterns();\n this.lastPredictionTime = now;\n }\n\n if (this.patterns.size === 0) {\n return [];\n }\n\n const predictions: OperationPrediction[] = [];\n const recentTypeSequence = recentOperations\n .slice(-3)\n .map((op) => op.type)\n .join(' → ');\n\n for (const [key, pattern] of this.patterns.entries()) {\n if (key.includes(recentTypeSequence)) {\n const nextType = pattern.sequence[pattern.sequence.length - 1];\n\n const prediction: OperationPrediction = {\n operationType: nextType,\n probability: pattern.probability,\n reason: `Detected pattern: ${key}`,\n shouldPrefetch: pattern.probability > this.predictionThreshold,\n estimatedTimeMs: pattern.avgIntervalMs,\n };\n\n predictions.push(prediction);\n }\n }\n\n // Deduplicate and sort\n const deduped = Array.from(\n new Map(predictions.map((p) => [p.operationType, p])).values(),\n ).sort((a, b) => b.probability - a.probability);\n\n logger.debug('[PrefetchingEngine] Predictions', {\n predictions: deduped.slice(0, 3).map((p) => ({\n type: p.operationType,\n probability: (p.probability * 100).toFixed(1) + '%',\n })),\n });\n\n return deduped;\n }\n\n /**\n * Add prefetched batch\n */\n addPrefetchedBatch(\n operationType: string,\n compressed: Uint8Array,\n originalSize: number,\n ): PrefetchedBatch {\n if (!this.prefetchCache.has(operationType)) {\n this.prefetchCache.set(operationType, []);\n }\n\n const cache = this.prefetchCache.get(operationType)!;\n\n if (cache.length >= this.maxCachePerType) {\n const oldest = cache.shift()!;\n if (oldest.hitCount === 0) {\n this.stats.totalMisses++;\n } else {\n this.stats.totalOverwrites++;\n }\n }\n\n const batch: PrefetchedBatch = {\n id: `prefetch-${operationType}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n operationType,\n compressed,\n compressedSize: compressed.length,\n originalSize,\n compressionRatio: 1 - compressed.length / originalSize,\n compressed_at: Date.now(),\n created_at: Date.now(),\n ttl: this.prefetchTTL,\n expiresAt: Date.now() + this.prefetchTTL,\n hitCount: 0,\n missCount: 0,\n };\n\n cache.push(batch);\n this.stats.totalPrefetched++;\n this.stats.bandwidthSaved += originalSize - compressed.length;\n\n logger.debug('[PrefetchingEngine] Prefetched batch added', {\n type: operationType,\n id: batch.id,\n ratio: (batch.compressionRatio * 100).toFixed(1) + '%',\n });\n\n return batch;\n }\n\n /**\n * Try to use prefetched batch\n */\n getPrefetchedBatch(operationType: string): PrefetchedBatch | null {\n const cache = this.prefetchCache.get(operationType);\n if (!cache || cache.length === 0) {\n return null;\n }\n\n const now = Date.now();\n for (let i = 0; i < cache.length; i++) {\n const batch = cache[i];\n\n if (batch.expiresAt > now) {\n batch.hitCount++;\n this.stats.totalHits++;\n this.updatePredictionAccuracy(true);\n\n logger.debug('[PrefetchingEngine] Prefetch hit', {\n type: operationType,\n id: batch.id,\n });\n\n return batch;\n } else {\n cache.splice(i, 1);\n i--;\n batch.missCount++;\n this.stats.totalMisses++;\n this.updatePredictionAccuracy(false);\n }\n }\n\n return null;\n }\n\n /**\n * Update prediction accuracy metric\n */\n private updatePredictionAccuracy(hit: boolean): void {\n const total = this.stats.totalHits + this.stats.totalMisses;\n if (total === 0) return;\n\n this.stats.predictionAccuracy = this.stats.totalHits / total;\n }\n\n /**\n * Clean expired prefetches\n */\n private cleanExpiredPrefetches(): void {\n const now = Date.now();\n let cleanedCount = 0;\n\n for (const [type, cache] of this.prefetchCache.entries()) {\n for (let i = cache.length - 1; i >= 0; i--) {\n if (cache[i].expiresAt < now) {\n const batch = cache.splice(i, 1)[0];\n if (batch.hitCount === 0) {\n this.stats.totalMisses++;\n }\n cleanedCount++;\n }\n }\n\n if (cache.length === 0) {\n this.prefetchCache.delete(type);\n }\n }\n\n if (cleanedCount > 0) {\n logger.debug('[PrefetchingEngine] Cleaned expired prefetches', {\n count: cleanedCount,\n });\n }\n }\n\n /**\n * Get statistics\n */\n getStats(): PrefetchingStats {\n const total = this.stats.totalHits + this.stats.totalMisses;\n this.stats.hitRatio = total > 0 ? this.stats.totalHits / total : 0;\n\n return { ...this.stats };\n }\n\n /**\n * Clear all caches\n */\n clear(): void {\n this.operationHistory = [];\n this.patterns.clear();\n this.prefetchCache.clear();\n this.stats = {\n totalPrefetched: 0,\n totalHits: 0,\n totalMisses: 0,\n totalOverwrites: 0,\n hitRatio: 0,\n bandwidthSaved: 0,\n patternsDetected: 0,\n predictionAccuracy: 0,\n };\n logger.debug('[PrefetchingEngine] Cleared all caches');\n }\n}\n\n// ============================================================================\n// Singleton Instance\n// ============================================================================\n\nlet prefetchingEngineInstance: PrefetchingEngine | null = null;\n\nexport function getPrefetchingEngine(): PrefetchingEngine {\n if (!prefetchingEngineInstance) {\n prefetchingEngineInstance = new PrefetchingEngine();\n }\n return prefetchingEngineInstance;\n}\n\nexport function resetPrefetchingEngine(): void {\n prefetchingEngineInstance = null;\n}\n","/**\n * Batch Timing Optimizer (Phase 13)\n *\n * Intelligently schedules batch transmission based on network conditions,\n * device resources, and user activity patterns.\n */\n\nimport { getLogger } from '../utils/logger';\n\nconst logger = getLogger();\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Network window quality assessment\n */\nexport interface NetworkWindow {\n startTime: number;\n endTime: number;\n expectedDurationMs: number;\n latencyMs: number;\n bandwidthMbps: number;\n quality: 'excellent' | 'good' | 'fair' | 'poor';\n isStable: boolean;\n congestionLevel: number;\n recommendedBatchSize: number;\n}\n\n/**\n * Activity pattern\n */\nexport interface ActivityPattern {\n type: 'user-active' | 'idle' | 'background' | 'sleep';\n startTime: number;\n duration: number;\n probability: number;\n}\n\n/**\n * Batch scheduling decision\n */\nexport interface SchedulingDecision {\n shouldSendNow: boolean;\n nextOptimalWindowMs: number;\n recommendedDelay: number;\n reason: string;\n priority: 'critical' | 'high' | 'normal' | 'low';\n estimatedDeliveryMs: number;\n}\n\n/**\n * Batch timing statistics\n */\nexport interface BatchTimingStats {\n totalBatches: number;\n immediateDeliveries: number;\n deferredBatches: number;\n averageWaitTimeMs: number;\n averageDeliveryTimeMs: number;\n networkWindowsUsed: number;\n congestionAvoided: number;\n userFocusedOptimizations: number;\n}\n\n// ============================================================================\n// Batch Timing Optimizer\n// ============================================================================\n\nexport class BatchTimingOptimizer {\n private networkHistory: Array<{\n latencyMs: number;\n bandwidthMbps: number;\n timestamp: number;\n quality: 'excellent' | 'good' | 'fair' | 'poor';\n }> = [];\n private activityHistory: ActivityPattern[] = [];\n private stats: BatchTimingStats = {\n totalBatches: 0,\n immediateDeliveries: 0,\n deferredBatches: 0,\n averageWaitTimeMs: 0,\n averageDeliveryTimeMs: 0,\n networkWindowsUsed: 0,\n congestionAvoided: 0,\n userFocusedOptimizations: 0,\n };\n private lastActivityTime = Date.now();\n private isUserActive = true;\n private congestionDetectionWindow = 60 * 1000;\n private optimalBatchSize = 50 * 1024;\n\n constructor() {\n logger.debug('[BatchTimingOptimizer] Initialized', {\n congestionWindow: this.congestionDetectionWindow,\n optimalBatchSize: this.optimalBatchSize,\n });\n }\n\n /**\n * Record network measurement\n */\n recordNetworkMeasurement(latencyMs: number, bandwidthMbps: number): void {\n const quality = this.assessNetworkQuality(latencyMs, bandwidthMbps);\n\n this.networkHistory.push({\n latencyMs,\n bandwidthMbps,\n timestamp: Date.now(),\n quality,\n });\n\n if (this.networkHistory.length > 100) {\n this.networkHistory.shift();\n }\n\n this.stats.networkWindowsUsed++;\n\n logger.debug('[BatchTimingOptimizer] Network measured', {\n latency: latencyMs + 'ms',\n bandwidth: bandwidthMbps.toFixed(1) + ' Mbps',\n quality,\n });\n }\n\n /**\n * Assess network quality\n */\n private assessNetworkQuality(\n latencyMs: number,\n bandwidthMbps: number,\n ): 'excellent' | 'good' | 'fair' | 'poor' {\n if (latencyMs < 20 && bandwidthMbps > 10) return 'excellent';\n if (latencyMs < 50 && bandwidthMbps > 5) return 'good';\n if (latencyMs < 100 && bandwidthMbps > 2) return 'fair';\n return 'poor';\n }\n\n /**\n * Detect congestion in network\n */\n private detectCongestion(): number {\n const recentMeasurements = this.networkHistory.filter(\n (m) => Date.now() - m.timestamp < this.congestionDetectionWindow,\n );\n\n if (recentMeasurements.length < 3) {\n return 0;\n }\n\n const poorCount = recentMeasurements.filter(\n (m) => m.quality === 'poor',\n ).length;\n\n return poorCount / recentMeasurements.length;\n }\n\n /**\n * Find next optimal network window\n */\n private findOptimalWindow(): NetworkWindow {\n const now = Date.now();\n\n const recentMeasurements = this.networkHistory.slice(-20);\n if (recentMeasurements.length === 0) {\n return {\n startTime: now,\n endTime: now + 1000,\n expectedDurationMs: 1000,\n latencyMs: 50,\n bandwidthMbps: 5,\n quality: 'good',\n isStable: true,\n congestionLevel: 0,\n recommendedBatchSize: this.optimalBatchSize,\n };\n }\n\n const avgLatency =\n recentMeasurements.reduce((sum, m) => sum + m.latencyMs, 0) /\n recentMeasurements.length;\n const avgBandwidth =\n recentMeasurements.reduce((sum, m) => sum + m.bandwidthMbps, 0) /\n recentMeasurements.length;\n\n const latencyVariance =\n Math.sqrt(\n recentMeasurements.reduce(\n (sum, m) => sum + Math.pow(m.latencyMs - avgLatency, 2),\n 0,\n ) / recentMeasurements.length,\n ) / avgLatency;\n\n const isStable = latencyVariance < 0.2;\n const congestionLevel = this.detectCongestion();\n const quality = this.assessNetworkQuality(avgLatency, avgBandwidth);\n\n const recommendedBatchSize = Math.max(\n 10 * 1024,\n Math.min(500 * 1024, (avgBandwidth * 1024 * 100) / 8),\n );\n\n return {\n startTime: now,\n endTime: now + (isStable ? 30 * 1000 : 10 * 1000),\n expectedDurationMs: isStable ? 30 * 1000 : 10 * 1000,\n latencyMs: avgLatency,\n bandwidthMbps: avgBandwidth,\n quality,\n isStable,\n congestionLevel,\n recommendedBatchSize,\n };\n }\n\n /**\n * Get scheduling decision for a batch\n */\n getSchedulingDecision(\n batchSize: number,\n batchPriority: 'critical' | 'high' | 'normal' | 'low' = 'normal',\n isUserTriggered = false,\n ): SchedulingDecision {\n const now = Date.now();\n const currentWindow = this.findOptimalWindow();\n const congestionLevel = this.detectCongestion();\n\n let shouldSendNow = false;\n let recommendedDelay = 0;\n let reason = '';\n let priority = batchPriority;\n\n if (priority === 'critical') {\n shouldSendNow = true;\n reason = 'Critical operation (bypass optimization)';\n } else if (isUserTriggered && this.isUserActive) {\n shouldSendNow = true;\n reason = 'User-triggered operation';\n priority = 'high';\n } else if (\n currentWindow.quality === 'excellent' ||\n currentWindow.quality === 'good'\n ) {\n if (congestionLevel < 0.3) {\n shouldSendNow = true;\n reason = 'Good network conditions';\n } else {\n shouldSendNow = true;\n reason = 'Good network despite some congestion';\n recommendedDelay = 1000 + Math.random() * 2000;\n }\n } else if (currentWindow.quality === 'fair') {\n if (priority === 'high') {\n shouldSendNow = true;\n reason = 'High priority despite fair network';\n } else {\n shouldSendNow = false;\n reason = 'Fair network: waiting for better window';\n recommendedDelay = 30 * 1000 + Math.random() * 30 * 1000;\n }\n } else {\n shouldSendNow = false;\n reason = 'Poor network conditions: deferring';\n if (priority === 'high') {\n recommendedDelay = 60 * 1000 + Math.random() * 30 * 1000;\n } else {\n recommendedDelay = 120 * 1000 + Math.random() * 60 * 1000;\n }\n }\n\n const estimatedDeliveryMs =\n (batchSize / ((currentWindow.bandwidthMbps * 1024 * 1024) / 8)) * 1000 +\n currentWindow.latencyMs +\n recommendedDelay;\n\n const decision: SchedulingDecision = {\n shouldSendNow,\n nextOptimalWindowMs: now + recommendedDelay,\n recommendedDelay,\n reason,\n priority,\n estimatedDeliveryMs,\n };\n\n logger.debug('[BatchTimingOptimizer] Scheduling decision', {\n size: (batchSize / 1024).toFixed(1) + ' KB',\n shouldSendNow,\n delay: recommendedDelay + 'ms',\n reason,\n });\n\n return decision;\n }\n\n /**\n * Apply scheduling and update stats\n */\n applyScheduling(\n batchSize: number,\n sendNow: boolean,\n actualDelay: number,\n ): void {\n this.stats.totalBatches++;\n\n if (sendNow) {\n this.stats.immediateDeliveries++;\n } else {\n this.stats.deferredBatches++;\n }\n\n const totalWait =\n this.stats.averageWaitTimeMs * (this.stats.totalBatches - 1) +\n actualDelay;\n this.stats.averageWaitTimeMs = totalWait / this.stats.totalBatches;\n\n if (this.detectCongestion() > 0.3 && !sendNow) {\n this.stats.congestionAvoided++;\n }\n\n if (this.isUserActive) {\n this.stats.userFocusedOptimizations++;\n }\n\n this.stats.networkWindowsUsed++;\n }\n\n /**\n * Get optimal batch size recommendation\n */\n getOptimalBatchSize(): number {\n const window = this.findOptimalWindow();\n return window.recommendedBatchSize;\n }\n\n /**\n * Get current network window\n */\n getCurrentNetworkWindow(): NetworkWindow {\n return this.findOptimalWindow();\n }\n\n /**\n * Set user activity state\n */\n setUserActive(active: boolean): void {\n this.isUserActive = active;\n if (active) {\n this.lastActivityTime = Date.now();\n }\n }\n\n /**\n * Get statistics\n */\n getStats(): BatchTimingStats {\n return { ...this.stats };\n }\n\n /**\n * Clear history\n */\n clear(): void {\n this.networkHistory = [];\n this.activityHistory = [];\n this.stats = {\n totalBatches: 0,\n immediateDeliveries: 0,\n deferredBatches: 0,\n averageWaitTimeMs: 0,\n averageDeliveryTimeMs: 0,\n networkWindowsUsed: 0,\n congestionAvoided: 0,\n userFocusedOptimizations: 0,\n };\n }\n}\n\n// ============================================================================\n// Singleton Instance\n// ============================================================================\n\nlet batchTimingOptimizerInstance: BatchTimingOptimizer | null = null;\n\nexport function getBatchTimingOptimizer(): BatchTimingOptimizer {\n if (!batchTimingOptimizerInstance) {\n batchTimingOptimizerInstance = new BatchTimingOptimizer();\n }\n return batchTimingOptimizerInstance;\n}\n\nexport function resetBatchTimingOptimizer(): void {\n batchTimingOptimizerInstance = null;\n}\n","/**\n * Adaptive Compression Optimizer (Phase 13)\n *\n * Automatically adjusts compression level based on network conditions,\n * device capabilities, and real-time performance metrics.\n */\n\nimport { getLogger } from '../utils/logger';\nimport type { CompressionStats } from '../compression/CompressionEngine';\n\nconst logger = getLogger();\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Network conditions affecting compression\n */\nexport interface NetworkProfile {\n estimatedSpeedKbps: number;\n latencyMs: number;\n isOnline: boolean;\n isWifi: boolean;\n isFast: boolean;\n isSlow: boolean;\n isEmpty: boolean;\n}\n\n/**\n * Device capabilities for compression\n */\nexport interface DeviceProfile {\n cpuCores: number;\n cpuUtilization: number;\n memoryAvailableMB: number;\n memoryTotalMB: number;\n isConstrained: boolean;\n isPremium: boolean;\n supportsWebWorkers: boolean;\n supportsWebAssembly: boolean;\n}\n\n/**\n * Compression recommendation based on conditions\n */\nexport interface CompressionRecommendation {\n recommendedLevel: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;\n reason: string;\n confidence: number;\n estimatedCompressionMs: number;\n estimatedRatio: number;\n networkFactor: number;\n deviceFactor: number;\n}\n\n/**\n * Adaptive compression statistics\n */\nexport interface AdaptiveStats {\n currentLevel: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;\n averageCompressionMs: number;\n averageRatio: number;\n levelsUsed: Set<number>;\n adjustmentCount: number;\n totalBatches: number;\n networkCondition: 'fast' | 'normal' | 'slow' | 'offline';\n}\n\n// ============================================================================\n// Adaptive Compression Optimizer\n// ============================================================================\n\nexport class AdaptiveCompressionOptimizer {\n private currentLevel: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 = 6;\n private networkProfile: NetworkProfile = {\n estimatedSpeedKbps: 5000,\n latencyMs: 50,\n isOnline: true,\n isWifi: false,\n isFast: true,\n isSlow: false,\n isEmpty: false,\n };\n private deviceProfile: DeviceProfile = {\n cpuCores: 4,\n cpuUtilization: 0.3,\n memoryAvailableMB: 512,\n memoryTotalMB: 1024,\n isConstrained: false,\n isPremium: false,\n supportsWebWorkers: true,\n supportsWebAssembly: true,\n };\n private compressionHistory: Array<{\n level: number;\n ratio: number;\n timeMs: number;\n timestamp: number;\n }> = [];\n private stats: AdaptiveStats = {\n currentLevel: 6,\n averageCompressionMs: 10,\n averageRatio: 0.85,\n levelsUsed: new Set([6]),\n adjustmentCount: 0,\n totalBatches: 0,\n networkCondition: 'normal',\n };\n\n constructor() {\n logger.debug('[AdaptiveCompressionOptimizer] Initialized', {\n level: this.currentLevel,\n });\n }\n\n /**\n * Update network conditions\n */\n updateNetworkConditions(\n speedKbps: number,\n latencyMs?: number,\n isOnline?: boolean,\n ): void {\n this.networkProfile.estimatedSpeedKbps = speedKbps;\n if (latencyMs !== undefined) {\n this.networkProfile.latencyMs = latencyMs;\n }\n if (isOnline !== undefined) {\n this.networkProfile.isOnline = isOnline;\n }\n\n this.networkProfile.isFast = speedKbps > 5000;\n this.networkProfile.isSlow = speedKbps < 1000;\n this.networkProfile.isEmpty = speedKbps < 100;\n\n if (isOnline === false) {\n this.stats.networkCondition = 'offline';\n } else if (this.networkProfile.isSlow) {\n this.stats.networkCondition = 'slow';\n } else if (this.networkProfile.isFast) {\n this.stats.networkCondition = 'fast';\n } else {\n this.stats.networkCondition = 'normal';\n }\n\n logger.debug('[AdaptiveCompressionOptimizer] Network updated', {\n speedKbps,\n condition: this.stats.networkCondition,\n });\n }\n\n /**\n * Update device resource usage\n */\n updateDeviceResources(\n cpuUtilization: number,\n memoryAvailableMB: number,\n ): void {\n this.deviceProfile.cpuUtilization = Math.max(\n 0,\n Math.min(1, cpuUtilization),\n );\n this.deviceProfile.memoryAvailableMB = memoryAvailableMB;\n this.deviceProfile.isConstrained = memoryAvailableMB < 512;\n this.deviceProfile.isPremium = memoryAvailableMB > 2048;\n\n logger.debug('[AdaptiveCompressionOptimizer] Device resources updated', {\n cpuUtilization: (cpuUtilization * 100).toFixed(1) + '%',\n memoryAvailableMB,\n });\n }\n\n /**\n * Record compression performance\n */\n recordCompressionPerformance(\n level: number,\n compressionMs: number,\n ratio: number,\n ): void {\n this.compressionHistory.push({\n level,\n ratio,\n timeMs: compressionMs,\n timestamp: Date.now(),\n });\n\n if (this.compressionHistory.length > 100) {\n this.compressionHistory.shift();\n }\n\n this.stats.totalBatches++;\n this.stats.averageCompressionMs =\n this.compressionHistory.reduce((sum, h) => sum + h.timeMs, 0) /\n this.compressionHistory.length;\n this.stats.averageRatio =\n this.compressionHistory.reduce((sum, h) => sum + h.ratio, 0) /\n this.compressionHistory.length;\n }\n\n /**\n * Get compression recommendation based on conditions\n */\n getRecommendedLevel(): CompressionRecommendation {\n const networkFactor = this.calculateNetworkFactor();\n const deviceFactor = this.calculateDeviceFactor();\n const combinedFactor = (networkFactor + deviceFactor) / 2;\n\n const recommendedLevel = Math.max(\n 1,\n Math.min(9, Math.round(combinedFactor * 9)),\n ) as 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;\n\n const estimatedCompressionMs =\n this.estimateCompressionTime(recommendedLevel);\n const estimatedRatio = this.estimateCompressionRatio(recommendedLevel);\n\n let reason = '';\n if (networkFactor < 0.3 && deviceFactor < 0.3) {\n reason = 'Slow network + constrained device: using level 1-2 (fast)';\n } else if (networkFactor > 0.7 && deviceFactor > 0.7) {\n reason =\n 'Fast network + premium device: using level 8-9 (best compression)';\n } else if (networkFactor > 0.7) {\n reason = 'Fast network: prioritizing compression ratio';\n } else if (deviceFactor < 0.3) {\n reason = 'Constrained device: prioritizing speed';\n } else {\n reason = 'Normal conditions: balanced compression level';\n }\n\n const recommendation: CompressionRecommendation = {\n recommendedLevel,\n reason,\n confidence: this.compressionHistory.length > 10 ? 0.9 : 0.5,\n estimatedCompressionMs,\n estimatedRatio,\n networkFactor,\n deviceFactor,\n };\n\n logger.debug(\n '[AdaptiveCompressionOptimizer] Recommendation',\n recommendation,\n );\n\n return recommendation;\n }\n\n /**\n * Calculate network factor (0-1)\n */\n private calculateNetworkFactor(): number {\n if (!this.networkProfile.isOnline) return 0;\n\n const speedMbps = this.networkProfile.estimatedSpeedKbps / 1000;\n\n if (speedMbps < 0.1) return 0;\n if (speedMbps < 1) return 0.1 + (speedMbps / 1) * 0.2;\n if (speedMbps < 5) return 0.3 + ((speedMbps - 1) / 4) * 0.3;\n if (speedMbps < 20) return 0.6 + ((speedMbps - 5) / 15) * 0.3;\n return Math.min(1, 0.9 + (speedMbps - 20) / 200);\n }\n\n /**\n * Calculate device factor (0-1)\n */\n private calculateDeviceFactor(): number {\n let factor = 0.5;\n\n if (this.deviceProfile.isPremium) {\n factor = 0.8;\n } else if (this.deviceProfile.isConstrained) {\n factor = 0.2;\n }\n\n if (this.deviceProfile.cpuUtilization > 0.8) {\n factor *= 0.7;\n } else if (this.deviceProfile.cpuUtilization < 0.2) {\n factor *= 1.1;\n }\n\n if (this.deviceProfile.supportsWebAssembly) {\n factor = Math.min(1, factor + 0.1);\n }\n\n return Math.max(0, Math.min(1, factor));\n }\n\n /**\n * Estimate compression time for a level (in ms)\n */\n private estimateCompressionTime(level: number): number {\n return Math.max(1, level * 2.5);\n }\n\n /**\n * Estimate compression ratio for a level\n */\n private estimateCompressionRatio(level: number): number {\n return 0.6 + (level / 9) * 0.3;\n }\n\n /**\n * Apply recommendation and get new level\n */\n applyRecommendation(): 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 {\n const recommendation = this.getRecommendedLevel();\n const oldLevel = this.currentLevel;\n\n const shouldChange =\n recommendation.confidence > 0.7 ||\n Math.abs(recommendation.recommendedLevel - oldLevel) > 2;\n\n if (shouldChange) {\n this.currentLevel = recommendation.recommendedLevel;\n this.stats.levelsUsed.add(this.currentLevel);\n\n if (oldLevel !== this.currentLevel) {\n this.stats.adjustmentCount++;\n logger.debug('[AdaptiveCompressionOptimizer] Level adjusted', {\n from: oldLevel,\n to: this.currentLevel,\n reason: recommendation.reason,\n });\n }\n }\n\n this.stats.currentLevel = this.currentLevel;\n return this.currentLevel;\n }\n\n /**\n * Get current level\n */\n getCurrentLevel(): 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 {\n return this.currentLevel;\n }\n\n /**\n * Get statistics\n */\n getStats(): AdaptiveStats {\n return { ...this.stats };\n }\n\n /**\n * Get detailed analysis\n */\n getDetailedAnalysis() {\n return {\n stats: this.stats,\n network: this.networkProfile,\n device: this.deviceProfile,\n recommendation: this.getRecommendedLevel(),\n history: this.compressionHistory.slice(-20),\n };\n }\n}\n\n// ============================================================================\n// Singleton Instance\n// ============================================================================\n\nlet adaptiveOptimizerInstance: AdaptiveCompressionOptimizer | null = null;\n\nexport function getAdaptiveCompressionOptimizer(): AdaptiveCompressionOptimizer {\n if (!adaptiveOptimizerInstance) {\n adaptiveOptimizerInstance = new AdaptiveCompressionOptimizer();\n }\n return adaptiveOptimizerInstance;\n}\n\nexport function resetAdaptiveCompressionOptimizer(): void {\n adaptiveOptimizerInstance = null;\n}\n"]}
@@ -0,0 +1,347 @@
1
+ import { Operation } from '../core/index.cjs';
2
+
3
+ /**
4
+ * Prefetching Engine (Phase 13)
5
+ *
6
+ * Predictively pre-compresses batches based on detected operation patterns.
7
+ * Analyzes historical data to predict which operations are most likely to occur.
8
+ */
9
+
10
+ /**
11
+ * Pattern in operation sequence
12
+ */
13
+ interface OperationPattern {
14
+ sequence: string[];
15
+ frequency: number;
16
+ probability: number;
17
+ lastOccurred: number;
18
+ avgIntervalMs: number;
19
+ }
20
+ /**
21
+ * Prediction for next operations
22
+ */
23
+ interface OperationPrediction {
24
+ operationType: string;
25
+ probability: number;
26
+ reason: string;
27
+ shouldPrefetch: boolean;
28
+ estimatedTimeMs: number;
29
+ }
30
+ /**
31
+ * Prefetched batch
32
+ */
33
+ interface PrefetchedBatch {
34
+ id: string;
35
+ operationType: string;
36
+ compressed: Uint8Array;
37
+ compressedSize: number;
38
+ originalSize: number;
39
+ compressionRatio: number;
40
+ compressed_at: number;
41
+ created_at: number;
42
+ ttl: number;
43
+ expiresAt: number;
44
+ hitCount: number;
45
+ missCount: number;
46
+ }
47
+ /**
48
+ * Prefetching statistics
49
+ */
50
+ interface PrefetchingStats {
51
+ totalPrefetched: number;
52
+ totalHits: number;
53
+ totalMisses: number;
54
+ totalOverwrites: number;
55
+ hitRatio: number;
56
+ bandwidthSaved: number;
57
+ patternsDetected: number;
58
+ predictionAccuracy: number;
59
+ }
60
+ declare class PrefetchingEngine {
61
+ private operationHistory;
62
+ private patterns;
63
+ private prefetchCache;
64
+ private maxHistoryEntries;
65
+ private maxCachePerType;
66
+ private prefetchTTL;
67
+ private predictionThreshold;
68
+ private stats;
69
+ private lastPredictionTime;
70
+ private predictionInterval;
71
+ constructor();
72
+ /**
73
+ * Record operation for pattern analysis
74
+ */
75
+ recordOperation(operationType: string, size: number): void;
76
+ /**
77
+ * Analyze patterns in operation history
78
+ */
79
+ private analyzePatterns;
80
+ /**
81
+ * Predict next operations
82
+ */
83
+ predictNextOperations(recentOperations: Operation[]): OperationPrediction[];
84
+ /**
85
+ * Add prefetched batch
86
+ */
87
+ addPrefetchedBatch(operationType: string, compressed: Uint8Array, originalSize: number): PrefetchedBatch;
88
+ /**
89
+ * Try to use prefetched batch
90
+ */
91
+ getPrefetchedBatch(operationType: string): PrefetchedBatch | null;
92
+ /**
93
+ * Update prediction accuracy metric
94
+ */
95
+ private updatePredictionAccuracy;
96
+ /**
97
+ * Clean expired prefetches
98
+ */
99
+ private cleanExpiredPrefetches;
100
+ /**
101
+ * Get statistics
102
+ */
103
+ getStats(): PrefetchingStats;
104
+ /**
105
+ * Clear all caches
106
+ */
107
+ clear(): void;
108
+ }
109
+ declare function getPrefetchingEngine(): PrefetchingEngine;
110
+ declare function resetPrefetchingEngine(): void;
111
+
112
+ /**
113
+ * Batch Timing Optimizer (Phase 13)
114
+ *
115
+ * Intelligently schedules batch transmission based on network conditions,
116
+ * device resources, and user activity patterns.
117
+ */
118
+ /**
119
+ * Network window quality assessment
120
+ */
121
+ interface NetworkWindow {
122
+ startTime: number;
123
+ endTime: number;
124
+ expectedDurationMs: number;
125
+ latencyMs: number;
126
+ bandwidthMbps: number;
127
+ quality: 'excellent' | 'good' | 'fair' | 'poor';
128
+ isStable: boolean;
129
+ congestionLevel: number;
130
+ recommendedBatchSize: number;
131
+ }
132
+ /**
133
+ * Activity pattern
134
+ */
135
+ interface ActivityPattern {
136
+ type: 'user-active' | 'idle' | 'background' | 'sleep';
137
+ startTime: number;
138
+ duration: number;
139
+ probability: number;
140
+ }
141
+ /**
142
+ * Batch scheduling decision
143
+ */
144
+ interface SchedulingDecision {
145
+ shouldSendNow: boolean;
146
+ nextOptimalWindowMs: number;
147
+ recommendedDelay: number;
148
+ reason: string;
149
+ priority: 'critical' | 'high' | 'normal' | 'low';
150
+ estimatedDeliveryMs: number;
151
+ }
152
+ /**
153
+ * Batch timing statistics
154
+ */
155
+ interface BatchTimingStats {
156
+ totalBatches: number;
157
+ immediateDeliveries: number;
158
+ deferredBatches: number;
159
+ averageWaitTimeMs: number;
160
+ averageDeliveryTimeMs: number;
161
+ networkWindowsUsed: number;
162
+ congestionAvoided: number;
163
+ userFocusedOptimizations: number;
164
+ }
165
+ declare class BatchTimingOptimizer {
166
+ private networkHistory;
167
+ private activityHistory;
168
+ private stats;
169
+ private lastActivityTime;
170
+ private isUserActive;
171
+ private congestionDetectionWindow;
172
+ private optimalBatchSize;
173
+ constructor();
174
+ /**
175
+ * Record network measurement
176
+ */
177
+ recordNetworkMeasurement(latencyMs: number, bandwidthMbps: number): void;
178
+ /**
179
+ * Assess network quality
180
+ */
181
+ private assessNetworkQuality;
182
+ /**
183
+ * Detect congestion in network
184
+ */
185
+ private detectCongestion;
186
+ /**
187
+ * Find next optimal network window
188
+ */
189
+ private findOptimalWindow;
190
+ /**
191
+ * Get scheduling decision for a batch
192
+ */
193
+ getSchedulingDecision(batchSize: number, batchPriority?: 'critical' | 'high' | 'normal' | 'low', isUserTriggered?: boolean): SchedulingDecision;
194
+ /**
195
+ * Apply scheduling and update stats
196
+ */
197
+ applyScheduling(batchSize: number, sendNow: boolean, actualDelay: number): void;
198
+ /**
199
+ * Get optimal batch size recommendation
200
+ */
201
+ getOptimalBatchSize(): number;
202
+ /**
203
+ * Get current network window
204
+ */
205
+ getCurrentNetworkWindow(): NetworkWindow;
206
+ /**
207
+ * Set user activity state
208
+ */
209
+ setUserActive(active: boolean): void;
210
+ /**
211
+ * Get statistics
212
+ */
213
+ getStats(): BatchTimingStats;
214
+ /**
215
+ * Clear history
216
+ */
217
+ clear(): void;
218
+ }
219
+ declare function getBatchTimingOptimizer(): BatchTimingOptimizer;
220
+ declare function resetBatchTimingOptimizer(): void;
221
+
222
+ /**
223
+ * Adaptive Compression Optimizer (Phase 13)
224
+ *
225
+ * Automatically adjusts compression level based on network conditions,
226
+ * device capabilities, and real-time performance metrics.
227
+ */
228
+ /**
229
+ * Network conditions affecting compression
230
+ */
231
+ interface NetworkProfile {
232
+ estimatedSpeedKbps: number;
233
+ latencyMs: number;
234
+ isOnline: boolean;
235
+ isWifi: boolean;
236
+ isFast: boolean;
237
+ isSlow: boolean;
238
+ isEmpty: boolean;
239
+ }
240
+ /**
241
+ * Device capabilities for compression
242
+ */
243
+ interface DeviceProfile {
244
+ cpuCores: number;
245
+ cpuUtilization: number;
246
+ memoryAvailableMB: number;
247
+ memoryTotalMB: number;
248
+ isConstrained: boolean;
249
+ isPremium: boolean;
250
+ supportsWebWorkers: boolean;
251
+ supportsWebAssembly: boolean;
252
+ }
253
+ /**
254
+ * Compression recommendation based on conditions
255
+ */
256
+ interface CompressionRecommendation {
257
+ recommendedLevel: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
258
+ reason: string;
259
+ confidence: number;
260
+ estimatedCompressionMs: number;
261
+ estimatedRatio: number;
262
+ networkFactor: number;
263
+ deviceFactor: number;
264
+ }
265
+ /**
266
+ * Adaptive compression statistics
267
+ */
268
+ interface AdaptiveStats {
269
+ currentLevel: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
270
+ averageCompressionMs: number;
271
+ averageRatio: number;
272
+ levelsUsed: Set<number>;
273
+ adjustmentCount: number;
274
+ totalBatches: number;
275
+ networkCondition: 'fast' | 'normal' | 'slow' | 'offline';
276
+ }
277
+ declare class AdaptiveCompressionOptimizer {
278
+ private currentLevel;
279
+ private networkProfile;
280
+ private deviceProfile;
281
+ private compressionHistory;
282
+ private stats;
283
+ constructor();
284
+ /**
285
+ * Update network conditions
286
+ */
287
+ updateNetworkConditions(speedKbps: number, latencyMs?: number, isOnline?: boolean): void;
288
+ /**
289
+ * Update device resource usage
290
+ */
291
+ updateDeviceResources(cpuUtilization: number, memoryAvailableMB: number): void;
292
+ /**
293
+ * Record compression performance
294
+ */
295
+ recordCompressionPerformance(level: number, compressionMs: number, ratio: number): void;
296
+ /**
297
+ * Get compression recommendation based on conditions
298
+ */
299
+ getRecommendedLevel(): CompressionRecommendation;
300
+ /**
301
+ * Calculate network factor (0-1)
302
+ */
303
+ private calculateNetworkFactor;
304
+ /**
305
+ * Calculate device factor (0-1)
306
+ */
307
+ private calculateDeviceFactor;
308
+ /**
309
+ * Estimate compression time for a level (in ms)
310
+ */
311
+ private estimateCompressionTime;
312
+ /**
313
+ * Estimate compression ratio for a level
314
+ */
315
+ private estimateCompressionRatio;
316
+ /**
317
+ * Apply recommendation and get new level
318
+ */
319
+ applyRecommendation(): 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
320
+ /**
321
+ * Get current level
322
+ */
323
+ getCurrentLevel(): 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
324
+ /**
325
+ * Get statistics
326
+ */
327
+ getStats(): AdaptiveStats;
328
+ /**
329
+ * Get detailed analysis
330
+ */
331
+ getDetailedAnalysis(): {
332
+ stats: AdaptiveStats;
333
+ network: NetworkProfile;
334
+ device: DeviceProfile;
335
+ recommendation: CompressionRecommendation;
336
+ history: {
337
+ level: number;
338
+ ratio: number;
339
+ timeMs: number;
340
+ timestamp: number;
341
+ }[];
342
+ };
343
+ }
344
+ declare function getAdaptiveCompressionOptimizer(): AdaptiveCompressionOptimizer;
345
+ declare function resetAdaptiveCompressionOptimizer(): void;
346
+
347
+ export { type ActivityPattern, AdaptiveCompressionOptimizer, type AdaptiveStats, BatchTimingOptimizer, type BatchTimingStats, type CompressionRecommendation, type DeviceProfile, type NetworkProfile, type NetworkWindow, type OperationPattern, type OperationPrediction, type PrefetchedBatch, PrefetchingEngine, type PrefetchingStats, type SchedulingDecision, getAdaptiveCompressionOptimizer, getBatchTimingOptimizer, getPrefetchingEngine, resetAdaptiveCompressionOptimizer, resetBatchTimingOptimizer, resetPrefetchingEngine };