{"version":3,"sources":["../src/shared/utils/tty.ts","../src/services/telemetry/prometheus-exporter.ts","../src/services/telemetry/anomaly-detector.ts","../src/services/telemetry/predictive-analytics.ts","../src/services/telemetry/custom-metrics.ts","../src/services/telemetry/telemetry-integration.ts","../src/services/intelligent-router/infra/NaturalLanguageProcessor.ts","../src/services/intelligent-router/analysis/IntentRecognizer.ts","../src/services/intelligent-router/analysis/ParameterExtractor.ts","../src/services/intelligent-router/analysis/MultilingualDictionary.ts","../src/services/intelligent-router/infra/LanguageDetector.ts","../src/services/intelligent-router/app/CommandMappings.ts","../src/services/intelligent-router/analysis/UserPatternAnalyzer.ts","../src/services/intelligent-router/app/IntelligentRouterService.ts","../src/utils/logger.ts","../src/adapters/logging/default.ts","../src/services/memory-system/system1-memory.ts","../src/services/memory-system/system2-memory.quality.ts","../src/services/memory-system/system2-memory.ts","../src/services/file-system/FileSystemService.ts","../src/services/security.ts","../src/services/memory-system/data-porter-system/MemoryPortabilityFramework.ts","../src/memory/session.ts","../src/services/document-auto-save.ts","../src/services/base/BaseService.ts","../src/services/code-intent/analyzers/ExplicitFilenameAnalyzer.ts","../src/services/code-intent/analyzers/ContextualAnalyzer.ts","../src/services/code-intent/analyzers/SemanticAnalyzer.ts","../src/services/code-intent/analyzers/ExtensionDetector.ts","../src/services/base/TelemetryCollector.ts","../src/services/code-intent/telemetry/FilenameInferenceTelemetry.ts","../src/services/code-intent/FilenameInferenceService.ts","../src/services/intelligent-document-save.ts","../src/services/memory-system/data-porter-system/enterprise-data-porter.internal.ts","../src/services/memory-system/data-porter-system/enterprise-data-porter.job.ts","../src/services/memory-system/data-porter-system/enterprise-data-porter.impl.ts","../src/services/memory-system/enterprise/access-control-manager.ts","../src/lib/command-groups.ts","../src/index.ts"],"names":["utilFormat","EventEmitter","Registry","express","collectDefaultMetrics","Counter","Histogram","Gauge","tf","model","input","tfCompat","tf2","format","elapsed","chalk","commandIntent","LogLevel","promisify","fs","path","resolve","spawn","path2","fs2","os","DocumentType","path4","writeFile","mkdir","basename","path5","path6","getTelemetryIntegration","result","path7","ext","fs4","path8","content","splitIntoDocuments","getErrorMessage","isRecord","getRecord","crypto"],"mappings":"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","file":"index.cjs","sourcesContent":["import { format as utilFormat } from \"node:util\";\n\n// Avoid `any` in our own surface while still using Node's util.format internally.\nconst format: (...args: unknown[]) => string =\n  utilFormat as unknown as (...args: unknown[]) => string;\n\nfunction isTestEnv(): boolean {\n  return (\n    process.env.NODE_ENV === \"test\" ||\n    process.env.VITEST === \"true\" ||\n    process.env.VITEST_WORKER_ID != null ||\n    process.env.JEST_WORKER_ID != null\n  );\n}\n\nfunction isMockFn(fn: unknown): boolean {\n  // Vitest spy/mocks typically attach a `.mock` object with `.calls`.\n  if (!fn || typeof fn !== \"function\") return false;\n  const meta = fn as unknown as { mock?: { calls?: unknown[] } };\n  return Array.isArray(meta.mock?.calls);\n}\n\nexport function stdoutLine(...args: unknown[]): void {\n  const text = format(...args);\n  if (isTestEnv()) {\n    // In tests, some suites spy on process.stdout/stderr.write, others spy on console.log/error.\n    // We support both without spamming real test output: only call console.* when it's mocked/spied.\n    process.stdout.write(`${text}\\n`);\n    /* eslint-disable no-console */\n    if (isMockFn(console.log)) console.log(text);\n    /* eslint-enable no-console */\n    return;\n  }\n  process.stdout.write(`${text}\\n`);\n}\n\nexport function stderrLine(...args: unknown[]): void {\n  const text = format(...args);\n  if (isTestEnv()) {\n    process.stderr.write(`${text}\\n`);\n    /* eslint-disable no-console */\n    if (isMockFn(console.error)) console.error(text);\n    /* eslint-enable no-console */\n    return;\n  }\n  process.stderr.write(`${text}\\n`);\n}\n\n\n","import {\r\n  collectDefaultMetrics,\r\n  Counter,\r\n  Gauge,\r\n  Histogram,\r\n  Registry,\r\n} from \"prom-client\";\r\nimport express from \"express\";\r\nimport { EventEmitter } from \"node:events\";\r\nimport { stdoutLine } from \"../../shared/utils/tty\";\r\n\r\nexport interface PrometheusConfig {\r\n  port?: number;\r\n  metricsPath?: string;\r\n  defaultLabels?: Record<string, string>;\r\n  collectDefaultMetrics?: boolean;\r\n}\r\n\r\nexport class PrometheusExporter extends EventEmitter {\r\n  private registry: Registry;\r\n  private app: express.Application;\r\n  private port: number;\r\n  private metricsPath: string;\r\n\r\n  // Core metrics\r\n  private responseCounter: Counter;\r\n  private responseHistogram: Histogram;\r\n  private intentAccuracyGauge: Gauge;\r\n  private satisfactionGauge: Gauge;\r\n  private errorRateGauge: Gauge;\r\n  private activeProvidersGauge: Gauge;\r\n  private tokenUsageCounter: Counter;\r\n  private fallbackRateGauge: Gauge;\r\n\r\n  constructor(config: PrometheusConfig = {}) {\r\n    super();\r\n\r\n    this.registry = new Registry();\r\n    this.port = config.port || 9090;\r\n    this.metricsPath = config.metricsPath || \"/metrics\";\r\n    this.app = express();\r\n\r\n    // Set default labels if provided\r\n    if (config.defaultLabels) {\r\n      this.registry.setDefaultLabels(config.defaultLabels);\r\n    }\r\n\r\n    // Collect default Node.js metrics\r\n    if (config.collectDefaultMetrics !== false) {\r\n      collectDefaultMetrics({ register: this.registry });\r\n    }\r\n\r\n    this.initializeMetrics();\r\n    this.setupRoutes();\r\n  }\r\n\r\n  private initializeMetrics(): void {\r\n    // Response counter\r\n    this.responseCounter = new Counter({\r\n      name: \"maria_ai_responses_total\",\r\n      help: \"Total number of AI responses\",\r\n      labelNames: [\"provider\", \"intent\", \"language\", \"status\"],\r\n      registers: [this.registry],\r\n    });\r\n\r\n    // Response time histogram\r\n    this.responseHistogram = new Histogram({\r\n      name: \"maria_response_duration_seconds\",\r\n      help: \"Response latency in seconds\",\r\n      labelNames: [\"provider\", \"intent\"],\r\n      buckets: [0.1, 0.25, 0.5, 1, 2.5, 5, 10],\r\n      registers: [this.registry],\r\n    });\r\n\r\n    // Intent accuracy gauge\r\n    this.intentAccuracyGauge = new Gauge({\r\n      name: \"maria_intent_accuracy_ratio\",\r\n      help: \"Intent detection accuracy ratio\",\r\n      labelNames: [\"intent_type\"],\r\n      registers: [this.registry],\r\n    });\r\n\r\n    // User satisfaction gauge\r\n    this.satisfactionGauge = new Gauge({\r\n      name: \"maria_user_satisfaction_ratio\",\r\n      help: \"User satisfaction ratio\",\r\n      registers: [this.registry],\r\n    });\r\n\r\n    // Error rate gauge\r\n    this.errorRateGauge = new Gauge({\r\n      name: \"maria_error_rate_ratio\",\r\n      help: \"Error rate ratio\",\r\n      labelNames: [\"provider\"],\r\n      registers: [this.registry],\r\n    });\r\n\r\n    // Active providers gauge\r\n    this.activeProvidersGauge = new Gauge({\r\n      name: \"maria_active_providers_count\",\r\n      help: \"Number of active AI providers\",\r\n      registers: [this.registry],\r\n    });\r\n\r\n    // Token usage counter\r\n    this.tokenUsageCounter = new Counter({\r\n      name: \"maria_tokens_total\",\r\n      help: \"Total tokens consumed\",\r\n      labelNames: [\"provider\", \"type\"], // type: input|output\r\n      registers: [this.registry],\r\n    });\r\n\r\n    // Fallback rate gauge\r\n    this.fallbackRateGauge = new Gauge({\r\n      name: \"maria_fallback_rate_ratio\",\r\n      help: \"Template fallback usage ratio\",\r\n      registers: [this.registry],\r\n    });\r\n  }\r\n\r\n  private setupRoutes(): void {\r\n    // Metrics endpoint\r\n    this.app.get(this.metricsPath, async (_req, res): Promise<void> => {\r\n      try {\r\n        res.set(\"Content-Type\", this.registry.contentType);\r\n        res.end(await this.registry.metrics());\r\n      } catch (error) {\r\n        res\r\n          .status(500)\r\n          .end(error instanceof Error ? error.message : \"Unknown error\");\r\n      }\r\n    });\r\n\r\n    // Health check endpoint\r\n    this.app.get(\"/health\", (_req, res): void => {\r\n      res.json({ status: \"healthy\", uptime: process.uptime() });\r\n    });\r\n  }\r\n\r\n  public updateMetrics(telemetryData: unknown): void {\r\n    try {\r\n      // Telemetry payloads are loosely structured at runtime.\r\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n      const data = telemetryData as any;\r\n      // Update response counter\r\n      if (data.provider && data.intent) {\r\n        this.responseCounter.inc({\r\n          provider: data.provider,\r\n          intent: data.intent,\r\n          language: data.language || \"unknown\",\r\n          status: data.success ? \"success\" : \"failure\",\r\n        });\r\n      }\r\n\r\n      // Update response histogram\r\n      if (data.latency) {\r\n        this.responseHistogram.observe(\r\n          {\r\n            provider: data.provider || \"unknown\",\r\n            intent: data.intent || \"unknown\",\r\n          },\r\n          data.latency / 1000, // Convert to seconds\r\n        );\r\n      }\r\n\r\n      // Update gauges\r\n      if (data.intentAccuracy !== undefined) {\r\n        this.intentAccuracyGauge.set(\r\n          { intent_type: data.intent || \"unknown\" },\r\n          data.intentAccuracy,\r\n        );\r\n      }\r\n\r\n      if (data.satisfaction !== undefined) {\r\n        this.satisfactionGauge.set(data.satisfaction);\r\n      }\r\n\r\n      if (data.errorRate !== undefined) {\r\n        this.errorRateGauge.set(\r\n          { provider: data.provider || \"unknown\" },\r\n          data.errorRate,\r\n        );\r\n      }\r\n\r\n      if (data.activeProviders !== undefined) {\r\n        this.activeProvidersGauge.set(data.activeProviders);\r\n      }\r\n\r\n      if (data.fallbackRate !== undefined) {\r\n        this.fallbackRateGauge.set(data.fallbackRate);\r\n      }\r\n\r\n      // Update token usage\r\n      if (data.tokens) {\r\n        if (data.tokens.input) {\r\n          this.tokenUsageCounter.inc(\r\n            {\r\n              provider: data.provider || \"unknown\",\r\n              type: \"input\",\r\n            },\r\n            data.tokens.input,\r\n          );\r\n        }\r\n        if (data.tokens.output) {\r\n          this.tokenUsageCounter.inc(\r\n            {\r\n              provider: data.provider || \"unknown\",\r\n              type: \"output\",\r\n            },\r\n            data.tokens.output,\r\n          );\r\n        }\r\n      }\r\n\r\n      this.emit(\"metricsUpdated\", data);\r\n    } catch (innerError) {\r\n      this.emit(\"error\", innerError);\r\n    }\r\n  }\r\n\r\n  public async start(): Promise<void> {\r\n    return new Promise((resolvePromise, reject): void => {\r\n      const server = this.app\r\n        .listen(this.port, (): void => {\r\n          stdoutLine(`🎯 Prometheus metrics available at http://localhost:${this.port}${this.metricsPath}`);\r\n          this.emit(\"started\", { port: this.port, _path: this.metricsPath });\r\n          resolvePromise();\r\n        })\r\n        .on(\"error\", reject);\r\n\r\n      // Graceful shutdown\r\n      process.on(\"SIGTERM\", (): void => {\r\n        server.close((): void => {\r\n          stdoutLine(\"Prometheus exporter shut down gracefully\");\r\n        });\r\n      });\r\n    });\r\n  }\r\n\r\n  public getRegistry(): Registry {\r\n    return this.registry;\r\n  }\r\n\r\n  // Custom metric registration\r\n  public registerCustomMetric(metric: Counter | Gauge | Histogram): void {\r\n    // Metric is automatically registered when created with registers option\r\n    this.emit(\"customMetricRegistered\", metric);\r\n  }\r\n}\r\n\r\n// Singleton instance\r\nlet exporterInstance: PrometheusExporter | null = null;\r\n\r\nexport function getPrometheusExporter(\r\n  config?: PrometheusConfig,\r\n): PrometheusExporter {\r\n  if (!exporterInstance) {\r\n    exporterInstance = new PrometheusExporter(config);\r\n  }\r\n  return exporterInstance;\r\n}\r\n","import { EventEmitter } from \"node:events\";\r\nimport * as tf from \"@tensorflow/tfjs-node\";\r\n\r\n// tfjs-node type definitions do not expose some APIs, so we add minimal typings only where used.\r\ntype TFCompat = typeof tf & {\r\n  sequential: (args: { layers: unknown[] }) => tf.LayersModel;\r\n  tensor3d: (values: number[][][] | number[][][][]) => tf.Tensor;\r\n};\r\nconst tfCompat = tf as unknown as TFCompat;\r\n\r\nexport interface AnomalyConfig {\r\n  windowSize?: number;\r\n  threshold?: number;\r\n  minDataPoints?: number;\r\n  modelType?: \"isolation-forest\" | \"autoencoder\" | \"lstm\";\r\n  updateInterval?: number;\r\n}\r\n\r\nexport interface MetricPoint {\r\n  timestamp: number;\r\n  value: number;\r\n  metadata?: Record<string, unknown>;\r\n}\r\n\r\nexport interface AnomalyResult {\r\n  isAnomaly: boolean;\r\n  score: number;\r\n  expectedRange: [number, number];\r\n  actualValue: number;\r\n  timestamp: number;\r\n  metric: string;\r\n  severity: \"low\" | \"medium\" | \"high\" | \"critical\";\r\n}\r\n\r\nexport class AnomalyDetector extends EventEmitter {\r\n  private windowSize: number;\r\n  private threshold: number;\r\n  private minDataPoints: number;\r\n  private modelType: string;\r\n  private models: Map<string, tf.LayersModel>;\r\n  private dataBuffers: Map<string, MetricPoint[]>;\r\n  private statistics: Map<\r\n    string,\r\n    { mean: number; std: number; min: number; max: number }\r\n  >;\r\n  private updateInterval: number;\r\n  private updateTimer?: NodeJS.Timeout;\r\n\r\n  constructor(config: AnomalyConfig = {}) {\r\n    super();\r\n\r\n    this.windowSize = config.windowSize || 100;\r\n    this.threshold = config.threshold || 3; // Z-score threshold\r\n    this.minDataPoints = config.minDataPoints || 30;\r\n    this.modelType = config.modelType || \"autoencoder\";\r\n    this.updateInterval = config.updateInterval || 60000; // 1 minute\r\n\r\n    this.models = new Map();\r\n    this.dataBuffers = new Map();\r\n    this.statistics = new Map();\r\n\r\n    this.startUpdateTimer();\r\n  }\r\n\r\n  private startUpdateTimer(): void {\r\n    this.updateTimer = setInterval((): void => {\r\n      this.updateModels();\r\n    }, this.updateInterval);\r\n  }\r\n\r\n  public async addDataPoint(\r\n    metric: string,\r\n    point: MetricPoint,\r\n  ): Promise<AnomalyResult | null> {\r\n    // Initialize buffer if needed\r\n    if (!this.dataBuffers.has(metric)) {\r\n      this.dataBuffers.set(metric, []);\r\n    }\r\n\r\n    const buffer = this.dataBuffers.get(metric)!;\r\n    buffer.push(point);\r\n\r\n    // Keep buffer size manageable\r\n    if (buffer.length > this.windowSize * 2) {\r\n      buffer.splice(0, buffer.length - this.windowSize);\r\n    }\r\n\r\n    // Check if we have enough data\r\n    if (buffer.length < this.minDataPoints) {\r\n      return null;\r\n    }\r\n\r\n    // Detect anomaly\r\n    const result = await this.detectAnomaly(metric, point);\r\n\r\n    if (result.isAnomaly) {\r\n      this.emit(\"anomaly\", result);\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  private async detectAnomaly(\r\n    metric: string,\r\n    point: MetricPoint,\r\n  ): Promise<AnomalyResult> {\r\n    const buffer = this.dataBuffers.get(metric)!;\r\n\r\n    // Calculate statistics\r\n    const stats = this.calculateStatistics(buffer);\r\n    this.statistics.set(metric, stats);\r\n\r\n    // Perform detection based on model type\r\n    let anomalyScore: number;\r\n\r\n    switch (this.modelType) {\r\n      case \"isolation-forest\":\r\n        anomalyScore = await this.isolationForestDetection(buffer, point);\r\n        break;\r\n      case \"lstm\":\r\n        anomalyScore = await this.lstmDetection(metric, buffer, point);\r\n        break;\r\n      case \"autoencoder\":\r\n      default:\r\n        anomalyScore = await this.autoencoderDetection(metric, buffer, point);\r\n        break;\r\n    }\r\n\r\n    // Z-score based detection as fallback\r\n    const zScore = Math.abs((point.value - stats.mean) / stats.std);\r\n    const combinedScore = Math.max(anomalyScore, zScore);\r\n\r\n    // Determine if it's an anomaly\r\n    const isAnomaly = combinedScore > this.threshold;\r\n\r\n    // Calculate expected range\r\n    const expectedRange: [number, number] = [\r\n      stats.mean - this.threshold * stats.std,\r\n      stats.mean + this.threshold * stats.std,\r\n    ];\r\n\r\n    // Determine severity\r\n    let severity: \"low\" | \"medium\" | \"high\" | \"critical\";\r\n    if (combinedScore > this.threshold * 3) {\r\n      severity = \"critical\";\r\n    } else if (combinedScore > this.threshold * 2) {\r\n      severity = \"high\";\r\n    } else if (combinedScore > this.threshold * 1.5) {\r\n      severity = \"medium\";\r\n    } else {\r\n      severity = \"low\";\r\n    }\r\n\r\n    return {\r\n      isAnomaly,\r\n      score: combinedScore,\r\n      expectedRange,\r\n      actualValue: point.value,\r\n      timestamp: point.timestamp,\r\n      metric,\r\n      severity,\r\n    };\r\n  }\r\n\r\n  private calculateStatistics(data: MetricPoint[]): {\r\n    mean: number;\r\n    std: number;\r\n    min: number;\r\n    max: number;\r\n  } {\r\n    const values = data.map((p): number => p.value);\r\n    const mean = values.reduce((a, b): number => a + b, 0) / values.length;\r\n    const variance =\r\n      values.reduce((a, b): number => a + Math.pow(b - mean, 2), 0) / values.length;\r\n    const std = Math.sqrt(variance);\r\n    const min = Math.min(...values);\r\n    const max = Math.max(...values);\r\n\r\n    return { mean, std, min, max };\r\n  }\r\n\r\n  private async isolationForestDetection(\r\n    buffer: MetricPoint[],\r\n    point: MetricPoint,\r\n  ): Promise<number> {\r\n    // Simplified isolation forest implementation\r\n    const values = buffer.map((p): number => p.value);\r\n    const trees: number[][] = [];\r\n    const numTrees = 100;\r\n    const sampleSize = Math.min(256, buffer.length);\r\n\r\n    // Build isolation trees\r\n    for (let i = 0; i < numTrees; i++) {\r\n      const sample = this.randomSample(values, sampleSize);\r\n      const tree = this.buildIsolationTree(sample);\r\n      trees.push(tree);\r\n    }\r\n\r\n    // Calculate anomaly score\r\n    const pathLength =\r\n      trees.reduce((sum, tree): number => {\r\n        return sum + this.getPathLength(tree, point.value);\r\n      }, 0) / numTrees;\r\n\r\n    const c = this.averagePathLength(sampleSize);\r\n    const anomalyScore = Math.pow(2, -pathLength / c);\r\n\r\n    return anomalyScore * 10; // Scale to match z-score range\r\n  }\r\n\r\n  private buildIsolationTree(\r\n    data: number[],\r\n    depth: number = 0,\r\n    maxDepth: number = 10,\r\n  ): number[] {\r\n    if (data.length <= 1 || depth >= maxDepth) {\r\n      return [depth];\r\n    }\r\n\r\n    const min = Math.min(...data);\r\n    const max = Math.max(...data);\r\n    const split = min + Math.random() * (max - min);\r\n\r\n    const left = data.filter((v): boolean => v < split);\r\n    const right = data.filter((v): boolean => v >= split);\r\n\r\n    return [\r\n      split,\r\n      ...this.buildIsolationTree(left, depth + 1, maxDepth),\r\n      ...this.buildIsolationTree(right, depth + 1, maxDepth),\r\n    ];\r\n  }\r\n\r\n  private getPathLength(tree: number[], value: number): number {\r\n    let depth = 0;\r\n    let idx = 0;\r\n\r\n    while (idx < tree.length) {\r\n      if (tree[idx] === depth) {\r\n        return depth;\r\n      }\r\n\r\n      if (value < tree[idx]) {\r\n        idx = idx * 2 + 1;\r\n      } else {\r\n        idx = idx * 2 + 2;\r\n      }\r\n      depth++;\r\n    }\r\n\r\n    return depth;\r\n  }\r\n\r\n  private averagePathLength(n: number): number {\r\n    if (n <= 1) return 0;\r\n    if (n === 2) return 1;\r\n    return 2 * (Math.log(n - 1) + 0.5772156649) - (2 * (n - 1)) / n;\r\n  }\r\n\r\n  private randomSample<T>(array: T[], size: number): T[] {\r\n    const sample: T[] = [];\r\n    const indices = new Set<number>();\r\n\r\n    while (sample.length < size && sample.length < array.length) {\r\n      const idx = Math.floor(Math.random() * array.length);\r\n      if (!indices.has(idx)) {\r\n        indices.add(idx);\r\n        sample.push(array[idx]);\r\n      }\r\n    }\r\n\r\n    return sample;\r\n  }\r\n\r\n  private async autoencoderDetection(\r\n    metric: string,\r\n    buffer: MetricPoint[],\r\n    point: MetricPoint,\r\n  ): Promise<number> {\r\n    // Get or create model\r\n    let model = this.models.get(metric);\r\n\r\n    if (!model) {\r\n      model = await this.createAutoencoderModel(buffer);\r\n      this.models.set(metric, model);\r\n    }\r\n\r\n    // Prepare input\r\n    const stats = this.statistics.get(metric)!;\r\n    const normalizedValue = (point.value - stats.mean) / stats.std;\r\n    const input = tf.tensor2d([[normalizedValue]]);\r\n\r\n    // Get reconstruction\r\n    const reconstruction = model.predict(input) as tf.Tensor;\r\n    const reconstructedValue = await (\r\n      reconstruction as unknown as { data(): Promise<Float32Array> }\r\n    ).data();\r\n\r\n    // Calculate reconstruction error\r\n    const error = Math.abs(normalizedValue - reconstructedValue[0]);\r\n\r\n    // Cleanup\r\n    input.dispose();\r\n    reconstruction.dispose();\r\n\r\n    return error;\r\n  }\r\n\r\n  private async createAutoencoderModel(\r\n    buffer: MetricPoint[],\r\n  ): Promise<tf.LayersModel> {\r\n    const inputDim = 1;\r\n    const encodingDim = 3;\r\n\r\n    // Encoder\r\n    const encoder = tfCompat.sequential({\r\n      layers: [\r\n        tf.layers.dense({\r\n          inputShape: [inputDim],\r\n          units: encodingDim,\r\n          activation: \"relu\",\r\n        }),\r\n      ],\r\n    });\r\n\r\n    // Decoder\r\n    const decoder = tfCompat.sequential({\r\n      layers: [\r\n        tf.layers.dense({\r\n          inputShape: [encodingDim],\r\n          units: inputDim,\r\n          activation: \"linear\",\r\n        }),\r\n      ],\r\n    });\r\n\r\n    // Full autoencoder\r\n    const autoencoder = tfCompat.sequential({\r\n      layers: [encoder, decoder],\r\n    });\r\n\r\n    // Compile model\r\n    autoencoder.compile({\r\n      optimizer: \"adam\",\r\n      loss: \"meanSquaredError\",\r\n    });\r\n\r\n    // Prepare training data\r\n    const stats = this.calculateStatistics(buffer);\r\n    const values = buffer.map((p): number => (p.value - stats.mean) / stats.std);\r\n    const xs = tf.tensor2d(values, [values.length, 1]);\r\n\r\n    // Train model\r\n    await autoencoder.fit(xs, xs, {\r\n      epochs: 50,\r\n      batchSize: 32,\r\n      validationSplit: 0.2,\r\n      verbose: 0,\r\n    });\r\n\r\n    // Cleanup\r\n    xs.dispose();\r\n\r\n    return autoencoder;\r\n  }\r\n\r\n  private async lstmDetection(\r\n    metric: string,\r\n    buffer: MetricPoint[],\r\n    point: MetricPoint,\r\n  ): Promise<number> {\r\n    // Get or create LSTM model\r\n    let model = this.models.get(metric);\r\n\r\n    if (!model) {\r\n      model = await this.createLSTMModel(buffer);\r\n      this.models.set(metric, model);\r\n    }\r\n\r\n    // Prepare sequence\r\n    const sequenceLength = 10;\r\n    const recentData = buffer.slice(-sequenceLength);\r\n    const stats = this.statistics.get(metric)!;\r\n\r\n    // Normalize sequence\r\n    const sequence = recentData.map((p): number => (p.value - stats.mean) / stats.std);\r\n\r\n    // Pad if necessary\r\n    while (sequence.length < sequenceLength) {\r\n      sequence.unshift(0);\r\n    }\r\n\r\n    // Predict next value\r\n    const input = tfCompat.tensor3d([sequence.map((v): number[] => [v])]);\r\n    const prediction = model.predict(input) as tf.Tensor;\r\n    const predictedValue = await (\r\n      prediction as unknown as { data(): Promise<Float32Array> }\r\n    ).data();\r\n\r\n    // Calculate prediction error\r\n    const normalizedActual = (point.value - stats.mean) / stats.std;\r\n    const error = Math.abs(normalizedActual - predictedValue[0]);\r\n\r\n    // Cleanup\r\n    input.dispose();\r\n    prediction.dispose();\r\n\r\n    return error * 3; // Scale to match z-score range\r\n  }\r\n\r\n  private async createLSTMModel(\r\n    buffer: MetricPoint[],\r\n  ): Promise<tf.LayersModel> {\r\n    const sequenceLength = 10;\r\n    const features = 1;\r\n\r\n    const model = tfCompat.sequential({\r\n      layers: [\r\n        tf.layers.lstm({\r\n          inputShape: [sequenceLength, features],\r\n          units: 50,\r\n          returnSequences: true,\r\n        }),\r\n        tf.layers.dropout({ rate: 0.2 }),\r\n        tf.layers.lstm({\r\n          units: 50,\r\n          returnSequences: false,\r\n        }),\r\n        tf.layers.dropout({ rate: 0.2 }),\r\n        tf.layers.dense({\r\n          units: 1,\r\n        }),\r\n      ],\r\n    });\r\n\r\n    model.compile({\r\n      optimizer: tf.train.adam(0.001),\r\n      loss: \"meanSquaredError\",\r\n    });\r\n\r\n    // Prepare training data\r\n    const stats = this.calculateStatistics(buffer);\r\n    const normalizedValues = buffer.map(\r\n      (p): number => (p.value - stats.mean) / stats.std,\r\n    );\r\n\r\n    const sequences: number[][][] = [];\r\n    const targets: number[] = [];\r\n\r\n    for (let i = sequenceLength; i < normalizedValues.length; i++) {\r\n      const sequence = normalizedValues.slice(i - sequenceLength, i);\r\n      sequences.push(sequence.map((v): number[] => [v]));\r\n      targets.push(normalizedValues[i]);\r\n    }\r\n\r\n    if (sequences.length > 0) {\r\n      const xs = tfCompat.tensor3d(sequences);\r\n      const ys = tf.tensor2d(targets, [targets.length, 1]);\r\n\r\n      await model.fit(xs, ys, {\r\n        epochs: 30,\r\n        batchSize: 32,\r\n        validationSplit: 0.2,\r\n        verbose: 0,\r\n      });\r\n\r\n      xs.dispose();\r\n      ys.dispose();\r\n    }\r\n\r\n    return model;\r\n  }\r\n\r\n  private async updateModels(): Promise<void> {\r\n    for (const [metric, buffer] of this.dataBuffers.entries()) {\r\n      if (buffer.length >= this.minDataPoints) {\r\n        try {\r\n          const model = await this.createAutoencoderModel(buffer);\r\n          this.models.set(metric, model);\r\n          this.emit(\"modelUpdated\", { metric, timestamp: Date.now() });\r\n        } catch (error) {\r\n          this.emit(\"error\", { metric, error });\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  public getAnomalyHistory(metric: string, limit: number = 100): MetricPoint[] {\r\n    const buffer = this.dataBuffers.get(metric);\r\n    return buffer ? buffer.slice(-limit) : [];\r\n  }\r\n\r\n  public getStatistics(\r\n    metric: string,\r\n  ): { mean: number; std: number; min: number; max: number } | undefined {\r\n    return this.statistics.get(metric);\r\n  }\r\n\r\n  public async evaluateMetrics(): Promise<Map<string, AnomalyResult[]>> {\r\n    const results = new Map<string, AnomalyResult[]>();\r\n\r\n    for (const [metric, buffer] of this.dataBuffers.entries()) {\r\n      const metricResults: AnomalyResult[] = [];\r\n\r\n      for (const point of buffer.slice(-10)) {\r\n        const result = await this.detectAnomaly(metric, point);\r\n        if (result.isAnomaly) {\r\n          metricResults.push(result);\r\n        }\r\n      }\r\n\r\n      if (metricResults.length > 0) {\r\n        results.set(metric, metricResults);\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  public dispose(): void {\r\n    if (this.updateTimer) {\r\n      clearInterval(this.updateTimer);\r\n    }\r\n\r\n    for (const model of this.models.values()) {\r\n      model.dispose();\r\n    }\r\n\r\n    this.models.clear();\r\n    this.dataBuffers.clear();\r\n    this.statistics.clear();\r\n  }\r\n}\r\n\r\n// Singleton instance\r\nlet detectorInstance: AnomalyDetector | null = null;\r\n\r\nexport function getAnomalyDetector(config?: AnomalyConfig): AnomalyDetector {\r\n  if (!detectorInstance) {\r\n    detectorInstance = new AnomalyDetector(config);\r\n  }\r\n  return detectorInstance;\r\n}\r\n","import { EventEmitter } from \"node:events\";\r\nimport * as tf from '@tensorflow/tfjs-node';\r\n\r\n// tfjs-node type definitions do not expose some APIs, so we add minimal typings only where used.\r\ntype TFCompat = typeof tf & {\r\n  sequential: (args: { layers: unknown[] }) => tf.LayersModel;\r\n  tensor3d: (values: number[][][] | number[][][][]) => tf.Tensor;\r\n};\r\nconst tfCompat = tf as unknown as TFCompat;\r\n\r\nexport interface ForecastConfig {\r\n  horizonSteps?: number;\r\n  confidenceLevel?: number;\r\n  modelType?: 'arima' | 'prophet' | 'lstm' | 'transformer';\r\n  seasonality?: 'auto' | 'daily' | 'weekly' | 'monthly' | 'none';\r\n  updateFrequency?: number;\r\n}\r\n\r\nexport interface TimeSeriesData {\r\n  timestamp: number;\r\n  value: number;\r\n  metadata?: Record<string, unknown>;\r\n}\r\n\r\nexport interface Forecast {\r\n  timestamp: number;\r\n  predictedValue: number;\r\n  lowerBound: number;\r\n  upperBound: number;\r\n  confidence: number;\r\n}\r\n\r\nexport interface TrendAnalysis {\r\n  direction: 'increasing' | 'decreasing' | 'stable';\r\n  strength: number;\r\n  changeRate: number;\r\n  seasonalPattern?: {\r\n    period: number;\r\n    amplitude: number;\r\n    phase: number;\r\n  };\r\n}\r\n\r\nexport class PredictiveAnalytics extends EventEmitter {\r\n  private horizonSteps: number;\r\n  private confidenceLevel: number;\r\n  private modelType: string;\r\n  private seasonality: string;\r\n  private updateFrequency: number;\r\n  private models: Map<string, tf.LayersModel>;\r\n  private dataHistory: Map<string, TimeSeriesData[]>;\r\n  private forecasts: Map<string, Forecast[]>;\r\n  private trends: Map<string, TrendAnalysis>;\r\n  private updateTimer?: NodeJS.Timeout;\r\n\r\n  constructor(config: ForecastConfig = {}) {\r\n    super();\r\n    \r\n    this.horizonSteps = config.horizonSteps || 24; // 24 steps ahead\r\n    this.confidenceLevel = config.confidenceLevel || 0.95;\r\n    this.modelType = config.modelType || 'lstm';\r\n    this.seasonality = config.seasonality || 'auto';\r\n    this.updateFrequency = config.updateFrequency || 300000; // 5 minutes\r\n    \r\n    this.models = new Map();\r\n    this.dataHistory = new Map();\r\n    this.forecasts = new Map();\r\n    this.trends = new Map();\r\n    \r\n    this.startUpdateTimer();\r\n  }\r\n\r\n  private startUpdateTimer(): void {\r\n    this.updateTimer = setInterval((): void => {\r\n      this.updateForecasts();\r\n    }, this.updateFrequency);\r\n  }\r\n\r\n  public async addDataPoint(metric: string, data: TimeSeriesData): Promise<void> {\r\n    if (!this.dataHistory.has(metric)) {\r\n      this.dataHistory.set(metric, []);\r\n    }\r\n    \r\n    const history = this.dataHistory.get(metric)!;\r\n    history.push(data);\r\n    \r\n    // Keep reasonable history size\r\n    if (history.length > 10000) {\r\n      history.splice(0, history.length - 5000);\r\n    }\r\n    \r\n    // Update trend analysis\r\n    if (history.length >= 30) {\r\n      const trend = this.analyzeTrend(history);\r\n      this.trends.set(metric, trend);\r\n      this.emit('trendUpdate', { metric, trend });\r\n    }\r\n  }\r\n\r\n  public async generateForecast(metric: string): Promise<Forecast[]> {\r\n    const history = this.dataHistory.get(metric);\r\n    \r\n    if (!history || history.length < 50) {\r\n      throw new Error(`Insufficient data for metric ${metric}`);\r\n    }\r\n    \r\n    let forecasts: Forecast[];\r\n    \r\n    switch (this.modelType) {\r\n      case 'arima':\r\n        forecasts = await this.arimaForecast(history);\r\n        break;\r\n      case 'prophet':\r\n        forecasts = await this.prophetForecast(history);\r\n        break;\r\n      case 'transformer':\r\n        forecasts = await this.transformerForecast(metric, history);\r\n        break;\r\n      case 'lstm':\r\n      default:\r\n        forecasts = await this.lstmForecast(metric, history);\r\n        break;\r\n    }\r\n    \r\n    this.forecasts.set(metric, forecasts);\r\n    this.emit('forecastGenerated', { metric, forecasts });\r\n    \r\n    return forecasts;\r\n  }\r\n\r\n  private analyzeTrend(history: TimeSeriesData[]): TrendAnalysis {\r\n    const values = history.map(d => d.value);\r\n    const _n = values.length;\r\n    \r\n    // Calculate linear regression\r\n    const x = Array.from({ length: _n }, (_, _i): number => _i);\r\n    const xMean = x.reduce((a, b): number => a + b, 0) / _n;\r\n    const yMean = values.reduce((a, b): number => a + b, 0) / _n;\r\n    \r\n    let numerator = 0;\r\n    let denominator = 0;\r\n    \r\n    for (let i = 0; i < _n; i++) {\r\n      numerator += (x[i] - xMean) * (values[i] - yMean);\r\n      denominator += Math.pow(x[i] - xMean, 2);\r\n    }\r\n    \r\n    const slope = numerator / denominator;\r\n    const intercept = yMean - slope * xMean;\r\n    \r\n    // Calculate R-squared\r\n    let ssRes = 0;\r\n    let ssTot = 0;\r\n    \r\n    for (let i = 0; i < _n; i++) {\r\n      const predicted = slope * x[i] + intercept;\r\n      ssRes += Math.pow(values[i] - predicted, 2);\r\n      ssTot += Math.pow(values[i] - yMean, 2);\r\n    }\r\n    \r\n    const rSquared = 1 - (ssRes / ssTot);\r\n    \r\n    // Determine trend direction\r\n    let direction: 'increasing' | 'decreasing' | 'stable';\r\n    if (Math.abs(slope) < 0.01) {\r\n      direction = 'stable';\r\n    } else if (slope > 0) {\r\n      direction = 'increasing';\r\n    } else {\r\n      direction = 'decreasing';\r\n    }\r\n    \r\n    // Detect seasonality\r\n    const seasonalPattern = this.detectSeasonality(values);\r\n    \r\n    return {\r\n      direction,\r\n      strength: rSquared,\r\n      changeRate: slope,\r\n      seasonalPattern\r\n    };\r\n  }\r\n\r\n  private detectSeasonality(values: number[]): { period: number; amplitude: number; phase: number } | undefined {\r\n    if (this.seasonality === 'none') {\r\n      return undefined;\r\n    }\r\n    \r\n    // Use FFT for seasonality detection\r\n    const fft = this.computeFFT(values);\r\n    const magnitudes = fft.map(c => Math.sqrt(c.real * c.real + c.imag * c.imag));\r\n    \r\n    // Find dominant frequency (excluding DC component)\r\n    let maxMag = 0;\r\n    let maxIdx = 0;\r\n    \r\n    for (let i = 1; i < magnitudes.length / 2; i++) {\r\n      if (magnitudes[i] > maxMag) {\r\n        maxMag = magnitudes[i];\r\n        maxIdx = i;\r\n      }\r\n    }\r\n    \r\n    // Calculate period and amplitude\r\n    const period = values.length / maxIdx;\r\n    const amplitude = maxMag * 2 / values.length;\r\n    const phase = Math.atan2(fft[maxIdx].imag, fft[maxIdx].real);\r\n    \r\n    // Only return if seasonality is significant\r\n    if (amplitude > 0.1 * this.calculateStd(values)) {\r\n      return { period, amplitude, phase };\r\n    }\r\n    \r\n    return undefined;\r\n  }\r\n\r\n  private computeFFT(values: number[]): { real: number; imag: number }[] {\r\n    const _n = values.length;\r\n    const result: { real: number; imag: number }[] = [];\r\n    \r\n    for (let k = 0; k < _n; k++) {\r\n      let real = 0;\r\n      let imag = 0;\r\n      \r\n      for (let t = 0; t < _n; t++) {\r\n        const angle = -2 * Math.PI * k * t / _n;\r\n        real += values[t] * Math.cos(angle);\r\n        imag += values[t] * Math.sin(angle);\r\n      }\r\n      \r\n      result.push({ real, imag });\r\n    }\r\n    \r\n    return result;\r\n  }\r\n\r\n  private calculateStd(values: number[]): number {\r\n    const mean = values.reduce((a, b): number => a + b, 0) / values.length;\r\n    const variance = values.reduce((a, b): number => a + Math.pow(b - mean, 2), 0) / values.length;\r\n    return Math.sqrt(variance);\r\n  }\r\n\r\n  private async lstmForecast(metric: string, history: TimeSeriesData[]): Promise<Forecast[]> {\r\n    // Get or create model\r\n    let model = this.models.get(metric);\r\n    \r\n    if (!model || this.shouldUpdateModel(metric)) {\r\n      model = await this.createLSTMModel(history);\r\n      this.models.set(metric, model);\r\n    }\r\n    \r\n    // Normalize data\r\n    const values = history.map(d => d.value);\r\n    const mean = values.reduce((a, b): number => a + b, 0) / values.length;\r\n    const std = this.calculateStd(values);\r\n    const normalizedValues = values.map(v => (v - mean) / std);\r\n    \r\n    // Prepare input sequence\r\n    const sequenceLength = Math.min(50, history.length - 1);\r\n    const inputSequence = normalizedValues.slice(-sequenceLength);\r\n    \r\n    const forecasts: Forecast[] = [];\r\n    const predictions: number[] = [];\r\n    \r\n    // Generate predictions\r\n    for (let i = 0; i < this.horizonSteps; i++) {\r\n      const input = tfCompat.tensor3d([inputSequence.slice(-sequenceLength).map(v => [v])]);\r\n      const prediction = model.predict(input) as tf.Tensor;\r\n      const predictedValue = await (\r\n        prediction as unknown as { data(): Promise<Float32Array> }\r\n      ).data();\r\n      \r\n      predictions.push(predictedValue[0]);\r\n      inputSequence.push(predictedValue[0]);\r\n      \r\n      input.dispose();\r\n      prediction.dispose();\r\n    }\r\n    \r\n    // Calculate confidence intervals\r\n    const predictionErrors = this.calculatePredictionErrors(history, model, sequenceLength);\r\n    const errorStd = this.calculateStd(predictionErrors);\r\n    const zScore = this.getZScore(this.confidenceLevel);\r\n    \r\n    // Create forecast objects\r\n    const lastTimestamp = history[history.length - 1].timestamp;\r\n    const avgInterval = this.calculateAverageInterval(history);\r\n    \r\n    for (let i = 0; i < predictions.length; i++) {\r\n      const denormalizedPrediction = predictions[i] * std + mean;\r\n      const margin = zScore * errorStd * std * Math.sqrt(i + 1); // Widen interval for further predictions\r\n      \r\n      forecasts.push({\r\n        timestamp: lastTimestamp + (i + 1) * avgInterval,\r\n        predictedValue: denormalizedPrediction,\r\n        lowerBound: denormalizedPrediction - margin,\r\n        upperBound: denormalizedPrediction + margin,\r\n        confidence: this.confidenceLevel\r\n      });\r\n    }\r\n    \r\n    return forecasts;\r\n  }\r\n\r\n  private async createLSTMModel(history: TimeSeriesData[]): Promise<tf.LayersModel> {\r\n    const sequenceLength = Math.min(50, history.length - 1);\r\n    \r\n    const model = tfCompat.sequential({\r\n      layers: [\r\n        tf.layers.lstm({\r\n          inputShape: [sequenceLength, 1],\r\n          units: 64,\r\n          returnSequences: true,\r\n          activation: 'tanh'\r\n        }),\r\n        tf.layers.dropout({ rate: 0.2 }),\r\n        tf.layers.lstm({\r\n          units: 32,\r\n          returnSequences: false,\r\n          activation: 'tanh'\r\n        }),\r\n        tf.layers.dropout({ rate: 0.2 }),\r\n        tf.layers.dense({\r\n          units: 1,\r\n          activation: 'linear'\r\n        })\r\n      ]\r\n    });\r\n    \r\n    model.compile({\r\n      optimizer: tf.train.adam(0.001),\r\n      loss: 'meanSquaredError',\r\n      metrics: ['mae']\r\n    });\r\n    \r\n    // Prepare training data\r\n    const values = history.map(d => d.value);\r\n    const mean = values.reduce((a, b): number => a + b, 0) / values.length;\r\n    const std = this.calculateStd(values);\r\n    const normalizedValues = values.map(v => (v - mean) / std);\r\n    \r\n    const sequences: number[][][] = [];\r\n    const targets: number[] = [];\r\n    \r\n    for (let i = sequenceLength; i < normalizedValues.length; i++) {\r\n      const sequence = normalizedValues.slice(i - sequenceLength, i);\r\n      sequences.push(sequence.map(v => [v]));\r\n      targets.push(normalizedValues[i]);\r\n    }\r\n    \r\n    if (sequences.length > 0) {\r\n      const xs = tfCompat.tensor3d(sequences);\r\n      const ys = tf.tensor2d(targets, [targets.length, 1]);\r\n      \r\n      await model.fit(xs, ys, {\r\n        epochs: 50,\r\n        batchSize: 32,\r\n        validationSplit: 0.2,\r\n        verbose: 0,\r\n        callbacks: {\r\n          onEpochEnd: (epoch, logs): void => {\r\n            if (epoch % 10 === 0) {\r\n              const lossRaw = (logs as { loss?: unknown } | undefined)?.loss;\r\n              const loss = typeof lossRaw === \"number\" ? lossRaw : undefined;\r\n              this.emit(\"modelTraining\", { epoch, loss });\r\n            }\r\n          }\r\n        }\r\n      });\r\n      \r\n      xs.dispose();\r\n      ys.dispose();\r\n    }\r\n    \r\n    return model;\r\n  }\r\n\r\n  private async transformerForecast(metric: string, history: TimeSeriesData[]): Promise<Forecast[]> {\r\n    // Simplified transformer implementation for time series\r\n    const model = await this.createTransformerModel(history);\r\n    this.models.set(metric, model);\r\n    \r\n    // Similar to LSTM but with attention mechanism\r\n    const values = history.map(d => d.value);\r\n    const mean = values.reduce((a, b): number => a + b, 0) / values.length;\r\n    const std = this.calculateStd(values);\r\n    \r\n    const forecasts: Forecast[] = [];\r\n    const lastTimestamp = history[history.length - 1].timestamp;\r\n    const avgInterval = this.calculateAverageInterval(history);\r\n    \r\n    // Use the model to generate forecasts\r\n    for (let i = 0; i < this.horizonSteps; i++) {\r\n      const predictedValue = mean + (Math.random() - 0.5) * std; // Simplified\r\n      const margin = std * this.getZScore(this.confidenceLevel) * Math.sqrt(i + 1);\r\n      \r\n      forecasts.push({\r\n        timestamp: lastTimestamp + (i + 1) * avgInterval,\r\n        predictedValue,\r\n        lowerBound: predictedValue - margin,\r\n        upperBound: predictedValue + margin,\r\n        confidence: this.confidenceLevel\r\n      });\r\n    }\r\n    \r\n    return forecasts;\r\n  }\r\n\r\n  private async createTransformerModel(history: TimeSeriesData[]): Promise<tf.LayersModel> {\r\n    const sequenceLength = Math.min(50, history.length - 1);\r\n    const dModel = 64;\r\n    const _numHeads = 4;\r\n    \r\n    // Input layer\r\n    const inputs = tf.input({ shape: [sequenceLength, 1] });\r\n    \r\n    // Embedding\r\n    const embedded = tf.layers.dense({\r\n      units: dModel,\r\n      activation: 'linear'\r\n    }).apply(inputs) as tf.SymbolicTensor;\r\n    \r\n    // Feed forward\r\n    const ff = tf.layers.dense({\r\n      units: dModel * 4,\r\n      activation: 'relu'\r\n    }).apply(embedded) as tf.SymbolicTensor;\r\n    \r\n    const ff2 = tf.layers.dense({\r\n      units: dModel,\r\n      activation: 'linear'\r\n    }).apply(ff) as tf.SymbolicTensor;\r\n    \r\n    // Global pooling\r\n    const pooled = tf.layers.globalAveragePooling1d().apply(ff2) as tf.SymbolicTensor;\r\n    \r\n    // Output layer\r\n    const outputs = tf.layers.dense({\r\n      units: 1,\r\n      activation: 'linear'\r\n    }).apply(pooled) as tf.SymbolicTensor;\r\n    \r\n    const model = tf.model({ inputs, outputs });\r\n    \r\n    model.compile({\r\n      optimizer: tf.train.adam(0.001),\r\n      loss: 'meanSquaredError'\r\n    });\r\n    \r\n    return model;\r\n  }\r\n\r\n  private async arimaForecast(history: TimeSeriesData[]): Promise<Forecast[]> {\r\n    // Simplified ARIMA implementation\r\n    const values = history.map(d => d.value);\r\n    const _n = values.length;\r\n    \r\n    // Calculate AR coefficients (p=2)\r\n    const p = 2;\r\n    const arCoeffs = this.calculateARCoefficients(values, p);\r\n    \r\n    // Calculate MA coefficients (q=1)\r\n    const q = 1;\r\n    const maCoeffs = this.calculateMACoefficients(values, q);\r\n    \r\n    // Generate forecasts\r\n    const forecasts: Forecast[] = [];\r\n    const lastTimestamp = history[history.length - 1].timestamp;\r\n    const avgInterval = this.calculateAverageInterval(history);\r\n    const std = this.calculateStd(values);\r\n    \r\n    const predictions = [...values];\r\n    const errors: number[] = new Array(values.length).fill(0);\r\n    \r\n    for (let i = 0; i < this.horizonSteps; i++) {\r\n      let prediction = 0;\r\n      \r\n      // AR component\r\n      for (let j = 0; j < p; j++) {\r\n        if (predictions.length > j) {\r\n          prediction += arCoeffs[j] * predictions[predictions.length - 1 - j];\r\n        }\r\n      }\r\n      \r\n      // MA component\r\n      for (let j = 0; j < q; j++) {\r\n        if (errors.length > j) {\r\n          prediction += maCoeffs[j] * errors[errors.length - 1 - j];\r\n        }\r\n      }\r\n      \r\n      predictions.push(prediction);\r\n      errors.push(0); // No error for future predictions\r\n      \r\n      const margin = std * this.getZScore(this.confidenceLevel) * Math.sqrt(i + 1);\r\n      \r\n      forecasts.push({\r\n        timestamp: lastTimestamp + (i + 1) * avgInterval,\r\n        predictedValue: prediction,\r\n        lowerBound: prediction - margin,\r\n        upperBound: prediction + margin,\r\n        confidence: this.confidenceLevel\r\n      });\r\n    }\r\n    \r\n    return forecasts;\r\n  }\r\n\r\n  private calculateARCoefficients(values: number[], p: number): number[] {\r\n    // Simplified Yule-Walker equations\r\n    const _n = values.length;\r\n    const mean = values.reduce((a, b): number => a + b, 0) / _n;\r\n    const centered = values.map(v => v - mean);\r\n    \r\n    const coeffs: number[] = [];\r\n    \r\n    for (let k = 1; k <= p; k++) {\r\n      let numerator = 0;\r\n      let denominator = 0;\r\n      \r\n      for (let i = k; i < _n; i++) {\r\n        numerator += centered[i] * centered[i - k];\r\n        denominator += centered[i - k] * centered[i - k];\r\n      }\r\n      \r\n      coeffs.push(numerator / denominator);\r\n    }\r\n    \r\n    return coeffs;\r\n  }\r\n\r\n  private calculateMACoefficients(_values: number[], q: number): number[] {\r\n    // Simplified MA coefficient estimation\r\n    const coeffs: number[] = [];\r\n    \r\n    for (let i = 0; i < q; i++) {\r\n      coeffs.push(0.5 / (i + 1)); // Simplified\r\n    }\r\n    \r\n    return coeffs;\r\n  }\r\n\r\n  private async prophetForecast(history: TimeSeriesData[]): Promise<Forecast[]> {\r\n    // Simplified Prophet-like forecast\r\n    const values = history.map(d => d.value);\r\n    const timestamps = history.map(d => d.timestamp);\r\n    \r\n    // Decompose into trend and seasonal components\r\n    const trend = this.extractTrend(values);\r\n    const seasonal = this.extractSeasonal(values, trend);\r\n    \r\n    const forecasts: Forecast[] = [];\r\n    const lastTimestamp = timestamps[timestamps.length - 1];\r\n    const avgInterval = this.calculateAverageInterval(history);\r\n    const std = this.calculateStd(values);\r\n    \r\n    for (let i = 0; i < this.horizonSteps; i++) {\r\n      // Extend trend\r\n      const trendValue = trend[trend.length - 1] + \r\n        (trend[trend.length - 1] - trend[trend.length - 2]);\r\n      \r\n      // Apply seasonality\r\n      const seasonalIdx = i % seasonal.length;\r\n      const predictedValue = trendValue + seasonal[seasonalIdx];\r\n      \r\n      const margin = std * this.getZScore(this.confidenceLevel) * Math.sqrt(i + 1);\r\n      \r\n      forecasts.push({\r\n        timestamp: lastTimestamp + (i + 1) * avgInterval,\r\n        predictedValue,\r\n        lowerBound: predictedValue - margin,\r\n        upperBound: predictedValue + margin,\r\n        confidence: this.confidenceLevel\r\n      });\r\n      \r\n      trend.push(trendValue);\r\n    }\r\n    \r\n    return forecasts;\r\n  }\r\n\r\n  private extractTrend(values: number[]): number[] {\r\n    // Moving average for trend\r\n    const windowSize = Math.min(7, Math.floor(values.length / 4));\r\n    const trend: number[] = [];\r\n    \r\n    for (let i = 0; i < values.length; i++) {\r\n      const start = Math.max(0, i - Math.floor(windowSize / 2));\r\n      const end = Math.min(values.length, i + Math.floor(windowSize / 2) + 1);\r\n      const window = values.slice(start, end);\r\n      const avg = window.reduce((a, b): number => a + b, 0) / window.length;\r\n      trend.push(avg);\r\n    }\r\n    \r\n    return trend;\r\n  }\r\n\r\n  private extractSeasonal(values: number[], trend: number[]): number[] {\r\n    // Detrended values\r\n    const detrended = values.map((v, i): number => v - trend[i]);\r\n    \r\n    // Find seasonal pattern\r\n    const seasonalPattern = this.detectSeasonality(detrended);\r\n    \r\n    if (seasonalPattern) {\r\n      const seasonal: number[] = [];\r\n      const period = Math.round(seasonalPattern.period);\r\n      \r\n      for (let i = 0; i < period; i++) {\r\n        const indices = [];\r\n        for (let j = i; j < detrended.length; j += period) {\r\n          indices.push(j);\r\n        }\r\n        \r\n        const seasonalValues = indices.map(idx => detrended[idx]);\r\n        const avg = seasonalValues.reduce((a, b): number => a + b, 0) / seasonalValues.length;\r\n        seasonal.push(avg);\r\n      }\r\n      \r\n      return seasonal;\r\n    }\r\n    \r\n    return new Array(24).fill(0); // Default: no seasonality\r\n  }\r\n\r\n  private calculatePredictionErrors(\r\n    history: TimeSeriesData[],\r\n    model: tf.LayersModel,\r\n    sequenceLength: number\r\n  ): number[] {\r\n    const values = history.map(d => d.value);\r\n    const mean = values.reduce((a, b): number => a + b, 0) / values.length;\r\n    const std = this.calculateStd(values);\r\n    const normalizedValues = values.map(v => (v - mean) / std);\r\n    \r\n    const errors: number[] = [];\r\n    \r\n    // Calculate errors on validation set\r\n    for (let i = sequenceLength; i < normalizedValues.length - 1; i++) {\r\n      const sequence = normalizedValues.slice(i - sequenceLength, i);\r\n      const input = tfCompat.tensor3d([sequence.map(v => [v])]);\r\n      const prediction = model.predict(input) as tf.Tensor;\r\n      const predictedValue = (\r\n        prediction as unknown as { dataSync(): Float32Array }\r\n      ).dataSync()[0];\r\n      \r\n      errors.push(normalizedValues[i] - predictedValue);\r\n      \r\n      input.dispose();\r\n      prediction.dispose();\r\n    }\r\n    \r\n    return errors;\r\n  }\r\n\r\n  private calculateAverageInterval(history: TimeSeriesData[]): number {\r\n    if (history.length < 2) return 60000; // Default: 1 minute\r\n    \r\n    let totalInterval = 0;\r\n    for (let i = 1; i < history.length; i++) {\r\n      totalInterval += history[i].timestamp - history[i - 1].timestamp;\r\n    }\r\n    \r\n    return totalInterval / (history.length - 1);\r\n  }\r\n\r\n  private getZScore(confidenceLevel: number): number {\r\n    // Approximate z-scores for common confidence levels\r\n    const zScores: Record<number, number> = {\r\n      0.90: 1.645,\r\n      0.95: 1.96,\r\n      0.99: 2.576\r\n    };\r\n    \r\n    return zScores[confidenceLevel] || 1.96;\r\n  }\r\n\r\n  private shouldUpdateModel(metric: string): boolean {\r\n    // Update model if data has significantly changed\r\n    const history = this.dataHistory.get(metric);\r\n    if (!history) return false;\r\n    \r\n    // Simple heuristic: update if data size doubled since last training\r\n    const lastTrainingSize = this.getLastTrainingSize(metric);\r\n    return history.length > lastTrainingSize * 2;\r\n  }\r\n\r\n  private getLastTrainingSize(_metric: string): number {\r\n    // Track training sizes (simplified)\r\n    return 100; // Default\r\n  }\r\n\r\n  private async updateForecasts(): Promise<void> {\r\n    for (const metric of this.dataHistory.keys()) {\r\n      try {\r\n        await this.generateForecast(metric);\r\n      } catch (error) {\r\n        this.emit('error', { metric, error });\r\n      }\r\n    }\r\n  }\r\n\r\n  public getForecast(metric: string): Forecast[] | undefined {\r\n    return this.forecasts.get(metric);\r\n  }\r\n\r\n  public getTrend(metric: string): TrendAnalysis | undefined {\r\n    return this.trends.get(metric);\r\n  }\r\n\r\n  public async evaluateAccuracy(metric: string): Promise<{ mae: number; rmse: number; mape: number }> {\r\n    const history = this.dataHistory.get(metric);\r\n    const forecasts = this.forecasts.get(metric);\r\n    \r\n    if (!history || !forecasts) {\r\n      throw new Error(`No data available for metric ${metric}`);\r\n    }\r\n    \r\n    // Find overlapping actual vs predicted\r\n    const actual: number[] = [];\r\n    const predicted: number[] = [];\r\n    \r\n    for (const forecast of forecasts) {\r\n      const actualPoint = history.find(h => \r\n        Math.abs(h.timestamp - forecast.timestamp) < 60000\r\n      );\r\n      \r\n      if (actualPoint) {\r\n        actual.push(actualPoint.value);\r\n        predicted.push(forecast.predictedValue);\r\n      }\r\n    }\r\n    \r\n    if (actual.length === 0) {\r\n      return { mae: 0, rmse: 0, mape: 0 };\r\n    }\r\n    \r\n    // Calculate metrics\r\n    let mae = 0;\r\n    let mse = 0;\r\n    let mape = 0;\r\n    \r\n    for (let i = 0; i < actual.length; i++) {\r\n      const error = Math.abs(actual[i] - predicted[i]);\r\n      mae += error;\r\n      mse += error * error;\r\n      \r\n      if (actual[i] !== 0) {\r\n        mape += error / Math.abs(actual[i]);\r\n      }\r\n    }\r\n    \r\n    mae /= actual.length;\r\n    const rmse = Math.sqrt(mse / actual.length);\r\n    mape = (mape / actual.length) * 100;\r\n    \r\n    return { mae, rmse, mape };\r\n  }\r\n\r\n  public dispose(): void {\r\n    if (this.updateTimer) {\r\n      clearInterval(this.updateTimer);\r\n    }\r\n    \r\n    for (const model of this.models.values()) {\r\n      model.dispose();\r\n    }\r\n    \r\n    this.models.clear();\r\n    this.dataHistory.clear();\r\n    this.forecasts.clear();\r\n    this.trends.clear();\r\n  }\r\n}\r\n\r\n// Singleton instance\r\nlet analyticsInstance: PredictiveAnalytics | null = null;\r\n\r\nexport function getPredictiveAnalytics(config?: ForecastConfig): PredictiveAnalytics {\r\n  if (!analyticsInstance) {\r\n    analyticsInstance = new PredictiveAnalytics(config);\r\n  }\r\n  return analyticsInstance;\r\n}","import { EventEmitter } from \"node:events\";\nimport { Counter, Gauge, Histogram } from \"prom-client\";\n\nexport type MetricType = \"counter\" | \"gauge\" | \"histogram\" | \"summary\";\n\nexport interface MetricDefinition {\n  name: string;\n  type: MetricType;\n  help: string;\n  labels?: string[];\n  buckets?: number[]; // For histograms\n  percentiles?: number[]; // For summaries\n  aggregation?: \"_sum\" | \"avg\" | \"max\" | \"min\" | \"last\";\n}\n\nexport interface CustomMetricValue {\n  value: number;\n  labels?: Record<string, string>;\n  timestamp?: number;\n}\n\nexport interface MetricSnapshot {\n  name: string;\n  type: MetricType;\n  values: CustomMetricValue[];\n  statistics?: {\n    count: number;\n    _sum: number;\n    mean: number;\n    min: number;\n    max: number;\n    p50?: number;\n    p95?: number;\n    p99?: number;\n  };\n}\n\nexport class CustomMetricsFramework extends EventEmitter {\n  private metrics: Map<string, unknown>;\n  private definitions: Map<string, MetricDefinition>;\n  private snapshots: Map<string, CustomMetricValue[]>;\n  private aggregators: Map<string, (values: number[]) => number>;\n  private flushInterval: number;\n  private flushTimer?: NodeJS.Timeout;\n  private maxSnapshotSize: number;\n\n  constructor(\n    config: { flushInterval?: number; maxSnapshotSize?: number } = {},\n  ) {\n    super();\n\n    this.metrics = new Map();\n    this.definitions = new Map();\n    this.snapshots = new Map();\n    this.aggregators = new Map();\n    this.flushInterval = config.flushInterval || 60000; // 1 minute\n    this.maxSnapshotSize = config.maxSnapshotSize || 10000;\n\n    this.initializeAggregators();\n    this.startFlushTimer();\n  }\n\n  private initializeAggregators(): void {\n    this.aggregators.set(\"_sum\", (values): number => values.reduce((a, b): number => a + b, 0));\n    this.aggregators.set(\n      \"avg\",\n      (values): number => values.reduce((a, b): number => a + b, 0) / values.length,\n    );\n    this.aggregators.set(\"max\", (values): number => Math.max(...values));\n    this.aggregators.set(\"min\", (values): number => Math.min(...values));\n    this.aggregators.set(\"last\", (values): number => values[values.length - 1]);\n  }\n\n  private startFlushTimer(): void {\n    this.flushTimer = setInterval((): void => {\n      this.flush();\n    }, this.flushInterval);\n  }\n\n  public registerMetric(definition: MetricDefinition): void {\n    if (this.definitions.has(definition.name)) {\n      throw new Error(`Metric ${definition.name} already registered`);\n    }\n\n    this.definitions.set(definition.name, definition);\n    this.snapshots.set(definition.name, []);\n\n    // Create Prometheus metric if needed\n    let metric: unknown;\n\n    switch (definition.type) {\n      case \"counter\":\n        metric = new Counter({\n          name: definition.name,\n          help: definition.help,\n          labelNames: definition.labels || [],\n        });\n        break;\n\n      case \"gauge\":\n        metric = new Gauge({\n          name: definition.name,\n          help: definition.help,\n          labelNames: definition.labels || [],\n        });\n        break;\n\n      case \"histogram\":\n        metric = new Histogram({\n          name: definition.name,\n          help: definition.help,\n          labelNames: definition.labels || [],\n          buckets: definition.buckets || [0.1, 0.5, 1, 2, 5, 10],\n        });\n        break;\n\n      default:\n        // Custom implementation for summary and other types\n        metric = {\n          type: definition.type,\n          observe: (value: number, labels?: Record<string, string>): void => {\n            this.recordValue(definition.name, { value, labels });\n          },\n        };\n    }\n\n    this.metrics.set(definition.name, metric);\n    this.emit(\"metricRegistered\", definition);\n  }\n\n  public recordValue(metricName: string, value: CustomMetricValue): void {\n    const definition = this.definitions.get(metricName);\n\n    if (!definition) {\n      throw new Error(`Metric ${metricName} not registered`);\n    }\n\n    // Prometheus metric instances are dynamic (counter/gauge/histogram); keep loosely typed.\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const metric = this.metrics.get(metricName) as any;\n    const snapshot = this.snapshots.get(metricName)!;\n\n    // Add timestamp if not provided\n    if (!value.timestamp) {\n      value.timestamp = Date.now();\n    }\n\n    // Record in Prometheus metric\n    if (metric && typeof metric.observe === \"function\") {\n      if (value.labels) {\n        metric.observe(value.labels, value.value);\n      } else {\n        metric.observe(value.value);\n      }\n    } else if (metric && typeof metric.inc === \"function\") {\n      // Counter\n      if (value.labels) {\n        metric.inc(value.labels, value.value);\n      } else {\n        metric.inc(value.value);\n      }\n    } else if (metric && typeof metric.set === \"function\") {\n      // Gauge\n      if (value.labels) {\n        metric.set(value.labels, value.value);\n      } else {\n        metric.set(value.value);\n      }\n    }\n\n    // Store in snapshot\n    snapshot.push(value);\n\n    // Limit snapshot size\n    if (snapshot.length > this.maxSnapshotSize) {\n      snapshot.splice(0, snapshot.length - this.maxSnapshotSize);\n    }\n\n    this.emit(\"valueRecorded\", { metric: metricName, value });\n  }\n\n  public increment(\n    metricName: string,\n    amount: number = 1,\n    labels?: Record<string, string>,\n  ): void {\n    const definition = this.definitions.get(metricName);\n\n    if (!definition) {\n      throw new Error(`Metric ${metricName} not registered`);\n    }\n\n    if (definition.type !== \"counter\") {\n      throw new Error(`Metric ${metricName} is not a counter`);\n    }\n\n    this.recordValue(metricName, { value: amount, labels });\n  }\n\n  public gauge(\n    metricName: string,\n    value: number,\n    labels?: Record<string, string>,\n  ): void {\n    const definition = this.definitions.get(metricName);\n\n    if (!definition) {\n      throw new Error(`Metric ${metricName} not registered`);\n    }\n\n    if (definition.type !== \"gauge\") {\n      throw new Error(`Metric ${metricName} is not a gauge`);\n    }\n\n    this.recordValue(metricName, { value, labels });\n  }\n\n  public observe(\n    metricName: string,\n    value: number,\n    labels?: Record<string, string>,\n  ): void {\n    const definition = this.definitions.get(metricName);\n\n    if (!definition) {\n      throw new Error(`Metric ${metricName} not registered`);\n    }\n\n    if (definition.type !== \"histogram\" && definition.type !== \"summary\") {\n      throw new Error(`Metric ${metricName} is not a histogram or summary`);\n    }\n\n    this.recordValue(metricName, { value, labels });\n  }\n\n  public getSnapshot(metricName: string): MetricSnapshot | undefined {\n    const definition = this.definitions.get(metricName);\n    const snapshot = this.snapshots.get(metricName);\n\n    if (!definition || !snapshot) {\n      return undefined;\n    }\n\n    const values = [...snapshot];\n    const statistics = this.calculateStatistics(values);\n\n    return {\n      name: metricName,\n      type: definition.type,\n      values,\n      statistics,\n    };\n  }\n\n  private calculateStatistics(values: CustomMetricValue[]): {\n    count: number;\n    _sum: number;\n    mean: number;\n    min: number;\n    max: number;\n    p50?: number;\n    p95?: number;\n    p99?: number;\n  } {\n    if (values.length === 0) {\n      return {\n        count: 0,\n        _sum: 0,\n        mean: 0,\n        min: 0,\n        max: 0,\n      };\n    }\n\n    const numbers = values.map((v): number => v.value).sort((a, b): number => a - b);\n    const count = numbers.length;\n    const _sum = numbers.reduce((a, b): number => a + b, 0);\n    const mean = _sum / count;\n    const min = numbers[0];\n    const max = numbers[count - 1];\n\n    // Calculate percentiles\n    const p50 = this.percentile(numbers, 0.5);\n    const p95 = this.percentile(numbers, 0.95);\n    const p99 = this.percentile(numbers, 0.99);\n\n    return {\n      count,\n      _sum,\n      mean,\n      min,\n      max,\n      p50,\n      p95,\n      p99,\n    };\n  }\n\n  private percentile(sortedValues: number[], p: number): number {\n    const index = Math.ceil(p * sortedValues.length) - 1;\n    return sortedValues[Math.max(0, Math.min(index, sortedValues.length - 1))];\n  }\n\n  public aggregate(\n    metricName: string,\n    windowMs: number = 60000,\n  ): number | undefined {\n    const definition = this.definitions.get(metricName);\n    const snapshot = this.snapshots.get(metricName);\n\n    if (!definition || !snapshot) {\n      return undefined;\n    }\n\n    const now = Date.now();\n    const windowValues = snapshot\n      .filter((v): boolean => v.timestamp && now - v.timestamp <= windowMs)\n      .map((v): number => v.value);\n\n    if (windowValues.length === 0) {\n      return undefined;\n    }\n\n    const aggregator = this.aggregators.get(definition.aggregation || \"last\");\n    return aggregator\n      ? aggregator(windowValues)\n      : windowValues[windowValues.length - 1];\n  }\n\n  public query(options: {\n    metric?: string;\n    labels?: Record<string, string>;\n    startTime?: number;\n    endTime?: number;\n    aggregation?: string;\n  }): CustomMetricValue[] {\n    const results: CustomMetricValue[] = [];\n\n    // Get metrics to query\n    const metricsToQuery = options.metric\n      ? [options.metric]\n      : Array.from(this.snapshots.keys());\n\n    for (const metric of metricsToQuery) {\n      const snapshot = this.snapshots.get(metric);\n\n      if (!snapshot) continue;\n\n      let filtered = [...snapshot];\n\n      // Filter by time range\n      if (options.startTime) {\n        filtered = filtered.filter(\n          (v): boolean => v.timestamp && v.timestamp >= options.startTime!,\n        );\n      }\n\n      if (options.endTime) {\n        filtered = filtered.filter(\n          (v): boolean => v.timestamp && v.timestamp <= options.endTime!,\n        );\n      }\n\n      // Filter by labels\n      if (options.labels) {\n        filtered = filtered.filter((v): boolean => {\n          if (!v.labels) return false;\n\n          for (const [key, value] of Object.entries(options.labels!)) {\n            if (v.labels[key] !== value) return false;\n          }\n\n          return true;\n        });\n      }\n\n      results.push(...filtered);\n    }\n\n    return results;\n  }\n\n  public createDerivedMetric(options: {\n    name: string;\n    help: string;\n    sourceMetrics: string[];\n    calculation: (values: Record<string, number>) => number;\n    type?: MetricType;\n  }): void {\n    const definition: MetricDefinition = {\n      name: options.name,\n      type: options.type || \"gauge\",\n      help: options.help,\n    };\n\n    this.registerMetric(definition);\n\n    // Calculate derived metric periodically\n    setInterval((): void => {\n      const sourceValues: Record<string, number> = {};\n\n      for (const sourceMetric of options.sourceMetrics) {\n        const value = this.aggregate(sourceMetric);\n        if (value !== undefined) {\n          sourceValues[sourceMetric] = value;\n        }\n      }\n\n      if (Object.keys(sourceValues).length === options.sourceMetrics.length) {\n        const derivedValue = options.calculation(sourceValues);\n        this.recordValue(options.name, { value: derivedValue });\n      }\n    }, 5000); // Calculate every 5 seconds\n  }\n\n  public registerAlert(options: {\n    metric: string;\n    condition: (value: number) => boolean;\n    message: string;\n    severity?: \"info\" | \"warning\" | \"error\" | \"critical\";\n    cooldown?: number;\n  }): void {\n    let lastAlertTime = 0;\n    const cooldown = options.cooldown || 60000; // 1 minute default\n\n    this.on(\"valueRecorded\", (event): void => {\n      if (event.metric === options.metric) {\n        const now = Date.now();\n\n        if (\n          now - lastAlertTime >= cooldown &&\n          options.condition(event.value.value)\n        ) {\n          this.emit(\"alert\", {\n            metric: options.metric,\n            value: event.value.value,\n            message: options.message,\n            severity: options.severity || \"warning\",\n            timestamp: now,\n          });\n\n          lastAlertTime = now;\n        }\n      }\n    });\n  }\n\n  public export(format: \"json\" | \"prometheus\" | \"csv\" = \"json\"): string {\n    const allSnapshots: MetricSnapshot[] = [];\n\n    for (const metricName of this.definitions.keys()) {\n      const snapshot = this.getSnapshot(metricName);\n      if (snapshot) {\n        allSnapshots.push(snapshot);\n      }\n    }\n\n    switch (format) {\n      case \"prometheus\":\n        return this.exportPrometheus(allSnapshots);\n\n      case \"csv\":\n        return this.exportCSV(allSnapshots);\n\n      case \"json\":\n      default:\n        return JSON.stringify(allSnapshots, null, 2);\n    }\n  }\n\n  private exportPrometheus(snapshots: MetricSnapshot[]): string {\n    const lines: string[] = [];\n\n    for (const snapshot of snapshots) {\n      lines.push(\n        `# HELP ${snapshot.name} ${this.definitions.get(snapshot.name)?.help || \"\"}`,\n      );\n      lines.push(`# TYPE ${snapshot.name} ${snapshot.type}`);\n\n      for (const value of snapshot.values) {\n        let _line = snapshot.name;\n\n        if (value.labels && Object.keys(value.labels).length > 0) {\n          const labelPairs = Object.entries(value.labels)\n            .map(([k, v]): string => `${k}=\"${v}\"`)\n            .join(\",\");\n          _line += `{${labelPairs}}`;\n        }\n\n        _line += ` ${value.value}`;\n\n        if (value.timestamp) {\n          _line += ` ${value.timestamp}`;\n        }\n\n        lines.push(_line);\n      }\n\n      lines.push(\"\");\n    }\n\n    return lines.join(\"\\n\");\n  }\n\n  private exportCSV(snapshots: MetricSnapshot[]): string {\n    const rows: string[] = [\"metric,timestamp,value,labels\"];\n\n    for (const snapshot of snapshots) {\n      for (const value of snapshot.values) {\n        const labels = value.labels ? JSON.stringify(value.labels) : \"\";\n        rows.push(\n          `${snapshot.name},${value.timestamp || \"\"},${value.value},\"${labels}\"`,\n        );\n      }\n    }\n\n    return rows.join(\"\\n\");\n  }\n\n  private flush(): void {\n    const now = Date.now();\n    const cutoffTime = now - this.flushInterval * 10; // Keep 10 intervals of data\n\n    for (const snapshot of this.snapshots.values()) {\n      const originalLength = snapshot.length;\n      const filtered = snapshot.filter(\n        (v): boolean => !v.timestamp || v.timestamp > cutoffTime,\n      );\n\n      if (filtered.length < originalLength) {\n        snapshot.splice(0, originalLength, ...filtered);\n      }\n    }\n\n    this.emit(\"flushed\", { timestamp: now });\n  }\n\n  public dispose(): void {\n    if (this.flushTimer) {\n      clearInterval(this.flushTimer);\n    }\n\n    this.metrics.clear();\n    this.definitions.clear();\n    this.snapshots.clear();\n    this.removeAllListeners();\n  }\n}\n\n// Singleton instance with default metrics\nlet frameworkInstance: CustomMetricsFramework | null = null;\n\nexport function getCustomMetricsFramework(): CustomMetricsFramework {\n  if (!frameworkInstance) {\n    frameworkInstance = new CustomMetricsFramework();\n\n    // Register default custom metrics\n    frameworkInstance.registerMetric({\n      name: \"maria_custom_command_usage\",\n      type: \"counter\",\n      help: \"Custom command usage counter\",\n      labels: [\"command\", \"user\"],\n    });\n\n    frameworkInstance.registerMetric({\n      name: \"maria_custom_memory_usage\",\n      type: \"gauge\",\n      help: \"Custom memory usage gauge\",\n      labels: [\"type\"],\n    });\n\n    frameworkInstance.registerMetric({\n      name: \"maria_custom_processing_time\",\n      type: \"histogram\",\n      help: \"Custom processing time histogram\",\n      labels: [\"operation\"],\n      buckets: [0.01, 0.05, 0.1, 0.5, 1, 2, 5, 10],\n    });\n\n    // Register derived metric example\n    frameworkInstance.createDerivedMetric({\n      name: \"maria_custom_efficiency_ratio\",\n      help: \"Efficiency ratio (success / total)\",\n      sourceMetrics: [\"maria_custom_success_count\", \"maria_custom_total_count\"],\n      calculation: (values): number => {\n        const success = values[\"maria_custom_success_count\"] || 0;\n        const total = values[\"maria_custom_total_count\"] || 1;\n        return success / total;\n      },\n    });\n  }\n\n  return frameworkInstance;\n}\n","import { EventEmitter } from \"node:events\";\r\nimport { getPrometheusExporter } from \"./prometheus-exporter\";\r\nimport { getAnomalyDetector } from \"./anomaly-detector\";\r\nimport { getPredictiveAnalytics } from \"./predictive-analytics\";\r\nimport { getCustomMetricsFramework } from \"./custom-metrics\";\r\nimport { stdoutLine, stderrLine } from \"../../shared/utils/tty\";\r\n\r\nexport interface TelemetryIntegrationConfig {\r\n  prometheusPort?: number;\r\n  enableAnomalyDetection?: boolean;\r\n  enablePredictiveAnalytics?: boolean;\r\n  enableCustomMetrics?: boolean;\r\n  alertWebhook?: string;\r\n}\r\n\r\ntype TelemetryAlert = {\r\n  type: string;\r\n  severity: string;\r\n  metric: string;\r\n  details: unknown;\r\n};\r\n\r\nfunction asRecord(value: unknown): Record<string, unknown> {\r\n  return value && typeof value === \"object\" ? (value as Record<string, unknown>) : {};\r\n}\r\n\r\nfunction getStringField(obj: Record<string, unknown>, key: string): string | undefined {\r\n  const v = obj[key];\r\n  return typeof v === \"string\" ? v : undefined;\r\n}\r\n\r\nfunction getNumberField(obj: Record<string, unknown>, key: string): number | undefined {\r\n  const v = obj[key];\r\n  return typeof v === \"number\" ? v : undefined;\r\n}\r\n\r\nexport class TelemetryIntegration extends EventEmitter {\r\n  private prometheusExporter: ReturnType<typeof getPrometheusExporter>;\r\n  private anomalyDetector: ReturnType<typeof getAnomalyDetector>;\r\n  private predictiveAnalytics: ReturnType<typeof getPredictiveAnalytics>;\r\n  private customMetrics: ReturnType<typeof getCustomMetricsFramework>;\r\n  private config: TelemetryIntegrationConfig;\r\n  private metricsBuffer: Map<string, unknown[]>;\r\n\r\n  constructor(config: TelemetryIntegrationConfig = {}) {\r\n    super();\r\n\r\n    this.config = config;\r\n    this.metricsBuffer = new Map();\r\n\r\n    // Initialize components\r\n    this.prometheusExporter = getPrometheusExporter({\r\n      port: config.prometheusPort,\r\n    });\r\n    this.anomalyDetector = getAnomalyDetector();\r\n    this.predictiveAnalytics = getPredictiveAnalytics();\r\n    this.customMetrics = getCustomMetricsFramework();\r\n\r\n    this.setupEventHandlers();\r\n  }\r\n\r\n  private setupEventHandlers(): void {\r\n    // Anomaly detection events\r\n    if (this.config.enableAnomalyDetection) {\r\n      this.anomalyDetector.on(\"anomaly\", async (result: unknown): Promise<void> => {\r\n        const r = asRecord(result);\r\n        const severity = String(r[\"severity\"] ?? \"unknown\");\r\n        const metric = String(r[\"metric\"] ?? \"unknown\");\r\n        stderrLine(\"🚨 Anomaly detected:\", result);\r\n\r\n        // Send alert if configured\r\n        if (this.config.alertWebhook) {\r\n          await this.sendAlert({\r\n            type: \"anomaly\",\r\n            severity,\r\n            metric,\r\n            details: result,\r\n          });\r\n        }\r\n\r\n        // Record anomaly in custom metrics\r\n        this.customMetrics.increment(\"maria_anomaly_detected_total\", 1, {\r\n          metric,\r\n          severity,\r\n        });\r\n\r\n        this.emit(\"anomaly\", result);\r\n      });\r\n    }\r\n\r\n    // Predictive analytics events\r\n    if (this.config.enablePredictiveAnalytics) {\r\n      this.predictiveAnalytics.on(\"forecastGenerated\", (event: unknown): void => {\r\n        const e = asRecord(event);\r\n        const metric = String(e[\"metric\"] ?? \"unknown\");\r\n        stdoutLine(\"📈 Forecast generated for\", metric);\r\n\r\n        // Record forecast accuracy\r\n        this.predictiveAnalytics\r\n          .evaluateAccuracy(metric)\r\n          .then((accuracy): void => {\r\n            const a = asRecord(accuracy);\r\n            const mae = typeof a[\"mae\"] === \"number\" ? (a[\"mae\"] as number) : undefined;\r\n            if (mae === undefined) return;\r\n            this.customMetrics.gauge(\r\n              \"maria_forecast_accuracy_mae\",\r\n              mae,\r\n              {\r\n                metric,\r\n              },\r\n            );\r\n          })\r\n          .catch((error: unknown): void => {\r\n            stderrLine(\"Forecast accuracy evaluation failed:\", error);\r\n          });\r\n\r\n        this.emit(\"forecast\", event);\r\n      });\r\n\r\n      this.predictiveAnalytics.on(\"trendUpdate\", (event: unknown): void => {\r\n        const e = asRecord(event);\r\n        const metric = String(e[\"metric\"] ?? \"unknown\");\r\n        const trend = asRecord(e[\"trend\"]);\r\n        const direction = String(trend[\"direction\"] ?? \"unknown\");\r\n        const strength = typeof trend[\"strength\"] === \"number\" ? (trend[\"strength\"] as number) : 0;\r\n        stdoutLine(\"📊 Trend update for\", metric, \":\", direction);\r\n\r\n        // Record trend in custom metrics\r\n        this.customMetrics.gauge(\"maria_trend_strength\", strength, {\r\n          metric,\r\n          direction,\r\n        });\r\n\r\n        this.emit(\"trend\", event);\r\n      });\r\n    }\r\n\r\n    // Custom metrics alerts\r\n    if (this.config.enableCustomMetrics) {\r\n      this.customMetrics.on(\"alert\", async (alert: unknown): Promise<void> => {\r\n        const a = asRecord(alert);\r\n        const severity = String(a[\"severity\"] ?? \"unknown\");\r\n        const metric = String(a[\"metric\"] ?? \"unknown\");\r\n        stderrLine(\"⚠️ Metric alert:\", alert);\r\n\r\n        if (this.config.alertWebhook) {\r\n          await this.sendAlert({\r\n            type: \"metric\",\r\n            severity,\r\n            metric,\r\n            details: alert,\r\n          });\r\n        }\r\n\r\n        this.emit(\"alert\", alert);\r\n      });\r\n    }\r\n  }\r\n\r\n  public async recordTelemetry(data: unknown): Promise<void> {\r\n    try {\r\n      // Update Prometheus metrics\r\n      this.prometheusExporter.updateMetrics(data);\r\n\r\n      const d = asRecord(data);\r\n\r\n      // Anomaly detection\r\n      const latency = getNumberField(d, \"latency\");\r\n      const provider = getStringField(d, \"provider\");\r\n      const intent = getStringField(d, \"intent\");\r\n      if (this.config.enableAnomalyDetection && latency !== undefined) {\r\n        await this.anomalyDetector.addDataPoint(\"response_latency\", {\r\n          timestamp: Date.now(),\r\n          value: latency,\r\n          metadata: { provider, intent },\r\n        });\r\n      }\r\n\r\n      // Predictive analytics\r\n      if (this.config.enablePredictiveAnalytics) {\r\n        if (latency !== undefined) {\r\n          await this.predictiveAnalytics.addDataPoint(\"response_latency\", {\r\n            timestamp: Date.now(),\r\n            value: latency,\r\n          });\r\n        }\r\n\r\n        const satisfaction = getNumberField(d, \"satisfaction\");\r\n        if (satisfaction !== undefined) {\r\n          await this.predictiveAnalytics.addDataPoint(\"user_satisfaction\", {\r\n            timestamp: Date.now(),\r\n            value: satisfaction,\r\n          });\r\n        }\r\n      }\r\n\r\n      // Custom metrics\r\n      if (this.config.enableCustomMetrics) {\r\n        const command = getStringField(d, \"command\");\r\n        if (command) {\r\n          this.customMetrics.increment(\"maria_custom_command_usage\", 1, {\r\n            command,\r\n            user: getStringField(d, \"user\") ?? \"anonymous\",\r\n          });\r\n        }\r\n\r\n        const processingTime = getNumberField(d, \"processingTime\");\r\n        if (processingTime !== undefined) {\r\n          this.customMetrics.observe(\r\n            \"maria_custom_processing_time\",\r\n            processingTime,\r\n            {\r\n              operation: getStringField(d, \"operation\") ?? \"unknown\",\r\n            },\r\n          );\r\n        }\r\n      }\r\n\r\n      // Buffer for batch processing\r\n      const metric = getStringField(d, \"metric\") ?? \"default\";\r\n      if (!this.metricsBuffer.has(metric)) {\r\n        this.metricsBuffer.set(metric, []);\r\n      }\r\n      this.metricsBuffer.get(metric)!.push(data);\r\n\r\n      this.emit(\"telemetryRecorded\", data);\r\n    } catch (error) {\r\n      stderrLine(\"Error recording telemetry:\", error);\r\n      this.emit(\"error\", error);\r\n    }\r\n  }\r\n\r\n  public async generateInsights(): Promise<unknown> {\r\n    const insights: {\r\n      timestamp: number;\r\n      anomalies: Record<string, unknown>;\r\n      forecasts: Record<string, unknown>;\r\n      trends: Record<string, unknown>;\r\n      customMetrics: Record<string, unknown>;\r\n    } = {\r\n      timestamp: Date.now(),\r\n      anomalies: {} as Record<string, unknown>,\r\n      forecasts: {} as Record<string, unknown>,\r\n      trends: {} as Record<string, unknown>,\r\n      customMetrics: {} as Record<string, unknown>,\r\n    };\r\n\r\n    // Collect anomalies\r\n    if (this.config.enableAnomalyDetection) {\r\n      const anomaliesResult = await this.anomalyDetector.evaluateMetrics();\r\n      if (anomaliesResult instanceof Map) {\r\n        insights.anomalies = Object.fromEntries(anomaliesResult.entries());\r\n      } else if (Array.isArray(anomaliesResult)) {\r\n        insights.anomalies = Object.fromEntries(anomaliesResult as Array<[string, unknown]>);\r\n      } else {\r\n        insights.anomalies = {};\r\n      }\r\n    }\r\n\r\n    // Collect forecasts\r\n    if (this.config.enablePredictiveAnalytics) {\r\n      for (const metric of [\"response_latency\", \"user_satisfaction\"]) {\r\n        try {\r\n          const forecast =\r\n            await this.predictiveAnalytics.generateForecast(metric);\r\n          insights.forecasts[metric] = (Array.isArray(forecast) ? forecast : []).slice(0, 5); // Next 5 predictions\r\n        } catch (_innerError) {\r\n          // Metric might not have enough data yet\r\n        }\r\n\r\n        const trend = this.predictiveAnalytics.getTrend(metric);\r\n        if (trend) {\r\n          insights.trends[metric] = trend;\r\n        }\r\n      }\r\n    }\r\n\r\n    // Collect custom metrics\r\n    if (this.config.enableCustomMetrics) {\r\n      const commandUsage = this.customMetrics.getSnapshot(\r\n        \"maria_custom_command_usage\",\r\n      );\r\n      const processingTime = this.customMetrics.getSnapshot(\r\n        \"maria_custom_processing_time\",\r\n      );\r\n\r\n      if (commandUsage) {\r\n        const snapshot = asRecord(commandUsage);\r\n        const stats =\r\n          snapshot[\"statistics\"] && typeof snapshot[\"statistics\"] === \"object\"\r\n            ? snapshot[\"statistics\"]\r\n            : undefined;\r\n        if (stats) insights.customMetrics.commandUsage = stats;\r\n      }\r\n\r\n      if (processingTime) {\r\n        const snapshot = asRecord(processingTime);\r\n        const stats =\r\n          snapshot[\"statistics\"] && typeof snapshot[\"statistics\"] === \"object\"\r\n            ? snapshot[\"statistics\"]\r\n            : undefined;\r\n        if (stats) insights.customMetrics.processingTime = stats;\r\n      }\r\n    }\r\n\r\n    return insights;\r\n  }\r\n\r\n  public async start(): Promise<void> {\r\n    stdoutLine(\"🚀 Starting Telemetry Integration...\");\r\n\r\n    // Start Prometheus exporter\r\n    await this.prometheusExporter.start();\r\n\r\n    // Register custom metrics alerts\r\n    if (this.config.enableCustomMetrics) {\r\n      // High latency alert\r\n      this.customMetrics.registerAlert({\r\n        metric: \"maria_custom_processing_time\",\r\n        condition: (value): boolean => value > 5000,\r\n        message: \"Processing time exceeded 5 seconds\",\r\n        severity: \"warning\",\r\n      });\r\n\r\n      // Low satisfaction alert\r\n      this.customMetrics.registerAlert({\r\n        metric: \"maria_user_satisfaction\",\r\n        condition: (value): boolean => value < 0.7,\r\n        message: \"User satisfaction below 70%\",\r\n        severity: \"error\",\r\n      });\r\n    }\r\n\r\n    stdoutLine(\"✅ Telemetry Integration started successfully\");\r\n    this.emit(\"started\");\r\n  }\r\n\r\n  private async sendAlert(alert: TelemetryAlert): Promise<void> {\r\n    if (!this.config.alertWebhook) return;\r\n\r\n    try {\r\n      const response = await fetch(this.config.alertWebhook, {\r\n        method: \"POST\",\r\n        headers: { \"Content-Type\": \"application/json\" },\r\n        body: JSON.stringify({\r\n          text: `🚨 MARIA Alert: ${alert.type}`,\r\n          attachments: [\r\n            {\r\n              color:\r\n                alert.severity === \"critical\"\r\n                  ? \"danger\"\r\n                  : alert.severity === \"error\"\r\n                    ? \"warning\"\r\n                    : \"good\",\r\n              fields: [\r\n                {\r\n                  title: \"Severity\",\r\n                  value: alert.severity,\r\n                  short: true,\r\n                },\r\n                {\r\n                  title: \"Metric\",\r\n                  value: alert.metric,\r\n                  short: true,\r\n                },\r\n                {\r\n                  title: \"Details\",\r\n                  value: JSON.stringify(alert.details, null, 2),\r\n                  short: false,\r\n                },\r\n              ],\r\n              timestamp: new Date().toISOString(),\r\n            },\r\n          ],\r\n        }),\r\n      });\r\n\r\n      if (!response.ok) {\r\n        throw new Error(`Alert webhook failed: ${response.statusText}`);\r\n      }\r\n    } catch (error) {\r\n      stderrLine(\"Failed to send alert:\", error);\r\n    }\r\n  }\r\n\r\n  public exportMetrics(format: \"json\" | \"prometheus\" | \"csv\" = \"json\"): string {\r\n    return this.customMetrics.export(format);\r\n  }\r\n\r\n  public async stop(): Promise<void> {\r\n    stdoutLine(\"Stopping Telemetry Integration...\");\r\n\r\n    // Cleanup resources\r\n    this.anomalyDetector.dispose();\r\n    this.predictiveAnalytics.dispose();\r\n    this.customMetrics.dispose();\r\n\r\n    this.removeAllListeners();\r\n    stdoutLine(\"Telemetry Integration stopped\");\r\n  }\r\n}\r\n\r\n// Create and export singleton instance\r\nlet integrationInstance: TelemetryIntegration | null = null;\r\n\r\nexport function getTelemetryIntegration(\r\n  config?: TelemetryIntegrationConfig,\r\n): TelemetryIntegration {\r\n  if (!integrationInstance) {\r\n    integrationInstance = new TelemetryIntegration(config);\r\n  }\r\n  return integrationInstance;\r\n}\r\n\r\n// Export convenient start function\r\nexport async function startTelemetry(\r\n  config?: TelemetryIntegrationConfig,\r\n): Promise<TelemetryIntegration> {\r\n  const integration = getTelemetryIntegration(config);\r\n  await integration.start();\r\n  return integration;\r\n}\r\n","export interface ProcessedInput {\n  original: string;\n  normalized: string;\n  tokens: string[];\n  stems: string[];\n  entities: Entity[];\n  language: string;\n  sentiment?: number;\n  _keywords: string[];\n}\n\nexport interface Entity {\n  text: string;\n  type:\n    | \"code\"\n    | \"file\"\n    | \"url\"\n    | \"number\"\n    | \"command\"\n    | \"language\"\n    | \"framework\";\n  value: unknown;\n  position: number;\n}\n\nexport class NaturalLanguageProcessor {\n  private stopWords: Map<string, Set<string>>;\n  private contractionMap: Map<string, string>;\n  private initialized: boolean = false;\n\n  constructor() {\n    this.stopWords = new Map();\n    this.contractionMap = new Map();\n    this.initializeStopWords();\n    this.initializeContractions();\n  }\n\n  async initialize(): Promise<void> {\n    if (this.initialized) {\n      return;\n    }\n\n    // Initialize any async resources if needed\n    this.initialized = true;\n  }\n\n  async process(\n    input: string,\n    language: string = \"en\",\n  ): Promise<ProcessedInput> {\n    const normalized = this.normalize(input, language);\n    const tokens = this.tokenize(normalized, language);\n    const stems = this.stem(tokens, language);\n    const entities = this.extractEntities(input);\n    const _keywords = this.extractKeywords(tokens, language);\n\n    return {\n      original: input,\n      normalized,\n      tokens,\n      stems,\n      entities,\n      language,\n      _keywords,\n    };\n  }\n\n  private normalize(text: string, language: string): string {\n    let normalized = text.toLowerCase().trim();\n\n    // Expand contractions for English\n    if (language === \"en\") {\n      this.contractionMap.forEach((expanded, contraction): void => {\n        const _regex = new RegExp(`\\\\b${contraction}\\\\b`, \"gi\");\n        normalized = normalized.replace(_regex, expanded);\n      });\n    }\n\n    // Remove extra whitespace\n    normalized = normalized.replace(/\\s+/g, \" \");\n\n    // Language-specific normalization\n    switch (language) {\n      case \"ja\":\n        // Japanese specific normalization\n        normalized = this.normalizeJapanese(normalized);\n        break;\n      case \"cn\":\n        // Chinese specific normalization\n        normalized = this.normalizeChinese(normalized);\n        break;\n      case \"ko\":\n        // Korean specific normalization\n        normalized = this.normalizeKorean(normalized);\n        break;\n      case \"vn\":\n        // Vietnamese specific normalization\n        normalized = this.normalizeVietnamese(normalized);\n        break;\n    }\n\n    return normalized;\n  }\n\n  private tokenize(text: string, language: string): string[] {\n    switch (language) {\n      case \"ja\":\n        return this.tokenizeJapanese(text);\n      case \"cn\":\n        return this.tokenizeChinese(text);\n      case \"ko\":\n        return this.tokenizeKorean(text);\n      case \"vn\":\n        return this.tokenizeVietnamese(text);\n      default:\n        return this.tokenizeEnglish(text);\n    }\n  }\n\n  private tokenizeEnglish(text: string): string[] {\n    // Simple word boundary tokenization for English\n    return text.split(/\\s+/).filter((token): boolean => token.length > 0);\n  }\n\n  private tokenizeJapanese(text: string): string[] {\n    // Simplified Japanese tokenization\n    // In production, use a proper tokenizer like kuromoji\n    const tokens: string[] = [];\n    const _patterns = [\n      /[\\u4e00-\\u9faf]+/g, // Kanji\n      /[\\u3040-\\u309f]+/g, // Hiragana\n      /[\\u30a0-\\u30ff]+/g, // Katakana\n      /[a-zA-Z]+/g, // English\n      /\\d+/g, // Numbers\n    ];\n\n    _patterns.forEach((pattern): void => {\n      const _matches = text.match(pattern);\n      if (_matches) {\n        tokens.push(..._matches);\n      }\n    });\n\n    return tokens;\n  }\n\n  private tokenizeChinese(text: string): string[] {\n    // Simplified Chinese tokenization\n    // In production, use a proper tokenizer like jieba\n    const tokens: string[] = [];\n\n    // Character-based tokenization for Chinese\n    for (const char of text) {\n      if (/[\\u4e00-\\u9faf]/.test(char)) {\n        tokens.push(char);\n      } else if (/[a-zA-Z0-9]+/.test(char)) {\n        tokens.push(char);\n      }\n    }\n\n    return tokens;\n  }\n\n  private tokenizeKorean(text: string): string[] {\n    // Simplified Korean tokenization\n    const tokens: string[] = [];\n    const _patterns = [\n      /[\\uac00-\\ud7af]+/g, // Hangul\n      /[a-zA-Z]+/g, // English\n      /\\d+/g, // Numbers\n    ];\n\n    _patterns.forEach((pattern): void => {\n      const _matches = text.match(pattern);\n      if (_matches) {\n        tokens.push(..._matches);\n      }\n    });\n\n    return tokens;\n  }\n\n  private stem(tokens: string[], language: string): string[] {\n    // Simple stemming - in production, use proper stemming libraries\n    if (language !== \"en\") {\n      return tokens; // Skip stemming for non-English\n    }\n\n    return tokens.map((token): string => {\n      // Very basic English stemming rules\n      let stem = token;\n\n      // Remove common suffixes\n      if (stem.endsWith(\"ing\")) {\n        stem = stem.slice(0, -3);\n      } else if (stem.endsWith(\"ed\")) {\n        stem = stem.slice(0, -2);\n      } else if (stem.endsWith(\"ly\")) {\n        stem = stem.slice(0, -2);\n      } else if (stem.endsWith(\"es\")) {\n        stem = stem.slice(0, -2);\n      } else if (stem.endsWith(\"s\") && stem.length > 3) {\n        stem = stem.slice(0, -1);\n      }\n\n      return stem;\n    });\n  }\n\n  private extractEntities(text: string): Entity[] {\n    const entities: Entity[] = [];\n\n    // Extract file paths\n    const filePattern =\n      /(?:\\/[\\w.-]+)+(?:\\.\\w+)?|(?:[a-zA-Z]:[\\\\/][\\w\\\\/.-]+)/g;\n    const fileMatches = text.match(filePattern);\n    if (fileMatches) {\n      fileMatches.forEach((match): void => {\n        entities.push({\n          text: match,\n          type: \"file\",\n          value: match,\n          position: text.indexOf(match),\n        });\n      });\n    }\n\n    // Extract URLs\n    const _urlPattern = /https?:\\/\\/[^\\s]+/g;\n    const _urlMatches = text.match(_urlPattern);\n    if (_urlMatches) {\n      _urlMatches.forEach((match): void => {\n        entities.push({\n          text: match,\n          type: \"url\",\n          value: match,\n          position: text.indexOf(match),\n        });\n      });\n    }\n\n    // Extract programming _languages\n    const _languages = [\n      \"javascript\",\n      \"typescript\",\n      \"python\",\n      \"java\",\n      \"rust\",\n      \"go\",\n      \"c++\",\n      \"c#\",\n      \"ruby\",\n      \"php\",\n    ];\n    _languages.forEach((lang): void => {\n      // Escape special _regex characters\n      const _escapedLang = lang.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n      const _regex = new RegExp(`\\\\b${_escapedLang}\\\\b`, \"gi\");\n      const _matches = text.match(_regex);\n      if (_matches) {\n        _matches.forEach((match): void => {\n          entities.push({\n            text: match,\n            type: \"language\",\n            value: lang,\n            position: text.indexOf(match),\n          });\n        });\n      }\n    });\n\n    // Extract frameworks\n    const frameworks = [\n      \"react\",\n      \"vue\",\n      \"angular\",\n      \"next.js\",\n      \"express\",\n      \"django\",\n      \"flask\",\n      \"rails\",\n      \"spring\",\n    ];\n    frameworks.forEach((framework): void => {\n      const _escapedFramework = framework.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n      const _regex = new RegExp(`\\\\b${_escapedFramework}\\\\b`, \"gi\");\n      const _matches = text.match(_regex);\n      if (_matches) {\n        _matches.forEach((match): void => {\n          entities.push({\n            text: match,\n            type: \"framework\",\n            value: framework,\n            position: text.indexOf(match),\n          });\n        });\n      }\n    });\n\n    return entities;\n  }\n\n  private extractKeywords(tokens: string[], language: string): string[] {\n    const stopWords = this.stopWords.get(language) ?? new Set();\n\n    // Filter out stop words and short tokens\n    const _keywords = tokens.filter((token): boolean => {\n      return token.length > 2 && !stopWords.has(token.toLowerCase());\n    });\n\n    // Sort by frequency\n    const frequency = new Map<string, number>();\n    _keywords.forEach((keyword): void => {\n      frequency.set(keyword, (frequency.get(keyword) ?? 0) + 1);\n    });\n\n    return Array.from(frequency.entries())\n      .sort((a, b): number => b[1] - a[1])\n      .slice(0, 10)\n      .map(([keyword]): string => keyword);\n  }\n\n  private normalizeJapanese(text: string): string {\n    // Convert full-width characters to half-width\n    return text.replace(/[\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF10-\\uFF19]/g, (char): string => {\n      return String.fromCharCode(char.charCodeAt(0) - 0xfee0);\n    });\n  }\n\n  private normalizeChinese(text: string): string {\n    // Convert traditional to simplified (simplified implementation)\n    // In production, use a proper conversion library\n    return text;\n  }\n\n  private normalizeKorean(text: string): string {\n    // Korean normalization\n    return text;\n  }\n\n  private normalizeVietnamese(text: string): string {\n    // Vietnamese normalization - lowercase only, keep tones\n    return text.toLowerCase();\n  }\n\n  private tokenizeVietnamese(text: string): string[] {\n    // Vietnamese tokenization - word-based similar to English\n    return text.split(/\\s+/).filter((token): boolean => token.length > 0);\n  }\n\n  private initializeStopWords(): void {\n    // English stop words\n    this.stopWords.set(\n      \"en\",\n      new Set([\n        \"a\",\n        \"an\",\n        \"and\",\n        \"are\",\n        \"as\",\n        \"at\",\n        \"be\",\n        \"by\",\n        \"for\",\n        \"from\",\n        \"has\",\n        \"he\",\n        \"in\",\n        \"is\",\n        \"it\",\n        \"its\",\n        \"of\",\n        \"on\",\n        \"that\",\n        \"the\",\n        \"to\",\n        \"was\",\n        \"will\",\n        \"with\",\n        \"the\",\n        \"this\",\n        \"these\",\n        \"those\",\n        \"i\",\n        \"you\",\n        \"we\",\n        \"they\",\n        \"what\",\n        \"which\",\n        \"who\",\n        \"when\",\n        \"where\",\n        \"how\",\n        \"can\",\n        \"could\",\n        \"should\",\n        \"would\",\n        \"may\",\n        \"might\",\n        \"must\",\n        \"do\",\n        \"does\",\n        \"did\",\n        \"have\",\n        \"had\",\n        \"get\",\n        \"got\",\n        \"make\",\n        \"made\",\n      ]),\n    );\n\n    // Japanese particles and common words\n    this.stopWords.set(\n      \"ja\",\n      new Set([\n        \"\\u306E\",\n        \"\\u3092\",\n        \"\\u306B\",\n        \"\\u306F\",\n        \"\\u304C\",\n        \"\\u3068\",\n        \"\\u3067\",\n        \"\\u3066\",\n        \"\\u3082\",\n        \"\\u304B\\u3089\",\n        \"\\u307E\\u3067\",\n        \"\\u3088\\u308A\",\n        \"\\u3078\",\n        \"\\u3084\",\n        \"\\u306A\\u3069\",\n        \"\\u3067\\u3059\",\n        \"\\u307E\\u3059\",\n        \"\\u3059\\u308B\",\n        \"\\u3057\\u305F\",\n        \"\\u3053\\u308C\",\n        \"\\u305D\\u308C\",\n        \"\\u3042\\u308C\",\n        \"\\u3053\\u306E\",\n        \"\\u305D\\u306E\",\n        \"\\u3042\\u306E\",\n      ]),\n    );\n\n    // Chinese common words\n    this.stopWords.set(\n      \"cn\",\n      new Set([\n        \"\\u7684\",\n        \"\\u4E86\",\n        \"\\u5728\",\n        \"\\u662F\",\n        \"\\u6211\",\n        \"\\u6709\",\n        \"\\u548C\",\n        \"\\u5C31\",\n        \"\\u4E0D\",\n        \"\\u4EBA\",\n        \"\\u90FD\",\n        \"\\u4E00\",\n        \"\\u4E00\\u4E2A\",\n        \"\\u4E0A\",\n        \"\\u4E5F\",\n        \"\\u5F88\",\n        \"\\u5230\",\n        \"\\u8BF4\",\n        \"\\u8981\",\n        \"\\u53BB\",\n        \"\\u4F60\",\n        \"\\u4F1A\",\n        \"\\u7740\",\n        \"\\u6CA1\\u6709\",\n        \"\\u770B\",\n        \"\\u597D\",\n        \"\\u81EA\\u5DF1\",\n        \"\\u8FD9\",\n        \"\\u90A3\",\n      ]),\n    );\n\n    // Korean particles and common words\n    this.stopWords.set(\n      \"ko\",\n      new Set([\n        \"의\",\n        \"를\",\n        \"을\",\n        \"에\",\n        \"가\",\n        \"이\",\n        \"은\",\n        \"는\",\n        \"와\",\n        \"과\",\n        \"에서\",\n        \"으로\",\n        \"로\",\n        \"부터\",\n        \"까지\",\n        \"입니다\",\n        \"합니다\",\n        \"이다\",\n        \"하다\",\n      ]),\n    );\n\n    // Vietnamese common words\n    this.stopWords.set(\n      \"vn\",\n      new Set([\n        \"và\",\n        \"của\",\n        \"là\",\n        \"có\",\n        \"được\",\n        \"trong\",\n        \"với\",\n        \"này\",\n        \"cho\",\n        \"để\",\n        \"không\",\n        \"nhưng\",\n        \"cũng\",\n        \"như\",\n        \"từ\",\n        \"đến\",\n        \"sau\",\n        \"trước\",\n        \"một\",\n        \"các\",\n        \"bị\",\n        \"đã\",\n        \"sẽ\",\n        \"khi\",\n        \"nếu\",\n        \"thì\",\n        \"vì\",\n        \"hoặc\",\n        \"hay\",\n        \"rất\",\n      ]),\n    );\n  }\n\n  private initializeContractions(): void {\n    // Common English contractions\n    this.contractionMap.set(\"don't\", \"do not\");\n    this.contractionMap.set(\"won't\", \"will not\");\n    this.contractionMap.set(\"can't\", \"cannot\");\n    this.contractionMap.set(\"n't\", \" not\");\n    this.contractionMap.set(\"'re\", \" are\");\n    this.contractionMap.set(\"'ve\", \" have\");\n    this.contractionMap.set(\"'ll\", \" will\");\n    this.contractionMap.set(\"'d\", \" would\");\n    this.contractionMap.set(\"'m\", \" am\");\n    this.contractionMap.set(\"let's\", \"let us\");\n    this.contractionMap.set(\"it's\", \"it is\");\n    this.contractionMap.set(\"that's\", \"that is\");\n    this.contractionMap.set(\"what's\", \"what is\");\n    this.contractionMap.set(\"there's\", \"there is\");\n    this.contractionMap.set(\"here's\", \"here is\");\n  }\n\n  async detectIntent(processedInput: ProcessedInput): Promise<string[]> {\n    // Extract potential intents based on _keywords\n    const intents: string[] = [];\n    const _keywords = `${processedInput._keywords.join(\" \")} ${processedInput.normalized}`;\n\n    // Code-related intents\n    if (\n      /\\b(write|create|generate|implement|build|code|program|develop)\\b/i.test(\n        _keywords,\n      )\n    ) {\n      intents.push(\"code_generation\");\n    }\n\n    // Image-related intents\n    if (\n      /\\b(image|picture|photo|draw|illustrate|visual|graphic)\\b/i.test(\n        _keywords,\n      )\n    ) {\n      intents.push(\"image_generation\");\n    }\n\n    // Video-related intents\n    if (/\\b(video|movie|animation|clip|film)\\b/i.test(_keywords)) {\n      intents.push(\"video_generation\");\n    }\n\n    // Test-related intents\n    if (/\\b(test|testing|unit test|integration test|e2e)\\b/i.test(_keywords)) {\n      intents.push(\"test_generation\");\n    }\n\n    // Review-related intents\n    if (\n      /\\b(review|check|analyze|improve|refactor|optimize)\\b/i.test(_keywords)\n    ) {\n      intents.push(\"code_review\");\n    }\n\n    return intents;\n  }\n}\n","import type { ProcessedInput } from \"../infra/NaturalLanguageProcessor\";\nimport { RouterConfig } from \"../types/common-types\";\nexport interface RecognizedIntent {\n    command: string;\n    confidence: number;\n    alternatives?: Array<{\n        command: string;\n        confidence: number;\n    }>;\n    reasoning?: string;\n}\ninterface IntentPattern {\n    command: string;\n    patterns: RegExp[];\n    keywords: string[];\n    weight: number;\n}\ninterface ContextClue {\n    before: string[];\n    after: string[];\n    weight: number;\n}\nexport interface IntentRecognizerDependencies {\n    knownCommands: string[];\n}\nexport class IntentRecognizer {\n    private config: Required<RouterConfig>;\n    private intentPatterns: Map<string, IntentPattern[]>;\n    private contextClues: Map<string, ContextClue>;\n    private commandHistory: string[] = [];\n    private initialized: boolean = false;\n    private dependencies: IntentRecognizerDependencies;\n    private metrics = {\n        totalCalls: 0,\n        nullReturns: 0,\n        fuzzyOnlyBlocked: 0,\n        responseTimes: [] as number[],\n    };\n    constructor(config: RouterConfig = {}, dependencies: IntentRecognizerDependencies = { knownCommands: [] }) {\n        this.config = {\n            confidenceThreshold: config.confidenceThreshold ?? 0.7,\n            enableLearning: config.enableLearning ?? false,\n            supportedLanguages: config.supportedLanguages ?? [\"en\"],\n            enableConfirmation: config.enableConfirmation ?? false,\n            maxAlternatives: config.maxAlternatives ?? 3,\n        };\n        this.dependencies = dependencies;\n        this.intentPatterns = new Map();\n        this.contextClues = new Map();\n        this.initializePatterns();\n    }\n    async initialize(): Promise<void> {\n        if (this.initialized) {\n            return;\n        }\n        // Initialize ML models or other async resources if needed\n        this.initialized = true;\n    }\n    async recognize(input: ProcessedInput): Promise<RecognizedIntent | null> {\n        const startTime = performance.now();\n        this.metrics.totalCalls++;\n        // Input length limit (ReDoS protection)\n        if ((input.normalized?.length ?? 0) > 8192) {\n            this.metrics.nullReturns++;\n            return null;\n        }\n        const scores = new Map<string, number>();\n        // Calculate scores in specific order (fuzzy last)\n        // 1. Pattern matching score\n        this.calculatePatternScores(input, scores);\n        // 2. Keyword matching score\n        this.calculateKeywordScores(input, scores);\n        // 3. Context-based scoring\n        this.calculateContextScores(input, scores);\n        // 4. Entity-based scoring (with adjusted weights)\n        this.calculateEntityScores(input, scores);\n        // 5. Historical pattern scoring\n        this.calculateHistoricalScores(input, scores);\n        // 6. Fuzzy command matching LAST (to avoid overriding)\n        this.calculateFuzzyCommandScores(input, scores);\n        // Early rejection for fuzzy-only matches\n        if (scores.size === 1 && (scores.values().next().value ?? 0) <= 5.0) {\n            this.metrics.nullReturns++;\n            this.metrics.fuzzyOnlyBlocked++;\n            return null;\n        }\n        // Get top candidates\n        const candidates = Array.from(scores.entries())\n            .sort((a, b): number => b[1] - a[1])\n            .slice(0, this.config.maxAlternatives + 1);\n        if (candidates.length === 0) {\n            this.metrics.nullReturns++;\n            const elapsed = performance.now() - startTime;\n            this.metrics.responseTimes.push(elapsed);\n            return null;\n        }\n        // Normalize scores to confidence values with cap\n        const maxScore = Math.max(candidates[0]?.[1] ?? 1, 1e-9);\n        const normalizedCandidates = candidates.map(([command, score]): {\n            command: string;\n            confidence: number;\n        } => {\n            const rawConfidence = score / maxScore;\n            // Apply cap to prevent fuzzy-only high confidence\n            const confidence = Math.min(rawConfidence, 0.7);\n            return { command, confidence };\n        });\n        // Minimum confidence threshold\n        const minConfidence = 0.35;\n        if (normalizedCandidates[0]?.confidence < minConfidence) {\n            this.metrics.nullReturns++;\n            const elapsed = performance.now() - startTime;\n            this.metrics.responseTimes.push(elapsed);\n            return null;\n        }\n        const topCandidate = normalizedCandidates[0];\n        if (!topCandidate) {\n            throw new Error(\"No candidates found for intent recognition\");\n        }\n        const alternatives = normalizedCandidates.slice(1);\n        const elapsed = performance.now() - startTime;\n        this.metrics.responseTimes.push(elapsed);\n        return {\n            command: topCandidate.command,\n            confidence: topCandidate.confidence,\n            alternatives: alternatives.length > 0 ? alternatives : undefined,\n            reasoning: this.generateReasoning(input, topCandidate.command),\n        };\n    }\n    private calculatePatternScores(input: ProcessedInput, scores: Map<string, number>): void {\n        const patterns = this.intentPatterns.get(input.language) ??\n            this.intentPatterns.get(\"en\") ??\n            [];\n        patterns.forEach((pattern): void => {\n            let score = 0;\n            // Check regex patterns\n            pattern.patterns.forEach((regex): void => {\n                if (regex.test(input.normalized)) {\n                    score += pattern.weight;\n                }\n                if (regex.test(input.original)) {\n                    score += pattern.weight * 0.5;\n                }\n            });\n            if (score > 0) {\n                const currentScore = scores.get(pattern.command) ?? 0;\n                scores.set(pattern.command, currentScore + score);\n            }\n        });\n    }\n    private calculateKeywordScores(input: ProcessedInput, scores: Map<string, number>): void {\n        const patterns = this.intentPatterns.get(input.language) ??\n            this.intentPatterns.get(\"en\") ??\n            [];\n        patterns.forEach((pattern): void => {\n            let matchCount = 0;\n            pattern.keywords.forEach((keyword): void => {\n                if (input._keywords.includes(keyword.toLowerCase())) {\n                    matchCount++;\n                }\n                if (input.tokens.includes(keyword.toLowerCase())) {\n                    matchCount += 0.5;\n                }\n            });\n            if (matchCount > 0) {\n                const score = matchCount * pattern.weight * 0.8;\n                const currentScore = scores.get(pattern.command) ?? 0;\n                scores.set(pattern.command, currentScore + score);\n            }\n        });\n    }\n    private calculateContextScores(_input: ProcessedInput, scores: Map<string, number>): void {\n        // Use command history for context\n        if (this.commandHistory.length > 0) {\n            const lastCommand = this.commandHistory[this.commandHistory.length - 1];\n            // Boost related commands\n            const relatedCommands = this.getRelatedCommands(lastCommand ?? \"\");\n            relatedCommands.forEach((command): void => {\n                const currentScore = scores.get(command) ?? 0;\n                scores.set(command, currentScore + 0.5);\n            });\n        }\n    }\n    private calculateEntityScores(input: ProcessedInput, scores: Map<string, number>): void {\n        // Adjusted entity weights (0.2-0.3 range)\n        const entityWeights = {\n            code: 0.25, // Reduced to prevent /code bias\n            language: 0.25,\n            framework: 0.25,\n            file: 0.3,\n            url: 0.3,\n            number: 0.2,\n            default: 0.2,\n        };\n        input.entities.forEach((entity): void => {\n            const weight = entityWeights[entity.type as keyof typeof entityWeights] ??\n                entityWeights.default;\n            switch (entity.type) {\n                case \"code\":\n                case \"language\":\n                case \"framework\":\n                    this.boostScore(scores, \"/code\", weight * 2);\n                    this.boostScore(scores, \"/test\", weight);\n                    this.boostScore(scores, \"/review\", weight);\n                    break;\n                case \"file\":\n                    this.boostScore(scores, \"/code\", weight * 0.5);\n                    this.boostScore(scores, \"/review\", weight);\n                    this.boostScore(scores, \"/export\", weight * 0.5);\n                    break;\n                case \"url\":\n                    this.boostScore(scores, \"/image\", weight);\n                    this.boostScore(scores, \"/video\", weight);\n                    break;\n            }\n        });\n    }\n    private calculateHistoricalScores(_input: ProcessedInput, scores: Map<string, number>): void {\n        // Skip if no history\n        if (this.commandHistory.length === 0) {\n            return;\n        }\n        const recent = this.commandHistory.slice(-10); // Last 10 commands\n        const base = 0.2;\n        for (let i = 0; i < recent.length; i++) {\n            // Skip consecutive duplicates to prevent over-boosting\n            if (i > 0 && recent[i] === recent[i - 1])\n                continue;\n            // Exponential decay based on recency\n            const weight = base * Math.exp(-(recent.length - 1 - i) * 0.1);\n            const cmd = recent[i];\n            scores.set(cmd, (scores.get(cmd) ?? 0) + weight);\n        }\n        // Maintain history size limit\n        if (this.commandHistory.length > 100) {\n            this.commandHistory = this.commandHistory.slice(-100);\n        }\n    }\n    private boostScore(scores: Map<string, number>, command: string, boost: number): void {\n        const currentScore = scores.get(command) ?? 0;\n        scores.set(command, currentScore + boost);\n    }\n    private getRelatedCommands(command: string): string[] {\n        const relationships: Record<string, string[]> = {\n            \"/code\": [\"/test\", \"/review\", \"/commit\"],\n            \"/test\": [\"/code\", \"/review\"],\n            \"/review\": [\"/code\", \"/test\", \"/commit\"],\n            \"/image\": [\"/video\"],\n            \"/video\": [\"/image\"],\n            \"/init\": [\"/add-dir\", \"/setup\"],\n            \"/setup\": [\"/init\", \"/config\"],\n            \"/config\": [\"/settings\", \"/setup\"],\n        };\n        return relationships[command] ?? [];\n    }\n    private generateReasoning(input: ProcessedInput, _command: string): string {\n        const reasons: string[] = [];\n        if (input._keywords.length > 0) {\n            reasons.push(`Keywords detected: ${input._keywords.slice(0, 3).join(\", \")}`);\n        }\n        if (input.entities.length > 0) {\n            const entityTypes = [...new Set(input.entities.map((e): \"number\" | \"code\" | \"file\" | \"url\" | \"command\" | \"language\" | \"framework\" => e.type))];\n            reasons.push(`Entities found: ${entityTypes.join(\", \")}`);\n        }\n        return reasons.join(\"; \");\n    }\n    async updateModel(_input: string, correctCommand: string, _wasCorrect: boolean): Promise<void> {\n        // Update command history\n        this.commandHistory.push(correctCommand);\n        if (this.commandHistory.length > 100) {\n            this.commandHistory.shift();\n        }\n        // In a real implementation, this would update ML model weights\n        // For now, we just track the feedback\n    }\n    // Get performance metrics\n    getMetrics(): {\n        p95_ms: number;\n        avg_ms: number;\n        total: number;\n        null_rate: number;\n        fuzzy_only_blocked: number;\n    } {\n        const times = this.metrics.responseTimes.slice(-10000); // Last 10k\n        if (times.length === 0) {\n            return {\n                p95_ms: 0,\n                avg_ms: 0,\n                total: 0,\n                null_rate: 0,\n                fuzzy_only_blocked: 0,\n            };\n        }\n        const sorted = [...times].sort((a, b): number => a - b);\n        const p95Index = Math.floor(sorted.length * 0.95);\n        return {\n            p95_ms: sorted[p95Index] ?? 0,\n            avg_ms: times.reduce((a, b): number => a + b, 0) / times.length,\n            total: this.metrics.totalCalls,\n            null_rate: this.metrics.totalCalls > 0\n                ? this.metrics.nullReturns / this.metrics.totalCalls\n                : 0,\n            fuzzy_only_blocked: this.metrics.fuzzyOnlyBlocked,\n        };\n    }\n    private initializePatterns(): void {\n        // English patterns\n        const englishPatterns: IntentPattern[] = [\n            // Direct command patterns (highest priority)\n            {\n                command: \"/help\",\n                patterns: [\n                    /^\\/help$/i,\n                    /^help$/i,\n                    /\\b(help|assistance|guide|usage)\\b/i,\n                    /how\\s+to\\s+use/i,\n                    /\\bshow\\s+(me\\s+)?(commands|options)\\b/i,\n                ],\n                keywords: [\n                    \"help\",\n                    \"assistance\",\n                    \"guide\",\n                    \"usage\",\n                    \"commands\",\n                    \"options\",\n                ],\n                weight: 10.0, // Highest priority\n            },\n            {\n                command: \"/status\",\n                patterns: [\n                    /^\\/status$/i,\n                    /^status$/i,\n                    /\\b(status|state|condition|health)\\b/i,\n                    /check\\s+(status|health|state)/i,\n                    /\\bhow.*doing\\b/i,\n                ],\n                keywords: [\"status\", \"state\", \"condition\", \"health\", \"check\"],\n                weight: 10.0,\n            },\n            {\n                command: \"/version\",\n                patterns: [\n                    /^\\/version$/i,\n                    /^version$/i,\n                    /\\b(version|ver|build|release)\\b/i,\n                    /what\\s+(version|ver)/i,\n                    /\\bshow\\s+(version|ver)\\b/i,\n                ],\n                keywords: [\"version\", \"ver\", \"build\", \"release\"],\n                weight: 10.0,\n            },\n            {\n                command: \"/test\",\n                patterns: [\n                    /^\\/test$/i,\n                    /^test$/i,\n                    /\\b(test|testing|spec|unit.*test|integration.*test)\\b/i,\n                    /\\b(run|execute|start).*test/i,\n                    /\\btest.*(?:suite|case|file)/i,\n                ],\n                keywords: [\n                    \"test\",\n                    \"testing\",\n                    \"spec\",\n                    \"unit\",\n                    \"integration\",\n                    \"jest\",\n                    \"mocha\",\n                ],\n                weight: 9.0,\n            },\n            {\n                command: \"/brain\",\n                patterns: [\n                    /^\\/brain$/i,\n                    /^brain$/i,\n                    /\\b(brain|mode|thinking|cognitive)\\b/i,\n                    /\\bchange.*mode/i,\n                    /\\b(switch|activate).*brain/i,\n                ],\n                keywords: [\"brain\", \"mode\", \"thinking\", \"cognitive\", \"switch\"],\n                weight: 9.0,\n            },\n            {\n                command: \"/code\",\n                patterns: [\n                    /\\b(write|create|generate|implement|build|code|program|develop|make)\\b.*\\b(code|function|class|component|script|program|app)\\b/i,\n                    /\\b(implement|create|write|build)\\s+(?:a\\s+)?(\\w+)/i,\n                    /\\bcode\\s+(?:for|to)\\b/i,\n                ],\n                keywords: [\n                    \"write\",\n                    \"create\",\n                    \"generate\",\n                    \"implement\",\n                    \"build\",\n                    \"code\",\n                    \"program\",\n                    \"function\",\n                    \"class\",\n                    \"component\",\n                ],\n                weight: 1.0,\n            },\n            {\n                command: \"/image\",\n                patterns: [\n                    /\\b(create|generate|make|draw|design|produce)\\b.*\\b(image|picture|photo|illustration|graphic|visual|art)\\b/i,\n                    /\\b(image|picture|photo|illustration|graphic)\\s+of\\b/i,\n                    /\\bdraw\\s+(?:a\\s+)?(\\w+)/i,\n                ],\n                keywords: [\n                    \"image\",\n                    \"picture\",\n                    \"photo\",\n                    \"draw\",\n                    \"illustration\",\n                    \"visual\",\n                    \"graphic\",\n                    \"art\",\n                    \"design\",\n                ],\n                weight: 1.0,\n            },\n            {\n                command: \"/video\",\n                patterns: [\n                    /\\b(create|generate|make|produce|render)\\b.*\\b(video|movie|animation|clip|film)\\b/i,\n                    /\\b(video|animation|movie)\\s+of\\b/i,\n                    /\\banimate\\s+(?:a\\s+)?(\\w+)/i,\n                ],\n                keywords: [\n                    \"video\",\n                    \"movie\",\n                    \"animation\",\n                    \"clip\",\n                    \"film\",\n                    \"animate\",\n                    \"motion\",\n                    \"render\",\n                ],\n                weight: 1.0,\n            },\n            {\n                command: \"/test\",\n                patterns: [\n                    /\\b(write|create|generate)\\b.*\\b(test|tests|testing|unit test|integration test)\\b/i,\n                    /\\btest\\s+(?:for|the)\\b/i,\n                    /\\b(unit|integration|e2e)\\s+test/i,\n                ],\n                keywords: [\n                    \"test\",\n                    \"testing\",\n                    \"unit\",\n                    \"integration\",\n                    \"e2e\",\n                    \"coverage\",\n                    \"spec\",\n                ],\n                weight: 1.0,\n            },\n            {\n                command: \"/review\",\n                patterns: [\n                    /\\b(review|check|analyze|improve|refactor|optimize)\\b.*\\b(code|implementation|function)\\b/i,\n                    /\\bcode\\s+review\\b/i,\n                    /\\b(improve|optimize|refactor)\\s+this\\b/i,\n                ],\n                keywords: [\n                    \"review\",\n                    \"check\",\n                    \"analyze\",\n                    \"improve\",\n                    \"refactor\",\n                    \"optimize\",\n                    \"quality\",\n                ],\n                weight: 1.0,\n            },\n            // Math commands\n            {\n                command: \"/calc\",\n                patterns: [\n                    /\\b(calculate|compute|calc|evaluate|solve)\\b.*\\b(expression|equation|formula|math)\\b/i,\n                    /\\b(what\\s+is|compute|calculate)\\s+\\d+\\s*[+*\\\\/^-]\\s*\\d+/i,\n                    /\\b(sin|cos|tan|sqrt|log|exp|pow|abs)\\s*\\(/i,\n                    /^\\d+\\s*[+*\\\\/^-]\\s*\\d+/,\n                    /\\b(math|mathematical)\\s+(expression|calculation)/i,\n                ],\n                keywords: [\n                    \"calculate\",\n                    \"compute\",\n                    \"calc\",\n                    \"math\",\n                    \"evaluate\",\n                    \"expression\",\n                    \"formula\",\n                    \"sin\",\n                    \"cos\",\n                    \"sqrt\",\n                ],\n                weight: 1.5,\n            },\n            {\n                command: \"/solve\",\n                patterns: [\n                    /\\b(solve|find|resolve)\\b.*\\b(equation|system|root|solution|variable)\\b/i,\n                    /\\bsolve\\s+for\\s+[a-z]/i,\n                    /\\b(equation|equations)\\s+(system|solving)/i,\n                    /\\bfind\\s+(root|solution|value)\\s+of\\b/i,\n                    /[a-z]\\s*\\^\\s*\\d+\\s*[+-]\\s*\\d+\\s*=\\s*\\d+/i,\n                ],\n                keywords: [\n                    \"solve\",\n                    \"equation\",\n                    \"system\",\n                    \"root\",\n                    \"solution\",\n                    \"find\",\n                    \"variable\",\n                    \"unknown\",\n                ],\n                weight: 1.5,\n            },\n            {\n                command: \"/plot\",\n                patterns: [\n                    /\\b(plot|graph|draw|visualize|chart)\\b.*\\b(function|equation|data|curve)\\b/i,\n                    /\\b(draw|create|make)\\s+(graph|plot|chart)\\s+of\\b/i,\n                    /\\bplot\\s+[a-z]\\s*=\\s*/i,\n                    /\\b(visualize|show|display)\\s+(function|graph)/i,\n                    /\\b(sin|cos|tan|polynomial|quadratic|linear)\\s+(graph|plot)/i,\n                ],\n                keywords: [\n                    \"plot\",\n                    \"graph\",\n                    \"draw\",\n                    \"visualize\",\n                    \"chart\",\n                    \"curve\",\n                    \"function\",\n                    \"diagram\",\n                ],\n                weight: 1.5,\n            },\n            // Shell command\n            {\n                command: \"/shell\",\n                patterns: [\n                    /\\b(show|display|read|cat|view)\\s+(file|contents?|text)\\b/i,\n                    /\\b(list|ls|dir|show)\\s+(files?|directories?|folders?)\\b/i,\n                    /\\b(search|find|grep|look)\\s+(for|in)\\s+/i,\n                    /\\b(what|which)\\s+files?\\s+(are|exist)/i,\n                    /\\b(open|read|check|examine|inspect)\\s+\\w+\\.\\w+/i,\n                    /\\b(navigate|cd|go)\\s+to\\s+/i,\n                    /\\bshow\\s+me\\s+(the\\s+)?(contents?|files?|folders?)/i,\n                    /\\bfind\\s+all\\s+\\w+\\s+files?\\b/i,\n                ],\n                keywords: [\n                    \"show\",\n                    \"list\",\n                    \"search\",\n                    \"find\",\n                    \"file\",\n                    \"directory\",\n                    \"folder\",\n                    \"contents\",\n                    \"read\",\n                    \"grep\",\n                    \"ls\",\n                ],\n                weight: 1.5,\n            },\n        ];\n        // Japanese patterns\n        const japanesePatterns: IntentPattern[] = [\n            // Direct command patterns (highest priority)\n            {\n                command: \"/help\",\n                patterns: [\n                    /^\\/help$/i,\n                    /^\\u30d8\\u30eb\\u30d7$/,\n                    /(?:\\u30d8\\u30eb\\u30d7|\\u4f7f\\u3044\\u65b9|\\u4f7f\\u7528\\u65b9\\u6cd5|\\u64cd\\u4f5c\\u65b9\\u6cd5)/,\n                    /\\u3069\\u3046(?:\\u3084\\u3063\\u3066|\\u4f7f\\u3046)/,\n                    /(?:\\u30b3\\u30de\\u30f3\\u30c9|\\u65b9\\u6cd5).*(?:\\u6559\\u3048\\u3066|\\u898b\\u305b\\u3066)/,\n                ],\n                keywords: [\n                    \"\\u30d8\\u30eb\\u30d7\",\n                    \"\\u4f7f\\u3044\\u65b9\",\n                    \"\\u4f7f\\u7528\\u65b9\\u6cd5\",\n                    \"\\u30b3\\u30de\\u30f3\\u30c9\",\n                    \"\\u64cd\\u4f5c\\u65b9\\u6cd5\",\n                ],\n                weight: 10.0,\n            },\n            {\n                command: \"/status\",\n                patterns: [\n                    /^\\/status$/i,\n                    /^\\u30b9\\u30c6\\u30fc\\u30bf\\u30b9$/,\n                    /(?:\\u30b9\\u30c6\\u30fc\\u30bf\\u30b9|\\u72b6\\u614b|\\u72b6\\u6cc1)/,\n                    /(?:\\u72b6\\u614b|\\u8abf\\u5b50).*(?:\\u78ba\\u8a8d|\\u30c1\\u30a7\\u30c3\\u30af)/,\n                    /\\u3069\\u3046(?:\\u306a\\u3063\\u3066|\\u3044\\u308b)/,\n                ],\n                keywords: [\n                    \"\\u30b9\\u30c6\\u30fc\\u30bf\\u30b9\",\n                    \"\\u72b6\\u614b\",\n                    \"\\u72b6\\u6cc1\",\n                    \"\\u78ba\\u8a8d\",\n                    \"\\u30c1\\u30a7\\u30c3\\u30af\",\n                ],\n                weight: 10.0,\n            },\n            {\n                command: \"/version\",\n                patterns: [\n                    /^\\/version$/i,\n                    /^\\u30d0\\u30fc\\u30b8\\u30e7\\u30f3$/,\n                    /(?:\\u30d0\\u30fc\\u30b8\\u30e7\\u30f3|\\u7248|ver)/,\n                    /(?:\\u30d0\\u30fc\\u30b8\\u30e7\\u30f3|\\u7248).*(?:\\u78ba\\u8a8d|\\u6559\\u3048\\u3066)/,\n                ],\n                keywords: [\"\\u30d0\\u30fc\\u30b8\\u30e7\\u30f3\", \"\\u7248\", \"ver\"],\n                weight: 10.0,\n            },\n            {\n                command: \"/test\",\n                patterns: [\n                    /^\\/test$/i,\n                    /^\\u30c6\\u30b9\\u30c8$/,\n                    /(?:\\u30c6\\u30b9\\u30c8|\\u8a66\\u9a13|\\u691c\\u8a3c)/,\n                    /(?:\\u30c6\\u30b9\\u30c8|\\u8a66\\u9a13).*(?:\\u5b9f\\u884c|\\u958b\\u59cb)/,\n                ],\n                keywords: [\"\\u30c6\\u30b9\\u30c8\", \"\\u8a66\\u9a13\", \"\\u691c\\u8a3c\", \"\\u5b9f\\u884c\"],\n                weight: 9.0,\n            },\n            {\n                command: \"/brain\",\n                patterns: [\n                    /^\\/brain$/i,\n                    /^\\u30d6\\u30ec\\u30a4\\u30f3$/,\n                    /(?:\\u30d6\\u30ec\\u30a4\\u30f3|\\u8133|\\u30e2\\u30fc\\u30c9)/,\n                    /(?:\\u30e2\\u30fc\\u30c9|\\u601d\\u8003).*(?:\\u5909\\u66f4|\\u5207\\u308a\\u66ff\\u3048)/,\n                ],\n                keywords: [\"\\u30d6\\u30ec\\u30a4\\u30f3\", \"\\u8133\", \"\\u30e2\\u30fc\\u30c9\", \"\\u601d\\u8003\"],\n                weight: 9.0,\n            },\n            {\n                command: \"/code\",\n                patterns: [\n                    /(?:\\u30b3\\u30fc\\u30c9|\\u30d7\\u30ed\\u30b0\\u30e9\\u30e0|\\u95a2\\u6570|\\u30af\\u30e9\\u30b9|\\u30e1\\u30bd\\u30c3\\u30c9).*(?:\\u66f8|\\u4f5c|\\u5b9f\\u88c5|\\u751f\\u6210)/,\n                    /(?:\\u5b9f\\u88c5|\\u958b\\u767a|\\u4f5c\\u6210)(?:\\u3057\\u3066|\\u3059\\u308b)/,\n                    /\\u30d7\\u30ed\\u30b0\\u30e9(?:\\u30e0|\\u30df\\u30f3\\u30b0)/,\n                ],\n                keywords: [\n                    \"\\u30b3\\u30fc\\u30c9\",\n                    \"\\u5b9f\\u88c5\",\n                    \"\\u30d7\\u30ed\\u30b0\\u30e9\\u30e0\",\n                    \"\\u95a2\\u6570\",\n                    \"\\u30af\\u30e9\\u30b9\",\n                    \"\\u4f5c\\u6210\",\n                    \"\\u958b\\u767a\",\n                    \"\\u66f8\\u304f\",\n                ],\n                weight: 1.0,\n            },\n            {\n                command: \"/image\",\n                patterns: [\n                    /(?:\\u753b\\u50cf|\\u30a4\\u30e1\\u30fc\\u30b8|\\u7d75|\\u30a4\\u30e9\\u30b9\\u30c8|\\u30d3\\u30b8\\u30e5\\u30a2\\u30eb).*(?:\\u751f\\u6210|\\u4f5c|\\u63cf)/,\n                    /(?:\\u63cf|\\u4f5c).*(?:\\u753b\\u50cf|\\u7d75|\\u30a4\\u30e9\\u30b9\\u30c8)/,\n                    /\\u753b\\u50cf\\u3092/,\n                ],\n                keywords: [\n                    \"\\u753b\\u50cf\",\n                    \"\\u30a4\\u30e1\\u30fc\\u30b8\",\n                    \"\\u7d75\",\n                    \"\\u30a4\\u30e9\\u30b9\\u30c8\",\n                    \"\\u30d3\\u30b8\\u30e5\\u30a2\\u30eb\",\n                    \"\\u63cf\\u304f\",\n                    \"\\u751f\\u6210\",\n                ],\n                weight: 1.0,\n            },\n            {\n                command: \"/video\",\n                patterns: [\n                    /(?:\\u52d5\\u753b|\\u30d3\\u30c7\\u30aa|\\u30a2\\u30cb\\u30e1\\u30fc\\u30b7\\u30e7\\u30f3|\\u30e0\\u30fc\\u30d3\\u30fc).*(?:\\u4f5c|\\u751f\\u6210|\\u51fa\\u529b)/,\n                    /(?:\\u4f5c|\\u751f\\u6210).*(?:\\u52d5\\u753b|\\u30d3\\u30c7\\u30aa|\\u30a2\\u30cb\\u30e1\\u30fc\\u30b7\\u30e7\\u30f3)/,\n                    /\\u52d5\\u753b\\u3092/,\n                ],\n                keywords: [\n                    \"\\u52d5\\u753b\",\n                    \"\\u30d3\\u30c7\\u30aa\",\n                    \"\\u30a2\\u30cb\\u30e1\\u30fc\\u30b7\\u30e7\\u30f3\",\n                    \"\\u30e0\\u30fc\\u30d3\\u30fc\",\n                    \"\\u6620\\u50cf\",\n                    \"\\u4f5c\\u6210\",\n                ],\n                weight: 1.0,\n            },\n            {\n                command: \"/test\",\n                patterns: [\n                    /(?:\\u30c6\\u30b9\\u30c8|\\u8a66\\u9a13).*(?:\\u4f5c|\\u66f8|\\u751f\\u6210)/,\n                    /(?:\\u30e6\\u30cb\\u30c3\\u30c8|\\u7d71\\u5408|E2E).*\\u30c6\\u30b9\\u30c8/,\n                    /\\u30c6\\u30b9\\u30c8(?:\\u30b3\\u30fc\\u30c9|\\u3092)/,\n                ],\n                keywords: [\n                    \"\\u30c6\\u30b9\\u30c8\",\n                    \"\\u8a66\\u9a13\",\n                    \"\\u30e6\\u30cb\\u30c3\\u30c8\",\n                    \"\\u7d71\\u5408\",\n                    \"\\u30ab\\u30d0\\u30ec\\u30c3\\u30b8\",\n                ],\n                weight: 1.0,\n            },\n            {\n                command: \"/review\",\n                patterns: [\n                    /(?:\\u30ec\\u30d3\\u30e5\\u30fc|\\u78ba\\u8a8d|\\u6539\\u5584|\\u30ea\\u30d5\\u30a1\\u30af\\u30bf).*(?:\\u3057\\u3066|\\u3059\\u308b)/,\n                    /\\u30b3\\u30fc\\u30c9.*(?:\\u30ec\\u30d3\\u30e5\\u30fc|\\u78ba\\u8a8d|\\u6539\\u5584)/,\n                    /(?:\\u54c1\\u8cea|\\u6700\\u9069\\u5316)/,\n                ],\n                keywords: [\n                    \"\\u30ec\\u30d3\\u30e5\\u30fc\",\n                    \"\\u78ba\\u8a8d\",\n                    \"\\u6539\\u5584\",\n                    \"\\u30ea\\u30d5\\u30a1\\u30af\\u30bf\",\n                    \"\\u6700\\u9069\\u5316\",\n                    \"\\u54c1\\u8cea\",\n                ],\n                weight: 1.0,\n            },\n            // Math commands in Japanese\n            {\n                command: \"/calc\",\n                patterns: [\n                    /(?:\\u8a08\\u7b97|\\u6f14\\u7b97|\\u7b97\\u51fa).*(?:\\u3057\\u3066|\\u3059\\u308b)/,\n                    /\\d+\\s*[+*\\\\/^-]\\s*\\d+/,\n                    /(?:\\u4f55|\\u3044\\u304f\\u3064|\\u3044\\u304f\\u3089).*(?:\\u306b\\u306a\\u308b|\\u3067\\u3059)/,\n                    /(?:sin|cos|tan|sqrt|\\u30eb\\u30fc\\u30c8|\\u5e73\\u65b9\\u6839)/,\n                    /(?:\\u6570\\u5f0f|\\u5f0f|\\u8a08\\u7b97\\u5f0f).*(?:\\u8a08\\u7b97|\\u6f14\\u7b97)/,\n                ],\n                keywords: [\n                    \"\\u8a08\\u7b97\",\n                    \"\\u6f14\\u7b97\",\n                    \"\\u7b97\\u51fa\",\n                    \"\\u6570\\u5f0f\",\n                    \"\\u5f0f\",\n                    \"\\u6570\\u5b66\",\n                    \"\\u30eb\\u30fc\\u30c8\",\n                    \"\\u5e73\\u65b9\\u6839\",\n                ],\n                weight: 1.5,\n            },\n            {\n                command: \"/solve\",\n                patterns: [\n                    /(?:\\u65b9\\u7a0b\\u5f0f|\\u9023\\u7acb\\u65b9\\u7a0b\\u5f0f|\\u7b49\\u5f0f).*(?:\\u89e3|\\u6c42|\\u8a08\\u7b97)/,\n                    /(?:\\u89e3|\\u6839|\\u5024).*(?:\\u6c42|\\u63a2|\\u8a08\\u7b97)/,\n                    /[a-z]\\s*\\u306b\\u3064\\u3044\\u3066.*(?:\\u89e3|\\u6c42)/,\n                    /(?:\\u5909\\u6570|\\u672a\\u77e5\\u6570).*(?:\\u6c42|\\u8a08\\u7b97)/,\n                ],\n                keywords: [\n                    \"\\u65b9\\u7a0b\\u5f0f\",\n                    \"\\u9023\\u7acb\",\n                    \"\\u89e3\",\n                    \"\\u6839\",\n                    \"\\u5909\\u6570\",\n                    \"\\u672a\\u77e5\\u6570\",\n                    \"\\u6c42\\u3081\\u308b\",\n                ],\n                weight: 1.5,\n            },\n            {\n                command: \"/plot\",\n                patterns: [\n                    /(?:\\u30b0\\u30e9\\u30d5|\\u56f3|\\u30c1\\u30e3\\u30fc\\u30c8).*(?:\\u63cf|\\u4f5c|\\u8868\\u793a)/,\n                    /(?:\\u95a2\\u6570|\\u66f2\\u7dda).*(?:\\u63cf\\u753b|\\u30d7\\u30ed\\u30c3\\u30c8|\\u53ef\\u8996\\u5316)/,\n                    /(?:\\u53ef\\u8996\\u5316|\\u8868\\u793a|\\u63cf\\u753b).*(?:\\u3057\\u3066|\\u3059\\u308b)/,\n                    /(?:sin|cos|\\u4e8c\\u6b21|\\u4e00\\u6b21|\\u591a\\u9805\\u5f0f).*\\u30b0\\u30e9\\u30d5/,\n                ],\n                keywords: [\n                    \"\\u30b0\\u30e9\\u30d5\",\n                    \"\\u56f3\",\n                    \"\\u30c1\\u30e3\\u30fc\\u30c8\",\n                    \"\\u63cf\\u753b\",\n                    \"\\u30d7\\u30ed\\u30c3\\u30c8\",\n                    \"\\u53ef\\u8996\\u5316\",\n                    \"\\u66f2\\u7dda\",\n                    \"\\u95a2\\u6570\",\n                ],\n                weight: 1.5,\n            },\n            // Shell command in Japanese\n            {\n                command: \"/shell\",\n                patterns: [\n                    /(?:\\u30d5\\u30a1\\u30a4\\u30eb|\\u30d5\\u30a9\\u30eb\\u30c0|\\u30c7\\u30a3\\u30ec\\u30af\\u30c8\\u30ea).*(?:\\u8868\\u793a|\\u898b|\\u78ba\\u8a8d|\\u30ea\\u30b9\\u30c8)/,\n                    /(?:\\u5185\\u5bb9|\\u4e2d\\u8eab|\\u30c6\\u30ad\\u30b9\\u30c8).*(?:\\u8868\\u793a|\\u898b|\\u78ba\\u8a8d)/,\n                    /(?:\\u691c\\u7d22|\\u63a2|grep|\\u30b5\\u30fc\\u30c1).*(?:\\u3057\\u3066|\\u3059\\u308b)/,\n                    /(?:\\u4f55|\\u3069\\u3093\\u306a).*\\u30d5\\u30a1\\u30a4\\u30eb.*(?:\\u3042\\u308b|\\u5b58\\u5728)/,\n                    /\\w+\\.\\w+.*(?:\\u958b|\\u8aad|\\u78ba\\u8a8d)/,\n                    /(?:\\u79fb\\u52d5|cd|\\u30ca\\u30d3\\u30b2\\u30fc\\u30c8).*(?:\\u3057\\u3066|\\u3059\\u308b)/,\n                ],\n                keywords: [\n                    \"\\u30d5\\u30a1\\u30a4\\u30eb\",\n                    \"\\u30d5\\u30a9\\u30eb\\u30c0\",\n                    \"\\u30c7\\u30a3\\u30ec\\u30af\\u30c8\\u30ea\",\n                    \"\\u8868\\u793a\",\n                    \"\\u691c\\u7d22\",\n                    \"\\u5185\\u5bb9\",\n                    \"\\u4e2d\\u8eab\",\n                    \"\\u30ea\\u30b9\\u30c8\",\n                ],\n                weight: 1.5,\n            },\n        ];\n        // Chinese patterns\n        const chinesePatterns: IntentPattern[] = [\n            {\n                command: \"/code\",\n                patterns: [\n                    /(?:\\u5199|\\u7f16\\u5199|\\u521b\\u5efa|\\u5b9e\\u73b0|\\u751f\\u6210).*(?:\\u4ee3\\u7801|\\u7a0b\\u5e8f|\\u51fd\\u6570|\\u7c7b)/,\n                    /(?:\\u4ee3\\u7801|\\u7a0b\\u5e8f|\\u51fd\\u6570).*(?:\\u5199|\\u521b\\u5efa|\\u5b9e\\u73b0)/,\n                    /\\u7f16\\u7a0b/,\n                ],\n                keywords: [\n                    \"\\u4ee3\\u7801\",\n                    \"\\u7f16\\u5199\",\n                    \"\\u5b9e\\u73b0\",\n                    \"\\u7a0b\\u5e8f\",\n                    \"\\u51fd\\u6570\",\n                    \"\\u7c7b\",\n                    \"\\u521b\\u5efa\",\n                    \"\\u5f00\\u53d1\",\n                ],\n                weight: 1.0,\n            },\n            {\n                command: \"/image\",\n                patterns: [\n                    /(?:\\u751f\\u6210|\\u521b\\u5efa|\\u5236\\u4f5c|\\u753b).*(?:\\u56fe\\u50cf|\\u56fe\\u7247|\\u63d2\\u56fe)/,\n                    /(?:\\u56fe\\u50cf|\\u56fe\\u7247|\\u63d2\\u56fe).*(?:\\u751f\\u6210|\\u521b\\u5efa)/,\n                    /\\u753b.*\\u56fe/,\n                ],\n                keywords: [\n                    \"\\u56fe\\u50cf\",\n                    \"\\u56fe\\u7247\",\n                    \"\\u63d2\\u56fe\",\n                    \"\\u753b\",\n                    \"\\u751f\\u6210\",\n                    \"\\u521b\\u5efa\",\n                    \"\\u89c6\\u89c9\",\n                ],\n                weight: 1.0,\n            },\n            {\n                command: \"/video\",\n                patterns: [\n                    /(?:\\u521b\\u5efa|\\u751f\\u6210|\\u5236\\u4f5c).*(?:\\u89c6\\u9891|\\u52a8\\u753b|\\u5f71\\u7247)/,\n                    /(?:\\u89c6\\u9891|\\u52a8\\u753b).*(?:\\u521b\\u5efa|\\u751f\\u6210)/,\n                    /\\u52a8\\u753b/,\n                ],\n                keywords: [\n                    \"\\u89c6\\u9891\",\n                    \"\\u52a8\\u753b\",\n                    \"\\u5f71\\u7247\",\n                    \"\\u521b\\u5efa\",\n                    \"\\u751f\\u6210\",\n                    \"\\u5236\\u4f5c\",\n                ],\n                weight: 1.0,\n            },\n        ];\n        // Korean patterns\n        const koreanPatterns: IntentPattern[] = [\n            {\n                command: \"/code\",\n                patterns: [\n                    /(?:코드|프로그램|함수|클래스).*(?:작성|생성|구현)/,\n                    /(?:구현|개발|만들)/,\n                    /프로그래밍/,\n                ],\n                keywords: [\n                    \"코드\",\n                    \"프로그램\",\n                    \"함수\",\n                    \"클래스\",\n                    \"구현\",\n                    \"개발\",\n                    \"작성\",\n                ],\n                weight: 1.0,\n            },\n            {\n                command: \"/image\",\n                patterns: [\n                    /(?:이미지|그림|일러스트).*(?:생성|만들|그리)/,\n                    /(?:그림|이미지).*그려/,\n                    /이미지/,\n                ],\n                keywords: [\"이미지\", \"그림\", \"일러스트\", \"생성\", \"그리기\"],\n                weight: 1.0,\n            },\n            {\n                command: \"/video\",\n                patterns: [\n                    /(?:비디오|동영상|애니메이션).*(?:생성|만들|제작)/,\n                    /(?:동영상|비디오).*만들/,\n                    /애니메이션/,\n                ],\n                keywords: [\"비디오\", \"동영상\", \"애니메이션\", \"생성\", \"제작\"],\n                weight: 1.0,\n            },\n        ];\n        // Store patterns by language\n        this.intentPatterns.set(\"en\", englishPatterns);\n        this.intentPatterns.set(\"ja\", japanesePatterns);\n        this.intentPatterns.set(\"cn\", chinesePatterns);\n        this.intentPatterns.set(\"ko\", koreanPatterns);\n    }\n    private calculateFuzzyCommandScores(input: ProcessedInput, scores: Map<string, number>): void {\n        // Use injected known commands (SSOT)\n        const knownCommands = this.dependencies.knownCommands;\n        const inputText = input.normalized.trim();\n        // Direct fuzzy matching for commands\n        knownCommands.forEach((command): void => {\n            const distance = this.calculateEditDistance(inputText, command);\n            const commandWithoutSlash = command.substring(1);\n            const distanceWithoutSlash = this.calculateEditDistance(inputText, commandWithoutSlash);\n            // Use the better distance\n            const bestDistance = Math.min(distance, distanceWithoutSlash);\n            // Only consider edit distance of 1 (stricter matching)\n            if (bestDistance <= 1) {\n                const fuzzyScore = 5.0; // Fixed low score for fuzzy matches\n                const currentScore = scores.get(command) ?? 0;\n                scores.set(command, Math.max(currentScore, fuzzyScore));\n            }\n        });\n    }\n    private calculateEditDistance(s1: string, s2: string): number {\n        // Levenshtein distance implementation\n        const len1 = s1.length;\n        const len2 = s2.length;\n        // Create matrix\n        const matrix: number[][] = Array(len1 + 1)\n            .fill(null)\n            .map((): number[] => Array(len2 + 1).fill(0));\n        // Initialize first row and column\n        for (let i = 0; i <= len1; i++)\n            matrix[i][0] = i;\n        for (let j = 0; j <= len2; j++)\n            matrix[0][j] = j;\n        // Fill the matrix\n        for (let i = 1; i <= len1; i++) {\n            for (let j = 1; j <= len2; j++) {\n                if (s1[i - 1] === s2[j - 1]) {\n                    matrix[i][j] = matrix[i - 1][j - 1];\n                }\n                else {\n                    matrix[i][j] = Math.min(matrix[i - 1][j] + 1, // deletion\n                    matrix[i][j - 1] + 1, // insertion\n                    matrix[i - 1][j - 1] + 1);\n                }\n            }\n        }\n        return matrix[len1][len2];\n    }\n}\n","export class ParameterExtractor {\n  async extract(\n    input: string,\n    command: string,\n    language: string,\n  ): Promise<Record<string, unknown>> {\n    const _parameters: Record<string, unknown> = {};\n\n    switch (command) {\n      case \"/code\":\n        return this.extractCodeParameters(input, language);\n      case \"/image\":\n        return this.extractImageParameters(input, language);\n      case \"/video\":\n        return this.extractVideoParameters(input, language);\n      case \"/test\":\n        return this.extractTestParameters(input, language);\n      case \"/review\":\n        return this.extractReviewParameters(input, language);\n      case \"/lang\":\n        return this.extractLanguageParameters(input, language);\n      default:\n        return this.extractGenericParameters(input, language);\n    }\n  }\n\n  private extractCodeParameters(\n    _input: string,\n    language: string,\n  ): Record<string, unknown> {\n    const params: Record<string, unknown> = {};\n\n    // Extract _description (remove command keywords)\n    const _description = this.cleanDescription(_input, language, [\n      \"write\",\n      \"create\",\n      \"generate\",\n      \"implement\",\n      \"build\",\n      \"code\",\n      \"program\",\n      \"\\u66F8\\u304F\",\n      \"\\u4F5C\\u308B\",\n      \"\\u5B9F\\u88C5\",\n      \"\\u30B3\\u30FC\\u30C9\",\n      \"\\u30D7\\u30ED\\u30B0\\u30E9\\u30E0\",\n      \"\\u5199\",\n      \"\\u7F16\\u5199\",\n      \"\\u521B\\u5EFA\",\n      \"\\u5B9E\\u73B0\",\n      \"\\u4EE3\\u7801\",\n      \"\\u7A0B\\u5E8F\",\n      \"작성\",\n      \"생성\",\n      \"구현\",\n      \"코드\",\n      \"프로그램\",\n      \"viết\",\n      \"tạo\",\n      \"xây dựng\",\n      \"mã\",\n      \"chương trình\",\n    ]);\n\n    params._description = _description;\n\n    // Detect programming language\n    const _progLang = this.detectProgrammingLanguage(_input);\n    if (_progLang) {\n      params.language = _progLang;\n    }\n\n    // Detect _framework\n    const _framework = this.detectFramework(_input);\n    if (_framework) {\n      params._framework = _framework;\n    }\n\n    // Extract file path if mentioned\n    const _filePath = this.extractFilePath(_input);\n    if (_filePath) {\n      params.file = _filePath;\n    }\n\n    return params;\n  }\n\n  private extractImageParameters(\n    _input: string,\n    language: string,\n  ): Record<string, unknown> {\n    const params: Record<string, unknown> = {};\n\n    // Extract _prompt (remove command keywords)\n    const _prompt = this.cleanDescription(_input, language, [\n      \"create\",\n      \"generate\",\n      \"make\",\n      \"draw\",\n      \"design\",\n      \"image\",\n      \"picture\",\n      \"\\u751F\\u6210\",\n      \"\\u4F5C\\u308B\",\n      \"\\u63CF\\u304F\",\n      \"\\u753B\\u50CF\",\n      \"\\u30A4\\u30E1\\u30FC\\u30B8\",\n      \"\\u521B\\u5EFA\",\n      \"\\u751F\\u6210\",\n      \"\\u753B\",\n      \"\\u56FE\\u50CF\",\n      \"\\u56FE\\u7247\",\n      \"생성\",\n      \"그리기\",\n      \"이미지\",\n      \"그림\",\n      \"tạo\",\n      \"vẽ\",\n      \"hình ảnh\",\n      \"ảnh\",\n    ]);\n\n    params._prompt = _prompt;\n\n    // Detect _style\n    const _style = this.detectArtStyle(_input);\n    if (_style) {\n      params._style = _style;\n    }\n\n    // Extract _dimensions\n    const _dimensions = this.extractDimensions(_input);\n    if (_dimensions) {\n      params.width = _dimensions.width;\n      params.height = _dimensions.height;\n    }\n\n    return params;\n  }\n\n  private extractVideoParameters(\n    _input: string,\n    language: string,\n  ): Record<string, unknown> {\n    const params: Record<string, unknown> = {};\n\n    // Extract _description\n    const _description = this.cleanDescription(_input, language, [\n      \"create\",\n      \"generate\",\n      \"make\",\n      \"produce\",\n      \"video\",\n      \"animation\",\n      \"\\u4F5C\\u308B\",\n      \"\\u751F\\u6210\",\n      \"\\u52D5\\u753B\",\n      \"\\u30D3\\u30C7\\u30AA\",\n      \"\\u30A2\\u30CB\\u30E1\\u30FC\\u30B7\\u30E7\\u30F3\",\n      \"\\u521B\\u5EFA\",\n      \"\\u751F\\u6210\",\n      \"\\u89C6\\u9891\",\n      \"\\u52A8\\u753B\",\n      \"생성\",\n      \"비디오\",\n      \"동영상\",\n      \"애니메이션\",\n      \"tạo\",\n      \"video\",\n      \"hoạt hình\",\n    ]);\n\n    params._description = _description;\n\n    // Extract _duration\n    const _duration = this.extractDuration(_input);\n    if (_duration) {\n      params._duration = _duration;\n    }\n\n    // Detect _format\n    const _format = this.detectVideoFormat(_input);\n    if (_format) {\n      params._format = _format;\n    }\n\n    return params;\n  }\n\n  private extractTestParameters(\n    _input: string,\n    language: string,\n  ): Record<string, unknown> {\n    const params: Record<string, unknown> = {};\n\n    // Extract _description\n    const _description = this.cleanDescription(_input, language, [\n      \"write\",\n      \"create\",\n      \"generate\",\n      \"test\",\n      \"testing\",\n      \"\\u66F8\\u304F\",\n      \"\\u4F5C\\u308B\",\n      \"\\u30C6\\u30B9\\u30C8\",\n      \"\\u8A66\\u9A13\",\n      \"\\u5199\",\n      \"\\u521B\\u5EFA\",\n      \"\\u6D4B\\u8BD5\",\n      \"작성\",\n      \"생성\",\n      \"테스트\",\n      \"viết\",\n      \"tạo\",\n      \"kiểm tra\",\n    ]);\n\n    params._description = _description;\n\n    // Detect test type\n    const _testType = this.detectTestType(_input);\n    if (_testType) {\n      params.type = _testType;\n    }\n\n    // Extract file if mentioned\n    const _filePath = this.extractFilePath(_input);\n    if (_filePath) {\n      params.file = _filePath;\n    }\n\n    return params;\n  }\n\n  private extractReviewParameters(\n    _input: string,\n    language: string,\n  ): Record<string, unknown> {\n    const params: Record<string, unknown> = {};\n\n    // Extract _description\n    const _description = this.cleanDescription(_input, language, [\n      \"review\",\n      \"check\",\n      \"analyze\",\n      \"improve\",\n      \"refactor\",\n      \"\\u30EC\\u30D3\\u30E5\\u30FC\",\n      \"\\u78BA\\u8A8D\",\n      \"\\u6539\\u5584\",\n      \"\\u30EA\\u30D5\\u30A1\\u30AF\\u30BF\",\n      \"\\u5BA1\\u67E5\",\n      \"\\u68C0\\u67E5\",\n      \"\\u5206\\u6790\",\n      \"\\u6539\\u8FDB\",\n      \"리뷰\",\n      \"검토\",\n      \"분석\",\n      \"개선\",\n      \"xem xét\",\n      \"kiểm tra\",\n      \"phân tích\",\n      \"cải thiện\",\n    ]);\n\n    params._description = _description;\n\n    // Extract file if mentioned\n    const _filePath = this.extractFilePath(_input);\n    if (_filePath) {\n      params.file = _filePath;\n    }\n\n    // Detect review _focus\n    const _focus = this.detectReviewFocus(_input);\n    if (_focus) {\n      params._focus = _focus;\n    }\n\n    return params;\n  }\n\n  private extractLanguageParameters(\n    _input: string,\n    _language: string,\n  ): Record<string, unknown> {\n    const params: Record<string, unknown> = {};\n\n    // Extract target language\n    const _targetLang = this.extractTargetLanguage(_input);\n    if (_targetLang) {\n      params._language = _targetLang;\n    }\n\n    return params;\n  }\n\n  private extractGenericParameters(\n    _input: string,\n    language: string,\n  ): Record<string, unknown> {\n    const params: Record<string, unknown> = {};\n\n    // Clean input from common words\n    const _cleanedInput = this.cleanDescription(_input, language, []);\n    params._input = _cleanedInput;\n\n    // Extract any file paths\n    const _filePath = this.extractFilePath(_input);\n    if (_filePath) {\n      params.file = _filePath;\n    }\n\n    return params;\n  }\n\n  private cleanDescription(\n    _input: string,\n    _language: string,\n    keywords: string[],\n  ): string {\n    let cleaned = _input.toLowerCase();\n\n    // Remove keywords\n    keywords.forEach((keyword): void => {\n      const _regex = new RegExp(`\\\\b${keyword}\\\\b`, \"gi\");\n      cleaned = cleaned.replace(_regex, \"\");\n    });\n\n    // Clean up whitespace\n    cleaned = cleaned.replace(/\\s+/g, \" \").trim();\n\n    return cleaned;\n  }\n\n  private detectProgrammingLanguage(input: string): string | null {\n    const languages: Record<string, RegExp> = {\n      javascript: /\\b(javascript|js|node\\.?js)\\b/i,\n      typescript: /\\b(typescript|ts)\\b/i,\n      python: /\\b(python|py)\\b/i,\n      java: /\\b(java)\\b/i,\n      rust: /\\b(rust|rs)\\b/i,\n      go: /\\b(go|golang)\\b/i,\n      cpp: /\\b(c\\+\\+|cpp)\\b/i,\n      csharp: /\\b(c#|csharp)\\b/i,\n      ruby: /\\b(ruby|rb)\\b/i,\n      php: /\\b(php)\\b/i,\n      swift: /\\b(swift)\\b/i,\n      kotlin: /\\b(kotlin)\\b/i,\n    };\n\n    for (const [lang, _pattern] of Object.entries(languages)) {\n      if (_pattern.test(input)) {\n        return lang;\n      }\n    }\n\n    return null;\n  }\n\n  private detectFramework(input: string): string | null {\n    const frameworks: Record<string, RegExp> = {\n      react: /\\b(react|reactjs)\\b/i,\n      vue: /\\b(vue|vuejs)\\b/i,\n      angular: /\\b(angular)\\b/i,\n      nextjs: /\\b(next\\.?js|nextjs)\\b/i,\n      express: /\\b(express)\\b/i,\n      django: /\\b(django)\\b/i,\n      flask: /\\b(flask)\\b/i,\n      rails: /\\b(rails|ruby on rails)\\b/i,\n      spring: /\\b(spring)\\b/i,\n      laravel: /\\b(laravel)\\b/i,\n    };\n\n    for (const [_framework, _pattern] of Object.entries(frameworks)) {\n      if (_pattern.test(input)) {\n        return _framework;\n      }\n    }\n\n    return null;\n  }\n\n  private detectArtStyle(input: string): string | null {\n    const styles: Record<string, RegExp> = {\n      realistic: /\\b(realistic|photorealistic|real)\\b/i,\n      cartoon: /\\b(cartoon|animated|anime)\\b/i,\n      abstract: /\\b(abstract)\\b/i,\n      watercolor: /\\b(watercolor|water color)\\b/i,\n      oil: /\\b(oil painting|oil)\\b/i,\n      pencil: /\\b(pencil|sketch)\\b/i,\n      \"3d\": /\\b(3d|three dimensional)\\b/i,\n      pixel: /\\b(pixel art|pixelated)\\b/i,\n    };\n\n    for (const [_style, _pattern] of Object.entries(styles)) {\n      if (_pattern.test(input)) {\n        return _style;\n      }\n    }\n\n    return null;\n  }\n\n  private extractFilePath(input: string): string | null {\n    const _filePattern = /(?:[\"'])?([/\\w\\-._]+\\.\\w+)(?:[\"'])?/;\n    const _match = input.match(_filePattern);\n    return _match ? _match[1] : null;\n  }\n\n  private extractDimensions(\n    input: string,\n  ): { width: number; height: number } | null {\n    const _dimensionPattern = /(\\d+)\\s*[x×]\\s*(\\d+)/i;\n    const _match = input.match(_dimensionPattern);\n\n    if (_match) {\n      return {\n        width: parseInt(_match[1], 10),\n        height: parseInt(_match[2], 10),\n      };\n    }\n\n    return null;\n  }\n\n  private extractDuration(input: string): number | null {\n    const _durationPattern = /(\\d+)\\s*(seconds?|secs?|minutes?|mins?)/i;\n    const _match = input.match(_durationPattern);\n\n    if (_match) {\n      const _value = parseInt(_match[1], 10);\n      const _unit = _match[2].toLowerCase();\n\n      if (_unit.startsWith(\"min\")) {\n        return _value * 60;\n      }\n      return _value;\n    }\n\n    return null;\n  }\n\n  private detectVideoFormat(input: string): string | null {\n    const _formats = [\"mp4\", \"avi\", \"mov\", \"webm\", \"gif\"];\n\n    for (const _format of _formats) {\n      const _pattern = new RegExp(`\\\\b${_format}\\\\b`, \"i\");\n      if (_pattern.test(input)) {\n        return _format;\n      }\n    }\n\n    return null;\n  }\n\n  private detectTestType(input: string): string | null {\n    const types: Record<string, RegExp> = {\n      _unit: /\\b(_unit)\\b/i,\n      integration: /\\b(integration)\\b/i,\n      e2e: /\\b(e2e|end to end)\\b/i,\n      performance: /\\b(performance|perf)\\b/i,\n      snapshot: /\\b(snapshot)\\b/i,\n    };\n\n    for (const [type, _pattern] of Object.entries(types)) {\n      if (_pattern.test(input)) {\n        return type;\n      }\n    }\n\n    return null;\n  }\n\n  private detectReviewFocus(input: string): string | null {\n    const focuses: Record<string, RegExp> = {\n      performance: /\\b(performance|speed|optimization)\\b/i,\n      security: /\\b(security|vulnerability|safe)\\b/i,\n      quality: /\\b(quality|clean|maintainability)\\b/i,\n      _style: /\\b(_style|_format|convention)\\b/i,\n      bugs: /\\b(bugs?|errors?|issues?)\\b/i,\n    };\n\n    for (const [_focus, _pattern] of Object.entries(focuses)) {\n      if (_pattern.test(input)) {\n        return _focus;\n      }\n    }\n\n    return null;\n  }\n\n  private extractTargetLanguage(input: string): string | null {\n    const languageMap: Record<string, string[]> = {\n      en: [\"english\", \"\\u82F1\\u8A9E\", \"\\u82F1\\u6587\", \"영어\", \"tiếng anh\"],\n      ja: [\"japanese\", \"\\u65E5\\u672C\\u8A9E\", \"\\u65E5\\u6587\", \"일본어\", \"tiếng nhật\"],\n      cn: [\"chinese\", \"\\u4E2D\\u56FD\\u8A9E\", \"\\u4E2D\\u6587\", \"중국어\", \"tiếng trung\"],\n      ko: [\"korean\", \"\\u97D3\\u56FD\\u8A9E\", \"\\u97E9\\u6587\", \"한국어\", \"tiếng hàn\"],\n      vn: [\"vietnamese\", \"\\u30D9\\u30C8\\u30CA\\u30E0\\u8A9E\", \"\\u8D8A\\u5357\\u6587\", \"베트남어\", \"tiếng việt\"],\n    };\n\n    const _lowerInput = input.toLowerCase();\n\n    for (const [code, patterns] of Object.entries(languageMap)) {\n      for (const _pattern of patterns) {\n        if (_lowerInput.includes(_pattern)) {\n          return code;\n        }\n      }\n    }\n\n    return null;\n  }\n}\n","export interface CommandTranslation {\n  command: string;\n  name: Record<string, string>;\n  description: Record<string, string>;\n  keywords: Record<string, string[]>;\n  examples: Record<string, string[]>;\n}\n\nexport class MultilingualDictionary {\n  private dictionary: Map<string, CommandTranslation>;\n  private initialized: boolean = false;\n\n  constructor() {\n    this.dictionary = new Map();\n  }\n\n  async initialize(): Promise<void> {\n    if (this.initialized) {\n      return;\n    }\n\n    this.loadTranslations();\n    this.initialized = true;\n  }\n\n  getTranslation(\n    _command: string,\n    _language: string = \"en\",\n  ): CommandTranslation | null {\n    return this.dictionary.get(_command) ?? null;\n  }\n\n  getExplanation(_command: string, language: string = \"en\"): string {\n    const _translation = this.dictionary.get(_command);\n    if (!_translation) {\n      return `Command ${_command} not found`;\n    }\n\n    return (\n      _translation.description[language] ?? _translation.description[\"en\"] ?? \"\"\n    );\n  }\n\n  getKeywords(_command: string, language: string = \"en\"): string[] {\n    const _translation = this.dictionary.get(_command);\n    if (!_translation) {\n      return [];\n    }\n\n    return _translation.keywords[language] ?? _translation.keywords[\"en\"] ?? [];\n  }\n\n  getExamples(_command: string, language: string = \"en\"): string[] {\n    const _translation = this.dictionary.get(_command);\n    if (!_translation) {\n      return [];\n    }\n\n    return _translation.examples[language] ?? _translation.examples[\"en\"] ?? [];\n  }\n\n  getAllCommands(): string[] {\n    return Array.from(this.dictionary.keys());\n  }\n\n  private loadTranslations(): void {\n    // Core Development Commands\n    this.dictionary.set(\"/code\", {\n      command: \"/code\",\n      name: {\n        en: \"Code Generation\",\n        ja: \"\\u30B3\\u30FC\\u30C9\\u751F\\u6210\",\n        zh: \"\\u4EE3\\u7801\\u751F\\u6210\",\n        ko: \"코드 생성\",\n      },\n      description: {\n        en: \"Generate code with AI assistance\",\n        ja: \"AI\\u652F\\u63F4\\u306B\\u3088\\u308B\\u30B3\\u30FC\\u30C9\\u751F\\u6210\",\n        zh: \"\\u4F7F\\u7528AI\\u8F85\\u52A9\\u751F\\u6210\\u4EE3\\u7801\",\n        ko: \"AI 지원 코드 생성\",\n      },\n      keywords: {\n        en: [\n          \"write\",\n          \"create\",\n          \"generate\",\n          \"implement\",\n          \"build\",\n          \"code\",\n          \"program\",\n          \"develop\",\n          \"function\",\n          \"class\",\n        ],\n        ja: [\n          \"\\u30B3\\u30FC\\u30C9\",\n          \"\\u5B9F\\u88C5\",\n          \"\\u30D7\\u30ED\\u30B0\\u30E9\\u30E0\",\n          \"\\u95A2\\u6570\",\n          \"\\u30AF\\u30E9\\u30B9\",\n          \"\\u4F5C\\u6210\",\n          \"\\u958B\\u767A\",\n          \"\\u66F8\\u304F\",\n          \"\\u751F\\u6210\",\n        ],\n        zh: [\n          \"\\u4EE3\\u7801\",\n          \"\\u7F16\\u5199\",\n          \"\\u5B9E\\u73B0\",\n          \"\\u7A0B\\u5E8F\",\n          \"\\u51FD\\u6570\",\n          \"\\u7C7B\",\n          \"\\u521B\\u5EFA\",\n          \"\\u5F00\\u53D1\",\n          \"\\u751F\\u6210\",\n        ],\n        ko: [\n          \"코드\",\n          \"프로그램\",\n          \"함수\",\n          \"클래스\",\n          \"구현\",\n          \"개발\",\n          \"작성\",\n          \"생성\",\n        ],\n      },\n      examples: {\n        en: [\n          \"write a React component\",\n          \"create a REST API\",\n          \"implement user authentication\",\n        ],\n        ja: [\n          \"React\\u30B3\\u30F3\\u30DD\\u30FC\\u30CD\\u30F3\\u30C8\\u3092\\u5B9F\\u88C5\\u3057\\u3066\",\n          \"REST API\\u3092\\u4F5C\\u3063\\u3066\",\n          \"\\u30E6\\u30FC\\u30B6\\u30FC\\u8A8D\\u8A3C\\u3092\\u5B9F\\u88C5\",\n        ],\n        zh: [\"\\u5199\\u4E00\\u4E2AReact\\u7EC4\\u4EF6\", \"\\u521B\\u5EFAREST API\", \"\\u5B9E\\u73B0\\u7528\\u6237\\u8BA4\\u8BC1\"],\n        ko: [\"React 컴포넌트 작성\", \"REST API 생성\", \"사용자 인증 구현\"],\n      },\n    });\n\n    this.dictionary.set(\"/test\", {\n      command: \"/test\",\n      name: {\n        en: \"Test Generation\",\n        ja: \"\\u30C6\\u30B9\\u30C8\\u751F\\u6210\",\n        zh: \"\\u6D4B\\u8BD5\\u751F\\u6210\",\n        ko: \"테스트 생성\",\n      },\n      description: {\n        en: \"Generate and run tests\",\n        ja: \"\\u30C6\\u30B9\\u30C8\\u306E\\u751F\\u6210\\u3068\\u5B9F\\u884C\",\n        zh: \"\\u751F\\u6210\\u5E76\\u8FD0\\u884C\\u6D4B\\u8BD5\",\n        ko: \"테스트 생성 및 실행\",\n      },\n      keywords: {\n        en: [\n          \"test\",\n          \"testing\",\n          \"unit\",\n          \"integration\",\n          \"e2e\",\n          \"coverage\",\n          \"spec\",\n          \"assertion\",\n        ],\n        ja: [\"\\u30C6\\u30B9\\u30C8\", \"\\u8A66\\u9A13\", \"\\u30E6\\u30CB\\u30C3\\u30C8\", \"\\u7D71\\u5408\", \"\\u30AB\\u30D0\\u30EC\\u30C3\\u30B8\", \"\\u691C\\u8A3C\"],\n        zh: [\"\\u6D4B\\u8BD5\", \"\\u5355\\u5143\\u6D4B\\u8BD5\", \"\\u96C6\\u6210\\u6D4B\\u8BD5\", \"\\u8986\\u76D6\\u7387\", \"\\u9A8C\\u8BC1\"],\n        ko: [\"테스트\", \"단위\", \"통합\", \"커버리지\", \"검증\"],\n      },\n      examples: {\n        en: [\n          \"write unit tests\",\n          \"create integration tests\",\n          \"generate test coverage\",\n        ],\n        ja: [\n          \"\\u30E6\\u30CB\\u30C3\\u30C8\\u30C6\\u30B9\\u30C8\\u3092\\u66F8\\u3044\\u3066\",\n          \"\\u7D71\\u5408\\u30C6\\u30B9\\u30C8\\u3092\\u4F5C\\u6210\",\n          \"\\u30C6\\u30B9\\u30C8\\u30AB\\u30D0\\u30EC\\u30C3\\u30B8\\u3092\\u751F\\u6210\",\n        ],\n        zh: [\"\\u7F16\\u5199\\u5355\\u5143\\u6D4B\\u8BD5\", \"\\u521B\\u5EFA\\u96C6\\u6210\\u6D4B\\u8BD5\", \"\\u751F\\u6210\\u6D4B\\u8BD5\\u8986\\u76D6\\u7387\"],\n        ko: [\"단위 테스트 작성\", \"통합 테스트 생성\", \"테스트 커버리지 생성\"],\n      },\n    });\n\n    this.dictionary.set(\"/review\", {\n      command: \"/review\",\n      name: {\n        en: \"Code Review\",\n        ja: \"\\u30B3\\u30FC\\u30C9\\u30EC\\u30D3\\u30E5\\u30FC\",\n        zh: \"\\u4EE3\\u7801\\u5BA1\\u67E5\",\n        ko: \"코드 리뷰\",\n      },\n      description: {\n        en: \"Review code for improvements\",\n        ja: \"\\u30B3\\u30FC\\u30C9\\u306E\\u6539\\u5584\\u70B9\\u3092\\u30EC\\u30D3\\u30E5\\u30FC\",\n        zh: \"\\u5BA1\\u67E5\\u4EE3\\u7801\\u4EE5\\u8FDB\\u884C\\u6539\\u8FDB\",\n        ko: \"코드 개선사항 검토\",\n      },\n      keywords: {\n        en: [\n          \"review\",\n          \"check\",\n          \"analyze\",\n          \"improve\",\n          \"refactor\",\n          \"optimize\",\n          \"quality\",\n          \"inspect\",\n        ],\n        ja: [\n          \"\\u30EC\\u30D3\\u30E5\\u30FC\",\n          \"\\u78BA\\u8A8D\",\n          \"\\u6539\\u5584\",\n          \"\\u30EA\\u30D5\\u30A1\\u30AF\\u30BF\",\n          \"\\u6700\\u9069\\u5316\",\n          \"\\u54C1\\u8CEA\",\n          \"\\u691C\\u67FB\",\n        ],\n        zh: [\"\\u5BA1\\u67E5\", \"\\u68C0\\u67E5\", \"\\u5206\\u6790\", \"\\u6539\\u8FDB\", \"\\u91CD\\u6784\", \"\\u4F18\\u5316\", \"\\u8D28\\u91CF\"],\n        ko: [\"리뷰\", \"검토\", \"분석\", \"개선\", \"리팩토링\", \"최적화\", \"품질\"],\n      },\n      examples: {\n        en: [\n          \"review this code\",\n          \"check for improvements\",\n          \"optimize performance\",\n        ],\n        ja: [\n          \"\\u3053\\u306E\\u30B3\\u30FC\\u30C9\\u3092\\u30EC\\u30D3\\u30E5\\u30FC\\u3057\\u3066\",\n          \"\\u6539\\u5584\\u70B9\\u3092\\u78BA\\u8A8D\",\n          \"\\u30D1\\u30D5\\u30A9\\u30FC\\u30DE\\u30F3\\u30B9\\u3092\\u6700\\u9069\\u5316\",\n        ],\n        zh: [\"\\u5BA1\\u67E5\\u8FD9\\u6BB5\\u4EE3\\u7801\", \"\\u68C0\\u67E5\\u6539\\u8FDB\\u70B9\", \"\\u4F18\\u5316\\u6027\\u80FD\"],\n        ko: [\"이 코드 리뷰\", \"개선사항 확인\", \"성능 최적화\"],\n      },\n    });\n\n    // Media Generation Commands\n    this.dictionary.set(\"/image\", {\n      command: \"/image\",\n      name: {\n        en: \"Image Generation\",\n        ja: \"\\u753B\\u50CF\\u751F\\u6210\",\n        zh: \"\\u56FE\\u50CF\\u751F\\u6210\",\n        ko: \"이미지 생성\",\n      },\n      description: {\n        en: \"Generate images with AI\",\n        ja: \"AI\\u306B\\u3088\\u308B\\u753B\\u50CF\\u751F\\u6210\",\n        zh: \"\\u4F7F\\u7528AI\\u751F\\u6210\\u56FE\\u50CF\",\n        ko: \"AI 이미지 생성\",\n      },\n      keywords: {\n        en: [\n          \"image\",\n          \"picture\",\n          \"photo\",\n          \"draw\",\n          \"illustration\",\n          \"visual\",\n          \"graphic\",\n          \"art\",\n          \"design\",\n          \"create\",\n        ],\n        ja: [\n          \"\\u753B\\u50CF\",\n          \"\\u30A4\\u30E1\\u30FC\\u30B8\",\n          \"\\u7D75\",\n          \"\\u30A4\\u30E9\\u30B9\\u30C8\",\n          \"\\u30D3\\u30B8\\u30E5\\u30A2\\u30EB\",\n          \"\\u63CF\\u304F\",\n          \"\\u751F\\u6210\",\n          \"\\u30C7\\u30B6\\u30A4\\u30F3\",\n        ],\n        zh: [\"\\u56FE\\u50CF\", \"\\u56FE\\u7247\", \"\\u63D2\\u56FE\", \"\\u753B\", \"\\u751F\\u6210\", \"\\u521B\\u5EFA\", \"\\u89C6\\u89C9\", \"\\u8BBE\\u8BA1\"],\n        ko: [\n          \"이미지\",\n          \"그림\",\n          \"일러스트\",\n          \"생성\",\n          \"그리기\",\n          \"디자인\",\n          \"비주얼\",\n        ],\n      },\n      examples: {\n        en: [\"create an image of sunset\", \"draw a cat\", \"generate logo design\"],\n        ja: [\"\\u5915\\u65E5\\u306E\\u753B\\u50CF\\u3092\\u751F\\u6210\", \"\\u732B\\u3092\\u63CF\\u3044\\u3066\", \"\\u30ED\\u30B4\\u30C7\\u30B6\\u30A4\\u30F3\\u3092\\u751F\\u6210\"],\n        zh: [\"\\u521B\\u5EFA\\u65E5\\u843D\\u56FE\\u50CF\", \"\\u753B\\u4E00\\u53EA\\u732B\", \"\\u751F\\u6210logo\\u8BBE\\u8BA1\"],\n        ko: [\"일몰 이미지 생성\", \"고양이 그리기\", \"로고 디자인 생성\"],\n      },\n    });\n\n    this.dictionary.set(\"/video\", {\n      command: \"/video\",\n      name: {\n        en: \"Video Generation\",\n        ja: \"\\u52D5\\u753B\\u751F\\u6210\",\n        zh: \"\\u89C6\\u9891\\u751F\\u6210\",\n        ko: \"비디오 생성\",\n      },\n      description: {\n        en: \"Generate videos with AI\",\n        ja: \"AI\\u306B\\u3088\\u308B\\u52D5\\u753B\\u751F\\u6210\",\n        zh: \"\\u4F7F\\u7528AI\\u751F\\u6210\\u89C6\\u9891\",\n        ko: \"AI 비디오 생성\",\n      },\n      keywords: {\n        en: [\n          \"video\",\n          \"movie\",\n          \"animation\",\n          \"clip\",\n          \"film\",\n          \"animate\",\n          \"motion\",\n          \"render\",\n        ],\n        ja: [\n          \"\\u52D5\\u753B\",\n          \"\\u30D3\\u30C7\\u30AA\",\n          \"\\u30A2\\u30CB\\u30E1\\u30FC\\u30B7\\u30E7\\u30F3\",\n          \"\\u30E0\\u30FC\\u30D3\\u30FC\",\n          \"\\u6620\\u50CF\",\n          \"\\u4F5C\\u6210\",\n          \"\\u751F\\u6210\",\n        ],\n        zh: [\"\\u89C6\\u9891\", \"\\u52A8\\u753B\", \"\\u5F71\\u7247\", \"\\u521B\\u5EFA\", \"\\u751F\\u6210\", \"\\u5236\\u4F5C\", \"\\u6E32\\u67D3\"],\n        ko: [\"비디오\", \"동영상\", \"애니메이션\", \"생성\", \"제작\", \"렌더링\"],\n      },\n      examples: {\n        en: [\n          \"create a video intro\",\n          \"generate animation\",\n          \"make a tutorial video\",\n        ],\n        ja: [\n          \"\\u52D5\\u753B\\u30A4\\u30F3\\u30C8\\u30ED\\u3092\\u4F5C\\u6210\",\n          \"\\u30A2\\u30CB\\u30E1\\u30FC\\u30B7\\u30E7\\u30F3\\u3092\\u751F\\u6210\",\n          \"\\u30C1\\u30E5\\u30FC\\u30C8\\u30EA\\u30A2\\u30EB\\u52D5\\u753B\\u3092\\u4F5C\\u308B\",\n        ],\n        zh: [\"\\u521B\\u5EFA\\u89C6\\u9891\\u4ECB\\u7ECD\", \"\\u751F\\u6210\\u52A8\\u753B\", \"\\u5236\\u4F5C\\u6559\\u7A0B\\u89C6\\u9891\"],\n        ko: [\"비디오 인트로 생성\", \"애니메이션 제작\", \"튜토리얼 비디오 만들기\"],\n      },\n    });\n\n    this.dictionary.set(\"/avatar\", {\n      command: \"/avatar\",\n      name: {\n        en: \"Avatar Display\",\n        ja: \"\\u30A2\\u30D0\\u30BF\\u30FC\\u8868\\u793A\",\n        zh: \"\\u5934\\u50CF\\u663E\\u793A\",\n        ko: \"아바타 표시\",\n      },\n      description: {\n        en: \"Display ASCII art avatar\",\n        ja: \"ASCII\\u30A2\\u30FC\\u30C8\\u30A2\\u30D0\\u30BF\\u30FC\\u3092\\u8868\\u793A\",\n        zh: \"\\u663E\\u793AASCII\\u827A\\u672F\\u5934\\u50CF\",\n        ko: \"ASCII 아트 아바타 표시\",\n      },\n      keywords: {\n        en: [\"avatar\", \"character\", \"ascii\", \"art\", \"display\", \"show\"],\n        ja: [\"\\u30A2\\u30D0\\u30BF\\u30FC\", \"\\u30AD\\u30E3\\u30E9\\u30AF\\u30BF\\u30FC\", \"\\u30A2\\u30B9\\u30AD\\u30FC\", \"\\u30A2\\u30FC\\u30C8\", \"\\u8868\\u793A\"],\n        zh: [\"\\u5934\\u50CF\", \"\\u89D2\\u8272\", \"ASCII\", \"\\u827A\\u672F\", \"\\u663E\\u793A\"],\n        ko: [\"아바타\", \"캐릭터\", \"ASCII\", \"아트\", \"표시\"],\n      },\n      examples: {\n        en: [\"show avatar\", \"display character\", \"ascii art\"],\n        ja: [\"\\u30A2\\u30D0\\u30BF\\u30FC\\u3092\\u8868\\u793A\", \"\\u30AD\\u30E3\\u30E9\\u30AF\\u30BF\\u30FC\\u3092\\u898B\\u305B\\u3066\", \"\\u30A2\\u30B9\\u30AD\\u30FC\\u30A2\\u30FC\\u30C8\"],\n        zh: [\"\\u663E\\u793A\\u5934\\u50CF\", \"\\u5C55\\u793A\\u89D2\\u8272\", \"ASCII\\u827A\\u672F\"],\n        ko: [\"아바타 보기\", \"캐릭터 표시\", \"ASCII 아트\"],\n      },\n    });\n\n    this.dictionary.set(\"/voice\", {\n      command: \"/voice\",\n      name: {\n        en: \"Voice Interaction\",\n        ja: \"\\u97F3\\u58F0\\u5BFE\\u8A71\",\n        zh: \"\\u8BED\\u97F3\\u4EA4\\u4E92\",\n        ko: \"음성 상호작용\",\n      },\n      description: {\n        en: \"Voice-based interaction\",\n        ja: \"\\u97F3\\u58F0\\u30D9\\u30FC\\u30B9\\u306E\\u5BFE\\u8A71\",\n        zh: \"\\u57FA\\u4E8E\\u8BED\\u97F3\\u7684\\u4EA4\\u4E92\",\n        ko: \"음성 기반 상호작용\",\n      },\n      keywords: {\n        en: [\"voice\", \"speak\", \"talk\", \"audio\", \"speech\", \"sound\"],\n        ja: [\"\\u97F3\\u58F0\", \"\\u8A71\\u3059\", \"\\u4F1A\\u8A71\", \"\\u30AA\\u30FC\\u30C7\\u30A3\\u30AA\", \"\\u30B9\\u30D4\\u30FC\\u30C1\"],\n        zh: [\"\\u8BED\\u97F3\", \"\\u8BF4\\u8BDD\", \"\\u5BF9\\u8BDD\", \"\\u97F3\\u9891\", \"\\u8BED\\u97F3\"],\n        ko: [\"음성\", \"말하기\", \"대화\", \"오디오\", \"스피치\"],\n      },\n      examples: {\n        en: [\"talk to me\", \"voice command\", \"speak the response\"],\n        ja: [\"\\u8A71\\u3057\\u304B\\u3051\\u3066\", \"\\u97F3\\u58F0\\u30B3\\u30DE\\u30F3\\u30C9\", \"\\u5FDC\\u7B54\\u3092\\u8A71\\u3057\\u3066\"],\n        zh: [\"\\u548C\\u6211\\u8BF4\\u8BDD\", \"\\u8BED\\u97F3\\u547D\\u4EE4\", \"\\u8BF4\\u51FA\\u56DE\\u5E94\"],\n        ko: [\"대화하기\", \"음성 명령\", \"응답 말하기\"],\n      },\n    });\n\n    // Add remaining commands...\n    // Project Management Commands\n    this.dictionary.set(\"/init\", {\n      command: \"/init\",\n      name: {\n        en: \"Initialize Project\",\n        ja: \"\\u30D7\\u30ED\\u30B8\\u30A7\\u30AF\\u30C8\\u521D\\u671F\\u5316\",\n        zh: \"\\u521D\\u59CB\\u5316\\u9879\\u76EE\",\n        ko: \"프로젝트 초기화\",\n      },\n      description: {\n        en: \"Initialize a new project\",\n        ja: \"\\u65B0\\u3057\\u3044\\u30D7\\u30ED\\u30B8\\u30A7\\u30AF\\u30C8\\u3092\\u521D\\u671F\\u5316\",\n        zh: \"\\u521D\\u59CB\\u5316\\u65B0\\u9879\\u76EE\",\n        ko: \"새 프로젝트 초기화\",\n      },\n      keywords: {\n        en: [\n          \"init\",\n          \"initialize\",\n          \"setup\",\n          \"create\",\n          \"start\",\n          \"project\",\n          \"new\",\n        ],\n        ja: [\"\\u521D\\u671F\\u5316\", \"\\u30BB\\u30C3\\u30C8\\u30A2\\u30C3\\u30D7\", \"\\u4F5C\\u6210\", \"\\u958B\\u59CB\", \"\\u30D7\\u30ED\\u30B8\\u30A7\\u30AF\\u30C8\", \"\\u65B0\\u898F\"],\n        zh: [\"\\u521D\\u59CB\\u5316\", \"\\u8BBE\\u7F6E\", \"\\u521B\\u5EFA\", \"\\u542F\\u52A8\", \"\\u9879\\u76EE\", \"\\u65B0\\u5EFA\"],\n        ko: [\"초기화\", \"설정\", \"생성\", \"시작\", \"프로젝트\", \"신규\"],\n      },\n      examples: {\n        en: [\n          \"initialize new project\",\n          \"setup React app\",\n          \"create new workspace\",\n        ],\n        ja: [\n          \"\\u65B0\\u30D7\\u30ED\\u30B8\\u30A7\\u30AF\\u30C8\\u3092\\u521D\\u671F\\u5316\",\n          \"React\\u30A2\\u30D7\\u30EA\\u3092\\u30BB\\u30C3\\u30C8\\u30A2\\u30C3\\u30D7\",\n          \"\\u65B0\\u30EF\\u30FC\\u30AF\\u30B9\\u30DA\\u30FC\\u30B9\\u3092\\u4F5C\\u6210\",\n        ],\n        zh: [\"\\u521D\\u59CB\\u5316\\u65B0\\u9879\\u76EE\", \"\\u8BBE\\u7F6EReact\\u5E94\\u7528\", \"\\u521B\\u5EFA\\u65B0\\u5DE5\\u4F5C\\u7A7A\\u95F4\"],\n        ko: [\"새 프로젝트 초기화\", \"React 앱 설정\", \"새 워크스페이스 생성\"],\n      },\n    });\n\n    // System Commands\n    this.dictionary.set(\"/help\", {\n      command: \"/help\",\n      name: {\n        en: \"Help\",\n        ja: \"\\u30D8\\u30EB\\u30D7\",\n        zh: \"\\u5E2E\\u52A9\",\n        ko: \"도움말\",\n      },\n      description: {\n        en: \"Show help and available commands\",\n        ja: \"\\u30D8\\u30EB\\u30D7\\u3068\\u5229\\u7528\\u53EF\\u80FD\\u306A\\u30B3\\u30DE\\u30F3\\u30C9\\u3092\\u8868\\u793A\",\n        zh: \"\\u663E\\u793A\\u5E2E\\u52A9\\u548C\\u53EF\\u7528\\u547D\\u4EE4\",\n        ko: \"도움말 및 사용 가능한 명령 표시\",\n      },\n      keywords: {\n        en: [\"help\", \"guide\", \"manual\", \"documentation\", \"usage\", \"commands\"],\n        ja: [\n          \"\\u30D8\\u30EB\\u30D7\",\n          \"\\u30AC\\u30A4\\u30C9\",\n          \"\\u30DE\\u30CB\\u30E5\\u30A2\\u30EB\",\n          \"\\u30C9\\u30AD\\u30E5\\u30E1\\u30F3\\u30C8\",\n          \"\\u4F7F\\u3044\\u65B9\",\n          \"\\u30B3\\u30DE\\u30F3\\u30C9\",\n        ],\n        zh: [\"\\u5E2E\\u52A9\", \"\\u6307\\u5357\", \"\\u624B\\u518C\", \"\\u6587\\u6863\", \"\\u7528\\u6CD5\", \"\\u547D\\u4EE4\"],\n        ko: [\"도움말\", \"가이드\", \"매뉴얼\", \"문서\", \"사용법\", \"명령\"],\n      },\n      examples: {\n        en: [\"show help\", \"list commands\", \"how to use\"],\n        ja: [\"\\u30D8\\u30EB\\u30D7\\u3092\\u8868\\u793A\", \"\\u30B3\\u30DE\\u30F3\\u30C9\\u4E00\\u89A7\", \"\\u4F7F\\u3044\\u65B9\"],\n        zh: [\"\\u663E\\u793A\\u5E2E\\u52A9\", \"\\u5217\\u51FA\\u547D\\u4EE4\", \"\\u5982\\u4F55\\u4F7F\\u7528\"],\n        ko: [\"도움말 표시\", \"명령 목록\", \"사용 방법\"],\n      },\n    });\n\n    this.dictionary.set(\"/exit\", {\n      command: \"/exit\",\n      name: {\n        en: \"Exit\",\n        ja: \"\\u7D42\\u4E86\",\n        zh: \"\\u9000\\u51FA\",\n        ko: \"종료\",\n      },\n      description: {\n        en: \"Exit the session\",\n        ja: \"\\u30BB\\u30C3\\u30B7\\u30E7\\u30F3\\u3092\\u7D42\\u4E86\",\n        zh: \"\\u9000\\u51FA\\u4F1A\\u8BDD\",\n        ko: \"세션 종료\",\n      },\n      keywords: {\n        en: [\"exit\", \"quit\", \"close\", \"end\", \"bye\", \"goodbye\", \"stop\"],\n        ja: [\"\\u7D42\\u4E86\", \"\\u9000\\u51FA\", \"\\u9589\\u3058\\u308B\", \"\\u30D0\\u30A4\\u30D0\\u30A4\", \"\\u3055\\u3088\\u3046\\u306A\\u3089\", \"\\u6B62\\u3081\\u308B\"],\n        zh: [\"\\u9000\\u51FA\", \"\\u7ED3\\u675F\", \"\\u5173\\u95ED\", \"\\u518D\\u89C1\", \"\\u505C\\u6B62\"],\n        ko: [\"종료\", \"나가기\", \"닫기\", \"끝\", \"정지\"],\n      },\n      examples: {\n        en: [\"exit session\", \"quit app\", \"goodbye\"],\n        ja: [\"\\u30BB\\u30C3\\u30B7\\u30E7\\u30F3\\u7D42\\u4E86\", \"\\u30A2\\u30D7\\u30EA\\u3092\\u9589\\u3058\\u308B\", \"\\u3055\\u3088\\u3046\\u306A\\u3089\"],\n        zh: [\"\\u9000\\u51FA\\u4F1A\\u8BDD\", \"\\u5173\\u95ED\\u5E94\\u7528\", \"\\u518D\\u89C1\"],\n        ko: [\"세션 종료\", \"앱 종료\", \"안녕\"],\n      },\n    });\n\n    // Add more commands as needed...\n  }\n}\n","export type SupportedLanguage = \"en\" | \"ja\" | \"cn\" | \"ko\" | \"vn\";\r\n\r\ninterface LanguageScore {\r\n  language: SupportedLanguage;\r\n  score: number;\r\n}\r\n\r\nexport class LanguageDetector {\r\n  private languagePatterns: Map<SupportedLanguage, RegExp[]>;\r\n  private characterRanges: Map<SupportedLanguage, RegExp[]>;\r\n\r\n  constructor() {\r\n    this.languagePatterns = new Map();\r\n    this.characterRanges = new Map();\r\n    this.initializePatterns();\r\n  }\r\n\r\n  async detect(text: string): Promise<SupportedLanguage> {\r\n    const scores = this.calculateScores(text);\r\n\r\n    // Sort by score descending\r\n    scores.sort((a, b): number => b.score - a.score);\r\n\r\n    // If the top score is significantly higher, use it\r\n    if (scores.length > 0 && scores[0]?.score && scores[0].score > 0) {\r\n      return scores[0].language;\r\n    }\r\n\r\n    // Default to English\r\n    return \"en\";\r\n  }\r\n\r\n  private calculateScores(text: string): LanguageScore[] {\r\n    const scores: LanguageScore[] = [\r\n      { language: \"en\", score: 0 },\r\n      { language: \"ja\", score: 0 },\r\n      { language: \"cn\", score: 0 },\r\n      { language: \"ko\", score: 0 },\r\n      { language: \"vn\", score: 0 },\r\n    ];\r\n\r\n    // Character-based detection\r\n    this.characterRanges.forEach((patterns, language): void => {\r\n      patterns.forEach((pattern): void => {\r\n        const matches = text.match(pattern);\r\n        if (matches) {\r\n          const score = scores.find((s): boolean => s.language === language);\r\n          if (score) {\r\n            score.score += matches.length * 2;\r\n          }\r\n        }\r\n      });\r\n    });\r\n\r\n    // Pattern-based detection for more accuracy\r\n    this.languagePatterns.forEach((patterns, language): void => {\r\n      patterns.forEach((pattern): void => {\r\n        if (pattern.test(text)) {\r\n          const score = scores.find((s): boolean => s.language === language);\r\n          if (score) {\r\n            score.score += 3;\r\n          }\r\n        }\r\n      });\r\n    });\r\n\r\n    // Check for English words (common programming terms)\r\n    const englishTerms =\r\n      /\\b(function|class|const|let|var|if|else|for|while|return|import|export|async|await|create|make|generate|write|code|test|review)\\b/i;\r\n    if (englishTerms.test(text)) {\r\n      const englishScore = scores.find((s): boolean => s.language === \"en\");\r\n      if (englishScore) {\r\n        englishScore.score += 5;\r\n      }\r\n    }\r\n\r\n    // Normalize scores\r\n    const totalChars = text.length;\r\n    scores.forEach((score): void => {\r\n      if (totalChars > 0) {\r\n        score.score = (score.score / totalChars) * 100;\r\n      }\r\n    });\r\n\r\n    return scores;\r\n  }\r\n\r\n  private initializePatterns(): void {\r\n    // Japanese patterns\r\n    this.characterRanges.set(\"ja\", [\r\n      /[\\u3040-\\u309f]/g, // Hiragana\r\n      /[\\u30a0-\\u30ff]/g, // Katakana\r\n      /[\\u4e00-\\u9faf]/g, // Kanji (also used in Chinese)\r\n    ]);\r\n\r\n    this.languagePatterns.set(\"ja\", [\r\n      /[\\u3041-\\u3093]/, // Hiragana check\r\n      /[\\u30A1-\\u30F4]/, // Katakana check\r\n      /\\u3067\\u3059|\\u307E\\u3059|\\u304F\\u3060\\u3055\\u3044|\\u3057\\u3066/, // Common endings\r\n      /\\u306F|\\u304C|\\u3092|\\u306B|\\u3067|\\u3068|\\u306E|\\u304B\\u3089|\\u307E\\u3067/, // Particles\r\n    ]);\r\n\r\n    // Chinese patterns\r\n    this.characterRanges.set(\"cn\", [\r\n      /[\\u4e00-\\u9faf]/g, // Chinese characters\r\n    ]);\r\n\r\n    this.languagePatterns.set(\"cn\", [\r\n      /\\u7684|\\u4E86|\\u662F|\\u5728|\\u6709|\\u548C|\\u4E0D|\\u4EBA|\\u6211|\\u4F60|\\u4ED6|\\u5979/, // Common Chinese characters\r\n      /\\u8FD9|\\u90A3|\\u4EC0\\u4E48|\\u600E\\u4E48|\\u4E3A\\u4EC0\\u4E48/, // Common question words\r\n      /\\u5417|\\u5462|\\u5427|\\u554A/, // Sentence particles\r\n    ]);\r\n\r\n    // Korean patterns\r\n    this.characterRanges.set(\"ko\", [\r\n      /[\\uac00-\\ud7af]/g, // Hangul syllables\r\n      /[\\u1100-\\u11ff]/g, // Hangul Jamo\r\n      /[\\u3130-\\u318f]/g, // Hangul compatibility Jamo\r\n    ]);\r\n\r\n    this.languagePatterns.set(\"ko\", [\r\n      /[가-힣]/, // Hangul check\r\n      /입니다|습니다|합니다/, // Formal endings\r\n      /을|를|이|가|은|는|의/, // Particles\r\n    ]);\r\n\r\n    // Vietnamese patterns\r\n    this.characterRanges.set(\"vn\", [\r\n      /[a-zA-Zàáảãạăằắẳẵặâầấẩẫậđèéẻẽẹêềếểễệìíỉĩịòóỏõọôồốổỗộơờớởỡợùúủũụưừứửữựỳýỷỹỵ]/g, // Vietnamese with tones\r\n    ]);\r\n\r\n    this.languagePatterns.set(\"vn\", [\r\n      /[àáảãạăằắẳẵặâầấẩẫậđèéẻẽẹêềếểễệìíỉĩịòóỏõọôồốổỗộơờớởỡợùúủũụưừứửữựỳýỷỹỵ]/, // Vietnamese tones\r\n      /và|của|là|có|được|trong|với|này|cho|để/, // Common Vietnamese words\r\n      /không|nhưng|cũng|như|từ|đến|sau|trước/, // More common words\r\n    ]);\r\n\r\n    // English patterns\r\n    this.characterRanges.set(\"en\", [\r\n      /[a-zA-Z]/g, // Latin alphabet\r\n    ]);\r\n\r\n    this.languagePatterns.set(\"en\", [\r\n      /\\b(the|be|to|of|and|a|in|that|have|I|it|for|not|on|with|he|as|you|do|at)\\b/i, // Common English words\r\n      /\\b(this|but|his|by|from|they|we|say|her|she|or|an|will|my|one|all|would|there|their)\\b/i,\r\n    ]);\r\n  }\r\n\r\n  getLanguageName(code: SupportedLanguage): string {\r\n    const names: Record<SupportedLanguage, string> = {\r\n      en: \"English\",\r\n      ja: \"Japanese\",\r\n      cn: \"Chinese\",\r\n      ko: \"Korean\",\r\n      vn: \"Vietnamese\",\r\n    };\r\n    return names[code] || \"Unknown\";\r\n  }\r\n\r\n  isSupported(languageCode: string): languageCode is SupportedLanguage {\r\n    return [\"en\", \"ja\", \"cn\", \"ko\", \"vn\"].includes(languageCode);\r\n  }\r\n}\r\n","import { MultilingualDictionary } from \"../analysis/MultilingualDictionary\";\r\n\r\nexport interface CommandMapping {\r\n  command: string;\r\n  naturalPhrases: Map<string, string[]>;\r\n  priority: number;\r\n}\r\n\r\nexport class CommandMappings {\r\n  private mappings: CommandMapping[];\r\n  private dictionary: MultilingualDictionary;\r\n  private initialized: boolean = false;\r\n\r\n  constructor() {\r\n    this.mappings = [];\r\n    this.dictionary = new MultilingualDictionary();\r\n  }\r\n\r\n  async initialize(): Promise<void> {\r\n    if (this.initialized) {\r\n      return;\r\n    }\r\n\r\n    await this.dictionary.initialize();\r\n    this.loadMappings();\r\n    this.initialized = true;\r\n  }\r\n\r\n  async getSuggestions(\r\n    _input: string,\r\n    language: string,\r\n    maxResults: number = 5,\r\n  ): Promise<string[]> {\r\n    const _lowerInput = _input.toLowerCase();\r\n    const suggestions: Array<{ command: string; score: number }> = [];\r\n\r\n    for (const mapping of this.mappings) {\r\n      const _phrases =\r\n        mapping.naturalPhrases.get(language) ??\r\n        mapping.naturalPhrases.get(\"en\") ??\r\n        [];\r\n      let score = 0;\r\n\r\n      for (const phrase of _phrases) {\r\n        if (phrase.toLowerCase().includes(_lowerInput)) {\r\n          score += 2;\r\n        }\r\n        if (phrase.toLowerCase().startsWith(_lowerInput)) {\r\n          score += 3;\r\n        }\r\n      }\r\n\r\n      // Check command name match\r\n      if (mapping.command.toLowerCase().includes(_lowerInput)) {\r\n        score += 5;\r\n      }\r\n\r\n      if (score > 0) {\r\n        suggestions.push({\r\n          command: mapping.command,\r\n          score: score * mapping.priority,\r\n        });\r\n      }\r\n    }\r\n\r\n    // Sort by score and return top results\r\n    return suggestions\r\n      .sort((a, b): number => b.score - a.score)\r\n      .slice(0, maxResults)\r\n      .map((s): string => s.command);\r\n  }\r\n\r\n  getCommandForPhrase(_phrase: string, language: string): string | null {\r\n    const _lowerPhrase = _phrase.toLowerCase();\r\n\r\n    for (const mapping of this.mappings) {\r\n      const _phrases =\r\n        mapping.naturalPhrases.get(language) ??\r\n        mapping.naturalPhrases.get(\"en\") ??\r\n        [];\r\n\r\n      for (const naturalPhrase of _phrases) {\r\n        if (_lowerPhrase.includes(naturalPhrase.toLowerCase())) {\r\n          return mapping.command;\r\n        }\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  private loadMappings(): void {\r\n    // Core Development Commands\r\n    this.mappings.push({\r\n      command: \"/code\",\r\n      naturalPhrases: new Map([\r\n        [\r\n          \"en\",\r\n          [\r\n            \"write code\",\r\n            \"create code\",\r\n            \"generate code\",\r\n            \"implement\",\r\n            \"build function\",\r\n            \"develop\",\r\n          ],\r\n        ],\r\n        [\r\n          \"ja\",\r\n          [\r\n            \"\\u30B3\\u30FC\\u30C9\\u3092\\u66F8\\u3044\\u3066\",\r\n            \"\\u5B9F\\u88C5\\u3057\\u3066\",\r\n            \"\\u30D7\\u30ED\\u30B0\\u30E9\\u30E0\\u3092\\u4F5C\\u3063\\u3066\",\r\n            \"\\u95A2\\u6570\\u3092\\u66F8\\u3044\\u3066\",\r\n            \"\\u30AF\\u30E9\\u30B9\\u3092\\u4F5C\\u6210\",\r\n          ],\r\n        ],\r\n        [\"cn\", [\"\\u5199\\u4EE3\\u7801\", \"\\u7F16\\u5199\\u4EE3\\u7801\", \"\\u5B9E\\u73B0\", \"\\u521B\\u5EFA\\u51FD\\u6570\", \"\\u6784\\u5EFA\\u7C7B\"]],\r\n        [\"ko\", [\"코드 작성\", \"구현해줘\", \"함수 만들어\", \"클래스 생성\"]],\r\n        [\"vn\", [\"viết mã\", \"tạo code\", \"xây dựng hàm\", \"phát triển\"]],\r\n      ]),\r\n      priority: 1.0,\r\n    });\r\n\r\n    this.mappings.push({\r\n      command: \"/test\",\r\n      naturalPhrases: new Map([\r\n        [\r\n          \"en\",\r\n          [\r\n            \"write test\",\r\n            \"create test\",\r\n            \"generate test\",\r\n            \"unit test\",\r\n            \"test this\",\r\n          ],\r\n        ],\r\n        [\r\n          \"ja\",\r\n          [\"\\u30C6\\u30B9\\u30C8\\u3092\\u66F8\\u3044\\u3066\", \"\\u30C6\\u30B9\\u30C8\\u4F5C\\u6210\", \"\\u30E6\\u30CB\\u30C3\\u30C8\\u30C6\\u30B9\\u30C8\", \"\\u30C6\\u30B9\\u30C8\\u3057\\u3066\"],\r\n        ],\r\n        [\"cn\", [\"\\u5199\\u6D4B\\u8BD5\", \"\\u521B\\u5EFA\\u6D4B\\u8BD5\", \"\\u5355\\u5143\\u6D4B\\u8BD5\", \"\\u6D4B\\u8BD5\\u8FD9\\u4E2A\"]],\r\n        [\"ko\", [\"테스트 작성\", \"테스트 생성\", \"단위 테스트\"]],\r\n        [\"vn\", [\"viết kiểm tra\", \"tạo test\", \"kiểm tra đơn vị\"]],\r\n      ]),\r\n      priority: 0.9,\r\n    });\r\n\r\n    this.mappings.push({\r\n      command: \"/review\",\r\n      naturalPhrases: new Map([\r\n        [\"en\", [\"review code\", \"check code\", \"analyze\", \"improve\", \"refactor\"]],\r\n        [\"ja\", [\"\\u30B3\\u30FC\\u30C9\\u30EC\\u30D3\\u30E5\\u30FC\", \"\\u78BA\\u8A8D\\u3057\\u3066\", \"\\u6539\\u5584\\u3057\\u3066\", \"\\u30EA\\u30D5\\u30A1\\u30AF\\u30BF\\u30EA\\u30F3\\u30B0\"]],\r\n        [\"cn\", [\"\\u4EE3\\u7801\\u5BA1\\u67E5\", \"\\u68C0\\u67E5\\u4EE3\\u7801\", \"\\u6539\\u8FDB\", \"\\u91CD\\u6784\"]],\r\n        [\"ko\", [\"코드 리뷰\", \"검토해줘\", \"개선해줘\", \"리팩토링\"]],\r\n        [\"vn\", [\"xem xét mã\", \"kiểm tra code\", \"cải thiện\", \"tái cấu trúc\"]],\r\n      ]),\r\n      priority: 0.9,\r\n    });\r\n\r\n    // Media Generation Commands\r\n    this.mappings.push({\r\n      command: \"/image\",\r\n      naturalPhrases: new Map([\r\n        [\r\n          \"en\",\r\n          [\r\n            \"create image\",\r\n            \"generate image\",\r\n            \"draw picture\",\r\n            \"make illustration\",\r\n            \"design graphic\",\r\n          ],\r\n        ],\r\n        [\r\n          \"ja\",\r\n          [\"\\u753B\\u50CF\\u3092\\u751F\\u6210\", \"\\u30A4\\u30E1\\u30FC\\u30B8\\u3092\\u4F5C\\u3063\\u3066\", \"\\u7D75\\u3092\\u63CF\\u3044\\u3066\", \"\\u30A4\\u30E9\\u30B9\\u30C8\\u3092\\u4F5C\\u6210\"],\r\n        ],\r\n        [\"cn\", [\"\\u751F\\u6210\\u56FE\\u50CF\", \"\\u521B\\u5EFA\\u56FE\\u7247\", \"\\u753B\\u4E00\\u5E45\\u753B\", \"\\u5236\\u4F5C\\u63D2\\u56FE\"]],\r\n        [\"ko\", [\"이미지 생성\", \"그림 그려줘\", \"일러스트 만들어\"]],\r\n        [\"vn\", [\"tạo hình ảnh\", \"vẽ tranh\", \"làm minh họa\"]],\r\n      ]),\r\n      priority: 1.0,\r\n    });\r\n\r\n    this.mappings.push({\r\n      command: \"/video\",\r\n      naturalPhrases: new Map([\r\n        [\r\n          \"en\",\r\n          [\"create video\", \"generate video\", \"make animation\", \"produce movie\"],\r\n        ],\r\n        [\"ja\", [\"\\u52D5\\u753B\\u3092\\u4F5C\\u3063\\u3066\", \"\\u30D3\\u30C7\\u30AA\\u3092\\u751F\\u6210\", \"\\u30A2\\u30CB\\u30E1\\u30FC\\u30B7\\u30E7\\u30F3\\u3092\\u4F5C\\u6210\"]],\r\n        [\"cn\", [\"\\u521B\\u5EFA\\u89C6\\u9891\", \"\\u751F\\u6210\\u52A8\\u753B\", \"\\u5236\\u4F5C\\u5F71\\u7247\"]],\r\n        [\"ko\", [\"비디오 생성\", \"동영상 만들어\", \"애니메이션 제작\"]],\r\n        [\"vn\", [\"tạo video\", \"làm hoạt hình\", \"sản xuất phim\"]],\r\n      ]),\r\n      priority: 1.0,\r\n    });\r\n\r\n    this.mappings.push({\r\n      command: \"/avatar\",\r\n      naturalPhrases: new Map([\r\n        [\"en\", [\"show avatar\", \"display character\", \"ascii art\"]],\r\n        [\"ja\", [\"\\u30A2\\u30D0\\u30BF\\u30FC\\u8868\\u793A\", \"\\u30AD\\u30E3\\u30E9\\u30AF\\u30BF\\u30FC\\u898B\\u305B\\u3066\", \"\\u30A2\\u30B9\\u30AD\\u30FC\\u30A2\\u30FC\\u30C8\"]],\r\n        [\"cn\", [\"\\u663E\\u793A\\u5934\\u50CF\", \"\\u5C55\\u793A\\u89D2\\u8272\", \"ASCII\\u827A\\u672F\"]],\r\n        [\"ko\", [\"아바타 보기\", \"캐릭터 표시\"]],\r\n        [\"vn\", [\"hiển thị avatar\", \"xem nhân vật\"]],\r\n      ]),\r\n      priority: 0.7,\r\n    });\r\n\r\n    this.mappings.push({\r\n      command: \"/voice\",\r\n      naturalPhrases: new Map([\r\n        [\"en\", [\"talk to me\", \"voice command\", \"speak\"]],\r\n        [\"ja\", [\"\\u8A71\\u3057\\u304B\\u3051\\u3066\", \"\\u97F3\\u58F0\\u30B3\\u30DE\\u30F3\\u30C9\", \"\\u8A71\\u3057\\u3066\"]],\r\n        [\"cn\", [\"\\u548C\\u6211\\u8BF4\\u8BDD\", \"\\u8BED\\u97F3\\u547D\\u4EE4\", \"\\u8BF4\\u8BDD\"]],\r\n        [\"ko\", [\"대화하기\", \"음성 명령\"]],\r\n        [\"vn\", [\"nói chuyện\", \"lệnh giọng nói\"]],\r\n      ]),\r\n      priority: 0.7,\r\n    });\r\n\r\n    // Configuration Commands\r\n    this.mappings.push({\r\n      command: \"/setup\",\r\n      naturalPhrases: new Map([\r\n        [\"en\", [\"setup system\", \"initial setup\", \"configure\"]],\r\n        [\"ja\", [\"\\u30BB\\u30C3\\u30C8\\u30A2\\u30C3\\u30D7\", \"\\u521D\\u671F\\u8A2D\\u5B9A\", \"\\u74B0\\u5883\\u69CB\\u7BC9\"]],\r\n        [\"cn\", [\"\\u8BBE\\u7F6E\\u7CFB\\u7EDF\", \"\\u521D\\u59CB\\u8BBE\\u7F6E\", \"\\u914D\\u7F6E\"]],\r\n        [\"ko\", [\"설정\", \"초기 설정\", \"환경 구축\"]],\r\n        [\"vn\", [\"thiết lập\", \"cài đặt ban đầu\"]],\r\n      ]),\r\n      priority: 0.8,\r\n    });\r\n\r\n    this.mappings.push({\r\n      command: \"/settings\",\r\n      naturalPhrases: new Map([\r\n        [\"en\", [\"show settings\", \"check configuration\", \"view config\"]],\r\n        [\"ja\", [\"\\u8A2D\\u5B9A\\u78BA\\u8A8D\", \"\\u8A2D\\u5B9A\\u3092\\u898B\\u308B\", \"\\u30B3\\u30F3\\u30D5\\u30A3\\u30B0\\u78BA\\u8A8D\"]],\r\n        [\"cn\", [\"\\u67E5\\u770B\\u8BBE\\u7F6E\", \"\\u68C0\\u67E5\\u914D\\u7F6E\", \"\\u663E\\u793A\\u8BBE\\u7F6E\"]],\r\n        [\"ko\", [\"설정 확인\", \"설정 보기\"]],\r\n        [\"vn\", [\"xem cài đặt\", \"kiểm tra cấu hình\"]],\r\n      ]),\r\n      priority: 0.7,\r\n    });\r\n\r\n    this.mappings.push({\r\n      command: \"/config\",\r\n      naturalPhrases: new Map([\r\n        [\"en\", [\"configure\", \"manage config\", \"update settings\"]],\r\n        [\"ja\", [\"\\u8A2D\\u5B9A\\u7BA1\\u7406\", \"\\u8A2D\\u5B9A\\u66F4\\u65B0\", \"\\u30B3\\u30F3\\u30D5\\u30A3\\u30B0\\u7BA1\\u7406\"]],\r\n        [\"cn\", [\"\\u914D\\u7F6E\\u7BA1\\u7406\", \"\\u66F4\\u65B0\\u8BBE\\u7F6E\", \"\\u7BA1\\u7406\\u914D\\u7F6E\"]],\r\n        [\"ko\", [\"설정 관리\", \"설정 업데이트\"]],\r\n        [\"vn\", [\"quản lý cấu hình\", \"cập nhật cài đặt\"]],\r\n      ]),\r\n      priority: 0.7,\r\n    });\r\n\r\n    // Project Management Commands\r\n    this.mappings.push({\r\n      command: \"/init\",\r\n      naturalPhrases: new Map([\r\n        [\"en\", [\"initialize project\", \"start new project\", \"create project\"]],\r\n        [\"ja\", [\"\\u30D7\\u30ED\\u30B8\\u30A7\\u30AF\\u30C8\\u521D\\u671F\\u5316\", \"\\u65B0\\u898F\\u30D7\\u30ED\\u30B8\\u30A7\\u30AF\\u30C8\", \"\\u30D7\\u30ED\\u30B8\\u30A7\\u30AF\\u30C8\\u4F5C\\u6210\"]],\r\n        [\"cn\", [\"\\u521D\\u59CB\\u5316\\u9879\\u76EE\", \"\\u65B0\\u5EFA\\u9879\\u76EE\", \"\\u521B\\u5EFA\\u9879\\u76EE\"]],\r\n        [\"ko\", [\"프로젝트 초기화\", \"새 프로젝트\"]],\r\n        [\"vn\", [\"khởi tạo dự án\", \"tạo dự án mới\"]],\r\n      ]),\r\n      priority: 0.9,\r\n    });\r\n\r\n    this.mappings.push({\r\n      command: \"/add-dir\",\r\n      naturalPhrases: new Map([\r\n        [\"en\", [\"add directory\", \"include folder\", \"add path\"]],\r\n        [\"ja\", [\"\\u30C7\\u30A3\\u30EC\\u30AF\\u30C8\\u30EA\\u8FFD\\u52A0\", \"\\u30D5\\u30A9\\u30EB\\u30C0\\u8FFD\\u52A0\", \"\\u30D1\\u30B9\\u8FFD\\u52A0\"]],\r\n        [\"cn\", [\"\\u6DFB\\u52A0\\u76EE\\u5F55\", \"\\u5305\\u542B\\u6587\\u4EF6\\u5939\", \"\\u6DFB\\u52A0\\u8DEF\\u5F84\"]],\r\n        [\"ko\", [\"디렉토리 추가\", \"폴더 추가\"]],\r\n        [\"vn\", [\"thêm thư mục\", \"thêm đường dẫn\"]],\r\n      ]),\r\n      priority: 0.6,\r\n    });\r\n\r\n    this.mappings.push({\r\n      command: \"/memory\",\r\n      naturalPhrases: new Map([\r\n        [\"en\", [\"manage memory\", \"remember this\", \"save context\"]],\r\n        [\"ja\", [\"\\u30E1\\u30E2\\u30EA\\u7BA1\\u7406\", \"\\u3053\\u308C\\u3092\\u899A\\u3048\\u3066\", \"\\u30B3\\u30F3\\u30C6\\u30AD\\u30B9\\u30C8\\u4FDD\\u5B58\"]],\r\n        [\"cn\", [\"\\u5185\\u5B58\\u7BA1\\u7406\", \"\\u8BB0\\u4F4F\\u8FD9\\u4E2A\", \"\\u4FDD\\u5B58\\u4E0A\\u4E0B\\u6587\"]],\r\n        [\"ko\", [\"메모리 관리\", \"이것 기억해\"]],\r\n        [\"vn\", [\"quản lý bộ nhớ\", \"nhớ điều này\"]],\r\n      ]),\r\n      priority: 0.6,\r\n    });\r\n\r\n    this.mappings.push({\r\n      command: \"/export\",\r\n      naturalPhrases: new Map([\r\n        [\"en\", [\"export data\", \"save output\", \"download results\"]],\r\n        [\"ja\", [\"\\u30C7\\u30FC\\u30BF\\u30A8\\u30AF\\u30B9\\u30DD\\u30FC\\u30C8\", \"\\u51FA\\u529B\\u4FDD\\u5B58\", \"\\u7D50\\u679C\\u30C0\\u30A6\\u30F3\\u30ED\\u30FC\\u30C9\"]],\r\n        [\"cn\", [\"\\u5BFC\\u51FA\\u6570\\u636E\", \"\\u4FDD\\u5B58\\u8F93\\u51FA\", \"\\u4E0B\\u8F7D\\u7ED3\\u679C\"]],\r\n        [\"ko\", [\"데이터 내보내기\", \"출력 저장\"]],\r\n        [\"vn\", [\"xuất dữ liệu\", \"lưu kết quả\"]],\r\n      ]),\r\n      priority: 0.6,\r\n    });\r\n\r\n    // File Save Commands - Extended patterns\r\n    this.mappings.push({\r\n      command: \"/save\",\r\n      naturalPhrases: new Map([\r\n        [\r\n          \"en\",\r\n          [\r\n            // Basic save patterns\r\n            \"save this\",\r\n            \"save it\",\r\n            \"save that\",\r\n            \"save the code\",\r\n            \"save the response\",\r\n            \"save to file\",\r\n            \"write to file\",\r\n            \"store this\",\r\n            \"save as\",\r\n            \"save file\",\r\n\r\n            // Polite forms\r\n            \"please save\",\r\n            \"can you save\",\r\n            \"could you save\",\r\n            \"would you save\",\r\n            \"kindly save\",\r\n            \"save please\",\r\n            \"save it please\",\r\n\r\n            // Action forms\r\n            \"write this down\",\r\n            \"store it\",\r\n            \"keep this\",\r\n            \"put this in a file\",\r\n            \"create a file\",\r\n            \"make a file\",\r\n            \"generate file\",\r\n            \"export this\",\r\n            \"output to file\",\r\n            \"dump to file\",\r\n            \"persist this\",\r\n\r\n            // Contextual forms\r\n            \"save what you just generated\",\r\n            \"save the above\",\r\n            \"save your response\",\r\n            \"save the output\",\r\n            \"save the result\",\r\n            \"save generated code\",\r\n            \"keep the code\",\r\n            \"store the code\",\r\n            \"file the code\",\r\n          ],\r\n        ],\r\n        [\r\n          \"ja\",\r\n          [\r\n            // Basic patterns\r\n            \"\\u4FDD\\u5B58\\u3057\\u3066\",\r\n            \"\\u30D5\\u30A1\\u30A4\\u30EB\\u306B\\u4FDD\\u5B58\",\r\n            \"\\u3053\\u308C\\u3092\\u4FDD\\u5B58\",\r\n            \"\\u30BB\\u30FC\\u30D6\\u3057\\u3066\",\r\n            \"\\u30D5\\u30A1\\u30A4\\u30EB\\u4FDD\\u5B58\",\r\n\r\n            // Polite forms\r\n            \"\\u4FDD\\u5B58\\u3057\\u3066\\u304F\\u3060\\u3055\\u3044\",\r\n            \"\\u4FDD\\u5B58\\u3057\\u3066\\u3082\\u3089\\u3048\\u308B\",\r\n            \"\\u4FDD\\u5B58\\u3067\\u304D\\u308B\",\r\n            \"\\u4FDD\\u5B58\\u304A\\u9858\\u3044\",\r\n            \"\\u4FDD\\u5B58\\u3057\\u3066\\u3044\\u305F\\u3060\\u3051\\u308B\",\r\n            \"\\u4FDD\\u5B58\\u3092\\u304A\\u9858\\u3044\\u3057\\u307E\\u3059\",\r\n\r\n            // Various expressions\r\n            \"\\u30D5\\u30A1\\u30A4\\u30EB\\u306B\\u66F8\\u304D\\u8FBC\\u3093\\u3067\",\r\n            \"\\u30D5\\u30A1\\u30A4\\u30EB\\u306B\\u66F8\\u3044\\u3066\",\r\n            \"\\u30D5\\u30A1\\u30A4\\u30EB\\u306B\\u3057\\u3066\",\r\n            \"\\u30D5\\u30A1\\u30A4\\u30EB\\u5316\\u3057\\u3066\",\r\n            \"\\u30D5\\u30A1\\u30A4\\u30EB\\u4F5C\\u6210\",\r\n            \"\\u30D5\\u30A1\\u30A4\\u30EB\\u3092\\u4F5C\\u3063\\u3066\",\r\n\r\n            // Output related\r\n            \"\\u30B3\\u30FC\\u30C9\\u3092\\u4FDD\\u5B58\",\r\n            \"\\u51FA\\u529B\\u3092\\u4FDD\\u5B58\",\r\n            \"\\u7D50\\u679C\\u3092\\u4FDD\\u5B58\",\r\n            \"\\u30EC\\u30B9\\u30DD\\u30F3\\u30B9\\u3092\\u4FDD\\u5B58\",\r\n            \"\\u751F\\u6210\\u3057\\u305F\\u3082\\u306E\\u3092\\u4FDD\\u5B58\",\r\n            \"\\u4E0A\\u8A18\\u3092\\u4FDD\\u5B58\",\r\n            \"\\u3053\\u308C\\u4FDD\\u5B58\",\r\n\r\n            // Casual forms\r\n            \"\\u30BB\\u30FC\\u30D6\",\r\n            \"\\u30AD\\u30FC\\u30D7\\u3057\\u3066\",\r\n            \"\\u53D6\\u3063\\u3066\\u304A\\u3044\\u3066\",\r\n            \"\\u6B8B\\u3057\\u3066\",\r\n            \"\\u30D5\\u30A1\\u30A4\\u30EB\\u306B\\u6B8B\\u3057\\u3066\",\r\n            \"\\u66F8\\u304D\\u51FA\\u3057\\u3066\",\r\n            \"\\u30A8\\u30AF\\u30B9\\u30DD\\u30FC\\u30C8\\u3057\\u3066\",\r\n          ],\r\n        ],\r\n        [\r\n          \"cn\",\r\n          [\r\n            \"\\u4FDD\\u5B58\",\r\n            \"\\u5B58\\u50A8\",\r\n            \"\\u4FDD\\u5B58\\u8FD9\\u4E2A\",\r\n            \"\\u4FDD\\u5B58\\u5230\\u6587\\u4EF6\",\r\n            \"\\u5199\\u5165\\u6587\\u4EF6\",\r\n            \"\\u4FDD\\u5B58\\u4EE3\\u7801\",\r\n            \"\\u4FDD\\u5B58\\u8F93\\u51FA\",\r\n            \"\\u4FDD\\u5B58\\u7ED3\\u679C\",\r\n            \"\\u5B58\\u6863\",\r\n            \"\\u50A8\\u5B58\",\r\n            \"\\u8BF7\\u4FDD\\u5B58\",\r\n            \"\\u4FDD\\u5B58\\u4E00\\u4E0B\",\r\n            \"\\u5E2E\\u6211\\u4FDD\\u5B58\",\r\n            \"\\u5BFC\\u51FA\",\r\n            \"\\u8F93\\u51FA\\u5230\\u6587\\u4EF6\",\r\n            \"\\u521B\\u5EFA\\u6587\\u4EF6\",\r\n            \"\\u751F\\u6210\\u6587\\u4EF6\",\r\n            \"\\u5199\\u5230\\u6587\\u4EF6\",\r\n            \"\\u8BB0\\u5F55\\u4E0B\\u6765\",\r\n          ],\r\n        ],\r\n        [\r\n          \"ko\",\r\n          [\r\n            \"저장해줘\",\r\n            \"저장해\",\r\n            \"파일에 저장\",\r\n            \"이것 저장\",\r\n            \"저장 부탁\",\r\n            \"코드 저장\",\r\n            \"출력 저장\",\r\n            \"결과 저장\",\r\n            \"파일로 만들어\",\r\n            \"파일 생성\",\r\n            \"내보내기\",\r\n            \"익스포트\",\r\n            \"세이브해줘\",\r\n          ],\r\n        ],\r\n        [\r\n          \"vn\",\r\n          [\r\n            \"lưu này\",\r\n            \"lưu lại\",\r\n            \"lưu vào file\",\r\n            \"lưu mã\",\r\n            \"lưu kết quả\",\r\n            \"ghi vào file\",\r\n            \"tạo file\",\r\n            \"xuất file\",\r\n            \"giữ lại\",\r\n            \"lưu giúp\",\r\n          ],\r\n        ],\r\n      ]),\r\n      priority: 1.0,\r\n    });\r\n\r\n    this.mappings.push({\r\n      command: \"/saveto\",\r\n      naturalPhrases: new Map([\r\n        [\r\n          \"en\",\r\n          [\r\n            \"save to directory\",\r\n            \"save in folder\",\r\n            \"save at path\",\r\n            \"save to specific location\",\r\n            \"put in folder\",\r\n            \"write to directory\",\r\n            \"save in\",\r\n            \"store in directory\",\r\n            \"save to path\",\r\n          ],\r\n        ],\r\n        [\r\n          \"ja\",\r\n          [\r\n            \"\\u30C7\\u30A3\\u30EC\\u30AF\\u30C8\\u30EA\\u306B\\u4FDD\\u5B58\",\r\n            \"\\u30D5\\u30A9\\u30EB\\u30C0\\u306B\\u4FDD\\u5B58\",\r\n            \"\\u30D1\\u30B9\\u306B\\u4FDD\\u5B58\",\r\n            \"\\u7279\\u5B9A\\u306E\\u5834\\u6240\\u306B\\u4FDD\\u5B58\",\r\n            \"\\u30D5\\u30A9\\u30EB\\u30C0\\u30FC\\u306B\\u5165\\u308C\\u3066\",\r\n            \"\\u30C7\\u30A3\\u30EC\\u30AF\\u30C8\\u30EA\\u306B\\u66F8\\u304D\\u8FBC\\u307F\",\r\n          ],\r\n        ],\r\n        [\"cn\", [\"\\u4FDD\\u5B58\\u5230\\u76EE\\u5F55\", \"\\u4FDD\\u5B58\\u5728\\u6587\\u4EF6\\u5939\", \"\\u4FDD\\u5B58\\u5230\\u8DEF\\u5F84\", \"\\u5B58\\u50A8\\u5230\\u7279\\u5B9A\\u4F4D\\u7F6E\"]],\r\n        [\"ko\", [\"디렉토리에 저장\", \"폴더에 저장\", \"경로에 저장\"]],\r\n        [\r\n          \"vn\",\r\n          [\"lưu vào thư mục\", \"lưu tại đường dẫn\", \"lưu vào vị trí cụ thể\"],\r\n        ],\r\n      ]),\r\n      priority: 0.9,\r\n    });\r\n\r\n    // Agent Management Commands\r\n    this.mappings.push({\r\n      command: \"/agents\",\r\n      naturalPhrases: new Map([\r\n        [\"en\", [\"manage agents\", \"show agents\", \"list agents\"]],\r\n        [\"ja\", [\"\\u30A8\\u30FC\\u30B8\\u30A7\\u30F3\\u30C8\\u7BA1\\u7406\", \"\\u30A8\\u30FC\\u30B8\\u30A7\\u30F3\\u30C8\\u8868\\u793A\", \"\\u30A8\\u30FC\\u30B8\\u30A7\\u30F3\\u30C8\\u4E00\\u89A7\"]],\r\n        [\"cn\", [\"\\u7BA1\\u7406\\u4EE3\\u7406\", \"\\u663E\\u793A\\u4EE3\\u7406\", \"\\u5217\\u51FA\\u4EE3\\u7406\"]],\r\n        [\"ko\", [\"에이전트 관리\", \"에이전트 표시\"]],\r\n        [\"vn\", [\"quản lý agent\", \"hiển thị agent\"]],\r\n      ]),\r\n      priority: 0.5,\r\n    });\r\n\r\n    this.mappings.push({\r\n      command: \"/agent\",\r\n      naturalPhrases: new Map([\r\n        [\r\n          \"en\",\r\n          [\r\n            \"suggest specialized agents\",\r\n            \"propose new agent\",\r\n            \"auto generate agent\",\r\n            \"analyze a2a logs for agents\",\r\n            \"design new specialized agent\",\r\n          ],\r\n        ],\r\n        [\r\n          \"ja\",\r\n          [\r\n            \"\\u5C02\\u7528\\u30A8\\u30FC\\u30B8\\u30A7\\u30F3\\u30C8\\u5019\\u88DC\\u3092\\u51FA\\u3057\\u3066\",\r\n            \"\\u65B0\\u3057\\u3044\\u30A8\\u30FC\\u30B8\\u30A7\\u30F3\\u30C8\\u3092\\u63D0\\u6848\\u3057\\u3066\",\r\n            \"\\u30A8\\u30FC\\u30B8\\u30A7\\u30F3\\u30C8\\u3092\\u81EA\\u52D5\\u751F\\u6210\\u3057\\u3066\",\r\n            \"A2A\\u30ED\\u30B0\\u304B\\u3089\\u8DB3\\u308A\\u306A\\u3044\\u30A8\\u30FC\\u30B8\\u30A7\\u30F3\\u30C8\\u3092\\u8A2D\\u8A08\\u3057\\u3066\",\r\n            \"\\u30A8\\u30FC\\u30B8\\u30A7\\u30F3\\u30C8\\u9032\\u5316\\u30D5\\u30ED\\u30FC\\u3092\\u8D70\\u3089\\u305B\\u3066\",\r\n          ],\r\n        ],\r\n        [\r\n          \"cn\",\r\n          [\r\n            \"\\u5EFA\\u8BAE\\u65B0\\u7684\\u4E13\\u7528\\u4EE3\\u7406\",\r\n            \"\\u81EA\\u52A8\\u751F\\u6210\\u4EE3\\u7406\",\r\n            \"\\u6839\\u636EA2A\\u65E5\\u5FD7\\u8BBE\\u8BA1\\u65B0\\u4EE3\\u7406\",\r\n          ],\r\n        ],\r\n        [\r\n          \"ko\",\r\n          [\r\n            \"전문 에이전트 추천해줘\",\r\n            \"새 에이전트 제안해줘\",\r\n            \"A2A 로그 기반으로 에이전트 설계해줘\",\r\n          ],\r\n        ],\r\n        [\r\n          \"vn\",\r\n          [\r\n            \"gợi ý agent chuyên biệt\",\r\n            \"đề xuất agent mới\",\r\n            \"tạo agent tự động từ log A2A\",\r\n          ],\r\n        ],\r\n      ]),\r\n      priority: 0.6,\r\n    });\r\n\r\n    // System Commands\r\n    this.mappings.push({\r\n      command: \"/status\",\r\n      naturalPhrases: new Map([\r\n        [\"en\", [\"show status\", \"system status\", \"check status\"]],\r\n        [\"ja\", [\"\\u30B9\\u30C6\\u30FC\\u30BF\\u30B9\\u8868\\u793A\", \"\\u30B7\\u30B9\\u30C6\\u30E0\\u72B6\\u614B\", \"\\u72B6\\u614B\\u78BA\\u8A8D\"]],\r\n        [\"cn\", [\"\\u663E\\u793A\\u72B6\\u6001\", \"\\u7CFB\\u7EDF\\u72B6\\u6001\", \"\\u68C0\\u67E5\\u72B6\\u6001\"]],\r\n        [\"ko\", [\"상태 표시\", \"시스템 상태\"]],\r\n        [\"vn\", [\"hiển thị trạng thái\", \"trạng thái hệ thống\"]],\r\n      ]),\r\n      priority: 0.7,\r\n    });\r\n\r\n    this.mappings.push({\r\n      command: \"/health\",\r\n      naturalPhrases: new Map([\r\n        [\"en\", [\"health check\", \"system health\", \"diagnostics\"]],\r\n        [\"ja\", [\"\\u30D8\\u30EB\\u30B9\\u30C1\\u30A7\\u30C3\\u30AF\", \"\\u30B7\\u30B9\\u30C6\\u30E0\\u8A3A\\u65AD\", \"\\u5065\\u5168\\u6027\\u78BA\\u8A8D\"]],\r\n        [\"cn\", [\"\\u5065\\u5EB7\\u68C0\\u67E5\", \"\\u7CFB\\u7EDF\\u8BCA\\u65AD\", \"\\u5065\\u5EB7\\u72B6\\u6001\"]],\r\n        [\"ko\", [\"헬스 체크\", \"시스템 진단\"]],\r\n        [\"vn\", [\"kiểm tra sức khỏe\", \"chẩn đoán hệ thống\"]],\r\n      ]),\r\n      priority: 0.6,\r\n    });\r\n\r\n    this.mappings.push({\r\n      command: \"/clear\",\r\n      naturalPhrases: new Map([\r\n        [\"en\", [\"clear screen\", \"clear chat\", \"reset display\"]],\r\n        [\"ja\", [\"\\u753B\\u9762\\u30AF\\u30EA\\u30A2\", \"\\u30C1\\u30E3\\u30C3\\u30C8\\u30AF\\u30EA\\u30A2\", \"\\u8868\\u793A\\u30EA\\u30BB\\u30C3\\u30C8\"]],\r\n        [\"cn\", [\"\\u6E05\\u9664\\u5C4F\\u5E55\", \"\\u6E05\\u9664\\u804A\\u5929\", \"\\u91CD\\u7F6E\\u663E\\u793A\"]],\r\n        [\"ko\", [\"화면 지우기\", \"채팅 지우기\"]],\r\n        [\"vn\", [\"xóa màn hình\", \"xóa chat\"]],\r\n      ]),\r\n      priority: 0.5,\r\n    });\r\n\r\n    this.mappings.push({\r\n      command: \"/help\",\r\n      naturalPhrases: new Map([\r\n        [\"en\", [\"show help\", \"help me\", \"list commands\", \"how to use\"]],\r\n        [\"ja\", [\"\\u30D8\\u30EB\\u30D7\\u8868\\u793A\", \"\\u52A9\\u3051\\u3066\", \"\\u30B3\\u30DE\\u30F3\\u30C9\\u4E00\\u89A7\", \"\\u4F7F\\u3044\\u65B9\"]],\r\n        [\"cn\", [\"\\u663E\\u793A\\u5E2E\\u52A9\", \"\\u5E2E\\u52A9\\u6211\", \"\\u5217\\u51FA\\u547D\\u4EE4\", \"\\u5982\\u4F55\\u4F7F\\u7528\"]],\r\n        [\"ko\", [\"도움말 표시\", \"도와줘\", \"명령 목록\"]],\r\n        [\"vn\", [\"hiển thị trợ giúp\", \"giúp tôi\", \"danh sách lệnh\"]],\r\n      ]),\r\n      priority: 0.9,\r\n    });\r\n\r\n    this.mappings.push({\r\n      command: \"/exit\",\r\n      naturalPhrases: new Map([\r\n        [\"en\", [\"exit\", \"quit\", \"goodbye\", \"bye\", \"close\"]],\r\n        [\"ja\", [\"\\u7D42\\u4E86\", \"\\u9000\\u51FA\", \"\\u3055\\u3088\\u3046\\u306A\\u3089\", \"\\u30D0\\u30A4\\u30D0\\u30A4\", \"\\u9589\\u3058\\u308B\"]],\r\n        [\"cn\", [\"\\u9000\\u51FA\", \"\\u7ED3\\u675F\", \"\\u518D\\u89C1\", \"\\u5173\\u95ED\"]],\r\n        [\"ko\", [\"종료\", \"나가기\", \"안녕\", \"닫기\"]],\r\n        [\"vn\", [\"thoát\", \"kết thúc\", \"tạm biệt\", \"đóng\"]],\r\n      ]),\r\n      priority: 0.8,\r\n    });\r\n\r\n    // Language switching command\r\n    this.mappings.push({\r\n      command: \"/lang\",\r\n      naturalPhrases: new Map([\r\n        [\r\n          \"en\",\r\n          [\r\n            \"change language\",\r\n            \"switch language\",\r\n            \"set language\",\r\n            \"language settings\",\r\n          ],\r\n        ],\r\n        [\"ja\", [\"\\u8A00\\u8A9E\\u5909\\u66F4\", \"\\u8A00\\u8A9E\\u5207\\u308A\\u66FF\\u3048\", \"\\u8A00\\u8A9E\\u8A2D\\u5B9A\", \"\\u65E5\\u672C\\u8A9E\\u306B\\u5909\\u66F4\"]],\r\n        [\"cn\", [\"\\u66F4\\u6539\\u8BED\\u8A00\", \"\\u5207\\u6362\\u8BED\\u8A00\", \"\\u8BED\\u8A00\\u8BBE\\u7F6E\", \"\\u6539\\u6210\\u4E2D\\u6587\"]],\r\n        [\"ko\", [\"언어 변경\", \"언어 전환\", \"언어 설정\", \"한국어로 변경\"]],\r\n        [\r\n          \"vn\",\r\n          [\r\n            \"đổi ngôn ngữ\",\r\n            \"chuyển ngôn ngữ\",\r\n            \"cài đặt ngôn ngữ\",\r\n            \"đổi sang tiếng việt\",\r\n          ],\r\n        ],\r\n      ]),\r\n      priority: 0.9,\r\n    });\r\n  }\r\n}\r\n","import type { CommandIntent, UserPattern } from \"../types/common-types\";\n\nexport class UserPatternAnalyzer {\n  private patterns: UserPattern[] = [];\n  private initialized: boolean = false;\n\n  async initialize(): Promise<void> {\n    if (this.initialized) {\n      return;\n    }\n\n    // Load patterns from storage if available\n    this.loadPatterns();\n    this.initialized = true;\n  }\n\n  async recordPattern(_input: string, intent: CommandIntent): Promise<void> {\n    const _pattern: UserPattern = {\n      input: _input,\n      command: intent.command,\n      confidence: intent.confidence,\n      timestamp: new Date(),\n      success: true, // Will be updated by feedback\n    };\n\n    this.patterns.push(_pattern);\n\n    // Keep only recent patterns (last 1000)\n    if (this.patterns.length > 1000) {\n      this.patterns = this.patterns.slice(-1000);\n    }\n\n    this.savePatterns();\n  }\n\n  async recordFeedback(\n    _input: string,\n    correctCommand: string,\n    wasCorrect: boolean,\n  ): Promise<void> {\n    // Find the most recent _pattern matching this input\n    const _pattern = this.patterns\n      .slice()\n      .reverse()\n      .find((p): boolean => p.input === _input);\n\n    if (_pattern) {\n      _pattern.success = wasCorrect;\n      if (!wasCorrect) {\n        // Record the correct command as a new _pattern\n        this.patterns.push({\n          input: _input,\n          command: correctCommand,\n          confidence: 1.0,\n          timestamp: new Date(),\n          success: true,\n        });\n      }\n    }\n\n    this.savePatterns();\n  }\n\n  getPatternStats(): Record<string, number> {\n    const stats: Record<string, number> = {};\n\n    this.patterns.forEach((_pattern): void => {\n      if (_pattern.success) {\n        stats[_pattern.command] = (stats[_pattern.command] ?? 0) + 1;\n      }\n    });\n\n    return stats;\n  }\n\n  getMostCommonPattern(input: string): string | null {\n    const _similarPatterns = this.patterns.filter((p): boolean => {\n      return p.success && this.calculateSimilarity(p.input, input) > 0.7;\n    });\n\n    if (_similarPatterns.length === 0) {\n      return null;\n    }\n\n    // Count occurrences of each command\n    const _commandCounts = new Map<string, number>();\n    _similarPatterns.forEach((p): void => {\n      _commandCounts.set(p.command, (_commandCounts.get(p.command) ?? 0) + 1);\n    });\n\n    // Return the most common command\n    let maxCount = 0;\n    let mostCommon: string | null = null;\n\n    _commandCounts.forEach((count, command): void => {\n      if (count > maxCount) {\n        maxCount = count;\n        mostCommon = command;\n      }\n    });\n\n    return mostCommon;\n  }\n\n  private calculateSimilarity(_str1: string, str2: string): number {\n    const _longer = _str1.length > str2.length ? _str1 : str2;\n    const _shorter = _str1.length > str2.length ? str2 : _str1;\n\n    if (_longer.length === 0) {\n      return 1.0;\n    }\n\n    const _distance = this.levenshteinDistance(_longer, _shorter);\n    return (_longer.length - _distance) / _longer.length;\n  }\n\n  private levenshteinDistance(_str1: string, str2: string): number {\n    const matrix: number[][] = [];\n\n    for (let i = 0; i <= str2.length; i++) {\n      matrix[i] = [i];\n    }\n\n    for (let j = 0; j <= _str1.length; j++) {\n      matrix[0][j] = j;\n    }\n\n    for (let i = 1; i <= str2.length; i++) {\n      for (let j = 1; j <= _str1.length; j++) {\n        if (str2.charAt(i - 1) === _str1.charAt(j - 1)) {\n          matrix[i][j] = matrix[i - 1][j - 1];\n        } else {\n          matrix[i][j] = Math.min(\n            matrix[i - 1][j - 1] + 1,\n            matrix[i][j - 1] + 1,\n            matrix[i - 1][j] + 1,\n          );\n        }\n      }\n    }\n\n    return matrix[str2.length][_str1.length];\n  }\n\n  async exportData(): Promise<unknown> {\n    return {\n      patterns: this.patterns,\n      stats: this.getPatternStats(),\n    };\n  }\n\n  async importData(data: unknown): Promise<void> {\n    if (typeof data === \"object\" && data !== null && \"patterns\" in data) {\n      const _imported = data as { patterns: UserPattern[] };\n      this.patterns = _imported.patterns;\n      this.savePatterns();\n    }\n  }\n\n  private loadPatterns(): void {\n    // In production, load from persistent storage\n    // For now, start with empty patterns\n    this.patterns = [];\n  }\n\n  private savePatterns(): void {\n    // In production, save to persistent storage\n    // For now, keep in memory only\n  }\n}\n","import { EventEmitter } from \"node:events\";\nimport { NaturalLanguageProcessor } from \"../infra/NaturalLanguageProcessor\";\nimport { IntentRecognizer } from \"../analysis/IntentRecognizer\";\nimport { ParameterExtractor } from \"../analysis/ParameterExtractor\";\nimport { MultilingualDictionary } from \"../analysis/MultilingualDictionary\";\nimport { LanguageDetector } from \"../infra/LanguageDetector\";\nimport { CommandMappings } from \"./CommandMappings\";\nimport { UserPatternAnalyzer } from \"../analysis/UserPatternAnalyzer\";\nimport type {\n  CommandIntent,\n  RouterConfig,\n  RouterMetrics,\n} from \"../types/common-types\";\nimport chalk from \"chalk\";\nimport { stderrLine } from \"../../../shared/utils/tty\";\n\nexport class IntelligentRouterService extends EventEmitter {\n  private nlpProcessor: NaturalLanguageProcessor;\n  private intentRecognizer: IntentRecognizer;\n  private parameterExtractor: ParameterExtractor;\n  private dictionary: MultilingualDictionary;\n  private languageDetector: LanguageDetector;\n  private commandMappings: CommandMappings;\n  private userPatternAnalyzer: UserPatternAnalyzer;\n\n  private config: Required<RouterConfig>;\n  private metrics: RouterMetrics;\n  private isInitialized: boolean = false;\n\n  constructor(_config: RouterConfig = {}) {\n    super();\n\n    this.config = {\n      // NOTE:\n      // IntentRecognizer caps confidence at 0.7 and also enforces an internal minimum confidence (0.35).\n      // Setting a higher default here would make routing fail-closed for almost all inputs.\n      confidenceThreshold: _config.confidenceThreshold ?? 0.35,\n      enableLearning: _config.enableLearning ?? true,\n      supportedLanguages: _config.supportedLanguages ?? [\n        \"en\",\n        \"ja\",\n        \"cn\",\n        \"ko\",\n        \"vn\",\n      ],\n      enableConfirmation: _config.enableConfirmation ?? true,\n      maxAlternatives: _config.maxAlternatives ?? 3,\n    };\n\n    this.metrics = {\n      totalRequests: 0,\n      successfulRoutes: 0,\n      failedRoutes: 0,\n      averageConfidence: 0,\n      averageResponseTime: 0,\n      commandUsageStats: new Map(),\n      languageDistribution: {},\n    };\n\n    this.nlpProcessor = new NaturalLanguageProcessor();\n    this.intentRecognizer = new IntentRecognizer(this.config);\n    this.parameterExtractor = new ParameterExtractor();\n    this.dictionary = new MultilingualDictionary();\n    this.languageDetector = new LanguageDetector();\n    this.commandMappings = new CommandMappings();\n    this.userPatternAnalyzer = new UserPatternAnalyzer();\n  }\n\n  async initialize(): Promise<void> {\n    if (this.isInitialized) {\n      return;\n    }\n\n    try {\n      // Initialize silently\n\n      // Initialize all components\n      await Promise.all([\n        this.dictionary.initialize(),\n        this.commandMappings.initialize(),\n        this.nlpProcessor.initialize(),\n        this.intentRecognizer.initialize(),\n        this.userPatternAnalyzer.initialize(),\n      ]);\n\n      this.isInitialized = true;\n      this.emit(\"initialized\");\n\n      // Initialized successfully\n    } catch (_error) {\n      stderrLine(chalk.red(\"Failed to initialize Intelligent Router:\"), _error);\n      throw _error;\n    }\n  }\n\n  async route(input: string): Promise<CommandIntent | null> {\n    if (!this.isInitialized) {\n      await this.initialize();\n    }\n\n    const _startTime = Date.now();\n    this.metrics.totalRequests++;\n\n    try {\n      // Step 1: Detect _language\n      const _language = await this.languageDetector.detect(input);\n\n      if (!this.config.supportedLanguages.includes(_language)) {\n        // Debug: Language fallback - commented out to prevent input field pollution\n        // console.log(chalk.yellow(`Language '${_language}' not supported, falling back to English`));\n      }\n\n      // Step 1.5: Deterministic phrase mapping (SSOT: CommandMappings)\n      // - Fast path to avoid unnecessary NLP/ML work for common commands.\n      // - Ensures that the curated natural phrase list is actually used.\n      const mapped = this.commandMappings.getCommandForPhrase(input, _language);\n      if (mapped) {\n        const commandIntent: CommandIntent = {\n          command: mapped,\n          confidence: 0.95,\n          _parameters: {},\n          originalInput: input,\n          _language,\n        };\n        this.metrics.successfulRoutes++;\n        this.updateMetrics(0.95, Date.now() - _startTime, mapped);\n        this.emit(\"route:success\", commandIntent);\n        return commandIntent;\n      }\n\n      // Step 2: Process natural _language\n      const processedInput = await this.nlpProcessor.process(input, _language);\n\n      // Step 3: Recognize intent\n      const intent = await this.intentRecognizer.recognize(processedInput);\n\n      if (!intent || intent.confidence < this.config.confidenceThreshold) {\n        this.metrics.failedRoutes++;\n        this.emit(\"route:failed\", {\n          input,\n          _language,\n          confidence: intent?.confidence ?? 0,\n        });\n        return null;\n      }\n\n      // Step 4: Extract _parameters\n      const _parameters = await this.parameterExtractor.extract(\n        input,\n        intent.command,\n        _language,\n      );\n\n      // Step 5: Build command intent\n      const commandIntent: CommandIntent = {\n        command: intent.command,\n        confidence: intent.confidence,\n        _parameters,\n        originalInput: input,\n        _language,\n        alternatives: intent.alternatives,\n      };\n\n      // Step 6: Learn from pattern if enabled\n      if (this.config.enableLearning) {\n        await this.userPatternAnalyzer.recordPattern(input, commandIntent);\n      }\n\n      // Update metrics\n      this.metrics.successfulRoutes++;\n      this.updateMetrics(\n        intent.confidence,\n        Date.now() - _startTime,\n        intent.command,\n      );\n\n      this.emit(\"route:success\", commandIntent);\n\n      return commandIntent;\n    } catch (_error) {\n      this.metrics.failedRoutes++;\n      this.emit(\"route:_error\", { input, _error });\n      stderrLine(chalk.red(\"Routing _error:\"), _error);\n      return null;\n    }\n  }\n\n  async suggestCommand(partialInput: string): Promise<string[]> {\n    if (!this.isInitialized) {\n      await this.initialize();\n    }\n\n    try {\n      const _language = await this.languageDetector.detect(partialInput);\n      const _suggestions = await this.commandMappings.getSuggestions(\n        partialInput,\n        _language,\n        this.config.maxAlternatives,\n      );\n\n      return _suggestions;\n    } catch (_error) {\n      stderrLine(\"Failed to get _suggestions:\", _error);\n      return [];\n    }\n  }\n\n  async getCommandExplanation(\n    _command: string,\n    _language: string = \"en\",\n  ): Promise<string> {\n    return this.dictionary.getExplanation(_command, _language);\n  }\n\n  async needsConfirmation(intent: CommandIntent): Promise<boolean> {\n    if (!this.config.enableConfirmation) {\n      return false;\n    }\n\n    // Need confirmation for low confidence or destructive commands\n    const _destructiveCommands = [\"/delete\", \"/reset\", \"/clear\", \"/exit\"];\n    const _isDestructive = _destructiveCommands.includes(intent.command);\n    const _isLowConfidence = intent.confidence < 0.9;\n\n    return _isDestructive || _isLowConfidence;\n  }\n\n  getMetrics(): RouterMetrics {\n    return { ...this.metrics };\n  }\n\n  resetMetrics(): void {\n    this.metrics = {\n      totalRequests: 0,\n      successfulRoutes: 0,\n      failedRoutes: 0,\n      averageConfidence: 0,\n      averageResponseTime: 0,\n      commandUsageStats: new Map(),\n      languageDistribution: {},\n    };\n  }\n\n  private updateMetrics(\n    _confidence: number,\n    responseTime: number,\n    command: string,\n  ): void {\n    // Update average confidence\n    const _totalConfidence =\n      this.metrics.averageConfidence * (this.metrics.successfulRoutes - 1);\n    this.metrics.averageConfidence =\n      (_totalConfidence + _confidence) / this.metrics.successfulRoutes;\n\n    // Update average response time\n    const _totalResponseTime =\n      this.metrics.averageResponseTime * (this.metrics.successfulRoutes - 1);\n    this.metrics.averageResponseTime =\n      (_totalResponseTime + responseTime) / this.metrics.successfulRoutes;\n\n    // Update command usage stats\n    const _currentCount = this.metrics.commandUsageStats.get(command) ?? 0;\n    this.metrics.commandUsageStats.set(command, _currentCount + 1);\n  }\n\n  async trainOnFeedback(\n    _input: string,\n    correctCommand: string,\n    wasCorrect: boolean,\n  ): Promise<void> {\n    if (!this.config.enableLearning) {\n      return;\n    }\n\n    try {\n      await this.userPatternAnalyzer.recordFeedback(\n        _input,\n        correctCommand,\n        wasCorrect,\n      );\n      await this.intentRecognizer.updateModel(\n        _input,\n        correctCommand,\n        wasCorrect,\n      );\n\n      this.emit(\"training:complete\", { _input, correctCommand, wasCorrect });\n    } catch (_error) {\n      stderrLine(\"Failed to train on feedback:\", _error);\n    }\n  }\n\n  getConfidenceThreshold(): number {\n    return this.config.confidenceThreshold;\n  }\n\n  setConfidenceThreshold(threshold: number): void {\n    if (threshold < 0 || threshold > 1) {\n      throw new Error(\"Confidence threshold must be between 0 and 1\");\n    }\n    this.config.confidenceThreshold = threshold;\n  }\n\n  getSupportedLanguages(): string[] {\n    return [...this.config.supportedLanguages];\n  }\n\n  isLanguageSupported(_language: string): boolean {\n    return this.config.supportedLanguages.includes(_language);\n  }\n\n  async exportLearningData(): Promise<unknown> {\n    return this.userPatternAnalyzer.exportData();\n  }\n\n  async importLearningData(data: unknown): Promise<void> {\n    await this.userPatternAnalyzer.importData(data);\n  }\n\n  dispose(): void {\n    this.removeAllListeners();\n    this.isInitialized = false;\n  }\n}\n\n// Singleton instance\nlet routerInstance: IntelligentRouterService | null = null;\n\nexport function getIntelligentRouter(\n  config?: RouterConfig,\n): IntelligentRouterService {\n  if (!routerInstance) {\n    routerInstance = new IntelligentRouterService(config);\n  }\n  return routerInstance;\n}\n\nexport function resetIntelligentRouter(): void {\n  if (routerInstance) {\n    routerInstance.dispose();\n    routerInstance = null;\n  }\n}\n","/**\n * Logger Utility\n * Unified management of log output.\n *\n * From Phase 3 onward, the application layer should use this via the `ILogger` port.\n * This file should be treated as a console-based adapter implementation.\n */\n\nimport chalk from \"chalk\";\nimport type { ILogger, LogFields } from \"../shared/ports/logging\";\nimport { stdoutLine } from \"../shared/utils/tty\";\n\nexport enum LogLevel {\n  DEBUG = 0,\n  INFO = 1,\n  WARN = 2,\n  ERROR = 3,\n  NONE = 4,\n}\n\nexport class Logger implements ILogger {\n  private level: LogLevel = LogLevel.WARN; // Default to WARN to reduce noise\n  private readonly prefix: string;\n  private format: \"pretty\" | \"json\" = \"pretty\";\n\n  constructor(context?: string) {\n    this.prefix = context ? `[MARIA CODE][${context}]` : \"[MARIA CODE]\";\n  }\n\n  setLevel(level: LogLevel): void {\n    this.level = level;\n  }\n\n  setFormat(format: \"pretty\" | \"json\"): void {\n    this.format = format;\n  }\n\n  private out(level: \"log\" | \"warn\" | \"error\", tag: string, args: unknown[]): void {\n    const consoleFn = console[level] as unknown as (...data: unknown[]) => void;\n\n    if (this.format === \"json\") {\n      const payload = {\n        ts: new Date().toISOString(),\n        level: tag.replace(/\\[|\\]/g, \"\").toLowerCase(),\n        msg: args.map(String).join(\" \"),\n      };\n      // eslint-disable-next-line no-console\n      consoleFn(JSON.stringify(payload));\n      return;\n    }\n    // pretty\n    const debugMode = process.env.MARIA_DEBUG === \"1\";\n    const isError = tag.includes(\"[ERROR]\");\n    let outArgs = args;\n    if (isError && !debugMode) {\n      // Hide raw JSON/object details in error logs unless MARIA_DEBUG===\"1\"\n      const filtered: unknown[] = [];\n      let suppressed = false;\n      for (const a of args) {\n        const t = typeof a;\n        if (a == null || t === \"string\" || t === \"number\" || t === \"boolean\") {\n          filtered.push(a);\n        } else {\n          suppressed = true;\n        }\n      }\n      if (suppressed) {\n        // filtered.push(\"(details hidden; set MARIA_DEBUG=1)\");\n      }\n      outArgs = filtered;\n    }\n    // eslint-disable-next-line no-console\n    if (tag) {\n      consoleFn(tag, ...outArgs);\n    } else {\n      consoleFn(...outArgs);\n    }\n  }\n\n  debug(message: string, fields?: LogFields): void {\n    if (this.level <= LogLevel.DEBUG) {\n      const args: unknown[] = fields ? [message, fields] : [message];\n      this.out(\"log\", chalk.magenta(`${this.prefix} [DEBUG]`), args);\n    }\n  }\n\n  info(message: string, fields?: LogFields): void {\n    if (this.level <= LogLevel.INFO) {\n      const args: unknown[] = fields ? [message, fields] : [message];\n      this.out(\"log\", chalk.bold.magenta(`${this.prefix} [INFO]`), args);\n    }\n  }\n\n  warn(message: string, fields?: LogFields): void {\n    if (this.level <= LogLevel.WARN) {\n      const args: unknown[] = fields ? [message, fields] : [message];\n      this.out(\"warn\", chalk.bold.magenta(`${this.prefix} [WARN]`), args);\n    }\n  }\n\n  error(message: string, fields?: LogFields): void {\n    if (this.level <= LogLevel.ERROR) {\n      const args: unknown[] = fields ? [message, fields] : [message];\n      this.out(\"error\", chalk.bold.magenta(`${this.prefix} [ERROR]`), args);\n    }\n  }\n\n  success(...args: unknown[]): void {\n    if (this.level <= LogLevel.INFO) {\n      this.out(\"log\", chalk.bold.magenta(`${this.prefix} [SUCCESS]`), args);\n    }\n  }\n\n  task(\n    taskName: string,\n    status: \"start\" | \"progress\" | \"complete\" | \"error\",\n    message?: string,\n  ): void {\n    if (process.env.MARIA_BENCH_MODE === \"1\") return;\n    if (this.level > LogLevel.INFO) {\n      return;\n    }\n\n    const statusIcons = {\n      start: \"🚀\",\n      progress: \"⏳\",\n      complete: \"✅\",\n      error: \"❌\",\n    };\n\n    const statusColors = {\n      start: chalk.bold.magenta,\n      progress: chalk.magenta,\n      complete: chalk.bold.magenta,\n      error: chalk.bold.magenta,\n    };\n\n    const icon = statusIcons[status];\n    const color = statusColors[status];\n    const formattedMessage = message ? `: ${message}` : \"\";\n\n    stdoutLine(color(`${this.prefix} ${icon} ${taskName}${formattedMessage}`));\n  }\n\n  table(data: Record<string, unknown>[]): void {\n    if (this.level > LogLevel.INFO) {\n      return;\n    }\n    stdoutLine(data);\n  }\n\n  json(obj: unknown, pretty = true): void {\n    if (this.level > LogLevel.DEBUG) {\n      return;\n    }\n    if (this.format === \"json\") {\n      this.out(\"log\", \"\", [JSON.stringify(obj)]);\n    } else {\n      stdoutLine(chalk.magenta(`${this.prefix} [JSON]`));\n      stdoutLine(pretty ? JSON.stringify(obj, null, 2) : JSON.stringify(obj));\n    }\n  }\n\n  divider(): void {\n    if (this.level > LogLevel.INFO) {\n      return;\n    }\n    stdoutLine(chalk.magenta(\"─\".repeat(60)));\n  }\n\n  /**\n   * Create a child logger with additional context.\n   * \n   * For compatibility with existing code, supports a pino-like signature:\n   * `logger.child({ module: \"name\" })`.\n   * - If context is a string, use it directly as the prefix context.\n   * - If context is an object, prefer the `module` field; otherwise join `key=value` pairs.\n   */\n  child(context?: string | { module?: string } | Record<string, unknown>): Logger {\n    let ctx: string | undefined;\n\n    if (typeof context === \"string\") {\n      ctx = context;\n    } else if (context && typeof context === \"object\") {\n      const obj = context as Record<string, unknown>;\n      if (typeof obj.module === \"string\" && obj.module.length > 0) {\n        ctx = obj.module;\n      } else {\n        const entries = Object.entries(obj)\n          .filter(([_, v]) => v != null)\n          .map(([k, v]) => `${k}=${String(v)}`);\n        ctx = entries.join(\",\");\n      }\n    }\n\n    // `new Logger(ctx)` adds a `[MARIA CODE][ctx]` style prefix\n    const childLogger = new Logger(ctx);\n    childLogger.setLevel(this.level);\n    childLogger.setFormat(this.format);\n    return childLogger;\n  }\n\n  clear(): void {\n    console.clear();\n  }\n\n  /**\n   * Render a progress bar.\n   */\n  progress(current: number, total: number, label?: string): void {\n    if (process.env.MARIA_BENCH_MODE === \"1\") return;\n    if (this.level > LogLevel.INFO) {\n      return;\n    }\n\n    const percentage = Math.round((current / total) * 100);\n    const barLength = 30;\n    const filled = Math.round((percentage / 100) * barLength);\n    const empty = barLength - filled;\n\n    const bar = \"█\".repeat(filled) + \"░\".repeat(empty);\n    const progressText = `${current}/${total}`;\n    const labelText = label ? ` ${label}` : \"\";\n\n    process.stdout.write(\n      `\\r${chalk.bold.magenta(bar)} ${percentage}% ${progressText}${labelText}`,\n    );\n\n    if (current === total) {\n      process.stdout.write(\"\\n\");\n    }\n  }\n}\n\n/**\n * Default implementation for console output.\n *\n * - Use `new ConsoleLogger(\"Context\")` when you want a named context prefix\n * - For compatibility with existing code, keep exporting the `logger` singleton\n */\nexport class ConsoleLogger extends Logger {}\n// A lightweight child implementation for creating module-specific child loggers from the singleton.\n// - Partially mimics the pino-compatible signature and embeds the module name in the prefix.\n// - Does not inherit log level/format; sufficient for testing use.\nexport interface ChildLoggerFields extends LogFields {\n  module?: string;\n}\n\nexport class ChildCapableConsoleLogger extends Logger {\n  constructor(context?: string) {\n    super(context);\n  }\n\n  child(fields: ChildLoggerFields): ChildCapableConsoleLogger {\n    const moduleName =\n      (fields && typeof fields.module === \"string\" && fields.module) || undefined;\n    const ctx = moduleName ? moduleName : undefined;\n    return new ChildCapableConsoleLogger(ctx);\n  }\n}\n\n// Export singleton instance (usable as ILogger)\nexport const logger: ChildCapableConsoleLogger = new ChildCapableConsoleLogger();\n\n// Configure log level via environment variable\nconst envLogLevel = process.env[\"MARIA_LOG_LEVEL\"]?.toUpperCase();\nif (\n  envLogLevel &&\n  LogLevel[envLogLevel as keyof typeof LogLevel] !== undefined\n) {\n  logger.setLevel(LogLevel[envLogLevel as keyof typeof LogLevel]);\n}\n\n// Configure log format via environment variable (json|pretty)\nconst envLogFormat = process.env[\"MARIA_LOG_FORMAT\"]?.toLowerCase();\nif (envLogFormat === \"json\" || envLogFormat === \"pretty\") {\n  logger.setFormat(envLogFormat);\n}\n","/**\n * Default logger adapter\n *\n * IMPORTANT:\n * - 多くのモジュールが `logger.child({ module: \"name\" })` という pino 風 API を前提にしている。\n * - `src/utils/logger.ts` はその互換 API を提供しているため、ここではそれを採用する。\n */\n\nimport type { ILogger } from '../../shared/ports/logging'\nimport { ChildCapableConsoleLogger, logger as rootLogger } from '../../utils/logger'\n\n/**\n * App-wide default logger (child-capable).\n */\nexport const defaultLogger: ILogger = rootLogger\n\n/**\n * Create a logger for a specific module/context.\n *\n * - `createDefaultLogger(\"module\")`\n * - `createDefaultLogger({ module: \"module\" })`\n */\nexport function createDefaultLogger(\n  context?: string | { module?: string } | Record<string, unknown>,\n): ILogger {\n  if (!context) return rootLogger\n  if (typeof context === 'string') return new ChildCapableConsoleLogger(context)\n  if (context && typeof context === 'object') {\n    const module =\n      typeof (context as { module?: unknown }).module === 'string'\n        ? String((context as { module?: unknown }).module)\n        : null\n    if (module) {\n      return new ChildCapableConsoleLogger(module)\n    }\n  }\n  return rootLogger\n}\n","/**\n * MARIA Memory System - System 1 Memory Implementation\n *\n * Fast, intuitive memory _patterns for immediate responses\n * Handles programming concepts, code _patterns, and user preferences\n */\n\nimport type {\n  AntiPattern,\n  CodeExample,\n  CodePattern,\n  CommandHistory,\n  ConceptEdge,\n  ConceptGraph,\n  InteractionHistory,\n  KnowledgeNode,\n  MemoryEvent,\n  NodeMetadata,\n  PatternLibrary,\n  SessionRecord,\n  System1Config,\n  System1Memory,\n  UsagePattern,\n  UserPreferenceSet,\n} from \"./types/memory-interfaces\";\nimport { defaultLogger as logger } from \"../../adapters/logging/default\";\n\nexport class System1MemoryManager implements System1Memory {\n  private knowledgeNodes: Map<string, KnowledgeNode> = new Map();\n  public userPreferences: UserPreferenceSet;\n\n  // Private implementation details\n  private conceptGraph: ConceptGraph;\n  private interactionHistory: InteractionHistory;\n  private patternLibrary: PatternLibrary;\n  private config: System1Config;\n  private cache: Map<string, unknown> = new Map();\n  private lastAccessTimes: Map<string, Date> = new Map();\n\n  constructor(_config: System1Config) {\n    this.config = _config;\n    this.conceptGraph = {\n      nodes: new Map(),\n      edges: new Map(),\n      clusters: [],\n    };\n    this.interactionHistory = {\n      sessions: [],\n      commands: [],\n      patterns: [],\n    };\n    this.patternLibrary = {\n      codePatterns: [],\n      antiPatterns: [],\n      bestPractices: [],\n      templates: [],\n    };\n    this.userPreferences = this.initializeDefaultPreferences();\n  }\n\n  get programmingConcepts(): KnowledgeNode[] {\n    return Array.from(this.knowledgeNodes.values())\n      .filter((_node): boolean =>\n        [\"function\", \"class\", \"module\", \"concept\"].includes(_node.type),\n      )\n      .sort((a, b): number => b.confidence - a.confidence);\n  }\n\n  get businessLogic(): ConceptGraph {\n    return this.conceptGraph;\n  }\n\n  get pastInteractions(): InteractionHistory {\n    return this.interactionHistory;\n  }\n\n  get codePatterns(): PatternLibrary {\n    return this.patternLibrary;\n  }\n\n  // Knowledge Node Management\n  async addKnowledgeNode(\n    type: KnowledgeNode[\"type\"],\n    name: string,\n    content: string,\n    embedding: number[],\n    metadata: Partial<NodeMetadata> = {},\n  ): Promise<KnowledgeNode> {\n    const _node: KnowledgeNode = {\n      id: this.generateNodeId(type, name),\n      type,\n      name,\n      content,\n      embedding,\n      confidence: 0.8,\n      lastAccessed: new Date(),\n      accessCount: 1,\n      metadata: {\n        complexity: \"medium\",\n        quality: 0.8,\n        relevance: 0.8,\n        ...metadata,\n      },\n    };\n\n    this.knowledgeNodes.set(_node.id, _node);\n    this.conceptGraph.nodes.set(_node.id, _node);\n\n    // Trigger cache cleanup if needed\n    if (this.knowledgeNodes.size > this.config.maxKnowledgeNodes) {\n      await this.cleanupLeastUsedNodes();\n    }\n\n    return _node;\n  }\n\n  async getKnowledgeNode(id: string): Promise<KnowledgeNode | null> {\n    const _node = this.knowledgeNodes.get(id);\n    if (_node) {\n      // Update access _patterns for System 1 fast retrieval\n      _node.lastAccessed = new Date();\n      _node.accessCount++;\n      this.lastAccessTimes.set(id, new Date());\n\n      // Apply access decay\n      this.applyAccessDecay(_node);\n    }\n    return _node || null;\n  }\n\n  async searchKnowledgeNodes(\n    query: string,\n    queryEmbedding: number[],\n    limit: number = 10,\n  ): Promise<KnowledgeNode[]> {\n    const _cacheKey = `search:${query}:${limit}`;\n    const _cached = this.cache.get(_cacheKey) as KnowledgeNode[];\n    if (_cached) {\n      return _cached;\n    }\n\n    const _results = Array.from(this.knowledgeNodes.values())\n      .map((_node): { _node: KnowledgeNode; similarity: number; } => ({\n        _node,\n        similarity: this.calculateCosineSimilarity(\n          queryEmbedding,\n          _node.embedding,\n        ),\n      }))\n      .filter(({ similarity }): boolean => similarity > 0.5)\n      .sort((a, b): number => b.similarity - a.similarity)\n      .slice(0, limit)\n      .map(({ _node }): KnowledgeNode => _node);\n\n    // Cache _results for fast subsequent access\n    this.cache.set(_cacheKey, _results);\n    return _results;\n  }\n\n  async updateKnowledgeNode(\n    _id: string,\n    updates: Partial<KnowledgeNode>,\n  ): Promise<boolean> {\n    const _node = this.knowledgeNodes.get(_id);\n    if (!_node) {\n      return false;\n    }\n\n    Object.assign(_node, updates);\n    _node.lastAccessed = new Date();\n    this.conceptGraph.nodes.set(_id, _node);\n\n    // Invalidate _related cache entries\n    this.invalidateCache(`_node:${_id}`);\n\n    return true;\n  }\n\n  // Concept Graph Management\n  async addConceptEdge(\n    sourceId: string,\n    targetId: string,\n    type: ConceptEdge[\"type\"],\n    weight: number = 1.0,\n    _confidence: number = 0.8,\n  ): Promise<ConceptEdge> {\n    const edge: ConceptEdge = {\n      id: `${sourceId}-${type}-${targetId}`,\n      sourceId,\n      targetId,\n      type,\n      weight,\n      confidence: _confidence,\n    };\n\n    this.conceptGraph.edges.set(edge.id, edge);\n    return edge;\n  }\n\n  async getRelatedConcepts(\n    _nodeId: string,\n    maxDepth: number = 2,\n  ): Promise<KnowledgeNode[]> {\n    const _cacheKey = `_related:${_nodeId}:${maxDepth}`;\n    const _cached = this.cache.get(_cacheKey) as KnowledgeNode[];\n    if (_cached) {\n      return _cached;\n    }\n\n    const _related = new Set<string>();\n    const _visited = new Set<string>();\n    const queue: { id: string; depth: number }[] = [{ id: _nodeId, depth: 0 }];\n\n    while (queue.length > 0) {\n      const { id, depth } = queue.shift()!;\n\n      if (_visited.has(id) || depth >= maxDepth) {\n        continue;\n      }\n      _visited.add(id);\n\n      // Find all edges from this _node\n      for (const edge of this.conceptGraph.edges.values()) {\n        if (edge.sourceId === id && !_visited.has(edge.targetId)) {\n          _related.add(edge.targetId);\n          queue.push({ id: edge.targetId, depth: depth + 1 });\n        }\n        if (edge.targetId === id && !_visited.has(edge.sourceId)) {\n          _related.add(edge.sourceId);\n          queue.push({ id: edge.sourceId, depth: depth + 1 });\n        }\n      }\n    }\n\n    const _results = Array.from(_related)\n      .map((id): KnowledgeNode => this.knowledgeNodes.get(id))\n      .filter((_node): _node is KnowledgeNode => _node !== undefined);\n\n    this.cache.set(_cacheKey, _results);\n    return _results;\n  }\n\n  // Pattern Management\n  async addCodePattern(\n    _pattern: Omit<CodePattern, \"id\">,\n  ): Promise<CodePattern> {\n    const codePattern: CodePattern = {\n      id: this.generatePatternId(_pattern.name),\n      ..._pattern,\n    };\n\n    this.patternLibrary.codePatterns.push(codePattern);\n    return codePattern;\n  }\n\n  /**\n   * Back-compat: record a fully-formed code _pattern (e.g., from team sharing).\n   */\n  async recordPattern(\n    _pattern: CodePattern | (CodePattern & { metadata?: unknown }),\n  ): Promise<void> {\n    // Normalize to the canonical CodePattern shape (ignore any extra fields like metadata).\n    const pattern = _pattern as CodePattern;\n    const normalized: CodePattern = {\n      id: pattern.id,\n      name: pattern.name,\n      description: pattern.description,\n      code: pattern.code,\n      language: pattern.language,\n      framework: pattern.framework,\n      useCase: pattern.useCase,\n      complexity: pattern.complexity,\n      performance: pattern.performance,\n      examples: pattern.examples,\n    };\n    this.patternLibrary.codePatterns.push(normalized);\n  }\n\n  async findCodePatterns(\n    language?: string,\n    framework?: string,\n    useCase?: string,\n    limit: number = 10,\n  ): Promise<CodePattern[]> {\n    const _cacheKey = `_patterns:${language}:${framework}:${useCase}:${limit}`;\n    const _cached = this.cache.get(_cacheKey) as CodePattern[];\n    if (_cached) {\n      return _cached;\n    }\n\n    let _patterns = this.patternLibrary.codePatterns;\n\n    if (language) {\n      _patterns = _patterns.filter((p): boolean => p.language === language);\n    }\n    if (framework) {\n      _patterns = _patterns.filter((p): boolean => p.framework === framework);\n    }\n    if (useCase) {\n      _patterns = _patterns.filter((p): boolean =>\n        p.useCase.toLowerCase().includes(useCase.toLowerCase()),\n      );\n    }\n\n    const _results = _patterns\n      .sort((a, b): number => {\n        // Prioritize by complexity (beginner first) and performance\n        const _complexityWeight = { beginner: 3, intermediate: 2, advanced: 1 };\n        return (\n          (_complexityWeight[a.complexity] || 0) -\n          (_complexityWeight[b.complexity] || 0)\n        );\n      })\n      .slice(0, limit);\n\n    this.cache.set(_cacheKey, _results);\n    return _results;\n  }\n\n  async addAntiPattern(\n    _antiPattern: Omit<AntiPattern, \"id\">,\n  ): Promise<AntiPattern> {\n    const _pattern: AntiPattern = {\n      id: this.generatePatternId(_antiPattern.name),\n      ..._antiPattern,\n    };\n\n    this.patternLibrary.antiPatterns.push(_pattern);\n    return _pattern;\n  }\n\n  async detectAntiPatterns(code: string): Promise<AntiPattern[]> {\n    const detected: AntiPattern[] = [];\n\n    for (const antiPattern of this.patternLibrary.antiPatterns) {\n      for (const rule of antiPattern.detectionRules) {\n        try {\n          const _regex = new RegExp(rule.pattern, \"gi\");\n          if (_regex.test(code)) {\n            detected.push(antiPattern);\n            break; // One detection per anti-_pattern\n          }\n        } catch (_error) {\n          logger.warn(`Invalid _regex _pattern: ${rule.pattern}`, { _error: _error instanceof Error ? _error.message : String(_error) });\n        }\n      }\n    }\n\n    return detected.sort((a, b): number => {\n      const _severityWeight = { critical: 4, high: 3, medium: 2, low: 1 };\n      return (\n        (_severityWeight[b.severity] || 0) - (_severityWeight[a.severity] || 0)\n      );\n    });\n  }\n\n  // Interaction History Management\n  async recordSession(session: SessionRecord): Promise<void> {\n    this.interactionHistory.sessions.push(session);\n\n    // Update command frequencies\n    for (const command of session.commands) {\n      await this.updateCommandHistory(command);\n    }\n\n    // Detect new usage _patterns\n    await this.detectUsagePatterns();\n\n    // Limit history size\n    if (this.interactionHistory.sessions.length > 1000) {\n      this.interactionHistory.sessions =\n        this.interactionHistory.sessions.slice(-500);\n    }\n  }\n\n  async updateCommandHistory(command: string): Promise<void> {\n    let commandHist = this.interactionHistory.commands.find(\n      (c): boolean => c.command === command,\n    );\n\n    if (!commandHist) {\n      commandHist = {\n        command,\n        frequency: 0,\n        lastUsed: new Date(),\n        successRate: 1.0,\n        averageExecutionTime: 0,\n        userSatisfaction: 0.8,\n      };\n      this.interactionHistory.commands.push(commandHist);\n    }\n\n    commandHist.frequency++;\n    commandHist.lastUsed = new Date();\n  }\n\n  async getFrequentCommands(limit: number = 10): Promise<CommandHistory[]> {\n    return this.interactionHistory.commands\n      .sort((a, b): number => b.frequency - a.frequency)\n      .slice(0, limit);\n  }\n\n  async getRecentCommands(limit: number = 10): Promise<CommandHistory[]> {\n    return this.interactionHistory.commands\n      .sort((a, b): number => b.lastUsed.getTime() - a.lastUsed.getTime())\n      .slice(0, limit);\n  }\n\n  // User Preferences Management\n  async updateUserPreferences(\n    updates: Partial<UserPreferenceSet>,\n  ): Promise<void> {\n    Object.assign(this.userPreferences, updates);\n    this.invalidateCache(\"preferences\");\n  }\n\n  async getUserPreference<K extends keyof UserPreferenceSet>(\n    key: K,\n  ): Promise<UserPreferenceSet[K]> {\n    return this.userPreferences[key];\n  }\n\n  // Memory Event Processing\n  async processMemoryEvent(event: MemoryEvent): Promise<void> {\n    switch (event.type) {\n      case \"code_generation\":\n        await this.processCodeGenerationEvent(event);\n        break;\n      case \"pattern_recognition\":\n        await this.processPatternRecognitionEvent(event);\n        break;\n      case \"learning_update\":\n        await this.processLearningUpdateEvent(event);\n        break;\n      default:\n        // Store for potential System 2 processing\n        break;\n    }\n\n    // Update access _patterns\n    this.lastAccessTimes.set(event.id, new Date());\n  }\n\n  // Performance Optimization\n  async cleanupLeastUsedNodes(): Promise<void> {\n    const _nodeEntries = Array.from(this.knowledgeNodes.entries());\n    const _sortedByUsage = _nodeEntries.sort((a, b): number => {\n      const _aScore = this.calculateUsageScore(a[1]);\n      const _bScore = this.calculateUsageScore(b[1]);\n      return _aScore - _bScore;\n    });\n\n    // Remove least used 10%\n    const _removeCount = Math.floor(this.config.maxKnowledgeNodes * 0.1);\n    for (let i = 0; i < _removeCount && i < _sortedByUsage.length; i++) {\n      const _entry = _sortedByUsage[i];\n      if (_entry) {\n        const [nodeId] = _entry;\n        this.knowledgeNodes.delete(nodeId);\n        this.conceptGraph.nodes.delete(nodeId);\n        this.invalidateCache(`_node:${nodeId}`);\n      }\n    }\n  }\n\n  async compressMemory(): Promise<void> {\n    // Compress old interaction history\n    const _cutoffDate = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000); // 30 days\n    this.interactionHistory.sessions = this.interactionHistory.sessions.filter(\n      (session): boolean => session.startTime > _cutoffDate,\n    );\n\n    // Merge _similar _patterns\n    await this.mergeimilarPatterns();\n\n    // Clear old cache entries\n    this.cache.clear();\n  }\n\n  // Private Helper Methods\n  private generateNodeId(_type: string, name: string): string {\n    return `${_type}:${name}:${Date.now()}`;\n  }\n\n  private generatePatternId(name: string): string {\n    return `_pattern:${name}:${Date.now()}`;\n  }\n\n  private calculateCosineSimilarity(_a: number[], b: number[]): number {\n    if (_a.length !== b.length) {\n      return 0;\n    }\n\n    let dotProduct = 0;\n    let normA = 0;\n    let normB = 0;\n\n    for (let i = 0; i < _a.length && i < b.length; i++) {\n      const _aVal = _a[i] ?? 0;\n      const _bVal = b[i] ?? 0;\n      dotProduct += _aVal * _bVal;\n      normA += _aVal * _aVal;\n      normB += _bVal * _bVal;\n    }\n\n    return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));\n  }\n\n  private applyAccessDecay(_node: KnowledgeNode): void {\n    const _daysSinceAccess =\n      (Date.now() - _node.lastAccessed.getTime()) / (1000 * 60 * 60 * 24);\n    const _decayFactor = Math.exp(\n      -this.config.accessDecayRate * _daysSinceAccess,\n    );\n    _node.confidence *= _decayFactor;\n\n    // Minimum _confidence threshold\n    _node.confidence = Math.max(_node.confidence, 0.1);\n  }\n\n  private calculateUsageScore(_node: KnowledgeNode): number {\n    const _recency =\n      (Date.now() - _node.lastAccessed.getTime()) / (1000 * 60 * 60 * 24);\n    const _frequency = Math.log(_node.accessCount + 1);\n    const _confidence = _node.confidence;\n    const _quality = _node.metadata.quality;\n\n    return (_frequency + _confidence + _quality) / (1 + _recency * 0.1);\n  }\n\n  private invalidateCache(_pattern: string): void {\n    for (const key of this.cache.keys()) {\n      if (key.includes(_pattern)) {\n        this.cache.delete(key);\n      }\n    }\n  }\n\n  private async detectUsagePatterns(): Promise<void> {\n    // Analyze recent sessions for _patterns\n    const _recentSessions = this.interactionHistory.sessions.slice(-20); // Last 20 sessions\n\n    // Detect temporal _patterns\n    const _hourlyUsage = new Map<number, number>();\n    for (const session of _recentSessions) {\n      const _hour = session.startTime.getHours();\n      _hourlyUsage.set(_hour, (_hourlyUsage.get(_hour) || 0) + 1);\n    }\n\n    // Detect command _sequences\n    const _sequences = new Map<string, number>();\n    for (const session of _recentSessions) {\n      for (let i = 0; i < session.commands.length - 1; i++) {\n        const _sequence = `${session.commands[i]} -> ${session.commands[i + 1]}`;\n        _sequences.set(_sequence, (_sequences.get(_sequence) || 0) + 1);\n      }\n    }\n\n    // Store significant _patterns\n    for (const [_sequence, _frequency] of _sequences.entries()) {\n      if (_frequency >= 3) {\n        // Threshold for _pattern significance\n        const _pattern: UsagePattern = {\n          id: `seq:${_sequence}:${Date.now()}`,\n          type: \"sequential\",\n          pattern: _sequence,\n          frequency: _frequency,\n          confidence: Math.min(_frequency / 10, 1.0),\n          conditions: [],\n        };\n\n        this.interactionHistory.patterns.push(_pattern);\n      }\n    }\n  }\n\n  private async processCodeGenerationEvent(event: MemoryEvent): Promise<void> {\n    // Extract code _patterns from generation events\n    const _data = event.data as {\n      code?: string;\n      language?: string;\n      context?: string;\n    };\n\n    if (_data.code && _data.language) {\n      // Simple _pattern extraction (in production, use AST analysis)\n      const _patterns = this.extractCodePatterns(_data.code, _data.language);\n\n      for (const _pattern of _patterns) {\n        await this.addCodePattern(_pattern);\n      }\n    }\n  }\n\n  private async processPatternRecognitionEvent(\n    event: MemoryEvent,\n  ): Promise<void> {\n    // Update _pattern _confidence based on recognition success\n    const _data = event.data as { patternId?: string; success?: boolean };\n\n    if (_data.patternId) {\n      const _pattern = this.patternLibrary.codePatterns.find(\n        (p): boolean => p.id === _data.patternId,\n      );\n      if (_pattern && _data.success !== undefined) {\n        // Adjust _pattern effectiveness based on usage success\n        const _adjustment = _data.success ? 0.1 : -0.05;\n        // Update _pattern performance metrics\n        logger.debug(`Pattern ${_data.patternId} _adjustment: ${_adjustment}`);\n      }\n    }\n  }\n\n  private async processLearningUpdateEvent(event: MemoryEvent): Promise<void> {\n    // Update user preferences based on learning events\n    const _data = event.data as {\n      preference?: string;\n      value?: unknown;\n      _confidence?: number;\n    };\n\n    if (_data.preference && _data.value !== undefined) {\n      // Update user preferences with new learning\n      await this.adaptUserPreferences(\n        _data.preference,\n        _data.value,\n        _data._confidence || 0.8,\n      );\n    }\n  }\n\n  private extractCodePatterns(\n    _code: string,\n    language: string,\n  ): Omit<CodePattern, \"id\">[] {\n    // Simplified _pattern extraction\n    const _patterns: Omit<CodePattern, \"id\">[] = [];\n\n    // Function _pattern detection\n    const _functionRegex = /function\\s+(\\w+)\\s*\\([^)]*\\)\\s*{[^}]+}/g;\n    let match;\n\n    while ((match = _functionRegex.exec(_code)) !== null) {\n      _patterns.push({\n        name: `Function: ${match[1]}`,\n        description: `Function _pattern extracted from _code`,\n        code: match[0],\n        language,\n        useCase: \"Function definition\",\n        complexity: \"intermediate\",\n        performance: {\n          timeComplexity: \"O(1)\",\n          spaceComplexity: \"O(1)\",\n        },\n        examples: [],\n      });\n    }\n\n    return _patterns;\n  }\n\n  private async adaptUserPreferences(\n    preference: string,\n    value: unknown,\n    _confidence: number,\n  ): Promise<void> {\n    // Adapt user preferences based on observed behavior\n    // This would integrate with the learning engine\n    logger.debug(\n      `Adapting preference ${preference} to ${value} (_confidence: ${_confidence})`,\n    );\n  }\n\n  private async mergeimilarPatterns(): Promise<void> {\n    // Merge _patterns with high similarity to reduce redundancy\n    const _patterns = this.patternLibrary.codePatterns;\n    const merged: CodePattern[] = [];\n    const _processed = new Set<string>();\n\n    for (let i = 0; i < _patterns.length; i++) {\n      const _currentPattern = _patterns[i];\n      if (!_currentPattern || _processed.has(_currentPattern.id)) {\n        continue;\n      }\n\n      const _similar = _patterns\n        .slice(i + 1)\n        .filter(\n          (p): boolean =>\n            p &&\n            !_processed.has(p.id) &&\n            p.language === _currentPattern.language &&\n            this.calculatePatternSimilarity(_currentPattern, p) > 0.8,\n        );\n\n      if (_similar.length > 0) {\n        // Merge _similar _patterns\n        const _mergedPattern = this.mergePatterns(_currentPattern, _similar);\n        merged.push(_mergedPattern);\n\n        _processed.add(_currentPattern.id);\n        _similar.forEach((p): Set<string> => _processed.add(p.id));\n      } else {\n        merged.push(_currentPattern);\n        _processed.add(_currentPattern.id);\n      }\n    }\n\n    this.patternLibrary.codePatterns = merged;\n  }\n\n  private calculatePatternSimilarity(_a: CodePattern, b: CodePattern): number {\n    // Simple similarity calculation based on name and use case\n    const _namesSimilar =\n      _a.name.toLowerCase().includes(b.name.toLowerCase()) ||\n      b.name.toLowerCase().includes(_a.name.toLowerCase());\n    const _useCasesSimilar =\n      _a.useCase.toLowerCase() === b.useCase.toLowerCase();\n\n    return (_namesSimilar ? 0.5 : 0) + (_useCasesSimilar ? 0.5 : 0);\n  }\n\n  private mergePatterns(\n    _primary: CodePattern,\n    _similar: CodePattern[],\n  ): CodePattern {\n    // Merge multiple _similar _patterns into one\n    return {\n      ..._primary,\n      description: `${_primary.description} (merged from ${_similar.length + 1} _patterns)`,\n      examples: [..._primary.examples, ..._similar.flatMap((p): CodeExample[] => p.examples)],\n    };\n  }\n\n  private initializeDefaultPreferences(): UserPreferenceSet {\n    return {\n      developmentStyle: {\n        approach: \"iterative\",\n        preferredLanguages: [\n          {\n            language: \"typescript\",\n            proficiency: \"intermediate\",\n            frequency: 0.8,\n            preference: 4,\n          },\n          {\n            language: \"javascript\",\n            proficiency: \"intermediate\",\n            frequency: 0.6,\n            preference: 3,\n          },\n        ],\n        architecturalPatterns: [\n          { name: \"MVC\", familiarity: 0.7, preference: 3, usageFrequency: 0.5 },\n        ],\n        problemSolvingStyle: \"systematic\",\n        workPace: \"moderate\",\n      },\n      communicationPreferences: {\n        verbosity: \"moderate\",\n        explanationDepth: \"intermediate\",\n        codeCommentStyle: \"inline\",\n        feedbackStyle: \"constructive\",\n      },\n      toolPreferences: {\n        ide: [\"vscode\", \"webstorm\"],\n        frameworks: [\n          {\n            name: \"react\",\n            category: \"frontend\",\n            proficiency: 0.7,\n            preference: 4,\n          },\n          {\n            name: \"express\",\n            category: \"backend\",\n            proficiency: 0.6,\n            preference: 3,\n          },\n        ],\n        libraries: [\n          {\n            name: \"lodash\",\n            category: \"utility\",\n            proficiency: 0.8,\n            preference: 4,\n          },\n        ],\n        buildTools: [\"webpack\", \"vite\"],\n        testingTools: [\"jest\", \"vitest\"],\n      },\n      learningStyle: {\n        preferredMethods: [\n          { type: \"hands_on\", effectiveness: 0.9, preference: 5 },\n          { type: \"visual\", effectiveness: 0.7, preference: 4 },\n        ],\n        pace: \"moderate\",\n        complexity: \"simple_to_complex\",\n        feedback: \"immediate\",\n      },\n      qualityStandards: {\n        codeQuality: [\n          { metric: \"maintainability\", threshold: 80, priority: \"high\" },\n          { metric: \"readability\", threshold: 75, priority: \"high\" },\n        ],\n        testCoverage: 80,\n        documentation: {\n          required: true,\n          style: \"standard\",\n          formats: [\"markdown\", \"jsdoc\"],\n        },\n        performance: {\n          responseTime: 200,\n          throughput: 1000,\n          memoryUsage: 512,\n          cpuUsage: 70,\n        },\n        security: {\n          requirements: [\n            {\n              type: \"authentication\",\n              description: \"Secure auth required\",\n              severity: \"high\",\n              mandatory: true,\n            },\n          ],\n          compliance: [\n            {\n              name: \"OWASP\",\n              version: \"2021\",\n              requirements: [\"Top 10 coverage\"],\n            },\n          ],\n          scanningEnabled: true,\n        },\n      },\n    };\n  }\n}\n","/**\n * System2Memory - quality scoring helpers\n *\n * Extracted from `system2-memory.ts` to keep the manager class small and\n * to satisfy the repo lint rules (max-lines / explicit return types).\n */\n\nimport type { QualityMetrics } from \"./types/memory-interfaces\";\n\nexport function hashCode(str: string): string {\n  let hash = 0;\n  for (let i = 0; i < str.length; i++) {\n    const ch = str.charCodeAt(i);\n    hash = (hash << 5) - hash + ch;\n    hash = hash & hash; // Convert to 32-bit integer\n  }\n  return hash.toString(36);\n}\n\nexport function createInitialQualityMetrics(): QualityMetrics {\n  return {\n    codeQuality: {\n      maintainability: 80,\n      readability: 75,\n      testability: 70,\n      performance: 85,\n      security: 90,\n      bugDensity: 2.5,\n      complexity: 5,\n    },\n    reasoningQuality: {\n      coherence: 0.8,\n      completeness: 0.75,\n      accuracy: 0.85,\n      efficiency: 0.7,\n      creativity: 0.6,\n    },\n    userSatisfaction: {\n      userRating: 4.2,\n      taskCompletion: 0.85,\n      timeToSolution: 15,\n      iterationCount: 3,\n      userFeedback: [],\n    },\n    systemPerformance: {\n      timeComplexity: \"O(n)\",\n      spaceComplexity: \"O(1)\",\n      benchmarks: [],\n    },\n  };\n}\n\nexport function calculateBasicComplexity(code: string): number {\n  // Basic cyclomatic complexity calculation\n  const patterns = [\n    /if\\s*\\(/g,\n    /else\\s*if/g,\n    /while\\s*\\(/g,\n    /for\\s*\\(/g,\n    /switch\\s*\\(/g,\n    /case\\s+/g,\n    /catch\\s*\\(/g,\n    /\\?\\s*.*:/g, // Ternary operators\n    /&&|\\|\\|/g, // Logical operators\n  ];\n\n  let complexity = 1; // Base complexity\n  for (const pattern of patterns) {\n    complexity += (code.match(pattern) || []).length;\n  }\n  return complexity;\n}\n\nexport async function calculateMaintainability(\n  code: string,\n  _language: string,\n): Promise<number> {\n  const factors = {\n    length: Math.max(0, 100 - code.length / 100), // Shorter is better\n    comments: ((code.match(/\\/\\/|\\/\\*|#/g) || []).length / code.split(\"\\n\").length) * 100,\n    complexity: 100 - calculateBasicComplexity(code) * 10,\n  };\n\n  return Math.max(\n    0,\n    Math.min(\n      100,\n      Object.values(factors).reduce((sum, val): number => sum + val, 0) / 3,\n    ),\n  );\n}\n\nexport async function calculateReadability(code: string, _language: string): Promise<number> {\n  const lines = code.split(\"\\n\");\n  const avgLineLength =\n    lines.length > 0 ? lines.reduce((sum, line): number => sum + line.length, 0) / lines.length : 0;\n  const readabilityScore = Math.max(0, 100 - (avgLineLength - 50) * 2); // Optimal ~50 chars/line\n  return Math.max(0, Math.min(100, readabilityScore));\n}\n\nexport async function calculateTestability(code: string, _language: string): Promise<number> {\n  const hasFunctions = /function|def|public|private/.test(code);\n  const hasClasses = /class|interface/.test(code);\n  const lowCoupling = !/global|window|document/.test(code);\n\n  let score = 50;\n  if (hasFunctions) score += 20;\n  if (hasClasses) score += 15;\n  if (lowCoupling) score += 15;\n  return Math.max(0, Math.min(100, score));\n}\n\nexport async function calculatePerformance(code: string, _language: string): Promise<number> {\n  const hasNestedLoops = (code.match(/for|while/g) || []).length > 2;\n  const hasRecursion = /return.*\\w+\\(/.test(code);\n  const hasEarlyReturns = (code.match(/return/g) || []).length > 1;\n\n  let score = 80;\n  if (hasNestedLoops) score -= 20;\n  if (hasRecursion && !hasEarlyReturns) score -= 15;\n  if (hasEarlyReturns) score += 10;\n  return Math.max(0, Math.min(100, score));\n}\n\nexport async function calculateSecurity(code: string, _language: string): Promise<number> {\n  const vulnerabilities = [\n    /eval\\(/g,\n    /innerHTML\\s*=/g,\n    /document\\.write/g,\n    /\\$\\{.*\\}/g, // Template injection potential\n    /sql|query.*\\+/gi, // SQL injection potential\n  ];\n\n  let score = 90;\n  for (const pattern of vulnerabilities) {\n    if (pattern.test(code)) score -= 15;\n  }\n  return Math.max(0, Math.min(100, score));\n}\n\nexport async function calculateBugDensity(code: string, _language: string): Promise<number> {\n  const bugPatterns = [\n    /==\\s*null/g, // Null comparison\n    /undefined/g,\n    /NaN/g,\n    /catch\\s*\\(\\s*\\)/g, // Empty catch blocks\n    /if\\s*\\([^)]*=[^=]/g, // Assignment in condition\n  ];\n\n  const lines = code.split(\"\\n\").length;\n  let bugCount = 0;\n  for (const pattern of bugPatterns) {\n    bugCount += (code.match(pattern) || []).length;\n  }\n  return (bugCount / lines) * 1000; // Bugs per 1000 lines\n}\n\nexport async function calculateCyclomaticComplexity(\n  code: string,\n  _language: string,\n): Promise<number> {\n  return calculateBasicComplexity(code);\n}\n\n\n","/**\n * MARIA Memory System - System 2 Memory Implementation\n *\n * Deliberate reasoning and _quality _traces for complex decision making\n * Handles reasoning steps, _quality evaluation, and improvement suggestions\n */\n\nimport type {\n  ActionItem,\n  AlternativeReasoning,\n  CodeQualityMetrics,\n  DecisionNode,\n  DecisionTree,\n  Enhancement,\n  Evidence,\n  MemoryEvent,\n  QualityMetrics,\n  ReasoningContext,\n  ReasoningStep,\n  ReasoningTrace,\n  ReflectionEntry,\n  System2Config,\n  System2Memory,\n} from \"./types/memory-interfaces\";\nimport { defaultLogger as logger } from \"../../adapters/logging/default\";\nimport {\n  calculateBugDensity,\n  calculateCyclomaticComplexity,\n  calculateMaintainability,\n  calculatePerformance,\n  calculateReadability,\n  calculateSecurity,\n  calculateTestability,\n  createInitialQualityMetrics,\n  hashCode,\n} from \"./system2-memory.quality\";\n\nexport class System2MemoryManager implements System2Memory {\n  private reasoningTraces: Map<string, ReasoningTrace> = new Map();\n  private qualityMetrics: QualityMetrics;\n  private decisionTrees: Map<string, DecisionTree> = new Map();\n  private enhancements: Map<string, Enhancement> = new Map();\n  private reflectionEntries: Map<string, ReflectionEntry> = new Map();\n  private config: System2Config;\n  private analysisCache: Map<string, unknown> = new Map();\n\n  constructor(_config: System2Config) {\n    this.config = _config;\n    this.qualityMetrics = createInitialQualityMetrics();\n  }\n\n  get reasoningSteps(): ReasoningTrace[] {\n    return Array.from(this.reasoningTraces.values()).sort(\n      (a, b): number => b.timestamp.getTime() - a.timestamp.getTime(),\n    );\n  }\n\n  get qualityEvaluation(): QualityMetrics {\n    return this.qualityMetrics;\n  }\n\n  get decisionContext(): DecisionTree {\n    // Return the most recent or most relevant decision _tree\n    const _trees = Array.from(this.decisionTrees.values());\n    return (\n      _trees.sort(\n        (a, b): number =>\n          b.metadata.lastUpdated.getTime() - a.metadata.lastUpdated.getTime(),\n      )[0] || this.createEmptyDecisionTree()\n    );\n  }\n\n  get improvementSuggestions(): Enhancement[] {\n    return Array.from(this.enhancements.values())\n      .filter(\n        (_enhancement): boolean =>\n          _enhancement.status === \"proposed\" ||\n          _enhancement.status === \"approved\",\n      )\n      .sort((a, b): number => b.priority - a.priority);\n  }\n\n  get reflectionData(): ReflectionEntry[] {\n    return Array.from(this.reflectionEntries.values()).sort(\n      (a, b): number => b.timestamp.getTime() - a.timestamp.getTime(),\n    );\n  }\n\n  // Reasoning Trace Management\n  async startReasoningTrace(\n    _context: ReasoningContext,\n    initialStep?: string,\n  ): Promise<ReasoningTrace> {\n    const _trace: ReasoningTrace = {\n      id: this.generateTraceId(),\n      timestamp: new Date(),\n      context: _context,\n      steps: [],\n      conclusion: \"\",\n      confidence: 0.0,\n      alternatives: [],\n      metadata: {\n        complexity: this.assessComplexity(_context),\n        domain: this.identifyDomain(_context),\n        techniques: [],\n        qualityScore: 0.0,\n        reviewRequired: false,\n      },\n    };\n\n    if (initialStep) {\n      await this.addReasoningStep(_trace.id, {\n        type: \"analysis\",\n        description: \"Initial _problem analysis\",\n        input: _context.problem,\n        output: initialStep,\n      });\n    }\n\n    this.reasoningTraces.set(_trace.id, _trace);\n    await this.manageTraceLimit();\n\n    return _trace;\n  }\n\n  async addReasoningStep(\n    traceId: string,\n    stepData: Omit<\n      ReasoningStep,\n      \"id\" | \"confidence\" | \"duration\" | \"dependencies\"\n    >,\n  ): Promise<ReasoningStep> {\n    const _trace = this.reasoningTraces.get(traceId);\n    if (!_trace) {\n      throw new Error(`Reasoning _trace ${traceId} not _found`);\n    }\n\n    const _startTime = Date.now();\n\n    const step: ReasoningStep = {\n      id: this.generateStepId(traceId),\n      confidence: this.calculateStepConfidence(stepData, _trace),\n      duration: 0, // Will be updated when step completes\n      dependencies: this.identifyDependencies(stepData, _trace.steps),\n      ...stepData,\n    };\n\n    _trace.steps.push(step);\n    _trace.metadata.techniques.push(stepData.type);\n\n    // Update step duration\n    step.duration = Date.now() - _startTime;\n\n    // Update _trace _quality and _complexity\n    await this.updateTraceQuality(_trace);\n\n    return step;\n  }\n\n  async completeReasoningTrace(\n    traceId: string,\n    conclusion: string,\n    confidence: number,\n  ): Promise<ReasoningTrace> {\n    const _trace = this.reasoningTraces.get(traceId);\n    if (!_trace) {\n      throw new Error(`Reasoning _trace ${traceId} not _found`);\n    }\n\n    _trace.conclusion = conclusion;\n    _trace.confidence = confidence;\n    _trace.metadata.qualityScore = await this.calculateReasoningQuality(_trace);\n    _trace.metadata.reviewRequired =\n      _trace.metadata.qualityScore < this.config.qualityThreshold;\n\n    // Generate improvement suggestions based on the _trace\n    await this.generateImprovementSuggestions(_trace);\n\n    // Update global _quality metrics\n    await this.updateGlobalQualityMetrics(_trace);\n\n    return _trace;\n  }\n\n  async addAlternativeReasoning(\n    traceId: string,\n    alternative: Omit<AlternativeReasoning, \"id\">,\n  ): Promise<AlternativeReasoning> {\n    const _trace = this.reasoningTraces.get(traceId);\n    if (!_trace) {\n      throw new Error(`Reasoning _trace ${traceId} not _found`);\n    }\n\n    const altReasoning: AlternativeReasoning = {\n      id: this.generateAlternativeId(traceId),\n      ...alternative,\n    };\n\n    _trace.alternatives.push(altReasoning);\n    return altReasoning;\n  }\n\n  async getReasoningTrace(traceId: string): Promise<ReasoningTrace | null> {\n    return this.reasoningTraces.get(traceId) || null;\n  }\n\n  async searchReasoningTraces(\n    query: {\n      domain?: string;\n      _complexity?: string;\n      minQuality?: number;\n      timeframe?: { start: Date; end: Date };\n    },\n    limit: number = 10,\n  ): Promise<ReasoningTrace[]> {\n    const _cacheKey = `search:reasoning:${JSON.stringify(query)}:${limit}`;\n    const _cached = this.analysisCache.get(_cacheKey) as ReasoningTrace[];\n    if (_cached) {\n      return _cached;\n    }\n\n    let _traces = Array.from(this.reasoningTraces.values());\n\n    if (query.domain) {\n      _traces = _traces.filter(\n        (_trace): boolean => _trace.metadata.domain === query.domain,\n      );\n    }\n\n    if (query._complexity) {\n      _traces = _traces.filter(\n        (_trace): boolean => _trace.metadata.complexity === query._complexity,\n      );\n    }\n\n    if (query.minQuality !== undefined) {\n      _traces = _traces.filter(\n        (_trace): boolean => _trace.metadata.qualityScore >= (query.minQuality ?? 0),\n      );\n    }\n\n    if (query.timeframe) {\n      _traces = _traces.filter(\n        (_trace): boolean =>\n          _trace.timestamp >= query.timeframe!.start &&\n          _trace.timestamp <= query.timeframe!.end,\n      );\n    }\n\n    const _results = _traces\n      .sort((a, b): number => b.metadata.qualityScore - a.metadata.qualityScore)\n      .slice(0, limit);\n\n    this.analysisCache.set(_cacheKey, _results);\n    return _results;\n  }\n\n  // Decision Tree Management\n  async createDecisionTree(\n    _domain: string,\n    initialCondition: string,\n  ): Promise<DecisionTree> {\n    const _tree: DecisionTree = {\n      id: this.generateDecisionTreeId(_domain),\n      rootNode: {\n        id: \"root\",\n        type: \"condition\",\n        description: initialCondition,\n        children: [],\n        confidence: 0.8,\n        evidence: [],\n        alternatives: [],\n      },\n      metadata: {\n        domain: \"\",\n        complexity: 1,\n        accuracy: 0.8,\n        lastUpdated: new Date(),\n        usageCount: 0,\n      },\n    };\n\n    this.decisionTrees.set(_tree.id, _tree);\n    return _tree;\n  }\n\n  async addDecisionNode(\n    treeId: string,\n    parentNodeId: string,\n    _node: Omit<DecisionNode, \"id\">,\n  ): Promise<DecisionNode> {\n    const _tree = this.decisionTrees.get(treeId);\n    if (!_tree) {\n      throw new Error(`Decision _tree ${treeId} not _found`);\n    }\n\n    const newNode: DecisionNode = {\n      id: this.generateNodeId(treeId),\n      ..._node,\n    };\n\n    const _parentNode = this.findDecisionNode(_tree.rootNode, parentNodeId);\n    if (_parentNode) {\n      _parentNode.children.push(newNode);\n      _tree.metadata.complexity = this.calculateTreeComplexity(_tree.rootNode);\n      _tree.metadata.lastUpdated = new Date();\n    }\n\n    return newNode;\n  }\n\n  async addEvidence(\n    _treeId: string,\n    nodeId: string,\n    evidence: Evidence,\n  ): Promise<void> {\n    const _tree = this.decisionTrees.get(_treeId);\n    if (!_tree) {\n      throw new Error(`Decision _tree ${_treeId} not _found`);\n    }\n\n    const _node = this.findDecisionNode(_tree.rootNode, nodeId);\n    if (_node) {\n      _node.evidence.push(evidence);\n\n      // Recalculate _node confidence based on evidence\n      _node.confidence = this.calculateNodeConfidence(_node.evidence);\n      _tree.metadata.lastUpdated = new Date();\n    }\n  }\n\n  async queryDecisionTree(\n    treeId: string,\n    context: Record<string, unknown>,\n  ): Promise<DecisionNode[]> {\n    const _tree = this.decisionTrees.get(treeId);\n    if (!_tree) {\n      return [];\n    }\n\n    _tree.metadata.usageCount++;\n    return this.traverseDecisionTree(_tree.rootNode, context);\n  }\n\n  // Enhancement Management\n  async proposeEnhancement(\n    _enhancement: Omit<Enhancement, \"id\" | \"status\">,\n  ): Promise<Enhancement> {\n    const newEnhancement: Enhancement = {\n      id: this.generateEnhancementId(),\n      status: \"proposed\",\n      ..._enhancement,\n    };\n\n    this.enhancements.set(newEnhancement.id, newEnhancement);\n\n    // Automatically approve low-risk, high-impact enhancements\n    if (this.shouldAutoApprove(newEnhancement)) {\n      newEnhancement.status = \"approved\";\n    }\n\n    return newEnhancement;\n  }\n\n  async updateEnhancementStatus(\n    enhancementId: string,\n    status: Enhancement[\"status\"],\n    feedback?: string,\n  ): Promise<boolean> {\n    const _enhancement = this.enhancements.get(enhancementId);\n    if (!_enhancement) {\n      return false;\n    }\n\n    // Use feedback if provided\n    if (feedback) {\n      logger.debug(`Enhancement feedback: ${feedback}`);\n    }\n\n    _enhancement.status = status;\n\n    if (status === \"completed\") {\n      await this.evaluateEnhancementImpact(_enhancement);\n    }\n\n    return true;\n  }\n\n  async getEnhancementsByType(\n    type: Enhancement[\"type\"],\n  ): Promise<Enhancement[]> {\n    return Array.from(this.enhancements.values())\n      .filter((_enhancement): boolean => _enhancement.type === type)\n      .sort((a, b): number => b.priority - a.priority);\n  }\n\n  // Reflection Management\n  async addReflectionEntry(\n    trigger: string,\n    observation: string,\n    analysis: string,\n    _insight: string,\n    confidence: number = 0.8,\n  ): Promise<ReflectionEntry> {\n    const _reflection: ReflectionEntry = {\n      id: this.generateReflectionId(),\n      timestamp: new Date(),\n      trigger,\n      observation,\n      analysis,\n      insight: _insight,\n      actionItems: [],\n      confidence,\n    };\n\n    this.reflectionEntries.set(_reflection.id, _reflection);\n\n    // Generate action items from insights\n    await this.generateActionItems(_reflection);\n\n    return _reflection;\n  }\n\n  async addActionItem(\n    reflectionId: string,\n    actionItem: Omit<ActionItem, \"id\" | \"status\">,\n  ): Promise<ActionItem> {\n    const _reflection = this.reflectionEntries.get(reflectionId);\n    if (!_reflection) {\n      throw new Error(`Reflection entry ${reflectionId} not _found`);\n    }\n\n    const action: ActionItem = {\n      id: this.generateActionItemId(reflectionId),\n      status: \"open\",\n      ...actionItem,\n    };\n\n    _reflection.actionItems.push(action);\n    return action;\n  }\n\n  async getReflectionInsights(\n    timeframe?: { start: Date; end: Date },\n    minConfidence: number = 0.7,\n  ): Promise<ReflectionEntry[]> {\n    let reflections = Array.from(this.reflectionEntries.values());\n\n    if (timeframe) {\n      reflections = reflections.filter(\n        (r): boolean => r.timestamp >= timeframe.start && r.timestamp <= timeframe.end,\n      );\n    }\n\n    return reflections\n      .filter((r): boolean => r.confidence >= minConfidence)\n      .sort((a, b): number => b.confidence - a.confidence);\n  }\n\n  // Memory Event Processing\n  async processMemoryEvent(event: MemoryEvent): Promise<void> {\n    switch (event.type) {\n      case \"code_generation\":\n        await this.processCodeGenerationEvent(event);\n        break;\n      case \"bug_fix\":\n        await this.processBugFixEvent(event);\n        break;\n      case \"quality_improvement\":\n        await this.processQualityImprovementEvent(event);\n        break;\n      default:\n        await this.processGenericEvent(event);\n        break;\n    }\n  }\n\n  // Quality Assessment\n  async assessCodeQuality(\n    code: string,\n    language: string,\n    context?: Record<string, unknown>,\n  ): Promise<CodeQualityMetrics> {\n    // Use context if provided\n    if (context) {\n      logger.debug(\"Code _quality context\", { keys: Object.keys(context) });\n    }\n    const _cacheKey = `_quality:${this.hashCode(code)}:${language}`;\n    const _cached = this.analysisCache.get(_cacheKey) as CodeQualityMetrics;\n    if (_cached) {\n      return _cached;\n    }\n\n    const metrics: CodeQualityMetrics = {\n      maintainability: await calculateMaintainability(code, language),\n      readability: await calculateReadability(code, language),\n      testability: await calculateTestability(code, language),\n      performance: await calculatePerformance(code, language),\n      security: await calculateSecurity(code, language),\n      bugDensity: await calculateBugDensity(code, language),\n      complexity: await calculateCyclomaticComplexity(code, language),\n    };\n\n    this.analysisCache.set(_cacheKey, metrics);\n    return metrics;\n  }\n\n  async updateQualityMetrics(metrics: Partial<QualityMetrics>): Promise<void> {\n    Object.assign(this.qualityMetrics, metrics);\n  }\n\n  // Private Helper Methods\n  private generateTraceId(): string {\n    return `_trace:${Date.now()}:${Math.random().toString(36).substr(2, 9)}`;\n  }\n\n  private generateStepId(traceId: string): string {\n    return `${traceId}:step:${Date.now()}`;\n  }\n\n  private generateAlternativeId(traceId: string): string {\n    return `${traceId}:alt:${Date.now()}`;\n  }\n\n  private generateDecisionTreeId(domain: string): string {\n    return `_tree:${domain}:${Date.now()}`;\n  }\n\n  private generateNodeId(treeId: string): string {\n    return `${treeId}:_node:${Date.now()}`;\n  }\n\n  private generateEnhancementId(): string {\n    return `_enhancement:${Date.now()}:${Math.random().toString(36).substr(2, 9)}`;\n  }\n\n  private generateReflectionId(): string {\n    return `_reflection:${Date.now()}:${Math.random().toString(36).substr(2, 9)}`;\n  }\n\n  private generateActionItemId(reflectionId: string): string {\n    return `${reflectionId}:action:${Date.now()}`;\n  }\n\n  private assessComplexity(\n    _context: ReasoningContext,\n  ): \"simple\" | \"moderate\" | \"complex\" | \"very_complex\" {\n    const _factors = [\n      _context.goals.length > 3,\n      _context.constraints.length > 2,\n      _context.assumptions.length > 3,\n      _context.problem.length > 500,\n    ];\n\n    const _complexityScore = _factors.filter(Boolean).length;\n\n    if (_complexityScore === 0) {\n      return \"simple\";\n    }\n    if (_complexityScore === 1) {\n      return \"moderate\";\n    }\n    if (_complexityScore === 2) {\n      return \"complex\";\n    }\n    return \"very_complex\";\n  }\n\n  private identifyDomain(context: ReasoningContext): string {\n    const _problem = context.problem.toLowerCase();\n\n    if (_problem.includes(\"performance\") || _problem.includes(\"optimization\")) {\n      return \"performance\";\n    }\n    if (_problem.includes(\"security\") || _problem.includes(\"vulnerability\")) {\n      return \"security\";\n    }\n    if (_problem.includes(\"architecture\") || _problem.includes(\"design\")) {\n      return \"architecture\";\n    }\n    if (_problem.includes(\"bug\") || _problem.includes(\"error\")) {\n      return \"debugging\";\n    }\n\n    return \"general\";\n  }\n\n  private calculateStepConfidence(\n    stepData: Omit<\n      ReasoningStep,\n      \"id\" | \"confidence\" | \"duration\" | \"dependencies\"\n    >,\n    _trace: ReasoningTrace,\n  ): number {\n    let confidence = 0.8; // Base confidence\n\n    // Adjust based on step type\n    switch (stepData.type) {\n      case \"analysis\":\n        confidence = 0.7;\n        break;\n      case \"inference\":\n        confidence = 0.6;\n        break;\n      case \"evaluation\":\n        confidence = 0.8;\n        break;\n      case \"synthesis\":\n        confidence = 0.5;\n        break;\n    }\n\n    // Adjust based on input/output _quality\n    if (stepData.input.length > 100) {\n      confidence += 0.1;\n    }\n    if (stepData.output.length > 100) {\n      confidence += 0.1;\n    }\n\n    // Adjust based on _trace _complexity\n    if (_trace.metadata.complexity === \"simple\") {\n      confidence += 0.1;\n    }\n    if (_trace.metadata.complexity === \"very_complex\") {\n      confidence -= 0.1;\n    }\n\n    return Math.max(0.1, Math.min(1.0, confidence));\n  }\n\n  private identifyDependencies(\n    stepData: Omit<\n      ReasoningStep,\n      \"id\" | \"confidence\" | \"duration\" | \"dependencies\"\n    >,\n    existingSteps: ReasoningStep[],\n  ): string[] {\n    const dependencies: string[] = [];\n\n    // Simple keyword-based dependency detection\n    for (const step of existingSteps) {\n      if (stepData.input.includes(step.output.slice(0, 50))) {\n        dependencies.push(step.id);\n      }\n    }\n\n    return dependencies;\n  }\n\n  private async updateTraceQuality(_trace: ReasoningTrace): Promise<void> {\n    // Calculate _quality based on step _coherence and _completeness\n    const _stepCount = _trace.steps.length;\n    const _avgConfidence =\n      _trace.steps.reduce((sum, step): number => sum + step.confidence, 0) / _stepCount;\n    const _hasAnalysis = _trace.steps.some((step): boolean => step.type === \"analysis\");\n    const _hasEvaluation = _trace.steps.some(\n      (step): boolean => step.type === \"evaluation\",\n    );\n\n    let _quality = _avgConfidence * 0.6;\n    if (_hasAnalysis) {\n      _quality += 0.2;\n    }\n    if (_hasEvaluation) {\n      _quality += 0.2;\n    }\n\n    _trace.metadata.qualityScore = Math.max(0, Math.min(1, _quality));\n  }\n\n  private async calculateReasoningQuality(\n    _trace: ReasoningTrace,\n  ): Promise<number> {\n    const _factors = {\n      _coherence: this.calculateCoherence(_trace),\n      _completeness: this.calculateCompleteness(_trace),\n      accuracy: this.calculateAccuracy(_trace),\n      efficiency: this.calculateEfficiency(_trace),\n      _creativity: this.calculateCreativity(_trace),\n    };\n\n    return (\n      Object.values(_factors).reduce((sum, value): number => sum + value, 0) /\n      Object.keys(_factors).length\n    );\n  }\n\n  private calculateCoherence(_trace: ReasoningTrace): number {\n    // Measure logical flow between steps\n    let coherenceSum = 0;\n    let pairCount = 0;\n\n    for (let i = 1; i < _trace.steps.length; i++) {\n      const _prev = _trace.steps[i - 1];\n      const _curr = _trace.steps[i];\n\n      // Simple _coherence check: current step input relates to previous step output\n      const _coherence = _curr?.input.includes(_prev?.output.slice(0, 30) || \"\")\n        ? 1\n        : 0.5;\n      coherenceSum += _coherence;\n      pairCount++;\n    }\n\n    return pairCount > 0 ? coherenceSum / pairCount : 0.8;\n  }\n\n  private calculateCompleteness(_trace: ReasoningTrace): number {\n    const _requiredStepTypes = [\"analysis\", \"evaluation\"];\n    const _presentTypes = new Set(\n      _trace.steps.map((step): string => step.type as string),\n    );\n\n    const _completeness =\n      _requiredStepTypes.filter((type): boolean => _presentTypes.has(type)).length /\n      _requiredStepTypes.length;\n    return _completeness;\n  }\n\n  private calculateAccuracy(_trace: ReasoningTrace): number {\n    // Base on step confidence and alternative consideration\n    const _avgConfidence =\n      _trace.steps.reduce((sum, step): number => sum + step.confidence, 0) /\n      _trace.steps.length;\n    const _alternativeBonus = _trace.alternatives.length > 0 ? 0.1 : 0;\n\n    return Math.min(1, _avgConfidence + _alternativeBonus);\n  }\n\n  private calculateEfficiency(_trace: ReasoningTrace): number {\n    // Measure steps per unit of _complexity\n    const _complexity = { simple: 1, moderate: 2, complex: 3, verycomplex: 4 }[\n      _trace.metadata.complexity\n    ];\n    const _stepEfficiency = Math.max(\n      0.2,\n      1 - (_trace.steps.length - _complexity) * 0.1,\n    );\n\n    return _stepEfficiency;\n  }\n\n  private calculateCreativity(_trace: ReasoningTrace): number {\n    // Measure use of diverse reasoning techniques and alternatives\n    const _uniqueTechniques = new Set(_trace.metadata.techniques).size;\n    const _alternativeCount = _trace.alternatives.length;\n\n    const _creativity = Math.min(\n      1,\n      _uniqueTechniques * 0.3 + _alternativeCount * 0.2 + 0.5,\n    );\n    return _creativity;\n  }\n\n  private async generateImprovementSuggestions(\n    _trace: ReasoningTrace,\n  ): Promise<void> {\n    if (_trace.metadata.qualityScore < 0.7) {\n      await this.proposeEnhancement({\n        type: \"quality\",\n        description: `Improve reasoning _quality for ${_trace.metadata.domain} problems`,\n        impact: {\n          benefitScore: 7,\n          effortScore: 5,\n          riskScore: 2,\n          affectedUsers: 1,\n          affectedComponents: [\"reasoning\", \"decision-making\"],\n        },\n        implementation: {\n          phases: [\n            {\n              id: \"analysis\",\n              name: \"Quality Analysis\",\n              description: \"Analyze low-_quality reasoning patterns\",\n              duration: 3,\n              deliverables: [\"Pattern analysis\", \"Improvement plan\"],\n              dependencies: [],\n            },\n          ],\n          timeline: 7,\n          resources: [\n            {\n              type: \"developer\",\n              quantity: 1,\n              duration: 7,\n            },\n          ],\n          dependencies: [],\n          risks: [\n            {\n              id: \"_complexity\",\n              description: \"Reasoning improvement may add _complexity\",\n              probability: 0.3,\n              impact: 4,\n              mitigation: \"Gradual implementation with testing\",\n              contingency: \"Rollback to previous version\",\n            },\n          ],\n        },\n        priority: 6,\n      });\n    }\n  }\n\n  private async updateGlobalQualityMetrics(\n    _trace: ReasoningTrace,\n  ): Promise<void> {\n    // Update reasoning _quality metrics\n    const _currentReasoning = this.qualityMetrics.reasoningQuality;\n\n    this.qualityMetrics.reasoningQuality = {\n      coherence:\n        (_currentReasoning.coherence + this.calculateCoherence(_trace)) / 2,\n      completeness:\n        (_currentReasoning.completeness + this.calculateCompleteness(_trace)) /\n        2,\n      accuracy:\n        (_currentReasoning.accuracy + this.calculateAccuracy(_trace)) / 2,\n      efficiency:\n        (_currentReasoning.efficiency + this.calculateEfficiency(_trace)) / 2,\n      creativity:\n        (_currentReasoning.creativity + this.calculateCreativity(_trace)) / 2,\n    };\n  }\n\n  private createEmptyDecisionTree(): DecisionTree {\n    return {\n      id: \"empty\",\n      rootNode: {\n        id: \"root\",\n        type: \"condition\",\n        description: \"No decision context available\",\n        children: [],\n        confidence: 0,\n        evidence: [],\n        alternatives: [],\n      },\n      metadata: {\n        domain: \"unknown\",\n        complexity: 0,\n        accuracy: 0,\n        lastUpdated: new Date(),\n        usageCount: 0,\n      },\n    };\n  }\n\n  private findDecisionNode(\n    _root: DecisionNode,\n    nodeId: string,\n  ): DecisionNode | null {\n    if (_root.id === nodeId) {\n      return _root;\n    }\n\n    for (const child of _root.children) {\n      const _found = this.findDecisionNode(child, nodeId);\n      if (_found) {\n        return _found;\n      }\n    }\n\n    return null;\n  }\n\n  private calculateTreeComplexity(root: DecisionNode): number {\n    let maxDepth = 0;\n    let nodeCount = 0;\n\n    const _traverse = (_node: DecisionNode, depth: number): void => {\n      nodeCount++;\n      maxDepth = Math.max(maxDepth, depth);\n\n      for (const child of _node.children) {\n        _traverse(child, depth + 1);\n      }\n    };\n\n    _traverse(root, 1);\n    return maxDepth + Math.log(nodeCount);\n  }\n\n  private calculateNodeConfidence(evidence: Evidence[]): number {\n    if (evidence.length === 0) {\n      return 0.5;\n    }\n\n    const _weightedSum = evidence.reduce((sum, e): number => sum + e.strength, 0);\n    return Math.min(1, _weightedSum / evidence.length);\n  }\n\n  private traverseDecisionTree(\n    _node: DecisionNode,\n    context: Record<string, unknown>,\n  ): DecisionNode[] {\n    const _path: DecisionNode[] = [_node];\n\n    // Simple rule-based traversal (in production, use more sophisticated logic)\n    for (const child of _node.children) {\n      if (\n        child.type === \"condition\" &&\n        this.evaluateCondition(child, context)\n      ) {\n        _path.push(...this.traverseDecisionTree(child, context));\n        break;\n      }\n    }\n\n    return _path;\n  }\n\n  private evaluateCondition(\n    _node: DecisionNode,\n    _context: Record<string, unknown>,\n  ): boolean {\n    // Simplified condition evaluation\n    return _node.confidence > 0.5;\n  }\n\n  private shouldAutoApprove(_enhancement: Enhancement): boolean {\n    return (\n      _enhancement.impact.riskScore <= 3 &&\n      _enhancement.impact.benefitScore >= 7 &&\n      _enhancement.priority >= 7\n    );\n  }\n\n  private async evaluateEnhancementImpact(\n    _enhancement: Enhancement,\n  ): Promise<void> {\n    // Evaluate the actual impact of completed enhancements\n    logger.debug(\n      `Evaluating impact of _enhancement: ${_enhancement.description}`,\n    );\n\n    // This would integrate with performance monitoring and user feedback systems\n    // to measure the actual impact and improve future _enhancement predictions\n  }\n\n  private async generateActionItems(\n    _reflection: ReflectionEntry,\n  ): Promise<void> {\n    // Generate actionable items from _reflection insights\n    const _insight = _reflection.insight.toLowerCase();\n\n    if (_insight.includes(\"improve\") || _insight.includes(\"optimize\")) {\n      await this.addActionItem(_reflection.id, {\n        description: `Implement improvement based on: ${_reflection.insight}`,\n        priority: 7,\n        dueDate: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000), // 1 week\n      });\n    }\n\n    if (_insight.includes(\"learn\") || _insight.includes(\"study\")) {\n      await this.addActionItem(_reflection.id, {\n        description: `Research and learn: ${_reflection.insight}`,\n        priority: 5,\n        dueDate: new Date(Date.now() + 14 * 24 * 60 * 60 * 1000), // 2 weeks\n      });\n    }\n  }\n\n  private async processCodeGenerationEvent(event: MemoryEvent): Promise<void> {\n    const _data = event.data as {\n      code?: string;\n      language?: string;\n      _quality?: number;\n    };\n\n    if (_data.code && _data.language) {\n      const _quality = await this.assessCodeQuality(_data.code, _data.language);\n\n      if (_quality.maintainability < 70) {\n        await this.addReflectionEntry(\n          \"Low code maintainability\",\n          `Generated code has maintainability score of ${_quality.maintainability}`,\n          \"Need to improve code generation patterns for better maintainability\",\n          \"Focus on cleaner abstractions and better naming conventions\",\n          0.8,\n        );\n      }\n    }\n  }\n\n  private async processBugFixEvent(event: MemoryEvent): Promise<void> {\n    const _data = event.data as {\n      bugType?: string;\n      solution?: string;\n      timeToFix?: number;\n    };\n\n    if (_data.bugType && _data.timeToFix) {\n      await this.addReflectionEntry(\n        `Bug fix: ${_data.bugType}`,\n        `Fixed ${_data.bugType} in ${_data.timeToFix} minutes`,\n        \"Analyze if this bug type is recurring and could be prevented\",\n        _data.timeToFix > 60\n          ? \"Consider adding automated detection for this bug pattern\"\n          : \"Good resolution time\",\n        0.7,\n      );\n    }\n  }\n\n  private async processQualityImprovementEvent(\n    event: MemoryEvent,\n  ): Promise<void> {\n    const _data = event.data as { improvement?: string; impact?: number };\n\n    if (_data.improvement) {\n      await this.proposeEnhancement({\n        type: \"quality\",\n        description: `Quality improvement: ${_data.improvement}`,\n        impact: {\n          benefitScore: _data.impact || 5,\n          effortScore: 3,\n          riskScore: 2,\n          affectedUsers: 1,\n          affectedComponents: [\"code-_quality\"],\n        },\n        implementation: {\n          phases: [],\n          timeline: 5,\n          resources: [],\n          dependencies: [],\n          risks: [],\n        },\n        priority: 6,\n      });\n    }\n  }\n\n  private async processGenericEvent(event: MemoryEvent): Promise<void> {\n    // Store event for potential future analysis\n    logger.debug(`Processing generic event: ${event.type}`, { _data: event.data });\n  }\n\n  private async manageTraceLimit(): Promise<void> {\n    if (this.reasoningTraces.size > this.config.maxReasoningTraces) {\n      const _traces = Array.from(this.reasoningTraces.entries());\n      const _sortedByQuality = _traces.sort(\n        (a, b): number => a[1].metadata.qualityScore - b[1].metadata.qualityScore,\n      );\n\n      // Remove lowest _quality _traces (keep 80% of limit)\n      const _removeCount = Math.min(\n        Math.floor(this.config.maxReasoningTraces * 0.2),\n        _sortedByQuality.length,\n      );\n      for (let i = 0; i < _removeCount; i++) {\n        const _traceEntry = _sortedByQuality[i];\n        if (_traceEntry) {\n          this.reasoningTraces.delete(_traceEntry[0]);\n        }\n      }\n    }\n  }\n\n  private hashCode(str: string): string {\n    return hashCode(str);\n  }\n}\n","import fs from \"fs\";\nimport path from \"path\";\nimport { promisify } from \"util\";\nimport { spawn } from \"child_process\";\nimport chalk from \"chalk\";\nimport { stdoutLine } from \"../../shared/utils/tty\";\n\nconst _fsAsync = {\n  readFile: promisify(fs.readFile),\n  writeFile: promisify(fs.writeFile),\n  unlink: promisify(fs.unlink),\n  mkdir: promisify(fs.mkdir),\n  rmdir: promisify(fs.rmdir),\n  readdir: promisify(fs.readdir),\n  stat: promisify(fs.stat),\n  copyFile: promisify(fs.copyFile),\n  rename: promisify(fs.rename),\n  access: promisify(fs.access),\n  realpath: promisify(fs.realpath),\n  symlink: promisify(fs.symlink),\n  readlink: promisify(fs.readlink),\n  lstat: promisify(fs.lstat),\n  chmod: promisify(fs.chmod),\n  chown: promisify(fs.chown),\n};\n\nexport interface FileStats {\n  _name: string;\n  _path: string;\n  isFile: boolean;\n  isDirectory: boolean;\n  isSymlink: boolean;\n  size: number;\n  created: Date;\n  modified: Date;\n  permissions: string;\n  owner?: string;\n}\n\nexport interface FileOperationOptions {\n  recursive?: boolean;\n  force?: boolean;\n  preserveTimestamps?: boolean;\n  backup?: boolean;\n  dryRun?: boolean;\n  followSymlinks?: boolean;\n}\n\nexport interface SearchOptions {\n  _pattern?: string;\n  type?: \"file\" | \"directory\" | \"both\";\n  maxDepth?: number;\n  caseSensitive?: boolean;\n  includeHidden?: boolean;\n  regex?: boolean;\n  followSymlinks?: boolean;\n}\n\nexport class FileSystemService {\n  private static instance: FileSystemService;\n  private operationLog: Array<{\n    operation: string;\n    _path: string;\n    timestamp: Date;\n    success: boolean;\n  }> = [];\n\n  public static getInstance(): FileSystemService {\n    if (!FileSystemService.instance) {\n      FileSystemService.instance = new FileSystemService();\n    }\n    return FileSystemService.instance;\n  }\n\n  private constructor() {\n    // Constructor implementation\n  }\n\n  // Basic File Operations\n  async readFile(\n    _filePath: string,\n    encoding: BufferEncoding = \"utf8\",\n  ): Promise<string | Buffer> {\n    try {\n      const _resolvedPath = path.resolve(_filePath);\n      const _content = await _fsAsync.readFile(_resolvedPath, encoding);\n      this.logOperation(\"read\", _resolvedPath, true);\n      return _content;\n    } catch (_error) {\n      this.logOperation(\"read\", _filePath, false);\n      throw new Error(`Failed to read file ${_filePath}: ${_error.message}`);\n    }\n  }\n\n  async writeFile(\n    _filePath: string,\n    _content: string | Buffer,\n    options: FileOperationOptions = {},\n  ): Promise<void> {\n    try {\n      const _resolvedPath = path.resolve(_filePath);\n\n      if (options.backup && (await this.exists(_resolvedPath))) {\n        await this.createBackup(_resolvedPath);\n      }\n\n      if (options.dryRun) {\n        stdoutLine(chalk.yellow(`[DRY RUN] Would write to: ${_resolvedPath}`));\n        return;\n      }\n\n      await this.ensureDirectoryExists(path.dirname(_resolvedPath));\n      await _fsAsync.writeFile(_resolvedPath, _content);\n\n      this.logOperation(\"write\", _resolvedPath, true);\n    } catch (_error) {\n      this.logOperation(\"write\", _filePath, false);\n      throw new Error(`Failed to write file ${_filePath}: ${_error.message}`);\n    }\n  }\n\n  async deleteFile(\n    _filePath: string,\n    options: FileOperationOptions = {},\n  ): Promise<void> {\n    try {\n      const _resolvedPath = path.resolve(_filePath);\n\n      if (!(await this.exists(_resolvedPath))) {\n        throw new Error(`File does not exist: ${_resolvedPath}`);\n      }\n\n      if (options.backup) {\n        await this.createBackup(_resolvedPath);\n      }\n\n      if (options.dryRun) {\n        stdoutLine(chalk.yellow(`[DRY RUN] Would delete: ${_resolvedPath}`));\n        return;\n      }\n\n      await _fsAsync.unlink(_resolvedPath);\n      this.logOperation(\"delete\", _resolvedPath, true);\n    } catch (_error) {\n      this.logOperation(\"delete\", _filePath, false);\n      throw new Error(`Failed to delete file ${_filePath}: ${_error.message}`);\n    }\n  }\n\n  // Directory Operations\n  async createDirectory(\n    _dirPath: string,\n    options: FileOperationOptions = {},\n  ): Promise<void> {\n    try {\n      const _resolvedPath = path.resolve(_dirPath);\n\n      if (options.dryRun) {\n        stdoutLine(chalk.yellow(`[DRY RUN] Would create directory: ${_resolvedPath}`));\n        return;\n      }\n\n      await _fsAsync.mkdir(_resolvedPath, {\n        recursive: options.recursive ?? true,\n      });\n      this.logOperation(\"mkdir\", _resolvedPath, true);\n    } catch (_error) {\n      this.logOperation(\"mkdir\", _dirPath, false);\n      throw new Error(\n        `Failed to create directory ${_dirPath}: ${_error.message}`,\n      );\n    }\n  }\n\n  async deleteDirectory(\n    _dirPath: string,\n    options: FileOperationOptions = {},\n  ): Promise<void> {\n    try {\n      const _resolvedPath = path.resolve(_dirPath);\n\n      if (!(await this.exists(_resolvedPath))) {\n        throw new Error(`Directory does not exist: ${_resolvedPath}`);\n      }\n\n      if (options.dryRun) {\n        stdoutLine(chalk.yellow(`[DRY RUN] Would delete directory: ${_resolvedPath}`));\n        return;\n      }\n\n      if (options.recursive) {\n        await this.deleteDirectoryRecursive(_resolvedPath);\n      } else {\n        await _fsAsync.rmdir(_resolvedPath);\n      }\n\n      this.logOperation(\"rmdir\", _resolvedPath, true);\n    } catch (_error) {\n      this.logOperation(\"rmdir\", _dirPath, false);\n      throw new Error(\n        `Failed to delete directory ${_dirPath}: ${_error.message}`,\n      );\n    }\n  }\n\n  async listDirectory(\n    _dirPath: string,\n    options: SearchOptions = {},\n  ): Promise<FileStats[]> {\n    try {\n      const _resolvedPath = path.resolve(_dirPath);\n      const _entries = await _fsAsync.readdir(_resolvedPath);\n      const results: FileStats[] = [];\n\n      for (const entry of _entries) {\n        if (!options.includeHidden && entry.startsWith(\".\")) {\n          continue;\n        }\n\n        const _entryPath = path.join(_resolvedPath, entry);\n        const _stats = await this.getFileStats(_entryPath);\n\n        if (options.type) {\n          if (options.type === \"file\" && !_stats.isFile) {\n            continue;\n          }\n          if (options.type === \"directory\" && !_stats.isDirectory) {\n            continue;\n          }\n        }\n\n        if (options._pattern) {\n          const _match = options.caseSensitive\n            ? _stats._name.includes(options._pattern)\n            : _stats._name.toLowerCase().includes(options._pattern.toLowerCase());\n          if (!_match) {\n            continue;\n          }\n        }\n\n        results.push(_stats);\n      }\n\n      this.logOperation(\"readdir\", _resolvedPath, true);\n      return results.sort((a, b): number => {\n        if (a.isDirectory && !b.isDirectory) {\n          return -1;\n        }\n        if (!a.isDirectory && b.isDirectory) {\n          return 1;\n        }\n        return a._name.localeCompare(b._name);\n      });\n    } catch (_error) {\n      this.logOperation(\"readdir\", _dirPath, false);\n      throw new Error(\n        `Failed to list directory ${_dirPath}: ${_error.message}`,\n      );\n    }\n  }\n\n  // Advanced Operations\n  async copyFile(\n    sourcePath: string,\n    destPath: string,\n    options: FileOperationOptions = {},\n  ): Promise<void> {\n    try {\n      const _resolvedSource = path.resolve(sourcePath);\n      const _resolvedDest = path.resolve(destPath);\n\n      if (!(await this.exists(_resolvedSource))) {\n        throw new Error(`Source file does not exist: ${_resolvedSource}`);\n      }\n\n      if (options.dryRun) {\n        stdoutLine(chalk.yellow(\n            `[DRY RUN] Would copy: ${_resolvedSource} → ${_resolvedDest}`,\n          ));\n        return;\n      }\n\n      await this.ensureDirectoryExists(path.dirname(_resolvedDest));\n\n      if ((await this.exists(_resolvedDest)) && !options.force) {\n        throw new Error(`Destination file already exists: ${_resolvedDest}`);\n      }\n\n      await _fsAsync.copyFile(_resolvedSource, _resolvedDest);\n\n      if (options.preserveTimestamps) {\n        const _sourceStats = await _fsAsync.stat(_resolvedSource);\n        await fs.promises.utimes(\n          _resolvedDest,\n          _sourceStats.atime,\n          _sourceStats.mtime,\n        );\n      }\n\n      this.logOperation(\"copy\", `${_resolvedSource} → ${_resolvedDest}`, true);\n    } catch (_error) {\n      this.logOperation(\"copy\", `${sourcePath} → ${destPath}`, false);\n      throw new Error(`Failed to copy file: ${_error.message}`);\n    }\n  }\n\n  async moveFile(\n    sourcePath: string,\n    destPath: string,\n    options: FileOperationOptions = {},\n  ): Promise<void> {\n    try {\n      const _resolvedSource = path.resolve(sourcePath);\n      const _resolvedDest = path.resolve(destPath);\n\n      if (!(await this.exists(_resolvedSource))) {\n        throw new Error(`Source file does not exist: ${_resolvedSource}`);\n      }\n\n      if (options.dryRun) {\n        stdoutLine(chalk.yellow(\n            `[DRY RUN] Would move: ${_resolvedSource} → ${_resolvedDest}`,\n          ));\n        return;\n      }\n\n      await this.ensureDirectoryExists(path.dirname(_resolvedDest));\n\n      if ((await this.exists(_resolvedDest)) && !options.force) {\n        throw new Error(`Destination file already exists: ${_resolvedDest}`);\n      }\n\n      await _fsAsync.rename(_resolvedSource, _resolvedDest);\n      this.logOperation(\"move\", `${_resolvedSource} → ${_resolvedDest}`, true);\n    } catch (_error) {\n      this.logOperation(\"move\", `${sourcePath} → ${destPath}`, false);\n      throw new Error(`Failed to move file: ${_error.message}`);\n    }\n  }\n\n  async renameFile(\n    oldPath: string,\n    newPath: string,\n    options: FileOperationOptions = {},\n  ): Promise<void> {\n    return this.moveFile(oldPath, newPath, options);\n  }\n\n  // Search and Navigation\n  async findFiles(\n    _searchPath: string,\n    options: SearchOptions = {},\n  ): Promise<FileStats[]> {\n    try {\n      const _resolvedPath = path.resolve(_searchPath);\n      const results: FileStats[] = [];\n\n      await this.findFilesRecursive(_resolvedPath, options, results, 0);\n\n      this.logOperation(\"find\", _resolvedPath, true);\n      return results;\n    } catch (_error) {\n      this.logOperation(\"find\", _searchPath, false);\n      throw new Error(`Failed to search _files: ${_error.message}`);\n    }\n  }\n\n  async which(command: string): Promise<string | null> {\n    return new Promise((resolve): void => {\n      const _proc = spawn(\"which\", [command]);\n      let output = \"\";\n\n      _proc.stdout.on(\"data\", (data): void => {\n        output += data.toString();\n      });\n\n      _proc.on(\"close\", (code): void => {\n        if (code === 0) {\n          resolve(output.trim());\n        } else {\n          resolve(null);\n        }\n      });\n    });\n  }\n\n  async glob(_pattern: string, options: SearchOptions = {}): Promise<string[]> {\n    // Simple glob implementation - could be enhanced with a proper glob library\n    const _patternParts = _pattern.split(path.sep);\n    const _basePath = _patternParts.slice(0, -1).join(path.sep) || \"./\";\n    const _filePattern = _patternParts[_patternParts.length - 1];\n\n    try {\n      // Convert glob _pattern to regex\n      const _regexPattern = _filePattern\n        .replace(/\\./g, \"$2.\")\n        .replace(/\\*/g, \".*\")\n        .replace(/\\?/g, \".\");\n\n      const _files = await this.findFiles(_basePath, {\n        ...options,\n        _pattern: `^${_regexPattern}$`,\n        regex: true,\n        type: \"file\",\n      });\n\n      return _files.map((f): string => f._path);\n    } catch (_error) {\n      throw new Error(`Failed to glob _pattern ${_pattern}: ${_error.message}`);\n    }\n  }\n\n  // Utility Methods\n  async exists(_filePath: string): Promise<boolean> {\n    try {\n      await _fsAsync.access(path.resolve(_filePath));\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  async getFileStats(_filePath: string): Promise<FileStats> {\n    try {\n      const _resolvedPath = path.resolve(_filePath);\n      const _stats = await _fsAsync.lstat(_resolvedPath);\n      const _name = path.basename(_resolvedPath);\n\n      return {\n        _name,\n        _path: _resolvedPath,\n        isFile: _stats.isFile(),\n        isDirectory: _stats.isDirectory(),\n        isSymlink: _stats.isSymbolicLink(),\n        size: _stats.size,\n        created: _stats.birthtime,\n        modified: _stats.mtime,\n        permissions: (_stats.mode & parseInt(\"777\", 8)).toString(8),\n      };\n    } catch (_error) {\n      throw new Error(\n        `Failed to get file _stats for ${_filePath}: ${_error.message}`,\n      );\n    }\n  }\n\n  async getRealPath(_filePath: string): Promise<string> {\n    try {\n      return await _fsAsync.realpath(path.resolve(_filePath));\n    } catch (_error) {\n      throw new Error(\n        `Failed to resolve real path for ${_filePath}: ${_error.message}`,\n      );\n    }\n  }\n\n  getOperationLog(): Array<{\n    operation: string;\n    _path: string;\n    timestamp: Date;\n    success: boolean;\n  }> {\n    return [...this.operationLog];\n  }\n\n  clearOperationLog(): void {\n    this.operationLog = [];\n  }\n\n  // Private Helper Methods\n  private async ensureDirectoryExists(dirPath: string): Promise<void> {\n    try {\n      await _fsAsync.mkdir(dirPath, { recursive: true });\n    } catch (_error) {\n      if (_error.code !== \"EEXIST\") {\n        throw _error;\n      }\n    }\n  }\n\n  private async createBackup(_filePath: string): Promise<void> {\n    const _backupPath = `${_filePath}.backup.${Date.now()}`;\n    await _fsAsync.copyFile(_filePath, _backupPath);\n  }\n\n  private async deleteDirectoryRecursive(dirPath: string): Promise<void> {\n    const _entries = await _fsAsync.readdir(dirPath);\n\n    for (const entry of _entries) {\n      const _entryPath = path.join(dirPath, entry);\n      const _stats = await _fsAsync.lstat(_entryPath);\n\n      if (_stats.isDirectory()) {\n        await this.deleteDirectoryRecursive(_entryPath);\n      } else {\n        await _fsAsync.unlink(_entryPath);\n      }\n    }\n\n    await _fsAsync.rmdir(dirPath);\n  }\n\n  private async findFilesRecursive(\n    searchPath: string,\n    options: SearchOptions,\n    results: FileStats[],\n    depth: number,\n  ): Promise<void> {\n    if (options.maxDepth && depth >= options.maxDepth) {\n      return;\n    }\n\n    try {\n      const _entries = await _fsAsync.readdir(searchPath);\n\n      for (const entry of _entries) {\n        if (!options.includeHidden && entry.startsWith(\".\")) {\n          continue;\n        }\n\n        const _entryPath = path.join(searchPath, entry);\n        const _stats = await this.getFileStats(_entryPath);\n\n        // Apply filters\n        if (options._pattern) {\n          const _pattern = options.regex\n            ? new RegExp(options._pattern, options.caseSensitive ? \"g\" : \"gi\")\n            : null;\n          const _match = _pattern\n            ? _pattern.test(_stats._name)\n            : options.caseSensitive\n              ? _stats._name.includes(options._pattern)\n              : _stats._name\n                  .toLowerCase()\n                  .includes(options._pattern.toLowerCase());\n\n          if (_match) {\n            if (options.type) {\n              if (options.type === \"file\" && _stats.isFile) {\n                results.push(_stats);\n              }\n              if (options.type === \"directory\" && _stats.isDirectory) {\n                results.push(_stats);\n              }\n              if (options.type === \"both\") {\n                results.push(_stats);\n              }\n            } else {\n              results.push(_stats);\n            }\n          }\n        } else if (!options._pattern) {\n          if (options.type) {\n            if (options.type === \"file\" && _stats.isFile) {\n              results.push(_stats);\n            }\n            if (options.type === \"directory\" && _stats.isDirectory) {\n              results.push(_stats);\n            }\n            if (options.type === \"both\") {\n              results.push(_stats);\n            }\n          } else {\n            results.push(_stats);\n          }\n        }\n\n        // Recurse into directories\n        if (\n          _stats.isDirectory &&\n          (options.followSymlinks || !_stats.isSymlink)\n        ) {\n          await this.findFilesRecursive(\n            _entryPath,\n            options,\n            results,\n            depth + 1,\n          );\n        }\n      }\n    } catch (_error) {\n      // Skip directories we can't read\n    }\n  }\n\n  private logOperation(\n    _operation: string,\n    _path: string,\n    success: boolean,\n  ): void {\n    this.operationLog.push({\n      operation: \"\",\n      _path,\n      timestamp: new Date(),\n      success,\n    });\n\n    // Keep only last 1000 operations\n    if (this.operationLog.length > 1000) {\n      this.operationLog = this.operationLog.slice(-1000);\n    }\n  }\n}\n\nexport const _fileSystemService = FileSystemService.getInstance();\n","/**\n * Enterprise Security - Public Facade\n *\n * Compatibility barrel module to stabilize exports referenced from `src/index.ts`.\n * Internal implementations are delegated to each subsystem.\n */\n\nimport { EventEmitter } from \"node:events\";\nimport type {\n  AccessControlManager} from \"./memory-system/enterprise/access-control-manager\";\nimport {\n  type PermissionSet,\n  type User,\n} from \"./memory-system/enterprise/access-control-manager\";\nimport type {\n  SecurityEnhancementSuite} from \"./memory-system/phase4/security/SecurityEnhancementSuite\";\nimport {\n  type SecurityMetrics as EnhancementSecurityMetrics,\n} from \"./memory-system/phase4/security/SecurityEnhancementSuite\";\n\nexport type AuthenticatedUser = User;\nexport type { PermissionSet };\nexport type SecurityMetrics = EnhancementSecurityMetrics;\n\nexport interface SecurityReport {\n  generatedAt: Date;\n  metrics: SecurityMetrics;\n  notes?: string[];\n}\n\nexport interface SecurityIntegrationConfig {\n  accessControl?: AccessControlManager;\n  enhancementSuite?: SecurityEnhancementSuite;\n}\n\n/**\n * RBAC guard for slash commands (deterministic, fail-closed when configured)\n */\nexport class RBACCommandGuard {\n  private accessControl?: AccessControlManager;\n\n  constructor(accessControl?: AccessControlManager) {\n    this.accessControl = accessControl;\n  }\n\n  async assertCanExecute(\n    user: AuthenticatedUser,\n    commandId: string,\n    context?: Record<string, unknown>,\n  ): Promise<void> {\n    // If not configured, we stay permissive for backwards-compat (no heuristic).\n    if (!this.accessControl) return;\n\n    const decision = await this.accessControl.checkAccess(\n      user.id,\n      `command:${commandId}`,\n      \"execute\",\n      context,\n    );\n\n    if (!decision.allowed) {\n      throw new Error(`RBAC_DENIED: ${decision.reason ?? \"not allowed\"}`);\n    }\n  }\n}\n\n/**\n * Minimal adapter to enforce RBAC before running a handler.\n */\nexport class SecureSlashCommandAdapter {\n  private guard: RBACCommandGuard;\n\n  constructor(guard: RBACCommandGuard) {\n    this.guard = guard;\n  }\n\n  async run<T>(params: {\n    user: AuthenticatedUser;\n    commandId: string;\n    handler: () => Promise<T>;\n    context?: Record<string, unknown>;\n  }): Promise<T> {\n    await this.guard.assertCanExecute(params.user, params.commandId, params.context);\n    return await params.handler();\n  }\n}\n\n/**\n * Enterprise Security Integration facade.\n */\nexport class EnterpriseSecurityIntegration extends EventEmitter {\n  private accessControl?: AccessControlManager;\n  private enhancementSuite?: SecurityEnhancementSuite;\n\n  constructor(config: SecurityIntegrationConfig) {\n    super();\n    this.accessControl = config.accessControl;\n    this.enhancementSuite = config.enhancementSuite;\n  }\n\n  getRBACGuard(): RBACCommandGuard {\n    return new RBACCommandGuard(this.accessControl);\n  }\n\n  getSlashCommandAdapter(): SecureSlashCommandAdapter {\n    return new SecureSlashCommandAdapter(this.getRBACGuard());\n  }\n\n  async generateSecurityReport(): Promise<SecurityReport> {\n    const metrics: SecurityMetrics = this.enhancementSuite\n      ? await this.enhancementSuite.performSecurityScan()\n      : {\n          threatsDetected: 0,\n          anomaliesFound: 0,\n          encryptionStrength: 0,\n          complianceScore: 0,\n          riskLevel: \"low\",\n          lastAssessment: new Date(),\n        };\n\n    return {\n      generatedAt: new Date(),\n      metrics,\n      notes: this.enhancementSuite ? [\"enhancementSuite:enabled\"] : [\"enhancementSuite:disabled\"],\n    };\n  }\n}\n\nexport function createEnterpriseSecurityIntegration(\n  config: SecurityIntegrationConfig,\n): EnterpriseSecurityIntegration {\n  return new EnterpriseSecurityIntegration(config);\n}\n\n\n","/**\r\n * Memory Portability Framework\r\n * Phase 4.0 Week 1: Enhanced memory export/import with enterprise security\r\n * Integrates with existing Phase 4 components for complete data portability\r\n */\r\n\r\nimport { EventEmitter } from \"node:events\";\r\nimport * as fs from \"node:fs/promises\";\r\nimport * as path from \"node:path\";\r\nimport type {\r\n  EnterpriseDataPorter,\r\n} from \"./enterprise-data-porter\";\r\nimport type { FormatHandlerRegistry } from \"./formats/FormatHandlerRegistry\";\r\nimport type { ValidationEngine } from \"./validation/ValidationEngine\";\r\nimport type { EnterpriseSecurityManager } from \"./enterprise-security-manager\";\r\nimport type { EnterpriseAuditLogger } from \"./enterprise-audit-logger\";\r\nimport type { AccessControlManager } from \"../enterprise/access-control-manager\";\r\nimport type { DualMemoryEngine } from \"../dual-memory-engine\";\r\nimport type { SupportedFormat } from \"./types/porter-types\";\r\n\r\nconst SUPPORTED_FORMATS: readonly SupportedFormat[] = [\r\n  \"json\",\r\n  \"csv\",\r\n  \"parquet\",\r\n  \"avro\",\r\n  \"xml\",\r\n  \"yaml\",\r\n  \"binary\",\r\n  \"encrypted\",\r\n];\r\n\r\nexport interface PortabilityConfig {\r\n  organizationId: string;\r\n  defaultFormat: \"json\" | \"csv\" | \"parquet\" | \"xml\";\r\n  enableEncryption: boolean;\r\n  enableCompression: boolean;\r\n  enableValidation: boolean;\r\n  auditExportImport: boolean;\r\n  maxExportSize: number; // bytes\r\n  allowedFormats: string[];\r\n  securityClassification: \"public\" | \"internal\" | \"confidential\" | \"secret\";\r\n}\r\n\r\nexport interface ExportRequest {\r\n  userId: string;\r\n  sessionId: string;\r\n  format: string;\r\n  filter: MemoryFilter;\r\n  options: ExportOptions;\r\n  requestId: string;\r\n  timestamp: Date;\r\n}\r\n\r\nexport interface MemoryFilter {\r\n  dateRange?: { start: Date; end: Date };\r\n  memoryTypes?: string[];\r\n  tags?: string[];\r\n  classification?: string[];\r\n  ownership?: \"own\" | \"team\" | \"project\" | \"organization\";\r\n  excludeFields?: string[];\r\n}\r\n\r\nexport interface ExportOptions {\r\n  includeMetadata: boolean;\r\n  anonymizeData: boolean;\r\n  compressOutput: boolean;\r\n  encryptOutput: boolean;\r\n  splitLargeFiles: boolean;\r\n  maxFileSize: number; // bytes\r\n  outputPath?: string;\r\n}\r\n\r\nexport interface ImportRequest {\r\n  userId: string;\r\n  sessionId: string;\r\n  filePath: string;\r\n  format: string;\r\n  options: ImportOptions;\r\n  requestId: string;\r\n  timestamp: Date;\r\n}\r\n\r\nexport interface ImportOptions {\r\n  validateSchema: boolean;\r\n  skipDuplicates: boolean;\r\n  overwriteExisting: boolean;\r\n  preserveIds: boolean;\r\n  targetMemoryType?: string;\r\n  batchSize: number;\r\n}\r\n\r\nexport interface PortabilityResult {\r\n  requestId: string;\r\n  success: boolean;\r\n  recordsProcessed: number;\r\n  recordsSkipped: number;\r\n  recordsErrors: number;\r\n  outputFiles?: string[];\r\n  errors?: PortabilityError[];\r\n  metadata: PortabilityMetadata;\r\n  duration: number;\r\n}\r\n\r\nexport interface PortabilityError {\r\n  record: number;\r\n  field?: string;\r\n  error: string;\r\n  severity: \"warning\" | \"error\" | \"critical\";\r\n}\r\n\r\nexport interface PortabilityMetadata {\r\n  exportId: string;\r\n  organizationId: string;\r\n  userId: string;\r\n  timestamp: Date;\r\n  format: string;\r\n  totalRecords: number;\r\n  dataClassification: string;\r\n  schema: unknown;\r\n  checksums: { [algorithm: string]: string };\r\n  compression?: { algorithm: string; ratio: number };\r\n  encryption?: { algorithm: string; keyId: string };\r\n}\r\n\r\nexport interface MigrationPlan {\r\n  id: string;\r\n  name: string;\r\n  description: string;\r\n  sourceSystem: string;\r\n  targetSystem: string;\r\n  mappings: FieldMapping[];\r\n  transformations: DataTransformation[];\r\n  validations: ValidationRule[];\r\n  schedule?: MigrationSchedule;\r\n}\r\n\r\nexport interface FieldMapping {\r\n  sourceField: string;\r\n  targetField: string;\r\n  transformation?: string;\r\n  required: boolean;\r\n  defaultValue?: unknown;\r\n}\r\n\r\nexport interface DataTransformation {\r\n  type: \"rename\" | \"convert\" | \"calculate\" | \"filter\" | \"aggregate\";\r\n  expression: string;\r\n  parameters: { [key: string]: unknown };\r\n}\r\n\r\nexport interface ValidationRule {\r\n  field: string;\r\n  type: \"required\" | \"format\" | \"range\" | \"custom\";\r\n  condition: string;\r\n  message: string;\r\n}\r\n\r\nexport interface MigrationSchedule {\r\n  startTime: Date;\r\n  endTime?: Date;\r\n  batchSize: number;\r\n  interval: number; // milliseconds\r\n  maxConcurrentJobs: number;\r\n}\r\n\r\n/**\r\n * Memory Portability Framework\r\n * Orchestrates memory export/import operations with enterprise security\r\n */\r\nexport class MemoryPortabilityFramework extends EventEmitter {\r\n  private config: PortabilityConfig;\r\n  private dataPorter: EnterpriseDataPorter;\r\n  private formatRegistry: FormatHandlerRegistry;\r\n  private validationEngine: ValidationEngine;\r\n  private securityManager: EnterpriseSecurityManager;\r\n  private auditLogger: EnterpriseAuditLogger;\r\n  private accessControl: AccessControlManager;\r\n  private memoryEngine: DualMemoryEngine;\r\n\r\n  private activeJobs: Map<string, PortabilityJob> = new Map();\r\n  private migrationPlans: Map<string, MigrationPlan> = new Map();\r\n\r\n  constructor(\r\n    config: PortabilityConfig,\r\n    dependencies: {\r\n      dataPorter: EnterpriseDataPorter;\r\n      formatRegistry: FormatHandlerRegistry;\r\n      validationEngine: ValidationEngine;\r\n      securityManager: EnterpriseSecurityManager;\r\n      auditLogger: EnterpriseAuditLogger;\r\n      accessControl: AccessControlManager;\r\n      memoryEngine: DualMemoryEngine;\r\n    },\r\n  ) {\r\n    super();\r\n    this.config = config;\r\n    this.dataPorter = dependencies.dataPorter;\r\n    this.formatRegistry = dependencies.formatRegistry;\r\n    this.validationEngine = dependencies.validationEngine;\r\n    this.securityManager = dependencies.securityManager;\r\n    this.auditLogger = dependencies.auditLogger;\r\n    this.accessControl = dependencies.accessControl;\r\n    this.memoryEngine = dependencies.memoryEngine;\r\n\r\n    this.initializeFramework();\r\n  }\r\n\r\n  /**\r\n   * Export memories with security and validation\r\n   */\r\n  async exportMemories(request: ExportRequest): Promise<PortabilityResult> {\r\n    const startTime = Date.now();\r\n    const jobId = `export_${request.requestId}_${Date.now()}`;\r\n\r\n    try {\r\n      // 1. Security authorization check\r\n      const authorized = await this.authorizeDataAccess(\r\n        request.userId,\r\n        \"export\",\r\n        request.filter,\r\n      );\r\n\r\n      if (!authorized) {\r\n        throw new Error(\"Export operation not authorized\");\r\n      }\r\n\r\n      // 2. Validate export request\r\n      await this.validateExportRequest(request);\r\n\r\n      // 3. Create export job\r\n      const job = this.createExportJob(jobId, request);\r\n      this.activeJobs.set(jobId, job);\r\n\r\n      // 4. Retrieve memories based on filter\r\n      const memories = await this.retrieveMemories(\r\n        request.filter,\r\n        request.userId,\r\n      );\r\n\r\n      // 5. Apply data transformations and security policies\r\n      const processedMemories = await this.processMemoriesForExport(\r\n        memories,\r\n        request.options,\r\n        request.userId,\r\n      );\r\n\r\n      // 6. Generate output in requested format\r\n      const outputFiles = await this.generateExportFiles(\r\n        processedMemories,\r\n        request.format,\r\n        request.options,\r\n      );\r\n\r\n      // 7. Create metadata and checksums\r\n      const metadata = await this.createExportMetadata(\r\n        request,\r\n        processedMemories,\r\n        outputFiles,\r\n      );\r\n\r\n      // 8. Audit logging\r\n      await this.auditLogger.logDataExport({\r\n        userId: request.userId,\r\n        sessionId: request.sessionId,\r\n        recordCount: processedMemories.length,\r\n        format: request.format,\r\n        _classification: this.config.securityClassification,\r\n        success: true,\r\n        duration: Date.now() - startTime,\r\n      });\r\n\r\n      const result: PortabilityResult = {\r\n        requestId: request.requestId,\r\n        success: true,\r\n        recordsProcessed: processedMemories.length,\r\n        recordsSkipped: 0,\r\n        recordsErrors: 0,\r\n        outputFiles,\r\n        metadata,\r\n        duration: Date.now() - startTime,\r\n      };\r\n\r\n      this.activeJobs.delete(jobId);\r\n      this.emit(\"export_complete\", { result, request });\r\n\r\n      return result;\r\n    } catch (error) {\r\n      const duration = Date.now() - startTime;\r\n\r\n      // Audit failed export\r\n      await this.auditLogger.logDataExport({\r\n        userId: request.userId,\r\n        sessionId: request.sessionId,\r\n        recordCount: 0,\r\n        format: request.format,\r\n        _classification: this.config.securityClassification,\r\n        success: false,\r\n        _error: error instanceof Error ? error.message : \"Unknown error\",\r\n        duration,\r\n      });\r\n\r\n      const result: PortabilityResult = {\r\n        requestId: request.requestId,\r\n        success: false,\r\n        recordsProcessed: 0,\r\n        recordsSkipped: 0,\r\n        recordsErrors: 1,\r\n        errors: [\r\n          {\r\n            record: 0,\r\n            error: error instanceof Error ? error.message : \"Export failed\",\r\n            severity: \"critical\",\r\n          },\r\n        ],\r\n        metadata: this.createFailureMetadata(request),\r\n        duration,\r\n      };\r\n\r\n      this.activeJobs.delete(jobId);\r\n      this.emit(\"export_failed\", { result, request, error });\r\n\r\n      return result;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Import memories with validation and conflict resolution\r\n   */\r\n  async importMemories(request: ImportRequest): Promise<PortabilityResult> {\r\n    const startTime = Date.now();\r\n    const jobId = `import_${request.requestId}_${Date.now()}`;\r\n\r\n    try {\r\n      // 1. Security authorization check\r\n      const authorized = await this.authorizeDataAccess(\r\n        request.userId,\r\n        \"import\",\r\n        {},\r\n      );\r\n\r\n      if (!authorized) {\r\n        throw new Error(\"Import operation not authorized\");\r\n      }\r\n\r\n      // 2. Validate import request and file\r\n      await this.validateImportRequest(request);\r\n\r\n      // 3. Create import job\r\n      const job = this.createImportJob(jobId, request);\r\n      this.activeJobs.set(jobId, job);\r\n\r\n      // 4. Parse input file\r\n      const parsedData = await this.parseImportFile(\r\n        request.filePath,\r\n        request.format,\r\n      );\r\n\r\n      // 5. Validate data schema and content\r\n      if (request.options.validateSchema) {\r\n        const summary = await this.validationEngine.validate(parsedData, {\r\n          requestId: request.requestId,\r\n          userId: request.userId,\r\n          correlationId: request.sessionId,\r\n          timestamp: Date.now(),\r\n          metadata: { operation: \"import\", format: request.format },\r\n        });\r\n        if (!summary.overall.valid) {\r\n          throw new Error(\r\n            summary.overall.errors[0]?.message || \"Import validation failed\",\r\n          );\r\n        }\r\n      }\r\n\r\n      // 6. Process imported data\r\n      const processedMemories = await this.processMemoriesForImport(\r\n        parsedData,\r\n        request.options,\r\n        request.userId,\r\n      );\r\n\r\n      // 7. Store memories in memory engine\r\n      const importResult = await this.storeImportedMemories(\r\n        processedMemories,\r\n        request.options,\r\n        request,\r\n      );\r\n\r\n      // 8. Audit logging\r\n      await this.auditLogger.logDataImport({\r\n        userId: request.userId,\r\n        sessionId: request.sessionId,\r\n        recordCount: importResult.recordsProcessed,\r\n        format: request.format,\r\n        source: request.filePath,\r\n        success: true,\r\n        duration: Date.now() - startTime,\r\n      });\r\n\r\n      const result: PortabilityResult = {\r\n        requestId: request.requestId,\r\n        success: true,\r\n        recordsProcessed: importResult.recordsProcessed,\r\n        recordsSkipped: importResult.recordsSkipped,\r\n        recordsErrors: importResult.recordsErrors,\r\n        metadata: importResult.metadata,\r\n        duration: Date.now() - startTime,\r\n      };\r\n\r\n      this.activeJobs.delete(jobId);\r\n      this.emit(\"import_complete\", { result, request });\r\n\r\n      return result;\r\n    } catch (error) {\r\n      const duration = Date.now() - startTime;\r\n\r\n      // Audit failed import\r\n      await this.auditLogger.logDataImport({\r\n        userId: request.userId,\r\n        sessionId: request.sessionId,\r\n        recordCount: 0,\r\n        format: request.format,\r\n        source: request.filePath,\r\n        success: false,\r\n        _error: error instanceof Error ? error.message : \"Unknown error\",\r\n        duration,\r\n      });\r\n\r\n      const result: PortabilityResult = {\r\n        requestId: request.requestId,\r\n        success: false,\r\n        recordsProcessed: 0,\r\n        recordsSkipped: 0,\r\n        recordsErrors: 1,\r\n        errors: [\r\n          {\r\n            record: 0,\r\n            error: error instanceof Error ? error.message : \"Import failed\",\r\n            severity: \"critical\",\r\n          },\r\n        ],\r\n        metadata: this.createFailureMetadata(request),\r\n        duration,\r\n      };\r\n\r\n      this.activeJobs.delete(jobId);\r\n      this.emit(\"import_failed\", { result, request, error });\r\n\r\n      return result;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Create and execute migration plan\r\n   */\r\n  async executeMigration(\r\n    planId: string,\r\n    userId: string,\r\n  ): Promise<PortabilityResult> {\r\n    const plan = this.migrationPlans.get(planId);\r\n    if (!plan) {\r\n      throw new Error(`Migration plan ${planId} not found`);\r\n    }\r\n\r\n    // Implementation would orchestrate the migration process\r\n    // This is a placeholder for the complex migration logic\r\n    return {\r\n      requestId: planId,\r\n      success: true,\r\n      recordsProcessed: 0,\r\n      recordsSkipped: 0,\r\n      recordsErrors: 0,\r\n      metadata: this.createMigrationMetadata(planId, userId),\r\n      duration: 0,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Get list of supported formats\r\n   */\r\n  getSupportedFormats(): string[] {\r\n    return this.formatRegistry.listFormats().map((f): SupportedFormat => f.format);\r\n  }\r\n\r\n  /**\r\n   * Get active portability jobs\r\n   */\r\n  getActiveJobs(): PortabilityJob[] {\r\n    return Array.from(this.activeJobs.values());\r\n  }\r\n\r\n  /**\r\n   * Cancel a running job\r\n   */\r\n  async cancelJob(jobId: string): Promise<boolean> {\r\n    const job = this.activeJobs.get(jobId);\r\n    if (!job) {\r\n      return false;\r\n    }\r\n\r\n    job.cancelled = true;\r\n    this.activeJobs.delete(jobId);\r\n    this.emit(\"job_cancelled\", { jobId, timestamp: new Date() });\r\n\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Private helper methods\r\n   */\r\n  private initializeFramework(): void {\r\n    // Initialize default migration plans\r\n    this.createDefaultMigrationPlans();\r\n\r\n    // Setup job cleanup\r\n    setInterval((): void => {\r\n      this.cleanupCompletedJobs();\r\n    }, 60000); // Clean up every minute\r\n  }\r\n\r\n  private async authorizeDataAccess(\r\n    _userId: string,\r\n    _operation: \"export\" | \"import\",\r\n    _filter: unknown,\r\n  ): Promise<boolean> {\r\n    // Use AccessControlManager to check permissions\r\n    return true; // Placeholder\r\n  }\r\n\r\n  private async validateExportRequest(request: ExportRequest): Promise<void> {\r\n    // Validate format is supported\r\n    if (!this.config.allowedFormats.includes(request.format)) {\r\n      throw new Error(`Format ${request.format} not allowed`);\r\n    }\r\n\r\n    // Check export size limits\r\n    const estimatedSize = await this.estimateExportSize(request.filter);\r\n    if (estimatedSize > this.config.maxExportSize) {\r\n      throw new Error(\"Export size exceeds maximum allowed limit\");\r\n    }\r\n  }\r\n\r\n  private async validateImportRequest(_request: ImportRequest): Promise<void> {\r\n    // Validate file exists and is readable\r\n    // Validate format is supported\r\n    // Check file size limits\r\n  }\r\n\r\n  private createExportJob(\r\n    jobId: string,\r\n    request: ExportRequest,\r\n  ): PortabilityJob {\r\n    return {\r\n      id: jobId,\r\n      type: \"export\",\r\n      status: \"running\",\r\n      progress: 0,\r\n      startTime: new Date(),\r\n      request,\r\n      cancelled: false,\r\n    };\r\n  }\r\n\r\n  private createImportJob(\r\n    jobId: string,\r\n    request: ImportRequest,\r\n  ): PortabilityJob {\r\n    return {\r\n      id: jobId,\r\n      type: \"import\",\r\n      status: \"running\",\r\n      progress: 0,\r\n      startTime: new Date(),\r\n      request,\r\n      cancelled: false,\r\n    };\r\n  }\r\n\r\n  private async retrieveMemories(\r\n    _filter: MemoryFilter,\r\n    _userId: string,\r\n  ): Promise<unknown[]> {\r\n    // Use memory engine to retrieve filtered memories\r\n    return [];\r\n  }\r\n\r\n  private async processMemoriesForExport(\r\n    memories: unknown[],\r\n    options: ExportOptions,\r\n    _userId: string,\r\n  ): Promise<unknown[]> {\r\n    let processed = memories;\r\n\r\n    // Apply anonymization if requested\r\n    if (options.anonymizeData) {\r\n      processed = await this.anonymizeMemories(processed);\r\n    }\r\n\r\n    return processed;\r\n  }\r\n\r\n  private async generateExportFiles(\r\n    memories: unknown[],\r\n    format: string,\r\n    options: ExportOptions,\r\n  ): Promise<string[]> {\r\n    if (!SUPPORTED_FORMATS.includes(format as SupportedFormat)) {\r\n      throw new Error(`Unsupported format: ${format}`);\r\n    }\r\n    const fmt = format as SupportedFormat;\r\n    const handler = this.formatRegistry.get(fmt);\r\n    const payload = await handler.serialize(memories, options);\r\n\r\n    const fileName = `maria-export-${Date.now()}.${fmt}`;\r\n    const outputPath = options.outputPath\r\n      ? options.outputPath\r\n      : path.join(process.cwd(), \"artifacts\", fileName);\r\n\r\n    await fs.mkdir(path.dirname(outputPath), { recursive: true });\r\n\r\n    if (typeof payload === \"string\") {\r\n      await fs.writeFile(outputPath, payload, \"utf8\");\r\n    } else {\r\n      await fs.writeFile(outputPath, payload);\r\n    }\r\n\r\n    return [outputPath];\r\n  }\r\n\r\n  private async createExportMetadata(\r\n    request: ExportRequest,\r\n    memories: unknown[],\r\n    _outputFiles: string[],\r\n  ): Promise<PortabilityMetadata> {\r\n    return {\r\n      exportId: request.requestId,\r\n      organizationId: this.config.organizationId,\r\n      userId: request.userId,\r\n      timestamp: request.timestamp,\r\n      format: request.format,\r\n      totalRecords: memories.length,\r\n      dataClassification: this.config.securityClassification,\r\n      schema: {}, // Would contain actual schema\r\n      checksums: {}, // Would contain actual checksums\r\n    };\r\n  }\r\n\r\n  private async parseImportFile(\r\n    filePath: string,\r\n    format: string,\r\n  ): Promise<unknown[]> {\r\n    if (!SUPPORTED_FORMATS.includes(format as SupportedFormat)) {\r\n      throw new Error(`Unsupported format: ${format}`);\r\n    }\r\n    const fmt = format as SupportedFormat;\r\n    const handler = this.formatRegistry.get(fmt);\r\n    const raw = await fs.readFile(filePath);\r\n    const parsed = await handler.deserialize(raw);\r\n    return Array.isArray(parsed) ? parsed : [parsed];\r\n  }\r\n\r\n  private async processMemoriesForImport(\r\n    data: unknown[],\r\n    _options: ImportOptions,\r\n    _userId: string,\r\n  ): Promise<unknown[]> {\r\n    // Process and validate imported data\r\n    return data;\r\n  }\r\n\r\n  private async storeImportedMemories(\r\n    memories: unknown[],\r\n    _options: ImportOptions,\r\n    request: ImportRequest,\r\n  ): Promise<{\r\n    recordsProcessed: number;\r\n    recordsSkipped: number;\r\n    recordsErrors: number;\r\n    metadata: PortabilityMetadata;\r\n  }> {\r\n    // Store memories in the memory engine\r\n    return {\r\n      recordsProcessed: memories.length,\r\n      recordsSkipped: 0,\r\n      recordsErrors: 0,\r\n      metadata: {\r\n        exportId: request.requestId,\r\n        organizationId: this.config.organizationId,\r\n        userId: request.userId,\r\n        timestamp: request.timestamp,\r\n        format: request.format,\r\n        totalRecords: memories.length,\r\n        dataClassification: this.config.securityClassification,\r\n        schema: {},\r\n        checksums: {},\r\n      },\r\n    };\r\n  }\r\n\r\n  private createFailureMetadata(\r\n    request: ExportRequest | ImportRequest,\r\n  ): PortabilityMetadata {\r\n    return {\r\n      exportId: request.requestId,\r\n      organizationId: this.config.organizationId,\r\n      userId: request.userId,\r\n      timestamp: request.timestamp,\r\n      format: request.format,\r\n      totalRecords: 0,\r\n      dataClassification: this.config.securityClassification,\r\n      schema: {},\r\n      checksums: {},\r\n    };\r\n  }\r\n\r\n  private createMigrationMetadata(\r\n    planId: string,\r\n    userId: string,\r\n  ): PortabilityMetadata {\r\n    return {\r\n      exportId: planId,\r\n      organizationId: this.config.organizationId,\r\n      userId,\r\n      timestamp: new Date(),\r\n      format: this.config.defaultFormat,\r\n      totalRecords: 0,\r\n      dataClassification: this.config.securityClassification,\r\n      schema: {},\r\n      checksums: {},\r\n    };\r\n  }\r\n\r\n  private async estimateExportSize(filter: MemoryFilter): Promise<number> {\r\n    // Estimate export size based on filter\r\n    void filter;\r\n    return 0;\r\n  }\r\n\r\n  private async anonymizeMemories(memories: unknown[]): Promise<unknown[]> {\r\n    // Apply data anonymization rules\r\n    return memories;\r\n  }\r\n\r\n  private createDefaultMigrationPlans(): void {\r\n    // Create default migration plans\r\n  }\r\n\r\n  private cleanupCompletedJobs(): void {\r\n    // Remove old completed jobs\r\n    const cutoffTime = new Date(Date.now() - 24 * 60 * 60 * 1000); // 24 hours ago\r\n\r\n    for (const [jobId, job] of this.activeJobs) {\r\n      if (\r\n        job.status === \"completed\" &&\r\n        job.endTime &&\r\n        job.endTime < cutoffTime\r\n      ) {\r\n        this.activeJobs.delete(jobId);\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\ninterface PortabilityJob {\r\n  id: string;\r\n  type: \"export\" | \"import\" | \"migration\";\r\n  status: \"running\" | \"completed\" | \"failed\" | \"cancelled\";\r\n  progress: number; // 0-100\r\n  startTime: Date;\r\n  endTime?: Date;\r\n  request: ExportRequest | ImportRequest;\r\n  cancelled: boolean;\r\n  error?: string;\r\n}\r\n\r\n/**\r\n * Factory function to create memory portability framework\r\n */\r\nexport function createMemoryPortabilityFramework(\r\n  config: PortabilityConfig,\r\n  dependencies: {\r\n    dataPorter: EnterpriseDataPorter;\r\n    formatRegistry: FormatHandlerRegistry;\r\n    validationEngine: ValidationEngine;\r\n    securityManager: EnterpriseSecurityManager;\r\n    auditLogger: EnterpriseAuditLogger;\r\n    accessControl: AccessControlManager;\r\n    memoryEngine: DualMemoryEngine;\r\n  },\r\n): MemoryPortabilityFramework {\r\n  return new MemoryPortabilityFramework(config, dependencies);\r\n}\r\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport os from 'node:os';\n\ntype LockHandle = { file: string; release: () => void };\n\n/**\n * Helper to resolve a per-project session root\n *\n * Priority:\n * 1. Explicit MARIA_WORKSPACE_ROOT environment variable\n * 2. Walk up from initialCwd until a directory containing `.git` or `package.json`\n * 3. initialCwd itself\n *\n * This ensures that within the same project, even if terminals or subdirectories differ,\n * `.maria/memory/session.json` is consolidated into a single location.\n */\nexport function resolveSessionRoot(initialCwd: string = process.cwd()): string {\n  // 1) Prefer environment variable if present\n  const envRoot = process.env.MARIA_WORKSPACE_ROOT;\n  if (envRoot && envRoot.trim()) {\n    return path.resolve(envRoot.trim());\n  }\n\n  // 2) Locate project root (based on .git or package.json)\n  let dir = path.resolve(initialCwd);\n  let lastDir: string | null = null;\n\n  try {\n    while (dir !== lastDir) {\n      const gitDir = path.join(dir, '.git');\n      const pkgJson = path.join(dir, 'package.json');\n      if (fs.existsSync(gitDir) || fs.existsSync(pkgJson)) {\n        return dir;\n      }\n      lastDir = dir;\n      const parent = path.dirname(dir);\n      if (parent === dir) break;\n      dir = parent;\n    }\n  } catch {\n    // If the search fails, fall back to initialCwd\n    return path.resolve(initialCwd);\n  }\n\n  // 3) If no project root is found, use initialCwd as-is\n  return path.resolve(initialCwd);\n}\n\nexport class SessionMemory {\n  constructor(private root = resolveSessionRoot()) {}\n\n  private file(): string {\n    return path.join(this.root, '.maria', 'memory', 'session.json');\n  }\n\n  private lockFile(): string {\n    return path.join(this.root, '.maria', 'memory', '.session.lock');\n  }\n\n  load<T = unknown>(): T | Record<string, never> {\n    try {\n      return JSON.parse(fs.readFileSync(this.file(), 'utf8')) as T;\n    } catch {\n      return {};\n    }\n  }\n\n  /**\n   * Save session atomically with a simple file lock to avoid corruption.\n   * Applies masking and truncation to keep data safe and bounded.\n   */\n  save(data: unknown): void {\n    const target = this.file();\n    const dir = path.dirname(target);\n    fs.mkdirSync(dir, { recursive: true });\n\n    // Rotate/archive old session if TTL exceeded (7 days)\n    try {\n      this.rotateIfStale(target, 7 * 24 * 60 * 60 * 1000);\n    } catch (e) {\n      void e;\n    }\n\n    const { release } = this.tryAcquireLock(250);\n    try {\n      const masked = maskAndTrim(data);\n      try {\n        atomicWrite(target, JSON.stringify(masked, null, 2));\n      } catch (e) {\n        // Best-effort backup for recovery\n        try {\n          fs.writeFileSync(`${target}.bak`, JSON.stringify(masked, null, 2));\n        } catch (e2) {\n          void e2;\n        }\n        throw e;\n      }\n    } finally {\n      release();\n    }\n  }\n\n  /**\n   * Attempt to acquire a very lightweight lock. If an existing lock is older\n   * than 10 seconds, consider it stale and overwrite. If fresh and cannot lock\n   * within waitMs, proceed without throwing to avoid blocking the UX.\n   */\n  private tryAcquireLock(waitMs: number = 0): LockHandle {\n    const lockPath = this.lockFile();\n    const pid = process.pid;\n    const body = `${pid}\\n${new Date().toISOString()}`;\n    const start = Date.now();\n\n    // Ensure directory exists\n    fs.mkdirSync(path.dirname(lockPath), { recursive: true });\n\n    const maxWaitTime = Date.now() + waitMs;\n    while (Date.now() < maxWaitTime) {\n      try {\n        // Exclusive create\n        const fd = fs.openSync(lockPath, 'wx');\n        fs.writeFileSync(fd, body);\n        fs.closeSync(fd);\n        // Acquired\n        return { file: lockPath, release: (): void => safeUnlink(lockPath) };\n      } catch (e: unknown) {\n        const code =\n          typeof e === 'object' && e !== null && 'code' in e\n            ? (e as { code?: unknown }).code\n            : undefined;\n        if (code === 'EEXIST') {\n          // Check staleness\n          try {\n            const st = fs.statSync(lockPath);\n            const age = Date.now() - st.mtimeMs;\n            if (age > 10_000) {\n              // Stale; replace\n              safeUnlink(lockPath);\n              continue;\n            }\n          } catch (e2) {\n            void e2;\n            // Can't stat; try to replace\n            safeUnlink(lockPath);\n            continue;\n          }\n        }\n\n        if (Date.now() - start >= waitMs) {\n          // Give up quietly; return no-op release\n          return { file: lockPath, release: (): void => { return; } };\n        }\n        // Backoff briefly and retry\n        sleep(25);\n      }\n    }\n\n    // If we've exhausted max wait time, return no-op release\n    return { file: lockPath, release: (): void => { return; } };\n  }\n\n  private rotateIfStale(filePath: string, ttlMs: number): void {\n    try {\n      const st = fs.statSync(filePath);\n      const age = Date.now() - st.mtimeMs;\n      if (age > ttlMs) {\n        const d = new Date(st.mtimeMs);\n        const yyyymmdd = `${d.getUTCFullYear()}${String(d.getUTCMonth()+1).padStart(2,'0')}${String(d.getUTCDate()).padStart(2,'0')}`;\n        const archiveDir = path.join(path.dirname(filePath), 'archive', yyyymmdd);\n        fs.mkdirSync(archiveDir, { recursive: true });\n        const ts = d.toISOString().replace(/[:]/g, '-');\n        const dest = path.join(archiveDir, `session-${ts}.json`);\n        fs.renameSync(filePath, dest);\n      }\n    } catch (_e) { void _e; }\n  }\n}\n\nfunction sleep(ms: number): void {\n  Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);\n}\n\nfunction atomicWrite(targetPath: string, content: string): void {\n  const tmp = `${targetPath}.tmp-${process.pid}-${Date.now()}`;\n  fs.writeFileSync(tmp, content);\n  fs.renameSync(tmp, targetPath);\n}\n\nfunction safeUnlink(p: string): void {\n  try { fs.unlinkSync(p); } catch (_e) { void _e; }\n}\n\nfunction sanitizeString(s: string, home: string, maxLen: number): string {\n  let out = String(s);\n  if (home && out.includes(home)) {\n    out = out.split(home).join('~');\n  }\n  if (out.length > maxLen) out = out.slice(0, maxLen) + '…';\n  return out;\n}\n\nfunction maskAndTrim(data: unknown): unknown {\n  try {\n    const home = os.homedir();\n    const MAX_SUMMARY = 2000;\n    const MAX_ITEMS = 50;\n    const MAX_ITEM_LEN = 512;\n    const MAX_TOTAL_BYTES = 200_000; // 200KB cap\n\n    const cloned = JSON.parse(JSON.stringify(data)) as unknown;\n    const result: Record<string, unknown> =\n      typeof cloned === 'object' && cloned !== null\n        ? (cloned as Record<string, unknown>)\n        : {};\n    const context: Record<string, unknown> | undefined =\n      typeof result['context'] === 'object' && result['context'] !== null\n        ? (result['context'] as Record<string, unknown>)\n        : undefined;\n\n    if (context && typeof context['summary'] === 'string') {\n      const s = sanitizeString(context['summary'], home, MAX_ITEM_LEN);\n      context['summary'] = s.length > MAX_SUMMARY ? s.slice(0, MAX_SUMMARY) + '…' : s;\n    }\n    if (context && Array.isArray(context['decisions'])) {\n      context['decisions'] = (context['decisions'] as unknown[])\n        .slice(0, MAX_ITEMS)\n        .map((x): string => sanitizeString(String(x), home, MAX_ITEM_LEN));\n    }\n    if (context && Array.isArray(context['artifacts'])) {\n      context['artifacts'] = (context['artifacts'] as unknown[])\n        .slice(0, MAX_ITEMS)\n        .map((x): string => sanitizeString(String(x), home, MAX_ITEM_LEN));\n    }\n    if (context && Array.isArray(context['refs'])) {\n      context['refs'] = (context['refs'] as unknown[])\n        .slice(0, MAX_ITEMS)\n        .map((x): string => sanitizeString(String(x), home, MAX_ITEM_LEN));\n    }\n    let outStr = JSON.stringify(result);\n    if (Buffer.byteLength(outStr) > MAX_TOTAL_BYTES) {\n      outStr = outStr.slice(0, MAX_TOTAL_BYTES - 1) + '…';\n      return JSON.parse(outStr);\n    }\n    return JSON.parse(outStr);\n  } catch {\n    return data;\n  }\n}\n","/**\n * Document Auto-Save Service\n * Automatically saves design documents, specifications, TODOs, and SOWs as markdown files\n */\nimport { mkdir, writeFile } from \"fs/promises\";\nimport * as path from \"path\";\nimport { SessionMemory } from \"../memory/session\";\nimport { stderrLine } from \"../shared/utils/tty\";\n/**\n * Document types for classification\n */\nexport enum DocumentType {\n    // Documentation types\n    DESIGN = 'design',\n    SPECIFICATION = 'specification',\n    TODO = 'todo',\n    SOW = 'sow',\n    REQUIREMENTS = 'requirements',\n    ARCHITECTURE = 'architecture',\n    API_DOC = 'api-doc',\n    USER_STORY = 'user-story',\n    MEETING_NOTES = 'meeting-notes',\n    PROJECT_PLAN = 'project-plan',\n    TECHNICAL_SPEC = 'technical-spec',\n    IMPLEMENTATION_PLAN = 'implementation-plan',\n    FEEDBACK = 'feedback',\n    REVIEW = 'review',\n    RETROSPECTIVE = 'retrospective',\n    // Code and configuration types\n    TYPESCRIPT = 'typescript',\n    JAVASCRIPT = 'javascript',\n    HTML = 'html',\n    CSS = 'css',\n    SCSS = 'scss',\n    SASS = 'sass',\n    LESS = 'less',\n    SQL = 'sql',\n    SHELL_SCRIPT = 'shell-script',\n    YAML = 'yaml',\n    JSON = 'json',\n    XML = 'xml',\n    CSV = 'csv',\n    DOCKERFILE = 'dockerfile',\n    ENV_CONFIG = 'env-config',\n    GITIGNORE = 'gitignore',\n    PACKAGE_JSON = 'package-json',\n    WEBPACK_CONFIG = 'webpack-config',\n    ESLINT_CONFIG = 'eslint-config',\n    TSCONFIG = 'tsconfig',\n    MAKEFILE = 'makefile',\n    CMAKE = 'cmake',\n    GRADLE = 'gradle',\n    MAVEN = 'maven',\n    PYTHON = 'python',\n    RUBY = 'ruby',\n    GO = 'go',\n    RUST = 'rust',\n    JAVA = 'java',\n    CPP = 'cpp',\n    C = 'c',\n    CSHARP = 'csharp',\n    PHP = 'php',\n    SWIFT = 'swift',\n    KOTLIN = 'kotlin',\n    TERRAFORM = 'terraform',\n    ANSIBLE = 'ansible',\n    KUBERNETES = 'kubernetes',\n    HELM = 'helm',\n    GRAPHQL = 'graphql',\n    PRISMA = 'prisma',\n    README = 'readme',\n    CHANGELOG = 'changelog',\n    LICENSE = 'license'\n}\n/**\n * Document classification keywords\n */\nconst _DOCUMENT_KEYWORDS: Record<DocumentType, string[]> = {\n    // Documentation types\n    [DocumentType.DESIGN]: [\n        'design', 'architecture', 'diagram', 'wireframe', 'mockup', 'ui/ux',\n        'visual design', 'user interface', 'user experience', 'layout', 'prototype'\n    ],\n    [DocumentType.FEEDBACK]: [\n        'feedback', '\\u30d5\\u30a3\\u30fc\\u30c9\\u30d0\\u30c3\\u30af', 'review', 'comment', 'suggestion',\n        'improvement', 'opinion', '\\u610f\\u898b', '\\u30ec\\u30d3\\u30e5\\u30fc', '\\u30b3\\u30e1\\u30f3\\u30c8'\n    ],\n    [DocumentType.REVIEW]: [\n        'code review', 'peer review', 'review comments', 'review notes',\n        'pr review', 'pull request review', 'merge request review'\n    ],\n    [DocumentType.RETROSPECTIVE]: [\n        'retrospective', 'retro', 'sprint retrospective', 'lessons learned',\n        'post-mortem', 'reflection', 'team retrospective'\n    ],\n    [DocumentType.SPECIFICATION]: [\n        'specification', 'spec', 'requirements', 'functional spec', 'technical spec',\n        'requirement document', 'system specification', 'feature spec'\n    ],\n    [DocumentType.TODO]: [\n        'todo', 'task list', 'action items', 'checklist', 'to-do list',\n        'pending tasks', 'work items', 'backlog', 'sprint tasks'\n    ],\n    [DocumentType.SOW]: [\n        'sow', 'statement of work', 'scope of work', 'project scope',\n        'work statement', 'project proposal', 'contract', 'milestone'\n    ],\n    [DocumentType.REQUIREMENTS]: [\n        'requirements', 'user requirements', 'business requirements',\n        'functional requirements', 'non-functional requirements', 'acceptance criteria'\n    ],\n    [DocumentType.ARCHITECTURE]: [\n        'architecture', 'system architecture', 'software architecture',\n        'infrastructure', 'component diagram', 'deployment diagram'\n    ],\n    [DocumentType.API_DOC]: [\n        'api', 'api documentation', 'endpoint', 'rest api', 'graphql',\n        'api reference', 'swagger', 'openapi'\n    ],\n    [DocumentType.USER_STORY]: [\n        'user story', 'user stories', 'persona', 'use case', 'user journey',\n        'user flow', 'scenario', 'acceptance criteria'\n    ],\n    [DocumentType.MEETING_NOTES]: [\n        'meeting notes', 'meeting minutes', 'discussion', 'agenda',\n        'action items from meeting', 'decision log'\n    ],\n    [DocumentType.PROJECT_PLAN]: [\n        'project plan', 'timeline', 'roadmap', 'project timeline',\n        'delivery schedule', 'project phases', 'milestones'\n    ],\n    [DocumentType.TECHNICAL_SPEC]: [\n        'technical specification', 'tech spec', 'implementation details',\n        'technical design', 'system design', 'database schema'\n    ],\n    [DocumentType.IMPLEMENTATION_PLAN]: [\n        'implementation plan', 'development plan', 'execution plan',\n        'rollout plan', 'deployment strategy', 'implementation steps'\n    ],\n    // Code and configuration types\n    [DocumentType.TYPESCRIPT]: ['typescript', 'interface', 'type', 'enum', 'namespace'],\n    [DocumentType.JAVASCRIPT]: ['javascript', 'function', 'const', 'let', 'var'],\n    [DocumentType.HTML]: ['html', 'div', 'span', 'body', 'head', 'meta'],\n    [DocumentType.CSS]: ['css', 'style', 'selector', 'class', 'id'],\n    [DocumentType.SQL]: ['sql', 'select', 'insert', 'update', 'delete', 'create table'],\n    [DocumentType.SHELL_SCRIPT]: ['bash', 'shell', 'script', '#!/bin/bash', 'sh'],\n    [DocumentType.YAML]: ['yaml', 'yml', 'config', 'services', 'environment'],\n    [DocumentType.JSON]: ['json', 'object', 'array', 'key', 'value'],\n    [DocumentType.CSV]: ['csv', 'comma', 'separated', 'values', 'data'],\n    [DocumentType.DOCKERFILE]: ['dockerfile', 'from', 'run', 'cmd', 'expose'],\n    [DocumentType.ENV_CONFIG]: ['env', 'environment', 'variables', 'config'],\n    [DocumentType.GITIGNORE]: ['gitignore', 'ignore', 'exclude', 'node_modules'],\n    [DocumentType.PACKAGE_JSON]: ['package.json', 'dependencies', 'scripts', 'npm'],\n    [DocumentType.WEBPACK_CONFIG]: ['webpack', 'config', 'module', 'loader'],\n    [DocumentType.ESLINT_CONFIG]: ['eslint', 'rules', 'extends', 'parser'],\n    [DocumentType.TSCONFIG]: ['tsconfig', 'compileroptions', 'typescript', 'config'],\n    [DocumentType.SCSS]: ['scss', 'sass', 'mixin', 'include', 'extend'],\n    [DocumentType.SASS]: ['sass', 'mixin', 'include', 'extend'],\n    [DocumentType.LESS]: ['less', 'mixin', 'variable'],\n    [DocumentType.XML]: ['xml', 'xmlns', 'xsd', 'xsl'],\n    [DocumentType.MAKEFILE]: ['makefile', 'make', 'target', 'dependency'],\n    [DocumentType.CMAKE]: ['cmake', 'cmakelist', 'find_package', 'add_executable'],\n    [DocumentType.GRADLE]: ['gradle', 'dependencies', 'repositories', 'plugins'],\n    [DocumentType.MAVEN]: ['maven', 'pom', 'dependency', 'artifact'],\n    [DocumentType.PYTHON]: ['python', 'def', 'class', 'import', 'from', '__init__'],\n    [DocumentType.RUBY]: ['ruby', 'def', 'end', 'class', 'module', 'require'],\n    [DocumentType.GO]: ['golang', 'package', 'func', 'import', 'type', 'struct'],\n    [DocumentType.RUST]: ['rust', 'fn', 'let', 'mut', 'impl', 'trait', 'cargo'],\n    [DocumentType.JAVA]: ['java', 'class', 'public', 'private', 'interface', 'extends'],\n    [DocumentType.CPP]: ['cpp', 'c++', 'include', 'namespace', 'class', 'template'],\n    [DocumentType.C]: ['#include', 'typedef', 'struct', 'void', 'int main'],\n    [DocumentType.CSHARP]: ['csharp', 'c#', 'namespace', 'class', 'public', 'using'],\n    [DocumentType.PHP]: ['php', '<?php', 'function', 'class', 'namespace', 'use'],\n    [DocumentType.SWIFT]: ['swift', 'func', 'var', 'let', 'class', 'struct', 'import'],\n    [DocumentType.KOTLIN]: ['kotlin', 'fun', 'val', 'var', 'class', 'object', 'package'],\n    [DocumentType.TERRAFORM]: ['terraform', 'resource', 'provider', 'variable', 'output'],\n    [DocumentType.ANSIBLE]: ['ansible', 'playbook', 'tasks', 'handlers', 'roles'],\n    [DocumentType.KUBERNETES]: ['kubernetes', 'k8s', 'apiVersion', 'kind', 'metadata', 'spec'],\n    [DocumentType.HELM]: ['helm', 'chart', 'values', 'templates', 'requirements'],\n    [DocumentType.GRAPHQL]: ['graphql', 'query', 'mutation', 'subscription', 'type', 'schema'],\n    [DocumentType.PRISMA]: ['prisma', 'model', 'datasource', 'generator', '@@map'],\n    [DocumentType.README]: ['readme', 'installation', 'usage', 'contributing', 'license'],\n    [DocumentType.CHANGELOG]: ['changelog', 'version', 'added', 'changed', 'fixed', 'removed'],\n    [DocumentType.LICENSE]: ['license', 'copyright', 'permission', 'warranty', 'liability']\n};\n/**\n * Filename templates for different document types\n */\nconst FILENAME_TEMPLATES: Record<DocumentType, string> = {\n    // Documentation types\n    [DocumentType.DESIGN]: 'design_document',\n    [DocumentType.SPECIFICATION]: 'specification',\n    [DocumentType.TODO]: 'todo_list',\n    [DocumentType.SOW]: 'statement_of_work',\n    [DocumentType.REQUIREMENTS]: 'requirements',\n    [DocumentType.ARCHITECTURE]: 'architecture',\n    [DocumentType.API_DOC]: 'api_documentation',\n    [DocumentType.USER_STORY]: 'user_stories',\n    [DocumentType.MEETING_NOTES]: 'meeting_notes',\n    [DocumentType.PROJECT_PLAN]: 'project_plan',\n    [DocumentType.TECHNICAL_SPEC]: 'technical_specification',\n    [DocumentType.IMPLEMENTATION_PLAN]: 'implementation_plan',\n    [DocumentType.FEEDBACK]: 'feedback',\n    [DocumentType.REVIEW]: 'review',\n    [DocumentType.RETROSPECTIVE]: 'retrospective',\n    // Code and configuration types\n    [DocumentType.TYPESCRIPT]: 'script',\n    [DocumentType.JAVASCRIPT]: 'script',\n    [DocumentType.HTML]: 'index',\n    [DocumentType.CSS]: 'styles',\n    [DocumentType.SQL]: 'query',\n    [DocumentType.SHELL_SCRIPT]: 'script',\n    [DocumentType.YAML]: 'config',\n    [DocumentType.JSON]: 'data',\n    [DocumentType.CSV]: 'data',\n    [DocumentType.DOCKERFILE]: 'Dockerfile',\n    [DocumentType.ENV_CONFIG]: '.env',\n    [DocumentType.GITIGNORE]: '.gitignore',\n    [DocumentType.PACKAGE_JSON]: 'package',\n    [DocumentType.WEBPACK_CONFIG]: 'webpack.config',\n    [DocumentType.ESLINT_CONFIG]: '.eslintrc',\n    [DocumentType.TSCONFIG]: 'tsconfig',\n    [DocumentType.SCSS]: 'styles',\n    [DocumentType.SASS]: 'styles',\n    [DocumentType.LESS]: 'styles',\n    [DocumentType.XML]: 'data',\n    [DocumentType.MAKEFILE]: 'Makefile',\n    [DocumentType.CMAKE]: 'CMakeLists',\n    [DocumentType.GRADLE]: 'build',\n    [DocumentType.MAVEN]: 'pom',\n    [DocumentType.PYTHON]: 'script',\n    [DocumentType.RUBY]: 'script',\n    [DocumentType.GO]: 'main',\n    [DocumentType.RUST]: 'main',\n    [DocumentType.JAVA]: 'Main',\n    [DocumentType.CPP]: 'main',\n    [DocumentType.C]: 'main',\n    [DocumentType.CSHARP]: 'Program',\n    [DocumentType.PHP]: 'index',\n    [DocumentType.SWIFT]: 'main',\n    [DocumentType.KOTLIN]: 'Main',\n    [DocumentType.TERRAFORM]: 'main',\n    [DocumentType.ANSIBLE]: 'playbook',\n    [DocumentType.KUBERNETES]: 'deployment',\n    [DocumentType.HELM]: 'chart',\n    [DocumentType.GRAPHQL]: 'schema',\n    [DocumentType.PRISMA]: 'schema',\n    [DocumentType.README]: 'README',\n    [DocumentType.CHANGELOG]: 'CHANGELOG',\n    [DocumentType.LICENSE]: 'LICENSE'\n};\n/**\n * File extensions for different document types\n */\nconst _FILE_EXTENSIONS: Record<DocumentType, string> = {\n    // Documentation types (all markdown)\n    [DocumentType.DESIGN]: '.md',\n    [DocumentType.SPECIFICATION]: '.md',\n    [DocumentType.TODO]: '.md',\n    [DocumentType.SOW]: '.md',\n    [DocumentType.REQUIREMENTS]: '.md',\n    [DocumentType.ARCHITECTURE]: '.md',\n    [DocumentType.API_DOC]: '.md',\n    [DocumentType.USER_STORY]: '.md',\n    [DocumentType.MEETING_NOTES]: '.md',\n    [DocumentType.PROJECT_PLAN]: '.md',\n    [DocumentType.TECHNICAL_SPEC]: '.md',\n    [DocumentType.IMPLEMENTATION_PLAN]: '.md',\n    [DocumentType.FEEDBACK]: '.md',\n    [DocumentType.REVIEW]: '.md',\n    [DocumentType.RETROSPECTIVE]: '.md',\n    // Code and configuration types\n    [DocumentType.TYPESCRIPT]: '.ts',\n    [DocumentType.JAVASCRIPT]: '.js',\n    [DocumentType.HTML]: '.html',\n    [DocumentType.CSS]: '.css',\n    [DocumentType.SQL]: '.sql',\n    [DocumentType.SHELL_SCRIPT]: '.sh',\n    [DocumentType.YAML]: '.yml',\n    [DocumentType.JSON]: '.json',\n    [DocumentType.CSV]: '.csv',\n    [DocumentType.DOCKERFILE]: '', // No extension for Dockerfile\n    [DocumentType.ENV_CONFIG]: '', // .env has no additional extension\n    [DocumentType.GITIGNORE]: '', // .gitignore has no additional extension\n    [DocumentType.PACKAGE_JSON]: '.json',\n    [DocumentType.WEBPACK_CONFIG]: '.js',\n    [DocumentType.ESLINT_CONFIG]: '.json',\n    [DocumentType.TSCONFIG]: '.json',\n    [DocumentType.SCSS]: '.scss',\n    [DocumentType.SASS]: '.sass',\n    [DocumentType.LESS]: '.less',\n    [DocumentType.XML]: '.xml',\n    [DocumentType.MAKEFILE]: '', // Makefile has no extension\n    [DocumentType.CMAKE]: '.txt', // CMakeLists.txt\n    [DocumentType.GRADLE]: '.gradle',\n    [DocumentType.MAVEN]: '.xml',\n    [DocumentType.PYTHON]: '.py',\n    [DocumentType.RUBY]: '.rb',\n    [DocumentType.GO]: '.go',\n    [DocumentType.RUST]: '.rs',\n    [DocumentType.JAVA]: '.java',\n    [DocumentType.CPP]: '.cpp',\n    [DocumentType.C]: '.c',\n    [DocumentType.CSHARP]: '.cs',\n    [DocumentType.PHP]: '.php',\n    [DocumentType.SWIFT]: '.swift',\n    [DocumentType.KOTLIN]: '.kt',\n    [DocumentType.TERRAFORM]: '.tf',\n    [DocumentType.ANSIBLE]: '.yml',\n    [DocumentType.KUBERNETES]: '.yaml',\n    [DocumentType.HELM]: '.yaml',\n    [DocumentType.GRAPHQL]: '.graphql',\n    [DocumentType.PRISMA]: '.prisma',\n    [DocumentType.README]: '.md',\n    [DocumentType.CHANGELOG]: '.md',\n    [DocumentType.LICENSE]: '' // LICENSE has no extension\n};\n/**\n * Classify content based on keywords and patterns\n */\nexport function classifyDocument(content: string): DocumentType | null {\n    const lowerContent = content.toLowerCase();\n    // Score each document type based on keyword matches\n    const scores: Record<DocumentType, number> = {\n        // Documentation types\n        [DocumentType.DESIGN]: 0,\n        [DocumentType.SPECIFICATION]: 0,\n        [DocumentType.TODO]: 0,\n        [DocumentType.SOW]: 0,\n        [DocumentType.REQUIREMENTS]: 0,\n        [DocumentType.ARCHITECTURE]: 0,\n        [DocumentType.API_DOC]: 0,\n        [DocumentType.USER_STORY]: 0,\n        [DocumentType.MEETING_NOTES]: 0,\n        [DocumentType.PROJECT_PLAN]: 0,\n        [DocumentType.TECHNICAL_SPEC]: 0,\n        [DocumentType.IMPLEMENTATION_PLAN]: 0,\n        // Code and configuration types\n        [DocumentType.TYPESCRIPT]: 0,\n        [DocumentType.JAVASCRIPT]: 0,\n        [DocumentType.HTML]: 0,\n        [DocumentType.CSS]: 0,\n        [DocumentType.SQL]: 0,\n        [DocumentType.SHELL_SCRIPT]: 0,\n        [DocumentType.YAML]: 0,\n        [DocumentType.JSON]: 0,\n        [DocumentType.CSV]: 0,\n        [DocumentType.DOCKERFILE]: 0,\n        [DocumentType.ENV_CONFIG]: 0,\n        [DocumentType.GITIGNORE]: 0,\n        [DocumentType.PACKAGE_JSON]: 0,\n        [DocumentType.WEBPACK_CONFIG]: 0,\n        [DocumentType.ESLINT_CONFIG]: 0,\n        [DocumentType.TSCONFIG]: 0,\n        [DocumentType.FEEDBACK]: 0,\n        [DocumentType.REVIEW]: 0,\n        [DocumentType.RETROSPECTIVE]: 0,\n        [DocumentType.SCSS]: 0,\n        [DocumentType.SASS]: 0,\n        [DocumentType.LESS]: 0,\n        [DocumentType.XML]: 0,\n        [DocumentType.MAKEFILE]: 0,\n        [DocumentType.CMAKE]: 0,\n        [DocumentType.GRADLE]: 0,\n        [DocumentType.MAVEN]: 0,\n        [DocumentType.PYTHON]: 0,\n        [DocumentType.RUBY]: 0,\n        [DocumentType.GO]: 0,\n        [DocumentType.RUST]: 0,\n        [DocumentType.JAVA]: 0,\n        [DocumentType.CPP]: 0,\n        [DocumentType.C]: 0,\n        [DocumentType.CSHARP]: 0,\n        [DocumentType.PHP]: 0,\n        [DocumentType.SWIFT]: 0,\n        [DocumentType.KOTLIN]: 0,\n        [DocumentType.TERRAFORM]: 0,\n        [DocumentType.ANSIBLE]: 0,\n        [DocumentType.KUBERNETES]: 0,\n        [DocumentType.HELM]: 0,\n        [DocumentType.GRAPHQL]: 0,\n        [DocumentType.PRISMA]: 0,\n        [DocumentType.README]: 0,\n        [DocumentType.CHANGELOG]: 0,\n        [DocumentType.LICENSE]: 0\n    };\n    // Check for specific patterns that indicate document types\n    for (const [docType, keywords] of Object.entries(_DOCUMENT_KEYWORDS)) {\n        for (const keyword of keywords) {\n            if (lowerContent.includes(keyword)) {\n                scores[docType as DocumentType] += 1;\n                // Boost score if keyword appears in title/header\n                if (lowerContent.includes(`# ${keyword}`) || lowerContent.includes(`## ${keyword}`)) {\n                    scores[docType as DocumentType] += 2;\n                }\n            }\n        }\n    }\n    // Special pattern detection\n    if (isMarkdownStructure(content)) {\n        // Check for TODO list patterns\n        if (hasTaskListPattern(content)) {\n            scores[DocumentType.TODO] += 3;\n        }\n        // Check for API documentation patterns\n        if (hasApiDocPattern(content)) {\n            scores[DocumentType.API_DOC] += 3;\n        }\n        // Check for SOW patterns\n        if (hasSOWPattern(content)) {\n            scores[DocumentType.SOW] += 3;\n        }\n    }\n    // Check for code patterns\n    if (hasTypeScriptPattern(content)) {\n        scores[DocumentType.TYPESCRIPT] += 5;\n    }\n    if (hasJavaScriptPattern(content)) {\n        scores[DocumentType.JAVASCRIPT] += 5;\n    }\n    if (hasHTMLPattern(content)) {\n        scores[DocumentType.HTML] += 5;\n    }\n    if (hasCSSPattern(content)) {\n        scores[DocumentType.CSS] += 5;\n    }\n    if (hasSQLPattern(content)) {\n        scores[DocumentType.SQL] += 5;\n    }\n    if (hasShellScriptPattern(content)) {\n        scores[DocumentType.SHELL_SCRIPT] += 5;\n    }\n    if (hasYAMLPattern(content)) {\n        scores[DocumentType.YAML] += 5;\n    }\n    if (hasJSONPattern(content)) {\n        scores[DocumentType.JSON] += 5;\n    }\n    if (hasCSVPattern(content)) {\n        scores[DocumentType.CSV] += 5;\n    }\n    if (hasDockerfilePattern(content)) {\n        scores[DocumentType.DOCKERFILE] += 5;\n    }\n    if (hasEnvConfigPattern(content)) {\n        scores[DocumentType.ENV_CONFIG] += 5;\n    }\n    if (hasPackageJsonPattern(content)) {\n        scores[DocumentType.PACKAGE_JSON] += 5;\n    }\n    // Check for additional language patterns\n    if (hasPythonPattern(content))\n        scores[DocumentType.PYTHON] += 5;\n    if (hasRubyPattern(content))\n        scores[DocumentType.RUBY] += 5;\n    if (hasGoPattern(content))\n        scores[DocumentType.GO] += 5;\n    if (hasRustPattern(content))\n        scores[DocumentType.RUST] += 5;\n    if (hasJavaPattern(content))\n        scores[DocumentType.JAVA] += 5;\n    if (hasCppPattern(content))\n        scores[DocumentType.CPP] += 5;\n    if (hasCPattern(content))\n        scores[DocumentType.C] += 5;\n    if (hasCSharpPattern(content))\n        scores[DocumentType.CSHARP] += 5;\n    if (hasPHPPattern(content))\n        scores[DocumentType.PHP] += 5;\n    if (hasSwiftPattern(content))\n        scores[DocumentType.SWIFT] += 5;\n    if (hasKotlinPattern(content))\n        scores[DocumentType.KOTLIN] += 5;\n    // Check for infrastructure patterns\n    if (hasTerraformPattern(content))\n        scores[DocumentType.TERRAFORM] += 5;\n    if (hasKubernetesPattern(content))\n        scores[DocumentType.KUBERNETES] += 5;\n    if (hasDockerComposePattern(content))\n        scores[DocumentType.YAML] += 3;\n    // Check for feedback patterns\n    if (hasFeedbackPattern(content))\n        scores[DocumentType.FEEDBACK] += 5;\n    // Find the document type with the highest score\n    // Prioritize documentation types over code types for mixed content\n    let maxScore = 0;\n    let bestType: DocumentType | null = null;\n    let bestDocType: DocumentType | null = null;\n    let maxDocScore = 0;\n    for (const [docType, score] of Object.entries(scores)) {\n        if (score > maxScore) {\n            maxScore = score;\n            bestType = docType as DocumentType;\n        }\n        // Track best documentation type separately\n        if (!isCodeFileType(docType as DocumentType) && score > maxDocScore) {\n            maxDocScore = score;\n            bestDocType = docType as DocumentType;\n        }\n    }\n    // Prefer documentation types if they have a reasonable score\n    if (maxDocScore >= 2) {\n        return bestDocType;\n    }\n    // Only classify as code type if score is high and no doc type matched\n    if (isCodeFileType(bestType!) && maxScore >= 5) {\n        return bestType;\n    }\n    // Only classify if we have a reasonable confidence (score >= 2)\n    return maxScore >= 2 ? bestType : null;\n}\n/**\n * Check if content has markdown structure\n */\nfunction isMarkdownStructure(content: string): boolean {\n    return /^#+ /.test(content) ||\n        content.includes('## ') ||\n        content.includes('### ') ||\n        content.includes('- [ ]') ||\n        content.includes('- [x]') ||\n        content.includes('```');\n}\n/**\n * Check for task list patterns\n */\nfunction hasTaskListPattern(content: string): boolean {\n    return content.includes('- [ ]') ||\n        content.includes('- [x]') ||\n        /^\\d+\\.\\s/.test(content) ||\n        content.includes('TODO:') ||\n        content.includes('FIXME:');\n}\n/**\n * Check for API documentation patterns\n */\nfunction hasApiDocPattern(content: string): boolean {\n    return content.includes('GET ') ||\n        content.includes('POST ') ||\n        content.includes('PUT ') ||\n        content.includes('DELETE ') ||\n        content.includes('PATCH ') ||\n        content.includes('endpoint') ||\n        content.includes('parameters') ||\n        content.includes('response');\n}\n/**\n * Check for SOW patterns\n */\nfunction hasSOWPattern(content: string): boolean {\n    return content.includes('deliverable') ||\n        content.includes('milestone') ||\n        content.includes('timeline') ||\n        content.includes('budget') ||\n        content.includes('scope') ||\n        content.includes('objective');\n}\n/**\n * Check for TypeScript patterns\n */\nfunction hasTypeScriptPattern(content: string): boolean {\n    return /\\binterface\\s+\\w+/.test(content) ||\n        /\\btype\\s+\\w+\\s*=/.test(content) ||\n        /\\benum\\s+\\w+/.test(content) ||\n        /: (string|number|boolean|any|void)/.test(content) ||\n        /\\bnamespace\\s+\\w+/.test(content);\n}\n/**\n * Check for JavaScript patterns\n */\nfunction hasJavaScriptPattern(content: string): boolean {\n    return /\\bfunction\\s+\\w+/.test(content) ||\n        /\\bconst\\s+\\w+\\s*=/.test(content) ||\n        /\\blet\\s+\\w+\\s*=/.test(content) ||\n        /\\bvar\\s+\\w+\\s*=/.test(content) ||\n        /=>/.test(content) ||\n        /\\.prototype\\./.test(content);\n}\n/**\n * Check for HTML patterns\n */\nfunction hasHTMLPattern(content: string): boolean {\n    return /<(!DOCTYPE|html|head|body|div|span|p|h[1-6]|a|img|form|input|button)/.test(content) ||\n        /<\\/(html|head|body|div|span|p|h[1-6]|a|form)>/.test(content);\n}\n/**\n * Check for CSS patterns\n */\nfunction hasCSSPattern(content: string): boolean {\n    return /\\.(\\w+)\\s*\\{/.test(content) ||\n        /#(\\w+)\\s*\\{/.test(content) ||\n        /\\b(color|background|margin|padding|font|display|position)\\s*:/.test(content) ||\n        /@media\\s+/.test(content);\n}\n/**\n * Check for SQL patterns\n */\nfunction hasSQLPattern(content: string): boolean {\n    const sqlKeywords = /\\b(SELECT|INSERT INTO|UPDATE|DELETE FROM|CREATE TABLE|DROP TABLE|ALTER TABLE|FROM|WHERE|JOIN|GROUP BY|ORDER BY|HAVING|DATABASE)\\b/i;\n    // Require at least SQL-like structure, not just keywords\n    return sqlKeywords.test(content) &&\n        (content.includes('CREATE TABLE') ||\n            content.includes('SELECT ') ||\n            content.includes('INSERT INTO'));\n}\n/**\n * Check for Shell Script patterns\n */\nfunction hasShellScriptPattern(content: string): boolean {\n    // Must have shebang or multiple shell commands\n    const hasShebang = /^#!\\/bin\\/(bash|sh)/.test(content);\n    const shellCommands = content.match(/\\b(echo|cd|ls|mkdir|rm|cp|mv|grep|sed|awk|chmod|chown|export)\\b/g);\n    const hasShellSyntax = /\\bif\\s+\\[/.test(content) || /\\bfor\\s+\\w+\\s+in/.test(content);\n    return hasShebang || (shellCommands && shellCommands.length > 3) || hasShellSyntax;\n}\n/**\n * Check for YAML patterns\n */\nfunction hasYAMLPattern(content: string): boolean {\n    return /^\\w+:\\s*$/m.test(content) ||\n        /^\\s+-\\s+/m.test(content) ||\n        /^\\w+:\\s+[^:]+$/m.test(content);\n}\n/**\n * Check for JSON patterns\n */\nfunction hasJSONPattern(content: string): boolean {\n    try {\n        JSON.parse(content);\n        return true;\n    }\n    catch {\n        return /\\{[\\s\\S]*\"[\\w]+\"\\s*:[\\s\\S]*\\}/.test(content) ||\n            /\\[[\\s\\S]*\\]/.test(content);\n    }\n}\n/**\n * Check for CSV patterns\n */\nfunction hasCSVPattern(_content: string): boolean {\n    const lines = _content.split('\\n');\n    if (lines.length < 2)\n        return false;\n    const firstLine = lines[0].split(',').length;\n    const secondLine = lines[1] ? lines[1].split(',').length : 0;\n    return firstLine > 1 && firstLine === secondLine;\n}\n/**\n * Check for Dockerfile patterns\n */\nfunction hasDockerfilePattern(content: string): boolean {\n    return /^FROM\\s+/m.test(content) ||\n        /^(RUN|CMD|EXPOSE|ENV|ADD|COPY|ENTRYPOINT|VOLUME|USER|WORKDIR)\\s+/m.test(content);\n}\n/**\n * Check for Environment Config patterns\n */\nfunction hasEnvConfigPattern(content: string): boolean {\n    return /^[A-Z_]+=[^\\n]+$/m.test(content) &&\n        content.split('\\n').filter(line => /^[A-Z_]+=[^\\n]+$/.test(line)).length > 2;\n}\n/**\n * Check for package.json patterns\n */\nfunction hasPackageJsonPattern(_content: string): boolean {\n    try {\n        const parsed = JSON.parse(_content);\n        return parsed.name && (parsed.dependencies || parsed.devDependencies || parsed.scripts);\n    }\n    catch {\n        return false;\n    }\n}\n/**\n * Check for Python patterns\n */\nfunction hasPythonPattern(content: string): boolean {\n    return /\\bdef\\s+\\w+\\s*\\(/.test(content) ||\n        /\\bclass\\s+\\w+[\\(:]/.test(content) ||\n        /^from\\s+\\w+\\s+import/m.test(content) ||\n        /^import\\s+\\w+/m.test(content) ||\n        /if\\s+__name__\\s*==\\s*[\"']__main__[\"']/.test(content);\n}\n/**\n * Check for Ruby patterns\n */\nfunction hasRubyPattern(content: string): boolean {\n    return /\\bdef\\s+\\w+/.test(content) ||\n        /\\bclass\\s+\\w+/.test(content) ||\n        /\\bmodule\\s+\\w+/.test(content) ||\n        /\\brequire\\s+[\"']/.test(content) ||\n        /\\bputs\\s+/.test(content);\n}\n/**\n * Check for Go patterns\n */\nfunction hasGoPattern(content: string): boolean {\n    return /^package\\s+\\w+/m.test(content) ||\n        /\\bfunc\\s+\\w+\\s*\\(/.test(content) ||\n        /\\btype\\s+\\w+\\s+struct/.test(content) ||\n        /^import\\s+\\(/m.test(content);\n}\n/**\n * Check for Rust patterns\n */\nfunction hasRustPattern(content: string): boolean {\n    return /\\bfn\\s+\\w+\\s*\\(/.test(content) ||\n        /\\blet\\s+(mut\\s+)?\\w+/.test(content) ||\n        /\\bimpl\\s+\\w+/.test(content) ||\n        /\\btrait\\s+\\w+/.test(content) ||\n        /\\buse\\s+\\w+/.test(content);\n}\n/**\n * Check for Java patterns\n */\nfunction hasJavaPattern(content: string): boolean {\n    return /\\bpublic\\s+class\\s+\\w+/.test(content) ||\n        /\\bprivate\\s+(static\\s+)?\\w+/.test(content) ||\n        /\\binterface\\s+\\w+/.test(content) ||\n        /\\bextends\\s+\\w+/.test(content) ||\n        /\\bimplements\\s+\\w+/.test(content);\n}\n/**\n * Check for C++ patterns\n */\nfunction hasCppPattern(content: string): boolean {\n    return /#include\\s*<\\w+>/.test(content) ||\n        /\\bnamespace\\s+\\w+/.test(content) ||\n        /\\bclass\\s+\\w+\\s*\\{/.test(content) ||\n        /\\btemplate\\s*</.test(content) ||\n        /std::\\w+/.test(content);\n}\n/**\n * Check for C patterns\n */\nfunction hasCPattern(content: string): boolean {\n    return /#include\\s*[<\"]\\w+\\.h[>\"]/.test(content) ||\n        /\\btypedef\\s+struct/.test(content) ||\n        /\\bint\\s+main\\s*\\(/.test(content) ||\n        /\\bvoid\\s+\\w+\\s*\\(/.test(content);\n}\n/**\n * Check for C# patterns\n */\nfunction hasCSharpPattern(content: string): boolean {\n    return /\\bnamespace\\s+\\w+/.test(content) ||\n        /\\bpublic\\s+class\\s+\\w+/.test(content) ||\n        /\\busing\\s+System/.test(content) ||\n        /\\basync\\s+Task/.test(content);\n}\n/**\n * Check for PHP patterns\n */\nfunction hasPHPPattern(content: string): boolean {\n    return /<\\?php/.test(content) ||\n        /\\bfunction\\s+\\w+\\s*\\(/.test(content) ||\n        /\\bclass\\s+\\w+\\s*\\{/.test(content) ||\n        /\\$\\w+\\s*=/.test(content);\n}\n/**\n * Check for Swift patterns\n */\nfunction hasSwiftPattern(content: string): boolean {\n    return /\\bfunc\\s+\\w+\\s*\\(/.test(content) ||\n        /\\bvar\\s+\\w+\\s*:/.test(content) ||\n        /\\blet\\s+\\w+\\s*:/.test(content) ||\n        /\\bclass\\s+\\w+\\s*:/.test(content) ||\n        /\\bstruct\\s+\\w+/.test(content);\n}\n/**\n * Check for Kotlin patterns\n */\nfunction hasKotlinPattern(content: string): boolean {\n    return /\\bfun\\s+\\w+\\s*\\(/.test(content) ||\n        /\\bval\\s+\\w+/.test(content) ||\n        /\\bvar\\s+\\w+/.test(content) ||\n        /\\bclass\\s+\\w+/.test(content) ||\n        /\\bobject\\s+\\w+/.test(content);\n}\n/**\n * Check for Terraform patterns\n */\nfunction hasTerraformPattern(content: string): boolean {\n    return /\\bresource\\s+\"\\w+\"\\s+\"\\w+\"/.test(content) ||\n        /\\bprovider\\s+\"\\w+\"/.test(content) ||\n        /\\bvariable\\s+\"\\w+\"/.test(content) ||\n        /\\boutput\\s+\"\\w+\"/.test(content);\n}\n/**\n * Check for Kubernetes patterns\n */\nfunction hasKubernetesPattern(content: string): boolean {\n    return /apiVersion:\\s*\\w+/.test(content) ||\n        /kind:\\s*(Deployment|Service|Pod|ConfigMap)/.test(content) ||\n        /metadata:\\s*\\n\\s+name:/.test(content);\n}\n/**\n * Check for Docker Compose patterns\n */\nfunction hasDockerComposePattern(content: string): boolean {\n    return /version:\\s*[\"']\\d+/.test(content) &&\n        /services:\\s*\\n/.test(content);\n}\n/**\n * Check for feedback patterns\n */\nfunction hasFeedbackPattern(content: string): boolean {\n    return /feedback|\\u30d5\\u30a3\\u30fc\\u30c9\\u30d0\\u30c3\\u30af|review|comment|suggestion/.test(content.toLowerCase()) ||\n        /improvement|opinion|\\u610f\\u898b|\\u30ec\\u30d3\\u30e5\\u30fc|\\u30b3\\u30e1\\u30f3\\u30c8/.test(content.toLowerCase());\n}\n/**\n * Generate appropriate filename based on content and document type\n */\nexport function generateDocumentFilename(_content: string, docType: DocumentType, userHint?: string): string {\n    const date = new Date();\n    const dateStr = date.toISOString().slice(0, 10).replace(/-/g, '');\n    // Try to extract a meaningful title from the content\n    let title = extractTitleFromContent(_content);\n    // Use user hint if provided\n    if (userHint) {\n        title = sanitizeFilename(userHint);\n    }\n    // Fallback to template\n    if (!title) {\n        title = FILENAME_TEMPLATES[docType];\n    }\n    // Ensure English filename\n    title = transliterateToEnglish(title);\n    // Get appropriate file extension\n    const extension = _FILE_EXTENSIONS[docType] || '.md';\n    // Format: title_YYYYMMDD with appropriate extension\n    // Special cases for config files that start with dot\n    if (docType === DocumentType.ENV_CONFIG) {\n        return `.env`;\n    }\n    if (docType === DocumentType.GITIGNORE) {\n        return `.gitignore`;\n    }\n    if (docType === DocumentType.DOCKERFILE) {\n        return `Dockerfile`;\n    }\n    return `${title}_${dateStr}${extension}`;\n}\n/**\n * Extract title from markdown content\n */\nfunction extractTitleFromContent(content: string): string | null {\n    // Look for first h1 heading\n    const h1Match = content.match(/^#\\s+(.+)$/m);\n    if (h1Match) {\n        return sanitizeFilename(h1Match[1]);\n    }\n    // Look for first h2 heading\n    const h2Match = content.match(/^##\\s+(.+)$/m);\n    if (h2Match) {\n        return sanitizeFilename(h2Match[1]);\n    }\n    // Look for title-like patterns\n    const titleMatch = content.match(/(?:title|name):\\s*(.+)/i);\n    if (titleMatch) {\n        return sanitizeFilename(titleMatch[1]);\n    }\n    return null;\n}\n/**\n * Sanitize filename for filesystem\n */\nfunction sanitizeFilename(_filename: string): string {\n    return _filename\n        .toLowerCase()\n        .replace(/[^\\w\\s-]/g, '') // Remove special characters\n        .replace(/\\s+/g, '_') // Replace spaces with underscores\n        .replace(/_+/g, '_') // Remove multiple underscores\n        .slice(0, 50); // Limit length\n}\n/**\n * Simple transliteration for common non-English characters\n */\nfunction transliterateToEnglish(_text: string): string {\n    const transliterationMap: Record<string, string> = {\n        // Japanese katakana/hiragana to romaji (basic)\n        '\\u30c7\\u30b6\\u30a4\\u30f3': 'design',\n        '\\u30b7\\u30b9\\u30c6\\u30e0': 'system',\n        '\\u30d7\\u30ed\\u30b8\\u30a7\\u30af\\u30c8': 'project',\n        '\\u4ed5\\u69d8\\u66f8': 'specification',\n        '\\u8a2d\\u8a08\\u66f8': 'design_document',\n        '\\u8981\\u4ef6\\u5b9a\\u7fa9': 'requirements',\n        'TODO': 'todo',\n        '\\u30bf\\u30b9\\u30af': 'task',\n        '\\u30b9\\u30b1\\u30b8\\u30e5\\u30fc\\u30eb': 'schedule',\n        '\\u30df\\u30fc\\u30c6\\u30a3\\u30f3\\u30b0': 'meeting',\n        '\\u30a2\\u30fc\\u30ad\\u30c6\\u30af\\u30c1\\u30e3': 'architecture',\n        'API': 'api',\n        '\\u30e6\\u30fc\\u30b6\\u30fc': 'user',\n        '\\u30b9\\u30c8\\u30fc\\u30ea\\u30fc': 'story',\n        '\\u5b9f\\u88c5': 'implementation',\n        '\\u8a08\\u753b': 'plan'\n    };\n    let result = _text;\n    for (const [original, transliterated] of Object.entries(transliterationMap)) {\n        result = result.replace(new RegExp(original, 'g'), transliterated);\n    }\n    return result;\n}\n/**\n * Check if document type is a code file type\n */\nfunction isCodeFileType(_docType: DocumentType): boolean {\n    return [\n        DocumentType.TYPESCRIPT,\n        DocumentType.JAVASCRIPT,\n        DocumentType.HTML,\n        DocumentType.CSS,\n        DocumentType.SCSS,\n        DocumentType.SASS,\n        DocumentType.LESS,\n        DocumentType.SQL,\n        DocumentType.SHELL_SCRIPT,\n        DocumentType.YAML,\n        DocumentType.JSON,\n        DocumentType.XML,\n        DocumentType.CSV,\n        DocumentType.DOCKERFILE,\n        DocumentType.ENV_CONFIG,\n        DocumentType.GITIGNORE,\n        DocumentType.PACKAGE_JSON,\n        DocumentType.WEBPACK_CONFIG,\n        DocumentType.ESLINT_CONFIG,\n        DocumentType.TSCONFIG,\n        DocumentType.MAKEFILE,\n        DocumentType.CMAKE,\n        DocumentType.GRADLE,\n        DocumentType.MAVEN,\n        DocumentType.PYTHON,\n        DocumentType.RUBY,\n        DocumentType.GO,\n        DocumentType.RUST,\n        DocumentType.JAVA,\n        DocumentType.CPP,\n        DocumentType.C,\n        DocumentType.CSHARP,\n        DocumentType.PHP,\n        DocumentType.SWIFT,\n        DocumentType.KOTLIN,\n        DocumentType.TERRAFORM,\n        DocumentType.ANSIBLE,\n        DocumentType.KUBERNETES,\n        DocumentType.HELM,\n        DocumentType.GRAPHQL,\n        DocumentType.PRISMA\n    ].includes(_docType);\n}\n/**\n * Check if document type is a code file\n */\nfunction isCodeFile(_docType: DocumentType): boolean {\n    return [\n        DocumentType.TYPESCRIPT,\n        DocumentType.JAVASCRIPT,\n        DocumentType.HTML,\n        DocumentType.CSS,\n        DocumentType.SQL,\n        DocumentType.SHELL_SCRIPT,\n        DocumentType.YAML,\n        DocumentType.JSON,\n        DocumentType.CSV,\n        DocumentType.DOCKERFILE,\n        DocumentType.ENV_CONFIG,\n        DocumentType.GITIGNORE,\n        DocumentType.PACKAGE_JSON,\n        DocumentType.WEBPACK_CONFIG,\n        DocumentType.ESLINT_CONFIG,\n        DocumentType.TSCONFIG\n    ].includes(_docType);\n}\n/**\n * Format content as proper markdown or code file\n */\nexport function formatAsMarkdown(content: string, docType: DocumentType): string {\n    let formatted = content;\n    // For code files, return content as-is (no markdown formatting)\n    if (isCodeFile(docType)) {\n        // Just ensure proper line endings\n        return content.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n    }\n    // For documentation files, apply markdown formatting\n    // Ensure proper markdown headers\n    if (!formatted.startsWith('#')) {\n        const title = extractTitleFromContent(content) || FILENAME_TEMPLATES[docType].replace('_', ' ');\n        formatted = `# ${title}\\n\\n${formatted}`;\n    }\n    // Add metadata header\n    const metadata = generateMetadata(docType);\n    formatted = `${metadata}\\n\\n${formatted}`;\n    // Ensure proper line endings\n    formatted = formatted.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n    // Add footer with generation info\n    const footer = `\\n---\\n\\n*Generated by MARIA CODE v5.9.5 on ${new Date().toISOString().slice(0, 10)}*\\n`;\n    formatted = `${formatted}${footer}`;\n    return formatted;\n}\n/**\n * Generate document metadata\n */\nfunction generateMetadata(_docType: DocumentType): string {\n    const now = new Date();\n    return `---\ntype: ${_docType}\ncreated: ${now.toISOString()}\ngenerator: MARIA CODE v5.9.5\n---`;\n}\n/**\n * Save document to file\n */\nexport async function saveDocumentToFile(content: string, docType: DocumentType, _userHint?: string): Promise<string> {\n    const filename = generateDocumentFilename(content, docType, _userHint);\n    const formattedContent = formatAsMarkdown(content, docType);\n    const filePath = path.resolve(process.cwd(), filename);\n    await writeFile(filePath, formattedContent, 'utf8');\n    return filePath;\n}\n/**\n * Main function to auto-save documents\n * Returns the saved file path if document was saved, null otherwise\n */\nexport async function autoSaveDocument(content: string, _userHint?: string): Promise<string | null> {\n    const docType = classifyDocument(content);\n    if (!docType) {\n        // Not a recognized document type\n        return null;\n    }\n    try {\n        const filePath = await saveDocumentToFile(content, docType, _userHint);\n        return filePath;\n    }\n    catch (error) {\n        stderrLine('Error auto-saving document:', error);\n        return null;\n    }\n}\n/**\n * Auto-save multiple documents from a single response\n * Splits content by document markers and saves each separately\n *\n * Additional requirements:\n * - If the assistant outputs a shell snippet in the form `/code write <path> <<EOF ... EOF`,\n *   write the body to `<path>` and save it.\n *   (This ensures requests like \"save under docs/\" are reliably reflected.)\n * - Record the saved paths into SessionMemory as task context so `/workflow/resume` can trace\n *   what was saved in this session.\n */\nexport async function autoSaveMultipleDocuments(content: string, baseHint?: string): Promise<string[]> {\n    const savedPaths: string[] = [];\n    // 1) Preferentially process explicit `/code write path <<EOF ... EOF` blocks\n    const explicitSaves = await applyExplicitCodeWriteBlocks(content);\n    if (explicitSaves.length > 0) {\n        savedPaths.push(...explicitSaves);\n    }\n    // 2) Existing document auto-save logic\n    const documentSections = splitIntoDocuments(content);\n    if (documentSections.length > 1) {\n        // Multiple documents detected\n        for (let i = 0; i < documentSections.length; i++) {\n            const section = documentSections[i];\n            const docType = classifyDocument(section);\n            if (docType) {\n                const hint = baseHint ? `${baseHint}_${i + 1}` : undefined;\n                try {\n                    const filePath = await saveDocumentToFile(section, docType, hint);\n                    savedPaths.push(filePath);\n                }\n                catch (error) {\n                    stderrLine(`Error saving document ${i + 1}:`, error);\n                }\n            }\n        }\n    }\n    else {\n        // Single document\n        const savedPath = await autoSaveDocument(content, baseHint);\n        if (savedPath)\n            savedPaths.push(savedPath);\n    }\n    // 3) Record as a session task (best-effort)\n    if (savedPaths.length > 0) {\n        await recordAutoSaveTask(savedPaths, baseHint);\n    }\n    return savedPaths;\n}\n/**\n * Split content into multiple documents based on markers\n */\nfunction splitIntoDocuments(content: string): string[] {\n    // For code files, never split - always treat as single document\n    const detectedType = classifyDocument(content);\n    if (detectedType && isCodeFileType(detectedType)) {\n        return [content];\n    }\n    // Look for document boundaries\n    const _sections: string[] = [];\n    // Pattern 1: Multiple H1 headers that indicate separate documents\n    // Only split if we have clear document-type headers\n    const h1Matches = content.match(/^# (?:Statement of Work|SOW|Requirements|Technical Specification|Architecture|TODO|Project Plan|Design Document|User Stories)/gm);\n    if (h1Matches && h1Matches.length > 1) {\n        const majorSections = content.split(/^(?=# (?:Statement of Work|SOW|Requirements|Technical Specification|Architecture|TODO|Project Plan|Design Document|User Stories))/m);\n        return majorSections.filter(s => s.trim());\n    }\n    // Pattern 2: Explicit document separators\n    const separatorPattern = /^---\\s*Document\\s*\\d+\\s*---$/m;\n    if (separatorPattern.test(content)) {\n        return content.split(separatorPattern).filter(s => s.trim());\n    }\n    // Default: treat as single document\n    return [content];\n}\n/**\n * Record auto-saved documents into SessionMemory so we can later trace\n * which files were generated by which task (taskId).\n *\n * - taskId is simply named as `doc.<hint>` (e.g., `doc.architecture`).\n * - artifacts/refs store paths relative to CWD.\n * - Swallow errors to avoid breaking UX (log only).\n */\nasync function recordAutoSaveTask(savedPaths: string[], _baseHint?: string): Promise<void> {\n    if (!savedPaths.length)\n        return;\n    try {\n        const root = process.cwd();\n        const relPaths = savedPaths.map((p): string => path.relative(root, p));\n        const rawTitle = _baseHint || \"auto\";\n        const safeTitle = sanitizeFilename(rawTitle) || \"auto\";\n        const taskId = `doc.${safeTitle}`;\n        const summary = `Auto-saved documents: ${relPaths.join(\", \")}`;\n        const sm = new SessionMemory(root);\n        sm.save({\n            taskId,\n            resumeAt: new Date().toISOString(),\n            context: {\n                summary,\n                decisions: [],\n                artifacts: relPaths,\n                refs: relPaths,\n            },\n        });\n    }\n    catch (error) {\n        // Recording failures should not affect the main save flow\n        try {\n            // eslint-disable-next-line no-console\n            stderrLine(\"Error recording auto-save task:\", error);\n        }\n        catch {\n            // ignore\n        }\n    }\n}\n/**\n * Helper that detects `/code write <relative-path> <<EOF ... EOF` blocks\n * and writes them to actual files.\n *\n * - Only allow relative paths; ignore unsafe paths containing `..`.\n * - Overwrite existing files (to align with /code write intent).\n */\nasync function applyExplicitCodeWriteBlocks(_content: string): Promise<string[]> {\n    const saved: string[] = [];\n    // Loosely detect `/code write path <<EOF ... EOF` (inside or outside code blocks)\n    const re = /\\/code\\s+write\\s+([^\\s]+)\\s*<<EOF([\\s\\S]*?)EOF/g;\n    let match: RegExpExecArray | null;\n    while ((match = re.exec(_content)) !== null) {\n        const relPath = (match[1] || \"\").trim();\n        const bodyRaw = match[2] ?? \"\";\n        // Path safety check: forbid absolute paths and parent directory traversal\n        if (!relPath || relPath.startsWith(\"/\") || relPath.includes(\"..\")) {\n            continue;\n        }\n        try {\n            const filePath = path.resolve(process.cwd(), relPath);\n            const dir = path.dirname(filePath);\n            await mkdir(dir, { recursive: true });\n            // Lightly trim extra newlines and normalize line endings to LF\n            const normalizedBody = bodyRaw\n                .replace(/^\\s*\\n/, \"\")\n                .replace(/\\r\\n/g, \"\\n\")\n                .replace(/\\r/g, \"\\n\");\n            await writeFile(filePath, normalizedBody, \"utf8\");\n            saved.push(filePath);\n        }\n        catch (error) {\n            stderrLine(\"Error applying explicit /code write block:\", error);\n            // Continue processing other blocks\n        }\n    }\n    return saved;\n}\n","import { stdoutLine, stderrLine } from \"../../shared/utils/tty\";\r\n\r\n/**\r\n * Base Service Class for Resource Management\r\n * All services should extend this for proper timer/listener cleanup\r\n */\r\n\r\nexport interface ServiceConfig {\r\n  name: string;\r\n  enableTelemetry?: boolean;\r\n  jitterPercent?: number; // 0-100, default 10\r\n}\r\n\r\nexport abstract class BaseService {\r\n  protected readonly serviceName: string;\r\n  protected timers: NodeJS.Timeout[] = [];\r\n  protected listeners: Array<() => void> = [];\r\n  protected destroyed = false;\r\n  protected telemetryEnabled: boolean;\r\n  protected jitterPercent: number;\r\n\r\n  constructor(config: ServiceConfig) {\r\n    this.serviceName = config.name;\r\n    this.telemetryEnabled = config.enableTelemetry ?? false;\r\n    this.jitterPercent = config.jitterPercent ?? 10;\r\n  }\r\n\r\n  /**\r\n   * Register a timer with automatic cleanup and jitter\r\n   */\r\n  protected registerTimer(\r\n    fn: () => void | Promise<void>,\r\n    interval: number,\r\n    options?: {\r\n      immediate?: boolean;\r\n      jitter?: boolean;\r\n    },\r\n  ): void {\r\n    if (this.destroyed) {\r\n      stderrLine(`[${this.serviceName}] Cannot register timer - service is destroyed`);\r\n      return;\r\n    }\r\n\r\n    // Add jitter to prevent thundering herd\r\n    let actualInterval = interval;\r\n    if (options?.jitter !== false) {\r\n      const jitterAmount = interval * (this.jitterPercent / 100);\r\n      actualInterval = interval + (Math.random() - 0.5) * 2 * jitterAmount;\r\n    }\r\n\r\n    // Wrap async functions safely\r\n    const safeFn = (): void => {\r\n      try {\r\n        const result = fn();\r\n        if (result instanceof Promise) {\r\n          result.catch((error): void => {\r\n            stderrLine(`[${this.serviceName}] Timer error:`, error);\r\n          });\r\n        }\r\n      } catch (error) {\r\n        stderrLine(`[${this.serviceName}] Timer error:`, error);\r\n      }\r\n    };\r\n\r\n    // Execute immediately if requested\r\n    if (options?.immediate) {\r\n      safeFn();\r\n    }\r\n\r\n    const timer = setInterval(safeFn, actualInterval);\r\n    this.timers.push(timer);\r\n\r\n    // Don't keep process alive\r\n    timer.unref?.();\r\n\r\n    if (this.telemetryEnabled) {\r\n      this.logTelemetry(\"timer.registered\", { interval: actualInterval });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Register a cleanup listener\r\n   */\r\n  protected registerListener(cleanup: () => void | Promise<void>): void {\r\n    if (this.destroyed) {\r\n      stderrLine(`[${this.serviceName}] Cannot register listener - service is destroyed`);\r\n      return;\r\n    }\r\n\r\n    // Wrap async cleanup safely\r\n    const safeCleanup = (): void => {\r\n      try {\r\n        const result = cleanup();\r\n        if (result instanceof Promise) {\r\n          result.catch((innerError): void => {\r\n            stderrLine(`[${this.serviceName}] Cleanup error:`, innerError);\r\n          });\r\n        }\r\n      } catch (error) {\r\n        stderrLine(`[${this.serviceName}] Cleanup failed:`, error);\r\n      }\r\n    };\r\n\r\n    this.listeners.push(safeCleanup);\r\n  }\r\n\r\n  /**\r\n   * Register a delayed task\r\n   */\r\n  protected registerDelay(\r\n    fn: () => void | Promise<void>,\r\n    delay: number,\r\n  ): NodeJS.Timeout {\r\n    if (this.destroyed) {\r\n      throw new Error(\r\n        `[${this.serviceName}] Cannot register delay - service is destroyed`,\r\n      );\r\n    }\r\n\r\n    const timer = setTimeout((): void => {\r\n      try {\r\n        const result = fn();\r\n        if (result instanceof Promise) {\r\n          result.catch((error): void => {\r\n            stderrLine(`[${this.serviceName}] Delayed task error:`, error);\r\n          });\r\n        }\r\n      } catch (error) {\r\n        stderrLine(`[${this.serviceName}] Delayed task error:`, error);\r\n      }\r\n\r\n      // Remove from timers array after execution\r\n      const index = this.timers.indexOf(timer);\r\n      if (index > -1) {\r\n        this.timers.splice(index, 1);\r\n      }\r\n    }, delay);\r\n\r\n    this.timers.push(timer);\r\n    timer.unref?.();\r\n\r\n    return timer;\r\n  }\r\n\r\n  /**\r\n   * Cancel a specific timer\r\n   */\r\n  protected cancelTimer(timer: NodeJS.Timeout): boolean {\r\n    const index = this.timers.indexOf(timer);\r\n    if (index > -1) {\r\n      clearTimeout(timer);\r\n      this.timers.splice(index, 1);\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Get service health status\r\n   */\r\n  getHealth(): ServiceHealth {\r\n    return {\r\n      service: this.serviceName,\r\n      status: this.destroyed ? \"destroyed\" : \"healthy\",\r\n      timers: this.timers.length,\r\n      listeners: this.listeners.length,\r\n      uptime: process.uptime(),\r\n      memory: process.memoryUsage().heapUsed / 1024 / 1024, // MB\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Log telemetry event\r\n   */\r\n  protected logTelemetry(event: string, metadata?: Record<string, unknown>): void {\r\n    if (!this.telemetryEnabled) return;\r\n\r\n    const telemetryEvent = {\r\n      service: this.serviceName,\r\n      event,\r\n      timestamp: Date.now(),\r\n      metadata,\r\n    };\r\n\r\n    // In production, this would emit to a telemetry collector\r\n    if (process.env.DEBUG_TELEMETRY) {\r\n      stdoutLine(\"[TELEMETRY]\", JSON.stringify(telemetryEvent));\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Destroy the service and cleanup all resources\r\n   */\r\n  destroy(): void {\r\n    if (this.destroyed) {\r\n      stderrLine(`[${this.serviceName}] Already destroyed`);\r\n      return;\r\n    }\r\n\r\n    stdoutLine(`[${this.serviceName}] Destroying service...`);\r\n\r\n    // Clear all timers\r\n    for (const timer of this.timers) {\r\n      clearInterval(timer);\r\n      clearTimeout(timer);\r\n    }\r\n    this.timers = [];\r\n\r\n    // Run all cleanup listeners\r\n    for (const cleanup of this.listeners) {\r\n      try {\r\n        cleanup();\r\n      } catch (innerError) {\r\n        stderrLine(`[${this.serviceName}] Cleanup error:`, innerError);\r\n      }\r\n    }\r\n    this.listeners = [];\r\n\r\n    this.destroyed = true;\r\n    this.logTelemetry(\"service.destroyed\");\r\n\r\n    stdoutLine(`[${this.serviceName}] Service destroyed`);\r\n  }\r\n\r\n  /**\r\n   * Check if service is destroyed\r\n   */\r\n  isDestroyed(): boolean {\r\n    return this.destroyed;\r\n  }\r\n\r\n  /**\r\n   * Abstract method - services should implement their initialization\r\n   */\r\n  abstract initialize(): Promise<void>;\r\n}\r\n\r\nexport interface ServiceHealth {\r\n  service: string;\r\n  status: \"healthy\" | \"unhealthy\" | \"destroyed\";\r\n  timers: number;\r\n  listeners: number;\r\n  uptime: number;\r\n  memory: number;\r\n}\r\n","/**\r\n * Explicit Filename Analyzer\r\n * Detects when user explicitly specifies a filename\r\n */\r\n\r\nimport type { FilenameCandidate, FilenamePattern } from '../types/filename-inference.types.js';\r\nimport * as path from 'path';\r\n\r\nexport class ExplicitFilenameAnalyzer {\r\n  private patterns: FilenamePattern[];\r\n\r\n  constructor() {\r\n    this.patterns = [\r\n      // Japanese patterns\r\n      {\r\n        pattern: /(?:\\u3092|\\u3067|\\u3068\\u3057\\u3066|\\u306b|\\u3078)\\s*([a-zA-Z0-9_-]+\\.\\w+)/,\r\n        extractor: (match): string => match[1],\r\n        confidence: 0.95,\r\n        priority: 1\r\n      },\r\n      {\r\n        pattern: /([a-zA-Z0-9_-]+\\.\\w+)\\s*(?:\\u3067|\\u3092|\\u3068\\u3057\\u3066|\\u306b|\\u3078)/,\r\n        extractor: (match): string => match[1],\r\n        confidence: 0.95,\r\n        priority: 1\r\n      },\r\n      {\r\n        pattern: /(?:\\u4f5c\\u6210|\\u4f5c\\u3063\\u3066|\\u751f\\u6210).*?([a-zA-Z0-9_-]+\\.\\w+)/,\r\n        extractor: (match): string => match[1],\r\n        confidence: 0.9,\r\n        priority: 2\r\n      },\r\n      \r\n      // English patterns\r\n      {\r\n        pattern: /create\\s+(?:a\\s+)?(?:file\\s+)?(?:named\\s+)?([a-zA-Z0-9_-]+\\.\\w+)/i,\r\n        extractor: (match): string => match[1],\r\n        confidence: 0.95,\r\n        priority: 1\r\n      },\r\n      {\r\n        pattern: /save\\s+(?:as|to)\\s+([a-zA-Z0-9_-]+\\.\\w+)/i,\r\n        extractor: (match): string => match[1],\r\n        confidence: 0.95,\r\n        priority: 1\r\n      },\r\n      {\r\n        pattern: /(?:in|into)\\s+(?:file\\s+)?([a-zA-Z0-9_-]+\\.\\w+)/i,\r\n        extractor: (match): string => match[1],\r\n        confidence: 0.9,\r\n        priority: 2\r\n      },\r\n      {\r\n        pattern: /([a-zA-Z0-9_-]+\\.\\w+)\\s+(?:file|for|with)/i,\r\n        extractor: (match): string => match[1],\r\n        confidence: 0.85,\r\n        priority: 3\r\n      },\r\n      \r\n      // Direct filename mention\r\n      {\r\n        pattern: /^([a-zA-Z0-9_-]+\\.\\w+)$/,\r\n        extractor: (match): string => match[1],\r\n        confidence: 0.8,\r\n        priority: 4\r\n      },\r\n      {\r\n        pattern: /\"([a-zA-Z0-9_/-]+\\.\\w+)\"/,\r\n        extractor: (match): string => match[1],\r\n        confidence: 0.95,\r\n        priority: 1\r\n      },\r\n      {\r\n        pattern: /'([a-zA-Z0-9_/-]+\\.\\w+)'/,\r\n        extractor: (match): string => match[1],\r\n        confidence: 0.95,\r\n        priority: 1\r\n      },\r\n      \r\n      // Path patterns\r\n      {\r\n        pattern: /(?:at|in)\\s+([a-zA-Z0-9_/-]+\\/[a-zA-Z0-9_-]+\\.\\w+)/,\r\n        extractor: (match): string => match[1],\r\n        confidence: 0.9,\r\n        priority: 2\r\n      }\r\n    ];\r\n\r\n    // Sort by priority\r\n    this.patterns.sort((a, b): number => a.priority - b.priority);\r\n  }\r\n\r\n  /**\r\n   * Analyze user input for explicit filename specification\r\n   */\r\n  async analyze(userInput: string): Promise<FilenameCandidate> {\r\n    // Try each pattern\r\n    for (const pattern of this.patterns) {\r\n      const match = userInput.match(pattern.pattern);\r\n      if (match) {\r\n        const extractedFilename = pattern.extractor(match);\r\n        const { filename, extension, isValid } = this.validateFilename(extractedFilename);\r\n        \r\n        if (isValid) {\r\n          return {\r\n            path: filename,\r\n            filename,\r\n            extension,\r\n            confidence: pattern.confidence,\r\n            reasoning: `Explicitly specified filename detected: \"${filename}\"`,\r\n            source: 'explicit',\r\n            alternatives: this.generateAlternatives(filename)\r\n          };\r\n        }\r\n      }\r\n    }\r\n\r\n    // No explicit filename found\r\n    return {\r\n      path: '',\r\n      filename: '',\r\n      extension: '',\r\n      confidence: 0,\r\n      reasoning: 'No explicit filename specification detected',\r\n      source: 'explicit',\r\n      alternatives: []\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Validate and normalize filename\r\n   */\r\n  private validateFilename(filename: string): {\r\n    filename: string;\r\n    extension: string;\r\n    isValid: boolean;\r\n  } {\r\n    // Remove any directory path for validation\r\n    const basename = path.basename(filename);\r\n    const ext = path.extname(basename);\r\n    \r\n    // Check for invalid characters (split to avoid control-char regex lint)\r\n    const invalidChars = /[<>:\"|?*]/;\r\n    if (invalidChars.test(basename) || this.containsControlChars(basename)) {\r\n      return { filename: '', extension: '', isValid: false };\r\n    }\r\n\r\n    // Check for reserved names (Windows)\r\n    const reserved = ['CON', 'PRN', 'AUX', 'NUL', 'COM1', 'COM2', 'COM3', 'COM4',\r\n                     'COM5', 'COM6', 'COM7', 'COM8', 'COM9', 'LPT1', 'LPT2',\r\n                     'LPT3', 'LPT4', 'LPT5', 'LPT6', 'LPT7', 'LPT8', 'LPT9'];\r\n    const nameWithoutExt = path.basename(basename, ext).toUpperCase();\r\n    if (reserved.includes(nameWithoutExt)) {\r\n      return { filename: '', extension: '', isValid: false };\r\n    }\r\n\r\n    // Valid filename\r\n    return {\r\n      filename: basename,\r\n      extension: ext,\r\n      isValid: true\r\n    };\r\n  }\r\n\r\n  private containsControlChars(value: string): boolean {\r\n    for (let i = 0; i < value.length; i++) {\r\n      if (value.charCodeAt(i) < 32) {\r\n        return true;\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Generate alternative filenames\r\n   */\r\n  private generateAlternatives(filename: string): string[] {\r\n    const alternatives: string[] = [];\r\n    const ext = path.extname(filename);\r\n    const basename = path.basename(filename, ext);\r\n\r\n    // Different casing alternatives\r\n    if (basename.includes('-')) {\r\n      // kebab-case to camelCase\r\n      const camelCase = basename.replace(/-([a-z])/g, (_, char): string => char.toUpperCase());\r\n      alternatives.push(camelCase + ext);\r\n      \r\n      // kebab-case to PascalCase\r\n      const pascalCase = camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\r\n      alternatives.push(pascalCase + ext);\r\n    } else if (basename.includes('_')) {\r\n      // snake_case to camelCase\r\n      const camelCase = basename.replace(/_([a-z])/g, (_, char): string => char.toUpperCase());\r\n      alternatives.push(camelCase + ext);\r\n    } else if (/[A-Z]/.test(basename)) {\r\n      // camelCase/PascalCase to kebab-case\r\n      const kebabCase = basename.replace(/([A-Z])/g, '-$1').toLowerCase().replace(/^-/, '');\r\n      alternatives.push(kebabCase + ext);\r\n    }\r\n\r\n    // Extension alternatives for web files\r\n    const webExtensions: Record<string, string[]> = {\r\n      '.html': ['.htm'],\r\n      '.htm': ['.html'],\r\n      '.js': ['.mjs', '.cjs'],\r\n      '.mjs': ['.js', '.cjs'],\r\n      '.cjs': ['.js', '.mjs'],\r\n      '.ts': ['.tsx'],\r\n      '.tsx': ['.ts'],\r\n      '.jsx': ['.js'],\r\n      '.yml': ['.yaml'],\r\n      '.yaml': ['.yml']\r\n    };\r\n\r\n    if (webExtensions[ext]) {\r\n      for (const altExt of webExtensions[ext]) {\r\n        alternatives.push(basename + altExt);\r\n      }\r\n    }\r\n\r\n    return alternatives.slice(0, 3); // Return top 3 alternatives\r\n  }\r\n}","/**\r\n * Contextual Analyzer\r\n * Infers filename from context and keywords in user input\r\n */\r\n\r\nimport type {\r\n  FilenameCandidate,\r\n  ProjectContext,\r\n  ContextualMapping\r\n} from '../types/filename-inference.types.js';\r\n\r\nexport class ContextualAnalyzer {\r\n  private mappings: ContextualMapping[];\r\n\r\n  constructor() {\r\n    this.mappings = [\r\n      // Game-related\r\n      { keywords: ['tetris', '\\u30c6\\u30c8\\u30ea\\u30b9'], suggest: 'tetris.html', confidence: 0.8, category: 'game' },\r\n      { keywords: ['game', '\\u30b2\\u30fc\\u30e0'], suggest: 'game.html', confidence: 0.7, category: 'game' },\r\n      { keywords: ['snake', '\\u30b9\\u30cd\\u30fc\\u30af'], suggest: 'snake.html', confidence: 0.8, category: 'game' },\r\n      { keywords: ['puzzle', '\\u30d1\\u30ba\\u30eb'], suggest: 'puzzle.html', confidence: 0.7, category: 'game' },\r\n      { keywords: ['breakout', '\\u30d6\\u30ed\\u30c3\\u30af\\u5d29\\u3057'], suggest: 'breakout.html', confidence: 0.8, category: 'game' },\r\n      \r\n      // API/Backend\r\n      { keywords: ['api', 'rest', 'endpoint'], suggest: 'api.js', confidence: 0.8, category: 'backend' },\r\n      { keywords: ['server', '\\u30b5\\u30fc\\u30d0\\u30fc'], suggest: 'server.js', confidence: 0.8, category: 'backend' },\r\n      { keywords: ['route', 'router', '\\u30eb\\u30fc\\u30c8'], suggest: 'routes.js', confidence: 0.7, category: 'backend' },\r\n      { keywords: ['middleware', '\\u30df\\u30c9\\u30eb\\u30a6\\u30a7\\u30a2'], suggest: 'middleware.js', confidence: 0.7, category: 'backend' },\r\n      { keywords: ['auth', '\\u8a8d\\u8a3c'], suggest: 'auth.js', confidence: 0.7, category: 'backend' },\r\n      \r\n      // Frontend Components\r\n      { keywords: ['component', '\\u30b3\\u30f3\\u30dd\\u30fc\\u30cd\\u30f3\\u30c8'], suggest: 'Component.tsx', confidence: 0.7, category: 'frontend' },\r\n      { keywords: ['button', '\\u30dc\\u30bf\\u30f3'], suggest: 'Button.tsx', confidence: 0.8, category: 'frontend' },\r\n      { keywords: ['form', '\\u30d5\\u30a9\\u30fc\\u30e0'], suggest: 'Form.tsx', confidence: 0.8, category: 'frontend' },\r\n      { keywords: ['modal', '\\u30e2\\u30fc\\u30c0\\u30eb'], suggest: 'Modal.tsx', confidence: 0.8, category: 'frontend' },\r\n      { keywords: ['navbar', 'navigation', '\\u30ca\\u30d3'], suggest: 'Navbar.tsx', confidence: 0.8, category: 'frontend' },\r\n      { keywords: ['dashboard', '\\u30c0\\u30c3\\u30b7\\u30e5\\u30dc\\u30fc\\u30c9'], suggest: 'Dashboard.tsx', confidence: 0.8, category: 'frontend' },\r\n      \r\n      // Configuration\r\n      { keywords: ['config', '\\u8a2d\\u5b9a', 'configuration'], suggest: 'config.json', confidence: 0.8, category: 'config' },\r\n      { keywords: ['env', 'environment', '\\u74b0\\u5883'], suggest: '.env', confidence: 0.8, category: 'config' },\r\n      { keywords: ['package', 'dependencies'], suggest: 'package.json', confidence: 0.9, category: 'config' },\r\n      { keywords: ['docker'], suggest: 'Dockerfile', confidence: 0.9, category: 'config' },\r\n      { keywords: ['webpack'], suggest: 'webpack.config.js', confidence: 0.9, category: 'config' },\r\n      \r\n      // Testing\r\n      { keywords: ['test', '\\u30c6\\u30b9\\u30c8'], suggest: 'test.spec.js', confidence: 0.7, category: 'test' },\r\n      { keywords: ['spec', 'specification'], suggest: 'spec.js', confidence: 0.7, category: 'test' },\r\n      { keywords: ['unit test', '\\u30e6\\u30cb\\u30c3\\u30c8\\u30c6\\u30b9\\u30c8'], suggest: 'unit.test.js', confidence: 0.8, category: 'test' },\r\n      { keywords: ['e2e', 'end-to-end'], suggest: 'e2e.test.js', confidence: 0.8, category: 'test' },\r\n      \r\n      // Data\r\n      { keywords: ['database', 'db', '\\u30c7\\u30fc\\u30bf\\u30d9\\u30fc\\u30b9'], suggest: 'database.sql', confidence: 0.7, category: 'data' },\r\n      { keywords: ['schema', '\\u30b9\\u30ad\\u30fc\\u30de'], suggest: 'schema.sql', confidence: 0.8, category: 'data' },\r\n      { keywords: ['model', '\\u30e2\\u30c7\\u30eb'], suggest: 'model.js', confidence: 0.7, category: 'data' },\r\n      { keywords: ['migration', '\\u30de\\u30a4\\u30b0\\u30ec\\u30fc\\u30b7\\u30e7\\u30f3'], suggest: 'migration.sql', confidence: 0.8, category: 'data' },\r\n      \r\n      // Styles\r\n      { keywords: ['style', 'css', '\\u30b9\\u30bf\\u30a4\\u30eb'], suggest: 'styles.css', confidence: 0.7, category: 'style' },\r\n      { keywords: ['theme', '\\u30c6\\u30fc\\u30de'], suggest: 'theme.css', confidence: 0.7, category: 'style' },\r\n      { keywords: ['sass', 'scss'], suggest: 'styles.scss', confidence: 0.8, category: 'style' },\r\n      \r\n      // Documentation\r\n      { keywords: ['readme', 'documentation'], suggest: 'README.md', confidence: 0.9, category: 'docs' },\r\n      { keywords: ['changelog', '\\u5909\\u66f4\\u5c65\\u6b74'], suggest: 'CHANGELOG.md', confidence: 0.9, category: 'docs' },\r\n      { keywords: ['license', '\\u30e9\\u30a4\\u30bb\\u30f3\\u30b9'], suggest: 'LICENSE', confidence: 0.9, category: 'docs' },\r\n      \r\n      // Utilities\r\n      { keywords: ['util', 'utility', 'helper', '\\u30e6\\u30fc\\u30c6\\u30a3\\u30ea\\u30c6\\u30a3'], suggest: 'utils.js', confidence: 0.6, category: 'util' },\r\n      { keywords: ['format', 'formatter'], suggest: 'formatter.js', confidence: 0.7, category: 'util' },\r\n      { keywords: ['validate', 'validator', '\\u30d0\\u30ea\\u30c7\\u30fc\\u30b7\\u30e7\\u30f3'], suggest: 'validator.js', confidence: 0.7, category: 'util' },\r\n      { keywords: ['parser', 'parse', '\\u30d1\\u30fc\\u30b5\\u30fc'], suggest: 'parser.js', confidence: 0.7, category: 'util' }\r\n    ];\r\n  }\r\n\r\n  /**\r\n   * Analyze user input for contextual filename hints\r\n   */\r\n  async analyze(userInput: string, projectContext?: ProjectContext): Promise<FilenameCandidate> {\r\n    const lowerInput = userInput.toLowerCase();\r\n    const matches: Array<{ mapping: ContextualMapping; score: number }> = [];\r\n\r\n    // Check each mapping\r\n    for (const mapping of this.mappings) {\r\n      let score = 0;\r\n      let matchedKeywords = 0;\r\n      \r\n      for (const keyword of mapping.keywords) {\r\n        if (lowerInput.includes(keyword.toLowerCase())) {\r\n          matchedKeywords++;\r\n          // Give higher score for longer keyword matches\r\n          score += keyword.length * mapping.confidence;\r\n        }\r\n      }\r\n\r\n      if (matchedKeywords > 0) {\r\n        matches.push({\r\n          mapping,\r\n          score: score / mapping.keywords.length // Normalize by number of keywords\r\n        });\r\n      }\r\n    }\r\n\r\n    // Sort by score\r\n    matches.sort((a, b): number => b.score - a.score);\r\n\r\n    if (matches.length > 0) {\r\n      const bestMatch = matches[0];\r\n      let suggestedFilename = bestMatch.mapping.suggest;\r\n      \r\n      // Adjust based on project context\r\n      if (projectContext) {\r\n        suggestedFilename = this.adjustForProjectContext(\r\n          suggestedFilename,\r\n          bestMatch.mapping.category || 'general',\r\n          projectContext\r\n        );\r\n      }\r\n\r\n      // Extract additional context from input\r\n      const enhancedFilename = this.enhanceWithSpecificContext(suggestedFilename, userInput);\r\n\r\n      return {\r\n        path: enhancedFilename,\r\n        filename: enhancedFilename,\r\n        extension: this.extractExtension(enhancedFilename),\r\n        confidence: Math.min(bestMatch.score, 0.85), // Cap at 0.85 for contextual\r\n        reasoning: `Inferred from context: ${bestMatch.mapping.keywords.join(', ')}`,\r\n        source: 'contextual',\r\n        alternatives: this.generateAlternatives(enhancedFilename, matches.slice(1, 4))\r\n      };\r\n    }\r\n\r\n    // No contextual match found\r\n    return {\r\n      path: 'index.js',\r\n      filename: 'index.js',\r\n      extension: '.js',\r\n      confidence: 0.3,\r\n      reasoning: 'No strong contextual hints found, using default',\r\n      source: 'contextual',\r\n      alternatives: ['app.js', 'main.js', 'script.js']\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Adjust filename based on project context\r\n   */\r\n  private adjustForProjectContext(\r\n    filename: string,\r\n    category: string,\r\n    context: ProjectContext\r\n  ): string {\r\n    // Adjust extension based on project type\r\n    if (context.language === 'typescript' && filename.endsWith('.js')) {\r\n      filename = filename.replace('.js', '.ts');\r\n    }\r\n    \r\n    if (context.framework === 'react') {\r\n      if (category === 'frontend' && filename.endsWith('.ts')) {\r\n        filename = filename.replace('.ts', '.tsx');\r\n      }\r\n      if (category === 'frontend' && filename.endsWith('.js')) {\r\n        filename = filename.replace('.js', '.jsx');\r\n      }\r\n    }\r\n\r\n    // Apply naming conventions\r\n    if (context.conventions?.fileNaming) {\r\n      const basename = filename.substring(0, filename.lastIndexOf('.'));\r\n      const ext = filename.substring(filename.lastIndexOf('.'));\r\n      \r\n      switch (context.conventions.fileNaming) {\r\n        case 'kebab-case':\r\n          filename = this.toKebabCase(basename) + ext;\r\n          break;\r\n        case 'camelCase':\r\n          filename = this.toCamelCase(basename) + ext;\r\n          break;\r\n        case 'PascalCase':\r\n          filename = this.toPascalCase(basename) + ext;\r\n          break;\r\n        case 'snake_case':\r\n          filename = this.toSnakeCase(basename) + ext;\r\n          break;\r\n      }\r\n    }\r\n\r\n    return filename;\r\n  }\r\n\r\n  /**\r\n   * Enhance filename with specific context from input\r\n   */\r\n  private enhanceWithSpecificContext(baseFilename: string, userInput: string): string {\r\n    // Extract specific names from input\r\n    const namePatterns = [\r\n      /(?:called|named|\\u3068\\u3044\\u3046\\u540d\\u524d\\u306e?)\\s+([a-zA-Z][a-zA-Z0-9]*)/i,\r\n      /([A-Z][a-zA-Z0-9]*)\\s+(?:component|\\u30b3\\u30f3\\u30dd\\u30fc\\u30cd\\u30f3\\u30c8|class|\\u30af\\u30e9\\u30b9)/i,\r\n      /(?:for|\\u306e)\\s+([a-zA-Z][a-zA-Z0-9]*)/i\r\n    ];\r\n\r\n    for (const pattern of namePatterns) {\r\n      const match = userInput.match(pattern);\r\n      if (match) {\r\n        const specificName = match[1];\r\n        const ext = this.extractExtension(baseFilename);\r\n        \r\n        // Replace generic part with specific name\r\n        if (baseFilename.includes('Component')) {\r\n          return specificName + ext;\r\n        }\r\n        if (baseFilename === 'game.html' || baseFilename === 'app.js') {\r\n          return specificName.toLowerCase() + ext;\r\n        }\r\n      }\r\n    }\r\n\r\n    return baseFilename;\r\n  }\r\n\r\n  /**\r\n   * Generate alternative filenames\r\n   */\r\n  private generateAlternatives(\r\n    primary: string,\r\n    otherMatches: Array<{ mapping: ContextualMapping; score: number }>\r\n  ): string[] {\r\n    const alternatives: string[] = [];\r\n    \r\n    // Add alternatives from other matches\r\n    for (const match of otherMatches) {\r\n      if (alternatives.length < 3) {\r\n        alternatives.push(match.mapping.suggest);\r\n      }\r\n    }\r\n\r\n    // Add variations of primary\r\n    const ext = this.extractExtension(primary);\r\n    const basename = primary.substring(0, primary.lastIndexOf('.') || primary.length);\r\n    \r\n    if (ext === '.js') {\r\n      alternatives.push(basename + '.ts');\r\n    }\r\n    if (ext === '.html') {\r\n      alternatives.push(basename + '.tsx');\r\n    }\r\n\r\n    return alternatives.slice(0, 3);\r\n  }\r\n\r\n  /**\r\n   * Extract file extension\r\n   */\r\n  private extractExtension(filename: string): string {\r\n    const lastDot = filename.lastIndexOf('.');\r\n    return lastDot > 0 ? filename.substring(lastDot) : '';\r\n  }\r\n\r\n  // String conversion utilities\r\n  private toKebabCase(str: string): string {\r\n    return str\r\n      .replace(/([a-z])([A-Z])/g, '$1-$2')\r\n      .replace(/[\\s_]+/g, '-')\r\n      .toLowerCase();\r\n  }\r\n\r\n  private toCamelCase(str: string): string {\r\n    return str\r\n      .replace(/[-_\\s](.)/g, (_, char): string => char.toUpperCase())\r\n      .replace(/^(.)/, (_, char): string => char.toLowerCase());\r\n  }\r\n\r\n  private toPascalCase(str: string): string {\r\n    return str\r\n      .replace(/[-_\\s](.)/g, (_, char): string => char.toUpperCase())\r\n      .replace(/^(.)/, (_, char): string => char.toUpperCase());\r\n  }\r\n\r\n  private toSnakeCase(str: string): string {\r\n    return str\r\n      .replace(/([a-z])([A-Z])/g, '$1_$2')\r\n      .replace(/[-\\s]+/g, '_')\r\n      .toLowerCase();\r\n  }\r\n}","/**\n * Semantic Analyzer\n * Analyzes code content to infer appropriate filename\n */\nimport type { FilenameCandidate } from '../types/filename-inference.types.js';\nimport * as path from 'node:path';\nexport class SemanticAnalyzer {\n    /**\n     * Analyze code content to suggest filename\n     */\n    async analyze(code: string, _userInput: string): Promise<FilenameCandidate> {\n        // Detect primary language\n        const language = this.detectLanguage(code);\n        // Extract semantic information\n        const componentName = this.extractComponentName(code);\n        const className = this.extractClassName(code);\n        const functionName = this.extractMainFunction(code);\n        const isTest = this.isTestFile(code);\n        const isConfig = this.isConfigFile(code);\n        // Determine filename based on semantic analysis\n        let filename = 'index';\n        let confidence = 0.5;\n        let reasoning = 'Inferred from code structure';\n        if (componentName) {\n            filename = componentName;\n            confidence = 0.75;\n            reasoning = `React component detected: ${componentName}`;\n        }\n        else if (className) {\n            filename = className;\n            confidence = 0.7;\n            reasoning = `Class detected: ${className}`;\n        }\n        else if (functionName && functionName !== 'main') {\n            filename = this.toKebabCase(functionName);\n            confidence = 0.6;\n            reasoning = `Main function detected: ${functionName}`;\n        }\n        // Adjust for test files\n        if (isTest) {\n            if (!filename.includes('test') && !filename.includes('spec')) {\n                filename = filename + '.test';\n            }\n            reasoning += ' (test file)';\n        }\n        // Adjust for config files\n        if (isConfig) {\n            if (!filename.includes('config')) {\n                filename = 'config';\n            }\n            reasoning += ' (configuration file)';\n        }\n        // Add extension based on language\n        const extension = this.getExtensionForLanguage(language, code);\n        filename = filename + extension;\n        const directory = '.';\n        const filePath = path.join(directory, filename);\n        return {\n            path: filePath,\n            filename,\n            extension,\n            confidence,\n            reasoning,\n            source: 'semantic',\n            alternatives: this.generateAlternatives(filename, language),\n            directory\n        };\n    }\n    /**\n     * Detect programming language from code\n     */\n    private detectLanguage(code: string): string {\n        const indicators = [\n            { lang: 'html', patterns: [/<!DOCTYPE/i, /<html/i, /<body/i, /<head/i], weight: 10 },\n            { lang: 'tsx', patterns: [/import.*React/, /export.*React.FC/, /<.*\\/>/], weight: 9 },\n            { lang: 'jsx', patterns: [/import.*react/, /ReactDOM.render/, /<.*\\/>/], weight: 8 },\n            { lang: 'typescript', patterns: [/interface\\s+\\w+/, /type\\s+\\w+\\s*=/, /:\\s*(string|number|boolean)/], weight: 7 },\n            { lang: 'javascript', patterns: [/function\\s+\\w+/, /const\\s+\\w+\\s*=/, /=>/], weight: 6 },\n            { lang: 'python', patterns: [/def\\s+\\w+\\(/, /import\\s+\\w+/, /if\\s+__name__/], weight: 8 },\n            { lang: 'java', patterns: [/public\\s+class/, /public\\s+static\\s+void/, /import\\s+java/], weight: 8 },\n            { lang: 'css', patterns: [/\\.\\w+\\s*\\{/, /#\\w+\\s*\\{/, /@media/], weight: 7 },\n            { lang: 'sql', patterns: [/CREATE TABLE/i, /SELECT.*FROM/i, /INSERT INTO/i], weight: 9 },\n            { lang: 'json', patterns: [/^\\s*\\{[\\s\\S]*\\}\\s*$/, /\"[^\"]+\"\\s*:/], weight: 7 },\n            { lang: 'yaml', patterns: [/^\\w+:/m, /^\\s+-\\s+/m], weight: 6 },\n            { lang: 'shell', patterns: [/^#!/, /\\$\\{?\\w+\\}?/, /if\\s+\\[/], weight: 7 },\n            { lang: 'go', patterns: [/package\\s+\\w+/, /func\\s+\\w+/, /import\\s+\\(/], weight: 8 },\n            { lang: 'rust', patterns: [/fn\\s+\\w+/, /let\\s+mut/, /impl\\s+/], weight: 8 },\n            { lang: 'php', patterns: [/<\\?php/, /function\\s+\\w+\\(/, /\\$\\w+/], weight: 8 }\n        ];\n        let maxScore = 0;\n        let detectedLang = 'javascript'; // default\n        for (const { lang, patterns, weight } of indicators) {\n            let score = 0;\n            for (const pattern of patterns) {\n                if (pattern.test(code)) {\n                    score += weight;\n                }\n            }\n            if (score > maxScore) {\n                maxScore = score;\n                detectedLang = lang;\n            }\n        }\n        return detectedLang;\n    }\n    /**\n     * Extract React component name\n     */\n    private extractComponentName(code: string): string | null {\n        const patterns = [\n            /export\\s+default\\s+function\\s+(\\w+)/,\n            /export\\s+function\\s+(\\w+).*\\{[\\s\\S]*return\\s*\\(/,\n            /const\\s+(\\w+).*=.*\\(.*\\).*=>.*\\{[\\s\\S]*return\\s*\\(/,\n            /class\\s+(\\w+)\\s+extends\\s+(?:React\\.)?Component/,\n            /export\\s+default\\s+(\\w+);/\n        ];\n        for (const pattern of patterns) {\n            const match = code.match(pattern);\n            if (match && match[1]) {\n                // Check if it looks like a React component (PascalCase)\n                if (/^[A-Z]/.test(match[1])) {\n                    return match[1];\n                }\n            }\n        }\n        return null;\n    }\n    /**\n     * Extract class name\n     */\n    private extractClassName(code: string): string | null {\n        const patterns = [\n            /class\\s+(\\w+)/,\n            /interface\\s+(\\w+)/,\n            /export\\s+class\\s+(\\w+)/,\n            /public\\s+class\\s+(\\w+)/\n        ];\n        for (const pattern of patterns) {\n            const match = code.match(pattern);\n            if (match && match[1]) {\n                return match[1];\n            }\n        }\n        return null;\n    }\n    /**\n     * Extract main function name\n     */\n    private extractMainFunction(code: string): string | null {\n        const patterns = [\n            /export\\s+default\\s+function\\s+(\\w+)/,\n            /export\\s+function\\s+(\\w+)/,\n            /function\\s+(\\w+)\\s*\\(/,\n            /const\\s+(\\w+)\\s*=\\s*\\(/,\n            /def\\s+(\\w+)\\s*\\(/\n        ];\n        for (const pattern of patterns) {\n            const match = code.match(pattern);\n            if (match && match[1]) {\n                return match[1];\n            }\n        }\n        return null;\n    }\n    /**\n     * Check if code is a test file\n     */\n    private isTestFile(code: string): boolean {\n        const testIndicators = [\n            /describe\\s*\\(/,\n            /it\\s*\\(/,\n            /test\\s*\\(/,\n            /expect\\s*\\(/,\n            /assert/,\n            /@Test/,\n            /unittest/,\n            /pytest/\n        ];\n        return testIndicators.some(pattern => pattern.test(code));\n    }\n    /**\n     * Check if code is a configuration file\n     */\n    private isConfigFile(code: string): boolean {\n        const configIndicators = [\n            /module\\.exports\\s*=\\s*\\{/,\n            /export\\s+default\\s+\\{/,\n            /\"scripts\"\\s*:\\s*\\{/,\n            /\"dependencies\"\\s*:\\s*\\{/,\n            /version:\\s*['\"]?\\d/,\n            /apiVersion:/\n        ];\n        return configIndicators.some(pattern => pattern.test(code));\n    }\n    /**\n     * Get appropriate extension for language\n     */\n    private getExtensionForLanguage(language: string, code: string): string {\n        const extensionMap: Record<string, string> = {\n            'html': '.html',\n            'css': '.css',\n            'javascript': '.js',\n            'typescript': '.ts',\n            'jsx': '.jsx',\n            'tsx': '.tsx',\n            'python': '.py',\n            'java': '.java',\n            'go': '.go',\n            'rust': '.rs',\n            'php': '.php',\n            'sql': '.sql',\n            'json': '.json',\n            'yaml': '.yml',\n            'shell': '.sh'\n        };\n        // Special cases\n        if (language === 'javascript' && code.includes('module.exports')) {\n            return '.cjs';\n        }\n        if (language === 'javascript' && code.includes('export default')) {\n            return '.mjs';\n        }\n        return extensionMap[language] || '.txt';\n    }\n    /**\n     * Generate alternative filenames\n     */\n    private generateAlternatives(primary: string, language: string): string[] {\n        const alternatives: string[] = [];\n        const basename = primary.substring(0, primary.lastIndexOf('.'));\n        // Language-specific alternatives\n        switch (language) {\n            case 'javascript':\n                alternatives.push(basename + '.mjs', basename + '.cjs');\n                break;\n            case 'typescript':\n                alternatives.push(basename + '.tsx', basename + '.d.ts');\n                break;\n            case 'jsx':\n                alternatives.push(basename + '.js', basename + '.tsx');\n                break;\n            case 'tsx':\n                alternatives.push(basename + '.ts', basename + '.jsx');\n                break;\n            case 'yaml':\n                alternatives.push(basename + '.yaml');\n                break;\n        }\n        // Common alternatives\n        if (!basename.includes('index')) {\n            alternatives.push('index' + primary.substring(primary.lastIndexOf('.')));\n        }\n        if (!basename.includes('main')) {\n            alternatives.push('main' + primary.substring(primary.lastIndexOf('.')));\n        }\n        if (!basename.includes('app')) {\n            alternatives.push('app' + primary.substring(primary.lastIndexOf('.')));\n        }\n        return alternatives.slice(0, 3);\n    }\n    /**\n     * Convert to kebab-case\n     */\n    private toKebabCase(str: string): string {\n        return str\n            .replace(/([a-z])([A-Z])/g, '$1-$2')\n            .replace(/[\\s_]+/g, '-')\n            .toLowerCase();\n    }\n}\n","/**\n * Extension Detector\n * Detects appropriate file extension based on code content\n */\n\nimport type { Language } from '../types/filename-inference.types.js';\n\nexport class ExtensionDetector {\n  private languagePatterns: Array<{\n    language: string;\n    extension: string;\n    patterns: RegExp[];\n    weight: number;\n  }>;\n\n  constructor() {\n    this.languagePatterns = [\n      {\n        language: 'html',\n        extension: '.html',\n        patterns: [\n          /<!DOCTYPE\\s+html/i,\n          /<html[\\s>]/i,\n          /<head[\\s>][\\s\\S]*<\\/head>/i,\n          /<body[\\s>]/i,\n          /<meta\\s+charset=/i\n        ],\n        weight: 10\n      },\n      {\n        language: 'typescript-react',\n        extension: '.tsx',\n        patterns: [\n          /import\\s+.*React/,\n          /import\\s+\\{.*\\}\\s+from\\s+['\"]react['\"]/,\n          /<[A-Z]\\w*[\\s/>]/,\n          /:\\s*React\\.FC/,\n          /:\\s*JSX\\.Element/\n        ],\n        weight: 9\n      },\n      {\n        language: 'javascript-react',\n        extension: '.jsx',\n        patterns: [\n          /import\\s+React/,\n          /const.*=.*<\\w+/,\n          /return\\s*\\(/,\n          /ReactDOM\\.render/\n        ],\n        weight: 8\n      },\n      {\n        language: 'typescript',\n        extension: '.ts',\n        patterns: [\n          /interface\\s+\\w+\\s*\\{/,\n          /type\\s+\\w+\\s*=/,\n          /:\\s*(string|number|boolean|any|void)\\s*[;,\\)]/,\n          /enum\\s+\\w+\\s*\\{/,\n          /namespace\\s+\\w+\\s*\\{/,\n          /declare\\s+(module|namespace)/\n        ],\n        weight: 7\n      },\n      {\n        language: 'javascript',\n        extension: '.js',\n        patterns: [\n          /function\\s+\\w+\\s*\\(/,\n          /const\\s+\\w+\\s*=/,\n          /let\\s+\\w+\\s*=/,\n          /var\\s+\\w+\\s*=/,\n          /=>\\s*\\{/,\n          /module\\.exports/,\n          /export\\s+(default|const|function|class)/\n        ],\n        weight: 6\n      },\n      {\n        language: 'python',\n        extension: '.py',\n        patterns: [\n          /^def\\s+\\w+\\(/m,\n          /^class\\s+\\w+[\\(:]/m,\n          /^import\\s+\\w+/m,\n          /^from\\s+\\w+\\s+import/m,\n          /if\\s+__name__\\s*==\\s*['\"]__main__['\"]/,\n          /^\\s{4,}(def|class)\\s+/m\n        ],\n        weight: 8\n      },\n      {\n        language: 'java',\n        extension: '.java',\n        patterns: [\n          /public\\s+class\\s+\\w+/,\n          /private\\s+(static\\s+)?.*\\(/,\n          /public\\s+static\\s+void\\s+main/,\n          /import\\s+java\\./,\n          /@Override/,\n          /extends\\s+\\w+/,\n          /implements\\s+\\w+/\n        ],\n        weight: 8\n      },\n      {\n        language: 'css',\n        extension: '.css',\n        patterns: [\n          /\\.\\w+\\s*\\{[^}]*\\}/,\n          /#\\w+\\s*\\{[^}]*\\}/,\n          /@media\\s+/,\n          /@import\\s+/,\n          /:[hover|active|focus|visited]/,\n          /\\w+:\\s*[#\\w\\d]+;/\n        ],\n        weight: 7\n      },\n      {\n        language: 'scss',\n        extension: '.scss',\n        patterns: [\n          /\\$\\w+:\\s*/,\n          /@mixin\\s+/,\n          /@include\\s+/,\n          /@extend\\s+/,\n          /&:\\w+/,\n          /\\.\\w+\\s*\\{[\\s\\S]*\\.\\w+\\s*\\{/\n        ],\n        weight: 8\n      },\n      {\n        language: 'sql',\n        extension: '.sql',\n        patterns: [\n          /CREATE\\s+TABLE/i,\n          /SELECT\\s+.*\\s+FROM/i,\n          /INSERT\\s+INTO/i,\n          /UPDATE\\s+\\w+\\s+SET/i,\n          /DELETE\\s+FROM/i,\n          /ALTER\\s+TABLE/i,\n          /DROP\\s+TABLE/i\n        ],\n        weight: 9\n      },\n      {\n        language: 'json',\n        extension: '.json',\n        patterns: [\n          /^\\s*\\{[\\s\\S]*\\}\\s*$/,\n          /^\\s*\\[[\\s\\S]*\\]\\s*$/,\n          /\"[^\"]+\"\\s*:\\s*[\"{[\\d]/\n        ],\n        weight: 7\n      },\n      {\n        language: 'yaml',\n        extension: '.yml',\n        patterns: [\n          /^[a-z_]+:\\s*$/im,\n          /^\\s+-\\s+/m,\n          /^[a-z_]+:\\s+\\S/im,\n          /^\\s{2,}[a-z_]+:/im\n        ],\n        weight: 6\n      },\n      {\n        language: 'shell',\n        extension: '.sh',\n        patterns: [\n          /^#!/,\n          /\\$\\{?\\w+\\}?/,\n          /if\\s+\\[\\s*/,\n          /echo\\s+/,\n          /export\\s+\\w+=/,\n          /source\\s+/\n        ],\n        weight: 7\n      },\n      {\n        language: 'dockerfile',\n        extension: '',\n        patterns: [\n          /^FROM\\s+/m,\n          /^RUN\\s+/m,\n          /^CMD\\s+/m,\n          /^EXPOSE\\s+/m,\n          /^ENV\\s+/m,\n          /^WORKDIR\\s+/m\n        ],\n        weight: 10\n      },\n      {\n        language: 'go',\n        extension: '.go',\n        patterns: [\n          /^package\\s+\\w+/m,\n          /^func\\s+\\w+/m,\n          /^import\\s+\\(/m,\n          /^type\\s+\\w+\\s+struct/m,\n          /^var\\s+\\w+\\s+/m\n        ],\n        weight: 8\n      },\n      {\n        language: 'rust',\n        extension: '.rs',\n        patterns: [\n          /^fn\\s+\\w+/m,\n          /^let\\s+mut\\s+/m,\n          /^impl\\s+/m,\n          /^use\\s+/m,\n          /^struct\\s+/m,\n          /^trait\\s+/m\n        ],\n        weight: 8\n      },\n      {\n        language: 'php',\n        extension: '.php',\n        patterns: [\n          /<\\?php/,\n          /function\\s+\\w+\\s*\\(/,\n          /class\\s+\\w+/,\n          /\\$\\w+\\s*=/,\n          /echo\\s+/,\n          /namespace\\s+/\n        ],\n        weight: 8\n      },\n      {\n        language: 'ruby',\n        extension: '.rb',\n        patterns: [\n          /^def\\s+\\w+/m,\n          /^class\\s+\\w+/m,\n          /^module\\s+\\w+/m,\n          /^require\\s+/m,\n          /puts\\s+/,\n          /@\\w+\\s*=/\n        ],\n        weight: 7\n      },\n      {\n        language: 'swift',\n        extension: '.swift',\n        patterns: [\n          /^func\\s+\\w+/m,\n          /^var\\s+\\w+/m,\n          /^let\\s+\\w+/m,\n          /^class\\s+\\w+/m,\n          /^struct\\s+\\w+/m,\n          /^import\\s+/m\n        ],\n        weight: 8\n      },\n      {\n        language: 'kotlin',\n        extension: '.kt',\n        patterns: [\n          /^fun\\s+\\w+/m,\n          /^val\\s+\\w+/m,\n          /^var\\s+\\w+/m,\n          /^class\\s+\\w+/m,\n          /^object\\s+\\w+/m,\n          /^package\\s+/m\n        ],\n        weight: 8\n      },\n      {\n        language: 'csharp',\n        extension: '.cs',\n        patterns: [\n          /^using\\s+/m,\n          /^namespace\\s+/m,\n          /^public\\s+class\\s+/m,\n          /^private\\s+/m,\n          /^protected\\s+/m,\n          /^static\\s+void\\s+Main/m\n        ],\n        weight: 8\n      },\n      {\n        language: 'cpp',\n        extension: '.cpp',\n        patterns: [\n          /#include\\s*<\\w+>/,\n          /using\\s+namespace\\s+std/,\n          /int\\s+main\\s*\\(/,\n          /std::/,\n          /template\\s*</,\n          /class\\s+\\w+\\s*\\{/\n        ],\n        weight: 7\n      },\n      {\n        language: 'c',\n        extension: '.c',\n        patterns: [\n          /#include\\s*<\\w+\\.h>/,\n          /int\\s+main\\s*\\(/,\n          /typedef\\s+struct/,\n          /void\\s+\\w+\\s*\\(/,\n          /printf\\s*\\(/\n        ],\n        weight: 7\n      },\n      {\n        language: 'vue',\n        extension: '.vue',\n        patterns: [\n          /<template>/,\n          /<script>/,\n          /<style/,\n          /export\\s+default\\s+\\{[\\s\\S]*data\\s*\\(\\)/\n        ],\n        weight: 9\n      },\n      {\n        language: 'svelte',\n        extension: '.svelte',\n        patterns: [\n          /<script>/,\n          /\\$:\\s*/,\n          /export\\s+let\\s+/,\n          /\\{#if/,\n          /\\{#each/\n        ],\n        weight: 8\n      }\n    ];\n  }\n\n  /**\n   * Detect language and extension from code\n   */\n  detect(code: string): Language {\n    let bestMatch: Language = {\n      name: 'plaintext',\n      extension: '.txt',\n      confidence: 0,\n      indicators: []\n    };\n\n    for (const lang of this.languagePatterns) {\n      let score = 0;\n      const matchedIndicators: string[] = [];\n\n      for (const pattern of lang.patterns) {\n        if (pattern.test(code)) {\n          score += lang.weight;\n          matchedIndicators.push(pattern.source);\n        }\n      }\n\n      const confidence = score / (lang.patterns.length * lang.weight);\n\n      if (confidence > bestMatch.confidence) {\n        bestMatch = {\n          name: lang.language,\n          extension: lang.extension,\n          confidence: Math.min(confidence, 1),\n          indicators: matchedIndicators\n        };\n      }\n    }\n\n    // Special case for Dockerfile\n    if (code.includes('FROM ') && code.includes('RUN ')) {\n      return {\n        name: 'dockerfile',\n        extension: '',\n        confidence: 0.95,\n        indicators: ['FROM', 'RUN']\n      };\n    }\n\n    // Special case for package.json\n    try {\n      const parsed = JSON.parse(code);\n      if (parsed.name && (parsed.dependencies || parsed.devDependencies || parsed.scripts)) {\n        return {\n          name: 'package.json',\n          extension: '.json',\n          confidence: 0.95,\n          indicators: ['package.json structure']\n        };\n      }\n    } catch {\n      // Not valid JSON or not package.json\n    }\n\n    return bestMatch;\n  }\n\n  /**\n   * Get suggested extensions for a language\n   */\n  getSuggestedExtensions(language: string): string[] {\n    const extensionMap: Record<string, string[]> = {\n      'javascript': ['.js', '.mjs', '.cjs'],\n      'typescript': ['.ts', '.d.ts'],\n      'javascript-react': ['.jsx', '.js'],\n      'typescript-react': ['.tsx', '.ts'],\n      'python': ['.py', '.pyw'],\n      'java': ['.java'],\n      'css': ['.css'],\n      'scss': ['.scss', '.sass'],\n      'html': ['.html', '.htm'],\n      'sql': ['.sql'],\n      'json': ['.json'],\n      'yaml': ['.yml', '.yaml'],\n      'shell': ['.sh', '.bash'],\n      'go': ['.go'],\n      'rust': ['.rs'],\n      'php': ['.php'],\n      'ruby': ['.rb'],\n      'swift': ['.swift'],\n      'kotlin': ['.kt', '.kts'],\n      'csharp': ['.cs'],\n      'cpp': ['.cpp', '.cc', '.cxx'],\n      'c': ['.c', '.h'],\n      'vue': ['.vue'],\n      'svelte': ['.svelte']\n    };\n\n    return extensionMap[language] || ['.txt'];\n  }\n}","import { stdoutLine, stderrLine } from \"../../shared/utils/tty\";\n\n/**\n * Unified Telemetry Collector\n * Part of Phase 2: System Stabilization\n */\n\nexport enum SystemEvent {\n  // Memory System\n  MEMORY_QUERY_START = \"memory.query.start\",\n  MEMORY_QUERY_END = \"memory.query.end\",\n  MEMORY_CACHE_HIT = \"memory.cache.hit\",\n  MEMORY_CACHE_MISS = \"memory.cache.miss\",\n  MEMORY_CACHE_EVICT = \"memory.cache.evict\",\n  MEMORY_ROUTING = \"memory.routing.decision\",\n  MEMORY_ERROR = \"memory.error\",\n\n  // Knowledge Graph\n  KG_QUERY_START = \"kg.query.start\",\n  KG_QUERY_END = \"kg.query.end\",\n  KG_INDEX_DONE = \"kg.index.done\",\n  KG_OPTIMIZE = \"kg.optimize.done\",\n  KG_NODE_ADD = \"kg.node.add\",\n  KG_EDGE_ADD = \"kg.edge.add\",\n\n  // Conversation\n  CONV_TURN_START = \"conv.turn.start\",\n  CONV_TURN_END = \"conv.turn.end\",\n  CONV_FOLLOWUP = \"conv.followup.detected\",\n  CONV_CONTEXT_UPDATE = \"conv.context.update\",\n\n  // Learning\n  LEARN_PATTERN_ADD = \"learn.pattern.added\",\n  LEARN_SUGGEST = \"learn.suggestion.made\",\n  LEARN_FEEDBACK = \"learn.feedback.received\",\n\n  // System\n  SYSTEM_START = \"system.start\",\n  SYSTEM_SHUTDOWN = \"system.shutdown\",\n  SYSTEM_ERROR = \"system.error\",\n  SYSTEM_HEALTH = \"system.health.check\",\n}\n\nexport interface TelemetryEvent {\n  event: SystemEvent | string;\n  ts: number;\n  dur?: number;\n  tags: {\n    _comp: \"memory\" | \"kg\" | \"conv\" | \"learn\" | \"system\";\n    tenant?: string;\n    topic?: string;\n    strategy?: string;\n    [_key: string]: string | undefined;\n  };\n  meta?: Record<string, unknown>;\n  _error?: {\n    message: string;\n    stack?: string;\n    code?: string;\n  };\n}\n\nexport interface TelemetryMetrics {\n  eventCount: number;\n  errorCount: number;\n  avgDuration: number;\n  p50Duration: number;\n  p95Duration: number;\n  p99Duration: number;\n  errorRate: number;\n  throughput: number;\n}\n\nexport interface ComponentMetrics {\n  [component: string]: TelemetryMetrics;\n}\n\ntype EventListener = (event: TelemetryEvent) => void;\n\nexport class TelemetryCollector {\n  private _events: TelemetryEvent[] = [];\n  private readonly maxEvents = 10000;\n  private _listeners = new Map<string, Set<EventListener>>();\n  private metricsCache = new Map<string, TelemetryMetrics>();\n  private cacheExpiry = 60000; // 1 minute cache\n  private lastCacheUpdate = 0;\n  private eventCounters = new Map<string, number>();\n\n  private static instance: TelemetryCollector;\n\n  private constructor() {\n    // Singleton\n  }\n\n  /**\n   * Get singleton instance\n   */\n  static getInstance(): TelemetryCollector {\n    if (!TelemetryCollector.instance) {\n      TelemetryCollector.instance = new TelemetryCollector();\n    }\n    return TelemetryCollector.instance;\n  }\n\n  /**\n   * Emit a telemetry event\n   */\n  emit(event: Omit<TelemetryEvent, \"ts\">): void {\n    const _telemetryEvent: TelemetryEvent = {\n      ...event,\n      ts: Date.now(),\n    };\n\n    // Add to ring buffer\n    this._events.push(_telemetryEvent);\n    if (this._events.length > this.maxEvents) {\n      this._events = this._events.slice(-this.maxEvents);\n    }\n\n    // Update counters\n    const _counterKey = `${event.event}:${event.tags._comp}`;\n    this.eventCounters.set(\n      _counterKey,\n      (this.eventCounters.get(_counterKey) ?? 0) + 1,\n    );\n\n    // Clear cache on new _events\n    this.lastCacheUpdate = 0;\n\n    // Notify _listeners\n    this.notifyListeners(_telemetryEvent);\n\n    // Log if debug mode\n    if (process.env.DEBUG_TELEMETRY === \"true\") {\n      this.logEvent(_telemetryEvent);\n    }\n  }\n\n  /**\n   * Start a timed operation\n   */\n  startTimer(\n    event: SystemEvent | string,\n    tags: TelemetryEvent[\"tags\"],\n  ): () => void {\n    const _startTime = Date.now();\n\n    // Emit start event\n    this.emit({\n      event: event,\n      tags: tags,\n    });\n\n    // Return function to end timing\n    return (): void => {\n      const _duration = Date.now() - _startTime;\n\n      // Emit end event with _duration\n      this.emit({\n        event: event.replace(\".start\", \".end\"),\n        dur: _duration,\n        tags: tags,\n      });\n    };\n  }\n\n  /**\n   * Record an _error\n   */\n  recordError(\n    component: TelemetryEvent[\"tags\"][\"_comp\"],\n    _error: Error | unknown,\n    context?: Record<string, unknown>,\n  ): void {\n    const _errorData = this.extractErrorData(_error);\n\n    this.emit({\n      event: SystemEvent.SYSTEM_ERROR,\n      tags: { _comp: component },\n      meta: context,\n      _error: _errorData,\n    });\n  }\n\n  /**\n   * Subscribe to _events\n   */\n  subscribe(pattern: string | RegExp, _listener: EventListener): () => void {\n    const _key = pattern.toString();\n\n    if (!this._listeners.has(_key)) {\n      this._listeners.set(_key, new Set());\n    }\n\n    this._listeners.get(_key)!.add(_listener);\n\n    // Return unsubscribe function\n    return (): void => {\n      const _listeners = this._listeners.get(_key);\n      if (_listeners) {\n        _listeners.delete(_listener);\n        if (_listeners.size === 0) {\n          this._listeners.delete(_key);\n        }\n      }\n    };\n  }\n\n  /**\n   * Get _metrics for a component\n   */\n  getMetrics(\n    component?: string,\n    window = 60000,\n  ): TelemetryMetrics | ComponentMetrics {\n    // Check cache\n    const _now = Date.now();\n    const _cacheKey = `${component ?? \"all\"}:${window}`;\n\n    if (_now - this.lastCacheUpdate < this.cacheExpiry) {\n      const _cached = this.metricsCache.get(_cacheKey);\n      if (_cached) {\n        return _cached;\n      }\n    }\n\n    // Calculate _metrics\n    const _metrics = component\n      ? this.calculateMetrics(component, window)\n      : this.calculateAllMetrics(window);\n\n    // Update cache\n    this.metricsCache.set(_cacheKey, _metrics as TelemetryMetrics);\n    this.lastCacheUpdate = _now;\n\n    return _metrics;\n  }\n\n  /**\n   * Calculate _metrics for a component\n   */\n  private calculateMetrics(\n    component: string,\n    window: number,\n  ): TelemetryMetrics {\n    const _now = Date.now();\n    const _relevant = this._events.filter(\n      (e): boolean => _now - e.ts < window && e.tags._comp === component,\n    );\n\n    const _durations = _relevant\n      .filter((e): boolean => e.dur !== undefined)\n      .map((e): number => e.dur!)\n      .sort((a, b): number => a - b);\n\n    const _errors = _relevant.filter((e): boolean => e._error !== undefined);\n\n    return {\n      eventCount: _relevant.length,\n      errorCount: _errors.length,\n      avgDuration: this.calculateAverage(_durations),\n      p50Duration: this.calculatePercentile(_durations, 0.5),\n      p95Duration: this.calculatePercentile(_durations, 0.95),\n      p99Duration: this.calculatePercentile(_durations, 0.99),\n      errorRate: _relevant.length > 0 ? _errors.length / _relevant.length : 0,\n      throughput: _relevant.length / (window / 1000), // _events per second\n    };\n  }\n\n  /**\n   * Calculate _metrics for all _components\n   */\n  private calculateAllMetrics(window: number): ComponentMetrics {\n    const _components = [\"memory\", \"kg\", \"conv\", \"learn\", \"system\"];\n    const _metrics: ComponentMetrics = {};\n\n    for (const _comp of _components) {\n      _metrics[_comp] = this.calculateMetrics(_comp, window);\n    }\n\n    return _metrics;\n  }\n\n  /**\n   * Calculate average\n   */\n  private calculateAverage(values: number[]): number {\n    if (values.length === 0) return 0;\n    const _sum = values.reduce((a, b): number => a + b, 0);\n    return _sum / values.length;\n  }\n\n  /**\n   * Calculate percentile\n   */\n  private calculatePercentile(\n    sortedValues: number[],\n    percentile: number,\n  ): number {\n    if (sortedValues.length === 0) return 0;\n    const _index = Math.floor(sortedValues.length * percentile);\n    return sortedValues[Math.min(_index, sortedValues.length - 1)];\n  }\n\n  /**\n   * Extract _error data\n   */\n  private extractErrorData(_error: unknown): TelemetryEvent[\"_error\"] {\n    if (_error instanceof Error) {\n      const maybeCode = (_error as NodeJS.ErrnoException).code;\n      return {\n        message: _error.message,\n        stack: _error.stack,\n        code:\n          typeof maybeCode === \"string\"\n            ? maybeCode\n            : maybeCode !== undefined\n              ? String(maybeCode)\n              : undefined,\n      };\n    }\n\n    return {\n      message: String(_error),\n    };\n  }\n\n  /**\n   * Notify _listeners\n   */\n  private notifyListeners(event: TelemetryEvent): void {\n    for (const [_pattern, _listeners] of this._listeners.entries()) {\n      const _regex = _pattern.startsWith(\"/\")\n        ? new RegExp(_pattern.slice(1, -1))\n        : new RegExp(_pattern);\n\n      if (_regex.test(event.event)) {\n        for (const _listener of _listeners) {\n          try {\n            _listener(event);\n          } catch (_error) {\n            stderrLine(\"Telemetry _listener _error:\", _error);\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * Log event for debugging\n   */\n  private logEvent(event: TelemetryEvent): void {\n    const _formatted = {\n      event: event.event,\n      component: event.tags._comp,\n      _duration: event.dur,\n      tags: Object.entries(event.tags)\n        .filter(([k]): boolean => k !== \"_comp\")\n        .map(([k, v]): string => `${k}=${v}`)\n        .join(\" \"),\n      meta: event.meta ? JSON.stringify(event.meta) : undefined,\n      _error: event._error?.message,\n    };\n\n    stdoutLine(\"[TEL]\", JSON.stringify(_formatted));\n  }\n\n  /**\n   * Export _events for analysis\n   */\n  exportEvents(filter?: {\n    component?: string;\n    _startTime?: number;\n    endTime?: number;\n    event?: string | RegExp;\n  }): TelemetryEvent[] {\n    let _events = [...this._events];\n\n    if (filter) {\n      if (filter.component) {\n        _events = _events.filter((e): boolean => e.tags._comp === filter.component);\n      }\n\n      if (filter._startTime) {\n        _events = _events.filter((e): boolean => e.ts >= filter._startTime!);\n      }\n\n      if (filter.endTime) {\n        _events = _events.filter((e): boolean => e.ts <= filter.endTime!);\n      }\n\n      if (filter.event) {\n        const _regex =\n          filter.event instanceof RegExp\n            ? filter.event\n            : new RegExp(filter.event);\n        _events = _events.filter((e): boolean => _regex.test(e.event));\n      }\n    }\n\n    return _events;\n  }\n\n  /**\n   * Clear all _events\n   */\n  clear(): void {\n    this._events = [];\n    this.metricsCache.clear();\n    this.eventCounters.clear();\n    this.lastCacheUpdate = 0;\n  }\n\n  /**\n   * Get event _counts by type\n   */\n  getEventCounts(): Map<string, number> {\n    return new Map(this.eventCounters);\n  }\n\n  /**\n   * Generate summary _report\n   */\n  generateReport(window = 300000): string {\n    // 5 minutes default\n    const _metrics = this.getMetrics(undefined, window) as ComponentMetrics;\n    const _counts = this.getEventCounts();\n\n    let _report = \"=\".repeat(80) + \"\\n\";\n    _report += \"TELEMETRY REPORT\\n\";\n    _report += \"=\".repeat(80) + \"\\n\\n\";\n\n    // Component _metrics\n    for (const [_comp, _met] of Object.entries(_metrics)) {\n      _report += `Component: ${_comp.toUpperCase()}\\n`;\n      _report += \"-\".repeat(40) + \"\\n\";\n      _report += `  Events: ${_met.eventCount}\\n`;\n      _report += `  Errors: ${_met.errorCount} (${(_met.errorRate * 100).toFixed(2)}%)\\n`;\n      _report += `  Avg Duration: ${_met.avgDuration.toFixed(2)}ms\\n`;\n      _report += `  P95 Duration: ${_met.p95Duration.toFixed(2)}ms\\n`;\n      _report += `  Throughput: ${_met.throughput.toFixed(2)} _events/sec\\n`;\n      _report += \"\\n\";\n    }\n\n    // Top _events\n    _report += \"TOP EVENTS\\n\";\n    _report += \"-\".repeat(40) + \"\\n\";\n\n    const _topEvents = Array.from(_counts.entries())\n      .sort((a, b): number => b[1] - a[1])\n      .slice(0, 10);\n\n    for (const [_event, _count] of _topEvents) {\n      _report += `  ${_event}: ${_count}\\n`;\n    }\n\n    _report += \"\\n\" + \"=\".repeat(80);\n\n    return _report;\n  }\n}\n\n// Export singleton instance\nexport const telemetry = TelemetryCollector.getInstance();\n","/**\r\n * Filename Inference Telemetry Integration\r\n * Tracks performance and usage metrics for the intelligent filename inference system\r\n */\r\n\r\nimport { TelemetryCollector } from '../../base/TelemetryCollector';\r\nimport { stderrLine } from \"../../../shared/utils/tty\";\r\nimport type {\r\n  FilenameCandidate,\r\n  InferenceResult,\r\n  SaveOperation,\r\n  SaveResult,\r\n} from \"../types/filename-inference.types\";\r\n\r\n// Optional telemetry integration - gracefully handle missing dependencies\r\ntype TelemetryIntegration = {\r\n  recordTelemetry: (data: Record<string, unknown>) => void | Promise<void>;\r\n};\r\nlet telemetryIntegration: TelemetryIntegration | null = null;\r\n\r\nexport enum FilenameInferenceEvent {\r\n  // Inference events\r\n  INFERENCE_START = \"filename.inference.start\",\r\n  INFERENCE_END = \"filename.inference.end\",\r\n  INFERENCE_TIMEOUT = \"filename.inference.timeout\",\r\n  INFERENCE_CACHE_HIT = \"filename.inference.cache.hit\",\r\n  INFERENCE_CACHE_MISS = \"filename.inference.cache.miss\",\r\n  \r\n  // Stage events\r\n  EXPLICIT_ANALYZER_START = \"filename.analyzer.explicit.start\",\r\n  EXPLICIT_ANALYZER_END = \"filename.analyzer.explicit.end\",\r\n  CONTEXTUAL_ANALYZER_START = \"filename.analyzer.contextual.start\",\r\n  CONTEXTUAL_ANALYZER_END = \"filename.analyzer.contextual.end\",\r\n  SEMANTIC_ANALYZER_START = \"filename.analyzer.semantic.start\",\r\n  SEMANTIC_ANALYZER_END = \"filename.analyzer.semantic.end\",\r\n  PROJECT_ANALYZER_START = \"filename.analyzer.project.start\",\r\n  PROJECT_ANALYZER_END = \"filename.analyzer.project.end\",\r\n  EXTENSION_ANALYZER_START = \"filename.analyzer.extension.start\",\r\n  EXTENSION_ANALYZER_END = \"filename.analyzer.extension.end\",\r\n  \r\n  // UX events\r\n  SAVE_MODE_DECIDED = \"filename.ux.mode.decided\",\r\n  INTERACTIVE_SELECTION_START = \"filename.ux.selection.start\",\r\n  INTERACTIVE_SELECTION_END = \"filename.ux.selection.end\",\r\n  DRY_RUN_EXECUTED = \"filename.ux.dryrun.executed\",\r\n  UNDO_EXECUTED = \"filename.ux.undo.executed\",\r\n  \r\n  // Save events\r\n  SAVE_OPERATION_START = \"filename.save.start\",\r\n  SAVE_OPERATION_END = \"filename.save.end\",\r\n  SAVE_OPERATION_SUCCESS = \"filename.save.success\",\r\n  SAVE_OPERATION_FAILED = \"filename.save.failed\",\r\n  \r\n  // Security events\r\n  SECURITY_VIOLATION = \"filename.security.violation\",\r\n  PATH_TRAVERSAL_BLOCKED = \"filename.security.path_traversal_blocked\",\r\n  PLAN_VIOLATION_BLOCKED = \"filename.security.plan_violation_blocked\",\r\n  PERMISSION_DENIED = \"filename.security.permission_denied\",\r\n  \r\n  // Performance events\r\n  HIGH_CONFIDENCE_INFERENCE = \"filename.performance.high_confidence\",\r\n  LOW_CONFIDENCE_INFERENCE = \"filename.performance.low_confidence\",\r\n  ANALYZER_SLOW = \"filename.performance.analyzer_slow\"\r\n}\r\n\r\nexport interface FilenameInferenceMetrics {\r\n  // Performance metrics\r\n  totalInferences: number;\r\n  averageInferenceTime: number;\r\n  cacheHitRate: number;\r\n  timeoutRate: number;\r\n  \r\n  // Quality metrics\r\n  highConfidenceRate: number; // >= 0.9\r\n  mediumConfidenceRate: number; // 0.7-0.9\r\n  lowConfidenceRate: number; // < 0.7\r\n  \r\n  // UX metrics\r\n  immediateMode: number;\r\n  interactiveMode: number;\r\n  dryRunMode: number;\r\n  userCancellations: number;\r\n  undoOperations: number;\r\n  \r\n  // Security metrics\r\n  securityViolations: number;\r\n  pathTraversalAttempts: number;\r\n  planViolations: number;\r\n  permissionDenials: number;\r\n  \r\n  // Success metrics\r\n  successfulSaves: number;\r\n  failedSaves: number;\r\n  saveSuccessRate: number;\r\n}\r\n\r\nexport class FilenameInferenceTelemetry {\r\n  private telemetry = TelemetryCollector.getInstance();\r\n  private integration: TelemetryIntegration | null = telemetryIntegration;\r\n  private readonly integrationPromise: Promise<TelemetryIntegration | null>;\r\n\r\n  constructor() {\r\n    this.integrationPromise = this.loadOptionalIntegration();\r\n  }\r\n\r\n  private async loadOptionalIntegration(): Promise<TelemetryIntegration | null> {\r\n    try {\r\n      const mod = await import(\"../../telemetry/telemetry-integration\");\r\n      const getTelemetryIntegration = (mod as unknown as { getTelemetryIntegration?: unknown })\r\n        .getTelemetryIntegration;\r\n      if (typeof getTelemetryIntegration !== \"function\") {\r\n        return null;\r\n      }\r\n      const integration = (getTelemetryIntegration as () => unknown)();\r\n      if (\r\n        integration &&\r\n        typeof integration === \"object\" &&\r\n        \"recordTelemetry\" in integration &&\r\n        typeof (integration as { recordTelemetry?: unknown }).recordTelemetry === \"function\"\r\n      ) {\r\n        this.integration = integration as TelemetryIntegration;\r\n        telemetryIntegration = this.integration;\r\n        return this.integration;\r\n      }\r\n      return null;\r\n    } catch (error) {\r\n      stderrLine(\r\n        \"Optional telemetry integration not available:\",\r\n        error instanceof Error ? error.message : String(error),\r\n      );\r\n      return null;\r\n    }\r\n  }\r\n\r\n  private toMeta(details: unknown): Record<string, unknown> {\r\n    if (details && typeof details === \"object\" && !Array.isArray(details)) {\r\n      return details as Record<string, unknown>;\r\n    }\r\n    return { value: details };\r\n  }\r\n  \r\n  /**\r\n   * Start timing an inference operation\r\n   */\r\n  startInference(prompt: string, context?: unknown): () => void {\r\n    return this.telemetry.startTimer(\r\n      FilenameInferenceEvent.INFERENCE_START,\r\n      {\r\n        _comp: 'system',\r\n        operation: 'filename_inference',\r\n        prompt_length: prompt.length.toString(),\r\n        has_context: context ? 'true' : 'false'\r\n      }\r\n    );\r\n  }\r\n  \r\n  /**\r\n   * Record inference completion\r\n   */\r\n  recordInferenceComplete(result: InferenceResult | FilenameCandidate, durationMs: number): void {\r\n    const candidates =\r\n      result && typeof result === \"object\" && \"candidates\" in result\r\n        ? (result as InferenceResult).candidates\r\n        : [result as FilenameCandidate];\r\n    const bestCandidate = candidates[0];\r\n    const confidence = bestCandidate?.confidence ?? 0;\r\n    \r\n    this.telemetry.emit({\r\n      event: FilenameInferenceEvent.INFERENCE_END,\r\n      dur: durationMs,\r\n      tags: {\r\n        _comp: 'system',\r\n        operation: 'filename_inference',\r\n        confidence_level: this.getConfidenceLevel(confidence),\r\n        candidate_count: candidates.length.toString(),\r\n        timeout:\r\n          result && typeof result === \"object\" && \"timedOut\" in result && (result as InferenceResult).timedOut\r\n            ? 'true'\r\n            : 'false'\r\n      },\r\n      meta: {\r\n        confidence: confidence,\r\n        candidateCount: candidates.length,\r\n        sources: candidates.map((c): unknown => c.source),\r\n        timedOut:\r\n          result && typeof result === \"object\" && \"timedOut\" in result\r\n            ? (result as InferenceResult).timedOut\r\n            : undefined\r\n      }\r\n    });\r\n    \r\n    // Record high-level metrics\r\n    this.recordConfidenceMetrics(confidence);\r\n    if (result && typeof result === \"object\" && \"timedOut\" in result && (result as InferenceResult).timedOut) {\r\n      this.recordTimeout();\r\n    }\r\n  }\r\n  \r\n  /**\r\n   * Record cache hit\r\n   */\r\n  recordCacheHit(cacheKey: string): void {\r\n    this.telemetry.emit({\r\n      event: FilenameInferenceEvent.INFERENCE_CACHE_HIT,\r\n      tags: {\r\n        _comp: 'system',\r\n        operation: 'cache',\r\n        cache_key: cacheKey.substring(0, 16) // First 16 chars of hash\r\n      }\r\n    });\r\n  }\r\n  \r\n  /**\r\n   * Record cache miss\r\n   */\r\n  recordCacheMiss(cacheKey: string): void {\r\n    this.telemetry.emit({\r\n      event: FilenameInferenceEvent.INFERENCE_CACHE_MISS,\r\n      tags: {\r\n        _comp: 'system',\r\n        operation: 'cache',\r\n        cache_key: cacheKey.substring(0, 16)\r\n      }\r\n    });\r\n  }\r\n  \r\n  /**\r\n   * Start timing an analyzer\r\n   */\r\n  startAnalyzer(analyzer: string): () => void {\r\n    const event = `filename.analyzer.${analyzer.toLowerCase()}.start` as FilenameInferenceEvent;\r\n    \r\n    return this.telemetry.startTimer(event, {\r\n      _comp: 'system',\r\n      operation: 'analyzer',\r\n      analyzer: analyzer\r\n    });\r\n  }\r\n  \r\n  /**\r\n   * Record analyzer completion\r\n   */\r\n  recordAnalyzerComplete(analyzer: string, candidates: FilenameCandidate[], durationMs: number): void {\r\n    const event = `filename.analyzer.${analyzer.toLowerCase()}.end` as FilenameInferenceEvent;\r\n    const bestConfidence = candidates.length > 0 ? candidates[0].confidence : 0;\r\n    \r\n    this.telemetry.emit({\r\n      event,\r\n      dur: durationMs,\r\n      tags: {\r\n        _comp: 'system',\r\n        operation: 'analyzer',\r\n        analyzer: analyzer,\r\n        confidence_level: this.getConfidenceLevel(bestConfidence),\r\n        candidate_count: candidates.length.toString()\r\n      },\r\n      meta: {\r\n        candidates: candidates.length,\r\n        bestConfidence: bestConfidence,\r\n        candidateNames: candidates.slice(0, 3).map(c => c.filename) // Top 3\r\n      }\r\n    });\r\n    \r\n    // Record slow analyzer performance\r\n    if (durationMs > 50) { // > 50ms is considered slow\r\n      this.telemetry.emit({\r\n        event: FilenameInferenceEvent.ANALYZER_SLOW,\r\n        dur: durationMs,\r\n        tags: {\r\n          _comp: 'system',\r\n          operation: 'performance',\r\n          analyzer: analyzer,\r\n          duration_bucket: this.getDurationBucket(durationMs)\r\n        }\r\n      });\r\n    }\r\n  }\r\n  \r\n  /**\r\n   * Record save mode decision\r\n   */\r\n  recordSaveModeDecision(confidence: number, mode: 'immediate' | 'interactive' | 'dry-run', reason: string): void {\r\n    this.telemetry.emit({\r\n      event: FilenameInferenceEvent.SAVE_MODE_DECIDED,\r\n      tags: {\r\n        _comp: 'system',\r\n        operation: 'ux',\r\n        mode: mode,\r\n        confidence_level: this.getConfidenceLevel(confidence),\r\n        reason: reason\r\n      },\r\n      meta: {\r\n        confidence: confidence,\r\n        mode: mode,\r\n        reason: reason\r\n      }\r\n    });\r\n  }\r\n  \r\n  /**\r\n   * Record interactive selection\r\n   */\r\n  recordInteractiveSelection(candidates: FilenameCandidate[], selectedIndex: number, durationMs: number): void {\r\n    this.telemetry.emit({\r\n      event: FilenameInferenceEvent.INTERACTIVE_SELECTION_END,\r\n      dur: durationMs,\r\n      tags: {\r\n        _comp: 'system',\r\n        operation: 'ux',\r\n        selection_type: selectedIndex === -1 ? 'custom' : 'candidate',\r\n        candidate_count: candidates.length.toString()\r\n      },\r\n      meta: {\r\n        candidateCount: candidates.length,\r\n        selectedIndex: selectedIndex,\r\n        selectedFilename: selectedIndex >= 0 ? candidates[selectedIndex]?.filename : 'custom'\r\n      }\r\n    });\r\n  }\r\n  \r\n  /**\r\n   * Record dry run execution\r\n   */\r\n  recordDryRun(analysisResults: unknown): void {\r\n    const analysis =\r\n      analysisResults && typeof analysisResults === \"object\"\r\n        ? (analysisResults as Record<string, unknown>)\r\n        : ({} as Record<string, unknown>);\r\n    const conflicts = typeof analysis.conflicts === \"number\" ? analysis.conflicts : 0;\r\n    const warnings = typeof analysis.warnings === \"number\" ? analysis.warnings : 0;\r\n    this.telemetry.emit({\r\n      event: FilenameInferenceEvent.DRY_RUN_EXECUTED,\r\n      tags: {\r\n        _comp: 'system',\r\n        operation: 'ux',\r\n        conflicts: conflicts > 0 ? 'true' : 'false',\r\n        warnings: warnings > 0 ? 'true' : 'false'\r\n      },\r\n      meta: {\r\n        conflicts,\r\n        warnings,\r\n        recommendations: analysis.recommendations\r\n      }\r\n    });\r\n  }\r\n  \r\n  /**\r\n   * Record undo operation\r\n   */\r\n  recordUndo(operation: string, success: boolean): void {\r\n    this.telemetry.emit({\r\n      event: FilenameInferenceEvent.UNDO_EXECUTED,\r\n      tags: {\r\n        _comp: 'system',\r\n        operation: 'ux',\r\n        undo_type: operation,\r\n        success: success ? 'true' : 'false'\r\n      },\r\n      meta: {\r\n        operation: operation,\r\n        success: success\r\n      }\r\n    });\r\n  }\r\n  \r\n  /**\r\n   * Record save operation\r\n   */\r\n  recordSave(operation: SaveOperation, result: SaveResult, durationMs: number): void {\r\n    const success = result.success;\r\n    \r\n    this.telemetry.emit({\r\n      event: success ? FilenameInferenceEvent.SAVE_OPERATION_SUCCESS : FilenameInferenceEvent.SAVE_OPERATION_FAILED,\r\n      dur: durationMs,\r\n      tags: {\r\n        _comp: 'system',\r\n        operation: 'save',\r\n        save_type: operation.type,\r\n        success: success ? 'true' : 'false',\r\n        file_extension: this.getFileExtension(operation.filename)\r\n      },\r\n      meta: {\r\n        filename: operation.filename,\r\n        path: operation.path,\r\n        fileSize: operation.content.length,\r\n        error: result.error\r\n      },\r\n      _error: result.error ? {\r\n        message: result.error,\r\n        code: 'SAVE_FAILED'\r\n      } : undefined\r\n    });\r\n  }\r\n  \r\n  /**\r\n   * Record security violations\r\n   */\r\n  recordSecurityViolation(type: 'path_traversal' | 'plan_violation' | 'permission_denied', details: unknown): void {\r\n    let event: FilenameInferenceEvent;\r\n    \r\n    switch (type) {\r\n      case 'path_traversal':\r\n        event = FilenameInferenceEvent.PATH_TRAVERSAL_BLOCKED;\r\n        break;\r\n      case 'plan_violation':\r\n        event = FilenameInferenceEvent.PLAN_VIOLATION_BLOCKED;\r\n        break;\r\n      case 'permission_denied':\r\n        event = FilenameInferenceEvent.PERMISSION_DENIED;\r\n        break;\r\n    }\r\n    \r\n    // Emit specific violation event\r\n    this.telemetry.emit({\r\n      event,\r\n      tags: {\r\n        _comp: 'system',\r\n        operation: 'security',\r\n        violation_type: type,\r\n        severity: 'high'\r\n      },\r\n      meta: this.toMeta(details),\r\n      _error: {\r\n        message: `Security violation: ${type}`,\r\n        code: type.toUpperCase()\r\n      }\r\n    });\r\n    // Emit generic SECURITY_VIOLATION event for aggregate metrics\r\n    this.telemetry.emit({\r\n      event: FilenameInferenceEvent.SECURITY_VIOLATION,\r\n      tags: {\r\n        _comp: 'system',\r\n        operation: 'security',\r\n        violation_type: type,\r\n        severity: 'high'\r\n      },\r\n      meta: this.toMeta(details)\r\n    });\r\n    \r\n    // Also record in telemetry integration for alerting (if available)\r\n    if (this.integration) {\r\n      this.integration.recordTelemetry({\r\n        metric: 'security_violation',\r\n        type: type,\r\n        severity: 'high',\r\n        timestamp: Date.now(),\r\n        details: this.toMeta(details)\r\n      });\r\n    }\r\n  }\r\n  \r\n  /**\r\n   * Generate metrics summary\r\n   */\r\n  async generateMetrics(windowMs: number = 300000): Promise<FilenameInferenceMetrics> {\r\n    const events = this.telemetry.exportEvents({\r\n      _startTime: Date.now() - windowMs,\r\n      event: /^filename\\./\r\n    });\r\n    \r\n    const metrics: FilenameInferenceMetrics = {\r\n      totalInferences: 0,\r\n      averageInferenceTime: 0,\r\n      cacheHitRate: 0,\r\n      timeoutRate: 0,\r\n      highConfidenceRate: 0,\r\n      mediumConfidenceRate: 0,\r\n      lowConfidenceRate: 0,\r\n      immediateMode: 0,\r\n      interactiveMode: 0,\r\n      dryRunMode: 0,\r\n      userCancellations: 0,\r\n      undoOperations: 0,\r\n      securityViolations: 0,\r\n      pathTraversalAttempts: 0,\r\n      planViolations: 0,\r\n      permissionDenials: 0,\r\n      successfulSaves: 0,\r\n      failedSaves: 0,\r\n      saveSuccessRate: 0\r\n    };\r\n    \r\n    // Calculate metrics from events\r\n    const inferences = events.filter(e => e.event === FilenameInferenceEvent.INFERENCE_END);\r\n    metrics.totalInferences = inferences.length;\r\n    \r\n    if (inferences.length > 0) {\r\n      const durations = inferences.map(e => e.dur || 0);\r\n      metrics.averageInferenceTime = durations.reduce((a, b): number => a + b, 0) / durations.length;\r\n      \r\n      const timeouts = inferences.filter(e => e.meta?.timedOut).length;\r\n      metrics.timeoutRate = timeouts / inferences.length;\r\n      \r\n      // Confidence rates\r\n      const highConf = inferences.filter(e => e.tags.confidence_level === 'high').length;\r\n      const medConf = inferences.filter(e => e.tags.confidence_level === 'medium').length;\r\n      const lowConf = inferences.filter(e => e.tags.confidence_level === 'low').length;\r\n      \r\n      metrics.highConfidenceRate = highConf / inferences.length;\r\n      metrics.mediumConfidenceRate = medConf / inferences.length;\r\n      metrics.lowConfidenceRate = lowConf / inferences.length;\r\n    }\r\n    \r\n    // Cache metrics\r\n    const cacheHits = events.filter(e => e.event === FilenameInferenceEvent.INFERENCE_CACHE_HIT).length;\r\n    const cacheMisses = events.filter(e => e.event === FilenameInferenceEvent.INFERENCE_CACHE_MISS).length;\r\n    const totalCacheEvents = cacheHits + cacheMisses;\r\n    if (totalCacheEvents > 0) {\r\n      metrics.cacheHitRate = cacheHits / totalCacheEvents;\r\n    }\r\n    \r\n    // UX metrics\r\n    const modeEvents = events.filter(e => e.event === FilenameInferenceEvent.SAVE_MODE_DECIDED);\r\n    metrics.immediateMode = modeEvents.filter(e => e.tags.mode === 'immediate').length;\r\n    metrics.interactiveMode = modeEvents.filter(e => e.tags.mode === 'interactive').length;\r\n    metrics.dryRunMode = modeEvents.filter(e => e.tags.mode === 'dry-run').length;\r\n    \r\n    metrics.undoOperations = events.filter(e => e.event === FilenameInferenceEvent.UNDO_EXECUTED).length;\r\n    \r\n    // Security metrics\r\n    metrics.securityViolations = events.filter(e => e.event === FilenameInferenceEvent.SECURITY_VIOLATION).length;\r\n    metrics.pathTraversalAttempts = events.filter(e => e.event === FilenameInferenceEvent.PATH_TRAVERSAL_BLOCKED).length;\r\n    metrics.planViolations = events.filter(e => e.event === FilenameInferenceEvent.PLAN_VIOLATION_BLOCKED).length;\r\n    metrics.permissionDenials = events.filter(e => e.event === FilenameInferenceEvent.PERMISSION_DENIED).length;\r\n    \r\n    // Save metrics\r\n    metrics.successfulSaves = events.filter(e => e.event === FilenameInferenceEvent.SAVE_OPERATION_SUCCESS).length;\r\n    metrics.failedSaves = events.filter(e => e.event === FilenameInferenceEvent.SAVE_OPERATION_FAILED).length;\r\n    const totalSaves = metrics.successfulSaves + metrics.failedSaves;\r\n    if (totalSaves > 0) {\r\n      metrics.saveSuccessRate = metrics.successfulSaves / totalSaves;\r\n    }\r\n    \r\n    return metrics;\r\n  }\r\n  \r\n  /**\r\n   * Record integration telemetry for external systems\r\n   */\r\n  async recordIntegrationTelemetry(data: unknown): Promise<void> {\r\n    await this.integrationPromise;\r\n    if (this.integration) {\r\n      const safe = this.toMeta(data);\r\n      await this.integration.recordTelemetry({\r\n        ...safe,\r\n        component: 'filename_inference',\r\n        timestamp: Date.now()\r\n      });\r\n    } else {\r\n      // Fallback to basic telemetry\r\n      this.telemetry.emit({\r\n        event: 'filename.integration.telemetry',\r\n        tags: {\r\n          _comp: 'system',\r\n          operation: 'integration',\r\n          component: 'filename_inference'\r\n        },\r\n        meta: this.toMeta(data)\r\n      });\r\n    }\r\n  }\r\n  \r\n  // Helper methods\r\n  \r\n  private getConfidenceLevel(confidence: number): string {\r\n    if (confidence >= 0.9) return 'high';\r\n    if (confidence >= 0.7) return 'medium';\r\n    return 'low';\r\n  }\r\n  \r\n  private getDurationBucket(durationMs: number): string {\r\n    if (durationMs < 10) return '0-10ms';\r\n    if (durationMs < 50) return '10-50ms';\r\n    if (durationMs < 100) return '50-100ms';\r\n    if (durationMs < 200) return '100-200ms';\r\n    return '200ms+';\r\n  }\r\n  \r\n  private getFileExtension(filename: string): string {\r\n    const ext = filename.split('.').pop();\r\n    return ext ? ext.toLowerCase() : 'none';\r\n  }\r\n  \r\n  private recordConfidenceMetrics(confidence: number): void {\r\n    if (confidence >= 0.9) {\r\n      this.telemetry.emit({\r\n        event: FilenameInferenceEvent.HIGH_CONFIDENCE_INFERENCE,\r\n        tags: {\r\n          _comp: 'system',\r\n          operation: 'performance',\r\n          confidence_level: 'high'\r\n        },\r\n        meta: { confidence }\r\n      });\r\n    } else if (confidence < 0.7) {\r\n      this.telemetry.emit({\r\n        event: FilenameInferenceEvent.LOW_CONFIDENCE_INFERENCE,\r\n        tags: {\r\n          _comp: 'system',\r\n          operation: 'performance',\r\n          confidence_level: 'low'\r\n        },\r\n        meta: { confidence }\r\n      });\r\n    }\r\n  }\r\n  \r\n  private recordTimeout(): void {\r\n    this.telemetry.emit({\r\n      event: FilenameInferenceEvent.INFERENCE_TIMEOUT,\r\n      tags: {\r\n        _comp: 'system',\r\n        operation: 'performance',\r\n        issue: 'timeout'\r\n      }\r\n    });\r\n  }\r\n}\r\n\r\n// Export singleton instance\r\nexport const filenameInferenceTelemetry = new FilenameInferenceTelemetry();\r\n","/**\n * Filename Inference Service\n * Intelligently infers appropriate filenames from user intent and code content\n */\nimport { BaseService } from '../base/BaseService.js';\nimport { ExplicitFilenameAnalyzer } from './analyzers/ExplicitFilenameAnalyzer.js';\nimport { ContextualAnalyzer } from './analyzers/ContextualAnalyzer.js';\nimport { SemanticAnalyzer } from './analyzers/SemanticAnalyzer.js';\nimport { ExtensionDetector } from './analyzers/ExtensionDetector.js';\nimport { filenameInferenceTelemetry } from './telemetry/FilenameInferenceTelemetry.js';\nimport type { FilenameResult, FilenameCandidate, ProjectContext, InferenceConfig, FilenameInferenceOptions, InferenceSource } from './types/filename-inference.types.js';\nimport * as path from 'path';\nimport * as fs from 'fs/promises';\n/**\n * Main service for intelligent filename inference\n */\nexport class FilenameInferenceService extends BaseService {\n    id = \"filename-inference-service\";\n    version = \"1.0.0\";\n    private explicitAnalyzer: ExplicitFilenameAnalyzer;\n    private contextualAnalyzer: ContextualAnalyzer;\n    private semanticAnalyzer: SemanticAnalyzer;\n    private extensionDetector: ExtensionDetector;\n    private config: InferenceConfig;\n    constructor(options?: FilenameInferenceOptions) {\n        super({ name: 'FilenameInferenceService' });\n        this.explicitAnalyzer = new ExplicitFilenameAnalyzer();\n        this.contextualAnalyzer = new ContextualAnalyzer();\n        this.semanticAnalyzer = new SemanticAnalyzer();\n        this.extensionDetector = new ExtensionDetector();\n        this.config = {\n            priority: options?.priority || 'explicit',\n            fallbackStrategy: options?.fallbackStrategy || 'timestamp',\n            projectConventions: options?.projectConventions,\n            confidenceThreshold: options?.confidenceThreshold || 0.7\n        };\n    }\n    /**\n     * Infer the best filename based on user input and generated code\n     */\n    async inferFilename(userInput: string, generatedCode: string, projectContext?: ProjectContext): Promise<FilenameResult> {\n        // Start telemetry timing\n        const endTiming = filenameInferenceTelemetry.startInference(userInput, projectContext);\n        const startTime = Date.now();\n        try {\n            const candidates: FilenameCandidate[] = [];\n            // 1. Check for explicit filename specification\n            const explicitStart = Date.now();\n            const explicit = await this.explicitAnalyzer.analyze(userInput);\n            filenameInferenceTelemetry.recordAnalyzerComplete('explicit', [explicit], Date.now() - explicitStart);\n            if (explicit.confidence > 0.8) {\n                const result = this.createResult(explicit, 'explicit');\n                filenameInferenceTelemetry.recordInferenceComplete(result, Math.max(1, Date.now() - startTime));\n                return result;\n            }\n            candidates.push(explicit);\n            // 2. Analyze context from user input\n            const contextualStart = Date.now();\n            const contextual = await this.contextualAnalyzer.analyze(userInput, projectContext);\n            filenameInferenceTelemetry.recordAnalyzerComplete('contextual', [contextual], Date.now() - contextualStart);\n            candidates.push(contextual);\n            // 3. Analyze code semantics\n            const semanticStart = Date.now();\n            const semantic = await this.semanticAnalyzer.analyze(generatedCode, userInput);\n            filenameInferenceTelemetry.recordAnalyzerComplete('semantic', [semantic], Date.now() - semanticStart);\n            candidates.push(semantic);\n            // 4. Select best candidate\n            const bestCandidate = this.selectBestCandidate(candidates);\n            // 5. Apply project conventions if available\n            if (projectContext?.conventions) {\n                bestCandidate.filename = this.applyConventions(bestCandidate.filename, projectContext.conventions);\n            }\n            // 6. Ensure unique filename\n            const finalFilename = await this.ensureUniqueFilename(bestCandidate.filename, projectContext?.directory || process.cwd());\n            const result = this.createResult({\n                ...bestCandidate,\n                filename: finalFilename\n            }, bestCandidate.source || 'combined');\n            // Record completion telemetry\n            filenameInferenceTelemetry.recordInferenceComplete(result, Math.max(1, Date.now() - startTime));\n            return result;\n        }\n        finally {\n            endTiming();\n        }\n    }\n    /**\n     * Intelligently organize file into appropriate directory\n     */\n    async determineDirectory(filename: string, code: string, projectContext?: ProjectContext): Promise<string> {\n        // Detect file type from extension\n        const ext = path.extname(filename).toLowerCase();\n        const _basename = path.basename(filename, ext);\n        // Default directory structure\n        const directoryMap: Record<string, string[]> = {\n            'components': ['.tsx', '.jsx', '.vue'],\n            'pages': ['page.tsx', 'page.jsx', '.html'],\n            'styles': ['.css', '.scss', '.sass', '.less'],\n            'utils': ['util.ts', 'util.js', 'helper.ts', 'helper.js'],\n            'services': ['service.ts', 'service.js', 'api.ts', 'api.js'],\n            'config': ['config.json', 'config.js', 'config.ts', '.env'],\n            'tests': ['.test.ts', '.test.js', '.spec.ts', '.spec.js'],\n            'docs': ['.md', '.txt', '.doc'],\n            'scripts': ['.sh', '.py', '.rb'],\n            'data': ['.json', '.csv', '.sql', '.xml']\n        };\n        // Check if project has custom directory structure\n        if (projectContext?.directories) {\n            for (const [dir, patterns] of Object.entries(projectContext.directories)) {\n                if (patterns.some(pattern => filename.includes(pattern))) {\n                    return path.join(projectContext.root || '.', dir);\n                }\n            }\n        }\n        // Apply default directory mapping\n        for (const [dir, extensions] of Object.entries(directoryMap)) {\n            if (extensions.some(ext => filename.endsWith(ext))) {\n                const targetDir = path.join(projectContext?.root || '.', 'src', dir);\n                await this.ensureDirectoryExists(targetDir);\n                return targetDir;\n            }\n        }\n        // Analyze code content for better placement\n        if (code.includes('export default') || code.includes('module.exports')) {\n            if (code.includes('React') || code.includes('useState')) {\n                return path.join(projectContext?.root || '.', 'src', 'components');\n            }\n            if (code.includes('express') || code.includes('router')) {\n                return path.join(projectContext?.root || '.', 'src', 'routes');\n            }\n        }\n        // Default to src directory\n        return path.join(projectContext?.root || '.', 'src');\n    }\n    /**\n     * Track relationships between files\n     */\n    async trackFileRelationship(newFile: string, relatedFiles: string[], relationship: 'imports' | 'exports' | 'tests' | 'styles' | 'documentation'): Promise<void> {\n        const relationshipFile = path.join(process.cwd(), '.maria', 'file-relationships.json');\n        type RelationshipEntry = {\n            created: string;\n            lastModified?: string;\n            relationships: Partial<Record<'imports' | 'exports' | 'tests' | 'styles' | 'documentation', string[]>>;\n        };\n        type RelationshipsFile = Record<string, RelationshipEntry>;\n        let relationships: RelationshipsFile = {};\n        try {\n            const content = await fs.readFile(relationshipFile, 'utf-8');\n            relationships = JSON.parse(content) as RelationshipsFile;\n        }\n        catch {\n            // File doesn't exist yet\n        }\n        if (!relationships[newFile]) {\n            relationships[newFile] = {\n                created: new Date().toISOString(),\n                relationships: {}\n            };\n        }\n        relationships[newFile].relationships[relationship] = relatedFiles;\n        relationships[newFile].lastModified = new Date().toISOString();\n        // Ensure .maria directory exists\n        await this.ensureDirectoryExists(path.dirname(relationshipFile));\n        await fs.writeFile(relationshipFile, JSON.stringify(relationships, null, 2));\n    }\n    /**\n     * Select the best candidate from multiple options\n     */\n    private selectBestCandidate(candidates: FilenameCandidate[]): FilenameCandidate {\n        // Sort by confidence\n        const sorted = candidates.sort((a, b): number => b.confidence - a.confidence);\n        // If top candidate has high confidence, use it\n        if (sorted[0].confidence >= this.config.confidenceThreshold) {\n            return sorted[0];\n        }\n        // Otherwise, combine insights from multiple candidates\n        const combined: FilenameCandidate = {\n            path: sorted[0].path ||\n                path.join(sorted[0].directory || process.cwd(), sorted[0].filename),\n            filename: sorted[0].filename,\n            extension: sorted[0].extension,\n            confidence: sorted[0].confidence,\n            reasoning: 'Combined from multiple sources',\n            source: 'combined',\n            alternatives: [],\n            directory: sorted[0].directory || process.cwd()\n        };\n        // Merge alternatives from all candidates\n        for (const candidate of sorted.slice(1, 3)) {\n            if (candidate.alternatives) {\n                combined.alternatives!.push(...candidate.alternatives);\n            }\n        }\n        return combined;\n    }\n    /**\n     * Apply project naming conventions\n     */\n    private applyConventions(filename: string, conventions: {\n        fileNaming?: 'camelCase' | 'kebab-case' | 'PascalCase' | 'snake_case';\n    } | undefined): string {\n        const ext = path.extname(filename);\n        let basename = path.basename(filename, ext);\n        // Apply naming convention\n        switch (conventions?.fileNaming) {\n            case 'kebab-case':\n                basename = this.toKebabCase(basename);\n                break;\n            case 'camelCase':\n                basename = this.toCamelCase(basename);\n                break;\n            case 'PascalCase':\n                basename = this.toPascalCase(basename);\n                break;\n            case 'snake_case':\n                basename = this.toSnakeCase(basename);\n                break;\n        }\n        return basename + ext;\n    }\n    /**\n     * Ensure filename is unique in target directory\n     */\n    private async ensureUniqueFilename(filename: string, directory: string): Promise<string> {\n        const ext = path.extname(filename);\n        const basename = path.basename(filename, ext);\n        let finalName = filename;\n        let counter = 1;\n        while (await this.fileExists(path.join(directory, finalName))) {\n            finalName = `${basename}_${counter}${ext}`;\n            counter++;\n        }\n        return finalName;\n    }\n    /**\n     * Check if file exists\n     */\n    private async fileExists(filepath: string): Promise<boolean> {\n        try {\n            await fs.access(filepath);\n            return true;\n        }\n        catch {\n            return false;\n        }\n    }\n    /**\n     * Ensure directory exists\n     */\n    private async ensureDirectoryExists(dir: string): Promise<void> {\n        try {\n            await fs.mkdir(dir, { recursive: true });\n        }\n        catch {\n            // Directory already exists\n        }\n    }\n    /**\n     * Create result object\n     */\n    private createResult(candidate: FilenameCandidate, source: InferenceSource): FilenameResult {\n        return {\n            path: candidate.path,\n            filename: candidate.filename,\n            extension: candidate.extension,\n            confidence: candidate.confidence,\n            reasoning: candidate.reasoning,\n            source,\n            alternatives: candidate.alternatives || [],\n            directory: candidate.directory\n        };\n    }\n    /**\n     * Get lightweight service statistics (used by UX layer)\n     */\n    getStats(): {\n        id: string;\n        version: string;\n        confidenceThreshold: number;\n    } {\n        return {\n            id: this.id,\n            version: this.version,\n            confidenceThreshold: this.config.confidenceThreshold\n        };\n    }\n    /**\n     * Clear caches (best-effort)\n     */\n    clearCache(): void {\n        // Currently analyzers are stateless; keep for API compatibility with UX layer.\n    }\n    // String conversion utilities\n    private toKebabCase(str: string): string {\n        return str\n            .replace(/([a-z])([A-Z])/g, '$1-$2')\n            .replace(/[\\s_]+/g, '-')\n            .toLowerCase();\n    }\n    private toCamelCase(str: string): string {\n        return str\n            .replace(/[-_\\s](.)/g, (_, char): string => char.toUpperCase())\n            .replace(/^(.)/, (_, char): string => char.toLowerCase());\n    }\n    private toPascalCase(str: string): string {\n        return str\n            .replace(/[-_\\s](.)/g, (_, char): string => char.toUpperCase())\n            .replace(/^(.)/, (_, char): string => char.toUpperCase());\n    }\n    private toSnakeCase(str: string): string {\n        return str\n            .replace(/([a-z])([A-Z])/g, '$1_$2')\n            .replace(/[-\\s]+/g, '_')\n            .toLowerCase();\n    }\n    /**\n     * Learn from user corrections\n     */\n    async learnFromCorrection(originalFilename: string, correctedFilename: string, context: string): Promise<void> {\n        const learningFile = path.join(process.cwd(), '.maria', 'filename-learning.json');\n        let learnings: unknown[] = [];\n        try {\n            const content = await fs.readFile(learningFile, 'utf-8');\n            learnings = JSON.parse(content);\n        }\n        catch {\n            // File doesn't exist yet\n        }\n        learnings.push({\n            timestamp: new Date().toISOString(),\n            original: originalFilename,\n            corrected: correctedFilename,\n            context,\n            pattern: this.extractPattern(originalFilename, correctedFilename)\n        });\n        // Keep only last 100 learnings\n        if (learnings.length > 100) {\n            learnings = learnings.slice(-100);\n        }\n        await this.ensureDirectoryExists(path.dirname(learningFile));\n        await fs.writeFile(learningFile, JSON.stringify(learnings, null, 2));\n    }\n    /**\n     * Extract learning pattern from correction\n     */\n    private extractPattern(original: string, corrected: string): string {\n        const origExt = path.extname(original);\n        const corrExt = path.extname(corrected);\n        if (origExt !== corrExt) {\n            return `extension_change:${origExt}->${corrExt}`;\n        }\n        const origBase = path.basename(original, origExt);\n        const corrBase = path.basename(corrected, corrExt);\n        if (origBase !== corrBase) {\n            return `naming_change:${this.detectNamingPattern(origBase, corrBase)}`;\n        }\n        return 'unknown';\n    }\n    /**\n     * Detect naming pattern change\n     */\n    private detectNamingPattern(original: string, corrected: string): string {\n        if (original.includes('-') && !corrected.includes('-')) {\n            return 'kebab_to_camel';\n        }\n        if (!original.includes('-') && corrected.includes('-')) {\n            return 'camel_to_kebab';\n        }\n        if (original[0].toLowerCase() === original[0] && corrected[0].toUpperCase() === corrected[0]) {\n            return 'to_pascal';\n        }\n        return 'custom';\n    }\n    async initialize(): Promise<void> {\n        // Initialize FilenameInferenceService - no initialization needed for now\n    }\n}\nexport default FilenameInferenceService;\n","/**\n * Intelligent Document Save Service\n * Autonomously determines file names, extensions, and directory organization\n * Integrates with FilenameInferenceService for intelligent naming\n */\n\nimport { writeFile, mkdir } from \"fs/promises\";\nimport * as path from \"path\";\nimport { FilenameInferenceService } from './code-intent/FilenameInferenceService.js';\nimport { \n  DocumentType,\n  classifyDocument,\n  formatAsMarkdown,\n  autoSaveDocument as originalAutoSave,\n  autoSaveMultipleDocuments as originalAutoSaveMultiple\n} from './document-auto-save.js';\nimport type { ProjectContext } from './code-intent/types/filename-inference.types.js';\nimport { stderrLine } from \"../shared/utils/tty\";\n\n/**\n * Enhanced save options with intelligent features\n */\nexport interface IntelligentSaveOptions {\n  userIntent?: string;\n  projectContext?: ProjectContext;\n  autoOrganize?: boolean;\n  trackRelationships?: boolean;\n  learnFromUser?: boolean;\n  suggestAlternatives?: boolean;\n}\n\n/**\n * Save result with additional metadata\n */\nexport interface IntelligentSaveResult {\n  path: string;\n  filename: string;\n  directory: string;\n  confidence: number;\n  reasoning: string;\n  alternatives?: string[];\n  relationships?: string[];\n}\n\n/**\n * Intelligent Document Save Service\n */\nexport class IntelligentDocumentSaveService {\n  private filenameInference: FilenameInferenceService;\n  private projectContext: ProjectContext;\n\n  constructor(projectContext?: ProjectContext) {\n    this.filenameInference = new FilenameInferenceService({\n      priority: 'contextual',\n      confidenceThreshold: 0.6,\n      fallbackStrategy: 'generic'\n    });\n    \n    this.projectContext = projectContext || {\n      root: process.cwd(),\n      conventions: {\n        fileNaming: 'kebab-case',\n        directories: {\n          components: 'src/components',\n          pages: 'src/pages',\n          utils: 'src/utils',\n          services: 'src/services',\n          styles: 'src/styles',\n          tests: 'tests'\n        },\n        extensions: {\n          react: '.tsx',\n          typescript: '.ts',\n          javascript: '.js',\n          styles: '.css'\n        }\n      }\n    };\n  }\n\n  /**\n   * Intelligently save content with autonomous decision making\n   */\n  async save(\n    content: string,\n    options: IntelligentSaveOptions = {}\n  ): Promise<IntelligentSaveResult> {\n    // 1. Analyze content to understand what it is\n    const contentAnalysis = await this.analyzeContent(content);\n    \n    // 2. Infer the best filename\n    const filenameResult = await this.filenameInference.inferFilename(\n      options.userIntent || contentAnalysis.summary,\n      content,\n      options.projectContext || this.projectContext\n    );\n\n    // 3. Determine optimal directory placement\n    let directory = this.projectContext.root || process.cwd();\n    if (options.autoOrganize !== false) {\n      directory = await this.filenameInference.determineDirectory(\n        filenameResult.filename,\n        content,\n        options.projectContext || this.projectContext\n      );\n    }\n\n    // 4. Format content based on type\n    let formattedContent = content;\n    const docType = classifyDocument(content);\n    if (docType && !this.isCodeFile(filenameResult.extension)) {\n      formattedContent = formatAsMarkdown(content, docType);\n    }\n\n    // 5. Ensure directory exists\n    await mkdir(directory, { recursive: true });\n\n    // 6. Generate full path\n    const fullPath = path.join(directory, filenameResult.filename);\n\n    // 7. Save the file\n    await writeFile(fullPath, formattedContent, 'utf8');\n\n    // 8. Track relationships if requested\n    const relationships: string[] = [];\n    if (options.trackRelationships) {\n      relationships.push(...await this.trackRelationships(fullPath, content));\n    }\n\n    // 9. Learn from user behavior if enabled\n    if (options.learnFromUser) {\n      await this.learnFromSave(filenameResult.filename, content, options.userIntent);\n    }\n\n    // 10. Return comprehensive result\n    return {\n      path: fullPath,\n      filename: filenameResult.filename,\n      directory,\n      confidence: filenameResult.confidence,\n      reasoning: filenameResult.reasoning,\n      alternatives: options.suggestAlternatives ? filenameResult.alternatives : undefined,\n      relationships: relationships.length > 0 ? relationships : undefined\n    };\n  }\n\n  /**\n   * Save multiple documents intelligently\n   */\n  async saveMultiple(\n    documents: Array<{ content: string; hint?: string }>,\n    options: IntelligentSaveOptions = {}\n  ): Promise<IntelligentSaveResult[]> {\n    const results: IntelligentSaveResult[] = [];\n    \n    for (const doc of documents) {\n      const result = await this.save(doc.content, {\n        ...options,\n        userIntent: doc.hint || options.userIntent\n      });\n      results.push(result);\n    }\n\n    return results;\n  }\n\n  /**\n   * Analyze content to understand its nature\n   */\n  private async analyzeContent(content: string): Promise<{\n    type: string;\n    language?: string;\n    framework?: string;\n    summary: string;\n    keywords: string[];\n  }> {\n    // Detect document type\n    const docType = classifyDocument(content);\n    \n    // Extract key information\n    const keywords = this.extractKeywords(content);\n    const language = this.detectLanguage(content);\n    const framework = this.detectFramework(content);\n    \n    // Generate summary\n    const summary = this.generateSummary(content, keywords);\n\n    return {\n      type: docType || 'unknown',\n      language,\n      framework,\n      summary,\n      keywords\n    };\n  }\n\n  /**\n   * Extract keywords from content\n   */\n  private extractKeywords(content: string): string[] {\n    const keywords: string[] = [];\n    \n    // Extract from headers\n    const headers = content.match(/^#+\\s+(.+)$/gm);\n    if (headers) {\n      keywords.push(...headers.map(h => h.replace(/^#+\\s+/, '').toLowerCase()));\n    }\n\n    // Extract from class/function names\n    const classNames = content.match(/(?:class|interface|type)\\s+(\\w+)/g);\n    if (classNames) {\n      keywords.push(...classNames.map(c => c.replace(/(?:class|interface|type)\\s+/, '').toLowerCase()));\n    }\n\n    // Extract from important words\n    const importantWords = ['api', 'component', 'service', 'model', 'controller', 'view', \n                           'test', 'spec', 'config', 'util', 'helper', 'manager'];\n    for (const word of importantWords) {\n      if (content.toLowerCase().includes(word)) {\n        keywords.push(word);\n      }\n    }\n\n    return [...new Set(keywords)]; // Remove duplicates\n  }\n\n  /**\n   * Detect programming language\n   */\n  private detectLanguage(content: string): string | undefined {\n    if (/import.*from ['\"]react['\"]/.test(content)) return 'typescript-react';\n    if (/import.*React/.test(content)) return 'javascript-react';\n    if (/interface\\s+\\w+/.test(content)) return 'typescript';\n    if (/def\\s+\\w+\\(/.test(content)) return 'python';\n    if (/public\\s+class/.test(content)) return 'java';\n    if (/func\\s+\\w+/.test(content)) return 'go';\n    if (/fn\\s+\\w+/.test(content)) return 'rust';\n    if (/<\\?php/.test(content)) return 'php';\n    if (/function\\s+\\w+/.test(content)) return 'javascript';\n    return undefined;\n  }\n\n  /**\n   * Detect framework\n   */\n  private detectFramework(content: string): string | undefined {\n    if (/import.*from ['\"]react['\"]/.test(content)) return 'react';\n    if (/import.*from ['\"]vue['\"]/.test(content)) return 'vue';\n    if (/import.*from ['\"]@angular/.test(content)) return 'angular';\n    if (/import.*from ['\"]express['\"]/.test(content)) return 'express';\n    if (/import.*from ['\"]fastify['\"]/.test(content)) return 'fastify';\n    if (/from django/.test(content)) return 'django';\n    if (/from flask/.test(content)) return 'flask';\n    if (/import org.springframework/.test(content)) return 'spring';\n    return undefined;\n  }\n\n  /**\n   * Generate content summary\n   */\n  private generateSummary(content: string, keywords: string[]): string {\n    // Try to extract first meaningful line\n    const lines = content.split('\\n').filter(line => line.trim() && !line.startsWith('#'));\n    const firstLine = lines[0] || '';\n    \n    // Combine with keywords\n    if (keywords.length > 0) {\n      return `${keywords.slice(0, 3).join(' ')} ${firstLine.slice(0, 50)}`.trim();\n    }\n    \n    return firstLine.slice(0, 100);\n  }\n\n  /**\n   * Track file relationships\n   */\n  private async trackRelationships(filepath: string, content: string): Promise<string[]> {\n    const relationships: string[] = [];\n    \n    // Extract imports\n    const imports = this.extractImports(content);\n    if (imports.length > 0) {\n      await this.filenameInference.trackFileRelationship(filepath, imports, 'imports');\n      relationships.push(...imports);\n    }\n\n    // Extract references to other files\n    const fileRefs = content.match(/['\"](\\.\\.?\\/[^'\"]+)['\"]/g);\n    if (fileRefs) {\n      const refs = fileRefs.map(r => r.replace(/['\"]/g, ''));\n      await this.filenameInference.trackFileRelationship(filepath, refs, 'imports');\n      relationships.push(...refs);\n    }\n\n    return relationships;\n  }\n\n  /**\n   * Extract import statements\n   */\n  private extractImports(content: string): string[] {\n    const imports: string[] = [];\n    \n    // JavaScript/TypeScript imports\n    const jsImports = content.match(/(?:import|require)\\s*\\(?['\"]([^'\"]+)['\"]/g);\n    if (jsImports) {\n      imports.push(...jsImports.map(i => i.replace(/.*['\"]([^'\"]+)['\"].*/, '$1')));\n    }\n    \n    // Python imports\n    const pyImports = content.match(/(?:from|import)\\s+(\\S+)/g);\n    if (pyImports) {\n      imports.push(...pyImports.map(i => i.replace(/(?:from|import)\\s+/, '')));\n    }\n    \n    return imports;\n  }\n\n  /**\n   * Learn from user save patterns\n   */\n  private async learnFromSave(\n    filename: string,\n    content: string,\n    userIntent?: string\n  ): Promise<void> {\n    // Extract patterns from this save\n    const pattern = {\n      filename,\n      extension: path.extname(filename),\n      keywords: this.extractKeywords(content),\n      intent: userIntent,\n      timestamp: new Date().toISOString()\n    };\n\n    // Store in learning file (would be better in a database)\n    const learningFile = path.join(process.cwd(), '.maria', 'save-patterns.json');\n    let patterns: unknown[] = [];\n    \n    try {\n      const fs = await import('fs/promises');\n      const content = await fs.readFile(learningFile, 'utf-8');\n      patterns = JSON.parse(content);\n    } catch {\n      // File doesn't exist yet\n    }\n\n    patterns.push(pattern);\n    \n    // Keep only last 100 patterns\n    if (patterns.length > 100) {\n      patterns = patterns.slice(-100);\n    }\n\n    // Ensure directory exists\n    await mkdir(path.dirname(learningFile), { recursive: true });\n    const fs = await import('fs/promises');\n    await fs.writeFile(learningFile, JSON.stringify(patterns, null, 2));\n  }\n\n  /**\n   * Check if file extension indicates code file\n   */\n  private isCodeFile(extension: string): boolean {\n    const codeExtensions = [\n      '.js', '.ts', '.jsx', '.tsx', '.py', '.java', '.go', '.rs',\n      '.php', '.rb', '.swift', '.kt', '.cs', '.cpp', '.c', '.h',\n      '.sh', '.bash', '.sql', '.html', '.css', '.scss', '.sass'\n    ];\n    return codeExtensions.includes(extension.toLowerCase());\n  }\n\n  /**\n   * Get suggestions for better organization\n   */\n  async getSuggestions(content: string): Promise<{\n    filename: string;\n    directory: string;\n    reasoning: string;\n  }[]> {\n    const analysis = await this.analyzeContent(content);\n    const suggestions: Array<{ filename: string; directory: string; reasoning: string }> = [];\n\n    // Get primary suggestion\n    const primary = await this.filenameInference.inferFilename(\n      analysis.summary,\n      content,\n      this.projectContext\n    );\n\n    suggestions.push({\n      filename: primary.filename,\n      directory: await this.filenameInference.determineDirectory(\n        primary.filename,\n        content,\n        this.projectContext\n      ),\n      reasoning: primary.reasoning\n    });\n\n    // Add alternatives\n    if (primary.alternatives) {\n      for (const alt of primary.alternatives.slice(0, 2)) {\n        suggestions.push({\n          filename: alt,\n          directory: await this.filenameInference.determineDirectory(\n            alt,\n            content,\n            this.projectContext\n          ),\n          reasoning: 'Alternative suggestion'\n        });\n      }\n    }\n\n    return suggestions;\n  }\n}\n\n// Export singleton instance for convenience\nexport const intelligentSave = new IntelligentDocumentSaveService();\n\n// Export enhanced auto-save functions\nexport async function autoSaveIntelligently(\n  content: string,\n  userHint?: string\n): Promise<string | null> {\n  try {\n    const result = await intelligentSave.save(content, {\n      userIntent: userHint,\n      autoOrganize: true,\n      trackRelationships: true\n    });\n    return result.path;\n  } catch (error) {\n    stderrLine('Intelligent auto-save failed:', error);\n    // Fall back to original auto-save\n    return originalAutoSave(content, userHint);\n  }\n}\n\nexport async function autoSaveMultipleIntelligently(\n  content: string,\n  baseHint?: string\n): Promise<string[]> {\n  try {\n    // Split content into documents\n    const documents = splitIntoDocuments(content);\n    const results = await intelligentSave.saveMultiple(\n      documents.map((doc, i): { content: string; hint: string; } => ({\n        content: doc,\n        hint: baseHint ? `${baseHint}_${i + 1}` : undefined\n      })),\n      {\n        autoOrganize: true,\n        trackRelationships: true\n      }\n    );\n    return results.map(r => r.path);\n  } catch (error) {\n    stderrLine('Intelligent multi-save failed:', error);\n    // Fall back to original auto-save\n    return originalAutoSaveMultiple(content, baseHint);\n  }\n}\n\n/**\n * Split content into multiple documents\n */\nfunction splitIntoDocuments(content: string): string[] {\n  // Check for document type\n  const docType = classifyDocument(content);\n  \n  // For code files, don't split\n  if (docType && isCodeDocType(docType)) {\n    return [content];\n  }\n  \n  // Look for clear document boundaries\n  const h1Matches = content.match(/^# (?:Statement of Work|SOW|Requirements|Technical Specification|Architecture|TODO|Project Plan|Design Document|User Stories)/gm);\n  if (h1Matches && h1Matches.length > 1) {\n    const sections = content.split(/^(?=# (?:Statement of Work|SOW|Requirements|Technical Specification|Architecture|TODO|Project Plan|Design Document|User Stories))/m);\n    return sections.filter(s => s.trim());\n  }\n  \n  // Check for explicit separators\n  const separatorPattern = /^---\\s*Document\\s*\\d+\\s*---$/m;\n  if (separatorPattern.test(content)) {\n    return content.split(separatorPattern).filter(s => s.trim());\n  }\n  \n  // Default: single document\n  return [content];\n}\n\n/**\n * Check if document type is code\n */\nfunction isCodeDocType(docType: DocumentType): boolean {\n  const codeTypes = [\n    DocumentType.TYPESCRIPT, DocumentType.JAVASCRIPT, DocumentType.HTML,\n    DocumentType.CSS, DocumentType.SCSS, DocumentType.SASS, DocumentType.LESS,\n    DocumentType.SQL, DocumentType.SHELL_SCRIPT, DocumentType.PYTHON,\n    DocumentType.RUBY, DocumentType.GO, DocumentType.RUST, DocumentType.JAVA,\n    DocumentType.CPP, DocumentType.C, DocumentType.CSHARP, DocumentType.PHP,\n    DocumentType.SWIFT, DocumentType.KOTLIN\n  ];\n  return codeTypes.includes(docType);\n}\n\nexport default IntelligentDocumentSaveService;","import { defaultLogger as logger } from \"../../../adapters/logging/default\";\nimport type {\n  ComplianceResult,\n  DataDestination,\n  DataPorterConfig,\n  DataSource,\n  ExportRequest,\n  GDPRConfig,\n  HIPAAConfig,\n  PorterEncryptionConfig,\n  QualityValidationResult,\n  SchemaValidationResult,\n  SOXConfig,\n  SupportedFormat,\n  ValidationConfig,\n} from \"./enterprise-data-porter.types\";\n\nfunction isRecord(_value: unknown): _value is Record<string, unknown> {\n  return typeof _value === \"object\" && _value !== null && !Array.isArray(_value);\n}\n\nfunction getRecord(_value: unknown): Record<string, unknown> {\n  return isRecord(_value) ? _value : {};\n}\n\nfunction getBoolean(_value: unknown): boolean | undefined {\n  return typeof _value === \"boolean\" ? _value : undefined;\n}\n\nfunction getErrorMessage(_error: unknown): string {\n  return _error instanceof Error ? _error.message : String(_error);\n}\n\nexport type DataConnection = {\n  close: () => Promise<void>;\n  query?: (sql: string, _values?: unknown[]) => Promise<unknown[]>;\n  read?: () => Promise<Buffer>;\n  fetch?: (options?: unknown) => Promise<unknown>;\n  putObject?: (params: {\n    Key: string;\n    Body: string;\n    ContentType?: string;\n  }) => Promise<void>;\n  getObject?: (key: string) => Promise<{ Body: Buffer }>;\n  listObjects?: (prefix?: string) => Promise<{ Contents: unknown[] }>;\n};\n\nexport abstract class FormatHandler {\n  abstract serialize(_data: unknown[], _options: unknown): Promise<unknown>;\n  abstract deserialize(_data: unknown, _options: unknown): Promise<unknown[]>;\n}\n\nexport class JSONFormatHandler extends FormatHandler {\n  async serialize(data: unknown[], options: unknown): Promise<string> {\n    const opts = getRecord(options);\n    const pretty = getBoolean(opts.pretty) ?? false;\n    return JSON.stringify(data, null, pretty ? 2 : 0);\n  }\n\n  async deserialize(data: unknown, _options: unknown): Promise<unknown[]> {\n    if (typeof data === \"string\") {\n      return JSON.parse(data);\n    }\n    return Array.isArray(data) ? data : [data];\n  }\n}\n\nexport class CSVFormatHandler extends FormatHandler {\n  async serialize(data: unknown[], _options: unknown): Promise<string> {\n    if (data.length === 0) {\n      return \"\";\n    }\n\n    const _headers = Object.keys(getRecord(data[0]));\n    const _rows = data.map((_record): string =>\n      _headers\n        .map((header): string => this.escapeCSVField(getRecord(_record)[header]))\n        .join(\",\"),\n    );\n\n    return [_headers.join(\",\"), ..._rows].join(\"\\n\");\n  }\n\n  async deserialize(data: string, _options: unknown): Promise<unknown[]> {\n    const _lines = data.split(\"\\n\").filter((line): string => line.trim());\n    if (_lines.length === 0) {\n      return [];\n    }\n\n    const _headers = _lines[0].split(\",\");\n    const _records = _lines.slice(1).map((line): Record<string, unknown> => {\n      const _values = line.split(\",\");\n      const _record: Record<string, unknown> = {};\n      _headers.forEach((header, index): void => {\n        _record[header] = _values[index];\n      });\n      return _record;\n    });\n\n    return _records;\n  }\n\n  private escapeCSVField(_value: unknown): string {\n    const _str = String(_value || \"\");\n    if (_str.includes(\",\") || _str.includes('\"') || _str.includes(\"\\n\")) {\n      return `\"${_str.replace(/\"/g, '\"\"')}\"`;\n    }\n    return _str;\n  }\n}\n\nexport class XMLFormatHandler extends FormatHandler {\n  async serialize(data: unknown[], _options: unknown): Promise<string> {\n    let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n<root>\\n';\n\n    for (const _record of data) {\n      const rec = getRecord(_record);\n      xml += \"  <_item>\\n\";\n      for (const [key, _value] of Object.entries(rec)) {\n        xml += `    <${key}>${this.escapeXML(String(_value))}</${key}>\\n`;\n      }\n      xml += \"  </item>\\n\";\n    }\n\n    xml += \"</root>\";\n    return xml;\n  }\n\n  async deserialize(data: string, _options: unknown): Promise<unknown[]> {\n    // Basic XML parsing implementation\n    try {\n      const _records: unknown[] = [];\n\n      // Remove XML declaration and get root content\n      const xmlContent = data.replace(/<\\?xml[^>]*\\?>/, \"\").trim();\n\n      // Extract items between <_item> tags\n      const itemRegex = /<_item>([\\s\\S]*?)<\\/_item>/g;\n      let itemMatch;\n\n      while ((itemMatch = itemRegex.exec(xmlContent)) !== null) {\n        const itemContent = itemMatch[1];\n        const _record: Record<string, unknown> = {};\n\n        // Extract field _values\n        const fieldRegex = /<([^>]+)>(.*?)<\\/\\1>/g;\n        let fieldMatch;\n\n        while ((fieldMatch = fieldRegex.exec(itemContent)) !== null) {\n          const fieldName = fieldMatch[1];\n          const fieldValue = this.unescapeXML(fieldMatch[2]);\n          _record[fieldName] = fieldValue;\n        }\n\n        _records.push(_record);\n      }\n\n      return _records;\n    } catch (_error) {\n      throw new Error(`XML parsing failed; ${getErrorMessage(_error)}`);\n    }\n  }\n\n  private unescapeXML(_str: string): string {\n    return _str\n      .replace(/&amp;/g, \"&\")\n      .replace(/&lt;/g, \"<\")\n      .replace(/&gt;/g, \">\")\n      .replace(/&quot;/g, '\"')\n      .replace(/&#x27;/g, \"'\");\n  }\n\n  private escapeXML(_str: string): string {\n    return _str\n      .replace(/&/g, \"&amp;\")\n      .replace(/</g, \"&lt;\")\n      .replace(/>/g, \"&gt;\")\n      .replace(/\"/g, \"&quot;\")\n      .replace(/'/g, \"&#x27;\");\n  }\n}\n\nexport class YAMLFormatHandler extends FormatHandler {\n  async serialize(data: unknown[], _options: unknown): Promise<string> {\n    // Enhanced YAML serialization implementation\n    try {\n      let yaml = \"# Generated YAML\\n---\\n\";\n\n      if (Array.isArray(data)) {\n        for (let i = 0; i < data.length; i++) {\n          yaml += `- # Item ${i + 1}\\n`;\n          yaml += this.serializeObject(data[i], 2);\n        }\n      } else {\n        yaml += this.serializeObject(data, 0);\n      }\n\n      return yaml;\n    } catch (_error) {\n      throw new Error(`YAML serialization failed ${getErrorMessage(_error)}`);\n    }\n  }\n\n  async deserialize(data: string, _options: unknown): Promise<unknown[]> {\n    // Enhanced YAML deserialization implementation\n    try {\n      // Basic YAML parsing for simple structures\n      const _lines = data\n        .split(\"\\n\")\n        .filter((line): boolean => line.trim() && !line.trim().startsWith(\"#\"));\n      const _records: unknown[] = [];\n      let currentRecord: Record<string, unknown> = {};\n\n      for (const line of _lines) {\n        if (line.trim() === \"---\") continue;\n\n        if (line.startsWith(\"- \")) {\n          if (Object.keys(currentRecord).length > 0) {\n            _records.push(currentRecord);\n            currentRecord = {};\n          }\n          continue;\n        }\n\n        const match = line.match(/^\\s*([^:]+):\\s*(.*)$/);\n        if (match) {\n          const key = match[1].trim();\n          const _value = this.parseYAMLValue(match[2].trim());\n          currentRecord[key] = _value;\n        }\n      }\n\n      if (Object.keys(currentRecord).length > 0) {\n        _records.push(currentRecord);\n      }\n\n      return _records.length > 0 ? _records : [data];\n    } catch (_error) {\n      throw new Error(`YAML parsing failed; ${getErrorMessage(_error)}`);\n    }\n  }\n\n  private serializeObject(obj: unknown, indent: number): string {\n    let _result = \"\";\n    const spaces = \" \".repeat(indent);\n\n    if (typeof obj !== \"object\" || obj === null) {\n      return `${spaces}${this.escapeYAMLValue(obj)}\\n`;\n    }\n\n    for (const [key, _value] of Object.entries(obj)) {\n      if (typeof _value === \"object\" && _value !== null) {\n        _result += `${spaces}${key}:\\n${this.serializeObject(_value, indent + 2)}`;\n      } else {\n        _result += `${spaces}${key}: ${this.escapeYAMLValue(_value)}\\n`;\n      }\n    }\n\n    return _result;\n  }\n\n  private parseYAMLValue(_value: string): unknown {\n    if (_value === \"null\") return null;\n    if (_value === \"true\") return true;\n    if (_value === \"false\") return false;\n    if (/^-?\\d+$/.test(_value)) return parseInt(_value, 10);\n    if (/^-?\\d*\\.\\d+$/.test(_value)) return parseFloat(_value);\n    if (_value.startsWith('\"') && _value.endsWith('\"')) {\n      return _value.slice(1, -1);\n    }\n    return _value;\n  }\n\n  private escapeYAMLValue(_value: unknown): string {\n    if (_value === null) return \"null\";\n    if (typeof _value === \"boolean\") return _value.toString();\n    if (typeof _value === \"number\") return _value.toString();\n    if (typeof _value === \"string\") {\n      if (_value.includes(\":\") || _value.includes(\"\\n\") || _value.includes('\"')) {\n        return `\"${_value.replace(/\"/g, '\\\\\"')}\"`;\n      }\n      return _value;\n    }\n    return JSON.stringify(_value);\n  }\n}\n\nexport class BinaryFormatHandler extends FormatHandler {\n  async serialize(data: unknown[], _options: unknown): Promise<Buffer> {\n    try {\n      // Enhanced binary serialization with metadata\n      const jsonData = JSON.stringify(data);\n      const metadata = {\n        version: \"1.0\",\n        timestamp: new Date().toISOString(),\n        recordCount: Array.isArray(data) ? data.length : 1,\n        encoding: \"utf8\",\n      };\n\n      const metadataBuffer = Buffer.from(JSON.stringify(metadata), \"utf8\");\n      const dataBuffer = Buffer.from(jsonData, \"utf8\");\n\n      // Create header with metadata length (4 bytes) + metadata + data\n      const headerBuffer = Buffer.alloc(4);\n      headerBuffer.writeUInt32LE(metadataBuffer.length, 0);\n\n      return Buffer.concat([headerBuffer, metadataBuffer, dataBuffer]);\n    } catch (_error) {\n      throw new Error(\n        `Binary serialization failed ${getErrorMessage(_error)}`,\n      );\n    }\n  }\n\n  async deserialize(data: unknown, _options: unknown): Promise<unknown[]> {\n    try {\n      // Handle both Buffer and string inputs\n      const buffer = Buffer.isBuffer(data) ? data : Buffer.from(String(data), \"utf8\");\n\n      if (buffer.length < 4) {\n        throw new Error(\"Invalid binary data: too short\");\n      }\n\n      // Read metadata length\n      const metadataLength = buffer.readUInt32LE(0);\n\n      if (buffer.length < 4 + metadataLength) {\n        throw new Error(\"Invalid binary data: metadata length mismatch\");\n      }\n\n      // Extract metadata\n      const metadataBuffer = buffer.subarray(4, 4 + metadataLength);\n      const metadata = JSON.parse(metadataBuffer.toString(\"utf8\"));\n\n      // Extract data\n      const dataBuffer = buffer.subarray(4 + metadataLength);\n      const jsonData = dataBuffer.toString(metadata.encoding || \"utf8\");\n      const _parsedData = JSON.parse(jsonData);\n\n      return Array.isArray(_parsedData) ? _parsedData : [_parsedData];\n    } catch (_error) {\n      throw new Error(\n        `Binary deserialization failed ${getErrorMessage(_error)}`,\n      );\n    }\n  }\n}\n\nexport class EncryptedFormatHandler extends FormatHandler {\n  private encryptionService?: EncryptionService;\n\n  setEncryptionService(encryptionService: EncryptionService): void {\n    this.encryptionService = encryptionService;\n  }\n\n  async serialize(data: unknown[], _options: unknown): Promise<string> {\n    if (!this.encryptionService) {\n      throw new Error(\n        \"EncryptionService not configured for EncryptedFormatHandler\",\n      );\n    }\n\n    try {\n      // First serialize to JSON\n      const jsonData = JSON.stringify(data);\n\n      // Then encrypt using the encryption service\n      const encryptedData = await this.encryptionService.encrypt(jsonData);\n\n      return encryptedData;\n    } catch (_error) {\n      throw new Error(\n        `Encryption serialization failed ${getErrorMessage(_error)}`,\n      );\n    }\n  }\n\n  async deserialize(data: string, _options: unknown): Promise<unknown[]> {\n    if (!this.encryptionService) {\n      throw new Error(\n        \"EncryptionService not configured for EncryptedFormatHandler\",\n      );\n    }\n\n    try {\n      // First decrypt the data\n      const decryptedData = await this.encryptionService.decrypt(data);\n\n      // Then parse as JSON\n      const _parsedData = JSON.parse(decryptedData);\n\n      // Ensure it's an array\n      return Array.isArray(_parsedData) ? _parsedData : [_parsedData];\n    } catch (_error) {\n      throw new Error(\n        `Decryption deserialization failed ${getErrorMessage(_error)}`,\n      );\n    }\n  }\n}\n\n// Data source connection implementations\nexport class DataConnectionManager {\n  // Data connection implementations\n  async connectToDataSource(source: DataSource): Promise<DataConnection> {\n    try {\n      switch (source.type) {\n        case \"database\":\n          return await this.connectToDatabase(source);\n        case \"file\":\n          return await this.connectToFile(source);\n        case \"api\":\n          return await this.connectToAPI(source);\n        case \"s3\":\n          return await this.connectToS3(source);\n        default:\n          throw new Error(`Unsupported data source type: ${source.type}`);\n      }\n    } catch (_error) {\n      throw new Error(\n        `Failed to connect to data source: ${getErrorMessage(_error)}`,\n      );\n    }\n  }\n\n  async validateDatabaseConnection(\n    source: DataSource | DataDestination,\n  ): Promise<void> {\n    // Database connection validation\n    if (!source.credentials) {\n      throw new Error(\"Database credentials required\");\n    }\n\n    // Simulate database connection check\n    const { host, port, database } = source.credentials;\n    if (!host || !port || !database) {\n      throw new Error(\"Invalid database connection parameters\");\n    }\n\n    logger.info(`Database connection validated: ${host}:${port}/${database}`);\n  }\n\n  async validateFileAccess(source: DataSource): Promise<void> {\n    // File access validation\n    const filePath = source.location;\n\n    try {\n      // Simulate file access check\n      if (!filePath.includes(\"/\") && !filePath.includes(\"\\\\\")) {\n        throw new Error(\"Invalid file path format\");\n      }\n\n      logger.info(`File access validated: ${filePath}`);\n    } catch (_error) {\n      throw new Error(\n        `File access validation failed ${getErrorMessage(_error)}`,\n      );\n    }\n  }\n\n  async validateFileWriteAccess(\n    destination: DataDestination,\n  ): Promise<void> {\n    // File write access validation\n    const filePath = destination.location;\n\n    try {\n      // Simulate write access check\n      if (!filePath.includes(\"/\") && !filePath.includes(\"\\\\\")) {\n        throw new Error(\"Invalid file path format\");\n      }\n\n      logger.info(`File write access validated: ${filePath}`);\n    } catch (_error) {\n      throw new Error(\n        `File write access validation failed ${getErrorMessage(_error)}`,\n      );\n    }\n  }\n\n  async validateAPIEndpoint(\n    source: DataSource | DataDestination,\n  ): Promise<void> {\n    // API endpoint validation\n    const endpoint = source.location;\n\n    try {\n      // Validate URL format\n      const url = new URL(endpoint);\n      if (![\"http:\", \"https:\"].includes(url.protocol)) {\n        throw new Error(\"Invalid API endpoint protocol\");\n      }\n\n      logger.info(`API endpoint validated: ${endpoint}`);\n    } catch (_error) {\n      throw new Error(\n        `API endpoint validation failed ${getErrorMessage(_error)}`,\n      );\n    }\n  }\n\n  async validateS3Access(source: DataSource): Promise<void> {\n    // S3 access validation\n    if (!source.credentials) {\n      throw new Error(\"S3 credentials required\");\n    }\n\n    const { accessKeyId, secretAccessKey, region } = source.credentials;\n    if (!accessKeyId || !secretAccessKey || !region) {\n      throw new Error(\"Invalid S3 credentials\");\n    }\n\n    logger.info(`S3 read access validated: ${source.location}`);\n  }\n\n  async validateS3WriteAccess(\n    destination: DataDestination,\n  ): Promise<void> {\n    // S3 write access validation\n    if (!destination.credentials) {\n      throw new Error(\"S3 credentials required\");\n    }\n\n    const { accessKeyId, secretAccessKey, region } = destination.credentials;\n    if (!accessKeyId || !secretAccessKey || !region) {\n      throw new Error(\"Invalid S3 credentials\");\n    }\n\n    logger.info(`S3 write access validated: ${destination.location}`);\n  }\n\n  private async connectToDatabase(source: DataSource): Promise<DataConnection> {\n    // Database connection implementation\n    const connection = {\n      type: \"database\",\n      host: source.credentials?.host,\n      port: source.credentials?.port,\n      database: source.credentials?.database,\n      connected: true,\n      query: async (sql: string): Promise<unknown[]> => {\n        logger.info(`Executing query: ${sql}`);\n        return []; // Mock _result\n      },\n      close: async (): Promise<void> => {\n        logger.info(\"Database connection closed\");\n      },\n    };\n\n    return connection;\n  }\n\n  private async connectToFile(source: DataSource): Promise<DataConnection> {\n    // File connection implementation\n    const connection = {\n      type: \"file\",\n      _path: source.location,\n      connected: true,\n      read: async (): Promise<Buffer> => {\n        logger.info(`Reading file: ${source.location}`);\n        return Buffer.from(\"{}\"); // Mock data\n      },\n      close: async (): Promise<void> => {\n        logger.info(\"File connection closed\");\n      },\n    };\n\n    return connection;\n  }\n\n  private async connectToAPI(source: DataSource): Promise<DataConnection> {\n    // API connection implementation\n    const connection = {\n      type: \"api\",\n      endpoint: source.location,\n      connected: true,\n      fetch: async (options: unknown = {}): Promise<unknown> => {\n        logger.info(`Fetching from API: ${source.location}`);\n        void options;\n        return { data: [] }; // Mock response\n      },\n      close: async (): Promise<void> => {\n        logger.info(\"API connection closed\");\n      },\n    };\n\n    return connection;\n  }\n\n  private async connectToS3(source: DataSource): Promise<DataConnection> {\n    // S3 connection implementation\n    const connection = {\n      type: \"s3\",\n      bucket: source.location,\n      connected: true,\n      getObject: async (key: string): Promise<{ Body: Buffer }> => {\n        logger.info(`Getting S3 object: ${source.location}/${key}`);\n        return { Body: Buffer.from(\"{}\") }; // Mock data\n      },\n      listObjects: async (prefix?: string): Promise<{ Contents: unknown[] }> => {\n        logger.info(`Listing S3 objects: ${source.location}/${prefix || \"\"}`);\n        return { Contents: [] }; // Mock list\n      },\n      close: async (): Promise<void> => {\n        logger.info(\"S3 connection closed\");\n      },\n    };\n\n    return connection;\n  }\n}\n\n// Compliance engines (simplified implementations)\n\nexport abstract class ComplianceEngine {\n  abstract validateOperation(\n    _request: ExportRequest,\n    _operation: \"export\" | \"import\",\n  ): Promise<void>;\n  abstract generateComplianceResult(\n    _request: ExportRequest,\n  ): Promise<ComplianceResult>;\n}\n\nexport class GDPRComplianceEngine extends ComplianceEngine {\n  constructor(private config: GDPRConfig) {\n    super();\n  }\n\n  async validateOperation(\n    request: ExportRequest,\n    _operation: \"export\" | \"import\",\n  ): Promise<void> {\n    if (\n      this.config.consentTracking &&\n      !request.compliance?.dataSubjectConsent\n    ) {\n      throw new Error(\"GDPR violation: Data subject consent required\");\n    }\n  }\n\n  async generateComplianceResult(\n    _request: ExportRequest,\n  ): Promise<ComplianceResult> {\n    return {\n      compliant: true,\n      framework: \"GDPR\",\n      violations: [],\n      recommendations: [],\n    };\n  }\n}\n\nexport class HIPAAComplianceEngine extends ComplianceEngine {\n  constructor(private config: HIPAAConfig) {\n    super();\n  }\n\n  async validateOperation(\n    request: ExportRequest,\n    _operation: \"export\" | \"import\",\n  ): Promise<void> {\n    if (this.config.minimumNecessary && !request.compliance?.minimumNecessary) {\n      throw new Error(\"HIPAA violation: Minimum necessary standard not met\");\n    }\n  }\n\n  async generateComplianceResult(\n    _request: ExportRequest,\n  ): Promise<ComplianceResult> {\n    return {\n      compliant: true,\n      framework: \"HIPAA\",\n      violations: [],\n      recommendations: [],\n    };\n  }\n}\n\nexport class SOXComplianceEngine extends ComplianceEngine {\n  constructor(private config: SOXConfig) {\n    super();\n  }\n\n  async validateOperation(\n    request: ExportRequest,\n    _operation: \"export\" | \"import\",\n  ): Promise<void> {\n    if (this.config.auditTrail && !request.compliance?.auditRequired) {\n      throw new Error(\"SOX violation: Audit trail required for financial data\");\n    }\n  }\n\n  async generateComplianceResult(\n    _request: ExportRequest,\n  ): Promise<ComplianceResult> {\n    return {\n      compliant: true,\n      framework: \"SOX\",\n      violations: [],\n      recommendations: [],\n    };\n  }\n}\n\n// Validation _engine and encryption service (simplified implementations)\n\nexport class ValidationEngine {\n  constructor(private readonly _config: ValidationConfig) {}\n\n  async validateQuality(_data: unknown[]): Promise<QualityValidationResult> {\n    return {\n      score: 0.95,\n      metrics: {\n        completeness: 0.95,\n        uniqueness: 0.98,\n        validity: 0.92,\n        consistency: 0.96,\n      },\n      issues: [],\n    };\n  }\n\n  async validateSchema(\n    _data: unknown[],\n    format: SupportedFormat,\n  ): Promise<SchemaValidationResult> {\n    return {\n      valid: true,\n      schema: format,\n      version: \"1.0\",\n      errors: [],\n    };\n  }\n}\n\nexport class EncryptionService {\n  constructor(private readonly config: PorterEncryptionConfig) {}\n\n  async encrypt(data: unknown): Promise<string> {\n    const payload = typeof data === \"string\" ? data : JSON.stringify(data);\n    if (!this.config.enabled) return payload;\n    return Buffer.from(payload, \"utf8\").toString(\"base64\");\n  }\n\n  async decrypt(encryptedData: unknown): Promise<string> {\n    const payload =\n      typeof encryptedData === \"string\"\n        ? encryptedData\n        : JSON.stringify(encryptedData);\n    if (!this.config.enabled) return payload;\n    return Buffer.from(payload, \"base64\").toString(\"utf8\");\n  }\n}\n\nexport function createDefaultFormatHandlers(\n  encryptionService: EncryptionService,\n): Map<SupportedFormat, FormatHandler> {\n  const handlers = new Map<SupportedFormat, FormatHandler>();\n\n  handlers.set(\"json\", new JSONFormatHandler());\n  handlers.set(\"csv\", new CSVFormatHandler());\n  handlers.set(\"xml\", new XMLFormatHandler());\n  handlers.set(\"yaml\", new YAMLFormatHandler());\n  handlers.set(\"binary\", new BinaryFormatHandler());\n\n  const encrypted = new EncryptedFormatHandler();\n  encrypted.setEncryptionService(encryptionService);\n  handlers.set(\"encrypted\", encrypted);\n\n  return handlers;\n}\n\nexport function createDefaultComplianceEngines(\n  compliance: DataPorterConfig[\"compliance\"],\n): Map<string, ComplianceEngine> {\n  const engines = new Map<string, ComplianceEngine>();\n\n  if (compliance.gdpr.enabled) {\n    engines.set(\"gdpr\", new GDPRComplianceEngine(compliance.gdpr));\n  }\n  if (compliance.hipaa.enabled) {\n    engines.set(\"hipaa\", new HIPAAComplianceEngine(compliance.hipaa));\n  }\n  if (compliance.sox.enabled) {\n    engines.set(\"sox\", new SOXComplianceEngine(compliance.sox));\n  }\n\n  return engines;\n}\n","export type PorterJobStatus = {\n  id: string;\n  type: \"export\" | \"import\";\n  status: \"pending\" | \"running\" | \"completed\" | \"failed\" | \"cancelled\";\n  startTime: Date;\n  endTime?: Date;\n  duration?: number;\n  error?: string;\n};\n\nexport class PorterJobImpl {\n  private status: PorterJobStatus[\"status\"] = \"pending\";\n  private startTime: Date = new Date();\n  private endTime?: Date;\n  private error?: Error;\n\n  constructor(\n    private readonly id: string,\n    private readonly type: PorterJobStatus[\"type\"],\n  ) {}\n\n  start(): void {\n    this.status = \"running\";\n    this.startTime = new Date();\n  }\n\n  complete(): void {\n    this.status = \"completed\";\n    this.endTime = new Date();\n  }\n\n  fail(err: unknown): void {\n    this.status = \"failed\";\n    this.endTime = new Date();\n    this.error = err instanceof Error ? err : new Error(String(err));\n  }\n\n  cancel(): void {\n    this.status = \"cancelled\";\n    this.endTime = new Date();\n  }\n\n  getStatus(): PorterJobStatus {\n    return {\n      id: this.id,\n      type: this.type,\n      status: this.status,\n      startTime: this.startTime,\n      endTime: this.endTime,\n      duration: this.endTime\n        ? this.endTime.getTime() - this.startTime.getTime()\n        : undefined,\n      error: this.error?.message,\n    };\n  }\n}\n\n\n","/**\n * MARIA Memory System - Phase 4: Enterprise Data Porter (implementation)\n *\n * NOTE: This module was refactored to satisfy lint constraints (max-lines/no-console/no-explicit-any)\n * while keeping the exported API surface stable.\n */\n\nimport { EventEmitter } from \"node:events\";\nimport * as crypto from \"crypto\";\nimport { defaultLogger as logger } from \"../../../adapters/logging/default\";\nimport type {\n  ChecksumAlgorithm,\n  ComplianceResult,\n  DataDestination,\n  DataFilter,\n  DataPorterConfig,\n  DataSource,\n  ExportRequest,\n  ImportRequest,\n  PorterResult,\n  SupportedFormat,\n} from \"./enterprise-data-porter.types\";\nimport type {\n  ComplianceEngine,\n  FormatHandler} from \"./enterprise-data-porter.internal\";\nimport {\n  BinaryFormatHandler,\n  CSVFormatHandler,\n  DataConnectionManager,\n  EncryptedFormatHandler,\n  EncryptionService,\n  GDPRComplianceEngine,\n  HIPAAComplianceEngine,\n  JSONFormatHandler,\n  SOXComplianceEngine,\n  ValidationEngine,\n  XMLFormatHandler,\n  YAMLFormatHandler,\n} from \"./enterprise-data-porter.internal\";\nimport { PorterJobImpl, type PorterJobStatus } from \"./enterprise-data-porter.job\";\n\nfunction getErrorMessage(err: unknown): string {\n  return err instanceof Error ? err.message : String(err);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction getRecord(value: unknown): Record<string, unknown> {\n  return isRecord(value) ? value : {};\n}\n\nexport class EnterpriseDataPorter extends EventEmitter {\n  private readonly config: DataPorterConfig;\n  private readonly activeJobs = new Map<string, PorterJobImpl>();\n  private readonly formatHandlers = new Map<SupportedFormat, FormatHandler>();\n  private readonly complianceEngines = new Map<string, ComplianceEngine>();\n\n  private readonly validationEngine: ValidationEngine;\n  private readonly encryptionService: EncryptionService;\n  private readonly dataConnectionManager: DataConnectionManager;\n\n  constructor(config: DataPorterConfig) {\n    super();\n    this.config = config;\n    this.validationEngine = new ValidationEngine(this.config.validation);\n    this.encryptionService = new EncryptionService(this.config.encryption);\n    this.dataConnectionManager = new DataConnectionManager();\n\n    this.initializeFormatHandlers();\n    this.initializeComplianceEngines();\n  }\n\n  getJobStatus(jobId: string): PorterJobStatus | null {\n    const job = this.activeJobs.get(jobId);\n    return job ? job.getStatus() : null;\n  }\n\n  cancelJob(jobId: string): boolean {\n    const job = this.activeJobs.get(jobId);\n    if (!job) return false;\n    job.cancel();\n    this.emit(\"jobCancelled\", { jobId });\n    this.activeJobs.delete(jobId);\n    return true;\n  }\n\n  async exportData(request: ExportRequest): Promise<PorterResult> {\n    const startTime = Date.now();\n    const job = new PorterJobImpl(request.id, \"export\");\n\n    try {\n      this.activeJobs.set(request.id, job);\n      job.start();\n      this.emit(\"exportStarted\", request);\n\n      await this.validateExportRequest(request);\n      if (request.compliance) {\n        await this.validateCompliance(request, \"export\");\n      }\n\n      const sourceData = await this.loadSourceData(request.source);\n      const filtered = this.applyFilters(sourceData, request.filters || []);\n\n      const handler = this.getFormatHandler(request.format);\n      const serialized = await handler.serialize(filtered, request.options);\n\n      let finalData: unknown = serialized;\n      if (request.options.encryption) {\n        finalData = await this.encryptionService.encrypt(serialized);\n      }\n      if (request.options.compression) {\n        finalData = await this.compressData(finalData);\n      }\n\n      await this.writeToDestination(finalData, request.destination);\n      const checksums = await this.generateChecksums(finalData);\n\n      job.complete();\n\n      const result: PorterResult = {\n        success: true,\n        requestId: request.id,\n        _records: {\n          total: sourceData.length,\n          processed: filtered.length,\n          _successful: filtered.length,\n          _failed: 0,\n          skipped: sourceData.length - filtered.length,\n          duplicates: 0,\n        },\n        validation: {\n          schema: { valid: true, schema: \"\", version: \"\", errors: [] },\n          integrity: { valid: true, _checksums: checksums, verified: true },\n          quality: await this.validateDataQuality(filtered),\n        },\n        compliance: await this.generateComplianceResult(request),\n        performance: {\n          duration: Date.now() - startTime,\n          throughput:\n            filtered.length / Math.max(1, (Date.now() - startTime) / 1000),\n          memoryUsage: process.memoryUsage().heapUsed,\n          networkIO: 0,\n          diskIO: 0,\n        },\n      };\n\n      this.emit(\"exportCompleted\", request, result);\n      return result;\n    } catch (err: unknown) {\n      job.fail(err instanceof Error ? err : new Error(getErrorMessage(err)));\n\n      const result: PorterResult = {\n        success: false,\n        requestId: request.id,\n        _records: {\n          total: 0,\n          processed: 0,\n          _successful: 0,\n          _failed: 1,\n          skipped: 0,\n          duplicates: 0,\n        },\n        validation: {\n          schema: { valid: false, schema: \"\", version: \"\", errors: [] },\n          integrity: {\n            valid: false,\n            _checksums: { md5: \"\", sha256: \"\", sha512: \"\", crc32: \"\" },\n            verified: false,\n          },\n          quality: {\n            score: 0,\n            metrics: {\n              completeness: 0,\n              uniqueness: 0,\n              validity: 0,\n              consistency: 0,\n            },\n            issues: [],\n          },\n        },\n        compliance: await this.generateComplianceResult(request),\n        performance: {\n          duration: Date.now() - startTime,\n          throughput: 0,\n          memoryUsage: process.memoryUsage().heapUsed,\n          networkIO: 0,\n          diskIO: 0,\n        },\n        errors: [\n          {\n            code: \"EXPORT_FAILED\",\n            message: getErrorMessage(err),\n          },\n        ],\n      };\n\n      this.emit(\"exportFailed\", request, result, err);\n      return result;\n    } finally {\n      this.activeJobs.delete(request.id);\n    }\n  }\n\n  async importData(request: ImportRequest): Promise<PorterResult> {\n    const startTime = Date.now();\n    const job = new PorterJobImpl(request.id, \"import\");\n\n    try {\n      this.activeJobs.set(request.id, job);\n      job.start();\n      this.emit(\"importStarted\", request);\n\n      await this.validateImportRequest(request);\n      const imported = await this.loadSourceData(request.source);\n\n      const result: PorterResult = {\n        success: true,\n        requestId: request.id,\n        _records: {\n          total: imported.length,\n          processed: imported.length,\n          _successful: imported.length,\n          _failed: 0,\n          skipped: 0,\n          duplicates: 0,\n        },\n        validation: {\n          schema: { valid: true, schema: \"\", version: \"\", errors: [] },\n          integrity: {\n            valid: true,\n            _checksums: { md5: \"\", sha256: \"\", sha512: \"\", crc32: \"\" },\n            verified: true,\n          },\n          quality: await this.validateDataQuality(imported),\n        },\n        compliance: { compliant: true, framework: \"\", violations: [], recommendations: [] },\n        performance: {\n          duration: Date.now() - startTime,\n          throughput:\n            imported.length / Math.max(1, (Date.now() - startTime) / 1000),\n          memoryUsage: process.memoryUsage().heapUsed,\n          networkIO: 0,\n          diskIO: 0,\n        },\n      };\n\n      job.complete();\n      this.emit(\"importCompleted\", request, result);\n      return result;\n    } catch (err: unknown) {\n      job.fail(err instanceof Error ? err : new Error(getErrorMessage(err)));\n\n      const result: PorterResult = {\n        success: false,\n        requestId: request.id,\n        _records: {\n          total: 0,\n          processed: 0,\n          _successful: 0,\n          _failed: 1,\n          skipped: 0,\n          duplicates: 0,\n        },\n        validation: {\n          schema: { valid: false, schema: \"\", version: \"\", errors: [] },\n          integrity: {\n            valid: false,\n            _checksums: { md5: \"\", sha256: \"\", sha512: \"\", crc32: \"\" },\n            verified: false,\n          },\n          quality: {\n            score: 0,\n            metrics: {\n              completeness: 0,\n              uniqueness: 0,\n              validity: 0,\n              consistency: 0,\n            },\n            issues: [],\n          },\n        },\n        compliance: { compliant: true, framework: \"\", violations: [], recommendations: [] },\n        performance: {\n          duration: Date.now() - startTime,\n          throughput: 0,\n          memoryUsage: process.memoryUsage().heapUsed,\n          networkIO: 0,\n          diskIO: 0,\n        },\n        errors: [\n          {\n            code: \"IMPORT_FAILED\",\n            message: getErrorMessage(err),\n          },\n        ],\n      };\n\n      this.emit(\"importFailed\", request, result, err);\n      return result;\n    } finally {\n      this.activeJobs.delete(request.id);\n    }\n  }\n\n  private initializeFormatHandlers(): void {\n    this.formatHandlers.set(\"json\", new JSONFormatHandler());\n    this.formatHandlers.set(\"csv\", new CSVFormatHandler());\n    this.formatHandlers.set(\"xml\", new XMLFormatHandler());\n    this.formatHandlers.set(\"yaml\", new YAMLFormatHandler());\n    this.formatHandlers.set(\"binary\", new BinaryFormatHandler());\n\n    const encrypted = new EncryptedFormatHandler();\n    encrypted.setEncryptionService(this.encryptionService);\n    this.formatHandlers.set(\"encrypted\", encrypted);\n  }\n\n  private initializeComplianceEngines(): void {\n    this.complianceEngines.set(\"GDPR\", new GDPRComplianceEngine(this.config.compliance.gdpr));\n    this.complianceEngines.set(\n      \"HIPAA\",\n      new HIPAAComplianceEngine(this.config.compliance.hipaa),\n    );\n    this.complianceEngines.set(\"SOX\", new SOXComplianceEngine(this.config.compliance.sox));\n  }\n\n  private getFormatHandler(format: SupportedFormat): FormatHandler {\n    const handler = this.formatHandlers.get(format);\n    if (!handler) throw new Error(`Unsupported format: ${format}`);\n    return handler;\n  }\n\n  private async validateExportRequest(_request: ExportRequest): Promise<void> {\n    // Placeholder for real validation\n  }\n\n  private async validateImportRequest(_request: ImportRequest): Promise<void> {\n    // Placeholder for real validation\n  }\n\n  private async validateCompliance(\n    request: ExportRequest,\n    operation: \"export\" | \"import\",\n  ): Promise<void> {\n    if (!request.compliance) return;\n    const engine = this.complianceEngines.get(request.compliance.framework);\n    if (!engine) return;\n    await engine.validateOperation(request, operation);\n  }\n\n  private async generateComplianceResult(\n    request: ExportRequest,\n  ): Promise<ComplianceResult> {\n    if (!request.compliance) {\n      return { compliant: true, framework: \"\", violations: [], recommendations: [] };\n    }\n    const engine = this.complianceEngines.get(request.compliance.framework);\n    if (!engine) {\n      return {\n        compliant: true,\n        framework: request.compliance.framework,\n        violations: [],\n        recommendations: [],\n      };\n    }\n    return await engine.generateComplianceResult(request);\n  }\n\n  private async loadSourceData(_source: DataSource): Promise<unknown[]> {\n    // The real implementation would load from DB/File/API/S3.\n    return [];\n  }\n\n  private applyFilters(data: unknown[], filters: DataFilter[]): unknown[] {\n    if (!filters.length) return data;\n    return data.filter((record): boolean =>\n      filters.every((filter): boolean => this.evaluateFilter(record, filter)),\n    );\n  }\n\n  private evaluateFilter(record: unknown, filter: DataFilter): boolean {\n    const obj = getRecord(record);\n    const value = obj[filter.field];\n    switch (filter.operator) {\n      case \"eq\":\n        return value === filter._value;\n      case \"neq\":\n        return value !== filter._value;\n      default:\n        return true;\n    }\n  }\n\n  private async validateDataQuality(_data: unknown[]): Promise<PorterResult[\"validation\"][\"quality\"]> {\n    // Keep this lightweight; detailed validation lives in ValidationEngine.\n    return {\n      score: 1.0,\n      metrics: { completeness: 1, uniqueness: 1, validity: 1, consistency: 1 },\n      issues: [],\n    };\n  }\n\n  private async compressData(data: unknown): Promise<unknown> {\n    // Placeholder (compression pipeline lives elsewhere)\n    return data;\n  }\n\n  private async writeToDestination(data: unknown, destination: DataDestination): Promise<void> {\n    // Minimal connection validation + stubbed write\n    try {\n      const conn = await this.dataConnectionManager.connectToDataSource(\n        destination as unknown as DataSource,\n      );\n      await conn.close();\n      logger.info(\"writeToDestination complete\", { type: destination.type });\n      void data;\n    } catch (err: unknown) {\n      throw new Error(`Failed to write to destination: ${getErrorMessage(err)}`);\n    }\n  }\n\n  private async generateChecksums(\n    data: unknown,\n  ): Promise<Record<ChecksumAlgorithm, string>> {\n    const dataStr = typeof data === \"string\" ? data : JSON.stringify(data);\n    return {\n      md5: crypto.createHash(\"md5\").update(dataStr).digest(\"hex\"),\n      sha256: crypto.createHash(\"sha256\").update(dataStr).digest(\"hex\"),\n      sha512: crypto.createHash(\"sha512\").update(dataStr).digest(\"hex\"),\n      crc32: crypto.createHash(\"md5\").update(dataStr).digest(\"hex\").slice(0, 8),\n    };\n  }\n}\n","/**\r\n * Access Control Manager\r\n * Enterprise-grade access control system for MARIA\r\n * Implements hierarchical RBAC with fine-grained permissions\r\n */\r\n\r\nimport { EventEmitter } from \"node:events\";\r\n\r\nexport interface User {\r\n  id: string;\r\n  email: string;\r\n  name: string;\r\n  roles: Role[];\r\n  permissions?: PermissionSet;\r\n  organizationId: string;\r\n  teamIds?: string[];\r\n  departmentId?: string;\r\n  attributes?: Record<string, unknown>;\r\n}\r\n\r\nexport interface ResourceIdentifier {\r\n  resource: string;\r\n  id?: string;\r\n  /**\r\n   * Optional additional resource metadata used by enterprise compliance modules.\r\n   * Keep these optional to avoid forcing all call-sites to provide them.\r\n   */\r\n  type?: string;\r\n  path?: string;\r\n  _path?: string;\r\n  classification?: {\r\n    level?: string;\r\n    tags?: string[];\r\n  };\r\n}\r\n\r\nexport type _ResourceIdentifier = ResourceIdentifier;\r\n\r\nexport interface AccessRequest {\r\n  operation: \"read\" | \"write\" | \"delete\" | \"execute\" | \"share\" | \"admin\";\r\n  resource: ResourceIdentifier;\r\n  context?: Record<string, unknown>;\r\n}\r\n\r\nexport interface Role {\r\n  id: string;\r\n  name: string;\r\n  level: \"individual\" | \"team\" | \"department\" | \"organization\";\r\n  permissions: PermissionSet;\r\n  priority: number;\r\n  inheritFromParent: boolean;\r\n  overrideChild: boolean;\r\n}\r\n\r\nexport interface PermissionSet {\r\n  resources: Record<string, ResourcePermission>;\r\n  actions: string[];\r\n  conditions?: PermissionCondition[];\r\n}\r\n\r\nexport interface ResourcePermission {\r\n  read: boolean;\r\n  write: boolean;\r\n  delete: boolean;\r\n  execute: boolean;\r\n  share?: boolean;\r\n  admin?: boolean;\r\n}\r\n\r\nexport interface PermissionCondition {\r\n  type: \"time\" | \"location\" | \"resource\" | \"custom\";\r\n  operator: \"equals\" | \"contains\" | \"matches\" | \"between\";\r\n  value: unknown;\r\n}\r\n\r\nexport interface HierarchyLevel {\r\n  level: Role[\"level\"];\r\n  priority: number;\r\n  inheritFromParent: boolean;\r\n  overrideChild: boolean;\r\n}\r\n\r\nexport interface DataClassification {\r\n  levels: string[];\r\n  defaultLevel: string;\r\n  rules: ClassificationRule[];\r\n}\r\n\r\nexport interface ClassificationRule {\r\n  pattern: string | RegExp;\r\n  level: string;\r\n  tags?: string[];\r\n}\r\n\r\nexport interface AccessControlConfig {\r\n  organizationId: string;\r\n  hierarchyLevels: HierarchyLevel[];\r\n  defaultPermissions: PermissionSet;\r\n  dataClassification: DataClassification;\r\n  auditEnabled: boolean;\r\n}\r\n\r\nexport interface AccessDecision {\r\n  allowed: boolean;\r\n  reason?: string;\r\n  appliedRoles?: Role[];\r\n  conditions?: PermissionCondition[];\r\n}\r\n\r\nexport class AccessControlManager extends EventEmitter {\r\n  private config: AccessControlConfig;\r\n  private users: Map<string, User> = new Map();\r\n  private roles: Map<string, Role> = new Map();\r\n  private sessions: Map<string, SessionInfo> = new Map();\r\n  private cache: Map<string, CachedDecision> = new Map();\r\n\r\n  constructor(config: AccessControlConfig) {\r\n    super();\r\n    this.config = config;\r\n    this.initialize();\r\n  }\r\n\r\n  private initialize(): void {\r\n    // Initialize default roles based on hierarchy levels\r\n    this.config.hierarchyLevels.forEach((level): void => {\r\n      const defaultRole: Role = {\r\n        id: `default-${level.level}`,\r\n        name: `Default ${level.level} Role`,\r\n        level: level.level,\r\n        permissions: this.config.defaultPermissions,\r\n        priority: level.priority,\r\n        inheritFromParent: level.inheritFromParent,\r\n        overrideChild: level.overrideChild,\r\n      };\r\n      this.roles.set(defaultRole.id, defaultRole);\r\n    });\r\n\r\n    this.emit(\"initialized\", { organizationId: this.config.organizationId });\r\n  }\r\n\r\n  /**\r\n   * Check if a user has access to a resource\r\n   */\r\n  async checkAccess(\r\n    userId: string,\r\n    resource: string,\r\n    action: string,\r\n    context?: Record<string, unknown>,\r\n  ): Promise<AccessDecision> {\r\n    const cacheKey = `${userId}:${resource}:${action}`;\r\n    \r\n    // Check cache first\r\n    const cached = this.cache.get(cacheKey);\r\n    if (cached && cached.expiresAt > Date.now()) {\r\n      return cached.decision;\r\n    }\r\n\r\n    const user = this.users.get(userId);\r\n    if (!user) {\r\n      return { allowed: false, reason: \"User not found\" };\r\n    }\r\n\r\n    // Collect all applicable permissions\r\n    const applicablePermissions = this.collectPermissions(user);\r\n    \r\n    // Evaluate permissions\r\n    const decision = this.evaluatePermissions(\r\n      applicablePermissions,\r\n      resource,\r\n      action,\r\n      context\r\n    );\r\n\r\n    // Cache the decision\r\n    this.cache.set(cacheKey, {\r\n      decision,\r\n      expiresAt: Date.now() + 5 * 60 * 1000, // 5 minutes\r\n    });\r\n\r\n    // Emit audit event\r\n    if (this.config.auditEnabled) {\r\n      this.emit(\"access-check\", {\r\n        userId,\r\n        resource,\r\n        action,\r\n        decision,\r\n        timestamp: new Date(),\r\n      });\r\n    }\r\n\r\n    return decision;\r\n  }\r\n\r\n  /**\r\n   * Grant a role to a user\r\n   */\r\n  async grantRole(userId: string, roleId: string): Promise<void> {\r\n    const user = this.users.get(userId);\r\n    const role = this.roles.get(roleId);\r\n\r\n    if (!user || !role) {\r\n      throw new Error(\"User or role not found\");\r\n    }\r\n\r\n    if (!user.roles.find((r): boolean => r.id === roleId)) {\r\n      user.roles.push(role);\r\n      this.clearUserCache(userId);\r\n\r\n      this.emit(\"role-granted\", {\r\n        userId,\r\n        roleId,\r\n        timestamp: new Date(),\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Revoke a role from a user\r\n   */\r\n  async revokeRole(userId: string, roleId: string): Promise<void> {\r\n    const user = this.users.get(userId);\r\n\r\n    if (!user) {\r\n      throw new Error(\"User not found\");\r\n    }\r\n\r\n    const index = user.roles.findIndex((r): boolean => r.id === roleId);\r\n    if (index !== -1) {\r\n      user.roles.splice(index, 1);\r\n      this.clearUserCache(userId);\r\n\r\n      this.emit(\"role-revoked\", {\r\n        userId,\r\n        roleId,\r\n        timestamp: new Date(),\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Register a new user\r\n   */\r\n  async registerUser(user: User): Promise<void> {\r\n    this.users.set(user.id, user);\r\n    \r\n    // Assign default role based on organization level\r\n    const defaultRole = this.roles.get(\"default-individual\");\r\n    if (defaultRole && !user.roles.find((r): boolean => r.id === defaultRole.id)) {\r\n      user.roles.push(defaultRole);\r\n    }\r\n\r\n    this.emit(\"user-registered\", {\r\n      userId: user.id,\r\n      timestamp: new Date(),\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Create a custom role\r\n   */\r\n  async createRole(role: Role): Promise<void> {\r\n    this.roles.set(role.id, role);\r\n    \r\n    this.emit(\"role-created\", {\r\n      roleId: role.id,\r\n      timestamp: new Date(),\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Get classification level for data\r\n   */\r\n  getDataClassification(data: string): string {\r\n    for (const rule of this.config.dataClassification.rules) {\r\n      const pattern = rule.pattern instanceof RegExp \r\n        ? rule.pattern \r\n        : new RegExp(rule.pattern, \"i\");\r\n      \r\n      if (pattern.test(data)) {\r\n        return rule.level;\r\n      }\r\n    }\r\n    \r\n    return this.config.dataClassification.defaultLevel;\r\n  }\r\n\r\n  /**\r\n   * Collect all permissions for a user\r\n   */\r\n  private collectPermissions(user: User): PermissionSet[] {\r\n    const permissions: PermissionSet[] = [];\r\n\r\n    // Add user's direct permissions\r\n    if (user.permissions) {\r\n      permissions.push(user.permissions);\r\n    }\r\n\r\n    // Add role permissions (sorted by priority)\r\n    const sortedRoles = [...user.roles].sort((a, b): number => b.priority - a.priority);\r\n    \r\n    for (const role of sortedRoles) {\r\n      permissions.push(role.permissions);\r\n      \r\n      // Handle inheritance\r\n      if (role.inheritFromParent) {\r\n        const parentRole = this.findParentRole(role);\r\n        if (parentRole) {\r\n          permissions.push(parentRole.permissions);\r\n        }\r\n      }\r\n    }\r\n\r\n    return permissions;\r\n  }\r\n\r\n  /**\r\n   * Evaluate permissions against a resource and action\r\n   */\r\n  private evaluatePermissions(\r\n    permissions: PermissionSet[],\r\n    resource: string,\r\n    action: string,\r\n    context?: Record<string, unknown>,\r\n  ): AccessDecision {\r\n    for (const permSet of permissions) {\r\n      // Check if action is allowed\r\n      if (!permSet.actions.includes(action) && !permSet.actions.includes(\"*\")) {\r\n        continue;\r\n      }\r\n\r\n      // Check resource permissions\r\n      const resourcePerms = permSet.resources[resource] || permSet.resources[\"*\"];\r\n      if (!resourcePerms) {\r\n        continue;\r\n      }\r\n\r\n      // Map action to permission\r\n      const hasPermission = this.mapActionToPermission(action, resourcePerms);\r\n      if (!hasPermission) {\r\n        continue;\r\n      }\r\n\r\n      // Check conditions\r\n      if (permSet.conditions) {\r\n        const conditionsMet = this.evaluateConditions(permSet.conditions, context);\r\n        if (!conditionsMet) {\r\n          continue;\r\n        }\r\n      }\r\n\r\n      return {\r\n        allowed: true,\r\n        conditions: permSet.conditions,\r\n      };\r\n    }\r\n\r\n    return {\r\n      allowed: false,\r\n      reason: \"No matching permissions found\",\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Map an action to resource permissions\r\n   */\r\n  private mapActionToPermission(action: string, perms: ResourcePermission): boolean {\r\n    const actionMap: Record<string, keyof ResourcePermission> = {\r\n      read: \"read\",\r\n      view: \"read\",\r\n      write: \"write\",\r\n      create: \"write\",\r\n      update: \"write\",\r\n      delete: \"delete\",\r\n      remove: \"delete\",\r\n      execute: \"execute\",\r\n      run: \"execute\",\r\n      share: \"share\",\r\n      admin: \"admin\",\r\n      manage: \"admin\",\r\n    };\r\n\r\n    const permKey = actionMap[action.toLowerCase()];\r\n    return permKey ? perms[permKey] === true : false;\r\n  }\r\n\r\n  /**\r\n   * Evaluate permission conditions\r\n   */\r\n  private evaluateConditions(\r\n    conditions: PermissionCondition[],\r\n    context?: Record<string, unknown>,\r\n  ): boolean {\r\n    if (!context) return false;\r\n\r\n    for (const condition of conditions) {\r\n      if (!this.evaluateCondition(condition, context)) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Evaluate a single condition\r\n   */\r\n  private evaluateCondition(\r\n    condition: PermissionCondition,\r\n    context: Record<string, unknown>,\r\n  ): boolean {\r\n    const value = context[condition.type];\r\n    if (value === undefined) return false;\r\n\r\n    switch (condition.operator) {\r\n      case \"equals\":\r\n        return value === condition.value;\r\n      case \"contains\":\r\n        return String(value).includes(String(condition.value));\r\n      case \"matches\":\r\n        return new RegExp(String(condition.value)).test(String(value));\r\n      case \"between\":\r\n        return (\r\n          Array.isArray(condition.value) &&\r\n          condition.value.length >= 2 &&\r\n          typeof condition.value[0] === \"number\" &&\r\n          typeof condition.value[1] === \"number\" &&\r\n          typeof value === \"number\" &&\r\n          value >= condition.value[0] &&\r\n          value <= condition.value[1]\r\n        );\r\n      default:\r\n        return false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Find parent role in hierarchy\r\n   */\r\n  private findParentRole(role: Role): Role | undefined {\r\n    const currentLevel = this.config.hierarchyLevels.find(\r\n      (l): boolean => l.level === role.level\r\n    );\r\n    \r\n    if (!currentLevel) return undefined;\r\n\r\n    const parentLevel = this.config.hierarchyLevels.find(\r\n      (l): boolean => l.priority === currentLevel.priority + 1\r\n    );\r\n\r\n    if (!parentLevel) return undefined;\r\n\r\n    return Array.from(this.roles.values()).find(\r\n      (r): boolean => r.level === parentLevel.level\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Clear cache for a user\r\n   */\r\n  private clearUserCache(userId: string): void {\r\n    const keysToDelete: string[] = [];\r\n    \r\n    for (const key of this.cache.keys()) {\r\n      if (key.startsWith(`${userId}:`)) {\r\n        keysToDelete.push(key);\r\n      }\r\n    }\r\n\r\n    keysToDelete.forEach((key): boolean => this.cache.delete(key));\r\n  }\r\n\r\n  /**\r\n   * Get user by ID\r\n   */\r\n  getUser(userId: string): User | undefined {\r\n    return this.users.get(userId);\r\n  }\r\n\r\n  /**\r\n   * Get role by ID\r\n   */\r\n  getRole(roleId: string): Role | undefined {\r\n    return this.roles.get(roleId);\r\n  }\r\n\r\n  /**\r\n   * List all users\r\n   */\r\n  listUsers(): User[] {\r\n    return Array.from(this.users.values());\r\n  }\r\n\r\n  /**\r\n   * List all roles\r\n   */\r\n  listRoles(): Role[] {\r\n    return Array.from(this.roles.values());\r\n  }\r\n}\r\n\r\n// Helper interfaces\r\ninterface SessionInfo {\r\n  userId: string;\r\n  startedAt: Date;\r\n  expiresAt: Date;\r\n  permissions: PermissionSet;\r\n}\r\n\r\ninterface CachedDecision {\r\n  decision: AccessDecision;\r\n  expiresAt: number;\r\n}\r\n\r\n// Export singleton instance\r\nexport const accessControlManager = new AccessControlManager({\r\n  organizationId: \"default\",\r\n  hierarchyLevels: [\r\n    {\r\n      level: \"individual\",\r\n      priority: 1,\r\n      inheritFromParent: false,\r\n      overrideChild: true,\r\n    },\r\n    {\r\n      level: \"team\",\r\n      priority: 2,\r\n      inheritFromParent: true,\r\n      overrideChild: true,\r\n    },\r\n    {\r\n      level: \"department\",\r\n      priority: 3,\r\n      inheritFromParent: true,\r\n      overrideChild: true,\r\n    },\r\n    {\r\n      level: \"organization\",\r\n      priority: 4,\r\n      inheritFromParent: false,\r\n      overrideChild: false,\r\n    },\r\n  ],\r\n  defaultPermissions: {\r\n    resources: {\r\n      \"*\": {\r\n        read: true,\r\n        write: false,\r\n        delete: false,\r\n        execute: false,\r\n      },\r\n    },\r\n    actions: [\"read\", \"view\"],\r\n  },\r\n  dataClassification: {\r\n    levels: [\"public\", \"internal\", \"confidential\", \"restricted\"],\r\n    defaultLevel: \"internal\",\r\n    rules: [],\r\n  },\r\n  auditEnabled: true,\r\n});","/**\r\n * Command Groups Registry\r\n * Central registry for all command groups in MARIA CLI\r\n */\r\n\r\nexport const commandGroups = {\r\n  core: [\r\n    'about', 'config', 'contact', 'doctor', 'examples',\r\n    'help', 'history', 'list', 'logout', 'ping', 'plan',\r\n    'plugins', 'status', 'tutorial', 'usage', 'verify', 'version',\r\n    'whoami',\r\n    'personalize',\r\n  ],\r\n  auth: ['login', 'logout', 'account'],\r\n  code: ['code', 'mm', 'multimodal'],\r\n  configuration: ['config', 'hooks', 'permissions', 'settings', 'theme', 'setup', 'brain'],\r\n  multimodal: ['face', 'image', 'mm', 'multimodal', 'screenshot', 'video', 'voice'],\r\n  evolution: ['benchmark', 'evolve', 'quality'],\r\n  memory: ['forget', 'memory', 'recall', 'remember', 'memory-status'],\r\n  analysis: ['analyze', 'diagram', 'diff', 'visualize'],\r\n  system: ['doctor', 'health', 'manifest', 'selftest'],\r\n  workflow: ['nl', 'nl-poc', 'workflow/resume'],\r\n  safety: ['check'],\r\n  evaluation: ['run'],\r\n  assistant: ['ask', 'chat', 'think'],\r\n  data: ['db', 'export', 'import', 'sync'],\r\n  utilities: ['alias', 'clear', 'history', 'reset'],\r\n  experimental: ['preview', 'test'],\r\n  business: [\r\n    'sales-dashboard',\r\n    'tune',\r\n    // Enterprise OS / management OS related\r\n    'os-map',\r\n    'os-doctor',\r\n    'cxo',\r\n    'cxo-meeting',\r\n  ],\r\n  plugins: ['plugins'],\r\n  search: ['search'],\r\n  enterprise: ['admin', 'audit', 'compliance', 'security'],\r\n  development: ['debug', 'profile', 'trace', 'calc', 'solve', 'plot', 'auto-dev'],\r\n  ai: ['lora'],\r\n  integration: ['connect']\r\n};\r\n\r\nexport const allCommands = Object.values(commandGroups).flat();\r\nexport const categories = Object.keys(commandGroups);\r\n\r\n// Command categories mapping\r\nexport const commandCategories = {\r\n  core: 'Core',\r\n  auth: 'Authentication',\r\n  code: 'Code Generation',\r\n  configuration: 'Configuration',\r\n  multimodal: 'Multimodal',\r\n  evolution: 'Evolution',\r\n  memory: 'Memory',\r\n  analysis: 'Analysis',\r\n  system: 'System',\r\n  workflow: 'Workflow',\r\n  safety: 'Safety',\r\n  evaluation: 'Evaluation',\r\n  assistant: 'Assistant',\r\n  data: 'Data',\r\n  utilities: 'Utilities',\r\n  experimental: 'Experimental',\r\n  business: 'Business',\r\n  plugins: 'Plugins',\r\n  search: 'Search',\r\n  enterprise: 'Enterprise',\r\n  development: 'Development',\r\n  ai: 'AI & GPU Operations',\r\n  integration: 'Integration'\r\n};\r\n\r\n// Command info for type generation - Map each command to its details\r\nexport type CommandInfo = {\r\n  name: string;\r\n  category: string;\r\n  description?: string;\r\n  aliases?: string[];\r\n  usage?: string;\r\n  examples?: string[];\r\n  deprecated?: { since: string; replacedBy?: string } | true;\r\n};\r\n\r\nexport const commandInfo: Record<string, CommandInfo> = {};\r\n\r\n// Build commandInfo from commandGroups\r\nfor (const [category, commands] of Object.entries(commandGroups)) {\r\n  for (const command of commands) {\r\n    const key = `/${command}`;\r\n    commandInfo[key] = {\r\n      name: key,\r\n      category: category,\r\n    };\r\n  }\r\n}\r\n\r\n// Add aliases for specific commands\r\ncommandInfo['/memory'] = { ...commandInfo['/memory'], aliases: ['/mem'] };\r\ncommandInfo['/login'] = { ...commandInfo['/login'], aliases: ['/signin'] };\r\ncommandInfo['/logout'] = { ...commandInfo['/logout'], aliases: ['/signout'] };\r\ncommandInfo['/evolve'] = { ...commandInfo['/evolve'], aliases: ['/evolution', '/auto-evolve'] };\r\n\r\n// Math commands metadata (development category)\r\ncommandInfo['/calc'] = {\r\n  ...commandInfo['/calc'],\r\n  usage: '/calc <expression>',\r\n  examples: ['/calc 2 + 2', '/calc sin(45) * sqrt(16)'],\r\n};\r\ncommandInfo['/solve'] = {\r\n  ...commandInfo['/solve'],\r\n  usage: '/solve <equation>',\r\n  examples: ['/solve x^2 + 5x + 6 = 0', '/solve 2x + 3y = 10'],\r\n};\r\ncommandInfo['/plot'] = {\r\n  ...commandInfo['/plot'],\r\n  usage: '/plot <function>',\r\n  examples: ['/plot y = x^2', '/plot sin(x) from -pi to pi'],\r\n};\r\n\r\n// Auto-Dev (development category)\r\ncommandInfo['/auto-dev'] = {\r\n  ...commandInfo['/auto-dev'],\r\n  usage: '/auto-dev --goal \"<description>\" --target-files <files>',\r\n  examples: [\r\n    '/auto-dev --goal \"Fix user profile bug\" --target-files \"src/services/user-profile.ts,tests/user-profile.test.ts\"',\r\n  ],\r\n};\r\n\r\n// Personalize (core category)\r\ncommandInfo['/personalize'] = {\r\n  ...commandInfo['/personalize'],\r\n  usage:\r\n    '/personalize [status|list|use <id>|clear|create <id> --base <profileId> --display-name <name> --tone <tone> [--avoid <csv>] [--values <csv>]',\r\n  examples: [\r\n    '/personalize status',\r\n    '/personalize list',\r\n    '/personalize use acme-ceo',\r\n    '/personalize create kiki --base maria --display-name \"Kiki\" --tone \"Friendly, concise.\" --avoid \"verbose, preachy\"',\r\n  ],\r\n};\r\n\r\n// LoRA (AI category)\r\ncommandInfo['/lora'] = {\r\n  ...commandInfo['/lora'],\r\n  usage: '/lora <init|upload|train|status|rollback> [...]',\r\n  examples: [\r\n    '/lora init banking-style-ja-v1',\r\n    '/lora upload banking-style-ja-v1 ./datasets/banking.jsonl',\r\n    '/lora train banking-style-ja-v1 --project-id maria-prod',\r\n  ],\r\n};\r\n\r\n// Metadata for Enterprise OS / management OS commands\r\ncommandInfo['/os-map'] = {\r\n  ...commandInfo['/os-map'],\r\n  usage: '/os-map [--domain <domain>] [--id <id>] [--mermaid] [--json]',\r\n  examples: [\r\n    '/os-map',\r\n    '/os-map --domain enterprise --id ceo-os',\r\n  ],\r\n};\r\n\r\ncommandInfo['/os-doctor'] = {\r\n  ...commandInfo['/os-doctor'],\r\n  usage: '/os-doctor [--domain <domain>] [--id <id>] [--json]',\r\n  examples: [\r\n    '/os-doctor',\r\n    '/os-doctor --domain enterprise --id ceo-os --json',\r\n  ],\r\n};\r\n\r\ncommandInfo['/cxo-meeting'] = {\r\n  ...commandInfo['/cxo-meeting'],\r\n  usage:\r\n    '/cxo-meeting [agenda] [--type exec|biz-review|ops] [--domain <domain>] [--id <id>] [--json]',\r\n  examples: [\r\n    '/cxo-meeting',\r\n    '/cxo-meeting agenda --type biz-review --domain enterprise --id ceo-os',\r\n  ],\r\n};\r\n\r\ncommandInfo['/cxo'] = {\r\n  ...commandInfo['/cxo'],\r\n  usage: '/cxo [--profile <id>] [--members \"ceo,coo,caio\"] \"Consultation text about new ventures, decisions, etc.\"',\r\n  examples: [\r\n    '/cxo --profile misa \"Should we launch an AI front-desk product for local government as a new business? Evaluate from a CxO perspective.\"',\r\n    '/cxo --members \"ceo,caio\" \"How should we integrate an LLM into this medical SaaS? Organize from business and CAIO perspectives.\"',\r\n  ],\r\n};\r\n\r\n// Deprecated command: /brain\r\ncommandInfo['/brain'] = {\r\n  name: '/brain',\r\n  category: 'configuration',\r\n  deprecated: { since: 'v2.5.0', replacedBy: '/mode' },\r\n};\r\n\r\n// Helper functions for command information\r\nexport function getCommandInfo(command: string): CommandInfo | undefined {\r\n  // Remove leading slash if present\r\n  const raw = command.replace(/^\\//, '');\r\n  const lower = raw.toLowerCase();\r\n\r\n  // Direct key match (with slash)\r\n  const direct = commandInfo[`/${raw}`];\r\n  if (direct) return direct;\r\n\r\n  // Case-insensitive match on names\r\n  for (const [key, info] of Object.entries(commandInfo)) {\r\n    if (key.slice(1).toLowerCase() === lower) return info;\r\n  }\r\n\r\n  // Aliases lookup (case-insensitive)\r\n  for (const info of Object.values(commandInfo)) {\r\n    if (info.aliases?.some(a => a.replace(/^\\//,'').toLowerCase() === lower)) {\r\n      return { ...info, name: info.name };\r\n    }\r\n  }\r\n\r\n  return undefined;\r\n}\r\n\r\nexport function getRelatedCommands(command: string): CommandInfo[] {\r\n  const info = getCommandInfo(command);\r\n  if (!info) return [];\r\n  \r\n  // Return other commands in the same category\r\n  return Object.entries(commandInfo)\r\n    .filter(([key, cmd]): boolean => cmd.category === info.category && key !== info.name)\r\n    .map(([key, cmd]): { name: string; category: string; description?: string; aliases?: string[]; usage?: string; examples?: string[]; deprecated?: { since: string; replacedBy?: string; } | true; } => ({\r\n      name: key,\r\n      ...cmd\r\n    }));\r\n}\r\n\r\nexport function getCommandChain(command: string): string[] {\r\n  // For now, just return the command itself\r\n  // This could be expanded to handle command chains\r\n  return [command];\r\n}\r\n\r\nexport function getCommandsByCategory(category: string): CommandInfo[] {\r\n  return Object.entries(commandInfo)\r\n    .filter(([_, cmd]): boolean => cmd.category === category)\r\n    .map(([key, cmd]): { name: string; category: string; description?: string; aliases?: string[]; usage?: string; examples?: string[]; deprecated?: { since: string; replacedBy?: string; } | true; } => ({\r\n      name: key,\r\n      ...cmd\r\n    }));\r\n}\r\n\r\nexport function suggestCommands(query: string, limit: number = 5): unknown[] {\r\n  const normalizedQuery = query.toLowerCase().replace('/', '');\r\n  const results: Array<{ command: unknown; score: number }> = [];\r\n  \r\n  for (const [key, cmd] of Object.entries(commandInfo)) {\r\n    const normalizedKey = key.toLowerCase();\r\n    let score = 0;\r\n    \r\n    // Exact match\r\n    if (normalizedKey === normalizedQuery) {\r\n      score = 100;\r\n    }\r\n    // Starts with query\r\n    else if (normalizedKey.startsWith(normalizedQuery)) {\r\n      score = 80;\r\n    }\r\n    // Contains query\r\n    else if (normalizedKey.includes(normalizedQuery)) {\r\n      score = 60;\r\n    }\r\n    \r\n    if (score > 0) {\r\n      results.push({\r\n        command: { name: key, ...cmd },\r\n        score\r\n      });\r\n    }\r\n  }\r\n  \r\n  // Sort by score and return top results\r\n  return results\r\n    .sort((a, b): number => b.score - a.score)\r\n    .slice(0, limit)\r\n    .map(r => r.command);\r\n}\r\n\r\n\r\nexport function assertRegistry(): void {\r\n  // key === name\r\n  for (const [key, info] of Object.entries(commandInfo)) {\r\n    if (key !== info.name) {\r\n      throw new Error(`Key/name mismatch: ${key} !== ${info.name}`);\r\n    }\r\n  }\r\n  // math command docs\r\n  for (const name of ['/calc','/solve','/plot']) {\r\n    const info = commandInfo[name];\r\n    if (!info?.usage || !info?.examples || info.examples.length === 0) {\r\n      throw new Error(`Missing usage/examples for ${name}`);\r\n    }\r\n  }\r\n  // /brain deprecated\r\n  const brain = commandInfo['/brain'];\r\n  if (!brain?.deprecated) {\r\n    throw new Error('/brain must be deprecated');\r\n  }\r\n}\r\n// Workflow: /workflow/resume metadata\r\ncommandInfo['/workflow/resume'] = {\r\n  ...commandInfo['/workflow/resume'],\r\n  usage:\r\n    '/workflow/resume [<taskId>] [--latest] [--date YYYY-MM-DD] [--limit N] [--rehydrate summary|full] [--open] [--tests] [--fix] [--apply] [--dry-run]',\r\n  examples: [\r\n    '/workflow/resume --latest',\r\n    '/workflow/resume feat.api.health --tests --fix',\r\n    '/workflow/resume --date 2025-09-04 --limit 5',\r\n  ],\r\n};\r\n","/**\r\n * MARIA v3.6.0 - Minimal Public API + Multimodal\r\n *\r\n * Core exports for maximum stability and focused functionality.\r\n * Everything else is internal implementation detail.\r\n */\r\n\r\n// Core Router - The heart of intelligent routing\r\nexport { IntelligentRouterService } from \"./services/intelligent-router/app/IntelligentRouterService\";\r\nexport type { RoutingDecision } from \"./services/routing/model-routing\";\r\n\r\n// Memory System - Dual-layer cognitive architecture\r\nexport { System1MemoryManager } from \"./services/memory-system/system1-memory\";\r\nexport { System2MemoryManager } from \"./services/memory-system/system2-memory\";\r\n\r\n// File Operations - Unified, safe file system interface\r\nexport { FileSystemService } from \"./services/file-system/FileSystemService\";\r\n\r\n// Phase 4.0 Enterprise Security & Memory Portability\r\nexport {\r\n  EnterpriseSecurityIntegration,\r\n  SecureSlashCommandAdapter,\r\n  RBACCommandGuard,\r\n  createEnterpriseSecurityIntegration,\r\n  type SecurityIntegrationConfig,\r\n  type SecurityMetrics,\r\n  type SecurityReport,\r\n  type AuthenticatedUser,\r\n  type PermissionSet,\r\n} from \"./services/security\";\r\n\r\nexport {\r\n  MemoryPortabilityFramework,\r\n  createMemoryPortabilityFramework,\r\n  type PortabilityConfig,\r\n  type ExportRequest,\r\n  type ImportRequest,\r\n  type PortabilityResult,\r\n} from \"./services/memory-system/data-porter-system/MemoryPortabilityFramework\";\r\n\r\n// Document Auto-Save System\r\nexport {\r\n  autoSaveDocument,\r\n  autoSaveMultipleDocuments,\r\n  classifyDocument,\r\n  DocumentType,\r\n  generateDocumentFilename,\r\n  saveDocumentToFile\r\n} from \"./services/document-auto-save\";\r\n\r\n// Intelligent Document Save System\r\nexport {\r\n  IntelligentDocumentSaveService,\r\n  intelligentSave,\r\n  autoSaveIntelligently,\r\n  autoSaveMultipleIntelligently,\r\n  type IntelligentSaveOptions,\r\n  type IntelligentSaveResult\r\n} from \"./services/intelligent-document-save\";\r\n\r\n// Filename Inference System\r\nexport {\r\n  FilenameInferenceService\r\n} from \"./services/code-intent/FilenameInferenceService\";\r\n\r\nexport {\r\n  EnterpriseDataPorter,\r\n  type DataPorterConfig,\r\n} from \"./services/memory-system/data-porter-system/enterprise-data-porter\";\r\n\r\nexport {\r\n  AccessControlManager,\r\n  type User,\r\n  type Role,\r\n  type PermissionSet as AccessControlPermissionSet,\r\n} from \"./services/memory-system/enterprise/access-control-manager\";\r\n\r\n// Command Groups and Registry - For type generation\r\nexport { commandInfo, commandCategories, commandGroups, allCommands, categories } from './lib/command-groups';\r\n\r\nexport const MARIA_VERSION = \"3.6.0\";\r\n\r\n// NOTE:\r\n// Keep `src/index.ts` as a stable library surface.\r\n// Do not run side-effectful code (like benchmarks) from the package entrypoint.\r\n\r\n"]}