@mastra/pg 1.14.0-alpha.0 → 1.14.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,31 @@
1
1
  # @mastra/pg
2
2
 
3
+ ## 1.14.1-alpha.0
4
+
5
+ ### Patch Changes
6
+
7
+ - Fixed `PostgresStore.init()` failing with "RoutingDbClient already has a pinned client" when a single store is shared across concurrent requests (for example, request-scoped Mastra instances reusing one store/pool). Concurrent `init()` calls are now coalesced into a single shared initialization instead of each pinning the client. ([#18336](https://github.com/mastra-ai/mastra/pull/18336))
8
+
9
+ Also, `init()` is now a no-op when `disableInit: true`, so apps that manage their database schema externally are no longer forced through the connect-and-pin path.
10
+
11
+ - Fixed: `mastra build` output no longer hangs on the first storage-touching request when an app uses `LibSQLStore`, `PostgresStore`, or `MySQLStore` with observational memory. `mastra dev` was unaffected; only the bundled `mastra start` output deadlocked. No code changes or `bundler.externals` workaround required on the app side after upgrading. ([#18302](https://github.com/mastra-ai/mastra/pull/18302))
12
+
13
+ - Added storage for item-level tool mocks. Dataset items persist their `toolMocks` and experiment results persist their `toolMockReport`, so mocks and run diagnostics survive across sessions. ([#18036](https://github.com/mastra-ai/mastra/pull/18036))
14
+
15
+ - Updated dependencies [[`65f255a`](https://github.com/mastra-ai/mastra/commit/65f255a38667beb6ceeadabfa9eb5059bfec8298), [`4a88c6e`](https://github.com/mastra-ai/mastra/commit/4a88c6e2bdce316f8d7551b4ec3449b0b06fc71c), [`87a17ef`](https://github.com/mastra-ai/mastra/commit/87a17efbd725aca6639febdc5e69e2abb3048689), [`e11ff30`](https://github.com/mastra-ai/mastra/commit/e11ff301408bf1731dca2fb7fbfcd8c819500a35), [`9d2c946`](https://github.com/mastra-ai/mastra/commit/9d2c946d0859e90ae4bcec5beeb1da7398d2ad1e), [`f1ec385`](https://github.com/mastra-ai/mastra/commit/f1ec385386f62b1a0847ec5353ae2bb169d1c3d9), [`e14986f`](https://github.com/mastra-ai/mastra/commit/e14986f6e5478d6384d04ff9a7f9a79a46a8b529), [`0be490f`](https://github.com/mastra-ai/mastra/commit/0be490fabb538c5a7de796ea0aff7d04a0bea1f3), [`0be490f`](https://github.com/mastra-ai/mastra/commit/0be490fabb538c5a7de796ea0aff7d04a0bea1f3), [`974f614`](https://github.com/mastra-ai/mastra/commit/974f614e083bd68278536f94453f7b320b86a3c7), [`31be1cf`](https://github.com/mastra-ai/mastra/commit/31be1cf5f2a7b5eef12f6123a40653b4d8115c16)]:
16
+ - @mastra/core@1.46.0-alpha.3
17
+
18
+ ## 1.14.0
19
+
20
+ ### Minor Changes
21
+
22
+ - Random bump ([#18178](https://github.com/mastra-ai/mastra/pull/18178))
23
+
24
+ ### Patch Changes
25
+
26
+ - Updated dependencies [[`7c0d868`](https://github.com/mastra-ai/mastra/commit/7c0d868d97d0fdbc04c14d0166dbf44d4c5a4a62), [`d9d2273`](https://github.com/mastra-ai/mastra/commit/d9d2273c702690c9a26eab2aebea879701d4355a), [`b04369d`](https://github.com/mastra-ai/mastra/commit/b04369d6b167c698ef103981171a8bf92808e756), [`8f3c262`](https://github.com/mastra-ai/mastra/commit/8f3c262587b335588a02d96b17fd6aca34c885b3)]:
27
+ - @mastra/core@1.45.0
28
+
3
29
  ## 1.14.0-alpha.0
4
30
 
5
31
  ### Minor Changes
@@ -3,7 +3,7 @@ name: mastra-pg
3
3
  description: Documentation for @mastra/pg. Use when working with @mastra/pg APIs, configuration, or implementation.
4
4
  metadata:
5
5
  package: "@mastra/pg"
6
- version: "1.14.0-alpha.0"
6
+ version: "1.14.1-alpha.0"
7
7
  ---
8
8
 
9
9
  ## When to use
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.14.0-alpha.0",
2
+ "version": "1.14.1-alpha.0",
3
3
  "package": "@mastra/pg",
4
4
  "exports": {},
5
5
  "modules": {}
package/dist/index.cjs CHANGED
@@ -5209,6 +5209,7 @@ var DatasetsPG = class _DatasetsPG extends storage.DatasetsStorage {
5209
5209
  await this.#addColumnIfNotExists(storage.TABLE_DATASET_ITEMS, "requestContext", "JSONB");
5210
5210
  await this.#addColumnIfNotExists(storage.TABLE_DATASET_ITEMS, "source", "JSONB");
5211
5211
  await this.#addColumnIfNotExists(storage.TABLE_DATASET_ITEMS, "expectedTrajectory", "JSONB");
5212
+ await this.#addColumnIfNotExists(storage.TABLE_DATASET_ITEMS, "toolMocks", "JSONB");
5212
5213
  await this.createDefaultIndexes();
5213
5214
  await this.createCustomIndexes();
5214
5215
  }
@@ -5292,6 +5293,7 @@ var DatasetsPG = class _DatasetsPG extends storage.DatasetsStorage {
5292
5293
  input: storage.safelyParseJSON(row.input),
5293
5294
  groundTruth: row.groundTruth ? storage.safelyParseJSON(row.groundTruth) : void 0,
5294
5295
  expectedTrajectory: row.expectedTrajectory ? storage.safelyParseJSON(row.expectedTrajectory) : void 0,
5296
+ toolMocks: row.toolMocks ? storage.safelyParseJSON(row.toolMocks) : void 0,
5295
5297
  requestContext: row.requestContext ? storage.safelyParseJSON(row.requestContext) : void 0,
5296
5298
  metadata: row.metadata ? storage.safelyParseJSON(row.metadata) : void 0,
5297
5299
  source: row.source ? storage.safelyParseJSON(row.source) : void 0,
@@ -5309,6 +5311,7 @@ var DatasetsPG = class _DatasetsPG extends storage.DatasetsStorage {
5309
5311
  input: storage.safelyParseJSON(row.input),
5310
5312
  groundTruth: row.groundTruth ? storage.safelyParseJSON(row.groundTruth) : void 0,
5311
5313
  expectedTrajectory: row.expectedTrajectory ? storage.safelyParseJSON(row.expectedTrajectory) : void 0,
5314
+ toolMocks: row.toolMocks ? storage.safelyParseJSON(row.toolMocks) : void 0,
5312
5315
  requestContext: row.requestContext ? storage.safelyParseJSON(row.requestContext) : void 0,
5313
5316
  metadata: row.metadata ? storage.safelyParseJSON(row.metadata) : void 0,
5314
5317
  source: row.source ? storage.safelyParseJSON(row.source) : void 0,
@@ -5578,7 +5581,7 @@ var DatasetsPG = class _DatasetsPG extends storage.DatasetsStorage {
5578
5581
  );
5579
5582
  newVersion = row.version;
5580
5583
  await t.none(
5581
- `INSERT INTO ${itemsTable} ("id","datasetId","datasetVersion","validTo","isDeleted","input","groundTruth","expectedTrajectory","requestContext","metadata","source","createdAt","createdAtZ","updatedAt","updatedAtZ") VALUES ($1,$2,$3,NULL,false,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13)`,
5584
+ `INSERT INTO ${itemsTable} ("id","datasetId","datasetVersion","validTo","isDeleted","input","groundTruth","expectedTrajectory","toolMocks","requestContext","metadata","source","createdAt","createdAtZ","updatedAt","updatedAtZ") VALUES ($1,$2,$3,NULL,false,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14)`,
5582
5585
  [
5583
5586
  id,
5584
5587
  args.datasetId,
@@ -5586,6 +5589,7 @@ var DatasetsPG = class _DatasetsPG extends storage.DatasetsStorage {
5586
5589
  JSON.stringify(args.input),
5587
5590
  jsonbArg(args.groundTruth),
5588
5591
  jsonbArg(args.expectedTrajectory),
5592
+ jsonbArg(args.toolMocks),
5589
5593
  jsonbArg(args.requestContext),
5590
5594
  jsonbArg(args.metadata),
5591
5595
  jsonbArg(args.source),
@@ -5607,6 +5611,7 @@ var DatasetsPG = class _DatasetsPG extends storage.DatasetsStorage {
5607
5611
  input: args.input,
5608
5612
  groundTruth: args.groundTruth,
5609
5613
  expectedTrajectory: args.expectedTrajectory,
5614
+ toolMocks: args.toolMocks,
5610
5615
  requestContext: args.requestContext,
5611
5616
  metadata: args.metadata,
5612
5617
  source: args.source,
@@ -5656,6 +5661,7 @@ var DatasetsPG = class _DatasetsPG extends storage.DatasetsStorage {
5656
5661
  const mergedInput = args.input !== void 0 ? args.input : existing.input;
5657
5662
  const mergedGroundTruth = args.groundTruth !== void 0 ? args.groundTruth : existing.groundTruth;
5658
5663
  const mergedExpectedTrajectory = args.expectedTrajectory !== void 0 ? args.expectedTrajectory : existing.expectedTrajectory;
5664
+ const mergedToolMocks = args.toolMocks !== void 0 ? args.toolMocks : existing.toolMocks;
5659
5665
  const mergedRequestContext = args.requestContext !== void 0 ? args.requestContext : existing.requestContext;
5660
5666
  const mergedMetadata = args.metadata !== void 0 ? args.metadata : existing.metadata;
5661
5667
  const mergedSource = args.source !== void 0 ? args.source : existing.source;
@@ -5671,7 +5677,7 @@ var DatasetsPG = class _DatasetsPG extends storage.DatasetsStorage {
5671
5677
  [newVersion, args.id]
5672
5678
  );
5673
5679
  await t.none(
5674
- `INSERT INTO ${itemsTable} ("id","datasetId","datasetVersion","validTo","isDeleted","input","groundTruth","expectedTrajectory","requestContext","metadata","source","createdAt","createdAtZ","updatedAt","updatedAtZ") VALUES ($1,$2,$3,NULL,false,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13)`,
5680
+ `INSERT INTO ${itemsTable} ("id","datasetId","datasetVersion","validTo","isDeleted","input","groundTruth","expectedTrajectory","toolMocks","requestContext","metadata","source","createdAt","createdAtZ","updatedAt","updatedAtZ") VALUES ($1,$2,$3,NULL,false,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14)`,
5675
5681
  [
5676
5682
  args.id,
5677
5683
  args.datasetId,
@@ -5679,6 +5685,7 @@ var DatasetsPG = class _DatasetsPG extends storage.DatasetsStorage {
5679
5685
  JSON.stringify(mergedInput),
5680
5686
  jsonbArg(mergedGroundTruth),
5681
5687
  jsonbArg(mergedExpectedTrajectory),
5688
+ jsonbArg(mergedToolMocks),
5682
5689
  jsonbArg(mergedRequestContext),
5683
5690
  jsonbArg(mergedMetadata),
5684
5691
  jsonbArg(mergedSource),
@@ -5699,6 +5706,7 @@ var DatasetsPG = class _DatasetsPG extends storage.DatasetsStorage {
5699
5706
  input: mergedInput,
5700
5707
  groundTruth: mergedGroundTruth,
5701
5708
  expectedTrajectory: mergedExpectedTrajectory,
5709
+ toolMocks: mergedToolMocks,
5702
5710
  requestContext: mergedRequestContext,
5703
5711
  metadata: mergedMetadata,
5704
5712
  source: mergedSource,
@@ -5747,7 +5755,7 @@ var DatasetsPG = class _DatasetsPG extends storage.DatasetsStorage {
5747
5755
  [newVersion, id]
5748
5756
  );
5749
5757
  await t.none(
5750
- `INSERT INTO ${itemsTable} ("id","datasetId","datasetVersion","validTo","isDeleted","input","groundTruth","expectedTrajectory","requestContext","metadata","source","createdAt","createdAtZ","updatedAt","updatedAtZ") VALUES ($1,$2,$3,NULL,true,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13)`,
5758
+ `INSERT INTO ${itemsTable} ("id","datasetId","datasetVersion","validTo","isDeleted","input","groundTruth","expectedTrajectory","toolMocks","requestContext","metadata","source","createdAt","createdAtZ","updatedAt","updatedAtZ") VALUES ($1,$2,$3,NULL,true,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14)`,
5751
5759
  [
5752
5760
  id,
5753
5761
  datasetId,
@@ -5755,6 +5763,7 @@ var DatasetsPG = class _DatasetsPG extends storage.DatasetsStorage {
5755
5763
  JSON.stringify(existing.input),
5756
5764
  jsonbArg(existing.groundTruth),
5757
5765
  jsonbArg(existing.expectedTrajectory),
5766
+ jsonbArg(existing.toolMocks),
5758
5767
  jsonbArg(existing.requestContext),
5759
5768
  jsonbArg(existing.metadata),
5760
5769
  jsonbArg(existing.source),
@@ -5811,7 +5820,7 @@ var DatasetsPG = class _DatasetsPG extends storage.DatasetsStorage {
5811
5820
  newVersion = row.version;
5812
5821
  for (const { id, input: itemInput } of itemsWithIds) {
5813
5822
  await t.none(
5814
- `INSERT INTO ${itemsTable} ("id","datasetId","datasetVersion","validTo","isDeleted","input","groundTruth","expectedTrajectory","requestContext","metadata","source","createdAt","createdAtZ","updatedAt","updatedAtZ") VALUES ($1,$2,$3,NULL,false,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13)`,
5823
+ `INSERT INTO ${itemsTable} ("id","datasetId","datasetVersion","validTo","isDeleted","input","groundTruth","expectedTrajectory","toolMocks","requestContext","metadata","source","createdAt","createdAtZ","updatedAt","updatedAtZ") VALUES ($1,$2,$3,NULL,false,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14)`,
5815
5824
  [
5816
5825
  id,
5817
5826
  input.datasetId,
@@ -5819,6 +5828,7 @@ var DatasetsPG = class _DatasetsPG extends storage.DatasetsStorage {
5819
5828
  JSON.stringify(itemInput.input),
5820
5829
  jsonbArg(itemInput.groundTruth),
5821
5830
  jsonbArg(itemInput.expectedTrajectory),
5831
+ jsonbArg(itemInput.toolMocks),
5822
5832
  jsonbArg(itemInput.requestContext),
5823
5833
  jsonbArg(itemInput.metadata),
5824
5834
  jsonbArg(itemInput.source),
@@ -5841,6 +5851,7 @@ var DatasetsPG = class _DatasetsPG extends storage.DatasetsStorage {
5841
5851
  input: itemInput.input,
5842
5852
  groundTruth: itemInput.groundTruth,
5843
5853
  expectedTrajectory: itemInput.expectedTrajectory,
5854
+ toolMocks: itemInput.toolMocks,
5844
5855
  requestContext: itemInput.requestContext,
5845
5856
  metadata: itemInput.metadata,
5846
5857
  source: itemInput.source,
@@ -5898,7 +5909,7 @@ var DatasetsPG = class _DatasetsPG extends storage.DatasetsStorage {
5898
5909
  [newVersion, item.id]
5899
5910
  );
5900
5911
  await t.none(
5901
- `INSERT INTO ${itemsTable} ("id","datasetId","datasetVersion","validTo","isDeleted","input","groundTruth","expectedTrajectory","requestContext","metadata","source","createdAt","createdAtZ","updatedAt","updatedAtZ") VALUES ($1,$2,$3,NULL,true,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13)`,
5912
+ `INSERT INTO ${itemsTable} ("id","datasetId","datasetVersion","validTo","isDeleted","input","groundTruth","expectedTrajectory","toolMocks","requestContext","metadata","source","createdAt","createdAtZ","updatedAt","updatedAtZ") VALUES ($1,$2,$3,NULL,true,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14)`,
5902
5913
  [
5903
5914
  item.id,
5904
5915
  input.datasetId,
@@ -5906,6 +5917,7 @@ var DatasetsPG = class _DatasetsPG extends storage.DatasetsStorage {
5906
5917
  JSON.stringify(item.input),
5907
5918
  jsonbArg(item.groundTruth),
5908
5919
  jsonbArg(item.expectedTrajectory),
5920
+ jsonbArg(item.toolMocks),
5909
5921
  jsonbArg(item.requestContext),
5910
5922
  jsonbArg(item.metadata),
5911
5923
  jsonbArg(item.source),
@@ -6166,7 +6178,7 @@ var ExperimentsPG = class _ExperimentsPG extends storage.ExperimentsStorage {
6166
6178
  await this.#db.alterTable({
6167
6179
  tableName: storage.TABLE_EXPERIMENT_RESULTS,
6168
6180
  schema: storage.EXPERIMENT_RESULTS_SCHEMA,
6169
- ifNotExists: ["status", "tags"]
6181
+ ifNotExists: ["status", "tags", "toolMockReport"]
6170
6182
  });
6171
6183
  await this.createDefaultIndexes();
6172
6184
  await this.createCustomIndexes();
@@ -6242,6 +6254,7 @@ var ExperimentsPG = class _ExperimentsPG extends storage.ExperimentsStorage {
6242
6254
  traceId: row.traceId ?? null,
6243
6255
  status: row.status ?? null,
6244
6256
  tags: row.tags ? storage.safelyParseJSON(row.tags) : null,
6257
+ toolMockReport: row.toolMockReport ? storage.safelyParseJSON(row.toolMockReport) : null,
6245
6258
  createdAt: storage.ensureDate(row.createdAtZ || row.createdAt)
6246
6259
  };
6247
6260
  }
@@ -6502,6 +6515,7 @@ var ExperimentsPG = class _ExperimentsPG extends storage.ExperimentsStorage {
6502
6515
  traceId: input.traceId ?? null,
6503
6516
  status: input.status ?? null,
6504
6517
  tags: input.tags ?? null,
6518
+ toolMockReport: input.toolMockReport ?? null,
6505
6519
  createdAt: nowIso
6506
6520
  }
6507
6521
  });
@@ -6520,6 +6534,7 @@ var ExperimentsPG = class _ExperimentsPG extends storage.ExperimentsStorage {
6520
6534
  traceId: input.traceId ?? null,
6521
6535
  status: input.status ?? null,
6522
6536
  tags: input.tags ?? null,
6537
+ toolMockReport: input.toolMockReport ?? null,
6523
6538
  createdAt: now
6524
6539
  };
6525
6540
  } catch (error$1) {
@@ -8309,12 +8324,7 @@ var MemoryPG = class _MemoryPG extends storage.MemoryStorage {
8309
8324
  await this.#db.createTable({ tableName: storage.TABLE_THREADS, schema: storage.TABLE_SCHEMAS[storage.TABLE_THREADS] });
8310
8325
  await this.#db.createTable({ tableName: storage.TABLE_MESSAGES, schema: storage.TABLE_SCHEMAS[storage.TABLE_MESSAGES] });
8311
8326
  await this.#db.createTable({ tableName: storage.TABLE_RESOURCES, schema: storage.TABLE_SCHEMAS[storage.TABLE_RESOURCES] });
8312
- let omSchema;
8313
- try {
8314
- const { OBSERVATIONAL_MEMORY_TABLE_SCHEMA } = await import('@mastra/core/storage');
8315
- omSchema = OBSERVATIONAL_MEMORY_TABLE_SCHEMA?.[OM_TABLE];
8316
- } catch {
8317
- }
8327
+ const omSchema = _omTableSchema?.[OM_TABLE];
8318
8328
  if (omSchema) {
8319
8329
  await this.#db.createTable({
8320
8330
  tableName: OM_TABLE,
@@ -19172,6 +19182,9 @@ var PostgresStore = class extends storage.MastraCompositeStore {
19172
19182
  #poolClosed = false;
19173
19183
  schema;
19174
19184
  isInitialized = false;
19185
+ // Caches the in-flight init() so concurrent callers share one initialization
19186
+ // instead of each acquiring + pinning a client. See init() / issue #18282.
19187
+ #initPromise = null;
19175
19188
  stores;
19176
19189
  constructor(config) {
19177
19190
  try {
@@ -19238,16 +19251,25 @@ var PostgresStore = class extends storage.MastraCompositeStore {
19238
19251
  throw new Error("PostgresStore: invalid config");
19239
19252
  }
19240
19253
  async init() {
19254
+ if (this.disableInit || process.env.MASTRA_DISABLE_STORAGE_INIT === "true") {
19255
+ return;
19256
+ }
19241
19257
  if (this.isInitialized) {
19242
19258
  return;
19243
19259
  }
19244
- const pinnedClient = await this.#pool.connect();
19245
- const pinned = new PinnedClientAdapter(this.#pool, pinnedClient);
19260
+ this.#initPromise ??= this.#runPinnedInit();
19261
+ await this.#initPromise;
19262
+ }
19263
+ async #runPinnedInit() {
19264
+ let pinnedClient;
19246
19265
  try {
19266
+ pinnedClient = await this.#pool.connect();
19267
+ const pinned = new PinnedClientAdapter(this.#pool, pinnedClient);
19247
19268
  this.#db.pin(pinned);
19248
19269
  await super.init();
19249
19270
  this.isInitialized = true;
19250
19271
  } catch (error$1) {
19272
+ this.#initPromise = null;
19251
19273
  if (error$1 instanceof error.MastraError) {
19252
19274
  throw error$1;
19253
19275
  }
@@ -19260,8 +19282,10 @@ var PostgresStore = class extends storage.MastraCompositeStore {
19260
19282
  error$1
19261
19283
  );
19262
19284
  } finally {
19263
- this.#db.unpin();
19264
- pinnedClient.release();
19285
+ if (pinnedClient) {
19286
+ this.#db.unpin();
19287
+ pinnedClient.release();
19288
+ }
19265
19289
  }
19266
19290
  }
19267
19291
  /**