@mastra/pg 1.27.0-alpha.0 → 1.27.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -5642,6 +5642,19 @@ var ChannelsPG = class ChannelsPG extends ChannelsStorage {
5642
5642
  function jsonbArg(value) {
5643
5643
  return value === void 0 || value === null ? null : JSON.stringify(value);
5644
5644
  }
5645
+ /** Preserve JSON null as data, rather than converting it to an absent SQL value. */
5646
+ function jsonDataArg(value) {
5647
+ return value === void 0 ? null : JSON.stringify(value);
5648
+ }
5649
+ const ITEM_SELECT_COLUMNS = [
5650
+ ...Object.keys(DATASET_ITEMS_SCHEMA),
5651
+ "createdAtZ",
5652
+ "updatedAtZ"
5653
+ ].map((column) => [
5654
+ "input",
5655
+ "groundTruth",
5656
+ "expectedTrajectory"
5657
+ ].includes(column) ? `"${column}"::text AS "${column}"` : `"${column}"`).join(", ");
5645
5658
  function parseStoredJSON(value) {
5646
5659
  if (typeof value === "string") try {
5647
5660
  return JSON.parse(value);
@@ -5816,9 +5829,9 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
5816
5829
  groundTruthSchema: row.groundTruthSchema ? safelyParseJSON(row.groundTruthSchema) : void 0,
5817
5830
  requestContextSchema: row.requestContextSchema ? safelyParseJSON(row.requestContextSchema) : void 0,
5818
5831
  tags: row.tags ? safelyParseJSON(row.tags) : void 0,
5819
- targetType: row.targetType || null,
5820
- targetIds: row.targetIds || null,
5821
- scorerIds: row.scorerIds || null,
5832
+ targetType: row.targetType || void 0,
5833
+ targetIds: row.targetIds ?? void 0,
5834
+ scorerIds: row.scorerIds ?? void 0,
5822
5835
  organizationId: row.organizationId ?? null,
5823
5836
  projectId: row.projectId ?? null,
5824
5837
  candidateKey: row.candidateKey ?? null,
@@ -5920,9 +5933,9 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
5920
5933
  inputSchema: input.inputSchema ?? void 0,
5921
5934
  groundTruthSchema: input.groundTruthSchema ?? void 0,
5922
5935
  requestContextSchema: input.requestContextSchema ?? void 0,
5923
- targetType: input.targetType ?? null,
5924
- targetIds: input.targetIds ?? null,
5925
- scorerIds: input.scorerIds ?? null,
5936
+ targetType: input.targetType ?? void 0,
5937
+ targetIds: input.targetIds ?? void 0,
5938
+ scorerIds: input.scorerIds ?? void 0,
5926
5939
  organizationId: input.organizationId ?? null,
5927
5940
  projectId: input.projectId ?? null,
5928
5941
  candidateKey: input.candidateKey ?? null,
@@ -6049,9 +6062,9 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
6049
6062
  groundTruthSchema: (args.groundTruthSchema !== void 0 ? args.groundTruthSchema : existing.groundTruthSchema) ?? void 0,
6050
6063
  requestContextSchema: (args.requestContextSchema !== void 0 ? args.requestContextSchema : existing.requestContextSchema) ?? void 0,
6051
6064
  tags: (args.tags !== void 0 ? args.tags : existing.tags) ?? void 0,
6052
- targetType: (args.targetType !== void 0 ? args.targetType : existing.targetType) ?? null,
6053
- targetIds: (args.targetIds !== void 0 ? args.targetIds : existing.targetIds) ?? null,
6054
- scorerIds: (args.scorerIds !== void 0 ? args.scorerIds : existing.scorerIds) ?? null,
6065
+ targetType: (args.targetType !== void 0 ? args.targetType : existing.targetType) ?? void 0,
6066
+ targetIds: (args.targetIds !== void 0 ? args.targetIds : existing.targetIds) ?? void 0,
6067
+ scorerIds: (args.scorerIds !== void 0 ? args.scorerIds : existing.scorerIds) ?? void 0,
6055
6068
  organizationId: existing.organizationId ?? null,
6056
6069
  projectId: existing.projectId ?? null,
6057
6070
  candidateKey: existing.candidateKey ?? null,
@@ -6229,8 +6242,8 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
6229
6242
  parentOrganizationId,
6230
6243
  parentProjectId,
6231
6244
  JSON.stringify(args.input),
6232
- jsonbArg(args.groundTruth),
6233
- jsonbArg(args.expectedTrajectory),
6245
+ jsonDataArg(args.groundTruth),
6246
+ jsonDataArg(args.expectedTrajectory),
6234
6247
  jsonbArg(args.toolMocks),
6235
6248
  args.unmockedToolPolicy ?? null,
6236
6249
  jsonbArg(args.scorerIds),
@@ -6346,8 +6359,8 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
6346
6359
  parentOrganizationId,
6347
6360
  parentProjectId,
6348
6361
  JSON.stringify(mergedInput),
6349
- jsonbArg(mergedGroundTruth),
6350
- jsonbArg(mergedExpectedTrajectory),
6362
+ jsonDataArg(mergedGroundTruth),
6363
+ jsonDataArg(mergedExpectedTrajectory),
6351
6364
  jsonbArg(mergedToolMocks),
6352
6365
  mergedUnmockedToolPolicy ?? null,
6353
6366
  jsonbArg(mergedScorerIds),
@@ -6436,8 +6449,8 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
6436
6449
  parentOrganizationId,
6437
6450
  parentProjectId,
6438
6451
  JSON.stringify(existing.input),
6439
- jsonbArg(existing.groundTruth),
6440
- jsonbArg(existing.expectedTrajectory),
6452
+ jsonDataArg(existing.groundTruth),
6453
+ jsonDataArg(existing.expectedTrajectory),
6441
6454
  jsonbArg(existing.toolMocks),
6442
6455
  existing.unmockedToolPolicy ?? null,
6443
6456
  jsonbArg(existing.scorerIds),
@@ -6537,7 +6550,7 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
6537
6550
  details: { datasetId: input.datasetId }
6538
6551
  });
6539
6552
  const externalIds = [...new Set(input.items.flatMap((item) => item.externalId ? [item.externalId] : []))];
6540
- const historyRows = externalIds.length ? await t.manyOrNone(`SELECT * FROM ${itemsTable} WHERE "datasetId" = $1 AND "externalId" = ANY($2::text[]) ORDER BY "datasetVersion"`, [input.datasetId, externalIds]) : [];
6553
+ const historyRows = externalIds.length ? await t.manyOrNone(`SELECT ${ITEM_SELECT_COLUMNS} FROM ${itemsTable} WHERE "datasetId" = $1 AND "externalId" = ANY($2::text[]) ORDER BY "datasetVersion"`, [input.datasetId, externalIds]) : [];
6541
6554
  const plan = this.planDatasetItemBatch(input.items, historyRows.map((row) => this.transformItemRowFull(row)), () => crypto.randomUUID());
6542
6555
  const resolved = new Map([...plan.existingCurrentItems].map(([id, row]) => [id, this.datasetItemFromRow(row)]));
6543
6556
  if (plan.inserts.length > 0) {
@@ -6554,8 +6567,8 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
6554
6567
  dataset.organizationId ?? null,
6555
6568
  dataset.projectId ?? null,
6556
6569
  JSON.stringify(item.input),
6557
- jsonbArg(item.groundTruth),
6558
- jsonbArg(item.expectedTrajectory),
6570
+ jsonDataArg(item.groundTruth),
6571
+ jsonDataArg(item.expectedTrajectory),
6559
6572
  jsonbArg(item.toolMocks),
6560
6573
  item.unmockedToolPolicy ?? null,
6561
6574
  jsonbArg(item.scorerIds),
@@ -6632,7 +6645,7 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
6632
6645
  category: ErrorCategory.USER,
6633
6646
  details: { datasetId: input.datasetId }
6634
6647
  });
