@mastra/mongodb 1.23.0 → 1.23.1-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/dist/_types/@internal_core/dist/memory/index.d.ts +102 -0
- package/dist/_types/@internal_core/package.json +1 -0
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/docs/references/reference-storage-composite.md +34 -0
- package/dist/docs/references/reference-vectors-mongodb.md +2 -1
- package/dist/index.cjs +1033 -393
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1034 -394
- package/dist/index.js.map +1 -1
- package/dist/storage/connectors/MongoDBConnector.d.ts +10 -3
- package/dist/storage/connectors/MongoDBConnector.d.ts.map +1 -1
- package/dist/storage/domains/memory/index.d.ts +31 -11
- package/dist/storage/domains/memory/index.d.ts.map +1 -1
- package/dist/storage/domains/run-fencing.d.ts +39 -0
- package/dist/storage/domains/run-fencing.d.ts.map +1 -0
- package/dist/storage/domains/workflows/index.d.ts +26 -9
- package/dist/storage/domains/workflows/index.d.ts.map +1 -1
- package/dist/storage/retention.d.ts +9 -5
- package/dist/storage/retention.d.ts.map +1 -1
- package/package.json +6 -5
|
@@ -20,9 +20,16 @@ export declare class MongoDBConnector {
|
|
|
20
20
|
getCollection(collectionName: string): Promise<import("mongodb").Collection<import("mongodb").Document>>;
|
|
21
21
|
collectionExists(collectionName: string): Promise<boolean>;
|
|
22
22
|
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
23
|
+
* Whether the deployment supports multi-document transactions (replica set
|
|
24
|
+
* or sharded cluster). Standalone servers and custom connector handlers
|
|
25
|
+
* don't. The answer is cached once a probe completes; a probe that fails
|
|
26
|
+
* rejects and is retried on the next call, so the answer never changes.
|
|
27
|
+
*/
|
|
28
|
+
probeTransactions(): Promise<boolean>;
|
|
29
|
+
/**
|
|
30
|
+
* Like {@link probeTransactions}, but a failed probe reads as no
|
|
31
|
+
* transaction support (and is retried on the next call), so a momentary
|
|
32
|
+
* outage degrades writes to non-atomic instead of failing them.
|
|
26
33
|
*/
|
|
27
34
|
supportsTransactions(): Promise<boolean>;
|
|
28
35
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MongoDBConnector.d.ts","sourceRoot":"","sources":["../../../src/storage/connectors/MongoDBConnector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAM,MAAM,SAAS,CAAC;AAEjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAE/C,KAAK,uBAAuB,GACxB;IACE,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,SAAS,CAAC;CACpB,GACD;IACE,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,gBAAgB,CAAC;CAC3B,CAAC;AAEN,qBAAa,gBAAgB;;IAQ3B,YAAY,OAAO,EAAE,uBAAuB,EAK3C;IAED,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,gBAAgB,CAyBlE;IAED,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,GAAG,gBAAgB,CAMxE;YAEa,aAAa;IAcrB,aAAa,CAAC,cAAc,EAAE,MAAM,qEAMzC;IAEK,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAM/D;IAED;;;;OAIG;IACG,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"MongoDBConnector.d.ts","sourceRoot":"","sources":["../../../src/storage/connectors/MongoDBConnector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAM,MAAM,SAAS,CAAC;AAEjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAE/C,KAAK,uBAAuB,GACxB;IACE,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,SAAS,CAAC;CACpB,GACD;IACE,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,gBAAgB,CAAC;CAC3B,CAAC;AAEN,qBAAa,gBAAgB;;IAQ3B,YAAY,OAAO,EAAE,uBAAuB,EAK3C;IAED,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,gBAAgB,CAyBlE;IAED,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,GAAG,gBAAgB,CAMxE;YAEa,aAAa;IAcrB,aAAa,CAAC,cAAc,EAAE,MAAM,qEAMzC;IAEK,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAM/D;IAED;;;;;OAKG;IACG,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAa1C;IAED;;;;OAIG;IACG,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAM7C;IAED;;;;;OAKG;IACG,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAehF;IAEK,KAAK,kBAUV;CACF"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { type UpdateActiveObservationsResult, type UpdateBufferedObservationsResult } from '../../../_types/@internal_core/dist/memory/index.js';
|
|
1
2
|
import type { MastraMessageContentV2 } from '@mastra/core/agent';
|
|
2
3
|
import type { MastraDBMessage, StorageThreadType } from '@mastra/core/memory';
|
|
3
4
|
import { MemoryStorage } from '@mastra/core/storage';
|
|
4
|
-
import type { PruneOptions, PruneResult, RetentionTablesDescriptor, TableRetentionPolicy, StorageResourceType, StorageListMessagesInput, StorageListMessagesByResourceIdInput, StorageListMessagesOutput, StorageListThreadsInput, StorageListThreadsOutput, StorageCloneThreadInput, StorageCloneThreadOutput, ObservationalMemoryRecord, ObservationalMemoryHistoryOptions, CreateObservationalMemoryInput, UpdateActiveObservationsInput, UpdateBufferedObservationsInput, SwapBufferedToActiveInput, SwapBufferedToActiveResult, UpdateBufferedReflectionInput, SwapBufferedReflectionToActiveInput, CreateReflectionGenerationInput, UpdateObservationalMemoryConfigInput } from '@mastra/core/storage';
|
|
5
|
+
import type { PruneOptions, PruneResult, RetentionTablesDescriptor, TableRetentionPolicy, StorageResourceType, StorageListMessagesInput, StorageListMessagesByResourceIdInput, StorageListMessagesOutput, StorageListThreadsInput, StorageListThreadsOutput, StorageCloneThreadInput, StorageCloneThreadOutput, ObservationalMemoryRecord, ObservationalMemoryHistoryOptions, CreateObservationalMemoryInput, UpdateActiveObservationsInput, UpdateBufferedObservationsInput, SwapBufferedToActiveInput, SwapBufferedToActiveResult, UpdateBufferedReflectionInput, SwapBufferedReflectionToActiveInput, CreateReflectionGenerationInput, UpdateObservationalMemoryConfigInput, RunFence } from '@mastra/core/storage';
|
|
5
6
|
import type { MongoDBDomainConfig, MongoDBIndexConfig } from '../../types.js';
|
|
6
7
|
export declare class MemoryStorageMongoDB extends MemoryStorage {
|
|
7
8
|
#private;
|
|
@@ -9,21 +10,31 @@ export declare class MemoryStorageMongoDB extends MemoryStorage {
|
|
|
9
10
|
readonly supportsObservationalMemory = true;
|
|
10
11
|
readonly supportsObservationalMemoryHistorySearch = true;
|
|
11
12
|
/** Collections managed by this domain */
|
|
12
|
-
static readonly MANAGED_COLLECTIONS: readonly ["mastra_threads", "mastra_messages", "mastra_resources", "mastra_observational_memory"];
|
|
13
|
+
static readonly MANAGED_COLLECTIONS: readonly ["mastra_threads", "mastra_messages", "mastra_resources", "mastra_observational_memory", "mastra_memory_run_fences"];
|
|
13
14
|
/**
|
|
14
15
|
* Retention-eligible collections. The observational-memory collection is
|
|
15
16
|
* excluded: it has no timestamp anchor to age on. All anchors are BSON dates.
|
|
17
|
+
* A run fence's `retiredAt` stays null until the execution holding it
|
|
18
|
+
* settles, and null is never pruned.
|
|
16
19
|
*/
|
|
17
20
|
static readonly retentionTables: RetentionTablesDescriptor;
|
|
18
21
|
constructor(config: MongoDBDomainConfig);
|
|
19
22
|
private getCollection;
|
|
20
23
|
init(): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Fenced writes need multi-document transactions, so only replica sets and
|
|
26
|
+
* sharded clusters fence. Rejects while the deployment can't be probed.
|
|
27
|
+
*/
|
|
28
|
+
supportsRunFencing(): Promise<boolean>;
|
|
29
|
+
raiseRunFence(fence: RunFence): Promise<boolean>;
|
|
30
|
+
retireRunFence(fence: RunFence): Promise<boolean>;
|
|
21
31
|
/**
|
|
22
32
|
* Delete memory rows older than each table's `maxAge`, batched. Order is
|
|
23
33
|
* messages → resources → threads so child rows never outlive the delete of
|
|
24
|
-
* their thread
|
|
25
|
-
*
|
|
26
|
-
*
|
|
34
|
+
* their thread; run fences are independent and go last. Like
|
|
35
|
+
* `deleteThread()`, this does not sweep vector-store embeddings —
|
|
36
|
+
* semantic-recall vectors live in a separate vector store the memory domain
|
|
37
|
+
* cannot reach; cleaning those up is the operator's concern.
|
|
27
38
|
*/
|
|
28
39
|
prune(policies: Record<string, TableRetentionPolicy>, options?: PruneOptions): Promise<PruneResult[]>;
|
|
29
40
|
/**
|
|
@@ -56,12 +67,13 @@ export declare class MemoryStorageMongoDB extends MemoryStorage {
|
|
|
56
67
|
}>;
|
|
57
68
|
listMessages(args: StorageListMessagesInput): Promise<StorageListMessagesOutput>;
|
|
58
69
|
listMessagesByResourceId(args: StorageListMessagesByResourceIdInput): Promise<StorageListMessagesOutput>;
|
|
59
|
-
saveMessages({ messages }: {
|
|
70
|
+
saveMessages({ messages, fence, }: {
|
|
60
71
|
messages: MastraDBMessage[];
|
|
72
|
+
fence?: RunFence;
|
|
61
73
|
}): Promise<{
|
|
62
74
|
messages: MastraDBMessage[];
|
|
63
75
|
}>;
|
|
64
|
-
updateMessages({ messages, }: {
|
|
76
|
+
updateMessages({ messages, fence, }: {
|
|
65
77
|
messages: (Partial<Omit<MastraDBMessage, 'createdAt'>> & {
|
|
66
78
|
id: string;
|
|
67
79
|
content?: {
|
|
@@ -69,6 +81,7 @@ export declare class MemoryStorageMongoDB extends MemoryStorage {
|
|
|
69
81
|
content?: MastraMessageContentV2['content'];
|
|
70
82
|
};
|
|
71
83
|
})[];
|
|
84
|
+
fence?: RunFence;
|
|
72
85
|
}): Promise<MastraDBMessage[]>;
|
|
73
86
|
getResourceById({ resourceId }: {
|
|
74
87
|
resourceId: string;
|
|
@@ -76,28 +89,33 @@ export declare class MemoryStorageMongoDB extends MemoryStorage {
|
|
|
76
89
|
saveResource({ resource }: {
|
|
77
90
|
resource: StorageResourceType;
|
|
78
91
|
}): Promise<StorageResourceType>;
|
|
79
|
-
updateResource({ resourceId, workingMemory, metadata, }: {
|
|
92
|
+
updateResource({ resourceId, workingMemory, metadata, fence, }: {
|
|
80
93
|
resourceId: string;
|
|
81
94
|
workingMemory?: string;
|
|
82
95
|
metadata?: Record<string, unknown>;
|
|
96
|
+
fence?: RunFence;
|
|
83
97
|
}): Promise<StorageResourceType>;
|
|
84
98
|
getThreadById({ threadId, resourceId, }: {
|
|
85
99
|
threadId: string;
|
|
86
100
|
resourceId?: string;
|
|
87
101
|
}): Promise<StorageThreadType | null>;
|
|
88
102
|
listThreads(args: StorageListThreadsInput): Promise<StorageListThreadsOutput>;
|
|
89
|
-
saveThread({ thread }: {
|
|
103
|
+
saveThread({ thread, fence }: {
|
|
90
104
|
thread: StorageThreadType;
|
|
105
|
+
fence?: RunFence;
|
|
91
106
|
}): Promise<StorageThreadType>;
|
|
92
|
-
updateThread({ id, title, metadata, }: {
|
|
107
|
+
updateThread({ id, title, metadata, fence, }: {
|
|
93
108
|
id: string;
|
|
94
109
|
title?: string;
|
|
95
110
|
metadata?: Record<string, unknown>;
|
|
111
|
+
fence?: RunFence;
|
|
96
112
|
}): Promise<StorageThreadType>;
|
|
97
113
|
deleteThread({ threadId }: {
|
|
98
114
|
threadId: string;
|
|
99
115
|
}): Promise<void>;
|
|
100
|
-
deleteMessages(messageIds: string[]
|
|
116
|
+
deleteMessages(messageIds: string[], options?: {
|
|
117
|
+
fence?: RunFence;
|
|
118
|
+
}): Promise<void>;
|
|
101
119
|
cloneThread(args: StorageCloneThreadInput): Promise<StorageCloneThreadOutput>;
|
|
102
120
|
private getOMKey;
|
|
103
121
|
private parseOMDocument;
|
|
@@ -106,6 +124,7 @@ export declare class MemoryStorageMongoDB extends MemoryStorage {
|
|
|
106
124
|
initializeObservationalMemory(input: CreateObservationalMemoryInput): Promise<ObservationalMemoryRecord>;
|
|
107
125
|
insertObservationalMemoryRecord(record: ObservationalMemoryRecord): Promise<void>;
|
|
108
126
|
updateActiveObservations(input: UpdateActiveObservationsInput): Promise<void>;
|
|
127
|
+
commitActiveObservations(input: UpdateActiveObservationsInput): Promise<UpdateActiveObservationsResult>;
|
|
109
128
|
createReflectionGeneration(input: CreateReflectionGenerationInput): Promise<ObservationalMemoryRecord>;
|
|
110
129
|
setReflectingFlag(id: string, isReflecting: boolean): Promise<void>;
|
|
111
130
|
setObservingFlag(id: string, isObserving: boolean): Promise<void>;
|
|
@@ -115,6 +134,7 @@ export declare class MemoryStorageMongoDB extends MemoryStorage {
|
|
|
115
134
|
setPendingMessageTokens(id: string, tokenCount: number): Promise<void>;
|
|
116
135
|
updateObservationalMemoryConfig(input: UpdateObservationalMemoryConfigInput): Promise<void>;
|
|
117
136
|
updateBufferedObservations(input: UpdateBufferedObservationsInput): Promise<void>;
|
|
137
|
+
appendBufferedObservations(input: UpdateBufferedObservationsInput): Promise<UpdateBufferedObservationsResult>;
|
|
118
138
|
swapBufferedToActive(input: SwapBufferedToActiveInput): Promise<SwapBufferedToActiveResult>;
|
|
119
139
|
updateBufferedReflection(input: UpdateBufferedReflectionInput): Promise<void>;
|
|
120
140
|
swapBufferedReflectionToActive(input: SwapBufferedReflectionToActiveInput): Promise<ObservationalMemoryRecord>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/storage/domains/memory/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,KAAK,EAAmB,eAAe,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/storage/domains/memory/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { RunFence } from '@mastra/core/storage';
|
|
2
|
+
import type { ClientSession, Collection } from 'mongodb';
|
|
3
|
+
import type { MongoDBConnector } from '../connectors/MongoDBConnector.js';
|
|
4
|
+
/** A write's fence, and the collection holding the run's current claim to check it against. */
|
|
5
|
+
export interface RunFenceCheck {
|
|
6
|
+
claims: string;
|
|
7
|
+
fence: RunFence;
|
|
8
|
+
operation: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* A run's claim: its ownership document (workflows) or raised fence (memory),
|
|
12
|
+
* keyed by runId.
|
|
13
|
+
*/
|
|
14
|
+
export interface RunClaimDocument {
|
|
15
|
+
_id: string;
|
|
16
|
+
generation: number;
|
|
17
|
+
ownerId: string;
|
|
18
|
+
leaseExpiresAt?: Date | null;
|
|
19
|
+
updatedAt?: Date;
|
|
20
|
+
retiredAt?: Date | null;
|
|
21
|
+
fencedWrites?: number;
|
|
22
|
+
}
|
|
23
|
+
export declare function getRunClaims(connector: MongoDBConnector, name: string): Promise<Collection<RunClaimDocument>>;
|
|
24
|
+
/** Duplicate-key error: an upsert lost the race to insert the document. */
|
|
25
|
+
export declare function isDuplicateKeyError(error: unknown): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Runs a write, fenced when `check` is set. A fenced write runs in a
|
|
28
|
+
* transaction that first updates the run's claim document, matching it on
|
|
29
|
+
* the fence. A fence that is no longer current matches nothing, and the write
|
|
30
|
+
* throws `RunFenceConflictError` before anything is written. A claim that
|
|
31
|
+
* changes while the transaction runs makes the update conflict, so the
|
|
32
|
+
* transaction retries and sees the new claim; a claim attempted after the
|
|
33
|
+
* update waits until the transaction commits. Updating the claim document,
|
|
34
|
+
* rather than reading it, is what makes concurrent claims conflict.
|
|
35
|
+
*
|
|
36
|
+
* Fencing is declared only on deployments that support transactions.
|
|
37
|
+
*/
|
|
38
|
+
export declare function withRunFence<T>(connector: MongoDBConnector, check: RunFenceCheck | undefined, write: (session?: ClientSession) => Promise<T>): Promise<T>;
|
|
39
|
+
//# sourceMappingURL=run-fencing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-fencing.d.ts","sourceRoot":"","sources":["../../../src/storage/domains/run-fencing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAEvE,+FAA+F;AAC/F,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,QAAQ,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC7B,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,YAAY,CAAC,SAAS,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAGnH;AAED,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE3D;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAClC,SAAS,EAAE,gBAAgB,EAC3B,KAAK,EAAE,aAAa,GAAG,SAAS,EAChC,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,GAC7C,OAAO,CAAC,CAAC,CAAC,CAaZ"}
|
|
@@ -1,22 +1,35 @@
|
|
|
1
1
|
import { WorkflowsStorage } from '@mastra/core/storage';
|
|
2
|
-
import type { PruneOptions, PruneResult, RetentionTablesDescriptor, TableRetentionPolicy, WorkflowRun, WorkflowRuns, StorageListWorkflowRunsInput, UpdateWorkflowStateOptions } from '@mastra/core/storage';
|
|
2
|
+
import type { ClaimRunOwnershipInput, ClaimRunOwnershipResult, PruneOptions, PruneResult, RenewRunOwnershipInput, RenewRunOwnershipResult, RetentionTablesDescriptor, RunFence, RunOwnershipRecord, TableRetentionPolicy, WorkflowRun, WorkflowRuns, StorageListWorkflowRunsInput, UpdateWorkflowStateOptions } from '@mastra/core/storage';
|
|
3
3
|
import type { StepResult, WorkflowRunState } from '@mastra/core/workflows';
|
|
4
4
|
import type { MongoDBDomainConfig, MongoDBIndexConfig } from '../../types.js';
|
|
5
5
|
export declare class WorkflowsStorageMongoDB extends WorkflowsStorage {
|
|
6
6
|
#private;
|
|
7
7
|
/** Collections managed by this domain */
|
|
8
|
-
static readonly MANAGED_COLLECTIONS: readonly ["mastra_workflow_snapshot"];
|
|
8
|
+
static readonly MANAGED_COLLECTIONS: readonly ["mastra_workflow_snapshot", "mastra_workflow_run_owners"];
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
* a run is pruned only after its snapshot has not been touched
|
|
10
|
+
* Both anchors are `updatedAt` (BSON date), so the policies read as
|
|
11
|
+
* inactivity: a run is pruned only after its snapshot has not been touched
|
|
12
|
+
* for `maxAge`, and an ownership document only after no claim, renewal or
|
|
13
|
+
* release has touched it for `maxAge`.
|
|
12
14
|
*/
|
|
13
15
|
static readonly retentionTables: RetentionTablesDescriptor;
|
|
14
16
|
constructor(config: MongoDBDomainConfig);
|
|
15
|
-
/** Delete workflow snapshots idle for longer than
|
|
17
|
+
/** Delete workflow snapshots and ownership documents idle for longer than each policy's `maxAge`, batched. */
|
|
16
18
|
prune(policies: Record<string, TableRetentionPolicy>, options?: PruneOptions): Promise<PruneResult[]>;
|
|
17
19
|
supportsConcurrentUpdates(): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Fenced writes need multi-document transactions, so only replica sets and
|
|
22
|
+
* sharded clusters fence. Rejects while the deployment can't be probed.
|
|
23
|
+
*/
|
|
24
|
+
supportsRunFencing(): Promise<boolean>;
|
|
18
25
|
private getCollection;
|
|
19
26
|
init(): Promise<void>;
|
|
27
|
+
claimRunOwnership({ runId, ownerId, leaseMs, force, expectedGeneration, }: ClaimRunOwnershipInput): Promise<ClaimRunOwnershipResult>;
|
|
28
|
+
renewRunOwnership({ leaseMs, ...fence }: RenewRunOwnershipInput): Promise<RenewRunOwnershipResult>;
|
|
29
|
+
releaseRunOwnership(fence: RunFence): Promise<boolean>;
|
|
30
|
+
getRunOwnership({ runId }: {
|
|
31
|
+
runId: string;
|
|
32
|
+
}): Promise<RunOwnershipRecord | null>;
|
|
20
33
|
/**
|
|
21
34
|
* Returns default index definitions for the workflows domain collections.
|
|
22
35
|
*/
|
|
@@ -30,26 +43,29 @@ export declare class WorkflowsStorageMongoDB extends WorkflowsStorage {
|
|
|
30
43
|
*/
|
|
31
44
|
createCustomIndexes(): Promise<void>;
|
|
32
45
|
dangerouslyClearAll(): Promise<void>;
|
|
33
|
-
updateWorkflowResults({ workflowName, runId, stepId, result, requestContext, state, }: {
|
|
46
|
+
updateWorkflowResults({ workflowName, runId, stepId, result, requestContext, state, fence, }: {
|
|
34
47
|
workflowName: string;
|
|
35
48
|
runId: string;
|
|
36
49
|
stepId: string;
|
|
37
50
|
result: StepResult<any, any, any, any>;
|
|
38
51
|
requestContext: Record<string, any>;
|
|
39
52
|
state?: Record<string, any>;
|
|
53
|
+
fence?: RunFence;
|
|
40
54
|
}): Promise<Record<string, StepResult<any, any, any, any>>>;
|
|
41
|
-
updateWorkflowState({ workflowName, runId, opts, }: {
|
|
55
|
+
updateWorkflowState({ workflowName, runId, opts, fence, }: {
|
|
42
56
|
workflowName: string;
|
|
43
57
|
runId: string;
|
|
44
58
|
opts: UpdateWorkflowStateOptions;
|
|
59
|
+
fence?: RunFence;
|
|
45
60
|
}): Promise<WorkflowRunState | undefined>;
|
|
46
|
-
persistWorkflowSnapshot({ workflowName, runId, resourceId, snapshot, createdAt, updatedAt, }: {
|
|
61
|
+
persistWorkflowSnapshot({ workflowName, runId, resourceId, snapshot, createdAt, updatedAt, fence, }: {
|
|
47
62
|
workflowName: string;
|
|
48
63
|
runId: string;
|
|
49
64
|
resourceId?: string;
|
|
50
65
|
snapshot: WorkflowRunState;
|
|
51
66
|
createdAt?: Date;
|
|
52
67
|
updatedAt?: Date;
|
|
68
|
+
fence?: RunFence;
|
|
53
69
|
}): Promise<void>;
|
|
54
70
|
loadWorkflowSnapshot({ workflowName, runId, }: {
|
|
55
71
|
workflowName: string;
|
|
@@ -60,9 +76,10 @@ export declare class WorkflowsStorageMongoDB extends WorkflowsStorage {
|
|
|
60
76
|
runId: string;
|
|
61
77
|
workflowName?: string;
|
|
62
78
|
}): Promise<WorkflowRun | null>;
|
|
63
|
-
deleteWorkflowRunById({ runId, workflowName }: {
|
|
79
|
+
deleteWorkflowRunById({ runId, workflowName, fence, }: {
|
|
64
80
|
runId: string;
|
|
65
81
|
workflowName: string;
|
|
82
|
+
fence?: RunFence;
|
|
66
83
|
}): Promise<void>;
|
|
67
84
|
private parseWorkflowRun;
|
|
68
85
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/storage/domains/workflows/index.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/storage/domains/workflows/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { TABLE_NAMES, PruneOptions, PruneResult, TableRetentionPolicy } from '@mastra/core/storage';
|
|
1
|
+
import type { TABLE_MEMORY_RUN_FENCES, TABLE_NAMES, TABLE_WORKFLOW_RUN_OWNERS, PruneOptions, PruneResult, TableRetentionPolicy } from '@mastra/core/storage';
|
|
2
2
|
import type { MongoDBConnector } from './connectors/MongoDBConnector.js';
|
|
3
3
|
export declare const DEFAULT_PRUNE_BATCH_SIZE = 1000;
|
|
4
4
|
/**
|
|
@@ -12,10 +12,12 @@ export declare const DEFAULT_PRUNE_BATCH_SIZE = 1000;
|
|
|
12
12
|
* - `epoch-ms`: a raw millisecond number, e.g. `schedule_triggers.actual_fire_at`.
|
|
13
13
|
*/
|
|
14
14
|
export type AnchorEncoding = 'date' | 'iso' | 'epoch-ms';
|
|
15
|
+
/** Collections `prune()` can target: the core tables plus the run fencing collections. */
|
|
16
|
+
export type PrunableTable = TABLE_NAMES | typeof TABLE_WORKFLOW_RUN_OWNERS | typeof TABLE_MEMORY_RUN_FENCES;
|
|
15
17
|
/** One collection to prune, resolved from a policy + the domain's descriptor. */
|
|
16
18
|
export interface PruneTarget {
|
|
17
19
|
/** Physical collection name. */
|
|
18
|
-
table:
|
|
20
|
+
table: PrunableTable;
|
|
19
21
|
/** Anchor field for the age comparison. */
|
|
20
22
|
column: string;
|
|
21
23
|
/** Stored representation of the anchor field (decides the cutoff's type). */
|
|
@@ -47,12 +49,14 @@ export declare function cutoffFor(policy: TableRetentionPolicy, encoding: Anchor
|
|
|
47
49
|
* Delete up to `limit` documents whose anchor field is older than `cutoff`.
|
|
48
50
|
*
|
|
49
51
|
* `deleteMany` has no limit clause, so each batch first collects `_id`s with a
|
|
50
|
-
* bounded `find`, then deletes
|
|
51
|
-
*
|
|
52
|
+
* bounded `find`, then deletes that set — the Mongo equivalent of the SQL
|
|
53
|
+
* stores' `DELETE ... WHERE rowid/ctid IN (SELECT ... LIMIT n)` pattern. The
|
|
54
|
+
* delete re-checks the anchor, so a document updated after the `find` (a
|
|
55
|
+
* renewed run ownership, a touched snapshot) survives.
|
|
52
56
|
*/
|
|
53
57
|
export declare function pruneCollectionBatch({ connector, table, column, cutoff, limit, }: {
|
|
54
58
|
connector: MongoDBConnector;
|
|
55
|
-
table:
|
|
59
|
+
table: PrunableTable;
|
|
56
60
|
column: string;
|
|
57
61
|
cutoff: Date | string | number;
|
|
58
62
|
limit: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retention.d.ts","sourceRoot":"","sources":["../../src/storage/retention.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"retention.d.ts","sourceRoot":"","sources":["../../src/storage/retention.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mastra/mongodb",
|
|
3
|
-
"version": "1.23.
|
|
3
|
+
"version": "1.23.1-alpha.1",
|
|
4
4
|
"description": "MongoDB provider for Mastra - includes vector store capabilities",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -32,14 +32,15 @@
|
|
|
32
32
|
"tsx": "^4.23.1",
|
|
33
33
|
"typescript": "^7.0.2",
|
|
34
34
|
"vitest": "4.1.11",
|
|
35
|
+
"@internal/core": "0.1.2",
|
|
35
36
|
"@internal/lint": "0.0.142",
|
|
36
37
|
"@internal/storage-test-utils": "0.0.138",
|
|
37
38
|
"@internal/types-builder": "0.0.117",
|
|
38
|
-
"@mastra/
|
|
39
|
-
"@mastra/
|
|
39
|
+
"@mastra/memory": "1.37.1-alpha.3",
|
|
40
|
+
"@mastra/core": "1.77.0-alpha.4"
|
|
40
41
|
},
|
|
41
42
|
"peerDependencies": {
|
|
42
|
-
"@mastra/core": ">=1.
|
|
43
|
+
"@mastra/core": ">=1.76.0-0 <2.0.0-0"
|
|
43
44
|
},
|
|
44
45
|
"files": [
|
|
45
46
|
"dist"
|
|
@@ -62,7 +63,7 @@
|
|
|
62
63
|
"pretest": "docker compose up -d --wait || (echo '--- docker compose up failed; dumping diagnostics ---' && docker compose ps -a && docker compose logs && df -h && exit 1)",
|
|
63
64
|
"test": "vitest run && pnpm test:fidelity",
|
|
64
65
|
"pretest:fidelity": "docker compose --profile fidelity up -d --wait mongodb-fidelity",
|
|
65
|
-
"test:fidelity": "MONGODB_REPLICA_SET_URL='mongodb://localhost:27019/?directConnection=true' vitest run src/storage/dataset-fidelity.test.ts",
|
|
66
|
+
"test:fidelity": "MONGODB_REPLICA_SET_URL='mongodb://localhost:27019/?directConnection=true' vitest run src/storage/dataset-fidelity.test.ts src/storage/run-fencing.test.ts",
|
|
66
67
|
"posttest:fidelity": "docker compose --profile fidelity stop mongodb-fidelity",
|
|
67
68
|
"posttest": "docker compose down -v",
|
|
68
69
|
"pretest:watch": "docker compose up -d",
|