@mastra/duckdb 1.2.0 → 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/CHANGELOG.md +45 -0
- package/dist/docs/SKILL.md +2 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/docs/references/reference-storage-duckdb.md +150 -0
- package/dist/index.cjs +13 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +13 -1
- package/dist/index.js.map +1 -1
- package/dist/{observability-YJBOVLPV.js → observability-2R7ZOHEZ.js} +115 -9
- package/dist/observability-2R7ZOHEZ.js.map +1 -0
- package/dist/{observability-AILZGFQT.cjs → observability-YJW7WSXX.cjs} +114 -8
- package/dist/observability-YJW7WSXX.cjs.map +1 -0
- package/dist/storage/domains/observability/index.d.ts +4 -1
- package/dist/storage/domains/observability/index.d.ts.map +1 -1
- package/dist/storage/domains/observability/metrics.d.ts.map +1 -1
- package/dist/storage/domains/observability/scores.d.ts +2 -1
- package/dist/storage/domains/observability/scores.d.ts.map +1 -1
- package/dist/storage/domains/observability/tracing.d.ts +16 -1
- package/dist/storage/domains/observability/tracing.d.ts.map +1 -1
- package/dist/storage/index.d.ts +3 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/package.json +9 -9
- package/dist/observability-AILZGFQT.cjs.map +0 -1
- package/dist/observability-YJBOVLPV.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/storage/domains/observability/ddl.ts","../src/storage/domains/observability/discovery.ts","../src/storage/domains/observability/filters.ts","../src/storage/domains/observability/helpers.ts","../src/storage/domains/observability/feedback.ts","../src/storage/domains/observability/logs.ts","../src/storage/domains/observability/metrics.ts","../src/storage/domains/observability/migration.ts","../src/storage/domains/observability/scores.ts","../src/storage/domains/observability/tracing.ts","../src/storage/domains/observability/index.ts"],"names":["parseFieldKey","rows","getAggregationSql","getIntervalSql","sql","getValidatedPercentiles","toSeriesName","getComparisonDateRange","COLUMNS","COLUMNS_SQL","MastraError","createStorageErrorId","ErrorDomain","ErrorCategory"],"mappings":"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","file":"observability-2R7ZOHEZ.js","sourcesContent":["/**\n * DDL statements for DuckDB observability tables.\n * All tables use append-only patterns with a single `timestamp` column.\n *\n * Column ordering convention:\n * 1. Event metadata (eventType, timestamp)\n * 2. IDs (trace, span, experiment, resource, run, session, etc.)\n * 3. Entity hierarchy (entity, parent, root)\n * 4. Context (user, org, environment, service, executionSource)\n * 5. Domain-specific scalar fields\n * 6. JSON fields (attributes, metadata, tags, input/output, etc.)\n */\n\n/** DDL for the span_events append-only table. */\nexport const SPAN_EVENTS_DDL = `\nCREATE TABLE IF NOT EXISTS span_events (\n -- Event metadata\n eventType VARCHAR NOT NULL,\n timestamp TIMESTAMP NOT NULL,\n\n -- IDs\n traceId VARCHAR NOT NULL,\n spanId VARCHAR NOT NULL,\n parentSpanId VARCHAR,\n experimentId VARCHAR,\n\n -- Entity\n entityType VARCHAR,\n entityId VARCHAR,\n entityName VARCHAR,\n entityVersionId VARCHAR,\n\n -- Context\n userId VARCHAR,\n organizationId VARCHAR,\n resourceId VARCHAR,\n runId VARCHAR,\n sessionId VARCHAR,\n threadId VARCHAR,\n requestId VARCHAR,\n environment VARCHAR,\n source VARCHAR,\n serviceName VARCHAR,\n requestContext JSON,\n\n -- Span-specific scalars\n name VARCHAR,\n spanType VARCHAR,\n isEvent BOOLEAN,\n endedAt TIMESTAMP,\n\n -- JSON fields\n attributes JSON,\n metadata JSON,\n tags JSON,\n scope JSON,\n links JSON,\n input JSON,\n output JSON,\n error JSON\n)`;\n\n/** DDL for the metric_events append-only table. */\nexport const METRIC_EVENTS_DDL = `\nCREATE TABLE IF NOT EXISTS metric_events (\n -- Event metadata\n timestamp TIMESTAMP NOT NULL,\n\n -- IDs\n metricId VARCHAR NOT NULL PRIMARY KEY,\n traceId VARCHAR,\n spanId VARCHAR,\n experimentId VARCHAR,\n\n -- Entity hierarchy\n entityType VARCHAR,\n entityId VARCHAR,\n entityName VARCHAR,\n entityVersionId VARCHAR,\n parentEntityVersionId VARCHAR,\n parentEntityType VARCHAR,\n parentEntityId VARCHAR,\n parentEntityName VARCHAR,\n rootEntityVersionId VARCHAR,\n rootEntityType VARCHAR,\n rootEntityId VARCHAR,\n rootEntityName VARCHAR,\n\n -- Context\n userId VARCHAR,\n organizationId VARCHAR,\n resourceId VARCHAR,\n runId VARCHAR,\n sessionId VARCHAR,\n threadId VARCHAR,\n requestId VARCHAR,\n environment VARCHAR,\n executionSource VARCHAR,\n serviceName VARCHAR,\n\n -- Metric-specific scalars\n name VARCHAR NOT NULL,\n value DOUBLE NOT NULL,\n provider VARCHAR,\n model VARCHAR,\n estimatedCost DOUBLE,\n costUnit VARCHAR,\n\n -- JSON fields\n tags JSON,\n labels JSON,\n costMetadata JSON,\n metadata JSON,\n scope JSON\n)`;\n\n/** DDL for the log_events append-only table. */\nexport const LOG_EVENTS_DDL = `\nCREATE TABLE IF NOT EXISTS log_events (\n -- Event metadata\n timestamp TIMESTAMP NOT NULL,\n\n -- IDs\n logId VARCHAR NOT NULL PRIMARY KEY,\n traceId VARCHAR,\n spanId VARCHAR,\n experimentId VARCHAR,\n\n -- Entity hierarchy\n entityType VARCHAR,\n entityId VARCHAR,\n entityName VARCHAR,\n entityVersionId VARCHAR,\n parentEntityVersionId VARCHAR,\n parentEntityType VARCHAR,\n parentEntityId VARCHAR,\n parentEntityName VARCHAR,\n rootEntityVersionId VARCHAR,\n rootEntityType VARCHAR,\n rootEntityId VARCHAR,\n rootEntityName VARCHAR,\n\n -- Context\n userId VARCHAR,\n organizationId VARCHAR,\n resourceId VARCHAR,\n runId VARCHAR,\n sessionId VARCHAR,\n threadId VARCHAR,\n requestId VARCHAR,\n environment VARCHAR,\n executionSource VARCHAR,\n serviceName VARCHAR,\n\n -- Log-specific scalars\n level VARCHAR NOT NULL,\n message VARCHAR NOT NULL,\n\n -- JSON fields\n data JSON,\n tags JSON,\n metadata JSON,\n scope JSON\n)`;\n\n/** DDL for the score_events append-only table. */\nexport const SCORE_EVENTS_DDL = `\nCREATE TABLE IF NOT EXISTS score_events (\n -- Event metadata\n timestamp TIMESTAMP NOT NULL,\n\n -- IDs\n scoreId VARCHAR NOT NULL PRIMARY KEY,\n traceId VARCHAR,\n spanId VARCHAR,\n experimentId VARCHAR,\n scoreTraceId VARCHAR,\n\n -- Entity hierarchy\n entityType VARCHAR,\n entityId VARCHAR,\n entityName VARCHAR,\n entityVersionId VARCHAR,\n parentEntityVersionId VARCHAR,\n parentEntityType VARCHAR,\n parentEntityId VARCHAR,\n parentEntityName VARCHAR,\n rootEntityVersionId VARCHAR,\n rootEntityType VARCHAR,\n rootEntityId VARCHAR,\n rootEntityName VARCHAR,\n\n -- Context\n userId VARCHAR,\n organizationId VARCHAR,\n resourceId VARCHAR,\n runId VARCHAR,\n sessionId VARCHAR,\n threadId VARCHAR,\n requestId VARCHAR,\n environment VARCHAR,\n executionSource VARCHAR,\n serviceName VARCHAR,\n\n -- Score-specific scalars\n scorerId VARCHAR NOT NULL,\n scorerVersion VARCHAR,\n source VARCHAR,\n scoreSource VARCHAR,\n score DOUBLE NOT NULL,\n reason VARCHAR,\n\n -- JSON fields\n tags JSON,\n metadata JSON,\n scope JSON\n)`;\n\n/** DDL for the feedback_events append-only table. */\nexport const FEEDBACK_EVENTS_DDL = `\nCREATE TABLE IF NOT EXISTS feedback_events (\n -- Event metadata\n timestamp TIMESTAMP NOT NULL,\n\n -- IDs\n feedbackId VARCHAR NOT NULL PRIMARY KEY,\n traceId VARCHAR,\n spanId VARCHAR,\n experimentId VARCHAR,\n -- Entity hierarchy\n entityType VARCHAR,\n entityId VARCHAR,\n entityName VARCHAR,\n entityVersionId VARCHAR,\n parentEntityVersionId VARCHAR,\n parentEntityType VARCHAR,\n parentEntityId VARCHAR,\n parentEntityName VARCHAR,\n rootEntityVersionId VARCHAR,\n rootEntityType VARCHAR,\n rootEntityId VARCHAR,\n rootEntityName VARCHAR,\n\n -- Context\n userId VARCHAR,\n organizationId VARCHAR,\n resourceId VARCHAR,\n runId VARCHAR,\n sessionId VARCHAR,\n threadId VARCHAR,\n requestId VARCHAR,\n environment VARCHAR,\n executionSource VARCHAR,\n serviceName VARCHAR,\n\n -- Feedback actor / linkage\n feedbackUserId VARCHAR,\n sourceId VARCHAR,\n\n -- Feedback-specific scalars\n source VARCHAR,\n feedbackSource VARCHAR NOT NULL,\n feedbackType VARCHAR NOT NULL,\n value VARCHAR NOT NULL,\n comment VARCHAR,\n\n -- JSON fields\n tags JSON,\n metadata JSON,\n scope JSON\n)`;\n\n/** All observability DDL statements, in creation order. */\nexport const ALL_DDL = [SPAN_EVENTS_DDL, METRIC_EVENTS_DDL, LOG_EVENTS_DDL, SCORE_EVENTS_DDL, FEEDBACK_EVENTS_DDL];\n\n/** Additive migrations for observability tables created by older versions. */\nexport const ALL_MIGRATIONS = [\n // Span events\n `ALTER TABLE span_events ADD COLUMN IF NOT EXISTS entityVersionId VARCHAR`,\n\n // Metrics\n `ALTER TABLE metric_events ADD COLUMN IF NOT EXISTS entityVersionId VARCHAR`,\n `ALTER TABLE metric_events ADD COLUMN IF NOT EXISTS parentEntityVersionId VARCHAR`,\n `ALTER TABLE metric_events ADD COLUMN IF NOT EXISTS rootEntityVersionId VARCHAR`,\n `ALTER TABLE metric_events ADD COLUMN IF NOT EXISTS experimentId VARCHAR`,\n `ALTER TABLE metric_events ADD COLUMN IF NOT EXISTS parentEntityType VARCHAR`,\n `ALTER TABLE metric_events ADD COLUMN IF NOT EXISTS parentEntityId VARCHAR`,\n `ALTER TABLE metric_events ADD COLUMN IF NOT EXISTS parentEntityName VARCHAR`,\n `ALTER TABLE metric_events ADD COLUMN IF NOT EXISTS rootEntityType VARCHAR`,\n `ALTER TABLE metric_events ADD COLUMN IF NOT EXISTS rootEntityId VARCHAR`,\n `ALTER TABLE metric_events ADD COLUMN IF NOT EXISTS rootEntityName VARCHAR`,\n `ALTER TABLE metric_events ADD COLUMN IF NOT EXISTS userId VARCHAR`,\n `ALTER TABLE metric_events ADD COLUMN IF NOT EXISTS organizationId VARCHAR`,\n `ALTER TABLE metric_events ADD COLUMN IF NOT EXISTS resourceId VARCHAR`,\n `ALTER TABLE metric_events ADD COLUMN IF NOT EXISTS runId VARCHAR`,\n `ALTER TABLE metric_events ADD COLUMN IF NOT EXISTS sessionId VARCHAR`,\n `ALTER TABLE metric_events ADD COLUMN IF NOT EXISTS threadId VARCHAR`,\n `ALTER TABLE metric_events ADD COLUMN IF NOT EXISTS requestId VARCHAR`,\n `ALTER TABLE metric_events ADD COLUMN IF NOT EXISTS environment VARCHAR`,\n `ALTER TABLE metric_events ADD COLUMN IF NOT EXISTS executionSource VARCHAR`,\n `ALTER TABLE metric_events ADD COLUMN IF NOT EXISTS serviceName VARCHAR`,\n `ALTER TABLE metric_events ADD COLUMN IF NOT EXISTS costMetadata JSON`,\n `ALTER TABLE metric_events ADD COLUMN IF NOT EXISTS metadata JSON`,\n `ALTER TABLE metric_events ADD COLUMN IF NOT EXISTS scope JSON`,\n\n // Logs\n `ALTER TABLE log_events ADD COLUMN IF NOT EXISTS entityVersionId VARCHAR`,\n `ALTER TABLE log_events ADD COLUMN IF NOT EXISTS parentEntityVersionId VARCHAR`,\n `ALTER TABLE log_events ADD COLUMN IF NOT EXISTS rootEntityVersionId VARCHAR`,\n `ALTER TABLE log_events ADD COLUMN IF NOT EXISTS experimentId VARCHAR`,\n `ALTER TABLE log_events ADD COLUMN IF NOT EXISTS parentEntityType VARCHAR`,\n `ALTER TABLE log_events ADD COLUMN IF NOT EXISTS parentEntityId VARCHAR`,\n `ALTER TABLE log_events ADD COLUMN IF NOT EXISTS parentEntityName VARCHAR`,\n `ALTER TABLE log_events ADD COLUMN IF NOT EXISTS rootEntityType VARCHAR`,\n `ALTER TABLE log_events ADD COLUMN IF NOT EXISTS rootEntityId VARCHAR`,\n `ALTER TABLE log_events ADD COLUMN IF NOT EXISTS rootEntityName VARCHAR`,\n `ALTER TABLE log_events ADD COLUMN IF NOT EXISTS userId VARCHAR`,\n `ALTER TABLE log_events ADD COLUMN IF NOT EXISTS organizationId VARCHAR`,\n `ALTER TABLE log_events ADD COLUMN IF NOT EXISTS resourceId VARCHAR`,\n `ALTER TABLE log_events ADD COLUMN IF NOT EXISTS runId VARCHAR`,\n `ALTER TABLE log_events ADD COLUMN IF NOT EXISTS sessionId VARCHAR`,\n `ALTER TABLE log_events ADD COLUMN IF NOT EXISTS threadId VARCHAR`,\n `ALTER TABLE log_events ADD COLUMN IF NOT EXISTS requestId VARCHAR`,\n `ALTER TABLE log_events ADD COLUMN IF NOT EXISTS environment VARCHAR`,\n `ALTER TABLE log_events ADD COLUMN IF NOT EXISTS executionSource VARCHAR`,\n `ALTER TABLE log_events ADD COLUMN IF NOT EXISTS serviceName VARCHAR`,\n `ALTER TABLE log_events ADD COLUMN IF NOT EXISTS tags JSON`,\n `ALTER TABLE log_events ADD COLUMN IF NOT EXISTS metadata JSON`,\n `ALTER TABLE log_events ADD COLUMN IF NOT EXISTS scope JSON`,\n\n // Scores\n `ALTER TABLE score_events ADD COLUMN IF NOT EXISTS entityVersionId VARCHAR`,\n `ALTER TABLE score_events ADD COLUMN IF NOT EXISTS parentEntityVersionId VARCHAR`,\n `ALTER TABLE score_events ADD COLUMN IF NOT EXISTS rootEntityVersionId VARCHAR`,\n `ALTER TABLE score_events ADD COLUMN IF NOT EXISTS entityType VARCHAR`,\n `ALTER TABLE score_events ADD COLUMN IF NOT EXISTS entityId VARCHAR`,\n `ALTER TABLE score_events ADD COLUMN IF NOT EXISTS entityName VARCHAR`,\n `ALTER TABLE score_events ADD COLUMN IF NOT EXISTS parentEntityType VARCHAR`,\n `ALTER TABLE score_events ADD COLUMN IF NOT EXISTS parentEntityId VARCHAR`,\n `ALTER TABLE score_events ADD COLUMN IF NOT EXISTS parentEntityName VARCHAR`,\n `ALTER TABLE score_events ADD COLUMN IF NOT EXISTS rootEntityType VARCHAR`,\n `ALTER TABLE score_events ADD COLUMN IF NOT EXISTS rootEntityId VARCHAR`,\n `ALTER TABLE score_events ADD COLUMN IF NOT EXISTS rootEntityName VARCHAR`,\n `ALTER TABLE score_events ADD COLUMN IF NOT EXISTS userId VARCHAR`,\n `ALTER TABLE score_events ADD COLUMN IF NOT EXISTS organizationId VARCHAR`,\n `ALTER TABLE score_events ADD COLUMN IF NOT EXISTS resourceId VARCHAR`,\n `ALTER TABLE score_events ADD COLUMN IF NOT EXISTS runId VARCHAR`,\n `ALTER TABLE score_events ADD COLUMN IF NOT EXISTS sessionId VARCHAR`,\n `ALTER TABLE score_events ADD COLUMN IF NOT EXISTS threadId VARCHAR`,\n `ALTER TABLE score_events ADD COLUMN IF NOT EXISTS requestId VARCHAR`,\n `ALTER TABLE score_events ADD COLUMN IF NOT EXISTS environment VARCHAR`,\n `ALTER TABLE score_events ADD COLUMN IF NOT EXISTS executionSource VARCHAR`,\n `ALTER TABLE score_events ADD COLUMN IF NOT EXISTS serviceName VARCHAR`,\n `ALTER TABLE score_events ADD COLUMN IF NOT EXISTS tags JSON`,\n `ALTER TABLE score_events ADD COLUMN IF NOT EXISTS scope JSON`,\n `ALTER TABLE score_events ADD COLUMN IF NOT EXISTS source VARCHAR`,\n `ALTER TABLE score_events ADD COLUMN IF NOT EXISTS scoreSource VARCHAR`,\n `ALTER TABLE score_events ALTER COLUMN traceId DROP NOT NULL`,\n\n // Feedback\n `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS entityVersionId VARCHAR`,\n `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS parentEntityVersionId VARCHAR`,\n `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS rootEntityVersionId VARCHAR`,\n `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS entityType VARCHAR`,\n `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS entityId VARCHAR`,\n `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS entityName VARCHAR`,\n `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS parentEntityType VARCHAR`,\n `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS parentEntityId VARCHAR`,\n `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS parentEntityName VARCHAR`,\n `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS rootEntityType VARCHAR`,\n `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS rootEntityId VARCHAR`,\n `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS rootEntityName VARCHAR`,\n `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS organizationId VARCHAR`,\n `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS resourceId VARCHAR`,\n `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS runId VARCHAR`,\n `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS sessionId VARCHAR`,\n `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS threadId VARCHAR`,\n `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS requestId VARCHAR`,\n `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS environment VARCHAR`,\n `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS executionSource VARCHAR`,\n `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS serviceName VARCHAR`,\n `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS feedbackUserId VARCHAR`,\n `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS sourceId VARCHAR`,\n `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS tags JSON`,\n `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS scope JSON`,\n `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS source VARCHAR`,\n `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS feedbackSource VARCHAR`,\n `ALTER TABLE feedback_events ALTER COLUMN traceId DROP NOT NULL`,\n];\n","import { EntityType } from '@mastra/core/observability';\nimport type {\n GetEntityTypesArgs,\n GetEntityTypesResponse,\n GetEntityNamesArgs,\n GetEntityNamesResponse,\n GetServiceNamesArgs,\n GetServiceNamesResponse,\n GetEnvironmentsArgs,\n GetEnvironmentsResponse,\n GetTagsArgs,\n GetTagsResponse,\n} from '@mastra/core/storage';\nimport type { DuckDBConnection } from '../../db/index';\n\nfunction unionDistinctQueries(selects: string[], orderBy: string): string {\n return `${selects.join('\\nUNION\\n')}\\nORDER BY ${orderBy}`;\n}\n\n/** Return distinct entity types across observability signals that carry them. */\nexport async function getEntityTypes(db: DuckDBConnection, _args: GetEntityTypesArgs): Promise<GetEntityTypesResponse> {\n const rows = await db.query<{ entityType: string }>(\n unionDistinctQueries(\n [\n `SELECT entityType FROM span_events WHERE entityType IS NOT NULL`,\n `SELECT entityType FROM metric_events WHERE entityType IS NOT NULL`,\n `SELECT entityType FROM log_events WHERE entityType IS NOT NULL`,\n ],\n 'entityType',\n ),\n );\n\n const validTypes = new Set(Object.values(EntityType));\n const typeSet = new Set<EntityType>();\n for (const row of rows) {\n if (row.entityType && validTypes.has(row.entityType as EntityType)) {\n typeSet.add(row.entityType as EntityType);\n }\n }\n return { entityTypes: Array.from(typeSet).sort() };\n}\n\n/** Return distinct entity names across observability signals, optionally filtered by entity type. */\nexport async function getEntityNames(db: DuckDBConnection, args: GetEntityNamesArgs): Promise<GetEntityNamesResponse> {\n const buildSelect = (table: 'span_events' | 'metric_events' | 'log_events') => {\n const conditions = [`entityName IS NOT NULL`];\n if (args.entityType) {\n conditions.push(`entityType = ?`);\n }\n return `SELECT entityName FROM ${table} WHERE ${conditions.join(' AND ')}`;\n };\n\n const params = args.entityType ? [args.entityType, args.entityType, args.entityType] : [];\n const rows = await db.query<{ entityName: string }>(\n unionDistinctQueries(\n [buildSelect('span_events'), buildSelect('metric_events'), buildSelect('log_events')],\n 'entityName',\n ),\n params,\n );\n return { names: rows.map(r => r.entityName) };\n}\n\n/** Return distinct service names across observability signals. */\nexport async function getServiceNames(\n db: DuckDBConnection,\n _args: GetServiceNamesArgs,\n): Promise<GetServiceNamesResponse> {\n const rows = await db.query<{ serviceName: string }>(\n unionDistinctQueries(\n [\n `SELECT serviceName FROM span_events WHERE serviceName IS NOT NULL`,\n `SELECT serviceName FROM metric_events WHERE serviceName IS NOT NULL`,\n `SELECT serviceName FROM log_events WHERE serviceName IS NOT NULL`,\n ],\n 'serviceName',\n ),\n );\n return { serviceNames: rows.map(r => r.serviceName) };\n}\n\n/** Return distinct environment values across observability signals. */\nexport async function getEnvironments(\n db: DuckDBConnection,\n _args: GetEnvironmentsArgs,\n): Promise<GetEnvironmentsResponse> {\n const rows = await db.query<{ environment: string }>(\n unionDistinctQueries(\n [\n `SELECT environment FROM span_events WHERE environment IS NOT NULL`,\n `SELECT environment FROM metric_events WHERE environment IS NOT NULL`,\n `SELECT environment FROM log_events WHERE environment IS NOT NULL`,\n ],\n 'environment',\n ),\n );\n return { environments: rows.map(r => r.environment) };\n}\n\n/** Return distinct tags across observability signals, optionally filtered by entity type. */\nexport async function getTags(db: DuckDBConnection, args: GetTagsArgs): Promise<GetTagsResponse> {\n const buildSelect = (table: 'span_events' | 'metric_events' | 'log_events') => {\n const conditions = [`tags IS NOT NULL`];\n if (args.entityType) {\n conditions.push(`entityType = ?`);\n }\n return `SELECT unnest(CAST(tags AS VARCHAR[])) AS tag FROM ${table} WHERE ${conditions.join(' AND ')}`;\n };\n\n const params = args.entityType ? [args.entityType, args.entityType, args.entityType] : [];\n const rows = await db.query<{ tag: string }>(\n unionDistinctQueries([buildSelect('span_events'), buildSelect('metric_events'), buildSelect('log_events')], 'tag'),\n params,\n );\n return { tags: rows.map(r => r.tag) };\n}\n","import type { DateRange } from '@mastra/core/storage';\nimport { parseFieldKey } from '@mastra/core/utils';\n\nexport function buildJsonPath(key: string): string {\n try {\n return `$.${parseFieldKey(key)}`;\n } catch {\n const escaped = key.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n return `$.\"${escaped}\"`;\n }\n}\n\nfunction normalizeJsonFilterValue(value: unknown): string | null {\n if (value === undefined) return null;\n if (typeof value === 'string') return value;\n const json = JSON.stringify(value);\n return json ?? null;\n}\n\nfunction sanitizeColumn(column: string): string {\n return parseFieldKey(column);\n}\n\n/**\n * Build a WHERE clause from a filter object.\n * Returns { clause, params } for parameterized queries.\n */\nexport function buildWhereClause(\n filters: Record<string, unknown> | undefined,\n fieldMappings?: Record<string, string>,\n): { clause: string; params: unknown[] } {\n if (!filters) return { clause: '', params: [] };\n\n const conditions: string[] = [];\n const params: unknown[] = [];\n\n for (const [key, value] of Object.entries(filters)) {\n if (value === undefined || value === null) continue;\n\n const column = sanitizeColumn(fieldMappings?.[key] ?? key);\n\n if (key === 'timestamp' || key === 'startedAt' || key === 'endedAt') {\n const dateRange = value as DateRange;\n if (dateRange.start) {\n const op = dateRange.startExclusive ? '>' : '>=';\n conditions.push(`${column} ${op} ?`);\n params.push(dateRange.start);\n }\n if (dateRange.end) {\n const op = dateRange.endExclusive ? '<' : '<=';\n conditions.push(`${column} ${op} ?`);\n params.push(dateRange.end);\n }\n continue;\n }\n\n if (key === 'labels') {\n const labelsObj = value as Record<string, string>;\n for (const [labelKey, labelValue] of Object.entries(labelsObj)) {\n conditions.push(`json_extract_string(${column}, ?) = ?`);\n params.push(buildJsonPath(labelKey), labelValue);\n }\n continue;\n }\n\n if (key === 'tags') {\n const tags = value as string[];\n for (const tag of tags) {\n conditions.push(`list_contains(CAST(${column} AS VARCHAR[]), ?)`);\n params.push(tag);\n }\n continue;\n }\n\n if (key === 'status') {\n // Derived field for traces\n const status = value as string;\n if (status === 'error') {\n conditions.push(`error IS NOT NULL`);\n } else if (status === 'running') {\n conditions.push(`endedAt IS NULL AND error IS NULL`);\n } else if (status === 'success') {\n conditions.push(`endedAt IS NOT NULL AND error IS NULL`);\n }\n continue;\n }\n\n if (key === 'hasChildError') {\n // Handled at query level, skip for now\n continue;\n }\n\n if (key === 'metadata' || key === 'scope') {\n const jsonObj = value as Record<string, unknown>;\n for (const [jsonKey, jsonValue] of Object.entries(jsonObj)) {\n const normalized = normalizeJsonFilterValue(jsonValue);\n if (normalized === null) continue;\n conditions.push(`json_extract_string(${column}, ?) = ?`);\n params.push(buildJsonPath(jsonKey), normalized);\n }\n continue;\n }\n\n // Array values => IN clause\n if (Array.isArray(value)) {\n if (value.length === 0) continue;\n const placeholders = value.map(() => '?').join(', ');\n conditions.push(`${column} IN (${placeholders})`);\n params.push(...value);\n continue;\n }\n\n // Simple equality\n conditions.push(`${column} = ?`);\n params.push(value);\n }\n\n const clause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';\n return { clause, params };\n}\n\n/**\n * Build an ORDER BY clause from orderBy config.\n */\nexport function buildOrderByClause(orderBy?: { field: string; direction: string }): string {\n if (!orderBy) return '';\n const dir = orderBy.direction.toUpperCase();\n if (dir !== 'ASC' && dir !== 'DESC') {\n throw new Error(`Invalid sort direction: ${orderBy.direction}`);\n }\n const field = parseFieldKey(orderBy.field);\n return `ORDER BY ${field} ${dir}`;\n}\n\n/**\n * Build a LIMIT/OFFSET clause from pagination config.\n */\nexport function buildPaginationClause(pagination?: { page: number; perPage: number }): {\n clause: string;\n params: unknown[];\n} {\n if (!pagination) return { clause: '', params: [] };\n if (!Number.isInteger(pagination.page) || pagination.page < 0) {\n throw new Error(`Invalid page: ${pagination.page}`);\n }\n if (!Number.isInteger(pagination.perPage) || pagination.perPage <= 0) {\n throw new Error(`Invalid perPage: ${pagination.perPage}`);\n }\n const offset = pagination.page * pagination.perPage;\n return {\n clause: `LIMIT ? OFFSET ?`,\n params: [pagination.perPage, offset],\n };\n}\n","import { DuckDBConnection } from '../../db/index';\n\n/** Shorthand for {@link DuckDBConnection.sqlValue}. */\nexport const v = DuckDBConnection.sqlValue;\n\n/** Serialize a value to JSON then SQL-escape it, or return 'NULL'. */\nexport function jsonV(val: unknown): string {\n if (val === null || val === undefined) return 'NULL';\n return DuckDBConnection.sqlValue(JSON.stringify(val));\n}\n\n/** Coerce a value to a Date. Throws if value is nullish. */\nexport function toDate(val: unknown): Date {\n if (val === null || val === undefined) {\n throw new Error('Expected date value but received null/undefined');\n }\n const date = val instanceof Date ? val : new Date(String(val));\n if (Number.isNaN(date.getTime())) {\n throw new Error('Expected valid date but received invalid date');\n }\n return date;\n}\n\n/** Coerce a value to a Date, returning null for nullish values. */\nexport function toDateOrNull(val: unknown): Date | null {\n if (val === null || val === undefined) return null;\n return val instanceof Date ? val : new Date(String(val));\n}\n\n/** Parse a JSON string, returning the original value if parsing fails. */\nexport function parseJson(value: unknown): unknown {\n if (value === null || value === undefined) return null;\n if (typeof value === 'string') {\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n }\n return value;\n}\n\n/** Parse a JSON string and return the result only if it is an array. */\nexport function parseJsonArray(value: unknown): unknown[] | null {\n if (value === null || value === undefined) return null;\n const parsed = parseJson(value);\n return Array.isArray(parsed) ? parsed : null;\n}\n","import type {\n BatchCreateFeedbackArgs,\n CreateFeedbackArgs,\n GetFeedbackAggregateArgs,\n GetFeedbackAggregateResponse,\n GetFeedbackBreakdownArgs,\n GetFeedbackBreakdownResponse,\n GetFeedbackPercentilesArgs,\n GetFeedbackPercentilesResponse,\n GetFeedbackTimeSeriesArgs,\n GetFeedbackTimeSeriesResponse,\n ListFeedbackArgs,\n ListFeedbackResponse,\n AggregationInterval,\n AggregationType,\n} from '@mastra/core/storage';\nimport { parseFieldKey } from '@mastra/core/utils';\nimport type { DuckDBConnection } from '../../db/index';\nimport { buildWhereClause, buildOrderByClause, buildPaginationClause } from './filters';\nimport { v, jsonV, toDate, parseJson, parseJsonArray } from './helpers';\n\ntype LegacyFeedbackRecord = CreateFeedbackArgs['feedback'] & {\n source?: string | null;\n userId?: string | null;\n};\n\nconst FEEDBACK_GROUP_BY_COLUMNS = new Set([\n 'timestamp',\n 'traceId',\n 'spanId',\n 'experimentId',\n 'entityType',\n 'entityId',\n 'entityName',\n 'entityVersionId',\n 'parentEntityVersionId',\n 'parentEntityType',\n 'parentEntityId',\n 'parentEntityName',\n 'rootEntityVersionId',\n 'rootEntityType',\n 'rootEntityId',\n 'rootEntityName',\n 'userId',\n 'organizationId',\n 'resourceId',\n 'runId',\n 'sessionId',\n 'threadId',\n 'requestId',\n 'environment',\n 'executionSource',\n 'serviceName',\n 'feedbackUserId',\n 'sourceId',\n 'feedbackSource',\n 'feedbackType',\n 'value',\n 'comment',\n]);\n\nfunction getAggregationSql(aggregation: AggregationType, measure = 'TRY_CAST(value AS DOUBLE)'): string {\n switch (aggregation) {\n case 'sum':\n return `SUM(${measure})`;\n case 'avg':\n return `AVG(${measure})`;\n case 'min':\n return `MIN(${measure})`;\n case 'max':\n return `MAX(${measure})`;\n case 'count':\n return `CAST(COUNT(${measure}) AS DOUBLE)`;\n case 'last':\n return `arg_max(${measure}, timestamp)`;\n default:\n return `SUM(${measure})`;\n }\n}\n\nfunction getIntervalSql(interval: AggregationInterval): string {\n switch (interval) {\n case '1m':\n return '1 minute';\n case '5m':\n return '5 minutes';\n case '15m':\n return '15 minutes';\n case '1h':\n return '1 hour';\n case '1d':\n return '1 day';\n default:\n return '1 hour';\n }\n}\n\nfunction getValidatedPercentiles(percentiles: number[]): number[] {\n if (!Array.isArray(percentiles) || percentiles.length === 0) {\n throw new Error('Percentiles must include at least one value between 0 and 1.');\n }\n\n return percentiles.map(percentile => {\n if (!Number.isFinite(percentile) || percentile < 0 || percentile > 1) {\n throw new Error('Percentiles must be finite numbers between 0 and 1.');\n }\n\n return percentile;\n });\n}\n\nfunction buildFeedbackWhereClause(\n args: Pick<GetFeedbackAggregateArgs, 'feedbackType' | 'feedbackSource' | 'filters'>,\n includeNumericGuard = false,\n): { clause: string; params: unknown[] } {\n const conditions = ['feedbackType = ?'];\n const params: unknown[] = [args.feedbackType];\n\n if (args.feedbackSource !== undefined) {\n conditions.push('feedbackSource = ?');\n params.push(args.feedbackSource);\n }\n\n const { clause: filterClause, params: filterParams } = buildWhereClause(\n args.filters as Record<string, unknown> | undefined,\n { source: 'feedbackSource' },\n );\n if (filterClause) {\n conditions.push(filterClause.replace('WHERE ', ''));\n params.push(...filterParams);\n }\n\n if (includeNumericGuard) {\n conditions.push('TRY_CAST(value AS DOUBLE) IS NOT NULL');\n }\n\n return { clause: `WHERE ${conditions.join(' AND ')}`, params };\n}\n\nfunction resolveFeedbackGroupBy(groupBy: string[]): { key: string; selectSql: string; groupSql: string }[] {\n return groupBy.map((key, index) => {\n const column = parseFieldKey(key);\n if (!FEEDBACK_GROUP_BY_COLUMNS.has(column)) {\n throw new Error(`Invalid groupBy column(s): ${key}`);\n }\n\n const alias = `group_by_${index}`;\n return {\n key,\n selectSql: `${column} AS ${alias}`,\n groupSql: alias,\n };\n });\n}\n\nfunction toSeriesName(values: unknown[]): string {\n return values.map(value => (value === null || value === undefined ? '' : String(value))).join('|');\n}\n\nfunction rowToFeedbackRecord(row: Record<string, unknown>): Record<string, unknown> {\n const rawValue = row.value;\n let value: number | string = rawValue as string;\n const numValue = Number(rawValue);\n if (!isNaN(numValue)) value = numValue;\n\n return {\n feedbackId: row.feedbackId as string,\n timestamp: toDate(row.timestamp),\n traceId: (row.traceId as string) ?? null,\n spanId: (row.spanId as string) ?? null,\n experimentId: (row.experimentId as string) ?? null,\n entityType: (row.entityType as string) ?? null,\n entityId: (row.entityId as string) ?? null,\n entityName: (row.entityName as string) ?? null,\n entityVersionId: (row.entityVersionId as string) ?? null,\n parentEntityVersionId: (row.parentEntityVersionId as string) ?? null,\n parentEntityType: (row.parentEntityType as string) ?? null,\n parentEntityId: (row.parentEntityId as string) ?? null,\n parentEntityName: (row.parentEntityName as string) ?? null,\n rootEntityVersionId: (row.rootEntityVersionId as string) ?? null,\n rootEntityType: (row.rootEntityType as string) ?? null,\n rootEntityId: (row.rootEntityId as string) ?? null,\n rootEntityName: (row.rootEntityName as string) ?? null,\n userId: (row.userId as string) ?? null,\n organizationId: (row.organizationId as string) ?? null,\n resourceId: (row.resourceId as string) ?? null,\n runId: (row.runId as string) ?? null,\n sessionId: (row.sessionId as string) ?? null,\n threadId: (row.threadId as string) ?? null,\n requestId: (row.requestId as string) ?? null,\n environment: (row.environment as string) ?? null,\n executionSource: (row.executionSource as string) ?? null,\n serviceName: (row.serviceName as string) ?? null,\n feedbackUserId: (row.feedbackUserId as string) ?? null,\n sourceId: (row.sourceId as string) ?? null,\n source: row.feedbackSource as string,\n feedbackSource: row.feedbackSource as string,\n feedbackType: row.feedbackType as string,\n value,\n comment: (row.comment as string) ?? null,\n tags: parseJsonArray(row.tags) as string[] | null,\n metadata: parseJson(row.metadata) as Record<string, unknown> | null,\n scope: parseJson(row.scope) as Record<string, unknown> | null,\n };\n}\n\nfunction getComparisonDateRange(\n comparePeriod: NonNullable<GetFeedbackAggregateArgs['comparePeriod']>,\n timestamp: NonNullable<NonNullable<GetFeedbackAggregateArgs['filters']>['timestamp']>,\n) {\n if (!timestamp.start || !timestamp.end) return null;\n\n const duration = timestamp.end.getTime() - timestamp.start.getTime();\n switch (comparePeriod) {\n case 'previous_period':\n return {\n start: new Date(timestamp.start.getTime() - duration),\n end: new Date(timestamp.end.getTime() - duration),\n startExclusive: timestamp.startExclusive,\n endExclusive: timestamp.endExclusive,\n };\n case 'previous_day':\n return {\n start: new Date(timestamp.start.getTime() - 86400000),\n end: new Date(timestamp.end.getTime() - 86400000),\n startExclusive: timestamp.startExclusive,\n endExclusive: timestamp.endExclusive,\n };\n case 'previous_week':\n return {\n start: new Date(timestamp.start.getTime() - 604800000),\n end: new Date(timestamp.end.getTime() - 604800000),\n startExclusive: timestamp.startExclusive,\n endExclusive: timestamp.endExclusive,\n };\n }\n}\n\n/** Insert a single feedback event. */\nexport async function createFeedback(db: DuckDBConnection, args: CreateFeedbackArgs): Promise<void> {\n const f = args.feedback as LegacyFeedbackRecord;\n const feedbackSource = f.feedbackSource ?? f.source ?? '';\n const feedbackUserId = f.feedbackUserId ?? f.userId ?? null;\n await db.execute(\n `INSERT INTO feedback_events (\n feedbackId, timestamp, traceId, spanId, experimentId,\n entityType, entityId, entityName, entityVersionId, parentEntityVersionId, parentEntityType, parentEntityId, parentEntityName, rootEntityVersionId, rootEntityType, rootEntityId, rootEntityName,\n userId, organizationId, resourceId, runId, sessionId, threadId, requestId, environment, executionSource, serviceName,\n feedbackUserId, sourceId, feedbackSource, feedbackType, value, comment, tags, metadata, scope\n )\n VALUES (${[\n v(f.feedbackId),\n v(f.timestamp),\n v(f.traceId),\n v(f.spanId ?? null),\n v(f.experimentId ?? null),\n v(f.entityType ?? null),\n v(f.entityId ?? null),\n v(f.entityName ?? null),\n v(f.entityVersionId ?? null),\n v(f.parentEntityVersionId ?? null),\n v(f.parentEntityType ?? null),\n v(f.parentEntityId ?? null),\n v(f.parentEntityName ?? null),\n v(f.rootEntityVersionId ?? null),\n v(f.rootEntityType ?? null),\n v(f.rootEntityId ?? null),\n v(f.rootEntityName ?? null),\n v(f.userId ?? null),\n v(f.organizationId ?? null),\n v(f.resourceId ?? null),\n v(f.runId ?? null),\n v(f.sessionId ?? null),\n v(f.threadId ?? null),\n v(f.requestId ?? null),\n v(f.environment ?? null),\n v(f.executionSource ?? null),\n v(f.serviceName ?? null),\n v(feedbackUserId),\n v(f.sourceId ?? null),\n v(feedbackSource),\n v(f.feedbackType),\n v(String(f.value)),\n v(f.comment ?? null),\n jsonV(f.tags ?? null),\n jsonV(f.metadata),\n jsonV(f.scope ?? null),\n ].join(', ')})\n ON CONFLICT DO NOTHING`,\n );\n}\n\n/** Insert multiple feedback events in a single statement. */\nexport async function batchCreateFeedback(db: DuckDBConnection, args: BatchCreateFeedbackArgs): Promise<void> {\n if (args.feedbacks.length === 0) return;\n\n const tuples = args.feedbacks.map(f => {\n const legacyFeedback = f as LegacyFeedbackRecord;\n const feedbackSource = legacyFeedback.feedbackSource ?? legacyFeedback.source ?? '';\n const feedbackUserId = legacyFeedback.feedbackUserId ?? legacyFeedback.userId ?? null;\n return `(${[\n v(legacyFeedback.feedbackId),\n v(legacyFeedback.timestamp),\n v(legacyFeedback.traceId),\n v(legacyFeedback.spanId ?? null),\n v(legacyFeedback.experimentId ?? null),\n v(legacyFeedback.entityType ?? null),\n v(legacyFeedback.entityId ?? null),\n v(legacyFeedback.entityName ?? null),\n v(legacyFeedback.entityVersionId ?? null),\n v(legacyFeedback.parentEntityVersionId ?? null),\n v(legacyFeedback.parentEntityType ?? null),\n v(legacyFeedback.parentEntityId ?? null),\n v(legacyFeedback.parentEntityName ?? null),\n v(legacyFeedback.rootEntityVersionId ?? null),\n v(legacyFeedback.rootEntityType ?? null),\n v(legacyFeedback.rootEntityId ?? null),\n v(legacyFeedback.rootEntityName ?? null),\n v(legacyFeedback.userId ?? null),\n v(legacyFeedback.organizationId ?? null),\n v(legacyFeedback.resourceId ?? null),\n v(legacyFeedback.runId ?? null),\n v(legacyFeedback.sessionId ?? null),\n v(legacyFeedback.threadId ?? null),\n v(legacyFeedback.requestId ?? null),\n v(legacyFeedback.environment ?? null),\n v(legacyFeedback.executionSource ?? null),\n v(legacyFeedback.serviceName ?? null),\n v(feedbackUserId),\n v(legacyFeedback.sourceId ?? null),\n v(feedbackSource),\n v(legacyFeedback.feedbackType),\n v(String(legacyFeedback.value)),\n v(legacyFeedback.comment ?? null),\n jsonV(legacyFeedback.tags ?? null),\n jsonV(legacyFeedback.metadata),\n jsonV(legacyFeedback.scope ?? null),\n ].join(', ')})`;\n });\n\n await db.execute(\n `INSERT INTO feedback_events (\n feedbackId, timestamp, traceId, spanId, experimentId,\n entityType, entityId, entityName, entityVersionId, parentEntityVersionId, parentEntityType, parentEntityId, parentEntityName, rootEntityVersionId, rootEntityType, rootEntityId, rootEntityName,\n userId, organizationId, resourceId, runId, sessionId, threadId, requestId, environment, executionSource, serviceName,\n feedbackUserId, sourceId, feedbackSource, feedbackType, value, comment, tags, metadata, scope\n )\n VALUES ${tuples.join(',\\n ')}\n ON CONFLICT DO NOTHING`,\n );\n}\n\n/** Query feedback events with filtering, ordering, and pagination. */\nexport async function listFeedback(db: DuckDBConnection, args: ListFeedbackArgs): Promise<ListFeedbackResponse> {\n const filters = args.filters ?? {};\n const page = Number(args.pagination?.page ?? 0);\n const perPage = Number(args.pagination?.perPage ?? 10);\n const orderBy = { field: args.orderBy?.field ?? 'timestamp', direction: args.orderBy?.direction ?? 'DESC' } as const;\n\n const { clause: filterClause, params: filterParams } = buildWhereClause(filters as Record<string, unknown>, {\n source: 'feedbackSource',\n });\n const orderByClause = buildOrderByClause(orderBy);\n const { clause: paginationClause, params: paginationParams } = buildPaginationClause({ page, perPage });\n\n const countResult = await db.query<{ total: number }>(\n `SELECT COUNT(*) as total FROM feedback_events ${filterClause}`,\n filterParams,\n );\n const total = Number(countResult[0]?.total ?? 0);\n\n const rows = await db.query<Record<string, unknown>>(\n `SELECT * FROM feedback_events ${filterClause} ${orderByClause} ${paginationClause}`,\n [...filterParams, ...paginationParams],\n );\n\n return {\n pagination: { total, page, perPage, hasMore: (page + 1) * perPage < total },\n feedback: rows.map(row => rowToFeedbackRecord(row)) as ListFeedbackResponse['feedback'],\n };\n}\n\nexport async function getFeedbackAggregate(\n db: DuckDBConnection,\n args: GetFeedbackAggregateArgs,\n): Promise<GetFeedbackAggregateResponse> {\n const aggSql = getAggregationSql(args.aggregation);\n const { clause, params } = buildFeedbackWhereClause(args, true);\n const rows = await db.query<Record<string, unknown>>(\n `SELECT ${aggSql} AS value FROM feedback_events ${clause}`,\n params,\n );\n const value = rows[0]?.value === null || rows[0]?.value === undefined ? null : Number(rows[0]?.value);\n\n if (args.comparePeriod && args.filters?.timestamp) {\n const previousTimestamp = getComparisonDateRange(args.comparePeriod, args.filters.timestamp);\n if (previousTimestamp) {\n const previousWhere = buildFeedbackWhereClause(\n {\n ...args,\n filters: { ...(args.filters ?? {}), timestamp: previousTimestamp },\n },\n true,\n );\n const prevRows = await db.query<Record<string, unknown>>(\n `SELECT ${aggSql} AS value FROM feedback_events ${previousWhere.clause}`,\n previousWhere.params,\n );\n const previousValue =\n prevRows[0]?.value === null || prevRows[0]?.value === undefined ? null : Number(prevRows[0]?.value);\n let changePercent: number | null = null;\n if (previousValue !== null && previousValue !== 0 && value !== null) {\n changePercent = ((value - previousValue) / Math.abs(previousValue)) * 100;\n }\n return { value, previousValue, changePercent };\n }\n }\n\n return { value };\n}\n\nexport async function getFeedbackBreakdown(\n db: DuckDBConnection,\n args: GetFeedbackBreakdownArgs,\n): Promise<GetFeedbackBreakdownResponse> {\n const aggSql = getAggregationSql(args.aggregation);\n const { clause, params } = buildFeedbackWhereClause(args, true);\n const resolvedGroupBy = resolveFeedbackGroupBy(args.groupBy);\n const sql = `SELECT ${resolvedGroupBy.map(entry => entry.selectSql).join(', ')}, ${aggSql} AS value FROM feedback_events ${clause} GROUP BY ${resolvedGroupBy\n .map(entry => entry.groupSql)\n .join(', ')} ORDER BY value DESC`;\n const rows = await db.query<Record<string, unknown>>(sql, params);\n\n return {\n groups: rows.map(row => ({\n dimensions: Object.fromEntries(\n resolvedGroupBy.map((entry, index) => {\n const value = row[`group_by_${index}`];\n return [entry.key, value === null || value === undefined ? null : String(value)];\n }),\n ),\n value: Number(row.value ?? 0),\n })),\n };\n}\n\nexport async function getFeedbackTimeSeries(\n db: DuckDBConnection,\n args: GetFeedbackTimeSeriesArgs,\n): Promise<GetFeedbackTimeSeriesResponse> {\n const aggSql = getAggregationSql(args.aggregation);\n const intervalSql = getIntervalSql(args.interval);\n const { clause, params } = buildFeedbackWhereClause(args, true);\n\n if (args.groupBy && args.groupBy.length > 0) {\n const resolvedGroupBy = resolveFeedbackGroupBy(args.groupBy);\n const sql = `\n SELECT time_bucket(INTERVAL '${intervalSql}', timestamp) AS bucket,\n ${resolvedGroupBy.map(entry => entry.selectSql).join(', ')},\n ${aggSql} AS value\n FROM feedback_events ${clause}\n GROUP BY bucket, ${resolvedGroupBy.map(entry => entry.groupSql).join(', ')}\n ORDER BY bucket\n `;\n const rows = await db.query<Record<string, unknown>>(sql, params);\n const seriesMap = new Map<string, { name: string; points: { timestamp: Date; value: number }[] }>();\n\n for (const row of rows) {\n const groupValues = resolvedGroupBy.map((_, index) => row[`group_by_${index}`]);\n const key = JSON.stringify(groupValues);\n if (!seriesMap.has(key)) {\n seriesMap.set(key, { name: toSeriesName(groupValues), points: [] });\n }\n seriesMap.get(key)!.points.push({\n timestamp: row.bucket instanceof Date ? row.bucket : new Date(String(row.bucket)),\n value: Number(row.value ?? 0),\n });\n }\n\n return { series: Array.from(seriesMap.values()) };\n }\n\n const rows = await db.query<Record<string, unknown>>(\n `\n SELECT time_bucket(INTERVAL '${intervalSql}', timestamp) AS bucket,\n ${aggSql} AS value\n FROM feedback_events ${clause}\n GROUP BY bucket\n ORDER BY bucket\n `,\n params,\n );\n\n return {\n series: [\n {\n name: args.feedbackSource ? `${args.feedbackType}|${args.feedbackSource}` : args.feedbackType,\n points: rows.map(row => ({\n timestamp: row.bucket instanceof Date ? row.bucket : new Date(String(row.bucket)),\n value: Number(row.value ?? 0),\n })),\n },\n ],\n };\n}\n\nexport async function getFeedbackPercentiles(\n db: DuckDBConnection,\n args: GetFeedbackPercentilesArgs,\n): Promise<GetFeedbackPercentilesResponse> {\n const intervalSql = getIntervalSql(args.interval);\n const { clause, params } = buildFeedbackWhereClause(args, true);\n const percentiles = getValidatedPercentiles(args.percentiles);\n\n const series = [];\n for (const percentile of percentiles) {\n const rows = await db.query<Record<string, unknown>>(\n `\n SELECT time_bucket(INTERVAL '${intervalSql}', timestamp) AS bucket,\n percentile_cont(${percentile}) WITHIN GROUP (ORDER BY TRY_CAST(value AS DOUBLE)) AS pvalue\n FROM feedback_events ${clause}\n GROUP BY bucket\n ORDER BY bucket\n `,\n params,\n );\n\n series.push({\n percentile,\n points: rows.map(row => ({\n timestamp: row.bucket instanceof Date ? row.bucket : new Date(String(row.bucket)),\n value: Number(row.pvalue ?? 0),\n })),\n });\n }\n\n return { series };\n}\n","import type { BatchCreateLogsArgs, ListLogsArgs, ListLogsResponse } from '@mastra/core/storage';\nimport type { DuckDBConnection } from '../../db/index';\nimport { buildWhereClause, buildOrderByClause, buildPaginationClause } from './filters';\nimport { v, jsonV, toDate, parseJson, parseJsonArray } from './helpers';\n\nconst COLUMNS = [\n 'logId',\n 'timestamp',\n 'level',\n 'message',\n 'data',\n 'traceId',\n 'spanId',\n 'entityType',\n 'entityId',\n 'entityName',\n 'entityVersionId',\n 'parentEntityVersionId',\n 'parentEntityType',\n 'parentEntityId',\n 'parentEntityName',\n 'rootEntityVersionId',\n 'rootEntityType',\n 'rootEntityId',\n 'rootEntityName',\n 'userId',\n 'organizationId',\n 'resourceId',\n 'runId',\n 'sessionId',\n 'threadId',\n 'requestId',\n 'environment',\n 'executionSource',\n 'serviceName',\n 'experimentId',\n 'tags',\n 'metadata',\n 'scope',\n] as const;\n\nconst COLUMNS_SQL = COLUMNS.join(', ');\n\nfunction rowToLogRecord(row: Record<string, unknown>): Record<string, unknown> {\n return {\n logId: row.logId as string,\n timestamp: toDate(row.timestamp),\n level: row.level as string,\n message: row.message as string,\n data: parseJson(row.data),\n traceId: (row.traceId as string) ?? null,\n spanId: (row.spanId as string) ?? null,\n entityType: (row.entityType as string) ?? null,\n entityId: (row.entityId as string) ?? null,\n entityName: (row.entityName as string) ?? null,\n entityVersionId: (row.entityVersionId as string) ?? null,\n parentEntityVersionId: (row.parentEntityVersionId as string) ?? null,\n parentEntityType: (row.parentEntityType as string) ?? null,\n parentEntityId: (row.parentEntityId as string) ?? null,\n parentEntityName: (row.parentEntityName as string) ?? null,\n rootEntityVersionId: (row.rootEntityVersionId as string) ?? null,\n rootEntityType: (row.rootEntityType as string) ?? null,\n rootEntityId: (row.rootEntityId as string) ?? null,\n rootEntityName: (row.rootEntityName as string) ?? null,\n userId: (row.userId as string) ?? null,\n organizationId: (row.organizationId as string) ?? null,\n resourceId: (row.resourceId as string) ?? null,\n runId: (row.runId as string) ?? null,\n sessionId: (row.sessionId as string) ?? null,\n threadId: (row.threadId as string) ?? null,\n requestId: (row.requestId as string) ?? null,\n environment: (row.environment as string) ?? null,\n executionSource: (row.executionSource as string) ?? null,\n serviceName: (row.serviceName as string) ?? null,\n experimentId: (row.experimentId as string) ?? null,\n tags: parseJsonArray(row.tags),\n metadata: parseJson(row.metadata),\n scope: parseJson(row.scope),\n };\n}\n\n/** Insert multiple log events in a single statement. */\nexport async function batchCreateLogs(db: DuckDBConnection, args: BatchCreateLogsArgs): Promise<void> {\n if (args.logs.length === 0) return;\n\n const tuples = args.logs.map(log => {\n return `(${[\n v(log.logId),\n v(log.timestamp),\n v(log.level),\n v(log.message),\n jsonV(log.data),\n v(log.traceId ?? null),\n v(log.spanId ?? null),\n v(log.entityType ?? null),\n v(log.entityId ?? null),\n v(log.entityName ?? null),\n v(log.entityVersionId ?? null),\n v(log.parentEntityVersionId ?? null),\n v(log.parentEntityType ?? null),\n v(log.parentEntityId ?? null),\n v(log.parentEntityName ?? null),\n v(log.rootEntityVersionId ?? null),\n v(log.rootEntityType ?? null),\n v(log.rootEntityId ?? null),\n v(log.rootEntityName ?? null),\n v(log.userId ?? null),\n v(log.organizationId ?? null),\n v(log.resourceId ?? null),\n v(log.runId ?? null),\n v(log.sessionId ?? null),\n v(log.threadId ?? null),\n v(log.requestId ?? null),\n v(log.environment ?? null),\n v(log.executionSource ?? null),\n v(log.serviceName ?? null),\n v(log.experimentId ?? null),\n jsonV(log.tags),\n jsonV(log.metadata),\n jsonV(log.scope),\n ].join(', ')})`;\n });\n\n await db.execute(`INSERT INTO log_events (${COLUMNS_SQL}) VALUES ${tuples.join(',\\n')} ON CONFLICT DO NOTHING`);\n}\n\n/** Query log events with filtering, ordering, and pagination. */\nexport async function listLogs(db: DuckDBConnection, args: ListLogsArgs): Promise<ListLogsResponse> {\n const filters = args.filters ?? {};\n const page = Number(args.pagination?.page ?? 0);\n const perPage = Number(args.pagination?.perPage ?? 10);\n const orderBy = { field: args.orderBy?.field ?? 'timestamp', direction: args.orderBy?.direction ?? 'DESC' } as const;\n\n const { clause: filterClause, params: filterParams } = buildWhereClause(filters as Record<string, unknown>);\n const orderByClause = buildOrderByClause(orderBy);\n const { clause: paginationClause, params: paginationParams } = buildPaginationClause({ page, perPage });\n\n const countResult = await db.query<{ total: number }>(\n `SELECT COUNT(*) as total FROM log_events ${filterClause}`,\n filterParams,\n );\n const total = Number(countResult[0]?.total ?? 0);\n\n const rows = await db.query(`SELECT * FROM log_events ${filterClause} ${orderByClause} ${paginationClause}`, [\n ...filterParams,\n ...paginationParams,\n ]);\n\n const logs = rows.map(row => rowToLogRecord(row as Record<string, unknown>)) as ListLogsResponse['logs'];\n\n return {\n pagination: { total, page, perPage, hasMore: (page + 1) * perPage < total },\n logs,\n };\n}\n","import { METRIC_DISTINCT_COLUMNS } from '@mastra/core/storage';\nimport type {\n BatchCreateMetricsArgs,\n ListMetricsArgs,\n ListMetricsResponse,\n GetMetricAggregateArgs,\n GetMetricAggregateResponse,\n GetMetricBreakdownArgs,\n GetMetricBreakdownResponse,\n GetMetricTimeSeriesArgs,\n GetMetricTimeSeriesResponse,\n GetMetricPercentilesArgs,\n GetMetricPercentilesResponse,\n GetMetricNamesArgs,\n GetMetricNamesResponse,\n GetMetricLabelKeysArgs,\n GetMetricLabelKeysResponse,\n GetMetricLabelValuesArgs,\n GetMetricLabelValuesResponse,\n AggregationType,\n AggregationInterval,\n MetricDistinctColumn,\n} from '@mastra/core/storage';\nimport { parseFieldKey } from '@mastra/core/utils';\nimport type { DuckDBConnection } from '../../db/index';\nimport { buildJsonPath, buildOrderByClause, buildPaginationClause, buildWhereClause } from './filters';\nimport { parseJson, parseJsonArray, toDate, v, jsonV } from './helpers';\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction resolveDistinctColumnSql(distinctColumn: MetricDistinctColumn | undefined): string {\n if (!distinctColumn) {\n throw new Error(`count_distinct aggregation requires a 'distinctColumn' argument`);\n }\n // Defense-in-depth: the schema enum already restricts this, but the value\n // flows into raw SQL so we re-check against the system-level allowlist.\n if (!(METRIC_DISTINCT_COLUMNS as readonly string[]).includes(distinctColumn)) {\n throw new Error(`Invalid distinctColumn: ${distinctColumn}`);\n }\n return parseFieldKey(distinctColumn);\n}\n\nfunction getAggregationSql(\n aggregation: AggregationType,\n measure = 'value',\n distinctColumn?: MetricDistinctColumn,\n): string {\n switch (aggregation) {\n case 'sum':\n return `SUM(${measure})`;\n case 'avg':\n return `AVG(${measure})`;\n case 'min':\n return `MIN(${measure})`;\n case 'max':\n return `MAX(${measure})`;\n case 'count':\n return `CAST(COUNT(${measure}) AS DOUBLE)`;\n case 'count_distinct': {\n // DuckDB has `approx_count_distinct` (HyperLogLog) for dashboard scale.\n return `CAST(approx_count_distinct(${resolveDistinctColumnSql(distinctColumn)}) AS DOUBLE)`;\n }\n case 'last':\n return `arg_max(${measure}, timestamp)`;\n default:\n return `SUM(${measure})`;\n }\n}\n\nfunction getIntervalSql(interval: AggregationInterval): string {\n switch (interval) {\n case '1m':\n return '1 minute';\n case '5m':\n return '5 minutes';\n case '15m':\n return '15 minutes';\n case '1h':\n return '1 hour';\n case '1d':\n return '1 day';\n default:\n return '1 hour';\n }\n}\n\nfunction buildMetricNameFilter(name: string | string[]): { clause: string; params: unknown[] } {\n if (Array.isArray(name)) {\n const placeholders = name.map(() => '?').join(', ');\n return { clause: `name IN (${placeholders})`, params: name };\n }\n return { clause: `name = ?`, params: [name] };\n}\n\nconst METRIC_COLUMNS = [\n 'metricId',\n 'timestamp',\n 'name',\n 'value',\n 'traceId',\n 'spanId',\n 'entityType',\n 'entityId',\n 'entityName',\n 'entityVersionId',\n 'parentEntityVersionId',\n 'parentEntityType',\n 'parentEntityId',\n 'parentEntityName',\n 'rootEntityVersionId',\n 'rootEntityType',\n 'rootEntityId',\n 'rootEntityName',\n 'userId',\n 'organizationId',\n 'resourceId',\n 'runId',\n 'sessionId',\n 'threadId',\n 'requestId',\n 'environment',\n 'executionSource',\n 'serviceName',\n 'experimentId',\n 'provider',\n 'model',\n 'estimatedCost',\n 'costUnit',\n 'tags',\n 'labels',\n 'costMetadata',\n 'metadata',\n 'scope',\n] as const;\n\ntype MetricColumn = (typeof METRIC_COLUMNS)[number];\n\nconst METRIC_COLUMNS_SQL = METRIC_COLUMNS.join(', ');\nconst METRIC_COLUMN_SET = new Set<string>(METRIC_COLUMNS);\nconst METRIC_LABEL_ONLY_GROUP_BY_EXCLUDED = new Set<MetricColumn>(['metadata', 'scope', 'costMetadata', 'tags']);\n\ntype ResolvedGroupBy =\n | { kind: 'column'; key: string; selectSql: string; groupSql: string; resultKey: string }\n | { kind: 'label'; key: string; selectSql: string; groupSql: string; resultKey: string };\n\ntype CostSummary = {\n estimatedCost: number | null;\n costUnit: string | null;\n};\n\nfunction buildGroupByAlias(index: number): string {\n return `group_by_${index}`;\n}\n\nfunction toSeriesDisplayValue(value: unknown): string {\n return value === null || value === undefined ? '' : String(value);\n}\n\nfunction getCostSummarySelect(prefix = ''): string {\n const ref = (column: string) => `${prefix}${column}`;\n return [\n `SUM(${ref('estimatedCost')}) FILTER (WHERE ${ref('estimatedCost')} IS NOT NULL) AS estimatedCost`,\n `,`,\n `CASE`,\n ` WHEN COUNT(DISTINCT ${ref('costUnit')}) FILTER (WHERE ${ref('costUnit')} IS NOT NULL) = 1`,\n ` THEN MIN(${ref('costUnit')}) FILTER (WHERE ${ref('costUnit')} IS NOT NULL)`,\n ` ELSE NULL`,\n `END AS costUnit`,\n ].join(' ');\n}\n\nfunction normalizeCostSummaryRow(row: Record<string, unknown>): CostSummary {\n return {\n estimatedCost: row.estimatedCost === null || row.estimatedCost === undefined ? null : Number(row.estimatedCost),\n costUnit: row.costUnit === null || row.costUnit === undefined ? null : String(row.costUnit),\n };\n}\n\nfunction buildCombinedWhereClause(\n nameClause: string,\n nameParams: unknown[],\n filterClause: string,\n filterParams: unknown[],\n): { clause: string; params: unknown[] } {\n const conditions = [nameClause];\n const params: unknown[] = [...nameParams];\n\n if (filterClause) {\n conditions.push(filterClause.replace('WHERE ', ''));\n params.push(...filterParams);\n }\n\n return { clause: `WHERE ${conditions.join(' AND ')}`, params };\n}\n\nfunction resolveGroupBy(groupBy: string[]): ResolvedGroupBy[] {\n return groupBy.map((key, index) => {\n if (METRIC_COLUMN_SET.has(key)) {\n const parsed = parseFieldKey(key);\n if (METRIC_LABEL_ONLY_GROUP_BY_EXCLUDED.has(parsed as MetricColumn)) {\n throw new Error(`Invalid groupBy column(s): ${key}`);\n }\n\n return {\n kind: 'column',\n key,\n selectSql: `${parsed} AS \"${key}\"`,\n groupSql: parsed,\n resultKey: key,\n };\n }\n\n const labelPath = buildJsonPath(key).replace(/'/g, \"''\");\n const labelExpr = `json_extract_string(labels, '${labelPath}')`;\n const alias = buildGroupByAlias(index);\n return {\n kind: 'label',\n key,\n selectSql: `${labelExpr} AS ${alias}`,\n groupSql: alias,\n resultKey: alias,\n };\n });\n}\n\nfunction rowToMetricRecord(row: Record<string, unknown>): Record<string, unknown> {\n return {\n metricId: row.metricId as string,\n timestamp: toDate(row.timestamp),\n name: row.name as string,\n value: Number(row.value),\n traceId: (row.traceId as string) ?? null,\n spanId: (row.spanId as string) ?? null,\n entityType: (row.entityType as string) ?? null,\n entityId: (row.entityId as string) ?? null,\n entityName: (row.entityName as string) ?? null,\n entityVersionId: (row.entityVersionId as string) ?? null,\n parentEntityVersionId: (row.parentEntityVersionId as string) ?? null,\n parentEntityType: (row.parentEntityType as string) ?? null,\n parentEntityId: (row.parentEntityId as string) ?? null,\n parentEntityName: (row.parentEntityName as string) ?? null,\n rootEntityVersionId: (row.rootEntityVersionId as string) ?? null,\n rootEntityType: (row.rootEntityType as string) ?? null,\n rootEntityId: (row.rootEntityId as string) ?? null,\n rootEntityName: (row.rootEntityName as string) ?? null,\n userId: (row.userId as string) ?? null,\n organizationId: (row.organizationId as string) ?? null,\n resourceId: (row.resourceId as string) ?? null,\n runId: (row.runId as string) ?? null,\n sessionId: (row.sessionId as string) ?? null,\n threadId: (row.threadId as string) ?? null,\n requestId: (row.requestId as string) ?? null,\n environment: (row.environment as string) ?? null,\n executionSource: (row.executionSource as string) ?? null,\n serviceName: (row.serviceName as string) ?? null,\n experimentId: (row.experimentId as string) ?? null,\n provider: (row.provider as string) ?? null,\n model: (row.model as string) ?? null,\n estimatedCost: row.estimatedCost === null || row.estimatedCost === undefined ? null : Number(row.estimatedCost),\n costUnit: (row.costUnit as string) ?? null,\n costMetadata: parseJson(row.costMetadata) as Record<string, unknown> | null,\n tags: parseJsonArray(row.tags) as string[] | null,\n labels: (parseJson(row.labels) as Record<string, string> | null) ?? {},\n metadata: parseJson(row.metadata) as Record<string, unknown> | null,\n scope: parseJson(row.scope) as Record<string, unknown> | null,\n };\n}\n\n// ============================================================================\n// Write\n// ============================================================================\n\n/** Insert multiple metric events in a single statement. */\nexport async function batchCreateMetrics(db: DuckDBConnection, args: BatchCreateMetricsArgs): Promise<void> {\n if (args.metrics.length === 0) return;\n\n const tuples = args.metrics.map(m => {\n return `(${[\n v(m.metricId),\n v(m.timestamp),\n v(m.name),\n v(m.value),\n v(m.traceId ?? null),\n v(m.spanId ?? null),\n v(m.entityType ?? null),\n v(m.entityId ?? null),\n v(m.entityName ?? null),\n v(m.entityVersionId ?? null),\n v(m.parentEntityVersionId ?? null),\n v(m.parentEntityType ?? null),\n v(m.parentEntityId ?? null),\n v(m.parentEntityName ?? null),\n v(m.rootEntityVersionId ?? null),\n v(m.rootEntityType ?? null),\n v(m.rootEntityId ?? null),\n v(m.rootEntityName ?? null),\n v(m.userId ?? null),\n v(m.organizationId ?? null),\n v(m.resourceId ?? null),\n v(m.runId ?? null),\n v(m.sessionId ?? null),\n v(m.threadId ?? null),\n v(m.requestId ?? null),\n v(m.environment ?? null),\n v(m.executionSource ?? null),\n v(m.serviceName ?? null),\n v(m.experimentId ?? null),\n v(m.provider ?? null),\n v(m.model ?? null),\n v(m.estimatedCost ?? null),\n v(m.costUnit ?? null),\n jsonV(m.tags ?? null),\n v(JSON.stringify(m.labels ?? {})),\n jsonV(m.costMetadata ?? null),\n jsonV(m.metadata ?? null),\n jsonV(m.scope ?? null),\n ].join(', ')})`;\n });\n\n await db.execute(\n `INSERT INTO metric_events (${METRIC_COLUMNS_SQL}) VALUES ${tuples.join(',\\n')} ON CONFLICT DO NOTHING`,\n );\n}\n\n/** Query metric events with filtering, ordering, and pagination. */\nexport async function listMetrics(db: DuckDBConnection, args: ListMetricsArgs): Promise<ListMetricsResponse> {\n const filters = args.filters ?? {};\n const page = Number(args.pagination?.page ?? 0);\n const perPage = Number(args.pagination?.perPage ?? 10);\n const orderBy = { field: args.orderBy?.field ?? 'timestamp', direction: args.orderBy?.direction ?? 'DESC' } as const;\n\n const { clause: filterClause, params: filterParams } = buildWhereClause(filters as Record<string, unknown>);\n const orderByClause = buildOrderByClause(orderBy);\n const { clause: paginationClause, params: paginationParams } = buildPaginationClause({ page, perPage });\n\n const countResult = await db.query<{ total: number }>(\n `SELECT COUNT(*) AS total FROM metric_events ${filterClause}`,\n filterParams,\n );\n const total = Number(countResult[0]?.total ?? 0);\n\n const rows = await db.query<Record<string, unknown>>(\n `SELECT * FROM metric_events ${filterClause} ${orderByClause} ${paginationClause}`,\n [...filterParams, ...paginationParams],\n );\n\n return {\n pagination: { total, page, perPage, hasMore: (page + 1) * perPage < total },\n metrics: rows.map(row => rowToMetricRecord(row)) as ListMetricsResponse['metrics'],\n };\n}\n\n// ============================================================================\n// OLAP Queries\n// ============================================================================\n\n/** Compute an aggregate value (sum, avg, min, max, etc.) for a metric, with optional period comparison. */\nexport async function getMetricAggregate(\n db: DuckDBConnection,\n args: GetMetricAggregateArgs,\n): Promise<GetMetricAggregateResponse> {\n const aggSql = getAggregationSql(args.aggregation, 'value', args.distinctColumn);\n const { clause: nameClause, params: nameParams } = buildMetricNameFilter(args.name);\n const { clause: filterClause, params: filterParams } = buildWhereClause(\n args.filters as Record<string, unknown> | undefined,\n );\n const { clause: whereClause, params: allParams } = buildCombinedWhereClause(\n nameClause,\n nameParams,\n filterClause,\n filterParams,\n );\n\n const sql = `SELECT ${aggSql} AS value, ${getCostSummarySelect()} FROM metric_events ${whereClause}`;\n const result = await db.query<Record<string, unknown>>(sql, allParams);\n const row = result[0] ?? {};\n const value = row.value === null || row.value === undefined ? null : Number(row.value);\n const costSummary = normalizeCostSummaryRow(row);\n\n if (args.comparePeriod && args.filters?.timestamp) {\n const ts = args.filters.timestamp;\n if (ts.start && ts.end) {\n const duration = ts.end.getTime() - ts.start.getTime();\n let prevStart: Date;\n let prevEnd: Date;\n\n switch (args.comparePeriod) {\n case 'previous_period':\n prevStart = new Date(ts.start.getTime() - duration);\n prevEnd = new Date(ts.end.getTime() - duration);\n break;\n case 'previous_day':\n prevStart = new Date(ts.start.getTime() - 86400000);\n prevEnd = new Date(ts.end.getTime() - 86400000);\n break;\n case 'previous_week':\n prevStart = new Date(ts.start.getTime() - 604800000);\n prevEnd = new Date(ts.end.getTime() - 604800000);\n break;\n default:\n prevStart = new Date(ts.start.getTime() - duration);\n prevEnd = new Date(ts.end.getTime() - duration);\n }\n\n const prevFilters = {\n ...(args.filters ?? {}),\n timestamp: {\n start: prevStart,\n end: prevEnd,\n startExclusive: ts.startExclusive,\n endExclusive: ts.endExclusive,\n },\n };\n const { clause: prevFilterClause, params: prevFilterParams } = buildWhereClause(\n prevFilters as Record<string, unknown>,\n );\n const { clause: prevWhereClause, params: prevParams } = buildCombinedWhereClause(\n nameClause,\n nameParams,\n prevFilterClause,\n prevFilterParams,\n );\n\n const prevSql = `SELECT ${aggSql} AS value, ${getCostSummarySelect()} FROM metric_events ${prevWhereClause}`;\n const prevResult = await db.query<Record<string, unknown>>(prevSql, prevParams);\n const prevRow = prevResult[0] ?? {};\n const previousValue = prevRow.value === null || prevRow.value === undefined ? null : Number(prevRow.value);\n const previousCostSummary = normalizeCostSummaryRow(prevRow);\n\n let changePercent: number | null = null;\n if (previousValue !== null && previousValue !== 0 && value !== null) {\n changePercent = ((value - previousValue) / Math.abs(previousValue)) * 100;\n }\n\n let costChangePercent: number | null = null;\n if (\n previousCostSummary.estimatedCost !== null &&\n previousCostSummary.estimatedCost !== 0 &&\n costSummary.estimatedCost !== null\n ) {\n costChangePercent =\n ((costSummary.estimatedCost - previousCostSummary.estimatedCost) /\n Math.abs(previousCostSummary.estimatedCost)) *\n 100;\n }\n\n return {\n value,\n estimatedCost: costSummary.estimatedCost,\n costUnit: costSummary.costUnit,\n previousValue,\n previousEstimatedCost: previousCostSummary.estimatedCost,\n changePercent,\n costChangePercent,\n };\n }\n }\n\n return { value, estimatedCost: costSummary.estimatedCost, costUnit: costSummary.costUnit };\n}\n\n/** Aggregate a metric grouped by one or more dimensions. */\nexport async function getMetricBreakdown(\n db: DuckDBConnection,\n args: GetMetricBreakdownArgs,\n): Promise<GetMetricBreakdownResponse> {\n const aggSql = getAggregationSql(args.aggregation, 'value', args.distinctColumn);\n const { clause: nameClause, params: nameParams } = buildMetricNameFilter(args.name);\n const { clause: filterClause, params: filterParams } = buildWhereClause(\n args.filters as Record<string, unknown> | undefined,\n );\n const { clause: whereClause, params: allParams } = buildCombinedWhereClause(\n nameClause,\n nameParams,\n filterClause,\n filterParams,\n );\n\n const resolvedGroupBy = resolveGroupBy(args.groupBy);\n const selectGroupBy = resolvedGroupBy.map(entry => entry.selectSql).join(', ');\n const groupByCols = resolvedGroupBy.map(entry => entry.groupSql).join(', ');\n\n const orderDirection = args.orderDirection === 'ASC' ? 'ASC' : 'DESC';\n const limitClause = typeof args.limit === 'number' ? `LIMIT ?` : '';\n const limitParams = typeof args.limit === 'number' ? [args.limit] : [];\n\n const sql = `SELECT ${selectGroupBy}, ${aggSql} AS value, ${getCostSummarySelect()} FROM metric_events ${whereClause} GROUP BY ${groupByCols} ORDER BY value ${orderDirection} ${limitClause}`;\n const rows = await db.query<Record<string, unknown>>(sql, [...allParams, ...limitParams]);\n\n const groups = rows.map(row => {\n const dimensions: Record<string, string | null> = {};\n for (const entry of resolvedGroupBy) {\n const value = row[entry.resultKey];\n dimensions[entry.key] = value === null || value === undefined ? null : String(value);\n }\n\n const costSummary = normalizeCostSummaryRow(row);\n return {\n dimensions,\n value: Number(row.value ?? 0),\n estimatedCost: costSummary.estimatedCost,\n costUnit: costSummary.costUnit,\n };\n });\n\n return { groups };\n}\n\n/** Aggregate a metric into time-bucketed series, with optional group-by dimensions. */\nexport async function getMetricTimeSeries(\n db: DuckDBConnection,\n args: GetMetricTimeSeriesArgs,\n): Promise<GetMetricTimeSeriesResponse> {\n const aggSql = getAggregationSql(args.aggregation, 'value', args.distinctColumn);\n const intervalSql = getIntervalSql(args.interval);\n const { clause: nameClause, params: nameParams } = buildMetricNameFilter(args.name);\n const { clause: filterClause, params: filterParams } = buildWhereClause(\n args.filters as Record<string, unknown> | undefined,\n );\n const { clause: whereClause, params: allParams } = buildCombinedWhereClause(\n nameClause,\n nameParams,\n filterClause,\n filterParams,\n );\n\n if (args.groupBy && args.groupBy.length > 0) {\n const resolvedGroupBy = resolveGroupBy(args.groupBy);\n const selectGroupBy = resolvedGroupBy.map(entry => entry.selectSql).join(', ');\n const groupByCols = resolvedGroupBy.map(entry => entry.groupSql).join(', ');\n const sql = `\n SELECT time_bucket(INTERVAL '${intervalSql}', timestamp) AS bucket,\n ${selectGroupBy},\n ${aggSql} AS value,\n ${getCostSummarySelect()}\n FROM metric_events ${whereClause}\n GROUP BY bucket, ${groupByCols}\n ORDER BY bucket\n `;\n const rows = await db.query<Record<string, unknown>>(sql, allParams);\n\n const seriesMap = new Map<\n string,\n {\n name: string;\n costUnits: Set<string>;\n points: { timestamp: Date; value: number; estimatedCost: number | null }[];\n }\n >();\n\n for (const row of rows) {\n const dimensionValues = resolvedGroupBy.map(entry => row[entry.resultKey]);\n const seriesKey = JSON.stringify(dimensionValues);\n const name = dimensionValues.map(toSeriesDisplayValue).join('|');\n const costSummary = normalizeCostSummaryRow(row);\n\n if (!seriesMap.has(seriesKey)) {\n seriesMap.set(seriesKey, {\n name,\n costUnits: new Set(),\n points: [],\n });\n }\n\n if (costSummary.costUnit) {\n seriesMap.get(seriesKey)!.costUnits.add(costSummary.costUnit);\n }\n\n seriesMap.get(seriesKey)!.points.push({\n timestamp: row.bucket instanceof Date ? row.bucket : new Date(String(row.bucket)),\n value: Number(row.value ?? 0),\n estimatedCost: costSummary.estimatedCost,\n });\n }\n\n return {\n series: Array.from(seriesMap.values()).map(series => ({\n name: series.name,\n costUnit: series.costUnits.size === 1 ? Array.from(series.costUnits)[0]! : null,\n points: series.points,\n })),\n };\n }\n\n const sql = `\n SELECT time_bucket(INTERVAL '${intervalSql}', timestamp) AS bucket,\n ${aggSql} AS value,\n ${getCostSummarySelect()}\n FROM metric_events ${whereClause}\n GROUP BY bucket\n ORDER BY bucket\n `;\n const rows = await db.query<Record<string, unknown>>(sql, allParams);\n const metricName = Array.isArray(args.name) ? args.name.join(',') : args.name;\n const overallCostUnits = new Set(\n rows.map(row => row.costUnit).filter((value): value is string => typeof value === 'string'),\n );\n\n return {\n series: [\n {\n name: metricName,\n costUnit: overallCostUnits.size === 1 ? Array.from(overallCostUnits)[0]! : null,\n points: rows.map(row => {\n const costSummary = normalizeCostSummaryRow(row);\n return {\n timestamp: row.bucket instanceof Date ? row.bucket : new Date(String(row.bucket)),\n value: Number(row.value ?? 0),\n estimatedCost: costSummary.estimatedCost,\n };\n }),\n },\n ],\n };\n}\n\n/** Compute percentile time series for a metric using `percentile_cont`. */\nexport async function getMetricPercentiles(\n db: DuckDBConnection,\n args: GetMetricPercentilesArgs,\n): Promise<GetMetricPercentilesResponse> {\n const intervalSql = getIntervalSql(args.interval);\n const { clause: filterClause, params: filterParams } = buildWhereClause(\n args.filters as Record<string, unknown> | undefined,\n );\n\n const allConditions = [`name = ?`];\n const allParams: unknown[] = [args.name];\n if (filterClause) {\n allConditions.push(filterClause.replace('WHERE ', ''));\n allParams.push(...filterParams);\n }\n\n const whereClause = `WHERE ${allConditions.join(' AND ')}`;\n\n const series = [];\n for (const p of args.percentiles) {\n const sql = `\n SELECT time_bucket(INTERVAL '${intervalSql}', timestamp) AS bucket,\n percentile_cont(${p}) WITHIN GROUP (ORDER BY value) AS pvalue\n FROM metric_events ${whereClause}\n GROUP BY bucket\n ORDER BY bucket\n `;\n const rows = await db.query<Record<string, unknown>>(sql, allParams);\n\n series.push({\n percentile: p,\n points: rows.map(row => ({\n timestamp: row.bucket instanceof Date ? row.bucket : new Date(String(row.bucket)),\n value: Number(row.pvalue ?? 0),\n })),\n });\n }\n\n return { series };\n}\n\n// ============================================================================\n// Discovery / Metadata\n// ============================================================================\n\n/** Return distinct metric names, optionally filtered by prefix. */\nexport async function getMetricNames(db: DuckDBConnection, args: GetMetricNamesArgs): Promise<GetMetricNamesResponse> {\n const conditions: string[] = [];\n const params: unknown[] = [];\n\n if (args.prefix) {\n conditions.push(`name LIKE ?`);\n params.push(`${args.prefix}%`);\n }\n\n const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';\n const limitClause = args.limit ? `LIMIT ?` : '';\n if (args.limit) params.push(args.limit);\n\n const rows = await db.query<{ name: string }>(\n `SELECT DISTINCT name FROM metric_events ${whereClause} ORDER BY name ${limitClause}`,\n params,\n );\n\n return { names: rows.map(r => r.name) };\n}\n\n/** Return distinct label keys for a given metric name. */\nexport async function getMetricLabelKeys(\n db: DuckDBConnection,\n args: GetMetricLabelKeysArgs,\n): Promise<GetMetricLabelKeysResponse> {\n const rows = await db.query<{ key: string }>(\n `SELECT DISTINCT unnest(json_keys(labels)) AS key FROM metric_events WHERE name = ? AND labels IS NOT NULL`,\n [args.metricName],\n );\n return { keys: rows.map(r => r.key) };\n}\n\n/** Return distinct values for a specific label key on a metric. */\nexport async function getMetricLabelValues(\n db: DuckDBConnection,\n args: GetMetricLabelValuesArgs,\n): Promise<GetMetricLabelValuesResponse> {\n const labelPath = buildJsonPath(args.labelKey);\n const conditions = [`name = ?`, `json_extract_string(labels, ?) IS NOT NULL`];\n const params: unknown[] = [args.metricName, labelPath];\n\n if (args.prefix) {\n conditions.push(`json_extract_string(labels, ?) LIKE ?`);\n params.push(labelPath, `${args.prefix}%`);\n }\n\n const limitClause = args.limit ? `LIMIT ?` : '';\n if (args.limit) params.push(args.limit);\n\n const rows = await db.query<{ val: string }>(\n `SELECT DISTINCT json_extract_string(labels, ?) AS val FROM metric_events WHERE ${conditions.join(' AND ')} ORDER BY val ${limitClause}`,\n [labelPath, ...params],\n );\n\n return { values: rows.map(r => r.val) };\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { IMastraLogger } from '@mastra/core/logger';\nimport { createStorageErrorId } from '@mastra/core/storage';\n\nimport type { DuckDBConnection } from '../../db/index';\n\nimport { METRIC_EVENTS_DDL, LOG_EVENTS_DDL, SCORE_EVENTS_DDL, FEEDBACK_EVENTS_DDL } from './ddl';\n\ninterface SignalMigration {\n table: string;\n createDDL: string;\n idColumn: string;\n}\n\nexport interface SignalMigrationStatusTable {\n table: string;\n idColumn: string;\n}\n\nexport interface SignalMigrationStatus {\n needsMigration: boolean;\n tables: SignalMigrationStatusTable[];\n}\n\nconst SIGNAL_MIGRATIONS: SignalMigration[] = [\n { table: 'metric_events', createDDL: METRIC_EVENTS_DDL, idColumn: 'metricId' },\n { table: 'log_events', createDDL: LOG_EVENTS_DDL, idColumn: 'logId' },\n { table: 'score_events', createDDL: SCORE_EVENTS_DDL, idColumn: 'scoreId' },\n { table: 'feedback_events', createDDL: FEEDBACK_EVENTS_DDL, idColumn: 'feedbackId' },\n];\n\nasync function tableExists(db: DuckDBConnection, table: string): Promise<boolean> {\n const rows = await db.query<{ table_name: string }>(\n `SELECT table_name FROM information_schema.tables WHERE table_name = ?`,\n [table],\n );\n return rows.length > 0;\n}\n\nasync function hasPrimaryKey(db: DuckDBConnection, table: string): Promise<boolean> {\n const rows = await db.query<{ constraint_type: string }>(\n `SELECT constraint_type FROM information_schema.table_constraints\n WHERE table_name = ? AND constraint_type = 'PRIMARY KEY'`,\n [table],\n );\n return rows.length > 0;\n}\n\nasync function getColumns(db: DuckDBConnection, table: string): Promise<string[]> {\n const rows = await db.query<{ column_name: string }>(\n `SELECT column_name FROM information_schema.columns WHERE table_name = ?`,\n [table],\n );\n return rows.map(r => r.column_name);\n}\n\nfunction buildTemporaryTableDDL(createDDL: string, table: string, tempTable: string): string {\n return createDDL.replace(`CREATE TABLE IF NOT EXISTS ${table}`, `CREATE TABLE ${tempTable}`);\n}\n\nasync function dropTableIfExists(db: DuckDBConnection, table: string): Promise<void> {\n if (await tableExists(db, table)) {\n await db.execute(`DROP TABLE ${table}`);\n }\n}\n\nfunction createMigrationError(args: { table: string; idColumn: string }, error: unknown): MastraError {\n return new MastraError(\n {\n id: createStorageErrorId('DUCKDB', 'MIGRATE_SIGNAL_TABLES', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: args,\n },\n error,\n );\n}\n\nexport async function checkSignalTablesMigrationStatus(db: DuckDBConnection): Promise<SignalMigrationStatus> {\n const tables: SignalMigrationStatusTable[] = [];\n\n for (const { table, idColumn } of SIGNAL_MIGRATIONS) {\n if (!(await tableExists(db, table))) {\n continue;\n }\n\n if (await hasPrimaryKey(db, table)) {\n continue;\n }\n\n tables.push({ table, idColumn });\n }\n\n return {\n needsMigration: tables.length > 0,\n tables,\n };\n}\n\n/**\n * Migrate signal tables to a schema with PRIMARY KEY + NOT NULL on the signal ID\n * without dropping data. Copy-and-swap: create temp → INSERT…SELECT\n * (generating IDs) → rename old to backup → rename temp to live → drop backup.\n * The live table is only touched during the final swap step.\n */\nexport async function migrateSignalTables(db: DuckDBConnection, logger?: IMastraLogger): Promise<void> {\n for (const { table, createDDL, idColumn } of SIGNAL_MIGRATIONS) {\n if (!(await tableExists(db, table))) continue;\n if (await hasPrimaryKey(db, table)) continue;\n\n logger?.info?.(`Migrating ${table} to schema with ${idColumn} PRIMARY KEY`);\n\n const temp = `${table}_migrating_${Date.now()}`;\n const backup = `${table}_backup_${Date.now()}`;\n let originalRenamed = false;\n let swapCompleted = false;\n\n try {\n await db.execute(buildTemporaryTableDDL(createDDL, table, temp));\n\n const newColumns = await getColumns(db, temp);\n const currentColumns = new Set(await getColumns(db, table));\n\n const columnList = newColumns.map(c => `\"${c}\"`).join(', ');\n const selectExprs = newColumns\n .map(c => {\n if (c === idColumn) {\n return currentColumns.has(c)\n ? `COALESCE(NULLIF(\"${c}\", ''), CAST(uuid() AS VARCHAR)) AS \"${c}\"`\n : `CAST(uuid() AS VARCHAR) AS \"${c}\"`;\n }\n return currentColumns.has(c) ? `\"${c}\"` : `NULL AS \"${c}\"`;\n })\n .join(', ');\n\n await db.execute(`INSERT INTO ${temp} (${columnList}) SELECT ${selectExprs} FROM ${table}`);\n\n await db.execute(`ALTER TABLE ${table} RENAME TO ${backup}`);\n originalRenamed = true;\n await db.execute(`ALTER TABLE ${temp} RENAME TO ${table}`);\n swapCompleted = true;\n\n try {\n await db.execute(`DROP TABLE ${backup}`);\n } catch (cleanupError) {\n logger?.warn?.(\n `Migration of ${table} completed, but failed to drop backup ${backup}: ${(cleanupError as Error).message}`,\n );\n }\n\n logger?.info?.(`Successfully migrated ${table}`);\n } catch (error) {\n logger?.error?.(`Migration of ${table} failed: ${(error as Error).message}`);\n try {\n await dropTableIfExists(db, temp);\n } catch (restoreError) {\n logger?.error?.(`Failed to clean up temporary table ${temp}: ${(restoreError as Error).message}`);\n }\n if (originalRenamed && !swapCompleted) {\n try {\n await db.execute(`ALTER TABLE ${backup} RENAME TO ${table}`);\n } catch (restoreError) {\n logger?.error?.(\n `Failed to restore original table ${table} from backup ${backup}: ${(restoreError as Error).message}`,\n );\n }\n }\n throw createMigrationError({ table, idColumn }, error);\n }\n }\n}\n","import type {\n BatchCreateScoresArgs,\n CreateScoreArgs,\n GetScoreAggregateArgs,\n GetScoreAggregateResponse,\n GetScoreBreakdownArgs,\n GetScoreBreakdownResponse,\n GetScorePercentilesArgs,\n GetScorePercentilesResponse,\n GetScoreTimeSeriesArgs,\n GetScoreTimeSeriesResponse,\n ListScoresArgs,\n ListScoresResponse,\n ScoreRecord,\n AggregationInterval,\n AggregationType,\n} from '@mastra/core/storage';\nimport { parseFieldKey } from '@mastra/core/utils';\nimport type { DuckDBConnection } from '../../db/index';\nimport { buildWhereClause, buildOrderByClause, buildPaginationClause } from './filters';\nimport { v, jsonV, toDate, parseJson, parseJsonArray } from './helpers';\n\ntype LegacyScoreRecord = CreateScoreArgs['score'] & {\n source?: string | null;\n};\n\nconst SCORE_GROUP_BY_COLUMNS = new Set([\n 'timestamp',\n 'traceId',\n 'spanId',\n 'experimentId',\n 'scoreTraceId',\n 'entityType',\n 'entityId',\n 'entityName',\n 'entityVersionId',\n 'parentEntityVersionId',\n 'parentEntityType',\n 'parentEntityId',\n 'parentEntityName',\n 'rootEntityVersionId',\n 'rootEntityType',\n 'rootEntityId',\n 'rootEntityName',\n 'userId',\n 'organizationId',\n 'resourceId',\n 'runId',\n 'sessionId',\n 'threadId',\n 'requestId',\n 'environment',\n 'executionSource',\n 'serviceName',\n 'scorerId',\n 'scorerVersion',\n 'scoreSource',\n 'score',\n 'reason',\n]);\n\nfunction getAggregationSql(aggregation: AggregationType, measure = 'score'): string {\n switch (aggregation) {\n case 'sum':\n return `SUM(${measure})`;\n case 'avg':\n return `AVG(${measure})`;\n case 'min':\n return `MIN(${measure})`;\n case 'max':\n return `MAX(${measure})`;\n case 'count':\n return `CAST(COUNT(${measure}) AS DOUBLE)`;\n case 'last':\n return `arg_max(${measure}, timestamp)`;\n default:\n return `SUM(${measure})`;\n }\n}\n\nfunction getIntervalSql(interval: AggregationInterval): string {\n switch (interval) {\n case '1m':\n return '1 minute';\n case '5m':\n return '5 minutes';\n case '15m':\n return '15 minutes';\n case '1h':\n return '1 hour';\n case '1d':\n return '1 day';\n default:\n return '1 hour';\n }\n}\n\nfunction getValidatedPercentiles(percentiles: number[]): number[] {\n if (!Array.isArray(percentiles) || percentiles.length === 0) {\n throw new Error('Percentiles must include at least one value between 0 and 1.');\n }\n\n return percentiles.map(percentile => {\n if (!Number.isFinite(percentile) || percentile < 0 || percentile > 1) {\n throw new Error('Percentiles must be finite numbers between 0 and 1.');\n }\n\n return percentile;\n });\n}\n\nfunction buildScoreWhereClause(args: Pick<GetScoreAggregateArgs, 'scorerId' | 'scoreSource' | 'filters'>): {\n clause: string;\n params: unknown[];\n} {\n const conditions = ['scorerId = ?'];\n const params: unknown[] = [args.scorerId];\n\n if (args.scoreSource !== undefined) {\n conditions.push('scoreSource = ?');\n params.push(args.scoreSource);\n }\n\n const { clause: filterClause, params: filterParams } = buildWhereClause(\n args.filters as Record<string, unknown> | undefined,\n { source: 'scoreSource' },\n );\n if (filterClause) {\n conditions.push(filterClause.replace('WHERE ', ''));\n params.push(...filterParams);\n }\n\n return { clause: `WHERE ${conditions.join(' AND ')}`, params };\n}\n\nfunction resolveScoreGroupBy(groupBy: string[]): { key: string; selectSql: string; groupSql: string }[] {\n return groupBy.map((key, index) => {\n const column = parseFieldKey(key);\n if (!SCORE_GROUP_BY_COLUMNS.has(column)) {\n throw new Error(`Invalid groupBy column(s): ${key}`);\n }\n\n const alias = `group_by_${index}`;\n return {\n key,\n selectSql: `${column} AS ${alias}`,\n groupSql: alias,\n };\n });\n}\n\nfunction toSeriesName(values: unknown[]): string {\n return values.map(value => (value === null || value === undefined ? '' : String(value))).join('|');\n}\n\nfunction rowToScoreRecord(row: Record<string, unknown>): Record<string, unknown> {\n return {\n scoreId: row.scoreId as string,\n timestamp: toDate(row.timestamp),\n traceId: (row.traceId as string) ?? null,\n spanId: (row.spanId as string) ?? null,\n experimentId: (row.experimentId as string) ?? null,\n scoreTraceId: (row.scoreTraceId as string) ?? null,\n entityType: (row.entityType as string) ?? null,\n entityId: (row.entityId as string) ?? null,\n entityName: (row.entityName as string) ?? null,\n entityVersionId: (row.entityVersionId as string) ?? null,\n parentEntityVersionId: (row.parentEntityVersionId as string) ?? null,\n parentEntityType: (row.parentEntityType as string) ?? null,\n parentEntityId: (row.parentEntityId as string) ?? null,\n parentEntityName: (row.parentEntityName as string) ?? null,\n rootEntityVersionId: (row.rootEntityVersionId as string) ?? null,\n rootEntityType: (row.rootEntityType as string) ?? null,\n rootEntityId: (row.rootEntityId as string) ?? null,\n rootEntityName: (row.rootEntityName as string) ?? null,\n userId: (row.userId as string) ?? null,\n organizationId: (row.organizationId as string) ?? null,\n resourceId: (row.resourceId as string) ?? null,\n runId: (row.runId as string) ?? null,\n sessionId: (row.sessionId as string) ?? null,\n threadId: (row.threadId as string) ?? null,\n requestId: (row.requestId as string) ?? null,\n environment: (row.environment as string) ?? null,\n executionSource: (row.executionSource as string) ?? null,\n serviceName: (row.serviceName as string) ?? null,\n scorerId: row.scorerId as string,\n scorerVersion: (row.scorerVersion as string) ?? null,\n source: (row.scoreSource as string) ?? null,\n scoreSource: (row.scoreSource as string) ?? null,\n score: Number(row.score),\n reason: (row.reason as string) ?? null,\n tags: parseJsonArray(row.tags) as string[] | null,\n metadata: parseJson(row.metadata) as Record<string, unknown> | null,\n scope: parseJson(row.scope) as Record<string, unknown> | null,\n };\n}\n\nfunction getComparisonDateRange(\n comparePeriod: NonNullable<GetScoreAggregateArgs['comparePeriod']>,\n timestamp: NonNullable<NonNullable<GetScoreAggregateArgs['filters']>['timestamp']>,\n) {\n if (!timestamp.start || !timestamp.end) return null;\n\n const duration = timestamp.end.getTime() - timestamp.start.getTime();\n switch (comparePeriod) {\n case 'previous_period':\n return {\n start: new Date(timestamp.start.getTime() - duration),\n end: new Date(timestamp.end.getTime() - duration),\n startExclusive: timestamp.startExclusive,\n endExclusive: timestamp.endExclusive,\n };\n case 'previous_day':\n return {\n start: new Date(timestamp.start.getTime() - 86400000),\n end: new Date(timestamp.end.getTime() - 86400000),\n startExclusive: timestamp.startExclusive,\n endExclusive: timestamp.endExclusive,\n };\n case 'previous_week':\n return {\n start: new Date(timestamp.start.getTime() - 604800000),\n end: new Date(timestamp.end.getTime() - 604800000),\n startExclusive: timestamp.startExclusive,\n endExclusive: timestamp.endExclusive,\n };\n }\n}\n\n/** Insert a single score event. */\nexport async function createScore(db: DuckDBConnection, args: CreateScoreArgs): Promise<void> {\n const s = args.score as LegacyScoreRecord;\n const scoreSource = s.scoreSource ?? s.source ?? null;\n await db.execute(\n `INSERT INTO score_events (\n scoreId, timestamp, traceId, spanId, experimentId, scoreTraceId,\n entityType, entityId, entityName, entityVersionId, parentEntityVersionId, parentEntityType, parentEntityId, parentEntityName, rootEntityVersionId, rootEntityType, rootEntityId, rootEntityName,\n userId, organizationId, resourceId, runId, sessionId, threadId, requestId, environment, executionSource, serviceName,\n scorerId, scorerVersion, scoreSource, score, reason, tags, metadata, scope\n )\n VALUES (${[\n v(s.scoreId),\n v(s.timestamp),\n v(s.traceId),\n v(s.spanId ?? null),\n v(s.experimentId ?? null),\n v(s.scoreTraceId ?? null),\n v(s.entityType ?? null),\n v(s.entityId ?? null),\n v(s.entityName ?? null),\n v(s.entityVersionId ?? null),\n v(s.parentEntityVersionId ?? null),\n v(s.parentEntityType ?? null),\n v(s.parentEntityId ?? null),\n v(s.parentEntityName ?? null),\n v(s.rootEntityVersionId ?? null),\n v(s.rootEntityType ?? null),\n v(s.rootEntityId ?? null),\n v(s.rootEntityName ?? null),\n v(s.userId ?? null),\n v(s.organizationId ?? null),\n v(s.resourceId ?? null),\n v(s.runId ?? null),\n v(s.sessionId ?? null),\n v(s.threadId ?? null),\n v(s.requestId ?? null),\n v(s.environment ?? null),\n v(s.executionSource ?? null),\n v(s.serviceName ?? null),\n v(s.scorerId),\n v(s.scorerVersion ?? null),\n v(scoreSource),\n v(s.score),\n v(s.reason ?? null),\n jsonV(s.tags ?? null),\n jsonV(s.metadata),\n jsonV(s.scope ?? null),\n ].join(', ')})\n ON CONFLICT DO NOTHING`,\n );\n}\n\n/** Insert multiple score events in a single statement. */\nexport async function batchCreateScores(db: DuckDBConnection, args: BatchCreateScoresArgs): Promise<void> {\n if (args.scores.length === 0) return;\n\n const tuples = args.scores.map(s => {\n const legacyScore = s as LegacyScoreRecord;\n const scoreSource = legacyScore.scoreSource ?? legacyScore.source ?? null;\n return `(${[\n v(legacyScore.scoreId),\n v(legacyScore.timestamp),\n v(legacyScore.traceId),\n v(legacyScore.spanId ?? null),\n v(legacyScore.experimentId ?? null),\n v(legacyScore.scoreTraceId ?? null),\n v(legacyScore.entityType ?? null),\n v(legacyScore.entityId ?? null),\n v(legacyScore.entityName ?? null),\n v(legacyScore.entityVersionId ?? null),\n v(legacyScore.parentEntityVersionId ?? null),\n v(legacyScore.parentEntityType ?? null),\n v(legacyScore.parentEntityId ?? null),\n v(legacyScore.parentEntityName ?? null),\n v(legacyScore.rootEntityVersionId ?? null),\n v(legacyScore.rootEntityType ?? null),\n v(legacyScore.rootEntityId ?? null),\n v(legacyScore.rootEntityName ?? null),\n v(legacyScore.userId ?? null),\n v(legacyScore.organizationId ?? null),\n v(legacyScore.resourceId ?? null),\n v(legacyScore.runId ?? null),\n v(legacyScore.sessionId ?? null),\n v(legacyScore.threadId ?? null),\n v(legacyScore.requestId ?? null),\n v(legacyScore.environment ?? null),\n v(legacyScore.executionSource ?? null),\n v(legacyScore.serviceName ?? null),\n v(legacyScore.scorerId),\n v(legacyScore.scorerVersion ?? null),\n v(scoreSource),\n v(legacyScore.score),\n v(legacyScore.reason ?? null),\n jsonV(legacyScore.tags ?? null),\n jsonV(legacyScore.metadata),\n jsonV(legacyScore.scope ?? null),\n ].join(', ')})`;\n });\n\n await db.execute(\n `INSERT INTO score_events (\n scoreId, timestamp, traceId, spanId, experimentId, scoreTraceId,\n entityType, entityId, entityName, entityVersionId, parentEntityVersionId, parentEntityType, parentEntityId, parentEntityName, rootEntityVersionId, rootEntityType, rootEntityId, rootEntityName,\n userId, organizationId, resourceId, runId, sessionId, threadId, requestId, environment, executionSource, serviceName,\n scorerId, scorerVersion, scoreSource, score, reason, tags, metadata, scope\n )\n VALUES ${tuples.join(',\\n ')}\n ON CONFLICT DO NOTHING`,\n );\n}\n\n/** Query score events with filtering, ordering, and pagination. */\nexport async function listScores(db: DuckDBConnection, args: ListScoresArgs): Promise<ListScoresResponse> {\n const filters = args.filters ?? {};\n const page = Number(args.pagination?.page ?? 0);\n const perPage = Number(args.pagination?.perPage ?? 10);\n const orderBy = { field: args.orderBy?.field ?? 'timestamp', direction: args.orderBy?.direction ?? 'DESC' } as const;\n\n const { clause: filterClause, params: filterParams } = buildWhereClause(filters as Record<string, unknown>, {\n source: 'scoreSource',\n });\n const orderByClause = buildOrderByClause(orderBy);\n const { clause: paginationClause, params: paginationParams } = buildPaginationClause({ page, perPage });\n\n const countResult = await db.query<{ total: number }>(\n `SELECT COUNT(*) as total FROM score_events ${filterClause}`,\n filterParams,\n );\n const total = Number(countResult[0]?.total ?? 0);\n\n const rows = await db.query<Record<string, unknown>>(\n `SELECT * FROM score_events ${filterClause} ${orderByClause} ${paginationClause}`,\n [...filterParams, ...paginationParams],\n );\n\n return {\n pagination: { total, page, perPage, hasMore: (page + 1) * perPage < total },\n scores: rows.map(row => rowToScoreRecord(row)) as ListScoresResponse['scores'],\n };\n}\n\nexport async function getScoreById(db: DuckDBConnection, scoreId: string): Promise<ScoreRecord | null> {\n const rows = await db.query<Record<string, unknown>>(`SELECT * FROM score_events WHERE scoreId = ? LIMIT 1`, [\n scoreId,\n ]);\n return rows[0] ? (rowToScoreRecord(rows[0]) as ScoreRecord) : null;\n}\n\nexport async function getScoreAggregate(\n db: DuckDBConnection,\n args: GetScoreAggregateArgs,\n): Promise<GetScoreAggregateResponse> {\n const aggSql = getAggregationSql(args.aggregation);\n const { clause, params } = buildScoreWhereClause(args);\n const rows = await db.query<Record<string, unknown>>(`SELECT ${aggSql} AS value FROM score_events ${clause}`, params);\n const value = rows[0]?.value === null || rows[0]?.value === undefined ? null : Number(rows[0]?.value);\n\n if (args.comparePeriod && args.filters?.timestamp) {\n const previousTimestamp = getComparisonDateRange(args.comparePeriod, args.filters.timestamp);\n if (previousTimestamp) {\n const prevRows = await db.query<Record<string, unknown>>(\n `SELECT ${aggSql} AS value FROM score_events ${\n buildScoreWhereClause({\n ...args,\n filters: { ...(args.filters ?? {}), timestamp: previousTimestamp },\n }).clause\n }`,\n buildScoreWhereClause({\n ...args,\n filters: { ...(args.filters ?? {}), timestamp: previousTimestamp },\n }).params,\n );\n const previousValue =\n prevRows[0]?.value === null || prevRows[0]?.value === undefined ? null : Number(prevRows[0]?.value);\n let changePercent: number | null = null;\n if (previousValue !== null && previousValue !== 0 && value !== null) {\n changePercent = ((value - previousValue) / Math.abs(previousValue)) * 100;\n }\n return { value, previousValue, changePercent };\n }\n }\n\n return { value };\n}\n\nexport async function getScoreBreakdown(\n db: DuckDBConnection,\n args: GetScoreBreakdownArgs,\n): Promise<GetScoreBreakdownResponse> {\n const aggSql = getAggregationSql(args.aggregation);\n const { clause, params } = buildScoreWhereClause(args);\n const resolvedGroupBy = resolveScoreGroupBy(args.groupBy);\n const sql = `SELECT ${resolvedGroupBy.map(entry => entry.selectSql).join(', ')}, ${aggSql} AS value FROM score_events ${clause} GROUP BY ${resolvedGroupBy\n .map(entry => entry.groupSql)\n .join(', ')} ORDER BY value DESC`;\n const rows = await db.query<Record<string, unknown>>(sql, params);\n\n return {\n groups: rows.map(row => ({\n dimensions: Object.fromEntries(\n resolvedGroupBy.map((entry, index) => {\n const value = row[`group_by_${index}`];\n return [entry.key, value === null || value === undefined ? null : String(value)];\n }),\n ),\n value: Number(row.value ?? 0),\n })),\n };\n}\n\nexport async function getScoreTimeSeries(\n db: DuckDBConnection,\n args: GetScoreTimeSeriesArgs,\n): Promise<GetScoreTimeSeriesResponse> {\n const aggSql = getAggregationSql(args.aggregation);\n const intervalSql = getIntervalSql(args.interval);\n const { clause, params } = buildScoreWhereClause(args);\n\n if (args.groupBy && args.groupBy.length > 0) {\n const resolvedGroupBy = resolveScoreGroupBy(args.groupBy);\n const sql = `\n SELECT time_bucket(INTERVAL '${intervalSql}', timestamp) AS bucket,\n ${resolvedGroupBy.map(entry => entry.selectSql).join(', ')},\n ${aggSql} AS value\n FROM score_events ${clause}\n GROUP BY bucket, ${resolvedGroupBy.map(entry => entry.groupSql).join(', ')}\n ORDER BY bucket\n `;\n const rows = await db.query<Record<string, unknown>>(sql, params);\n const seriesMap = new Map<string, { name: string; points: { timestamp: Date; value: number }[] }>();\n\n for (const row of rows) {\n const groupValues = resolvedGroupBy.map((_, index) => row[`group_by_${index}`]);\n const key = JSON.stringify(groupValues);\n if (!seriesMap.has(key)) {\n seriesMap.set(key, { name: toSeriesName(groupValues), points: [] });\n }\n seriesMap.get(key)!.points.push({\n timestamp: row.bucket instanceof Date ? row.bucket : new Date(String(row.bucket)),\n value: Number(row.value ?? 0),\n });\n }\n\n return { series: Array.from(seriesMap.values()) };\n }\n\n const rows = await db.query<Record<string, unknown>>(\n `\n SELECT time_bucket(INTERVAL '${intervalSql}', timestamp) AS bucket,\n ${aggSql} AS value\n FROM score_events ${clause}\n GROUP BY bucket\n ORDER BY bucket\n `,\n params,\n );\n\n return {\n series: [\n {\n name: args.scoreSource ? `${args.scorerId}|${args.scoreSource}` : args.scorerId,\n points: rows.map(row => ({\n timestamp: row.bucket instanceof Date ? row.bucket : new Date(String(row.bucket)),\n value: Number(row.value ?? 0),\n })),\n },\n ],\n };\n}\n\nexport async function getScorePercentiles(\n db: DuckDBConnection,\n args: GetScorePercentilesArgs,\n): Promise<GetScorePercentilesResponse> {\n const intervalSql = getIntervalSql(args.interval);\n const { clause, params } = buildScoreWhereClause(args);\n const percentiles = getValidatedPercentiles(args.percentiles);\n\n const series = [];\n for (const percentile of percentiles) {\n const rows = await db.query<Record<string, unknown>>(\n `\n SELECT time_bucket(INTERVAL '${intervalSql}', timestamp) AS bucket,\n percentile_cont(${percentile}) WITHIN GROUP (ORDER BY score) AS pvalue\n FROM score_events ${clause}\n GROUP BY bucket\n ORDER BY bucket\n `,\n params,\n );\n\n series.push({\n percentile,\n points: rows.map(row => ({\n timestamp: row.bucket instanceof Date ? row.bucket : new Date(String(row.bucket)),\n value: Number(row.pvalue ?? 0),\n })),\n });\n }\n\n return { series };\n}\n","import type {\n CreateSpanArgs,\n GetSpanArgs,\n GetSpanResponse,\n GetSpansArgs,\n GetSpansResponse,\n GetRootSpanArgs,\n GetRootSpanResponse,\n GetTraceArgs,\n GetTraceResponse,\n GetTraceLightResponse,\n LightSpanRecord,\n ListBranchesArgs,\n ListBranchesResponse,\n ListTracesArgs,\n ListTracesResponse,\n BatchCreateSpansArgs,\n BatchDeleteTracesArgs,\n SpanRecord,\n} from '@mastra/core/storage';\nimport { BRANCH_SPAN_TYPES, toTraceSpans } from '@mastra/core/storage';\nimport type { DuckDBConnection } from '../../db/index';\nimport { buildWhereClause, buildOrderByClause, buildPaginationClause } from './filters';\nimport { v, jsonV, parseJson, parseJsonArray, toDate, toDateOrNull } from './helpers';\n\n// ============================================================================\n// Columns & Reconstruction\n// ============================================================================\n\nconst COLUMNS = [\n 'eventType',\n 'timestamp',\n 'traceId',\n 'spanId',\n 'parentSpanId',\n 'name',\n 'spanType',\n 'isEvent',\n 'endedAt',\n 'experimentId',\n 'entityType',\n 'entityId',\n 'entityName',\n 'entityVersionId',\n 'userId',\n 'organizationId',\n 'resourceId',\n 'runId',\n 'sessionId',\n 'threadId',\n 'requestId',\n 'environment',\n 'source',\n 'serviceName',\n 'attributes',\n 'metadata',\n 'tags',\n 'scope',\n 'links',\n 'input',\n 'output',\n 'error',\n 'requestContext',\n] as const;\n\nconst COLUMNS_SQL = COLUMNS.join(', ');\n\n/**\n * Reconstruction query uses `arg_max(field, timestamp) FILTER (WHERE field IS NOT NULL)`\n * so that the final end event supplies the terminal span fields without wiping\n * stable values emitted on the start event.\n */\nfunction argMaxNonNull(col: string): string {\n return `arg_max(${col}, timestamp) FILTER (WHERE ${col} IS NOT NULL) as ${col}`;\n}\n\nconst SPAN_RECONSTRUCT_SELECT = `\n SELECT\n traceId, spanId,\n ${argMaxNonNull('name')},\n ${argMaxNonNull('spanType')},\n ${argMaxNonNull('parentSpanId')},\n ${argMaxNonNull('isEvent')},\n coalesce(min(timestamp) FILTER (WHERE eventType = 'start'), min(timestamp)) as startedAt,\n ${argMaxNonNull('endedAt')},\n ${argMaxNonNull('experimentId')},\n ${argMaxNonNull('entityType')},\n ${argMaxNonNull('entityId')},\n ${argMaxNonNull('entityName')},\n ${argMaxNonNull('entityVersionId')},\n ${argMaxNonNull('userId')},\n ${argMaxNonNull('organizationId')},\n ${argMaxNonNull('resourceId')},\n ${argMaxNonNull('runId')},\n ${argMaxNonNull('sessionId')},\n ${argMaxNonNull('threadId')},\n ${argMaxNonNull('requestId')},\n ${argMaxNonNull('environment')},\n ${argMaxNonNull('source')},\n ${argMaxNonNull('serviceName')},\n ${argMaxNonNull('attributes')},\n ${argMaxNonNull('metadata')},\n ${argMaxNonNull('tags')},\n ${argMaxNonNull('scope')},\n ${argMaxNonNull('links')},\n ${argMaxNonNull('input')},\n ${argMaxNonNull('output')},\n ${argMaxNonNull('error')},\n ${argMaxNonNull('requestContext')}\n FROM span_events\n`;\n\n/** Lightweight variant — only timeline-relevant columns. */\nconst SPAN_RECONSTRUCT_SELECT_LIGHT = `\n SELECT\n traceId, spanId,\n ${argMaxNonNull('name')},\n ${argMaxNonNull('spanType')},\n ${argMaxNonNull('parentSpanId')},\n ${argMaxNonNull('isEvent')},\n coalesce(min(timestamp) FILTER (WHERE eventType = 'start'), min(timestamp)) as startedAt,\n ${argMaxNonNull('endedAt')},\n ${argMaxNonNull('entityType')},\n ${argMaxNonNull('entityId')},\n ${argMaxNonNull('entityName')},\n ${argMaxNonNull('error')}\n FROM span_events\n`;\n\nfunction rowToLightSpanRecord(row: Record<string, unknown>): LightSpanRecord {\n return {\n traceId: row.traceId as string,\n spanId: row.spanId as string,\n name: row.name as string,\n spanType: row.spanType as LightSpanRecord['spanType'],\n parentSpanId: (row.parentSpanId as string) ?? null,\n isEvent: row.isEvent as boolean,\n startedAt: toDate(row.startedAt),\n endedAt: toDateOrNull(row.endedAt),\n entityType: (row.entityType as LightSpanRecord['entityType']) ?? null,\n entityId: (row.entityId as string) ?? null,\n entityName: (row.entityName as string) ?? null,\n error: parseJson(row.error),\n createdAt: toDate(row.startedAt), // DuckDB event-sourced — use startedAt as proxy\n updatedAt: toDateOrNull(row.endedAt),\n };\n}\n\nfunction rowToSpanRecord(row: Record<string, unknown>): SpanRecord {\n return {\n traceId: row.traceId as string,\n spanId: row.spanId as string,\n name: row.name as string,\n spanType: row.spanType as SpanRecord['spanType'],\n parentSpanId: (row.parentSpanId as string) ?? null,\n isEvent: row.isEvent as boolean,\n startedAt: toDate(row.startedAt),\n endedAt: toDateOrNull(row.endedAt),\n experimentId: (row.experimentId as string) ?? null,\n entityType: (row.entityType as SpanRecord['entityType']) ?? null,\n entityId: (row.entityId as string) ?? null,\n entityName: (row.entityName as string) ?? null,\n entityVersionId: (row.entityVersionId as string) ?? null,\n userId: (row.userId as string) ?? null,\n organizationId: (row.organizationId as string) ?? null,\n resourceId: (row.resourceId as string) ?? null,\n runId: (row.runId as string) ?? null,\n sessionId: (row.sessionId as string) ?? null,\n threadId: (row.threadId as string) ?? null,\n requestId: (row.requestId as string) ?? null,\n environment: (row.environment as string) ?? null,\n source: (row.source as string) ?? null,\n serviceName: (row.serviceName as string) ?? null,\n attributes: parseJson(row.attributes) as Record<string, unknown> | null,\n metadata: parseJson(row.metadata) as Record<string, unknown> | null,\n tags: parseJsonArray(row.tags) as string[] | null,\n scope: parseJson(row.scope) as Record<string, unknown> | null,\n links: parseJsonArray(row.links),\n input: parseJson(row.input) as Record<string, unknown> | null,\n output: parseJson(row.output) as Record<string, unknown> | null,\n error: parseJson(row.error) as Record<string, unknown> | null,\n requestContext: parseJson(row.requestContext) as Record<string, unknown> | null,\n createdAt: toDate(row.startedAt),\n updatedAt: null,\n };\n}\n\nfunction buildHasChildErrorClause(hasChildError: boolean | undefined): string {\n if (hasChildError === undefined) return '';\n const base = `SELECT 1 FROM reconstructed_spans c WHERE c.traceId = root_spans.traceId AND c.spanId != root_spans.spanId AND c.error IS NOT NULL`;\n return hasChildError ? `EXISTS (${base})` : `NOT EXISTS (${base})`;\n}\n\n// ============================================================================\n// Row builder — used by both create and update\n// ============================================================================\n\n/**\n * A span event row to be inserted into the span_events table.\n *\n * `timestamp` is the event ordering key:\n * - 'start' → the span's actual start time\n * - 'end' → the span's actual end time\n *\n * The reconstruction query derives `startedAt` from\n * `min(timestamp) FILTER (WHERE eventType = 'start')`.\n */\ninterface SpanEventRow {\n eventType: 'start' | 'end';\n timestamp: Date;\n traceId: string;\n spanId: string;\n parentSpanId: string | null;\n name: string | null;\n spanType: string | null;\n isEvent: boolean | null;\n endedAt: Date | null;\n experimentId: string | null;\n entityType: string | null;\n entityId: string | null;\n entityName: string | null;\n entityVersionId: string | null;\n userId: string | null;\n organizationId: string | null;\n resourceId: string | null;\n runId: string | null;\n sessionId: string | null;\n threadId: string | null;\n requestId: string | null;\n environment: string | null;\n source: string | null;\n serviceName: string | null;\n attributes: Record<string, unknown> | null;\n metadata: Record<string, unknown> | null;\n tags: string[] | null;\n scope: Record<string, unknown> | null;\n links: unknown[] | null;\n input: Record<string, unknown> | null;\n output: Record<string, unknown> | null;\n error: Record<string, unknown> | null;\n requestContext: Record<string, unknown> | null;\n}\n\nfunction toValuesTuple(row: SpanEventRow): string {\n return [\n v(row.eventType),\n v(row.timestamp),\n v(row.traceId),\n v(row.spanId),\n v(row.parentSpanId),\n v(row.name),\n v(row.spanType),\n v(row.isEvent),\n v(row.endedAt),\n v(row.experimentId),\n v(row.entityType),\n v(row.entityId),\n v(row.entityName),\n v(row.entityVersionId),\n v(row.userId),\n v(row.organizationId),\n v(row.resourceId),\n v(row.runId),\n v(row.sessionId),\n v(row.threadId),\n v(row.requestId),\n v(row.environment),\n v(row.source),\n v(row.serviceName),\n jsonV(row.attributes),\n jsonV(row.metadata),\n jsonV(row.tags),\n jsonV(row.scope),\n jsonV(row.links),\n jsonV(row.input),\n jsonV(row.output),\n jsonV(row.error),\n jsonV(row.requestContext),\n ].join(', ');\n}\n\nasync function insertSpanEvents(db: DuckDBConnection, rows: SpanEventRow[]): Promise<void> {\n if (rows.length === 0) return;\n const tuples = rows.map(row => `(${toValuesTuple(row)})`).join(',\\n');\n await db.execute(`INSERT INTO span_events (${COLUMNS_SQL}) VALUES ${tuples}`);\n}\n\n// ============================================================================\n// Public API\n// ============================================================================\n\nfunction createStartSpanRow(s: CreateSpanArgs['span']): SpanEventRow {\n return {\n eventType: 'start',\n timestamp: s.startedAt,\n traceId: s.traceId,\n spanId: s.spanId,\n parentSpanId: s.parentSpanId ?? null,\n name: s.name,\n spanType: s.spanType,\n isEvent: s.isEvent,\n endedAt: null,\n experimentId: s.experimentId ?? null,\n entityType: s.entityType ?? null,\n entityId: s.entityId ?? null,\n entityName: s.entityName ?? null,\n entityVersionId: s.entityVersionId ?? null,\n userId: s.userId ?? null,\n organizationId: s.organizationId ?? null,\n resourceId: s.resourceId ?? null,\n runId: s.runId ?? null,\n sessionId: s.sessionId ?? null,\n threadId: s.threadId ?? null,\n requestId: s.requestId ?? null,\n environment: s.environment ?? null,\n source: s.source ?? null,\n serviceName: s.serviceName ?? null,\n attributes: (s.attributes as Record<string, unknown>) ?? null,\n metadata: (s.metadata as Record<string, unknown>) ?? null,\n tags: s.tags ?? null,\n scope: (s.scope as Record<string, unknown>) ?? null,\n links: null,\n input: (s.input as Record<string, unknown>) ?? null,\n output: null,\n error: null,\n requestContext: (s.requestContext as Record<string, unknown>) ?? null,\n };\n}\n\nfunction createEndSpanRow(s: CreateSpanArgs['span']): SpanEventRow {\n return {\n eventType: 'end',\n timestamp: s.endedAt!,\n traceId: s.traceId,\n spanId: s.spanId,\n parentSpanId: s.parentSpanId ?? null,\n name: s.name,\n spanType: s.spanType,\n isEvent: s.isEvent,\n endedAt: s.endedAt ?? null,\n experimentId: s.experimentId ?? null,\n entityType: s.entityType ?? null,\n entityId: s.entityId ?? null,\n entityName: s.entityName ?? null,\n entityVersionId: s.entityVersionId ?? null,\n userId: s.userId ?? null,\n organizationId: s.organizationId ?? null,\n resourceId: s.resourceId ?? null,\n runId: s.runId ?? null,\n sessionId: s.sessionId ?? null,\n threadId: s.threadId ?? null,\n requestId: s.requestId ?? null,\n environment: s.environment ?? null,\n source: s.source ?? null,\n serviceName: s.serviceName ?? null,\n attributes: (s.attributes as Record<string, unknown>) ?? null,\n metadata: (s.metadata as Record<string, unknown>) ?? null,\n tags: s.tags ?? null,\n scope: (s.scope as Record<string, unknown>) ?? null,\n links: s.links ?? null,\n input: (s.input as Record<string, unknown>) ?? null,\n output: (s.output as Record<string, unknown>) ?? null,\n error: (s.error as Record<string, unknown>) ?? null,\n requestContext: (s.requestContext as Record<string, unknown>) ?? null,\n };\n}\n\n/** Insert a 'start' event for a new span. */\nexport async function createSpan(db: DuckDBConnection, args: CreateSpanArgs): Promise<void> {\n const rows = [createStartSpanRow(args.span)];\n if (args.span.endedAt) {\n rows.push(createEndSpanRow(args.span));\n }\n await insertSpanEvents(db, rows);\n}\n\n/** Insert 'start' events for multiple spans in a single statement. */\nexport async function batchCreateSpans(db: DuckDBConnection, args: BatchCreateSpansArgs): Promise<void> {\n if (args.records.length === 0) return;\n const rows = args.records.flatMap(record => {\n const events = [createStartSpanRow(record)];\n if (record.endedAt) {\n events.push(createEndSpanRow(record));\n }\n return events;\n });\n await insertSpanEvents(db, rows);\n}\n\n/** Delete all span events for the given trace IDs. */\nexport async function batchDeleteTraces(db: DuckDBConnection, args: BatchDeleteTracesArgs): Promise<void> {\n if (args.traceIds.length === 0) return;\n const placeholders = args.traceIds.map(() => '?').join(', ');\n await db.execute(`DELETE FROM span_events WHERE traceId IN (${placeholders})`, args.traceIds);\n}\n\n// ============================================================================\n// Read / Reconstruction\n// ============================================================================\n\n/** Reconstruct a single span from its event history. */\nexport async function getSpan(db: DuckDBConnection, args: GetSpanArgs): Promise<GetSpanResponse | null> {\n const rows = await db.query(`${SPAN_RECONSTRUCT_SELECT} WHERE traceId = ? AND spanId = ? GROUP BY traceId, spanId`, [\n args.traceId,\n args.spanId,\n ]);\n if (rows.length === 0) return null;\n return { span: rowToSpanRecord(rows[0]!) };\n}\n\n/** Reconstruct the root span (no parent) for a trace. */\nexport async function getRootSpan(db: DuckDBConnection, args: GetRootSpanArgs): Promise<GetRootSpanResponse | null> {\n const rows = await db.query(\n `${SPAN_RECONSTRUCT_SELECT} WHERE traceId = ? GROUP BY traceId, spanId HAVING arg_max(parentSpanId, timestamp) IS NULL LIMIT 1`,\n [args.traceId],\n );\n if (rows.length === 0) return null;\n return { span: rowToSpanRecord(rows[0]!) };\n}\n\n/** Reconstruct all spans belonging to a trace. */\nexport async function getTrace(db: DuckDBConnection, args: GetTraceArgs): Promise<GetTraceResponse | null> {\n const rows = await db.query(`${SPAN_RECONSTRUCT_SELECT} WHERE traceId = ? GROUP BY traceId, spanId`, [args.traceId]);\n if (rows.length === 0) return null;\n return {\n traceId: args.traceId,\n spans: rows.map(row => rowToSpanRecord(row as Record<string, unknown>)),\n };\n}\n\n/** Reconstruct lightweight spans belonging to a trace (timeline fields only). */\nexport async function getTraceLight(db: DuckDBConnection, args: GetTraceArgs): Promise<GetTraceLightResponse | null> {\n const rows = await db.query(`${SPAN_RECONSTRUCT_SELECT_LIGHT} WHERE traceId = ? GROUP BY traceId, spanId`, [\n args.traceId,\n ]);\n if (rows.length === 0) return null;\n return {\n traceId: args.traceId,\n spans: rows.map(row => rowToLightSpanRecord(row as Record<string, unknown>)),\n };\n}\n\n/** List root spans (traces) with filtering, ordering, and pagination. */\nexport async function listTraces(db: DuckDBConnection, args: ListTracesArgs): Promise<ListTracesResponse> {\n const filters = args.filters ?? {};\n const page = Number(args.pagination?.page ?? 0);\n const perPage = Number(args.pagination?.perPage ?? 10);\n const orderBy = { field: args.orderBy?.field ?? 'startedAt', direction: args.orderBy?.direction ?? 'DESC' } as const;\n\n const { clause: filterClause, params: filterParams } = buildWhereClause(filters as Record<string, unknown>);\n const orderByClause = buildOrderByClause(orderBy);\n const { clause: paginationClause, params: paginationParams } = buildPaginationClause({ page, perPage });\n\n const filterParts = [];\n if (filterClause) filterParts.push(filterClause.replace(/^WHERE\\s+/i, ''));\n const hasChildError = typeof filters.hasChildError === 'boolean' ? filters.hasChildError : undefined;\n const childErrorClause = buildHasChildErrorClause(hasChildError);\n if (childErrorClause) filterParts.push(childErrorClause);\n const combinedFilterClause = filterParts.length > 0 ? `WHERE ${filterParts.join(' AND ')}` : '';\n\n const cteSql = `\n WITH reconstructed_spans AS (\n ${SPAN_RECONSTRUCT_SELECT}\n GROUP BY traceId, spanId\n ),\n root_spans AS (\n SELECT * FROM reconstructed_spans\n WHERE parentSpanId IS NULL\n )\n `;\n\n const countSql = `\n ${cteSql}\n SELECT COUNT(*) as total FROM root_spans ${combinedFilterClause}\n `;\n const countResult = await db.query<{ total: number }>(countSql, filterParams);\n const total = Number(countResult[0]?.total ?? 0);\n\n const dataSql = `\n ${cteSql}\n SELECT * FROM root_spans ${combinedFilterClause} ${orderByClause} ${paginationClause}\n `;\n const rows = await db.query(dataSql, [...filterParams, ...paginationParams]);\n\n const spans = rows.map(row => rowToSpanRecord(row as Record<string, unknown>));\n\n return {\n pagination: {\n total,\n page,\n perPage,\n hasMore: (page + 1) * perPage < total,\n },\n spans: toTraceSpans(spans),\n };\n}\n\n// ============================================================================\n// listBranches / getSpans\n// ============================================================================\n\nconst BRANCH_SPAN_TYPE_PLACEHOLDERS = BRANCH_SPAN_TYPES.map(() => '?').join(', ');\n\n/**\n * Reconstruct multiple spans by spanId within a single trace. Single round-trip\n * fetch used by the optimized {@link import('@mastra/core/storage').getBranch}\n * path: getStructure walks the skeleton to identify branch spanIds, then this\n * pulls full data for only those spans instead of the whole trace.\n */\nexport async function getSpans(db: DuckDBConnection, args: GetSpansArgs): Promise<GetSpansResponse> {\n if (args.spanIds.length === 0) {\n return { traceId: args.traceId, spans: [] };\n }\n\n const placeholders = args.spanIds.map(() => '?').join(', ');\n const rows = await db.query(\n `${SPAN_RECONSTRUCT_SELECT}\n WHERE traceId = ? AND spanId IN (${placeholders})\n GROUP BY traceId, spanId`,\n [args.traceId, ...args.spanIds],\n );\n\n return {\n traceId: args.traceId,\n spans: rows.map(row => rowToSpanRecord(row as Record<string, unknown>)),\n };\n}\n\n/**\n * List branch anchor spans (named-entity invocations) across all traces with\n * filtering, ordering, and pagination. Pre-filters raw `span_events` by\n * `spanType IN (branch types)` before the reconstruct GROUP BY, so we don't\n * pay reconstruction cost for the high-volume sub-operation events\n * (MODEL_STEP, MODEL_CHUNK, etc.) that are never anchors.\n */\nexport async function listBranches(db: DuckDBConnection, args: ListBranchesArgs): Promise<ListBranchesResponse> {\n const filters = args.filters ?? {};\n const page = Number(args.pagination?.page ?? 0);\n const perPage = Number(args.pagination?.perPage ?? 10);\n const orderBy = { field: args.orderBy?.field ?? 'startedAt', direction: args.orderBy?.direction ?? 'DESC' } as const;\n\n // spanType is consumed by the prefilter; pass the rest of the filter set\n // through buildWhereClause unchanged.\n const { spanType, ...passthroughFilters } = filters as Record<string, unknown>;\n const { clause: filterClause, params: filterParams } = buildWhereClause(passthroughFilters);\n const orderByClause = buildOrderByClause(orderBy);\n const { clause: paginationClause, params: paginationParams } = buildPaginationClause({ page, perPage });\n\n // Prefilter raw events to branch-anchor types. Unlike the ClickHouse path\n // which reads from an MV-filtered table, DuckDB queries raw span_events\n // directly, so this guard is what enforces \"listBranches only returns\n // branches\" here. Caller-supplied spanType narrows further; if it's not a\n // branch type, the intersection is empty and we short-circuit to no rows\n // (instead of silently widening to all branches or leaking the non-branch\n // type through).\n let prefilterClause: string;\n let prefilterParams: unknown[];\n if (typeof spanType === 'string') {\n if (!(BRANCH_SPAN_TYPES as readonly string[]).includes(spanType)) {\n // Caller asked for a non-branch span type; \"branch anchors with that\n // type\" is an empty set by definition.\n return {\n pagination: { total: 0, page, perPage, hasMore: false },\n branches: [],\n };\n }\n prefilterClause = `WHERE spanType = ?`;\n prefilterParams = [spanType];\n } else {\n prefilterClause = `WHERE spanType IN (${BRANCH_SPAN_TYPE_PLACEHOLDERS})`;\n prefilterParams = [...BRANCH_SPAN_TYPES];\n }\n\n const cteSql = `\n WITH branch_anchors AS (\n ${SPAN_RECONSTRUCT_SELECT}\n ${prefilterClause}\n GROUP BY traceId, spanId\n )\n `;\n\n const countSql = `\n ${cteSql}\n SELECT COUNT(*) as total FROM branch_anchors ${filterClause}\n `;\n const countResult = await db.query<{ total: number }>(countSql, [...prefilterParams, ...filterParams]);\n const total = Number(countResult[0]?.total ?? 0);\n\n if (total === 0) {\n return {\n pagination: { total: 0, page, perPage, hasMore: false },\n branches: [],\n };\n }\n\n const dataSql = `\n ${cteSql}\n SELECT * FROM branch_anchors ${filterClause} ${orderByClause} ${paginationClause}\n `;\n const rows = await db.query(dataSql, [...prefilterParams, ...filterParams, ...paginationParams]);\n const spans = rows.map(row => rowToSpanRecord(row as Record<string, unknown>));\n\n return {\n pagination: {\n total,\n page,\n perPage,\n hasMore: (page + 1) * perPage < total,\n },\n branches: toTraceSpans(spans),\n };\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { createStorageErrorId, ObservabilityStorage } from '@mastra/core/storage';\nimport type {\n CreateSpanArgs,\n GetSpanArgs,\n GetSpanResponse,\n GetSpansArgs,\n GetSpansResponse,\n GetRootSpanArgs,\n GetRootSpanResponse,\n GetTraceArgs,\n GetTraceResponse,\n GetTraceLightResponse,\n ListBranchesArgs,\n ListBranchesResponse,\n ListTracesArgs,\n ListTracesResponse,\n BatchCreateSpansArgs,\n BatchDeleteTracesArgs,\n BatchCreateLogsArgs,\n ListLogsArgs,\n ListLogsResponse,\n BatchCreateMetricsArgs,\n ListMetricsArgs,\n ListMetricsResponse,\n CreateScoreArgs,\n BatchCreateScoresArgs,\n ListScoresArgs,\n ListScoresResponse,\n ScoreRecord,\n GetScoreAggregateArgs,\n GetScoreAggregateResponse,\n GetScoreBreakdownArgs,\n GetScoreBreakdownResponse,\n GetScoreTimeSeriesArgs,\n GetScoreTimeSeriesResponse,\n GetScorePercentilesArgs,\n GetScorePercentilesResponse,\n CreateFeedbackArgs,\n BatchCreateFeedbackArgs,\n ListFeedbackArgs,\n ListFeedbackResponse,\n GetFeedbackAggregateArgs,\n GetFeedbackAggregateResponse,\n GetFeedbackBreakdownArgs,\n GetFeedbackBreakdownResponse,\n GetFeedbackTimeSeriesArgs,\n GetFeedbackTimeSeriesResponse,\n GetFeedbackPercentilesArgs,\n GetFeedbackPercentilesResponse,\n GetMetricAggregateArgs,\n GetMetricAggregateResponse,\n GetMetricBreakdownArgs,\n GetMetricBreakdownResponse,\n GetMetricTimeSeriesArgs,\n GetMetricTimeSeriesResponse,\n GetMetricPercentilesArgs,\n GetMetricPercentilesResponse,\n GetMetricNamesArgs,\n GetMetricNamesResponse,\n GetMetricLabelKeysArgs,\n GetMetricLabelKeysResponse,\n GetMetricLabelValuesArgs,\n GetMetricLabelValuesResponse,\n GetEntityTypesArgs,\n GetEntityTypesResponse,\n GetEntityNamesArgs,\n GetEntityNamesResponse,\n GetServiceNamesArgs,\n GetServiceNamesResponse,\n GetEnvironmentsArgs,\n GetEnvironmentsResponse,\n GetTagsArgs,\n GetTagsResponse,\n ObservabilityStorageStrategy,\n} from '@mastra/core/storage';\nimport type { DuckDBConnection } from '../../db/index';\nimport { ALL_DDL, ALL_MIGRATIONS } from './ddl';\nimport * as discoveryOps from './discovery';\nimport * as feedbackOps from './feedback';\nimport * as logOps from './logs';\nimport * as metricOps from './metrics';\nimport { checkSignalTablesMigrationStatus, migrateSignalTables } from './migration';\nimport * as scoreOps from './scores';\nimport * as tracingOps from './tracing';\n\nfunction buildSignalMigrationRequiredMessage(args: { tables: Array<{ table: string }> }): string {\n const tableList = args.tables.map(table => ` - ${table.table}`).join('\\n');\n\n return (\n `\\n` +\n `===========================================================================\\n` +\n `MIGRATION REQUIRED: DuckDB observability signal tables need signal IDs\\n` +\n `===========================================================================\\n` +\n `\\n` +\n `The following signal tables still use the legacy schema and must be migrated\\n` +\n `before observability storage can initialize:\\n` +\n `\\n` +\n `${tableList}\\n` +\n `\\n` +\n `To fix this, run the manual migration command:\\n` +\n `\\n` +\n ` npx mastra migrate\\n` +\n `\\n` +\n `This command will:\\n` +\n ` 1. Create replacement signal tables with signal-ID primary keys\\n` +\n ` 2. Backfill missing signal IDs for legacy rows\\n` +\n ` 3. Swap the migrated tables into place\\n` +\n `\\n` +\n `WARNING: This migration recreates the signal tables and may take significant\\n` +\n `time for large databases. Please ensure you have a backup before proceeding.\\n` +\n `===========================================================================\\n`\n );\n}\n\n/** Configuration for the DuckDB observability storage domain. */\nexport interface ObservabilityDuckDBConfig {\n /** Shared DuckDB instance to use for all observability queries. */\n db: DuckDBConnection;\n}\n\n/**\n * DuckDB-backed observability storage for traces, metrics, logs, scores, and feedback.\n * Uses an append-only event-sourced model with SQL-based reconstruction for spans.\n */\nexport class ObservabilityStorageDuckDB extends ObservabilityStorage {\n private db: DuckDBConnection;\n\n constructor(config: ObservabilityDuckDBConfig) {\n super();\n this.db = config.db;\n }\n\n /** Create all observability tables if they don't exist. */\n async init(): Promise<void> {\n const migrationStatus = await checkSignalTablesMigrationStatus(this.db);\n if (migrationStatus.needsMigration) {\n throw new MastraError({\n id: createStorageErrorId('DUCKDB', 'MIGRATION_REQUIRED', 'SIGNAL_TABLES'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: buildSignalMigrationRequiredMessage({\n tables: migrationStatus.tables.map(({ table }) => ({ table })),\n }),\n });\n }\n\n for (const ddl of ALL_DDL) {\n await this.db.execute(ddl);\n }\n\n for (const migration of ALL_MIGRATIONS) {\n await this.db.execute(migration);\n }\n }\n\n /**\n * Manually migrate legacy signal tables to the signal-ID primary-key schema.\n * The public method name is historical; the CLI still calls `migrateSpans()`\n * for observability migrations even though this now also migrates signal tables.\n */\n async migrateSpans(): Promise<{\n success: boolean;\n alreadyMigrated: boolean;\n duplicatesRemoved: number;\n message: string;\n }> {\n const migrationStatus = await checkSignalTablesMigrationStatus(this.db);\n\n if (!migrationStatus.needsMigration) {\n return {\n success: true,\n alreadyMigrated: true,\n duplicatesRemoved: 0,\n message: 'Migration already complete. Signal tables already use signal-ID primary keys.',\n };\n }\n\n await migrateSignalTables(this.db, this.logger);\n\n return {\n success: true,\n alreadyMigrated: false,\n duplicatesRemoved: 0,\n message: `Migration complete. Migrated signal tables: ${migrationStatus.tables.map(t => t.table).join(', ')}.`,\n };\n }\n\n /** Delete all rows from every observability table. Use with caution. */\n async dangerouslyClearAll(): Promise<void> {\n for (const table of ['span_events', 'metric_events', 'log_events', 'score_events', 'feedback_events']) {\n await this.db.execute(`TRUNCATE TABLE ${table}`);\n }\n }\n\n public override get observabilityStrategy(): {\n preferred: ObservabilityStorageStrategy;\n supported: ObservabilityStorageStrategy[];\n } {\n return {\n preferred: 'event-sourced',\n supported: ['event-sourced'],\n };\n }\n\n // Tracing\n async createSpan(args: CreateSpanArgs): Promise<void> {\n return tracingOps.createSpan(this.db, args);\n }\n async batchCreateSpans(args: BatchCreateSpansArgs): Promise<void> {\n return tracingOps.batchCreateSpans(this.db, args);\n }\n async batchDeleteTraces(args: BatchDeleteTracesArgs): Promise<void> {\n return tracingOps.batchDeleteTraces(this.db, args);\n }\n async getSpan(args: GetSpanArgs): Promise<GetSpanResponse | null> {\n return tracingOps.getSpan(this.db, args);\n }\n async getSpans(args: GetSpansArgs): Promise<GetSpansResponse> {\n return tracingOps.getSpans(this.db, args);\n }\n async getRootSpan(args: GetRootSpanArgs): Promise<GetRootSpanResponse | null> {\n return tracingOps.getRootSpan(this.db, args);\n }\n async getTrace(args: GetTraceArgs): Promise<GetTraceResponse | null> {\n return tracingOps.getTrace(this.db, args);\n }\n async getTraceLight(args: GetTraceArgs): Promise<GetTraceLightResponse | null> {\n return tracingOps.getTraceLight(this.db, args);\n }\n async listTraces(args: ListTracesArgs): Promise<ListTracesResponse> {\n return tracingOps.listTraces(this.db, args);\n }\n async listBranches(args: ListBranchesArgs): Promise<ListBranchesResponse> {\n return tracingOps.listBranches(this.db, args);\n }\n\n // Logs\n async batchCreateLogs(args: BatchCreateLogsArgs): Promise<void> {\n return logOps.batchCreateLogs(this.db, args);\n }\n async listLogs(args: ListLogsArgs): Promise<ListLogsResponse> {\n return logOps.listLogs(this.db, args);\n }\n\n // Metrics\n async batchCreateMetrics(args: BatchCreateMetricsArgs): Promise<void> {\n return metricOps.batchCreateMetrics(this.db, args);\n }\n async listMetrics(args: ListMetricsArgs): Promise<ListMetricsResponse> {\n return metricOps.listMetrics(this.db, args);\n }\n async getMetricAggregate(args: GetMetricAggregateArgs): Promise<GetMetricAggregateResponse> {\n return metricOps.getMetricAggregate(this.db, args);\n }\n async getMetricBreakdown(args: GetMetricBreakdownArgs): Promise<GetMetricBreakdownResponse> {\n return metricOps.getMetricBreakdown(this.db, args);\n }\n async getMetricTimeSeries(args: GetMetricTimeSeriesArgs): Promise<GetMetricTimeSeriesResponse> {\n return metricOps.getMetricTimeSeries(this.db, args);\n }\n async getMetricPercentiles(args: GetMetricPercentilesArgs): Promise<GetMetricPercentilesResponse> {\n return metricOps.getMetricPercentiles(this.db, args);\n }\n // Metric Discovery\n async getMetricNames(args: GetMetricNamesArgs): Promise<GetMetricNamesResponse> {\n return metricOps.getMetricNames(this.db, args);\n }\n async getMetricLabelKeys(args: GetMetricLabelKeysArgs): Promise<GetMetricLabelKeysResponse> {\n return metricOps.getMetricLabelKeys(this.db, args);\n }\n async getMetricLabelValues(args: GetMetricLabelValuesArgs): Promise<GetMetricLabelValuesResponse> {\n return metricOps.getMetricLabelValues(this.db, args);\n }\n\n // Span Discovery\n async getEntityTypes(args: GetEntityTypesArgs): Promise<GetEntityTypesResponse> {\n return discoveryOps.getEntityTypes(this.db, args);\n }\n async getEntityNames(args: GetEntityNamesArgs): Promise<GetEntityNamesResponse> {\n return discoveryOps.getEntityNames(this.db, args);\n }\n async getServiceNames(args: GetServiceNamesArgs): Promise<GetServiceNamesResponse> {\n return discoveryOps.getServiceNames(this.db, args);\n }\n async getEnvironments(args: GetEnvironmentsArgs): Promise<GetEnvironmentsResponse> {\n return discoveryOps.getEnvironments(this.db, args);\n }\n async getTags(args: GetTagsArgs): Promise<GetTagsResponse> {\n return discoveryOps.getTags(this.db, args);\n }\n\n // Scores\n async createScore(args: CreateScoreArgs): Promise<void> {\n return scoreOps.createScore(this.db, args);\n }\n async batchCreateScores(args: BatchCreateScoresArgs): Promise<void> {\n return scoreOps.batchCreateScores(this.db, args);\n }\n async listScores(args: ListScoresArgs): Promise<ListScoresResponse> {\n return scoreOps.listScores(this.db, args);\n }\n async getScoreById(scoreId: string): Promise<ScoreRecord | null> {\n return scoreOps.getScoreById(this.db, scoreId);\n }\n async getScoreAggregate(args: GetScoreAggregateArgs): Promise<GetScoreAggregateResponse> {\n return scoreOps.getScoreAggregate(this.db, args);\n }\n async getScoreBreakdown(args: GetScoreBreakdownArgs): Promise<GetScoreBreakdownResponse> {\n return scoreOps.getScoreBreakdown(this.db, args);\n }\n async getScoreTimeSeries(args: GetScoreTimeSeriesArgs): Promise<GetScoreTimeSeriesResponse> {\n return scoreOps.getScoreTimeSeries(this.db, args);\n }\n async getScorePercentiles(args: GetScorePercentilesArgs): Promise<GetScorePercentilesResponse> {\n return scoreOps.getScorePercentiles(this.db, args);\n }\n\n // Feedback\n async createFeedback(args: CreateFeedbackArgs): Promise<void> {\n return feedbackOps.createFeedback(this.db, args);\n }\n async batchCreateFeedback(args: BatchCreateFeedbackArgs): Promise<void> {\n return feedbackOps.batchCreateFeedback(this.db, args);\n }\n async listFeedback(args: ListFeedbackArgs): Promise<ListFeedbackResponse> {\n return feedbackOps.listFeedback(this.db, args);\n }\n async getFeedbackAggregate(args: GetFeedbackAggregateArgs): Promise<GetFeedbackAggregateResponse> {\n return feedbackOps.getFeedbackAggregate(this.db, args);\n }\n async getFeedbackBreakdown(args: GetFeedbackBreakdownArgs): Promise<GetFeedbackBreakdownResponse> {\n return feedbackOps.getFeedbackBreakdown(this.db, args);\n }\n async getFeedbackTimeSeries(args: GetFeedbackTimeSeriesArgs): Promise<GetFeedbackTimeSeriesResponse> {\n return feedbackOps.getFeedbackTimeSeries(this.db, args);\n }\n async getFeedbackPercentiles(args: GetFeedbackPercentilesArgs): Promise<GetFeedbackPercentilesResponse> {\n return feedbackOps.getFeedbackPercentiles(this.db, args);\n }\n}\n"]}
|