@mastra/dynamodb 1.2.2 → 1.3.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/CHANGELOG.md +39 -0
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/index.cjs +25 -13
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +25 -13
- package/dist/index.js.map +1 -1
- package/dist/storage/domains/memory/index.d.ts +7 -0
- package/dist/storage/domains/memory/index.d.ts.map +1 -1
- package/package.json +7 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,44 @@
|
|
|
1
1
|
# @mastra/dynamodb
|
|
2
2
|
|
|
3
|
+
## 1.3.0-alpha.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Fixed resource-scoped message includes across storage adapters so included context cannot cross resource boundaries. ([#20984](https://github.com/mastra-ai/mastra/pull/20984))
|
|
8
|
+
|
|
9
|
+
- Updated dependencies [[`6445eba`](https://github.com/mastra-ai/mastra/commit/6445eba6020abac681aba1cc9289f446cb400cbe), [`df31eb0`](https://github.com/mastra-ai/mastra/commit/df31eb0c7087d782a0d9346e467f9a4af4b0eef6), [`fcd0667`](https://github.com/mastra-ai/mastra/commit/fcd0667a4e378be35c9a1b1eb19cce78fbfd7282), [`bab06b1`](https://github.com/mastra-ai/mastra/commit/bab06b18923873a584bdfc71a6b4ec7fb4727fb7)]:
|
|
10
|
+
- @mastra/core@1.58.0-alpha.5
|
|
11
|
+
|
|
12
|
+
## 1.3.0-alpha.0
|
|
13
|
+
|
|
14
|
+
### Minor Changes
|
|
15
|
+
|
|
16
|
+
- Memory list reads now surface database errors instead of silently returning empty results. ([#17910](https://github.com/mastra-ai/mastra/pull/17910))
|
|
17
|
+
|
|
18
|
+
Previously, the paginated memory reads (`listThreads`, `listMessages`, `listMessagesByResourceId`, and `listMessagesById`) caught backend failures, logged them, and returned an empty payload like `{ threads: [], total: 0, hasMore: false }`. A transient outage (locked table, dropped connection) was therefore indistinguishable from a genuinely empty result, so an agent reading conversation history during a brief failure would treat it as "no history" and could overwrite real state. These methods now re-throw the failure as a `MastraError`. Validation (USER) errors and genuinely empty results are unchanged.
|
|
19
|
+
|
|
20
|
+
**Behavior change**
|
|
21
|
+
|
|
22
|
+
Callers that previously received an empty result on a backend failure will now receive a thrown `MastraError`. If you call these read methods directly (rather than through an agent, which already surfaces errors), wrap them so a transient outage doesn't crash the caller:
|
|
23
|
+
|
|
24
|
+
```ts
|
|
25
|
+
try {
|
|
26
|
+
const { threads } = await storage.listThreads({ resourceId });
|
|
27
|
+
// ...use threads
|
|
28
|
+
} catch (error) {
|
|
29
|
+
// a real backend failure. Decide whether to retry, surface, or degrade.
|
|
30
|
+
// An empty thread list no longer hides here; it only means "no threads".
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Patch Changes
|
|
35
|
+
|
|
36
|
+
- dependencies updates: ([#20406](https://github.com/mastra-ai/mastra/pull/20406))
|
|
37
|
+
- Updated dependency [`@aws-sdk/client-dynamodb@^3.1095.0` ↗︎](https://www.npmjs.com/package/@aws-sdk/client-dynamodb/v/3.1095.0) (from `^3.1058.0`, in `dependencies`)
|
|
38
|
+
- Updated dependency [`@aws-sdk/lib-dynamodb@^3.1095.0` ↗︎](https://www.npmjs.com/package/@aws-sdk/lib-dynamodb/v/3.1095.0) (from `^3.1058.0`, in `dependencies`)
|
|
39
|
+
- Updated dependencies [[`e7109ee`](https://github.com/mastra-ai/mastra/commit/e7109ee6f731bacc79c885906f3c7dca8d8f013a), [`772c0c8`](https://github.com/mastra-ai/mastra/commit/772c0c897cec383258de2e6178147f8014767c7b), [`578bf2e`](https://github.com/mastra-ai/mastra/commit/578bf2e6a88e9d5b8bf502204e15a95dfbb679ae), [`06b2d87`](https://github.com/mastra-ai/mastra/commit/06b2d87e63bcdd0ed59215c6789692b9b12de376), [`ac01d63`](https://github.com/mastra-ai/mastra/commit/ac01d6355974aec73fdb8781449ed12bac582094), [`a810a05`](https://github.com/mastra-ai/mastra/commit/a810a058f62ad407cfc1701e0be36ae91145d7cf), [`f8da216`](https://github.com/mastra-ai/mastra/commit/f8da21633e7eb0e31c9ce0fc30567870d19416d3), [`6104347`](https://github.com/mastra-ai/mastra/commit/61043473ba6bfd0a25156824e853e13165562e6c), [`45bfb88`](https://github.com/mastra-ai/mastra/commit/45bfb88fd52f1dd3be20e2a38905777c96499c90), [`e3b9307`](https://github.com/mastra-ai/mastra/commit/e3b9307098daefbfae2a52ae2ef51bc9fc701190), [`d6834c5`](https://github.com/mastra-ai/mastra/commit/d6834c5a7866b16734d23900163c2414ed70d791), [`c52d346`](https://github.com/mastra-ai/mastra/commit/c52d3462ec831a5d95926ecd3d3373f5928ad2e5), [`0023e79`](https://github.com/mastra-ai/mastra/commit/0023e7919431078280abd11c89d1edeae35fcc69), [`c2ad51e`](https://github.com/mastra-ai/mastra/commit/c2ad51e2467f901eecba8c9f4a45e22a50bd7c18), [`3dc97ea`](https://github.com/mastra-ai/mastra/commit/3dc97ea415fad353b48a13095fad1835933cc12a), [`3d01cd3`](https://github.com/mastra-ai/mastra/commit/3d01cd387321b6f9c5cac31d487c84bf51b19c78), [`7bf3086`](https://github.com/mastra-ai/mastra/commit/7bf308663f0115ca74ad20554ade740f06640859), [`a8dd139`](https://github.com/mastra-ai/mastra/commit/a8dd1391a9fe9a6632c25809ef236980afa9a020), [`e5786be`](https://github.com/mastra-ai/mastra/commit/e5786be02bb903073082bd9d6da880ebaacc343f), [`2093fbd`](https://github.com/mastra-ai/mastra/commit/2093fbd53bb744bae19ec89f6d73db9a66fbe8a7), [`e7a5da4`](https://github.com/mastra-ai/mastra/commit/e7a5da4ef8e4dd452d2f232961b4e682a85ffe43), [`7b4393d`](https://github.com/mastra-ai/mastra/commit/7b4393d557411fdcf07b0e30e5acaf7cc85154ae)]:
|
|
40
|
+
- @mastra/core@1.58.0-alpha.1
|
|
41
|
+
|
|
3
42
|
## 1.2.2
|
|
4
43
|
|
|
5
44
|
### Patch Changes
|
package/dist/docs/SKILL.md
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -1746,7 +1746,10 @@ var MemoryStorageDynamoDB = class extends _mastra_core_storage.MemoryStorage {
|
|
|
1746
1746
|
hasMore: false
|
|
1747
1747
|
};
|
|
1748
1748
|
if (perPage === 0 && include && include.length > 0) {
|
|
1749
|
-
const includeMessages = await this._getIncludedMessages({
|
|
1749
|
+
const includeMessages = await this._getIncludedMessages({
|
|
1750
|
+
include,
|
|
1751
|
+
resourceId
|
|
1752
|
+
});
|
|
1750
1753
|
const list = new _mastra_core_agent.MessageList().add(includeMessages, "memory");
|
|
1751
1754
|
return {
|
|
1752
1755
|
messages: this._sortMessages(list.get.all.db(), field, direction),
|
|
@@ -1835,7 +1838,10 @@ var MemoryStorageDynamoDB = class extends _mastra_core_storage.MemoryStorage {
|
|
|
1835
1838
|
const messageIds = new Set(paginatedMessages.map((m) => m.id));
|
|
1836
1839
|
let includeMessages = [];
|
|
1837
1840
|
if (include && include.length > 0) {
|
|
1838
|
-
includeMessages = await this._getIncludedMessages({
|
|
1841
|
+
includeMessages = await this._getIncludedMessages({
|
|
1842
|
+
include,
|
|
1843
|
+
resourceId
|
|
1844
|
+
});
|
|
1839
1845
|
for (const includeMsg of includeMessages) if (!messageIds.has(includeMsg.id)) {
|
|
1840
1846
|
paginatedMessages.push(includeMsg);
|
|
1841
1847
|
messageIds.add(includeMsg.id);
|
|
@@ -1853,6 +1859,7 @@ var MemoryStorageDynamoDB = class extends _mastra_core_storage.MemoryStorage {
|
|
|
1853
1859
|
hasMore
|
|
1854
1860
|
};
|
|
1855
1861
|
} catch (error) {
|
|
1862
|
+
if (error instanceof _mastra_core_error.MastraError && error.category === _mastra_core_error.ErrorCategory.USER) throw error;
|
|
1856
1863
|
const mastraError = new _mastra_core_error.MastraError({
|
|
1857
1864
|
id: (0, _mastra_core_storage.createStorageErrorId)("DYNAMODB", "LIST_MESSAGES", "FAILED"),
|
|
1858
1865
|
domain: _mastra_core_error.ErrorDomain.STORAGE,
|
|
@@ -1864,13 +1871,7 @@ var MemoryStorageDynamoDB = class extends _mastra_core_storage.MemoryStorage {
|
|
|
1864
1871
|
}, error);
|
|
1865
1872
|
this.logger?.error?.(mastraError.toString());
|
|
1866
1873
|
this.logger?.trackException?.(mastraError);
|
|
1867
|
-
|
|
1868
|
-
messages: [],
|
|
1869
|
-
total: 0,
|
|
1870
|
-
page,
|
|
1871
|
-
perPage: perPageForResponse,
|
|
1872
|
-
hasMore: false
|
|
1873
|
-
};
|
|
1874
|
+
throw mastraError;
|
|
1874
1875
|
}
|
|
1875
1876
|
}
|
|
1876
1877
|
async saveMessages(args) {
|
|
@@ -1990,7 +1991,8 @@ var MemoryStorageDynamoDB = class extends _mastra_core_storage.MemoryStorage {
|
|
|
1990
1991
|
hasMore: offset + perPage < total
|
|
1991
1992
|
};
|
|
1992
1993
|
} catch (error) {
|
|
1993
|
-
|
|
1994
|
+
if (error instanceof _mastra_core_error.MastraError && error.category === _mastra_core_error.ErrorCategory.USER) throw error;
|
|
1995
|
+
const mastraError = new _mastra_core_error.MastraError({
|
|
1994
1996
|
id: (0, _mastra_core_storage.createStorageErrorId)("DYNAMODB", "LIST_THREADS", "FAILED"),
|
|
1995
1997
|
domain: _mastra_core_error.ErrorDomain.STORAGE,
|
|
1996
1998
|
category: _mastra_core_error.ErrorCategory.THIRD_PARTY,
|
|
@@ -2001,6 +2003,9 @@ var MemoryStorageDynamoDB = class extends _mastra_core_storage.MemoryStorage {
|
|
|
2001
2003
|
perPage: perPageForResponse
|
|
2002
2004
|
}
|
|
2003
2005
|
}, error);
|
|
2006
|
+
this.logger?.error?.(mastraError.toString());
|
|
2007
|
+
this.logger?.trackException?.(mastraError);
|
|
2008
|
+
throw mastraError;
|
|
2004
2009
|
}
|
|
2005
2010
|
}
|
|
2006
2011
|
_sortMessages(messages, field, direction) {
|
|
@@ -2011,7 +2016,14 @@ var MemoryStorageDynamoDB = class extends _mastra_core_storage.MemoryStorage {
|
|
|
2011
2016
|
return direction === "ASC" ? aValue - bValue : bValue - aValue;
|
|
2012
2017
|
});
|
|
2013
2018
|
}
|
|
2014
|
-
|
|
2019
|
+
/**
|
|
2020
|
+
* Fetches the messages named by `include` together with their surrounding context.
|
|
2021
|
+
*
|
|
2022
|
+
* @param include - Message ids to pin, each with an optional before/after window.
|
|
2023
|
+
* @param resourceId - When set, restricts both the pinned messages and their context
|
|
2024
|
+
* to that resource so an id from another resource returns nothing.
|
|
2025
|
+
*/
|
|
2026
|
+
async _getIncludedMessages({ include, resourceId }) {
|
|
2015
2027
|
if (!include?.length) return [];
|
|
2016
2028
|
const targetResults = await Promise.all(include.map((inc) => this.service.entities.message.get({
|
|
2017
2029
|
entity: "message",
|
|
@@ -2024,7 +2036,7 @@ var MemoryStorageDynamoDB = class extends _mastra_core_storage.MemoryStorage {
|
|
|
2024
2036
|
data: null
|
|
2025
2037
|
}))));
|
|
2026
2038
|
const targetMap = /* @__PURE__ */ new Map();
|
|
2027
|
-
for (const { id, data } of targetResults) if (data) {
|
|
2039
|
+
for (const { id, data } of targetResults) if (data && (!resourceId || data.resourceId === resourceId)) {
|
|
2028
2040
|
const createdAt = typeof data.createdAt === "string" ? data.createdAt : new Date(data.createdAt).toISOString();
|
|
2029
2041
|
targetMap.set(id, {
|
|
2030
2042
|
threadId: data.threadId,
|
|
@@ -2032,7 +2044,7 @@ var MemoryStorageDynamoDB = class extends _mastra_core_storage.MemoryStorage {
|
|
|
2032
2044
|
});
|
|
2033
2045
|
}
|
|
2034
2046
|
if (targetMap.size === 0) return [];
|
|
2035
|
-
const parseQueryMessages = (data) => data.map((item) => this.parseMessageData(item)).filter((msg) => "content" in msg && typeof msg.content === "object");
|
|
2047
|
+
const parseQueryMessages = (data) => data.map((item) => this.parseMessageData(item)).filter((msg) => "content" in msg && typeof msg.content === "object").filter((msg) => !resourceId || msg.resourceId === resourceId);
|
|
2036
2048
|
const includeMessages = [];
|
|
2037
2049
|
for (const includeItem of include) {
|
|
2038
2050
|
const { id, withPreviousMessages = 0, withNextMessages = 0 } = includeItem;
|