@mastra/duckdb 1.1.0 → 1.1.1-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 CHANGED
@@ -1,5 +1,14 @@
1
1
  # @mastra/duckdb
2
2
 
3
+ ## 1.1.1-alpha.0
4
+
5
+ ### Patch Changes
6
+
7
+ - Fixed DuckDB observability migrations to support nullable score and feedback trace IDs on existing installs. ([#14942](https://github.com/mastra-ai/mastra/pull/14942))
8
+
9
+ - Updated dependencies [[`ec5c319`](https://github.com/mastra-ai/mastra/commit/ec5c3197a50d034cb8e9cc494eebfddc684b5d81), [`6517789`](https://github.com/mastra-ai/mastra/commit/65177895b74b5471fe2245c7292f0176d9b3385d), [`9ad6aa6`](https://github.com/mastra-ai/mastra/commit/9ad6aa6dfe858afc6955d1df5f3f78c40bb96b9c), [`2862127`](https://github.com/mastra-ai/mastra/commit/2862127d0a7cbd28523120ad64fea067a95838e6), [`3d16814`](https://github.com/mastra-ai/mastra/commit/3d16814c395931373543728994ff45ac98093074), [`7f498d0`](https://github.com/mastra-ai/mastra/commit/7f498d099eacef64fd43ee412e3bd6f87965a8a6), [`8cf8a67`](https://github.com/mastra-ai/mastra/commit/8cf8a67b061b737cb06d501fb8c1967a98bbf3cb), [`d7827e3`](https://github.com/mastra-ai/mastra/commit/d7827e393937c6cb0c7a744dde4d31538cb542b7)]:
10
+ - @mastra/core@1.21.0-alpha.2
11
+
3
12
  ## 1.1.0
4
13
 
5
14
  ### Minor Changes
@@ -3,7 +3,7 @@ name: mastra-duckdb
3
3
  description: Documentation for @mastra/duckdb. Use when working with @mastra/duckdb APIs, configuration, or implementation.
4
4
  metadata:
5
5
  package: "@mastra/duckdb"
6
- version: "1.1.0"
6
+ version: "1.1.1-alpha.0"
7
7
  ---
8
8
 
9
9
  ## When to use
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.1.0",
2
+ "version": "1.1.1-alpha.0",
3
3
  "package": "@mastra/duckdb",
4
4
  "exports": {
5
5
  "DuckDBConnection": {
package/dist/index.cjs CHANGED
@@ -583,7 +583,7 @@ var ObservabilityStorageDuckDB = class extends storage.ObservabilityStorage {
583
583
  return null;
584
584
  }
585
585
  if (!this.loadPromise) {
586
- this.loadPromise = import('./observability-XVQ3ST7G.cjs').then(({ ObservabilityStorageDuckDB: ObservabilityStorageDuckDB2 }) => {
586
+ this.loadPromise = import('./observability-IME6BI7N.cjs').then(({ ObservabilityStorageDuckDB: ObservabilityStorageDuckDB2 }) => {
587
587
  const delegate = new ObservabilityStorageDuckDB2({ db: this.db });
588
588
  this.delegate = delegate;
589
589
  return delegate;
package/dist/index.js CHANGED
@@ -582,7 +582,7 @@ var ObservabilityStorageDuckDB = class extends ObservabilityStorage {
582
582
  return null;
583
583
  }
584
584
  if (!this.loadPromise) {
585
- this.loadPromise = import('./observability-VLTZBPVZ.js').then(({ ObservabilityStorageDuckDB: ObservabilityStorageDuckDB2 }) => {
585
+ this.loadPromise = import('./observability-J4YTASAF.js').then(({ ObservabilityStorageDuckDB: ObservabilityStorageDuckDB2 }) => {
586
586
  const delegate = new ObservabilityStorageDuckDB2({ db: this.db });
587
587
  this.delegate = delegate;
588
588
  return delegate;
@@ -149,7 +149,7 @@ CREATE TABLE IF NOT EXISTS score_events (
149
149
  timestamp TIMESTAMP NOT NULL,
150
150
 
151
151
  -- IDs
152
- traceId VARCHAR NOT NULL,
152
+ traceId VARCHAR,
153
153
  spanId VARCHAR,
154
154
  experimentId VARCHAR,
155
155
  scoreTraceId VARCHAR,
@@ -196,7 +196,7 @@ CREATE TABLE IF NOT EXISTS feedback_events (
196
196
  timestamp TIMESTAMP NOT NULL,
197
197
 
198
198
  -- IDs
199
- traceId VARCHAR NOT NULL,
199
+ traceId VARCHAR,
200
200
  spanId VARCHAR,
201
201
  experimentId VARCHAR,
202
202
  -- Entity hierarchy
@@ -306,6 +306,7 @@ var ALL_MIGRATIONS = [
306
306
  `ALTER TABLE score_events ADD COLUMN IF NOT EXISTS scope JSON`,
307
307
  `ALTER TABLE score_events ADD COLUMN IF NOT EXISTS source VARCHAR`,
308
308
  `ALTER TABLE score_events ADD COLUMN IF NOT EXISTS scoreSource VARCHAR`,
309
+ `ALTER TABLE score_events ALTER COLUMN traceId DROP NOT NULL`,
309
310
  // Feedback
310
311
  `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS entityType VARCHAR`,
311
312
  `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS entityId VARCHAR`,
@@ -330,7 +331,8 @@ var ALL_MIGRATIONS = [
330
331
  `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS tags JSON`,
331
332
  `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS scope JSON`,
332
333
  `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS source VARCHAR`,
333
- `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS feedbackSource VARCHAR`
334
+ `ALTER TABLE feedback_events ADD COLUMN IF NOT EXISTS feedbackSource VARCHAR`,
335
+ `ALTER TABLE feedback_events ALTER COLUMN traceId DROP NOT NULL`
334
336
  ];
335
337
  function unionDistinctQueries(selects, orderBy) {
336
338
  return `${selects.join("\nUNION\n")}
@@ -688,7 +690,7 @@ function rowToFeedbackRecord(row) {
688
690
  if (!isNaN(numValue)) value = numValue;
689
691
  return {
690
692
  timestamp: toDate(row.timestamp),
691
- traceId: row.traceId,
693
+ traceId: row.traceId ?? null,
692
694
  spanId: row.spanId ?? null,
693
695
  experimentId: row.experimentId ?? null,
694
696
  entityType: row.entityType ?? null,
@@ -1755,7 +1757,7 @@ function toSeriesName2(values) {
1755
1757
  function rowToScoreRecord(row) {
1756
1758
  return {
1757
1759
  timestamp: toDate(row.timestamp),
1758
- traceId: row.traceId,
1760
+ traceId: row.traceId ?? null,
1759
1761
  spanId: row.spanId ?? null,
1760
1762
  experimentId: row.experimentId ?? null,
1761
1763
  scoreTraceId: row.scoreTraceId ?? null,
@@ -2529,5 +2531,5 @@ var ObservabilityStorageDuckDB = class extends storage.ObservabilityStorage {
2529
2531
  };
2530
2532
 
2531
2533
  exports.ObservabilityStorageDuckDB = ObservabilityStorageDuckDB;
2532
- //# sourceMappingURL=observability-XVQ3ST7G.cjs.map
2533
- //# sourceMappingURL=observability-XVQ3ST7G.cjs.map
2534
+ //# sourceMappingURL=observability-IME6BI7N.cjs.map
2535
+ //# sourceMappingURL=observability-IME6BI7N.cjs.map
@@ -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/scores.ts","../src/storage/domains/observability/tracing.ts","../src/storage/domains/observability/index.ts"],"names":["EntityType","parseFieldKey","DuckDBConnection","rows","getAggregationSql","getIntervalSql","sql","getValidatedPercentiles","toSeriesName","getComparisonDateRange","COLUMNS","COLUMNS_SQL","toTraceSpans","ObservabilityStorage"],"mappings":"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","file":"observability-IME6BI7N.cjs","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\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 traceId VARCHAR,\n spanId VARCHAR,\n experimentId VARCHAR,\n\n -- Entity hierarchy\n entityType VARCHAR,\n entityId VARCHAR,\n entityName VARCHAR,\n parentEntityType VARCHAR,\n parentEntityId VARCHAR,\n parentEntityName 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 traceId VARCHAR,\n spanId VARCHAR,\n experimentId VARCHAR,\n\n -- Entity hierarchy\n entityType VARCHAR,\n entityId VARCHAR,\n entityName VARCHAR,\n parentEntityType VARCHAR,\n parentEntityId VARCHAR,\n parentEntityName 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 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 parentEntityType VARCHAR,\n parentEntityId VARCHAR,\n parentEntityName 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 traceId VARCHAR,\n spanId VARCHAR,\n experimentId VARCHAR,\n -- Entity hierarchy\n entityType VARCHAR,\n entityId VARCHAR,\n entityName VARCHAR,\n parentEntityType VARCHAR,\n parentEntityId VARCHAR,\n parentEntityName 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 // Metrics\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 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 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 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 'parentEntityType',\n 'parentEntityId',\n 'parentEntityName',\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 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 parentEntityType: (row.parentEntityType as string) ?? null,\n parentEntityId: (row.parentEntityId as string) ?? null,\n parentEntityName: (row.parentEntityName 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 timestamp, traceId, spanId, experimentId,\n entityType, entityId, entityName, parentEntityType, parentEntityId, parentEntityName, 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.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.parentEntityType ?? null),\n v(f.parentEntityId ?? null),\n v(f.parentEntityName ?? 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 );\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.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.parentEntityType ?? null),\n v(legacyFeedback.parentEntityId ?? null),\n v(legacyFeedback.parentEntityName ?? 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 timestamp, traceId, spanId, experimentId,\n entityType, entityId, entityName, parentEntityType, parentEntityId, parentEntityName, 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 );\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 'timestamp',\n 'level',\n 'message',\n 'data',\n 'traceId',\n 'spanId',\n 'entityType',\n 'entityId',\n 'entityName',\n 'parentEntityType',\n 'parentEntityId',\n 'parentEntityName',\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 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 parentEntityType: (row.parentEntityType as string) ?? null,\n parentEntityId: (row.parentEntityId as string) ?? null,\n parentEntityName: (row.parentEntityName 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.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.parentEntityType ?? null),\n v(log.parentEntityId ?? null),\n v(log.parentEntityName ?? 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')}`);\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 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} 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 getAggregationSql(aggregation: AggregationType, measure = 'value'): 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 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 'timestamp',\n 'name',\n 'value',\n 'traceId',\n 'spanId',\n 'entityType',\n 'entityId',\n 'entityName',\n 'parentEntityType',\n 'parentEntityId',\n 'parentEntityName',\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 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 parentEntityType: (row.parentEntityType as string) ?? null,\n parentEntityId: (row.parentEntityId as string) ?? null,\n parentEntityName: (row.parentEntityName 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.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.parentEntityType ?? null),\n v(m.parentEntityId ?? null),\n v(m.parentEntityName ?? 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(`INSERT INTO metric_events (${METRIC_COLUMNS_SQL}) VALUES ${tuples.join(',\\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);\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);\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 const sql = `SELECT ${selectGroupBy}, ${aggSql} AS value, ${getCostSummarySelect()} FROM metric_events ${whereClause} GROUP BY ${groupByCols} ORDER BY value DESC`;\n const rows = await db.query<Record<string, unknown>>(sql, allParams);\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);\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 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 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 'parentEntityType',\n 'parentEntityId',\n 'parentEntityName',\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 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 parentEntityType: (row.parentEntityType as string) ?? null,\n parentEntityId: (row.parentEntityId as string) ?? null,\n parentEntityName: (row.parentEntityName 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 timestamp, traceId, spanId, experimentId, scoreTraceId,\n entityType, entityId, entityName, parentEntityType, parentEntityId, parentEntityName, 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.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.parentEntityType ?? null),\n v(s.parentEntityId ?? null),\n v(s.parentEntityName ?? 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 );\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.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.parentEntityType ?? null),\n v(legacyScore.parentEntityId ?? null),\n v(legacyScore.parentEntityName ?? 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 timestamp, traceId, spanId, experimentId, scoreTraceId,\n entityType, entityId, entityName, parentEntityType, parentEntityId, parentEntityName, 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 );\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 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 GetRootSpanArgs,\n GetRootSpanResponse,\n GetTraceArgs,\n GetTraceResponse,\n ListTracesArgs,\n ListTracesResponse,\n BatchCreateSpansArgs,\n BatchDeleteTracesArgs,\n SpanRecord,\n} from '@mastra/core/storage';\nimport { 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 '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('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\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 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 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.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 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 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/** 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","import { ObservabilityStorage } from '@mastra/core/storage';\nimport type {\n CreateSpanArgs,\n GetSpanArgs,\n GetSpanResponse,\n GetRootSpanArgs,\n GetRootSpanResponse,\n GetTraceArgs,\n GetTraceResponse,\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 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 * as scoreOps from './scores';\nimport * as tracingOps from './tracing';\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 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 /** 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' as const,\n supported: ['event-sourced' as const],\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 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 listTraces(args: ListTracesArgs): Promise<ListTracesResponse> {\n return tracingOps.listTraces(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 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"]}