6635
- const currentItems = (await t.manyOrNone(`SELECT * FROM ${itemsTable} WHERE "id" = ANY($1::text[]) AND "datasetId" = $2 AND "validTo" IS NULL AND "isDeleted" = false`, [input.itemIds, input.datasetId])).map((row) => this.transformItemRow(row));
6648
+ const currentItems = (await t.manyOrNone(`SELECT ${ITEM_SELECT_COLUMNS} FROM ${itemsTable} WHERE "id" = ANY($1::text[]) AND "datasetId" = $2 AND "validTo" IS NULL AND "isDeleted" = false`, [input.itemIds, input.datasetId])).map((row) => this.transformItemRow(row));
6636
6649
  if (currentItems.length === 0) return;
6637
6650
  const parentOrganizationId = dataset.organizationId ?? null;
6638
6651
  const parentProjectId = dataset.projectId ?? null;
@@ -6647,8 +6660,8 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
6647
6660
  parentOrganizationId,
6648
6661
  parentProjectId,
6649
6662
  JSON.stringify(item.input),
6650
- jsonbArg(item.groundTruth),
6651
- jsonbArg(item.expectedTrajectory),
6663
+ jsonDataArg(item.groundTruth),
6664
+ jsonDataArg(item.expectedTrajectory),
6652
6665
  jsonbArg(item.toolMocks),
