{"version":3,"sources":["../src/version.ts","../src/telemetry/client.ts","../src/lib/constants.ts","../src/lib/firecrawl.ts","../src/context/vector-db.ts","../src/context/ext-vector.ts","../src/context/client.ts","../src/history/in-redis.ts","../src/history/client.ts","../src/index.ts"],"names":["SDK_VERSION","SDK_NAME","ingestionKeyCache","getSDKVersion","getCacheKey","endpoint","domain","Telementry","options","__publicField","envDisabled","cacheKey","keyEndpoint","res","userAgent","appVersion","vendor","language","platform","cookieEnabled","hardwareConcurrency","deviceMemory","event","properties","ingestionKey","payload","DEFAULT_CHAT_SESSION_ID","id","DEFAULT_HISTORY_LENGTH","DEFAULT_HISTORY_TTL","DEFAULT_MSG_ID","DEFAULT_SIMILARITY_THRESHOLD","DEFAULT_TOP_K","firecrawlClient","getFirecrawlApiKey","getFirecrawl","key","Firecrawl","scrapeContent","url","client","chunkText","text","chunkSize","overlap","chunks","i","VectorDB","index","ids","namespace","question","similarityThreshold","topK","contextFilter","queryMode","result","embedding","x","input","returnId","nanoid","error","fileSource","transformArgs","markdown","summary","chunk","ExtVector","config","Index","getContextClient","params","vectorUrl","vectorToken","InRedisHistory","redisConfig","Redis","message","sessionId","sessionTTL","TTL","sessionID","amount","startIndex","endIndex","getHistoryClient","redisUrl","redisToken","AIChatSDK","createAIChatSDK","createTelemetry","createContextClient","createHistoryClient","src_default"],"mappings":"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","file":"index.cjs","sourcesContent":["// This file is automatically updated during the build process\n// Do not edit manually\n\nexport const SDK_VERSION = \"1.0.1-beta.1\";\nexport const SDK_NAME = \"@prexo/ai-chat-sdk\";\n","import type { TelementryEvents } from \"../types\";\nimport { SDK_VERSION } from \"../version\";\n\nexport type TelementryOptions = {\n  enabled?: boolean;\n  ingestionKey?: string;\n};\n\n// Static cache for ingestion key per endpoint+domain\nconst ingestionKeyCache: Record<string, Promise<string>> = {};\n\n// Auto-detect SDK version\nfunction getSDKVersion(): string {\n  try {\n    // Try to get from process.env (works in Node.js)\n    if (typeof process !== \"undefined\" && process.env?.PREXO_SDK_VERSION) {\n      return process.env.PREXO_SDK_VERSION;\n    }\n\n    // Try to get from window (works in browser with injected globals)\n    if (\n      typeof window !== \"undefined\" &&\n      (window as any).__PREXO_SDK_VERSION__\n    ) {\n      return (window as any).__PREXO_SDK_VERSION__;\n    }\n\n    // Try to get from globalThis (works in modern environments)\n    if (\n      typeof globalThis !== \"undefined\" &&\n      (globalThis as any).__PREXO_SDK_VERSION__\n    ) {\n      return (globalThis as any).__PREXO_SDK_VERSION__;\n    }\n\n    // Use the version from the version file (default fallback)\n    return SDK_VERSION;\n  } catch {\n    return SDK_VERSION;\n  }\n}\n\nfunction getCacheKey(endpoint: string, domain: string) {\n  return `${endpoint}::${domain}`;\n}\n\nexport class Telementry {\n  private enabled: boolean;\n  private endpoint: string;\n  private ingestionKey?: string;\n  private sdkVersion: string;\n  private ingestionKeyPromise?: Promise<string>;\n\n  constructor(options: TelementryOptions) {\n    const envDisabled =\n      typeof process !== \"undefined\" && process.env?.DISABLE_TELEMETRY === \"1\";\n\n    this.enabled = options.enabled ?? !envDisabled;\n    this.endpoint =\n      typeof process !== \"undefined\" &&\n      process.env &&\n      process.env.NODE_ENV === \"development\"\n        ? \"http://localhost:3001/v1/telementry\"\n        : \"https://api.prexoai.xyz/v1/telementry\";\n\n    // Auto-detect SDK version if not provided\n    this.sdkVersion = getSDKVersion();\n\n    if (options.ingestionKey) {\n      this.ingestionKey = options.ingestionKey;\n    }\n    // else: don't fetch here, defer to send() and use cache\n  }\n\n  private async fetchIngestionKeyCached(): Promise<string> {\n    // Determine domain\n    let domain = \"\";\n    if (\n      typeof window !== \"undefined\" &&\n      window.location &&\n      window.location.origin\n    ) {\n      if (\n        typeof process !== \"undefined\" &&\n        process.env &&\n        process.env.NODE_ENV === \"development\"\n      ) {\n        domain = \"devwtf.in\";\n      } else {\n        domain = window.location.origin;\n      }\n    }\n    const cacheKey = getCacheKey(this.endpoint, domain);\n\n    if (!ingestionKeyCache[cacheKey]) {\n      ingestionKeyCache[cacheKey] = this.fetchIngestionKey(domain);\n    }\n    return ingestionKeyCache[cacheKey];\n  }\n\n  private async fetchIngestionKey(domain: string): Promise<string> {\n    const keyEndpoint = this.endpoint\n      ? this.endpoint.replace(/\\/?$/, \"/key\")\n      : \"https://api.prexoai.xyz/v1/telementry/key\";\n    try {\n      const res = await fetch(keyEndpoint, {\n        method: \"POST\",\n        credentials: \"include\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n        },\n        body: JSON.stringify({ domain }),\n      });\n      if (!res.ok) {\n        throw new Error(\"Failed to fetch ingestion key\");\n      }\n      const data = await res.json();\n      // Assume the key is in data.key\n      return data.key || \"prexoai-ingest-key\";\n    } catch {\n      // fallback to default\n      return \"prexoai-ingest-key\";\n    }\n  }\n\n  /**\n   * Returns a string with browser details using the Navigator API.\n   * See: https://developer.mozilla.org/en-US/docs/Web/API/Navigator\n   */\n  private detectBrowser(): string {\n    if (typeof window !== \"undefined\" && typeof navigator !== \"undefined\") {\n      const userAgent = navigator.userAgent || \"unknown\";\n      const appVersion = navigator.appVersion || \"unknown\";\n      const vendor = (navigator as any).vendor || \"unknown\";\n      const language = (navigator as any).language || \"unknown\";\n      const platform = (navigator as any).platform || \"unknown\";\n      const cookieEnabled =\n        (navigator as any).cookieEnabled !== undefined\n          ? String((navigator as any).cookieEnabled)\n          : \"unknown\";\n      const hardwareConcurrency =\n        (navigator as any).hardwareConcurrency !== undefined\n          ? String((navigator as any).hardwareConcurrency)\n          : \"unknown\";\n      const deviceMemory =\n        (navigator as any).deviceMemory !== undefined\n          ? String((navigator as any).deviceMemory)\n          : \"unknown\";\n      return [\n        `UserAgent: ${userAgent}`,\n        `AppVersion: ${appVersion}`,\n        `Vendor: ${vendor}`,\n        `Language: ${language}`,\n        `Platform: ${platform}`,\n        `CookieEnabled: ${cookieEnabled}`,\n        `HardwareConcurrency: ${hardwareConcurrency}`,\n        `DeviceMemory: ${deviceMemory}`,\n      ].join(\"; \");\n    }\n    // Fallback for non-browser environments\n    return \"not-browser\";\n  }\n\n  /**\n   * Returns the platform/OS using the Navigator API if available.\n   * See: https://developer.mozilla.org/en-US/docs/Web/API/Navigator/platform\n   */\n  private detectPlatform(): string {\n    if (\n      typeof navigator !== \"undefined\" &&\n      typeof navigator.platform === \"string\"\n    ) {\n      return navigator.platform || \"unknown\";\n    }\n    if (\n      typeof process !== \"undefined\" &&\n      typeof process.platform === \"string\"\n    ) {\n      return process.platform;\n    }\n    return \"unknown\";\n  }\n\n\n  async send<K extends keyof TelementryEvents>(\n    event: K,\n    properties: TelementryEvents[K],\n  ) {\n    if (!this.enabled) return;\n\n    // Ensure ingestionKey is available\n    let ingestionKey = this.ingestionKey;\n    if (!ingestionKey) {\n      if (!this.ingestionKeyPromise) {\n        // Use the static cache to avoid spamming /key endpoint\n        this.ingestionKeyPromise = this.fetchIngestionKeyCached();\n      }\n      ingestionKey = await this.ingestionKeyPromise;\n      this.ingestionKey = ingestionKey; // cache for future\n    }\n\n    const payload = {\n      event,\n      properties: {\n        ...properties,\n        sdkVersion: this.sdkVersion,\n        browser: this.detectBrowser(),\n        platform: this.detectPlatform(),\n        timestamp: new Date().toISOString(),\n      },\n    };\n\n    try {\n      await fetch(this.endpoint, {\n        method: \"POST\",\n        credentials: \"include\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          \"x-ingest-key\": ingestionKey,\n        },\n        body: JSON.stringify(payload),\n      });\n    } catch {\n      // never throw\n    }\n  }\n}\n","// Constants for the AI Chat SDK\nexport const DEFAULT_CHAT_SESSION_ID = (id?: string) =>\n  `prexo-chat-session/${id ? id : \"default\"}`;\n\nexport const DEFAULT_HISTORY_LENGTH = 50;\nexport const DEFAULT_HISTORY_TTL = 86_400;\n\nexport const DEFAULT_MSG_ID = `msg-${Date.now().toString()}`;\nexport const DEFAULT_SIMILARITY_THRESHOLD = 0.5;\nexport const DEFAULT_TOP_K = 5;\n","import Firecrawl from '@mendable/firecrawl-js';\n\n// Lazily initialize Firecrawl only when an API key is available.\n// This avoids throwing during client-side bundles where process.env is not present.\nlet firecrawlClient: Firecrawl | undefined;\n\nfunction getFirecrawlApiKey(): string | undefined {\n  try {\n    // In Node/bundler environments, process may exist\n    if (typeof process !== 'undefined' && process.env && process.env.FIRECRAWL_API_KEY) {\n      return process.env.FIRECRAWL_API_KEY;\n    }\n  } catch {\n    // ignore\n  }\n  return undefined;\n}\n\nfunction getFirecrawl(): Firecrawl | undefined {\n  const key = getFirecrawlApiKey();\n  if (!key) return undefined;\n  if (!firecrawlClient) {\n    firecrawlClient = new Firecrawl({ apiKey: key });\n  }\n  return firecrawlClient;\n}\n\nexport async function scrapeContent(url: string) {\n  const client = getFirecrawl();\n  if (!client) {\n    throw new Error(\"Firecrawl is not configured. Set FIRECRAWL_API_KEY on the server to enable scraping.\");\n  }\n  const data = await client.scrape(url, { formats: ['markdown', 'summary'] });\n  return data;\n}","import type {\n  AddContextPayload,\n  ResetOptions,\n  SaveOperationResult,\n  VectorPayload,\n} from \"../types\";\nimport { DEFAULT_SIMILARITY_THRESHOLD, DEFAULT_TOP_K } from \"../lib/constants\";\nimport type { Index } from \"@upstash/vector\";\nimport { nanoid } from \"nanoid\";\nimport { scrapeContent } from \"../lib/firecrawl\";\n\n// Helper function to chunk text\nfunction chunkText(text: string, chunkSize = 500, overlap = 50): string[] {\n  const chunks: string[] = [];\n  for (let i = 0; i < text.length; i += chunkSize - overlap) {\n    chunks.push(text.slice(i, i + chunkSize));\n  }\n  return chunks;\n}\n\nexport class VectorDB {\n  private index: Index;\n  constructor(index: Index) {\n    this.index = index;\n  }\n\n  async reset(options?: ResetOptions) {\n    await this.index.reset({ namespace: options?.namespace });\n  }\n\n  async delete({ ids, namespace }: { ids: string[]; namespace?: string }) {\n    await this.index.delete(ids, { namespace });\n  }\n\n  /**\n   * A method that allows you to query the vector database with plain text.\n   * It takes care of the text-to-embedding conversion by itself.\n   * Additionally, it lets consumers pass various options to tweak the output.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\n  async retrieve<TMetadata>({\n    question,\n    similarityThreshold = DEFAULT_SIMILARITY_THRESHOLD,\n    topK = DEFAULT_TOP_K,\n    namespace,\n    contextFilter,\n    queryMode,\n  }: VectorPayload): Promise<\n    { data: string; id: string; metadata: TMetadata }[]\n  > {\n    const index = this.index;\n    const result = await index.query<Record<string, string>>(\n      {\n        ...(typeof question === \"string\"\n          ? { data: question }\n          : { vector: question }),\n        topK,\n        includeData: true,\n        includeMetadata: true,\n        ...(typeof contextFilter === \"string\" && { filter: contextFilter }),\n        queryMode,\n      },\n      { namespace },\n    );\n    console.log(\"Vector Retrive: \", result)\n    const allValuesUndefined = result.every(\n      (embedding) => embedding.data === undefined,\n    );\n\n    if (allValuesUndefined) {\n      console.error(\n        \"There is no answer for this question in the provided context.\",\n      );\n\n      return [\n        {\n          data: \"There is no answer for this question in the provided context.\",\n          id: \"error\",\n          metadata: {} as TMetadata,\n        },\n      ];\n    }\n\n    const facts = result\n      .filter((x) => x.score >= similarityThreshold)\n      .map((embedding) => ({\n        data: embedding.data ?? \"\",\n        id: embedding.id.toString(),\n        metadata: embedding.metadata as TMetadata,\n      }));\n\n    return facts;\n  }\n\n  /**\n   * A method that allows you to add various data types into a vector database.\n   * It supports plain text, embeddings, PDF, HTML, Text file and CSV. Additionally, it handles text-splitting for CSV, PDF and Text file.\n   */\n  async save(input: AddContextPayload): Promise<SaveOperationResult> {\n    const { namespace } = input.options ?? {};\n    if (input.type === \"text\") {\n      try {\n        const returnId = input.id ?? nanoid();\n        await this.index.upsert(\n          {\n            data: input.data,\n            id: returnId,\n            metadata: input.options?.metadata,\n          },\n          { namespace },\n        );\n\n        return { success: true, ids: [returnId.toString()] };\n      } catch (error) {\n        return {\n          success: false,\n          error: JSON.stringify(error, Object.getOwnPropertyNames(error)),\n        };\n      }\n    } else if (input.type === \"embedding\") {\n      try {\n        const returnId = input.id ?? nanoid();\n        await this.index.upsert(\n          {\n            vector: input.data,\n            data: input.text,\n            id: returnId,\n            metadata: input.options?.metadata,\n          },\n          { namespace },\n        );\n\n        return { success: true, ids: [returnId.toString()] };\n      } catch (error) {\n        return {\n          success: false,\n          error: JSON.stringify(error, Object.getOwnPropertyNames(error)),\n        };\n      }\n    } else {\n      try {\n        // Determine the file source (string path or URL)\n        let fileSource: string | undefined = undefined;\n        if (\"fileSource\" in input && typeof input.fileSource === \"string\") {\n          fileSource = input.fileSource;\n        } else if (\"source\" in input && typeof input.source === \"string\") {\n          fileSource = input.source;\n        }\n        if (!fileSource) {\n          throw new Error(\"No valid file source provided for extractText\");\n        }\n\n        // extractText should return a string (the extracted text)\n        const res = await scrapeContent(fileSource);\n        if (!res?.markdown && !res?.summary) {\n          throw new Error(\"Failed to extract data from the provided source\");\n        }\n\n        // chunk the extracted text\n        const transformArgs = \"config\" in input ? input.config : {};\n        // If transformArgs has chunkSize/overlap, use them, else default\n        const chunkSize =\n          (transformArgs && (transformArgs as any).chunkSize) || 500;\n        const overlap =\n          (transformArgs && (transformArgs as any).overlap) || 100;\n\n        // Prefer markdown for chunking; fallbacks for possible shapes\n        const markdown =\n          (res as any).markdown ??\n          (res as any)?.output?.markdown ??\n          (res as any)?.output?.txt ??\n          \"\";\n        const summary =\n          (res as any).summary ?? (res as any)?.output?.summary;\n\n        const chunks = chunkText(markdown, chunkSize, overlap);\n\n        // upsert each chunk\n        const ids: string[] = [];\n        for (const chunk of chunks) {\n          const id = nanoid();\n          await this.index.upsert(\n            {\n              data: chunk,\n              id,\n              metadata: {\n                ...(input.options?.metadata ?? {}),\n                ...(summary ? { summary } : {}),\n              },\n            },\n            { namespace },\n          );\n          ids.push(id);\n        }\n\n        return { success: true, ids };\n      } catch (error) {\n        console.error(error);\n        return {\n          success: false,\n          error: JSON.stringify(error, Object.getOwnPropertyNames(error)),\n        };\n      }\n    }\n  }\n}\n","import { Index } from \"@upstash/vector\";\nimport { VectorDB } from \"./vector-db\";\nimport type {\n  AddContextPayload,\n  VectorPayload,\n  SaveOperationResult,\n} from \"../types\";\n\nexport type ExtVectorConfig = {\n  url: string;\n  token: string;\n};\n\nexport class ExtVector {\n  private vectorDB: VectorDB;\n  private namespace: string;\n\n  constructor(config: ExtVectorConfig, namespace: string) {\n    const index = new Index({\n      url: config.url,\n      token: config.token,\n    });\n    this.vectorDB = new VectorDB(index);\n    this.namespace = namespace;\n  }\n\n  async addContext(input: AddContextPayload): Promise<SaveOperationResult> {\n    // Always use the provided namespace\n    if (!input.options) input.options = {};\n    input.options.namespace = this.namespace;\n    return this.vectorDB.save(input);\n  }\n\n  async removeContext(ids: string[]): Promise<void> {\n    await this.vectorDB.delete({ ids, namespace: this.namespace });\n  }\n\n  async getContext<TMetadata>(\n    payload: Omit<VectorPayload, \"namespace\">,\n  ): Promise<{ data: string; id: string; metadata: TMetadata }[]> {\n    return this.vectorDB.retrieve<TMetadata>({\n      ...payload,\n      namespace: this.namespace,\n    });\n  }\n\n  async resetContext(): Promise<void> {\n    await this.vectorDB.reset({ namespace: this.namespace });\n  }\n}\n","\"use client\";\nimport type { BaseVectorContext, GetContextClientParams } from \"../types\";\nimport { ExtVector } from \"./ext-vector\";\n\nexport const getContextClient = (\n  params?: GetContextClientParams,\n): BaseVectorContext | undefined => {\n  const vectorUrl = params?.vector?.url;\n  const vectorToken = params?.vector?.token;\n  // Prefer container_id as namespace, fallback to provided vector.namespace\n  const namespace = params?.vector?.namespace;\n\n  if (vectorUrl && vectorToken && namespace) {\n    return new ExtVector({ url: vectorUrl, token: vectorToken }, namespace);\n  }\n};\n","import { Redis, type RedisConfigNodejs } from \"@upstash/redis\";\nimport type { Message } from \"ai\";\nimport {\n  DEFAULT_CHAT_SESSION_ID,\n  DEFAULT_HISTORY_LENGTH,\n  DEFAULT_HISTORY_TTL,\n} from \"../lib/constants\";\nimport type { BaseMessageHistory } from \"../types\";\n\nexport type RedisHistoryConfig = {\n  config?: RedisConfigNodejs;\n  client?: Redis;\n};\n\nexport class InRedisHistory implements BaseMessageHistory {\n  public client: Redis;\n\n  constructor(config: RedisHistoryConfig) {\n    const { config: redisConfig, client } = config;\n\n    if (client) {\n      this.client = client;\n    } else if (redisConfig) {\n      this.client = new Redis(redisConfig);\n    } else {\n      throw new Error(\n        \"Redis message stores require either a config object or a pre-configured client.\",\n      );\n    }\n  }\n\n  async addMessage(params: {\n    message: Message;\n    sessionId: string;\n    sessionTTL?: number;\n  }): Promise<void> {\n    const { message, sessionId, sessionTTL } = params;\n    let TTL = DEFAULT_HISTORY_TTL;\n    if (sessionTTL) {\n      TTL = sessionTTL;\n    }\n    const sessionID = DEFAULT_CHAT_SESSION_ID(sessionId);\n\n    await this.client.lpush(sessionID, JSON.stringify(message));\n    if (sessionTTL) {\n      await this.client.expire(sessionID, TTL);\n    }\n  }\n\n  async deleteMessages({ sessionId }: { sessionId: string }): Promise<void> {\n    await this.client.del(sessionId);\n  }\n\n  async getMessages({\n    sessionId,\n    amount = DEFAULT_HISTORY_LENGTH,\n    startIndex = 0,\n  }: {\n    sessionId: string;\n    amount?: number;\n    startIndex?: number;\n  }): Promise<Message[]> {\n    const sessionID = DEFAULT_CHAT_SESSION_ID(sessionId);\n    const endIndex = startIndex + amount - 1;\n    const messages = await this.client.lrange<Message>(\n      sessionID,\n      startIndex,\n      endIndex,\n    );\n    return messages.reverse();\n  }\n}\n","\"use client\";\nimport type { BaseMessageHistory } from \"../types\";\nimport { InRedisHistory } from \"./in-redis\";\n\nexport type GetHistoryClientParams = {\n  redis?: {\n    url: string;\n    token: string;\n  };\n};\n\nexport const getHistoryClient = (\n  params?: GetHistoryClientParams,\n): BaseMessageHistory | undefined => {\n  const redisUrl = params?.redis?.url;\n  const redisToken = params?.redis?.token;\n\n  if (redisUrl && redisToken) {\n    return new InRedisHistory({\n      config: {\n        url: redisUrl,\n        token: redisToken,\n      },\n    });\n  }\n};\n","// AI Chat SDK - Main Entry Point\n// This SDK provides AI chat functionality with persistent history and vector context\n\n// Import all components\nimport { Telementry } from \"./telemetry\";\nimport { getContextClient, VectorDB, ExtVector } from \"./context\";\nimport { getHistoryClient, InRedisHistory } from \"./history\";\n\n// Import centralized types and version info\nimport type {\n  TelementryOptions,\n  GetContextClientParams,\n  GetHistoryClientParams,\n  ExtVectorConfig,\n  RedisHistoryConfig,\n  SDKConfig,\n  SDKStatus,\n  EventName,\n  EventProperties,\n  VectorContextResult,\n  BaseMessageHistory,\n} from \"./types\";\nimport { SDK_VERSION, SDK_NAME } from \"./version\";\n\n// Re-export all components\nexport {\n  Telementry,\n  getContextClient,\n  getHistoryClient,\n  VectorDB,\n  ExtVector,\n  InRedisHistory,\n};\n\n// Re-export constants\nexport {\n  DEFAULT_CHAT_SESSION_ID,\n  DEFAULT_HISTORY_LENGTH,\n  DEFAULT_HISTORY_TTL,\n  DEFAULT_MSG_ID,\n  DEFAULT_SIMILARITY_THRESHOLD,\n  DEFAULT_TOP_K,\n} from \"./lib/constants\";\n\n// Re-export all types\nexport type {\n  TelementryOptions,\n  GetContextClientParams,\n  GetHistoryClientParams,\n  ExtVectorConfig,\n  RedisHistoryConfig,\n  SDKConfig,\n  SDKStatus,\n  EventName,\n  EventProperties,\n  VectorContextResult,\n  BaseMessageHistory,\n};\n\n// Export version information\nexport { SDK_VERSION, SDK_NAME };\n\n/**\n * AI Chat SDK - Main class for configuring and managing AI chat functionality\n *\n * @example\n * ```typescript\n * // Professional usage - recommended approach\n * const sdk = new AIChatSDK({\n *   telemetry: { enabled: true },\n *   context: {\n *     vector: {\n *       url: 'https://your-vector-db.upstash.io',\n *       token: 'your-token',\n *       namespace: 'your-namespace'\n *     }\n *   }\n * });\n *\n * // Use the configured clients\n * const contextClient = sdk.getContextClient();\n * const historyClient = sdk.getHistoryClient();\n * ```\n */\nexport class AIChatSDK {\n  private telemetry?: Telementry;\n  private contextClient?: ReturnType<typeof getContextClient>;\n  private historyClient?: ReturnType<typeof getHistoryClient>;\n\n  /**\n   * Creates a new AIChatSDK instance with the specified configuration\n   *\n   * @param config - Configuration options for telemetry, context, and history\n   *\n   * @example\n   * ```typescript\n   * const sdk = new AIChatSDK({\n   *   telemetry: { enabled: true },\n   *   context: { vector: { url: '...', token: '...', namespace: '...' } },\n   *   history: { redis: { url: '...', token: '...' } }\n   * });\n   * ```\n   */\n  constructor(config?: SDKConfig) {\n    if (config?.telemetry) {\n      this.telemetry = new Telementry(config.telemetry);\n    }\n\n    if (config?.context) {\n      this.contextClient = getContextClient(config.context);\n    }\n\n    if (config?.history) {\n      this.historyClient = getHistoryClient(config.history);\n    }\n  }\n\n  /**\n   * Get the configured telemetry instance\n   */\n  getTelemetry(): Telementry | undefined {\n    return this.telemetry;\n  }\n\n  /**\n   * Get the configured context client\n   */\n  getContextClient() {\n    return this.contextClient;\n  }\n\n  /**\n   * Get the configured history client\n   */\n  getHistoryClient() {\n    return this.historyClient;\n  }\n\n  /**\n   * Send a telemetry event if telemetry is enabled\n   */\n  async trackEvent(\n    event: EventName,\n    properties: EventProperties,\n  ): Promise<void> {\n    if (this.telemetry) {\n      await this.telemetry.send(event as any, properties as any);\n    }\n  }\n\n  /**\n   * Check if the SDK is properly configured\n   */\n  isConfigured(): boolean {\n    return !!(this.contextClient || this.historyClient);\n  }\n\n  /**\n   * Get SDK configuration status\n   */\n  getConfigurationStatus(): SDKStatus {\n    return {\n      telemetry: !!this.telemetry,\n      context: !!this.contextClient,\n      history: !!this.historyClient,\n    };\n  }\n\n  /**\n   * Get SDK version information\n   */\n  getVersionInfo(): { version: string; name: string } {\n    return {\n      version: SDK_VERSION,\n      name: SDK_NAME,\n    };\n  }\n\n  /**\n   * Reset all configured clients\n   */\n  reset(): void {\n    this.telemetry = undefined;\n    this.contextClient = undefined;\n    this.historyClient = undefined;\n  }\n\n  /**\n   * Update SDK configuration\n   */\n  updateConfig(config: SDKConfig): void {\n    this.reset();\n\n    if (config.telemetry) {\n      this.telemetry = new Telementry(config.telemetry);\n    }\n\n    if (config.context) {\n      this.contextClient = getContextClient(config.context);\n    }\n\n    if (config.history) {\n      this.historyClient = getHistoryClient(config.history);\n    }\n  }\n}\n\n// Alternative convenience function (for backward compatibility)\nexport function createAIChatSDK(config?: SDKConfig): AIChatSDK {\n  return new AIChatSDK(config);\n}\n\n// Utility functions for direct access to components\nexport function createTelemetry(options: TelementryOptions): Telementry {\n  return new Telementry(options);\n}\n\nexport function createContextClient(params: GetContextClientParams) {\n  return getContextClient(params);\n}\n\nexport function createHistoryClient(params?: GetHistoryClientParams) {\n  return getHistoryClient(params);\n}\n\n// Default export for convenience\nexport default AIChatSDK;"]}