{"version":3,"file":"behavior-analytics-DOSpG3Xv.cjs","sources":["../src/types/common.ts","../src/analytics/behavior-analytics.ts"],"sourcesContent":["import { z } from 'zod';\n\n/**\n * User interaction types for behavior tracking\n */\nexport const UserInteractionSchema = z.object({\n  timestamp: z.number(),\n  type: z.enum(['click', 'scroll', 'focus', 'blur', 'keypress', 'resize', 'preference_change']),\n  target: z.string().optional(),\n  value: z.unknown().optional(),\n  context: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type UserInteraction = z.infer<typeof UserInteractionSchema>;\n\n/**\n * Prediction confidence levels\n */\nexport type ConfidenceLevel = 'low' | 'medium' | 'high' | 'very_high';\n\n/**\n * AI model capabilities\n */\nexport interface ModelCapabilities {\n  textGeneration: boolean;\n  textAnalysis: boolean;\n  codeGeneration: boolean;\n  reasoning: boolean;\n  streaming: boolean;\n  functionCalling: boolean;\n  vision: boolean;\n}\n\n/**\n * AI provider configuration\n */\nexport interface AIProviderConfig {\n  apiKey?: string;\n  baseURL?: string;\n  model?: string;\n  maxTokens?: number;\n  temperature?: number;\n  timeout?: number;\n  retries?: number;\n}\n\n/**\n * Prediction result with confidence scoring\n */\nexport interface PredictionResult<T = unknown> {\n  prediction: T;\n  confidence: ConfidenceLevel;\n  score: number; // 0-1\n  reasoning?: string;\n  alternatives?: Array<{\n    value: T;\n    score: number;\n    reasoning?: string;\n  }>;\n  metadata?: Record<string, unknown>;\n}\n\n/**\n * Adaptation suggestion from AI\n */\nexport interface AdaptationSuggestion {\n  type: 'sensory' | 'cognitive' | 'preference' | 'content';\n  target: string;\n  action: 'enable' | 'disable' | 'adjust' | 'replace';\n  value?: unknown;\n  reasoning: string;\n  confidence: ConfidenceLevel;\n  priority: 'low' | 'medium' | 'high' | 'urgent';\n  estimatedImpact: number; // 0-1\n}\n\n/**\n * Learning model state\n */\nexport interface ModelState {\n  version: string;\n  trainingData: number; // Number of samples\n  lastUpdated: number;\n  accuracy?: number;\n  features: string[];\n  hyperparameters?: Record<string, unknown>;\n}\n\n/**\n * Streaming response chunk\n */\nexport interface StreamChunk {\n  id: string;\n  type: 'token' | 'function_call' | 'done' | 'error';\n  content: string;\n  metadata?: Record<string, unknown>;\n  timestamp: number;\n}\n\n/**\n * Analytics event for user behavior\n */\nexport const AnalyticsEventSchema = z.object({\n  eventId: z.string().uuid(),\n  userId: z.string().optional(),\n  sessionId: z.string(),\n  timestamp: z.number(),\n  event: z.string(),\n  properties: z.record(z.string(), z.unknown()).optional(),\n  preferences: z.record(z.string(), z.unknown()).optional(),\n  context: z.object({\n    userAgent: z.string().optional(),\n    viewport: z.object({\n      width: z.number(),\n      height: z.number(),\n    }).optional(),\n    url: z.string().optional(),\n    referrer: z.string().optional(),\n  }).optional(),\n});\n\nexport type AnalyticsEvent = z.infer<typeof AnalyticsEventSchema>;\n\n/**\n * Feature extraction result\n */\nexport interface FeatureVector {\n  features: Record<string, number>;\n  metadata?: Record<string, unknown>;\n  timestamp: number;\n}\n\n/**\n * Training data point\n */\nexport interface TrainingData {\n  input: FeatureVector;\n  output: unknown;\n  feedback?: number; // -1 to 1\n  weight?: number; // Importance weight\n}\n\n/**\n * Model performance metrics\n */\nexport interface ModelMetrics {\n  accuracy: number;\n  precision: number;\n  recall: number;\n  f1Score: number;\n  auc?: number;\n  confusionMatrix?: number[][];\n  sampleSize: number;\n  lastEvaluated: number;\n} ","import { EventEmitter } from 'eventemitter3';\nimport { z } from 'zod';\nimport type { \n  UserInteraction, \n  AnalyticsEvent\n} from '../types/common.js';\nimport { \n  AnalyticsEventSchema,\n  UserInteractionSchema \n} from '../types/common.js';\n\n/**\n * Events emitted by BehaviorAnalytics\n */\nexport interface BehaviorAnalyticsEvents {\n  'pattern-detected': (pattern: BehaviorPattern) => void;\n  'anomaly-detected': (anomaly: BehaviorAnomaly) => void;\n  'insight-generated': (insight: BehaviorInsight) => void;\n  'data-collected': (event: AnalyticsEvent) => void;\n  'error': (error: Error) => void;\n}\n\n/**\n * Configuration for behavior analytics\n */\nexport interface BehaviorAnalyticsConfig {\n  sessionTimeout?: number; // milliseconds\n  maxSessionEvents?: number;\n  enableRealTimeAnalysis?: boolean;\n  patternDetectionThreshold?: number;\n  anomalyDetectionSensitivity?: number;\n  privacyMode?: boolean;\n  bufferSize?: number;\n}\n\n/**\n * Detected behavior pattern\n */\nexport interface BehaviorPattern {\n  id: string;\n  type: 'navigation' | 'interaction' | 'preference' | 'temporal';\n  pattern: string;\n  confidence: number;\n  frequency: number;\n  contexts: string[];\n  impact: 'positive' | 'negative' | 'neutral';\n  recommendations: string[];\n}\n\n/**\n * Behavior anomaly detection\n */\nexport interface BehaviorAnomaly {\n  id: string;\n  type: 'sudden_change' | 'unusual_pattern' | 'performance_degradation' | 'accessibility_issue';\n  description: string;\n  severity: 'low' | 'medium' | 'high' | 'critical';\n  affectedMetrics: string[];\n  timestamp: number;\n  context: Record<string, unknown>;\n}\n\n/**\n * Generated behavioral insight\n */\nexport interface BehaviorInsight {\n  id: string;\n  category: 'usability' | 'accessibility' | 'performance' | 'engagement';\n  title: string;\n  description: string;\n  evidence: string[];\n  actionItems: string[];\n  priority: number; // 0-1\n  confidence: number; // 0-1\n}\n\n/**\n * Session analytics data\n */\ninterface SessionData {\n  sessionId: string;\n  startTime: number;\n  endTime?: number;\n  events: AnalyticsEvent[];\n  interactions: UserInteraction[];\n  metadata: Record<string, unknown>;\n}\n\n/**\n * Interaction metrics\n */\ninterface InteractionMetrics {\n  totalInteractions: number;\n  interactionRate: number; // per minute\n  avgTimeBetweenInteractions: number;\n  dominantInteractionTypes: string[];\n  errorRate: number;\n  completionRate: number;\n}\n\n/**\n * Engagement metrics\n */\ninterface EngagementMetrics {\n  sessionDuration: number;\n  bounceRate: number;\n  pageViews: number;\n  scrollDepth: number;\n  clickThroughRate: number;\n  taskCompletionRate: number;\n}\n\n/**\n * BehaviorAnalytics tracks and analyzes user behavior patterns for accessibility insights\n */\nexport class BehaviorAnalytics extends EventEmitter<BehaviorAnalyticsEvents> {\n  private config: Required<BehaviorAnalyticsConfig>;\n  private currentSession: SessionData | null = null;\n  private sessions: SessionData[] = [];\n  private eventBuffer: AnalyticsEvent[] = [];\n  private patternCache: Map<string, BehaviorPattern> = new Map();\n  private anomalyBaselines: Map<string, number> = new Map();\n  private sessionTimeout: NodeJS.Timeout | undefined;\n\n  constructor(config: BehaviorAnalyticsConfig = {}) {\n    super();\n\n    this.config = {\n      sessionTimeout: config.sessionTimeout || 1800000, // 30 minutes\n      maxSessionEvents: config.maxSessionEvents || 1000,\n      enableRealTimeAnalysis: config.enableRealTimeAnalysis ?? true,\n      patternDetectionThreshold: config.patternDetectionThreshold || 0.7,\n      anomalyDetectionSensitivity: config.anomalyDetectionSensitivity || 0.8,\n      privacyMode: config.privacyMode ?? true,\n      bufferSize: config.bufferSize || 100,\n    };\n  }\n\n  /**\n   * Start a new analytics session\n   */\n  startSession(sessionId?: string): string {\n    const id = sessionId || this.generateSessionId();\n    \n    // End current session if exists\n    if (this.currentSession) {\n      this.endSession();\n    }\n\n    this.currentSession = {\n      sessionId: id,\n      startTime: Date.now(),\n      events: [],\n      interactions: [],\n      metadata: {\n        userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : 'unknown',\n        viewport: this.getViewportInfo(),\n        timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n      },\n    };\n\n    this.resetSessionTimeout();\n    return id;\n  }\n\n  /**\n   * End current session\n   */\n  endSession(): void {\n    if (!this.currentSession) return;\n\n    this.currentSession.endTime = Date.now();\n    this.sessions.push({ ...this.currentSession });\n\n    // Limit stored sessions\n    if (this.sessions.length > 50) {\n      this.sessions = this.sessions.slice(-50);\n    }\n\n    // Generate session insights\n    if (this.config.enableRealTimeAnalysis) {\n      this.analyzeSession(this.currentSession);\n    }\n\n    this.currentSession = null;\n    this.clearSessionTimeout();\n  }\n\n  /**\n   * Track user interaction\n   */\n  trackInteraction(interaction: UserInteraction): void {\n    try {\n      // Validate interaction\n      UserInteractionSchema.parse(interaction);\n\n      if (!this.currentSession) {\n        this.startSession();\n      }\n\n      this.currentSession!.interactions.push(interaction);\n      this.resetSessionTimeout();\n\n      // Create analytics event\n      const event: AnalyticsEvent = {\n        eventId: crypto.randomUUID(),\n        sessionId: this.currentSession!.sessionId,\n        timestamp: interaction.timestamp,\n        event: `interaction.${interaction.type}`,\n        properties: {\n          target: interaction.target,\n          value: interaction.value,\n        },\n        context: interaction.context,\n      };\n\n      this.trackEvent(event);\n\n      // Real-time pattern detection\n      if (this.config.enableRealTimeAnalysis) {\n        this.detectRealTimePatterns();\n      }\n    } catch (error) {\n      this.emit('error', error instanceof Error ? error : new Error(String(error)));\n    }\n  }\n\n  /**\n   * Track custom analytics event\n   */\n  trackEvent(event: Partial<AnalyticsEvent>): void {\n    try {\n      const fullEvent: AnalyticsEvent = {\n        eventId: event.eventId || crypto.randomUUID(),\n        sessionId: event.sessionId || this.currentSession?.sessionId || 'no-session',\n        timestamp: event.timestamp || Date.now(),\n        event: event.event || 'unknown',\n        properties: event.properties,\n        context: event.context,\n      };\n\n      // Validate event\n      AnalyticsEventSchema.parse(fullEvent);\n\n      if (this.currentSession) {\n        this.currentSession.events.push(fullEvent);\n      }\n\n      this.eventBuffer.push(fullEvent);\n      \n      // Limit buffer size\n      if (this.eventBuffer.length > this.config.bufferSize) {\n        this.eventBuffer = this.eventBuffer.slice(-this.config.bufferSize);\n      }\n\n      this.emit('data-collected', fullEvent);\n    } catch (error) {\n      this.emit('error', error instanceof Error ? error : new Error(String(error)));\n    }\n  }\n\n  /**\n   * Track preference change\n   */\n  trackPreferenceChange(\n    preferences: Record<string, unknown>,\n    context?: Record<string, unknown>\n  ): void {\n    const interaction: UserInteraction = {\n      timestamp: Date.now(),\n      type: 'preference_change',\n      value: preferences,\n      context,\n    };\n\n    this.trackInteraction(interaction);\n  }\n\n  /**\n   * Get interaction metrics for current session\n   */\n  getSessionMetrics(): InteractionMetrics | null {\n    if (!this.currentSession) return null;\n\n    const interactions = this.currentSession.interactions;\n    const sessionDuration = Date.now() - this.currentSession.startTime;\n\n    return this.calculateInteractionMetrics(interactions, sessionDuration);\n  }\n\n  /**\n   * Get engagement metrics for current session\n   */\n  getEngagementMetrics(): EngagementMetrics | null {\n    if (!this.currentSession) return null;\n\n    const events = this.currentSession.events;\n    const sessionDuration = Date.now() - this.currentSession.startTime;\n\n    return this.calculateEngagementMetrics(events, sessionDuration);\n  }\n\n  /**\n   * Analyze behavior patterns across sessions\n   */\n  analyzeBehaviorPatterns(): BehaviorPattern[] {\n    const patterns: BehaviorPattern[] = [];\n\n    // Analyze navigation patterns\n    patterns.push(...this.detectNavigationPatterns());\n\n    // Analyze interaction patterns\n    patterns.push(...this.detectInteractionPatterns());\n\n    // Analyze temporal patterns\n    patterns.push(...this.detectTemporalPatterns());\n\n    // Cache patterns\n    patterns.forEach(pattern => {\n      this.patternCache.set(pattern.id, pattern);\n    });\n\n    return patterns;\n  }\n\n  /**\n   * Generate behavioral insights\n   */\n  generateInsights(): BehaviorInsight[] {\n    const insights: BehaviorInsight[] = [];\n\n    // Accessibility insights\n    insights.push(...this.generateAccessibilityInsights());\n\n    // Usability insights\n    insights.push(...this.generateUsabilityInsights());\n\n    // Performance insights\n    insights.push(...this.generatePerformanceInsights());\n\n    // Engagement insights\n    insights.push(...this.generateEngagementInsights());\n\n    // Emit insights\n    insights.forEach(insight => {\n      this.emit('insight-generated', insight);\n    });\n\n    return insights;\n  }\n\n  /**\n   * Export analytics data\n   */\n  exportData(options: { format?: 'json' | 'csv'; includeInteractions?: boolean } = {}): string {\n    const data = {\n      sessions: this.sessions.map(session => ({\n        ...session,\n        interactions: options.includeInteractions ? session.interactions : [],\n      })),\n      patterns: Array.from(this.patternCache.values()),\n      summary: this.generateSummaryStatistics(),\n    };\n\n    if (options.format === 'csv') {\n      return this.convertToCSV(data);\n    }\n\n    return JSON.stringify(data, null, 2);\n  }\n\n  /**\n   * Clear all analytics data\n   */\n  clearData(): void {\n    this.sessions = [];\n    this.eventBuffer = [];\n    this.patternCache.clear();\n    this.anomalyBaselines.clear();\n    if (this.currentSession) {\n      this.endSession();\n    }\n  }\n\n  /**\n   * Clean up and stop analytics\n   */\n  destroy(): void {\n    this.endSession();\n    this.clearSessionTimeout();\n    this.removeAllListeners();\n  }\n\n  // Private methods\n\n  private generateSessionId(): string {\n    return `session_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n  }\n\n  private getViewportInfo(): { width: number; height: number } {\n    if (typeof window !== 'undefined') {\n      return {\n        width: window.innerWidth,\n        height: window.innerHeight,\n      };\n    }\n    return { width: 0, height: 0 };\n  }\n\n  private resetSessionTimeout(): void {\n    this.clearSessionTimeout();\n    this.sessionTimeout = setTimeout(() => {\n      this.endSession();\n    }, this.config.sessionTimeout);\n  }\n\n  private clearSessionTimeout(): void {\n    if (this.sessionTimeout) {\n      clearTimeout(this.sessionTimeout);\n      this.sessionTimeout = undefined;\n    }\n  }\n\n  private calculateInteractionMetrics(\n    interactions: UserInteraction[],\n    sessionDuration: number\n  ): InteractionMetrics {\n    const interactionRate = (interactions.length / sessionDuration) * 60000; // per minute\n    \n    let totalTimeDiff = 0;\n    for (let i = 1; i < interactions.length; i++) {\n      totalTimeDiff += interactions[i].timestamp - interactions[i - 1].timestamp;\n    }\n    const avgTimeBetweenInteractions = totalTimeDiff / Math.max(1, interactions.length - 1);\n\n    const typeCount = new Map<string, number>();\n    interactions.forEach(interaction => {\n      typeCount.set(interaction.type, (typeCount.get(interaction.type) || 0) + 1);\n    });\n\n    const dominantTypes = Array.from(typeCount.entries())\n      .sort(([, a], [, b]) => b - a)\n      .slice(0, 3)\n      .map(([type]) => type);\n\n    return {\n      totalInteractions: interactions.length,\n      interactionRate,\n      avgTimeBetweenInteractions,\n      dominantInteractionTypes: dominantTypes,\n      errorRate: 0, // Would calculate based on error events\n      completionRate: 0.85, // Placeholder - would calculate based on goal completion\n    };\n  }\n\n  private calculateEngagementMetrics(\n    events: AnalyticsEvent[],\n    sessionDuration: number\n  ): EngagementMetrics {\n    const pageViews = events.filter(e => e.event.includes('page')).length;\n    const scrollEvents = events.filter(e => e.event.includes('scroll')).length;\n    const clickEvents = events.filter(e => e.event.includes('click')).length;\n\n    return {\n      sessionDuration,\n      bounceRate: pageViews <= 1 ? 1 : 0,\n      pageViews,\n      scrollDepth: Math.min(scrollEvents / 10, 1), // Normalized\n      clickThroughRate: clickEvents / Math.max(1, pageViews),\n      taskCompletionRate: 0.8, // Placeholder\n    };\n  }\n\n  private detectRealTimePatterns(): void {\n    if (!this.currentSession || this.currentSession.interactions.length < 5) return;\n\n    const recentInteractions = this.currentSession.interactions.slice(-10);\n    \n    // Detect rapid scrolling pattern\n    const scrolls = recentInteractions.filter(i => i.type === 'scroll');\n    if (scrolls.length > 5) {\n      const pattern: BehaviorPattern = {\n        id: `rapid_scroll_${Date.now()}`,\n        type: 'interaction',\n        pattern: 'rapid_scrolling',\n        confidence: 0.8,\n        frequency: scrolls.length / recentInteractions.length,\n        contexts: ['current_session'],\n        impact: 'negative',\n        recommendations: ['Enable motion reduction', 'Increase content chunking'],\n      };\n      \n      this.emit('pattern-detected', pattern);\n    }\n  }\n\n  private analyzeSession(session: SessionData): void {\n    const endTime = session.endTime || Date.now();\n    const metrics = this.calculateInteractionMetrics(\n      session.interactions,\n      endTime - session.startTime\n    );\n\n    // Detect anomalies\n    if (metrics.interactionRate > 10) { // Very high interaction rate\n      const anomaly: BehaviorAnomaly = {\n        id: `high_interaction_rate_${session.sessionId}`,\n        type: 'unusual_pattern',\n        description: 'Unusually high interaction rate detected',\n        severity: 'medium',\n        affectedMetrics: ['interaction_rate'],\n        timestamp: endTime,\n        context: { sessionId: session.sessionId, rate: metrics.interactionRate },\n      };\n      \n      this.emit('anomaly-detected', anomaly);\n    }\n  }\n\n  private detectNavigationPatterns(): BehaviorPattern[] {\n    // Analyze navigation patterns across sessions\n    // This is a simplified implementation\n    return [\n      {\n        id: 'common_navigation_path',\n        type: 'navigation',\n        pattern: 'home -> settings -> preferences',\n        confidence: 0.75,\n        frequency: 0.6,\n        contexts: ['multiple_sessions'],\n        impact: 'positive',\n        recommendations: ['Optimize preferences access'],\n      },\n    ];\n  }\n\n  private detectInteractionPatterns(): BehaviorPattern[] {\n    // Analyze interaction patterns\n    return [\n      {\n        id: 'preference_adjustment_frequency',\n        type: 'preference',\n        pattern: 'frequent_font_size_changes',\n        confidence: 0.8,\n        frequency: 0.4,\n        contexts: ['accessibility_settings'],\n        impact: 'neutral',\n        recommendations: ['Provide font size presets', 'Add visual preview'],\n      },\n    ];\n  }\n\n  private detectTemporalPatterns(): BehaviorPattern[] {\n    // Analyze temporal usage patterns\n    return [\n      {\n        id: 'time_of_day_usage',\n        type: 'temporal',\n        pattern: 'evening_high_contrast_preference',\n        confidence: 0.7,\n        frequency: 0.5,\n        contexts: ['evening_sessions'],\n        impact: 'positive',\n        recommendations: ['Auto-enable high contrast in evening'],\n      },\n    ];\n  }\n\n  private generateAccessibilityInsights(): BehaviorInsight[] {\n    return [\n      {\n        id: 'font_size_insight',\n        category: 'accessibility',\n        title: 'Font Size Optimization Opportunity',\n        description: 'Users frequently adjust font size, indicating default may be suboptimal',\n        evidence: ['High frequency of font size changes', 'Consistent upward adjustments'],\n        actionItems: ['Increase default font size', 'Add font size presets'],\n        priority: 0.8,\n        confidence: 0.75,\n      },\n    ];\n  }\n\n  private generateUsabilityInsights(): BehaviorInsight[] {\n    return [\n      {\n        id: 'navigation_efficiency',\n        category: 'usability',\n        title: 'Settings Access Could Be Streamlined',\n        description: 'Users take multiple steps to reach accessibility settings',\n        evidence: ['Long navigation paths to preferences', 'Multiple back-and-forth patterns'],\n        actionItems: ['Add accessibility quick toggle', 'Improve settings discoverability'],\n        priority: 0.6,\n        confidence: 0.7,\n      },\n    ];\n  }\n\n  private generatePerformanceInsights(): BehaviorInsight[] {\n    return [\n      {\n        id: 'interaction_lag',\n        category: 'performance',\n        title: 'Potential Input Lag Detected',\n        description: 'Longer than expected intervals between user actions and responses',\n        evidence: ['Delayed interaction patterns', 'Repeated identical actions'],\n        actionItems: ['Optimize response times', 'Add loading indicators'],\n        priority: 0.7,\n        confidence: 0.65,\n      },\n    ];\n  }\n\n  private generateEngagementInsights(): BehaviorInsight[] {\n    return [\n      {\n        id: 'session_length',\n        category: 'engagement',\n        title: 'Positive Engagement with Accessibility Features',\n        description: 'Users spend significant time exploring accessibility options',\n        evidence: ['Long sessions in accessibility settings', 'Multiple feature trials'],\n        actionItems: ['Highlight successful adaptations', 'Provide usage tips'],\n        priority: 0.5,\n        confidence: 0.8,\n      },\n    ];\n  }\n\n  private generateSummaryStatistics(): Record<string, unknown> {\n    const totalSessions = this.sessions.length;\n    const totalInteractions = this.sessions.reduce((sum, s) => sum + s.interactions.length, 0);\n    const avgSessionDuration = this.sessions.reduce(\n      (sum, s) => sum + ((s.endTime || Date.now()) - s.startTime),\n      0\n    ) / Math.max(1, totalSessions);\n\n    return {\n      totalSessions,\n      totalInteractions,\n      avgSessionDuration,\n      avgInteractionsPerSession: totalInteractions / Math.max(1, totalSessions),\n      patternsDetected: this.patternCache.size,\n    };\n  }\n\n  private convertToCSV(data: any): string {\n    // Simplified CSV conversion\n    const headers = ['sessionId', 'startTime', 'endTime', 'interactionCount', 'eventCount'];\n    const rows = data.sessions.map((session: SessionData): (string | number)[] => [\n      session.sessionId,\n      session.startTime,\n      session.endTime || '',\n      session.interactions.length,\n      session.events.length,\n    ]);\n\n    return [headers.join(','), ...rows.map(row => row.join(','))].join('\\n');\n  }\n} "],"names":["UserInteractionSchema","z","AnalyticsEventSchema","BehaviorAnalytics","EventEmitter","config","sessionId","id","interaction","event","error","fullEvent","preferences","context","interactions","sessionDuration","events","patterns","pattern","insights","insight","options","data","session","interactionRate","totalTimeDiff","i","avgTimeBetweenInteractions","typeCount","dominantTypes","a","b","type","pageViews","e","scrollEvents","clickEvents","recentInteractions","scrolls","endTime","metrics","anomaly","totalSessions","totalInteractions","sum","s","avgSessionDuration","headers","rows","row"],"mappings":"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"}