@mastra/memory 1.0.0-beta.9 → 1.0.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 +839 -0
- package/dist/docs/README.md +36 -0
- package/dist/docs/SKILL.md +42 -0
- package/dist/docs/SOURCE_MAP.json +31 -0
- package/dist/docs/agents/01-agent-memory.md +166 -0
- package/dist/docs/agents/02-networks.md +292 -0
- package/dist/docs/agents/03-agent-approval.md +377 -0
- package/dist/docs/agents/04-network-approval.md +274 -0
- package/dist/docs/core/01-reference.md +114 -0
- package/dist/docs/memory/01-overview.md +76 -0
- package/dist/docs/memory/02-storage.md +233 -0
- package/dist/docs/memory/03-working-memory.md +390 -0
- package/dist/docs/memory/04-semantic-recall.md +233 -0
- package/dist/docs/memory/05-memory-processors.md +318 -0
- package/dist/docs/memory/06-reference.md +687 -0
- package/dist/docs/processors/01-reference.md +100 -0
- package/dist/docs/storage/01-reference.md +1139 -0
- package/dist/docs/vectors/01-reference.md +942 -0
- package/dist/index.cjs +339 -19
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +145 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +339 -19
- package/dist/index.js.map +1 -1
- package/dist/tools/working-memory.d.ts +10 -13
- package/dist/tools/working-memory.d.ts.map +1 -1
- package/package.json +15 -14
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { embedMany } from './_types/@internal_ai-sdk-v4/dist/index.js';
|
|
|
2
2
|
import type { MastraDBMessage } from '@mastra/core/agent';
|
|
3
3
|
import type { MemoryConfig, SharedMemoryConfig, StorageThreadType, WorkingMemoryTemplate, MessageDeleteInput } from '@mastra/core/memory';
|
|
4
4
|
import { MastraMemory } from '@mastra/core/memory';
|
|
5
|
-
import type {
|
|
5
|
+
import type { StorageListThreadsInput, StorageListThreadsOutput, StorageListMessagesInput, MemoryStorage, StorageCloneThreadInput, StorageCloneThreadOutput, ThreadCloneMetadata } from '@mastra/core/storage';
|
|
6
6
|
import type { ToolAction } from '@mastra/core/tools';
|
|
7
7
|
import { deepMergeWorkingMemory } from './tools/working-memory.js';
|
|
8
8
|
export { deepMergeWorkingMemory };
|
|
@@ -28,7 +28,7 @@ export declare class Memory extends MastraMemory {
|
|
|
28
28
|
getThreadById({ threadId }: {
|
|
29
29
|
threadId: string;
|
|
30
30
|
}): Promise<StorageThreadType | null>;
|
|
31
|
-
|
|
31
|
+
listThreads(args: StorageListThreadsInput): Promise<StorageListThreadsOutput>;
|
|
32
32
|
private handleWorkingMemoryFromMetadata;
|
|
33
33
|
saveThread({ thread, memoryConfig, }: {
|
|
34
34
|
thread: StorageThreadType;
|
|
@@ -110,14 +110,19 @@ export declare class Memory extends MastraMemory {
|
|
|
110
110
|
private isVNextWorkingMemoryConfig;
|
|
111
111
|
listTools(config?: MemoryConfig): Record<string, ToolAction<any, any, any>>;
|
|
112
112
|
/**
|
|
113
|
-
* Updates
|
|
114
|
-
*
|
|
113
|
+
* Updates a list of messages and syncs the vector database for semantic recall.
|
|
114
|
+
* When message content is updated, the corresponding vector embeddings are also updated
|
|
115
|
+
* to ensure semantic recall stays in sync with the message content.
|
|
116
|
+
*
|
|
117
|
+
* @param messages - The list of messages to update (must include id, can include partial content)
|
|
118
|
+
* @param memoryConfig - Optional memory configuration to determine if semantic recall is enabled
|
|
115
119
|
* @returns The list of updated messages
|
|
116
120
|
*/
|
|
117
|
-
updateMessages({ messages, }: {
|
|
118
|
-
messages: Partial<MastraDBMessage> & {
|
|
121
|
+
updateMessages({ messages, memoryConfig, }: {
|
|
122
|
+
messages: (Partial<MastraDBMessage> & {
|
|
119
123
|
id: string;
|
|
120
|
-
}[];
|
|
124
|
+
})[];
|
|
125
|
+
memoryConfig?: MemoryConfig;
|
|
121
126
|
}): Promise<MastraDBMessage[]>;
|
|
122
127
|
/**
|
|
123
128
|
* Deletes one or more messages
|
|
@@ -127,6 +132,139 @@ export declare class Memory extends MastraMemory {
|
|
|
127
132
|
* @returns Promise that resolves when all messages are deleted
|
|
128
133
|
*/
|
|
129
134
|
deleteMessages(input: MessageDeleteInput): Promise<void>;
|
|
135
|
+
/**
|
|
136
|
+
* Clone a thread and its messages to create a new independent thread.
|
|
137
|
+
* The cloned thread will have metadata tracking its source.
|
|
138
|
+
*
|
|
139
|
+
* If semantic recall is enabled, the cloned messages will also be embedded
|
|
140
|
+
* and added to the vector store for semantic search.
|
|
141
|
+
*
|
|
142
|
+
* @param args - Clone configuration options
|
|
143
|
+
* @param args.sourceThreadId - ID of the thread to clone
|
|
144
|
+
* @param args.newThreadId - ID for the new cloned thread (if not provided, a random UUID will be generated)
|
|
145
|
+
* @param args.resourceId - Resource ID for the new thread (defaults to source thread's resourceId)
|
|
146
|
+
* @param args.title - Title for the new cloned thread
|
|
147
|
+
* @param args.metadata - Additional metadata to merge with clone metadata
|
|
148
|
+
* @param args.options - Options for filtering which messages to include
|
|
149
|
+
* @param args.options.messageLimit - Maximum number of messages to copy (from most recent)
|
|
150
|
+
* @param args.options.messageFilter - Filter messages by date range or specific IDs
|
|
151
|
+
* @param memoryConfig - Optional memory configuration override
|
|
152
|
+
* @returns The newly created thread and the cloned messages
|
|
153
|
+
*
|
|
154
|
+
* @example
|
|
155
|
+
* ```typescript
|
|
156
|
+
* // Clone entire thread
|
|
157
|
+
* const { thread, clonedMessages } = await memory.cloneThread({
|
|
158
|
+
* sourceThreadId: 'thread-123',
|
|
159
|
+
* });
|
|
160
|
+
*
|
|
161
|
+
* // Clone with custom ID
|
|
162
|
+
* const { thread, clonedMessages } = await memory.cloneThread({
|
|
163
|
+
* sourceThreadId: 'thread-123',
|
|
164
|
+
* newThreadId: 'my-custom-thread-id',
|
|
165
|
+
* });
|
|
166
|
+
*
|
|
167
|
+
* // Clone with message limit
|
|
168
|
+
* const { thread, clonedMessages } = await memory.cloneThread({
|
|
169
|
+
* sourceThreadId: 'thread-123',
|
|
170
|
+
* title: 'My cloned conversation',
|
|
171
|
+
* options: {
|
|
172
|
+
* messageLimit: 10, // Only clone last 10 messages
|
|
173
|
+
* },
|
|
174
|
+
* });
|
|
175
|
+
*
|
|
176
|
+
* // Clone with date filter
|
|
177
|
+
* const { thread, clonedMessages } = await memory.cloneThread({
|
|
178
|
+
* sourceThreadId: 'thread-123',
|
|
179
|
+
* options: {
|
|
180
|
+
* messageFilter: {
|
|
181
|
+
* startDate: new Date('2024-01-01'),
|
|
182
|
+
* endDate: new Date('2024-06-01'),
|
|
183
|
+
* },
|
|
184
|
+
* },
|
|
185
|
+
* });
|
|
186
|
+
* ```
|
|
187
|
+
*/
|
|
188
|
+
cloneThread(args: StorageCloneThreadInput, memoryConfig?: MemoryConfig): Promise<StorageCloneThreadOutput>;
|
|
189
|
+
/**
|
|
190
|
+
* Embed cloned messages for semantic recall.
|
|
191
|
+
* This is similar to the embedding logic in saveMessages but operates on already-saved messages.
|
|
192
|
+
*/
|
|
193
|
+
private embedClonedMessages;
|
|
194
|
+
/**
|
|
195
|
+
* Get the clone metadata from a thread if it was cloned from another thread.
|
|
196
|
+
*
|
|
197
|
+
* @param thread - The thread to check
|
|
198
|
+
* @returns The clone metadata if the thread is a clone, null otherwise
|
|
199
|
+
*
|
|
200
|
+
* @example
|
|
201
|
+
* ```typescript
|
|
202
|
+
* const thread = await memory.getThreadById({ threadId: 'thread-123' });
|
|
203
|
+
* const cloneInfo = memory.getCloneMetadata(thread);
|
|
204
|
+
* if (cloneInfo) {
|
|
205
|
+
* console.log(`This thread was cloned from ${cloneInfo.sourceThreadId}`);
|
|
206
|
+
* }
|
|
207
|
+
* ```
|
|
208
|
+
*/
|
|
209
|
+
getCloneMetadata(thread: StorageThreadType | null): ThreadCloneMetadata | null;
|
|
210
|
+
/**
|
|
211
|
+
* Check if a thread is a clone of another thread.
|
|
212
|
+
*
|
|
213
|
+
* @param thread - The thread to check
|
|
214
|
+
* @returns True if the thread is a clone, false otherwise
|
|
215
|
+
*
|
|
216
|
+
* @example
|
|
217
|
+
* ```typescript
|
|
218
|
+
* const thread = await memory.getThreadById({ threadId: 'thread-123' });
|
|
219
|
+
* if (memory.isClone(thread)) {
|
|
220
|
+
* console.log('This is a cloned thread');
|
|
221
|
+
* }
|
|
222
|
+
* ```
|
|
223
|
+
*/
|
|
224
|
+
isClone(thread: StorageThreadType | null): boolean;
|
|
225
|
+
/**
|
|
226
|
+
* Get the source thread that a cloned thread was created from.
|
|
227
|
+
*
|
|
228
|
+
* @param threadId - ID of the cloned thread
|
|
229
|
+
* @returns The source thread if found, null if the thread is not a clone or source doesn't exist
|
|
230
|
+
*
|
|
231
|
+
* @example
|
|
232
|
+
* ```typescript
|
|
233
|
+
* const sourceThread = await memory.getSourceThread('cloned-thread-123');
|
|
234
|
+
* if (sourceThread) {
|
|
235
|
+
* console.log(`Original thread: ${sourceThread.title}`);
|
|
236
|
+
* }
|
|
237
|
+
* ```
|
|
238
|
+
*/
|
|
239
|
+
getSourceThread(threadId: string): Promise<StorageThreadType | null>;
|
|
240
|
+
/**
|
|
241
|
+
* List all threads that were cloned from a specific source thread.
|
|
242
|
+
*
|
|
243
|
+
* @param sourceThreadId - ID of the source thread
|
|
244
|
+
* @param resourceId - Optional resource ID to filter by
|
|
245
|
+
* @returns Array of threads that are clones of the source thread
|
|
246
|
+
*
|
|
247
|
+
* @example
|
|
248
|
+
* ```typescript
|
|
249
|
+
* const clones = await memory.listClones('original-thread-123', 'user-456');
|
|
250
|
+
* console.log(`Found ${clones.length} clones of this thread`);
|
|
251
|
+
* ```
|
|
252
|
+
*/
|
|
253
|
+
listClones(sourceThreadId: string, resourceId?: string): Promise<StorageThreadType[]>;
|
|
254
|
+
/**
|
|
255
|
+
* Get the clone history chain for a thread (all ancestors back to the original).
|
|
256
|
+
*
|
|
257
|
+
* @param threadId - ID of the thread to get history for
|
|
258
|
+
* @returns Array of threads from oldest ancestor to the given thread (inclusive)
|
|
259
|
+
*
|
|
260
|
+
* @example
|
|
261
|
+
* ```typescript
|
|
262
|
+
* const history = await memory.getCloneHistory('deeply-cloned-thread');
|
|
263
|
+
* // Returns: [originalThread, firstClone, secondClone, deeplyClonedThread]
|
|
264
|
+
* ```
|
|
265
|
+
*/
|
|
266
|
+
getCloneHistory(threadId: string): Promise<StorageThreadType[]>;
|
|
130
267
|
}
|
|
131
268
|
export { SemanticRecall, WorkingMemory, MessageHistory } from '@mastra/core/processors';
|
|
269
|
+
export type { StorageCloneThreadInput, StorageCloneThreadOutput, ThreadCloneMetadata } from '@mastra/core/storage';
|
|
132
270
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAKhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAwD,MAAM,qBAAqB,CAAC;AACzG,OAAO,KAAK,EACV,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|