@mastra/convex 1.3.2 → 1.4.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.
Files changed (44) hide show
  1. package/CHANGELOG.md +76 -0
  2. package/README.md +28 -17
  3. package/dist/{chunk-6P3LEDHY.cjs → chunk-2KILIA33.cjs} +315 -2
  4. package/dist/chunk-2KILIA33.cjs.map +1 -0
  5. package/dist/{chunk-77UWNT5X.js → chunk-MC2EQATP.js} +315 -2
  6. package/dist/chunk-MC2EQATP.js.map +1 -0
  7. package/dist/{chunk-MC75WADX.js → chunk-QWWFHN52.js} +41 -3
  8. package/dist/chunk-QWWFHN52.js.map +1 -0
  9. package/dist/{chunk-SFRHJGSM.cjs → chunk-ZCCKLZQH.cjs} +42 -2
  10. package/dist/chunk-ZCCKLZQH.cjs.map +1 -0
  11. package/dist/docs/SKILL.md +1 -1
  12. package/dist/docs/assets/SOURCE_MAP.json +41 -33
  13. package/dist/docs/references/reference-storage-convex.md +18 -11
  14. package/dist/index.cjs +586 -44
  15. package/dist/index.cjs.map +1 -1
  16. package/dist/index.js +542 -4
  17. package/dist/index.js.map +1 -1
  18. package/dist/schema.cjs +38 -30
  19. package/dist/schema.d.ts +95 -1
  20. package/dist/schema.d.ts.map +1 -1
  21. package/dist/schema.js +1 -1
  22. package/dist/server/index-map.d.ts.map +1 -1
  23. package/dist/server/index.cjs +41 -33
  24. package/dist/server/index.d.ts +1 -1
  25. package/dist/server/index.d.ts.map +1 -1
  26. package/dist/server/index.js +2 -2
  27. package/dist/server/observational-memory.d.ts +52 -0
  28. package/dist/server/observational-memory.d.ts.map +1 -0
  29. package/dist/server/storage.d.ts.map +1 -1
  30. package/dist/storage/db/index.d.ts +65 -14
  31. package/dist/storage/db/index.d.ts.map +1 -1
  32. package/dist/storage/domains/memory/index.d.ts +23 -1
  33. package/dist/storage/domains/memory/index.d.ts.map +1 -1
  34. package/dist/storage/domains/schedules/index.d.ts.map +1 -1
  35. package/dist/storage/domains/scores/index.d.ts.map +1 -1
  36. package/dist/storage/types.d.ts +133 -0
  37. package/dist/storage/types.d.ts.map +1 -1
  38. package/dist/vector/index.d.ts.map +1 -1
  39. package/dist/vector/native.d.ts.map +1 -1
  40. package/package.json +11 -11
  41. package/dist/chunk-6P3LEDHY.cjs.map +0 -1
  42. package/dist/chunk-77UWNT5X.js.map +0 -1
  43. package/dist/chunk-MC75WADX.js.map +0 -1
  44. package/dist/chunk-SFRHJGSM.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server/cache.ts","../src/server/index-map.ts","../src/server/observational-memory.ts","../src/server/workflow-snapshot.ts","../src/server/storage.ts","../src/server/native-vector.ts"],"names":["cleanup","mutationGeneric","TABLE_BACKGROUND_TASKS","TABLE_THREADS","TABLE_MESSAGES","TABLE_RESOURCES","TABLE_WORKFLOW_SNAPSHOT","TABLE_SCORERS","TABLE_SCHEDULES","TABLE_SCHEDULE_TRIGGERS","TABLE_CHANNEL_INSTALLATIONS","TABLE_CHANNEL_CONFIG","docs","v","mapInBatches","actionGeneric","queryGeneric"],"mappings":"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","file":"chunk-2KILIA33.cjs","sourcesContent":["import type { GenericMutationCtx as MutationCtx } from 'convex/server';\nimport { mutationGeneric } from 'convex/server';\nimport type { GenericId } from 'convex/values';\n\nimport type { CacheRequest, CacheResponse } from '../cache/types';\n\nconst CACHE_TABLE = 'mastra_cache';\nconst CACHE_LIST_TABLE = 'mastra_cache_list_items';\nconst CACHE_MUTATION_BATCH_SIZE = 25;\n\ntype CacheKind = 'value' | 'list' | 'counter' | 'deleted';\ntype CacheDoc = {\n _id: GenericId<string>;\n key: string;\n keyPrefix: string;\n kind: CacheKind;\n value?: string;\n counter?: number;\n expiresAt: number | null;\n};\ntype CacheListItem = {\n _id: GenericId<string>;\n key: string;\n keyPrefix: string;\n index: number;\n value: string;\n};\ntype DeleteBatchResult = {\n hasMore: boolean;\n};\n\nfunction encodeValue(value: unknown): string {\n // The cache wire format stores JSON strings; undefined is represented as null.\n return JSON.stringify(value === undefined ? null : value);\n}\n\nfunction decodeValue(value: string): unknown {\n return JSON.parse(value);\n}\n\nfunction isExpired(doc: { expiresAt: number | null }, now: number): boolean {\n return doc.expiresAt !== null && doc.expiresAt <= now;\n}\n\nfunction normalizeListRange(from: number, to: number, length: number): { from: number; to: number } | null {\n const normalizedFrom = from < 0 ? Math.max(length + from, 0) : from;\n const normalizedTo = to < 0 ? length + to : to;\n if (normalizedTo < normalizedFrom || normalizedFrom >= length) return null;\n return { from: normalizedFrom, to: normalizedTo };\n}\n\nasync function findCacheDoc(ctx: MutationCtx<any>, key: string): Promise<CacheDoc | null> {\n return (await ctx.db\n .query(CACHE_TABLE)\n .withIndex('by_key', (q: any) => q.eq('key', key))\n .first()) as CacheDoc | null;\n}\n\nasync function deleteCacheKey(ctx: MutationCtx<any>, key: string): Promise<DeleteBatchResult> {\n const [doc, listItems] = await Promise.all([\n findCacheDoc(ctx, key),\n ctx.db\n .query(CACHE_LIST_TABLE)\n .withIndex('by_key_index', (q: any) => q.eq('key', key))\n .take(CACHE_MUTATION_BATCH_SIZE + 1),\n ]);\n\n if (doc && doc.kind !== 'deleted') {\n await ctx.db.patch(doc._id, { kind: 'deleted' });\n }\n\n for (const item of listItems.slice(0, CACHE_MUTATION_BATCH_SIZE) as CacheListItem[]) {\n await ctx.db.delete(item._id);\n }\n\n const hasMore = listItems.length > CACHE_MUTATION_BATCH_SIZE;\n if (doc && !hasMore) {\n await ctx.db.delete(doc._id);\n }\n\n return {\n hasMore,\n };\n}\n\nasync function getLiveCacheDoc(\n ctx: MutationCtx<any>,\n key: string,\n now: number,\n): Promise<{ doc: CacheDoc | null; hasMore: boolean }> {\n const doc = await findCacheDoc(ctx, key);\n if (!doc) return { doc: null, hasMore: false };\n if (doc.kind === 'deleted') {\n const cleanup = await deleteCacheKey(ctx, key);\n return { doc: null, hasMore: cleanup.hasMore };\n }\n if (!isExpired(doc, now)) return { doc, hasMore: false };\n\n const cleanup = await deleteCacheKey(ctx, key);\n return { doc: null, hasMore: cleanup.hasMore };\n}\n\nasync function writeCacheDoc(\n ctx: MutationCtx<any>,\n key: string,\n existing: CacheDoc | null,\n patch: Omit<CacheDoc, '_id' | 'key'>,\n): Promise<CacheDoc> {\n if (existing) {\n await ctx.db.patch(existing._id, patch);\n return { ...existing, ...patch };\n }\n\n const _id = await ctx.db.insert(CACHE_TABLE, { key, ...patch });\n return { _id, key, ...patch };\n}\n\nasync function clearPrefix(ctx: MutationCtx<any>, keyPrefix: string): Promise<boolean> {\n const [docs, orphanListItems] = await Promise.all([\n ctx.db\n .query(CACHE_TABLE)\n .withIndex('by_key_prefix', (q: any) => q.eq('keyPrefix', keyPrefix))\n .take(CACHE_MUTATION_BATCH_SIZE + 1),\n ctx.db\n .query(CACHE_LIST_TABLE)\n .withIndex('by_key_prefix', (q: any) => q.eq('keyPrefix', keyPrefix))\n .take(1),\n ]);\n\n if (docs.length > 0) {\n for (const doc of docs.slice(0, CACHE_MUTATION_BATCH_SIZE) as CacheDoc[]) {\n if (doc.kind === 'list' || doc.kind === 'deleted') {\n const cleanup = await deleteCacheKey(ctx, doc.key);\n return cleanup.hasMore || docs.length > 1 || orphanListItems.length > 0;\n }\n\n await ctx.db.delete(doc._id);\n }\n\n return docs.length > CACHE_MUTATION_BATCH_SIZE || orphanListItems.length > 0;\n }\n\n const listItems = (await ctx.db\n .query(CACHE_LIST_TABLE)\n .withIndex('by_key_prefix', (q: any) => q.eq('keyPrefix', keyPrefix))\n .take(CACHE_MUTATION_BATCH_SIZE + 1)) as CacheListItem[];\n\n for (const item of listItems.slice(0, CACHE_MUTATION_BATCH_SIZE)) {\n await ctx.db.delete(item._id);\n }\n\n return listItems.length > CACHE_MUTATION_BATCH_SIZE;\n}\n\nexport async function handleCacheOperation(ctx: MutationCtx<any>, request: CacheRequest): Promise<CacheResponse> {\n const now = Date.now();\n\n switch (request.op) {\n case 'get': {\n const { doc, hasMore } = await getLiveCacheDoc(ctx, request.key, now);\n if (hasMore) return { ok: true, result: null, hasMore: true };\n if (!doc || doc.kind !== 'value') return { ok: true, result: null };\n return { ok: true, result: decodeValue(doc.value ?? 'null') };\n }\n\n case 'set': {\n let existing = await findCacheDoc(ctx, request.key);\n if (existing && (isExpired(existing, now) || existing.kind !== 'value')) {\n const cleanup = await deleteCacheKey(ctx, request.key);\n if (cleanup.hasMore) {\n return { ok: true, hasMore: true };\n }\n existing = null;\n }\n\n await writeCacheDoc(ctx, request.key, existing, {\n keyPrefix: request.keyPrefix,\n kind: 'value',\n value: encodeValue(request.value),\n expiresAt: request.expiresAt,\n });\n return { ok: true };\n }\n\n case 'listLength': {\n const { doc, hasMore } = await getLiveCacheDoc(ctx, request.key, now);\n if (hasMore) return { ok: true, result: 0, hasMore: true };\n if (!doc) return { ok: true, result: 0 };\n if (doc.kind !== 'list') return { ok: false, error: `${request.key} exists but is not an array` };\n\n return { ok: true, result: doc.counter ?? 0 };\n }\n\n case 'listPush': {\n let existing = await findCacheDoc(ctx, request.key);\n if (existing && (isExpired(existing, now) || existing.kind === 'deleted')) {\n const cleanup = await deleteCacheKey(ctx, request.key);\n if (cleanup.hasMore) {\n return { ok: true, hasMore: true };\n }\n existing = null;\n }\n if (existing && existing.kind !== 'list') {\n return { ok: false, error: `${request.key} exists but is not an array` };\n }\n\n const doc = existing\n ? await writeCacheDoc(ctx, request.key, existing, {\n kind: 'list',\n keyPrefix: request.keyPrefix,\n counter: (existing.counter ?? 0) + 1,\n expiresAt: request.expiresAt,\n })\n : await writeCacheDoc(ctx, request.key, null, {\n kind: 'list',\n keyPrefix: request.keyPrefix,\n counter: 1,\n expiresAt: request.expiresAt,\n });\n\n await ctx.db.insert(CACHE_LIST_TABLE, {\n key: request.key,\n keyPrefix: request.keyPrefix,\n index: (doc.counter ?? 1) - 1,\n value: encodeValue(request.value),\n });\n\n return { ok: true };\n }\n\n case 'listFromTo': {\n const { doc, hasMore } = await getLiveCacheDoc(ctx, request.key, now);\n if (hasMore) return { ok: true, result: [], hasMore: true };\n if (!doc || doc.kind !== 'list') return { ok: true, result: [] };\n\n const range = normalizeListRange(request.from, request.to, doc.counter ?? 0);\n if (!range) return { ok: true, result: [] };\n\n const query = ctx.db.query(CACHE_LIST_TABLE).withIndex('by_key_index', (q: any) => {\n return q.eq('key', request.key).gte('index', range.from).lte('index', range.to);\n });\n const items = (await query.collect()) as CacheListItem[];\n\n return { ok: true, result: items.map(item => decodeValue(item.value)) };\n }\n\n case 'delete': {\n const cleanup = await deleteCacheKey(ctx, request.key);\n return { ok: true, hasMore: cleanup.hasMore };\n }\n\n case 'clear': {\n const hasMore = await clearPrefix(ctx, request.keyPrefix);\n return { ok: true, hasMore };\n }\n\n case 'increment': {\n let existing = await findCacheDoc(ctx, request.key);\n if (existing && (isExpired(existing, now) || existing.kind === 'deleted')) {\n const cleanup = await deleteCacheKey(ctx, request.key);\n if (cleanup.hasMore) {\n return { ok: true, hasMore: true };\n }\n existing = null;\n }\n if (existing && existing.kind !== 'counter') {\n return { ok: false, error: `${request.key} exists but is not a number` };\n }\n\n const nextCounter = (existing?.counter ?? 0) + 1;\n await writeCacheDoc(ctx, request.key, existing, {\n kind: 'counter',\n keyPrefix: request.keyPrefix,\n counter: nextCounter,\n expiresAt: request.expiresAt,\n });\n\n return { ok: true, result: nextCounter };\n }\n }\n\n return { ok: false, error: `Unsupported operation ${(request as any).op}` };\n}\n\nexport const mastraCache = mutationGeneric(async (ctx, request: CacheRequest): Promise<CacheResponse> =>\n handleCacheOperation(ctx, request),\n);\n","/**\n * Index definitions for automatic query optimization.\n *\n * Maps each typed Convex table to its available indexes and their field lists.\n * Indexes with more fields are listed first so the best (most specific) match\n * is preferred during selection.\n *\n * These must stay in sync with the index definitions in schema.ts.\n */\nimport type { EqualityFilter } from '../storage/types';\n\nexport const TABLE_INDEX_MAP: Record<string, Array<{ name: string; fields: string[] }>> = {\n mastra_messages: [\n { name: 'by_thread_created', fields: ['thread_id', 'createdAt'] },\n { name: 'by_thread', fields: ['thread_id'] },\n { name: 'by_resource', fields: ['resourceId'] },\n { name: 'by_record_id', fields: ['id'] },\n ],\n mastra_threads: [\n { name: 'by_resource', fields: ['resourceId'] },\n { name: 'by_created', fields: ['createdAt'] },\n { name: 'by_updated', fields: ['updatedAt'] },\n { name: 'by_record_id', fields: ['id'] },\n ],\n mastra_resources: [\n { name: 'by_updated', fields: ['updatedAt'] },\n { name: 'by_record_id', fields: ['id'] },\n ],\n mastra_workflow_snapshots: [\n { name: 'by_workflow_run', fields: ['workflow_name', 'run_id'] },\n { name: 'by_workflow', fields: ['workflow_name'] },\n { name: 'by_resource', fields: ['resourceId'] },\n { name: 'by_created', fields: ['createdAt'] },\n { name: 'by_record_id', fields: ['id'] },\n ],\n mastra_scorers: [\n { name: 'by_entity', fields: ['entityId', 'entityType'] },\n { name: 'by_scorer', fields: ['scorerId'] },\n { name: 'by_run', fields: ['runId'] },\n { name: 'by_created', fields: ['createdAt'] },\n { name: 'by_record_id', fields: ['id'] },\n ],\n mastra_schedules: [\n { name: 'by_workflow_status', fields: ['workflow_id', 'status'] },\n { name: 'by_workflow_id', fields: ['workflow_id'] },\n { name: 'by_owner', fields: ['owner_type', 'owner_id'] },\n { name: 'by_owner_id', fields: ['owner_id'] },\n { name: 'by_status_next_fire_at', fields: ['status', 'next_fire_at'] },\n { name: 'by_created', fields: ['created_at'] },\n { name: 'by_record_id', fields: ['id'] },\n ],\n mastra_schedule_triggers: [\n { name: 'by_schedule_actual', fields: ['schedule_id', 'actual_fire_at'] },\n { name: 'by_parent_trigger', fields: ['parent_trigger_id'] },\n { name: 'by_record_id', fields: ['id'] },\n ],\n mastra_channel_installations: [\n { name: 'by_platform_agent', fields: ['platform', 'agentId'] },\n { name: 'by_webhook', fields: ['webhookId'] },\n { name: 'by_platform', fields: ['platform'] },\n { name: 'by_record_id', fields: ['id'] },\n ],\n mastra_channel_config: [\n { name: 'by_platform', fields: ['platform'] },\n { name: 'by_record_id', fields: ['id'] },\n ],\n mastra_background_tasks: [\n { name: 'by_agent_status', fields: ['agent_id', 'status'] },\n { name: 'by_status_created', fields: ['status', 'createdAt'] },\n { name: 'by_run', fields: ['run_id'] },\n { name: 'by_tool_call', fields: ['tool_call_id'] },\n { name: 'by_thread', fields: ['thread_id'] },\n { name: 'by_resource', fields: ['resource_id'] },\n { name: 'by_tool', fields: ['tool_name'] },\n { name: 'by_created', fields: ['createdAt'] },\n { name: 'by_record_id', fields: ['id'] },\n ],\n mastra_vector_indexes: [\n { name: 'by_name', fields: ['indexName'] },\n { name: 'by_record_id', fields: ['id'] },\n ],\n mastra_observational_memory: [\n { name: 'by_lookup_key', fields: ['lookupKey', 'generationCount'] },\n { name: 'by_record_id', fields: ['id'] },\n ],\n};\n\n/**\n * Finds the best matching index for the given equality filters on a Convex table.\n *\n * Returns the index name and the subset of filters that form the index prefix,\n * or null when no index matches.\n *\n * The \"best\" index is the one whose prefix has the most consecutive fields\n * covered by the provided filters. For example, given filters for `thread_id`\n * and `createdAt` on mastra_messages, the composite `by_thread_created` index\n * (fields: [thread_id, createdAt]) is preferred over `by_thread` (fields: [thread_id]).\n */\nexport function findBestIndex(\n convexTable: string,\n filters: EqualityFilter[],\n): { indexName: string; indexedFilters: EqualityFilter[] } | null {\n const indexes = TABLE_INDEX_MAP[convexTable];\n if (!indexes || filters.length === 0) return null;\n\n const filtersByField = new Map<string, EqualityFilter>();\n for (const f of filters) {\n filtersByField.set(f.field, f);\n }\n\n let best: { indexName: string; indexedFilters: EqualityFilter[]; prefixLength: number } | null = null;\n\n for (const index of indexes) {\n let prefixLength = 0;\n const indexedFilters: EqualityFilter[] = [];\n\n for (const field of index.fields) {\n const filter = filtersByField.get(field);\n if (filter) {\n prefixLength++;\n indexedFilters.push(filter);\n } else {\n break;\n }\n }\n\n if (prefixLength > 0 && (!best || prefixLength > best.prefixLength)) {\n best = { indexName: index.name, indexedFilters, prefixLength };\n }\n }\n\n return best ? { indexName: best.indexName, indexedFilters: best.indexedFilters } : null;\n}\n","/**\n * Server-side observational memory operations for the generic Convex storage\n * mutation. All read-modify-write logic lives here so each operation is atomic\n * (Convex mutations are serializable transactions).\n *\n * Logic mirrors @mastra/core's in-memory reference implementation\n * (packages/core/src/storage/domains/memory/inmemory.ts) and the MongoDB\n * adapter. Pure helpers are exported for unit testing.\n *\n * This module is bundled into the user's Convex deployment: no Node.js APIs\n * and no value imports from @mastra/core.\n */\nimport type { GenericMutationCtx as MutationCtx } from 'convex/server';\n\nimport type { SerializedOMChunk, StorageRequest, StorageResponse } from '../storage/types';\n\ntype OMRequest = Extract<\n StorageRequest,\n {\n op:\n | 'omGetLatest'\n | 'omGetHistory'\n | 'omUpdateActive'\n | 'omAppendBufferedChunk'\n | 'omSwapBuffered'\n | 'omUpdateBufferedReflection'\n | 'omSwapBufferedReflection'\n | 'omUpdateConfig';\n }\n>;\n\nconst OM_QUERY_MAX_DOCS = 10000;\n\n/**\n * Parse the stored bufferedObservationChunks JSON string. Tolerates null,\n * missing, and malformed values by returning an empty array.\n */\nexport function parseStoredChunks(value: unknown): SerializedOMChunk[] {\n if (typeof value !== 'string' || !value) return [];\n try {\n const parsed = JSON.parse(value);\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n}\n\n/**\n * Select how many buffered chunks to activate.\n *\n * Finds the chunk boundary closest to the activation target, biased over\n * (prefer removing slightly more than the target so remaining context lands at\n * or below the retention floor), with an overshoot safeguard that falls back\n * to the best under boundary. Ported from the core in-memory reference.\n */\nexport function selectActivationBoundary(\n chunks: Array<{ messageTokens?: number }>,\n opts: {\n activationRatio: number;\n messageTokensThreshold: number;\n currentPendingTokens: number;\n forceMaxActivation?: boolean;\n },\n): number {\n // Calculate target: how many message tokens to remove so that\n // (1 - activationRatio) * threshold worth of raw messages remain.\n // e.g., ratio=0.8, threshold=5000, pending=6000 → remove 6000 - 1000 = 5000\n const retentionFloor = opts.messageTokensThreshold * (1 - opts.activationRatio);\n const targetMessageTokens = Math.max(0, opts.currentPendingTokens - retentionFloor);\n\n // Track both best-over and best-under boundaries so we can fall back to\n // under if the over boundary would overshoot by too much.\n let cumulativeMessageTokens = 0;\n let bestOverBoundary = 0;\n let bestOverTokens = 0;\n let bestUnderBoundary = 0;\n let bestUnderTokens = 0;\n\n for (let i = 0; i < chunks.length; i++) {\n cumulativeMessageTokens += chunks[i]!.messageTokens ?? 0;\n const boundary = i + 1;\n\n if (cumulativeMessageTokens >= targetMessageTokens) {\n // Over or equal — track the closest (lowest) over boundary\n if (bestOverBoundary === 0 || cumulativeMessageTokens < bestOverTokens) {\n bestOverBoundary = boundary;\n bestOverTokens = cumulativeMessageTokens;\n }\n } else {\n // Under — track the closest (highest) under boundary\n if (cumulativeMessageTokens > bestUnderTokens) {\n bestUnderBoundary = boundary;\n bestUnderTokens = cumulativeMessageTokens;\n }\n }\n }\n\n // Safeguard: if the over boundary would eat into more than 95% of the\n // retention floor, fall back to the best under boundary instead.\n // When forceMaxActivation is set (above blockAfter), still prefer the over\n // boundary, but never if it would leave fewer than the smaller of 1000\n // tokens or the retention floor remaining.\n const maxOvershoot = retentionFloor * 0.95;\n const overshoot = bestOverTokens - targetMessageTokens;\n const remainingAfterOver = opts.currentPendingTokens - bestOverTokens;\n const remainingAfterUnder = opts.currentPendingTokens - bestUnderTokens;\n // When activationRatio ≈ 1.0, retentionFloor is 0 and minRemaining becomes 0 — intentional for \"activate everything\" configs.\n const minRemaining = Math.min(1000, retentionFloor);\n\n if (opts.forceMaxActivation && bestOverBoundary > 0 && remainingAfterOver >= minRemaining) {\n return bestOverBoundary;\n }\n if (bestOverBoundary > 0 && overshoot <= maxOvershoot && remainingAfterOver >= minRemaining) {\n return bestOverBoundary;\n }\n if (bestUnderBoundary > 0 && remainingAfterUnder >= minRemaining) {\n return bestUnderBoundary;\n }\n if (bestOverBoundary > 0) {\n // All boundaries are over and exceed the safeguard — still activate\n // the closest over boundary (better than nothing)\n return bestOverBoundary;\n }\n return 1;\n}\n\n/**\n * Merge a buffered reflection with the observations added after the reflection\n * started. Lines 0..reflectedLineCount of activeObservations were reflected on\n * and are replaced by the reflection; later lines are appended as-is.\n */\nexport function mergeReflectionWithUnreflected(\n activeObservations: string,\n bufferedReflection: string,\n reflectedLineCount: number,\n): string {\n const allLines = (activeObservations || '').split('\\n');\n const unreflectedLines = allLines.slice(reflectedLineCount);\n const unreflectedContent = unreflectedLines.join('\\n').trim();\n return unreflectedContent ? `${bufferedReflection}\\n\\n${unreflectedContent}` : bufferedReflection;\n}\n\nfunction isPlainObj(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/**\n * Deep-merge two plain config objects (source wins; undefined source values\n * are skipped). Mirrors MemoryStorage.deepMergeConfig in @mastra/core.\n */\nexport function deepMergeOMConfig(\n target: Record<string, unknown>,\n source: Record<string, unknown>,\n): Record<string, unknown> {\n const output: Record<string, unknown> = { ...target };\n for (const key of Object.keys(source)) {\n const tVal = target[key];\n const sVal = source[key];\n if (isPlainObj(tVal) && isPlainObj(sVal)) {\n output[key] = deepMergeOMConfig(tVal, sVal);\n } else if (sVal !== undefined) {\n output[key] = sVal;\n }\n }\n return output;\n}\n\nfunction parseJsonObject(value: unknown): Record<string, unknown> {\n if (typeof value !== 'string' || !value) return {};\n try {\n const parsed = JSON.parse(value);\n return isPlainObj(parsed) ? parsed : {};\n } catch {\n return {};\n }\n}\n\nasync function findRecordById(ctx: MutationCtx<any>, convexTable: string, id: string) {\n return await ctx.db\n .query(convexTable)\n .withIndex('by_record_id', (q: any) => q.eq('id', id))\n .unique();\n}\n\nfunction requireRecord(doc: unknown, id: string) {\n if (!doc) {\n throw new Error(`Observational memory record not found: ${id}`);\n }\n return doc as Record<string, any> & { _id: any };\n}\n\nconst EMPTY_SWAP_RESULT = {\n chunksActivated: 0,\n messageTokensActivated: 0,\n observationTokensActivated: 0,\n messagesActivated: 0,\n activatedCycleIds: [] as string[],\n activatedMessageIds: [] as string[],\n};\n\nexport async function handleObservationalMemoryOperation(\n ctx: MutationCtx<any>,\n convexTable: string,\n request: OMRequest,\n): Promise<StorageResponse> {\n switch (request.op) {\n case 'omGetLatest': {\n // by_lookup_key is [lookupKey, generationCount]; after eq(lookupKey) the\n // descending order sorts by generationCount, so first() is the latest generation.\n const doc = await ctx.db\n .query(convexTable)\n .withIndex('by_lookup_key', (q: any) => q.eq('lookupKey', request.lookupKey))\n .order('desc')\n .first();\n return { ok: true, result: doc ?? null };\n }\n\n case 'omGetHistory': {\n let docs = await ctx.db\n .query(convexTable)\n .withIndex('by_lookup_key', (q: any) => q.eq('lookupKey', request.lookupKey))\n .order('desc')\n .take(OM_QUERY_MAX_DOCS);\n\n // createdAt is a UTC ISO string, so lexicographic comparison is chronological.\n if (request.from) {\n docs = docs.filter((doc: any) => typeof doc.createdAt === 'string' && doc.createdAt >= request.from!);\n }\n if (request.to) {\n docs = docs.filter((doc: any) => typeof doc.createdAt === 'string' && doc.createdAt <= request.to!);\n }\n if (request.offset != null) {\n docs = docs.slice(request.offset);\n }\n return { ok: true, result: docs.slice(0, request.limit) };\n }\n\n case 'omUpdateActive': {\n const doc = requireRecord(await findRecordById(ctx, convexTable, request.id), request.id);\n const safeTokenCount = Number.isFinite(request.tokenCount) && request.tokenCount >= 0 ? request.tokenCount : 0;\n\n await ctx.db.patch(doc._id, {\n activeObservations: request.observations,\n lastObservedAt: request.lastObservedAt,\n // Reset pending tokens since we've now observed them\n pendingMessageTokens: 0,\n observationTokenCount: safeTokenCount,\n totalTokensObserved: Number(doc.totalTokensObserved || 0) + safeTokenCount,\n observedMessageIds: request.observedMessageIds,\n updatedAt: request.updatedAt,\n });\n return { ok: true };\n }\n\n case 'omAppendBufferedChunk': {\n const doc = requireRecord(await findRecordById(ctx, convexTable, request.id), request.id);\n const chunks = parseStoredChunks(doc.bufferedObservationChunks);\n chunks.push(request.chunk);\n\n const patch: Record<string, unknown> = {\n bufferedObservationChunks: JSON.stringify(chunks),\n updatedAt: request.updatedAt,\n };\n if (request.lastBufferedAtTime) {\n patch.lastBufferedAtTime = request.lastBufferedAtTime;\n }\n await ctx.db.patch(doc._id, patch);\n return { ok: true };\n }\n\n case 'omSwapBuffered': {\n const doc = requireRecord(await findRecordById(ctx, convexTable, request.id), request.id);\n\n const persistedChunks = parseStoredChunks(doc.bufferedObservationChunks);\n // Nothing buffered (or already swapped) — report zero activation.\n if (persistedChunks.length === 0) {\n return { ok: true, result: EMPTY_SWAP_RESULT };\n }\n\n // Use caller-provided refreshed chunks (with up-to-date token weights)\n // for activation math when present, falling back to persisted chunks.\n const chunks = Array.isArray(request.bufferedChunks) ? request.bufferedChunks : persistedChunks;\n if (chunks.length === 0) {\n return { ok: true, result: EMPTY_SWAP_RESULT };\n }\n\n const chunksToActivate = selectActivationBoundary(chunks, {\n activationRatio: request.activationRatio,\n messageTokensThreshold: request.messageTokensThreshold,\n currentPendingTokens: request.currentPendingTokens,\n forceMaxActivation: request.forceMaxActivation,\n });\n const activatedChunks = chunks.slice(0, chunksToActivate);\n const remainingChunks = chunks.slice(chunksToActivate);\n\n // Combine activated chunks into content\n const activatedContent = activatedChunks.map(c => c.observations).join('\\n\\n');\n const activatedTokens = activatedChunks.reduce((sum, c) => sum + c.tokenCount, 0);\n const activatedMessageTokens = activatedChunks.reduce((sum, c) => sum + (c.messageTokens ?? 0), 0);\n const activatedMessageCount = activatedChunks.reduce((sum, c) => sum + (c.messageIds?.length ?? 0), 0);\n const activatedCycleIds = activatedChunks.map(c => c.cycleId).filter((id): id is string => !!id);\n const activatedMessageIds = activatedChunks.flatMap(c => c.messageIds ?? []);\n\n // Derive lastObservedAt from the latest activated chunk, or use provided value\n const latestChunk = activatedChunks[activatedChunks.length - 1];\n const lastObservedAt = request.lastObservedAt ?? latestChunk?.lastObservedAt ?? request.now;\n\n // Append activated content to active observations with message boundary for cache stability\n const existingActive = (doc.activeObservations as string) || '';\n const boundary = `\\n\\n--- message boundary (${lastObservedAt}) ---\\n\\n`;\n const newActive = existingActive ? `${existingActive}${boundary}${activatedContent}` : activatedContent;\n\n // NOTE: We intentionally do NOT add activatedMessageIds to observedMessageIds.\n // observedMessageIds is used by getUnobservedMessages to filter future messages.\n // Since AI SDK may reuse message IDs for new content, adding them here would\n // permanently block new content from being observed. Instead, we return\n // activatedMessageIds so the caller can remove them from messageList directly.\n\n await ctx.db.patch(doc._id, {\n activeObservations: newActive,\n observationTokenCount: Number(doc.observationTokenCount || 0) + activatedTokens,\n // Decrement pending message tokens (clamped to zero)\n pendingMessageTokens: Math.max(0, Number(doc.pendingMessageTokens || 0) - activatedMessageTokens),\n bufferedObservationChunks: remainingChunks.length > 0 ? JSON.stringify(remainingChunks) : null,\n lastObservedAt,\n updatedAt: request.now,\n });\n\n // Use hints from the most recent activated chunk only — stale hints from older chunks are discarded\n const latestChunkHints = activatedChunks[activatedChunks.length - 1];\n\n return {\n ok: true,\n result: {\n chunksActivated: activatedChunks.length,\n messageTokensActivated: activatedMessageTokens,\n observationTokensActivated: activatedTokens,\n messagesActivated: activatedMessageCount,\n activatedCycleIds,\n activatedMessageIds,\n observations: activatedContent,\n perChunk: activatedChunks.map(c => ({\n cycleId: c.cycleId ?? '',\n messageTokens: c.messageTokens ?? 0,\n observationTokens: c.tokenCount,\n messageCount: c.messageIds?.length ?? 0,\n observations: c.observations,\n })),\n suggestedContinuation: latestChunkHints?.suggestedContinuation ?? undefined,\n currentTask: latestChunkHints?.currentTask ?? undefined,\n },\n };\n }\n\n case 'omUpdateBufferedReflection': {\n const doc = requireRecord(await findRecordById(ctx, convexTable, request.id), request.id);\n\n const existingContent = (doc.bufferedReflection as string) || '';\n await ctx.db.patch(doc._id, {\n bufferedReflection: existingContent ? `${existingContent}\\n\\n${request.reflection}` : request.reflection,\n bufferedReflectionTokens: Number(doc.bufferedReflectionTokens || 0) + request.tokenCount,\n bufferedReflectionInputTokens: Number(doc.bufferedReflectionInputTokens || 0) + request.inputTokenCount,\n reflectedObservationLineCount: request.reflectedObservationLineCount,\n updatedAt: request.updatedAt,\n });\n return { ok: true };\n }\n\n case 'omSwapBufferedReflection': {\n const { currentRecord, newId, tokenCount, now } = request;\n const doc = requireRecord(await findRecordById(ctx, convexTable, currentRecord.id), currentRecord.id);\n\n const bufferedReflection = (doc.bufferedReflection as string) || '';\n if (!bufferedReflection) {\n throw new Error('No buffered reflection to swap');\n }\n\n const newObservations = mergeReflectionWithUnreflected(\n (doc.activeObservations as string) || '',\n bufferedReflection,\n Number(doc.reflectedObservationLineCount || 0),\n );\n\n // Create the new generation record\n const newRecord = {\n id: newId,\n lookupKey: currentRecord.lookupKey,\n scope: currentRecord.scope,\n resourceId: currentRecord.resourceId,\n threadId: currentRecord.threadId,\n activeObservations: newObservations,\n activeObservationsPendingUpdate: null,\n originType: 'reflection',\n config: currentRecord.config,\n generationCount: currentRecord.generationCount + 1,\n lastObservedAt: currentRecord.lastObservedAt,\n lastReflectionAt: now,\n pendingMessageTokens: 0,\n totalTokensObserved: currentRecord.totalTokensObserved,\n observationTokenCount: tokenCount,\n isObserving: false,\n isReflecting: false,\n isBufferingObservation: false,\n isBufferingReflection: false,\n lastBufferedAtTokens: 0,\n lastBufferedAtTime: null,\n observedTimezone: currentRecord.observedTimezone,\n metadata: currentRecord.metadata,\n createdAt: now,\n updatedAt: now,\n };\n await ctx.db.insert(convexTable, newRecord);\n\n // Clear buffered state on the old record\n await ctx.db.patch(doc._id, {\n bufferedReflection: null,\n bufferedReflectionTokens: null,\n bufferedReflectionInputTokens: null,\n reflectedObservationLineCount: null,\n updatedAt: now,\n });\n\n return { ok: true, result: newRecord };\n }\n\n case 'omUpdateConfig': {\n const doc = requireRecord(await findRecordById(ctx, convexTable, request.id), request.id);\n\n const existing = parseJsonObject(doc.config);\n const incoming = parseJsonObject(request.config);\n const merged = deepMergeOMConfig(existing, incoming);\n\n await ctx.db.patch(doc._id, {\n config: JSON.stringify(merged),\n updatedAt: request.updatedAt,\n });\n return { ok: true };\n }\n }\n}\n","// NOTE: This mirrors packages/core/src/storage/workflow-snapshot.ts. The Convex\n// server runtime can't import @mastra/core, so keep both copies in sync.\nconst PENDING_MARKER_KEY = '__mastra_pending__';\n\nfunction isPendingMarker(val: unknown): boolean {\n return (\n val !== null &&\n typeof val === 'object' &&\n Object.prototype.hasOwnProperty.call(val, PENDING_MARKER_KEY) &&\n (val as Record<string, unknown>)[PENDING_MARKER_KEY] === true &&\n Object.keys(val).length === 1\n );\n}\n\n// Suspended forEach iteration results may come from multiple engines. Treat\n// StepResult-shaped suspended entries as resettable without relying only on\n// evented __workflow_meta, but avoid matching plain user outputs with only\n// status/payload fields.\nfunction isSuspendedStepResult(val: unknown): boolean {\n const result = val as Record<string, unknown> | null;\n\n return (\n val !== null &&\n typeof val === 'object' &&\n 'status' in val &&\n result?.status === 'suspended' &&\n ('suspendPayload' in val || 'suspendedAt' in val)\n );\n}\n\nfunction canResetWithPendingMarker(val: unknown): boolean {\n if (val == null || isPendingMarker(val)) {\n return true;\n }\n\n return isSuspendedStepResult(val);\n}\n\nexport function createEmptyWorkflowSnapshot(runId: string): Record<string, any> {\n return {\n context: {},\n activePaths: [],\n activeStepsPath: {},\n timestamp: Date.now(),\n suspendedPaths: {},\n resumeLabels: {},\n serializedStepGraph: [],\n value: {},\n waitingPaths: {},\n status: 'pending',\n runId,\n };\n}\n\nexport function mergeWorkflowStepResult({\n snapshot,\n stepId,\n result,\n requestContext,\n}: {\n snapshot: Record<string, any>;\n stepId: string;\n result: Record<string, any>;\n requestContext: Record<string, any>;\n}): Record<string, any> {\n if (!snapshot?.context) {\n throw new Error(`Snapshot context not found for runId ${snapshot?.runId}`);\n }\n\n const existingResult = snapshot.context[stepId];\n if (\n existingResult &&\n 'output' in existingResult &&\n Array.isArray(existingResult.output) &&\n result &&\n typeof result === 'object' &&\n 'output' in result &&\n Array.isArray(result.output)\n ) {\n const existingOutput = existingResult.output as unknown[];\n const newOutput = result.output as unknown[];\n const mergedOutput = [...existingOutput];\n const hasPendingMarker = newOutput.some(isPendingMarker);\n for (let i = 0; i < Math.max(existingOutput.length, newOutput.length); i++) {\n if (i < newOutput.length) {\n const newVal = newOutput[i];\n if (isPendingMarker(newVal)) {\n if (i >= existingOutput.length || canResetWithPendingMarker(existingOutput[i])) {\n mergedOutput[i] = null;\n }\n } else if (newVal !== null && newVal !== undefined && !hasPendingMarker) {\n mergedOutput[i] = newVal;\n } else if (i >= existingOutput.length) {\n mergedOutput[i] = null;\n }\n }\n }\n snapshot.context[stepId] = {\n ...existingResult,\n // Pending-marker writes are reset commands built from an earlier snapshot,\n // so keep existing step-level fields and ignore sibling values they carry.\n ...(hasPendingMarker ? {} : result),\n output: mergedOutput,\n };\n } else {\n snapshot.context[stepId] = result;\n }\n\n snapshot.requestContext = { ...snapshot.requestContext, ...requestContext };\n return JSON.parse(JSON.stringify(snapshot.context));\n}\n","import {\n TABLE_WORKFLOW_SNAPSHOT,\n TABLE_MESSAGES,\n TABLE_THREADS,\n TABLE_RESOURCES,\n TABLE_SCORERS,\n TABLE_SCHEDULES,\n TABLE_SCHEDULE_TRIGGERS,\n TABLE_CHANNEL_INSTALLATIONS,\n TABLE_CHANNEL_CONFIG,\n TABLE_BACKGROUND_TASKS,\n} from '@mastra/core/storage/constants';\nimport type { GenericMutationCtx as MutationCtx } from 'convex/server';\nimport { mutationGeneric } from 'convex/server';\nimport type { GenericId } from 'convex/values';\n\nimport type { EqualityFilter, StorageRequest, StorageResponse } from '../storage/types';\nimport { findBestIndex } from './index-map';\nimport { handleObservationalMemoryOperation } from './observational-memory';\nimport { createEmptyWorkflowSnapshot, mergeWorkflowStepResult } from './workflow-snapshot';\n\n// Vector-specific table names (not in @mastra/core)\nconst TABLE_VECTOR_INDEXES = 'mastra_vector_indexes';\nconst VECTOR_TABLE_PREFIX = 'mastra_vector_';\nconst CONVEX_TABLE_WORKFLOW_SNAPSHOTS = 'mastra_workflow_snapshots';\nconst CONVEX_TABLE_BACKGROUND_TASKS = 'mastra_background_tasks';\nconst CONVEX_TABLE_DOCUMENTS = 'mastra_documents';\n// Defined locally (not imported from core) because this file is bundled into\n// the user's Convex deployment and older cores in the peer range may not\n// export the observational memory constants.\nconst CONVEX_TABLE_OBSERVATIONAL_MEMORY = 'mastra_observational_memory';\nconst STORAGE_MUTATION_BATCH_SIZE = 25;\n// Keep this in sync with ConvexDB's loadMany client chunk size. The low cap\n// bounds full-doc responses per request; individual document size still matters.\nconst LOAD_MANY_MAX_IDS_PER_REQUEST = 10;\nconst DEFAULT_SCHEDULE_QUERY_LIMIT = 100;\n\ntype ConvexDocWithId = { _id: GenericId<string> };\ntype GenericDocumentDoc = ConvexDocWithId & { record: Record<string, unknown> };\ntype StorageRecord = Record<string, unknown> & { id?: unknown };\nconst BACKGROUND_TASK_FIELD_ALIASES: Record<string, string> = {\n tool_call_id: 'toolCallId',\n toolCallId: 'tool_call_id',\n tool_name: 'toolName',\n toolName: 'tool_name',\n agent_id: 'agentId',\n agentId: 'agent_id',\n run_id: 'runId',\n runId: 'run_id',\n thread_id: 'threadId',\n threadId: 'thread_id',\n resource_id: 'resourceId',\n resourceId: 'resource_id',\n suspend_payload: 'suspendPayload',\n suspendPayload: 'suspend_payload',\n retry_count: 'retryCount',\n retryCount: 'retry_count',\n max_retries: 'maxRetries',\n maxRetries: 'max_retries',\n timeout_ms: 'timeoutMs',\n timeoutMs: 'timeout_ms',\n};\n\nfunction normalizeScheduleQueryLimit(limit: number | undefined): number {\n if (limit == null || !Number.isFinite(limit)) return DEFAULT_SCHEDULE_QUERY_LIMIT;\n return Math.max(0, Math.floor(limit));\n}\n\nfunction normalizeLoadManyIds(ids: string[]): string[] {\n if (ids.length > LOAD_MANY_MAX_IDS_PER_REQUEST) {\n throw new Error(`loadMany supports at most ${LOAD_MANY_MAX_IDS_PER_REQUEST} ids per request`);\n }\n return [...new Set(ids)];\n}\n\nfunction applyConvexEqualityFilters(\n query: any,\n filters: EqualityFilter[] | undefined,\n indexedFields = new Set<string>(),\n) {\n const remainingFilters = filters?.filter(filter => !indexedFields.has(filter.field));\n if (!remainingFilters?.length) return query;\n\n return query.filter((q: any) => {\n const predicates = remainingFilters.map(filter => q.eq(q.field(filter.field), filter.value));\n return predicates.length === 1 ? predicates[0] : q.and(...predicates);\n });\n}\n\nasync function mapInBatches<TInput, TOutput>(\n inputs: TInput[],\n batchSize: number,\n mapper: (input: TInput) => Promise<TOutput>,\n): Promise<TOutput[]> {\n const results: TOutput[] = [];\n for (let index = 0; index < inputs.length; index += batchSize) {\n results.push(...(await Promise.all(inputs.slice(index, index + batchSize).map(mapper))));\n }\n return results;\n}\n\nasync function deleteDocs(ctx: MutationCtx<any>, docs: ConvexDocWithId[]): Promise<void> {\n await mapInBatches(docs, STORAGE_MUTATION_BATCH_SIZE, doc => ctx.db.delete(doc._id));\n}\n\nasync function findExistingDocsByIds(\n ids: string[],\n findDoc: (id: string) => Promise<ConvexDocWithId | null | undefined>,\n): Promise<ConvexDocWithId[]> {\n const docs = await mapInBatches([...new Set(ids)], STORAGE_MUTATION_BATCH_SIZE, findDoc);\n return docs.filter((doc): doc is ConvexDocWithId => Boolean(doc));\n}\n\nfunction isBackgroundTasksTable(convexTable: string, request: StorageRequest): boolean {\n return convexTable === CONVEX_TABLE_BACKGROUND_TASKS && request.tableName === TABLE_BACKGROUND_TASKS;\n}\n\nfunction matchesFilters(record: Record<string, unknown>, filters: EqualityFilter[]): boolean {\n return filters.every(filter => {\n if (record[filter.field] === filter.value) return true;\n const alternateField = BACKGROUND_TASK_FIELD_ALIASES[filter.field];\n return alternateField ? record[alternateField] === filter.value : false;\n });\n}\n\nfunction mergeLegacyRecord(record: Record<string, unknown>, patch: Record<string, unknown>): Record<string, unknown> {\n const merged = { ...record };\n for (const [field, value] of Object.entries(patch)) {\n const alternateField = BACKGROUND_TASK_FIELD_ALIASES[field];\n if (alternateField) delete merged[alternateField];\n merged[field] = value;\n }\n return merged;\n}\n\nfunction stripPatchKeys(record: Record<string, unknown>, keys: string[]): Record<string, unknown> {\n const stripped = { ...record };\n for (const key of keys) delete stripped[key];\n return stripped;\n}\n\nfunction dedupeByRecordId(records: any[]): any[] {\n const seen = new Set<string>();\n return records.filter(record => {\n if (record?.id == null) return true;\n\n const id = String(record.id);\n if (seen.has(id)) return false;\n seen.add(id);\n return true;\n });\n}\n\nfunction isMissingBackgroundTaskSchemaError(error: unknown): boolean {\n const message = error instanceof Error ? error.message.toLowerCase() : String(error).toLowerCase();\n return (\n message.includes(CONVEX_TABLE_BACKGROUND_TASKS) &&\n (message.includes('does not exist') ||\n message.includes('not found') ||\n message.includes('not defined') ||\n message.includes('no such'))\n );\n}\n\nasync function findGenericDocumentById(\n ctx: MutationCtx<any>,\n tableName: string,\n id: string,\n): Promise<GenericDocumentDoc | null> {\n return await ctx.db\n .query(CONVEX_TABLE_DOCUMENTS)\n .withIndex('by_table_primary', (q: any) => q.eq('table', tableName).eq('primaryKey', String(id)))\n .unique();\n}\n\nasync function findGenericDocumentsByTable(\n ctx: MutationCtx<any>,\n tableName: string,\n limit: number,\n): Promise<GenericDocumentDoc[]> {\n return await ctx.db\n .query(CONVEX_TABLE_DOCUMENTS)\n .withIndex('by_table', (q: any) => q.eq('table', tableName))\n .take(limit);\n}\n\nasync function filterLegacyRecordsWithoutTypedCopy(\n ctx: MutationCtx<any>,\n convexTable: string,\n legacyRecords: Record<string, unknown>[],\n): Promise<Record<string, unknown>[]> {\n const records = await mapInBatches(legacyRecords, STORAGE_MUTATION_BATCH_SIZE, async record => {\n if (record.id == null) return record;\n\n const typedDoc = await ctx.db\n .query(convexTable)\n .withIndex('by_record_id', (q: any) => q.eq('id', String(record.id)))\n .unique();\n return typedDoc ? null : record;\n });\n\n return records.filter((record): record is Record<string, unknown> => Boolean(record));\n}\n\nfunction coalesceTypedRecordsForBatchInsert(records: StorageRecord[]): StorageRecord[] {\n const recordsById = new Map<string, StorageRecord>();\n for (const record of records) {\n const id = record.id;\n if (!id) continue;\n\n const key = String(id);\n recordsById.set(key, { ...(recordsById.get(key) ?? {}), ...record });\n }\n return [...recordsById.values()];\n}\n\nfunction coalesceLastRecordById(records: StorageRecord[]): StorageRecord[] {\n const recordsById = new Map<string, StorageRecord>();\n for (const record of records) {\n const id = record.id;\n if (!id) continue;\n recordsById.set(String(id), record);\n }\n return [...recordsById.values()];\n}\n\n/**\n * Determines which Convex table to use based on the logical table name.\n * Returns the Convex table name and whether it's a typed table or fallback.\n */\nfunction resolveTable(tableName: string): { convexTable: string; isTyped: boolean } {\n switch (tableName) {\n case TABLE_THREADS:\n return { convexTable: 'mastra_threads', isTyped: true };\n case TABLE_MESSAGES:\n return { convexTable: 'mastra_messages', isTyped: true };\n case TABLE_RESOURCES:\n return { convexTable: 'mastra_resources', isTyped: true };\n case TABLE_WORKFLOW_SNAPSHOT:\n return { convexTable: CONVEX_TABLE_WORKFLOW_SNAPSHOTS, isTyped: true };\n case TABLE_SCORERS:\n return { convexTable: 'mastra_scorers', isTyped: true };\n case TABLE_SCHEDULES:\n return { convexTable: 'mastra_schedules', isTyped: true };\n case TABLE_SCHEDULE_TRIGGERS:\n return { convexTable: 'mastra_schedule_triggers', isTyped: true };\n case TABLE_CHANNEL_INSTALLATIONS:\n return { convexTable: 'mastra_channel_installations', isTyped: true };\n case TABLE_CHANNEL_CONFIG:\n return { convexTable: 'mastra_channel_config', isTyped: true };\n case TABLE_BACKGROUND_TASKS:\n return { convexTable: CONVEX_TABLE_BACKGROUND_TASKS, isTyped: true };\n case TABLE_VECTOR_INDEXES:\n return { convexTable: 'mastra_vector_indexes', isTyped: true };\n case CONVEX_TABLE_OBSERVATIONAL_MEMORY:\n return { convexTable: CONVEX_TABLE_OBSERVATIONAL_MEMORY, isTyped: true };\n default:\n // Check if it's a vector data table\n if (tableName.startsWith(VECTOR_TABLE_PREFIX)) {\n return { convexTable: 'mastra_vectors', isTyped: true };\n }\n // Fallback to generic documents table for unknown tables\n return { convexTable: 'mastra_documents', isTyped: false };\n }\n}\n\n/**\n * Main storage mutation handler.\n * Routes operations to the appropriate typed table.\n */\nexport const mastraStorage = mutationGeneric(async (ctx, request: StorageRequest): Promise<StorageResponse> => {\n try {\n const { convexTable, isTyped } = resolveTable(request.tableName);\n\n // Handle vector data tables specially (but NOT vector_indexes which is a typed table)\n if (request.tableName.startsWith(VECTOR_TABLE_PREFIX) && request.tableName !== TABLE_VECTOR_INDEXES) {\n return await handleVectorOperation(ctx, request);\n }\n\n // Handle typed tables\n if (isTyped) {\n if (isBackgroundTasksTable(convexTable, request)) {\n try {\n return await handleTypedOperation(ctx, convexTable, request);\n } catch (error) {\n if (!isMissingBackgroundTaskSchemaError(error)) throw error;\n return handleGenericOperation(ctx, request);\n }\n }\n return handleTypedOperation(ctx, convexTable, request);\n }\n\n // Fallback to generic table for unknown tables\n return handleGenericOperation(ctx, request);\n } catch (error) {\n const err = error as Error;\n return {\n ok: false,\n error: err.message,\n };\n }\n});\n\nfunction parseStoredSnapshot(stored: unknown, runId: string): Record<string, any> {\n if (typeof stored === 'string') return JSON.parse(stored);\n return JSON.parse(JSON.stringify(stored ?? createEmptyWorkflowSnapshot(runId)));\n}\n\nfunction parseMetadataForMerge(metadata: unknown): Record<string, unknown> {\n if (metadata == null) return {};\n if (typeof metadata === 'string') {\n try {\n const parsed = JSON.parse(metadata);\n return parseMetadataForMerge(parsed);\n } catch {\n return {};\n }\n }\n if (typeof metadata === 'object' && !Array.isArray(metadata)) {\n return metadata as Record<string, unknown>;\n }\n return {};\n}\n\nfunction mergeMetadata(existing: unknown, update: Record<string, unknown> | undefined): Record<string, unknown> {\n return {\n ...parseMetadataForMerge(existing),\n ...(update ?? {}),\n };\n}\n\n/**\n * Handle operations on typed tables (threads, messages, etc.)\n * Records are stored with their `id` field as a regular field (not _id).\n * We query by the `id` field to find/update records.\n */\nexport async function handleTypedOperation(\n ctx: MutationCtx<any>,\n convexTable: string,\n request: StorageRequest,\n): Promise<StorageResponse> {\n switch (request.op) {\n case 'omGetLatest':\n case 'omGetHistory':\n case 'omUpdateActive':\n case 'omAppendBufferedChunk':\n case 'omSwapBuffered':\n case 'omUpdateBufferedReflection':\n case 'omSwapBufferedReflection':\n case 'omUpdateConfig': {\n if (convexTable !== CONVEX_TABLE_OBSERVATIONAL_MEMORY) {\n throw new Error(`${request.op} is only supported for ${CONVEX_TABLE_OBSERVATIONAL_MEMORY}`);\n }\n return handleObservationalMemoryOperation(ctx, convexTable, request);\n }\n\n case 'createSchedule': {\n if (convexTable !== 'mastra_schedules') {\n throw new Error(`createSchedule is only supported for mastra_schedules`);\n }\n const record = request.record;\n const id = record.id;\n if (!id) {\n throw new Error(`Schedule is missing an id`);\n }\n\n const existing = await ctx.db\n .query(convexTable)\n .withIndex('by_record_id', (q: any) => q.eq('id', id))\n .unique();\n\n if (existing) {\n throw new Error(`Schedule with id \"${id}\" already exists`);\n }\n\n await ctx.db.insert(convexTable, record);\n return { ok: true };\n }\n\n case 'recordScheduleTrigger': {\n if (convexTable !== 'mastra_schedule_triggers') {\n throw new Error(`recordScheduleTrigger is only supported for mastra_schedule_triggers`);\n }\n const record = request.record;\n const id = record.id;\n if (!id) {\n throw new Error(`Schedule trigger is missing an id`);\n }\n\n const existing = await ctx.db\n .query(convexTable)\n .withIndex('by_record_id', (q: any) => q.eq('id', id))\n .unique();\n\n if (existing) {\n throw new Error(`Schedule trigger with id \"${id}\" already exists`);\n }\n\n await ctx.db.insert(convexTable, record);\n return { ok: true };\n }\n\n case 'listDueSchedules': {\n if (convexTable !== 'mastra_schedules') {\n throw new Error(`listDueSchedules is only supported for mastra_schedules`);\n }\n const query = ctx.db\n .query(convexTable)\n .withIndex('by_status_next_fire_at', (q: any) => q.eq('status', 'active').lte('next_fire_at', request.now));\n const docs = await query.take(normalizeScheduleQueryLimit(request.limit));\n return { ok: true, result: docs };\n }\n\n case 'updateScheduleNextFire': {\n if (convexTable !== 'mastra_schedules') {\n throw new Error(`updateScheduleNextFire is only supported for mastra_schedules`);\n }\n const existing = await ctx.db\n .query(convexTable)\n .withIndex('by_record_id', (q: any) => q.eq('id', request.id))\n .unique();\n\n if (!existing || existing.status !== 'active' || existing.next_fire_at !== request.expectedNextFireAt) {\n return { ok: true, result: false };\n }\n\n await ctx.db.patch(existing._id, {\n next_fire_at: request.newNextFireAt,\n last_fire_at: request.lastFireAt,\n last_run_id: request.lastRunId,\n updated_at: Date.now(),\n });\n\n return { ok: true, result: true };\n }\n\n case 'updateSchedule': {\n if (convexTable !== 'mastra_schedules') {\n throw new Error(`updateSchedule is only supported for mastra_schedules`);\n }\n const existing = await ctx.db\n .query(convexTable)\n .withIndex('by_record_id', (q: any) => q.eq('id', request.id))\n .unique();\n\n if (!existing) {\n throw new Error(`Schedule ${request.id} not found`);\n }\n\n await ctx.db.patch(existing._id, request.patch);\n return { ok: true, result: { ...existing, ...request.patch } };\n }\n\n case 'listScheduleTriggers': {\n if (convexTable !== 'mastra_schedule_triggers') {\n throw new Error(`listScheduleTriggers is only supported for mastra_schedule_triggers`);\n }\n\n const query = ctx.db\n .query(convexTable)\n .withIndex('by_schedule_actual', (q: any) => {\n let builder = q.eq('schedule_id', request.scheduleId);\n if (request.fromActualFireAt != null) {\n builder = builder.gte('actual_fire_at', request.fromActualFireAt);\n }\n if (request.toActualFireAt != null) {\n builder = builder.lt('actual_fire_at', request.toActualFireAt);\n }\n return builder;\n })\n .order('desc');\n const docs = await query.take(normalizeScheduleQueryLimit(request.limit));\n return { ok: true, result: docs };\n }\n\n case 'deleteScheduleTriggers': {\n if (convexTable !== 'mastra_schedule_triggers') {\n throw new Error(`deleteScheduleTriggers is only supported for mastra_schedule_triggers`);\n }\n\n const docs = await ctx.db\n .query(convexTable)\n .withIndex('by_schedule_actual', (q: any) => q.eq('schedule_id', request.scheduleId))\n .take(STORAGE_MUTATION_BATCH_SIZE + 1);\n const hasMore = docs.length > STORAGE_MUTATION_BATCH_SIZE;\n const docsToDelete = hasMore ? docs.slice(0, STORAGE_MUTATION_BATCH_SIZE) : docs;\n\n await deleteDocs(ctx, docsToDelete);\n return { ok: true, hasMore };\n }\n\n case 'insert': {\n const record = request.record;\n const id = record.id;\n if (!id) {\n throw new Error(`Record is missing an id`);\n }\n\n // Find existing record by id field using index\n const existing = await ctx.db\n .query(convexTable)\n .withIndex('by_record_id', (q: any) => q.eq('id', id))\n .unique();\n\n if (existing) {\n // Update existing - don't include id in patch (it's already set)\n const { id: _, ...updateData } = record;\n await ctx.db.patch(existing._id, updateData);\n } else {\n // Insert new - include id as a regular field\n await ctx.db.insert(convexTable, record);\n }\n return { ok: true };\n }\n\n case 'batchInsert': {\n const records = coalesceTypedRecordsForBatchInsert(request.records);\n await mapInBatches(records, STORAGE_MUTATION_BATCH_SIZE, async record => {\n const id = record.id;\n const existing = await ctx.db\n .query(convexTable)\n .withIndex('by_record_id', (q: any) => q.eq('id', id))\n .unique();\n\n if (existing) {\n const { id: _, ...updateData } = record;\n await ctx.db.patch(existing._id, updateData);\n } else {\n await ctx.db.insert(convexTable, record);\n }\n });\n return { ok: true };\n }\n\n case 'updateThread': {\n if (convexTable !== 'mastra_threads') {\n return { ok: false, error: `Unsupported operation ${request.op} for table ${request.tableName}` };\n }\n\n const existing = await ctx.db\n .query(convexTable)\n .withIndex('by_record_id', (q: any) => q.eq('id', request.id))\n .unique();\n\n if (!existing) {\n return { ok: true, result: null };\n }\n\n const patchRecord = {\n title: request.title,\n metadata: mergeMetadata(existing.metadata, request.metadata),\n updatedAt: request.updatedAt,\n };\n await ctx.db.patch(existing._id, patchRecord);\n return { ok: true, result: { ...existing, ...patchRecord } };\n }\n\n case 'updateResource': {\n if (convexTable !== 'mastra_resources') {\n return { ok: false, error: `Unsupported operation ${request.op} for table ${request.tableName}` };\n }\n\n const existing = await ctx.db\n .query(convexTable)\n .withIndex('by_record_id', (q: any) => q.eq('id', request.resourceId))\n .unique();\n\n if (!existing) {\n const record = {\n id: request.resourceId,\n ...(request.workingMemory !== undefined ? { workingMemory: request.workingMemory } : {}),\n metadata: request.metadata ?? {},\n createdAt: request.createdAt,\n updatedAt: request.updatedAt,\n };\n await ctx.db.insert(convexTable, record);\n return { ok: true, result: record };\n }\n\n const patchRecord: Record<string, unknown> = {\n updatedAt: request.updatedAt,\n };\n if (request.workingMemory !== undefined) {\n patchRecord.workingMemory = request.workingMemory;\n }\n if (request.metadata !== undefined) {\n patchRecord.metadata = mergeMetadata(existing.metadata, request.metadata);\n }\n\n await ctx.db.patch(existing._id, patchRecord);\n return { ok: true, result: { ...existing, ...patchRecord } };\n }\n\n case 'patch': {\n const patchRecord = stripPatchKeys(request.record, ['id']);\n const existing = await ctx.db\n .query(convexTable)\n .withIndex('by_record_id', (q: any) => q.eq('id', request.id))\n .unique();\n\n if (!existing) {\n if (isBackgroundTasksTable(convexTable, request)) {\n const legacy = await findGenericDocumentById(ctx, request.tableName, request.id);\n if (legacy) {\n await ctx.db.patch(legacy._id, { record: mergeLegacyRecord(legacy.record, patchRecord) });\n return { ok: true, result: true };\n }\n }\n return { ok: true, result: false };\n }\n\n await ctx.db.patch(existing._id, patchRecord);\n if (isBackgroundTasksTable(convexTable, request)) {\n const legacy = await findGenericDocumentById(ctx, request.tableName, request.id);\n if (legacy) {\n await ctx.db.delete(legacy._id);\n }\n }\n return { ok: true, result: true };\n }\n\n case 'load': {\n const keys = request.keys;\n if (keys.id) {\n // Find by id field using index\n const doc = await ctx.db\n .query(convexTable)\n .withIndex('by_record_id', (q: any) => q.eq('id', keys.id))\n .unique();\n if (!doc && isBackgroundTasksTable(convexTable, request)) {\n const legacy = await findGenericDocumentById(ctx, request.tableName, String(keys.id));\n return { ok: true, result: legacy?.record ?? null };\n }\n return { ok: true, result: doc || null };\n }\n\n if (\n convexTable === CONVEX_TABLE_WORKFLOW_SNAPSHOTS &&\n typeof keys.workflow_name === 'string' &&\n typeof keys.run_id === 'string'\n ) {\n const doc = await ctx.db\n .query(convexTable)\n .withIndex('by_workflow_run', (q: any) => q.eq('workflow_name', keys.workflow_name).eq('run_id', keys.run_id))\n .unique();\n return { ok: true, result: doc || null };\n }\n\n // Query by other fields - use take() to avoid 32k limit\n const docs = await ctx.db.query(convexTable).take(10000);\n const match = docs.find((doc: any) => Object.entries(keys).every(([key, value]) => doc[key] === value));\n return { ok: true, result: match || null };\n }\n\n case 'loadMany': {\n const ids = normalizeLoadManyIds(request.ids);\n const docs = await mapInBatches(ids, STORAGE_MUTATION_BATCH_SIZE, id =>\n ctx.db\n .query(convexTable)\n .withIndex('by_record_id', (q: any) => q.eq('id', id))\n .unique(),\n );\n const typedDocs = docs.filter(Boolean);\n\n if (!isBackgroundTasksTable(convexTable, request)) {\n return { ok: true, result: typedDocs };\n }\n\n const typedDocsById = new Map(typedDocs.map(doc => [String((doc as Record<string, unknown>).id), doc]));\n const legacyDocs = await mapInBatches(\n ids.filter(id => !typedDocsById.has(id)),\n STORAGE_MUTATION_BATCH_SIZE,\n id => findGenericDocumentById(ctx, request.tableName, id),\n );\n const legacyRecordsById = new Map(\n legacyDocs\n .filter((doc): doc is GenericDocumentDoc => Boolean(doc))\n .map(doc => [String(doc.record.id), doc.record]),\n );\n return {\n ok: true,\n result: ids.map(id => typedDocsById.get(id) ?? legacyRecordsById.get(id)).filter(Boolean),\n };\n }\n\n case 'queryTable': {\n // Use take() to avoid hitting Convex's 32k document limit\n const maxDocs = request.limit ? Math.min(request.limit * 2, 10000) : 10000;\n\n // Build query with index if hint provided for efficient filtering\n let query: any;\n let indexedFields = new Set<string>();\n if (request.indexHint) {\n const hint = request.indexHint;\n if (hint.index === 'by_workflow') {\n query = ctx.db\n .query(convexTable)\n .withIndex('by_workflow', (q: any) => q.eq('workflow_name', hint.workflowName));\n } else if (hint.index === 'by_workflow_run') {\n query = ctx.db\n .query(convexTable)\n .withIndex('by_workflow_run', (q: any) =>\n q.eq('workflow_name', hint.workflowName).eq('run_id', hint.runId),\n );\n } else {\n query = ctx.db.query(convexTable);\n }\n } else if (request.filters && request.filters.length > 0) {\n const match = findBestIndex(convexTable, request.filters);\n if (match) {\n query = ctx.db.query(convexTable).withIndex(match.indexName, (q: any) => {\n let builder = q;\n for (const filter of match.indexedFilters) {\n builder = builder.eq(filter.field, filter.value);\n }\n return builder;\n });\n indexedFields = new Set(match.indexedFilters.map(filter => filter.field));\n } else {\n query = ctx.db.query(convexTable);\n }\n } else {\n query = ctx.db.query(convexTable);\n }\n\n let docs = await applyConvexEqualityFilters(query, request.filters, indexedFields).take(maxDocs);\n\n if (isBackgroundTasksTable(convexTable, request)) {\n const legacyDocs = await findGenericDocumentsByTable(ctx, request.tableName, maxDocs);\n let legacyRecords = legacyDocs.map(doc => doc.record);\n if (request.filters && request.filters.length > 0) {\n legacyRecords = legacyRecords.filter(record => matchesFilters(record, request.filters!));\n }\n legacyRecords = await filterLegacyRecordsWithoutTypedCopy(ctx, convexTable, legacyRecords);\n docs.push(...legacyRecords);\n docs = dedupeByRecordId(docs);\n }\n\n // Apply limit if provided\n if (request.limit) {\n docs = docs.slice(0, request.limit);\n }\n\n return { ok: true, result: docs };\n }\n\n case 'clearTable':\n case 'dropTable': {\n // Delete a small batch per call to stay within Convex's 1-second mutation timeout.\n // Client must call repeatedly until hasMore is false.\n const docs = await ctx.db.query(convexTable).take(STORAGE_MUTATION_BATCH_SIZE + 1);\n const hasMore = docs.length > STORAGE_MUTATION_BATCH_SIZE;\n let docsToDelete = hasMore ? docs.slice(0, STORAGE_MUTATION_BATCH_SIZE) : docs;\n let legacyHasMore = false;\n\n if (\n !hasMore &&\n docsToDelete.length < STORAGE_MUTATION_BATCH_SIZE &&\n isBackgroundTasksTable(convexTable, request)\n ) {\n const remainingBatchSize = STORAGE_MUTATION_BATCH_SIZE - docsToDelete.length;\n const legacyDocs = await findGenericDocumentsByTable(ctx, request.tableName, remainingBatchSize + 1);\n legacyHasMore = legacyDocs.length > remainingBatchSize;\n docsToDelete = docsToDelete.concat(legacyHasMore ? legacyDocs.slice(0, remainingBatchSize) : legacyDocs);\n }\n\n await deleteDocs(ctx, docsToDelete);\n return { ok: true, hasMore: hasMore || legacyHasMore };\n }\n\n case 'deleteMany': {\n const docsToDelete = await findExistingDocsByIds(request.ids, id =>\n ctx.db\n .query(convexTable)\n .withIndex('by_record_id', (q: any) => q.eq('id', id))\n .unique(),\n );\n if (isBackgroundTasksTable(convexTable, request)) {\n docsToDelete.push(\n ...(await findExistingDocsByIds(request.ids, id => findGenericDocumentById(ctx, request.tableName, id))),\n );\n }\n await deleteDocs(ctx, docsToDelete);\n return { ok: true };\n }\n\n case 'mergeWorkflowStepResult': {\n if (convexTable !== CONVEX_TABLE_WORKFLOW_SNAPSHOTS) {\n return { ok: false, error: `Unsupported operation ${request.op} for table ${request.tableName}` };\n }\n\n const existing = await ctx.db\n .query(convexTable)\n .withIndex('by_workflow_run', (q: any) =>\n q.eq('workflow_name', request.workflowName).eq('run_id', request.runId),\n )\n .unique();\n\n if (!existing) {\n return { ok: false, error: `Workflow snapshot not found for runId ${request.runId}` };\n }\n\n const snapshot = parseStoredSnapshot(existing.snapshot, request.runId);\n if (!snapshot.context) {\n return { ok: false, error: `Snapshot for runId ${request.runId} is missing or has invalid context` };\n }\n\n const context = mergeWorkflowStepResult({\n snapshot,\n stepId: request.stepId,\n result: JSON.parse(request.result),\n requestContext: JSON.parse(request.requestContext),\n });\n\n await ctx.db.patch(existing._id, {\n snapshot: JSON.stringify(snapshot),\n updatedAt: new Date().toISOString(),\n });\n\n return { ok: true, result: JSON.stringify(context) };\n }\n\n case 'mergeWorkflowState': {\n if (convexTable !== CONVEX_TABLE_WORKFLOW_SNAPSHOTS) {\n return { ok: false, error: `Unsupported operation ${request.op} for table ${request.tableName}` };\n }\n\n const existing = await ctx.db\n .query(convexTable)\n .withIndex('by_workflow_run', (q: any) =>\n q.eq('workflow_name', request.workflowName).eq('run_id', request.runId),\n )\n .unique();\n\n if (!existing) {\n return { ok: false, error: `Workflow snapshot not found for runId ${request.runId}` };\n }\n\n const snapshot = parseStoredSnapshot(existing.snapshot, request.runId);\n if (!snapshot.context) {\n return { ok: false, error: `Snapshot for runId ${request.runId} is missing or has invalid context` };\n }\n\n const mergedSnapshot = { ...snapshot, ...JSON.parse(request.opts) };\n await ctx.db.patch(existing._id, {\n snapshot: JSON.stringify(mergedSnapshot),\n updatedAt: new Date().toISOString(),\n });\n\n return { ok: true, result: JSON.stringify(mergedSnapshot) };\n }\n\n default:\n return { ok: false, error: `Unsupported operation ${(request as any).op}` };\n }\n}\n\n/**\n * Handle operations on the vectors table.\n * Vectors are stored with indexName to support multiple indexes.\n */\nasync function handleVectorOperation(ctx: MutationCtx<any>, request: StorageRequest): Promise<StorageResponse> {\n // Extract the index name from the table name (e.g., \"mastra_vector_myindex\" -> \"myindex\")\n const indexName = request.tableName.replace(VECTOR_TABLE_PREFIX, '');\n const convexTable = 'mastra_vectors';\n\n switch (request.op) {\n case 'insert': {\n const record = request.record;\n const id = record.id;\n if (!id) {\n throw new Error(`Vector record is missing an id`);\n }\n\n // Find existing by composite key (indexName, id) to scope per index\n const existing = await ctx.db\n .query(convexTable)\n .withIndex('by_index_id', (q: any) => q.eq('indexName', indexName).eq('id', id))\n .unique();\n\n if (existing) {\n await ctx.db.patch(existing._id, {\n embedding: record.embedding,\n metadata: record.metadata,\n });\n } else {\n await ctx.db.insert(convexTable, {\n id,\n indexName,\n embedding: record.embedding,\n metadata: record.metadata,\n });\n }\n return { ok: true };\n }\n\n case 'batchInsert': {\n const records = coalesceLastRecordById(request.records);\n await mapInBatches(records, STORAGE_MUTATION_BATCH_SIZE, async record => {\n const id = record.id;\n\n // Find existing by composite key (indexName, id) to scope per index\n const existing = await ctx.db\n .query(convexTable)\n .withIndex('by_index_id', (q: any) => q.eq('indexName', indexName).eq('id', id))\n .unique();\n\n if (existing) {\n await ctx.db.patch(existing._id, {\n embedding: record.embedding,\n metadata: record.metadata,\n });\n } else {\n await ctx.db.insert(convexTable, {\n id,\n indexName,\n embedding: record.embedding,\n metadata: record.metadata,\n });\n }\n });\n return { ok: true };\n }\n\n case 'patch': {\n const patchRecord = stripPatchKeys(request.record, ['id', 'indexName']);\n const existing = await ctx.db\n .query(convexTable)\n .withIndex('by_index_id', (q: any) => q.eq('indexName', indexName).eq('id', request.id))\n .unique();\n\n if (!existing) {\n return { ok: true, result: false };\n }\n\n await ctx.db.patch(existing._id, patchRecord);\n return { ok: true, result: true };\n }\n\n case 'load': {\n const keys = request.keys;\n if (keys.id) {\n // Use composite key (indexName, id) to scope lookup per index\n const doc = await ctx.db\n .query(convexTable)\n .withIndex('by_index_id', (q: any) => q.eq('indexName', indexName).eq('id', keys.id))\n .unique();\n return { ok: true, result: doc || null };\n }\n return { ok: true, result: null };\n }\n\n case 'loadMany': {\n const docs = await findExistingDocsByIds(normalizeLoadManyIds(request.ids), id =>\n ctx.db\n .query(convexTable)\n .withIndex('by_index_id', (q: any) => q.eq('indexName', indexName).eq('id', id))\n .unique(),\n );\n return { ok: true, result: docs };\n }\n\n case 'queryTable': {\n if (request.cursor !== undefined && request.pageSize === undefined) {\n throw new Error('queryTable cursor requires pageSize');\n }\n\n if (request.pageSize !== undefined) {\n if (!Number.isInteger(request.pageSize) || request.pageSize <= 0) {\n throw new Error('queryTable pageSize must be a positive integer');\n }\n if (request.limit !== undefined) {\n throw new Error('queryTable limit cannot be combined with pageSize');\n }\n\n const page = await ctx.db\n .query(convexTable)\n .withIndex('by_index', (q: any) => q.eq('indexName', indexName))\n .paginate({ cursor: request.cursor ?? null, numItems: request.pageSize });\n\n let docs = page.page;\n\n // Apply filters if provided\n if (request.filters && request.filters.length > 0) {\n docs = docs.filter((doc: any) => request.filters!.every(filter => doc[filter.field] === filter.value));\n }\n\n return {\n ok: true,\n result: docs,\n hasMore: !page.isDone,\n continuationCursor: page.continueCursor,\n };\n }\n\n // Use take() to avoid hitting Convex's 32k document limit\n const maxDocs = request.limit ? Math.min(request.limit * 2, 10000) : 10000;\n let docs = await ctx.db\n .query(convexTable)\n .withIndex('by_index', (q: any) => q.eq('indexName', indexName))\n .take(maxDocs);\n\n // Apply filters if provided\n if (request.filters && request.filters.length > 0) {\n docs = docs.filter((doc: any) => request.filters!.every(filter => doc[filter.field] === filter.value));\n }\n\n // Apply limit if provided\n if (request.limit) {\n docs = docs.slice(0, request.limit);\n }\n\n return { ok: true, result: docs };\n }\n\n case 'clearTable':\n case 'dropTable': {\n // Delete a small batch per call to stay within Convex's 1-second mutation timeout.\n // Client must call repeatedly until hasMore is false.\n const docs = await ctx.db\n .query(convexTable)\n .withIndex('by_index', (q: any) => q.eq('indexName', indexName))\n .take(STORAGE_MUTATION_BATCH_SIZE + 1);\n const hasMore = docs.length > STORAGE_MUTATION_BATCH_SIZE;\n const docsToDelete = hasMore ? docs.slice(0, STORAGE_MUTATION_BATCH_SIZE) : docs;\n\n await deleteDocs(ctx, docsToDelete);\n return { ok: true, hasMore };\n }\n\n case 'deleteMany': {\n const docsToDelete = await findExistingDocsByIds(request.ids, id =>\n // Use composite key (indexName, id) to scope deletion per index\n ctx.db\n .query(convexTable)\n .withIndex('by_index_id', (q: any) => q.eq('indexName', indexName).eq('id', id))\n .unique(),\n );\n await deleteDocs(ctx, docsToDelete);\n return { ok: true };\n }\n\n default:\n return { ok: false, error: `Unsupported operation ${(request as any).op}` };\n }\n}\n\n/**\n * Handle operations on the generic documents table.\n * Used as fallback for unknown table names.\n */\nasync function handleGenericOperation(ctx: MutationCtx<any>, request: StorageRequest): Promise<StorageResponse> {\n const tableName = request.tableName;\n const convexTable = 'mastra_documents';\n\n switch (request.op) {\n case 'insert': {\n const record = request.record;\n if (!record.id) {\n throw new Error(`Record for table ${tableName} is missing an id`);\n }\n const primaryKey = String(record.id);\n\n const existing = await ctx.db\n .query(convexTable)\n .withIndex('by_table_primary', (q: any) => q.eq('table', tableName).eq('primaryKey', primaryKey))\n .unique();\n\n if (existing) {\n await ctx.db.patch(existing._id, { record });\n } else {\n await ctx.db.insert(convexTable, {\n table: tableName,\n primaryKey,\n record,\n });\n }\n return { ok: true };\n }\n\n case 'batchInsert': {\n const records = coalesceLastRecordById(request.records);\n await mapInBatches(records, STORAGE_MUTATION_BATCH_SIZE, async record => {\n const primaryKey = String(record.id);\n\n const existing = await ctx.db\n .query(convexTable)\n .withIndex('by_table_primary', (q: any) => q.eq('table', tableName).eq('primaryKey', primaryKey))\n .unique();\n\n if (existing) {\n await ctx.db.patch(existing._id, { record });\n } else {\n await ctx.db.insert(convexTable, {\n table: tableName,\n primaryKey,\n record,\n });\n }\n });\n return { ok: true };\n }\n\n case 'patch': {\n const patchRecord = stripPatchKeys(request.record, ['id']);\n const existing = await ctx.db\n .query(convexTable)\n .withIndex('by_table_primary', (q: any) => q.eq('table', tableName).eq('primaryKey', String(request.id)))\n .unique();\n\n if (!existing) {\n return { ok: true, result: false };\n }\n\n await ctx.db.patch(existing._id, {\n record:\n tableName === TABLE_BACKGROUND_TASKS\n ? mergeLegacyRecord(existing.record, patchRecord)\n : { ...existing.record, ...patchRecord },\n });\n return { ok: true, result: true };\n }\n\n case 'load': {\n const keys = request.keys;\n if (keys.id) {\n const existing = await ctx.db\n .query(convexTable)\n .withIndex('by_table_primary', (q: any) => q.eq('table', tableName).eq('primaryKey', String(keys.id)))\n .unique();\n return { ok: true, result: existing ? existing.record : null };\n }\n\n const docs = await ctx.db\n .query(convexTable)\n .withIndex('by_table', (q: any) => q.eq('table', tableName))\n .take(10000);\n const match = docs.find((doc: any) => Object.entries(keys).every(([key, value]) => doc.record?.[key] === value));\n return { ok: true, result: match ? match.record : null };\n }\n\n case 'loadMany': {\n const docs = await mapInBatches(normalizeLoadManyIds(request.ids), STORAGE_MUTATION_BATCH_SIZE, id =>\n findGenericDocumentById(ctx, tableName, id),\n );\n return {\n ok: true,\n result: docs.filter((doc): doc is GenericDocumentDoc => Boolean(doc)).map(doc => doc.record),\n };\n }\n\n case 'queryTable': {\n // Use take() to avoid hitting Convex's 32k document limit\n const maxDocs = request.limit ? Math.min(request.limit * 2, 10000) : 10000;\n const docs = await ctx.db\n .query(convexTable)\n .withIndex('by_table', (q: any) => q.eq('table', tableName))\n .take(maxDocs);\n\n let records = docs.map((doc: any) => doc.record);\n\n if (request.filters && request.filters.length > 0) {\n records = records.filter((record: any) =>\n tableName === TABLE_BACKGROUND_TASKS\n ? matchesFilters(record, request.filters!)\n : request.filters!.every(filter => record?.[filter.field] === filter.value),\n );\n }\n\n if (request.limit) {\n records = records.slice(0, request.limit);\n }\n\n return { ok: true, result: records };\n }\n\n case 'clearTable':\n case 'dropTable': {\n // Delete a small batch per call to stay within Convex's 1-second mutation timeout.\n // Client must call repeatedly until hasMore is false.\n const docs = await ctx.db\n .query(convexTable)\n .withIndex('by_table', (q: any) => q.eq('table', tableName))\n .take(STORAGE_MUTATION_BATCH_SIZE + 1);\n const hasMore = docs.length > STORAGE_MUTATION_BATCH_SIZE;\n const docsToDelete = hasMore ? docs.slice(0, STORAGE_MUTATION_BATCH_SIZE) : docs;\n\n await deleteDocs(ctx, docsToDelete);\n return { ok: true, hasMore };\n }\n\n case 'deleteMany': {\n const docsToDelete = await findExistingDocsByIds(request.ids, id =>\n ctx.db\n .query(convexTable)\n .withIndex('by_table_primary', (q: any) => q.eq('table', tableName).eq('primaryKey', String(id)))\n .unique(),\n );\n await deleteDocs(ctx, docsToDelete);\n return { ok: true };\n }\n\n default:\n return { ok: false, error: `Unsupported operation ${(request as any).op}` };\n }\n}\n","import { actionGeneric, mutationGeneric, queryGeneric } from 'convex/server';\nimport { v } from 'convex/values';\nimport type { GenericId } from 'convex/values';\n\ntype NativeVectorFilterValue = string | number | boolean | null;\ntype NativeVectorFilterClause = {\n field: string;\n value: NativeVectorFilterValue;\n};\ntype NativeVectorFilter = NativeVectorFilterClause | { $or: NativeVectorFilterClause[] };\n\ntype NativeVectorIndexConfig = {\n tableName: string;\n vectorIndexName: string;\n dimension?: number;\n idField?: string;\n idIndexName?: string;\n vectorField?: string;\n metadataField?: string;\n filterFields?: string[];\n};\n\ntype NativeVectorDocument = Record<string, any> & {\n _id?: GenericId<string>;\n};\n\nconst DEFAULT_ID_FIELD = 'id';\nconst DEFAULT_ID_INDEX = 'by_record_id';\nconst DEFAULT_VECTOR_FIELD = 'embedding';\nconst DEFAULT_METADATA_FIELD = 'metadata';\nconst NATIVE_VECTOR_BATCH_SIZE = 25;\nconst MAX_CONVEX_VECTOR_RESULTS = 256;\n\nconst nativeVectorFilterValueValidator = v.union(v.string(), v.number(), v.boolean(), v.null());\nconst nativeVectorFilterClauseValidator = v.object({\n field: v.string(),\n value: nativeVectorFilterValueValidator,\n});\nconst nativeVectorFilterValidator = v.union(\n nativeVectorFilterClauseValidator,\n v.object({ $or: v.array(nativeVectorFilterClauseValidator) }),\n);\nconst nativeVectorIndexConfigValidator = v.object({\n tableName: v.string(),\n vectorIndexName: v.string(),\n dimension: v.optional(v.number()),\n idField: v.optional(v.string()),\n idIndexName: v.optional(v.string()),\n vectorField: v.optional(v.string()),\n metadataField: v.optional(v.string()),\n filterFields: v.optional(v.array(v.string())),\n});\n\nfunction idField(config: NativeVectorIndexConfig): string {\n return config.idField ?? DEFAULT_ID_FIELD;\n}\n\nfunction idIndexName(config: NativeVectorIndexConfig): string {\n return config.idIndexName ?? DEFAULT_ID_INDEX;\n}\n\nfunction vectorField(config: NativeVectorIndexConfig): string {\n return config.vectorField ?? DEFAULT_VECTOR_FIELD;\n}\n\nfunction metadataField(config: NativeVectorIndexConfig): string {\n return config.metadataField ?? DEFAULT_METADATA_FIELD;\n}\n\nfunction asTableName(tableName: string): any {\n return tableName as any;\n}\n\nfunction asConvexId(id: string): GenericId<string> {\n return id as GenericId<string>;\n}\n\nfunction pickFilterFields(metadata: Record<string, any> | undefined, filterFields: string[] | undefined) {\n const fields: Record<string, any> = {};\n if (!metadata || !filterFields) return fields;\n\n for (const field of filterFields) {\n const value = metadata[field];\n if (value !== undefined) {\n fields[field] = value;\n }\n }\n\n return fields;\n}\n\nfunction isMetadataRecord(value: unknown): value is Record<string, any> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction validateMetadataArray(metadata: unknown, idsLength: number): Array<Record<string, any>> | undefined {\n if (metadata === undefined) return undefined;\n if (!Array.isArray(metadata)) {\n throw new Error('Native vector upsert: metadata must be an array matching ids when provided');\n }\n if (metadata.length !== idsLength) {\n throw new Error(`Native vector upsert: metadata length (${metadata.length}) must match ids length (${idsLength})`);\n }\n if (!metadata.every(isMetadataRecord)) {\n throw new Error('Native vector upsert: metadata entries must be objects when provided');\n }\n return metadata;\n}\n\nfunction validateMetadataRecord(metadata: unknown): Record<string, any> | undefined {\n if (metadata === undefined) return undefined;\n if (!isMetadataRecord(metadata)) {\n throw new Error('Native vector update: metadata must be an object when provided');\n }\n return metadata;\n}\n\nfunction clearMissingFilterFields(\n patch: Record<string, any>,\n metadata: Record<string, any>,\n filterFields: string[] | undefined,\n) {\n if (!filterFields) return;\n\n for (const field of filterFields) {\n if (metadata[field] === undefined) {\n patch[field] = undefined;\n }\n }\n}\n\nfunction omitVectorField(doc: NativeVectorDocument, config: NativeVectorIndexConfig): NativeVectorDocument {\n const { [vectorField(config)]: _, ...docWithoutVector } = doc;\n return docWithoutVector;\n}\n\nfunction buildRecord({\n config,\n id,\n vector,\n metadata,\n}: {\n config: NativeVectorIndexConfig;\n id: string;\n vector: number[];\n metadata?: Record<string, any>;\n}) {\n return {\n [idField(config)]: id,\n [vectorField(config)]: vector,\n ...(metadata !== undefined ? { [metadataField(config)]: metadata } : {}),\n ...pickFilterFields(metadata, config.filterFields),\n };\n}\n\nasync function findByRecordId(\n ctx: any,\n config: NativeVectorIndexConfig,\n id: string,\n): Promise<NativeVectorDocument | null> {\n return ctx.db\n .query(asTableName(config.tableName))\n .withIndex(idIndexName(config), (q: any) => q.eq(idField(config), id))\n .unique();\n}\n\nasync function mapInBatches<TInput, TOutput>(\n inputs: TInput[],\n mapper: (input: TInput, index: number) => Promise<TOutput>,\n): Promise<TOutput[]> {\n const results: TOutput[] = [];\n for (let index = 0; index < inputs.length; index += NATIVE_VECTOR_BATCH_SIZE) {\n results.push(\n ...(await Promise.all(\n inputs\n .slice(index, index + NATIVE_VECTOR_BATCH_SIZE)\n .map((input, batchIndex) => mapper(input, index + batchIndex)),\n )),\n );\n }\n return results;\n}\n\nfunction buildVectorFilter(q: any, filter?: NativeVectorFilter) {\n if (!filter) return undefined;\n\n if ('$or' in filter) {\n return q.or(...filter.$or.map(clause => q.eq(clause.field, clause.value)));\n }\n\n return q.eq(filter.field, filter.value);\n}\n\nexport const mastraNativeVectorAction = actionGeneric({\n args: {\n config: nativeVectorIndexConfigValidator,\n vector: v.array(v.number()),\n limit: v.optional(v.number()),\n filter: v.optional(nativeVectorFilterValidator),\n },\n handler: async (ctx, args: any) => {\n const config = args.config as NativeVectorIndexConfig;\n const limit = args.limit as number | undefined;\n const filter = args.filter as NativeVectorFilter | undefined;\n\n if (limit !== undefined && (!Number.isInteger(limit) || limit < 1 || limit > MAX_CONVEX_VECTOR_RESULTS)) {\n throw new Error(`Native vector query: limit must be an integer between 1 and ${MAX_CONVEX_VECTOR_RESULTS}`);\n }\n\n const results = await ctx.vectorSearch(asTableName(config.tableName), config.vectorIndexName as any, {\n vector: args.vector,\n ...(limit !== undefined ? { limit } : {}),\n ...(filter ? { filter: (q: any) => buildVectorFilter(q, filter) } : {}),\n });\n\n return results.map(result => ({\n id: String(result._id),\n score: result._score,\n }));\n },\n});\n\nexport const mastraNativeVectorQuery = queryGeneric({\n args: {\n op: v.union(v.literal('getByConvexIds'), v.literal('describe'), v.literal('listByIds')),\n config: nativeVectorIndexConfigValidator,\n ids: v.optional(v.array(v.string())),\n includeVector: v.optional(v.boolean()),\n countLimit: v.optional(v.number()),\n },\n handler: async (ctx, args: any) => {\n const config = args.config as NativeVectorIndexConfig;\n\n switch (args.op as string) {\n case 'getByConvexIds': {\n const ids = args.ids as string[];\n if (!ids) {\n throw new Error('Native vector query: ids are required');\n }\n const includeVector = args.includeVector === true;\n const docs = await mapInBatches(ids, id => ctx.db.get(asConvexId(id)));\n return docs\n .filter((doc): doc is NativeVectorDocument => Boolean(doc))\n .map(doc => (includeVector ? doc : omitVectorField(doc, config)));\n }\n\n case 'describe': {\n const limit = Math.max(1, Math.min(args.countLimit ?? 10000, 10000));\n const docs = await ctx.db.query(asTableName(config.tableName)).take(limit + 1);\n return {\n count: Math.min(docs.length, limit),\n countIsLimited: docs.length > limit,\n };\n }\n\n case 'listByIds': {\n const ids = args.ids as string[];\n if (!ids) {\n throw new Error('Native vector query: ids are required');\n }\n return mapInBatches(ids, id => findByRecordId(ctx, config, id));\n }\n\n default:\n throw new Error(`Unsupported native vector query operation: ${args.op}`);\n }\n },\n});\n\nexport const mastraNativeVectorMutation = mutationGeneric({\n args: {\n op: v.union(v.literal('upsert'), v.literal('updateById'), v.literal('deleteByIds')),\n config: nativeVectorIndexConfigValidator,\n ids: v.optional(v.array(v.string())),\n vectors: v.optional(v.array(v.array(v.number()))),\n metadata: v.optional(v.any()),\n id: v.optional(v.string()),\n vector: v.optional(v.array(v.number())),\n },\n handler: async (ctx, args: any) => {\n const config = args.config as NativeVectorIndexConfig;\n\n switch (args.op as string) {\n case 'upsert': {\n const ids = args.ids as string[];\n const vectors = args.vectors as number[][];\n\n if (!ids || !vectors) {\n throw new Error('Native vector upsert: ids and vectors are required');\n }\n if (vectors.length !== ids.length) {\n throw new Error(\n `Native vector upsert: vectors length (${vectors.length}) must match ids length (${ids.length})`,\n );\n }\n const metadata = validateMetadataArray(args.metadata, ids.length);\n if (new Set(ids).size !== ids.length) {\n throw new Error('Native vector upsert: ids must be unique');\n }\n\n await mapInBatches(ids, async (id, index) => {\n const record = buildRecord({\n config,\n id,\n vector: vectors[index]!,\n metadata: metadata?.[index],\n });\n const existing = await findByRecordId(ctx, config, id);\n if (existing?._id) {\n const { _id: _, _creationTime: __, ...patch } = record as NativeVectorDocument;\n if (metadata?.[index] !== undefined) {\n clearMissingFilterFields(patch, metadata[index]!, config.filterFields);\n }\n await ctx.db.patch(existing._id, patch);\n } else {\n await ctx.db.insert(asTableName(config.tableName), record);\n }\n });\n return { ok: true };\n }\n\n case 'updateById': {\n if (!args.id) {\n throw new Error('Native vector update: id is required');\n }\n const existing = await findByRecordId(ctx, config, args.id);\n if (!existing?._id) return { ok: true };\n\n const patch: Record<string, any> = {};\n if (args.vector) patch[vectorField(config)] = args.vector;\n const metadata = validateMetadataRecord(args.metadata);\n if (metadata !== undefined) {\n const existingMetadata = isMetadataRecord(existing[metadataField(config)])\n ? existing[metadataField(config)]\n : {};\n patch[metadataField(config)] = { ...existingMetadata, ...metadata };\n Object.assign(patch, pickFilterFields(patch[metadataField(config)], config.filterFields));\n }\n\n if (Object.keys(patch).length > 0) {\n await ctx.db.patch(existing._id, patch);\n }\n return { ok: true };\n }\n\n case 'deleteByIds': {\n const ids = args.ids as string[];\n if (!ids) {\n throw new Error('Native vector deleteByIds: ids are required');\n }\n const docs = await mapInBatches(ids, id => findByRecordId(ctx, config, id));\n await mapInBatches(\n docs.filter((doc): doc is NativeVectorDocument & { _id: GenericId<string> } => Boolean(doc?._id)),\n doc => ctx.db.delete(doc._id),\n );\n return { ok: true };\n }\n\n default:\n throw new Error(`Unsupported native vector mutation operation: ${args.op}`);\n }\n },\n});\n"]}