@mastra/cloudflare-d1 1.0.0-beta.0 → 1.0.0-beta.2

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,40 @@
1
1
  # @mastra/cloudflare-d1
2
2
 
3
+ ## 1.0.0-beta.2
4
+
5
+ ### Patch Changes
6
+
7
+ - feat(storage): support querying messages from multiple threads ([#10663](https://github.com/mastra-ai/mastra/pull/10663))
8
+ - Fixed TypeScript errors where `threadId: string | string[]` was being passed to places expecting `Scalar` type
9
+ - Added proper multi-thread support for `listMessages` across all adapters when `threadId` is an array
10
+ - Updated `_getIncludedMessages` to look up message threadId by ID (since message IDs are globally unique)
11
+ - **upstash**: Added `msg-idx:{messageId}` index for O(1) message lookups (backwards compatible with fallback to scan for old messages, with automatic backfill)
12
+
13
+ - fix: ensure score responses match saved payloads for Mastra Stores. ([#10557](https://github.com/mastra-ai/mastra/pull/10557))
14
+
15
+ - Unify transformScoreRow functions across storage adapters ([#10648](https://github.com/mastra-ai/mastra/pull/10648))
16
+
17
+ Added a unified `transformScoreRow` function in `@mastra/core/storage` that provides schema-driven row transformation for score data. This eliminates code duplication across 10 storage adapters while maintaining store-specific behavior through configurable options:
18
+ - `preferredTimestampFields`: Preferred source fields for timestamps (PostgreSQL, Cloudflare D1)
19
+ - `convertTimestamps`: Convert timestamp strings to Date objects (MSSQL, MongoDB, ClickHouse)
20
+ - `nullValuePattern`: Skip values matching pattern (ClickHouse's `'_null_'`)
21
+ - `fieldMappings`: Map source column names to schema fields (LibSQL's `additionalLLMContext`)
22
+
23
+ Each store adapter now uses the unified function with appropriate options, reducing ~200 lines of duplicate transformation logic while ensuring consistent behavior across all storage backends.
24
+
25
+ - Updated dependencies [[`ac0d2f4`](https://github.com/mastra-ai/mastra/commit/ac0d2f4ff8831f72c1c66c2be809706d17f65789), [`1a0d3fc`](https://github.com/mastra-ai/mastra/commit/1a0d3fc811482c9c376cdf79ee615c23bae9b2d6), [`85a628b`](https://github.com/mastra-ai/mastra/commit/85a628b1224a8f64cd82ea7f033774bf22df7a7e), [`c237233`](https://github.com/mastra-ai/mastra/commit/c23723399ccedf7f5744b3f40997b79246bfbe64), [`15f9e21`](https://github.com/mastra-ai/mastra/commit/15f9e216177201ea6e3f6d0bfb063fcc0953444f), [`ff94dea`](https://github.com/mastra-ai/mastra/commit/ff94dea935f4e34545c63bcb6c29804732698809), [`5b2ff46`](https://github.com/mastra-ai/mastra/commit/5b2ff4651df70c146523a7fca773f8eb0a2272f8), [`db41688`](https://github.com/mastra-ai/mastra/commit/db4168806d007417e2e60b4f68656dca4e5f40c9), [`5ca599d`](https://github.com/mastra-ai/mastra/commit/5ca599d0bb59a1595f19f58473fcd67cc71cef58), [`bff1145`](https://github.com/mastra-ai/mastra/commit/bff114556b3cbadad9b2768488708f8ad0e91475), [`5c8ca24`](https://github.com/mastra-ai/mastra/commit/5c8ca247094e0cc2cdbd7137822fb47241f86e77), [`e191844`](https://github.com/mastra-ai/mastra/commit/e1918444ca3f80e82feef1dad506cd4ec6e2875f), [`22553f1`](https://github.com/mastra-ai/mastra/commit/22553f11c63ee5e966a9c034a349822249584691), [`7237163`](https://github.com/mastra-ai/mastra/commit/72371635dbf96a87df4b073cc48fc655afbdce3d), [`2500740`](https://github.com/mastra-ai/mastra/commit/2500740ea23da067d6e50ec71c625ab3ce275e64), [`873ecbb`](https://github.com/mastra-ai/mastra/commit/873ecbb517586aa17d2f1e99283755b3ebb2863f), [`4f9bbe5`](https://github.com/mastra-ai/mastra/commit/4f9bbe5968f42c86f4930b8193de3c3c17e5bd36), [`02e51fe`](https://github.com/mastra-ai/mastra/commit/02e51feddb3d4155cfbcc42624fd0d0970d032c0), [`8f3fa3a`](https://github.com/mastra-ai/mastra/commit/8f3fa3a652bb77da092f913ec51ae46e3a7e27dc), [`cd29ad2`](https://github.com/mastra-ai/mastra/commit/cd29ad23a255534e8191f249593849ed29160886), [`bdf4d8c`](https://github.com/mastra-ai/mastra/commit/bdf4d8cdc656d8a2c21d81834bfa3bfa70f56c16), [`854e3da`](https://github.com/mastra-ai/mastra/commit/854e3dad5daac17a91a20986399d3a51f54bf68b), [`ce18d38`](https://github.com/mastra-ai/mastra/commit/ce18d38678c65870350d123955014a8432075fd9), [`cccf9c8`](https://github.com/mastra-ai/mastra/commit/cccf9c8b2d2dfc1a5e63919395b83d78c89682a0), [`61a5705`](https://github.com/mastra-ai/mastra/commit/61a570551278b6743e64243b3ce7d73de915ca8a), [`db70a48`](https://github.com/mastra-ai/mastra/commit/db70a48aeeeeb8e5f92007e8ede52c364ce15287), [`f0fdc14`](https://github.com/mastra-ai/mastra/commit/f0fdc14ee233d619266b3d2bbdeea7d25cfc6d13), [`db18bc9`](https://github.com/mastra-ai/mastra/commit/db18bc9c3825e2c1a0ad9a183cc9935f6691bfa1), [`9b37b56`](https://github.com/mastra-ai/mastra/commit/9b37b565e1f2a76c24f728945cc740c2b09be9da), [`41a23c3`](https://github.com/mastra-ai/mastra/commit/41a23c32f9877d71810f37e24930515df2ff7a0f), [`5d171ad`](https://github.com/mastra-ai/mastra/commit/5d171ad9ef340387276b77c2bb3e83e83332d729), [`f03ae60`](https://github.com/mastra-ai/mastra/commit/f03ae60500fe350c9d828621006cdafe1975fdd8), [`d1e74a0`](https://github.com/mastra-ai/mastra/commit/d1e74a0a293866dece31022047f5dbab65a304d0), [`39e7869`](https://github.com/mastra-ai/mastra/commit/39e7869bc7d0ee391077ce291474d8a84eedccff), [`5761926`](https://github.com/mastra-ai/mastra/commit/57619260c4a2cdd598763abbacd90de594c6bc76), [`c900fdd`](https://github.com/mastra-ai/mastra/commit/c900fdd504c41348efdffb205cfe80d48c38fa33), [`604a79f`](https://github.com/mastra-ai/mastra/commit/604a79fecf276e26a54a3fe01bb94e65315d2e0e), [`887f0b4`](https://github.com/mastra-ai/mastra/commit/887f0b4746cdbd7cb7d6b17ac9f82aeb58037ea5), [`2562143`](https://github.com/mastra-ai/mastra/commit/256214336b4faa78646c9c1776612393790d8784), [`ef11a61`](https://github.com/mastra-ai/mastra/commit/ef11a61920fa0ed08a5b7ceedd192875af119749)]:
26
+ - @mastra/core@1.0.0-beta.6
27
+
28
+ ## 1.0.0-beta.1
29
+
30
+ ### Patch Changes
31
+
32
+ - Add restart method to workflow run that allows restarting an active workflow run ([#9750](https://github.com/mastra-ai/mastra/pull/9750))
33
+ Add status filter to `listWorkflowRuns`
34
+ Add automatic restart to restart active workflow runs when server starts
35
+ - Updated dependencies [[`2319326`](https://github.com/mastra-ai/mastra/commit/2319326f8c64e503a09bbcf14be2dd65405445e0), [`d629361`](https://github.com/mastra-ai/mastra/commit/d629361a60f6565b5bfb11976fdaf7308af858e2), [`08c31c1`](https://github.com/mastra-ai/mastra/commit/08c31c188ebccd598acaf55e888b6397d01f7eae), [`fd3d338`](https://github.com/mastra-ai/mastra/commit/fd3d338a2c362174ed5b383f1f011ad9fb0302aa), [`c30400a`](https://github.com/mastra-ai/mastra/commit/c30400a49b994b1b97256fe785eb6c906fc2b232), [`69e0a87`](https://github.com/mastra-ai/mastra/commit/69e0a878896a2da9494945d86e056a5f8f05b851), [`01f8878`](https://github.com/mastra-ai/mastra/commit/01f88783de25e4de048c1c8aace43e26373c6ea5), [`4c77209`](https://github.com/mastra-ai/mastra/commit/4c77209e6c11678808b365d545845918c40045c8), [`d827d08`](https://github.com/mastra-ai/mastra/commit/d827d0808ffe1f3553a84e975806cc989b9735dd), [`23c10a1`](https://github.com/mastra-ai/mastra/commit/23c10a1efdd9a693c405511ab2dc8a1236603162), [`676ccc7`](https://github.com/mastra-ai/mastra/commit/676ccc7fe92468d2d45d39c31a87825c89fd1ea0), [`c10398d`](https://github.com/mastra-ai/mastra/commit/c10398d5b88f1d4af556f4267ff06f1d11e89179), [`00c2387`](https://github.com/mastra-ai/mastra/commit/00c2387f5f04a365316f851e58666ac43f8c4edf), [`ad6250d`](https://github.com/mastra-ai/mastra/commit/ad6250dbdaad927e29f74a27b83f6c468b50a705), [`3a73998`](https://github.com/mastra-ai/mastra/commit/3a73998fa4ebeb7f3dc9301afe78095fc63e7999), [`e16d553`](https://github.com/mastra-ai/mastra/commit/e16d55338403c7553531cc568125c63d53653dff), [`4d59f58`](https://github.com/mastra-ai/mastra/commit/4d59f58de2d90d6e2810a19d4518e38ddddb9038), [`e1bb9c9`](https://github.com/mastra-ai/mastra/commit/e1bb9c94b4eb68b019ae275981be3feb769b5365), [`351a11f`](https://github.com/mastra-ai/mastra/commit/351a11fcaf2ed1008977fa9b9a489fc422e51cd4)]:
36
+ - @mastra/core@1.0.0-beta.3
37
+
3
38
  ## 1.0.0-beta.0
4
39
 
5
40
  ### Major Changes
package/dist/index.cjs CHANGED
@@ -633,23 +633,25 @@ var MemoryStorageD1 = class extends storage.MemoryStorage {
633
633
  );
634
634
  }
635
635
  }
636
- async _getIncludedMessages(threadId, include) {
637
- if (!threadId.trim()) throw new Error("threadId must be a non-empty string");
638
- if (!include) return null;
636
+ async _getIncludedMessages(include) {
637
+ if (!include || include.length === 0) return null;
639
638
  const unionQueries = [];
640
639
  const params = [];
641
640
  let paramIdx = 1;
641
+ const tableName = this.operations.getTableName(storage.TABLE_MESSAGES);
642
642
  for (const inc of include) {
643
643
  const { id, withPreviousMessages = 0, withNextMessages = 0 } = inc;
644
- const searchId = inc.threadId || threadId;
645
644
  unionQueries.push(`
646
645
  SELECT * FROM (
647
- WITH ordered_messages AS (
646
+ WITH target_thread AS (
647
+ SELECT thread_id FROM ${tableName} WHERE id = ?
648
+ ),
649
+ ordered_messages AS (
648
650
  SELECT
649
651
  *,
650
652
  ROW_NUMBER() OVER (ORDER BY createdAt ASC) AS row_num
651
- FROM ${this.operations.getTableName(storage.TABLE_MESSAGES)}
652
- WHERE thread_id = ?
653
+ FROM ${tableName}
654
+ WHERE thread_id = (SELECT thread_id FROM target_thread)
653
655
  )
654
656
  SELECT
655
657
  m.id,
@@ -672,7 +674,7 @@ var MemoryStorageD1 = class extends storage.MemoryStorage {
672
674
  )
673
675
  ) AS query_${paramIdx}
674
676
  `);
675
- params.push(searchId, id, id, withNextMessages, withPreviousMessages);
677
+ params.push(id, id, id, withNextMessages, withPreviousMessages);
676
678
  paramIdx++;
677
679
  }
678
680
  const finalQuery = unionQueries.join(" UNION ALL ") + " ORDER BY createdAt ASC";
@@ -729,15 +731,16 @@ var MemoryStorageD1 = class extends storage.MemoryStorage {
729
731
  }
730
732
  async listMessages(args) {
731
733
  const { threadId, resourceId, include, filter, perPage: perPageInput, page = 0, orderBy } = args;
732
- if (!threadId.trim()) {
734
+ const threadIds = Array.isArray(threadId) ? threadId : [threadId];
735
+ if (threadIds.length === 0 || threadIds.some((id) => !id.trim())) {
733
736
  throw new error.MastraError(
734
737
  {
735
738
  id: "STORAGE_CLOUDFLARE_D1_LIST_MESSAGES_INVALID_THREAD_ID",
736
739
  domain: error.ErrorDomain.STORAGE,
737
740
  category: error.ErrorCategory.THIRD_PARTY,
738
- details: { threadId }
741
+ details: { threadId: Array.isArray(threadId) ? threadId.join(",") : threadId }
739
742
  },
740
- new Error("threadId must be a non-empty string")
743
+ new Error("threadId must be a non-empty string or array of non-empty strings")
741
744
  );
742
745
  }
743
746
  if (page < 0) {
@@ -822,7 +825,7 @@ var MemoryStorageD1 = class extends storage.MemoryStorage {
822
825
  const messageIds = new Set(paginatedMessages.map((m) => m.id));
823
826
  let includeMessages = [];
824
827
  if (include && include.length > 0) {
825
- const includeResult = await this._getIncludedMessages(threadId, include);
828
+ const includeResult = await this._getIncludedMessages(include);
826
829
  if (Array.isArray(includeResult)) {
827
830
  includeMessages = includeResult;
828
831
  for (const includeMsg of includeMessages) {
@@ -863,9 +866,9 @@ var MemoryStorageD1 = class extends storage.MemoryStorage {
863
866
  id: "CLOUDFLARE_D1_STORAGE_LIST_MESSAGES_ERROR",
864
867
  domain: error.ErrorDomain.STORAGE,
865
868
  category: error.ErrorCategory.THIRD_PARTY,
866
- text: `Failed to list messages for thread ${threadId}: ${error$1 instanceof Error ? error$1.message : String(error$1)}`,
869
+ text: `Failed to list messages for thread ${Array.isArray(threadId) ? threadId.join(",") : threadId}: ${error$1 instanceof Error ? error$1.message : String(error$1)}`,
867
870
  details: {
868
- threadId,
871
+ threadId: Array.isArray(threadId) ? threadId.join(",") : threadId,
869
872
  resourceId: resourceId ?? ""
870
873
  }
871
874
  },
@@ -1370,19 +1373,12 @@ var StoreOperationsD1 = class extends storage.StoreOperations {
1370
1373
  }
1371
1374
  };
1372
1375
  function transformScoreRow(row) {
1373
- const deserialized = { ...row };
1374
- deserialized.input = storage.safelyParseJSON(row.input);
1375
- deserialized.output = storage.safelyParseJSON(row.output);
1376
- deserialized.scorer = storage.safelyParseJSON(row.scorer);
1377
- deserialized.preprocessStepResult = storage.safelyParseJSON(row.preprocessStepResult);
1378
- deserialized.analyzeStepResult = storage.safelyParseJSON(row.analyzeStepResult);
1379
- deserialized.metadata = storage.safelyParseJSON(row.metadata);
1380
- deserialized.additionalContext = storage.safelyParseJSON(row.additionalContext);
1381
- deserialized.requestContext = storage.safelyParseJSON(row.requestContext);
1382
- deserialized.entity = storage.safelyParseJSON(row.entity);
1383
- deserialized.createdAt = row.createdAtZ || row.createdAt;
1384
- deserialized.updatedAt = row.updatedAtZ || row.updatedAt;
1385
- return deserialized;
1376
+ return storage.transformScoreRow(row, {
1377
+ preferredTimestampFields: {
1378
+ createdAt: "createdAtZ",
1379
+ updatedAt: "updatedAtZ"
1380
+ }
1381
+ });
1386
1382
  }
1387
1383
  var ScoresStorageD1 = class extends storage.ScoresStorage {
1388
1384
  operations;
@@ -1804,13 +1800,18 @@ var WorkflowsStorageD1 = class extends storage.WorkflowsStorage {
1804
1800
  toDate,
1805
1801
  page,
1806
1802
  perPage,
1807
- resourceId
1803
+ resourceId,
1804
+ status
1808
1805
  } = {}) {
1809
1806
  const fullTableName = this.operations.getTableName(storage.TABLE_WORKFLOW_SNAPSHOT);
1810
1807
  try {
1811
1808
  const builder = createSqlBuilder().select().from(fullTableName);
1812
1809
  const countBuilder = createSqlBuilder().count().from(fullTableName);
1813
1810
  if (workflowName) builder.whereAnd("workflow_name = ?", workflowName);
1811
+ if (status) {
1812
+ builder.whereAnd("json_extract(snapshot, '$.status') = ?", status);
1813
+ countBuilder.whereAnd("json_extract(snapshot, '$.status') = ?", status);
1814
+ }
1814
1815
  if (resourceId) {
1815
1816
  const hasResourceId = await this.operations.hasColumn(fullTableName, "resourceId");
1816
1817
  if (hasResourceId) {
@@ -2070,15 +2071,8 @@ var D1Store = class extends storage.MastraStorage {
2070
2071
  async loadWorkflowSnapshot(params) {
2071
2072
  return this.stores.workflows.loadWorkflowSnapshot(params);
2072
2073
  }
2073
- async listWorkflowRuns({
2074
- workflowName,
2075
- fromDate,
2076
- toDate,
2077
- perPage,
2078
- page,
2079
- resourceId
2080
- } = {}) {
2081
- return this.stores.workflows.listWorkflowRuns({ workflowName, fromDate, toDate, perPage, page, resourceId });
2074
+ async listWorkflowRuns(args = {}) {
2075
+ return this.stores.workflows.listWorkflowRuns(args);
2082
2076
  }
2083
2077
  async getWorkflowRunById({
2084
2078
  runId,