6653
6666
  item.unmockedToolPolicy ?? null,
6654
6667
  jsonbArg(item.scorerIds),
@@ -6688,8 +6701,8 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
6688
6701
  schemaName: getSchemaName$5(this.#schema)
6689
6702
  });
6690
6703
  let result;
6691
- if (args.datasetVersion !== void 0) result = await client.oneOrNone(`SELECT * FROM ${tableName} WHERE "id" = $1 AND "datasetVersion" <= $2 AND ("validTo" IS NULL OR "validTo" > $2) AND "isDeleted" = false ORDER BY "datasetVersion" DESC LIMIT 1`, [args.id, args.datasetVersion]);
6692
- else result = await client.oneOrNone(`SELECT * FROM ${tableName} WHERE "id" = $1 AND "validTo" IS NULL AND "isDeleted" = false`, [args.id]);
6704
+ if (args.datasetVersion !== void 0) result = await client.oneOrNone(`SELECT ${ITEM_SELECT_COLUMNS} FROM ${tableName} WHERE "id" = $1 AND "datasetVersion" <= $2 AND ("validTo" IS NULL OR "validTo" > $2) AND "isDeleted" = false ORDER BY "datasetVersion" DESC LIMIT 1`, [args.id, args.datasetVersion]);
6705
+ else result = await client.oneOrNone(`SELECT ${ITEM_SELECT_COLUMNS} FROM ${tableName} WHERE "id" = $1 AND "validTo" IS NULL AND "isDeleted" = false`, [args.id]);
6693
6706
  return result ? this.transformItemRow(result) : null;
