@mastra/convex 1.0.11-alpha.1 → 1.1.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 +90 -0
- package/README.md +76 -4
- package/dist/cache/client.d.ts +21 -0
- package/dist/cache/client.d.ts.map +1 -0
- package/dist/cache/index.d.ts +35 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/types.d.ts +46 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/{chunk-FTVDAP6U.cjs → chunk-CV23JOCS.cjs} +44 -2
- package/dist/chunk-CV23JOCS.cjs.map +1 -0
- package/dist/chunk-EEELVBWO.cjs +893 -0
- package/dist/chunk-EEELVBWO.cjs.map +1 -0
- package/dist/chunk-FZDLZ4S3.js +887 -0
- package/dist/chunk-FZDLZ4S3.js.map +1 -0
- package/dist/{chunk-G5FLGAPE.js → chunk-JPWDG4L3.js} +42 -3
- package/dist/chunk-JPWDG4L3.js.map +1 -0
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +44 -15
- package/dist/docs/references/reference-storage-convex.md +75 -13
- package/dist/docs/references/reference-vectors-convex.md +129 -7
- package/dist/index.cjs +514 -36
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +470 -23
- package/dist/index.js.map +1 -1
- package/dist/schema.cjs +29 -17
- package/dist/schema.d.ts +76 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +1 -1
- package/dist/server/cache.d.ts +5 -0
- package/dist/server/cache.d.ts.map +1 -0
- package/dist/server/index.cjs +44 -16
- package/dist/server/index.d.ts +3 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -2
- package/dist/server/native-vector.d.ts +17 -0
- package/dist/server/native-vector.d.ts.map +1 -0
- package/dist/storage/client.d.ts +5 -0
- package/dist/storage/client.d.ts.map +1 -1
- package/dist/vector/native.d.ts +111 -0
- package/dist/vector/native.d.ts.map +1 -0
- package/package.json +5 -5
- package/dist/chunk-C6QDNSBM.cjs +0 -425
- package/dist/chunk-C6QDNSBM.cjs.map +0 -1
- package/dist/chunk-FTVDAP6U.cjs.map +0 -1
- package/dist/chunk-G5FLGAPE.js.map +0 -1
- package/dist/chunk-NXNW2MK5.js +0 -423
- package/dist/chunk-NXNW2MK5.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,95 @@
|
|
|
1
1
|
# @mastra/convex
|
|
2
2
|
|
|
3
|
+
## 1.1.0-alpha.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Added native Convex vector search support for production workloads. The new `ConvexNativeVector` adapter uses ([#16729](https://github.com/mastra-ai/mastra/pull/16729))
|
|
8
|
+
Convex schema-defined vector indexes and `ctx.vectorSearch` instead of loading vectors through `ConvexVector` and
|
|
9
|
+
scoring them in JavaScript.
|
|
10
|
+
|
|
11
|
+
Define a native vector table in `convex/schema.ts`:
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
import { defineSchema } from 'convex/server';
|
|
15
|
+
import { defineMastraNativeVectorTable } from '@mastra/convex/schema';
|
|
16
|
+
|
|
17
|
+
export default defineSchema({
|
|
18
|
+
docs_vectors: defineMastraNativeVectorTable({
|
|
19
|
+
dimensions: 1536,
|
|
20
|
+
}),
|
|
21
|
+
});
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Export the native vector handlers:
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
import { mastraNativeVectorAction, mastraNativeVectorMutation, mastraNativeVectorQuery } from '@mastra/convex/server';
|
|
28
|
+
|
|
29
|
+
export const query = mastraNativeVectorAction;
|
|
30
|
+
export const read = mastraNativeVectorQuery;
|
|
31
|
+
export const write = mastraNativeVectorMutation;
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Then configure `ConvexNativeVector` in your Mastra app:
|
|
35
|
+
|
|
36
|
+
```ts
|
|
37
|
+
import { ConvexNativeVector } from '@mastra/convex';
|
|
38
|
+
|
|
39
|
+
const vectorStore = new ConvexNativeVector({
|
|
40
|
+
id: 'convex-native-vectors',
|
|
41
|
+
deploymentUrl: process.env.CONVEX_URL!,
|
|
42
|
+
adminAuthToken: process.env.CONVEX_ADMIN_KEY!,
|
|
43
|
+
indexes: {
|
|
44
|
+
docs: {
|
|
45
|
+
tableName: 'docs_vectors',
|
|
46
|
+
vectorIndexName: 'by_embedding',
|
|
47
|
+
dimension: 1536,
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
- Added `ConvexServerCache` so Convex-backed Mastra apps can keep durable stream replay and response cache state in Convex. ([#16736](https://github.com/mastra-ai/mastra/pull/16736))
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
import { ConvexServerCache } from '@mastra/convex';
|
|
57
|
+
|
|
58
|
+
const cache = new ConvexServerCache({
|
|
59
|
+
deploymentUrl: process.env.CONVEX_URL!,
|
|
60
|
+
adminAuthToken: process.env.CONVEX_ADMIN_KEY!,
|
|
61
|
+
});
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
The package also exports the Convex cache schema tables and server mutation for mounting the cache handler in a Convex app.
|
|
65
|
+
Existing Convex users who adopt the cache must add `mastra_cache` and `mastra_cache_list_items` to their Convex schema, mount the `mastraCache` handler, and deploy the schema update.
|
|
66
|
+
|
|
67
|
+
### Patch Changes
|
|
68
|
+
|
|
69
|
+
- Updated dependencies [[`5556cc1`](https://github.com/mastra-ai/mastra/commit/5556cc1befec71518d84f826b3bfe3a079a9daf7), [`5499303`](https://github.com/mastra-ai/mastra/commit/54993032c1ebc09642625b78d2014e0cf84a3cae), [`e47bca7`](https://github.com/mastra-ai/mastra/commit/e47bca7b72866d3abd173b9f530ac4318113a8ff), [`0031d0f`](https://github.com/mastra-ai/mastra/commit/0031d0f13831d7843ac5d498734a7d92862e2ce3), [`3498b49`](https://github.com/mastra-ai/mastra/commit/3498b4946be94f4313cd817733589680dcda5278), [`359439b`](https://github.com/mastra-ai/mastra/commit/359439bb8c635e048176306828195f8297f50021)]:
|
|
70
|
+
- @mastra/core@1.36.0-alpha.3
|
|
71
|
+
|
|
72
|
+
## 1.0.11
|
|
73
|
+
|
|
74
|
+
### Patch Changes
|
|
75
|
+
|
|
76
|
+
- Respect optional `resourceId` in `getThreadById` so scoped thread lookups return `null` when the thread belongs to a different resource. ([#14237](https://github.com/mastra-ai/mastra/pull/14237))
|
|
77
|
+
|
|
78
|
+
Example:
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
const thread = await memory.getThreadById({
|
|
82
|
+
threadId: 'my-thread-id',
|
|
83
|
+
resourceId: 'my-user-id',
|
|
84
|
+
});
|
|
85
|
+
// Returns null if the thread does not belong to 'my-user-id'.
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
- Track `suspendedAt` and `suspendPayload` on background tasks. SQL adapters auto-migrate the new columns via `alterTable`. ([#16260](https://github.com/mastra-ai/mastra/pull/16260))
|
|
89
|
+
|
|
90
|
+
- Updated dependencies [[`9f17410`](https://github.com/mastra-ai/mastra/commit/9f1741080def23d42ee50b39887a385ae316a3c6), [`7ad5585`](https://github.com/mastra-ai/mastra/commit/7ad55856406f1de398dc713f6a9eaa78b2784bb6), [`ac47842`](https://github.com/mastra-ai/mastra/commit/ac478427aa7a5f5fdaed633a911218689b438c60), [`cc189cc`](https://github.com/mastra-ai/mastra/commit/cc189cc0128eb7af233476b5e421ec6888bffde7), [`d1fdbd0`](https://github.com/mastra-ai/mastra/commit/d1fdbd012add5623cb7e6b7f882b605ab358bbb4), [`210ea7a`](https://github.com/mastra-ai/mastra/commit/210ea7af559791b73a44fc9c12179908aaa3183f), [`7c275a8`](https://github.com/mastra-ai/mastra/commit/7c275a810595e1a6c41ccc39720531ab65734700), [`bae019e`](https://github.com/mastra-ai/mastra/commit/bae019ecb6694da96909f7ec7b9eb3a0a33aa887), [`890b24c`](https://github.com/mastra-ai/mastra/commit/890b24cc7d32ed6aa4dfe253e54dc6bf4099f690), [`f984b4d`](https://github.com/mastra-ai/mastra/commit/f984b4d6c60bf2ae2a9b156f0e8c35a66fe96c91), [`6742347`](https://github.com/mastra-ai/mastra/commit/6742347d71955d7639adc9ddf6ff8282de7ee3ba), [`b59316f`](https://github.com/mastra-ai/mastra/commit/b59316ffa0f7688165b0f9c81ccdf85da461e5b2), [`0f48ebf`](https://github.com/mastra-ai/mastra/commit/0f48ebfc7ac7897b2092a189f45751924cf56d1c), [`37c0dc5`](https://github.com/mastra-ai/mastra/commit/37c0dc5697d343db98628bf867bf71ce6deec6d7), [`087e413`](https://github.com/mastra-ai/mastra/commit/087e4133e5d6efa36619e9556c16750e4179c047), [`83218c8`](https://github.com/mastra-ai/mastra/commit/83218c88b37773c9424fbe733b37be556e55e94d), [`ef6b584`](https://github.com/mastra-ai/mastra/commit/ef6b5847ac33c0a7e80af3a86e8801e2933dd3ee), [`c6eb39e`](https://github.com/mastra-ai/mastra/commit/c6eb39ea6dca381c6563cb240237fbe608e02f93), [`7b0ad1f`](https://github.com/mastra-ai/mastra/commit/7b0ad1f5c53dc118c6da12ae82ae2587037dc2b8), [`d91ebe2`](https://github.com/mastra-ai/mastra/commit/d91ebe28ee065d8f2ed6df741c3c07f58d359529), [`62666c3`](https://github.com/mastra-ai/mastra/commit/62666c367eaeac3941ead454b1d38810cc855721), [`33f5061`](https://github.com/mastra-ai/mastra/commit/33f5061cd1c0335020c3faae61ce96de822854fa), [`4af2160`](https://github.com/mastra-ai/mastra/commit/4af2160322f4718cac421930cce85641e9512389), [`087e413`](https://github.com/mastra-ai/mastra/commit/087e4133e5d6efa36619e9556c16750e4179c047), [`265ec9f`](https://github.com/mastra-ai/mastra/commit/265ec9f887b5c81255c873a76ff7796f16e4f99b), [`ce01024`](https://github.com/mastra-ai/mastra/commit/ce010242eee9bdfc09e4c26725b9d37998679a8d), [`6ce80bf`](https://github.com/mastra-ai/mastra/commit/6ce80bf4872a891e0bddf8b80561a80584efb14b), [`f984b4d`](https://github.com/mastra-ai/mastra/commit/f984b4d6c60bf2ae2a9b156f0e8c35a66fe96c91), [`136c959`](https://github.com/mastra-ai/mastra/commit/136c9592fb0eeb0cd212f28629d8a29b7557a2fc), [`9268531`](https://github.com/mastra-ai/mastra/commit/9268531e7ec4be98beeba3b3ae8be0a7ea380662), [`13ead79`](https://github.com/mastra-ai/mastra/commit/13ead79149486b88144db7e11e6ff551caef5be1), [`dccd8f1`](https://github.com/mastra-ai/mastra/commit/dccd8f1f8b8f1ad203b77556207e5529567c616d), [`4df7cc7`](https://github.com/mastra-ai/mastra/commit/4df7cc79342fd065fe7fdeef93c094db14b12bcd), [`f180e49`](https://github.com/mastra-ai/mastra/commit/f180e4990e71b04c9a475b523584071712f0048f), [`9260e01`](https://github.com/mastra-ai/mastra/commit/9260e015276fb1b500f7878ee452b47476bf1583), [`2f6c54e`](https://github.com/mastra-ai/mastra/commit/2f6c54e17c041cac1def54baaa6b771647836414), [`aca3121`](https://github.com/mastra-ai/mastra/commit/aca31211233dac25459f140ea4fcfb3a5af64c18), [`e06a159`](https://github.com/mastra-ai/mastra/commit/e06a1598ca07a6c3778aefc2a2d288363c6294ff), [`4dd900d`](https://github.com/mastra-ai/mastra/commit/4dd900d75dfe9be89f8c15188b368a8622aa1e18), [`b560d6f`](https://github.com/mastra-ai/mastra/commit/b560d6f88b9b904b15c10f75c949eb145bc27684), [`99869ec`](https://github.com/mastra-ai/mastra/commit/99869ecb1f2aa6dfcc44fa4e843e5ee0344efa64), [`900d086`](https://github.com/mastra-ai/mastra/commit/900d086bb737b9cf2fcf68f11b0389b801a2738c), [`4c0e286`](https://github.com/mastra-ai/mastra/commit/4c0e28637c9cfb4f416549b55e97ebfa13319dfc), [`55f1e2d`](https://github.com/mastra-ai/mastra/commit/55f1e2d65425b95a49ae788053b266f256e38c96), [`4ff5bdf`](https://github.com/mastra-ai/mastra/commit/4ff5bdfe170cba6dfb5260c6af0f4ba668430772), [`9cdf38e`](https://github.com/mastra-ai/mastra/commit/9cdf38e58506e1109c8b38f97cd7770978a4218e), [`087e413`](https://github.com/mastra-ai/mastra/commit/087e4133e5d6efa36619e9556c16750e4179c047), [`db34bc6`](https://github.com/mastra-ai/mastra/commit/db34bc6fb36cf125bda0c46be4d3fdc774b70cc4), [`990851e`](https://github.com/mastra-ai/mastra/commit/990851edcb0e30be5c2c18b6532f1a876cc2d335), [`bbcd93c`](https://github.com/mastra-ai/mastra/commit/bbcd93cf7d8aa1007d6d84bfd033b8015c912087), [`8373ff4`](https://github.com/mastra-ai/mastra/commit/8373ff46745d77af79f183c4470f80fa2727a6b2), [`d48a705`](https://github.com/mastra-ai/mastra/commit/d48a705ff3dfbdc7a996e07ecd8293b5effd9a2a), [`308bd07`](https://github.com/mastra-ai/mastra/commit/308bd074f35cef0c75d82fc1eb19382fe04ecf6f), [`6068a6c`](https://github.com/mastra-ai/mastra/commit/6068a6c42950fad3ebfc92346417896ba60803d2), [`36b3bbf`](https://github.com/mastra-ai/mastra/commit/36b3bbf5a8d59f7e23d47e29340e76c681b4929c), [`d86f031`](https://github.com/mastra-ai/mastra/commit/d86f031eb6b0b2570145afafea664e59bf688962), [`b275631`](https://github.com/mastra-ai/mastra/commit/b275631dc10541a482b2e2d4a3e3cfa843bd5fa1), [`00106be`](https://github.com/mastra-ai/mastra/commit/00106bede59b81e5b0e9cd6aad8d3b5dbc336387), [`bd36d8e`](https://github.com/mastra-ai/mastra/commit/bd36d8eb6de8c9a0310352649dbd4b06703c2299), [`11c1528`](https://github.com/mastra-ai/mastra/commit/11c152848c5d0ef227184853b5040f5b41ee7b1e), [`4999667`](https://github.com/mastra-ai/mastra/commit/49996678b68356cad7f088430009690406c50fbd), [`e2a079c`](https://github.com/mastra-ai/mastra/commit/e2a079cc3755b1895f7bd5dc36e9be81b11c7c22), [`8ac9141`](https://github.com/mastra-ai/mastra/commit/8ac9141439caa8fdd674944c4d84f29b3c730296), [`25184ff`](https://github.com/mastra-ai/mastra/commit/25184ffaf1293ec95119426eb1a1f8d38831b96c), [`534a456`](https://github.com/mastra-ai/mastra/commit/534a456a25e4df1e5407e7e632f4cb3b1fa14f9d), [`105e454`](https://github.com/mastra-ai/mastra/commit/105e454c95af06a7c741c15969d8f9b0f02463a7), [`aebde9c`](https://github.com/mastra-ai/mastra/commit/aebde9cfacf56592c6b6350cae721740fe090b8a), [`36bae07`](https://github.com/mastra-ai/mastra/commit/36bae07c0e70b1b3006f2fd20830e8883dcbd066), [`5688881`](https://github.com/mastra-ai/mastra/commit/5688881669c7ed157f31ac77f6fc5f8d95ceea32)]:
|
|
91
|
+
- @mastra/core@1.33.0
|
|
92
|
+
|
|
3
93
|
## 1.0.11-alpha.1
|
|
4
94
|
|
|
5
95
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -3,8 +3,10 @@
|
|
|
3
3
|
Convex adapters for Mastra:
|
|
4
4
|
|
|
5
5
|
- `ConvexStore` implements the Mastra storage contract (threads, messages, workflows, scores, resources).
|
|
6
|
-
- `ConvexVector` stores embeddings inside Convex and performs cosine similarity search.
|
|
7
|
-
-
|
|
6
|
+
- `ConvexVector` stores embeddings inside Convex and performs development-scale cosine similarity search.
|
|
7
|
+
- `ConvexNativeVector` uses Convex native vector search for production workloads.
|
|
8
|
+
- `ConvexServerCache` stores Mastra server cache entries in Convex for durable stream replay and response caching.
|
|
9
|
+
- `@mastra/convex/server` exposes the required Convex table definitions, storage mutation, cache handlers, and native vector handlers.
|
|
8
10
|
|
|
9
11
|
## Quick start
|
|
10
12
|
|
|
@@ -28,6 +30,8 @@ import {
|
|
|
28
30
|
mastraScoresTable,
|
|
29
31
|
mastraVectorIndexesTable,
|
|
30
32
|
mastraVectorsTable,
|
|
33
|
+
mastraCacheTable,
|
|
34
|
+
mastraCacheListItemsTable,
|
|
31
35
|
mastraDocumentsTable,
|
|
32
36
|
} from '@mastra/convex/schema';
|
|
33
37
|
|
|
@@ -39,11 +43,13 @@ export default defineSchema({
|
|
|
39
43
|
mastra_scorers: mastraScoresTable,
|
|
40
44
|
mastra_vector_indexes: mastraVectorIndexesTable,
|
|
41
45
|
mastra_vectors: mastraVectorsTable,
|
|
46
|
+
mastra_cache: mastraCacheTable,
|
|
47
|
+
mastra_cache_list_items: mastraCacheListItemsTable,
|
|
42
48
|
mastra_documents: mastraDocumentsTable,
|
|
43
49
|
});
|
|
44
50
|
```
|
|
45
51
|
|
|
46
|
-
### 3. Create the storage
|
|
52
|
+
### 3. Create the storage and cache handlers
|
|
47
53
|
|
|
48
54
|
In `convex/mastra/storage.ts`:
|
|
49
55
|
|
|
@@ -53,6 +59,14 @@ import { mastraStorage } from '@mastra/convex/server';
|
|
|
53
59
|
export const handle = mastraStorage;
|
|
54
60
|
```
|
|
55
61
|
|
|
62
|
+
In `convex/mastra/cache.ts`:
|
|
63
|
+
|
|
64
|
+
```ts
|
|
65
|
+
import { mastraCache } from '@mastra/convex/server';
|
|
66
|
+
|
|
67
|
+
export const handle = mastraCache;
|
|
68
|
+
```
|
|
69
|
+
|
|
56
70
|
### 4. Deploy to Convex
|
|
57
71
|
|
|
58
72
|
```bash
|
|
@@ -64,7 +78,7 @@ npx convex deploy
|
|
|
64
78
|
### 5. Use in Mastra
|
|
65
79
|
|
|
66
80
|
```ts
|
|
67
|
-
import { ConvexStore } from '@mastra/convex';
|
|
81
|
+
import { ConvexServerCache, ConvexStore } from '@mastra/convex';
|
|
68
82
|
|
|
69
83
|
const storage = new ConvexStore({
|
|
70
84
|
id: 'convex',
|
|
@@ -72,8 +86,18 @@ const storage = new ConvexStore({
|
|
|
72
86
|
adminAuthToken: process.env.CONVEX_ADMIN_KEY!,
|
|
73
87
|
storageFunction: 'mastra/storage:handle', // default
|
|
74
88
|
});
|
|
89
|
+
|
|
90
|
+
const cache = new ConvexServerCache({
|
|
91
|
+
deploymentUrl: process.env.CONVEX_URL!,
|
|
92
|
+
adminAuthToken: process.env.CONVEX_ADMIN_KEY!,
|
|
93
|
+
cacheFunction: 'mastra/cache:handle', // default
|
|
94
|
+
requestTimeoutMs: 30_000, // default
|
|
95
|
+
});
|
|
75
96
|
```
|
|
76
97
|
|
|
98
|
+
`clear()` removes rows whose stored prefix exactly matches the configured cache prefix. Cleanup runs in bounded batches, so reads for a key being cleared can return empty results until cleanup finishes. During cleanup, cache metadata can briefly use an internal `deleted` state before the next cleanup pass removes it. List pushes refresh the configured cache TTL.
|
|
99
|
+
Use this cache for durable replay of moderate-frequency events; batch high-frequency token streams or use a lower-latency cache backend.
|
|
100
|
+
|
|
77
101
|
For vectors:
|
|
78
102
|
|
|
79
103
|
```ts
|
|
@@ -86,6 +110,52 @@ const vector = new ConvexVector({
|
|
|
86
110
|
});
|
|
87
111
|
```
|
|
88
112
|
|
|
113
|
+
`ConvexVector` scans stored vectors through the storage handler and computes similarity in the adapter. Use it for local development, tests, and small datasets.
|
|
114
|
+
|
|
115
|
+
For native Convex vector search, define a dedicated table in `convex/schema.ts`:
|
|
116
|
+
|
|
117
|
+
```ts
|
|
118
|
+
import { defineSchema } from 'convex/server';
|
|
119
|
+
import { defineMastraNativeVectorTable } from '@mastra/convex/schema';
|
|
120
|
+
|
|
121
|
+
export default defineSchema({
|
|
122
|
+
docs_vectors: defineMastraNativeVectorTable({
|
|
123
|
+
dimensions: 1536,
|
|
124
|
+
}),
|
|
125
|
+
});
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Export the native vector handlers in `convex/mastra/nativeVector.ts`:
|
|
129
|
+
|
|
130
|
+
```ts
|
|
131
|
+
import { mastraNativeVectorAction, mastraNativeVectorMutation, mastraNativeVectorQuery } from '@mastra/convex/server';
|
|
132
|
+
|
|
133
|
+
export const query = mastraNativeVectorAction;
|
|
134
|
+
export const read = mastraNativeVectorQuery;
|
|
135
|
+
export const write = mastraNativeVectorMutation;
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Configure the native vector adapter:
|
|
139
|
+
|
|
140
|
+
```ts
|
|
141
|
+
import { ConvexNativeVector } from '@mastra/convex';
|
|
142
|
+
|
|
143
|
+
const vector = new ConvexNativeVector({
|
|
144
|
+
id: 'convex-native-vectors',
|
|
145
|
+
deploymentUrl: process.env.CONVEX_URL!,
|
|
146
|
+
adminAuthToken: process.env.CONVEX_ADMIN_KEY!,
|
|
147
|
+
indexes: {
|
|
148
|
+
docs: {
|
|
149
|
+
tableName: 'docs_vectors',
|
|
150
|
+
vectorIndexName: 'by_embedding',
|
|
151
|
+
dimension: 1536,
|
|
152
|
+
},
|
|
153
|
+
},
|
|
154
|
+
});
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Native vector search uses Convex's schema-defined vector indexes and action-only `ctx.vectorSearch` API. It supports `topK` values from 1 to 256 and equality filters on fields declared in the Convex vector index `filterFields`.
|
|
158
|
+
|
|
89
159
|
## Architecture
|
|
90
160
|
|
|
91
161
|
This adapter uses **typed Convex tables** for each Mastra domain:
|
|
@@ -99,6 +169,8 @@ This adapter uses **typed Convex tables** for each Mastra domain:
|
|
|
99
169
|
| Scorers | `mastra_scorers` | Evaluation data |
|
|
100
170
|
| Vector Indexes | `mastra_vector_indexes` | Index metadata |
|
|
101
171
|
| Vectors | `mastra_vectors` | Embeddings |
|
|
172
|
+
| Cache | `mastra_cache` | Cache metadata |
|
|
173
|
+
| Cache Items | `mastra_cache_list_items` | Cache list entries |
|
|
102
174
|
| Fallback | `mastra_documents` | Unknown tables |
|
|
103
175
|
|
|
104
176
|
All typed tables include:
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { CacheRequest } from './types.js';
|
|
2
|
+
export type ConvexCacheClientConfig = {
|
|
3
|
+
deploymentUrl: string;
|
|
4
|
+
adminAuthToken: string;
|
|
5
|
+
cacheFunction?: string;
|
|
6
|
+
requestTimeoutMs?: number;
|
|
7
|
+
};
|
|
8
|
+
export type RawCacheResult<T = unknown> = {
|
|
9
|
+
result: T;
|
|
10
|
+
hasMore?: boolean;
|
|
11
|
+
};
|
|
12
|
+
export declare class ConvexCacheClient {
|
|
13
|
+
private readonly deploymentUrl;
|
|
14
|
+
private readonly adminAuthToken;
|
|
15
|
+
private readonly cacheFunction;
|
|
16
|
+
private readonly requestTimeoutMs;
|
|
17
|
+
constructor({ deploymentUrl, adminAuthToken, cacheFunction, requestTimeoutMs }: ConvexCacheClientConfig);
|
|
18
|
+
callCacheRaw<T = unknown>(request: CacheRequest): Promise<RawCacheResult<T>>;
|
|
19
|
+
callCache<T = unknown>(request: CacheRequest): Promise<T>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/cache/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,SAAS,CAAC;AAE3D,MAAM,MAAM,uBAAuB,GAAG;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,OAAO,IAAI;IACxC,MAAM,EAAE,CAAC,CAAC;IACV,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAaF,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;gBAE9B,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,EAAE,uBAAuB;IAuBjG,YAAY,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAgE5E,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC;CAIhE"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { MastraServerCache } from '@mastra/core/cache';
|
|
2
|
+
import { ConvexCacheClient } from './client.js';
|
|
3
|
+
import type { ConvexCacheClientConfig } from './client.js';
|
|
4
|
+
export type ConvexServerCacheConfig = {
|
|
5
|
+
/**
|
|
6
|
+
* Prefix applied to all cache keys. `clear()` removes rows whose stored
|
|
7
|
+
* prefix exactly matches this value.
|
|
8
|
+
*/
|
|
9
|
+
keyPrefix?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Default cache TTL in milliseconds. Set to 0 to disable expiry.
|
|
12
|
+
*/
|
|
13
|
+
ttlMs?: number;
|
|
14
|
+
} & ({
|
|
15
|
+
client: ConvexCacheClient;
|
|
16
|
+
} | ConvexCacheClientConfig);
|
|
17
|
+
export declare class ConvexServerCache extends MastraServerCache {
|
|
18
|
+
private readonly client;
|
|
19
|
+
private readonly keyPrefix;
|
|
20
|
+
private readonly ttlMs;
|
|
21
|
+
constructor(config: ConvexServerCacheConfig);
|
|
22
|
+
private getKey;
|
|
23
|
+
private getExpiresAt;
|
|
24
|
+
private callUntilSettled;
|
|
25
|
+
get(key: string): Promise<unknown>;
|
|
26
|
+
set(key: string, value: unknown, ttlMs?: number): Promise<void>;
|
|
27
|
+
listLength(key: string): Promise<number>;
|
|
28
|
+
listPush(key: string, value: unknown): Promise<void>;
|
|
29
|
+
listFromTo(key: string, from: number, to?: number): Promise<unknown[]>;
|
|
30
|
+
delete(key: string): Promise<void>;
|
|
31
|
+
clear(): Promise<void>;
|
|
32
|
+
increment(key: string): Promise<number>;
|
|
33
|
+
}
|
|
34
|
+
export { ConvexCacheClient, type ConvexCacheClientConfig };
|
|
35
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAExD,MAAM,MAAM,uBAAuB,GAAG;IACpC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,CAAC;IAAE,MAAM,EAAE,iBAAiB,CAAA;CAAE,GAAG,uBAAuB,CAAC,CAAC;AAU9D,qBAAa,iBAAkB,SAAQ,iBAAiB;IACtD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,MAAM,EAAE,uBAAuB;IAQ3C,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,YAAY;YAKN,gBAAgB;IAWxB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOlC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU/D,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOxC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAUpD,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAE,MAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAS1E,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAQ9C;AAED,OAAO,EAAE,iBAAiB,EAAE,KAAK,uBAAuB,EAAE,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export type CacheRequest = {
|
|
2
|
+
op: 'get';
|
|
3
|
+
key: string;
|
|
4
|
+
} | {
|
|
5
|
+
op: 'set';
|
|
6
|
+
key: string;
|
|
7
|
+
keyPrefix: string;
|
|
8
|
+
value: unknown;
|
|
9
|
+
expiresAt: number | null;
|
|
10
|
+
} | {
|
|
11
|
+
op: 'listLength';
|
|
12
|
+
key: string;
|
|
13
|
+
} | {
|
|
14
|
+
op: 'listPush';
|
|
15
|
+
key: string;
|
|
16
|
+
keyPrefix: string;
|
|
17
|
+
value: unknown;
|
|
18
|
+
expiresAt: number | null;
|
|
19
|
+
} | {
|
|
20
|
+
op: 'listFromTo';
|
|
21
|
+
key: string;
|
|
22
|
+
from: number;
|
|
23
|
+
to: number;
|
|
24
|
+
} | {
|
|
25
|
+
op: 'delete';
|
|
26
|
+
key: string;
|
|
27
|
+
} | {
|
|
28
|
+
op: 'clear';
|
|
29
|
+
keyPrefix: string;
|
|
30
|
+
} | {
|
|
31
|
+
op: 'increment';
|
|
32
|
+
key: string;
|
|
33
|
+
keyPrefix: string;
|
|
34
|
+
expiresAt: number | null;
|
|
35
|
+
};
|
|
36
|
+
export type CacheResponse = {
|
|
37
|
+
ok: true;
|
|
38
|
+
result?: unknown;
|
|
39
|
+
hasMore?: boolean;
|
|
40
|
+
} | {
|
|
41
|
+
ok: false;
|
|
42
|
+
error: string;
|
|
43
|
+
code?: string;
|
|
44
|
+
details?: Record<string, unknown>;
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cache/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GACpB;IACE,EAAE,EAAE,KAAK,CAAC;IACV,GAAG,EAAE,MAAM,CAAC;CACb,GACD;IACE,EAAE,EAAE,KAAK,CAAC;IACV,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,GACD;IACE,EAAE,EAAE,YAAY,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb,GACD;IACE,EAAE,EAAE,UAAU,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,GACD;IACE,EAAE,EAAE,YAAY,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ,GACD;IACE,EAAE,EAAE,QAAQ,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb,GACD;IACE,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB,GACD;IACE,EAAE,EAAE,WAAW,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEN,MAAM,MAAM,aAAa,GACrB;IACE,EAAE,EAAE,IAAI,CAAC;IACT,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GACD;IACE,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,CAAC"}
|
|
@@ -69,6 +69,45 @@ var mastraVectorsTable = server.defineTable({
|
|
|
69
69
|
embedding: values.v.array(values.v.float64()),
|
|
70
70
|
metadata: values.v.optional(values.v.any())
|
|
71
71
|
}).index("by_index_id", ["indexName", "id"]).index("by_index", ["indexName"]);
|
|
72
|
+
function defineMastraNativeVectorTable({
|
|
73
|
+
dimensions,
|
|
74
|
+
vectorIndexName = "by_embedding",
|
|
75
|
+
staged = false
|
|
76
|
+
}) {
|
|
77
|
+
if (!Number.isInteger(dimensions) || dimensions < 2 || dimensions > 4096) {
|
|
78
|
+
throw new Error("defineMastraNativeVectorTable: dimensions must be an integer between 2 and 4096.");
|
|
79
|
+
}
|
|
80
|
+
const table = server.defineTable({
|
|
81
|
+
id: values.v.string(),
|
|
82
|
+
embedding: values.v.array(values.v.float64()),
|
|
83
|
+
metadata: values.v.optional(values.v.any())
|
|
84
|
+
}).index("by_record_id", ["id"]);
|
|
85
|
+
if (staged) {
|
|
86
|
+
return table.vectorIndex(vectorIndexName, {
|
|
87
|
+
vectorField: "embedding",
|
|
88
|
+
dimensions,
|
|
89
|
+
staged: true
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
return table.vectorIndex(vectorIndexName, {
|
|
93
|
+
vectorField: "embedding",
|
|
94
|
+
dimensions
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
var mastraCacheTable = server.defineTable({
|
|
98
|
+
key: values.v.string(),
|
|
99
|
+
keyPrefix: values.v.string(),
|
|
100
|
+
kind: values.v.union(values.v.literal("value"), values.v.literal("list"), values.v.literal("counter"), values.v.literal("deleted")),
|
|
101
|
+
value: values.v.optional(values.v.string()),
|
|
102
|
+
counter: values.v.optional(values.v.number()),
|
|
103
|
+
expiresAt: values.v.union(values.v.number(), values.v.null())
|
|
104
|
+
}).index("by_key", ["key"]).index("by_key_prefix", ["keyPrefix"]);
|
|
105
|
+
var mastraCacheListItemsTable = server.defineTable({
|
|
106
|
+
key: values.v.string(),
|
|
107
|
+
keyPrefix: values.v.string(),
|
|
108
|
+
index: values.v.number(),
|
|
109
|
+
value: values.v.string()
|
|
110
|
+
}).index("by_key_prefix", ["keyPrefix"]).index("by_key_index", ["key", "index"]);
|
|
72
111
|
var mastraDocumentsTable = server.defineTable({
|
|
73
112
|
table: values.v.string(),
|
|
74
113
|
primaryKey: values.v.string(),
|
|
@@ -101,6 +140,9 @@ Object.defineProperty(exports, "TABLE_WORKFLOW_SNAPSHOT", {
|
|
|
101
140
|
exports.TABLE_DOCUMENTS = TABLE_DOCUMENTS;
|
|
102
141
|
exports.TABLE_VECTORS = TABLE_VECTORS;
|
|
103
142
|
exports.TABLE_VECTOR_INDEXES = TABLE_VECTOR_INDEXES;
|
|
143
|
+
exports.defineMastraNativeVectorTable = defineMastraNativeVectorTable;
|
|
144
|
+
exports.mastraCacheListItemsTable = mastraCacheListItemsTable;
|
|
145
|
+
exports.mastraCacheTable = mastraCacheTable;
|
|
104
146
|
exports.mastraDocumentsTable = mastraDocumentsTable;
|
|
105
147
|
exports.mastraMessagesTable = mastraMessagesTable;
|
|
106
148
|
exports.mastraResourcesTable = mastraResourcesTable;
|
|
@@ -109,5 +151,5 @@ exports.mastraThreadsTable = mastraThreadsTable;
|
|
|
109
151
|
exports.mastraVectorIndexesTable = mastraVectorIndexesTable;
|
|
110
152
|
exports.mastraVectorsTable = mastraVectorsTable;
|
|
111
153
|
exports.mastraWorkflowSnapshotsTable = mastraWorkflowSnapshotsTable;
|
|
112
|
-
//# sourceMappingURL=chunk-
|
|
113
|
-
//# sourceMappingURL=chunk-
|
|
154
|
+
//# sourceMappingURL=chunk-CV23JOCS.cjs.map
|
|
155
|
+
//# sourceMappingURL=chunk-CV23JOCS.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/schema.ts"],"names":["v","defineTable","TABLE_SCHEMAS","TABLE_THREADS","TABLE_MESSAGES","TABLE_RESOURCES","TABLE_SCORERS"],"mappings":"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","file":"chunk-CV23JOCS.cjs","sourcesContent":["/**\n * Convex schema definitions for Mastra tables.\n *\n * This file dynamically builds Convex table definitions from the canonical\n * TABLE_SCHEMAS in @mastra/core/storage/constants to ensure they stay in sync.\n *\n * The import path @mastra/core/storage/constants is specifically designed to\n * avoid pulling in Node.js dependencies, making it safe to use in Convex's\n * sandboxed schema evaluation environment.\n */\nimport {\n TABLE_SCHEMAS,\n TABLE_WORKFLOW_SNAPSHOT,\n TABLE_MESSAGES,\n TABLE_THREADS,\n TABLE_RESOURCES,\n TABLE_SCORERS,\n} from '@mastra/core/storage/constants';\nimport { defineTable } from 'convex/server';\nimport { v } from 'convex/values';\n\n/**\n * Helper to convert Mastra StorageColumn type to Convex validator\n */\nfunction columnToValidator(column: { type: string; nullable?: boolean }) {\n let validator;\n switch (column.type) {\n case 'text':\n validator = v.string();\n break;\n case 'integer':\n case 'float':\n validator = v.number();\n break;\n case 'bigint':\n validator = v.int64();\n break;\n case 'boolean':\n validator = v.boolean();\n break;\n case 'timestamp':\n validator = v.string(); // Store as ISO string\n break;\n case 'jsonb':\n case 'json':\n validator = v.any();\n break;\n default:\n validator = v.any();\n }\n return column.nullable ? v.optional(validator) : validator;\n}\n\n/**\n * Build Convex table definition from Mastra schema.\n * Includes the `id` field as a regular field (Convex auto-generates _id).\n */\nfunction buildTableFromSchema(schema: Record<string, { type: string; nullable?: boolean; primaryKey?: boolean }>) {\n const fields: Record<string, any> = {};\n for (const [key, column] of Object.entries(schema)) {\n fields[key] = columnToValidator(column);\n }\n return fields;\n}\n\n// ============================================================================\n// Table Definitions - Built from @mastra/core TABLE_SCHEMAS\n// ============================================================================\n\n/**\n * Threads table - stores conversation threads\n * Schema: TABLE_SCHEMAS[TABLE_THREADS]\n */\nexport const mastraThreadsTable = defineTable(buildTableFromSchema(TABLE_SCHEMAS[TABLE_THREADS]))\n .index('by_record_id', ['id'])\n .index('by_resource', ['resourceId'])\n .index('by_created', ['createdAt'])\n .index('by_updated', ['updatedAt']);\n\n/**\n * Messages table - stores conversation messages\n * Schema: TABLE_SCHEMAS[TABLE_MESSAGES]\n */\nexport const mastraMessagesTable = defineTable(buildTableFromSchema(TABLE_SCHEMAS[TABLE_MESSAGES]))\n .index('by_record_id', ['id'])\n .index('by_thread', ['thread_id'])\n .index('by_thread_created', ['thread_id', 'createdAt'])\n .index('by_resource', ['resourceId']);\n\n/**\n * Resources table - stores resource/user working memory\n * Schema: TABLE_SCHEMAS[TABLE_RESOURCES]\n */\nexport const mastraResourcesTable = defineTable(buildTableFromSchema(TABLE_SCHEMAS[TABLE_RESOURCES]))\n .index('by_record_id', ['id'])\n .index('by_updated', ['updatedAt']);\n\n/**\n * Workflow snapshots table - stores workflow execution state\n * Schema: TABLE_SCHEMAS[TABLE_WORKFLOW_SNAPSHOT]\n *\n * Note: The `id` field is added explicitly for Convex's by_record_id index.\n * The core schema uses (workflow_name, run_id) as a composite key, but Convex\n * requires a single-column index. The id value is generated at runtime as\n * `${workflow_name}-${run_id}` by the Convex storage adapter's normalizeRecord().\n *\n * Fields are defined explicitly (not using buildTableFromSchema) because TypeScript's\n * type inference doesn't work well with spread operators in Convex's defineTable.\n */\nexport const mastraWorkflowSnapshotsTable = defineTable({\n id: v.optional(v.string()), // Synthetic ID for Convex index, generated at runtime\n workflow_name: v.string(),\n run_id: v.string(),\n resourceId: v.optional(v.string()),\n snapshot: v.any(),\n createdAt: v.string(),\n updatedAt: v.string(),\n})\n .index('by_record_id', ['id'])\n .index('by_workflow_run', ['workflow_name', 'run_id'])\n .index('by_workflow', ['workflow_name'])\n .index('by_resource', ['resourceId'])\n .index('by_created', ['createdAt']);\n\n/**\n * Scores table - stores evaluation scores\n * Schema: TABLE_SCHEMAS[TABLE_SCORERS]\n */\nexport const mastraScoresTable = defineTable(buildTableFromSchema(TABLE_SCHEMAS[TABLE_SCORERS]))\n .index('by_record_id', ['id'])\n .index('by_scorer', ['scorerId'])\n .index('by_entity', ['entityId', 'entityType'])\n .index('by_run', ['runId'])\n .index('by_created', ['createdAt']);\n\n// ============================================================================\n// Vector Tables - Not in core schemas (vector-specific)\n// ============================================================================\n\n/**\n * Vector indexes table - stores metadata about vector indexes\n */\nexport const mastraVectorIndexesTable = defineTable({\n id: v.string(), // Mastra record ID (same as indexName)\n indexName: v.string(),\n dimension: v.number(),\n metric: v.string(),\n createdAt: v.string(),\n})\n .index('by_record_id', ['id'])\n .index('by_name', ['indexName']);\n\n/**\n * Vectors table - stores vector embeddings\n * Uses indexName field to support multiple indexes with different dimensions\n */\nexport const mastraVectorsTable = defineTable({\n id: v.string(), // Mastra record ID\n indexName: v.string(),\n embedding: v.array(v.float64()),\n metadata: v.optional(v.any()),\n})\n .index('by_index_id', ['indexName', 'id']) // Composite for scoped lookups per index\n .index('by_index', ['indexName']);\n\nexport type MastraNativeVectorTableConfig = {\n /**\n * Vector dimensions for the deployed Convex vector index.\n */\n dimensions: number;\n /**\n * Convex vector index name.\n *\n * @default 'by_embedding'\n */\n vectorIndexName?: string;\n /**\n * Stage the vector index for a later backfill.\n *\n * @default false\n */\n staged?: boolean;\n};\n\n/**\n * Defines a dedicated Convex table for native vector search with the default\n * `ConvexNativeVector` field names.\n *\n * Use a custom `defineTable()` when you need native vector `filterFields`,\n * because filter fields must also be declared in the table schema.\n */\nexport function defineMastraNativeVectorTable({\n dimensions,\n vectorIndexName = 'by_embedding',\n staged = false,\n}: MastraNativeVectorTableConfig) {\n if (!Number.isInteger(dimensions) || dimensions < 2 || dimensions > 4096) {\n throw new Error('defineMastraNativeVectorTable: dimensions must be an integer between 2 and 4096.');\n }\n\n const table = defineTable({\n id: v.string(),\n embedding: v.array(v.float64()),\n metadata: v.optional(v.any()),\n }).index('by_record_id', ['id']);\n\n if (staged) {\n return table.vectorIndex(vectorIndexName, {\n vectorField: 'embedding',\n dimensions,\n staged: true,\n });\n }\n\n return table.vectorIndex(vectorIndexName, {\n vectorField: 'embedding',\n dimensions,\n });\n}\n\n// ============================================================================\n// Server Cache Tables - Used by ConvexServerCache\n// ============================================================================\n\n/**\n * Cache metadata table - stores scalar cache values, list counters, and numeric\n * counters used by ConvexServerCache.\n */\nexport const mastraCacheTable = defineTable({\n key: v.string(),\n keyPrefix: v.string(),\n kind: v.union(v.literal('value'), v.literal('list'), v.literal('counter'), v.literal('deleted')),\n value: v.optional(v.string()),\n counter: v.optional(v.number()),\n expiresAt: v.union(v.number(), v.null()),\n})\n .index('by_key', ['key'])\n .index('by_key_prefix', ['keyPrefix']);\n\n/**\n * Cache list item table - stores each list entry as its own row so replay\n * history does not grow into a single large Convex document.\n */\nexport const mastraCacheListItemsTable = defineTable({\n key: v.string(),\n keyPrefix: v.string(),\n index: v.number(),\n value: v.string(),\n})\n .index('by_key_prefix', ['keyPrefix'])\n .index('by_key_index', ['key', 'index']);\n\n// ============================================================================\n// Fallback Table - For unknown/custom tables\n// ============================================================================\n\n/**\n * Generic documents table - fallback for unknown table types\n */\nexport const mastraDocumentsTable = defineTable({\n table: v.string(),\n primaryKey: v.string(),\n record: v.any(),\n})\n .index('by_table', ['table'])\n .index('by_table_primary', ['table', 'primaryKey']);\n\n// ============================================================================\n// Re-export table name constants for convenience\n// ============================================================================\n\nexport { TABLE_WORKFLOW_SNAPSHOT, TABLE_MESSAGES, TABLE_THREADS, TABLE_RESOURCES, TABLE_SCORERS };\n\n// Additional table name constants for vector tables (not in core)\nexport const TABLE_VECTOR_INDEXES = 'mastra_vector_indexes';\nexport const TABLE_VECTORS = 'mastra_vectors';\nexport const TABLE_DOCUMENTS = 'mastra_documents';\n"]}
|