{"version":3,"sources":["../../artifacts/src/utils.ts","../../artifacts/src/artifact.ts","../../artifacts/src/context.ts","../../artifacts/src/streaming.ts","../../artifacts/src/types.ts","../src/cache-store.ts","../src/backends/memory.ts","../src/backends/redis.ts","../src/backends/factory.ts","../src/cache.ts"],"names":["generateIdAi","cached","writer","getWriter","result"],"mappings":"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","file":"index.cjs","sourcesContent":["import { generateId as generateIdAi } from \"ai\";\nimport type { z } from \"zod\";\n\nexport function generateId(): string {\n  return `artifact_${Date.now()}_${generateIdAi()}`;\n}\n\nexport function getDefaults<T>(schema: z.ZodSchema<T>): Partial<T> {\n  try {\n    return schema.parse({});\n  } catch {\n    return {};\n  }\n}\n","import type { UIMessageStreamWriter } from \"ai\";\nimport type { z } from \"zod\";\nimport { StreamingArtifact } from \"./streaming\";\nimport type { ArtifactConfig, ArtifactData } from \"./types\";\nimport { generateId, getDefaults } from \"./utils\";\n\nexport function artifact<T>(id: string, schema: z.ZodSchema<T>) {\n  const config: ArtifactConfig<T> = { id, schema };\n\n  return {\n    id,\n    schema,\n\n    create(data: Partial<T> = {}): ArtifactData<T> {\n      const defaults = getDefaults(schema);\n      const validated = schema.parse({ ...defaults, ...data });\n\n      return {\n        id: generateId(),\n        type: id,\n        status: \"idle\",\n        payload: validated,\n        version: 1,\n        createdAt: Date.now(),\n        updatedAt: Date.now(),\n      };\n    },\n\n    stream(\n      data: Partial<T>,\n      writer: UIMessageStreamWriter,\n    ): StreamingArtifact<T> {\n      const instance = this.create(data);\n      instance.status = \"loading\";\n      return new StreamingArtifact(config, instance, writer);\n    },\n\n    validate(data: unknown): T {\n      return schema.parse(data);\n    },\n\n    isValid(data: unknown): data is T {\n      try {\n        schema.parse(data);\n        return true;\n      } catch {\n        return false;\n      }\n    },\n  };\n}\n","/**\n * Artifacts Writer Access\n *\n * Provides access to the stream writer from tool executionOptions.\n * The writer is needed to stream artifact updates to the client.\n *\n */\n\nimport type { UIMessageStreamWriter } from \"ai\";\n\n/**\n * Get writer from execution context\n *\n * @param executionOptions - Tool execution options from AI SDK\n * @returns The stream writer\n *\n * @example\n * ```typescript\n * export const myTool = tool({\n *   execute: async (params, executionOptions) => {\n *     const writer = getWriter(executionOptions);\n *     const artifact = MyArtifact.stream(data, writer);\n *   }\n * });\n * ```\n */\nexport function getWriter(executionOptions?: any): UIMessageStreamWriter {\n  // AI SDK passes context via experimental_context\n  const writer = executionOptions?.experimental_context?.writer;\n\n  if (!writer) {\n    throw new Error(\n      \"Writer not available. Make sure you're passing executionOptions: getWriter(executionOptions)\",\n    );\n  }\n\n  return writer;\n}\n","import type { UIMessageStreamWriter } from \"ai\";\nimport type { ArtifactConfig, ArtifactData } from \"./types\";\n\nexport class StreamingArtifact<T> {\n  private config: ArtifactConfig<T>;\n  private instance: ArtifactData<T>;\n  private writer: UIMessageStreamWriter;\n\n  constructor(\n    config: ArtifactConfig<T>,\n    instance: ArtifactData<T>,\n    writer: UIMessageStreamWriter,\n  ) {\n    this.config = config;\n    this.instance = instance;\n    this.writer = writer;\n\n    // Send initial state\n    this.stream();\n  }\n\n  get data(): T {\n    return this.instance.payload;\n  }\n\n  get id(): string {\n    return this.instance.id;\n  }\n\n  get progress(): number | undefined {\n    return this.instance.progress;\n  }\n\n  set progress(value: number | undefined) {\n    this.instance.progress = value;\n    this.instance.updatedAt = Date.now();\n    this.stream();\n  }\n\n  async update(updates: Partial<T> & { progress?: number }): Promise<void> {\n    if (\"progress\" in updates) {\n      this.instance.progress = updates.progress;\n      delete (updates as Record<string, unknown>).progress; // Remove progress from payload updates\n    }\n\n    this.instance.payload = { ...this.instance.payload, ...updates };\n    this.instance.status = \"streaming\";\n    this.instance.version++;\n    this.instance.updatedAt = Date.now();\n    this.stream();\n  }\n\n  async complete(finalData?: T): Promise<void> {\n    if (finalData) {\n      this.instance.payload = finalData;\n    }\n    this.instance.status = \"complete\";\n    this.instance.progress = 1;\n    this.instance.version++;\n    this.instance.updatedAt = Date.now();\n    this.stream();\n  }\n\n  async error(message: string): Promise<void> {\n    this.instance.status = \"error\";\n    this.instance.error = message;\n    this.instance.version++;\n    this.instance.updatedAt = Date.now();\n    this.stream();\n  }\n\n  async cancel(): Promise<void> {\n    this.instance.status = \"error\";\n    this.instance.error = \"Artifact was cancelled\";\n    this.instance.version++;\n    this.instance.updatedAt = Date.now();\n    this.stream();\n  }\n\n  timeout(ms: number): void {\n    setTimeout(() => {\n      if (\n        this.instance.status === \"loading\" ||\n        this.instance.status === \"streaming\"\n      ) {\n        this.error(`Artifact timed out after ${ms}ms`);\n      }\n    }, ms);\n  }\n\n  private stream(): void {\n    this.writer.write({\n      type: `data-artifact-${this.config.id}`,\n      id: this.instance.id,\n      data: this.instance,\n    });\n  }\n}\n","import type { z } from \"zod\";\n\nexport type ArtifactStatus =\n  | \"idle\"\n  | \"loading\"\n  | \"streaming\"\n  | \"complete\"\n  | \"error\";\n\nexport class ArtifactError extends Error {\n  constructor(\n    public code: string,\n    message: string,\n  ) {\n    super(message);\n    this.name = \"ArtifactError\";\n  }\n}\n\nexport interface ArtifactData<T = unknown> {\n  id: string;\n  type: string;\n  status: ArtifactStatus;\n  payload: T;\n  version: number;\n  progress?: number;\n  error?: string;\n  createdAt: number;\n  updatedAt: number;\n}\n\nexport interface ArtifactConfig<T = unknown> {\n  id: string;\n  schema: z.ZodSchema<T>;\n}\n\nexport interface ArtifactStreamPart<T = unknown> {\n  type: `data-artifact-${string}`;\n  id: string;\n  data: ArtifactData<T>;\n}\n\nexport interface ArtifactCallbacks<T = unknown> {\n  onUpdate?: (data: T, prevData: T | null) => void;\n  onComplete?: (data: T) => void;\n  onError?: (error: string, data: T | null) => void;\n  onProgress?: (progress: number, data: T) => void;\n  onStatusChange?: (status: ArtifactStatus, prevStatus: ArtifactStatus) => void;\n}\n\nexport interface UseArtifactOptions<T = unknown> extends ArtifactCallbacks<T> {\n  version?: number;\n}\n\nexport interface UseArtifactReturn<T = unknown> {\n  data: T | null;\n  status: ArtifactStatus;\n  progress?: number;\n  error?: string;\n  isActive: boolean;\n  hasData: boolean;\n  versions: ArtifactData<T>[];\n  currentIndex?: number;\n}\n\nexport interface UseArtifactActions {\n  delete: (artifactId: string) => void;\n}\n\nexport interface UseArtifactsOptions {\n  onData?: (artifactType: string, data: ArtifactData<unknown>) => void;\n  storeId?: string;\n  include?: string[]; // Only listen to these artifact types\n  exclude?: string[]; // Ignore these artifact types\n  value?: string | null; // Optional: externally controlled active type\n  onChange?: (value: string | null) => void; // Optional: callback when active type changes\n  dismissed?: string[]; // Optional: externally controlled dismissed types\n  onDismissedChange?: (dismissed: string[]) => void; // Optional: callback when dismissed types change\n}\n\nexport interface UseArtifactsReturn {\n  byType: Record<string, ArtifactData<unknown>[]>;\n  latestByType: Record<string, ArtifactData<unknown>>;\n  artifacts: ArtifactData<unknown>[];\n  current: ArtifactData<unknown> | null;\n  activeType: string | null;\n  activeArtifacts: ArtifactData<unknown>[];\n  types: string[];\n  latestArtifactType: string | null;\n  available: string[];\n  dismissed: string[];\n}\n\nexport interface UseArtifactsActions {\n  setValue: (value: string | null) => void;\n  dismiss: (type: string) => void;\n  restore: (type: string) => void;\n}\n","import type { CacheEntry, CacheStore } from \"./types\";\n\n/**\n * LRU (Least Recently Used) cache implementation\n */\nexport class LRUCacheStore<T = any> implements CacheStore<T> {\n  private cache = new Map<string, CacheEntry<T>>();\n  private maxSize: number;\n\n  constructor(maxSize = 1000) {\n    this.maxSize = maxSize;\n  }\n\n  get(key: string): CacheEntry<T> | undefined {\n    const entry = this.cache.get(key);\n    if (entry) {\n      // Move to end (most recently used)\n      this.cache.delete(key);\n      this.cache.set(key, entry);\n    }\n    return entry;\n  }\n\n  set(key: string, entry: CacheEntry<T>): void {\n    // Remove if already exists\n    if (this.cache.has(key)) {\n      this.cache.delete(key);\n    }\n    // Evict oldest if at capacity\n    else if (this.cache.size >= this.maxSize) {\n      const firstKey = this.cache.keys().next().value;\n      if (firstKey) {\n        this.cache.delete(firstKey);\n      }\n    }\n\n    this.cache.set(key, entry);\n  }\n\n  delete(key: string): boolean {\n    return this.cache.delete(key);\n  }\n\n  clear(): void {\n    this.cache.clear();\n  }\n\n  has(key: string): boolean {\n    return this.cache.has(key);\n  }\n\n  size(): number {\n    return this.cache.size;\n  }\n\n  keys(): string[] {\n    return Array.from(this.cache.keys());\n  }\n\n  getDefaultTTL?(): number | undefined {\n    return undefined;\n  }\n}\n\n/**\n * Simple Map-based cache store (no LRU eviction)\n */\nexport class SimpleCacheStore<T = any> implements CacheStore<T> {\n  private cache = new Map<string, CacheEntry<T>>();\n  private maxSize: number;\n\n  constructor(maxSize = 1000) {\n    this.maxSize = maxSize;\n  }\n\n  get(key: string): CacheEntry<T> | undefined {\n    return this.cache.get(key);\n  }\n\n  set(key: string, entry: CacheEntry<T>): void {\n    // Simple eviction: clear all if at capacity\n    if (this.cache.size >= this.maxSize) {\n      this.cache.clear();\n    }\n    this.cache.set(key, entry);\n  }\n\n  delete(key: string): boolean {\n    return this.cache.delete(key);\n  }\n\n  clear(): void {\n    this.cache.clear();\n  }\n\n  has(key: string): boolean {\n    return this.cache.has(key);\n  }\n\n  size(): number {\n    return this.cache.size;\n  }\n\n  keys(): string[] {\n    return Array.from(this.cache.keys());\n  }\n\n  getDefaultTTL?(): number | undefined {\n    return undefined;\n  }\n}\n","import type { CacheEntry, CacheStore } from \"../types\";\n\n/**\n * Enhanced memory cache store with better performance characteristics\n */\nexport class MemoryCacheStore<T = any> implements CacheStore<T> {\n  private cache = new Map<string, CacheEntry<T>>();\n  private accessOrder = new Map<string, number>();\n  private maxSize: number;\n  private accessCounter = 0;\n\n  constructor(maxSize = 1000) {\n    this.maxSize = maxSize;\n  }\n\n  get(key: string): CacheEntry<T> | undefined {\n    const entry = this.cache.get(key);\n    if (entry) {\n      // Update access order for LRU\n      this.accessOrder.set(key, ++this.accessCounter);\n    }\n    return entry;\n  }\n\n  set(key: string, entry: CacheEntry<T>): void {\n    // If key already exists, just update it\n    if (this.cache.has(key)) {\n      this.cache.set(key, entry);\n      this.accessOrder.set(key, ++this.accessCounter);\n      return;\n    }\n\n    // If at capacity, evict least recently used\n    if (this.cache.size >= this.maxSize) {\n      this.evictLRU();\n    }\n\n    this.cache.set(key, entry);\n    this.accessOrder.set(key, ++this.accessCounter);\n  }\n\n  delete(key: string): boolean {\n    const deleted = this.cache.delete(key);\n    if (deleted) {\n      this.accessOrder.delete(key);\n    }\n    return deleted;\n  }\n\n  clear(): void {\n    this.cache.clear();\n    this.accessOrder.clear();\n    this.accessCounter = 0;\n  }\n\n  has(key: string): boolean {\n    return this.cache.has(key);\n  }\n\n  size(): number {\n    return this.cache.size;\n  }\n\n  keys(): string[] {\n    return Array.from(this.cache.keys());\n  }\n\n  getDefaultTTL?(): number | undefined {\n    return undefined;\n  }\n\n  private evictLRU(): void {\n    let oldestKey: string | undefined;\n    let oldestAccess = Infinity;\n\n    for (const [key, accessTime] of this.accessOrder) {\n      if (accessTime < oldestAccess) {\n        oldestAccess = accessTime;\n        oldestKey = key;\n      }\n    }\n\n    if (oldestKey) {\n      this.cache.delete(oldestKey);\n      this.accessOrder.delete(oldestKey);\n    }\n  }\n\n  /**\n   * Get cache statistics\n   */\n  getStats() {\n    return {\n      size: this.cache.size,\n      maxSize: this.maxSize,\n      utilization: this.cache.size / this.maxSize,\n    };\n  }\n\n  /**\n   * Clean up expired entries based on TTL\n   */\n  cleanup(ttl: number): number {\n    const now = Date.now();\n    let cleaned = 0;\n\n    for (const [key, entry] of this.cache) {\n      if (now - entry.timestamp > ttl) {\n        this.cache.delete(key);\n        this.accessOrder.delete(key);\n        cleaned++;\n      }\n    }\n\n    return cleaned;\n  }\n}\n","import type { CacheEntry, CacheStore } from \"../types\";\n\n/**\n * Redis cache store implementation\n * Requires redis client to be provided\n */\nexport class RedisCacheStore<T = any> implements CacheStore<T> {\n  private redis: any;\n  private keyPrefix: string;\n\n  constructor(redisClient: any, keyPrefix = \"ai-tools-cache:\") {\n    this.redis = redisClient;\n    this.keyPrefix = keyPrefix;\n  }\n\n  private getKey(key: string): string {\n    return `${this.keyPrefix}${key}`;\n  }\n\n  async get(key: string): Promise<CacheEntry<T> | undefined> {\n    try {\n      const data = await this.redis.get(this.getKey(key));\n      if (!data) return undefined;\n      \n      // Handle different Redis client return types\n      let jsonString: string;\n      if (typeof data === 'string') {\n        jsonString = data;\n      } else if (typeof data === 'object') {\n        // Some Redis clients return objects directly\n        return {\n          result: data.result,\n          timestamp: data.timestamp,\n          key: data.key,\n        };\n      } else {\n        // Convert other types to string\n        jsonString = String(data);\n      }\n      \n      const parsed = JSON.parse(jsonString);\n      return {\n        result: parsed.result,\n        timestamp: parsed.timestamp,\n        key: parsed.key,\n      };\n    } catch (error) {\n      console.warn(`Redis cache get error for key ${key}:`, error);\n      return undefined;\n    }\n  }\n\n  async set(key: string, entry: CacheEntry<T>): Promise<void> {\n    try {\n      const data = JSON.stringify({\n        result: entry.result,\n        timestamp: entry.timestamp,\n        key: entry.key,\n      });\n      \n      await this.redis.set(this.getKey(key), data);\n    } catch (error) {\n      console.warn(`Redis cache set error for key ${key}:`, error);\n    }\n  }\n\n  async setWithTTL(key: string, entry: CacheEntry<T>, ttlSeconds: number): Promise<void> {\n    try {\n      const data = JSON.stringify({\n        result: entry.result,\n        timestamp: entry.timestamp,\n        key: entry.key,\n      });\n      \n      await this.redis.setex(this.getKey(key), ttlSeconds, data);\n    } catch (error) {\n      console.warn(`Redis cache setex error for key ${key}:`, error);\n    }\n  }\n\n  async delete(key: string): Promise<boolean> {\n    try {\n      const result = await this.redis.del(this.getKey(key));\n      return result > 0;\n    } catch (error) {\n      console.warn(`Redis cache delete error for key ${key}:`, error);\n      return false;\n    }\n  }\n\n  async clear(): Promise<void> {\n    try {\n      const keys = await this.redis.keys(`${this.keyPrefix}*`);\n      if (keys.length > 0) {\n        await this.redis.del(...keys);\n      }\n    } catch (error) {\n      console.warn(\"Redis cache clear error:\", error);\n    }\n  }\n\n  async has(key: string): Promise<boolean> {\n    try {\n      const exists = await this.redis.exists(this.getKey(key));\n      return exists > 0;\n    } catch (error) {\n      console.warn(`Redis cache exists error for key ${key}:`, error);\n      return false;\n    }\n  }\n\n  async size(): Promise<number> {\n    try {\n      const keys = await this.redis.keys(`${this.keyPrefix}*`);\n      return keys.length;\n    } catch (error) {\n      console.warn(\"Redis cache size error:\", error);\n      return 0;\n    }\n  }\n\n  async keys(): Promise<string[]> {\n    try {\n      const keys = await this.redis.keys(`${this.keyPrefix}*`);\n      return keys.map((key: string) => key.replace(this.keyPrefix, \"\"));\n    } catch (error) {\n      console.warn(\"Redis cache keys error:\", error);\n      return [];\n    }\n  }\n\n  getDefaultTTL?(): number | undefined {\n    return undefined;\n  }\n}\n","import type { CacheStore } from \"../types\";\nimport { LRUCacheStore, SimpleCacheStore } from \"../cache-store\";\nimport { MemoryCacheStore } from \"./memory\";\nimport { RedisCacheStore } from \"./redis\";\n\n/**\n * Cache backend configuration\n */\nexport interface CacheBackendConfig {\n  type: \"memory\" | \"lru\" | \"simple\" | \"redis\";\n  maxSize?: number;\n  defaultTTL?: number;\n  redis?: {\n    client: any;\n    keyPrefix?: string;\n  };\n}\n\n/**\n * Factory function to create cache backends\n */\nexport function createCacheBackend<T = any>(config: CacheBackendConfig): CacheStore<T> {\n  let store: CacheStore<T>;\n  \n  switch (config.type) {\n    case \"memory\":\n      store = new MemoryCacheStore<T>(config.maxSize);\n      break;\n    \n    case \"lru\":\n      store = new LRUCacheStore<T>(config.maxSize);\n      break;\n    \n    case \"simple\":\n      store = new SimpleCacheStore<T>(config.maxSize);\n      break;\n    \n    case \"redis\":\n      if (!config.redis?.client) {\n        throw new Error(\"Redis client is required for redis cache backend\");\n      }\n      store = new RedisCacheStore<T>(config.redis.client, config.redis.keyPrefix);\n      break;\n    \n    default:\n      throw new Error(`Unknown cache backend type: ${(config as any).type}`);\n  }\n  \n  // Add default TTL support if configured\n  if (config.defaultTTL) {\n    (store as any).getDefaultTTL = () => config.defaultTTL;\n  }\n  \n  return store;\n}\n\n/**\n * Global cache backend configuration\n */\nlet globalCacheBackend: CacheStore | null = null;\n\n/**\n * Configure global cache backend\n */\nexport function configureCacheBackend(config: CacheBackendConfig): void {\n  globalCacheBackend = createCacheBackend(config);\n}\n\n/**\n * Get the global cache backend\n */\nexport function getGlobalCacheBackend<T = any>(): CacheStore<T> | null {\n  return globalCacheBackend as CacheStore<T> | null;\n}\n\n/**\n * Reset global cache backend\n */\nexport function resetCacheBackend(): void {\n  globalCacheBackend = null;\n}\n","import type { Tool } from \"ai\";\nimport { createCacheBackend } from \"./backends/factory\";\nimport { LRUCacheStore } from \"./cache-store\";\nimport type { CachedTool, CacheOptions, CacheStats, CacheStore } from \"./types\";\n\n/**\n * Default cache key generator - stable and deterministic\n */\nfunction defaultKeyGenerator(params: any, context?: any): string {\n  const paramsKey = serializeValue(params);\n\n  if (context) {\n    return `${paramsKey}|${context}`;\n  }\n\n  return paramsKey;\n}\n\n/**\n * Serialize a value to a stable string representation\n */\nfunction serializeValue(value: any): string {\n  // Handle different parameter types like React Query\n  if (value === null || value === undefined) {\n    return \"null\";\n  }\n\n  if (\n    typeof value === \"string\" ||\n    typeof value === \"number\" ||\n    typeof value === \"boolean\"\n  ) {\n    return String(value);\n  }\n\n  if (value instanceof Date) {\n    return value.toISOString();\n  }\n\n  if (Array.isArray(value)) {\n    return `[${value.map(serializeValue).join(\",\")}]`;\n  }\n\n  if (typeof value === \"object\") {\n    // Sort keys for deterministic serialization (like React Query)\n    const sortedKeys = Object.keys(value).sort();\n    const pairs = sortedKeys.map(\n      (key) => `${key}:${serializeValue(value[key])}`,\n    );\n    return `{${pairs.join(\",\")}}`;\n  }\n\n  return String(value);\n}\n\n/**\n * Simple streaming tool cache - just adds cache API methods without interfering\n */\nfunction createStreamingCachedTool<T extends Tool>(\n  tool: T,\n  options: CacheOptions,\n): CachedTool<T> {\n  const {\n    ttl = 5 * 60 * 1000,\n    maxSize = 1000,\n    store,\n    keyGenerator = defaultKeyGenerator,\n    cacheKey,\n    shouldCache = () => true,\n    onHit,\n    onMiss,\n    debug = false,\n  } = options;\n\n  const cacheStore = store || new LRUCacheStore(maxSize);\n  let hits = 0;\n  let misses = 0;\n\n  // Add cache API methods and override execute with caching logic\n  return {\n    ...tool,\n    execute: async function* (...args: any[]) {\n      const [params, executionOptions] = args;\n      // Get context from cacheKey function\n      const context = cacheKey?.();\n      const key = keyGenerator(params, context);\n      const now = Date.now();\n\n      // Check cache first\n      const cached = await cacheStore.get(key);\n      if (cached && now - cached.timestamp < ttl) {\n        hits++;\n        onHit?.(key);\n\n        const result = cached.result;\n\n        if (debug) {\n          const yields = result?.streamResults?.length || 0;\n          const artifacts = result?.messages?.length || 0;\n          const hasReturn = result?.returnValue !== undefined;\n\n          console.log(`\\n🎯 Cache HIT - Streaming Tool`);\n          console.log(\n            `┌─ Key: ${key.slice(0, 60)}${key.length > 60 ? \"...\" : \"\"}`,\n          );\n          console.log(`├─ Streaming yields: ${yields}`);\n          console.log(`├─ Artifact messages: ${artifacts}`);\n          console.log(`├─ Return value: ${hasReturn ? \"yes\" : \"no\"}`);\n          console.log(`└─ Restoring cached results...\\n`);\n        }\n\n        // Replay artifact messages first\n        if (result?.messages?.length > 0) {\n          let writer =\n            executionOptions?.writer ||\n            (executionOptions as any)?.experimental_context?.writer;\n\n          // Writer comes from AI SDK's experimental_context\n          if (!writer) {\n            try {\n              const { getWriter } = await import(\"@ai-sdk-tools/artifacts\");\n              writer = getWriter(executionOptions);\n            } catch {\n              // Artifacts package not available or writer not available\n            }\n          }\n\n          if (writer) {\n            if (debug)\n              console.log(\n                `   Replaying ${result.messages.length} artifact messages...`,\n              );\n            for (const msg of result.messages) {\n              writer.write(msg);\n            }\n            if (debug) console.log(`   Artifacts restored`);\n          }\n        }\n\n        // Replay streaming yields\n        if (result?.streamResults) {\n          if (debug)\n            console.log(\n              `   Replaying ${result.streamResults.length} streaming yields...`,\n            );\n          for (const item of result.streamResults) {\n            yield item;\n          }\n          if (debug) console.log(`   Streaming content restored`);\n        }\n\n        return result.returnValue;\n      }\n\n      // Cache miss - execute original and capture\n      misses++;\n      onMiss?.(key);\n      if (debug) {\n        console.log(`\\n🔄 Cache MISS - Streaming Tool`);\n        console.log(\n          `┌─ Key: ${key.slice(0, 60)}${key.length > 60 ? \"...\" : \"\"}`,\n        );\n        console.log(\n          `├─ Will capture: streaming yields + artifact messages + return value`,\n        );\n        console.log(`└─ Executing tool and capturing results...\\n`);\n      }\n\n      // Capture writer messages\n      let writer =\n        executionOptions?.writer ||\n        (executionOptions as any)?.experimental_context?.writer;\n\n      // Writer comes from AI SDK's experimental_context\n      if (!writer) {\n        try {\n          const { getWriter } = await import(\"@ai-sdk-tools/artifacts\");\n          writer = getWriter(executionOptions);\n        } catch {\n          // Artifacts package not available or writer not available\n        }\n      }\n\n      const capturedMessages: any[] = [];\n\n      if (writer) {\n        const originalWrite = writer.write;\n        writer.write = (data: any) => {\n          capturedMessages.push(data);\n          return originalWrite.call(writer, data);\n        };\n      }\n\n      // Execute original tool\n      const originalResult = await tool.execute?.(params, executionOptions);\n\n      // Create tee generator that streams and caches\n      let lastChunk: any = null;\n      let finalReturnValue: any;\n      let chunkCount = 0;\n\n      if (\n        originalResult &&\n        typeof originalResult[Symbol.asyncIterator] === \"function\"\n      ) {\n        const iterator = originalResult[Symbol.asyncIterator]();\n        let iterResult = await iterator.next();\n\n        while (!iterResult.done) {\n          lastChunk = iterResult.value; // Just keep the last chunk (it has full text)\n          chunkCount++;\n\n          // Debug logging only for first few yields to avoid spam\n          if (debug && chunkCount <= 3) {\n            console.log(\n              `   Capturing yield #${chunkCount}:`,\n              `${lastChunk?.text?.slice(0, 40)}...`,\n            );\n          }\n          yield iterResult.value; // Stream immediately\n          iterResult = await iterator.next();\n        }\n\n        finalReturnValue = iterResult.value;\n      }\n\n      queueMicrotask(() => {\n        // This runs after all current synchronous operations and promises\n        queueMicrotask(async () => {\n          try {\n            // Store only the final chunk (it already has the complete text)\n            const completeResult = {\n              streamResults: lastChunk ? [lastChunk] : [], // Only final chunk\n              messages: capturedMessages,\n              returnValue: finalReturnValue,\n              type: \"streaming\",\n            };\n\n            if (shouldCache(params, completeResult)) {\n              await cacheStore.set(key, {\n                result: completeResult,\n                timestamp: now,\n                key,\n              });\n              if (debug) {\n                const cacheItems =\n                  typeof cacheStore.size === \"function\"\n                    ? await cacheStore.size()\n                    : \"unknown\";\n\n                // Calculate approximate memory usage\n                const estimatedSize = JSON.stringify(completeResult).length;\n                const sizeKB = Math.round((estimatedSize / 1024) * 100) / 100;\n\n                console.log(`\\n💾 Cache STORED - Streaming Tool`);\n                console.log(`┌─ Streaming yields: ${chunkCount}`);\n                console.log(`├─ Artifact messages: ${capturedMessages.length}`);\n                console.log(\n                  `├─ Return value: ${finalReturnValue !== undefined ? \"yes\" : \"no\"}`,\n                );\n                console.log(`├─ Entry size: ~${sizeKB}KB`);\n                console.log(`├─ Cache items: ${cacheItems}/${maxSize}`);\n                console.log(`└─ Ready for instant replay!\\n`);\n              }\n            }\n          } catch (error) {\n            if (debug) console.log(`[Cache] Microtask caching failed:`, error);\n          }\n        });\n      });\n\n      return finalReturnValue;\n    },\n    getStats() {\n      const total = hits + misses;\n      return {\n        hits,\n        misses,\n        hitRate: total > 0 ? hits / total : 0,\n        size:\n          typeof cacheStore.size === \"function\"\n            ? (cacheStore.size() as any)\n            : 0,\n        maxSize,\n      };\n    },\n    clearCache(key?: string) {\n      if (key) {\n        cacheStore.delete(key);\n      } else {\n        cacheStore.clear();\n      }\n    },\n    async isCached(params: any) {\n      const context = cacheKey?.();\n      const key = keyGenerator(params, context);\n      const cached = await cacheStore.get(key);\n      if (!cached) return false;\n\n      const now = Date.now();\n      const isValid = now - cached.timestamp < ttl;\n\n      if (!isValid) {\n        await cacheStore.delete(key);\n        return false;\n      }\n\n      return true;\n    },\n    getCacheKey(params: any) {\n      const context = cacheKey?.();\n      return keyGenerator(params, context);\n    },\n  } as unknown as CachedTool<T>;\n}\n\nexport function cached<T extends Tool>(\n  tool: T,\n  options?: CacheOptions,\n): CachedTool<T> {\n  // For streaming tools, implement proper caching\n  if (tool.execute?.constructor?.name === \"AsyncGeneratorFunction\") {\n    return createStreamingCachedTool(tool, options || {});\n  }\n  const {\n    ttl = 5 * 60 * 1000,\n    maxSize = 1000,\n    store,\n    keyGenerator = defaultKeyGenerator,\n    cacheKey,\n    shouldCache = () => true,\n    onHit,\n    onMiss,\n    debug = false,\n  } = options || {};\n\n  const cacheStore = store || new LRUCacheStore(maxSize);\n  const effectiveTTL = ttl ?? cacheStore.getDefaultTTL?.() ?? 5 * 60 * 1000;\n  let hits = 0;\n  let misses = 0;\n\n  const log = debug ? console.log : () => {};\n\n  const cacheApi = {\n    getStats(): CacheStats {\n      const total = hits + misses;\n      return {\n        hits,\n        misses,\n        hitRate: total > 0 ? hits / total : 0,\n        size:\n          typeof cacheStore.size === \"function\"\n            ? (cacheStore.size() as any)\n            : 0,\n        maxSize,\n      };\n    },\n\n    clearCache(key?: string): void {\n      if (key) {\n        cacheStore.delete(key);\n      } else {\n        cacheStore.clear();\n      }\n    },\n\n    async isCached(params: any): Promise<boolean> {\n      const context = cacheKey?.();\n      const key = keyGenerator(params, context);\n      const cached = await cacheStore.get(key);\n      if (!cached) return false;\n\n      const now = Date.now();\n      const isValid = now - cached.timestamp < effectiveTTL;\n\n      if (!isValid) {\n        await cacheStore.delete(key);\n        return false;\n      }\n\n      return true;\n    },\n\n    getCacheKey(params: any): string {\n      const context = cacheKey?.();\n      return keyGenerator(params, context);\n    },\n  };\n\n  const cachedTool = new Proxy(tool, {\n    get(target, prop) {\n      if (prop === \"execute\") {\n        // Preserve the original function type\n        if (target.execute?.constructor?.name === \"AsyncGeneratorFunction\") {\n          return async function* (...args: any[]) {\n            const [params, executionOptions] = args;\n            const context = cacheKey?.();\n            const key = keyGenerator(params, context);\n            const now = Date.now();\n\n            // Check cache\n            const cached = await cacheStore.get(key);\n            if (cached && now - cached.timestamp < effectiveTTL) {\n              hits++;\n              onHit?.(key);\n              log(`[Cache] HIT`);\n\n              const result = cached.result;\n\n              // For streaming tools, replay messages immediately then return generator\n              if (\n                target.execute?.constructor?.name === \"AsyncGeneratorFunction\"\n              ) {\n                // Replay messages IMMEDIATELY to restore artifact data\n                if (result?.messages?.length > 0) {\n                  const writer =\n                    executionOptions?.writer ||\n                    (executionOptions as any)?.experimental_context?.writer;\n\n                  if (writer) {\n                    log(`[Cache] Replaying ${result.messages.length} messages`);\n                    for (const msg of result.messages) {\n                      writer.write(msg);\n                    }\n                  }\n                }\n\n                // Then return generator that yields stream results\n                return (async function* () {\n                  if (result?.streamResults) {\n                    for (const item of result.streamResults) {\n                      yield item;\n                    }\n                  } else if (Array.isArray(result)) {\n                    for (const item of result) {\n                      yield item;\n                    }\n                  } else {\n                    yield result;\n                  }\n                })();\n              }\n\n              return result;\n            }\n\n            // Execute original\n            misses++;\n            onMiss?.(key);\n            log(`[Cache] MISS`);\n\n            // Capture messages if writer available\n            const writer =\n              executionOptions?.writer ||\n              (executionOptions as any)?.experimental_context?.writer;\n\n            const capturedMessages: any[] = [];\n\n            if (writer) {\n              const originalWrite = writer.write;\n              writer.write = (data: any) => {\n                capturedMessages.push(data);\n                return originalWrite.call(writer, data);\n              };\n            }\n\n            const result = await target.execute?.(params, executionOptions);\n\n            // Handle streaming tools\n            if (\n              result &&\n              typeof (result as any)[Symbol.asyncIterator] === \"function\"\n            ) {\n              const streamResults: any[] = [];\n              let lastChunk: any = null;\n\n              // Stream to user immediately while capturing\n              const streamGenerator = (async function* () {\n                for await (const chunk of result as any) {\n                  streamResults.push(chunk);\n                  lastChunk = chunk;\n                  yield chunk; // Stream immediately to user\n                }\n\n                // After streaming completes, cache only the final chunk\n                queueMicrotask(async () => {\n                  const completeResult = {\n                    streamResults: lastChunk ? [lastChunk] : [], // Only store final chunk\n                    messages: capturedMessages,\n                    type: \"streaming\",\n                  };\n\n                  if (shouldCache(params, completeResult)) {\n                    await cacheStore.set(key, {\n                      result: completeResult,\n                      timestamp: now,\n                      key,\n                    });\n                    log(\n                      `[Cache] STORED streaming result with ${capturedMessages.length} messages`,\n                    );\n                  }\n                });\n              })();\n\n              return streamGenerator;\n            }\n\n            // Regular tool\n            if (shouldCache(params, result)) {\n              await cacheStore.set(key, {\n                result,\n                timestamp: now,\n                key,\n              });\n              log(`[Cache] STORED result`);\n            }\n\n            return result;\n          };\n        } else {\n          // Regular async function\n          return async (...args: any[]) => {\n            const [params, executionOptions] = args;\n            const context = cacheKey?.();\n            const key = keyGenerator(params, context);\n            const now = Date.now();\n\n            // Check cache\n            const cached = await cacheStore.get(key);\n            if (cached && now - cached.timestamp < effectiveTTL) {\n              hits++;\n              onHit?.(key);\n              log(`[Cache] HIT`);\n              return cached.result;\n            }\n\n            // Execute original\n            misses++;\n            onMiss?.(key);\n            log(`[Cache] MISS`);\n\n            const result = await target.execute?.(params, executionOptions);\n\n            if (shouldCache(params, result)) {\n              await cacheStore.set(key, {\n                result,\n                timestamp: now,\n                key,\n              });\n              log(`[Cache] STORED result`);\n            }\n\n            return result;\n          };\n        }\n      }\n\n      if (prop in cacheApi) {\n        return cacheApi[prop as keyof typeof cacheApi];\n      }\n\n      return target[prop as keyof typeof target];\n    },\n  }) as unknown as CachedTool<T>;\n\n  return cachedTool;\n}\n\n/**\n * Creates a pre-configured cached function with default options\n */\nexport function createCachedFunction(\n  store: CacheStore,\n  defaultOptions: Omit<CacheOptions, \"store\"> = {},\n) {\n  return <T extends Tool>(\n    tool: T,\n    options: Omit<CacheOptions, \"store\"> = {},\n  ): CachedTool<T> => {\n    return cached(tool, { ...defaultOptions, ...options, store });\n  };\n}\n\n/**\n * Cache multiple tools with the same configuration\n */\nexport function cacheTools<T extends Tool, TTools extends Record<string, T>>(\n  tools: T,\n  options: CacheOptions = {},\n): { [K in keyof TTools]: CachedTool<TTools[K]> } {\n  const cachedTools = {} as { [K in keyof TTools]: CachedTool<TTools[K]> };\n\n  for (const [name, tool] of Object.entries(tools)) {\n    cachedTools[name as keyof TTools] = cached(tool, options);\n  }\n\n  return cachedTools;\n}\n\n/**\n * Create a cached function with Redis client or default LRU\n *\n * Example usage:\n * ```ts\n * import { Redis } from \"@upstash/redis\";\n * import { createCached } from \"@ai-sdk-tools/cache\";\n *\n * // Upstash Redis\n * const cached = createCached({ cache: Redis.fromEnv() });\n *\n * // Standard Redis\n * const cached = createCached({ cache: Redis.createClient() });\n *\n * // Default LRU (no cache client)\n * const cached = createCached();\n * ```\n */\nexport function createCached(\n  options: {\n    cache?: any; // User's Redis client - we pass it directly\n    keyPrefix?: string;\n    ttl?: number;\n    debug?: boolean;\n    cacheKey?: () => string;\n    onHit?: (key: string) => void;\n    onMiss?: (key: string) => void;\n  } = {},\n) {\n  // If no cache provided, use default LRU\n  if (!options.cache) {\n    const lruStore = createCacheBackend({\n      type: \"lru\",\n      maxSize: 100,\n      defaultTTL: options.ttl || 10 * 60 * 1000, // 10 minutes default\n    });\n\n    return createCachedFunction(lruStore, {\n      debug: options.debug || false,\n      cacheKey: options.cacheKey,\n      onHit: options.onHit,\n      onMiss: options.onMiss,\n    });\n  }\n\n  // Use Redis client directly - no adapter needed!\n  const redisStore = createCacheBackend({\n    type: \"redis\",\n    defaultTTL: options.ttl || 30 * 60 * 1000, // 30 minutes default\n    redis: {\n      client: options.cache, // Pass user's Redis client directly\n      keyPrefix: options.keyPrefix || \"ai-tools-cache:\",\n    },\n  });\n\n  return createCachedFunction(redisStore, {\n    debug: options.debug || false,\n    cacheKey: options.cacheKey,\n    onHit: options.onHit,\n    onMiss: options.onMiss,\n  });\n}\n"]}