@mastra/duckdb 1.2.0-alpha.1 → 1.3.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/vector/filter-builder.ts","../src/vector/index.ts","../src/storage/index.ts"],"names":["CoreObservabilityStorage","MastraError","ErrorDomain","ErrorCategory","ObservabilityStorageDuckDB"],"mappings":"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","file":"index.js","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 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.';\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 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 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 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 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"]}
1
+ {"version":3,"sources":["../src/vector/filter-builder.ts","../src/vector/index.ts","../src/storage/index.ts"],"names":["CoreObservabilityStorage","MastraError","ErrorDomain","ErrorCategory","ObservabilityStorageDuckDB"],"mappings":"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","file":"index.js","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 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.';\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 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"]}
@@ -1,6 +1,6 @@
1
1
  import { DuckDBConnection } from './chunk-37GBWD4M.js';
2
2
  import { MastraError, ErrorCategory, ErrorDomain } from '@mastra/core/error';
3
- import { ObservabilityStorage, createStorageErrorId, toTraceSpans } from '@mastra/core/storage';
3
+ import { BRANCH_SPAN_TYPES, ObservabilityStorage, createStorageErrorId, toTraceSpans, METRIC_DISTINCT_COLUMNS } from '@mastra/core/storage';
4
4
  import { EntityType } from '@mastra/core/observability';
5
5
  import { parseFieldKey } from '@mastra/core/utils';
6
6
 
@@ -1186,7 +1186,16 @@ async function listLogs(db, args) {
1186
1186
  logs
1187
1187
  };
1188
1188
  }
