@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.
- package/README.md +10 -0
- package/dist/compression/index.cjs +580 -0
- package/dist/compression/index.cjs.map +1 -0
- package/dist/compression/index.d.cts +189 -0
- package/dist/compression/index.d.ts +189 -0
- package/dist/compression/index.js +573 -0
- package/dist/compression/index.js.map +1 -0
- package/dist/core/index.d.cts +70 -5
- package/dist/core/index.d.ts +70 -5
- package/dist/crypto/index.cjs +100 -0
- package/dist/crypto/index.cjs.map +1 -0
- package/dist/crypto/index.d.cts +407 -0
- package/dist/crypto/index.d.ts +407 -0
- package/dist/crypto/index.js +96 -0
- package/dist/crypto/index.js.map +1 -0
- package/dist/distributed/index.cjs +420 -23
- package/dist/distributed/index.cjs.map +1 -1
- package/dist/distributed/index.d.cts +901 -2
- package/dist/distributed/index.d.ts +901 -2
- package/dist/distributed/index.js +420 -23
- package/dist/distributed/index.js.map +1 -1
- package/dist/index.cjs +1222 -55
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -811
- package/dist/index.d.ts +11 -811
- package/dist/index.js +1221 -56
- package/dist/index.js.map +1 -1
- package/dist/offline/index.cjs +419 -0
- package/dist/offline/index.cjs.map +1 -0
- package/dist/offline/index.d.cts +148 -0
- package/dist/offline/index.d.ts +148 -0
- package/dist/offline/index.js +415 -0
- package/dist/offline/index.js.map +1 -0
- package/dist/optimization/index.cjs +797 -0
- package/dist/optimization/index.cjs.map +1 -0
- package/dist/optimization/index.d.cts +347 -0
- package/dist/optimization/index.d.ts +347 -0
- package/dist/optimization/index.js +787 -0
- package/dist/optimization/index.js.map +1 -0
- package/dist/persistence/index.cjs +145 -0
- package/dist/persistence/index.cjs.map +1 -0
- package/dist/persistence/index.d.cts +63 -0
- package/dist/persistence/index.d.ts +63 -0
- package/dist/persistence/index.js +142 -0
- package/dist/persistence/index.js.map +1 -0
- package/dist/presence/index.cjs +489 -0
- package/dist/presence/index.cjs.map +1 -0
- package/dist/presence/index.d.cts +283 -0
- package/dist/presence/index.d.ts +283 -0
- package/dist/presence/index.js +485 -0
- package/dist/presence/index.js.map +1 -0
- package/dist/types-CMxO7QF0.d.cts +33 -0
- package/dist/types-CMxO7QF0.d.ts +33 -0
- package/dist/versioning/index.cjs +296 -14
- package/dist/versioning/index.cjs.map +1 -1
- package/dist/versioning/index.d.cts +66 -1
- package/dist/versioning/index.d.ts +66 -1
- package/dist/versioning/index.js +296 -14
- package/dist/versioning/index.js.map +1 -1
- package/package.json +51 -1
- package/dist/index-C_4CMV5c.d.cts +0 -1207
- 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 };
|