{"version":3,"sources":["../src/vector/filter-builder.ts","../src/vector/index.ts","../src/storage/index.ts"],"names":["MastraVector","DuckDBInstance","bindParam","MastraError","createVectorErrorId","ErrorDomain","ErrorCategory","validateTopK","validateUpsertInput","CoreObservabilityStorage","ObservabilityStorageDuckDB","coreFeatures","MastraCompositeStore","DuckDBConnection"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { DuckDBVectorFilter } from './types';\n\n/** Result of building a SQL filter: a WHERE clause fragment and bound parameters. */\nexport interface FilterResult {\n  clause: string;\n  params: unknown[];\n}\n\n/**\n * Escape a string for safe use in SQL.\n */\nfunction escapeString(value: string): string {\n  return value.replace(/'/g, \"''\");\n}\n\n/**\n * Convert a value to a SQL literal for comparison with JSON-extracted values.\n * DuckDB's ->> operator returns the raw value without JSON quoting.\n */\nfunction toSqlLiteral(value: unknown): string {\n  if (value === null || value === undefined) {\n    return 'NULL';\n  }\n  if (typeof value === 'string') {\n    return `'${escapeString(value)}'`;\n  }\n  if (typeof value === 'number') {\n    return String(value);\n  }\n  if (typeof value === 'boolean') {\n    return value ? 'true' : 'false';\n  }\n  // For objects/arrays, JSON stringify but don't add extra quotes\n  return `'${escapeString(JSON.stringify(value))}'`;\n}\n\n/**\n * Build a SQL WHERE clause from a filter object.\n * Supports MongoDB-style query operators.\n */\nexport function buildFilterClause(filter: DuckDBVectorFilter): FilterResult {\n  if (!filter || Object.keys(filter).length === 0) {\n    return { clause: '1=1', params: [] };\n  }\n\n  const conditions: string[] = [];\n\n  for (const [key, value] of Object.entries(filter)) {\n    // Handle logical operators\n    if (key === '$and') {\n      if (Array.isArray(value) && value.length > 0) {\n        const subConditions = value.map(subFilter => buildFilterClause(subFilter));\n        const andClause = subConditions.map(sc => `(${sc.clause})`).join(' AND ');\n        conditions.push(`(${andClause})`);\n      }\n      continue;\n    }\n\n    if (key === '$or') {\n      if (Array.isArray(value) && value.length > 0) {\n        const subConditions = value.map(subFilter => buildFilterClause(subFilter));\n        const orClause = subConditions.map(sc => `(${sc.clause})`).join(' OR ');\n        conditions.push(`(${orClause})`);\n      }\n      continue;\n    }\n\n    if (key === '$not') {\n      if (typeof value === 'object' && value !== null) {\n        const subResult = buildFilterClause(value);\n        conditions.push(`NOT (${subResult.clause})`);\n      }\n      continue;\n    }\n\n    if (key === '$nor') {\n      if (Array.isArray(value) && value.length > 0) {\n        const subConditions = value.map(subFilter => buildFilterClause(subFilter));\n        const norClause = subConditions.map(sc => `(${sc.clause})`).join(' OR ');\n        conditions.push(`NOT (${norClause})`);\n      }\n      continue;\n    }\n\n    // Handle field conditions\n    const fieldPath = buildJsonPath(key);\n\n    if (value === null) {\n      conditions.push(`${fieldPath} IS NULL`);\n    } else if (typeof value === 'object' && !Array.isArray(value)) {\n      // Handle operators\n      const operatorResult = buildOperatorCondition(key, value);\n      if (operatorResult) {\n        conditions.push(operatorResult);\n      }\n    } else {\n      // Direct equality - for strings, compare directly; for others, use SQL literal\n      conditions.push(`${fieldPath} = ${toSqlLiteral(value)}`);\n    }\n  }\n\n  if (conditions.length === 0) {\n    return { clause: '1=1', params: [] };\n  }\n\n  return { clause: conditions.join(' AND '), params: [] };\n}\n\n/**\n * Build a JSON path expression for accessing nested fields in metadata.\n * DuckDB uses json_extract_string for extracting string values from JSON.\n */\nfunction buildJsonPath(field: string): string {\n  // Handle nested paths with dot notation\n  const parts = field.split('.');\n\n  // Build the JSON path with $ prefix for DuckDB\n  const jsonPath = '$.' + parts.map(p => escapeString(p)).join('.');\n\n  // Use json_extract_string for proper string extraction in DuckDB\n  return `json_extract_string(metadata, '${jsonPath}')`;\n}\n\n/**\n * Build a condition from an operator object.\n */\nfunction buildOperatorCondition(field: string, operators: Record<string, unknown>): string | null {\n  const conditions: string[] = [];\n  const fieldPath = buildJsonPath(field);\n\n  for (const [op, value] of Object.entries(operators)) {\n    switch (op) {\n      case '$eq':\n        if (value === null) {\n          conditions.push(`${fieldPath} IS NULL`);\n        } else {\n          conditions.push(`${fieldPath} = ${toSqlLiteral(value)}`);\n        }\n        break;\n\n      case '$ne':\n        if (value === null) {\n          conditions.push(`${fieldPath} IS NOT NULL`);\n        } else {\n          conditions.push(`${fieldPath} != ${toSqlLiteral(value)}`);\n        }\n        break;\n\n      case '$gt':\n        conditions.push(`CAST(${fieldPath} AS DOUBLE) > ${toSqlLiteral(value)}`);\n        break;\n\n      case '$gte':\n        conditions.push(`CAST(${fieldPath} AS DOUBLE) >= ${toSqlLiteral(value)}`);\n        break;\n\n      case '$lt':\n        conditions.push(`CAST(${fieldPath} AS DOUBLE) < ${toSqlLiteral(value)}`);\n        break;\n\n      case '$lte':\n        conditions.push(`CAST(${fieldPath} AS DOUBLE) <= ${toSqlLiteral(value)}`);\n        break;\n\n      case '$in':\n        if (Array.isArray(value) && value.length > 0) {\n          // Try to handle both scalar and array fields\n          // For array fields: check if any value in the array is in the specified list\n          // For scalar fields: check if the field value is in the specified list\n          const jsonPath = `json_extract(metadata, '$.${escapeString(field)}')`;\n          const literals = value.map(v => toSqlLiteral(v)).join(', ');\n          // For list_has_any, need to ensure types match - cast all to VARCHAR\n          const stringLiterals = value.map(v => toSqlLiteral(String(v))).join(', ');\n\n          // Use list_has_any to check if array field contains any of the values\n          // TRY_CAST returns NULL if not an array, so we also check scalar field with IN\n          conditions.push(\n            `(list_has_any(TRY_CAST(${jsonPath} AS VARCHAR[]), [${stringLiterals}]) OR ${fieldPath} IN (${literals}))`,\n          );\n        } else {\n          // Empty array - no matches\n          conditions.push('1=0');\n        }\n        break;\n\n      case '$nin':\n        if (Array.isArray(value) && value.length > 0) {\n          const literals = value.map(v => toSqlLiteral(v)).join(', ');\n          conditions.push(`${fieldPath} NOT IN (${literals})`);\n        }\n        // Empty array - all matches (no condition added)\n        break;\n\n      case '$exists':\n        if (value) {\n          conditions.push(`${fieldPath} IS NOT NULL`);\n        } else {\n          conditions.push(`${fieldPath} IS NULL`);\n        }\n        break;\n\n      case '$contains':\n        // Check if the field contains the value (for arrays or strings)\n        if (typeof value === 'string') {\n          conditions.push(`${fieldPath} LIKE '%${escapeString(value)}%'`);\n        } else if (Array.isArray(value)) {\n          // Check if array contains all specified elements\n          // Use TRY_CAST to handle type mismatches gracefully (returns NULL if not an array)\n          const jsonPath = `json_extract(metadata, '$.${escapeString(field)}')`;\n          const arrayConditions = value.map(v => {\n            return `list_contains(TRY_CAST(${jsonPath} AS VARCHAR[]), ${toSqlLiteral(v)})`;\n          });\n          conditions.push(`(${arrayConditions.join(' AND ')})`);\n        } else {\n          // Fallback to equality\n          conditions.push(`${fieldPath} = ${toSqlLiteral(value)}`);\n        }\n        break;\n\n      case '$all':\n        // Check if array field contains all specified elements\n        if (Array.isArray(value) && value.length > 0) {\n          const jsonPath = `json_extract(metadata, '$.${escapeString(field)}')`;\n          const arrayConditions = value.map(v => {\n            return `list_contains(TRY_CAST(${jsonPath} AS VARCHAR[]), ${toSqlLiteral(v)})`;\n          });\n          conditions.push(`(${arrayConditions.join(' AND ')})`);\n        }\n        break;\n\n      case '$not':\n        if (typeof value === 'object' && value !== null) {\n          const subResult = buildOperatorCondition(field, value as Record<string, unknown>);\n          if (subResult) {\n            conditions.push(`NOT (${subResult})`);\n          }\n        }\n        break;\n\n      default:\n        throw new Error(`Unsupported operator: ${op}`);\n    }\n  }\n\n  if (conditions.length === 0) {\n    return null;\n  }\n\n  return conditions.join(' AND ');\n}\n","import { DuckDBInstance } from '@duckdb/node-api';\n\nimport { MastraError, ErrorDomain, ErrorCategory } from '@mastra/core/error';\nimport { createVectorErrorId } from '@mastra/core/storage';\nimport { MastraVector, validateUpsertInput, validateTopK } from '@mastra/core/vector';\nimport type {\n  IndexStats,\n  QueryResult,\n  QueryVectorParams,\n  CreateIndexParams,\n  UpsertVectorParams,\n  DescribeIndexParams,\n  DeleteIndexParams,\n  DeleteVectorParams,\n  UpdateVectorParams,\n  DeleteVectorsParams,\n} from '@mastra/core/vector';\nimport { bindParam } from '../storage/db/index';\nimport { buildFilterClause } from './filter-builder';\nimport type { DuckDBVectorConfig, DuckDBVectorFilter } from './types';\n\n/**\n * DuckDB vector store implementation for Mastra.\n *\n * Provides embedded high-performance vector storage with HNSW indexing\n * using the DuckDB VSS extension for vector similarity search.\n *\n * Key features:\n * - Embedded database (no server required)\n * - HNSW indexing for fast similarity search\n * - SQL interface for metadata filtering\n * - Native Parquet support\n */\nexport class DuckDBVector extends MastraVector<DuckDBVectorFilter> {\n  private config: DuckDBVectorConfig;\n  private instance: DuckDBInstance | null = null;\n  private initialized: boolean = false;\n  private initPromise: Promise<void> | null = null;\n\n  constructor(config: DuckDBVectorConfig) {\n    super({ id: config.id });\n    this.config = {\n      path: ':memory:',\n      dimensions: 1536,\n      metric: 'cosine',\n      ...config,\n    };\n  }\n\n  /**\n   * Initialize the database connection and load required extensions.\n   */\n  private async initialize(): Promise<void> {\n    if (this.initialized && this.instance) return;\n\n    // If there's an existing initPromise, wait for it, but verify instance exists\n    if (this.initPromise) {\n      await this.initPromise;\n      // If instance was closed while initializing, reset and retry\n      if (!this.instance) {\n        this.initPromise = null;\n        this.initialized = false;\n      } else {\n        return;\n      }\n    }\n\n    this.initPromise = (async () => {\n      try {\n        // Create DuckDB instance\n        this.instance = await DuckDBInstance.create(this.config.path!);\n        const connection = await this.instance.connect();\n\n        try {\n          // Install and load the VSS extension for vector operations\n          await connection.run('INSTALL vss;');\n          await connection.run('LOAD vss;');\n        } catch {\n          // VSS might already be installed, try just loading it\n          try {\n            await connection.run('LOAD vss;');\n          } catch {\n            // Continue without VSS - will use basic array operations\n            this.logger.warn('VSS extension not available, using basic array operations');\n          }\n        }\n\n        this.initialized = true;\n      } catch (error) {\n        // Reset state on error to allow retry\n        this.instance = null;\n        this.initialized = false;\n        this.initPromise = null;\n        throw error;\n      }\n    })();\n\n    return this.initPromise;\n  }\n\n  /**\n   * Get a database connection.\n   */\n  private async getConnection() {\n    await this.initialize();\n    if (!this.instance) {\n      throw new Error('DuckDB instance not initialized');\n    }\n    return this.instance.connect();\n  }\n\n  /**\n   * Execute a SQL query and return results.\n   */\n  private async runQuery<T = Record<string, unknown>>(sql: string, params: unknown[] = []): Promise<T[]> {\n    const connection = await this.getConnection();\n    try {\n      // Replace ? placeholders with $1, $2, etc. for DuckDB\n      let paramIndex = 0;\n      const preparedSql = sql.replace(/\\?/g, () => `$${++paramIndex}`);\n\n      const stmt = await connection.prepare(preparedSql);\n      for (let i = 0; i < params.length; i++) {\n        bindParam(stmt, i + 1, params[i]);\n      }\n      const result = await stmt.run();\n      const rows = await result.getRows();\n\n      // Convert rows to objects\n      const columns = result.columnNames();\n      return rows.map(row => {\n        const obj: Record<string, unknown> = {};\n        columns.forEach((col, i) => {\n          obj[col] = row[i];\n        });\n        return obj as T;\n      });\n    } finally {\n      // Connection cleanup is automatic in @duckdb/node-api\n    }\n  }\n\n  /**\n   * Execute a SQL statement without returning results.\n   */\n  private async runStatement(sql: string, params: unknown[] = []): Promise<void> {\n    const connection = await this.getConnection();\n    try {\n      if (params.length === 0) {\n        await connection.run(sql);\n      } else {\n        // Replace ? placeholders with $1, $2, etc. for DuckDB\n        let paramIndex = 0;\n        const preparedSql = sql.replace(/\\?/g, () => `$${++paramIndex}`);\n\n        const stmt = await connection.prepare(preparedSql);\n        for (let i = 0; i < params.length; i++) {\n          bindParam(stmt, i + 1, params[i]);\n        }\n        await stmt.run();\n      }\n    } finally {\n      // Connection cleanup is automatic\n    }\n  }\n\n  /**\n   * Validate and escape a SQL identifier (table name, column name).\n   */\n  private escapeIdentifier(name: string): string {\n    // Validate identifier format\n    if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name)) {\n      throw new Error(`Invalid identifier: ${name}. Only alphanumeric characters and underscores are allowed.`);\n    }\n    return `\"${name}\"`;\n  }\n\n  /**\n   * Get the distance function for the configured metric.\n   */\n  private getDistanceFunction(): string {\n    switch (this.config.metric) {\n      case 'cosine':\n        return 'array_cosine_distance';\n      case 'euclidean':\n        return 'array_distance';\n      case 'dotproduct':\n        return 'array_inner_product';\n      default:\n        return 'array_cosine_distance';\n    }\n  }\n\n  /** Perform a vector similarity search with optional metadata filtering. */\n  async query(params: QueryVectorParams<DuckDBVectorFilter>): Promise<QueryResult[]> {\n    await this.initialize();\n\n    const { indexName, queryVector, topK = 10, filter, includeVector = false } = params;\n\n    if (!queryVector) {\n      throw new MastraError({\n        id: createVectorErrorId('DUCKDB', 'QUERY', 'MISSING_VECTOR'),\n        text: 'queryVector is required for DuckDB queries. Metadata-only queries are not supported by this vector store.',\n        domain: ErrorDomain.STORAGE,\n        category: ErrorCategory.USER,\n        details: { indexName },\n      });\n    }\n\n    // Validate topK parameter\n    validateTopK('DUCKDB', topK);\n\n    const tableName = this.escapeIdentifier(indexName);\n    const distanceFunc = this.getDistanceFunction();\n\n    // Build the vector literal\n    const vectorLiteral = `[${queryVector.join(', ')}]::FLOAT[${queryVector.length}]`;\n\n    // Build filter clause\n    const { clause: filterClause } = filter ? buildFilterClause(filter) : { clause: '' };\n\n    // Build query\n    const selectCols = includeVector ? 'id, vector, metadata, distance' : 'id, metadata, distance';\n\n    const sql = `\n      SELECT ${selectCols}\n      FROM (\n        SELECT \n          id,\n          ${includeVector ? 'vector,' : ''}\n          metadata,\n          ${distanceFunc}(vector, ${vectorLiteral}) as distance\n        FROM ${tableName}\n        ${filterClause ? `WHERE ${filterClause}` : ''}\n      ) subq\n      ORDER BY distance ${this.config.metric === 'dotproduct' ? 'DESC' : 'ASC'}\n      LIMIT ${topK}\n    `;\n\n    const connection = await this.getConnection();\n    const result = await connection.run(sql);\n    const rows = await result.getRows();\n    const columns = result.columnNames();\n\n    return rows.map(row => {\n      const rowObj: Record<string, unknown> = {};\n      columns.forEach((col, i) => {\n        rowObj[col] = row[i];\n      });\n\n      const distance = rowObj.distance as number;\n      const score =\n        this.config.metric === 'cosine'\n          ? 1 - distance\n          : this.config.metric === 'euclidean'\n            ? 1 / (1 + distance)\n            : distance;\n\n      const metadata = typeof rowObj.metadata === 'string' ? JSON.parse(rowObj.metadata as string) : rowObj.metadata;\n\n      const queryResult: QueryResult = {\n        id: rowObj.id as string,\n        score,\n        metadata: metadata as Record<string, unknown>,\n      };\n\n      if (includeVector && rowObj.vector) {\n        queryResult.vector = Array.isArray(rowObj.vector)\n          ? (rowObj.vector as number[])\n          : JSON.parse(rowObj.vector as string);\n      }\n\n      return queryResult;\n    });\n  }\n\n  /** Insert or replace vectors with metadata. Returns the vector IDs. */\n  async upsert(params: UpsertVectorParams): Promise<string[]> {\n    await this.initialize();\n\n    const { indexName, vectors, metadata, ids } = params;\n\n    // Validate input parameters\n    validateUpsertInput('DUCKDB', vectors, metadata, ids);\n\n    const tableName = this.escapeIdentifier(indexName);\n\n    // Generate IDs if not provided\n    const vectorIds = ids || vectors.map(() => crypto.randomUUID());\n\n    // Insert each vector using parameterized queries for IDs\n    for (let i = 0; i < vectors.length; i++) {\n      const id = vectorIds[i]!;\n      const vector = vectors[i]!;\n      const meta = metadata?.[i] || {};\n\n      const vectorLiteral = `[${vector.join(', ')}]::FLOAT[${vector.length}]`;\n      const metadataJson = JSON.stringify(meta);\n\n      // Use INSERT OR REPLACE for upsert behavior with parameterized ID\n      const sql = `\n        INSERT OR REPLACE INTO ${tableName} (id, vector, metadata)\n        VALUES (?, ${vectorLiteral}, '${metadataJson.replace(/'/g, \"''\")}')\n      `;\n\n      await this.runStatement(sql, [id]);\n    }\n\n    return vectorIds;\n  }\n\n  /** Create a vector table with HNSW index for similarity search. */\n  async createIndex(params: CreateIndexParams): Promise<void> {\n    await this.initialize();\n\n    const { indexName, dimension, metric } = params;\n    const tableName = this.escapeIdentifier(indexName);\n\n    // Store the metric for this index if provided\n    if (metric) {\n      this.config.metric = metric;\n    }\n\n    const connection = await this.getConnection();\n\n    // Create table with vector column\n    const createTableSql = `\n      CREATE TABLE IF NOT EXISTS ${tableName} (\n        id VARCHAR PRIMARY KEY,\n        vector FLOAT[${dimension}],\n        metadata JSON\n      )\n    `;\n\n    await connection.run(createTableSql);\n\n    // Create HNSW index for fast similarity search\n    try {\n      const indexNameStr = `${indexName}_hnsw_idx`;\n      const createIndexSql = `\n        CREATE INDEX IF NOT EXISTS \"${indexNameStr}\"\n        ON ${tableName}\n        USING HNSW (vector)\n      `;\n      await connection.run(createIndexSql);\n    } catch {\n      // HNSW index creation might fail if not supported, continue without it\n      this.logger.warn(`Could not create HNSW index for ${indexName}, falling back to linear scan`);\n    }\n  }\n\n  /** List all vector table names in the database. */\n  async listIndexes(): Promise<string[]> {\n    await this.initialize();\n\n    const connection = await this.getConnection();\n    const result = await connection.run(`\n      SELECT table_name\n      FROM information_schema.tables\n      WHERE table_schema = 'main'\n        AND table_type = 'BASE TABLE'\n    `);\n\n    const rows = await result.getRows();\n    return rows.map(row => row[0] as string);\n  }\n\n  /** Return dimension, row count, and metric for a vector index. */\n  async describeIndex(params: DescribeIndexParams): Promise<IndexStats> {\n    await this.initialize();\n\n    const { indexName } = params;\n    const tableName = this.escapeIdentifier(indexName);\n\n    const connection = await this.getConnection();\n\n    // Get vector dimension from table schema\n    const schemaResult = await connection.run(`\n      SELECT data_type\n      FROM information_schema.columns\n      WHERE table_name = '${indexName}' AND column_name = 'vector'\n    `);\n\n    const schemaRows = await schemaResult.getRows();\n\n    if (schemaRows.length === 0) {\n      throw new Error(`Index \"${indexName}\" not found`);\n    }\n\n    // Parse dimension from type like \"FLOAT[1536]\"\n    const dataType = schemaRows[0]![0] as string;\n    const dimensionMatch = dataType.match(/\\[(\\d+)\\]/);\n    const dimension = dimensionMatch ? parseInt(dimensionMatch[1]!, 10) : 0;\n\n    // Get row count\n    const countResult = await connection.run(`SELECT COUNT(*) as count FROM ${tableName}`);\n    const countRows = await countResult.getRows();\n    const count = Number(countRows[0]?.[0] || 0);\n\n    return {\n      dimension,\n      count,\n      metric: this.config.metric || 'cosine',\n    };\n  }\n\n  /** Drop a vector table and its HNSW index. */\n  async deleteIndex(params: DeleteIndexParams): Promise<void> {\n    await this.initialize();\n\n    const { indexName } = params;\n    const tableName = this.escapeIdentifier(indexName);\n\n    const connection = await this.getConnection();\n    await connection.run(`DROP TABLE IF EXISTS ${tableName}`);\n  }\n\n  /** Update a vector's embedding and/or metadata by ID or filter. */\n  async updateVector(params: UpdateVectorParams<DuckDBVectorFilter>): Promise<void> {\n    await this.initialize();\n\n    const { indexName, update } = params;\n    const tableName = this.escapeIdentifier(indexName);\n\n    if (!update.vector && !update.metadata) {\n      throw new Error('No updates provided');\n    }\n\n    const hasId = 'id' in params && params.id;\n    const hasFilter = 'filter' in params && params.filter;\n\n    // Check for mutual exclusivity\n    if (hasId && hasFilter) {\n      throw new Error('id and filter are mutually exclusive - provide only one');\n    }\n\n    if (!hasId && !hasFilter) {\n      throw new Error('Either id or filter must be provided');\n    }\n\n    const updates: string[] = [];\n\n    if (update.vector) {\n      updates.push(`vector = [${update.vector.join(', ')}]::FLOAT[${update.vector.length}]`);\n    }\n\n    if (update.metadata) {\n      const metadataJson = JSON.stringify(update.metadata).replace(/'/g, \"''\");\n      updates.push(`metadata = '${metadataJson}'`);\n    }\n\n    if (hasId) {\n      // Update by ID with parameterized query\n      const sql = `UPDATE ${tableName} SET ${updates.join(', ')} WHERE id = ?`;\n      await this.runStatement(sql, [params.id]);\n    } else if (hasFilter) {\n      // Update by filter - check for empty filter\n      const filter = params.filter!;\n      if (Object.keys(filter).length === 0) {\n        throw new Error('Cannot update with empty filter');\n      }\n\n      const { clause } = buildFilterClause(filter);\n      // Update ALL matching vectors, not just the first one\n      await this.runStatement(`UPDATE ${tableName} SET ${updates.join(', ')} WHERE ${clause}`);\n    }\n  }\n\n  /** Delete a single vector by ID. */\n  async deleteVector(params: DeleteVectorParams): Promise<void> {\n    await this.initialize();\n\n    const { indexName, id } = params;\n    const tableName = this.escapeIdentifier(indexName);\n\n    // Use parameterized query for ID\n    const sql = `DELETE FROM ${tableName} WHERE id = ?`;\n    await this.runStatement(sql, [id]);\n  }\n\n  /** Delete multiple vectors by IDs or metadata filter (mutually exclusive). */\n  async deleteVectors(params: DeleteVectorsParams<DuckDBVectorFilter>): Promise<void> {\n    await this.initialize();\n\n    const { indexName, ids, filter } = params;\n    const tableName = this.escapeIdentifier(indexName);\n\n    if (!ids && !filter) {\n      throw new Error('Either filter or ids must be provided');\n    }\n\n    if (ids && filter) {\n      throw new Error('ids and filter are mutually exclusive - provide only one');\n    }\n\n    if (ids) {\n      // Delete by IDs with parameterized query\n      if (ids.length === 0) {\n        throw new Error('Cannot delete with empty ids array');\n      }\n\n      // Create placeholders for each ID\n      const placeholders = ids.map(() => '?').join(', ');\n      const sql = `DELETE FROM ${tableName} WHERE id IN (${placeholders})`;\n      await this.runStatement(sql, ids);\n    } else if (filter) {\n      // Delete by filter - check for empty filter\n      if (Object.keys(filter).length === 0) {\n        throw new Error('Cannot delete with empty filter');\n      }\n\n      const { clause } = buildFilterClause(filter);\n      await this.runStatement(`DELETE FROM ${tableName} WHERE ${clause}`);\n    }\n  }\n\n  /**\n   * Close the database connection.\n   * After closing, the vector store can be reused by calling methods that require initialization.\n   */\n  async close(): Promise<void> {\n    if (this.instance) {\n      // DuckDBInstance doesn't have a close method - just reset the reference\n      // The garbage collector will handle cleanup\n      this.instance = null;\n      this.initialized = false;\n      this.initPromise = null; // Reset initPromise to allow re-initialization\n    }\n  }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { coreFeatures } from '@mastra/core/features';\nimport type { StorageDomains } from '@mastra/core/storage';\nimport { MastraCompositeStore, ObservabilityStorage as CoreObservabilityStorage } from '@mastra/core/storage';\n\nimport { DuckDBConnection } from './db/index';\nimport type {\n  ObservabilityDuckDBConfig,\n  ObservabilityStorageDuckDB as ObservabilityStorageDuckDBImpl,\n} from './domains/observability/index';\n\nconst OBSERVABILITY_UPGRADE_MESSAGE =\n  'DuckDB observability storage requires `@mastra/core` with observability storage support. Upgrade `@mastra/core` to use this store.';\nconst OBSERVABILITY_DELTA_POLLING_FEATURE = 'observability-delta-polling';\nconst DUCKDB_OBSERVABILITY_FEATURES = ['delta-polling'] as const;\n\nfunction isObservabilityCompatibilityError(error: unknown): boolean {\n  if (!(error instanceof Error)) {\n    return false;\n  }\n\n  return (\n    error.message.includes('@mastra/core') &&\n    (error.message.includes('does not provide an export named') ||\n      error.message.includes('No matching export') ||\n      error.message.includes('Cannot find module') ||\n      error.message.includes('Cannot find package'))\n  );\n}\n\n// Re-export lower-level pieces for direct use / composition\nexport { DuckDBConnection } from './db/index';\nexport type { DuckDBStorageConfig } from './db/index';\nexport type { ObservabilityDuckDBConfig } from './domains/observability/index';\n\ntype ObservabilityStoreImpl = ObservabilityStorageDuckDBImpl;\n\n/**\n * Lazy DuckDB observability facade.\n *\n * This avoids loading the concrete observability implementation until init or first use,\n * which lets DuckDBStore degrade cleanly when paired with an older @mastra/core runtime.\n */\nexport class ObservabilityStorageDuckDB extends CoreObservabilityStorage {\n  private db: DuckDBConnection;\n  private delegate: ObservabilityStoreImpl | null = null;\n  private loadPromise: Promise<ObservabilityStoreImpl | null> | null = null;\n  private unavailableError: MastraError | null = null;\n\n  constructor(config: ObservabilityDuckDBConfig) {\n    super();\n    this.db = config.db;\n  }\n\n  private createUnavailableError(cause?: unknown): MastraError {\n    return new MastraError(\n      {\n        id: 'OBSERVABILITY_STORAGE_DUCKDB_CORE_UPGRADE_NOT_IMPLEMENTED',\n        domain: ErrorDomain.MASTRA_OBSERVABILITY,\n        category: ErrorCategory.SYSTEM,\n        text: OBSERVABILITY_UPGRADE_MESSAGE,\n      },\n      cause,\n    );\n  }\n\n  private async loadDelegate(): Promise<ObservabilityStoreImpl | null> {\n    if (this.delegate) {\n      return this.delegate;\n    }\n\n    if (this.unavailableError) {\n      return null;\n    }\n\n    if (!this.loadPromise) {\n      this.loadPromise = import('./domains/observability/index')\n        .then(({ ObservabilityStorageDuckDB }) => {\n          const delegate = new ObservabilityStorageDuckDB({ db: this.db });\n          this.delegate = delegate;\n          return delegate;\n        })\n        .catch(error => {\n          if (isObservabilityCompatibilityError(error)) {\n            this.unavailableError = this.createUnavailableError(error);\n            return null;\n          }\n\n          throw error;\n        });\n    }\n\n    return this.loadPromise;\n  }\n\n  private async requireDelegate(): Promise<ObservabilityStoreImpl> {\n    const delegate = await this.loadDelegate();\n    if (!delegate) {\n      throw this.unavailableError ?? this.createUnavailableError();\n    }\n\n    return delegate;\n  }\n\n  get observabilityStrategy(): ObservabilityStoreImpl['observabilityStrategy'] {\n    return (\n      this.delegate?.observabilityStrategy ?? {\n        preferred: 'event-sourced',\n        supported: ['event-sourced'],\n      }\n    );\n  }\n\n  get tracingStrategy(): ObservabilityStoreImpl['tracingStrategy'] {\n    return this.delegate?.tracingStrategy ?? this.observabilityStrategy;\n  }\n\n  getFeatures(): ReturnType<ObservabilityStoreImpl['getFeatures']> {\n    // Deliberately mirrored here so the lazy facade can advertise DuckDB's\n    // static delta polling feature before the delegate is instantiated.\n    if (!coreFeatures.has(OBSERVABILITY_DELTA_POLLING_FEATURE)) {\n      return undefined;\n    }\n\n    return DUCKDB_OBSERVABILITY_FEATURES;\n  }\n\n  async init(...args: Parameters<ObservabilityStoreImpl['init']>): ReturnType<ObservabilityStoreImpl['init']> {\n    const delegate = await this.loadDelegate();\n    if (!delegate) {\n      return;\n    }\n\n    return delegate.init(...args);\n  }\n\n  async migrateSpans(\n    ...args: Parameters<ObservabilityStoreImpl['migrateSpans']>\n  ): ReturnType<ObservabilityStoreImpl['migrateSpans']> {\n    const delegate = await this.requireDelegate();\n    return delegate.migrateSpans(...args);\n  }\n\n  async dangerouslyClearAll(\n    ...args: Parameters<ObservabilityStoreImpl['dangerouslyClearAll']>\n  ): ReturnType<ObservabilityStoreImpl['dangerouslyClearAll']> {\n    const delegate = await this.requireDelegate();\n    return delegate.dangerouslyClearAll(...args);\n  }\n\n  async createSpan(\n    ...args: Parameters<ObservabilityStoreImpl['createSpan']>\n  ): ReturnType<ObservabilityStoreImpl['createSpan']> {\n    const delegate = await this.requireDelegate();\n    return delegate.createSpan(...args);\n  }\n\n  async updateSpan(\n    ...args: Parameters<ObservabilityStoreImpl['updateSpan']>\n  ): ReturnType<ObservabilityStoreImpl['updateSpan']> {\n    const delegate = await this.requireDelegate();\n    return delegate.updateSpan(...args);\n  }\n\n  async getSpan(...args: Parameters<ObservabilityStoreImpl['getSpan']>): ReturnType<ObservabilityStoreImpl['getSpan']> {\n    const delegate = await this.requireDelegate();\n    return delegate.getSpan(...args);\n  }\n\n  async getSpans(\n    ...args: Parameters<ObservabilityStoreImpl['getSpans']>\n  ): ReturnType<ObservabilityStoreImpl['getSpans']> {\n    const delegate = await this.requireDelegate();\n    return delegate.getSpans(...args);\n  }\n\n  async getRootSpan(\n    ...args: Parameters<ObservabilityStoreImpl['getRootSpan']>\n  ): ReturnType<ObservabilityStoreImpl['getRootSpan']> {\n    const delegate = await this.requireDelegate();\n    return delegate.getRootSpan(...args);\n  }\n\n  async getTrace(\n    ...args: Parameters<ObservabilityStoreImpl['getTrace']>\n  ): ReturnType<ObservabilityStoreImpl['getTrace']> {\n    const delegate = await this.requireDelegate();\n    return delegate.getTrace(...args);\n  }\n\n  async getTraceLight(\n    ...args: Parameters<ObservabilityStoreImpl['getTraceLight']>\n  ): ReturnType<ObservabilityStoreImpl['getTraceLight']> {\n    const delegate = await this.requireDelegate();\n    return delegate.getTraceLight(...args);\n  }\n\n  async listTraces(\n    ...args: Parameters<ObservabilityStoreImpl['listTraces']>\n  ): ReturnType<ObservabilityStoreImpl['listTraces']> {\n    const delegate = await this.requireDelegate();\n    return delegate.listTraces(...args);\n  }\n\n  async listBranches(\n    ...args: Parameters<ObservabilityStoreImpl['listBranches']>\n  ): ReturnType<ObservabilityStoreImpl['listBranches']> {\n    const delegate = await this.requireDelegate();\n    return delegate.listBranches(...args);\n  }\n\n  async batchCreateSpans(\n    ...args: Parameters<ObservabilityStoreImpl['batchCreateSpans']>\n  ): ReturnType<ObservabilityStoreImpl['batchCreateSpans']> {\n    const delegate = await this.requireDelegate();\n    return delegate.batchCreateSpans(...args);\n  }\n\n  async batchUpdateSpans(\n    ...args: Parameters<ObservabilityStoreImpl['batchUpdateSpans']>\n  ): ReturnType<ObservabilityStoreImpl['batchUpdateSpans']> {\n    const delegate = await this.requireDelegate();\n    return delegate.batchUpdateSpans(...args);\n  }\n\n  async batchDeleteTraces(\n    ...args: Parameters<ObservabilityStoreImpl['batchDeleteTraces']>\n  ): ReturnType<ObservabilityStoreImpl['batchDeleteTraces']> {\n    const delegate = await this.requireDelegate();\n    return delegate.batchDeleteTraces(...args);\n  }\n\n  async batchCreateLogs(\n    ...args: Parameters<ObservabilityStoreImpl['batchCreateLogs']>\n  ): ReturnType<ObservabilityStoreImpl['batchCreateLogs']> {\n    const delegate = await this.requireDelegate();\n    return delegate.batchCreateLogs(...args);\n  }\n\n  async listLogs(\n    ...args: Parameters<ObservabilityStoreImpl['listLogs']>\n  ): ReturnType<ObservabilityStoreImpl['listLogs']> {\n    const delegate = await this.requireDelegate();\n    return delegate.listLogs(...args);\n  }\n\n  async batchCreateMetrics(\n    ...args: Parameters<ObservabilityStoreImpl['batchCreateMetrics']>\n  ): ReturnType<ObservabilityStoreImpl['batchCreateMetrics']> {\n    const delegate = await this.requireDelegate();\n    return delegate.batchCreateMetrics(...args);\n  }\n\n  async listMetrics(\n    ...args: Parameters<ObservabilityStoreImpl['listMetrics']>\n  ): ReturnType<ObservabilityStoreImpl['listMetrics']> {\n    const delegate = await this.requireDelegate();\n    return delegate.listMetrics(...args);\n  }\n\n  async getMetricAggregate(\n    ...args: Parameters<ObservabilityStoreImpl['getMetricAggregate']>\n  ): ReturnType<ObservabilityStoreImpl['getMetricAggregate']> {\n    const delegate = await this.requireDelegate();\n    return delegate.getMetricAggregate(...args);\n  }\n\n  async getMetricBreakdown(\n    ...args: Parameters<ObservabilityStoreImpl['getMetricBreakdown']>\n  ): ReturnType<ObservabilityStoreImpl['getMetricBreakdown']> {\n    const delegate = await this.requireDelegate();\n    return delegate.getMetricBreakdown(...args);\n  }\n\n  async getMetricTimeSeries(\n    ...args: Parameters<ObservabilityStoreImpl['getMetricTimeSeries']>\n  ): ReturnType<ObservabilityStoreImpl['getMetricTimeSeries']> {\n    const delegate = await this.requireDelegate();\n    return delegate.getMetricTimeSeries(...args);\n  }\n\n  async getMetricPercentiles(\n    ...args: Parameters<ObservabilityStoreImpl['getMetricPercentiles']>\n  ): ReturnType<ObservabilityStoreImpl['getMetricPercentiles']> {\n    const delegate = await this.requireDelegate();\n    return delegate.getMetricPercentiles(...args);\n  }\n\n  async getMetricNames(\n    ...args: Parameters<ObservabilityStoreImpl['getMetricNames']>\n  ): ReturnType<ObservabilityStoreImpl['getMetricNames']> {\n    const delegate = await this.requireDelegate();\n    return delegate.getMetricNames(...args);\n  }\n\n  async getMetricLabelKeys(\n    ...args: Parameters<ObservabilityStoreImpl['getMetricLabelKeys']>\n  ): ReturnType<ObservabilityStoreImpl['getMetricLabelKeys']> {\n    const delegate = await this.requireDelegate();\n    return delegate.getMetricLabelKeys(...args);\n  }\n\n  async getMetricLabelValues(\n    ...args: Parameters<ObservabilityStoreImpl['getMetricLabelValues']>\n  ): ReturnType<ObservabilityStoreImpl['getMetricLabelValues']> {\n    const delegate = await this.requireDelegate();\n    return delegate.getMetricLabelValues(...args);\n  }\n\n  async getEntityTypes(\n    ...args: Parameters<ObservabilityStoreImpl['getEntityTypes']>\n  ): ReturnType<ObservabilityStoreImpl['getEntityTypes']> {\n    const delegate = await this.requireDelegate();\n    return delegate.getEntityTypes(...args);\n  }\n\n  async getEntityNames(\n    ...args: Parameters<ObservabilityStoreImpl['getEntityNames']>\n  ): ReturnType<ObservabilityStoreImpl['getEntityNames']> {\n    const delegate = await this.requireDelegate();\n    return delegate.getEntityNames(...args);\n  }\n\n  async getServiceNames(\n    ...args: Parameters<ObservabilityStoreImpl['getServiceNames']>\n  ): ReturnType<ObservabilityStoreImpl['getServiceNames']> {\n    const delegate = await this.requireDelegate();\n    return delegate.getServiceNames(...args);\n  }\n\n  async getEnvironments(\n    ...args: Parameters<ObservabilityStoreImpl['getEnvironments']>\n  ): ReturnType<ObservabilityStoreImpl['getEnvironments']> {\n    const delegate = await this.requireDelegate();\n    return delegate.getEnvironments(...args);\n  }\n\n  async getTags(...args: Parameters<ObservabilityStoreImpl['getTags']>): ReturnType<ObservabilityStoreImpl['getTags']> {\n    const delegate = await this.requireDelegate();\n    return delegate.getTags(...args);\n  }\n\n  async createScore(\n    ...args: Parameters<ObservabilityStoreImpl['createScore']>\n  ): ReturnType<ObservabilityStoreImpl['createScore']> {\n    const delegate = await this.requireDelegate();\n    return delegate.createScore(...args);\n  }\n\n  async batchCreateScores(\n    ...args: Parameters<ObservabilityStoreImpl['batchCreateScores']>\n  ): ReturnType<ObservabilityStoreImpl['batchCreateScores']> {\n    const delegate = await this.requireDelegate();\n    return delegate.batchCreateScores(...args);\n  }\n\n  async listScores(\n    ...args: Parameters<ObservabilityStoreImpl['listScores']>\n  ): ReturnType<ObservabilityStoreImpl['listScores']> {\n    const delegate = await this.requireDelegate();\n    return delegate.listScores(...args);\n  }\n\n  async getScoreById(\n    ...args: Parameters<ObservabilityStoreImpl['getScoreById']>\n  ): ReturnType<ObservabilityStoreImpl['getScoreById']> {\n    const delegate = await this.requireDelegate();\n    return delegate.getScoreById(...args);\n  }\n\n  async getScoreAggregate(\n    ...args: Parameters<ObservabilityStoreImpl['getScoreAggregate']>\n  ): ReturnType<ObservabilityStoreImpl['getScoreAggregate']> {\n    const delegate = await this.requireDelegate();\n    return delegate.getScoreAggregate(...args);\n  }\n\n  async getScoreBreakdown(\n    ...args: Parameters<ObservabilityStoreImpl['getScoreBreakdown']>\n  ): ReturnType<ObservabilityStoreImpl['getScoreBreakdown']> {\n    const delegate = await this.requireDelegate();\n    return delegate.getScoreBreakdown(...args);\n  }\n\n  async getScoreTimeSeries(\n    ...args: Parameters<ObservabilityStoreImpl['getScoreTimeSeries']>\n  ): ReturnType<ObservabilityStoreImpl['getScoreTimeSeries']> {\n    const delegate = await this.requireDelegate();\n    return delegate.getScoreTimeSeries(...args);\n  }\n\n  async getScorePercentiles(\n    ...args: Parameters<ObservabilityStoreImpl['getScorePercentiles']>\n  ): ReturnType<ObservabilityStoreImpl['getScorePercentiles']> {\n    const delegate = await this.requireDelegate();\n    return delegate.getScorePercentiles(...args);\n  }\n\n  async createFeedback(\n    ...args: Parameters<ObservabilityStoreImpl['createFeedback']>\n  ): ReturnType<ObservabilityStoreImpl['createFeedback']> {\n    const delegate = await this.requireDelegate();\n    return delegate.createFeedback(...args);\n  }\n\n  async batchCreateFeedback(\n    ...args: Parameters<ObservabilityStoreImpl['batchCreateFeedback']>\n  ): ReturnType<ObservabilityStoreImpl['batchCreateFeedback']> {\n    const delegate = await this.requireDelegate();\n    return delegate.batchCreateFeedback(...args);\n  }\n\n  async listFeedback(\n    ...args: Parameters<ObservabilityStoreImpl['listFeedback']>\n  ): ReturnType<ObservabilityStoreImpl['listFeedback']> {\n    const delegate = await this.requireDelegate();\n    return delegate.listFeedback(...args);\n  }\n\n  async getFeedbackAggregate(\n    ...args: Parameters<ObservabilityStoreImpl['getFeedbackAggregate']>\n  ): ReturnType<ObservabilityStoreImpl['getFeedbackAggregate']> {\n    const delegate = await this.requireDelegate();\n    return delegate.getFeedbackAggregate(...args);\n  }\n\n  async getFeedbackBreakdown(\n    ...args: Parameters<ObservabilityStoreImpl['getFeedbackBreakdown']>\n  ): ReturnType<ObservabilityStoreImpl['getFeedbackBreakdown']> {\n    const delegate = await this.requireDelegate();\n    return delegate.getFeedbackBreakdown(...args);\n  }\n\n  async getFeedbackTimeSeries(\n    ...args: Parameters<ObservabilityStoreImpl['getFeedbackTimeSeries']>\n  ): ReturnType<ObservabilityStoreImpl['getFeedbackTimeSeries']> {\n    const delegate = await this.requireDelegate();\n    return delegate.getFeedbackTimeSeries(...args);\n  }\n\n  async getFeedbackPercentiles(\n    ...args: Parameters<ObservabilityStoreImpl['getFeedbackPercentiles']>\n  ): ReturnType<ObservabilityStoreImpl['getFeedbackPercentiles']> {\n    const delegate = await this.requireDelegate();\n    return delegate.getFeedbackPercentiles(...args);\n  }\n}\n\n/** Configuration for the top-level DuckDBStore composite. */\nexport interface DuckDBStoreConfig {\n  /** Store identifier. Defaults to 'duckdb'. */\n  id?: string;\n  /**\n   * Path to the DuckDB database file.\n   * @default 'mastra.duckdb'\n   * Use ':memory:' for an ephemeral in-memory database.\n   */\n  path?: string;\n}\n\n/**\n * DuckDB storage adapter for Mastra.\n *\n * Currently provides observability storage (traces, metrics, logs, scores, feedback).\n * Use via composition with another store for domains DuckDB doesn't yet cover.\n *\n * @example\n * ```typescript\n * // As the observability backend in a composed store\n * const storage = new MastraCompositeStore({\n *   id: 'my-store',\n *   default: new LibSQLStore({ id: 'my-store', url: 'file:./dev.db' }),\n *   domains: {\n *     observability: new DuckDBStore().observability,\n *   },\n * });\n *\n * // Or standalone (only observability domain available)\n * const duckdb = new DuckDBStore();\n * const obs = await duckdb.getStore('observability');\n * ```\n */\nexport class DuckDBStore extends MastraCompositeStore {\n  readonly db: DuckDBConnection;\n  private observabilityStore: ObservabilityStorageDuckDB;\n\n  stores: StorageDomains;\n\n  constructor(config: DuckDBStoreConfig = {}) {\n    const id = config.id ?? 'duckdb';\n    super({ id, name: 'DuckDBStore' });\n\n    this.db = new DuckDBConnection({ path: config.path });\n    this.observabilityStore = new ObservabilityStorageDuckDB({ db: this.db });\n\n    this.stores = {\n      observability: this.observabilityStore,\n    };\n  }\n\n  /** Convenience accessor for the observability domain. */\n  get observability(): ObservabilityStorageDuckDB {\n    return this.observabilityStore;\n  }\n\n  /**\n   * Release the underlying DuckDB instance so the file lock is freed.\n   * Called automatically by Mastra.shutdown(). Without this, the DuckDB\n   * native write lock persists past process exit during dev hot reloads,\n   * causing \"Conflicting lock is held\" errors on the next start.\n   * Safe to call more than once; subsequent calls are no-ops.\n   */\n  async close(): Promise<void> {\n    await this.db.close();\n  }\n}\n"]}