@mastra/dynamodb 1.1.3 → 1.2.0-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 +25 -0
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/index.cjs +13 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +14 -9
- package/dist/index.js.map +1 -1
- package/dist/storage/domains/memory/index.d.ts.map +1 -1
- package/dist/storage/index.d.ts.map +1 -1
- package/package.json +7 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
# @mastra/dynamodb
|
|
2
2
|
|
|
3
|
+
## 1.2.0-alpha.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Added exact metadata filtering to message history queries across Memory APIs and supported storage providers. ([#19991](https://github.com/mastra-ai/mastra/pull/19991))
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
const messages = await memory.recall({
|
|
11
|
+
threadId: 'thread-1',
|
|
12
|
+
filter: {
|
|
13
|
+
metadata: {
|
|
14
|
+
status: 'done',
|
|
15
|
+
priority: 'high',
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Multiple fields use AND semantics. Supported values are strings, finite numbers, booleans, and `null`.
|
|
22
|
+
|
|
23
|
+
### Patch Changes
|
|
24
|
+
|
|
25
|
+
- Updated dependencies [[`0dca9d0`](https://github.com/mastra-ai/mastra/commit/0dca9d0b1356024a53b72ea6f040db528b126caa)]:
|
|
26
|
+
- @mastra/core@1.54.0-alpha.0
|
|
27
|
+
|
|
3
28
|
## 1.1.3
|
|
4
29
|
|
|
5
30
|
### Patch Changes
|
package/dist/docs/SKILL.md
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -1749,6 +1749,7 @@ var MemoryStorageDynamoDB = class extends storage.MemoryStorage {
|
|
|
1749
1749
|
}
|
|
1750
1750
|
async listMessages(args) {
|
|
1751
1751
|
const { threadId, resourceId, include, filter, perPage: perPageInput, page = 0, orderBy } = args;
|
|
1752
|
+
const metadataFilter = storage.validateStorageMetadataFilter(filter?.metadata);
|
|
1752
1753
|
const threadIds = Array.isArray(threadId) ? threadId : [threadId];
|
|
1753
1754
|
if (threadIds.length === 0 || threadIds.some((id) => !id.trim())) {
|
|
1754
1755
|
throw new error.MastraError(
|
|
@@ -1838,19 +1839,24 @@ var MemoryStorageDynamoDB = class extends storage.MemoryStorage {
|
|
|
1838
1839
|
let paginatedMessages = [];
|
|
1839
1840
|
let total = 0;
|
|
1840
1841
|
const filteredMessageIds = /* @__PURE__ */ new Set();
|
|
1841
|
-
if (threadIds.length > 1) {
|
|
1842
|
+
if (threadIds.length > 1 || metadataFilter) {
|
|
1842
1843
|
const threadResults = await Promise.all(
|
|
1843
1844
|
threadIds.map(async (tid) => {
|
|
1844
1845
|
const q = applyQueryFilters(
|
|
1845
1846
|
this.service.entities.message.query.byThread({ entity: "message", threadId: tid })
|
|
1846
1847
|
);
|
|
1847
|
-
const countResult = await q.go({ pages: "all", attributes: ["id"] });
|
|
1848
1848
|
const results = await q.go({ pages: "all", order });
|
|
1849
|
-
|
|
1849
|
+
let messages = parseQueryMessages(results.data);
|
|
1850
|
+
if (metadataFilter) {
|
|
1851
|
+
messages = messages.filter(
|
|
1852
|
+
(message) => storage.storageMessageMatchesMetadataFilter(message.content, metadataFilter)
|
|
1853
|
+
);
|
|
1854
|
+
}
|
|
1855
|
+
return { ids: messages.map((message) => message.id), messages };
|
|
1850
1856
|
})
|
|
1851
1857
|
);
|
|
1852
|
-
for (const
|
|
1853
|
-
for (const id of
|
|
1858
|
+
for (const result of threadResults) {
|
|
1859
|
+
for (const id of result.ids) filteredMessageIds.add(id);
|
|
1854
1860
|
}
|
|
1855
1861
|
total = threadResults.reduce((sum, r) => sum + r.ids.length, 0);
|
|
1856
1862
|
const merged = threadResults.flatMap((r) => r.messages);
|
|
@@ -1897,10 +1903,9 @@ var MemoryStorageDynamoDB = class extends storage.MemoryStorage {
|
|
|
1897
1903
|
let finalMessages = list.get.all.db();
|
|
1898
1904
|
finalMessages = this._sortMessages(finalMessages, field, direction);
|
|
1899
1905
|
const returnedFilteredMessageIds = new Set(
|
|
1900
|
-
finalMessages.filter((
|
|
1906
|
+
finalMessages.filter((message) => filteredMessageIds.has(message.id)).map((message) => message.id)
|
|
1901
1907
|
);
|
|
1902
|
-
const
|
|
1903
|
-
const hasMore = perPageInput !== false && !allFilteredMessagesReturned && offset + perPage < total;
|
|
1908
|
+
const hasMore = perPageInput !== false && (metadataFilter || returnedFilteredMessageIds.size < total) && offset + perPage < total;
|
|
1904
1909
|
return {
|
|
1905
1910
|
messages: finalMessages,
|
|
1906
1911
|
total,
|