{"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 | 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);\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 {\n private config: DuckDBVectorConfig;\n private instance: DuckDBInstance | null = null;\n private initialized: boolean = false;\n private initPromise: Promise | 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 {\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>(sql: string, params: unknown[] = []): Promise {\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 = {};\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 {\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): Promise {\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 = {};\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,\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 {\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 {\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 {\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 {\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 {\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): Promise {\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 {\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): Promise {\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 {\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 | 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 {\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 {\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 {\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): ReturnType {\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\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.migrateSpans(...args);\n }\n\n async dangerouslyClearAll(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.dangerouslyClearAll(...args);\n }\n\n async createSpan(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.createSpan(...args);\n }\n\n async updateSpan(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.updateSpan(...args);\n }\n\n async getSpan(...args: Parameters): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.getSpan(...args);\n }\n\n async getSpans(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.getSpans(...args);\n }\n\n async getRootSpan(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.getRootSpan(...args);\n }\n\n async getTrace(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.getTrace(...args);\n }\n\n async getTraceLight(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.getTraceLight(...args);\n }\n\n async listTraces(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.listTraces(...args);\n }\n\n async listBranches(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.listBranches(...args);\n }\n\n async batchCreateSpans(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.batchCreateSpans(...args);\n }\n\n async batchUpdateSpans(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.batchUpdateSpans(...args);\n }\n\n async batchDeleteTraces(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.batchDeleteTraces(...args);\n }\n\n async batchCreateLogs(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.batchCreateLogs(...args);\n }\n\n async listLogs(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.listLogs(...args);\n }\n\n async batchCreateMetrics(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.batchCreateMetrics(...args);\n }\n\n async listMetrics(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.listMetrics(...args);\n }\n\n async getMetricAggregate(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.getMetricAggregate(...args);\n }\n\n async getMetricBreakdown(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.getMetricBreakdown(...args);\n }\n\n async getMetricTimeSeries(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.getMetricTimeSeries(...args);\n }\n\n async getMetricPercentiles(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.getMetricPercentiles(...args);\n }\n\n async getMetricNames(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.getMetricNames(...args);\n }\n\n async getMetricLabelKeys(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.getMetricLabelKeys(...args);\n }\n\n async getMetricLabelValues(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.getMetricLabelValues(...args);\n }\n\n async getEntityTypes(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.getEntityTypes(...args);\n }\n\n async getEntityNames(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.getEntityNames(...args);\n }\n\n async getServiceNames(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.getServiceNames(...args);\n }\n\n async getEnvironments(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.getEnvironments(...args);\n }\n\n async getTags(...args: Parameters): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.getTags(...args);\n }\n\n async createScore(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.createScore(...args);\n }\n\n async batchCreateScores(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.batchCreateScores(...args);\n }\n\n async listScores(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.listScores(...args);\n }\n\n async getScoreById(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.getScoreById(...args);\n }\n\n async getScoreAggregate(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.getScoreAggregate(...args);\n }\n\n async getScoreBreakdown(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.getScoreBreakdown(...args);\n }\n\n async getScoreTimeSeries(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.getScoreTimeSeries(...args);\n }\n\n async getScorePercentiles(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.getScorePercentiles(...args);\n }\n\n async createFeedback(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.createFeedback(...args);\n }\n\n async batchCreateFeedback(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.batchCreateFeedback(...args);\n }\n\n async listFeedback(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.listFeedback(...args);\n }\n\n async getFeedbackAggregate(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.getFeedbackAggregate(...args);\n }\n\n async getFeedbackBreakdown(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.getFeedbackBreakdown(...args);\n }\n\n async getFeedbackTimeSeries(\n ...args: Parameters\n ): ReturnType {\n const delegate = await this.requireDelegate();\n return delegate.getFeedbackTimeSeries(...args);\n }\n\n async getFeedbackPercentiles(\n ...args: Parameters\n ): ReturnType {\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 {\n await this.db.close();\n }\n}\n"]}