1189
- function getAggregationSql2(aggregation, measure = "value") {
1189
+ function resolveDistinctColumnSql(distinctColumn) {
1190
+ if (!distinctColumn) {
1191
+ throw new Error(`count_distinct aggregation requires a 'distinctColumn' argument`);
1192
+ }
1193
+ if (!METRIC_DISTINCT_COLUMNS.includes(distinctColumn)) {
1194
+ throw new Error(`Invalid distinctColumn: ${distinctColumn}`);
1195
+ }
1196
+ return parseFieldKey(distinctColumn);
1197
+ }
1198
+ function getAggregationSql2(aggregation, measure = "value", distinctColumn) {
1190
1199
  switch (aggregation) {
1191
1200
  case "sum":
1192
1201
  return `SUM(${measure})`;
@@ -1198,6 +1207,9 @@ function getAggregationSql2(aggregation, measure = "value") {
1198
1207
  return `MAX(${measure})`;
1199
1208
  case "count":
1200
1209
  return `CAST(COUNT(${measure}) AS DOUBLE)`;
1210
+ case "count_distinct": {
1211
+ return `CAST(approx_count_distinct(${resolveDistinctColumnSql(distinctColumn)}) AS DOUBLE)`;
1212
+ }
1201
1213
  case "last":
1202
1214
  return `arg_max(${measure}, timestamp)`;
1203
1215
  default:
@@ -1443,7 +1455,7 @@ async function listMetrics(db, args) {
1443
1455
  };
1444
1456
  }
1445
1457
  async function getMetricAggregate(db, args) {
1446
- const aggSql = getAggregationSql2(args.aggregation);
1458
+ const aggSql = getAggregationSql2(args.aggregation, "value", args.distinctColumn);
1447
1459
  const { clause: nameClause, params: nameParams } = buildMetricNameFilter(args.name);
1448
1460
  const { clause: filterClause, params: filterParams } = buildWhereClause(
1449
1461
  args.filters
@@ -1527,7 +1539,7 @@ async function getMetricAggregate(db, args) {
1527
1539
  return { value, estimatedCost: costSummary.estimatedCost, costUnit: costSummary.costUnit };
1528
1540
  }
1529
1541
  async function getMetricBreakdown(db, args) {
1530
- const aggSql = getAggregationSql2(args.aggregation);
1542
+ const aggSql = getAggregationSql2(args.aggregation, "value", args.distinctColumn);
1531
1543
  const { clause: nameClause, params: nameParams } = buildMetricNameFilter(args.name);
1532
1544
  const { clause: filterClause, params: filterParams } = buildWhereClause(
1533
1545
  args.filters
@@ -1541,8 +1553,11 @@ async function getMetricBreakdown(db, args) {
1541
1553
  const resolvedGroupBy = resolveGroupBy(args.groupBy);
1542
1554
  const selectGroupBy = resolvedGroupBy.map((entry) => entry.selectSql).join(", ");
1543
1555
  const groupByCols = resolvedGroupBy.map((entry) => entry.groupSql).join(", ");
1544
- const sql = `SELECT ${selectGroupBy}, ${aggSql} AS value, ${getCostSummarySelect()} FROM metric_events ${whereClause} GROUP BY ${groupByCols} ORDER BY value DESC`;
1545
- const rows = await db.query(sql, allParams);
1556
+ const orderDirection = args.orderDirection === "ASC" ? "ASC" : "DESC";
1557
+ const limitClause = typeof args.limit === "number" ? `LIMIT ?` : "";
1558
+ const limitParams = typeof args.limit === "number" ? [args.limit] : [];
1559
+ const sql = `SELECT ${selectGroupBy}, ${aggSql} AS value, ${getCostSummarySelect()} FROM metric_events ${whereClause} GROUP BY ${groupByCols} ORDER BY value ${orderDirection} ${limitClause}`;
1560
+ const rows = await db.query(sql, [...allParams, ...limitParams]);
1546
1561
  const groups = rows.map((row) => {
1547
1562
  const dimensions = {};
1548
1563
  for (const entry of resolvedGroupBy) {
@@ -1560,7 +1575,7 @@ async function getMetricBreakdown(db, args) {
1560
1575
  return { groups };
1561
1576
  }
1562
1577
  async function getMetricTimeSeries(db, args) {
1563
- const aggSql = getAggregationSql2(args.aggregation);
1578
+ const aggSql = getAggregationSql2(args.aggregation, "value", args.distinctColumn);
1564
1579
  const intervalSql = getIntervalSql2(args.interval);
1565
1580
  const { clause: nameClause, params: nameParams } = buildMetricNameFilter(args.name);
1566
1581
  const { clause: filterClause, params: filterParams } = buildWhereClause(
@@ -2144,6 +2159,12 @@ async function listScores(db, args) {
2144
2159
  scores: rows.map((row) => rowToScoreRecord(row))
2145
2160
  };
2146
2161
  }
2162
+ async function getScoreById(db, scoreId) {
2163
+ const rows = await db.query(`SELECT * FROM score_events WHERE scoreId = ? LIMIT 1`, [
2164
+ scoreId
2165
+ ]);
2166
+ return rows[0] ? rowToScoreRecord(rows[0]) : null;
2167
+ }
2147
2168
  async function getScoreAggregate(db, args) {
2148
2169
  const aggSql = getAggregationSql3(args.aggregation);
2149
2170
  const { clause, params } = buildScoreWhereClause(args);
@@ -2637,6 +2658,82 @@ async function listTraces(db, args) {
2637
2658
  spans: toTraceSpans(spans)
2638
2659
  };
2639
2660
  }
2661
+ var BRANCH_SPAN_TYPE_PLACEHOLDERS = BRANCH_SPAN_TYPES.map(() => "?").join(", ");
2662
+ async function getSpans(db, args) {
2663
+ if (args.spanIds.length === 0) {
2664
+ return { traceId: args.traceId, spans: [] };
2665
+ }
2666
+ const placeholders = args.spanIds.map(() => "?").join(", ");
2667
+ const rows = await db.query(
2668
+ `${SPAN_RECONSTRUCT_SELECT}
2669
+ WHERE traceId = ? AND spanId IN (${placeholders})
2670
+ GROUP BY traceId, spanId`,
2671
+ [args.traceId, ...args.spanIds]
2672
+ );
2673
+ return {
2674
+ traceId: args.traceId,
2675
+ spans: rows.map((row) => rowToSpanRecord(row))
2676
+ };
2677
+ }
2678
+ async function listBranches(db, args) {
2679
+ const filters = args.filters ?? {};
2680
+ const page = Number(args.pagination?.page ?? 0);
2681
+ const perPage = Number(args.pagination?.perPage ?? 10);
2682
+ const orderBy = { field: args.orderBy?.field ?? "startedAt", direction: args.orderBy?.direction ?? "DESC" };
2683
+ const { spanType, ...passthroughFilters } = filters;
2684
+ const { clause: filterClause, params: filterParams } = buildWhereClause(passthroughFilters);
2685
+ const orderByClause = buildOrderByClause(orderBy);
2686
+ const { clause: paginationClause, params: paginationParams } = buildPaginationClause({ page, perPage });
2687
+ let prefilterClause;
2688
+ let prefilterParams;
2689
+ if (typeof spanType === "string") {
2690
+ if (!BRANCH_SPAN_TYPES.includes(spanType)) {
2691
+ return {
2692
+ pagination: { total: 0, page, perPage, hasMore: false },
2693
+ branches: []
2694
+ };
2695
+ }
2696
+ prefilterClause = `WHERE spanType = ?`;
2697
+ prefilterParams = [spanType];
2698
+ } else {
2699
+ prefilterClause = `WHERE spanType IN (${BRANCH_SPAN_TYPE_PLACEHOLDERS})`;
2700
+ prefilterParams = [...BRANCH_SPAN_TYPES];
2701
+ }
2702
+ const cteSql = `
2703
+ WITH branch_anchors AS (
2704
+ ${SPAN_RECONSTRUCT_SELECT}
2705
+ ${prefilterClause}
2706
+ GROUP BY traceId, spanId
2707
+ )
2708
+ `;
2709
+ const countSql = `
2710
+ ${cteSql}
2711
+ SELECT COUNT(*) as total FROM branch_anchors ${filterClause}
2712
+ `;
2713
+ const countResult = await db.query(countSql, [...prefilterParams, ...filterParams]);
2714
+ const total = Number(countResult[0]?.total ?? 0);
2715
+ if (total === 0) {
2716
+ return {
2717
+ pagination: { total: 0, page, perPage, hasMore: false },
2718
+ branches: []
2719
+ };
2720
+ }
2721
+ const dataSql = `
2722
+ ${cteSql}
2723
+ SELECT * FROM branch_anchors ${filterClause} ${orderByClause} ${paginationClause}
2724
+ `;
2725
+ const rows = await db.query(dataSql, [...prefilterParams, ...filterParams, ...paginationParams]);
2726
+ const spans = rows.map((row) => rowToSpanRecord(row));
2727
+ return {
2728
+ pagination: {
2729
+ total,
2730
+ page,
2731
+ perPage,
2732
+ hasMore: (page + 1) * perPage < total
2733
+ },
2734
+ branches: toTraceSpans(spans)
2735
+ };
2736
+ }
2640
2737
 
2641
2738
  // src/storage/domains/observability/index.ts
2642
2739
  function buildSignalMigrationRequiredMessage(args) {
@@ -2739,6 +2836,9 @@ var ObservabilityStorageDuckDB = class extends ObservabilityStorage {
2739
2836
  async getSpan(args) {
2740
2837
  return getSpan(this.db, args);
2741
2838
  }
2839
+ async getSpans(args) {
2840
+ return getSpans(this.db, args);
2841
+ }
2742
2842
  async getRootSpan(args) {
2743
2843
  return getRootSpan(this.db, args);
2744
2844
  }
@@ -2751,6 +2851,9 @@ var ObservabilityStorageDuckDB = class extends ObservabilityStorage {
2751
2851
  async listTraces(args) {
2752
2852
  return listTraces(this.db, args);
2753
2853
  }
2854
+ async listBranches(args) {
2855
+ return listBranches(this.db, args);
2856
+ }
2754
2857
  // Logs
2755
2858
  async batchCreateLogs(args) {
2756
2859
  return batchCreateLogs(this.db, args);
@@ -2813,6 +2916,9 @@ var ObservabilityStorageDuckDB = class extends ObservabilityStorage {
2813
2916
  async listScores(args) {
2814
2917
  return listScores(this.db, args);
2815
2918
  }
2919
+ async getScoreById(scoreId) {
2920
+ return getScoreById(this.db, scoreId);
2921
+ }
2816
2922
  async getScoreAggregate(args) {
2817
2923
  return getScoreAggregate(this.db, args);
2818
2924
  }
@@ -2850,5 +2956,5 @@ var ObservabilityStorageDuckDB = class extends ObservabilityStorage {
2850
2956
  };
2851
2957
 
2852
2958
  export { ObservabilityStorageDuckDB };
2853
- //# sourceMappingURL=observability-YJBOVLPV.js.map
2854
- //# sourceMappingURL=observability-YJBOVLPV.js.map
2959
+ //# sourceMappingURL=observability-2R7ZOHEZ.js.map
2960
+ //# sourceMappingURL=observability-2R7ZOHEZ.js.map