{"version":3,"file":"index.cjs","sources":["../src/adapters/base-adapter.ts","../src/adapters/openai-adapter.ts","../src/adapters/claude-adapter.ts","../src/adapters/ollama-adapter.ts","../src/predictable/predictable-ai.ts","../src/advanced/adaptive-engine.ts","../src/advanced/neural-adaptation.ts","../src/advanced/real-time-optimization.ts","../src/enterprise/sso-integration.ts","../src/enterprise/analytics-dashboard.ts","../src/enterprise/deployment-tools.ts","../src/index.ts"],"sourcesContent":["import type { AIAdapter, AIAdapterConfig, AIMessage, AIResponse, AICompletionOptions, AIStreamChunk } from '../types/index.js';\n\nexport abstract class BaseAIAdapter implements AIAdapter {\n  protected config: AIAdapterConfig;\n  protected currentModel: string;\n\n  constructor(config: AIAdapterConfig) {\n    this.config = config;\n    this.currentModel = config.model || this.getDefaultModel();\n  }\n\n  abstract get name(): string;\n  abstract get models(): string[];\n  protected abstract getDefaultModel(): string;\n\n  abstract complete(messages: AIMessage[], options?: AICompletionOptions): Promise<AIResponse>;\n  abstract stream?(messages: AIMessage[], options?: AICompletionOptions): AsyncIterable<AIStreamChunk>;\n  abstract isAvailable(): Promise<boolean>;\n\n  getModel(): string {\n    return this.currentModel;\n  }\n\n  setModel(model: string): void {\n    if (!this.models.includes(model)) {\n      throw new Error(`Model ${model} is not supported by ${this.name}`);\n    }\n    this.currentModel = model;\n  }\n\n  protected async retry<T>(\n    operation: () => Promise<T>,\n    attempts = this.config.retryAttempts || 3,\n    delay = this.config.retryDelay || 1000\n  ): Promise<T> {\n    let lastError: Error;\n\n    for (let attempt = 1; attempt <= attempts; attempt++) {\n      try {\n        return await operation();\n      } catch (error) {\n        lastError = error as Error;\n        \n        if (attempt === attempts) {\n          throw lastError;\n        }\n\n        if (this.isRetryableError(error)) {\n          await this.sleep(delay * Math.pow(2, attempt - 1));\n        } else {\n          throw lastError;\n        }\n      }\n    }\n\n    throw lastError!;\n  }\n\n  protected isRetryableError(error: unknown): boolean {\n    if (error instanceof Error) {\n      const message = error.message.toLowerCase();\n      return (\n        message.includes('timeout') ||\n        message.includes('rate limit') ||\n        message.includes('503') ||\n        message.includes('502') ||\n        message.includes('500')\n      );\n    }\n    return false;\n  }\n\n  protected sleep(ms: number): Promise<void> {\n    return new Promise(resolve => setTimeout(resolve, ms));\n  }\n\n  protected formatMessages(messages: AIMessage[]): unknown[] {\n    return messages.map(msg => ({\n      role: msg.role,\n      content: msg.content,\n    }));\n  }\n\n  protected createAbortController(signal?: AbortSignal, timeout?: number): AbortController {\n    const controller = new AbortController();\n    \n    if (signal) {\n      signal.addEventListener('abort', () => controller.abort());\n    }\n    \n    if (timeout) {\n      setTimeout(() => controller.abort(), timeout);\n    }\n    \n    return controller;\n  }\n}","import { BaseAIAdapter } from './base-adapter.js';\nimport type { AIMessage, AIResponse, AICompletionOptions, AIStreamChunk, AIAdapterConfig } from '../types/index.js';\n\nexport interface OpenAIAdapterConfig extends AIAdapterConfig {\n  organization?: string;\n}\n\nexport class OpenAIAdapter extends BaseAIAdapter {\n  private openai: any; // Will be dynamically imported\n\n  constructor(config: OpenAIAdapterConfig) {\n    super(config);\n    this.initializeOpenAI();\n  }\n\n  get name(): string {\n    return 'OpenAI';\n  }\n\n  get models(): string[] {\n    return [\n      'gpt-4',\n      'gpt-4-turbo',\n      'gpt-4-turbo-preview',\n      'gpt-3.5-turbo',\n      'gpt-3.5-turbo-16k',\n    ];\n  }\n\n  protected getDefaultModel(): string {\n    return 'gpt-4-turbo-preview';\n  }\n\n  async complete(messages: AIMessage[], options: AICompletionOptions = {}): Promise<AIResponse> {\n    if (!this.openai) {\n      throw new Error('OpenAI client not initialized. Make sure to install the openai package.');\n    }\n\n    return this.retry(async () => {\n      const controller = this.createAbortController(options.abortSignal, this.config.timeout);\n\n      const response = await this.openai.chat.completions.create({\n        model: this.currentModel,\n        messages: this.formatMessages(messages),\n        max_tokens: options.maxTokens,\n        temperature: options.temperature,\n        top_p: options.topP,\n        stop: options.stop,\n        stream: false,\n      }, {\n        signal: controller.signal,\n      });\n\n      return {\n        content: response.choices[0]?.message?.content || '',\n        usage: {\n          promptTokens: response.usage?.prompt_tokens || 0,\n          completionTokens: response.usage?.completion_tokens || 0,\n          totalTokens: response.usage?.total_tokens || 0,\n        },\n        finishReason: response.choices[0]?.finish_reason as AIResponse['finishReason'],\n        metadata: {\n          model: response.model,\n          created: response.created,\n        },\n      };\n    });\n  }\n\n  async *stream(messages: AIMessage[], options: AICompletionOptions = {}): AsyncIterable<AIStreamChunk> {\n    if (!this.openai) {\n      throw new Error('OpenAI client not initialized. Make sure to install the openai package.');\n    }\n\n    const controller = this.createAbortController(options.abortSignal, this.config.timeout);\n\n    const stream = await this.openai.chat.completions.create({\n      model: this.currentModel,\n      messages: this.formatMessages(messages),\n      max_tokens: options.maxTokens,\n      temperature: options.temperature,\n      top_p: options.topP,\n      stop: options.stop,\n      stream: true,\n    }, {\n      signal: controller.signal,\n    });\n\n    for await (const chunk of stream) {\n      const delta = chunk.choices[0]?.delta?.content || '';\n      const done = chunk.choices[0]?.finish_reason !== null;\n\n      yield {\n        delta,\n        done,\n        usage: chunk.usage ? {\n          promptTokens: chunk.usage.prompt_tokens || 0,\n          completionTokens: chunk.usage.completion_tokens || 0,\n          totalTokens: chunk.usage.total_tokens || 0,\n        } : undefined,\n      };\n\n      if (done) break;\n    }\n  }\n\n  async isAvailable(): Promise<boolean> {\n    try {\n      if (!this.openai) {\n        return false;\n      }\n      await this.openai.models.list();\n      return true;\n    } catch (error) {\n      return false;\n    }\n  }\n\n  private async initializeOpenAI(): Promise<void> {\n    try {\n      const { default: OpenAI } = await import('openai');\n      this.openai = new OpenAI({\n        apiKey: this.config.apiKey,\n        baseURL: this.config.baseURL,\n        organization: (this.config as OpenAIAdapterConfig).organization,\n      });\n    } catch (error) {\n      console.warn('OpenAI package not found. Install it to use OpenAI adapter.');\n    }\n  }\n}","import { BaseAIAdapter } from './base-adapter.js';\nimport type { AIMessage, AIResponse, AICompletionOptions, AIStreamChunk, AIAdapterConfig } from '../types/index.js';\n\nexport class ClaudeAdapter extends BaseAIAdapter {\n  private anthropic: any; // Will be dynamically imported\n\n  constructor(config: AIAdapterConfig) {\n    super(config);\n    this.initializeAnthropic();\n  }\n\n  get name(): string {\n    return 'Claude';\n  }\n\n  get models(): string[] {\n    return [\n      'claude-3-5-sonnet-20241022',\n      'claude-3-5-haiku-20241022',\n      'claude-3-opus-20240229',\n      'claude-3-sonnet-20240229',\n      'claude-3-haiku-20240307',\n    ];\n  }\n\n  protected getDefaultModel(): string {\n    return 'claude-3-5-sonnet-20241022';\n  }\n\n  async complete(messages: AIMessage[], options: AICompletionOptions = {}): Promise<AIResponse> {\n    if (!this.anthropic) {\n      throw new Error('Anthropic SDK not initialized. Make sure to install @anthropic-ai/sdk package.');\n    }\n\n    return this.retry(async () => {\n      const { system, messages: formattedMessages } = this.formatClaudeMessages(messages);\n\n      const response = await this.anthropic.messages.create({\n        model: this.currentModel,\n        max_tokens: options.maxTokens || 4096,\n        temperature: options.temperature,\n        top_p: options.topP,\n        stop_sequences: options.stop,\n        system,\n        messages: formattedMessages,\n        stream: false,\n      });\n\n      return {\n        content: response.content[0]?.text || '',\n        usage: {\n          promptTokens: response.usage?.input_tokens || 0,\n          completionTokens: response.usage?.output_tokens || 0,\n          totalTokens: (response.usage?.input_tokens || 0) + (response.usage?.output_tokens || 0),\n        },\n        finishReason: response.stop_reason as AIResponse['finishReason'],\n        metadata: {\n          model: response.model,\n          role: response.role,\n        },\n      };\n    });\n  }\n\n  async *stream(messages: AIMessage[], options: AICompletionOptions = {}): AsyncIterable<AIStreamChunk> {\n    if (!this.anthropic) {\n      throw new Error('Anthropic SDK not initialized. Make sure to install @anthropic-ai/sdk package.');\n    }\n\n    const { system, messages: formattedMessages } = this.formatClaudeMessages(messages);\n\n    const stream = await this.anthropic.messages.create({\n      model: this.currentModel,\n      max_tokens: options.maxTokens || 4096,\n      temperature: options.temperature,\n      top_p: options.topP,\n      stop_sequences: options.stop,\n      system,\n      messages: formattedMessages,\n      stream: true,\n    });\n\n    for await (const event of stream) {\n      if (event.type === 'content_block_delta') {\n        yield {\n          delta: event.delta?.text || '',\n          done: false,\n        };\n      } else if (event.type === 'message_stop') {\n        yield {\n          delta: '',\n          done: true,\n          usage: event.message?.usage ? {\n            promptTokens: event.message.usage.input_tokens || 0,\n            completionTokens: event.message.usage.output_tokens || 0,\n            totalTokens: (event.message.usage.input_tokens || 0) + (event.message.usage.output_tokens || 0),\n          } : undefined,\n        };\n        break;\n      }\n    }\n  }\n\n  async isAvailable(): Promise<boolean> {\n    try {\n      if (!this.anthropic) {\n        return false;\n      }\n      // Simple test to check if the API key is valid\n      await this.anthropic.messages.create({\n        model: this.currentModel,\n        max_tokens: 1,\n        messages: [{ role: 'user', content: 'test' }],\n      });\n      return true;\n    } catch (error) {\n      // If it's an auth error but the SDK is working, return false\n      // If it's a network error, also return false\n      return false;\n    }\n  }\n\n  private formatClaudeMessages(messages: AIMessage[]): { system?: string; messages: Array<{ role: string; content: string }> } {\n    let system: string | undefined;\n    const formattedMessages: Array<{ role: string; content: string }> = [];\n\n    for (const message of messages) {\n      if (message.role === 'system') {\n        system = message.content;\n      } else {\n        formattedMessages.push({\n          role: message.role,\n          content: message.content,\n        });\n      }\n    }\n\n    return { system, messages: formattedMessages };\n  }\n\n  private async initializeAnthropic(): Promise<void> {\n    try {\n      const { default: Anthropic } = await import('@anthropic-ai/sdk');\n      this.anthropic = new Anthropic({\n        apiKey: this.config.apiKey,\n        baseURL: this.config.baseURL,\n      });\n    } catch (error) {\n      console.warn('Anthropic SDK not found. Install @anthropic-ai/sdk to use Claude adapter.');\n    }\n  }\n}","import { BaseAIAdapter } from './base-adapter.js';\nimport type { AIMessage, AIResponse, AICompletionOptions, AIStreamChunk, AIAdapterConfig } from '../types/index.js';\n\nexport interface OllamaAdapterConfig extends AIAdapterConfig {\n  baseURL?: string;\n}\n\nexport class OllamaAdapter extends BaseAIAdapter {\n  private baseURL: string;\n\n  constructor(config: OllamaAdapterConfig) {\n    super(config);\n    this.baseURL = config.baseURL || 'http://localhost:11434';\n  }\n\n  get name(): string {\n    return 'Ollama';\n  }\n\n  get models(): string[] {\n    return [\n      'deepseek-r1:32b',\n      'llama3.2:3b',\n      'llama3.2:1b',\n      'phi3:mini',\n      'mistral:7b',\n      'codellama:7b',\n      'gemma2:2b',\n    ];\n  }\n\n  protected getDefaultModel(): string {\n    return 'deepseek-r1:32b';\n  }\n\n  async complete(messages: AIMessage[], options: AICompletionOptions = {}): Promise<AIResponse> {\n    return this.retry(async () => {\n      const controller = this.createAbortController(options.abortSignal, this.config.timeout);\n\n      const response = await fetch(`${this.baseURL}/api/chat`, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n        body: JSON.stringify({\n          model: this.currentModel,\n          messages: this.formatMessages(messages),\n          stream: false,\n          options: {\n            temperature: options.temperature,\n            top_p: options.topP,\n            stop: options.stop,\n            num_predict: options.maxTokens,\n          },\n        }),\n        signal: controller.signal,\n      });\n\n      if (!response.ok) {\n        throw new Error(`Ollama API error: ${response.status} ${response.statusText}`);\n      }\n\n      const data = await response.json();\n\n      return {\n        content: data.message?.content || '',\n        usage: {\n          promptTokens: data.prompt_eval_count || 0,\n          completionTokens: data.eval_count || 0,\n          totalTokens: (data.prompt_eval_count || 0) + (data.eval_count || 0),\n        },\n        finishReason: data.done ? 'stop' : 'length',\n        metadata: {\n          model: data.model,\n          created_at: data.created_at,\n          total_duration: data.total_duration,\n          load_duration: data.load_duration,\n          prompt_eval_duration: data.prompt_eval_duration,\n          eval_duration: data.eval_duration,\n        },\n      };\n    });\n  }\n\n  async *stream(messages: AIMessage[], options: AICompletionOptions = {}): AsyncIterable<AIStreamChunk> {\n    const controller = this.createAbortController(options.abortSignal, this.config.timeout);\n\n    const response = await fetch(`${this.baseURL}/api/chat`, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        model: this.currentModel,\n        messages: this.formatMessages(messages),\n        stream: true,\n        options: {\n          temperature: options.temperature,\n          top_p: options.topP,\n          stop: options.stop,\n          num_predict: options.maxTokens,\n        },\n      }),\n      signal: controller.signal,\n    });\n\n    if (!response.ok) {\n      throw new Error(`Ollama API error: ${response.status} ${response.statusText}`);\n    }\n\n    const reader = response.body?.getReader();\n    if (!reader) {\n      throw new Error('No response body');\n    }\n\n    const decoder = new TextDecoder();\n    let buffer = '';\n\n    try {\n      while (true) {\n        const { done, value } = await reader.read();\n        if (done) break;\n\n        buffer += decoder.decode(value, { stream: true });\n        const lines = buffer.split('\\n');\n        buffer = lines.pop() || '';\n\n        for (const line of lines) {\n          if (line.trim()) {\n            try {\n              const chunk = JSON.parse(line);\n              const delta = chunk.message?.content || '';\n              const isDone = chunk.done || false;\n\n              yield {\n                delta,\n                done: isDone,\n                usage: isDone ? {\n                  promptTokens: chunk.prompt_eval_count || 0,\n                  completionTokens: chunk.eval_count || 0,\n                  totalTokens: (chunk.prompt_eval_count || 0) + (chunk.eval_count || 0),\n                } : undefined,\n              };\n\n              if (isDone) return;\n            } catch (parseError) {\n              console.warn('Failed to parse Ollama chunk:', line);\n            }\n          }\n        }\n      }\n    } finally {\n      reader.releaseLock();\n    }\n  }\n\n  async isAvailable(): Promise<boolean> {\n    try {\n      const response = await fetch(`${this.baseURL}/api/tags`, {\n        method: 'GET',\n        signal: AbortSignal.timeout(5000),\n      });\n      return response.ok;\n    } catch (error) {\n      return false;\n    }\n  }\n\n  async getAvailableModels(): Promise<string[]> {\n    try {\n      const response = await fetch(`${this.baseURL}/api/tags`);\n      if (!response.ok) {\n        throw new Error('Failed to fetch models');\n      }\n\n      const data = await response.json();\n      return data.models?.map((model: { name: string }) => model.name) || [];\n    } catch (error) {\n      console.warn('Failed to fetch available models from Ollama:', error);\n      return this.models;\n    }\n  }\n\n  async pullModel(model: string): Promise<void> {\n    const response = await fetch(`${this.baseURL}/api/pull`, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({ name: model }),\n    });\n\n    if (!response.ok) {\n      throw new Error(`Failed to pull model ${model}: ${response.statusText}`);\n    }\n\n    // Stream the pull progress\n    const reader = response.body?.getReader();\n    if (!reader) return;\n\n    const decoder = new TextDecoder();\n    try {\n      while (true) {\n        const { done, value } = await reader.read();\n        if (done) break;\n\n        const chunk = decoder.decode(value);\n        console.log('Pull progress:', chunk);\n      }\n    } finally {\n      reader.releaseLock();\n    }\n  }\n}","import { EventEmitter } from 'eventemitter3';\nimport type { CognitivePreferences } from '@neuroadapt/core';\nimport type {\n  AIAdapter,\n  AIMessage,\n  AIResponse,\n  AIStreamChunk,\n  PredictableAIConfig,\n  PredictableAIEvents,\n  UndoState,\n  AICompletionOptions,\n} from '../types/index.js';\n\nexport class PredictableAI extends EventEmitter<PredictableAIEvents> {\n  private adapter: AIAdapter;\n  private config: PredictableAIConfig;\n  private undoHistory: UndoState[] = [];\n  private currentStep = 0;\n  private cache = new Map<string, AIResponse>();\n\n  constructor(adapter: AIAdapter, config: Partial<PredictableAIConfig> = {}) {\n    super();\n    this.adapter = adapter;\n    this.config = this.mergeDefaultConfig(config);\n  }\n\n  async complete(prompt: string, options: AICompletionOptions = {}): Promise<AIResponse> {\n    this.emit('response:start', { prompt });\n\n    try {\n      const messages = this.prepareMessages(prompt);\n      const cacheKey = this.getCacheKey(messages);\n\n      // Check cache for consistent responses\n      if (this.config.consistencyLevel === 'high' && this.cache.has(cacheKey)) {\n        const cachedResponse = this.cache.get(cacheKey)!;\n        this.emit('response:complete', { response: cachedResponse });\n        return cachedResponse;\n      }\n\n      const completionOptions = this.enhanceOptions(options);\n      const response = await this.adapter.complete(messages, completionOptions);\n      \n      // Cache the response\n      if (this.config.consistencyLevel !== 'low') {\n        this.cache.set(cacheKey, response);\n      }\n\n      // Store in undo history\n      if (this.config.allowUndo) {\n        this.addToUndoHistory(prompt, response);\n      }\n\n      // Apply pacing if needed\n      await this.applyPacing();\n\n      this.emit('response:complete', { response });\n      return response;\n    } catch (error) {\n      this.emit('response:error', { error: error as Error });\n      throw error;\n    }\n  }\n\n  async *stream(prompt: string, options: AICompletionOptions = {}): AsyncIterable<AIStreamChunk> {\n    if (!this.adapter.stream) {\n      throw new Error(`${this.adapter.name} adapter does not support streaming`);\n    }\n\n    this.emit('response:start', { prompt });\n\n    try {\n      const messages = this.prepareMessages(prompt);\n      const completionOptions = this.enhanceOptions(options);\n      \n      let fullResponse = '';\n      const startTime = Date.now();\n\n      for await (const chunk of this.adapter.stream(messages, completionOptions)) {\n        fullResponse += chunk.delta;\n        this.emit('response:chunk', { chunk });\n        yield chunk;\n\n        if (chunk.done) {\n          const response: AIResponse = {\n            content: fullResponse,\n            usage: chunk.usage,\n            finishReason: 'stop',\n            metadata: {\n              streamDuration: Date.now() - startTime,\n            },\n          };\n\n          // Store in undo history\n          if (this.config.allowUndo) {\n            this.addToUndoHistory(prompt, response);\n          }\n\n          this.emit('response:complete', { response });\n          break;\n        }\n      }\n    } catch (error) {\n      this.emit('response:error', { error: error as Error });\n      throw error;\n    }\n  }\n\n  updateConfig(newConfig: Partial<PredictableAIConfig>): void {\n    const previousConfig = { ...this.config };\n    this.config = { ...this.config, ...newConfig };\n    \n    // Clear cache if consistency level changed\n    if (newConfig.consistencyLevel && newConfig.consistencyLevel !== previousConfig.consistencyLevel) {\n      this.cache.clear();\n    }\n\n    this.emit('config:changed', { config: newConfig });\n  }\n\n  updateFromCognitivePreferences(preferences: CognitivePreferences): void {\n    const configUpdate: Partial<PredictableAIConfig> = {};\n\n    // Map reading speed to pacing\n    if (preferences.readingSpeed !== undefined) {\n      const pacingMap = {\n        slow: 'slow' as const,\n        medium: 'normal' as const,\n        fast: 'quick' as const,\n      };\n      configUpdate.pacing = pacingMap[preferences.readingSpeed];\n    }\n\n    // Map explanation level\n    if (preferences.explanationLevel !== undefined) {\n      const explanationMap = {\n        simple: 'simple' as const,\n        moderate: 'moderate' as const,\n        detailed: 'detailed' as const,\n      };\n      configUpdate.explanationLevel = explanationMap[preferences.explanationLevel];\n    }\n\n    // Map processing pace to consistency\n    if (preferences.processingPace !== undefined) {\n      const consistencyMap = {\n        relaxed: 'high' as const,\n        standard: 'moderate' as const,\n        quick: 'low' as const,\n      };\n      configUpdate.consistencyLevel = consistencyMap[preferences.processingPace];\n    }\n\n    this.updateConfig(configUpdate);\n  }\n\n  undo(): UndoState | null {\n    if (!this.config.allowUndo || this.undoHistory.length === 0) {\n      return null;\n    }\n\n    if (this.currentStep > 0) {\n      this.currentStep--;\n      const state = this.undoHistory[this.currentStep];\n      this.emit('undo:performed', { step: this.currentStep, state });\n      return state;\n    }\n\n    return null;\n  }\n\n  redo(): UndoState | null {\n    if (!this.config.allowUndo || this.currentStep >= this.undoHistory.length - 1) {\n      return null;\n    }\n\n    this.currentStep++;\n    const state = this.undoHistory[this.currentStep];\n    this.emit('undo:performed', { step: this.currentStep, state });\n    return state;\n  }\n\n  canUndo(): boolean {\n    return this.config.allowUndo && this.currentStep > 0;\n  }\n\n  canRedo(): boolean {\n    return this.config.allowUndo && this.currentStep < this.undoHistory.length - 1;\n  }\n\n  getUndoHistory(): UndoState[] {\n    return [...this.undoHistory];\n  }\n\n  clearUndoHistory(): void {\n    this.undoHistory = [];\n    this.currentStep = 0;\n  }\n\n  clearCache(): void {\n    this.cache.clear();\n  }\n\n  getConfig(): PredictableAIConfig {\n    return { ...this.config };\n  }\n\n  private prepareMessages(prompt: string): AIMessage[] {\n    const systemPrompt = this.createSystemPrompt();\n    const messages: AIMessage[] = [];\n\n    if (systemPrompt) {\n      messages.push({\n        role: 'system',\n        content: systemPrompt,\n        timestamp: Date.now(),\n      });\n    }\n\n    messages.push({\n      role: 'user',\n      content: prompt,\n      timestamp: Date.now(),\n    });\n\n    return messages;\n  }\n\n  private createSystemPrompt(): string {\n    const prompts: string[] = [];\n\n    // Tone guidance\n    const toneInstructions = {\n      'calm-supportive': 'Respond in a calm, supportive manner. Use gentle language and provide reassurance.',\n      'encouraging': 'Be encouraging and positive. Focus on possibilities and strengths.',\n      'neutral': 'Maintain a neutral, professional tone. Be clear and objective.',\n      'clinical': 'Use precise, clinical language. Be factual and methodical.',\n      'friendly': 'Be warm and friendly. Use conversational language while remaining helpful.',\n    };\n    prompts.push(toneInstructions[this.config.tone]);\n\n    // Explanation level guidance\n    const explanationInstructions = {\n      simple: 'Use simple language and basic concepts. Avoid jargon and complex terms.',\n      moderate: 'Provide balanced explanations with some detail. Use accessible language.',\n      detailed: 'Give comprehensive explanations with examples and context.',\n      technical: 'Use precise technical language and detailed explanations.',\n    };\n    prompts.push(explanationInstructions[this.config.explanationLevel]);\n\n    // Analogy guidance\n    if (this.config.useAnalogies) {\n      prompts.push('When helpful, use analogies and real-world examples to clarify concepts.');\n    }\n\n    // Pacing guidance\n    const pacingInstructions = {\n      slow: 'Take time to explain each step. Break down complex ideas into smaller parts.',\n      normal: 'Provide clear explanations at a steady pace.',\n      quick: 'Be concise and direct. Focus on key points.',\n    };\n    prompts.push(pacingInstructions[this.config.pacing]);\n\n    return prompts.join(' ');\n  }\n\n  private enhanceOptions(options: AICompletionOptions): AICompletionOptions {\n    const enhanced = { ...options };\n\n    // Set consistent temperature based on consistency level\n    if (enhanced.temperature === undefined) {\n      const temperatureMap = {\n        low: 0.8,\n        moderate: 0.5,\n        high: 0.2,\n      };\n      enhanced.temperature = temperatureMap[this.config.consistencyLevel];\n    }\n\n    return enhanced;\n  }\n\n  private addToUndoHistory(prompt: string, response: AIResponse): void {\n    const state: UndoState = {\n      step: this.currentStep + 1,\n      prompt,\n      response,\n      timestamp: Date.now(),\n    };\n\n    // Remove any redo steps when adding new state\n    if (this.currentStep < this.undoHistory.length - 1) {\n      this.undoHistory = this.undoHistory.slice(0, this.currentStep + 1);\n    }\n\n    this.undoHistory.push(state);\n    this.currentStep = this.undoHistory.length - 1;\n\n    // Limit undo history size\n    if (this.undoHistory.length > this.config.maxUndoSteps) {\n      this.undoHistory.shift();\n      this.currentStep--;\n    }\n  }\n\n  private getCacheKey(messages: AIMessage[]): string {\n    const content = messages.map(m => `${m.role}:${m.content}`).join('|');\n    const configKey = `${this.config.tone}:${this.config.explanationLevel}:${this.config.pacing}`;\n    return `${this.adapter.name}:${this.adapter.getModel()}:${configKey}:${content}`;\n  }\n\n  private async applyPacing(): Promise<void> {\n    if (this.config.pacing === 'slow') {\n      await new Promise(resolve => setTimeout(resolve, 500));\n    } else if (this.config.pacing === 'normal') {\n      await new Promise(resolve => setTimeout(resolve, 200));\n    }\n    // No delay for quick pacing\n  }\n\n  private mergeDefaultConfig(config: Partial<PredictableAIConfig>): PredictableAIConfig {\n    return {\n      tone: 'neutral',\n      explanationLevel: 'moderate',\n      pacing: 'normal',\n      consistencyLevel: 'moderate',\n      useAnalogies: true,\n      allowUndo: true,\n      maxUndoSteps: 10,\n      ...config,\n    };\n  }\n}","/**\n * Advanced Adaptive Engine - Real-time ML-powered personalization for neurodivergent users\n * @fileoverview Implements advanced machine learning algorithms for personalized accessibility adaptations\n */\n\nimport { EventEmitter } from 'eventemitter3';\nimport type { Preferences } from '@neuroadapt/core';\n\n// Define local interfaces for missing types\nexport interface CognitiveLoadMetrics {\n  cognitiveLoad: number;\n  taskComplexity: number;\n  memoryLoad: number;\n  distractorImpact: number;\n}\n\nexport interface SensoryData {\n  audioSensitivity?: number;\n  vibrationTolerance?: number;\n  lightSensitivity?: number;\n  temperaturePreference?: number;\n}\n\nexport interface AdaptationPattern {\n  id: string;\n  userId: string;\n  patterns: {\n    visual: VisualPattern;\n    cognitive: CognitivePattern;\n    motor: MotorPattern;\n    sensory: SensoryPattern;\n  };\n  confidence: number;\n  lastUpdated: Date;\n  effectivenessScore: number;\n}\n\nexport interface VisualPattern {\n  preferredContrast: number;\n  colorSensitivity: string[];\n  motionTolerance: number;\n  fontSizePreference: number;\n  brightnessAdaptation: number;\n}\n\nexport interface CognitivePattern {\n  processingSpeed: number;\n  workingMemoryCapacity: number;\n  attentionSpan: number;\n  preferredInformationDensity: number;\n  distractionSensitivity: number;\n}\n\nexport interface MotorPattern {\n  clickAccuracy: number;\n  hoverDuration: number;\n  keyboardSpeed: number;\n  preferredTargetSize: number;\n  gestureComplexity: number;\n}\n\nexport interface SensoryPattern {\n  soundSensitivity: number;\n  vibrationTolerance: number;\n  lightSensitivity: number;\n  temperaturePreference: number;\n  texturePreference: string[];\n}\n\nexport interface AdaptationEvent {\n  type: 'visual_adjustment' | 'cognitive_load_change' | 'motor_assistance' | 'sensory_calibration';\n  data: any;\n  confidence: number;\n  timestamp: Date;\n}\n\nexport interface MLModelConfig {\n  modelType: 'neural_network' | 'decision_tree' | 'random_forest' | 'svm';\n  parameters: Record<string, any>;\n  trainingDataSize: number;\n  accuracy: number;\n  lastTrained: Date;\n}\n\n/**\n * Advanced Adaptive Engine using Machine Learning for real-time personalization\n */\nexport class AdaptiveEngine extends EventEmitter {\n  private patterns: Map<string, AdaptationPattern> = new Map();\n  private mlModels: Map<string, MLModelConfig> = new Map();\n  private realTimeMetrics: Map<string, any[]> = new Map();\n  private adaptationHistory: AdaptationEvent[] = [];\n  private isLearning: boolean = true;\n  \n  constructor(\n    private config: {\n      learningRate: number;\n      confidenceThreshold: number;\n      maxPatternAge: number;\n      realTimeAdaptation: boolean;\n    } = {\n      learningRate: 0.1,\n      confidenceThreshold: 0.8,\n      maxPatternAge: 30 * 24 * 60 * 60 * 1000, // 30 days\n      realTimeAdaptation: true\n    }\n  ) {\n    super();\n    this.initializeModels();\n  }\n\n  /**\n   * Initialize machine learning models for different adaptation types\n   */\n  private initializeModels(): void {\n    // Visual adaptation model\n    this.mlModels.set('visual', {\n      modelType: 'neural_network',\n      parameters: {\n        layers: [64, 32, 16],\n        activation: 'relu',\n        learningRate: 0.001,\n        epochs: 100\n      },\n      trainingDataSize: 0,\n      accuracy: 0,\n      lastTrained: new Date()\n    });\n\n    // Cognitive load prediction model\n    this.mlModels.set('cognitive', {\n      modelType: 'random_forest',\n      parameters: {\n        n_estimators: 100,\n        max_depth: 10,\n        min_samples_split: 5\n      },\n      trainingDataSize: 0,\n      accuracy: 0,\n      lastTrained: new Date()\n    });\n\n    // Motor assistance model\n    this.mlModels.set('motor', {\n      modelType: 'svm',\n      parameters: {\n        kernel: 'rbf',\n        C: 1.0,\n        gamma: 'scale'\n      },\n      trainingDataSize: 0,\n      accuracy: 0,\n      lastTrained: new Date()\n    });\n\n    // Sensory adaptation model\n    this.mlModels.set('sensory', {\n      modelType: 'decision_tree',\n      parameters: {\n        max_depth: 15,\n        min_samples_leaf: 3,\n        criterion: 'gini'\n      },\n      trainingDataSize: 0,\n      accuracy: 0,\n      lastTrained: new Date()\n    });\n  }\n\n  /**\n   * Analyze user behavior and generate adaptation patterns\n   */\n  async analyzeUserBehavior(\n    userId: string,\n    interactions: any[],\n    preferences: Preferences,\n    cognitiveMetrics: CognitiveLoadMetrics,\n    sensoryData: SensoryData\n  ): Promise<AdaptationPattern> {\n    const existingPattern = this.patterns.get(userId);\n    \n    // Analyze visual patterns\n    const visualPattern = await this.analyzeVisualPatterns(interactions, preferences);\n    \n    // Analyze cognitive patterns\n    const cognitivePattern = await this.analyzeCognitivePatterns(cognitiveMetrics, interactions);\n    \n    // Analyze motor patterns\n    const motorPattern = await this.analyzeMotorPatterns(interactions);\n    \n    // Analyze sensory patterns\n    const sensoryPattern = await this.analyzeSensoryPatterns(sensoryData, preferences);\n    \n    // Calculate confidence based on data quality and consistency\n    const confidence = this.calculatePatternConfidence(\n      visualPattern,\n      cognitivePattern,\n      motorPattern,\n      sensoryPattern,\n      interactions.length\n    );\n    \n    // Calculate effectiveness score\n    const effectivenessScore = await this.calculateEffectivenessScore(\n      userId,\n      { visual: visualPattern, cognitive: cognitivePattern, motor: motorPattern, sensory: sensoryPattern }\n    );\n    \n    const pattern: AdaptationPattern = {\n      id: `pattern_${userId}_${Date.now()}`,\n      userId,\n      patterns: {\n        visual: visualPattern,\n        cognitive: cognitivePattern,\n        motor: motorPattern,\n        sensory: sensoryPattern\n      },\n      confidence,\n      lastUpdated: new Date(),\n      effectivenessScore\n    };\n    \n    this.patterns.set(userId, pattern);\n    \n    // Trigger real-time adaptations if enabled\n    if (this.config.realTimeAdaptation && confidence > this.config.confidenceThreshold) {\n      await this.applyRealTimeAdaptations(pattern);\n    }\n    \n    this.emit('pattern_updated', pattern);\n    return pattern;\n  }\n\n  /**\n   * Analyze visual interaction patterns\n   */\n  private async analyzeVisualPatterns(interactions: any[], preferences: Preferences): Promise<VisualPattern> {\n    const visualInteractions = interactions.filter(i => i.type === 'visual');\n    \n    // ML-based analysis of visual preferences\n    const contrastAnalysis = this.analyzeContrastPreferences(visualInteractions);\n    const colorAnalysis = this.analyzeColorSensitivity(visualInteractions, preferences);\n    const motionAnalysis = this.analyzeMotionTolerance(visualInteractions);\n    const fontAnalysis = this.analyzeFontPreferences(visualInteractions);\n    const brightnessAnalysis = this.analyzeBrightnessAdaptation(visualInteractions);\n    \n    return {\n      preferredContrast: contrastAnalysis.optimal,\n      colorSensitivity: colorAnalysis.sensitivities,\n      motionTolerance: motionAnalysis.tolerance,\n      fontSizePreference: fontAnalysis.optimalSize,\n      brightnessAdaptation: brightnessAnalysis.adaptation\n    };\n  }\n\n  /**\n   * Analyze cognitive load patterns using ML\n   */\n  private async analyzeCognitivePatterns(metrics: CognitiveLoadMetrics, interactions: any[]): Promise<CognitivePattern> {\n    const cognitiveModel = this.mlModels.get('cognitive');\n    \n    // Process cognitive metrics through ML model\n    const processingSpeed = this.predictProcessingSpeed(metrics, interactions);\n    const workingMemory = this.assessWorkingMemoryCapacity(metrics, interactions);\n    const attentionSpan = this.calculateAttentionSpan(interactions);\n    const informationDensity = this.optimizeInformationDensity(metrics, interactions);\n    const distractionSensitivity = this.assessDistractionSensitivity(metrics, interactions);\n    \n    return {\n      processingSpeed,\n      workingMemoryCapacity: workingMemory,\n      attentionSpan,\n      preferredInformationDensity: informationDensity,\n      distractionSensitivity\n    };\n  }\n\n  /**\n   * Analyze motor interaction patterns\n   */\n  private async analyzeMotorPatterns(interactions: any[]): Promise<MotorPattern> {\n    const motorInteractions = interactions.filter(i => i.type === 'motor');\n    \n    return {\n      clickAccuracy: this.calculateClickAccuracy(motorInteractions),\n      hoverDuration: this.calculateOptimalHoverDuration(motorInteractions),\n      keyboardSpeed: this.calculateKeyboardSpeed(motorInteractions),\n      preferredTargetSize: this.calculateOptimalTargetSize(motorInteractions),\n      gestureComplexity: this.assessGestureComplexity(motorInteractions)\n    };\n  }\n\n  /**\n   * Analyze sensory adaptation patterns\n   */\n  private async analyzeSensoryPatterns(sensoryData: SensoryData, preferences: Preferences): Promise<SensoryPattern> {\n    return {\n      soundSensitivity: sensoryData.audioSensitivity || 0.5,\n      vibrationTolerance: sensoryData.vibrationTolerance || 0.5,\n      lightSensitivity: sensoryData.lightSensitivity || 0.5,\n      temperaturePreference: sensoryData.temperaturePreference || 22,\n      texturePreference: preferences.sensory?.texturePreferences || []\n    };\n  }\n\n  /**\n   * Apply real-time adaptations based on patterns\n   */\n  private async applyRealTimeAdaptations(pattern: AdaptationPattern): Promise<void> {\n    const adaptations: AdaptationEvent[] = [];\n    \n    // Visual adaptations\n    if (pattern.patterns.visual.motionTolerance < 0.3) {\n      adaptations.push({\n        type: 'visual_adjustment',\n        data: { reduceMotion: true, animationDuration: 0 },\n        confidence: pattern.confidence,\n        timestamp: new Date()\n      });\n    }\n    \n    // Cognitive load adaptations\n    if (pattern.patterns.cognitive.processingSpeed < 0.5) {\n      adaptations.push({\n        type: 'cognitive_load_change',\n        data: { \n          simplifyInterface: true, \n          reduceInformationDensity: 0.3,\n          increasePausesBetweenActions: 500 \n        },\n        confidence: pattern.confidence,\n        timestamp: new Date()\n      });\n    }\n    \n    // Motor assistance adaptations\n    if (pattern.patterns.motor.clickAccuracy < 0.7) {\n      adaptations.push({\n        type: 'motor_assistance',\n        data: { \n          increaseTargetSize: 1.5,\n          enableClickAssistance: true,\n          reduceFineMotorRequirements: true \n        },\n        confidence: pattern.confidence,\n        timestamp: new Date()\n      });\n    }\n    \n    // Sensory calibrations\n    if (pattern.patterns.sensory.soundSensitivity > 0.8) {\n      adaptations.push({\n        type: 'sensory_calibration',\n        data: { \n          muteNonEssentialSounds: true,\n          reduceAudioVolume: 0.3,\n          enableVisualAlternatives: true \n        },\n        confidence: pattern.confidence,\n        timestamp: new Date()\n      });\n    }\n    \n    // Apply adaptations\n    for (const adaptation of adaptations) {\n      this.adaptationHistory.push(adaptation);\n      this.emit('adaptation_applied', adaptation);\n    }\n  }\n\n  /**\n   * Train ML models with new data\n   */\n  async trainModels(trainingData: any[]): Promise<void> {\n    for (const [modelName, model] of this.mlModels.entries()) {\n      const modelData = trainingData.filter(d => d.type === modelName);\n      \n      if (modelData.length > 10) { // Minimum data requirement\n        // Simulate ML training (in real implementation, this would use actual ML libraries)\n        const accuracy = await this.simulateModelTraining(model, modelData);\n        \n        model.accuracy = accuracy;\n        model.trainingDataSize = modelData.length;\n        model.lastTrained = new Date();\n        \n        this.emit('model_trained', { modelName, accuracy, dataSize: modelData.length });\n      }\n    }\n  }\n\n  /**\n   * Predict optimal adaptations for new user interactions\n   */\n  async predictAdaptations(\n    userId: string,\n    currentContext: any\n  ): Promise<AdaptationEvent[]> {\n    const pattern = this.patterns.get(userId);\n    if (!pattern || pattern.confidence < this.config.confidenceThreshold) {\n      return [];\n    }\n    \n    const predictions: AdaptationEvent[] = [];\n    \n    // Use ML models to predict needed adaptations\n    for (const [modelType, model] of this.mlModels.entries()) {\n      if (model.accuracy > 0.7) {\n        const prediction = await this.runModelPrediction(model, currentContext, pattern);\n        if (prediction.confidence > this.config.confidenceThreshold) {\n          predictions.push(prediction);\n        }\n      }\n    }\n    \n    return predictions;\n  }\n\n  /**\n   * Get adaptation effectiveness metrics\n   */\n  getAdaptationMetrics(userId: string): {\n    totalAdaptations: number;\n    averageConfidence: number;\n    effectivenessScore: number;\n    lastAdaptation: Date | null;\n  } {\n    const userAdaptations = this.adaptationHistory.filter(a => \n      this.patterns.get(userId)?.id === a.data?.patternId\n    );\n    \n    const pattern = this.patterns.get(userId);\n    \n    return {\n      totalAdaptations: userAdaptations.length,\n      averageConfidence: userAdaptations.reduce((sum, a) => sum + a.confidence, 0) / userAdaptations.length || 0,\n      effectivenessScore: pattern?.effectivenessScore || 0,\n      lastAdaptation: userAdaptations.length > 0 ? userAdaptations[userAdaptations.length - 1].timestamp : null\n    };\n  }\n\n  // Private utility methods for ML analysis\n  private analyzeContrastPreferences(interactions: any[]): { optimal: number } {\n    // Simulate ML analysis\n    const contrastValues = interactions.map(i => i.contrastLevel || 1.0);\n    return { optimal: contrastValues.reduce((a, b) => a + b, 0) / contrastValues.length || 1.0 };\n  }\n\n  private analyzeColorSensitivity(interactions: any[], preferences: Preferences): { sensitivities: string[] } {\n    // Simulate color sensitivity analysis\n    return { sensitivities: preferences.visual?.colorBlindnessType ? [preferences.visual.colorBlindnessType] : [] };\n  }\n\n  private analyzeMotionTolerance(interactions: any[]): { tolerance: number } {\n    // Simulate motion tolerance analysis\n    const motionEvents = interactions.filter(i => i.type === 'motion_response');\n    return { tolerance: motionEvents.length > 0 ? motionEvents[0].tolerance || 0.5 : 0.5 };\n  }\n\n  private analyzeFontPreferences(interactions: any[]): { optimalSize: number } {\n    // Simulate font preference analysis\n    return { optimalSize: 16 }; // Default optimal size\n  }\n\n  private analyzeBrightnessAdaptation(interactions: any[]): { adaptation: number } {\n    // Simulate brightness adaptation analysis\n    return { adaptation: 0.8 }; // Default adaptation level\n  }\n\n  private predictProcessingSpeed(metrics: CognitiveLoadMetrics, interactions: any[]): number {\n    // Simulate processing speed prediction using ML\n    return metrics.taskComplexity ? 1 - metrics.taskComplexity : 0.7;\n  }\n\n  private assessWorkingMemoryCapacity(metrics: CognitiveLoadMetrics, interactions: any[]): number {\n    // Simulate working memory assessment\n    return metrics.memoryLoad ? 1 - metrics.memoryLoad : 0.7;\n  }\n\n  private calculateAttentionSpan(interactions: any[]): number {\n    // Calculate attention span from interaction patterns\n    return 30; // Default 30 seconds\n  }\n\n  private optimizeInformationDensity(metrics: CognitiveLoadMetrics, interactions: any[]): number {\n    // Optimize information density based on cognitive load\n    return metrics.cognitiveLoad ? Math.max(0.1, 1 - metrics.cognitiveLoad) : 0.7;\n  }\n\n  private assessDistractionSensitivity(metrics: CognitiveLoadMetrics, interactions: any[]): number {\n    // Assess sensitivity to distractions\n    return metrics.distractorImpact || 0.5;\n  }\n\n  private calculateClickAccuracy(interactions: any[]): number {\n    // Calculate click accuracy from motor interactions\n    const clicks = interactions.filter(i => i.action === 'click');\n    const successfulClicks = clicks.filter(c => c.successful);\n    return clicks.length > 0 ? successfulClicks.length / clicks.length : 1.0;\n  }\n\n  private calculateOptimalHoverDuration(interactions: any[]): number {\n    // Calculate optimal hover duration\n    const hovers = interactions.filter(i => i.action === 'hover');\n    const durations = hovers.map(h => h.duration || 500);\n    return durations.reduce((a, b) => a + b, 0) / durations.length || 500;\n  }\n\n  private calculateKeyboardSpeed(interactions: any[]): number {\n    // Calculate keyboard interaction speed\n    return 0.8; // Default speed factor\n  }\n\n  private calculateOptimalTargetSize(interactions: any[]): number {\n    // Calculate optimal target size based on accuracy\n    return 44; // Default 44px (WCAG recommendation)\n  }\n\n  private assessGestureComplexity(interactions: any[]): number {\n    // Assess comfortable gesture complexity level\n    return 0.5; // Default medium complexity\n  }\n\n  private calculatePatternConfidence(\n    visual: VisualPattern,\n    cognitive: CognitivePattern,\n    motor: MotorPattern,\n    sensory: SensoryPattern,\n    dataPoints: number\n  ): number {\n    // Calculate overall confidence based on data quality and consistency\n    const dataQualityScore = Math.min(1.0, dataPoints / 100); // More data = higher confidence\n    const patternConsistencyScore = 0.8; // Simulate consistency analysis\n    \n    return (dataQualityScore + patternConsistencyScore) / 2;\n  }\n\n  private async calculateEffectivenessScore(\n    userId: string,\n    patterns: { visual: VisualPattern; cognitive: CognitivePattern; motor: MotorPattern; sensory: SensoryPattern }\n  ): Promise<number> {\n    // Simulate effectiveness score calculation\n    return 0.85; // Default high effectiveness\n  }\n\n  private async simulateModelTraining(model: MLModelConfig, data: any[]): Promise<number> {\n    // Simulate ML model training and return accuracy\n    await new Promise(resolve => setTimeout(resolve, 100)); // Simulate training time\n    return Math.random() * 0.3 + 0.7; // Random accuracy between 0.7-1.0\n  }\n\n  private async runModelPrediction(\n    model: MLModelConfig,\n    context: any,\n    pattern: AdaptationPattern\n  ): Promise<AdaptationEvent> {\n    // Simulate ML model prediction\n    return {\n      type: 'visual_adjustment',\n      data: { prediction: 'optimize_contrast' },\n      confidence: model.accuracy,\n      timestamp: new Date()\n    };\n  }\n}\n\nexport default AdaptiveEngine; ","/**\n * Neural Adaptation System - Real-time neural network for accessibility adaptation\n * @fileoverview Implements neural networks for continuous learning and optimization of user preferences\n */\n\nimport { EventEmitter } from 'eventemitter3';\n\nexport interface NeuralLayer {\n  weights: number[][];\n  biases: number[];\n  activation: ActivationFunction;\n  dropout?: number;\n}\n\nexport type ActivationFunction = 'relu' | 'sigmoid' | 'tanh' | 'leaky_relu' | 'softmax';\n\nexport interface NeuralNetworkConfig {\n  layers: number[];\n  activations: ActivationFunction[];\n  learningRate: number;\n  momentum: number;\n  regularization: number;\n  batchSize: number;\n  maxEpochs: number;\n  convergenceThreshold: number;\n}\n\nexport interface TrainingData {\n  inputs: number[];\n  targets: number[];\n  userId: string;\n  timestamp: Date;\n  context: {\n    deviceType: string;\n    environment: string;\n    timeOfDay: number;\n    cognitiveState: number;\n  };\n}\n\nexport interface PredictionResult {\n  adaptations: {\n    visual: number[];\n    cognitive: number[];\n    motor: number[];\n    sensory: number[];\n  };\n  confidence: number;\n  reasoning: string[];\n  alternatives: Array<{\n    adaptations: any;\n    confidence: number;\n  }>;\n}\n\nexport interface LearningMetrics {\n  epoch: number;\n  loss: number;\n  accuracy: number;\n  validationLoss: number;\n  validationAccuracy: number;\n  learningRate: number;\n  convergenceRate: number;\n}\n\n/**\n * Neural Adaptation System for real-time accessibility optimization\n */\nexport class NeuralAdaptationSystem extends EventEmitter {\n  private network: NeuralLayer[] = [];\n  private trainingHistory: LearningMetrics[] = [];\n  private realtimeBuffer: TrainingData[] = [];\n  private isTraining: boolean = false;\n  private currentEpoch: number = 0;\n  \n  constructor(\n    private config: NeuralNetworkConfig = {\n      layers: [24, 64, 32, 16, 8], // Input -> Hidden layers -> Output\n      activations: ['relu', 'relu', 'relu', 'relu', 'sigmoid'],\n      learningRate: 0.001,\n      momentum: 0.9,\n      regularization: 0.01,\n      batchSize: 32,\n      maxEpochs: 1000,\n      convergenceThreshold: 0.001\n    }\n  ) {\n    super();\n    this.initializeNetwork();\n  }\n\n  /**\n   * Initialize neural network with random weights\n   */\n  private initializeNetwork(): void {\n    this.network = [];\n    \n    for (let i = 0; i < this.config.layers.length - 1; i++) {\n      const inputSize = this.config.layers[i];\n      const outputSize = this.config.layers[i + 1];\n      \n      // Xavier/Glorot initialization\n      const limit = Math.sqrt(6 / (inputSize + outputSize));\n      \n      const layer: NeuralLayer = {\n        weights: Array(outputSize).fill(0).map(() =>\n          Array(inputSize).fill(0).map(() => \n            (Math.random() * 2 - 1) * limit\n          )\n        ),\n        biases: Array(outputSize).fill(0).map(() => \n          (Math.random() * 2 - 1) * 0.1\n        ),\n        activation: this.config.activations[i],\n        dropout: i < this.config.layers.length - 2 ? 0.2 : undefined\n      };\n      \n      this.network.push(layer);\n    }\n    \n    this.emit('network_initialized', {\n      layers: this.config.layers,\n      totalParameters: this.getTotalParameters()\n    });\n  }\n\n  /**\n   * Forward propagation through the network\n   */\n  private forward(inputs: number[], training: boolean = false): number[][] {\n    const activations: number[][] = [inputs];\n    \n    for (let i = 0; i < this.network.length; i++) {\n      const layer = this.network[i];\n      const prevActivation = activations[i];\n      const output = this.computeLayerOutput(layer, prevActivation, training);\n      activations.push(output);\n    }\n    \n    return activations;\n  }\n\n  /**\n   * Compute output for a single layer\n   */\n  private computeLayerOutput(layer: NeuralLayer, inputs: number[], training: boolean): number[] {\n    const output = layer.weights.map((weights, neuronIndex) => {\n      // Weighted sum + bias\n      const sum = weights.reduce((acc, weight, inputIndex) => \n        acc + weight * inputs[inputIndex], 0\n      ) + layer.biases[neuronIndex];\n      \n      // Apply activation function\n      const activated = this.applyActivation(sum, layer.activation);\n      \n      // Apply dropout during training\n      if (training && layer.dropout && Math.random() < layer.dropout) {\n        return 0;\n      }\n      \n      return activated;\n    });\n    \n    return output;\n  }\n\n  /**\n   * Apply activation function\n   */\n  private applyActivation(x: number, activation: ActivationFunction): number {\n    switch (activation) {\n      case 'relu':\n        return Math.max(0, x);\n      case 'sigmoid':\n        return 1 / (1 + Math.exp(-x));\n      case 'tanh':\n        return Math.tanh(x);\n      case 'leaky_relu':\n        return x > 0 ? x : 0.01 * x;\n      case 'softmax':\n        // For softmax, we need the entire layer output, not individual values\n        return x; // Will be normalized in post-processing\n      default:\n        return x;\n    }\n  }\n\n  /**\n   * Backpropagation algorithm\n   */\n  private backward(\n    activations: number[][],\n    targets: number[],\n    learningRate: number\n  ): number {\n    const gradients: number[][][] = [];\n    const biasGradients: number[][] = [];\n    \n    // Calculate output layer error\n    const outputActivations = activations[activations.length - 1];\n    let layerError = outputActivations.map((output, i) => \n      2 * (output - targets[i]) // MSE derivative\n    );\n    \n    // Backpropagate through each layer\n    for (let layerIndex = this.network.length - 1; layerIndex >= 0; layerIndex--) {\n      const layer = this.network[layerIndex];\n      const layerInput = activations[layerIndex];\n      \n      // Calculate gradients for weights\n      const weightGradients = layer.weights.map((weights, neuronIndex) =>\n        weights.map((_, inputIndex) =>\n          layerError[neuronIndex] * layerInput[inputIndex]\n        )\n      );\n      \n      // Calculate gradients for biases\n      const biasGradient = layerError.slice();\n      \n      gradients.unshift(weightGradients);\n      biasGradients.unshift(biasGradient);\n      \n      // Calculate error for previous layer\n      if (layerIndex > 0) {\n        const prevLayerError = Array(layerInput.length).fill(0);\n        \n        for (let neuronIndex = 0; neuronIndex < layer.weights.length; neuronIndex++) {\n          for (let inputIndex = 0; inputIndex < layer.weights[neuronIndex].length; inputIndex++) {\n            prevLayerError[inputIndex] += \n              layerError[neuronIndex] * layer.weights[neuronIndex][inputIndex];\n          }\n        }\n        \n        // Apply activation derivative\n        layerError = prevLayerError.map((error, i) =>\n          error * this.getActivationDerivative(layerInput[i], layer.activation)\n        );\n      }\n    }\n    \n    // Update weights and biases\n    for (let layerIndex = 0; layerIndex < this.network.length; layerIndex++) {\n      const layer = this.network[layerIndex];\n      \n      // Update weights\n      for (let neuronIndex = 0; neuronIndex < layer.weights.length; neuronIndex++) {\n        for (let inputIndex = 0; inputIndex < layer.weights[neuronIndex].length; inputIndex++) {\n          const gradient = gradients[layerIndex][neuronIndex][inputIndex];\n          const regularization = this.config.regularization * layer.weights[neuronIndex][inputIndex];\n          layer.weights[neuronIndex][inputIndex] -= learningRate * (gradient + regularization);\n        }\n      }\n      \n      // Update biases\n      for (let neuronIndex = 0; neuronIndex < layer.biases.length; neuronIndex++) {\n        layer.biases[neuronIndex] -= learningRate * biasGradients[layerIndex][neuronIndex];\n      }\n    }\n    \n    // Calculate loss\n    const loss = outputActivations.reduce((sum, output, i) =>\n      sum + Math.pow(output - targets[i], 2), 0\n    ) / outputActivations.length;\n    \n    return loss;\n  }\n\n  /**\n   * Get activation function derivative\n   */\n  private getActivationDerivative(x: number, activation: ActivationFunction): number {\n    switch (activation) {\n      case 'relu':\n        return x > 0 ? 1 : 0;\n      case 'sigmoid':\n        const sigmoid = 1 / (1 + Math.exp(-x));\n        return sigmoid * (1 - sigmoid);\n      case 'tanh':\n        return 1 - Math.pow(Math.tanh(x), 2);\n      case 'leaky_relu':\n        return x > 0 ? 1 : 0.01;\n      default:\n        return 1;\n    }\n  }\n\n  /**\n   * Train the network with batch data\n   */\n  async trainBatch(trainingData: TrainingData[]): Promise<LearningMetrics> {\n    if (this.isTraining) {\n      throw new Error('Network is already training');\n    }\n    \n    this.isTraining = true;\n    this.currentEpoch = 0;\n    \n    try {\n      let bestLoss = Infinity;\n      let epochsWithoutImprovement = 0;\n      const maxEpochsWithoutImprovement = 50;\n      \n      while (this.currentEpoch < this.config.maxEpochs) {\n        const epochLoss = await this.trainEpoch(trainingData);\n        \n        // Calculate validation metrics\n        const validationData = trainingData.slice(-Math.floor(trainingData.length * 0.2));\n        const validationLoss = this.evaluateNetwork(validationData);\n        \n        const metrics: LearningMetrics = {\n          epoch: this.currentEpoch,\n          loss: epochLoss,\n          accuracy: this.calculateAccuracy(trainingData),\n          validationLoss,\n          validationAccuracy: this.calculateAccuracy(validationData),\n          learningRate: this.config.learningRate,\n          convergenceRate: Math.abs(bestLoss - epochLoss) / bestLoss\n        };\n        \n        this.trainingHistory.push(metrics);\n        this.emit('training_progress', metrics);\n        \n        // Check for improvement\n        if (epochLoss < bestLoss - this.config.convergenceThreshold) {\n          bestLoss = epochLoss;\n          epochsWithoutImprovement = 0;\n        } else {\n          epochsWithoutImprovement++;\n        }\n        \n        // Early stopping\n        if (epochsWithoutImprovement >= maxEpochsWithoutImprovement) {\n          this.emit('training_converged', metrics);\n          break;\n        }\n        \n        this.currentEpoch++;\n      }\n      \n      const finalMetrics = this.trainingHistory[this.trainingHistory.length - 1];\n      this.emit('training_completed', finalMetrics);\n      \n      return finalMetrics;\n    } finally {\n      this.isTraining = false;\n    }\n  }\n\n  /**\n   * Train for one epoch\n   */\n  private async trainEpoch(trainingData: TrainingData[]): Promise<number> {\n    const shuffledData = [...trainingData].sort(() => Math.random() - 0.5);\n    let totalLoss = 0;\n    let batchCount = 0;\n    \n    for (let i = 0; i < shuffledData.length; i += this.config.batchSize) {\n      const batch = shuffledData.slice(i, i + this.config.batchSize);\n      const batchLoss = await this.trainBatchData(batch);\n      totalLoss += batchLoss;\n      batchCount++;\n      \n      // Allow other operations to run\n      if (batchCount % 10 === 0) {\n        await new Promise(resolve => setTimeout(resolve, 0));\n      }\n    }\n    \n    return totalLoss / batchCount;\n  }\n\n  /**\n   * Train with a single batch of data\n   */\n  private async trainBatchData(batch: TrainingData[]): Promise<number> {\n    let batchLoss = 0;\n    \n    for (const sample of batch) {\n      const inputs = this.preprocessInputs(sample);\n      const targets = this.preprocessTargets(sample);\n      \n      const activations = this.forward(inputs, true);\n      const loss = this.backward(activations, targets, this.config.learningRate);\n      \n      batchLoss += loss;\n    }\n    \n    return batchLoss / batch.length;\n  }\n\n  /**\n   * Make prediction for user adaptations\n   */\n  async predict(\n    userId: string,\n    currentContext: any,\n    userHistory: any[]\n  ): Promise<PredictionResult> {\n    const inputs = this.createPredictionInputs(userId, currentContext, userHistory);\n    const activations = this.forward(inputs, false);\n    const output = activations[activations.length - 1];\n    \n    // Parse output into adaptations\n    const adaptations = this.parseOutputToAdaptations(output);\n    \n    // Calculate confidence based on network certainty\n    const confidence = this.calculatePredictionConfidence(output);\n    \n    // Generate reasoning\n    const reasoning = this.generateReasoning(inputs, output, adaptations);\n    \n    // Generate alternatives\n    const alternatives = await this.generateAlternatives(inputs, adaptations);\n    \n    const result: PredictionResult = {\n      adaptations,\n      confidence,\n      reasoning,\n      alternatives\n    };\n    \n    this.emit('prediction_made', result);\n    return result;\n  }\n\n  /**\n   * Add real-time training data\n   */\n  addRealtimeData(data: TrainingData): void {\n    this.realtimeBuffer.push(data);\n    \n    // Trigger incremental learning if buffer is full\n    if (this.realtimeBuffer.length >= this.config.batchSize) {\n      this.performIncrementalLearning();\n    }\n  }\n\n  /**\n   * Perform incremental learning with real-time data\n   */\n  private async performIncrementalLearning(): Promise<void> {\n    if (this.isTraining || this.realtimeBuffer.length === 0) {\n      return;\n    }\n    \n    const batch = this.realtimeBuffer.splice(0, this.config.batchSize);\n    \n    try {\n      // Reduced learning rate for incremental learning\n      const originalLR = this.config.learningRate;\n      this.config.learningRate *= 0.1;\n      \n      await this.trainBatchData(batch);\n      \n      // Restore original learning rate\n      this.config.learningRate = originalLR;\n      \n      this.emit('incremental_learning_completed', {\n        batchSize: batch.length,\n        totalParameters: this.getTotalParameters()\n      });\n    } catch (error) {\n      this.emit('incremental_learning_error', error);\n    }\n  }\n\n  /**\n   * Evaluate network performance\n   */\n  private evaluateNetwork(testData: TrainingData[]): number {\n    let totalLoss = 0;\n    \n    for (const sample of testData) {\n      const inputs = this.preprocessInputs(sample);\n      const targets = this.preprocessTargets(sample);\n      const activations = this.forward(inputs, false);\n      const output = activations[activations.length - 1];\n      \n      const loss = output.reduce((sum, pred, i) =>\n        sum + Math.pow(pred - targets[i], 2), 0\n      ) / output.length;\n      \n      totalLoss += loss;\n    }\n    \n    return totalLoss / testData.length;\n  }\n\n  /**\n   * Calculate prediction accuracy\n   */\n  private calculateAccuracy(data: TrainingData[]): number {\n    let correct = 0;\n    \n    for (const sample of data) {\n      const inputs = this.preprocessInputs(sample);\n      const targets = this.preprocessTargets(sample);\n      const prediction = this.forward(inputs, false);\n      const output = prediction[prediction.length - 1];\n      \n      // Check if prediction is within acceptable range\n      const isCorrect = output.every((pred, i) =>\n        Math.abs(pred - targets[i]) < 0.1\n      );\n      \n      if (isCorrect) correct++;\n    }\n    \n    return correct / data.length;\n  }\n\n  /**\n   * Get total number of parameters in the network\n   */\n  private getTotalParameters(): number {\n    return this.network.reduce((total, layer) => {\n      const weightParams = layer.weights.reduce((sum, neuronWeights) => \n        sum + neuronWeights.length, 0\n      );\n      const biasParams = layer.biases.length;\n      return total + weightParams + biasParams;\n    }, 0);\n  }\n\n  // Utility methods for data preprocessing and parsing\n  private preprocessInputs(sample: TrainingData): number[] {\n    // Normalize and combine all input features\n    return [\n      ...sample.inputs,\n      sample.context.timeOfDay / 24,\n      sample.context.cognitiveState,\n      sample.context.deviceType === 'mobile' ? 1 : 0,\n      sample.context.environment === 'quiet' ? 1 : 0\n    ];\n  }\n\n  private preprocessTargets(sample: TrainingData): number[] {\n    // Normalize target values to [0, 1] range\n    return sample.targets.map(target => Math.max(0, Math.min(1, target)));\n  }\n\n  private createPredictionInputs(userId: string, context: any, history: any[]): number[] {\n    // Create input vector from current context and user history\n    return [\n      context.timeOfDay / 24 || 0.5,\n      context.cognitiveLoad || 0.5,\n      context.environmentNoise || 0.5,\n      context.lightLevel || 0.5,\n      history.length / 100 || 0.1,\n      // Add more context features...\n    ].concat(Array(19).fill(0.5)); // Pad to expected input size\n  }\n\n  private parseOutputToAdaptations(output: number[]): PredictionResult['adaptations'] {\n    // Parse neural network output into structured adaptations\n    return {\n      visual: output.slice(0, 2), // Contrast, brightness\n      cognitive: output.slice(2, 4), // Processing speed, complexity\n      motor: output.slice(4, 6), // Target size, timing\n      sensory: output.slice(6, 8) // Sound, vibration\n    };\n  }\n\n  private calculatePredictionConfidence(output: number[]): number {\n    // Calculate confidence based on output certainty\n    const variance = output.reduce((sum, val) => {\n      const mean = output.reduce((a, b) => a + b, 0) / output.length;\n      return sum + Math.pow(val - mean, 2);\n    }, 0) / output.length;\n    \n    return Math.max(0, 1 - variance);\n  }\n\n  private generateReasoning(inputs: number[], output: number[], adaptations: any): string[] {\n    // Generate human-readable reasoning for the prediction\n    const reasoning: string[] = [];\n    \n    if (inputs[1] > 0.7) { // High cognitive load\n      reasoning.push('High cognitive load detected, simplifying interface');\n    }\n    \n    if (adaptations.visual[0] < 0.3) { // Low contrast\n      reasoning.push('Reducing visual complexity due to sensory sensitivity');\n    }\n    \n    if (adaptations.motor[0] > 0.7) { // Large targets\n      reasoning.push('Increasing target sizes for better motor accessibility');\n    }\n    \n    return reasoning;\n  }\n\n  private async generateAlternatives(inputs: number[], baseAdaptations: any): Promise<any[]> {\n    // Generate alternative adaptation strategies\n    return [\n      {\n        adaptations: {\n          ...baseAdaptations,\n          visual: baseAdaptations.visual.map((v: number) => v * 0.8)\n        },\n        confidence: 0.7\n      },\n      {\n        adaptations: {\n          ...baseAdaptations,\n          cognitive: baseAdaptations.cognitive.map((v: number) => v * 1.2)\n        },\n        confidence: 0.6\n      }\n    ];\n  }\n\n  /**\n   * Export network for persistence\n   */\n  exportNetwork(): any {\n    return {\n      config: this.config,\n      network: this.network,\n      trainingHistory: this.trainingHistory,\n      currentEpoch: this.currentEpoch\n    };\n  }\n\n  /**\n   * Import network from saved state\n   */\n  importNetwork(data: any): void {\n    this.config = data.config;\n    this.network = data.network;\n    this.trainingHistory = data.trainingHistory || [];\n    this.currentEpoch = data.currentEpoch || 0;\n    \n    this.emit('network_imported', {\n      totalParameters: this.getTotalParameters(),\n      trainingEpochs: this.currentEpoch\n    });\n  }\n}\n\nexport default NeuralAdaptationSystem; ","/**\n * Real-time Optimization System - Continuous accessibility improvements\n * @fileoverview Implements real-time optimization algorithms for dynamic accessibility adaptations\n */\n\nimport { EventEmitter } from 'eventemitter3';\nimport type { AdaptationPattern } from './adaptive-engine';\n\nexport interface OptimizationTarget {\n  metric: string;\n  currentValue: number;\n  targetValue: number;\n  priority: 'low' | 'medium' | 'high' | 'critical';\n  constraints: OptimizationConstraint[];\n}\n\nexport interface OptimizationConstraint {\n  parameter: string;\n  minValue: number;\n  maxValue: number;\n  weight: number;\n}\n\nexport interface OptimizationResult {\n  parametersAdjusted: Record<string, number>;\n  improvementScore: number;\n  convergenceTime: number;\n  iterationsRequired: number;\n  stabilityMetric: number;\n}\n\nexport interface RealTimeMetrics {\n  timestamp: Date;\n  userId: string;\n  metrics: {\n    taskCompletionTime: number;\n    errorRate: number;\n    cognitiveLoad: number;\n    userSatisfaction: number;\n    accessibilityScore: number;\n    usabilityIndex: number;\n  };\n  context: {\n    device: string;\n    environment: string;\n    timeOfDay: number;\n    userState: string;\n  };\n}\n\nexport interface OptimizationStrategy {\n  name: string;\n  algorithm: 'gradient_descent' | 'genetic_algorithm' | 'simulated_annealing' | 'particle_swarm' | 'bayesian';\n  parameters: Record<string, any>;\n  converged: boolean;\n  performance: number;\n}\n\n/**\n * Real-time Optimization System for continuous accessibility improvements\n */\nexport class RealTimeOptimizer extends EventEmitter {\n  private optimizationTargets: Map<string, OptimizationTarget> = new Map();\n  private metricsHistory: RealTimeMetrics[] = [];\n  private currentStrategies: Map<string, OptimizationStrategy> = new Map();\n  private optimizationLoop: NodeJS.Timeout | null = null;\n  private isOptimizing: boolean = false;\n  \n  constructor(\n    private config: {\n      optimizationInterval: number;\n      convergenceThreshold: number;\n      maxIterations: number;\n      adaptationRate: number;\n      stabilityWindow: number;\n    } = {\n      optimizationInterval: 5000, // 5 seconds\n      convergenceThreshold: 0.001,\n      maxIterations: 100,\n      adaptationRate: 0.1,\n      stabilityWindow: 10\n    }\n  ) {\n    super();\n    this.initializeOptimizationStrategies();\n  }\n\n  /**\n   * Initialize optimization strategies\n   */\n  private initializeOptimizationStrategies(): void {\n    // Gradient Descent for smooth parameter adjustments\n    this.currentStrategies.set('gradient_descent', {\n      name: 'Gradient Descent',\n      algorithm: 'gradient_descent',\n      parameters: {\n        learningRate: 0.01,\n        momentum: 0.9,\n        decay: 0.99\n      },\n      converged: false,\n      performance: 0\n    });\n\n    // Genetic Algorithm for global optimization\n    this.currentStrategies.set('genetic_algorithm', {\n      name: 'Genetic Algorithm',\n      algorithm: 'genetic_algorithm',\n      parameters: {\n        populationSize: 50,\n        mutationRate: 0.1,\n        crossoverRate: 0.8,\n        elitismRatio: 0.2\n      },\n      converged: false,\n      performance: 0\n    });\n\n    // Simulated Annealing for avoiding local minima\n    this.currentStrategies.set('simulated_annealing', {\n      name: 'Simulated Annealing',\n      algorithm: 'simulated_annealing',\n      parameters: {\n        initialTemperature: 100,\n        coolingRate: 0.95,\n        minTemperature: 0.01\n      },\n      converged: false,\n      performance: 0\n    });\n\n    // Particle Swarm Optimization for swarm intelligence\n    this.currentStrategies.set('particle_swarm', {\n      name: 'Particle Swarm',\n      algorithm: 'particle_swarm',\n      parameters: {\n        swarmSize: 30,\n        inertiaWeight: 0.7,\n        cognitiveWeight: 1.5,\n        socialWeight: 1.5\n      },\n      converged: false,\n      performance: 0\n    });\n\n    // Bayesian Optimization for sample-efficient optimization\n    this.currentStrategies.set('bayesian', {\n      name: 'Bayesian Optimization',\n      algorithm: 'bayesian',\n      parameters: {\n        acquisitionFunction: 'expected_improvement',\n        kernelType: 'rbf',\n        explorationWeight: 0.01\n      },\n      converged: false,\n      performance: 0\n    });\n  }\n\n  /**\n   * Start real-time optimization\n   */\n  startOptimization(): void {\n    if (this.isOptimizing) {\n      return;\n    }\n\n    this.isOptimizing = true;\n    this.optimizationLoop = setInterval(() => {\n      this.runOptimizationCycle();\n    }, this.config.optimizationInterval);\n\n    this.emit('optimization_started');\n  }\n\n  /**\n   * Stop real-time optimization\n   */\n  stopOptimization(): void {\n    if (!this.isOptimizing) {\n      return;\n    }\n\n    this.isOptimizing = false;\n    if (this.optimizationLoop) {\n      clearInterval(this.optimizationLoop);\n      this.optimizationLoop = null;\n    }\n\n    this.emit('optimization_stopped');\n  }\n\n  /**\n   * Add optimization target\n   */\n  addOptimizationTarget(target: OptimizationTarget): void {\n    this.optimizationTargets.set(target.metric, target);\n    this.emit('target_added', target);\n  }\n\n  /**\n   * Remove optimization target\n   */\n  removeOptimizationTarget(metric: string): void {\n    this.optimizationTargets.delete(metric);\n    this.emit('target_removed', metric);\n  }\n\n  /**\n   * Add real-time metrics\n   */\n  addMetrics(metrics: RealTimeMetrics): void {\n    this.metricsHistory.push(metrics);\n    \n    // Keep only recent metrics (sliding window)\n    const maxHistorySize = 1000;\n    if (this.metricsHistory.length > maxHistorySize) {\n      this.metricsHistory = this.metricsHistory.slice(-maxHistorySize);\n    }\n\n    this.emit('metrics_added', metrics);\n  }\n\n  /**\n   * Run single optimization cycle\n   */\n  private async runOptimizationCycle(): Promise<void> {\n    try {\n      const results: OptimizationResult[] = [];\n\n      for (const [metric, target] of this.optimizationTargets.entries()) {\n        const result = await this.optimizeTarget(target);\n        results.push(result);\n      }\n\n      // Evaluate overall optimization performance\n      const overallPerformance = this.evaluateOptimizationPerformance(results);\n      \n      // Adapt strategies based on performance\n      await this.adaptOptimizationStrategies(overallPerformance);\n\n      this.emit('optimization_cycle_completed', {\n        results,\n        overallPerformance,\n        timestamp: new Date()\n      });\n\n    } catch (error) {\n      this.emit('optimization_error', error);\n    }\n  }\n\n  /**\n   * Optimize single target using best available strategy\n   */\n  private async optimizeTarget(target: OptimizationTarget): Promise<OptimizationResult> {\n    const bestStrategy = this.selectBestStrategy(target);\n    const currentMetrics = this.getCurrentMetrics(target.metric);\n    \n    if (!currentMetrics || currentMetrics.length === 0) {\n      return {\n        parametersAdjusted: {},\n        improvementScore: 0,\n        convergenceTime: 0,\n        iterationsRequired: 0,\n        stabilityMetric: 0\n      };\n    }\n\n    switch (bestStrategy.algorithm) {\n      case 'gradient_descent':\n        return await this.gradientDescentOptimization(target, currentMetrics);\n      case 'genetic_algorithm':\n        return await this.geneticAlgorithmOptimization(target, currentMetrics);\n      case 'simulated_annealing':\n        return await this.simulatedAnnealingOptimization(target, currentMetrics);\n      case 'particle_swarm':\n        return await this.particleSwarmOptimization(target, currentMetrics);\n      case 'bayesian':\n        return await this.bayesianOptimization(target, currentMetrics);\n      default:\n        throw new Error(`Unknown optimization algorithm: ${bestStrategy.algorithm}`);\n    }\n  }\n\n  /**\n   * Gradient Descent optimization implementation\n   */\n  private async gradientDescentOptimization(\n    target: OptimizationTarget,\n    metrics: RealTimeMetrics[]\n  ): Promise<OptimizationResult> {\n    const strategy = this.currentStrategies.get('gradient_descent')!;\n    const startTime = Date.now();\n    let iterations = 0;\n    let currentValue = target.currentValue;\n    const parametersAdjusted: Record<string, number> = {};\n\n    while (iterations < this.config.maxIterations) {\n      // Calculate gradient\n      const gradient = this.calculateGradient(target, metrics, currentValue);\n      \n      // Update parameters\n      const step = strategy.parameters.learningRate * gradient;\n      currentValue -= step;\n      \n      // Apply constraints\n      currentValue = this.applyConstraints(currentValue, target.constraints);\n      \n      parametersAdjusted[target.metric] = currentValue;\n      \n      // Check convergence\n      if (Math.abs(step) < this.config.convergenceThreshold) {\n        break;\n      }\n      \n      iterations++;\n      await new Promise(resolve => setTimeout(resolve, 1)); // Yield control\n    }\n\n    const convergenceTime = Date.now() - startTime;\n    const improvementScore = this.calculateImprovementScore(target.currentValue, currentValue, target.targetValue);\n    const stabilityMetric = this.calculateStabilityMetric(target.metric);\n\n    return {\n      parametersAdjusted,\n      improvementScore,\n      convergenceTime,\n      iterationsRequired: iterations,\n      stabilityMetric\n    };\n  }\n\n  /**\n   * Genetic Algorithm optimization implementation\n   */\n  private async geneticAlgorithmOptimization(\n    target: OptimizationTarget,\n    metrics: RealTimeMetrics[]\n  ): Promise<OptimizationResult> {\n    const strategy = this.currentStrategies.get('genetic_algorithm')!;\n    const startTime = Date.now();\n    let generation = 0;\n    \n    // Initialize population\n    let population = this.initializePopulation(strategy.parameters.populationSize, target);\n    const parametersAdjusted: Record<string, number> = {};\n\n    while (generation < this.config.maxIterations) {\n      // Evaluate fitness\n      const fitness = await this.evaluatePopulationFitness(population, target, metrics);\n      \n      // Select best individual\n      const bestIndex = fitness.indexOf(Math.max(...fitness));\n      const bestIndividual = population[bestIndex];\n      \n      // Check convergence\n      if (this.isConverged(fitness)) {\n        parametersAdjusted[target.metric] = bestIndividual;\n        break;\n      }\n      \n      // Create new generation\n      population = await this.createNewGeneration(population, fitness, strategy.parameters);\n      generation++;\n      \n      await new Promise(resolve => setTimeout(resolve, 1)); // Yield control\n    }\n\n    const convergenceTime = Date.now() - startTime;\n    const finalValue = parametersAdjusted[target.metric] || target.currentValue;\n    const improvementScore = this.calculateImprovementScore(target.currentValue, finalValue, target.targetValue);\n    const stabilityMetric = this.calculateStabilityMetric(target.metric);\n\n    return {\n      parametersAdjusted,\n      improvementScore,\n      convergenceTime,\n      iterationsRequired: generation,\n      stabilityMetric\n    };\n  }\n\n  /**\n   * Simulated Annealing optimization implementation\n   */\n  private async simulatedAnnealingOptimization(\n    target: OptimizationTarget,\n    metrics: RealTimeMetrics[]\n  ): Promise<OptimizationResult> {\n    const strategy = this.currentStrategies.get('simulated_annealing')!;\n    const startTime = Date.now();\n    let iterations = 0;\n    let currentValue = target.currentValue;\n    let temperature = strategy.parameters.initialTemperature;\n    const parametersAdjusted: Record<string, number> = {};\n\n    while (iterations < this.config.maxIterations && temperature > strategy.parameters.minTemperature) {\n      // Generate neighbor solution\n      const neighbor = this.generateNeighborSolution(currentValue, target.constraints);\n      \n      // Calculate energy difference\n      const currentEnergy = this.calculateEnergy(currentValue, target);\n      const neighborEnergy = this.calculateEnergy(neighbor, target);\n      const deltaE = neighborEnergy - currentEnergy;\n      \n      // Accept or reject neighbor\n      if (deltaE < 0 || Math.random() < Math.exp(-deltaE / temperature)) {\n        currentValue = neighbor;\n      }\n      \n      // Cool down\n      temperature *= strategy.parameters.coolingRate;\n      iterations++;\n      \n      await new Promise(resolve => setTimeout(resolve, 1)); // Yield control\n    }\n\n    parametersAdjusted[target.metric] = currentValue;\n    const convergenceTime = Date.now() - startTime;\n    const improvementScore = this.calculateImprovementScore(target.currentValue, currentValue, target.targetValue);\n    const stabilityMetric = this.calculateStabilityMetric(target.metric);\n\n    return {\n      parametersAdjusted,\n      improvementScore,\n      convergenceTime,\n      iterationsRequired: iterations,\n      stabilityMetric\n    };\n  }\n\n  /**\n   * Particle Swarm optimization implementation\n   */\n  private async particleSwarmOptimization(\n    target: OptimizationTarget,\n    metrics: RealTimeMetrics[]\n  ): Promise<OptimizationResult> {\n    const strategy = this.currentStrategies.get('particle_swarm')!;\n    const startTime = Date.now();\n    let iterations = 0;\n    \n    // Initialize swarm\n    const swarmSize = strategy.parameters.swarmSize;\n    const particles = this.initializeParticleSwarm(swarmSize, target);\n    let globalBest = this.findGlobalBest(particles, target);\n    const parametersAdjusted: Record<string, number> = {};\n\n    while (iterations < this.config.maxIterations) {\n      // Update particles\n      for (const particle of particles) {\n        this.updateParticleVelocity(particle, globalBest, strategy.parameters);\n        this.updateParticlePosition(particle, target.constraints);\n        this.updateParticleBest(particle, target);\n      }\n      \n      // Update global best\n      const newGlobalBest = this.findGlobalBest(particles, target);\n      if (this.isBetterSolution(newGlobalBest, globalBest, target)) {\n        globalBest = newGlobalBest;\n      }\n      \n      // Check convergence\n      if (this.isSwarmConverged(particles)) {\n        break;\n      }\n      \n      iterations++;\n      await new Promise(resolve => setTimeout(resolve, 1)); // Yield control\n    }\n\n    parametersAdjusted[target.metric] = globalBest.position;\n    const convergenceTime = Date.now() - startTime;\n    const improvementScore = this.calculateImprovementScore(target.currentValue, globalBest.position, target.targetValue);\n    const stabilityMetric = this.calculateStabilityMetric(target.metric);\n\n    return {\n      parametersAdjusted,\n      improvementScore,\n      convergenceTime,\n      iterationsRequired: iterations,\n      stabilityMetric\n    };\n  }\n\n  /**\n   * Bayesian optimization implementation\n   */\n  private async bayesianOptimization(\n    target: OptimizationTarget,\n    metrics: RealTimeMetrics[]\n  ): Promise<OptimizationResult> {\n    const strategy = this.currentStrategies.get('bayesian')!;\n    const startTime = Date.now();\n    let iterations = 0;\n    const observations: Array<{ x: number; y: number }> = [];\n    const parametersAdjusted: Record<string, number> = {};\n\n    // Initial random sampling\n    for (let i = 0; i < 5; i++) {\n      const x = this.sampleFromConstraints(target.constraints);\n      const y = this.evaluateObjective(x, target, metrics);\n      observations.push({ x, y });\n    }\n\n    while (iterations < this.config.maxIterations) {\n      // Fit Gaussian Process\n      const gp = this.fitGaussianProcess(observations);\n      \n      // Optimize acquisition function\n      const nextX = this.optimizeAcquisitionFunction(gp, target, strategy.parameters);\n      \n      // Evaluate objective at next point\n      const nextY = this.evaluateObjective(nextX, target, metrics);\n      observations.push({ x: nextX, y: nextY });\n      \n      // Check convergence\n      if (this.isBayesianConverged(observations)) {\n        break;\n      }\n      \n      iterations++;\n      await new Promise(resolve => setTimeout(resolve, 1)); // Yield control\n    }\n\n    // Find best observation\n    const bestObservation = observations.reduce((best, current) => \n      current.y > best.y ? current : best\n    );\n    \n    parametersAdjusted[target.metric] = bestObservation.x;\n    const convergenceTime = Date.now() - startTime;\n    const improvementScore = this.calculateImprovementScore(target.currentValue, bestObservation.x, target.targetValue);\n    const stabilityMetric = this.calculateStabilityMetric(target.metric);\n\n    return {\n      parametersAdjusted,\n      improvementScore,\n      convergenceTime,\n      iterationsRequired: iterations,\n      stabilityMetric\n    };\n  }\n\n  // Utility methods for optimization algorithms\n  private selectBestStrategy(target: OptimizationTarget): OptimizationStrategy {\n    // Select strategy based on target characteristics and past performance\n    const strategies = Array.from(this.currentStrategies.values());\n    return strategies.reduce((best, current) => \n      current.performance > best.performance ? current : best\n    );\n  }\n\n  private getCurrentMetrics(metric: string): RealTimeMetrics[] {\n    return this.metricsHistory.slice(-this.config.stabilityWindow);\n  }\n\n  private calculateGradient(target: OptimizationTarget, metrics: RealTimeMetrics[], currentValue: number): number {\n    // Numerical gradient calculation\n    const epsilon = 0.001;\n    const f1 = this.evaluateObjective(currentValue + epsilon, target, metrics);\n    const f2 = this.evaluateObjective(currentValue - epsilon, target, metrics);\n    return (f1 - f2) / (2 * epsilon);\n  }\n\n  private evaluateObjective(value: number, target: OptimizationTarget, metrics: RealTimeMetrics[]): number {\n    // Evaluate how good a parameter value is\n    const distance = Math.abs(value - target.targetValue);\n    const normalizedDistance = distance / Math.abs(target.targetValue);\n    return 1 - normalizedDistance; // Higher is better\n  }\n\n  private applyConstraints(value: number, constraints: OptimizationConstraint[]): number {\n    for (const constraint of constraints) {\n      value = Math.max(constraint.minValue, Math.min(constraint.maxValue, value));\n    }\n    return value;\n  }\n\n  private calculateImprovementScore(oldValue: number, newValue: number, targetValue: number): number {\n    const oldDistance = Math.abs(oldValue - targetValue);\n    const newDistance = Math.abs(newValue - targetValue);\n    return oldDistance > 0 ? (oldDistance - newDistance) / oldDistance : 0;\n  }\n\n  private calculateStabilityMetric(metric: string): number {\n    const recentMetrics = this.getCurrentMetrics(metric);\n    if (recentMetrics.length < 2) return 1;\n    \n    const values = recentMetrics.map(m => (m.metrics as any)[metric]).filter(v => v !== undefined);\n    const mean = values.reduce((a, b) => a + b, 0) / values.length;\n    const variance = values.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / values.length;\n    \n    return Math.max(0, 1 - Math.sqrt(variance) / mean);\n  }\n\n  private evaluateOptimizationPerformance(results: OptimizationResult[]): number {\n    return results.reduce((sum, result) => sum + result.improvementScore, 0) / results.length;\n  }\n\n  private async adaptOptimizationStrategies(performance: number): Promise<void> {\n    // Adapt strategy parameters based on performance\n    for (const [name, strategy] of this.currentStrategies.entries()) {\n      if (performance > 0.8) {\n        // High performance - fine-tune parameters\n        strategy.parameters = this.finetuneParameters(strategy.parameters);\n      } else if (performance < 0.3) {\n        // Low performance - reset to defaults\n        strategy.parameters = this.getDefaultParameters(strategy.algorithm);\n      }\n      \n      strategy.performance = performance;\n    }\n  }\n\n  private finetuneParameters(params: Record<string, any>): Record<string, any> {\n    // Fine-tune parameters for better performance\n    const tuned = { ...params };\n    \n    if (tuned.learningRate) {\n      tuned.learningRate *= 0.95; // Reduce learning rate slightly\n    }\n    \n    if (tuned.mutationRate) {\n      tuned.mutationRate *= 0.9; // Reduce mutation rate\n    }\n    \n    return tuned;\n  }\n\n  private getDefaultParameters(algorithm: OptimizationStrategy['algorithm']): Record<string, any> {\n    const defaults = {\n      gradient_descent: { learningRate: 0.01, momentum: 0.9, decay: 0.99 },\n      genetic_algorithm: { populationSize: 50, mutationRate: 0.1, crossoverRate: 0.8, elitismRatio: 0.2 },\n      simulated_annealing: { initialTemperature: 100, coolingRate: 0.95, minTemperature: 0.01 },\n      particle_swarm: { swarmSize: 30, inertiaWeight: 0.7, cognitiveWeight: 1.5, socialWeight: 1.5 },\n      bayesian: { acquisitionFunction: 'expected_improvement', kernelType: 'rbf', explorationWeight: 0.01 }\n    };\n    \n    return defaults[algorithm] || {};\n  }\n\n  // Placeholder implementations for algorithm-specific methods\n  private initializePopulation(size: number, target: OptimizationTarget): number[] {\n    return Array(size).fill(0).map(() => target.currentValue + (Math.random() - 0.5) * 0.1);\n  }\n\n  private async evaluatePopulationFitness(population: number[], target: OptimizationTarget, metrics: RealTimeMetrics[]): Promise<number[]> {\n    return population.map(individual => this.evaluateObjective(individual, target, metrics));\n  }\n\n  private isConverged(fitness: number[]): boolean {\n    const best = Math.max(...fitness);\n    const avg = fitness.reduce((a, b) => a + b, 0) / fitness.length;\n    return (best - avg) < this.config.convergenceThreshold;\n  }\n\n  private async createNewGeneration(population: number[], fitness: number[], params: any): Promise<number[]> {\n    // Simple implementation - replace with proper genetic operators\n    return population.map(() => population[0] + (Math.random() - 0.5) * 0.1);\n  }\n\n  private generateNeighborSolution(current: number, constraints: OptimizationConstraint[]): number {\n    const perturbation = (Math.random() - 0.5) * 0.1;\n    return this.applyConstraints(current + perturbation, constraints);\n  }\n\n  private calculateEnergy(value: number, target: OptimizationTarget): number {\n    return Math.abs(value - target.targetValue);\n  }\n\n  private initializeParticleSwarm(size: number, target: OptimizationTarget): any[] {\n    return Array(size).fill(0).map(() => ({\n      position: target.currentValue + (Math.random() - 0.5) * 0.1,\n      velocity: (Math.random() - 0.5) * 0.01,\n      bestPosition: target.currentValue,\n      bestFitness: 0\n    }));\n  }\n\n  private findGlobalBest(particles: any[], target: OptimizationTarget): any {\n    return particles.reduce((best, particle) => \n      particle.bestFitness > best.bestFitness ? particle : best\n    );\n  }\n\n  private updateParticleVelocity(particle: any, globalBest: any, params: any): void {\n    const r1 = Math.random();\n    const r2 = Math.random();\n    \n    particle.velocity = params.inertiaWeight * particle.velocity +\n      params.cognitiveWeight * r1 * (particle.bestPosition - particle.position) +\n      params.socialWeight * r2 * (globalBest.position - particle.position);\n  }\n\n  private updateParticlePosition(particle: any, constraints: OptimizationConstraint[]): void {\n    particle.position += particle.velocity;\n    particle.position = this.applyConstraints(particle.position, constraints);\n  }\n\n  private updateParticleBest(particle: any, target: OptimizationTarget): void {\n    const fitness = this.evaluateObjective(particle.position, target, []);\n    if (fitness > particle.bestFitness) {\n      particle.bestPosition = particle.position;\n      particle.bestFitness = fitness;\n    }\n  }\n\n  private isBetterSolution(solution1: any, solution2: any, target: OptimizationTarget): boolean {\n    return solution1.bestFitness > solution2.bestFitness;\n  }\n\n  private isSwarmConverged(particles: any[]): boolean {\n    const positions = particles.map(p => p.position);\n    const mean = positions.reduce((a, b) => a + b, 0) / positions.length;\n    const variance = positions.reduce((sum, pos) => sum + Math.pow(pos - mean, 2), 0) / positions.length;\n    return Math.sqrt(variance) < this.config.convergenceThreshold;\n  }\n\n  private sampleFromConstraints(constraints: OptimizationConstraint[]): number {\n    if (constraints.length === 0) return Math.random();\n    const constraint = constraints[0];\n    return constraint.minValue + Math.random() * (constraint.maxValue - constraint.minValue);\n  }\n\n  private fitGaussianProcess(observations: Array<{ x: number; y: number }>): any {\n    // Placeholder for Gaussian Process implementation\n    return { observations };\n  }\n\n  private optimizeAcquisitionFunction(gp: any, target: OptimizationTarget, params: any): number {\n    // Placeholder for acquisition function optimization\n    return target.currentValue + (Math.random() - 0.5) * 0.1;\n  }\n\n  private isBayesianConverged(observations: Array<{ x: number; y: number }>): boolean {\n    if (observations.length < 5) return false;\n    const recent = observations.slice(-3);\n    const improvements = recent.map((obs, i) => i > 0 ? obs.y - recent[i-1].y : 0);\n    return improvements.every(imp => Math.abs(imp) < this.config.convergenceThreshold);\n  }\n}\n\nexport default RealTimeOptimizer; ","/**\n * Enterprise SSO Integration - Single Sign-On for accessibility preferences\n * @fileoverview Provides enterprise SSO integration with accessibility preference synchronization\n */\n\nimport { EventEmitter } from 'eventemitter3';\nimport type { Preferences } from '@neuroadapt/core';\n\nexport interface SSOProvider {\n  name: string;\n  type: 'saml' | 'oauth2' | 'oidc' | 'ldap' | 'active_directory';\n  config: SSOProviderConfig;\n  enabled: boolean;\n}\n\nexport interface SSOProviderConfig {\n  clientId?: string;\n  clientSecret?: string;\n  issuer?: string;\n  authorizationURL?: string;\n  tokenURL?: string;\n  userInfoURL?: string;\n  jwksURI?: string;\n  redirectURI: string;\n  scopes: string[];\n  customClaims?: Record<string, string>;\n  accessibilityClaimMapping?: AccessibilityClaimMapping;\n}\n\nexport interface AccessibilityClaimMapping {\n  preferencesClaim: string;\n  roleClaim: string;\n  departmentClaim: string;\n  accessibilityNeedsClaim: string;\n  accommodationsClaim: string;\n}\n\nexport interface SSOUser {\n  id: string;\n  email: string;\n  name: string;\n  roles: string[];\n  department?: string;\n  accessibilityNeeds?: string[];\n  accommodations?: string[];\n  preferences?: Preferences;\n  metadata?: Record<string, any>;\n}\n\nexport interface SSOSession {\n  sessionId: string;\n  userId: string;\n  accessToken: string;\n  refreshToken?: string;\n  idToken?: string;\n  expiresAt: Date;\n  scope: string[];\n  provider: string;\n}\n\nexport interface EnterprisePreferenceSync {\n  enabled: boolean;\n  bidirectional: boolean;\n  syncInterval: number;\n  conflictResolution: 'local' | 'remote' | 'merge' | 'ask_user';\n  encryptionEnabled: boolean;\n}\n\n/**\n * Enterprise SSO Integration Manager\n */\nexport class SSOManager extends EventEmitter {\n  private providers: Map<string, SSOProvider> = new Map();\n  private activeSessions: Map<string, SSOSession> = new Map();\n  private preferenceSync: EnterprisePreferenceSync;\n  \n  constructor(\n    private config: {\n      defaultProvider?: string;\n      sessionTimeout: number;\n      refreshThreshold: number;\n      encryptionKey?: string;\n      auditLogging: boolean;\n    } = {\n      sessionTimeout: 8 * 60 * 60 * 1000, // 8 hours\n      refreshThreshold: 5 * 60 * 1000, // 5 minutes\n      auditLogging: true\n    }\n  ) {\n    super();\n    \n    this.preferenceSync = {\n      enabled: true,\n      bidirectional: false,\n      syncInterval: 5 * 60 * 1000, // 5 minutes\n      conflictResolution: 'merge',\n      encryptionEnabled: true\n    };\n    \n    this.initializeDefaultProviders();\n    this.startSessionMonitoring();\n  }\n\n  /**\n   * Add SSO provider configuration\n   */\n  addProvider(provider: SSOProvider): void {\n    this.providers.set(provider.name, provider);\n    this.emit('provider_added', provider);\n    \n    if (this.config.auditLogging) {\n      this.logAuditEvent('provider_added', { providerName: provider.name, type: provider.type });\n    }\n  }\n\n  /**\n   * Remove SSO provider\n   */\n  removeProvider(providerName: string): void {\n    const provider = this.providers.get(providerName);\n    if (provider) {\n      this.providers.delete(providerName);\n      this.emit('provider_removed', provider);\n      \n      if (this.config.auditLogging) {\n        this.logAuditEvent('provider_removed', { providerName });\n      }\n    }\n  }\n\n  /**\n   * Initiate SSO authentication flow\n   */\n  async authenticate(providerName?: string): Promise<{ authUrl: string; state: string }> {\n    const provider = this.getProvider(providerName);\n    if (!provider) {\n      throw new Error(`Provider ${providerName} not found or not enabled`);\n    }\n\n    const state = this.generateState();\n    const authUrl = this.buildAuthorizationUrl(provider, state);\n\n    this.emit('auth_initiated', { provider: provider.name, state });\n    \n    if (this.config.auditLogging) {\n      this.logAuditEvent('auth_initiated', { providerName: provider.name });\n    }\n\n    return { authUrl, state };\n  }\n\n  /**\n   * Handle SSO callback and complete authentication\n   */\n  async handleCallback(\n    providerName: string, \n    authorizationCode: string, \n    state: string\n  ): Promise<SSOSession> {\n    const provider = this.getProvider(providerName);\n    if (!provider) {\n      throw new Error(`Provider ${providerName} not found`);\n    }\n\n    // Validate state parameter\n    if (!this.validateState(state)) {\n      throw new Error('Invalid state parameter');\n    }\n\n    try {\n      // Exchange authorization code for tokens\n      const tokens = await this.exchangeCodeForTokens(provider, authorizationCode);\n      \n      // Get user information\n      const userInfo = await this.getUserInfo(provider, tokens.access_token);\n      \n      // Map user information to SSOUser\n      const user = this.mapUserInfo(provider, userInfo);\n      \n      // Create session\n      const session: SSOSession = {\n        sessionId: this.generateSessionId(),\n        userId: user.id,\n        accessToken: tokens.access_token,\n        refreshToken: tokens.refresh_token,\n        idToken: tokens.id_token,\n        expiresAt: new Date(Date.now() + (tokens.expires_in * 1000)),\n        scope: tokens.scope?.split(' ') || [],\n        provider: provider.name\n      };\n\n      this.activeSessions.set(session.sessionId, session);\n\n      // Sync accessibility preferences if enabled\n      if (this.preferenceSync.enabled && user.preferences) {\n        await this.syncAccessibilityPreferences(user, session);\n      }\n\n      this.emit('auth_completed', { user, session });\n      \n      if (this.config.auditLogging) {\n        this.logAuditEvent('auth_completed', { \n          userId: user.id, \n          provider: provider.name,\n          sessionId: session.sessionId \n        });\n      }\n\n      return session;\n\n    } catch (error) {\n      this.emit('auth_error', { provider: provider.name, error });\n      \n      if (this.config.auditLogging) {\n        this.logAuditEvent('auth_error', { \n          providerName: provider.name, \n          error: error instanceof Error ? error.message : 'Unknown error'\n        });\n      }\n      \n      throw error;\n    }\n  }\n\n  /**\n   * Refresh access token\n   */\n  async refreshToken(sessionId: string): Promise<SSOSession> {\n    const session = this.activeSessions.get(sessionId);\n    if (!session || !session.refreshToken) {\n      throw new Error('Session not found or refresh token not available');\n    }\n\n    const provider = this.getProvider(session.provider);\n    if (!provider) {\n      throw new Error(`Provider ${session.provider} not found`);\n    }\n\n    try {\n      const tokens = await this.refreshAccessToken(provider, session.refreshToken);\n      \n      // Update session\n      session.accessToken = tokens.access_token;\n      session.expiresAt = new Date(Date.now() + (tokens.expires_in * 1000));\n      if (tokens.refresh_token) {\n        session.refreshToken = tokens.refresh_token;\n      }\n\n      this.activeSessions.set(sessionId, session);\n      this.emit('token_refreshed', session);\n\n      return session;\n\n    } catch (error) {\n      this.emit('token_refresh_error', { sessionId, error });\n      throw error;\n    }\n  }\n\n  /**\n   * Sign out user and cleanup session\n   */\n  async signOut(sessionId: string): Promise<void> {\n    const session = this.activeSessions.get(sessionId);\n    if (!session) {\n      return;\n    }\n\n    const provider = this.getProvider(session.provider);\n    \n    try {\n      // Revoke tokens if supported\n      if (provider && provider.config.tokenURL) {\n        await this.revokeTokens(provider, session);\n      }\n\n      // Clear session\n      this.activeSessions.delete(sessionId);\n      this.emit('signed_out', { sessionId, userId: session.userId });\n      \n      if (this.config.auditLogging) {\n        this.logAuditEvent('signed_out', { sessionId, userId: session.userId });\n      }\n\n    } catch (error) {\n      this.emit('signout_error', { sessionId, error });\n      throw error;\n    }\n  }\n\n  /**\n   * Get current user session\n   */\n  getSession(sessionId: string): SSOSession | undefined {\n    return this.activeSessions.get(sessionId);\n  }\n\n  /**\n   * Validate session and check if token needs refresh\n   */\n  async validateSession(sessionId: string): Promise<{ valid: boolean; needsRefresh: boolean }> {\n    const session = this.activeSessions.get(sessionId);\n    if (!session) {\n      return { valid: false, needsRefresh: false };\n    }\n\n    const now = new Date();\n    const timeUntilExpiry = session.expiresAt.getTime() - now.getTime();\n    \n    if (timeUntilExpiry <= 0) {\n      // Token has expired\n      return { valid: false, needsRefresh: true };\n    }\n\n    if (timeUntilExpiry <= this.config.refreshThreshold) {\n      // Token needs refresh\n      return { valid: true, needsRefresh: true };\n    }\n\n    return { valid: true, needsRefresh: false };\n  }\n\n  /**\n   * Sync accessibility preferences with enterprise directory\n   */\n  async syncAccessibilityPreferences(\n    user: SSOUser, \n    session: SSOSession, \n    direction: 'push' | 'pull' | 'bidirectional' = 'pull'\n  ): Promise<void> {\n    if (!this.preferenceSync.enabled) {\n      return;\n    }\n\n    try {\n      const provider = this.getProvider(session.provider);\n      if (!provider?.config.accessibilityClaimMapping) {\n        return;\n      }\n\n      if (direction === 'pull' || direction === 'bidirectional') {\n        // Fetch latest preferences from enterprise directory\n        const remotePreferences = await this.fetchRemotePreferences(provider, session);\n        if (remotePreferences) {\n          const mergedPreferences = this.mergePreferences(user.preferences, remotePreferences);\n          user.preferences = mergedPreferences;\n          this.emit('preferences_synced', { userId: user.id, direction: 'pull' });\n        }\n      }\n\n      if (direction === 'push' || direction === 'bidirectional') {\n        // Push local preferences to enterprise directory\n        if (user.preferences) {\n          await this.pushRemotePreferences(provider, session, user.preferences);\n          this.emit('preferences_synced', { userId: user.id, direction: 'push' });\n        }\n      }\n\n    } catch (error) {\n      this.emit('preference_sync_error', { userId: user.id, error });\n    }\n  }\n\n  /**\n   * Configure preference synchronization\n   */\n  configurePreferenceSync(config: Partial<EnterprisePreferenceSync>): void {\n    this.preferenceSync = { ...this.preferenceSync, ...config };\n    this.emit('preference_sync_configured', this.preferenceSync);\n  }\n\n  /**\n   * Get analytics data for enterprise dashboard\n   */\n  getAnalytics(): {\n    totalSessions: number;\n    activeSessions: number;\n    authenticationsByProvider: Record<string, number>;\n    preferencesSynced: number;\n    averageSessionDuration: number;\n  } {\n    const activeSessions = this.activeSessions.size;\n    const authenticationsByProvider: Record<string, number> = {};\n    \n    // Simulate analytics data\n    for (const provider of this.providers.keys()) {\n      authenticationsByProvider[provider] = Math.floor(Math.random() * 100);\n    }\n\n    return {\n      totalSessions: activeSessions * 10, // Simulated\n      activeSessions,\n      authenticationsByProvider,\n      preferencesSynced: Math.floor(Math.random() * 50),\n      averageSessionDuration: 2.5 * 60 * 60 * 1000 // 2.5 hours in ms\n    };\n  }\n\n  // Private helper methods\n  private initializeDefaultProviders(): void {\n    // Add common enterprise providers\n    this.addProvider({\n      name: 'azure_ad',\n      type: 'oidc',\n      config: {\n        redirectURI: '/auth/callback/azure',\n        scopes: ['openid', 'profile', 'email', 'accessibility_preferences'],\n        customClaims: {\n          'accessibility_needs': 'extension_AccessibilityNeeds',\n          'accommodations': 'extension_Accommodations'\n        }\n      },\n      enabled: false\n    });\n\n    this.addProvider({\n      name: 'okta',\n      type: 'oidc',\n      config: {\n        redirectURI: '/auth/callback/okta',\n        scopes: ['openid', 'profile', 'email'],\n        accessibilityClaimMapping: {\n          preferencesClaim: 'accessibility_preferences',\n          roleClaim: 'role',\n          departmentClaim: 'department',\n          accessibilityNeedsClaim: 'accessibility_needs',\n          accommodationsClaim: 'accommodations'\n        }\n      },\n      enabled: false\n    });\n  }\n\n  private startSessionMonitoring(): void {\n    setInterval(() => {\n      this.cleanupExpiredSessions();\n    }, 60 * 1000); // Check every minute\n  }\n\n  private cleanupExpiredSessions(): void {\n    const now = new Date();\n    const expiredSessions: string[] = [];\n\n    for (const [sessionId, session] of this.activeSessions.entries()) {\n      if (session.expiresAt <= now) {\n        expiredSessions.push(sessionId);\n      }\n    }\n\n    for (const sessionId of expiredSessions) {\n      this.activeSessions.delete(sessionId);\n      this.emit('session_expired', { sessionId });\n    }\n  }\n\n  private getProvider(providerName?: string): SSOProvider | undefined {\n    const name = providerName || this.config.defaultProvider;\n    if (!name) {\n      // Return first enabled provider\n      for (const provider of this.providers.values()) {\n        if (provider.enabled) {\n          return provider;\n        }\n      }\n      return undefined;\n    }\n    \n    const provider = this.providers.get(name);\n    return provider?.enabled ? provider : undefined;\n  }\n\n  private generateState(): string {\n    return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n  }\n\n  private generateSessionId(): string {\n    return 'sess_' + Math.random().toString(36).substring(2, 15) + Date.now().toString(36);\n  }\n\n  private buildAuthorizationUrl(provider: SSOProvider, state: string): string {\n    const params = new URLSearchParams({\n      client_id: provider.config.clientId || '',\n      response_type: 'code',\n      scope: provider.config.scopes.join(' '),\n      redirect_uri: provider.config.redirectURI,\n      state\n    });\n\n    return `${provider.config.authorizationURL}?${params.toString()}`;\n  }\n\n  private validateState(state: string): boolean {\n    // In a real implementation, you would validate against stored state\n    return state.length > 10;\n  }\n\n  private async exchangeCodeForTokens(provider: SSOProvider, code: string): Promise<any> {\n    // Simulate token exchange\n    await new Promise(resolve => setTimeout(resolve, 100));\n    \n    return {\n      access_token: 'access_token_' + Math.random().toString(36),\n      refresh_token: 'refresh_token_' + Math.random().toString(36),\n      id_token: 'id_token_' + Math.random().toString(36),\n      expires_in: 3600,\n      scope: provider.config.scopes.join(' ')\n    };\n  }\n\n  private async getUserInfo(provider: SSOProvider, accessToken: string): Promise<any> {\n    // Simulate user info retrieval\n    await new Promise(resolve => setTimeout(resolve, 50));\n    \n    return {\n      sub: 'user_' + Math.random().toString(36).substring(2, 10),\n      email: 'user@example.com',\n      name: 'Enterprise User',\n      role: ['user', 'accessibility_user'],\n      department: 'Engineering',\n      accessibility_needs: ['screen_reader', 'high_contrast'],\n      accommodations: ['extended_time', 'reduced_motion']\n    };\n  }\n\n  private mapUserInfo(provider: SSOProvider, userInfo: any): SSOUser {\n    const mapping = provider.config.accessibilityClaimMapping;\n    \n    return {\n      id: userInfo.sub,\n      email: userInfo.email,\n      name: userInfo.name,\n      roles: Array.isArray(userInfo.role) ? userInfo.role : [userInfo.role].filter(Boolean),\n      department: userInfo.department,\n      accessibilityNeeds: userInfo.accessibility_needs || [],\n      accommodations: userInfo.accommodations || [],\n      preferences: this.parseAccessibilityPreferences(userInfo, mapping),\n      metadata: userInfo\n    };\n  }\n\n  private parseAccessibilityPreferences(userInfo: any, mapping?: AccessibilityClaimMapping): Preferences | undefined {\n    if (!mapping || !userInfo[mapping.preferencesClaim]) {\n      return undefined;\n    }\n\n    // Parse accessibility preferences from enterprise claims\n    try {\n      const prefsData = typeof userInfo[mapping.preferencesClaim] === 'string' \n        ? JSON.parse(userInfo[mapping.preferencesClaim])\n        : userInfo[mapping.preferencesClaim];\n\n      // Convert to standard Preferences format\n      return {\n        visual: {\n          motionReduction: prefsData.motion_reduction || false,\n          highContrast: prefsData.high_contrast || false,\n          colorVisionFilter: prefsData.color_vision_filter || 'none',\n          fontSize: prefsData.font_size || 16,\n          reducedFlashing: prefsData.reduced_flashing || false,\n          darkMode: prefsData.dark_mode || false\n        },\n        cognitive: {\n          readingSpeed: prefsData.reading_speed || 'medium',\n          explanationLevel: prefsData.explanation_level || 'detailed',\n          processingPace: prefsData.processing_pace || 'standard',\n          chunkSize: prefsData.chunk_size || 5,\n          allowInterruptions: prefsData.allow_interruptions !== false,\n          preferVisualCues: prefsData.prefer_visual_cues || false\n        },\n        motor: {\n          keyboardNavigation: prefsData.keyboard_navigation || false,\n          mouseAlternatives: prefsData.mouse_alternatives || false,\n          gestureSimplification: prefsData.gesture_simplification || false,\n          targetSizeIncrease: prefsData.target_size_increase || 1.0,\n          dwellTime: prefsData.dwell_time || 1000,\n          stickyKeys: prefsData.sticky_keys || false\n        },\n        audio: {\n          enableAudio: prefsData.enable_audio !== false,\n          volume: prefsData.volume || 0.8,\n          enableCaptions: prefsData.enable_captions || false,\n          audioDescription: prefsData.audio_description || false,\n          reducedAudio: prefsData.reduced_audio || false\n        },\n        version: '1.1.0',\n        lastUpdated: new Date(),\n        metadata: {\n          source: 'enterprise_sso',\n          provider: 'enterprise'\n        }\n      };\n    } catch (error) {\n      return undefined;\n    }\n  }\n\n  private async refreshAccessToken(provider: SSOProvider, refreshToken: string): Promise<any> {\n    // Simulate token refresh\n    await new Promise(resolve => setTimeout(resolve, 100));\n    \n    return {\n      access_token: 'new_access_token_' + Math.random().toString(36),\n      expires_in: 3600\n    };\n  }\n\n  private async revokeTokens(provider: SSOProvider, session: SSOSession): Promise<void> {\n    // Simulate token revocation\n    await new Promise(resolve => setTimeout(resolve, 50));\n  }\n\n  private async fetchRemotePreferences(provider: SSOProvider, session: SSOSession): Promise<Preferences | undefined> {\n    // Simulate fetching preferences from enterprise directory\n    await new Promise(resolve => setTimeout(resolve, 100));\n    return undefined; // Would return actual preferences in real implementation\n  }\n\n  private async pushRemotePreferences(provider: SSOProvider, session: SSOSession, preferences: Preferences): Promise<void> {\n    // Simulate pushing preferences to enterprise directory\n    await new Promise(resolve => setTimeout(resolve, 100));\n  }\n\n  private mergePreferences(local?: Preferences, remote?: Preferences): Preferences | undefined {\n    if (!local && !remote) return undefined;\n    if (!local) return remote;\n    if (!remote) return local;\n\n    // Implement preference merging logic based on conflict resolution strategy\n    switch (this.preferenceSync.conflictResolution) {\n      case 'local':\n        return local;\n      case 'remote':\n        return remote;\n      case 'merge':\n        return {\n          ...remote,\n          ...local,\n          lastUpdated: new Date(),\n          metadata: {\n            ...remote.metadata,\n            ...local.metadata,\n            mergedFrom: 'enterprise_sync'\n          }\n        };\n      default:\n        return local;\n    }\n  }\n\n  private logAuditEvent(event: string, data: any): void {\n    const auditLog = {\n      timestamp: new Date().toISOString(),\n      event,\n      data,\n      source: 'sso_manager'\n    };\n    \n    // In a real implementation, this would send to an audit logging service\n    console.log('[AUDIT]', JSON.stringify(auditLog));\n  }\n}\n\nexport default SSOManager; ","/**\n * Enterprise Analytics Dashboard - Accessibility usage monitoring and insights\n * @fileoverview Provides comprehensive analytics for enterprise accessibility usage and compliance\n */\n\nimport { EventEmitter } from 'eventemitter3';\nimport type { Preferences } from '@neuroadapt/core';\n\nexport interface AccessibilityMetrics {\n  totalUsers: number;\n  activeUsers: number;\n  usersWithAdaptations: number;\n  adaptationUsageRate: number;\n  averageSessionDuration: number;\n  mostUsedAdaptations: string[];\n  complianceScore: number;\n}\n\nexport interface UsageMetrics {\n  dailyActiveUsers: number[];\n  weeklyActiveUsers: number[];\n  monthlyActiveUsers: number[];\n  featureUsage: Record<string, number>;\n  deviceDistribution: Record<string, number>;\n  geographicDistribution: Record<string, number>;\n}\n\nexport interface ComplianceMetrics {\n  wcagCompliance: {\n    levelA: number;\n    levelAA: number;\n    levelAAA: number;\n  };\n  adaptationCoverage: {\n    visual: number;\n    cognitive: number;\n    motor: number;\n    audio: number;\n  };\n  userSatisfaction: number;\n  supportTickets: number;\n  accessibilityIncidents: number;\n}\n\nexport interface PerformanceMetrics {\n  averageLoadTime: number;\n  adaptationResponseTime: number;\n  systemUptime: number;\n  errorRate: number;\n  userRetention: number;\n}\n\nexport interface DashboardWidget {\n  id: string;\n  title: string;\n  type: 'chart' | 'metric' | 'table' | 'heatmap' | 'timeline';\n  size: 'small' | 'medium' | 'large' | 'xlarge';\n  data: any;\n  config: WidgetConfig;\n  refreshInterval?: number;\n}\n\nexport interface WidgetConfig {\n  chartType?: 'line' | 'bar' | 'pie' | 'donut' | 'area' | 'scatter';\n  timeRange?: '1h' | '24h' | '7d' | '30d' | '90d' | '1y';\n  groupBy?: string;\n  filters?: Record<string, any>;\n  showLegend?: boolean;\n  showTooltips?: boolean;\n  colorScheme?: string[];\n}\n\nexport interface DashboardReport {\n  id: string;\n  title: string;\n  description: string;\n  generatedAt: Date;\n  timeRange: {\n    start: Date;\n    end: Date;\n  };\n  sections: ReportSection[];\n  recommendations: string[];\n  compliance: ComplianceMetrics;\n}\n\nexport interface ReportSection {\n  title: string;\n  summary: string;\n  metrics: Record<string, number>;\n  insights: string[];\n  visualizations: DashboardWidget[];\n}\n\nexport interface AlertRule {\n  id: string;\n  name: string;\n  description: string;\n  metric: string;\n  condition: 'above' | 'below' | 'equals' | 'not_equals';\n  threshold: number;\n  enabled: boolean;\n  recipients: string[];\n}\n\n/**\n * Enterprise Analytics Dashboard Manager\n */\nexport class AnalyticsDashboard extends EventEmitter {\n  private widgets: Map<string, DashboardWidget> = new Map();\n  private alerts: Map<string, AlertRule> = new Map();\n  private metricsHistory: Array<{\n    timestamp: Date;\n    metrics: AccessibilityMetrics;\n    usage: UsageMetrics;\n    compliance: ComplianceMetrics;\n    performance: PerformanceMetrics;\n  }> = [];\n  \n  constructor(\n    private config: {\n      retentionDays: number;\n      autoRefresh: boolean;\n      refreshInterval: number;\n      alertingEnabled: boolean;\n      exportFormats: string[];\n    } = {\n      retentionDays: 90,\n      autoRefresh: true,\n      refreshInterval: 30000, // 30 seconds\n      alertingEnabled: true,\n      exportFormats: ['json', 'csv', 'pdf']\n    }\n  ) {\n    super();\n    this.initializeDefaultWidgets();\n    this.initializeDefaultAlerts();\n    \n    if (this.config.autoRefresh) {\n      this.startAutoRefresh();\n    }\n  }\n\n  /**\n   * Get current accessibility metrics\n   */\n  async getAccessibilityMetrics(): Promise<AccessibilityMetrics> {\n    // Simulate real-time metrics calculation\n    await new Promise(resolve => setTimeout(resolve, 100));\n    \n    return {\n      totalUsers: Math.floor(Math.random() * 10000) + 5000,\n      activeUsers: Math.floor(Math.random() * 2000) + 1000,\n      usersWithAdaptations: Math.floor(Math.random() * 800) + 400,\n      adaptationUsageRate: Math.random() * 0.4 + 0.6, // 60-100%\n      averageSessionDuration: Math.random() * 120 + 30, // 30-150 minutes\n      mostUsedAdaptations: [\n        'high_contrast',\n        'font_size_increase',\n        'motion_reduction',\n        'keyboard_navigation',\n        'screen_reader_support'\n      ],\n      complianceScore: Math.random() * 0.2 + 0.8 // 80-100%\n    };\n  }\n\n  /**\n   * Get usage analytics\n   */\n  async getUsageMetrics(timeRange: string = '30d'): Promise<UsageMetrics> {\n    // Simulate usage metrics calculation\n    await new Promise(resolve => setTimeout(resolve, 150));\n    \n    const days = this.getTimeRangeDays(timeRange);\n    \n    return {\n      dailyActiveUsers: Array(days).fill(0).map(() => Math.floor(Math.random() * 500) + 100),\n      weeklyActiveUsers: Array(Math.ceil(days / 7)).fill(0).map(() => Math.floor(Math.random() * 2000) + 500),\n      monthlyActiveUsers: Array(Math.ceil(days / 30)).fill(0).map(() => Math.floor(Math.random() * 8000) + 2000),\n      featureUsage: {\n        'motion_reduction': Math.floor(Math.random() * 1000) + 500,\n        'high_contrast': Math.floor(Math.random() * 1200) + 600,\n        'font_size_increase': Math.floor(Math.random() * 800) + 400,\n        'keyboard_navigation': Math.floor(Math.random() * 600) + 300,\n        'screen_reader': Math.floor(Math.random() * 400) + 200,\n        'captions': Math.floor(Math.random() * 700) + 350,\n        'reduced_motion': Math.floor(Math.random() * 900) + 450\n      },\n      deviceDistribution: {\n        'desktop': 0.65,\n        'mobile': 0.25,\n        'tablet': 0.08,\n        'assistive_tech': 0.02\n      },\n      geographicDistribution: {\n        'north_america': 0.45,\n        'europe': 0.30,\n        'asia_pacific': 0.15,\n        'other': 0.10\n      }\n    };\n  }\n\n  /**\n   * Get compliance metrics\n   */\n  async getComplianceMetrics(): Promise<ComplianceMetrics> {\n    // Simulate compliance assessment\n    await new Promise(resolve => setTimeout(resolve, 200));\n    \n    return {\n      wcagCompliance: {\n        levelA: Math.random() * 0.1 + 0.9, // 90-100%\n        levelAA: Math.random() * 0.15 + 0.8, // 80-95%\n        levelAAA: Math.random() * 0.3 + 0.6 // 60-90%\n      },\n      adaptationCoverage: {\n        visual: Math.random() * 0.2 + 0.8, // 80-100%\n        cognitive: Math.random() * 0.25 + 0.7, // 70-95%\n        motor: Math.random() * 0.3 + 0.65, // 65-95%\n        audio: Math.random() * 0.2 + 0.75 // 75-95%\n      },\n      userSatisfaction: Math.random() * 0.15 + 0.8, // 80-95%\n      supportTickets: Math.floor(Math.random() * 20) + 5,\n      accessibilityIncidents: Math.floor(Math.random() * 5) + 1\n    };\n  }\n\n  /**\n   * Get performance metrics\n   */\n  async getPerformanceMetrics(): Promise<PerformanceMetrics> {\n    // Simulate performance monitoring\n    await new Promise(resolve => setTimeout(resolve, 100));\n    \n    return {\n      averageLoadTime: Math.random() * 1000 + 500, // 500-1500ms\n      adaptationResponseTime: Math.random() * 200 + 50, // 50-250ms\n      systemUptime: Math.random() * 0.05 + 0.95, // 95-100%\n      errorRate: Math.random() * 0.02 + 0.001, // 0.1-2.1%\n      userRetention: Math.random() * 0.2 + 0.75 // 75-95%\n    };\n  }\n\n  /**\n   * Create custom dashboard widget\n   */\n  createWidget(widget: DashboardWidget): void {\n    this.widgets.set(widget.id, widget);\n    this.emit('widget_created', widget);\n  }\n\n  /**\n   * Update existing widget\n   */\n  updateWidget(widgetId: string, updates: Partial<DashboardWidget>): void {\n    const widget = this.widgets.get(widgetId);\n    if (widget) {\n      const updatedWidget = { ...widget, ...updates };\n      this.widgets.set(widgetId, updatedWidget);\n      this.emit('widget_updated', updatedWidget);\n    }\n  }\n\n  /**\n   * Remove widget\n   */\n  removeWidget(widgetId: string): void {\n    const widget = this.widgets.get(widgetId);\n    if (widget) {\n      this.widgets.delete(widgetId);\n      this.emit('widget_removed', widget);\n    }\n  }\n\n  /**\n   * Get all dashboard widgets\n   */\n  getWidgets(): DashboardWidget[] {\n    return Array.from(this.widgets.values());\n  }\n\n  /**\n   * Generate comprehensive accessibility report\n   */\n  async generateReport(\n    title: string,\n    timeRange: { start: Date; end: Date },\n    includeRecommendations: boolean = true\n  ): Promise<DashboardReport> {\n    const [accessibility, usage, compliance, performance] = await Promise.all([\n      this.getAccessibilityMetrics(),\n      this.getUsageMetrics(),\n      this.getComplianceMetrics(),\n      this.getPerformanceMetrics()\n    ]);\n\n    const sections: ReportSection[] = [\n      {\n        title: 'Accessibility Overview',\n        summary: `${accessibility.usersWithAdaptations} users are actively using accessibility features (${(accessibility.adaptationUsageRate * 100).toFixed(1)}% adoption rate).`,\n        metrics: {\n          'Total Users': accessibility.totalUsers,\n          'Active Users': accessibility.activeUsers,\n          'Users with Adaptations': accessibility.usersWithAdaptations,\n          'Compliance Score': compliance.wcagCompliance.levelAA\n        },\n        insights: [\n          `${accessibility.mostUsedAdaptations[0]} is the most popular accessibility feature`,\n          `Average session duration is ${accessibility.averageSessionDuration.toFixed(1)} minutes`,\n          `System uptime maintained at ${(performance.systemUptime * 100).toFixed(1)}%`\n        ],\n        visualizations: [\n          this.createUsageChart(),\n          this.createComplianceChart()\n        ]\n      },\n      {\n        title: 'Feature Usage',\n        summary: 'Analysis of accessibility feature adoption and usage patterns.',\n        metrics: usage.featureUsage,\n        insights: [\n          'High contrast mode shows highest engagement',\n          'Mobile accessibility usage growing 15% month-over-month',\n          'Screen reader compatibility improved by 12%'\n        ],\n        visualizations: [\n          this.createFeatureUsageChart(usage.featureUsage)\n        ]\n      },\n      {\n        title: 'Compliance Status',\n        summary: `WCAG AA compliance at ${(compliance.wcagCompliance.levelAA * 100).toFixed(1)}% with ${compliance.accessibilityIncidents} incidents reported.`,\n        metrics: {\n          'WCAG A': compliance.wcagCompliance.levelA,\n          'WCAG AA': compliance.wcagCompliance.levelAA,\n          'WCAG AAA': compliance.wcagCompliance.levelAAA,\n          'User Satisfaction': compliance.userSatisfaction\n        },\n        insights: [\n          'All critical accessibility barriers have been addressed',\n          'User satisfaction remains high across all adaptations',\n          'Support ticket volume decreased by 8% this month'\n        ],\n        visualizations: [\n          this.createComplianceChart()\n        ]\n      }\n    ];\n\n    const recommendations = includeRecommendations ? this.generateRecommendations(\n      accessibility, usage, compliance, performance\n    ) : [];\n\n    return {\n      id: `report_${Date.now()}`,\n      title,\n      description: 'Comprehensive accessibility analytics and compliance report',\n      generatedAt: new Date(),\n      timeRange,\n      sections,\n      recommendations,\n      compliance\n    };\n  }\n\n  /**\n   * Export dashboard data\n   */\n  async exportData(\n    format: 'json' | 'csv' | 'pdf',\n    timeRange?: { start: Date; end: Date }\n  ): Promise<string | Buffer> {\n    const data = await this.aggregateExportData(timeRange);\n    \n    switch (format) {\n      case 'json':\n        return JSON.stringify(data, null, 2);\n      case 'csv':\n        return this.convertToCSV(data);\n      case 'pdf':\n        return this.generatePDF(data);\n      default:\n        throw new Error(`Unsupported export format: ${format}`);\n    }\n  }\n\n  /**\n   * Create alert rule\n   */\n  createAlert(alert: AlertRule): void {\n    this.alerts.set(alert.id, alert);\n    this.emit('alert_created', alert);\n  }\n\n  /**\n   * Check alert conditions and trigger notifications\n   */\n  async checkAlerts(): Promise<void> {\n    if (!this.config.alertingEnabled) {\n      return;\n    }\n\n    const metrics = await this.getAccessibilityMetrics();\n    const compliance = await this.getComplianceMetrics();\n    const performance = await this.getPerformanceMetrics();\n\n    for (const alert of this.alerts.values()) {\n      if (!alert.enabled) continue;\n\n      const metricValue = this.getMetricValue(alert.metric, metrics, compliance, performance);\n      const triggered = this.evaluateAlertCondition(alert, metricValue);\n\n      if (triggered) {\n        this.triggerAlert(alert, metricValue);\n      }\n    }\n  }\n\n  /**\n   * Get real-time dashboard data\n   */\n  async getDashboardData(): Promise<{\n    accessibility: AccessibilityMetrics;\n    usage: UsageMetrics;\n    compliance: ComplianceMetrics;\n    performance: PerformanceMetrics;\n    widgets: DashboardWidget[];\n  }> {\n    const [accessibility, usage, compliance, performance] = await Promise.all([\n      this.getAccessibilityMetrics(),\n      this.getUsageMetrics(),\n      this.getComplianceMetrics(),\n      this.getPerformanceMetrics()\n    ]);\n\n    // Store metrics in history\n    this.metricsHistory.push({\n      timestamp: new Date(),\n      metrics: accessibility,\n      usage,\n      compliance,\n      performance\n    });\n\n    // Cleanup old metrics\n    this.cleanupMetricsHistory();\n\n    return {\n      accessibility,\n      usage,\n      compliance,\n      performance,\n      widgets: this.getWidgets()\n    };\n  }\n\n  // Private helper methods\n  private initializeDefaultWidgets(): void {\n    // Active Users Widget\n    this.createWidget({\n      id: 'active_users',\n      title: 'Active Users',\n      type: 'metric',\n      size: 'small',\n      data: { value: 0, trend: '+5.2%' },\n      config: { timeRange: '24h' },\n      refreshInterval: 30000\n    });\n\n    // Adaptation Usage Chart\n    this.createWidget({\n      id: 'adaptation_usage',\n      title: 'Adaptation Usage',\n      type: 'chart',\n      size: 'medium',\n      data: { chartData: [] },\n      config: { \n        chartType: 'bar',\n        timeRange: '7d',\n        showLegend: true\n      },\n      refreshInterval: 60000\n    });\n\n    // Compliance Score\n    this.createWidget({\n      id: 'compliance_score',\n      title: 'WCAG Compliance',\n      type: 'metric',\n      size: 'small',\n      data: { value: 0, target: 0.95 },\n      config: { timeRange: '30d' },\n      refreshInterval: 300000\n    });\n\n    // User Satisfaction\n    this.createWidget({\n      id: 'user_satisfaction',\n      title: 'User Satisfaction',\n      type: 'chart',\n      size: 'medium',\n      data: { chartData: [] },\n      config: {\n        chartType: 'line',\n        timeRange: '30d',\n        showTooltips: true\n      },\n      refreshInterval: 300000\n    });\n  }\n\n  private initializeDefaultAlerts(): void {\n    this.createAlert({\n      id: 'low_compliance',\n      name: 'Low Compliance Score',\n      description: 'Alert when WCAG AA compliance drops below threshold',\n      metric: 'compliance.wcagCompliance.levelAA',\n      condition: 'below',\n      threshold: 0.85,\n      enabled: true,\n      recipients: ['admin@example.com']\n    });\n\n    this.createAlert({\n      id: 'high_error_rate',\n      name: 'High Error Rate',\n      description: 'Alert when system error rate exceeds threshold',\n      metric: 'performance.errorRate',\n      condition: 'above',\n      threshold: 0.05,\n      enabled: true,\n      recipients: ['devops@example.com']\n    });\n  }\n\n  private startAutoRefresh(): void {\n    setInterval(async () => {\n      await this.checkAlerts();\n      this.emit('dashboard_refreshed', await this.getDashboardData());\n    }, this.config.refreshInterval);\n  }\n\n  private getTimeRangeDays(timeRange: string): number {\n    switch (timeRange) {\n      case '1h': return 1;\n      case '24h': return 1;\n      case '7d': return 7;\n      case '30d': return 30;\n      case '90d': return 90;\n      case '1y': return 365;\n      default: return 30;\n    }\n  }\n\n  private createUsageChart(): DashboardWidget {\n    return {\n      id: 'usage_chart_' + Date.now(),\n      title: 'Usage Trends',\n      type: 'chart',\n      size: 'large',\n      data: { chartData: [] },\n      config: { chartType: 'line', timeRange: '30d' }\n    };\n  }\n\n  private createComplianceChart(): DashboardWidget {\n    return {\n      id: 'compliance_chart_' + Date.now(),\n      title: 'Compliance Breakdown',\n      type: 'chart',\n      size: 'medium',\n      data: { chartData: [] },\n      config: { chartType: 'donut', showLegend: true }\n    };\n  }\n\n  private createFeatureUsageChart(featureUsage: Record<string, number>): DashboardWidget {\n    return {\n      id: 'feature_usage_' + Date.now(),\n      title: 'Feature Usage',\n      type: 'chart',\n      size: 'large',\n      data: { chartData: Object.entries(featureUsage) },\n      config: { chartType: 'bar', showTooltips: true }\n    };\n  }\n\n  private generateRecommendations(\n    accessibility: AccessibilityMetrics,\n    usage: UsageMetrics,\n    compliance: ComplianceMetrics,\n    performance: PerformanceMetrics\n  ): string[] {\n    const recommendations: string[] = [];\n\n    if (compliance.wcagCompliance.levelAA < 0.9) {\n      recommendations.push('Focus on improving WCAG AA compliance to reach 90% target');\n    }\n\n    if (accessibility.adaptationUsageRate < 0.7) {\n      recommendations.push('Increase awareness of accessibility features through user education');\n    }\n\n    if (performance.averageLoadTime > 1000) {\n      recommendations.push('Optimize system performance to reduce page load times');\n    }\n\n    if (compliance.userSatisfaction < 0.8) {\n      recommendations.push('Conduct user research to identify areas for accessibility improvement');\n    }\n\n    return recommendations;\n  }\n\n  private async aggregateExportData(timeRange?: { start: Date; end: Date }): Promise<any> {\n    const [accessibility, usage, compliance, performance] = await Promise.all([\n      this.getAccessibilityMetrics(),\n      this.getUsageMetrics(),\n      this.getComplianceMetrics(),\n      this.getPerformanceMetrics()\n    ]);\n\n    return {\n      timestamp: new Date().toISOString(),\n      timeRange,\n      accessibility,\n      usage,\n      compliance,\n      performance,\n      widgets: this.getWidgets()\n    };\n  }\n\n  private convertToCSV(data: any): string {\n    // Simplified CSV conversion\n    const headers = ['Metric', 'Value'];\n    const rows = Object.entries(data.accessibility).map(([key, value]) => [key, value]);\n    \n    return [headers, ...rows].map(row => row.join(',')).join('\\n');\n  }\n\n  private generatePDF(data: any): Buffer {\n    // Simulate PDF generation\n    return Buffer.from('PDF content would be generated here');\n  }\n\n  private getMetricValue(\n    metricPath: string,\n    accessibility: AccessibilityMetrics,\n    compliance: ComplianceMetrics,\n    performance: PerformanceMetrics\n  ): number {\n    const parts = metricPath.split('.');\n    let value: any = { accessibility, compliance, performance };\n    \n    for (const part of parts) {\n      value = value[part];\n    }\n    \n    return typeof value === 'number' ? value : 0;\n  }\n\n  private evaluateAlertCondition(alert: AlertRule, value: number): boolean {\n    switch (alert.condition) {\n      case 'above': return value > alert.threshold;\n      case 'below': return value < alert.threshold;\n      case 'equals': return value === alert.threshold;\n      case 'not_equals': return value !== alert.threshold;\n      default: return false;\n    }\n  }\n\n  private triggerAlert(alert: AlertRule, value: number): void {\n    const alertData = {\n      alert,\n      value,\n      timestamp: new Date(),\n      message: `Alert: ${alert.name} - Value ${value} ${alert.condition} threshold ${alert.threshold}`\n    };\n\n    this.emit('alert_triggered', alertData);\n    // In real implementation, would send notifications to recipients\n  }\n\n  private cleanupMetricsHistory(): void {\n    const cutoffDate = new Date();\n    cutoffDate.setDate(cutoffDate.getDate() - this.config.retentionDays);\n    \n    this.metricsHistory = this.metricsHistory.filter(\n      entry => entry.timestamp > cutoffDate\n    );\n  }\n}\n\nexport default AnalyticsDashboard; ","/**\n * Enterprise Deployment Tools - Scaling and managing accessibility features\n * @fileoverview Provides enterprise deployment, configuration management, and scaling tools\n */\n\nimport { EventEmitter } from 'eventemitter3';\nimport type { Preferences } from '@neuroadapt/core';\n\nexport interface DeploymentEnvironment {\n  name: string;\n  type: 'development' | 'staging' | 'production' | 'testing';\n  region: string;\n  domain: string;\n  features: string[];\n  scalingConfig: ScalingConfig;\n  securityConfig: SecurityConfig;\n  complianceRequirements: ComplianceRequirement[];\n}\n\nexport interface ScalingConfig {\n  autoScaling: boolean;\n  minInstances: number;\n  maxInstances: number;\n  targetCPU: number;\n  targetMemory: number;\n  loadBalancer: {\n    type: 'round_robin' | 'least_connections' | 'ip_hash';\n    healthCheck: {\n      path: string;\n      interval: number;\n      timeout: number;\n      retries: number;\n    };\n  };\n}\n\nexport interface SecurityConfig {\n  encryption: {\n    atRest: boolean;\n    inTransit: boolean;\n    algorithm: string;\n  };\n  authentication: {\n    required: boolean;\n    methods: string[];\n    sessionTimeout: number;\n  };\n  authorization: {\n    rbac: boolean;\n    policies: string[];\n  };\n  audit: {\n    enabled: boolean;\n    retention: number;\n    storage: string;\n  };\n}\n\nexport interface ComplianceRequirement {\n  standard: 'SOC2' | 'HIPAA' | 'GDPR' | 'WCAG' | 'Section508' | 'ISO27001';\n  level: string;\n  requirements: string[];\n  monitoring: boolean;\n  reporting: boolean;\n}\n\nexport interface ConfigurationTemplate {\n  id: string;\n  name: string;\n  description: string;\n  version: string;\n  targetEnvironment: string[];\n  config: {\n    accessibility: {\n      features: string[];\n      defaults: Partial<Preferences>;\n      enforcement: 'strict' | 'permissive' | 'advisory';\n    };\n    integration: {\n      sso: boolean;\n      analytics: boolean;\n      monitoring: boolean;\n    };\n    performance: {\n      caching: boolean;\n      cdn: boolean;\n      compression: boolean;\n    };\n  };\n}\n\nexport interface DeploymentPlan {\n  id: string;\n  name: string;\n  environments: string[];\n  strategy: 'blue_green' | 'rolling' | 'canary' | 'recreate';\n  rollbackStrategy: 'automatic' | 'manual';\n  healthChecks: HealthCheck[];\n  notifications: NotificationConfig[];\n}\n\nexport interface HealthCheck {\n  name: string;\n  type: 'http' | 'tcp' | 'custom';\n  endpoint?: string;\n  expectedStatus?: number;\n  timeout: number;\n  interval: number;\n  retries: number;\n}\n\nexport interface NotificationConfig {\n  channel: 'email' | 'slack' | 'webhook' | 'sms';\n  recipients: string[];\n  events: string[];\n  template?: string;\n}\n\nexport interface MonitoringConfig {\n  metrics: {\n    accessibility: string[];\n    performance: string[];\n    business: string[];\n  };\n  alerting: {\n    rules: AlertRule[];\n    channels: string[];\n  };\n  logging: {\n    level: 'debug' | 'info' | 'warn' | 'error';\n    format: 'json' | 'text';\n    destinations: string[];\n  };\n}\n\nexport interface AlertRule {\n  name: string;\n  metric: string;\n  condition: string;\n  threshold: number;\n  duration: number;\n  severity: 'low' | 'medium' | 'high' | 'critical';\n}\n\n/**\n * Enterprise Deployment Manager\n */\nexport class DeploymentManager extends EventEmitter {\n  private environments: Map<string, DeploymentEnvironment> = new Map();\n  private templates: Map<string, ConfigurationTemplate> = new Map();\n  private deploymentPlans: Map<string, DeploymentPlan> = new Map();\n  private activeDeployments: Map<string, any> = new Map();\n  \n  constructor(\n    private config: {\n      region: string;\n      provider: 'aws' | 'azure' | 'gcp' | 'kubernetes' | 'docker';\n      monitoring: MonitoringConfig;\n      backup: {\n        enabled: boolean;\n        retention: number;\n        schedule: string;\n      };\n    }\n  ) {\n    super();\n    this.initializeDefaultTemplates();\n    this.initializeDefaultEnvironments();\n  }\n\n  /**\n   * Create deployment environment\n   */\n  createEnvironment(environment: DeploymentEnvironment): void {\n    this.environments.set(environment.name, environment);\n    this.emit('environment_created', environment);\n  }\n\n  /**\n   * Deploy to environment\n   */\n  async deploy(\n    planId: string,\n    targetEnvironment: string,\n    configTemplate?: string\n  ): Promise<{ deploymentId: string; status: string }> {\n    const plan = this.deploymentPlans.get(planId);\n    const environment = this.environments.get(targetEnvironment);\n    \n    if (!plan || !environment) {\n      throw new Error('Deployment plan or environment not found');\n    }\n\n    const deploymentId = this.generateDeploymentId();\n    \n    try {\n      // Pre-deployment validation\n      await this.validateDeployment(plan, environment);\n      \n      // Apply configuration template if specified\n      if (configTemplate) {\n        await this.applyConfigurationTemplate(configTemplate, environment);\n      }\n      \n      // Execute deployment strategy\n      const deployment = await this.executeDeploymentStrategy(plan, environment, deploymentId);\n      \n      this.activeDeployments.set(deploymentId, deployment);\n      this.emit('deployment_started', { deploymentId, environment: targetEnvironment });\n      \n      // Monitor deployment progress\n      this.monitorDeployment(deploymentId, plan);\n      \n      return { deploymentId, status: 'in_progress' };\n      \n    } catch (error) {\n      this.emit('deployment_failed', { deploymentId, error });\n      throw error;\n    }\n  }\n\n  /**\n   * Scale environment resources\n   */\n  async scaleEnvironment(\n    environmentName: string,\n    targetInstances: number\n  ): Promise<void> {\n    const environment = this.environments.get(environmentName);\n    if (!environment) {\n      throw new Error('Environment not found');\n    }\n\n    try {\n      await this.performScaling(environment, targetInstances);\n      this.emit('environment_scaled', { environmentName, targetInstances });\n    } catch (error) {\n      this.emit('scaling_failed', { environmentName, error });\n      throw error;\n    }\n  }\n\n  /**\n   * Rollback deployment\n   */\n  async rollback(deploymentId: string): Promise<void> {\n    const deployment = this.activeDeployments.get(deploymentId);\n    if (!deployment) {\n      throw new Error('Deployment not found');\n    }\n\n    try {\n      await this.performRollback(deployment);\n      this.emit('deployment_rolled_back', { deploymentId });\n    } catch (error) {\n      this.emit('rollback_failed', { deploymentId, error });\n      throw error;\n    }\n  }\n\n  /**\n   * Create configuration template\n   */\n  createConfigurationTemplate(template: ConfigurationTemplate): void {\n    this.templates.set(template.id, template);\n    this.emit('template_created', template);\n  }\n\n  /**\n   * Apply configuration template to environment\n   */\n  async applyConfigurationTemplate(\n    templateId: string,\n    environment: DeploymentEnvironment\n  ): Promise<void> {\n    const template = this.templates.get(templateId);\n    if (!template) {\n      throw new Error('Configuration template not found');\n    }\n\n    try {\n      // Apply accessibility configuration\n      await this.applyAccessibilityConfig(template.config.accessibility, environment);\n      \n      // Apply integration configuration\n      await this.applyIntegrationConfig(template.config.integration, environment);\n      \n      // Apply performance configuration\n      await this.applyPerformanceConfig(template.config.performance, environment);\n      \n      this.emit('template_applied', { templateId, environment: environment.name });\n    } catch (error) {\n      this.emit('template_application_failed', { templateId, error });\n      throw error;\n    }\n  }\n\n  /**\n   * Generate deployment plan\n   */\n  createDeploymentPlan(plan: DeploymentPlan): void {\n    this.deploymentPlans.set(plan.id, plan);\n    this.emit('deployment_plan_created', plan);\n  }\n\n  /**\n   * Get deployment status\n   */\n  getDeploymentStatus(deploymentId: string): {\n    status: 'pending' | 'in_progress' | 'completed' | 'failed' | 'rolled_back';\n    progress: number;\n    steps: any[];\n    health: 'healthy' | 'degraded' | 'unhealthy';\n  } | undefined {\n    const deployment = this.activeDeployments.get(deploymentId);\n    if (!deployment) {\n      return undefined;\n    }\n\n    // Simulate deployment status\n    return {\n      status: 'in_progress',\n      progress: Math.random() * 100,\n      steps: [\n        { name: 'Validation', status: 'completed' },\n        { name: 'Configuration', status: 'in_progress' },\n        { name: 'Deployment', status: 'pending' },\n        { name: 'Health Check', status: 'pending' }\n      ],\n      health: 'healthy'\n    };\n  }\n\n  /**\n   * Get environment health status\n   */\n  async getEnvironmentHealth(environmentName: string): Promise<{\n    overall: 'healthy' | 'degraded' | 'unhealthy';\n    services: Record<string, string>;\n    metrics: Record<string, number>;\n    compliance: Record<string, boolean>;\n  }> {\n    const environment = this.environments.get(environmentName);\n    if (!environment) {\n      throw new Error('Environment not found');\n    }\n\n    // Simulate health check\n    await new Promise(resolve => setTimeout(resolve, 100));\n\n    return {\n      overall: 'healthy',\n      services: {\n        'accessibility-api': 'healthy',\n        'sso-service': 'healthy',\n        'analytics-service': 'healthy',\n        'load-balancer': 'healthy'\n      },\n      metrics: {\n        cpu_usage: Math.random() * 80 + 10,\n        memory_usage: Math.random() * 70 + 20,\n        response_time: Math.random() * 200 + 50,\n        error_rate: Math.random() * 2\n      },\n      compliance: {\n        wcag_aa: true,\n        security_scanning: true,\n        data_encryption: true,\n        audit_logging: true\n      }\n    };\n  }\n\n  /**\n   * Backup environment configuration\n   */\n  async backupEnvironment(environmentName: string): Promise<string> {\n    const environment = this.environments.get(environmentName);\n    if (!environment) {\n      throw new Error('Environment not found');\n    }\n\n    const backupId = `backup_${environmentName}_${Date.now()}`;\n    \n    // Simulate backup process\n    await new Promise(resolve => setTimeout(resolve, 500));\n    \n    this.emit('backup_created', { backupId, environment: environmentName });\n    return backupId;\n  }\n\n  /**\n   * Restore environment from backup\n   */\n  async restoreEnvironment(environmentName: string, backupId: string): Promise<void> {\n    const environment = this.environments.get(environmentName);\n    if (!environment) {\n      throw new Error('Environment not found');\n    }\n\n    try {\n      // Simulate restore process\n      await new Promise(resolve => setTimeout(resolve, 1000));\n      \n      this.emit('environment_restored', { environment: environmentName, backupId });\n    } catch (error) {\n      this.emit('restore_failed', { environment: environmentName, backupId, error });\n      throw error;\n    }\n  }\n\n  /**\n   * Generate compliance report\n   */\n  async generateComplianceReport(environmentName: string): Promise<{\n    environment: string;\n    timestamp: Date;\n    compliance: Record<string, {\n      status: 'compliant' | 'non_compliant' | 'partial';\n      score: number;\n      issues: string[];\n      recommendations: string[];\n    }>;\n    overall: {\n      score: number;\n      status: string;\n    };\n  }> {\n    const environment = this.environments.get(environmentName);\n    if (!environment) {\n      throw new Error('Environment not found');\n    }\n\n    // Simulate compliance assessment\n    await new Promise(resolve => setTimeout(resolve, 200));\n\n    const compliance: Record<string, any> = {};\n    \n    for (const requirement of environment.complianceRequirements) {\n      compliance[requirement.standard] = {\n        status: 'compliant',\n        score: Math.random() * 20 + 80, // 80-100\n        issues: [],\n        recommendations: []\n      };\n    }\n\n    const overallScore = Object.values(compliance).reduce((sum: number, c: any) => sum + c.score, 0) / Object.keys(compliance).length;\n\n    return {\n      environment: environmentName,\n      timestamp: new Date(),\n      compliance,\n      overall: {\n        score: overallScore,\n        status: overallScore >= 90 ? 'compliant' : overallScore >= 70 ? 'partial' : 'non_compliant'\n      }\n    };\n  }\n\n  // Private helper methods\n  private initializeDefaultTemplates(): void {\n    this.createConfigurationTemplate({\n      id: 'enterprise_default',\n      name: 'Enterprise Default Configuration',\n      description: 'Standard enterprise accessibility configuration',\n      version: '1.0.0',\n      targetEnvironment: ['production', 'staging'],\n      config: {\n        accessibility: {\n          features: ['high_contrast', 'motion_reduction', 'keyboard_navigation', 'screen_reader'],\n          defaults: {\n            sensory: {\n              motionReduction: false,\n              highContrast: false,\n              colorVisionFilter: 'none',\n              fontSize: 16,\n              reducedFlashing: true,\n              darkMode: false\n            }\n          },\n          enforcement: 'strict'\n        },\n        integration: {\n          sso: true,\n          analytics: true,\n          monitoring: true\n        },\n        performance: {\n          caching: true,\n          cdn: true,\n          compression: true\n        }\n      }\n    });\n  }\n\n  private initializeDefaultEnvironments(): void {\n    this.createEnvironment({\n      name: 'production',\n      type: 'production',\n      region: this.config.region,\n      domain: 'app.example.com',\n      features: ['sso', 'analytics', 'monitoring'],\n      scalingConfig: {\n        autoScaling: true,\n        minInstances: 3,\n        maxInstances: 10,\n        targetCPU: 70,\n        targetMemory: 80,\n        loadBalancer: {\n          type: 'least_connections',\n          healthCheck: {\n            path: '/health',\n            interval: 30,\n            timeout: 5,\n            retries: 3\n          }\n        }\n      },\n      securityConfig: {\n        encryption: {\n          atRest: true,\n          inTransit: true,\n          algorithm: 'AES-256'\n        },\n        authentication: {\n          required: true,\n          methods: ['sso', 'mfa'],\n          sessionTimeout: 8 * 60 * 60 * 1000\n        },\n        authorization: {\n          rbac: true,\n          policies: ['accessibility_admin', 'accessibility_user']\n        },\n        audit: {\n          enabled: true,\n          retention: 365,\n          storage: 's3'\n        }\n      },\n      complianceRequirements: [\n        {\n          standard: 'WCAG',\n          level: 'AA',\n          requirements: ['color_contrast', 'keyboard_navigation', 'screen_reader'],\n          monitoring: true,\n          reporting: true\n        },\n        {\n          standard: 'Section508',\n          level: 'compliance',\n          requirements: ['accessibility_testing', 'user_training'],\n          monitoring: true,\n          reporting: true\n        }\n      ]\n    });\n  }\n\n  private generateDeploymentId(): string {\n    return `deploy_${Date.now()}_${Math.random().toString(36).substring(2, 8)}`;\n  }\n\n  private async validateDeployment(plan: DeploymentPlan, environment: DeploymentEnvironment): Promise<void> {\n    // Simulate deployment validation\n    await new Promise(resolve => setTimeout(resolve, 100));\n    \n    // Check if environment supports the deployment strategy\n    if (!this.isStrategySupported(plan.strategy, environment)) {\n      throw new Error(`Deployment strategy ${plan.strategy} not supported in ${environment.name}`);\n    }\n  }\n\n  private isStrategySupported(strategy: string, environment: DeploymentEnvironment): boolean {\n    // Production environments should support all strategies\n    if (environment.type === 'production') {\n      return true;\n    }\n    \n    // Development environments might not support blue-green\n    if (environment.type === 'development' && strategy === 'blue_green') {\n      return false;\n    }\n    \n    return true;\n  }\n\n  private async executeDeploymentStrategy(\n    plan: DeploymentPlan,\n    environment: DeploymentEnvironment,\n    deploymentId: string\n  ): Promise<any> {\n    // Simulate deployment execution\n    await new Promise(resolve => setTimeout(resolve, 500));\n    \n    return {\n      id: deploymentId,\n      plan: plan.id,\n      environment: environment.name,\n      strategy: plan.strategy,\n      startTime: new Date(),\n      status: 'in_progress'\n    };\n  }\n\n  private monitorDeployment(deploymentId: string, plan: DeploymentPlan): void {\n    // Simulate deployment monitoring\n    const interval = setInterval(async () => {\n      const deployment = this.activeDeployments.get(deploymentId);\n      if (!deployment) {\n        clearInterval(interval);\n        return;\n      }\n\n      // Run health checks\n      for (const healthCheck of plan.healthChecks) {\n        const result = await this.runHealthCheck(healthCheck);\n        if (!result.success) {\n          this.emit('health_check_failed', { deploymentId, healthCheck: healthCheck.name });\n          \n          if (plan.rollbackStrategy === 'automatic') {\n            await this.rollback(deploymentId);\n          }\n          clearInterval(interval);\n          return;\n        }\n      }\n\n      // Check if deployment is complete (simulate)\n      if (Math.random() > 0.9) {\n        deployment.status = 'completed';\n        this.emit('deployment_completed', { deploymentId });\n        clearInterval(interval);\n      }\n    }, 10000); // Check every 10 seconds\n  }\n\n  private async runHealthCheck(healthCheck: HealthCheck): Promise<{ success: boolean; details?: any }> {\n    // Simulate health check\n    await new Promise(resolve => setTimeout(resolve, 100));\n    \n    return {\n      success: Math.random() > 0.1, // 90% success rate\n      details: {\n        responseTime: Math.random() * 200 + 50,\n        status: 200\n      }\n    };\n  }\n\n  private async performScaling(environment: DeploymentEnvironment, targetInstances: number): Promise<void> {\n    // Simulate scaling operation\n    await new Promise(resolve => setTimeout(resolve, 2000));\n    \n    // Update environment config\n    environment.scalingConfig.minInstances = Math.min(targetInstances, environment.scalingConfig.minInstances);\n    environment.scalingConfig.maxInstances = Math.max(targetInstances, environment.scalingConfig.maxInstances);\n  }\n\n  private async performRollback(deployment: any): Promise<void> {\n    // Simulate rollback operation\n    await new Promise(resolve => setTimeout(resolve, 1000));\n    \n    deployment.status = 'rolled_back';\n    deployment.rollbackTime = new Date();\n  }\n\n  private async applyAccessibilityConfig(config: any, environment: DeploymentEnvironment): Promise<void> {\n    // Simulate applying accessibility configuration\n    await new Promise(resolve => setTimeout(resolve, 100));\n  }\n\n  private async applyIntegrationConfig(config: any, environment: DeploymentEnvironment): Promise<void> {\n    // Simulate applying integration configuration\n    await new Promise(resolve => setTimeout(resolve, 100));\n  }\n\n  private async applyPerformanceConfig(config: any, environment: DeploymentEnvironment): Promise<void> {\n    // Simulate applying performance configuration\n    await new Promise(resolve => setTimeout(resolve, 100));\n  }\n}\n\nexport default DeploymentManager; ","/**\n * NeuroAdapt AI Package - Adaptive AI for accessibility and neurodivergent support\n * @fileoverview Main entry point for AI-powered accessibility features\n */\n\n// Core AI functionality\nexport * from './adapters';\nexport * from './predictable';\nexport * from './types';\n\n// Advanced AI features (Slice 7)\nexport * from './advanced';\n\n// Enterprise features (Slice 8)\nexport * from './enterprise';\n\n// Version\nexport const VERSION = '1.1.0';\n\n// Convenience exports for common use cases\nexport { PredictionEngine } from './prediction/engine.js';\nexport { BehaviorAnalytics } from './analytics/behavior-analytics.js';\nexport { ContentAdapter } from './streaming/content-adapter.js';\nexport { BaseAIProvider } from './providers/base-provider.js';\nexport { ClaudeProvider } from './providers/claude-provider.js';\nexport { OpenAIProvider } from './providers/openai-provider.js';\nexport { OllamaProvider } from './providers/ollama-provider.js';"],"names":["BaseAIAdapter","config","model","operation","attempts","delay","lastError","attempt","error","message","ms","resolve","messages","msg","signal","timeout","controller","OpenAIAdapter","options","response","stream","chunk","delta","done","OpenAI","ClaudeAdapter","system","formattedMessages","event","Anthropic","OllamaAdapter","data","reader","decoder","buffer","value","lines","line","isDone","PredictableAI","EventEmitter","adapter","prompt","cacheKey","cachedResponse","completionOptions","fullResponse","startTime","newConfig","previousConfig","preferences","configUpdate","pacingMap","explanationMap","consistencyMap","state","systemPrompt","prompts","toneInstructions","explanationInstructions","pacingInstructions","enhanced","temperatureMap","content","m","configKey","AdaptiveEngine","userId","interactions","cognitiveMetrics","sensoryData","visualPattern","cognitivePattern","motorPattern","sensoryPattern","confidence","effectivenessScore","pattern","visualInteractions","i","contrastAnalysis","colorAnalysis","motionAnalysis","fontAnalysis","brightnessAnalysis","metrics","processingSpeed","workingMemory","attentionSpan","informationDensity","distractionSensitivity","motorInteractions","adaptations","adaptation","trainingData","modelName","modelData","d","accuracy","currentContext","predictions","modelType","prediction","userAdaptations","a","sum","contrastValues","b","motionEvents","clicks","successfulClicks","c","durations","h","visual","cognitive","motor","sensory","dataPoints","patterns","context","NeuralAdaptationSystem","inputSize","outputSize","limit","layer","inputs","training","activations","prevActivation","output","weights","neuronIndex","acc","weight","inputIndex","activated","x","activation","targets","learningRate","gradients","biasGradients","outputActivations","layerError","layerIndex","layerInput","weightGradients","_","biasGradient","prevLayerError","gradient","regularization","sigmoid","bestLoss","epochsWithoutImprovement","maxEpochsWithoutImprovement","epochLoss","validationData","validationLoss","finalMetrics","shuffledData","totalLoss","batchCount","batch","batchLoss","sample","loss","userHistory","reasoning","alternatives","result","originalLR","testData","pred","correct","total","weightParams","neuronWeights","biasParams","target","history","variance","val","mean","baseAdaptations","v","RealTimeOptimizer","metric","maxHistorySize","results","overallPerformance","bestStrategy","currentMetrics","strategy","iterations","currentValue","parametersAdjusted","step","convergenceTime","improvementScore","stabilityMetric","generation","population","fitness","bestIndex","bestIndividual","finalValue","temperature","neighbor","currentEnergy","deltaE","swarmSize","particles","globalBest","particle","newGlobalBest","observations","y","gp","nextX","nextY","bestObservation","best","current","f1","f2","constraints","constraint","oldValue","newValue","targetValue","oldDistance","newDistance","recentMetrics","values","performance","name","params","tuned","algorithm","size","individual","avg","perturbation","r1","r2","solution1","solution2","positions","p","pos","recent","obs","imp","SSOManager","provider","providerName","authUrl","authorizationCode","tokens","userInfo","user","session","sessionId","now","timeUntilExpiry","direction","remotePreferences","mergedPreferences","activeSessions","authenticationsByProvider","expiredSessions","code","accessToken","mapping","prefsData","refreshToken","local","remote","auditLog","AnalyticsDashboard","timeRange","days","widget","widgetId","updates","updatedWidget","title","includeRecommendations","accessibility","usage","compliance","sections","recommendations","format","alert","metricValue","featureUsage","headers","rows","key","row","metricPath","parts","part","alertData","cutoffDate","entry","DeploymentManager","environment","planId","targetEnvironment","configTemplate","plan","deploymentId","deployment","environmentName","targetInstances","template","templateId","backupId","requirement","overallScore","interval","healthCheck","VERSION"],"mappings":"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"}