6694
6707
  } catch (error) {
6695
6708
  throw new MastraError({
@@ -6705,7 +6718,7 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
6705
6718
  indexName: TABLE_DATASET_ITEMS,
6706
6719
  schemaName: getSchemaName$5(this.#schema)
6707
6720
  });
6708
- return (await this.#db.readClient.manyOrNone(`SELECT * FROM ${tableName} WHERE "datasetId" = $1 AND "datasetVersion" <= $2 AND ("validTo" IS NULL OR "validTo" > $3) AND "isDeleted" = false ORDER BY "createdAt" DESC, "id" ASC`, [
6721
+ return (await this.#db.readClient.manyOrNone(`SELECT ${ITEM_SELECT_COLUMNS} FROM ${tableName} WHERE "datasetId" = $1 AND "datasetVersion" <= $2 AND ("validTo" IS NULL OR "validTo" > $3) AND "isDeleted" = false ORDER BY "createdAt" DESC, "id" ASC`, [
6709
6722
  datasetId,
6710
6723
  version,
6711
6724
  version
@@ -6724,7 +6737,7 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
6724
6737
  indexName: TABLE_DATASET_ITEMS,
6725
6738
  schemaName: getSchemaName$5(this.#schema)
6726
6739
  });
6727
- return (await this.#db.readClient.manyOrNone(`SELECT * FROM ${tableName} WHERE "id" = $1 ORDER BY "datasetVersion" DESC`, [itemId]) || []).map((row) => this.transformItemRowFull(row));
6740
+ return (await this.#db.readClient.manyOrNone(`SELECT ${ITEM_SELECT_COLUMNS} FROM ${tableName} WHERE "id" = $1 ORDER BY "datasetVersion" DESC`, [itemId]) || []).map((row) => this.transformItemRowFull(row));
6728
6741
  } catch (error) {
6729
6742
  throw new MastraError({
6730
6743
  id: createStorageErrorId("PG", "GET_ITEM_HISTORY", "FAILED"),
@@ -6796,7 +6809,7 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
6796
6809
  const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);
6797
6810
  const limitValue = perPageInput === false ? total : perPage;
6798
6811
  return {
6799
- items: (await client.manyOrNone(`SELECT * FROM ${tableName} ${whereClause} ORDER BY "${orderBy.field}" ${orderBy.direction}, "id" ASC LIMIT $${paramIndex} OFFSET $${paramIndex + 1}`, [
6812
+ items: (await client.manyOrNone(`SELECT ${ITEM_SELECT_COLUMNS} FROM ${tableName} ${whereClause} ORDER BY "${orderBy.field}" ${orderBy.direction}, "id" ASC LIMIT $${paramIndex} OFFSET $${paramIndex + 1}`, [
6800
6813
  ...queryParams,
6801
6814
  limitValue,
6802
6815
  offset
@@ -17246,7 +17259,8 @@ const TRACE_FIELDS = {
17246
17259
  entityName: "r.\"entityName\"",
17247
17260
  entityType: "r.\"entityType\"",
17248
17261
  environment: "r.\"environment\"",
17249
- status: TRACE_STATUS_SQL
17262
+ status: TRACE_STATUS_SQL,
17263
+ tags: "r.\"tags\""
17250
17264
  };
17251
17265
  const SPAN_FIELDS = {
17252
17266
  name: "s.\"name\"",
@@ -17348,6 +17362,19 @@ function compileScalarPredicate(predicate, registry, parameterOffset, allowMetad
17348
17362
  sql: `${field} IS ${predicate.operator === "exists" ? "NOT " : ""}NULL`,
17349
17363
  values: fieldValues
17350
17364
  };
17365
+ if (predicate.type === "collection") {
17366
+ if (predicate.operator === "includes" || predicate.operator === "notIncludes") {
17367
+ const contains = `${field} @> ARRAY[$${parameterOffset}]::text[]`;
17368
+ return {
17369
+ sql: predicate.operator === "includes" ? contains : `cardinality(${field}) > 0 AND NOT (${contains})`,
17370
+ values: [...fieldValues, predicate.value]
17371
+ };
17372
+ }
17373
+ return {
17374
+ sql: `cardinality(${field}) ${predicate.operator === "empty" ? "=" : ">"} 0`,
17375
+ values: fieldValues
17376
+ };
17377
+ }
17351
17378
  if (predicate.type === "membership") {
17352
17379
  const list = placeholders(predicate.values, parameterOffset);
17353
17380
  if (predicate.operator === "in") return {
@@ -17401,6 +17428,7 @@ function compileFeedbackScalarPredicate(predicate, parameterOffset) {
17401
17428
  };
17402
17429
  }
17403
17430
  if (predicate.field !== "value") return compileScalarPredicate(predicate, FEEDBACK_FIELDS, parameterOffset);
17431
+ if (predicate.type === "collection") throw new Error(`Unsupported trusted trace-query field: ${predicate.field}`);
17404
17432
  if (predicate.type === "presence") {
17405
17433
  const present = `(s."valueString" IS NOT NULL OR s."valueNumber" IS NOT NULL)`;
17406
17434
  return {
@@ -17784,22 +17812,23 @@ LIMIT $${values.length}`,
17784
17812
  }
17785
17813
  function compilePostgresTraceQueryValues(schema, plan) {
17786
17814
  const { ctes, values } = compilePostgresTraceScope(schema, plan, discoveryCollections(plan.predicateScope), plan.scope);
17787
- let field;
17788
- if (plan.predicateScope === "trace" && plan.path.startsWith("metadata.")) {
17815
+ let extracted;
17816
+ if (plan.predicateScope === "trace" && plan.path === "tags") extracted = `SELECT value FROM (SELECT DISTINCT r."traceId", UNNEST(r."tags") AS value FROM root_scope r) t`;
17817
+ else if (plan.predicateScope === "trace" && plan.path.startsWith("metadata.")) {
17789
17818
  const keyParameter = `$${values.length + 1}`;
17790
- field = `COALESCE(
17819
+ extracted = `SELECT COALESCE(
17791
17820
  CASE WHEN jsonb_typeof(r."metadataSearch" -> ${keyParameter}) = 'string' THEN r."metadataSearch" ->> ${keyParameter} END,
17792
17821
  CASE WHEN jsonb_typeof(r."metadataRaw" -> ${keyParameter}) = 'string' THEN NULLIF(btrim(r."metadataRaw" ->> ${keyParameter}), '') END
17793
- )`;
17822
+ )::text AS value FROM root_scope r`;
17794
17823
  values.push(plan.path.slice(9));
17795
- } else field = fieldSql(discoveryRegistry(plan.predicateScope), plan.path);
17824
+ } else extracted = `SELECT ${fieldSql(discoveryRegistry(plan.predicateScope), plan.path)}::text AS value FROM ${discoverySource(plan.predicateScope)}`;
17796
17825
  const searchParameter = values.length + 1;
17797
17826
  const search = plan.search ? `AND strpos(lower(value), lower($${searchParameter})) > 0` : "";
17798
17827
  if (plan.search) values.push(plan.search);
17799
17828
  values.push(plan.limit + 1);
17800
17829
  return {
17801
17830
  text: `WITH ${ctes.join(",\n")}, extracted AS (
17802
- SELECT ${field}::text AS value FROM ${discoverySource(plan.predicateScope)}
17831
+ ${extracted}
17803
17832
  )
17804
17833
  SELECT value, count(*)::bigint AS count
17805
17834
  FROM extracted