@mastra/convex 0.1.0-beta.2 → 0.1.0-beta.3

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 CHANGED
@@ -1,5 +1,18 @@
1
1
  # @mastra/convex
2
2
 
3
+ ## 0.1.0-beta.3
4
+
5
+ ### Patch Changes
6
+
7
+ - Add delete workflow run API ([#10991](https://github.com/mastra-ai/mastra/pull/10991))
8
+
9
+ ```typescript
10
+ await workflow.deleteWorkflowRunById(runId);
11
+ ```
12
+
13
+ - Updated dependencies [[`edb07e4`](https://github.com/mastra-ai/mastra/commit/edb07e49283e0c28bd094a60e03439bf6ecf0221), [`b7e17d3`](https://github.com/mastra-ai/mastra/commit/b7e17d3f5390bb5a71efc112204413656fcdc18d), [`261473a`](https://github.com/mastra-ai/mastra/commit/261473ac637e633064a22076671e2e02b002214d), [`5d7000f`](https://github.com/mastra-ai/mastra/commit/5d7000f757cd65ea9dc5b05e662fd83dfd44e932), [`4f0331a`](https://github.com/mastra-ai/mastra/commit/4f0331a79bf6eb5ee598a5086e55de4b5a0ada03), [`8a000da`](https://github.com/mastra-ai/mastra/commit/8a000da0c09c679a2312f6b3aa05b2ca78ca7393)]:
14
+ - @mastra/core@1.0.0-beta.10
15
+
3
16
  ## 0.1.0-beta.2
4
17
 
5
18
  ### Patch Changes
package/dist/index.cjs CHANGED
@@ -711,6 +711,9 @@ var WorkflowsConvex = class extends storage.WorkflowsStorage {
711
711
  resourceId: match.resourceId
712
712
  };
713
713
  }
714
+ async deleteWorkflowRunById({ runId, workflowName }) {
715
+ await this.operations.deleteMany(storage.TABLE_WORKFLOW_SNAPSHOT, [`${workflowName}-${runId}`]);
716
+ }
714
717
  async getRun(workflowName, runId) {
715
718
  const runs = await this.operations.queryTable(storage.TABLE_WORKFLOW_SNAPSHOT, [
716
719
  { field: "workflow_name", value: workflowName }
@@ -956,6 +959,9 @@ var ConvexStore = class extends storage.MastraStorage {
956
959
  }) {
957
960
  return this.workflows.getWorkflowRunById({ runId, workflowName });
958
961
  }
962
+ async deleteWorkflowRunById({ runId, workflowName }) {
963
+ return this.workflows.deleteWorkflowRunById({ runId, workflowName });
964
+ }
959
965
  async getScoreById({ id }) {
960
966
  return this.scores.getScoreById({ id });
961
967
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/storage/client.ts","../src/storage/domains/memory.ts","../src/storage/domains/scores.ts","../src/storage/domains/workflows.ts","../src/storage/operations.ts","../src/storage/index.ts","../src/vector/index.ts"],"names":["MemoryStorage","TABLE_THREADS","MastraError","createStorageErrorId","ErrorDomain","ErrorCategory","TABLE_MESSAGES","normalizePerPage","calculatePagination","MessageList","safelyParseJSON","TABLE_RESOURCES","ScoresStorage","TABLE_SCORERS","crypto","WorkflowsStorage","TABLE_WORKFLOW_SNAPSHOT","StoreOperations","MastraStorage","MastraVector","existing","updated"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { StorageRequest, StorageResponse } from './types';\n\nexport type ConvexAdminClientConfig = {\n deploymentUrl: string;\n adminAuthToken: string;\n storageFunction?: string;\n};\n\n/** Response from callStorageRaw that includes batch info */\nexport type RawStorageResult<T = any> = {\n result: T;\n hasMore?: boolean;\n};\n\nconst DEFAULT_STORAGE_FUNCTION = 'mastra/storage:handle';\n\nexport class ConvexAdminClient {\n private readonly deploymentUrl: string;\n private readonly adminAuthToken: string;\n private readonly storageFunction: string;\n\n constructor({ deploymentUrl, adminAuthToken, storageFunction }: ConvexAdminClientConfig) {\n if (!deploymentUrl) {\n throw new Error('ConvexAdminClient: deploymentUrl is required.');\n }\n\n if (!adminAuthToken) {\n throw new Error('ConvexAdminClient: adminAuthToken is required.');\n }\n\n this.deploymentUrl = deploymentUrl.replace(/\\/$/, ''); // Remove trailing slash\n this.adminAuthToken = adminAuthToken;\n this.storageFunction = storageFunction ?? DEFAULT_STORAGE_FUNCTION;\n }\n\n /**\n * Call storage and return the full response including hasMore flag.\n * Use this for operations that may need multiple calls (e.g., clearTable).\n */\n async callStorageRaw<T = any>(request: StorageRequest): Promise<RawStorageResult<T>> {\n // Use Convex HTTP API directly with admin auth\n const url = `${this.deploymentUrl}/api/mutation`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Convex ${this.adminAuthToken}`,\n },\n body: JSON.stringify({\n path: this.storageFunction,\n args: request,\n format: 'json',\n }),\n });\n\n if (!response.ok) {\n const text = await response.text();\n throw new Error(`Convex API error: ${response.status} ${text}`);\n }\n\n const result = (await response.json()) as {\n status?: string;\n errorMessage?: string;\n errorCode?: string;\n value?: StorageResponse;\n };\n\n // Handle Convex response format\n if (result.status === 'error') {\n const error = new Error(result.errorMessage || 'Unknown Convex error');\n (error as any).code = result.errorCode;\n throw error;\n }\n\n const storageResponse = result.value as StorageResponse;\n if (!storageResponse?.ok) {\n const errResponse = storageResponse as { ok: false; error: string; code?: string; details?: Record<string, any> };\n const error = new Error(errResponse?.error || 'Unknown Convex storage error');\n (error as any).code = errResponse?.code;\n (error as any).details = errResponse?.details;\n throw error;\n }\n\n return {\n result: storageResponse.result as T,\n hasMore: storageResponse.hasMore,\n };\n }\n\n async callStorage<T = any>(request: StorageRequest): Promise<T> {\n const { result } = await this.callStorageRaw<T>(request);\n return result;\n }\n}\n","import { MessageList } from '@mastra/core/agent';\nimport type { MastraMessageContentV2 } from '@mastra/core/agent';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { MastraDBMessage, StorageThreadType } from '@mastra/core/memory';\nimport {\n MemoryStorage,\n TABLE_MESSAGES,\n TABLE_RESOURCES,\n TABLE_THREADS,\n calculatePagination,\n createStorageErrorId,\n normalizePerPage,\n safelyParseJSON,\n} from '@mastra/core/storage';\nimport type {\n StorageListMessagesInput,\n StorageListMessagesOutput,\n StorageListThreadsByResourceIdInput,\n StorageListThreadsByResourceIdOutput,\n StorageResourceType,\n} from '@mastra/core/storage';\n\nimport type { StoreOperationsConvex } from '../operations';\n\ntype StoredMessage = {\n id: string;\n thread_id: string;\n content: string;\n role: string;\n type: string;\n createdAt: string;\n resourceId: string | null;\n};\n\nexport class MemoryConvex extends MemoryStorage {\n constructor(private readonly operations: StoreOperationsConvex) {\n super();\n }\n\n async getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null> {\n const row = await this.operations.load<\n (Omit<StorageThreadType, 'createdAt' | 'updatedAt'> & { createdAt: string; updatedAt: string }) | null\n >({\n tableName: TABLE_THREADS,\n keys: { id: threadId },\n });\n\n if (!row) return null;\n\n return {\n ...row,\n metadata: typeof row.metadata === 'string' ? JSON.parse(row.metadata) : row.metadata,\n createdAt: new Date(row.createdAt),\n updatedAt: new Date(row.updatedAt),\n };\n }\n\n async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n await this.operations.insert({\n tableName: TABLE_THREADS,\n record: {\n ...thread,\n metadata: thread.metadata ?? {},\n },\n });\n return thread;\n }\n\n async updateThread({\n id,\n title,\n metadata,\n }: {\n id: string;\n title: string;\n metadata: Record<string, unknown>;\n }): Promise<StorageThreadType> {\n const existing = await this.getThreadById({ threadId: id });\n if (!existing) {\n throw new MastraError({\n id: createStorageErrorId('CONVEX', 'UPDATE_THREAD', 'THREAD_NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Thread ${id} not found`,\n });\n }\n\n const updated: StorageThreadType = {\n ...existing,\n title,\n metadata: {\n ...existing.metadata,\n ...metadata,\n },\n updatedAt: new Date(),\n };\n\n await this.saveThread({ thread: updated });\n return updated;\n }\n\n async deleteThread({ threadId }: { threadId: string }): Promise<void> {\n const messages = await this.operations.queryTable<StoredMessage>(TABLE_MESSAGES, [\n { field: 'thread_id', value: threadId },\n ]);\n await this.operations.deleteMany(\n TABLE_MESSAGES,\n messages.map(msg => msg.id),\n );\n await this.operations.deleteMany(TABLE_THREADS, [threadId]);\n }\n\n async listThreadsByResourceId(\n args: StorageListThreadsByResourceIdInput,\n ): Promise<StorageListThreadsByResourceIdOutput> {\n const { resourceId, page = 0, perPage: perPageInput, orderBy } = args;\n const perPage = normalizePerPage(perPageInput, 100);\n const { field, direction } = this.parseOrderBy(orderBy);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n const rows = await this.operations.queryTable<\n Omit<StorageThreadType, 'createdAt' | 'updatedAt'> & { createdAt: string; updatedAt: string }\n >(TABLE_THREADS, [{ field: 'resourceId', value: resourceId }]);\n\n const threads = rows.map(row => ({\n ...row,\n metadata: typeof row.metadata === 'string' ? JSON.parse(row.metadata) : row.metadata,\n createdAt: new Date(row.createdAt),\n updatedAt: new Date(row.updatedAt),\n }));\n\n threads.sort((a, b) => {\n const aValue = a[field];\n const bValue = b[field];\n const aTime = aValue instanceof Date ? aValue.getTime() : new Date(aValue as any).getTime();\n const bTime = bValue instanceof Date ? bValue.getTime() : new Date(bValue as any).getTime();\n return direction === 'ASC' ? aTime - bTime : bTime - aTime;\n });\n\n const total = threads.length;\n const paginated = perPageInput === false ? threads : threads.slice(offset, offset + perPage);\n\n return {\n threads: paginated,\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n }\n\n async listMessages(args: StorageListMessagesInput): Promise<StorageListMessagesOutput> {\n const { threadId, resourceId, include, filter, perPage: perPageInput, page = 0, orderBy } = args;\n\n // Normalize threadId to array\n const threadIds = Array.isArray(threadId) ? threadId : [threadId];\n\n if (threadIds.length === 0 || threadIds.some(id => !id.trim())) {\n throw new MastraError(\n {\n id: createStorageErrorId('CONVEX', 'LIST_MESSAGES', 'INVALID_THREAD_ID'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { threadId: Array.isArray(threadId) ? threadId.join(',') : threadId },\n },\n new Error('threadId must be a non-empty string or array of non-empty strings'),\n );\n }\n\n const perPage = normalizePerPage(perPageInput, 40);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const { field, direction } = this.parseOrderBy(orderBy, 'ASC');\n\n // Fetch messages from all threads\n let rows: StoredMessage[] = [];\n for (const tid of threadIds) {\n const threadRows = await this.operations.queryTable<StoredMessage>(TABLE_MESSAGES, [\n { field: 'thread_id', value: tid },\n ]);\n rows.push(...threadRows);\n }\n\n if (resourceId) {\n rows = rows.filter(row => row.resourceId === resourceId);\n }\n\n if (filter?.dateRange) {\n const { start, end } = filter.dateRange;\n rows = rows.filter(row => {\n const created = new Date(row.createdAt).getTime();\n if (start && created < start.getTime()) return false;\n if (end && created > end.getTime()) return false;\n return true;\n });\n }\n\n rows.sort((a, b) => {\n const aValue =\n field === 'createdAt' || field === 'updatedAt'\n ? new Date((a as Record<string, any>)[field]).getTime()\n : (a as Record<string, any>)[field];\n const bValue =\n field === 'createdAt' || field === 'updatedAt'\n ? new Date((b as Record<string, any>)[field]).getTime()\n : (b as Record<string, any>)[field];\n if (typeof aValue === 'number' && typeof bValue === 'number') {\n return direction === 'ASC' ? aValue - bValue : bValue - aValue;\n }\n return direction === 'ASC'\n ? String(aValue).localeCompare(String(bValue))\n : String(bValue).localeCompare(String(aValue));\n });\n\n const totalThreadMessages = rows.length;\n const paginatedRows = perPageInput === false ? rows : rows.slice(offset, offset + perPage);\n const messages = paginatedRows.map(row => this.parseStoredMessage(row));\n const messageIds = new Set(messages.map(msg => msg.id));\n\n if (include && include.length > 0) {\n // Cache messages from threads as needed\n const threadMessagesCache = new Map<string, StoredMessage[]>();\n // Pre-populate cache with already-fetched thread messages\n for (const tid of threadIds) {\n const tidRows = rows.filter(r => r.thread_id === tid);\n threadMessagesCache.set(tid, tidRows);\n }\n\n for (const includeItem of include) {\n // First, find the message to get its threadId\n let targetThreadId: string | undefined;\n let target: StoredMessage | undefined;\n\n // Check in cached threads first\n for (const [tid, cachedRows] of threadMessagesCache) {\n target = cachedRows.find(row => row.id === includeItem.id);\n if (target) {\n targetThreadId = tid;\n break;\n }\n }\n\n // If not found, query by message ID directly\n if (!target) {\n const messageRows = await this.operations.queryTable<StoredMessage>(TABLE_MESSAGES, [\n { field: 'id', value: includeItem.id },\n ]);\n if (messageRows.length > 0) {\n target = messageRows[0];\n targetThreadId = target!.thread_id;\n\n // Cache the thread's messages for context lookup\n if (targetThreadId && !threadMessagesCache.has(targetThreadId)) {\n const otherThreadRows = await this.operations.queryTable<StoredMessage>(TABLE_MESSAGES, [\n { field: 'thread_id', value: targetThreadId },\n ]);\n threadMessagesCache.set(targetThreadId, otherThreadRows);\n }\n }\n }\n\n if (!target || !targetThreadId) continue;\n\n if (!messageIds.has(target.id)) {\n messages.push(this.parseStoredMessage(target));\n messageIds.add(target.id);\n }\n\n const targetThreadRows = threadMessagesCache.get(targetThreadId) || [];\n await this.addContextMessages({\n includeItem,\n allMessages: targetThreadRows,\n targetThreadId,\n messageIds,\n messages,\n });\n }\n }\n\n messages.sort((a, b) => {\n const aValue =\n field === 'createdAt' || field === 'updatedAt' ? new Date((a as any)[field]).getTime() : (a as any)[field];\n const bValue =\n field === 'createdAt' || field === 'updatedAt' ? new Date((b as any)[field]).getTime() : (b as any)[field];\n if (typeof aValue === 'number' && typeof bValue === 'number') {\n return direction === 'ASC' ? aValue - bValue : bValue - aValue;\n }\n return direction === 'ASC'\n ? String(aValue).localeCompare(String(bValue))\n : String(bValue).localeCompare(String(aValue));\n });\n\n const hasMore =\n include && include.length > 0\n ? new Set(messages.filter(m => m.threadId === threadId).map(m => m.id)).size < totalThreadMessages\n : perPageInput === false\n ? false\n : offset + perPage < totalThreadMessages;\n\n return {\n messages,\n total: totalThreadMessages,\n page,\n perPage: perPageForResponse,\n hasMore,\n };\n }\n\n async listMessagesById({ messageIds }: { messageIds: string[] }): Promise<{ messages: MastraDBMessage[] }> {\n if (messageIds.length === 0) {\n return { messages: [] };\n }\n const rows = await this.operations.queryTable<StoredMessage>(TABLE_MESSAGES, undefined);\n const filtered = rows.filter(row => messageIds.includes(row.id)).map(row => this.parseStoredMessage(row));\n const list = new MessageList().add(filtered, 'memory');\n return { messages: list.get.all.db() };\n }\n\n async saveMessages({ messages }: { messages: MastraDBMessage[] }): Promise<{ messages: MastraDBMessage[] }> {\n if (messages.length === 0) return { messages: [] };\n\n const normalized = messages.map(message => {\n if (!message.threadId) {\n throw new Error('Thread ID is required');\n }\n if (!message.resourceId) {\n throw new Error('Resource ID is required');\n }\n const createdAt = message.createdAt instanceof Date ? message.createdAt.toISOString() : message.createdAt;\n return {\n id: message.id,\n thread_id: message.threadId,\n content: JSON.stringify(message.content),\n role: message.role,\n type: message.type || 'v2',\n createdAt,\n resourceId: message.resourceId,\n };\n });\n\n await this.operations.batchInsert({\n tableName: TABLE_MESSAGES,\n records: normalized,\n });\n\n // Update thread updatedAt timestamps for all affected threads\n const threadIds = [...new Set(messages.map(m => m.threadId).filter(Boolean) as string[])];\n const now = new Date();\n for (const threadId of threadIds) {\n const thread = await this.getThreadById({ threadId });\n if (thread) {\n await this.operations.insert({\n tableName: TABLE_THREADS,\n record: {\n ...thread,\n id: thread.id,\n updatedAt: now.toISOString(),\n createdAt: thread.createdAt instanceof Date ? thread.createdAt.toISOString() : thread.createdAt,\n metadata: thread.metadata ?? {},\n },\n });\n }\n }\n\n const list = new MessageList().add(messages, 'memory');\n return { messages: list.get.all.db() };\n }\n\n async updateMessages({\n messages,\n }: {\n messages: (Partial<Omit<MastraDBMessage, 'createdAt'>> & {\n id: string;\n content?: { metadata?: MastraMessageContentV2['metadata']; content?: MastraMessageContentV2['content'] };\n })[];\n }): Promise<MastraDBMessage[]> {\n if (messages.length === 0) return [];\n\n const existing = await this.operations.queryTable<StoredMessage>(TABLE_MESSAGES, undefined);\n const updated: MastraDBMessage[] = [];\n const affectedThreadIds = new Set<string>();\n\n for (const update of messages) {\n const current = existing.find(row => row.id === update.id);\n if (!current) continue;\n\n // Track old thread for timestamp update\n affectedThreadIds.add(current.thread_id);\n\n if (update.threadId) {\n // Track new thread for timestamp update when moving messages\n affectedThreadIds.add(update.threadId);\n current.thread_id = update.threadId;\n }\n if (update.resourceId !== undefined) {\n current.resourceId = update.resourceId ?? null;\n }\n if (update.role) {\n current.role = update.role;\n }\n if (update.type) {\n current.type = update.type;\n }\n if (update.content) {\n const existingContent = safelyParseJSON(current.content) || {};\n const mergedContent = {\n ...existingContent,\n ...update.content,\n ...(existingContent.metadata && update.content.metadata\n ? { metadata: { ...existingContent.metadata, ...update.content.metadata } }\n : {}),\n };\n current.content = JSON.stringify(mergedContent);\n }\n\n await this.operations.insert({\n tableName: TABLE_MESSAGES,\n record: current,\n });\n updated.push(this.parseStoredMessage(current));\n }\n\n // Update thread updatedAt timestamps for all affected threads\n const now = new Date();\n for (const threadId of affectedThreadIds) {\n const thread = await this.getThreadById({ threadId });\n if (thread) {\n await this.operations.insert({\n tableName: TABLE_THREADS,\n record: {\n ...thread,\n id: thread.id,\n updatedAt: now.toISOString(),\n createdAt: thread.createdAt instanceof Date ? thread.createdAt.toISOString() : thread.createdAt,\n metadata: thread.metadata ?? {},\n },\n });\n }\n }\n\n return updated;\n }\n\n async deleteMessages(messageIds: string[]): Promise<void> {\n await this.operations.deleteMany(TABLE_MESSAGES, messageIds);\n }\n\n async saveResource({ resource }: { resource: StorageResourceType }): Promise<StorageResourceType> {\n const record: Record<string, unknown> = {\n ...resource,\n createdAt: resource.createdAt instanceof Date ? resource.createdAt.toISOString() : resource.createdAt,\n updatedAt: resource.updatedAt instanceof Date ? resource.updatedAt.toISOString() : resource.updatedAt,\n };\n // Only include metadata if it's defined\n if (resource.metadata !== undefined) {\n record.metadata = resource.metadata;\n }\n await this.operations.insert({\n tableName: TABLE_RESOURCES,\n record,\n });\n return resource;\n }\n\n async getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n const record = await this.operations.load<\n (Omit<StorageResourceType, 'createdAt' | 'updatedAt'> & { createdAt: string; updatedAt: string }) | null\n >({\n tableName: TABLE_RESOURCES,\n keys: { id: resourceId },\n });\n if (!record) return null;\n\n return {\n ...record,\n metadata: typeof record.metadata === 'string' ? safelyParseJSON(record.metadata) : record.metadata,\n createdAt: new Date(record.createdAt),\n updatedAt: new Date(record.updatedAt),\n };\n }\n\n async updateResource({\n resourceId,\n workingMemory,\n metadata,\n }: {\n resourceId: string;\n workingMemory?: string;\n metadata?: Record<string, unknown>;\n }): Promise<StorageResourceType> {\n const existing = await this.getResourceById({ resourceId });\n const now = new Date();\n if (!existing) {\n const created: StorageResourceType = {\n id: resourceId,\n workingMemory,\n metadata: metadata ?? {},\n createdAt: now,\n updatedAt: now,\n };\n return this.saveResource({ resource: created });\n }\n\n const updated: StorageResourceType = {\n ...existing,\n workingMemory: workingMemory ?? existing.workingMemory,\n metadata: {\n ...existing.metadata,\n ...metadata,\n },\n updatedAt: now,\n };\n\n await this.saveResource({ resource: updated });\n return updated;\n }\n\n private parseStoredMessage(message: StoredMessage): MastraDBMessage {\n const content = safelyParseJSON(message.content);\n return {\n id: message.id,\n threadId: message.thread_id,\n content,\n role: message.role as MastraDBMessage['role'],\n type: message.type,\n createdAt: new Date(message.createdAt),\n resourceId: message.resourceId ?? undefined,\n };\n }\n\n private async addContextMessages({\n includeItem,\n allMessages,\n targetThreadId,\n messageIds,\n messages,\n }: {\n includeItem: NonNullable<StorageListMessagesInput['include']>[number];\n allMessages: StoredMessage[];\n targetThreadId: string;\n messageIds: Set<string>;\n messages: MastraDBMessage[];\n }): Promise<void> {\n const ordered = allMessages\n .filter(row => row.thread_id === targetThreadId)\n .sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());\n\n const targetIndex = ordered.findIndex(row => row.id === includeItem.id);\n if (targetIndex === -1) return;\n\n if (includeItem.withPreviousMessages) {\n const start = Math.max(0, targetIndex - includeItem.withPreviousMessages);\n for (let i = start; i < targetIndex; i++) {\n const row = ordered[i];\n if (row && !messageIds.has(row.id)) {\n messages.push(this.parseStoredMessage(row));\n messageIds.add(row.id);\n }\n }\n }\n\n if (includeItem.withNextMessages) {\n const end = Math.min(ordered.length, targetIndex + includeItem.withNextMessages + 1);\n for (let i = targetIndex + 1; i < end; i++) {\n const row = ordered[i];\n if (row && !messageIds.has(row.id)) {\n messages.push(this.parseStoredMessage(row));\n messageIds.add(row.id);\n }\n }\n }\n }\n}\n","import crypto from 'node:crypto';\n\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { SaveScorePayload, ScoreRowData, ScoringEntityType, ScoringSource } from '@mastra/core/evals';\nimport { TABLE_SCORERS, ScoresStorage, createStorageErrorId } from '@mastra/core/storage';\nimport type { PaginationInfo, StoragePagination } from '@mastra/core/storage';\n\nimport type { StoreOperationsConvex } from '../operations';\n\ntype StoredScore = Omit<ScoreRowData, 'createdAt' | 'updatedAt'> & {\n createdAt: string;\n updatedAt: string;\n};\n\nexport class ScoresConvex extends ScoresStorage {\n constructor(private readonly operations: StoreOperationsConvex) {\n super();\n }\n\n async getScoreById({ id }: { id: string }): Promise<ScoreRowData | null> {\n const row = await this.operations.load<StoredScore | null>({\n tableName: TABLE_SCORERS,\n keys: { id },\n });\n return row ? this.deserialize(row) : null;\n }\n\n async saveScore(score: SaveScorePayload): Promise<{ score: ScoreRowData }> {\n const now = new Date();\n const record = {\n ...score,\n id: crypto.randomUUID(),\n createdAt: now.toISOString(),\n updatedAt: now.toISOString(),\n } as StoredScore;\n\n await this.operations.insert({\n tableName: TABLE_SCORERS,\n record,\n });\n\n return { score: this.deserialize(record) };\n }\n\n async listScoresByScorerId({\n scorerId,\n pagination,\n entityId,\n entityType,\n source,\n }: {\n scorerId: string;\n pagination: StoragePagination;\n entityId?: string;\n entityType?: ScoringEntityType;\n source?: ScoringSource;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.listScores({\n filters: { scorerId, entityId, entityType, source },\n pagination,\n });\n }\n\n async listScoresByRunId({\n runId,\n pagination,\n }: {\n runId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.listScores({\n filters: { runId },\n pagination,\n });\n }\n\n async listScoresByEntityId({\n entityId,\n entityType,\n pagination,\n }: {\n entityId: string;\n entityType: ScoringEntityType;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.listScores({\n filters: { entityId, entityType },\n pagination,\n });\n }\n\n private async listScores({\n filters,\n pagination,\n }: {\n filters: Partial<Pick<ScoreRowData, 'scorerId' | 'entityId' | 'entityType' | 'runId' | 'source'>>;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n if (pagination.page < 0) {\n throw new MastraError(\n {\n id: createStorageErrorId('CONVEX', 'LIST_SCORES', 'INVALID_PAGINATION'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n },\n new Error('page must be >= 0'),\n );\n }\n\n const rows = await this.operations.queryTable<StoredScore>(TABLE_SCORERS, undefined);\n const filtered = rows\n .filter(row => (filters.scorerId ? row.scorerId === filters.scorerId : true))\n .filter(row => (filters.entityId ? row.entityId === filters.entityId : true))\n .filter(row => (filters.entityType ? row.entityType === filters.entityType : true))\n .filter(row => (filters.runId ? row.runId === filters.runId : true))\n .filter(row => (filters.source ? row.source === filters.source : true))\n .sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());\n\n const { perPage, page } = pagination;\n const perPageValue = perPage === false ? filtered.length : perPage;\n const start = perPage === false ? 0 : page * perPageValue;\n const end = perPage === false ? filtered.length : start + perPageValue;\n const slice = filtered.slice(start, end).map(row => this.deserialize(row));\n\n return {\n pagination: {\n total: filtered.length,\n page,\n perPage,\n hasMore: perPage === false ? false : end < filtered.length,\n },\n scores: slice,\n };\n }\n\n private deserialize(row: StoredScore): ScoreRowData {\n return {\n ...(row as unknown as ScoreRowData),\n createdAt: new Date(row.createdAt),\n updatedAt: new Date(row.updatedAt),\n };\n }\n}\n","import { TABLE_WORKFLOW_SNAPSHOT, normalizePerPage, WorkflowsStorage } from '@mastra/core/storage';\nimport type { StorageListWorkflowRunsInput, StorageWorkflowRun, WorkflowRun, WorkflowRuns } from '@mastra/core/storage';\nimport type { StepResult, WorkflowRunState, WorkflowRunStatus } from '@mastra/core/workflows';\n\nimport type { StoreOperationsConvex } from '../operations';\n\ntype RawWorkflowRun = Omit<StorageWorkflowRun, 'createdAt' | 'updatedAt' | 'snapshot'> & {\n createdAt: string;\n updatedAt: string;\n snapshot: WorkflowRunState | string;\n};\n\nexport class WorkflowsConvex extends WorkflowsStorage {\n constructor(private readonly operations: StoreOperationsConvex) {\n super();\n }\n\n async updateWorkflowResults({\n workflowName,\n runId,\n stepId,\n result,\n requestContext,\n }: {\n workflowName: string;\n runId: string;\n stepId: string;\n result: StepResult<any, any, any, any>;\n requestContext: Record<string, any>;\n }): Promise<Record<string, StepResult<any, any, any, any>>> {\n const run = await this.getRun(workflowName, runId);\n if (!run) return {};\n\n const snapshot = this.ensureSnapshot(run);\n snapshot.context = snapshot.context || {};\n snapshot.context[stepId] = result;\n snapshot.requestContext = { ...(snapshot.requestContext || {}), ...requestContext };\n\n await this.persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId: run.resourceId,\n snapshot,\n });\n\n return JSON.parse(JSON.stringify(snapshot.context));\n }\n\n async updateWorkflowState({\n workflowName,\n runId,\n opts,\n }: {\n workflowName: string;\n runId: string;\n opts: {\n status: WorkflowRunStatus;\n result?: StepResult<any, any, any, any>;\n error?: string;\n suspendedPaths?: Record<string, number[]>;\n waitingPaths?: Record<string, number[]>;\n };\n }): Promise<WorkflowRunState | undefined> {\n const run = await this.getRun(workflowName, runId);\n if (!run) return undefined;\n\n const snapshot = this.ensureSnapshot(run);\n const updated: WorkflowRunState = { ...snapshot, ...opts };\n\n await this.persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId: run.resourceId,\n snapshot: updated,\n });\n\n return updated;\n }\n\n async persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId,\n snapshot,\n }: {\n workflowName: string;\n runId: string;\n resourceId?: string;\n snapshot: WorkflowRunState;\n }): Promise<void> {\n const now = new Date();\n // Check if a record already exists to preserve createdAt\n const existing = await this.operations.load<{ createdAt?: string } | null>({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n keys: { workflow_name: workflowName, run_id: runId },\n });\n\n await this.operations.insert({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n record: {\n workflow_name: workflowName,\n run_id: runId,\n resourceId,\n snapshot,\n createdAt: existing?.createdAt ?? now.toISOString(),\n updatedAt: now.toISOString(),\n },\n });\n }\n\n async loadWorkflowSnapshot({\n workflowName,\n runId,\n }: {\n workflowName: string;\n runId: string;\n }): Promise<WorkflowRunState | null> {\n const row = await this.operations.load<{ snapshot: WorkflowRunState | string } | null>({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n keys: { workflow_name: workflowName, run_id: runId },\n });\n\n if (!row) return null;\n return typeof row.snapshot === 'string' ? JSON.parse(row.snapshot) : JSON.parse(JSON.stringify(row.snapshot));\n }\n\n async listWorkflowRuns(args: StorageListWorkflowRunsInput = {}): Promise<WorkflowRuns> {\n const { workflowName, fromDate, toDate, perPage, page, resourceId, status } = args;\n\n let rows = await this.operations.queryTable<RawWorkflowRun>(TABLE_WORKFLOW_SNAPSHOT, undefined);\n\n if (workflowName) rows = rows.filter(run => run.workflow_name === workflowName);\n if (resourceId) rows = rows.filter(run => run.resourceId === resourceId);\n if (fromDate) rows = rows.filter(run => new Date(run.createdAt).getTime() >= fromDate.getTime());\n if (toDate) rows = rows.filter(run => new Date(run.createdAt).getTime() <= toDate.getTime());\n if (status) {\n rows = rows.filter(run => {\n const snapshot = this.ensureSnapshot(run);\n return snapshot.status === status;\n });\n }\n\n const total = rows.length;\n rows.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());\n\n if (perPage !== undefined && page !== undefined) {\n const normalized = normalizePerPage(perPage, Number.MAX_SAFE_INTEGER);\n const offset = page * normalized;\n rows = rows.slice(offset, offset + normalized);\n }\n\n const runs: WorkflowRun[] = rows.map(run => ({\n workflowName: run.workflow_name,\n runId: run.run_id,\n snapshot: this.ensureSnapshot(run),\n createdAt: new Date(run.createdAt),\n updatedAt: new Date(run.updatedAt),\n resourceId: run.resourceId,\n }));\n\n return { runs, total };\n }\n\n async getWorkflowRunById({\n runId,\n workflowName,\n }: {\n runId: string;\n workflowName?: string;\n }): Promise<WorkflowRun | null> {\n const runs = await this.operations.queryTable<RawWorkflowRun>(TABLE_WORKFLOW_SNAPSHOT, undefined);\n const match = runs.find(run => run.run_id === runId && (!workflowName || run.workflow_name === workflowName));\n if (!match) return null;\n\n return {\n workflowName: match.workflow_name,\n runId: match.run_id,\n snapshot: this.ensureSnapshot(match),\n createdAt: new Date(match.createdAt),\n updatedAt: new Date(match.updatedAt),\n resourceId: match.resourceId,\n };\n }\n\n private async getRun(workflowName: string, runId: string): Promise<RawWorkflowRun | null> {\n const runs = await this.operations.queryTable<RawWorkflowRun>(TABLE_WORKFLOW_SNAPSHOT, [\n { field: 'workflow_name', value: workflowName },\n ]);\n return runs.find(run => run.run_id === runId) ?? null;\n }\n\n private ensureSnapshot(run: { snapshot: WorkflowRunState | string }): WorkflowRunState {\n if (!run.snapshot) {\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\n if (typeof run.snapshot === 'string') {\n return JSON.parse(run.snapshot);\n }\n\n return JSON.parse(JSON.stringify(run.snapshot));\n }\n}\n","import crypto from 'node:crypto';\n\nimport { TABLE_WORKFLOW_SNAPSHOT, StoreOperations } from '@mastra/core/storage';\nimport type { TABLE_NAMES, StorageColumn } from '@mastra/core/storage';\n\nimport type { ConvexAdminClient } from './client';\nimport type { EqualityFilter } from './types';\n\nexport class StoreOperationsConvex extends StoreOperations {\n constructor(private readonly client: ConvexAdminClient) {\n super();\n }\n\n async hasColumn(_table: string, _column: string): Promise<boolean> {\n return true;\n }\n\n async createTable(_args: { tableName: TABLE_NAMES; schema: Record<string, StorageColumn> }): Promise<void> {\n // No-op for Convex; schema is managed server-side.\n }\n\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n // Delete in batches since each mutation can only delete a small number of docs\n // to stay within Convex's 1-second mutation timeout.\n let hasMore = true;\n while (hasMore) {\n const response = await this.client.callStorageRaw({\n op: 'clearTable',\n tableName,\n });\n hasMore = response.hasMore ?? false;\n }\n }\n\n async dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n // Delete in batches since each mutation can only delete a small number of docs\n // to stay within Convex's 1-second mutation timeout.\n let hasMore = true;\n while (hasMore) {\n const response = await this.client.callStorageRaw({\n op: 'dropTable',\n tableName,\n });\n hasMore = response.hasMore ?? false;\n }\n }\n\n async alterTable(_args: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void> {\n // No-op; columns are implicit in Convex documents.\n }\n\n async insert({ tableName, record }: { tableName: TABLE_NAMES; record: Record<string, any> }): Promise<void> {\n await this.client.callStorage({\n op: 'insert',\n tableName,\n record: this.normalizeRecord(tableName, record),\n });\n }\n\n async batchInsert({ tableName, records }: { tableName: TABLE_NAMES; records: Record<string, any>[] }): Promise<void> {\n if (records.length === 0) return;\n\n await this.client.callStorage({\n op: 'batchInsert',\n tableName,\n records: records.map(record => this.normalizeRecord(tableName, record)),\n });\n }\n\n async load<R>({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, any> }): Promise<R | null> {\n const result = await this.client.callStorage<R | null>({\n op: 'load',\n tableName,\n keys,\n });\n\n return result;\n }\n\n public async queryTable<R>(tableName: TABLE_NAMES, filters?: EqualityFilter[]): Promise<R[]> {\n return this.client.callStorage<R[]>({\n op: 'queryTable',\n tableName,\n filters,\n });\n }\n\n public async deleteMany(tableName: TABLE_NAMES, ids: string[]): Promise<void> {\n if (ids.length === 0) return;\n await this.client.callStorage({\n op: 'deleteMany',\n tableName,\n ids,\n });\n }\n\n private normalizeRecord(tableName: TABLE_NAMES, record: Record<string, any>): Record<string, any> {\n const normalized: Record<string, any> = { ...record };\n\n if (tableName === TABLE_WORKFLOW_SNAPSHOT && !normalized.id) {\n const runId = normalized.run_id || normalized.runId;\n const workflowName = normalized.workflow_name || normalized.workflowName;\n normalized.id = workflowName ? `${workflowName}-${runId}` : runId;\n }\n\n if (!normalized.id) {\n normalized.id = crypto.randomUUID();\n }\n\n for (const [key, value] of Object.entries(normalized)) {\n if (value instanceof Date) {\n normalized[key] = value.toISOString();\n }\n }\n\n return normalized;\n }\n}\n","import type { SaveScorePayload, ScoreRowData, ScoringEntityType, ScoringSource } from '@mastra/core/evals';\nimport type { MastraDBMessage, StorageThreadType } from '@mastra/core/memory';\nimport type {\n StorageColumn,\n StorageResourceType,\n PaginationInfo,\n StorageListMessagesInput,\n StorageListMessagesOutput,\n StorageListThreadsByResourceIdInput,\n StorageListThreadsByResourceIdOutput,\n StorageListWorkflowRunsInput,\n StoragePagination,\n WorkflowRun,\n WorkflowRuns,\n TABLE_NAMES,\n} from '@mastra/core/storage';\nimport { MastraStorage } from '@mastra/core/storage';\nimport type { StepResult, WorkflowRunState, WorkflowRunStatus } from '@mastra/core/workflows';\n\nimport type { ConvexAdminClientConfig } from './client';\nimport { ConvexAdminClient } from './client';\nimport { MemoryConvex } from './domains/memory';\nimport { ScoresConvex } from './domains/scores';\nimport { WorkflowsConvex } from './domains/workflows';\nimport { StoreOperationsConvex } from './operations';\n\nexport type ConvexStoreConfig = ConvexAdminClientConfig & {\n id: string;\n name?: string;\n /**\n * When true, automatic initialization (table creation/migrations) is disabled.\n * This is useful for CI/CD pipelines where you want to:\n * 1. Run migrations explicitly during deployment (not at runtime)\n * 2. Use different credentials for schema changes vs runtime operations\n *\n * When disableInit is true:\n * - The storage will not automatically create/alter tables on first use\n * - You must call `storage.init()` explicitly in your CI/CD scripts\n *\n * @example\n * // In CI/CD script:\n * const storage = new ConvexStore({ ...config, disableInit: false });\n * await storage.init(); // Explicitly run migrations\n *\n * // In runtime application:\n * const storage = new ConvexStore({ ...config, disableInit: true });\n * // No auto-init, tables must already exist\n */\n disableInit?: boolean;\n};\n\nexport class ConvexStore extends MastraStorage {\n private readonly operations: StoreOperationsConvex;\n private readonly memory: MemoryConvex;\n private readonly workflows: WorkflowsConvex;\n private readonly scores: ScoresConvex;\n\n constructor(config: ConvexStoreConfig) {\n super({ id: config.id, name: config.name ?? 'ConvexStore', disableInit: config.disableInit });\n\n const client = new ConvexAdminClient(config);\n this.operations = new StoreOperationsConvex(client);\n this.memory = new MemoryConvex(this.operations);\n this.workflows = new WorkflowsConvex(this.operations);\n this.scores = new ScoresConvex(this.operations);\n\n this.stores = {\n operations: this.operations,\n memory: this.memory,\n workflows: this.workflows,\n scores: this.scores,\n };\n }\n\n public get supports() {\n return {\n selectByIncludeResourceScope: true,\n resourceWorkingMemory: true,\n hasColumn: false,\n createTable: false,\n deleteMessages: true,\n observabilityInstance: false,\n listScoresBySpan: false,\n };\n }\n\n async createTable(_args: { tableName: TABLE_NAMES; schema: Record<string, StorageColumn> }): Promise<void> {\n // No-op\n }\n\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n await this.operations.clearTable({ tableName });\n }\n\n async dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n await this.operations.dropTable({ tableName });\n }\n\n async alterTable(_args: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void> {\n // No-op\n }\n\n async insert({ tableName, record }: { tableName: TABLE_NAMES; record: Record<string, any> }): Promise<void> {\n await this.operations.insert({ tableName, record });\n }\n\n async batchInsert({ tableName, records }: { tableName: TABLE_NAMES; records: Record<string, any>[] }): Promise<void> {\n await this.operations.batchInsert({ tableName, records });\n }\n\n async load<R>({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, any> }): Promise<R | null> {\n return this.operations.load<R>({ tableName, keys });\n }\n\n async getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null> {\n return this.memory.getThreadById({ threadId });\n }\n\n async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n return this.memory.saveThread({ thread });\n }\n\n async updateThread({\n id,\n title,\n metadata,\n }: {\n id: string;\n title: string;\n metadata: Record<string, unknown>;\n }): Promise<StorageThreadType> {\n return this.memory.updateThread({ id, title, metadata });\n }\n\n async deleteThread({ threadId }: { threadId: string }): Promise<void> {\n await this.memory.deleteThread({ threadId });\n }\n\n async listMessages(args: StorageListMessagesInput): Promise<StorageListMessagesOutput> {\n return this.memory.listMessages(args);\n }\n\n async listMessagesById({ messageIds }: { messageIds: string[] }): Promise<{ messages: MastraDBMessage[] }> {\n return this.memory.listMessagesById({ messageIds });\n }\n\n async saveMessages(args: { messages: MastraDBMessage[] }): Promise<{ messages: MastraDBMessage[] }> {\n return this.memory.saveMessages(args);\n }\n\n async updateMessages({\n messages,\n }: {\n messages: (Partial<Omit<MastraDBMessage, 'createdAt'>> & {\n id: string;\n })[];\n }): Promise<MastraDBMessage[]> {\n return this.memory.updateMessages({ messages });\n }\n\n async deleteMessages(messageIds: string[]): Promise<void> {\n await this.memory.deleteMessages(messageIds);\n }\n\n async listThreadsByResourceId(\n args: StorageListThreadsByResourceIdInput,\n ): Promise<StorageListThreadsByResourceIdOutput> {\n return this.memory.listThreadsByResourceId(args);\n }\n\n async getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n return this.memory.getResourceById({ resourceId });\n }\n\n async saveResource({ resource }: { resource: StorageResourceType }): Promise<StorageResourceType> {\n return this.memory.saveResource({ resource });\n }\n\n async updateResource({\n resourceId,\n workingMemory,\n metadata,\n }: {\n resourceId: string;\n workingMemory?: string;\n metadata?: Record<string, unknown>;\n }): Promise<StorageResourceType> {\n return this.memory.updateResource({ resourceId, workingMemory, metadata });\n }\n\n async updateWorkflowResults(params: {\n workflowName: string;\n runId: string;\n stepId: string;\n result: StepResult<any, any, any, any>;\n requestContext: Record<string, any>;\n }): Promise<Record<string, StepResult<any, any, any, any>>> {\n return this.workflows.updateWorkflowResults(params);\n }\n\n async updateWorkflowState(params: {\n workflowName: string;\n runId: string;\n opts: {\n status: WorkflowRunStatus;\n result?: StepResult<any, any, any, any>;\n error?: string;\n suspendedPaths?: Record<string, number[]>;\n waitingPaths?: Record<string, number[]>;\n };\n }): Promise<WorkflowRunState | undefined> {\n return this.workflows.updateWorkflowState(params);\n }\n\n async persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId,\n snapshot,\n }: {\n workflowName: string;\n runId: string;\n resourceId?: string | undefined;\n snapshot: WorkflowRunState;\n }): Promise<void> {\n await this.workflows.persistWorkflowSnapshot({ workflowName, runId, resourceId, snapshot });\n }\n\n async loadWorkflowSnapshot({\n workflowName,\n runId,\n }: {\n workflowName: string;\n runId: string;\n }): Promise<WorkflowRunState | null> {\n return this.workflows.loadWorkflowSnapshot({ workflowName, runId });\n }\n\n async listWorkflowRuns(args?: StorageListWorkflowRunsInput): Promise<WorkflowRuns> {\n return this.workflows.listWorkflowRuns(args);\n }\n\n async getWorkflowRunById({\n runId,\n workflowName,\n }: {\n runId: string;\n workflowName?: string | undefined;\n }): Promise<WorkflowRun | null> {\n return this.workflows.getWorkflowRunById({ runId, workflowName });\n }\n\n async getScoreById({ id }: { id: string }): Promise<ScoreRowData | null> {\n return this.scores.getScoreById({ id });\n }\n\n async saveScore(score: SaveScorePayload): Promise<{ score: ScoreRowData }> {\n return this.scores.saveScore(score);\n }\n\n async listScoresByScorerId({\n scorerId,\n pagination,\n entityId,\n entityType,\n source,\n }: {\n scorerId: string;\n pagination: StoragePagination;\n entityId?: string | undefined;\n entityType?: ScoringEntityType | undefined;\n source?: ScoringSource | undefined;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.scores.listScoresByScorerId({ scorerId, pagination, entityId, entityType, source });\n }\n\n async listScoresByRunId({\n runId,\n pagination,\n }: {\n runId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.scores.listScoresByRunId({ runId, pagination });\n }\n\n async listScoresByEntityId({\n entityId,\n entityType,\n pagination,\n }: {\n pagination: StoragePagination;\n entityId: string;\n entityType: ScoringEntityType;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.scores.listScoresByEntityId({ entityId, entityType, pagination });\n }\n}\n","import crypto from 'node:crypto';\n\nimport { MastraVector } from '@mastra/core/vector';\nimport type {\n CreateIndexParams,\n DeleteIndexParams,\n DeleteVectorParams,\n DeleteVectorsParams,\n DescribeIndexParams,\n IndexStats,\n QueryResult,\n QueryVectorParams,\n UpdateVectorParams,\n UpsertVectorParams,\n} from '@mastra/core/vector';\n\nimport type { ConvexAdminClientConfig } from '../storage/client';\nimport { ConvexAdminClient } from '../storage/client';\nimport type { StorageRequest } from '../storage/types';\n\ntype VectorRecord = {\n id: string;\n embedding: number[];\n metadata?: Record<string, any>;\n};\n\ntype VectorFilter = {\n metadata?: Record<string, any>;\n};\n\nconst INDEX_METADATA_TABLE = 'mastra_vector_indexes';\n\nexport type ConvexVectorConfig = ConvexAdminClientConfig & {\n id: string;\n};\n\nexport class ConvexVector extends MastraVector<VectorFilter> {\n private readonly client: ConvexAdminClient;\n\n constructor(config: ConvexVectorConfig) {\n super({ id: config.id });\n this.client = new ConvexAdminClient(config);\n }\n\n async createIndex({ indexName, dimension }: CreateIndexParams): Promise<void> {\n await this.callStorage({\n op: 'insert',\n tableName: INDEX_METADATA_TABLE,\n record: {\n id: indexName,\n indexName,\n dimension,\n metric: 'cosine',\n createdAt: new Date().toISOString(),\n },\n });\n }\n\n async deleteIndex({ indexName }: DeleteIndexParams): Promise<void> {\n await this.callStorage({\n op: 'deleteMany',\n tableName: INDEX_METADATA_TABLE,\n ids: [indexName],\n });\n // Delete in batches since each mutation can only delete a small number of docs\n // to stay within Convex's 1-second mutation timeout.\n await this.callStorageUntilComplete({\n op: 'clearTable',\n tableName: this.vectorTable(indexName),\n });\n }\n\n async truncateIndex({ indexName }: DeleteIndexParams): Promise<void> {\n // Delete in batches since each mutation can only delete a small number of docs\n // to stay within Convex's 1-second mutation timeout.\n await this.callStorageUntilComplete({\n op: 'clearTable',\n tableName: this.vectorTable(indexName),\n });\n }\n\n async listIndexes(): Promise<string[]> {\n const indexes = await this.callStorage<{ id: string }[]>({\n op: 'queryTable',\n tableName: INDEX_METADATA_TABLE,\n });\n return indexes.map(index => index.id);\n }\n\n async describeIndex({ indexName }: DescribeIndexParams): Promise<IndexStats> {\n const index = await this.callStorage<{ dimension: number } | null>({\n op: 'load',\n tableName: INDEX_METADATA_TABLE,\n keys: { id: indexName },\n });\n if (!index) {\n throw new Error(`Index ${indexName} not found`);\n }\n\n const vectors = await this.callStorage<VectorRecord[]>({\n op: 'queryTable',\n tableName: this.vectorTable(indexName),\n });\n\n return {\n dimension: index.dimension,\n count: vectors.length,\n metric: 'cosine',\n };\n }\n\n async upsert({ indexName, vectors, ids, metadata }: UpsertVectorParams<VectorFilter>): Promise<string[]> {\n const vectorIds = ids ?? vectors.map(() => crypto.randomUUID());\n\n const records: VectorRecord[] = vectors.map((vector, i) => ({\n id: vectorIds[i]!,\n embedding: vector,\n metadata: metadata?.[i],\n }));\n\n await this.callStorage({\n op: 'batchInsert',\n tableName: this.vectorTable(indexName),\n records,\n });\n\n return vectorIds;\n }\n\n async query({\n indexName,\n queryVector,\n topK = 10,\n includeVector = false,\n filter,\n }: QueryVectorParams<VectorFilter>): Promise<QueryResult[]> {\n const vectors = await this.callStorage<VectorRecord[]>({\n op: 'queryTable',\n tableName: this.vectorTable(indexName),\n });\n\n const filtered =\n filter && !this.isEmptyFilter(filter)\n ? vectors.filter(record => this.matchesFilter(record.metadata, filter))\n : vectors;\n\n const scored = filtered\n .map(record => ({\n id: record.id,\n score: cosineSimilarity(queryVector, record.embedding),\n metadata: record.metadata,\n ...(includeVector ? { vector: record.embedding } : {}),\n }))\n .filter(result => Number.isFinite(result.score))\n .sort((a, b) => b.score - a.score)\n .slice(0, topK);\n\n return scored;\n }\n\n async updateVector(params: UpdateVectorParams<VectorFilter>): Promise<void> {\n const hasId = 'id' in params && params.id;\n const hasFilter = 'filter' in params && params.filter !== undefined;\n\n // Check for mutually exclusive parameters\n if (hasId && hasFilter) {\n throw new Error('ConvexVector.updateVector: id and filter are mutually exclusive');\n }\n\n // Check for filter-based update\n if (hasFilter) {\n const filter = params.filter as VectorFilter;\n // Check for empty filter\n if (this.isEmptyFilter(filter)) {\n throw new Error('ConvexVector.updateVector: cannot update with empty filter');\n }\n\n // Update by filter - find all matching records and update them\n const vectors = await this.callStorage<VectorRecord[]>({\n op: 'queryTable',\n tableName: this.vectorTable(params.indexName),\n });\n\n const matching = vectors.filter(record => this.matchesFilter(record.metadata, filter));\n\n for (const existing of matching) {\n const updated: VectorRecord = {\n ...existing,\n ...(params.update.vector ? { embedding: params.update.vector } : {}),\n ...(params.update.metadata ? { metadata: { ...existing.metadata, ...params.update.metadata } } : {}),\n };\n\n await this.callStorage({\n op: 'insert',\n tableName: this.vectorTable(params.indexName),\n record: updated,\n });\n }\n return;\n }\n\n // Update by id\n if (!hasId) {\n throw new Error('ConvexVector.updateVector: Either id or filter must be provided');\n }\n\n const existing = await this.callStorage<VectorRecord | null>({\n op: 'load',\n tableName: this.vectorTable(params.indexName),\n keys: { id: params.id },\n });\n if (!existing) return;\n\n const updated: VectorRecord = {\n ...existing,\n ...(params.update.vector ? { embedding: params.update.vector } : {}),\n ...(params.update.metadata ? { metadata: { ...existing.metadata, ...params.update.metadata } } : {}),\n };\n\n await this.callStorage({\n op: 'insert',\n tableName: this.vectorTable(params.indexName),\n record: updated,\n });\n }\n\n async deleteVector({ indexName, id }: DeleteVectorParams): Promise<void> {\n await this.callStorage({\n op: 'deleteMany',\n tableName: this.vectorTable(indexName),\n ids: [id],\n });\n }\n\n async deleteVectors(params: DeleteVectorsParams<VectorFilter>): Promise<void> {\n const { indexName } = params;\n const hasIds = 'ids' in params && params.ids !== undefined;\n const hasFilter = 'filter' in params && params.filter !== undefined;\n\n // Check for mutually exclusive parameters\n if (hasIds && hasFilter) {\n throw new Error('ConvexVector.deleteVectors: ids and filter are mutually exclusive');\n }\n\n // Check that at least one is provided\n if (!hasIds && !hasFilter) {\n throw new Error('ConvexVector.deleteVectors: Either filter or ids must be provided');\n }\n\n // Handle ID-based deletion\n if (hasIds) {\n const ids = params.ids as string[];\n if (ids.length === 0) {\n throw new Error('ConvexVector.deleteVectors: cannot delete with empty ids array');\n }\n await this.callStorage({\n op: 'deleteMany',\n tableName: this.vectorTable(indexName),\n ids,\n });\n return;\n }\n\n // Handle filter-based deletion\n const filter = params.filter as VectorFilter;\n if (this.isEmptyFilter(filter)) {\n throw new Error('ConvexVector.deleteVectors: cannot delete with empty filter');\n }\n\n // Find all matching vectors and delete them\n const vectors = await this.callStorage<VectorRecord[]>({\n op: 'queryTable',\n tableName: this.vectorTable(indexName),\n });\n\n const matchingIds = vectors.filter(record => this.matchesFilter(record.metadata, filter)).map(record => record.id);\n\n if (matchingIds.length > 0) {\n await this.callStorage({\n op: 'deleteMany',\n tableName: this.vectorTable(indexName),\n ids: matchingIds,\n });\n }\n }\n\n private vectorTable(indexName: string) {\n return `mastra_vector_${indexName}`;\n }\n\n private isEmptyFilter(filter: VectorFilter | Record<string, any>): boolean {\n if (!filter) return true;\n return Object.keys(filter).length === 0;\n }\n\n private matchesFilter(\n recordMetadata: Record<string, any> | undefined,\n filter: VectorFilter | Record<string, any>,\n ): boolean {\n if (!recordMetadata) return false;\n if (!filter || Object.keys(filter).length === 0) return true;\n\n // Handle VectorFilter with metadata property\n if ('metadata' in filter && filter.metadata) {\n return this.matchesFilterConditions(recordMetadata, filter.metadata);\n }\n\n // Handle direct filter conditions\n return this.matchesFilterConditions(recordMetadata, filter);\n }\n\n private matchesFilterConditions(recordMetadata: Record<string, any>, conditions: Record<string, any>): boolean {\n for (const [key, value] of Object.entries(conditions)) {\n // Handle $and operator\n if (key === '$and' && Array.isArray(value)) {\n const allMatch = value.every((cond: Record<string, any>) => this.matchesFilterConditions(recordMetadata, cond));\n if (!allMatch) return false;\n continue;\n }\n\n // Handle $or operator\n if (key === '$or' && Array.isArray(value)) {\n const anyMatch = value.some((cond: Record<string, any>) => this.matchesFilterConditions(recordMetadata, cond));\n if (!anyMatch) return false;\n continue;\n }\n\n // Handle $in operator\n if (typeof value === 'object' && value !== null && '$in' in value) {\n if (!Array.isArray(value.$in) || !value.$in.includes(recordMetadata[key])) {\n return false;\n }\n continue;\n }\n\n // Handle $nin operator\n if (typeof value === 'object' && value !== null && '$nin' in value) {\n if (Array.isArray(value.$nin) && value.$nin.includes(recordMetadata[key])) {\n return false;\n }\n continue;\n }\n\n // Handle $gt operator\n if (typeof value === 'object' && value !== null && '$gt' in value) {\n if (!(recordMetadata[key] > value.$gt)) {\n return false;\n }\n continue;\n }\n\n // Handle $gte operator\n if (typeof value === 'object' && value !== null && '$gte' in value) {\n if (!(recordMetadata[key] >= value.$gte)) {\n return false;\n }\n continue;\n }\n\n // Handle $lt operator\n if (typeof value === 'object' && value !== null && '$lt' in value) {\n if (!(recordMetadata[key] < value.$lt)) {\n return false;\n }\n continue;\n }\n\n // Handle $lte operator\n if (typeof value === 'object' && value !== null && '$lte' in value) {\n if (!(recordMetadata[key] <= value.$lte)) {\n return false;\n }\n continue;\n }\n\n // Handle $ne operator\n if (typeof value === 'object' && value !== null && '$ne' in value) {\n if (recordMetadata[key] === value.$ne) {\n return false;\n }\n continue;\n }\n\n // Handle simple equality\n if (recordMetadata[key] !== value) {\n return false;\n }\n }\n\n return true;\n }\n\n private async callStorage<T = any>(request: StorageRequest): Promise<T> {\n return this.client.callStorage<T>(request);\n }\n\n /**\n * Call storage repeatedly until hasMore is false.\n * Use for bulk operations like clearTable that may need multiple batches.\n */\n private async callStorageUntilComplete(request: StorageRequest): Promise<void> {\n let hasMore = true;\n while (hasMore) {\n const response = await this.client.callStorageRaw(request);\n hasMore = response.hasMore ?? false;\n }\n }\n}\n\nfunction cosineSimilarity(a: number[], b: number[]): number {\n if (a.length !== b.length) {\n return -1;\n }\n\n let dot = 0;\n let magA = 0;\n let magB = 0;\n\n for (let i = 0; i < a.length; i++) {\n const aVal = a[i] ?? 0;\n const bVal = b[i] ?? 0;\n dot += aVal * bVal;\n magA += aVal * aVal;\n magB += bVal * bVal;\n }\n\n if (magA === 0 || magB === 0) {\n return -1;\n }\n\n return dot / (Math.sqrt(magA) * Math.sqrt(magB));\n}\n"]}
1
+ {"version":3,"sources":["../src/storage/client.ts","../src/storage/domains/memory.ts","../src/storage/domains/scores.ts","../src/storage/domains/workflows.ts","../src/storage/operations.ts","../src/storage/index.ts","../src/vector/index.ts"],"names":["MemoryStorage","TABLE_THREADS","MastraError","createStorageErrorId","ErrorDomain","ErrorCategory","TABLE_MESSAGES","normalizePerPage","calculatePagination","MessageList","safelyParseJSON","TABLE_RESOURCES","ScoresStorage","TABLE_SCORERS","crypto","WorkflowsStorage","TABLE_WORKFLOW_SNAPSHOT","StoreOperations","MastraStorage","MastraVector","existing","updated"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { StorageRequest, StorageResponse } from './types';\n\nexport type ConvexAdminClientConfig = {\n deploymentUrl: string;\n adminAuthToken: string;\n storageFunction?: string;\n};\n\n/** Response from callStorageRaw that includes batch info */\nexport type RawStorageResult<T = any> = {\n result: T;\n hasMore?: boolean;\n};\n\nconst DEFAULT_STORAGE_FUNCTION = 'mastra/storage:handle';\n\nexport class ConvexAdminClient {\n private readonly deploymentUrl: string;\n private readonly adminAuthToken: string;\n private readonly storageFunction: string;\n\n constructor({ deploymentUrl, adminAuthToken, storageFunction }: ConvexAdminClientConfig) {\n if (!deploymentUrl) {\n throw new Error('ConvexAdminClient: deploymentUrl is required.');\n }\n\n if (!adminAuthToken) {\n throw new Error('ConvexAdminClient: adminAuthToken is required.');\n }\n\n this.deploymentUrl = deploymentUrl.replace(/\\/$/, ''); // Remove trailing slash\n this.adminAuthToken = adminAuthToken;\n this.storageFunction = storageFunction ?? DEFAULT_STORAGE_FUNCTION;\n }\n\n /**\n * Call storage and return the full response including hasMore flag.\n * Use this for operations that may need multiple calls (e.g., clearTable).\n */\n async callStorageRaw<T = any>(request: StorageRequest): Promise<RawStorageResult<T>> {\n // Use Convex HTTP API directly with admin auth\n const url = `${this.deploymentUrl}/api/mutation`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Convex ${this.adminAuthToken}`,\n },\n body: JSON.stringify({\n path: this.storageFunction,\n args: request,\n format: 'json',\n }),\n });\n\n if (!response.ok) {\n const text = await response.text();\n throw new Error(`Convex API error: ${response.status} ${text}`);\n }\n\n const result = (await response.json()) as {\n status?: string;\n errorMessage?: string;\n errorCode?: string;\n value?: StorageResponse;\n };\n\n // Handle Convex response format\n if (result.status === 'error') {\n const error = new Error(result.errorMessage || 'Unknown Convex error');\n (error as any).code = result.errorCode;\n throw error;\n }\n\n const storageResponse = result.value as StorageResponse;\n if (!storageResponse?.ok) {\n const errResponse = storageResponse as { ok: false; error: string; code?: string; details?: Record<string, any> };\n const error = new Error(errResponse?.error || 'Unknown Convex storage error');\n (error as any).code = errResponse?.code;\n (error as any).details = errResponse?.details;\n throw error;\n }\n\n return {\n result: storageResponse.result as T,\n hasMore: storageResponse.hasMore,\n };\n }\n\n async callStorage<T = any>(request: StorageRequest): Promise<T> {\n const { result } = await this.callStorageRaw<T>(request);\n return result;\n }\n}\n","import { MessageList } from '@mastra/core/agent';\nimport type { MastraMessageContentV2 } from '@mastra/core/agent';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { MastraDBMessage, StorageThreadType } from '@mastra/core/memory';\nimport {\n MemoryStorage,\n TABLE_MESSAGES,\n TABLE_RESOURCES,\n TABLE_THREADS,\n calculatePagination,\n createStorageErrorId,\n normalizePerPage,\n safelyParseJSON,\n} from '@mastra/core/storage';\nimport type {\n StorageListMessagesInput,\n StorageListMessagesOutput,\n StorageListThreadsByResourceIdInput,\n StorageListThreadsByResourceIdOutput,\n StorageResourceType,\n} from '@mastra/core/storage';\n\nimport type { StoreOperationsConvex } from '../operations';\n\ntype StoredMessage = {\n id: string;\n thread_id: string;\n content: string;\n role: string;\n type: string;\n createdAt: string;\n resourceId: string | null;\n};\n\nexport class MemoryConvex extends MemoryStorage {\n constructor(private readonly operations: StoreOperationsConvex) {\n super();\n }\n\n async getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null> {\n const row = await this.operations.load<\n (Omit<StorageThreadType, 'createdAt' | 'updatedAt'> & { createdAt: string; updatedAt: string }) | null\n >({\n tableName: TABLE_THREADS,\n keys: { id: threadId },\n });\n\n if (!row) return null;\n\n return {\n ...row,\n metadata: typeof row.metadata === 'string' ? JSON.parse(row.metadata) : row.metadata,\n createdAt: new Date(row.createdAt),\n updatedAt: new Date(row.updatedAt),\n };\n }\n\n async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n await this.operations.insert({\n tableName: TABLE_THREADS,\n record: {\n ...thread,\n metadata: thread.metadata ?? {},\n },\n });\n return thread;\n }\n\n async updateThread({\n id,\n title,\n metadata,\n }: {\n id: string;\n title: string;\n metadata: Record<string, unknown>;\n }): Promise<StorageThreadType> {\n const existing = await this.getThreadById({ threadId: id });\n if (!existing) {\n throw new MastraError({\n id: createStorageErrorId('CONVEX', 'UPDATE_THREAD', 'THREAD_NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Thread ${id} not found`,\n });\n }\n\n const updated: StorageThreadType = {\n ...existing,\n title,\n metadata: {\n ...existing.metadata,\n ...metadata,\n },\n updatedAt: new Date(),\n };\n\n await this.saveThread({ thread: updated });\n return updated;\n }\n\n async deleteThread({ threadId }: { threadId: string }): Promise<void> {\n const messages = await this.operations.queryTable<StoredMessage>(TABLE_MESSAGES, [\n { field: 'thread_id', value: threadId },\n ]);\n await this.operations.deleteMany(\n TABLE_MESSAGES,\n messages.map(msg => msg.id),\n );\n await this.operations.deleteMany(TABLE_THREADS, [threadId]);\n }\n\n async listThreadsByResourceId(\n args: StorageListThreadsByResourceIdInput,\n ): Promise<StorageListThreadsByResourceIdOutput> {\n const { resourceId, page = 0, perPage: perPageInput, orderBy } = args;\n const perPage = normalizePerPage(perPageInput, 100);\n const { field, direction } = this.parseOrderBy(orderBy);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n const rows = await this.operations.queryTable<\n Omit<StorageThreadType, 'createdAt' | 'updatedAt'> & { createdAt: string; updatedAt: string }\n >(TABLE_THREADS, [{ field: 'resourceId', value: resourceId }]);\n\n const threads = rows.map(row => ({\n ...row,\n metadata: typeof row.metadata === 'string' ? JSON.parse(row.metadata) : row.metadata,\n createdAt: new Date(row.createdAt),\n updatedAt: new Date(row.updatedAt),\n }));\n\n threads.sort((a, b) => {\n const aValue = a[field];\n const bValue = b[field];\n const aTime = aValue instanceof Date ? aValue.getTime() : new Date(aValue as any).getTime();\n const bTime = bValue instanceof Date ? bValue.getTime() : new Date(bValue as any).getTime();\n return direction === 'ASC' ? aTime - bTime : bTime - aTime;\n });\n\n const total = threads.length;\n const paginated = perPageInput === false ? threads : threads.slice(offset, offset + perPage);\n\n return {\n threads: paginated,\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n }\n\n async listMessages(args: StorageListMessagesInput): Promise<StorageListMessagesOutput> {\n const { threadId, resourceId, include, filter, perPage: perPageInput, page = 0, orderBy } = args;\n\n // Normalize threadId to array\n const threadIds = Array.isArray(threadId) ? threadId : [threadId];\n\n if (threadIds.length === 0 || threadIds.some(id => !id.trim())) {\n throw new MastraError(\n {\n id: createStorageErrorId('CONVEX', 'LIST_MESSAGES', 'INVALID_THREAD_ID'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { threadId: Array.isArray(threadId) ? threadId.join(',') : threadId },\n },\n new Error('threadId must be a non-empty string or array of non-empty strings'),\n );\n }\n\n const perPage = normalizePerPage(perPageInput, 40);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const { field, direction } = this.parseOrderBy(orderBy, 'ASC');\n\n // Fetch messages from all threads\n let rows: StoredMessage[] = [];\n for (const tid of threadIds) {\n const threadRows = await this.operations.queryTable<StoredMessage>(TABLE_MESSAGES, [\n { field: 'thread_id', value: tid },\n ]);\n rows.push(...threadRows);\n }\n\n if (resourceId) {\n rows = rows.filter(row => row.resourceId === resourceId);\n }\n\n if (filter?.dateRange) {\n const { start, end } = filter.dateRange;\n rows = rows.filter(row => {\n const created = new Date(row.createdAt).getTime();\n if (start && created < start.getTime()) return false;\n if (end && created > end.getTime()) return false;\n return true;\n });\n }\n\n rows.sort((a, b) => {\n const aValue =\n field === 'createdAt' || field === 'updatedAt'\n ? new Date((a as Record<string, any>)[field]).getTime()\n : (a as Record<string, any>)[field];\n const bValue =\n field === 'createdAt' || field === 'updatedAt'\n ? new Date((b as Record<string, any>)[field]).getTime()\n : (b as Record<string, any>)[field];\n if (typeof aValue === 'number' && typeof bValue === 'number') {\n return direction === 'ASC' ? aValue - bValue : bValue - aValue;\n }\n return direction === 'ASC'\n ? String(aValue).localeCompare(String(bValue))\n : String(bValue).localeCompare(String(aValue));\n });\n\n const totalThreadMessages = rows.length;\n const paginatedRows = perPageInput === false ? rows : rows.slice(offset, offset + perPage);\n const messages = paginatedRows.map(row => this.parseStoredMessage(row));\n const messageIds = new Set(messages.map(msg => msg.id));\n\n if (include && include.length > 0) {\n // Cache messages from threads as needed\n const threadMessagesCache = new Map<string, StoredMessage[]>();\n // Pre-populate cache with already-fetched thread messages\n for (const tid of threadIds) {\n const tidRows = rows.filter(r => r.thread_id === tid);\n threadMessagesCache.set(tid, tidRows);\n }\n\n for (const includeItem of include) {\n // First, find the message to get its threadId\n let targetThreadId: string | undefined;\n let target: StoredMessage | undefined;\n\n // Check in cached threads first\n for (const [tid, cachedRows] of threadMessagesCache) {\n target = cachedRows.find(row => row.id === includeItem.id);\n if (target) {\n targetThreadId = tid;\n break;\n }\n }\n\n // If not found, query by message ID directly\n if (!target) {\n const messageRows = await this.operations.queryTable<StoredMessage>(TABLE_MESSAGES, [\n { field: 'id', value: includeItem.id },\n ]);\n if (messageRows.length > 0) {\n target = messageRows[0];\n targetThreadId = target!.thread_id;\n\n // Cache the thread's messages for context lookup\n if (targetThreadId && !threadMessagesCache.has(targetThreadId)) {\n const otherThreadRows = await this.operations.queryTable<StoredMessage>(TABLE_MESSAGES, [\n { field: 'thread_id', value: targetThreadId },\n ]);\n threadMessagesCache.set(targetThreadId, otherThreadRows);\n }\n }\n }\n\n if (!target || !targetThreadId) continue;\n\n if (!messageIds.has(target.id)) {\n messages.push(this.parseStoredMessage(target));\n messageIds.add(target.id);\n }\n\n const targetThreadRows = threadMessagesCache.get(targetThreadId) || [];\n await this.addContextMessages({\n includeItem,\n allMessages: targetThreadRows,\n targetThreadId,\n messageIds,\n messages,\n });\n }\n }\n\n messages.sort((a, b) => {\n const aValue =\n field === 'createdAt' || field === 'updatedAt' ? new Date((a as any)[field]).getTime() : (a as any)[field];\n const bValue =\n field === 'createdAt' || field === 'updatedAt' ? new Date((b as any)[field]).getTime() : (b as any)[field];\n if (typeof aValue === 'number' && typeof bValue === 'number') {\n return direction === 'ASC' ? aValue - bValue : bValue - aValue;\n }\n return direction === 'ASC'\n ? String(aValue).localeCompare(String(bValue))\n : String(bValue).localeCompare(String(aValue));\n });\n\n const hasMore =\n include && include.length > 0\n ? new Set(messages.filter(m => m.threadId === threadId).map(m => m.id)).size < totalThreadMessages\n : perPageInput === false\n ? false\n : offset + perPage < totalThreadMessages;\n\n return {\n messages,\n total: totalThreadMessages,\n page,\n perPage: perPageForResponse,\n hasMore,\n };\n }\n\n async listMessagesById({ messageIds }: { messageIds: string[] }): Promise<{ messages: MastraDBMessage[] }> {\n if (messageIds.length === 0) {\n return { messages: [] };\n }\n const rows = await this.operations.queryTable<StoredMessage>(TABLE_MESSAGES, undefined);\n const filtered = rows.filter(row => messageIds.includes(row.id)).map(row => this.parseStoredMessage(row));\n const list = new MessageList().add(filtered, 'memory');\n return { messages: list.get.all.db() };\n }\n\n async saveMessages({ messages }: { messages: MastraDBMessage[] }): Promise<{ messages: MastraDBMessage[] }> {\n if (messages.length === 0) return { messages: [] };\n\n const normalized = messages.map(message => {\n if (!message.threadId) {\n throw new Error('Thread ID is required');\n }\n if (!message.resourceId) {\n throw new Error('Resource ID is required');\n }\n const createdAt = message.createdAt instanceof Date ? message.createdAt.toISOString() : message.createdAt;\n return {\n id: message.id,\n thread_id: message.threadId,\n content: JSON.stringify(message.content),\n role: message.role,\n type: message.type || 'v2',\n createdAt,\n resourceId: message.resourceId,\n };\n });\n\n await this.operations.batchInsert({\n tableName: TABLE_MESSAGES,\n records: normalized,\n });\n\n // Update thread updatedAt timestamps for all affected threads\n const threadIds = [...new Set(messages.map(m => m.threadId).filter(Boolean) as string[])];\n const now = new Date();\n for (const threadId of threadIds) {\n const thread = await this.getThreadById({ threadId });\n if (thread) {\n await this.operations.insert({\n tableName: TABLE_THREADS,\n record: {\n ...thread,\n id: thread.id,\n updatedAt: now.toISOString(),\n createdAt: thread.createdAt instanceof Date ? thread.createdAt.toISOString() : thread.createdAt,\n metadata: thread.metadata ?? {},\n },\n });\n }\n }\n\n const list = new MessageList().add(messages, 'memory');\n return { messages: list.get.all.db() };\n }\n\n async updateMessages({\n messages,\n }: {\n messages: (Partial<Omit<MastraDBMessage, 'createdAt'>> & {\n id: string;\n content?: { metadata?: MastraMessageContentV2['metadata']; content?: MastraMessageContentV2['content'] };\n })[];\n }): Promise<MastraDBMessage[]> {\n if (messages.length === 0) return [];\n\n const existing = await this.operations.queryTable<StoredMessage>(TABLE_MESSAGES, undefined);\n const updated: MastraDBMessage[] = [];\n const affectedThreadIds = new Set<string>();\n\n for (const update of messages) {\n const current = existing.find(row => row.id === update.id);\n if (!current) continue;\n\n // Track old thread for timestamp update\n affectedThreadIds.add(current.thread_id);\n\n if (update.threadId) {\n // Track new thread for timestamp update when moving messages\n affectedThreadIds.add(update.threadId);\n current.thread_id = update.threadId;\n }\n if (update.resourceId !== undefined) {\n current.resourceId = update.resourceId ?? null;\n }\n if (update.role) {\n current.role = update.role;\n }\n if (update.type) {\n current.type = update.type;\n }\n if (update.content) {\n const existingContent = safelyParseJSON(current.content) || {};\n const mergedContent = {\n ...existingContent,\n ...update.content,\n ...(existingContent.metadata && update.content.metadata\n ? { metadata: { ...existingContent.metadata, ...update.content.metadata } }\n : {}),\n };\n current.content = JSON.stringify(mergedContent);\n }\n\n await this.operations.insert({\n tableName: TABLE_MESSAGES,\n record: current,\n });\n updated.push(this.parseStoredMessage(current));\n }\n\n // Update thread updatedAt timestamps for all affected threads\n const now = new Date();\n for (const threadId of affectedThreadIds) {\n const thread = await this.getThreadById({ threadId });\n if (thread) {\n await this.operations.insert({\n tableName: TABLE_THREADS,\n record: {\n ...thread,\n id: thread.id,\n updatedAt: now.toISOString(),\n createdAt: thread.createdAt instanceof Date ? thread.createdAt.toISOString() : thread.createdAt,\n metadata: thread.metadata ?? {},\n },\n });\n }\n }\n\n return updated;\n }\n\n async deleteMessages(messageIds: string[]): Promise<void> {\n await this.operations.deleteMany(TABLE_MESSAGES, messageIds);\n }\n\n async saveResource({ resource }: { resource: StorageResourceType }): Promise<StorageResourceType> {\n const record: Record<string, unknown> = {\n ...resource,\n createdAt: resource.createdAt instanceof Date ? resource.createdAt.toISOString() : resource.createdAt,\n updatedAt: resource.updatedAt instanceof Date ? resource.updatedAt.toISOString() : resource.updatedAt,\n };\n // Only include metadata if it's defined\n if (resource.metadata !== undefined) {\n record.metadata = resource.metadata;\n }\n await this.operations.insert({\n tableName: TABLE_RESOURCES,\n record,\n });\n return resource;\n }\n\n async getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n const record = await this.operations.load<\n (Omit<StorageResourceType, 'createdAt' | 'updatedAt'> & { createdAt: string; updatedAt: string }) | null\n >({\n tableName: TABLE_RESOURCES,\n keys: { id: resourceId },\n });\n if (!record) return null;\n\n return {\n ...record,\n metadata: typeof record.metadata === 'string' ? safelyParseJSON(record.metadata) : record.metadata,\n createdAt: new Date(record.createdAt),\n updatedAt: new Date(record.updatedAt),\n };\n }\n\n async updateResource({\n resourceId,\n workingMemory,\n metadata,\n }: {\n resourceId: string;\n workingMemory?: string;\n metadata?: Record<string, unknown>;\n }): Promise<StorageResourceType> {\n const existing = await this.getResourceById({ resourceId });\n const now = new Date();\n if (!existing) {\n const created: StorageResourceType = {\n id: resourceId,\n workingMemory,\n metadata: metadata ?? {},\n createdAt: now,\n updatedAt: now,\n };\n return this.saveResource({ resource: created });\n }\n\n const updated: StorageResourceType = {\n ...existing,\n workingMemory: workingMemory ?? existing.workingMemory,\n metadata: {\n ...existing.metadata,\n ...metadata,\n },\n updatedAt: now,\n };\n\n await this.saveResource({ resource: updated });\n return updated;\n }\n\n private parseStoredMessage(message: StoredMessage): MastraDBMessage {\n const content = safelyParseJSON(message.content);\n return {\n id: message.id,\n threadId: message.thread_id,\n content,\n role: message.role as MastraDBMessage['role'],\n type: message.type,\n createdAt: new Date(message.createdAt),\n resourceId: message.resourceId ?? undefined,\n };\n }\n\n private async addContextMessages({\n includeItem,\n allMessages,\n targetThreadId,\n messageIds,\n messages,\n }: {\n includeItem: NonNullable<StorageListMessagesInput['include']>[number];\n allMessages: StoredMessage[];\n targetThreadId: string;\n messageIds: Set<string>;\n messages: MastraDBMessage[];\n }): Promise<void> {\n const ordered = allMessages\n .filter(row => row.thread_id === targetThreadId)\n .sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());\n\n const targetIndex = ordered.findIndex(row => row.id === includeItem.id);\n if (targetIndex === -1) return;\n\n if (includeItem.withPreviousMessages) {\n const start = Math.max(0, targetIndex - includeItem.withPreviousMessages);\n for (let i = start; i < targetIndex; i++) {\n const row = ordered[i];\n if (row && !messageIds.has(row.id)) {\n messages.push(this.parseStoredMessage(row));\n messageIds.add(row.id);\n }\n }\n }\n\n if (includeItem.withNextMessages) {\n const end = Math.min(ordered.length, targetIndex + includeItem.withNextMessages + 1);\n for (let i = targetIndex + 1; i < end; i++) {\n const row = ordered[i];\n if (row && !messageIds.has(row.id)) {\n messages.push(this.parseStoredMessage(row));\n messageIds.add(row.id);\n }\n }\n }\n }\n}\n","import crypto from 'node:crypto';\n\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { SaveScorePayload, ScoreRowData, ScoringEntityType, ScoringSource } from '@mastra/core/evals';\nimport { TABLE_SCORERS, ScoresStorage, createStorageErrorId } from '@mastra/core/storage';\nimport type { PaginationInfo, StoragePagination } from '@mastra/core/storage';\n\nimport type { StoreOperationsConvex } from '../operations';\n\ntype StoredScore = Omit<ScoreRowData, 'createdAt' | 'updatedAt'> & {\n createdAt: string;\n updatedAt: string;\n};\n\nexport class ScoresConvex extends ScoresStorage {\n constructor(private readonly operations: StoreOperationsConvex) {\n super();\n }\n\n async getScoreById({ id }: { id: string }): Promise<ScoreRowData | null> {\n const row = await this.operations.load<StoredScore | null>({\n tableName: TABLE_SCORERS,\n keys: { id },\n });\n return row ? this.deserialize(row) : null;\n }\n\n async saveScore(score: SaveScorePayload): Promise<{ score: ScoreRowData }> {\n const now = new Date();\n const record = {\n ...score,\n id: crypto.randomUUID(),\n createdAt: now.toISOString(),\n updatedAt: now.toISOString(),\n } as StoredScore;\n\n await this.operations.insert({\n tableName: TABLE_SCORERS,\n record,\n });\n\n return { score: this.deserialize(record) };\n }\n\n async listScoresByScorerId({\n scorerId,\n pagination,\n entityId,\n entityType,\n source,\n }: {\n scorerId: string;\n pagination: StoragePagination;\n entityId?: string;\n entityType?: ScoringEntityType;\n source?: ScoringSource;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.listScores({\n filters: { scorerId, entityId, entityType, source },\n pagination,\n });\n }\n\n async listScoresByRunId({\n runId,\n pagination,\n }: {\n runId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.listScores({\n filters: { runId },\n pagination,\n });\n }\n\n async listScoresByEntityId({\n entityId,\n entityType,\n pagination,\n }: {\n entityId: string;\n entityType: ScoringEntityType;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.listScores({\n filters: { entityId, entityType },\n pagination,\n });\n }\n\n private async listScores({\n filters,\n pagination,\n }: {\n filters: Partial<Pick<ScoreRowData, 'scorerId' | 'entityId' | 'entityType' | 'runId' | 'source'>>;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n if (pagination.page < 0) {\n throw new MastraError(\n {\n id: createStorageErrorId('CONVEX', 'LIST_SCORES', 'INVALID_PAGINATION'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n },\n new Error('page must be >= 0'),\n );\n }\n\n const rows = await this.operations.queryTable<StoredScore>(TABLE_SCORERS, undefined);\n const filtered = rows\n .filter(row => (filters.scorerId ? row.scorerId === filters.scorerId : true))\n .filter(row => (filters.entityId ? row.entityId === filters.entityId : true))\n .filter(row => (filters.entityType ? row.entityType === filters.entityType : true))\n .filter(row => (filters.runId ? row.runId === filters.runId : true))\n .filter(row => (filters.source ? row.source === filters.source : true))\n .sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());\n\n const { perPage, page } = pagination;\n const perPageValue = perPage === false ? filtered.length : perPage;\n const start = perPage === false ? 0 : page * perPageValue;\n const end = perPage === false ? filtered.length : start + perPageValue;\n const slice = filtered.slice(start, end).map(row => this.deserialize(row));\n\n return {\n pagination: {\n total: filtered.length,\n page,\n perPage,\n hasMore: perPage === false ? false : end < filtered.length,\n },\n scores: slice,\n };\n }\n\n private deserialize(row: StoredScore): ScoreRowData {\n return {\n ...(row as unknown as ScoreRowData),\n createdAt: new Date(row.createdAt),\n updatedAt: new Date(row.updatedAt),\n };\n }\n}\n","import { TABLE_WORKFLOW_SNAPSHOT, normalizePerPage, WorkflowsStorage } from '@mastra/core/storage';\nimport type { StorageListWorkflowRunsInput, StorageWorkflowRun, WorkflowRun, WorkflowRuns } from '@mastra/core/storage';\nimport type { StepResult, WorkflowRunState, WorkflowRunStatus } from '@mastra/core/workflows';\n\nimport type { StoreOperationsConvex } from '../operations';\n\ntype RawWorkflowRun = Omit<StorageWorkflowRun, 'createdAt' | 'updatedAt' | 'snapshot'> & {\n createdAt: string;\n updatedAt: string;\n snapshot: WorkflowRunState | string;\n};\n\nexport class WorkflowsConvex extends WorkflowsStorage {\n constructor(private readonly operations: StoreOperationsConvex) {\n super();\n }\n\n async updateWorkflowResults({\n workflowName,\n runId,\n stepId,\n result,\n requestContext,\n }: {\n workflowName: string;\n runId: string;\n stepId: string;\n result: StepResult<any, any, any, any>;\n requestContext: Record<string, any>;\n }): Promise<Record<string, StepResult<any, any, any, any>>> {\n const run = await this.getRun(workflowName, runId);\n if (!run) return {};\n\n const snapshot = this.ensureSnapshot(run);\n snapshot.context = snapshot.context || {};\n snapshot.context[stepId] = result;\n snapshot.requestContext = { ...(snapshot.requestContext || {}), ...requestContext };\n\n await this.persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId: run.resourceId,\n snapshot,\n });\n\n return JSON.parse(JSON.stringify(snapshot.context));\n }\n\n async updateWorkflowState({\n workflowName,\n runId,\n opts,\n }: {\n workflowName: string;\n runId: string;\n opts: {\n status: WorkflowRunStatus;\n result?: StepResult<any, any, any, any>;\n error?: string;\n suspendedPaths?: Record<string, number[]>;\n waitingPaths?: Record<string, number[]>;\n };\n }): Promise<WorkflowRunState | undefined> {\n const run = await this.getRun(workflowName, runId);\n if (!run) return undefined;\n\n const snapshot = this.ensureSnapshot(run);\n const updated: WorkflowRunState = { ...snapshot, ...opts };\n\n await this.persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId: run.resourceId,\n snapshot: updated,\n });\n\n return updated;\n }\n\n async persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId,\n snapshot,\n }: {\n workflowName: string;\n runId: string;\n resourceId?: string;\n snapshot: WorkflowRunState;\n }): Promise<void> {\n const now = new Date();\n // Check if a record already exists to preserve createdAt\n const existing = await this.operations.load<{ createdAt?: string } | null>({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n keys: { workflow_name: workflowName, run_id: runId },\n });\n\n await this.operations.insert({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n record: {\n workflow_name: workflowName,\n run_id: runId,\n resourceId,\n snapshot,\n createdAt: existing?.createdAt ?? now.toISOString(),\n updatedAt: now.toISOString(),\n },\n });\n }\n\n async loadWorkflowSnapshot({\n workflowName,\n runId,\n }: {\n workflowName: string;\n runId: string;\n }): Promise<WorkflowRunState | null> {\n const row = await this.operations.load<{ snapshot: WorkflowRunState | string } | null>({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n keys: { workflow_name: workflowName, run_id: runId },\n });\n\n if (!row) return null;\n return typeof row.snapshot === 'string' ? JSON.parse(row.snapshot) : JSON.parse(JSON.stringify(row.snapshot));\n }\n\n async listWorkflowRuns(args: StorageListWorkflowRunsInput = {}): Promise<WorkflowRuns> {\n const { workflowName, fromDate, toDate, perPage, page, resourceId, status } = args;\n\n let rows = await this.operations.queryTable<RawWorkflowRun>(TABLE_WORKFLOW_SNAPSHOT, undefined);\n\n if (workflowName) rows = rows.filter(run => run.workflow_name === workflowName);\n if (resourceId) rows = rows.filter(run => run.resourceId === resourceId);\n if (fromDate) rows = rows.filter(run => new Date(run.createdAt).getTime() >= fromDate.getTime());\n if (toDate) rows = rows.filter(run => new Date(run.createdAt).getTime() <= toDate.getTime());\n if (status) {\n rows = rows.filter(run => {\n const snapshot = this.ensureSnapshot(run);\n return snapshot.status === status;\n });\n }\n\n const total = rows.length;\n rows.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());\n\n if (perPage !== undefined && page !== undefined) {\n const normalized = normalizePerPage(perPage, Number.MAX_SAFE_INTEGER);\n const offset = page * normalized;\n rows = rows.slice(offset, offset + normalized);\n }\n\n const runs: WorkflowRun[] = rows.map(run => ({\n workflowName: run.workflow_name,\n runId: run.run_id,\n snapshot: this.ensureSnapshot(run),\n createdAt: new Date(run.createdAt),\n updatedAt: new Date(run.updatedAt),\n resourceId: run.resourceId,\n }));\n\n return { runs, total };\n }\n\n async getWorkflowRunById({\n runId,\n workflowName,\n }: {\n runId: string;\n workflowName?: string;\n }): Promise<WorkflowRun | null> {\n const runs = await this.operations.queryTable<RawWorkflowRun>(TABLE_WORKFLOW_SNAPSHOT, undefined);\n const match = runs.find(run => run.run_id === runId && (!workflowName || run.workflow_name === workflowName));\n if (!match) return null;\n\n return {\n workflowName: match.workflow_name,\n runId: match.run_id,\n snapshot: this.ensureSnapshot(match),\n createdAt: new Date(match.createdAt),\n updatedAt: new Date(match.updatedAt),\n resourceId: match.resourceId,\n };\n }\n\n async deleteWorkflowRunById({ runId, workflowName }: { runId: string; workflowName: string }): Promise<void> {\n await this.operations.deleteMany(TABLE_WORKFLOW_SNAPSHOT, [`${workflowName}-${runId}`]);\n }\n\n private async getRun(workflowName: string, runId: string): Promise<RawWorkflowRun | null> {\n const runs = await this.operations.queryTable<RawWorkflowRun>(TABLE_WORKFLOW_SNAPSHOT, [\n { field: 'workflow_name', value: workflowName },\n ]);\n return runs.find(run => run.run_id === runId) ?? null;\n }\n\n private ensureSnapshot(run: { snapshot: WorkflowRunState | string }): WorkflowRunState {\n if (!run.snapshot) {\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\n if (typeof run.snapshot === 'string') {\n return JSON.parse(run.snapshot);\n }\n\n return JSON.parse(JSON.stringify(run.snapshot));\n }\n}\n","import crypto from 'node:crypto';\n\nimport { TABLE_WORKFLOW_SNAPSHOT, StoreOperations } from '@mastra/core/storage';\nimport type { TABLE_NAMES, StorageColumn } from '@mastra/core/storage';\n\nimport type { ConvexAdminClient } from './client';\nimport type { EqualityFilter } from './types';\n\nexport class StoreOperationsConvex extends StoreOperations {\n constructor(private readonly client: ConvexAdminClient) {\n super();\n }\n\n async hasColumn(_table: string, _column: string): Promise<boolean> {\n return true;\n }\n\n async createTable(_args: { tableName: TABLE_NAMES; schema: Record<string, StorageColumn> }): Promise<void> {\n // No-op for Convex; schema is managed server-side.\n }\n\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n // Delete in batches since each mutation can only delete a small number of docs\n // to stay within Convex's 1-second mutation timeout.\n let hasMore = true;\n while (hasMore) {\n const response = await this.client.callStorageRaw({\n op: 'clearTable',\n tableName,\n });\n hasMore = response.hasMore ?? false;\n }\n }\n\n async dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n // Delete in batches since each mutation can only delete a small number of docs\n // to stay within Convex's 1-second mutation timeout.\n let hasMore = true;\n while (hasMore) {\n const response = await this.client.callStorageRaw({\n op: 'dropTable',\n tableName,\n });\n hasMore = response.hasMore ?? false;\n }\n }\n\n async alterTable(_args: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void> {\n // No-op; columns are implicit in Convex documents.\n }\n\n async insert({ tableName, record }: { tableName: TABLE_NAMES; record: Record<string, any> }): Promise<void> {\n await this.client.callStorage({\n op: 'insert',\n tableName,\n record: this.normalizeRecord(tableName, record),\n });\n }\n\n async batchInsert({ tableName, records }: { tableName: TABLE_NAMES; records: Record<string, any>[] }): Promise<void> {\n if (records.length === 0) return;\n\n await this.client.callStorage({\n op: 'batchInsert',\n tableName,\n records: records.map(record => this.normalizeRecord(tableName, record)),\n });\n }\n\n async load<R>({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, any> }): Promise<R | null> {\n const result = await this.client.callStorage<R | null>({\n op: 'load',\n tableName,\n keys,\n });\n\n return result;\n }\n\n public async queryTable<R>(tableName: TABLE_NAMES, filters?: EqualityFilter[]): Promise<R[]> {\n return this.client.callStorage<R[]>({\n op: 'queryTable',\n tableName,\n filters,\n });\n }\n\n public async deleteMany(tableName: TABLE_NAMES, ids: string[]): Promise<void> {\n if (ids.length === 0) return;\n await this.client.callStorage({\n op: 'deleteMany',\n tableName,\n ids,\n });\n }\n\n private normalizeRecord(tableName: TABLE_NAMES, record: Record<string, any>): Record<string, any> {\n const normalized: Record<string, any> = { ...record };\n\n if (tableName === TABLE_WORKFLOW_SNAPSHOT && !normalized.id) {\n const runId = normalized.run_id || normalized.runId;\n const workflowName = normalized.workflow_name || normalized.workflowName;\n normalized.id = workflowName ? `${workflowName}-${runId}` : runId;\n }\n\n if (!normalized.id) {\n normalized.id = crypto.randomUUID();\n }\n\n for (const [key, value] of Object.entries(normalized)) {\n if (value instanceof Date) {\n normalized[key] = value.toISOString();\n }\n }\n\n return normalized;\n }\n}\n","import type { SaveScorePayload, ScoreRowData, ScoringEntityType, ScoringSource } from '@mastra/core/evals';\nimport type { MastraDBMessage, StorageThreadType } from '@mastra/core/memory';\nimport type {\n StorageColumn,\n StorageResourceType,\n PaginationInfo,\n StorageListMessagesInput,\n StorageListMessagesOutput,\n StorageListThreadsByResourceIdInput,\n StorageListThreadsByResourceIdOutput,\n StorageListWorkflowRunsInput,\n StoragePagination,\n WorkflowRun,\n WorkflowRuns,\n TABLE_NAMES,\n} from '@mastra/core/storage';\nimport { MastraStorage } from '@mastra/core/storage';\nimport type { StepResult, WorkflowRunState, WorkflowRunStatus } from '@mastra/core/workflows';\n\nimport type { ConvexAdminClientConfig } from './client';\nimport { ConvexAdminClient } from './client';\nimport { MemoryConvex } from './domains/memory';\nimport { ScoresConvex } from './domains/scores';\nimport { WorkflowsConvex } from './domains/workflows';\nimport { StoreOperationsConvex } from './operations';\n\nexport type ConvexStoreConfig = ConvexAdminClientConfig & {\n id: string;\n name?: string;\n /**\n * When true, automatic initialization (table creation/migrations) is disabled.\n * This is useful for CI/CD pipelines where you want to:\n * 1. Run migrations explicitly during deployment (not at runtime)\n * 2. Use different credentials for schema changes vs runtime operations\n *\n * When disableInit is true:\n * - The storage will not automatically create/alter tables on first use\n * - You must call `storage.init()` explicitly in your CI/CD scripts\n *\n * @example\n * // In CI/CD script:\n * const storage = new ConvexStore({ ...config, disableInit: false });\n * await storage.init(); // Explicitly run migrations\n *\n * // In runtime application:\n * const storage = new ConvexStore({ ...config, disableInit: true });\n * // No auto-init, tables must already exist\n */\n disableInit?: boolean;\n};\n\nexport class ConvexStore extends MastraStorage {\n private readonly operations: StoreOperationsConvex;\n private readonly memory: MemoryConvex;\n private readonly workflows: WorkflowsConvex;\n private readonly scores: ScoresConvex;\n\n constructor(config: ConvexStoreConfig) {\n super({ id: config.id, name: config.name ?? 'ConvexStore', disableInit: config.disableInit });\n\n const client = new ConvexAdminClient(config);\n this.operations = new StoreOperationsConvex(client);\n this.memory = new MemoryConvex(this.operations);\n this.workflows = new WorkflowsConvex(this.operations);\n this.scores = new ScoresConvex(this.operations);\n\n this.stores = {\n operations: this.operations,\n memory: this.memory,\n workflows: this.workflows,\n scores: this.scores,\n };\n }\n\n public get supports() {\n return {\n selectByIncludeResourceScope: true,\n resourceWorkingMemory: true,\n hasColumn: false,\n createTable: false,\n deleteMessages: true,\n observabilityInstance: false,\n listScoresBySpan: false,\n };\n }\n\n async createTable(_args: { tableName: TABLE_NAMES; schema: Record<string, StorageColumn> }): Promise<void> {\n // No-op\n }\n\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n await this.operations.clearTable({ tableName });\n }\n\n async dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n await this.operations.dropTable({ tableName });\n }\n\n async alterTable(_args: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void> {\n // No-op\n }\n\n async insert({ tableName, record }: { tableName: TABLE_NAMES; record: Record<string, any> }): Promise<void> {\n await this.operations.insert({ tableName, record });\n }\n\n async batchInsert({ tableName, records }: { tableName: TABLE_NAMES; records: Record<string, any>[] }): Promise<void> {\n await this.operations.batchInsert({ tableName, records });\n }\n\n async load<R>({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, any> }): Promise<R | null> {\n return this.operations.load<R>({ tableName, keys });\n }\n\n async getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null> {\n return this.memory.getThreadById({ threadId });\n }\n\n async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n return this.memory.saveThread({ thread });\n }\n\n async updateThread({\n id,\n title,\n metadata,\n }: {\n id: string;\n title: string;\n metadata: Record<string, unknown>;\n }): Promise<StorageThreadType> {\n return this.memory.updateThread({ id, title, metadata });\n }\n\n async deleteThread({ threadId }: { threadId: string }): Promise<void> {\n await this.memory.deleteThread({ threadId });\n }\n\n async listMessages(args: StorageListMessagesInput): Promise<StorageListMessagesOutput> {\n return this.memory.listMessages(args);\n }\n\n async listMessagesById({ messageIds }: { messageIds: string[] }): Promise<{ messages: MastraDBMessage[] }> {\n return this.memory.listMessagesById({ messageIds });\n }\n\n async saveMessages(args: { messages: MastraDBMessage[] }): Promise<{ messages: MastraDBMessage[] }> {\n return this.memory.saveMessages(args);\n }\n\n async updateMessages({\n messages,\n }: {\n messages: (Partial<Omit<MastraDBMessage, 'createdAt'>> & {\n id: string;\n })[];\n }): Promise<MastraDBMessage[]> {\n return this.memory.updateMessages({ messages });\n }\n\n async deleteMessages(messageIds: string[]): Promise<void> {\n await this.memory.deleteMessages(messageIds);\n }\n\n async listThreadsByResourceId(\n args: StorageListThreadsByResourceIdInput,\n ): Promise<StorageListThreadsByResourceIdOutput> {\n return this.memory.listThreadsByResourceId(args);\n }\n\n async getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n return this.memory.getResourceById({ resourceId });\n }\n\n async saveResource({ resource }: { resource: StorageResourceType }): Promise<StorageResourceType> {\n return this.memory.saveResource({ resource });\n }\n\n async updateResource({\n resourceId,\n workingMemory,\n metadata,\n }: {\n resourceId: string;\n workingMemory?: string;\n metadata?: Record<string, unknown>;\n }): Promise<StorageResourceType> {\n return this.memory.updateResource({ resourceId, workingMemory, metadata });\n }\n\n async updateWorkflowResults(params: {\n workflowName: string;\n runId: string;\n stepId: string;\n result: StepResult<any, any, any, any>;\n requestContext: Record<string, any>;\n }): Promise<Record<string, StepResult<any, any, any, any>>> {\n return this.workflows.updateWorkflowResults(params);\n }\n\n async updateWorkflowState(params: {\n workflowName: string;\n runId: string;\n opts: {\n status: WorkflowRunStatus;\n result?: StepResult<any, any, any, any>;\n error?: string;\n suspendedPaths?: Record<string, number[]>;\n waitingPaths?: Record<string, number[]>;\n };\n }): Promise<WorkflowRunState | undefined> {\n return this.workflows.updateWorkflowState(params);\n }\n\n async persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId,\n snapshot,\n }: {\n workflowName: string;\n runId: string;\n resourceId?: string | undefined;\n snapshot: WorkflowRunState;\n }): Promise<void> {\n await this.workflows.persistWorkflowSnapshot({ workflowName, runId, resourceId, snapshot });\n }\n\n async loadWorkflowSnapshot({\n workflowName,\n runId,\n }: {\n workflowName: string;\n runId: string;\n }): Promise<WorkflowRunState | null> {\n return this.workflows.loadWorkflowSnapshot({ workflowName, runId });\n }\n\n async listWorkflowRuns(args?: StorageListWorkflowRunsInput): Promise<WorkflowRuns> {\n return this.workflows.listWorkflowRuns(args);\n }\n\n async getWorkflowRunById({\n runId,\n workflowName,\n }: {\n runId: string;\n workflowName?: string | undefined;\n }): Promise<WorkflowRun | null> {\n return this.workflows.getWorkflowRunById({ runId, workflowName });\n }\n\n async deleteWorkflowRunById({ runId, workflowName }: { runId: string; workflowName: string }): Promise<void> {\n return this.workflows.deleteWorkflowRunById({ runId, workflowName });\n }\n\n async getScoreById({ id }: { id: string }): Promise<ScoreRowData | null> {\n return this.scores.getScoreById({ id });\n }\n\n async saveScore(score: SaveScorePayload): Promise<{ score: ScoreRowData }> {\n return this.scores.saveScore(score);\n }\n\n async listScoresByScorerId({\n scorerId,\n pagination,\n entityId,\n entityType,\n source,\n }: {\n scorerId: string;\n pagination: StoragePagination;\n entityId?: string | undefined;\n entityType?: ScoringEntityType | undefined;\n source?: ScoringSource | undefined;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.scores.listScoresByScorerId({ scorerId, pagination, entityId, entityType, source });\n }\n\n async listScoresByRunId({\n runId,\n pagination,\n }: {\n runId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.scores.listScoresByRunId({ runId, pagination });\n }\n\n async listScoresByEntityId({\n entityId,\n entityType,\n pagination,\n }: {\n pagination: StoragePagination;\n entityId: string;\n entityType: ScoringEntityType;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.scores.listScoresByEntityId({ entityId, entityType, pagination });\n }\n}\n","import crypto from 'node:crypto';\n\nimport { MastraVector } from '@mastra/core/vector';\nimport type {\n CreateIndexParams,\n DeleteIndexParams,\n DeleteVectorParams,\n DeleteVectorsParams,\n DescribeIndexParams,\n IndexStats,\n QueryResult,\n QueryVectorParams,\n UpdateVectorParams,\n UpsertVectorParams,\n} from '@mastra/core/vector';\n\nimport type { ConvexAdminClientConfig } from '../storage/client';\nimport { ConvexAdminClient } from '../storage/client';\nimport type { StorageRequest } from '../storage/types';\n\ntype VectorRecord = {\n id: string;\n embedding: number[];\n metadata?: Record<string, any>;\n};\n\ntype VectorFilter = {\n metadata?: Record<string, any>;\n};\n\nconst INDEX_METADATA_TABLE = 'mastra_vector_indexes';\n\nexport type ConvexVectorConfig = ConvexAdminClientConfig & {\n id: string;\n};\n\nexport class ConvexVector extends MastraVector<VectorFilter> {\n private readonly client: ConvexAdminClient;\n\n constructor(config: ConvexVectorConfig) {\n super({ id: config.id });\n this.client = new ConvexAdminClient(config);\n }\n\n async createIndex({ indexName, dimension }: CreateIndexParams): Promise<void> {\n await this.callStorage({\n op: 'insert',\n tableName: INDEX_METADATA_TABLE,\n record: {\n id: indexName,\n indexName,\n dimension,\n metric: 'cosine',\n createdAt: new Date().toISOString(),\n },\n });\n }\n\n async deleteIndex({ indexName }: DeleteIndexParams): Promise<void> {\n await this.callStorage({\n op: 'deleteMany',\n tableName: INDEX_METADATA_TABLE,\n ids: [indexName],\n });\n // Delete in batches since each mutation can only delete a small number of docs\n // to stay within Convex's 1-second mutation timeout.\n await this.callStorageUntilComplete({\n op: 'clearTable',\n tableName: this.vectorTable(indexName),\n });\n }\n\n async truncateIndex({ indexName }: DeleteIndexParams): Promise<void> {\n // Delete in batches since each mutation can only delete a small number of docs\n // to stay within Convex's 1-second mutation timeout.\n await this.callStorageUntilComplete({\n op: 'clearTable',\n tableName: this.vectorTable(indexName),\n });\n }\n\n async listIndexes(): Promise<string[]> {\n const indexes = await this.callStorage<{ id: string }[]>({\n op: 'queryTable',\n tableName: INDEX_METADATA_TABLE,\n });\n return indexes.map(index => index.id);\n }\n\n async describeIndex({ indexName }: DescribeIndexParams): Promise<IndexStats> {\n const index = await this.callStorage<{ dimension: number } | null>({\n op: 'load',\n tableName: INDEX_METADATA_TABLE,\n keys: { id: indexName },\n });\n if (!index) {\n throw new Error(`Index ${indexName} not found`);\n }\n\n const vectors = await this.callStorage<VectorRecord[]>({\n op: 'queryTable',\n tableName: this.vectorTable(indexName),\n });\n\n return {\n dimension: index.dimension,\n count: vectors.length,\n metric: 'cosine',\n };\n }\n\n async upsert({ indexName, vectors, ids, metadata }: UpsertVectorParams<VectorFilter>): Promise<string[]> {\n const vectorIds = ids ?? vectors.map(() => crypto.randomUUID());\n\n const records: VectorRecord[] = vectors.map((vector, i) => ({\n id: vectorIds[i]!,\n embedding: vector,\n metadata: metadata?.[i],\n }));\n\n await this.callStorage({\n op: 'batchInsert',\n tableName: this.vectorTable(indexName),\n records,\n });\n\n return vectorIds;\n }\n\n async query({\n indexName,\n queryVector,\n topK = 10,\n includeVector = false,\n filter,\n }: QueryVectorParams<VectorFilter>): Promise<QueryResult[]> {\n const vectors = await this.callStorage<VectorRecord[]>({\n op: 'queryTable',\n tableName: this.vectorTable(indexName),\n });\n\n const filtered =\n filter && !this.isEmptyFilter(filter)\n ? vectors.filter(record => this.matchesFilter(record.metadata, filter))\n : vectors;\n\n const scored = filtered\n .map(record => ({\n id: record.id,\n score: cosineSimilarity(queryVector, record.embedding),\n metadata: record.metadata,\n ...(includeVector ? { vector: record.embedding } : {}),\n }))\n .filter(result => Number.isFinite(result.score))\n .sort((a, b) => b.score - a.score)\n .slice(0, topK);\n\n return scored;\n }\n\n async updateVector(params: UpdateVectorParams<VectorFilter>): Promise<void> {\n const hasId = 'id' in params && params.id;\n const hasFilter = 'filter' in params && params.filter !== undefined;\n\n // Check for mutually exclusive parameters\n if (hasId && hasFilter) {\n throw new Error('ConvexVector.updateVector: id and filter are mutually exclusive');\n }\n\n // Check for filter-based update\n if (hasFilter) {\n const filter = params.filter as VectorFilter;\n // Check for empty filter\n if (this.isEmptyFilter(filter)) {\n throw new Error('ConvexVector.updateVector: cannot update with empty filter');\n }\n\n // Update by filter - find all matching records and update them\n const vectors = await this.callStorage<VectorRecord[]>({\n op: 'queryTable',\n tableName: this.vectorTable(params.indexName),\n });\n\n const matching = vectors.filter(record => this.matchesFilter(record.metadata, filter));\n\n for (const existing of matching) {\n const updated: VectorRecord = {\n ...existing,\n ...(params.update.vector ? { embedding: params.update.vector } : {}),\n ...(params.update.metadata ? { metadata: { ...existing.metadata, ...params.update.metadata } } : {}),\n };\n\n await this.callStorage({\n op: 'insert',\n tableName: this.vectorTable(params.indexName),\n record: updated,\n });\n }\n return;\n }\n\n // Update by id\n if (!hasId) {\n throw new Error('ConvexVector.updateVector: Either id or filter must be provided');\n }\n\n const existing = await this.callStorage<VectorRecord | null>({\n op: 'load',\n tableName: this.vectorTable(params.indexName),\n keys: { id: params.id },\n });\n if (!existing) return;\n\n const updated: VectorRecord = {\n ...existing,\n ...(params.update.vector ? { embedding: params.update.vector } : {}),\n ...(params.update.metadata ? { metadata: { ...existing.metadata, ...params.update.metadata } } : {}),\n };\n\n await this.callStorage({\n op: 'insert',\n tableName: this.vectorTable(params.indexName),\n record: updated,\n });\n }\n\n async deleteVector({ indexName, id }: DeleteVectorParams): Promise<void> {\n await this.callStorage({\n op: 'deleteMany',\n tableName: this.vectorTable(indexName),\n ids: [id],\n });\n }\n\n async deleteVectors(params: DeleteVectorsParams<VectorFilter>): Promise<void> {\n const { indexName } = params;\n const hasIds = 'ids' in params && params.ids !== undefined;\n const hasFilter = 'filter' in params && params.filter !== undefined;\n\n // Check for mutually exclusive parameters\n if (hasIds && hasFilter) {\n throw new Error('ConvexVector.deleteVectors: ids and filter are mutually exclusive');\n }\n\n // Check that at least one is provided\n if (!hasIds && !hasFilter) {\n throw new Error('ConvexVector.deleteVectors: Either filter or ids must be provided');\n }\n\n // Handle ID-based deletion\n if (hasIds) {\n const ids = params.ids as string[];\n if (ids.length === 0) {\n throw new Error('ConvexVector.deleteVectors: cannot delete with empty ids array');\n }\n await this.callStorage({\n op: 'deleteMany',\n tableName: this.vectorTable(indexName),\n ids,\n });\n return;\n }\n\n // Handle filter-based deletion\n const filter = params.filter as VectorFilter;\n if (this.isEmptyFilter(filter)) {\n throw new Error('ConvexVector.deleteVectors: cannot delete with empty filter');\n }\n\n // Find all matching vectors and delete them\n const vectors = await this.callStorage<VectorRecord[]>({\n op: 'queryTable',\n tableName: this.vectorTable(indexName),\n });\n\n const matchingIds = vectors.filter(record => this.matchesFilter(record.metadata, filter)).map(record => record.id);\n\n if (matchingIds.length > 0) {\n await this.callStorage({\n op: 'deleteMany',\n tableName: this.vectorTable(indexName),\n ids: matchingIds,\n });\n }\n }\n\n private vectorTable(indexName: string) {\n return `mastra_vector_${indexName}`;\n }\n\n private isEmptyFilter(filter: VectorFilter | Record<string, any>): boolean {\n if (!filter) return true;\n return Object.keys(filter).length === 0;\n }\n\n private matchesFilter(\n recordMetadata: Record<string, any> | undefined,\n filter: VectorFilter | Record<string, any>,\n ): boolean {\n if (!recordMetadata) return false;\n if (!filter || Object.keys(filter).length === 0) return true;\n\n // Handle VectorFilter with metadata property\n if ('metadata' in filter && filter.metadata) {\n return this.matchesFilterConditions(recordMetadata, filter.metadata);\n }\n\n // Handle direct filter conditions\n return this.matchesFilterConditions(recordMetadata, filter);\n }\n\n private matchesFilterConditions(recordMetadata: Record<string, any>, conditions: Record<string, any>): boolean {\n for (const [key, value] of Object.entries(conditions)) {\n // Handle $and operator\n if (key === '$and' && Array.isArray(value)) {\n const allMatch = value.every((cond: Record<string, any>) => this.matchesFilterConditions(recordMetadata, cond));\n if (!allMatch) return false;\n continue;\n }\n\n // Handle $or operator\n if (key === '$or' && Array.isArray(value)) {\n const anyMatch = value.some((cond: Record<string, any>) => this.matchesFilterConditions(recordMetadata, cond));\n if (!anyMatch) return false;\n continue;\n }\n\n // Handle $in operator\n if (typeof value === 'object' && value !== null && '$in' in value) {\n if (!Array.isArray(value.$in) || !value.$in.includes(recordMetadata[key])) {\n return false;\n }\n continue;\n }\n\n // Handle $nin operator\n if (typeof value === 'object' && value !== null && '$nin' in value) {\n if (Array.isArray(value.$nin) && value.$nin.includes(recordMetadata[key])) {\n return false;\n }\n continue;\n }\n\n // Handle $gt operator\n if (typeof value === 'object' && value !== null && '$gt' in value) {\n if (!(recordMetadata[key] > value.$gt)) {\n return false;\n }\n continue;\n }\n\n // Handle $gte operator\n if (typeof value === 'object' && value !== null && '$gte' in value) {\n if (!(recordMetadata[key] >= value.$gte)) {\n return false;\n }\n continue;\n }\n\n // Handle $lt operator\n if (typeof value === 'object' && value !== null && '$lt' in value) {\n if (!(recordMetadata[key] < value.$lt)) {\n return false;\n }\n continue;\n }\n\n // Handle $lte operator\n if (typeof value === 'object' && value !== null && '$lte' in value) {\n if (!(recordMetadata[key] <= value.$lte)) {\n return false;\n }\n continue;\n }\n\n // Handle $ne operator\n if (typeof value === 'object' && value !== null && '$ne' in value) {\n if (recordMetadata[key] === value.$ne) {\n return false;\n }\n continue;\n }\n\n // Handle simple equality\n if (recordMetadata[key] !== value) {\n return false;\n }\n }\n\n return true;\n }\n\n private async callStorage<T = any>(request: StorageRequest): Promise<T> {\n return this.client.callStorage<T>(request);\n }\n\n /**\n * Call storage repeatedly until hasMore is false.\n * Use for bulk operations like clearTable that may need multiple batches.\n */\n private async callStorageUntilComplete(request: StorageRequest): Promise<void> {\n let hasMore = true;\n while (hasMore) {\n const response = await this.client.callStorageRaw(request);\n hasMore = response.hasMore ?? false;\n }\n }\n}\n\nfunction cosineSimilarity(a: number[], b: number[]): number {\n if (a.length !== b.length) {\n return -1;\n }\n\n let dot = 0;\n let magA = 0;\n let magB = 0;\n\n for (let i = 0; i < a.length; i++) {\n const aVal = a[i] ?? 0;\n const bVal = b[i] ?? 0;\n dot += aVal * bVal;\n magA += aVal * aVal;\n magB += bVal * bVal;\n }\n\n if (magA === 0 || magB === 0) {\n return -1;\n }\n\n return dot / (Math.sqrt(magA) * Math.sqrt(magB));\n}\n"]}
package/dist/index.js CHANGED
@@ -705,6 +705,9 @@ var WorkflowsConvex = class extends WorkflowsStorage {
705
705
  resourceId: match.resourceId
706
706
  };
707
707
  }
708
+ async deleteWorkflowRunById({ runId, workflowName }) {
709
+ await this.operations.deleteMany(TABLE_WORKFLOW_SNAPSHOT, [`${workflowName}-${runId}`]);
710
+ }
708
711
  async getRun(workflowName, runId) {
709
712
  const runs = await this.operations.queryTable(TABLE_WORKFLOW_SNAPSHOT, [
710
713
  { field: "workflow_name", value: workflowName }
@@ -950,6 +953,9 @@ var ConvexStore = class extends MastraStorage {
950
953
  }) {
951
954
  return this.workflows.getWorkflowRunById({ runId, workflowName });
952
955
  }
956
+ async deleteWorkflowRunById({ runId, workflowName }) {
957
+ return this.workflows.deleteWorkflowRunById({ runId, workflowName });
958
+ }
953
959
  async getScoreById({ id }) {
954
960
  return this.scores.getScoreById({ id });
955
961
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/storage/client.ts","../src/storage/domains/memory.ts","../src/storage/domains/scores.ts","../src/storage/domains/workflows.ts","../src/storage/operations.ts","../src/storage/index.ts","../src/vector/index.ts"],"names":["TABLE_THREADS","TABLE_MESSAGES","TABLE_RESOURCES","TABLE_SCORERS","MastraError","createStorageErrorId","ErrorDomain","ErrorCategory","TABLE_WORKFLOW_SNAPSHOT","normalizePerPage","crypto","existing","updated"],"mappings":"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","file":"index.js","sourcesContent":["import type { StorageRequest, StorageResponse } from './types';\n\nexport type ConvexAdminClientConfig = {\n deploymentUrl: string;\n adminAuthToken: string;\n storageFunction?: string;\n};\n\n/** Response from callStorageRaw that includes batch info */\nexport type RawStorageResult<T = any> = {\n result: T;\n hasMore?: boolean;\n};\n\nconst DEFAULT_STORAGE_FUNCTION = 'mastra/storage:handle';\n\nexport class ConvexAdminClient {\n private readonly deploymentUrl: string;\n private readonly adminAuthToken: string;\n private readonly storageFunction: string;\n\n constructor({ deploymentUrl, adminAuthToken, storageFunction }: ConvexAdminClientConfig) {\n if (!deploymentUrl) {\n throw new Error('ConvexAdminClient: deploymentUrl is required.');\n }\n\n if (!adminAuthToken) {\n throw new Error('ConvexAdminClient: adminAuthToken is required.');\n }\n\n this.deploymentUrl = deploymentUrl.replace(/\\/$/, ''); // Remove trailing slash\n this.adminAuthToken = adminAuthToken;\n this.storageFunction = storageFunction ?? DEFAULT_STORAGE_FUNCTION;\n }\n\n /**\n * Call storage and return the full response including hasMore flag.\n * Use this for operations that may need multiple calls (e.g., clearTable).\n */\n async callStorageRaw<T = any>(request: StorageRequest): Promise<RawStorageResult<T>> {\n // Use Convex HTTP API directly with admin auth\n const url = `${this.deploymentUrl}/api/mutation`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Convex ${this.adminAuthToken}`,\n },\n body: JSON.stringify({\n path: this.storageFunction,\n args: request,\n format: 'json',\n }),\n });\n\n if (!response.ok) {\n const text = await response.text();\n throw new Error(`Convex API error: ${response.status} ${text}`);\n }\n\n const result = (await response.json()) as {\n status?: string;\n errorMessage?: string;\n errorCode?: string;\n value?: StorageResponse;\n };\n\n // Handle Convex response format\n if (result.status === 'error') {\n const error = new Error(result.errorMessage || 'Unknown Convex error');\n (error as any).code = result.errorCode;\n throw error;\n }\n\n const storageResponse = result.value as StorageResponse;\n if (!storageResponse?.ok) {\n const errResponse = storageResponse as { ok: false; error: string; code?: string; details?: Record<string, any> };\n const error = new Error(errResponse?.error || 'Unknown Convex storage error');\n (error as any).code = errResponse?.code;\n (error as any).details = errResponse?.details;\n throw error;\n }\n\n return {\n result: storageResponse.result as T,\n hasMore: storageResponse.hasMore,\n };\n }\n\n async callStorage<T = any>(request: StorageRequest): Promise<T> {\n const { result } = await this.callStorageRaw<T>(request);\n return result;\n }\n}\n","import { MessageList } from '@mastra/core/agent';\nimport type { MastraMessageContentV2 } from '@mastra/core/agent';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { MastraDBMessage, StorageThreadType } from '@mastra/core/memory';\nimport {\n MemoryStorage,\n TABLE_MESSAGES,\n TABLE_RESOURCES,\n TABLE_THREADS,\n calculatePagination,\n createStorageErrorId,\n normalizePerPage,\n safelyParseJSON,\n} from '@mastra/core/storage';\nimport type {\n StorageListMessagesInput,\n StorageListMessagesOutput,\n StorageListThreadsByResourceIdInput,\n StorageListThreadsByResourceIdOutput,\n StorageResourceType,\n} from '@mastra/core/storage';\n\nimport type { StoreOperationsConvex } from '../operations';\n\ntype StoredMessage = {\n id: string;\n thread_id: string;\n content: string;\n role: string;\n type: string;\n createdAt: string;\n resourceId: string | null;\n};\n\nexport class MemoryConvex extends MemoryStorage {\n constructor(private readonly operations: StoreOperationsConvex) {\n super();\n }\n\n async getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null> {\n const row = await this.operations.load<\n (Omit<StorageThreadType, 'createdAt' | 'updatedAt'> & { createdAt: string; updatedAt: string }) | null\n >({\n tableName: TABLE_THREADS,\n keys: { id: threadId },\n });\n\n if (!row) return null;\n\n return {\n ...row,\n metadata: typeof row.metadata === 'string' ? JSON.parse(row.metadata) : row.metadata,\n createdAt: new Date(row.createdAt),\n updatedAt: new Date(row.updatedAt),\n };\n }\n\n async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n await this.operations.insert({\n tableName: TABLE_THREADS,\n record: {\n ...thread,\n metadata: thread.metadata ?? {},\n },\n });\n return thread;\n }\n\n async updateThread({\n id,\n title,\n metadata,\n }: {\n id: string;\n title: string;\n metadata: Record<string, unknown>;\n }): Promise<StorageThreadType> {\n const existing = await this.getThreadById({ threadId: id });\n if (!existing) {\n throw new MastraError({\n id: createStorageErrorId('CONVEX', 'UPDATE_THREAD', 'THREAD_NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Thread ${id} not found`,\n });\n }\n\n const updated: StorageThreadType = {\n ...existing,\n title,\n metadata: {\n ...existing.metadata,\n ...metadata,\n },\n updatedAt: new Date(),\n };\n\n await this.saveThread({ thread: updated });\n return updated;\n }\n\n async deleteThread({ threadId }: { threadId: string }): Promise<void> {\n const messages = await this.operations.queryTable<StoredMessage>(TABLE_MESSAGES, [\n { field: 'thread_id', value: threadId },\n ]);\n await this.operations.deleteMany(\n TABLE_MESSAGES,\n messages.map(msg => msg.id),\n );\n await this.operations.deleteMany(TABLE_THREADS, [threadId]);\n }\n\n async listThreadsByResourceId(\n args: StorageListThreadsByResourceIdInput,\n ): Promise<StorageListThreadsByResourceIdOutput> {\n const { resourceId, page = 0, perPage: perPageInput, orderBy } = args;\n const perPage = normalizePerPage(perPageInput, 100);\n const { field, direction } = this.parseOrderBy(orderBy);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n const rows = await this.operations.queryTable<\n Omit<StorageThreadType, 'createdAt' | 'updatedAt'> & { createdAt: string; updatedAt: string }\n >(TABLE_THREADS, [{ field: 'resourceId', value: resourceId }]);\n\n const threads = rows.map(row => ({\n ...row,\n metadata: typeof row.metadata === 'string' ? JSON.parse(row.metadata) : row.metadata,\n createdAt: new Date(row.createdAt),\n updatedAt: new Date(row.updatedAt),\n }));\n\n threads.sort((a, b) => {\n const aValue = a[field];\n const bValue = b[field];\n const aTime = aValue instanceof Date ? aValue.getTime() : new Date(aValue as any).getTime();\n const bTime = bValue instanceof Date ? bValue.getTime() : new Date(bValue as any).getTime();\n return direction === 'ASC' ? aTime - bTime : bTime - aTime;\n });\n\n const total = threads.length;\n const paginated = perPageInput === false ? threads : threads.slice(offset, offset + perPage);\n\n return {\n threads: paginated,\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n }\n\n async listMessages(args: StorageListMessagesInput): Promise<StorageListMessagesOutput> {\n const { threadId, resourceId, include, filter, perPage: perPageInput, page = 0, orderBy } = args;\n\n // Normalize threadId to array\n const threadIds = Array.isArray(threadId) ? threadId : [threadId];\n\n if (threadIds.length === 0 || threadIds.some(id => !id.trim())) {\n throw new MastraError(\n {\n id: createStorageErrorId('CONVEX', 'LIST_MESSAGES', 'INVALID_THREAD_ID'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { threadId: Array.isArray(threadId) ? threadId.join(',') : threadId },\n },\n new Error('threadId must be a non-empty string or array of non-empty strings'),\n );\n }\n\n const perPage = normalizePerPage(perPageInput, 40);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const { field, direction } = this.parseOrderBy(orderBy, 'ASC');\n\n // Fetch messages from all threads\n let rows: StoredMessage[] = [];\n for (const tid of threadIds) {\n const threadRows = await this.operations.queryTable<StoredMessage>(TABLE_MESSAGES, [\n { field: 'thread_id', value: tid },\n ]);\n rows.push(...threadRows);\n }\n\n if (resourceId) {\n rows = rows.filter(row => row.resourceId === resourceId);\n }\n\n if (filter?.dateRange) {\n const { start, end } = filter.dateRange;\n rows = rows.filter(row => {\n const created = new Date(row.createdAt).getTime();\n if (start && created < start.getTime()) return false;\n if (end && created > end.getTime()) return false;\n return true;\n });\n }\n\n rows.sort((a, b) => {\n const aValue =\n field === 'createdAt' || field === 'updatedAt'\n ? new Date((a as Record<string, any>)[field]).getTime()\n : (a as Record<string, any>)[field];\n const bValue =\n field === 'createdAt' || field === 'updatedAt'\n ? new Date((b as Record<string, any>)[field]).getTime()\n : (b as Record<string, any>)[field];\n if (typeof aValue === 'number' && typeof bValue === 'number') {\n return direction === 'ASC' ? aValue - bValue : bValue - aValue;\n }\n return direction === 'ASC'\n ? String(aValue).localeCompare(String(bValue))\n : String(bValue).localeCompare(String(aValue));\n });\n\n const totalThreadMessages = rows.length;\n const paginatedRows = perPageInput === false ? rows : rows.slice(offset, offset + perPage);\n const messages = paginatedRows.map(row => this.parseStoredMessage(row));\n const messageIds = new Set(messages.map(msg => msg.id));\n\n if (include && include.length > 0) {\n // Cache messages from threads as needed\n const threadMessagesCache = new Map<string, StoredMessage[]>();\n // Pre-populate cache with already-fetched thread messages\n for (const tid of threadIds) {\n const tidRows = rows.filter(r => r.thread_id === tid);\n threadMessagesCache.set(tid, tidRows);\n }\n\n for (const includeItem of include) {\n // First, find the message to get its threadId\n let targetThreadId: string | undefined;\n let target: StoredMessage | undefined;\n\n // Check in cached threads first\n for (const [tid, cachedRows] of threadMessagesCache) {\n target = cachedRows.find(row => row.id === includeItem.id);\n if (target) {\n targetThreadId = tid;\n break;\n }\n }\n\n // If not found, query by message ID directly\n if (!target) {\n const messageRows = await this.operations.queryTable<StoredMessage>(TABLE_MESSAGES, [\n { field: 'id', value: includeItem.id },\n ]);\n if (messageRows.length > 0) {\n target = messageRows[0];\n targetThreadId = target!.thread_id;\n\n // Cache the thread's messages for context lookup\n if (targetThreadId && !threadMessagesCache.has(targetThreadId)) {\n const otherThreadRows = await this.operations.queryTable<StoredMessage>(TABLE_MESSAGES, [\n { field: 'thread_id', value: targetThreadId },\n ]);\n threadMessagesCache.set(targetThreadId, otherThreadRows);\n }\n }\n }\n\n if (!target || !targetThreadId) continue;\n\n if (!messageIds.has(target.id)) {\n messages.push(this.parseStoredMessage(target));\n messageIds.add(target.id);\n }\n\n const targetThreadRows = threadMessagesCache.get(targetThreadId) || [];\n await this.addContextMessages({\n includeItem,\n allMessages: targetThreadRows,\n targetThreadId,\n messageIds,\n messages,\n });\n }\n }\n\n messages.sort((a, b) => {\n const aValue =\n field === 'createdAt' || field === 'updatedAt' ? new Date((a as any)[field]).getTime() : (a as any)[field];\n const bValue =\n field === 'createdAt' || field === 'updatedAt' ? new Date((b as any)[field]).getTime() : (b as any)[field];\n if (typeof aValue === 'number' && typeof bValue === 'number') {\n return direction === 'ASC' ? aValue - bValue : bValue - aValue;\n }\n return direction === 'ASC'\n ? String(aValue).localeCompare(String(bValue))\n : String(bValue).localeCompare(String(aValue));\n });\n\n const hasMore =\n include && include.length > 0\n ? new Set(messages.filter(m => m.threadId === threadId).map(m => m.id)).size < totalThreadMessages\n : perPageInput === false\n ? false\n : offset + perPage < totalThreadMessages;\n\n return {\n messages,\n total: totalThreadMessages,\n page,\n perPage: perPageForResponse,\n hasMore,\n };\n }\n\n async listMessagesById({ messageIds }: { messageIds: string[] }): Promise<{ messages: MastraDBMessage[] }> {\n if (messageIds.length === 0) {\n return { messages: [] };\n }\n const rows = await this.operations.queryTable<StoredMessage>(TABLE_MESSAGES, undefined);\n const filtered = rows.filter(row => messageIds.includes(row.id)).map(row => this.parseStoredMessage(row));\n const list = new MessageList().add(filtered, 'memory');\n return { messages: list.get.all.db() };\n }\n\n async saveMessages({ messages }: { messages: MastraDBMessage[] }): Promise<{ messages: MastraDBMessage[] }> {\n if (messages.length === 0) return { messages: [] };\n\n const normalized = messages.map(message => {\n if (!message.threadId) {\n throw new Error('Thread ID is required');\n }\n if (!message.resourceId) {\n throw new Error('Resource ID is required');\n }\n const createdAt = message.createdAt instanceof Date ? message.createdAt.toISOString() : message.createdAt;\n return {\n id: message.id,\n thread_id: message.threadId,\n content: JSON.stringify(message.content),\n role: message.role,\n type: message.type || 'v2',\n createdAt,\n resourceId: message.resourceId,\n };\n });\n\n await this.operations.batchInsert({\n tableName: TABLE_MESSAGES,\n records: normalized,\n });\n\n // Update thread updatedAt timestamps for all affected threads\n const threadIds = [...new Set(messages.map(m => m.threadId).filter(Boolean) as string[])];\n const now = new Date();\n for (const threadId of threadIds) {\n const thread = await this.getThreadById({ threadId });\n if (thread) {\n await this.operations.insert({\n tableName: TABLE_THREADS,\n record: {\n ...thread,\n id: thread.id,\n updatedAt: now.toISOString(),\n createdAt: thread.createdAt instanceof Date ? thread.createdAt.toISOString() : thread.createdAt,\n metadata: thread.metadata ?? {},\n },\n });\n }\n }\n\n const list = new MessageList().add(messages, 'memory');\n return { messages: list.get.all.db() };\n }\n\n async updateMessages({\n messages,\n }: {\n messages: (Partial<Omit<MastraDBMessage, 'createdAt'>> & {\n id: string;\n content?: { metadata?: MastraMessageContentV2['metadata']; content?: MastraMessageContentV2['content'] };\n })[];\n }): Promise<MastraDBMessage[]> {\n if (messages.length === 0) return [];\n\n const existing = await this.operations.queryTable<StoredMessage>(TABLE_MESSAGES, undefined);\n const updated: MastraDBMessage[] = [];\n const affectedThreadIds = new Set<string>();\n\n for (const update of messages) {\n const current = existing.find(row => row.id === update.id);\n if (!current) continue;\n\n // Track old thread for timestamp update\n affectedThreadIds.add(current.thread_id);\n\n if (update.threadId) {\n // Track new thread for timestamp update when moving messages\n affectedThreadIds.add(update.threadId);\n current.thread_id = update.threadId;\n }\n if (update.resourceId !== undefined) {\n current.resourceId = update.resourceId ?? null;\n }\n if (update.role) {\n current.role = update.role;\n }\n if (update.type) {\n current.type = update.type;\n }\n if (update.content) {\n const existingContent = safelyParseJSON(current.content) || {};\n const mergedContent = {\n ...existingContent,\n ...update.content,\n ...(existingContent.metadata && update.content.metadata\n ? { metadata: { ...existingContent.metadata, ...update.content.metadata } }\n : {}),\n };\n current.content = JSON.stringify(mergedContent);\n }\n\n await this.operations.insert({\n tableName: TABLE_MESSAGES,\n record: current,\n });\n updated.push(this.parseStoredMessage(current));\n }\n\n // Update thread updatedAt timestamps for all affected threads\n const now = new Date();\n for (const threadId of affectedThreadIds) {\n const thread = await this.getThreadById({ threadId });\n if (thread) {\n await this.operations.insert({\n tableName: TABLE_THREADS,\n record: {\n ...thread,\n id: thread.id,\n updatedAt: now.toISOString(),\n createdAt: thread.createdAt instanceof Date ? thread.createdAt.toISOString() : thread.createdAt,\n metadata: thread.metadata ?? {},\n },\n });\n }\n }\n\n return updated;\n }\n\n async deleteMessages(messageIds: string[]): Promise<void> {\n await this.operations.deleteMany(TABLE_MESSAGES, messageIds);\n }\n\n async saveResource({ resource }: { resource: StorageResourceType }): Promise<StorageResourceType> {\n const record: Record<string, unknown> = {\n ...resource,\n createdAt: resource.createdAt instanceof Date ? resource.createdAt.toISOString() : resource.createdAt,\n updatedAt: resource.updatedAt instanceof Date ? resource.updatedAt.toISOString() : resource.updatedAt,\n };\n // Only include metadata if it's defined\n if (resource.metadata !== undefined) {\n record.metadata = resource.metadata;\n }\n await this.operations.insert({\n tableName: TABLE_RESOURCES,\n record,\n });\n return resource;\n }\n\n async getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n const record = await this.operations.load<\n (Omit<StorageResourceType, 'createdAt' | 'updatedAt'> & { createdAt: string; updatedAt: string }) | null\n >({\n tableName: TABLE_RESOURCES,\n keys: { id: resourceId },\n });\n if (!record) return null;\n\n return {\n ...record,\n metadata: typeof record.metadata === 'string' ? safelyParseJSON(record.metadata) : record.metadata,\n createdAt: new Date(record.createdAt),\n updatedAt: new Date(record.updatedAt),\n };\n }\n\n async updateResource({\n resourceId,\n workingMemory,\n metadata,\n }: {\n resourceId: string;\n workingMemory?: string;\n metadata?: Record<string, unknown>;\n }): Promise<StorageResourceType> {\n const existing = await this.getResourceById({ resourceId });\n const now = new Date();\n if (!existing) {\n const created: StorageResourceType = {\n id: resourceId,\n workingMemory,\n metadata: metadata ?? {},\n createdAt: now,\n updatedAt: now,\n };\n return this.saveResource({ resource: created });\n }\n\n const updated: StorageResourceType = {\n ...existing,\n workingMemory: workingMemory ?? existing.workingMemory,\n metadata: {\n ...existing.metadata,\n ...metadata,\n },\n updatedAt: now,\n };\n\n await this.saveResource({ resource: updated });\n return updated;\n }\n\n private parseStoredMessage(message: StoredMessage): MastraDBMessage {\n const content = safelyParseJSON(message.content);\n return {\n id: message.id,\n threadId: message.thread_id,\n content,\n role: message.role as MastraDBMessage['role'],\n type: message.type,\n createdAt: new Date(message.createdAt),\n resourceId: message.resourceId ?? undefined,\n };\n }\n\n private async addContextMessages({\n includeItem,\n allMessages,\n targetThreadId,\n messageIds,\n messages,\n }: {\n includeItem: NonNullable<StorageListMessagesInput['include']>[number];\n allMessages: StoredMessage[];\n targetThreadId: string;\n messageIds: Set<string>;\n messages: MastraDBMessage[];\n }): Promise<void> {\n const ordered = allMessages\n .filter(row => row.thread_id === targetThreadId)\n .sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());\n\n const targetIndex = ordered.findIndex(row => row.id === includeItem.id);\n if (targetIndex === -1) return;\n\n if (includeItem.withPreviousMessages) {\n const start = Math.max(0, targetIndex - includeItem.withPreviousMessages);\n for (let i = start; i < targetIndex; i++) {\n const row = ordered[i];\n if (row && !messageIds.has(row.id)) {\n messages.push(this.parseStoredMessage(row));\n messageIds.add(row.id);\n }\n }\n }\n\n if (includeItem.withNextMessages) {\n const end = Math.min(ordered.length, targetIndex + includeItem.withNextMessages + 1);\n for (let i = targetIndex + 1; i < end; i++) {\n const row = ordered[i];\n if (row && !messageIds.has(row.id)) {\n messages.push(this.parseStoredMessage(row));\n messageIds.add(row.id);\n }\n }\n }\n }\n}\n","import crypto from 'node:crypto';\n\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { SaveScorePayload, ScoreRowData, ScoringEntityType, ScoringSource } from '@mastra/core/evals';\nimport { TABLE_SCORERS, ScoresStorage, createStorageErrorId } from '@mastra/core/storage';\nimport type { PaginationInfo, StoragePagination } from '@mastra/core/storage';\n\nimport type { StoreOperationsConvex } from '../operations';\n\ntype StoredScore = Omit<ScoreRowData, 'createdAt' | 'updatedAt'> & {\n createdAt: string;\n updatedAt: string;\n};\n\nexport class ScoresConvex extends ScoresStorage {\n constructor(private readonly operations: StoreOperationsConvex) {\n super();\n }\n\n async getScoreById({ id }: { id: string }): Promise<ScoreRowData | null> {\n const row = await this.operations.load<StoredScore | null>({\n tableName: TABLE_SCORERS,\n keys: { id },\n });\n return row ? this.deserialize(row) : null;\n }\n\n async saveScore(score: SaveScorePayload): Promise<{ score: ScoreRowData }> {\n const now = new Date();\n const record = {\n ...score,\n id: crypto.randomUUID(),\n createdAt: now.toISOString(),\n updatedAt: now.toISOString(),\n } as StoredScore;\n\n await this.operations.insert({\n tableName: TABLE_SCORERS,\n record,\n });\n\n return { score: this.deserialize(record) };\n }\n\n async listScoresByScorerId({\n scorerId,\n pagination,\n entityId,\n entityType,\n source,\n }: {\n scorerId: string;\n pagination: StoragePagination;\n entityId?: string;\n entityType?: ScoringEntityType;\n source?: ScoringSource;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.listScores({\n filters: { scorerId, entityId, entityType, source },\n pagination,\n });\n }\n\n async listScoresByRunId({\n runId,\n pagination,\n }: {\n runId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.listScores({\n filters: { runId },\n pagination,\n });\n }\n\n async listScoresByEntityId({\n entityId,\n entityType,\n pagination,\n }: {\n entityId: string;\n entityType: ScoringEntityType;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.listScores({\n filters: { entityId, entityType },\n pagination,\n });\n }\n\n private async listScores({\n filters,\n pagination,\n }: {\n filters: Partial<Pick<ScoreRowData, 'scorerId' | 'entityId' | 'entityType' | 'runId' | 'source'>>;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n if (pagination.page < 0) {\n throw new MastraError(\n {\n id: createStorageErrorId('CONVEX', 'LIST_SCORES', 'INVALID_PAGINATION'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n },\n new Error('page must be >= 0'),\n );\n }\n\n const rows = await this.operations.queryTable<StoredScore>(TABLE_SCORERS, undefined);\n const filtered = rows\n .filter(row => (filters.scorerId ? row.scorerId === filters.scorerId : true))\n .filter(row => (filters.entityId ? row.entityId === filters.entityId : true))\n .filter(row => (filters.entityType ? row.entityType === filters.entityType : true))\n .filter(row => (filters.runId ? row.runId === filters.runId : true))\n .filter(row => (filters.source ? row.source === filters.source : true))\n .sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());\n\n const { perPage, page } = pagination;\n const perPageValue = perPage === false ? filtered.length : perPage;\n const start = perPage === false ? 0 : page * perPageValue;\n const end = perPage === false ? filtered.length : start + perPageValue;\n const slice = filtered.slice(start, end).map(row => this.deserialize(row));\n\n return {\n pagination: {\n total: filtered.length,\n page,\n perPage,\n hasMore: perPage === false ? false : end < filtered.length,\n },\n scores: slice,\n };\n }\n\n private deserialize(row: StoredScore): ScoreRowData {\n return {\n ...(row as unknown as ScoreRowData),\n createdAt: new Date(row.createdAt),\n updatedAt: new Date(row.updatedAt),\n };\n }\n}\n","import { TABLE_WORKFLOW_SNAPSHOT, normalizePerPage, WorkflowsStorage } from '@mastra/core/storage';\nimport type { StorageListWorkflowRunsInput, StorageWorkflowRun, WorkflowRun, WorkflowRuns } from '@mastra/core/storage';\nimport type { StepResult, WorkflowRunState, WorkflowRunStatus } from '@mastra/core/workflows';\n\nimport type { StoreOperationsConvex } from '../operations';\n\ntype RawWorkflowRun = Omit<StorageWorkflowRun, 'createdAt' | 'updatedAt' | 'snapshot'> & {\n createdAt: string;\n updatedAt: string;\n snapshot: WorkflowRunState | string;\n};\n\nexport class WorkflowsConvex extends WorkflowsStorage {\n constructor(private readonly operations: StoreOperationsConvex) {\n super();\n }\n\n async updateWorkflowResults({\n workflowName,\n runId,\n stepId,\n result,\n requestContext,\n }: {\n workflowName: string;\n runId: string;\n stepId: string;\n result: StepResult<any, any, any, any>;\n requestContext: Record<string, any>;\n }): Promise<Record<string, StepResult<any, any, any, any>>> {\n const run = await this.getRun(workflowName, runId);\n if (!run) return {};\n\n const snapshot = this.ensureSnapshot(run);\n snapshot.context = snapshot.context || {};\n snapshot.context[stepId] = result;\n snapshot.requestContext = { ...(snapshot.requestContext || {}), ...requestContext };\n\n await this.persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId: run.resourceId,\n snapshot,\n });\n\n return JSON.parse(JSON.stringify(snapshot.context));\n }\n\n async updateWorkflowState({\n workflowName,\n runId,\n opts,\n }: {\n workflowName: string;\n runId: string;\n opts: {\n status: WorkflowRunStatus;\n result?: StepResult<any, any, any, any>;\n error?: string;\n suspendedPaths?: Record<string, number[]>;\n waitingPaths?: Record<string, number[]>;\n };\n }): Promise<WorkflowRunState | undefined> {\n const run = await this.getRun(workflowName, runId);\n if (!run) return undefined;\n\n const snapshot = this.ensureSnapshot(run);\n const updated: WorkflowRunState = { ...snapshot, ...opts };\n\n await this.persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId: run.resourceId,\n snapshot: updated,\n });\n\n return updated;\n }\n\n async persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId,\n snapshot,\n }: {\n workflowName: string;\n runId: string;\n resourceId?: string;\n snapshot: WorkflowRunState;\n }): Promise<void> {\n const now = new Date();\n // Check if a record already exists to preserve createdAt\n const existing = await this.operations.load<{ createdAt?: string } | null>({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n keys: { workflow_name: workflowName, run_id: runId },\n });\n\n await this.operations.insert({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n record: {\n workflow_name: workflowName,\n run_id: runId,\n resourceId,\n snapshot,\n createdAt: existing?.createdAt ?? now.toISOString(),\n updatedAt: now.toISOString(),\n },\n });\n }\n\n async loadWorkflowSnapshot({\n workflowName,\n runId,\n }: {\n workflowName: string;\n runId: string;\n }): Promise<WorkflowRunState | null> {\n const row = await this.operations.load<{ snapshot: WorkflowRunState | string } | null>({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n keys: { workflow_name: workflowName, run_id: runId },\n });\n\n if (!row) return null;\n return typeof row.snapshot === 'string' ? JSON.parse(row.snapshot) : JSON.parse(JSON.stringify(row.snapshot));\n }\n\n async listWorkflowRuns(args: StorageListWorkflowRunsInput = {}): Promise<WorkflowRuns> {\n const { workflowName, fromDate, toDate, perPage, page, resourceId, status } = args;\n\n let rows = await this.operations.queryTable<RawWorkflowRun>(TABLE_WORKFLOW_SNAPSHOT, undefined);\n\n if (workflowName) rows = rows.filter(run => run.workflow_name === workflowName);\n if (resourceId) rows = rows.filter(run => run.resourceId === resourceId);\n if (fromDate) rows = rows.filter(run => new Date(run.createdAt).getTime() >= fromDate.getTime());\n if (toDate) rows = rows.filter(run => new Date(run.createdAt).getTime() <= toDate.getTime());\n if (status) {\n rows = rows.filter(run => {\n const snapshot = this.ensureSnapshot(run);\n return snapshot.status === status;\n });\n }\n\n const total = rows.length;\n rows.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());\n\n if (perPage !== undefined && page !== undefined) {\n const normalized = normalizePerPage(perPage, Number.MAX_SAFE_INTEGER);\n const offset = page * normalized;\n rows = rows.slice(offset, offset + normalized);\n }\n\n const runs: WorkflowRun[] = rows.map(run => ({\n workflowName: run.workflow_name,\n runId: run.run_id,\n snapshot: this.ensureSnapshot(run),\n createdAt: new Date(run.createdAt),\n updatedAt: new Date(run.updatedAt),\n resourceId: run.resourceId,\n }));\n\n return { runs, total };\n }\n\n async getWorkflowRunById({\n runId,\n workflowName,\n }: {\n runId: string;\n workflowName?: string;\n }): Promise<WorkflowRun | null> {\n const runs = await this.operations.queryTable<RawWorkflowRun>(TABLE_WORKFLOW_SNAPSHOT, undefined);\n const match = runs.find(run => run.run_id === runId && (!workflowName || run.workflow_name === workflowName));\n if (!match) return null;\n\n return {\n workflowName: match.workflow_name,\n runId: match.run_id,\n snapshot: this.ensureSnapshot(match),\n createdAt: new Date(match.createdAt),\n updatedAt: new Date(match.updatedAt),\n resourceId: match.resourceId,\n };\n }\n\n private async getRun(workflowName: string, runId: string): Promise<RawWorkflowRun | null> {\n const runs = await this.operations.queryTable<RawWorkflowRun>(TABLE_WORKFLOW_SNAPSHOT, [\n { field: 'workflow_name', value: workflowName },\n ]);\n return runs.find(run => run.run_id === runId) ?? null;\n }\n\n private ensureSnapshot(run: { snapshot: WorkflowRunState | string }): WorkflowRunState {\n if (!run.snapshot) {\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\n if (typeof run.snapshot === 'string') {\n return JSON.parse(run.snapshot);\n }\n\n return JSON.parse(JSON.stringify(run.snapshot));\n }\n}\n","import crypto from 'node:crypto';\n\nimport { TABLE_WORKFLOW_SNAPSHOT, StoreOperations } from '@mastra/core/storage';\nimport type { TABLE_NAMES, StorageColumn } from '@mastra/core/storage';\n\nimport type { ConvexAdminClient } from './client';\nimport type { EqualityFilter } from './types';\n\nexport class StoreOperationsConvex extends StoreOperations {\n constructor(private readonly client: ConvexAdminClient) {\n super();\n }\n\n async hasColumn(_table: string, _column: string): Promise<boolean> {\n return true;\n }\n\n async createTable(_args: { tableName: TABLE_NAMES; schema: Record<string, StorageColumn> }): Promise<void> {\n // No-op for Convex; schema is managed server-side.\n }\n\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n // Delete in batches since each mutation can only delete a small number of docs\n // to stay within Convex's 1-second mutation timeout.\n let hasMore = true;\n while (hasMore) {\n const response = await this.client.callStorageRaw({\n op: 'clearTable',\n tableName,\n });\n hasMore = response.hasMore ?? false;\n }\n }\n\n async dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n // Delete in batches since each mutation can only delete a small number of docs\n // to stay within Convex's 1-second mutation timeout.\n let hasMore = true;\n while (hasMore) {\n const response = await this.client.callStorageRaw({\n op: 'dropTable',\n tableName,\n });\n hasMore = response.hasMore ?? false;\n }\n }\n\n async alterTable(_args: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void> {\n // No-op; columns are implicit in Convex documents.\n }\n\n async insert({ tableName, record }: { tableName: TABLE_NAMES; record: Record<string, any> }): Promise<void> {\n await this.client.callStorage({\n op: 'insert',\n tableName,\n record: this.normalizeRecord(tableName, record),\n });\n }\n\n async batchInsert({ tableName, records }: { tableName: TABLE_NAMES; records: Record<string, any>[] }): Promise<void> {\n if (records.length === 0) return;\n\n await this.client.callStorage({\n op: 'batchInsert',\n tableName,\n records: records.map(record => this.normalizeRecord(tableName, record)),\n });\n }\n\n async load<R>({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, any> }): Promise<R | null> {\n const result = await this.client.callStorage<R | null>({\n op: 'load',\n tableName,\n keys,\n });\n\n return result;\n }\n\n public async queryTable<R>(tableName: TABLE_NAMES, filters?: EqualityFilter[]): Promise<R[]> {\n return this.client.callStorage<R[]>({\n op: 'queryTable',\n tableName,\n filters,\n });\n }\n\n public async deleteMany(tableName: TABLE_NAMES, ids: string[]): Promise<void> {\n if (ids.length === 0) return;\n await this.client.callStorage({\n op: 'deleteMany',\n tableName,\n ids,\n });\n }\n\n private normalizeRecord(tableName: TABLE_NAMES, record: Record<string, any>): Record<string, any> {\n const normalized: Record<string, any> = { ...record };\n\n if (tableName === TABLE_WORKFLOW_SNAPSHOT && !normalized.id) {\n const runId = normalized.run_id || normalized.runId;\n const workflowName = normalized.workflow_name || normalized.workflowName;\n normalized.id = workflowName ? `${workflowName}-${runId}` : runId;\n }\n\n if (!normalized.id) {\n normalized.id = crypto.randomUUID();\n }\n\n for (const [key, value] of Object.entries(normalized)) {\n if (value instanceof Date) {\n normalized[key] = value.toISOString();\n }\n }\n\n return normalized;\n }\n}\n","import type { SaveScorePayload, ScoreRowData, ScoringEntityType, ScoringSource } from '@mastra/core/evals';\nimport type { MastraDBMessage, StorageThreadType } from '@mastra/core/memory';\nimport type {\n StorageColumn,\n StorageResourceType,\n PaginationInfo,\n StorageListMessagesInput,\n StorageListMessagesOutput,\n StorageListThreadsByResourceIdInput,\n StorageListThreadsByResourceIdOutput,\n StorageListWorkflowRunsInput,\n StoragePagination,\n WorkflowRun,\n WorkflowRuns,\n TABLE_NAMES,\n} from '@mastra/core/storage';\nimport { MastraStorage } from '@mastra/core/storage';\nimport type { StepResult, WorkflowRunState, WorkflowRunStatus } from '@mastra/core/workflows';\n\nimport type { ConvexAdminClientConfig } from './client';\nimport { ConvexAdminClient } from './client';\nimport { MemoryConvex } from './domains/memory';\nimport { ScoresConvex } from './domains/scores';\nimport { WorkflowsConvex } from './domains/workflows';\nimport { StoreOperationsConvex } from './operations';\n\nexport type ConvexStoreConfig = ConvexAdminClientConfig & {\n id: string;\n name?: string;\n /**\n * When true, automatic initialization (table creation/migrations) is disabled.\n * This is useful for CI/CD pipelines where you want to:\n * 1. Run migrations explicitly during deployment (not at runtime)\n * 2. Use different credentials for schema changes vs runtime operations\n *\n * When disableInit is true:\n * - The storage will not automatically create/alter tables on first use\n * - You must call `storage.init()` explicitly in your CI/CD scripts\n *\n * @example\n * // In CI/CD script:\n * const storage = new ConvexStore({ ...config, disableInit: false });\n * await storage.init(); // Explicitly run migrations\n *\n * // In runtime application:\n * const storage = new ConvexStore({ ...config, disableInit: true });\n * // No auto-init, tables must already exist\n */\n disableInit?: boolean;\n};\n\nexport class ConvexStore extends MastraStorage {\n private readonly operations: StoreOperationsConvex;\n private readonly memory: MemoryConvex;\n private readonly workflows: WorkflowsConvex;\n private readonly scores: ScoresConvex;\n\n constructor(config: ConvexStoreConfig) {\n super({ id: config.id, name: config.name ?? 'ConvexStore', disableInit: config.disableInit });\n\n const client = new ConvexAdminClient(config);\n this.operations = new StoreOperationsConvex(client);\n this.memory = new MemoryConvex(this.operations);\n this.workflows = new WorkflowsConvex(this.operations);\n this.scores = new ScoresConvex(this.operations);\n\n this.stores = {\n operations: this.operations,\n memory: this.memory,\n workflows: this.workflows,\n scores: this.scores,\n };\n }\n\n public get supports() {\n return {\n selectByIncludeResourceScope: true,\n resourceWorkingMemory: true,\n hasColumn: false,\n createTable: false,\n deleteMessages: true,\n observabilityInstance: false,\n listScoresBySpan: false,\n };\n }\n\n async createTable(_args: { tableName: TABLE_NAMES; schema: Record<string, StorageColumn> }): Promise<void> {\n // No-op\n }\n\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n await this.operations.clearTable({ tableName });\n }\n\n async dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n await this.operations.dropTable({ tableName });\n }\n\n async alterTable(_args: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void> {\n // No-op\n }\n\n async insert({ tableName, record }: { tableName: TABLE_NAMES; record: Record<string, any> }): Promise<void> {\n await this.operations.insert({ tableName, record });\n }\n\n async batchInsert({ tableName, records }: { tableName: TABLE_NAMES; records: Record<string, any>[] }): Promise<void> {\n await this.operations.batchInsert({ tableName, records });\n }\n\n async load<R>({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, any> }): Promise<R | null> {\n return this.operations.load<R>({ tableName, keys });\n }\n\n async getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null> {\n return this.memory.getThreadById({ threadId });\n }\n\n async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n return this.memory.saveThread({ thread });\n }\n\n async updateThread({\n id,\n title,\n metadata,\n }: {\n id: string;\n title: string;\n metadata: Record<string, unknown>;\n }): Promise<StorageThreadType> {\n return this.memory.updateThread({ id, title, metadata });\n }\n\n async deleteThread({ threadId }: { threadId: string }): Promise<void> {\n await this.memory.deleteThread({ threadId });\n }\n\n async listMessages(args: StorageListMessagesInput): Promise<StorageListMessagesOutput> {\n return this.memory.listMessages(args);\n }\n\n async listMessagesById({ messageIds }: { messageIds: string[] }): Promise<{ messages: MastraDBMessage[] }> {\n return this.memory.listMessagesById({ messageIds });\n }\n\n async saveMessages(args: { messages: MastraDBMessage[] }): Promise<{ messages: MastraDBMessage[] }> {\n return this.memory.saveMessages(args);\n }\n\n async updateMessages({\n messages,\n }: {\n messages: (Partial<Omit<MastraDBMessage, 'createdAt'>> & {\n id: string;\n })[];\n }): Promise<MastraDBMessage[]> {\n return this.memory.updateMessages({ messages });\n }\n\n async deleteMessages(messageIds: string[]): Promise<void> {\n await this.memory.deleteMessages(messageIds);\n }\n\n async listThreadsByResourceId(\n args: StorageListThreadsByResourceIdInput,\n ): Promise<StorageListThreadsByResourceIdOutput> {\n return this.memory.listThreadsByResourceId(args);\n }\n\n async getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n return this.memory.getResourceById({ resourceId });\n }\n\n async saveResource({ resource }: { resource: StorageResourceType }): Promise<StorageResourceType> {\n return this.memory.saveResource({ resource });\n }\n\n async updateResource({\n resourceId,\n workingMemory,\n metadata,\n }: {\n resourceId: string;\n workingMemory?: string;\n metadata?: Record<string, unknown>;\n }): Promise<StorageResourceType> {\n return this.memory.updateResource({ resourceId, workingMemory, metadata });\n }\n\n async updateWorkflowResults(params: {\n workflowName: string;\n runId: string;\n stepId: string;\n result: StepResult<any, any, any, any>;\n requestContext: Record<string, any>;\n }): Promise<Record<string, StepResult<any, any, any, any>>> {\n return this.workflows.updateWorkflowResults(params);\n }\n\n async updateWorkflowState(params: {\n workflowName: string;\n runId: string;\n opts: {\n status: WorkflowRunStatus;\n result?: StepResult<any, any, any, any>;\n error?: string;\n suspendedPaths?: Record<string, number[]>;\n waitingPaths?: Record<string, number[]>;\n };\n }): Promise<WorkflowRunState | undefined> {\n return this.workflows.updateWorkflowState(params);\n }\n\n async persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId,\n snapshot,\n }: {\n workflowName: string;\n runId: string;\n resourceId?: string | undefined;\n snapshot: WorkflowRunState;\n }): Promise<void> {\n await this.workflows.persistWorkflowSnapshot({ workflowName, runId, resourceId, snapshot });\n }\n\n async loadWorkflowSnapshot({\n workflowName,\n runId,\n }: {\n workflowName: string;\n runId: string;\n }): Promise<WorkflowRunState | null> {\n return this.workflows.loadWorkflowSnapshot({ workflowName, runId });\n }\n\n async listWorkflowRuns(args?: StorageListWorkflowRunsInput): Promise<WorkflowRuns> {\n return this.workflows.listWorkflowRuns(args);\n }\n\n async getWorkflowRunById({\n runId,\n workflowName,\n }: {\n runId: string;\n workflowName?: string | undefined;\n }): Promise<WorkflowRun | null> {\n return this.workflows.getWorkflowRunById({ runId, workflowName });\n }\n\n async getScoreById({ id }: { id: string }): Promise<ScoreRowData | null> {\n return this.scores.getScoreById({ id });\n }\n\n async saveScore(score: SaveScorePayload): Promise<{ score: ScoreRowData }> {\n return this.scores.saveScore(score);\n }\n\n async listScoresByScorerId({\n scorerId,\n pagination,\n entityId,\n entityType,\n source,\n }: {\n scorerId: string;\n pagination: StoragePagination;\n entityId?: string | undefined;\n entityType?: ScoringEntityType | undefined;\n source?: ScoringSource | undefined;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.scores.listScoresByScorerId({ scorerId, pagination, entityId, entityType, source });\n }\n\n async listScoresByRunId({\n runId,\n pagination,\n }: {\n runId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.scores.listScoresByRunId({ runId, pagination });\n }\n\n async listScoresByEntityId({\n entityId,\n entityType,\n pagination,\n }: {\n pagination: StoragePagination;\n entityId: string;\n entityType: ScoringEntityType;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.scores.listScoresByEntityId({ entityId, entityType, pagination });\n }\n}\n","import crypto from 'node:crypto';\n\nimport { MastraVector } from '@mastra/core/vector';\nimport type {\n CreateIndexParams,\n DeleteIndexParams,\n DeleteVectorParams,\n DeleteVectorsParams,\n DescribeIndexParams,\n IndexStats,\n QueryResult,\n QueryVectorParams,\n UpdateVectorParams,\n UpsertVectorParams,\n} from '@mastra/core/vector';\n\nimport type { ConvexAdminClientConfig } from '../storage/client';\nimport { ConvexAdminClient } from '../storage/client';\nimport type { StorageRequest } from '../storage/types';\n\ntype VectorRecord = {\n id: string;\n embedding: number[];\n metadata?: Record<string, any>;\n};\n\ntype VectorFilter = {\n metadata?: Record<string, any>;\n};\n\nconst INDEX_METADATA_TABLE = 'mastra_vector_indexes';\n\nexport type ConvexVectorConfig = ConvexAdminClientConfig & {\n id: string;\n};\n\nexport class ConvexVector extends MastraVector<VectorFilter> {\n private readonly client: ConvexAdminClient;\n\n constructor(config: ConvexVectorConfig) {\n super({ id: config.id });\n this.client = new ConvexAdminClient(config);\n }\n\n async createIndex({ indexName, dimension }: CreateIndexParams): Promise<void> {\n await this.callStorage({\n op: 'insert',\n tableName: INDEX_METADATA_TABLE,\n record: {\n id: indexName,\n indexName,\n dimension,\n metric: 'cosine',\n createdAt: new Date().toISOString(),\n },\n });\n }\n\n async deleteIndex({ indexName }: DeleteIndexParams): Promise<void> {\n await this.callStorage({\n op: 'deleteMany',\n tableName: INDEX_METADATA_TABLE,\n ids: [indexName],\n });\n // Delete in batches since each mutation can only delete a small number of docs\n // to stay within Convex's 1-second mutation timeout.\n await this.callStorageUntilComplete({\n op: 'clearTable',\n tableName: this.vectorTable(indexName),\n });\n }\n\n async truncateIndex({ indexName }: DeleteIndexParams): Promise<void> {\n // Delete in batches since each mutation can only delete a small number of docs\n // to stay within Convex's 1-second mutation timeout.\n await this.callStorageUntilComplete({\n op: 'clearTable',\n tableName: this.vectorTable(indexName),\n });\n }\n\n async listIndexes(): Promise<string[]> {\n const indexes = await this.callStorage<{ id: string }[]>({\n op: 'queryTable',\n tableName: INDEX_METADATA_TABLE,\n });\n return indexes.map(index => index.id);\n }\n\n async describeIndex({ indexName }: DescribeIndexParams): Promise<IndexStats> {\n const index = await this.callStorage<{ dimension: number } | null>({\n op: 'load',\n tableName: INDEX_METADATA_TABLE,\n keys: { id: indexName },\n });\n if (!index) {\n throw new Error(`Index ${indexName} not found`);\n }\n\n const vectors = await this.callStorage<VectorRecord[]>({\n op: 'queryTable',\n tableName: this.vectorTable(indexName),\n });\n\n return {\n dimension: index.dimension,\n count: vectors.length,\n metric: 'cosine',\n };\n }\n\n async upsert({ indexName, vectors, ids, metadata }: UpsertVectorParams<VectorFilter>): Promise<string[]> {\n const vectorIds = ids ?? vectors.map(() => crypto.randomUUID());\n\n const records: VectorRecord[] = vectors.map((vector, i) => ({\n id: vectorIds[i]!,\n embedding: vector,\n metadata: metadata?.[i],\n }));\n\n await this.callStorage({\n op: 'batchInsert',\n tableName: this.vectorTable(indexName),\n records,\n });\n\n return vectorIds;\n }\n\n async query({\n indexName,\n queryVector,\n topK = 10,\n includeVector = false,\n filter,\n }: QueryVectorParams<VectorFilter>): Promise<QueryResult[]> {\n const vectors = await this.callStorage<VectorRecord[]>({\n op: 'queryTable',\n tableName: this.vectorTable(indexName),\n });\n\n const filtered =\n filter && !this.isEmptyFilter(filter)\n ? vectors.filter(record => this.matchesFilter(record.metadata, filter))\n : vectors;\n\n const scored = filtered\n .map(record => ({\n id: record.id,\n score: cosineSimilarity(queryVector, record.embedding),\n metadata: record.metadata,\n ...(includeVector ? { vector: record.embedding } : {}),\n }))\n .filter(result => Number.isFinite(result.score))\n .sort((a, b) => b.score - a.score)\n .slice(0, topK);\n\n return scored;\n }\n\n async updateVector(params: UpdateVectorParams<VectorFilter>): Promise<void> {\n const hasId = 'id' in params && params.id;\n const hasFilter = 'filter' in params && params.filter !== undefined;\n\n // Check for mutually exclusive parameters\n if (hasId && hasFilter) {\n throw new Error('ConvexVector.updateVector: id and filter are mutually exclusive');\n }\n\n // Check for filter-based update\n if (hasFilter) {\n const filter = params.filter as VectorFilter;\n // Check for empty filter\n if (this.isEmptyFilter(filter)) {\n throw new Error('ConvexVector.updateVector: cannot update with empty filter');\n }\n\n // Update by filter - find all matching records and update them\n const vectors = await this.callStorage<VectorRecord[]>({\n op: 'queryTable',\n tableName: this.vectorTable(params.indexName),\n });\n\n const matching = vectors.filter(record => this.matchesFilter(record.metadata, filter));\n\n for (const existing of matching) {\n const updated: VectorRecord = {\n ...existing,\n ...(params.update.vector ? { embedding: params.update.vector } : {}),\n ...(params.update.metadata ? { metadata: { ...existing.metadata, ...params.update.metadata } } : {}),\n };\n\n await this.callStorage({\n op: 'insert',\n tableName: this.vectorTable(params.indexName),\n record: updated,\n });\n }\n return;\n }\n\n // Update by id\n if (!hasId) {\n throw new Error('ConvexVector.updateVector: Either id or filter must be provided');\n }\n\n const existing = await this.callStorage<VectorRecord | null>({\n op: 'load',\n tableName: this.vectorTable(params.indexName),\n keys: { id: params.id },\n });\n if (!existing) return;\n\n const updated: VectorRecord = {\n ...existing,\n ...(params.update.vector ? { embedding: params.update.vector } : {}),\n ...(params.update.metadata ? { metadata: { ...existing.metadata, ...params.update.metadata } } : {}),\n };\n\n await this.callStorage({\n op: 'insert',\n tableName: this.vectorTable(params.indexName),\n record: updated,\n });\n }\n\n async deleteVector({ indexName, id }: DeleteVectorParams): Promise<void> {\n await this.callStorage({\n op: 'deleteMany',\n tableName: this.vectorTable(indexName),\n ids: [id],\n });\n }\n\n async deleteVectors(params: DeleteVectorsParams<VectorFilter>): Promise<void> {\n const { indexName } = params;\n const hasIds = 'ids' in params && params.ids !== undefined;\n const hasFilter = 'filter' in params && params.filter !== undefined;\n\n // Check for mutually exclusive parameters\n if (hasIds && hasFilter) {\n throw new Error('ConvexVector.deleteVectors: ids and filter are mutually exclusive');\n }\n\n // Check that at least one is provided\n if (!hasIds && !hasFilter) {\n throw new Error('ConvexVector.deleteVectors: Either filter or ids must be provided');\n }\n\n // Handle ID-based deletion\n if (hasIds) {\n const ids = params.ids as string[];\n if (ids.length === 0) {\n throw new Error('ConvexVector.deleteVectors: cannot delete with empty ids array');\n }\n await this.callStorage({\n op: 'deleteMany',\n tableName: this.vectorTable(indexName),\n ids,\n });\n return;\n }\n\n // Handle filter-based deletion\n const filter = params.filter as VectorFilter;\n if (this.isEmptyFilter(filter)) {\n throw new Error('ConvexVector.deleteVectors: cannot delete with empty filter');\n }\n\n // Find all matching vectors and delete them\n const vectors = await this.callStorage<VectorRecord[]>({\n op: 'queryTable',\n tableName: this.vectorTable(indexName),\n });\n\n const matchingIds = vectors.filter(record => this.matchesFilter(record.metadata, filter)).map(record => record.id);\n\n if (matchingIds.length > 0) {\n await this.callStorage({\n op: 'deleteMany',\n tableName: this.vectorTable(indexName),\n ids: matchingIds,\n });\n }\n }\n\n private vectorTable(indexName: string) {\n return `mastra_vector_${indexName}`;\n }\n\n private isEmptyFilter(filter: VectorFilter | Record<string, any>): boolean {\n if (!filter) return true;\n return Object.keys(filter).length === 0;\n }\n\n private matchesFilter(\n recordMetadata: Record<string, any> | undefined,\n filter: VectorFilter | Record<string, any>,\n ): boolean {\n if (!recordMetadata) return false;\n if (!filter || Object.keys(filter).length === 0) return true;\n\n // Handle VectorFilter with metadata property\n if ('metadata' in filter && filter.metadata) {\n return this.matchesFilterConditions(recordMetadata, filter.metadata);\n }\n\n // Handle direct filter conditions\n return this.matchesFilterConditions(recordMetadata, filter);\n }\n\n private matchesFilterConditions(recordMetadata: Record<string, any>, conditions: Record<string, any>): boolean {\n for (const [key, value] of Object.entries(conditions)) {\n // Handle $and operator\n if (key === '$and' && Array.isArray(value)) {\n const allMatch = value.every((cond: Record<string, any>) => this.matchesFilterConditions(recordMetadata, cond));\n if (!allMatch) return false;\n continue;\n }\n\n // Handle $or operator\n if (key === '$or' && Array.isArray(value)) {\n const anyMatch = value.some((cond: Record<string, any>) => this.matchesFilterConditions(recordMetadata, cond));\n if (!anyMatch) return false;\n continue;\n }\n\n // Handle $in operator\n if (typeof value === 'object' && value !== null && '$in' in value) {\n if (!Array.isArray(value.$in) || !value.$in.includes(recordMetadata[key])) {\n return false;\n }\n continue;\n }\n\n // Handle $nin operator\n if (typeof value === 'object' && value !== null && '$nin' in value) {\n if (Array.isArray(value.$nin) && value.$nin.includes(recordMetadata[key])) {\n return false;\n }\n continue;\n }\n\n // Handle $gt operator\n if (typeof value === 'object' && value !== null && '$gt' in value) {\n if (!(recordMetadata[key] > value.$gt)) {\n return false;\n }\n continue;\n }\n\n // Handle $gte operator\n if (typeof value === 'object' && value !== null && '$gte' in value) {\n if (!(recordMetadata[key] >= value.$gte)) {\n return false;\n }\n continue;\n }\n\n // Handle $lt operator\n if (typeof value === 'object' && value !== null && '$lt' in value) {\n if (!(recordMetadata[key] < value.$lt)) {\n return false;\n }\n continue;\n }\n\n // Handle $lte operator\n if (typeof value === 'object' && value !== null && '$lte' in value) {\n if (!(recordMetadata[key] <= value.$lte)) {\n return false;\n }\n continue;\n }\n\n // Handle $ne operator\n if (typeof value === 'object' && value !== null && '$ne' in value) {\n if (recordMetadata[key] === value.$ne) {\n return false;\n }\n continue;\n }\n\n // Handle simple equality\n if (recordMetadata[key] !== value) {\n return false;\n }\n }\n\n return true;\n }\n\n private async callStorage<T = any>(request: StorageRequest): Promise<T> {\n return this.client.callStorage<T>(request);\n }\n\n /**\n * Call storage repeatedly until hasMore is false.\n * Use for bulk operations like clearTable that may need multiple batches.\n */\n private async callStorageUntilComplete(request: StorageRequest): Promise<void> {\n let hasMore = true;\n while (hasMore) {\n const response = await this.client.callStorageRaw(request);\n hasMore = response.hasMore ?? false;\n }\n }\n}\n\nfunction cosineSimilarity(a: number[], b: number[]): number {\n if (a.length !== b.length) {\n return -1;\n }\n\n let dot = 0;\n let magA = 0;\n let magB = 0;\n\n for (let i = 0; i < a.length; i++) {\n const aVal = a[i] ?? 0;\n const bVal = b[i] ?? 0;\n dot += aVal * bVal;\n magA += aVal * aVal;\n magB += bVal * bVal;\n }\n\n if (magA === 0 || magB === 0) {\n return -1;\n }\n\n return dot / (Math.sqrt(magA) * Math.sqrt(magB));\n}\n"]}
1
+ {"version":3,"sources":["../src/storage/client.ts","../src/storage/domains/memory.ts","../src/storage/domains/scores.ts","../src/storage/domains/workflows.ts","../src/storage/operations.ts","../src/storage/index.ts","../src/vector/index.ts"],"names":["TABLE_THREADS","TABLE_MESSAGES","TABLE_RESOURCES","TABLE_SCORERS","MastraError","createStorageErrorId","ErrorDomain","ErrorCategory","TABLE_WORKFLOW_SNAPSHOT","normalizePerPage","crypto","existing","updated"],"mappings":"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","file":"index.js","sourcesContent":["import type { StorageRequest, StorageResponse } from './types';\n\nexport type ConvexAdminClientConfig = {\n deploymentUrl: string;\n adminAuthToken: string;\n storageFunction?: string;\n};\n\n/** Response from callStorageRaw that includes batch info */\nexport type RawStorageResult<T = any> = {\n result: T;\n hasMore?: boolean;\n};\n\nconst DEFAULT_STORAGE_FUNCTION = 'mastra/storage:handle';\n\nexport class ConvexAdminClient {\n private readonly deploymentUrl: string;\n private readonly adminAuthToken: string;\n private readonly storageFunction: string;\n\n constructor({ deploymentUrl, adminAuthToken, storageFunction }: ConvexAdminClientConfig) {\n if (!deploymentUrl) {\n throw new Error('ConvexAdminClient: deploymentUrl is required.');\n }\n\n if (!adminAuthToken) {\n throw new Error('ConvexAdminClient: adminAuthToken is required.');\n }\n\n this.deploymentUrl = deploymentUrl.replace(/\\/$/, ''); // Remove trailing slash\n this.adminAuthToken = adminAuthToken;\n this.storageFunction = storageFunction ?? DEFAULT_STORAGE_FUNCTION;\n }\n\n /**\n * Call storage and return the full response including hasMore flag.\n * Use this for operations that may need multiple calls (e.g., clearTable).\n */\n async callStorageRaw<T = any>(request: StorageRequest): Promise<RawStorageResult<T>> {\n // Use Convex HTTP API directly with admin auth\n const url = `${this.deploymentUrl}/api/mutation`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Convex ${this.adminAuthToken}`,\n },\n body: JSON.stringify({\n path: this.storageFunction,\n args: request,\n format: 'json',\n }),\n });\n\n if (!response.ok) {\n const text = await response.text();\n throw new Error(`Convex API error: ${response.status} ${text}`);\n }\n\n const result = (await response.json()) as {\n status?: string;\n errorMessage?: string;\n errorCode?: string;\n value?: StorageResponse;\n };\n\n // Handle Convex response format\n if (result.status === 'error') {\n const error = new Error(result.errorMessage || 'Unknown Convex error');\n (error as any).code = result.errorCode;\n throw error;\n }\n\n const storageResponse = result.value as StorageResponse;\n if (!storageResponse?.ok) {\n const errResponse = storageResponse as { ok: false; error: string; code?: string; details?: Record<string, any> };\n const error = new Error(errResponse?.error || 'Unknown Convex storage error');\n (error as any).code = errResponse?.code;\n (error as any).details = errResponse?.details;\n throw error;\n }\n\n return {\n result: storageResponse.result as T,\n hasMore: storageResponse.hasMore,\n };\n }\n\n async callStorage<T = any>(request: StorageRequest): Promise<T> {\n const { result } = await this.callStorageRaw<T>(request);\n return result;\n }\n}\n","import { MessageList } from '@mastra/core/agent';\nimport type { MastraMessageContentV2 } from '@mastra/core/agent';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { MastraDBMessage, StorageThreadType } from '@mastra/core/memory';\nimport {\n MemoryStorage,\n TABLE_MESSAGES,\n TABLE_RESOURCES,\n TABLE_THREADS,\n calculatePagination,\n createStorageErrorId,\n normalizePerPage,\n safelyParseJSON,\n} from '@mastra/core/storage';\nimport type {\n StorageListMessagesInput,\n StorageListMessagesOutput,\n StorageListThreadsByResourceIdInput,\n StorageListThreadsByResourceIdOutput,\n StorageResourceType,\n} from '@mastra/core/storage';\n\nimport type { StoreOperationsConvex } from '../operations';\n\ntype StoredMessage = {\n id: string;\n thread_id: string;\n content: string;\n role: string;\n type: string;\n createdAt: string;\n resourceId: string | null;\n};\n\nexport class MemoryConvex extends MemoryStorage {\n constructor(private readonly operations: StoreOperationsConvex) {\n super();\n }\n\n async getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null> {\n const row = await this.operations.load<\n (Omit<StorageThreadType, 'createdAt' | 'updatedAt'> & { createdAt: string; updatedAt: string }) | null\n >({\n tableName: TABLE_THREADS,\n keys: { id: threadId },\n });\n\n if (!row) return null;\n\n return {\n ...row,\n metadata: typeof row.metadata === 'string' ? JSON.parse(row.metadata) : row.metadata,\n createdAt: new Date(row.createdAt),\n updatedAt: new Date(row.updatedAt),\n };\n }\n\n async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n await this.operations.insert({\n tableName: TABLE_THREADS,\n record: {\n ...thread,\n metadata: thread.metadata ?? {},\n },\n });\n return thread;\n }\n\n async updateThread({\n id,\n title,\n metadata,\n }: {\n id: string;\n title: string;\n metadata: Record<string, unknown>;\n }): Promise<StorageThreadType> {\n const existing = await this.getThreadById({ threadId: id });\n if (!existing) {\n throw new MastraError({\n id: createStorageErrorId('CONVEX', 'UPDATE_THREAD', 'THREAD_NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Thread ${id} not found`,\n });\n }\n\n const updated: StorageThreadType = {\n ...existing,\n title,\n metadata: {\n ...existing.metadata,\n ...metadata,\n },\n updatedAt: new Date(),\n };\n\n await this.saveThread({ thread: updated });\n return updated;\n }\n\n async deleteThread({ threadId }: { threadId: string }): Promise<void> {\n const messages = await this.operations.queryTable<StoredMessage>(TABLE_MESSAGES, [\n { field: 'thread_id', value: threadId },\n ]);\n await this.operations.deleteMany(\n TABLE_MESSAGES,\n messages.map(msg => msg.id),\n );\n await this.operations.deleteMany(TABLE_THREADS, [threadId]);\n }\n\n async listThreadsByResourceId(\n args: StorageListThreadsByResourceIdInput,\n ): Promise<StorageListThreadsByResourceIdOutput> {\n const { resourceId, page = 0, perPage: perPageInput, orderBy } = args;\n const perPage = normalizePerPage(perPageInput, 100);\n const { field, direction } = this.parseOrderBy(orderBy);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n const rows = await this.operations.queryTable<\n Omit<StorageThreadType, 'createdAt' | 'updatedAt'> & { createdAt: string; updatedAt: string }\n >(TABLE_THREADS, [{ field: 'resourceId', value: resourceId }]);\n\n const threads = rows.map(row => ({\n ...row,\n metadata: typeof row.metadata === 'string' ? JSON.parse(row.metadata) : row.metadata,\n createdAt: new Date(row.createdAt),\n updatedAt: new Date(row.updatedAt),\n }));\n\n threads.sort((a, b) => {\n const aValue = a[field];\n const bValue = b[field];\n const aTime = aValue instanceof Date ? aValue.getTime() : new Date(aValue as any).getTime();\n const bTime = bValue instanceof Date ? bValue.getTime() : new Date(bValue as any).getTime();\n return direction === 'ASC' ? aTime - bTime : bTime - aTime;\n });\n\n const total = threads.length;\n const paginated = perPageInput === false ? threads : threads.slice(offset, offset + perPage);\n\n return {\n threads: paginated,\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n }\n\n async listMessages(args: StorageListMessagesInput): Promise<StorageListMessagesOutput> {\n const { threadId, resourceId, include, filter, perPage: perPageInput, page = 0, orderBy } = args;\n\n // Normalize threadId to array\n const threadIds = Array.isArray(threadId) ? threadId : [threadId];\n\n if (threadIds.length === 0 || threadIds.some(id => !id.trim())) {\n throw new MastraError(\n {\n id: createStorageErrorId('CONVEX', 'LIST_MESSAGES', 'INVALID_THREAD_ID'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { threadId: Array.isArray(threadId) ? threadId.join(',') : threadId },\n },\n new Error('threadId must be a non-empty string or array of non-empty strings'),\n );\n }\n\n const perPage = normalizePerPage(perPageInput, 40);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const { field, direction } = this.parseOrderBy(orderBy, 'ASC');\n\n // Fetch messages from all threads\n let rows: StoredMessage[] = [];\n for (const tid of threadIds) {\n const threadRows = await this.operations.queryTable<StoredMessage>(TABLE_MESSAGES, [\n { field: 'thread_id', value: tid },\n ]);\n rows.push(...threadRows);\n }\n\n if (resourceId) {\n rows = rows.filter(row => row.resourceId === resourceId);\n }\n\n if (filter?.dateRange) {\n const { start, end } = filter.dateRange;\n rows = rows.filter(row => {\n const created = new Date(row.createdAt).getTime();\n if (start && created < start.getTime()) return false;\n if (end && created > end.getTime()) return false;\n return true;\n });\n }\n\n rows.sort((a, b) => {\n const aValue =\n field === 'createdAt' || field === 'updatedAt'\n ? new Date((a as Record<string, any>)[field]).getTime()\n : (a as Record<string, any>)[field];\n const bValue =\n field === 'createdAt' || field === 'updatedAt'\n ? new Date((b as Record<string, any>)[field]).getTime()\n : (b as Record<string, any>)[field];\n if (typeof aValue === 'number' && typeof bValue === 'number') {\n return direction === 'ASC' ? aValue - bValue : bValue - aValue;\n }\n return direction === 'ASC'\n ? String(aValue).localeCompare(String(bValue))\n : String(bValue).localeCompare(String(aValue));\n });\n\n const totalThreadMessages = rows.length;\n const paginatedRows = perPageInput === false ? rows : rows.slice(offset, offset + perPage);\n const messages = paginatedRows.map(row => this.parseStoredMessage(row));\n const messageIds = new Set(messages.map(msg => msg.id));\n\n if (include && include.length > 0) {\n // Cache messages from threads as needed\n const threadMessagesCache = new Map<string, StoredMessage[]>();\n // Pre-populate cache with already-fetched thread messages\n for (const tid of threadIds) {\n const tidRows = rows.filter(r => r.thread_id === tid);\n threadMessagesCache.set(tid, tidRows);\n }\n\n for (const includeItem of include) {\n // First, find the message to get its threadId\n let targetThreadId: string | undefined;\n let target: StoredMessage | undefined;\n\n // Check in cached threads first\n for (const [tid, cachedRows] of threadMessagesCache) {\n target = cachedRows.find(row => row.id === includeItem.id);\n if (target) {\n targetThreadId = tid;\n break;\n }\n }\n\n // If not found, query by message ID directly\n if (!target) {\n const messageRows = await this.operations.queryTable<StoredMessage>(TABLE_MESSAGES, [\n { field: 'id', value: includeItem.id },\n ]);\n if (messageRows.length > 0) {\n target = messageRows[0];\n targetThreadId = target!.thread_id;\n\n // Cache the thread's messages for context lookup\n if (targetThreadId && !threadMessagesCache.has(targetThreadId)) {\n const otherThreadRows = await this.operations.queryTable<StoredMessage>(TABLE_MESSAGES, [\n { field: 'thread_id', value: targetThreadId },\n ]);\n threadMessagesCache.set(targetThreadId, otherThreadRows);\n }\n }\n }\n\n if (!target || !targetThreadId) continue;\n\n if (!messageIds.has(target.id)) {\n messages.push(this.parseStoredMessage(target));\n messageIds.add(target.id);\n }\n\n const targetThreadRows = threadMessagesCache.get(targetThreadId) || [];\n await this.addContextMessages({\n includeItem,\n allMessages: targetThreadRows,\n targetThreadId,\n messageIds,\n messages,\n });\n }\n }\n\n messages.sort((a, b) => {\n const aValue =\n field === 'createdAt' || field === 'updatedAt' ? new Date((a as any)[field]).getTime() : (a as any)[field];\n const bValue =\n field === 'createdAt' || field === 'updatedAt' ? new Date((b as any)[field]).getTime() : (b as any)[field];\n if (typeof aValue === 'number' && typeof bValue === 'number') {\n return direction === 'ASC' ? aValue - bValue : bValue - aValue;\n }\n return direction === 'ASC'\n ? String(aValue).localeCompare(String(bValue))\n : String(bValue).localeCompare(String(aValue));\n });\n\n const hasMore =\n include && include.length > 0\n ? new Set(messages.filter(m => m.threadId === threadId).map(m => m.id)).size < totalThreadMessages\n : perPageInput === false\n ? false\n : offset + perPage < totalThreadMessages;\n\n return {\n messages,\n total: totalThreadMessages,\n page,\n perPage: perPageForResponse,\n hasMore,\n };\n }\n\n async listMessagesById({ messageIds }: { messageIds: string[] }): Promise<{ messages: MastraDBMessage[] }> {\n if (messageIds.length === 0) {\n return { messages: [] };\n }\n const rows = await this.operations.queryTable<StoredMessage>(TABLE_MESSAGES, undefined);\n const filtered = rows.filter(row => messageIds.includes(row.id)).map(row => this.parseStoredMessage(row));\n const list = new MessageList().add(filtered, 'memory');\n return { messages: list.get.all.db() };\n }\n\n async saveMessages({ messages }: { messages: MastraDBMessage[] }): Promise<{ messages: MastraDBMessage[] }> {\n if (messages.length === 0) return { messages: [] };\n\n const normalized = messages.map(message => {\n if (!message.threadId) {\n throw new Error('Thread ID is required');\n }\n if (!message.resourceId) {\n throw new Error('Resource ID is required');\n }\n const createdAt = message.createdAt instanceof Date ? message.createdAt.toISOString() : message.createdAt;\n return {\n id: message.id,\n thread_id: message.threadId,\n content: JSON.stringify(message.content),\n role: message.role,\n type: message.type || 'v2',\n createdAt,\n resourceId: message.resourceId,\n };\n });\n\n await this.operations.batchInsert({\n tableName: TABLE_MESSAGES,\n records: normalized,\n });\n\n // Update thread updatedAt timestamps for all affected threads\n const threadIds = [...new Set(messages.map(m => m.threadId).filter(Boolean) as string[])];\n const now = new Date();\n for (const threadId of threadIds) {\n const thread = await this.getThreadById({ threadId });\n if (thread) {\n await this.operations.insert({\n tableName: TABLE_THREADS,\n record: {\n ...thread,\n id: thread.id,\n updatedAt: now.toISOString(),\n createdAt: thread.createdAt instanceof Date ? thread.createdAt.toISOString() : thread.createdAt,\n metadata: thread.metadata ?? {},\n },\n });\n }\n }\n\n const list = new MessageList().add(messages, 'memory');\n return { messages: list.get.all.db() };\n }\n\n async updateMessages({\n messages,\n }: {\n messages: (Partial<Omit<MastraDBMessage, 'createdAt'>> & {\n id: string;\n content?: { metadata?: MastraMessageContentV2['metadata']; content?: MastraMessageContentV2['content'] };\n })[];\n }): Promise<MastraDBMessage[]> {\n if (messages.length === 0) return [];\n\n const existing = await this.operations.queryTable<StoredMessage>(TABLE_MESSAGES, undefined);\n const updated: MastraDBMessage[] = [];\n const affectedThreadIds = new Set<string>();\n\n for (const update of messages) {\n const current = existing.find(row => row.id === update.id);\n if (!current) continue;\n\n // Track old thread for timestamp update\n affectedThreadIds.add(current.thread_id);\n\n if (update.threadId) {\n // Track new thread for timestamp update when moving messages\n affectedThreadIds.add(update.threadId);\n current.thread_id = update.threadId;\n }\n if (update.resourceId !== undefined) {\n current.resourceId = update.resourceId ?? null;\n }\n if (update.role) {\n current.role = update.role;\n }\n if (update.type) {\n current.type = update.type;\n }\n if (update.content) {\n const existingContent = safelyParseJSON(current.content) || {};\n const mergedContent = {\n ...existingContent,\n ...update.content,\n ...(existingContent.metadata && update.content.metadata\n ? { metadata: { ...existingContent.metadata, ...update.content.metadata } }\n : {}),\n };\n current.content = JSON.stringify(mergedContent);\n }\n\n await this.operations.insert({\n tableName: TABLE_MESSAGES,\n record: current,\n });\n updated.push(this.parseStoredMessage(current));\n }\n\n // Update thread updatedAt timestamps for all affected threads\n const now = new Date();\n for (const threadId of affectedThreadIds) {\n const thread = await this.getThreadById({ threadId });\n if (thread) {\n await this.operations.insert({\n tableName: TABLE_THREADS,\n record: {\n ...thread,\n id: thread.id,\n updatedAt: now.toISOString(),\n createdAt: thread.createdAt instanceof Date ? thread.createdAt.toISOString() : thread.createdAt,\n metadata: thread.metadata ?? {},\n },\n });\n }\n }\n\n return updated;\n }\n\n async deleteMessages(messageIds: string[]): Promise<void> {\n await this.operations.deleteMany(TABLE_MESSAGES, messageIds);\n }\n\n async saveResource({ resource }: { resource: StorageResourceType }): Promise<StorageResourceType> {\n const record: Record<string, unknown> = {\n ...resource,\n createdAt: resource.createdAt instanceof Date ? resource.createdAt.toISOString() : resource.createdAt,\n updatedAt: resource.updatedAt instanceof Date ? resource.updatedAt.toISOString() : resource.updatedAt,\n };\n // Only include metadata if it's defined\n if (resource.metadata !== undefined) {\n record.metadata = resource.metadata;\n }\n await this.operations.insert({\n tableName: TABLE_RESOURCES,\n record,\n });\n return resource;\n }\n\n async getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n const record = await this.operations.load<\n (Omit<StorageResourceType, 'createdAt' | 'updatedAt'> & { createdAt: string; updatedAt: string }) | null\n >({\n tableName: TABLE_RESOURCES,\n keys: { id: resourceId },\n });\n if (!record) return null;\n\n return {\n ...record,\n metadata: typeof record.metadata === 'string' ? safelyParseJSON(record.metadata) : record.metadata,\n createdAt: new Date(record.createdAt),\n updatedAt: new Date(record.updatedAt),\n };\n }\n\n async updateResource({\n resourceId,\n workingMemory,\n metadata,\n }: {\n resourceId: string;\n workingMemory?: string;\n metadata?: Record<string, unknown>;\n }): Promise<StorageResourceType> {\n const existing = await this.getResourceById({ resourceId });\n const now = new Date();\n if (!existing) {\n const created: StorageResourceType = {\n id: resourceId,\n workingMemory,\n metadata: metadata ?? {},\n createdAt: now,\n updatedAt: now,\n };\n return this.saveResource({ resource: created });\n }\n\n const updated: StorageResourceType = {\n ...existing,\n workingMemory: workingMemory ?? existing.workingMemory,\n metadata: {\n ...existing.metadata,\n ...metadata,\n },\n updatedAt: now,\n };\n\n await this.saveResource({ resource: updated });\n return updated;\n }\n\n private parseStoredMessage(message: StoredMessage): MastraDBMessage {\n const content = safelyParseJSON(message.content);\n return {\n id: message.id,\n threadId: message.thread_id,\n content,\n role: message.role as MastraDBMessage['role'],\n type: message.type,\n createdAt: new Date(message.createdAt),\n resourceId: message.resourceId ?? undefined,\n };\n }\n\n private async addContextMessages({\n includeItem,\n allMessages,\n targetThreadId,\n messageIds,\n messages,\n }: {\n includeItem: NonNullable<StorageListMessagesInput['include']>[number];\n allMessages: StoredMessage[];\n targetThreadId: string;\n messageIds: Set<string>;\n messages: MastraDBMessage[];\n }): Promise<void> {\n const ordered = allMessages\n .filter(row => row.thread_id === targetThreadId)\n .sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());\n\n const targetIndex = ordered.findIndex(row => row.id === includeItem.id);\n if (targetIndex === -1) return;\n\n if (includeItem.withPreviousMessages) {\n const start = Math.max(0, targetIndex - includeItem.withPreviousMessages);\n for (let i = start; i < targetIndex; i++) {\n const row = ordered[i];\n if (row && !messageIds.has(row.id)) {\n messages.push(this.parseStoredMessage(row));\n messageIds.add(row.id);\n }\n }\n }\n\n if (includeItem.withNextMessages) {\n const end = Math.min(ordered.length, targetIndex + includeItem.withNextMessages + 1);\n for (let i = targetIndex + 1; i < end; i++) {\n const row = ordered[i];\n if (row && !messageIds.has(row.id)) {\n messages.push(this.parseStoredMessage(row));\n messageIds.add(row.id);\n }\n }\n }\n }\n}\n","import crypto from 'node:crypto';\n\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { SaveScorePayload, ScoreRowData, ScoringEntityType, ScoringSource } from '@mastra/core/evals';\nimport { TABLE_SCORERS, ScoresStorage, createStorageErrorId } from '@mastra/core/storage';\nimport type { PaginationInfo, StoragePagination } from '@mastra/core/storage';\n\nimport type { StoreOperationsConvex } from '../operations';\n\ntype StoredScore = Omit<ScoreRowData, 'createdAt' | 'updatedAt'> & {\n createdAt: string;\n updatedAt: string;\n};\n\nexport class ScoresConvex extends ScoresStorage {\n constructor(private readonly operations: StoreOperationsConvex) {\n super();\n }\n\n async getScoreById({ id }: { id: string }): Promise<ScoreRowData | null> {\n const row = await this.operations.load<StoredScore | null>({\n tableName: TABLE_SCORERS,\n keys: { id },\n });\n return row ? this.deserialize(row) : null;\n }\n\n async saveScore(score: SaveScorePayload): Promise<{ score: ScoreRowData }> {\n const now = new Date();\n const record = {\n ...score,\n id: crypto.randomUUID(),\n createdAt: now.toISOString(),\n updatedAt: now.toISOString(),\n } as StoredScore;\n\n await this.operations.insert({\n tableName: TABLE_SCORERS,\n record,\n });\n\n return { score: this.deserialize(record) };\n }\n\n async listScoresByScorerId({\n scorerId,\n pagination,\n entityId,\n entityType,\n source,\n }: {\n scorerId: string;\n pagination: StoragePagination;\n entityId?: string;\n entityType?: ScoringEntityType;\n source?: ScoringSource;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.listScores({\n filters: { scorerId, entityId, entityType, source },\n pagination,\n });\n }\n\n async listScoresByRunId({\n runId,\n pagination,\n }: {\n runId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.listScores({\n filters: { runId },\n pagination,\n });\n }\n\n async listScoresByEntityId({\n entityId,\n entityType,\n pagination,\n }: {\n entityId: string;\n entityType: ScoringEntityType;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.listScores({\n filters: { entityId, entityType },\n pagination,\n });\n }\n\n private async listScores({\n filters,\n pagination,\n }: {\n filters: Partial<Pick<ScoreRowData, 'scorerId' | 'entityId' | 'entityType' | 'runId' | 'source'>>;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n if (pagination.page < 0) {\n throw new MastraError(\n {\n id: createStorageErrorId('CONVEX', 'LIST_SCORES', 'INVALID_PAGINATION'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n },\n new Error('page must be >= 0'),\n );\n }\n\n const rows = await this.operations.queryTable<StoredScore>(TABLE_SCORERS, undefined);\n const filtered = rows\n .filter(row => (filters.scorerId ? row.scorerId === filters.scorerId : true))\n .filter(row => (filters.entityId ? row.entityId === filters.entityId : true))\n .filter(row => (filters.entityType ? row.entityType === filters.entityType : true))\n .filter(row => (filters.runId ? row.runId === filters.runId : true))\n .filter(row => (filters.source ? row.source === filters.source : true))\n .sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());\n\n const { perPage, page } = pagination;\n const perPageValue = perPage === false ? filtered.length : perPage;\n const start = perPage === false ? 0 : page * perPageValue;\n const end = perPage === false ? filtered.length : start + perPageValue;\n const slice = filtered.slice(start, end).map(row => this.deserialize(row));\n\n return {\n pagination: {\n total: filtered.length,\n page,\n perPage,\n hasMore: perPage === false ? false : end < filtered.length,\n },\n scores: slice,\n };\n }\n\n private deserialize(row: StoredScore): ScoreRowData {\n return {\n ...(row as unknown as ScoreRowData),\n createdAt: new Date(row.createdAt),\n updatedAt: new Date(row.updatedAt),\n };\n }\n}\n","import { TABLE_WORKFLOW_SNAPSHOT, normalizePerPage, WorkflowsStorage } from '@mastra/core/storage';\nimport type { StorageListWorkflowRunsInput, StorageWorkflowRun, WorkflowRun, WorkflowRuns } from '@mastra/core/storage';\nimport type { StepResult, WorkflowRunState, WorkflowRunStatus } from '@mastra/core/workflows';\n\nimport type { StoreOperationsConvex } from '../operations';\n\ntype RawWorkflowRun = Omit<StorageWorkflowRun, 'createdAt' | 'updatedAt' | 'snapshot'> & {\n createdAt: string;\n updatedAt: string;\n snapshot: WorkflowRunState | string;\n};\n\nexport class WorkflowsConvex extends WorkflowsStorage {\n constructor(private readonly operations: StoreOperationsConvex) {\n super();\n }\n\n async updateWorkflowResults({\n workflowName,\n runId,\n stepId,\n result,\n requestContext,\n }: {\n workflowName: string;\n runId: string;\n stepId: string;\n result: StepResult<any, any, any, any>;\n requestContext: Record<string, any>;\n }): Promise<Record<string, StepResult<any, any, any, any>>> {\n const run = await this.getRun(workflowName, runId);\n if (!run) return {};\n\n const snapshot = this.ensureSnapshot(run);\n snapshot.context = snapshot.context || {};\n snapshot.context[stepId] = result;\n snapshot.requestContext = { ...(snapshot.requestContext || {}), ...requestContext };\n\n await this.persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId: run.resourceId,\n snapshot,\n });\n\n return JSON.parse(JSON.stringify(snapshot.context));\n }\n\n async updateWorkflowState({\n workflowName,\n runId,\n opts,\n }: {\n workflowName: string;\n runId: string;\n opts: {\n status: WorkflowRunStatus;\n result?: StepResult<any, any, any, any>;\n error?: string;\n suspendedPaths?: Record<string, number[]>;\n waitingPaths?: Record<string, number[]>;\n };\n }): Promise<WorkflowRunState | undefined> {\n const run = await this.getRun(workflowName, runId);\n if (!run) return undefined;\n\n const snapshot = this.ensureSnapshot(run);\n const updated: WorkflowRunState = { ...snapshot, ...opts };\n\n await this.persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId: run.resourceId,\n snapshot: updated,\n });\n\n return updated;\n }\n\n async persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId,\n snapshot,\n }: {\n workflowName: string;\n runId: string;\n resourceId?: string;\n snapshot: WorkflowRunState;\n }): Promise<void> {\n const now = new Date();\n // Check if a record already exists to preserve createdAt\n const existing = await this.operations.load<{ createdAt?: string } | null>({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n keys: { workflow_name: workflowName, run_id: runId },\n });\n\n await this.operations.insert({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n record: {\n workflow_name: workflowName,\n run_id: runId,\n resourceId,\n snapshot,\n createdAt: existing?.createdAt ?? now.toISOString(),\n updatedAt: now.toISOString(),\n },\n });\n }\n\n async loadWorkflowSnapshot({\n workflowName,\n runId,\n }: {\n workflowName: string;\n runId: string;\n }): Promise<WorkflowRunState | null> {\n const row = await this.operations.load<{ snapshot: WorkflowRunState | string } | null>({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n keys: { workflow_name: workflowName, run_id: runId },\n });\n\n if (!row) return null;\n return typeof row.snapshot === 'string' ? JSON.parse(row.snapshot) : JSON.parse(JSON.stringify(row.snapshot));\n }\n\n async listWorkflowRuns(args: StorageListWorkflowRunsInput = {}): Promise<WorkflowRuns> {\n const { workflowName, fromDate, toDate, perPage, page, resourceId, status } = args;\n\n let rows = await this.operations.queryTable<RawWorkflowRun>(TABLE_WORKFLOW_SNAPSHOT, undefined);\n\n if (workflowName) rows = rows.filter(run => run.workflow_name === workflowName);\n if (resourceId) rows = rows.filter(run => run.resourceId === resourceId);\n if (fromDate) rows = rows.filter(run => new Date(run.createdAt).getTime() >= fromDate.getTime());\n if (toDate) rows = rows.filter(run => new Date(run.createdAt).getTime() <= toDate.getTime());\n if (status) {\n rows = rows.filter(run => {\n const snapshot = this.ensureSnapshot(run);\n return snapshot.status === status;\n });\n }\n\n const total = rows.length;\n rows.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());\n\n if (perPage !== undefined && page !== undefined) {\n const normalized = normalizePerPage(perPage, Number.MAX_SAFE_INTEGER);\n const offset = page * normalized;\n rows = rows.slice(offset, offset + normalized);\n }\n\n const runs: WorkflowRun[] = rows.map(run => ({\n workflowName: run.workflow_name,\n runId: run.run_id,\n snapshot: this.ensureSnapshot(run),\n createdAt: new Date(run.createdAt),\n updatedAt: new Date(run.updatedAt),\n resourceId: run.resourceId,\n }));\n\n return { runs, total };\n }\n\n async getWorkflowRunById({\n runId,\n workflowName,\n }: {\n runId: string;\n workflowName?: string;\n }): Promise<WorkflowRun | null> {\n const runs = await this.operations.queryTable<RawWorkflowRun>(TABLE_WORKFLOW_SNAPSHOT, undefined);\n const match = runs.find(run => run.run_id === runId && (!workflowName || run.workflow_name === workflowName));\n if (!match) return null;\n\n return {\n workflowName: match.workflow_name,\n runId: match.run_id,\n snapshot: this.ensureSnapshot(match),\n createdAt: new Date(match.createdAt),\n updatedAt: new Date(match.updatedAt),\n resourceId: match.resourceId,\n };\n }\n\n async deleteWorkflowRunById({ runId, workflowName }: { runId: string; workflowName: string }): Promise<void> {\n await this.operations.deleteMany(TABLE_WORKFLOW_SNAPSHOT, [`${workflowName}-${runId}`]);\n }\n\n private async getRun(workflowName: string, runId: string): Promise<RawWorkflowRun | null> {\n const runs = await this.operations.queryTable<RawWorkflowRun>(TABLE_WORKFLOW_SNAPSHOT, [\n { field: 'workflow_name', value: workflowName },\n ]);\n return runs.find(run => run.run_id === runId) ?? null;\n }\n\n private ensureSnapshot(run: { snapshot: WorkflowRunState | string }): WorkflowRunState {\n if (!run.snapshot) {\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\n if (typeof run.snapshot === 'string') {\n return JSON.parse(run.snapshot);\n }\n\n return JSON.parse(JSON.stringify(run.snapshot));\n }\n}\n","import crypto from 'node:crypto';\n\nimport { TABLE_WORKFLOW_SNAPSHOT, StoreOperations } from '@mastra/core/storage';\nimport type { TABLE_NAMES, StorageColumn } from '@mastra/core/storage';\n\nimport type { ConvexAdminClient } from './client';\nimport type { EqualityFilter } from './types';\n\nexport class StoreOperationsConvex extends StoreOperations {\n constructor(private readonly client: ConvexAdminClient) {\n super();\n }\n\n async hasColumn(_table: string, _column: string): Promise<boolean> {\n return true;\n }\n\n async createTable(_args: { tableName: TABLE_NAMES; schema: Record<string, StorageColumn> }): Promise<void> {\n // No-op for Convex; schema is managed server-side.\n }\n\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n // Delete in batches since each mutation can only delete a small number of docs\n // to stay within Convex's 1-second mutation timeout.\n let hasMore = true;\n while (hasMore) {\n const response = await this.client.callStorageRaw({\n op: 'clearTable',\n tableName,\n });\n hasMore = response.hasMore ?? false;\n }\n }\n\n async dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n // Delete in batches since each mutation can only delete a small number of docs\n // to stay within Convex's 1-second mutation timeout.\n let hasMore = true;\n while (hasMore) {\n const response = await this.client.callStorageRaw({\n op: 'dropTable',\n tableName,\n });\n hasMore = response.hasMore ?? false;\n }\n }\n\n async alterTable(_args: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void> {\n // No-op; columns are implicit in Convex documents.\n }\n\n async insert({ tableName, record }: { tableName: TABLE_NAMES; record: Record<string, any> }): Promise<void> {\n await this.client.callStorage({\n op: 'insert',\n tableName,\n record: this.normalizeRecord(tableName, record),\n });\n }\n\n async batchInsert({ tableName, records }: { tableName: TABLE_NAMES; records: Record<string, any>[] }): Promise<void> {\n if (records.length === 0) return;\n\n await this.client.callStorage({\n op: 'batchInsert',\n tableName,\n records: records.map(record => this.normalizeRecord(tableName, record)),\n });\n }\n\n async load<R>({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, any> }): Promise<R | null> {\n const result = await this.client.callStorage<R | null>({\n op: 'load',\n tableName,\n keys,\n });\n\n return result;\n }\n\n public async queryTable<R>(tableName: TABLE_NAMES, filters?: EqualityFilter[]): Promise<R[]> {\n return this.client.callStorage<R[]>({\n op: 'queryTable',\n tableName,\n filters,\n });\n }\n\n public async deleteMany(tableName: TABLE_NAMES, ids: string[]): Promise<void> {\n if (ids.length === 0) return;\n await this.client.callStorage({\n op: 'deleteMany',\n tableName,\n ids,\n });\n }\n\n private normalizeRecord(tableName: TABLE_NAMES, record: Record<string, any>): Record<string, any> {\n const normalized: Record<string, any> = { ...record };\n\n if (tableName === TABLE_WORKFLOW_SNAPSHOT && !normalized.id) {\n const runId = normalized.run_id || normalized.runId;\n const workflowName = normalized.workflow_name || normalized.workflowName;\n normalized.id = workflowName ? `${workflowName}-${runId}` : runId;\n }\n\n if (!normalized.id) {\n normalized.id = crypto.randomUUID();\n }\n\n for (const [key, value] of Object.entries(normalized)) {\n if (value instanceof Date) {\n normalized[key] = value.toISOString();\n }\n }\n\n return normalized;\n }\n}\n","import type { SaveScorePayload, ScoreRowData, ScoringEntityType, ScoringSource } from '@mastra/core/evals';\nimport type { MastraDBMessage, StorageThreadType } from '@mastra/core/memory';\nimport type {\n StorageColumn,\n StorageResourceType,\n PaginationInfo,\n StorageListMessagesInput,\n StorageListMessagesOutput,\n StorageListThreadsByResourceIdInput,\n StorageListThreadsByResourceIdOutput,\n StorageListWorkflowRunsInput,\n StoragePagination,\n WorkflowRun,\n WorkflowRuns,\n TABLE_NAMES,\n} from '@mastra/core/storage';\nimport { MastraStorage } from '@mastra/core/storage';\nimport type { StepResult, WorkflowRunState, WorkflowRunStatus } from '@mastra/core/workflows';\n\nimport type { ConvexAdminClientConfig } from './client';\nimport { ConvexAdminClient } from './client';\nimport { MemoryConvex } from './domains/memory';\nimport { ScoresConvex } from './domains/scores';\nimport { WorkflowsConvex } from './domains/workflows';\nimport { StoreOperationsConvex } from './operations';\n\nexport type ConvexStoreConfig = ConvexAdminClientConfig & {\n id: string;\n name?: string;\n /**\n * When true, automatic initialization (table creation/migrations) is disabled.\n * This is useful for CI/CD pipelines where you want to:\n * 1. Run migrations explicitly during deployment (not at runtime)\n * 2. Use different credentials for schema changes vs runtime operations\n *\n * When disableInit is true:\n * - The storage will not automatically create/alter tables on first use\n * - You must call `storage.init()` explicitly in your CI/CD scripts\n *\n * @example\n * // In CI/CD script:\n * const storage = new ConvexStore({ ...config, disableInit: false });\n * await storage.init(); // Explicitly run migrations\n *\n * // In runtime application:\n * const storage = new ConvexStore({ ...config, disableInit: true });\n * // No auto-init, tables must already exist\n */\n disableInit?: boolean;\n};\n\nexport class ConvexStore extends MastraStorage {\n private readonly operations: StoreOperationsConvex;\n private readonly memory: MemoryConvex;\n private readonly workflows: WorkflowsConvex;\n private readonly scores: ScoresConvex;\n\n constructor(config: ConvexStoreConfig) {\n super({ id: config.id, name: config.name ?? 'ConvexStore', disableInit: config.disableInit });\n\n const client = new ConvexAdminClient(config);\n this.operations = new StoreOperationsConvex(client);\n this.memory = new MemoryConvex(this.operations);\n this.workflows = new WorkflowsConvex(this.operations);\n this.scores = new ScoresConvex(this.operations);\n\n this.stores = {\n operations: this.operations,\n memory: this.memory,\n workflows: this.workflows,\n scores: this.scores,\n };\n }\n\n public get supports() {\n return {\n selectByIncludeResourceScope: true,\n resourceWorkingMemory: true,\n hasColumn: false,\n createTable: false,\n deleteMessages: true,\n observabilityInstance: false,\n listScoresBySpan: false,\n };\n }\n\n async createTable(_args: { tableName: TABLE_NAMES; schema: Record<string, StorageColumn> }): Promise<void> {\n // No-op\n }\n\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n await this.operations.clearTable({ tableName });\n }\n\n async dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n await this.operations.dropTable({ tableName });\n }\n\n async alterTable(_args: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void> {\n // No-op\n }\n\n async insert({ tableName, record }: { tableName: TABLE_NAMES; record: Record<string, any> }): Promise<void> {\n await this.operations.insert({ tableName, record });\n }\n\n async batchInsert({ tableName, records }: { tableName: TABLE_NAMES; records: Record<string, any>[] }): Promise<void> {\n await this.operations.batchInsert({ tableName, records });\n }\n\n async load<R>({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, any> }): Promise<R | null> {\n return this.operations.load<R>({ tableName, keys });\n }\n\n async getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null> {\n return this.memory.getThreadById({ threadId });\n }\n\n async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n return this.memory.saveThread({ thread });\n }\n\n async updateThread({\n id,\n title,\n metadata,\n }: {\n id: string;\n title: string;\n metadata: Record<string, unknown>;\n }): Promise<StorageThreadType> {\n return this.memory.updateThread({ id, title, metadata });\n }\n\n async deleteThread({ threadId }: { threadId: string }): Promise<void> {\n await this.memory.deleteThread({ threadId });\n }\n\n async listMessages(args: StorageListMessagesInput): Promise<StorageListMessagesOutput> {\n return this.memory.listMessages(args);\n }\n\n async listMessagesById({ messageIds }: { messageIds: string[] }): Promise<{ messages: MastraDBMessage[] }> {\n return this.memory.listMessagesById({ messageIds });\n }\n\n async saveMessages(args: { messages: MastraDBMessage[] }): Promise<{ messages: MastraDBMessage[] }> {\n return this.memory.saveMessages(args);\n }\n\n async updateMessages({\n messages,\n }: {\n messages: (Partial<Omit<MastraDBMessage, 'createdAt'>> & {\n id: string;\n })[];\n }): Promise<MastraDBMessage[]> {\n return this.memory.updateMessages({ messages });\n }\n\n async deleteMessages(messageIds: string[]): Promise<void> {\n await this.memory.deleteMessages(messageIds);\n }\n\n async listThreadsByResourceId(\n args: StorageListThreadsByResourceIdInput,\n ): Promise<StorageListThreadsByResourceIdOutput> {\n return this.memory.listThreadsByResourceId(args);\n }\n\n async getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n return this.memory.getResourceById({ resourceId });\n }\n\n async saveResource({ resource }: { resource: StorageResourceType }): Promise<StorageResourceType> {\n return this.memory.saveResource({ resource });\n }\n\n async updateResource({\n resourceId,\n workingMemory,\n metadata,\n }: {\n resourceId: string;\n workingMemory?: string;\n metadata?: Record<string, unknown>;\n }): Promise<StorageResourceType> {\n return this.memory.updateResource({ resourceId, workingMemory, metadata });\n }\n\n async updateWorkflowResults(params: {\n workflowName: string;\n runId: string;\n stepId: string;\n result: StepResult<any, any, any, any>;\n requestContext: Record<string, any>;\n }): Promise<Record<string, StepResult<any, any, any, any>>> {\n return this.workflows.updateWorkflowResults(params);\n }\n\n async updateWorkflowState(params: {\n workflowName: string;\n runId: string;\n opts: {\n status: WorkflowRunStatus;\n result?: StepResult<any, any, any, any>;\n error?: string;\n suspendedPaths?: Record<string, number[]>;\n waitingPaths?: Record<string, number[]>;\n };\n }): Promise<WorkflowRunState | undefined> {\n return this.workflows.updateWorkflowState(params);\n }\n\n async persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId,\n snapshot,\n }: {\n workflowName: string;\n runId: string;\n resourceId?: string | undefined;\n snapshot: WorkflowRunState;\n }): Promise<void> {\n await this.workflows.persistWorkflowSnapshot({ workflowName, runId, resourceId, snapshot });\n }\n\n async loadWorkflowSnapshot({\n workflowName,\n runId,\n }: {\n workflowName: string;\n runId: string;\n }): Promise<WorkflowRunState | null> {\n return this.workflows.loadWorkflowSnapshot({ workflowName, runId });\n }\n\n async listWorkflowRuns(args?: StorageListWorkflowRunsInput): Promise<WorkflowRuns> {\n return this.workflows.listWorkflowRuns(args);\n }\n\n async getWorkflowRunById({\n runId,\n workflowName,\n }: {\n runId: string;\n workflowName?: string | undefined;\n }): Promise<WorkflowRun | null> {\n return this.workflows.getWorkflowRunById({ runId, workflowName });\n }\n\n async deleteWorkflowRunById({ runId, workflowName }: { runId: string; workflowName: string }): Promise<void> {\n return this.workflows.deleteWorkflowRunById({ runId, workflowName });\n }\n\n async getScoreById({ id }: { id: string }): Promise<ScoreRowData | null> {\n return this.scores.getScoreById({ id });\n }\n\n async saveScore(score: SaveScorePayload): Promise<{ score: ScoreRowData }> {\n return this.scores.saveScore(score);\n }\n\n async listScoresByScorerId({\n scorerId,\n pagination,\n entityId,\n entityType,\n source,\n }: {\n scorerId: string;\n pagination: StoragePagination;\n entityId?: string | undefined;\n entityType?: ScoringEntityType | undefined;\n source?: ScoringSource | undefined;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.scores.listScoresByScorerId({ scorerId, pagination, entityId, entityType, source });\n }\n\n async listScoresByRunId({\n runId,\n pagination,\n }: {\n runId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.scores.listScoresByRunId({ runId, pagination });\n }\n\n async listScoresByEntityId({\n entityId,\n entityType,\n pagination,\n }: {\n pagination: StoragePagination;\n entityId: string;\n entityType: ScoringEntityType;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.scores.listScoresByEntityId({ entityId, entityType, pagination });\n }\n}\n","import crypto from 'node:crypto';\n\nimport { MastraVector } from '@mastra/core/vector';\nimport type {\n CreateIndexParams,\n DeleteIndexParams,\n DeleteVectorParams,\n DeleteVectorsParams,\n DescribeIndexParams,\n IndexStats,\n QueryResult,\n QueryVectorParams,\n UpdateVectorParams,\n UpsertVectorParams,\n} from '@mastra/core/vector';\n\nimport type { ConvexAdminClientConfig } from '../storage/client';\nimport { ConvexAdminClient } from '../storage/client';\nimport type { StorageRequest } from '../storage/types';\n\ntype VectorRecord = {\n id: string;\n embedding: number[];\n metadata?: Record<string, any>;\n};\n\ntype VectorFilter = {\n metadata?: Record<string, any>;\n};\n\nconst INDEX_METADATA_TABLE = 'mastra_vector_indexes';\n\nexport type ConvexVectorConfig = ConvexAdminClientConfig & {\n id: string;\n};\n\nexport class ConvexVector extends MastraVector<VectorFilter> {\n private readonly client: ConvexAdminClient;\n\n constructor(config: ConvexVectorConfig) {\n super({ id: config.id });\n this.client = new ConvexAdminClient(config);\n }\n\n async createIndex({ indexName, dimension }: CreateIndexParams): Promise<void> {\n await this.callStorage({\n op: 'insert',\n tableName: INDEX_METADATA_TABLE,\n record: {\n id: indexName,\n indexName,\n dimension,\n metric: 'cosine',\n createdAt: new Date().toISOString(),\n },\n });\n }\n\n async deleteIndex({ indexName }: DeleteIndexParams): Promise<void> {\n await this.callStorage({\n op: 'deleteMany',\n tableName: INDEX_METADATA_TABLE,\n ids: [indexName],\n });\n // Delete in batches since each mutation can only delete a small number of docs\n // to stay within Convex's 1-second mutation timeout.\n await this.callStorageUntilComplete({\n op: 'clearTable',\n tableName: this.vectorTable(indexName),\n });\n }\n\n async truncateIndex({ indexName }: DeleteIndexParams): Promise<void> {\n // Delete in batches since each mutation can only delete a small number of docs\n // to stay within Convex's 1-second mutation timeout.\n await this.callStorageUntilComplete({\n op: 'clearTable',\n tableName: this.vectorTable(indexName),\n });\n }\n\n async listIndexes(): Promise<string[]> {\n const indexes = await this.callStorage<{ id: string }[]>({\n op: 'queryTable',\n tableName: INDEX_METADATA_TABLE,\n });\n return indexes.map(index => index.id);\n }\n\n async describeIndex({ indexName }: DescribeIndexParams): Promise<IndexStats> {\n const index = await this.callStorage<{ dimension: number } | null>({\n op: 'load',\n tableName: INDEX_METADATA_TABLE,\n keys: { id: indexName },\n });\n if (!index) {\n throw new Error(`Index ${indexName} not found`);\n }\n\n const vectors = await this.callStorage<VectorRecord[]>({\n op: 'queryTable',\n tableName: this.vectorTable(indexName),\n });\n\n return {\n dimension: index.dimension,\n count: vectors.length,\n metric: 'cosine',\n };\n }\n\n async upsert({ indexName, vectors, ids, metadata }: UpsertVectorParams<VectorFilter>): Promise<string[]> {\n const vectorIds = ids ?? vectors.map(() => crypto.randomUUID());\n\n const records: VectorRecord[] = vectors.map((vector, i) => ({\n id: vectorIds[i]!,\n embedding: vector,\n metadata: metadata?.[i],\n }));\n\n await this.callStorage({\n op: 'batchInsert',\n tableName: this.vectorTable(indexName),\n records,\n });\n\n return vectorIds;\n }\n\n async query({\n indexName,\n queryVector,\n topK = 10,\n includeVector = false,\n filter,\n }: QueryVectorParams<VectorFilter>): Promise<QueryResult[]> {\n const vectors = await this.callStorage<VectorRecord[]>({\n op: 'queryTable',\n tableName: this.vectorTable(indexName),\n });\n\n const filtered =\n filter && !this.isEmptyFilter(filter)\n ? vectors.filter(record => this.matchesFilter(record.metadata, filter))\n : vectors;\n\n const scored = filtered\n .map(record => ({\n id: record.id,\n score: cosineSimilarity(queryVector, record.embedding),\n metadata: record.metadata,\n ...(includeVector ? { vector: record.embedding } : {}),\n }))\n .filter(result => Number.isFinite(result.score))\n .sort((a, b) => b.score - a.score)\n .slice(0, topK);\n\n return scored;\n }\n\n async updateVector(params: UpdateVectorParams<VectorFilter>): Promise<void> {\n const hasId = 'id' in params && params.id;\n const hasFilter = 'filter' in params && params.filter !== undefined;\n\n // Check for mutually exclusive parameters\n if (hasId && hasFilter) {\n throw new Error('ConvexVector.updateVector: id and filter are mutually exclusive');\n }\n\n // Check for filter-based update\n if (hasFilter) {\n const filter = params.filter as VectorFilter;\n // Check for empty filter\n if (this.isEmptyFilter(filter)) {\n throw new Error('ConvexVector.updateVector: cannot update with empty filter');\n }\n\n // Update by filter - find all matching records and update them\n const vectors = await this.callStorage<VectorRecord[]>({\n op: 'queryTable',\n tableName: this.vectorTable(params.indexName),\n });\n\n const matching = vectors.filter(record => this.matchesFilter(record.metadata, filter));\n\n for (const existing of matching) {\n const updated: VectorRecord = {\n ...existing,\n ...(params.update.vector ? { embedding: params.update.vector } : {}),\n ...(params.update.metadata ? { metadata: { ...existing.metadata, ...params.update.metadata } } : {}),\n };\n\n await this.callStorage({\n op: 'insert',\n tableName: this.vectorTable(params.indexName),\n record: updated,\n });\n }\n return;\n }\n\n // Update by id\n if (!hasId) {\n throw new Error('ConvexVector.updateVector: Either id or filter must be provided');\n }\n\n const existing = await this.callStorage<VectorRecord | null>({\n op: 'load',\n tableName: this.vectorTable(params.indexName),\n keys: { id: params.id },\n });\n if (!existing) return;\n\n const updated: VectorRecord = {\n ...existing,\n ...(params.update.vector ? { embedding: params.update.vector } : {}),\n ...(params.update.metadata ? { metadata: { ...existing.metadata, ...params.update.metadata } } : {}),\n };\n\n await this.callStorage({\n op: 'insert',\n tableName: this.vectorTable(params.indexName),\n record: updated,\n });\n }\n\n async deleteVector({ indexName, id }: DeleteVectorParams): Promise<void> {\n await this.callStorage({\n op: 'deleteMany',\n tableName: this.vectorTable(indexName),\n ids: [id],\n });\n }\n\n async deleteVectors(params: DeleteVectorsParams<VectorFilter>): Promise<void> {\n const { indexName } = params;\n const hasIds = 'ids' in params && params.ids !== undefined;\n const hasFilter = 'filter' in params && params.filter !== undefined;\n\n // Check for mutually exclusive parameters\n if (hasIds && hasFilter) {\n throw new Error('ConvexVector.deleteVectors: ids and filter are mutually exclusive');\n }\n\n // Check that at least one is provided\n if (!hasIds && !hasFilter) {\n throw new Error('ConvexVector.deleteVectors: Either filter or ids must be provided');\n }\n\n // Handle ID-based deletion\n if (hasIds) {\n const ids = params.ids as string[];\n if (ids.length === 0) {\n throw new Error('ConvexVector.deleteVectors: cannot delete with empty ids array');\n }\n await this.callStorage({\n op: 'deleteMany',\n tableName: this.vectorTable(indexName),\n ids,\n });\n return;\n }\n\n // Handle filter-based deletion\n const filter = params.filter as VectorFilter;\n if (this.isEmptyFilter(filter)) {\n throw new Error('ConvexVector.deleteVectors: cannot delete with empty filter');\n }\n\n // Find all matching vectors and delete them\n const vectors = await this.callStorage<VectorRecord[]>({\n op: 'queryTable',\n tableName: this.vectorTable(indexName),\n });\n\n const matchingIds = vectors.filter(record => this.matchesFilter(record.metadata, filter)).map(record => record.id);\n\n if (matchingIds.length > 0) {\n await this.callStorage({\n op: 'deleteMany',\n tableName: this.vectorTable(indexName),\n ids: matchingIds,\n });\n }\n }\n\n private vectorTable(indexName: string) {\n return `mastra_vector_${indexName}`;\n }\n\n private isEmptyFilter(filter: VectorFilter | Record<string, any>): boolean {\n if (!filter) return true;\n return Object.keys(filter).length === 0;\n }\n\n private matchesFilter(\n recordMetadata: Record<string, any> | undefined,\n filter: VectorFilter | Record<string, any>,\n ): boolean {\n if (!recordMetadata) return false;\n if (!filter || Object.keys(filter).length === 0) return true;\n\n // Handle VectorFilter with metadata property\n if ('metadata' in filter && filter.metadata) {\n return this.matchesFilterConditions(recordMetadata, filter.metadata);\n }\n\n // Handle direct filter conditions\n return this.matchesFilterConditions(recordMetadata, filter);\n }\n\n private matchesFilterConditions(recordMetadata: Record<string, any>, conditions: Record<string, any>): boolean {\n for (const [key, value] of Object.entries(conditions)) {\n // Handle $and operator\n if (key === '$and' && Array.isArray(value)) {\n const allMatch = value.every((cond: Record<string, any>) => this.matchesFilterConditions(recordMetadata, cond));\n if (!allMatch) return false;\n continue;\n }\n\n // Handle $or operator\n if (key === '$or' && Array.isArray(value)) {\n const anyMatch = value.some((cond: Record<string, any>) => this.matchesFilterConditions(recordMetadata, cond));\n if (!anyMatch) return false;\n continue;\n }\n\n // Handle $in operator\n if (typeof value === 'object' && value !== null && '$in' in value) {\n if (!Array.isArray(value.$in) || !value.$in.includes(recordMetadata[key])) {\n return false;\n }\n continue;\n }\n\n // Handle $nin operator\n if (typeof value === 'object' && value !== null && '$nin' in value) {\n if (Array.isArray(value.$nin) && value.$nin.includes(recordMetadata[key])) {\n return false;\n }\n continue;\n }\n\n // Handle $gt operator\n if (typeof value === 'object' && value !== null && '$gt' in value) {\n if (!(recordMetadata[key] > value.$gt)) {\n return false;\n }\n continue;\n }\n\n // Handle $gte operator\n if (typeof value === 'object' && value !== null && '$gte' in value) {\n if (!(recordMetadata[key] >= value.$gte)) {\n return false;\n }\n continue;\n }\n\n // Handle $lt operator\n if (typeof value === 'object' && value !== null && '$lt' in value) {\n if (!(recordMetadata[key] < value.$lt)) {\n return false;\n }\n continue;\n }\n\n // Handle $lte operator\n if (typeof value === 'object' && value !== null && '$lte' in value) {\n if (!(recordMetadata[key] <= value.$lte)) {\n return false;\n }\n continue;\n }\n\n // Handle $ne operator\n if (typeof value === 'object' && value !== null && '$ne' in value) {\n if (recordMetadata[key] === value.$ne) {\n return false;\n }\n continue;\n }\n\n // Handle simple equality\n if (recordMetadata[key] !== value) {\n return false;\n }\n }\n\n return true;\n }\n\n private async callStorage<T = any>(request: StorageRequest): Promise<T> {\n return this.client.callStorage<T>(request);\n }\n\n /**\n * Call storage repeatedly until hasMore is false.\n * Use for bulk operations like clearTable that may need multiple batches.\n */\n private async callStorageUntilComplete(request: StorageRequest): Promise<void> {\n let hasMore = true;\n while (hasMore) {\n const response = await this.client.callStorageRaw(request);\n hasMore = response.hasMore ?? false;\n }\n }\n}\n\nfunction cosineSimilarity(a: number[], b: number[]): number {\n if (a.length !== b.length) {\n return -1;\n }\n\n let dot = 0;\n let magA = 0;\n let magB = 0;\n\n for (let i = 0; i < a.length; i++) {\n const aVal = a[i] ?? 0;\n const bVal = b[i] ?? 0;\n dot += aVal * bVal;\n magA += aVal * aVal;\n magB += bVal * bVal;\n }\n\n if (magA === 0 || magB === 0) {\n return -1;\n }\n\n return dot / (Math.sqrt(magA) * Math.sqrt(magB));\n}\n"]}
@@ -38,6 +38,10 @@ export declare class WorkflowsConvex extends WorkflowsStorage {
38
38
  runId: string;
39
39
  workflowName?: string;
40
40
  }): Promise<WorkflowRun | null>;
41
+ deleteWorkflowRunById({ runId, workflowName }: {
42
+ runId: string;
43
+ workflowName: string;
44
+ }): Promise<void>;
41
45
  private getRun;
42
46
  private ensureSnapshot;
43
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../../src/storage/domains/workflows.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6C,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACnG,OAAO,KAAK,EAAE,4BAA4B,EAAsB,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACxH,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE9F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAQ3D,qBAAa,eAAgB,SAAQ,gBAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,qBAAqB;IAIxD,qBAAqB,CAAC,EAC1B,YAAY,EACZ,KAAK,EACL,MAAM,EACN,MAAM,EACN,cAAc,GACf,EAAE;QACD,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACvC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KACrC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAmBrD,mBAAmB,CAAC,EACxB,YAAY,EACZ,KAAK,EACL,IAAI,GACL,EAAE;QACD,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE;YACJ,MAAM,EAAE,iBAAiB,CAAC;YAC1B,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACxC,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YAC1C,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;SACzC,CAAC;KACH,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAiBnC,uBAAuB,CAAC,EAC5B,YAAY,EACZ,KAAK,EACL,UAAU,EACV,QAAQ,GACT,EAAE;QACD,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,gBAAgB,CAAC;KAC5B,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBX,oBAAoB,CAAC,EACzB,YAAY,EACZ,KAAK,GACN,EAAE;QACD,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAU9B,gBAAgB,CAAC,IAAI,GAAE,4BAAiC,GAAG,OAAO,CAAC,YAAY,CAAC;IAqChF,kBAAkB,CAAC,EACvB,KAAK,EACL,YAAY,GACb,EAAE;QACD,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;YAejB,MAAM;IAOpB,OAAO,CAAC,cAAc;CAuBvB"}
1
+ {"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../../src/storage/domains/workflows.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6C,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACnG,OAAO,KAAK,EAAE,4BAA4B,EAAsB,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACxH,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE9F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAQ3D,qBAAa,eAAgB,SAAQ,gBAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,qBAAqB;IAIxD,qBAAqB,CAAC,EAC1B,YAAY,EACZ,KAAK,EACL,MAAM,EACN,MAAM,EACN,cAAc,GACf,EAAE;QACD,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACvC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KACrC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAmBrD,mBAAmB,CAAC,EACxB,YAAY,EACZ,KAAK,EACL,IAAI,GACL,EAAE;QACD,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE;YACJ,MAAM,EAAE,iBAAiB,CAAC;YAC1B,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACxC,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YAC1C,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;SACzC,CAAC;KACH,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAiBnC,uBAAuB,CAAC,EAC5B,YAAY,EACZ,KAAK,EACL,UAAU,EACV,QAAQ,GACT,EAAE;QACD,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,gBAAgB,CAAC;KAC5B,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBX,oBAAoB,CAAC,EACzB,YAAY,EACZ,KAAK,GACN,EAAE;QACD,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAU9B,gBAAgB,CAAC,IAAI,GAAE,4BAAiC,GAAG,OAAO,CAAC,YAAY,CAAC;IAqChF,kBAAkB,CAAC,EACvB,KAAK,EACL,YAAY,GACb,EAAE;QACD,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAezB,qBAAqB,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YAI9F,MAAM;IAOpB,OAAO,CAAC,cAAc;CAuBvB"}
@@ -146,6 +146,10 @@ export declare class ConvexStore extends MastraStorage {
146
146
  runId: string;
147
147
  workflowName?: string | undefined;
148
148
  }): Promise<WorkflowRun | null>;
149
+ deleteWorkflowRunById({ runId, workflowName }: {
150
+ runId: string;
151
+ workflowName: string;
152
+ }): Promise<void>;
149
153
  getScoreById({ id }: {
150
154
  id: string;
151
155
  }): Promise<ScoreRowData | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mastra/convex",
3
- "version": "0.1.0-beta.2",
3
+ "version": "0.1.0-beta.3",
4
4
  "description": "Convex provider for Mastra - includes both storage and vector adapters plus Convex server helpers",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -42,10 +42,10 @@
42
42
  "tsup": "^8.5.0",
43
43
  "typescript": "^5.8.3",
44
44
  "vitest": "4.0.12",
45
- "@internal/types-builder": "0.0.28",
46
45
  "@internal/lint": "0.0.53",
47
- "@mastra/core": "1.0.0-beta.8",
48
- "@internal/storage-test-utils": "0.0.49"
46
+ "@internal/storage-test-utils": "0.0.49",
47
+ "@internal/types-builder": "0.0.28",
48
+ "@mastra/core": "1.0.0-beta.10"
49
49
  },
50
50
  "peerDependencies": {
51
51
  "@mastra/core": ">=1.0.0-0 <2.0.0-0"