@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 +35 -0
- package/dist/index.cjs +31 -37
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +32 -38
- package/dist/index.js.map +1 -1
- package/dist/storage/domains/memory/index.d.ts.map +1 -1
- package/dist/storage/domains/scores/index.d.ts.map +1 -1
- package/dist/storage/domains/workflows/index.d.ts +1 -1
- package/dist/storage/domains/workflows/index.d.ts.map +1 -1
- package/dist/storage/index.d.ts +2 -9
- package/dist/storage/index.d.ts.map +1 -1
- package/package.json +10 -8
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(
|
|
637
|
-
if (!
|
|
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
|
|
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 ${
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
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
|
-
|
|
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,
|