@mastra/dynamodb 0.15.10 → 1.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/entities/utils.ts","../src/entities/eval.ts","../src/entities/message.ts","../src/entities/resource.ts","../src/entities/score.ts","../src/entities/thread.ts","../src/entities/trace.ts","../src/entities/workflow-snapshot.ts","../src/entities/index.ts","../src/storage/domains/legacy-evals/index.ts","../src/storage/domains/memory/index.ts","../src/storage/domains/operations/index.ts","../src/storage/domains/score/index.ts","../src/storage/domains/traces/index.ts","../src/storage/domains/workflows/index.ts","../src/storage/index.ts"],"names":["Entity","Service","LegacyEvalsStorage","error","MastraError","ErrorDomain","ErrorCategory","MemoryStorage","resolveMessageLimit","MessageList","data","StoreOperations","TABLE_THREADS","TABLE_MESSAGES","TABLE_WORKFLOW_SNAPSHOT","TABLE_EVALS","TABLE_SCORERS","TABLE_TRACES","TABLE_RESOURCES","TABLE_AI_SPANS","DescribeTableCommand","ScoresStorage","saveScorePayloadSchema","TracesStorage","attributes","WorkflowsStorage","result","snapshot","MastraStorage","DynamoDBClient","DynamoDBDocumentClient"],"mappings":"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","file":"index.cjs","sourcesContent":["export const baseAttributes = {\n createdAt: {\n type: 'string',\n required: true,\n readOnly: true,\n // Convert Date to ISO string on set\n set: (value?: Date | string) => {\n if (value instanceof Date) {\n return value.toISOString();\n }\n return value || new Date().toISOString();\n },\n // Initialize with current timestamp if not provided\n default: () => new Date().toISOString(),\n },\n updatedAt: {\n type: 'string',\n required: true,\n // Convert Date to ISO string on set\n set: (value?: Date | string) => {\n if (value instanceof Date) {\n return value.toISOString();\n }\n return value || new Date().toISOString();\n },\n // Always use current timestamp when creating/updating\n default: () => new Date().toISOString(),\n },\n metadata: {\n type: 'string', // JSON stringified\n // Stringify objects on set\n set: (value?: Record<string, unknown> | string) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n // Parse JSON string to object on get\n get: (value?: string) => {\n if (value) {\n try {\n return JSON.parse(value);\n } catch {\n // If parsing fails, return the original string\n return value;\n }\n }\n return value;\n },\n },\n} as const;\n","import { Entity } from 'electrodb';\nimport { baseAttributes } from './utils';\n\nexport const evalEntity = new Entity({\n model: {\n entity: 'eval',\n version: '1',\n service: 'mastra',\n },\n attributes: {\n entity: {\n type: 'string',\n required: true,\n },\n ...baseAttributes,\n input: {\n type: 'string',\n required: true,\n },\n output: {\n type: 'string',\n required: true,\n },\n result: {\n type: 'string', // JSON stringified\n required: true,\n // Stringify object on set\n set: (value?: any) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n // Parse JSON string to object on get\n get: (value?: string) => {\n if (value) {\n return JSON.parse(value);\n }\n return value;\n },\n },\n agent_name: {\n type: 'string',\n required: true,\n },\n metric_name: {\n type: 'string',\n required: true,\n },\n instructions: {\n type: 'string',\n required: true,\n },\n test_info: {\n type: 'string', // JSON stringified\n required: false,\n // Stringify object on set\n set: (value?: any) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n // Parse JSON string to object on get\n get: (value?: string) => {\n return value;\n },\n },\n global_run_id: {\n type: 'string',\n required: true,\n },\n run_id: {\n type: 'string',\n required: true,\n },\n created_at: {\n type: 'string',\n required: true,\n // Initialize with current timestamp if not provided\n default: () => new Date().toISOString(),\n // Convert Date to ISO string on set\n set: (value?: Date | string) => {\n if (value instanceof Date) {\n return value.toISOString();\n }\n return value || new Date().toISOString();\n },\n },\n },\n indexes: {\n primary: {\n pk: { field: 'pk', composite: ['entity', 'run_id'] },\n sk: { field: 'sk', composite: [] },\n },\n byAgent: {\n index: 'gsi1',\n pk: { field: 'gsi1pk', composite: ['entity', 'agent_name'] },\n sk: { field: 'gsi1sk', composite: ['created_at'] },\n },\n },\n});\n","import { Entity } from 'electrodb';\nimport { baseAttributes } from './utils';\n\nexport const messageEntity = new Entity({\n model: {\n entity: 'message',\n version: '1',\n service: 'mastra',\n },\n attributes: {\n entity: {\n type: 'string',\n required: true,\n },\n ...baseAttributes,\n id: {\n type: 'string',\n required: true,\n },\n threadId: {\n type: 'string',\n required: true,\n },\n content: {\n type: 'string',\n required: true,\n // Stringify content object on set if it's not already a string\n set: (value?: string | void) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n // Parse JSON string to object on get ONLY if it looks like JSON\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n // Attempt to parse only if it might be JSON (e.g., starts with { or [)\n if (value.startsWith('{') || value.startsWith('[')) {\n return JSON.parse(value);\n }\n } catch {\n // Ignore parse error, return original string\n return value;\n }\n }\n return value;\n },\n },\n role: {\n type: 'string',\n required: true,\n },\n type: {\n type: 'string',\n default: 'text',\n },\n resourceId: {\n type: 'string',\n required: false,\n },\n toolCallIds: {\n type: 'string',\n required: false,\n set: (value?: string[] | string) => {\n if (Array.isArray(value)) {\n return JSON.stringify(value);\n }\n return value;\n },\n // Parse JSON string to array on get\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n return JSON.parse(value);\n } catch {\n // Return raw value on error, consistent with 'content' field\n return value;\n }\n }\n // If value was not a string, or if it was an empty string, return it as is.\n return value;\n },\n },\n toolCallArgs: {\n type: 'string',\n required: false,\n set: (value?: Record<string, unknown>[] | string) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n // Parse JSON string to object on get\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n return JSON.parse(value);\n } catch {\n // Return raw value on error, consistent with 'content' field\n return value;\n }\n }\n // If value was not a string, or if it was an empty string, return it as is.\n return value;\n },\n },\n toolNames: {\n type: 'string',\n required: false,\n set: (value?: string[] | string) => {\n if (Array.isArray(value)) {\n return JSON.stringify(value);\n }\n return value;\n },\n // Parse JSON string to array on get\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n return JSON.parse(value);\n } catch {\n // Return raw value on error, consistent with 'content' field\n return value;\n }\n }\n // If value was not a string, or if it was an empty string, return it as is.\n return value;\n },\n },\n },\n indexes: {\n primary: {\n pk: { field: 'pk', composite: ['entity', 'id'] },\n sk: { field: 'sk', composite: ['entity'] },\n },\n byThread: {\n index: 'gsi1',\n pk: { field: 'gsi1pk', composite: ['entity', 'threadId'] },\n sk: { field: 'gsi1sk', composite: ['createdAt'] },\n },\n },\n});\n","import { Entity } from 'electrodb';\nimport { baseAttributes } from './utils';\n\nexport const resourceEntity = new Entity({\n model: {\n entity: 'resource',\n version: '1',\n service: 'mastra',\n },\n attributes: {\n entity: {\n type: 'string',\n required: true,\n },\n ...baseAttributes,\n id: {\n type: 'string',\n required: true,\n },\n workingMemory: {\n type: 'string',\n required: false,\n },\n metadata: {\n type: 'string',\n required: false,\n // Stringify content object on set if it's not already a string\n set: (value?: string | void) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n // Parse JSON string to object on get ONLY if it looks like JSON\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n // Attempt to parse only if it might be JSON (e.g., starts with { or [)\n if (value.startsWith('{') || value.startsWith('[')) {\n return JSON.parse(value);\n }\n } catch {\n // Ignore parse error, return original string\n return value;\n }\n }\n return value;\n },\n },\n },\n indexes: {\n primary: {\n pk: { field: 'pk', composite: ['entity', 'id'] },\n sk: { field: 'sk', composite: ['entity'] },\n },\n },\n});\n","import { Entity } from 'electrodb';\nimport { baseAttributes } from './utils';\n\nexport const scoreEntity = new Entity({\n model: {\n entity: 'score',\n version: '1',\n service: 'mastra',\n },\n attributes: {\n entity: {\n type: 'string',\n required: true,\n },\n ...baseAttributes,\n id: {\n type: 'string',\n required: true,\n },\n scorerId: {\n type: 'string',\n required: true,\n },\n traceId: {\n type: 'string',\n required: false,\n },\n spanId: {\n type: 'string',\n required: false,\n },\n runId: {\n type: 'string',\n required: true,\n },\n scorer: {\n type: 'string',\n required: true,\n set: (value?: Record<string, unknown> | string) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n if (value.startsWith('{') || value.startsWith('[')) {\n return JSON.parse(value);\n }\n } catch {\n return value;\n }\n }\n return value;\n },\n },\n extractStepResult: {\n type: 'string',\n required: false,\n set: (value?: Record<string, unknown> | string) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n if (value.startsWith('{') || value.startsWith('[')) {\n return JSON.parse(value);\n }\n } catch {\n return value;\n }\n }\n return value;\n },\n },\n preprocessStepResult: {\n type: 'string',\n required: false,\n set: (value?: Record<string, unknown> | string) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n if (value.startsWith('{') || value.startsWith('[')) {\n return JSON.parse(value);\n }\n } catch {\n return value;\n }\n }\n return value;\n },\n },\n analyzeStepResult: {\n type: 'string',\n required: false,\n set: (value?: Record<string, unknown> | string) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n if (value.startsWith('{') || value.startsWith('[')) {\n return JSON.parse(value);\n }\n } catch {\n return value;\n }\n }\n return value;\n },\n },\n score: {\n type: 'number',\n required: true,\n },\n reason: {\n type: 'string',\n required: false,\n },\n extractPrompt: {\n type: 'string',\n required: false,\n },\n analyzePrompt: {\n type: 'string',\n required: false,\n },\n\n // Deprecated in favor of generateReasonPrompt\n reasonPrompt: {\n type: 'string',\n required: false,\n },\n generateScorePrompt: {\n type: 'string',\n required: false,\n },\n generateReasonPrompt: {\n type: 'string',\n required: false,\n },\n input: {\n type: 'string',\n required: true,\n set: (value?: Record<string, unknown> | string) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n if (value.startsWith('{') || value.startsWith('[')) {\n return JSON.parse(value);\n }\n } catch {\n return value;\n }\n }\n return value;\n },\n },\n output: {\n type: 'string',\n required: true,\n set: (value?: Record<string, unknown> | string) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n if (value.startsWith('{') || value.startsWith('[')) {\n return JSON.parse(value);\n }\n } catch {\n return value;\n }\n }\n return value;\n },\n },\n additionalContext: {\n type: 'string',\n required: false,\n set: (value?: Record<string, unknown> | string) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n if (value.startsWith('{') || value.startsWith('[')) {\n return JSON.parse(value);\n }\n } catch {\n return value;\n }\n }\n return value;\n },\n },\n runtimeContext: {\n type: 'string',\n required: false,\n set: (value?: Record<string, unknown> | string) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n if (value.startsWith('{') || value.startsWith('[')) {\n return JSON.parse(value);\n }\n } catch {\n return value;\n }\n }\n return value;\n },\n },\n entityType: {\n type: 'string',\n required: false,\n },\n entityData: {\n type: 'string',\n required: false,\n set: (value?: Record<string, unknown> | string) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n if (value.startsWith('{') || value.startsWith('[')) {\n return JSON.parse(value);\n }\n } catch {\n return value;\n }\n }\n return value;\n },\n },\n entityId: {\n type: 'string',\n required: false,\n },\n source: {\n type: 'string',\n required: true,\n },\n resourceId: {\n type: 'string',\n required: false,\n },\n threadId: {\n type: 'string',\n required: false,\n },\n },\n indexes: {\n primary: {\n pk: { field: 'pk', composite: ['entity', 'id'] },\n sk: { field: 'sk', composite: ['entity'] },\n },\n byScorer: {\n index: 'gsi1',\n pk: { field: 'gsi1pk', composite: ['entity', 'scorerId'] },\n sk: { field: 'gsi1sk', composite: ['createdAt'] },\n },\n byRun: {\n index: 'gsi2',\n pk: { field: 'gsi2pk', composite: ['entity', 'runId'] },\n sk: { field: 'gsi2sk', composite: ['createdAt'] },\n },\n byTrace: {\n index: 'gsi3',\n pk: { field: 'gsi3pk', composite: ['entity', 'traceId'] },\n sk: { field: 'gsi3sk', composite: ['createdAt'] },\n },\n byEntityData: {\n index: 'gsi4',\n pk: { field: 'gsi4pk', composite: ['entity', 'entityId'] },\n sk: { field: 'gsi4sk', composite: ['createdAt'] },\n },\n byResource: {\n index: 'gsi5',\n pk: { field: 'gsi5pk', composite: ['entity', 'resourceId'] },\n sk: { field: 'gsi5sk', composite: ['createdAt'] },\n },\n byThread: {\n index: 'gsi6',\n pk: { field: 'gsi6pk', composite: ['entity', 'threadId'] },\n sk: { field: 'gsi6sk', composite: ['createdAt'] },\n },\n bySpan: {\n index: 'gsi7',\n pk: { field: 'gsi7pk', composite: ['entity', 'traceId', 'spanId'] },\n sk: { field: 'gsi7sk', composite: ['createdAt'] },\n },\n },\n});\n","import { Entity } from 'electrodb';\nimport { baseAttributes } from './utils';\n\nexport const threadEntity = new Entity({\n model: {\n entity: 'thread',\n version: '1',\n service: 'mastra',\n },\n attributes: {\n entity: {\n type: 'string',\n required: true,\n },\n ...baseAttributes,\n id: {\n type: 'string',\n required: true,\n },\n resourceId: {\n type: 'string',\n required: true,\n },\n title: {\n type: 'string',\n required: true,\n },\n metadata: {\n type: 'string',\n required: false,\n // Stringify metadata object on set if it's not already a string\n set: (value?: Record<string, unknown> | string) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n // Parse JSON string to object on get\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n // Attempt to parse only if it might be JSON (e.g., starts with { or [)\n if (value.startsWith('{') || value.startsWith('[')) {\n return JSON.parse(value);\n }\n } catch {\n // Ignore parse error, return original string\n return value;\n }\n }\n return value;\n },\n },\n },\n indexes: {\n primary: {\n pk: { field: 'pk', composite: ['entity', 'id'] },\n sk: { field: 'sk', composite: ['id'] },\n },\n byResource: {\n index: 'gsi1',\n pk: { field: 'gsi1pk', composite: ['entity', 'resourceId'] },\n sk: { field: 'gsi1sk', composite: ['createdAt'] },\n },\n },\n});\n","import { Entity } from 'electrodb';\nimport { baseAttributes } from './utils';\n\nexport const traceEntity = new Entity({\n model: {\n entity: 'trace',\n version: '1',\n service: 'mastra',\n },\n attributes: {\n entity: {\n type: 'string',\n required: true,\n },\n ...baseAttributes,\n id: {\n type: 'string',\n required: true,\n },\n parentSpanId: {\n type: 'string',\n required: false,\n },\n name: {\n type: 'string',\n required: true,\n },\n traceId: {\n type: 'string',\n required: true,\n },\n scope: {\n type: 'string',\n required: true,\n },\n kind: {\n type: 'number',\n required: true,\n },\n attributes: {\n type: 'string', // JSON stringified\n required: false,\n // Stringify object on set\n set: (value?: any) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n // Parse JSON string to object on get\n get: (value?: string) => {\n return value ? JSON.parse(value) : value;\n },\n },\n status: {\n type: 'string', // JSON stringified\n required: false,\n // Stringify object on set\n set: (value?: any) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n // Parse JSON string to object on get\n get: (value?: string) => {\n return value;\n },\n },\n events: {\n type: 'string', // JSON stringified\n required: false,\n // Stringify object on set\n set: (value?: any) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n // Parse JSON string to object on get\n get: (value?: string) => {\n return value;\n },\n },\n links: {\n type: 'string', // JSON stringified\n required: false,\n // Stringify object on set\n set: (value?: any) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n // Parse JSON string to object on get\n get: (value?: string) => {\n return value;\n },\n },\n other: {\n type: 'string',\n required: false,\n },\n startTime: {\n type: 'number',\n required: true,\n },\n endTime: {\n type: 'number',\n required: true,\n },\n },\n indexes: {\n primary: {\n pk: { field: 'pk', composite: ['entity', 'id'] },\n sk: { field: 'sk', composite: [] },\n },\n byName: {\n index: 'gsi1',\n pk: { field: 'gsi1pk', composite: ['entity', 'name'] },\n sk: { field: 'gsi1sk', composite: ['startTime'] },\n },\n byScope: {\n index: 'gsi2',\n pk: { field: 'gsi2pk', composite: ['entity', 'scope'] },\n sk: { field: 'gsi2sk', composite: ['startTime'] },\n },\n },\n});\n","import { Entity } from 'electrodb';\nimport { baseAttributes } from './utils';\n\nexport const workflowSnapshotEntity = new Entity({\n model: {\n entity: 'workflow_snapshot',\n version: '1',\n service: 'mastra',\n },\n attributes: {\n entity: {\n type: 'string',\n required: true,\n },\n ...baseAttributes,\n workflow_name: {\n type: 'string',\n required: true,\n },\n run_id: {\n type: 'string',\n required: true,\n },\n snapshot: {\n type: 'string', // JSON stringified\n required: true,\n // Stringify snapshot object on set\n set: (value?: any) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n // Parse JSON string to object on get\n get: (value?: string) => {\n return value ? JSON.parse(value) : value;\n },\n },\n resourceId: {\n type: 'string',\n required: false,\n },\n },\n indexes: {\n primary: {\n pk: { field: 'pk', composite: ['entity', 'workflow_name'] },\n sk: { field: 'sk', composite: ['run_id'] },\n },\n // GSI to allow querying by run_id efficiently without knowing the workflow_name\n gsi2: {\n index: 'gsi2',\n pk: { field: 'gsi2pk', composite: ['entity', 'run_id'] },\n sk: { field: 'gsi2sk', composite: ['workflow_name'] },\n },\n },\n});\n","import type { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb';\nimport { Service } from 'electrodb';\nimport { evalEntity } from './eval';\nimport { messageEntity } from './message';\nimport { resourceEntity } from './resource';\nimport { scoreEntity } from './score';\nimport { threadEntity } from './thread';\nimport { traceEntity } from './trace';\nimport { workflowSnapshotEntity } from './workflow-snapshot';\n\nexport function getElectroDbService(client: DynamoDBDocumentClient, tableName: string) {\n return new Service(\n {\n thread: threadEntity,\n message: messageEntity,\n eval: evalEntity,\n trace: traceEntity,\n workflow_snapshot: workflowSnapshotEntity,\n resource: resourceEntity,\n score: scoreEntity,\n },\n {\n client,\n table: tableName,\n },\n );\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { EvalRow, PaginationArgs, PaginationInfo } from '@mastra/core/storage';\nimport { LegacyEvalsStorage } from '@mastra/core/storage';\nimport type { Service } from 'electrodb';\n\nexport class LegacyEvalsDynamoDB extends LegacyEvalsStorage {\n service: Service<Record<string, any>>;\n tableName: string;\n\n constructor({ service, tableName }: { service: Service<Record<string, any>>; tableName: string }) {\n super();\n this.service = service;\n this.tableName = tableName;\n }\n\n // Eval operations\n async getEvalsByAgentName(agentName: string, type?: 'test' | 'live'): Promise<EvalRow[]> {\n this.logger.debug('Getting evals for agent', { agentName, type });\n\n try {\n // Query evals by agent name using the GSI\n // Provide *all* composite key components for the 'byAgent' index ('entity', 'agent_name')\n const query = this.service.entities.eval.query.byAgent({ entity: 'eval', agent_name: agentName });\n\n // Fetch potentially all items in descending order, using the correct 'order' option\n const results = await query.go({ order: 'desc', limit: 100 }); // Use order: 'desc'\n\n if (!results.data.length) {\n return [];\n }\n\n // Filter by type if specified\n let filteredData = results.data;\n if (type) {\n filteredData = filteredData.filter((evalRecord: Record<string, any>) => {\n try {\n // Need to handle potential parse errors for test_info\n const testInfo =\n evalRecord.test_info && typeof evalRecord.test_info === 'string'\n ? JSON.parse(evalRecord.test_info)\n : undefined;\n\n if (type === 'test' && !testInfo) {\n return false;\n }\n if (type === 'live' && testInfo) {\n return false;\n }\n } catch (e) {\n this.logger.warn('Failed to parse test_info during filtering', { record: evalRecord, error: e });\n // Decide how to handle parse errors - exclude or include? Including for now.\n }\n return true;\n });\n }\n\n // Format the results - ElectroDB transforms most attributes, but we need to map/parse\n return filteredData.map((evalRecord: Record<string, any>) => {\n try {\n return {\n input: evalRecord.input,\n output: evalRecord.output,\n // Safely parse result and test_info\n result:\n evalRecord.result && typeof evalRecord.result === 'string' ? JSON.parse(evalRecord.result) : undefined,\n agentName: evalRecord.agent_name,\n createdAt: evalRecord.created_at, // Keep as string from DDB?\n metricName: evalRecord.metric_name,\n instructions: evalRecord.instructions,\n runId: evalRecord.run_id,\n globalRunId: evalRecord.global_run_id,\n testInfo:\n evalRecord.test_info && typeof evalRecord.test_info === 'string'\n ? JSON.parse(evalRecord.test_info)\n : undefined,\n } as EvalRow;\n } catch (parseError) {\n this.logger.error('Failed to parse eval record', { record: evalRecord, error: parseError });\n // Return a partial record or null/undefined on error?\n // Returning partial for now, might need adjustment based on requirements.\n return {\n agentName: evalRecord.agent_name,\n createdAt: evalRecord.created_at,\n runId: evalRecord.run_id,\n globalRunId: evalRecord.global_run_id,\n } as Partial<EvalRow> as EvalRow; // Cast needed for return type\n }\n });\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_GET_EVALS_BY_AGENT_NAME_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentName },\n },\n error,\n );\n }\n }\n\n async getEvals(\n options: {\n agentName?: string;\n type?: 'test' | 'live';\n } & PaginationArgs = {},\n ): Promise<PaginationInfo & { evals: EvalRow[] }> {\n const { agentName, type, page = 0, perPage = 100, dateRange } = options;\n\n this.logger.debug('Getting evals with pagination', { agentName, type, page, perPage, dateRange });\n\n try {\n let query;\n\n if (agentName) {\n // Query by specific agent name\n query = this.service.entities.eval.query.byAgent({ entity: 'eval', agent_name: agentName });\n } else {\n // Query all evals using the primary index\n query = this.service.entities.eval.query.byEntity({ entity: 'eval' });\n }\n\n // For DynamoDB, we need to fetch all data and apply pagination in memory\n // since DynamoDB doesn't support traditional offset-based pagination\n const results = await query.go({\n order: 'desc',\n pages: 'all', // Get all pages to apply filtering and pagination\n });\n\n if (!results.data.length) {\n return {\n evals: [],\n total: 0,\n page,\n perPage,\n hasMore: false,\n };\n }\n\n // Filter by type if specified\n let filteredData = results.data;\n if (type) {\n filteredData = filteredData.filter((evalRecord: Record<string, any>) => {\n try {\n const testInfo =\n evalRecord.test_info && typeof evalRecord.test_info === 'string'\n ? JSON.parse(evalRecord.test_info)\n : undefined;\n\n if (type === 'test' && !testInfo) {\n return false;\n }\n if (type === 'live' && testInfo) {\n return false;\n }\n } catch (e) {\n this.logger.warn('Failed to parse test_info during filtering', { record: evalRecord, error: e });\n }\n return true;\n });\n }\n\n // Apply date range filtering if specified\n if (dateRange) {\n const fromDate = dateRange.start;\n const toDate = dateRange.end;\n\n filteredData = filteredData.filter((evalRecord: Record<string, any>) => {\n const recordDate = new Date(evalRecord.created_at);\n\n if (fromDate && recordDate < fromDate) {\n return false;\n }\n if (toDate && recordDate > toDate) {\n return false;\n }\n return true;\n });\n }\n\n // Apply pagination\n const total = filteredData.length;\n const start = page * perPage;\n const end = start + perPage;\n const paginatedData = filteredData.slice(start, end);\n\n // Transform to EvalRow format\n const evals = paginatedData.map((evalRecord: Record<string, any>) => {\n try {\n return {\n input: evalRecord.input,\n output: evalRecord.output,\n result:\n evalRecord.result && typeof evalRecord.result === 'string' ? JSON.parse(evalRecord.result) : undefined,\n agentName: evalRecord.agent_name,\n createdAt: evalRecord.created_at,\n metricName: evalRecord.metric_name,\n instructions: evalRecord.instructions,\n runId: evalRecord.run_id,\n globalRunId: evalRecord.global_run_id,\n testInfo:\n evalRecord.test_info && typeof evalRecord.test_info === 'string'\n ? JSON.parse(evalRecord.test_info)\n : undefined,\n } as EvalRow;\n } catch (parseError) {\n this.logger.error('Failed to parse eval record', { record: evalRecord, error: parseError });\n return {\n agentName: evalRecord.agent_name,\n createdAt: evalRecord.created_at,\n runId: evalRecord.run_id,\n globalRunId: evalRecord.global_run_id,\n } as Partial<EvalRow> as EvalRow;\n }\n });\n\n const hasMore = end < total;\n\n return {\n evals,\n total,\n page,\n perPage,\n hasMore,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_GET_EVALS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n agentName: agentName || 'all',\n type: type || 'all',\n page,\n perPage,\n },\n },\n error,\n );\n }\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 { StorageThreadType, MastraMessageV1, MastraMessageV2 } from '@mastra/core/memory';\nimport { MemoryStorage, resolveMessageLimit } from '@mastra/core/storage';\nimport type {\n PaginationInfo,\n StorageGetMessagesArg,\n StorageResourceType,\n ThreadSortOptions,\n} from '@mastra/core/storage';\nimport type { Service } from 'electrodb';\n\nexport class MemoryStorageDynamoDB extends MemoryStorage {\n private service: Service<Record<string, any>>;\n constructor({ service }: { service: Service<Record<string, any>> }) {\n super();\n this.service = service;\n }\n\n // Helper function to parse message data (handle JSON fields)\n private parseMessageData(data: any): MastraMessageV2 | MastraMessageV1 {\n // Removed try/catch and JSON.parse logic - now handled by entity 'get' attributes\n // This function now primarily ensures correct typing and Date conversion.\n return {\n ...data,\n // Ensure dates are Date objects if needed (ElectroDB might return strings)\n createdAt: data.createdAt ? new Date(data.createdAt) : undefined,\n updatedAt: data.updatedAt ? new Date(data.updatedAt) : undefined,\n // Other fields like content, toolCallArgs etc. are assumed to be correctly\n // transformed by the ElectroDB entity getters.\n };\n }\n\n // Helper function to transform and sort threads\n private transformAndSortThreads(rawThreads: any[], orderBy: string, sortDirection: string): StorageThreadType[] {\n return rawThreads\n .map((data: any) => ({\n ...data,\n // Convert date strings back to Date objects for consistency\n createdAt: typeof data.createdAt === 'string' ? new Date(data.createdAt) : data.createdAt,\n updatedAt: typeof data.updatedAt === 'string' ? new Date(data.updatedAt) : data.updatedAt,\n }))\n .sort((a: StorageThreadType, b: StorageThreadType) => {\n const fieldA = orderBy === 'createdAt' ? a.createdAt : a.updatedAt;\n const fieldB = orderBy === 'createdAt' ? b.createdAt : b.updatedAt;\n\n const comparison = fieldA.getTime() - fieldB.getTime();\n return sortDirection === 'DESC' ? -comparison : comparison;\n }) as StorageThreadType[];\n }\n\n async getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null> {\n this.logger.debug('Getting thread by ID', { threadId });\n try {\n const result = await this.service.entities.thread.get({ entity: 'thread', id: threadId }).go();\n\n if (!result.data) {\n return null;\n }\n\n // ElectroDB handles the transformation with attribute getters\n const data = result.data;\n return {\n ...data,\n // Convert date strings back to Date objects for consistency\n createdAt: typeof data.createdAt === 'string' ? new Date(data.createdAt) : data.createdAt,\n updatedAt: typeof data.updatedAt === 'string' ? new Date(data.updatedAt) : data.updatedAt,\n // metadata: data.metadata ? JSON.parse(data.metadata) : undefined, // REMOVED by AI\n // metadata is already transformed by the entity's getter\n } as StorageThreadType;\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_GET_THREAD_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { threadId },\n },\n error,\n );\n }\n }\n\n /**\n * @deprecated use getThreadsByResourceIdPaginated instead for paginated results.\n */\n public async getThreadsByResourceId(args: { resourceId: string } & ThreadSortOptions): Promise<StorageThreadType[]> {\n const resourceId = args.resourceId;\n const orderBy = this.castThreadOrderBy(args.orderBy);\n const sortDirection = this.castThreadSortDirection(args.sortDirection);\n\n this.logger.debug('Getting threads by resource ID', { resourceId, orderBy, sortDirection });\n\n try {\n const result = await this.service.entities.thread.query.byResource({ entity: 'thread', resourceId }).go();\n\n if (!result.data.length) {\n return [];\n }\n\n // Use shared helper method for transformation and sorting\n return this.transformAndSortThreads(result.data, orderBy, sortDirection);\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_GET_THREADS_BY_RESOURCE_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { resourceId },\n },\n error,\n );\n }\n }\n\n async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n this.logger.debug('Saving thread', { threadId: thread.id });\n\n const now = new Date();\n\n const threadData = {\n entity: 'thread',\n id: thread.id,\n resourceId: thread.resourceId,\n title: thread.title || `Thread ${thread.id}`,\n createdAt: thread.createdAt?.toISOString() || now.toISOString(),\n updatedAt: thread.updatedAt?.toISOString() || now.toISOString(),\n metadata: thread.metadata ? JSON.stringify(thread.metadata) : undefined,\n };\n\n try {\n await this.service.entities.thread.upsert(threadData).go();\n\n return {\n id: thread.id,\n resourceId: thread.resourceId,\n title: threadData.title,\n createdAt: thread.createdAt || now,\n updatedAt: now,\n metadata: thread.metadata,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_SAVE_THREAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { threadId: thread.id },\n },\n error,\n );\n }\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 this.logger.debug('Updating thread', { threadId: id });\n\n try {\n // First, get the existing thread to merge with updates\n const existingThread = await this.getThreadById({ threadId: id });\n\n if (!existingThread) {\n throw new Error(`Thread not found: ${id}`);\n }\n\n const now = new Date();\n\n // Prepare the update\n // Define type for only the fields we are actually updating\n type ThreadUpdatePayload = {\n updatedAt: string; // ISO String for DDB\n title?: string;\n metadata?: string; // Stringified JSON for DDB\n };\n const updateData: ThreadUpdatePayload = {\n updatedAt: now.toISOString(),\n };\n\n if (title) {\n updateData.title = title;\n }\n\n if (metadata) {\n // Merge with existing metadata instead of overwriting\n const existingMetadata = existingThread.metadata\n ? typeof existingThread.metadata === 'string'\n ? JSON.parse(existingThread.metadata)\n : existingThread.metadata\n : {};\n const mergedMetadata = { ...existingMetadata, ...metadata };\n updateData.metadata = JSON.stringify(mergedMetadata); // Stringify merged metadata for update\n }\n\n // Update the thread using the primary key\n await this.service.entities.thread.update({ entity: 'thread', id }).set(updateData).go();\n\n // Return the potentially updated thread object\n return {\n ...existingThread,\n title: title || existingThread.title,\n metadata: metadata ? { ...existingThread.metadata, ...metadata } : existingThread.metadata,\n updatedAt: now,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_UPDATE_THREAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { threadId: id },\n },\n error,\n );\n }\n }\n\n async deleteThread({ threadId }: { threadId: string }): Promise<void> {\n this.logger.debug('Deleting thread', { threadId });\n\n try {\n // First, delete all messages associated with this thread\n const messages = await this.getMessages({ threadId });\n if (messages.length > 0) {\n // Delete messages in batches\n const batchSize = 25; // DynamoDB batch limits\n for (let i = 0; i < messages.length; i += batchSize) {\n const batch = messages.slice(i, i + batchSize);\n await Promise.all(\n batch.map(message =>\n this.service.entities.message\n .delete({\n entity: 'message',\n id: message.id,\n threadId: message.threadId,\n })\n .go(),\n ),\n );\n }\n }\n\n // Then delete the thread using the primary key\n await this.service.entities.thread.delete({ entity: 'thread', id: threadId }).go();\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_DELETE_THREAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { threadId },\n },\n error,\n );\n }\n }\n\n public async getMessages(args: StorageGetMessagesArg & { format?: 'v1' }): Promise<MastraMessageV1[]>;\n public async getMessages(args: StorageGetMessagesArg & { format: 'v2' }): Promise<MastraMessageV2[]>;\n public async getMessages({\n threadId,\n resourceId,\n selectBy,\n format,\n }: StorageGetMessagesArg & { format?: 'v1' | 'v2' }): Promise<MastraMessageV1[] | MastraMessageV2[]> {\n this.logger.debug('Getting messages', { threadId, selectBy });\n\n try {\n if (!threadId.trim()) throw new Error('threadId must be a non-empty string');\n\n const messages: MastraMessageV2[] = [];\n const limit = resolveMessageLimit({ last: selectBy?.last, defaultLimit: Number.MAX_SAFE_INTEGER });\n\n // Handle included messages first (like libsql)\n if (selectBy?.include?.length) {\n const includeMessages = await this._getIncludedMessages(threadId, selectBy);\n if (includeMessages) {\n messages.push(...includeMessages);\n }\n }\n\n // Get remaining messages only if limit is not 0\n if (limit !== 0) {\n // Query messages by thread ID using the GSI\n const query = this.service.entities.message.query.byThread({ entity: 'message', threadId });\n\n // Get messages from the main thread\n let results;\n if (limit !== Number.MAX_SAFE_INTEGER && limit > 0) {\n // Use limit in query to get only the last N messages\n results = await query.go({ limit, order: 'desc' });\n // Reverse the results since we want ascending order\n results.data = results.data.reverse();\n } else {\n // Get all messages\n results = await query.go();\n }\n\n let allThreadMessages = results.data\n .map((data: any) => this.parseMessageData(data))\n .filter((msg: any): msg is MastraMessageV2 => 'content' in msg);\n\n // Sort by createdAt ASC to get proper order\n allThreadMessages.sort((a: MastraMessageV2, b: MastraMessageV2) => {\n const timeA = a.createdAt.getTime();\n const timeB = b.createdAt.getTime();\n if (timeA === timeB) {\n return a.id.localeCompare(b.id);\n }\n return timeA - timeB;\n });\n\n messages.push(...allThreadMessages);\n }\n\n // Sort by createdAt ASC to match libsql behavior, with ID tiebreaker for stable ordering\n messages.sort((a, b) => {\n const timeA = a.createdAt.getTime();\n const timeB = b.createdAt.getTime();\n if (timeA === timeB) {\n return a.id.localeCompare(b.id);\n }\n return timeA - timeB;\n });\n\n // Deduplicate messages by ID (like libsql)\n const uniqueMessages = messages.filter(\n (message, index, self) => index === self.findIndex(m => m.id === message.id),\n );\n\n const list = new MessageList({ threadId, resourceId }).add(uniqueMessages, 'memory');\n if (format === `v2`) return list.get.all.v2();\n return list.get.all.v1();\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_GET_MESSAGES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { threadId, resourceId: resourceId ?? '' },\n },\n error,\n );\n }\n }\n\n public async getMessagesById({\n messageIds,\n format,\n }: {\n messageIds: string[];\n format: 'v1';\n }): Promise<MastraMessageV1[]>;\n public async getMessagesById({\n messageIds,\n format,\n }: {\n messageIds: string[];\n format?: 'v2';\n }): Promise<MastraMessageV2[]>;\n public async getMessagesById({\n messageIds,\n format,\n }: {\n messageIds: string[];\n format?: 'v1' | 'v2';\n }): Promise<MastraMessageV1[] | MastraMessageV2[]> {\n this.logger.debug('Getting messages by ID', { messageIds });\n if (messageIds.length === 0) return [];\n\n try {\n const results = await Promise.all(\n messageIds.map(id => this.service.entities.message.query.primary({ entity: 'message', id }).go()),\n );\n\n const data = results.map(result => result.data).flat(1);\n\n let parsedMessages = data\n .map((data: any) => this.parseMessageData(data))\n .filter((msg: any): msg is MastraMessageV2 => 'content' in msg);\n\n // Deduplicate messages by ID (like libsql)\n const uniqueMessages = parsedMessages.filter(\n (message, index, self) => index === self.findIndex(m => m.id === message.id),\n );\n\n const list = new MessageList().add(uniqueMessages, 'memory');\n if (format === `v1`) return list.get.all.v1();\n return list.get.all.v2();\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_GET_MESSAGES_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { messageIds: JSON.stringify(messageIds) },\n },\n error,\n );\n }\n }\n\n async saveMessages(args: { messages: MastraMessageV1[]; format?: undefined | 'v1' }): Promise<MastraMessageV1[]>;\n async saveMessages(args: { messages: MastraMessageV2[]; format: 'v2' }): Promise<MastraMessageV2[]>;\n async saveMessages(\n args: { messages: MastraMessageV1[]; format?: undefined | 'v1' } | { messages: MastraMessageV2[]; format: 'v2' },\n ): Promise<MastraMessageV2[] | MastraMessageV1[]> {\n const { messages, format = 'v1' } = args;\n this.logger.debug('Saving messages', { count: messages.length });\n\n if (!messages.length) {\n return [];\n }\n\n const threadId = messages[0]?.threadId;\n if (!threadId) {\n throw new Error('Thread ID is required');\n }\n\n // Ensure 'entity' is added and complex fields are handled\n const messagesToSave = messages.map(msg => {\n const now = new Date().toISOString();\n return {\n entity: 'message', // Add entity type\n id: msg.id,\n threadId: msg.threadId,\n role: msg.role,\n type: msg.type,\n resourceId: msg.resourceId,\n // Ensure complex fields are stringified if not handled by attribute setters\n content: typeof msg.content === 'string' ? msg.content : JSON.stringify(msg.content),\n toolCallArgs: `toolCallArgs` in msg && msg.toolCallArgs ? JSON.stringify(msg.toolCallArgs) : undefined,\n toolCallIds: `toolCallIds` in msg && msg.toolCallIds ? JSON.stringify(msg.toolCallIds) : undefined,\n toolNames: `toolNames` in msg && msg.toolNames ? JSON.stringify(msg.toolNames) : undefined,\n createdAt: msg.createdAt instanceof Date ? msg.createdAt.toISOString() : msg.createdAt || now,\n updatedAt: now, // Add updatedAt\n };\n });\n\n try {\n // Process messages sequentially to enable rollback on error\n const savedMessageIds: string[] = [];\n\n for (const messageData of messagesToSave) {\n // Ensure each item has the entity property before sending\n if (!messageData.entity) {\n this.logger.error('Missing entity property in message data for create', { messageData });\n throw new Error('Internal error: Missing entity property during saveMessages');\n }\n\n try {\n await this.service.entities.message.put(messageData).go();\n savedMessageIds.push(messageData.id);\n } catch (error) {\n // Rollback: delete all previously saved messages\n for (const savedId of savedMessageIds) {\n try {\n await this.service.entities.message.delete({ entity: 'message', id: savedId }).go();\n } catch (rollbackError) {\n this.logger.error('Failed to rollback message during save error', {\n messageId: savedId,\n error: rollbackError,\n });\n }\n }\n throw error;\n }\n }\n\n // Update thread's updatedAt timestamp\n await this.service.entities.thread\n .update({ entity: 'thread', id: threadId })\n .set({\n updatedAt: new Date().toISOString(),\n })\n .go();\n\n const list = new MessageList().add(messages, 'memory');\n if (format === `v1`) return list.get.all.v1();\n return list.get.all.v2();\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_SAVE_MESSAGES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { count: messages.length },\n },\n error,\n );\n }\n }\n\n async getThreadsByResourceIdPaginated(\n args: {\n resourceId: string;\n page?: number;\n perPage?: number;\n } & ThreadSortOptions,\n ): Promise<PaginationInfo & { threads: StorageThreadType[] }> {\n const { resourceId, page = 0, perPage = 100 } = args;\n const orderBy = this.castThreadOrderBy(args.orderBy);\n const sortDirection = this.castThreadSortDirection(args.sortDirection);\n\n this.logger.debug('Getting threads by resource ID with pagination', {\n resourceId,\n page,\n perPage,\n orderBy,\n sortDirection,\n });\n\n try {\n // Query threads by resource ID using the GSI\n const query = this.service.entities.thread.query.byResource({ entity: 'thread', resourceId });\n\n // Get all threads for this resource ID (DynamoDB doesn't support OFFSET/LIMIT)\n const results = await query.go();\n\n // Use shared helper method for transformation and sorting\n const allThreads = this.transformAndSortThreads(results.data, orderBy, sortDirection);\n\n // Apply pagination in memory\n const startIndex = page * perPage;\n const endIndex = startIndex + perPage;\n const paginatedThreads = allThreads.slice(startIndex, endIndex);\n\n // Calculate pagination info\n const total = allThreads.length;\n const hasMore = endIndex < total;\n\n return {\n threads: paginatedThreads,\n total,\n page,\n perPage,\n hasMore,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_GET_THREADS_BY_RESOURCE_ID_PAGINATED_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { resourceId, page, perPage },\n },\n error,\n );\n }\n }\n\n async getMessagesPaginated(\n args: StorageGetMessagesArg & { format?: 'v1' | 'v2' },\n ): Promise<PaginationInfo & { messages: MastraMessageV1[] | MastraMessageV2[] }> {\n const { threadId, resourceId, selectBy, format = 'v1' } = args;\n const { page = 0, perPage = 40, dateRange } = selectBy?.pagination || {};\n const fromDate = dateRange?.start;\n const toDate = dateRange?.end;\n const limit = resolveMessageLimit({ last: selectBy?.last, defaultLimit: Number.MAX_SAFE_INTEGER });\n\n this.logger.debug('Getting messages with pagination', { threadId, page, perPage, fromDate, toDate, limit });\n\n try {\n if (!threadId.trim()) throw new Error('threadId must be a non-empty string');\n\n let messages: MastraMessageV2[] = [];\n\n // Handle include messages first\n if (selectBy?.include?.length) {\n const includeMessages = await this._getIncludedMessages(threadId, selectBy);\n if (includeMessages) {\n messages.push(...includeMessages);\n }\n }\n\n // Get remaining messages only if limit is not 0\n if (limit !== 0) {\n // Query messages by thread ID using the GSI\n const query = this.service.entities.message.query.byThread({ entity: 'message', threadId });\n\n // Get messages from the main thread\n let results;\n if (limit !== Number.MAX_SAFE_INTEGER && limit > 0) {\n // Use limit in query to get only the last N messages\n results = await query.go({ limit, order: 'desc' });\n // Reverse the results since we want ascending order\n results.data = results.data.reverse();\n } else {\n // Get all messages\n results = await query.go();\n }\n\n let allThreadMessages = results.data\n .map((data: any) => this.parseMessageData(data))\n .filter((msg: any): msg is MastraMessageV2 => 'content' in msg);\n\n // Sort by createdAt ASC to get proper order\n allThreadMessages.sort((a: MastraMessageV2, b: MastraMessageV2) => {\n const timeA = a.createdAt.getTime();\n const timeB = b.createdAt.getTime();\n if (timeA === timeB) {\n return a.id.localeCompare(b.id);\n }\n return timeA - timeB;\n });\n\n // Exclude already included messages\n const excludeIds = messages.map(m => m.id);\n if (excludeIds.length > 0) {\n allThreadMessages = allThreadMessages.filter((msg: MastraMessageV2) => !excludeIds.includes(msg.id));\n }\n\n messages.push(...allThreadMessages);\n }\n\n // Sort all messages by createdAt (oldest first for final result)\n messages.sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());\n\n // Apply date filtering if needed\n if (fromDate || toDate) {\n messages = messages.filter(msg => {\n const createdAt = new Date(msg.createdAt).getTime();\n if (fromDate && createdAt < new Date(fromDate).getTime()) return false;\n if (toDate && createdAt > new Date(toDate).getTime()) return false;\n return true;\n });\n }\n\n // Save total before pagination\n const total = messages.length;\n\n // Apply offset-based pagination in memory\n const start = page * perPage;\n const end = start + perPage;\n const paginatedMessages = messages.slice(start, end);\n const hasMore = end < total;\n\n const list = new MessageList({ threadId, resourceId }).add(paginatedMessages as MastraMessageV2[], 'memory');\n const finalMessages = format === 'v2' ? list.get.all.v2() : list.get.all.v1();\n\n return {\n messages: finalMessages,\n total,\n page,\n perPage,\n hasMore,\n };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_GET_MESSAGES_PAGINATED_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { threadId, resourceId: resourceId ?? '' },\n },\n error,\n );\n this.logger?.trackException?.(mastraError);\n this.logger?.error?.(mastraError.toString());\n return { messages: [], total: 0, page, perPage, hasMore: false };\n }\n }\n\n // Helper method to get included messages with context\n private async _getIncludedMessages(threadId: string, selectBy: any): Promise<MastraMessageV2[]> {\n if (!threadId.trim()) throw new Error('threadId must be a non-empty string');\n\n if (!selectBy?.include?.length) {\n return [];\n }\n\n const includeMessages: MastraMessageV2[] = [];\n\n for (const includeItem of selectBy.include) {\n try {\n const { id, threadId: targetThreadId, withPreviousMessages = 0, withNextMessages = 0 } = includeItem;\n const searchThreadId = targetThreadId || threadId;\n\n this.logger.debug('Getting included messages for', {\n id,\n targetThreadId,\n searchThreadId,\n withPreviousMessages,\n withNextMessages,\n });\n\n // Get all messages for the target thread\n const query = this.service.entities.message.query.byThread({ entity: 'message', threadId: searchThreadId });\n const results = await query.go();\n const allMessages = results.data\n .map((data: any) => this.parseMessageData(data))\n .filter((msg: any): msg is MastraMessageV2 => 'content' in msg && typeof msg.content === 'object');\n\n this.logger.debug('Found messages in thread', {\n threadId: searchThreadId,\n messageCount: allMessages.length,\n messageIds: allMessages.map((m: MastraMessageV2) => m.id),\n });\n\n // Sort by createdAt ASC to get proper order, with ID tiebreaker for stable ordering\n allMessages.sort((a: MastraMessageV2, b: MastraMessageV2) => {\n const timeA = a.createdAt.getTime();\n const timeB = b.createdAt.getTime();\n if (timeA === timeB) {\n return a.id.localeCompare(b.id);\n }\n return timeA - timeB;\n });\n\n // Find the target message\n const targetIndex = allMessages.findIndex((msg: MastraMessageV2) => msg.id === id);\n if (targetIndex === -1) {\n this.logger.warn('Target message not found', { id, threadId: searchThreadId });\n continue;\n }\n\n this.logger.debug('Found target message at index', { id, targetIndex, totalMessages: allMessages.length });\n\n // Get context messages (previous and next)\n const startIndex = Math.max(0, targetIndex - withPreviousMessages);\n const endIndex = Math.min(allMessages.length, targetIndex + withNextMessages + 1);\n const contextMessages = allMessages.slice(startIndex, endIndex);\n\n this.logger.debug('Context messages', {\n startIndex,\n endIndex,\n contextCount: contextMessages.length,\n contextIds: contextMessages.map((m: MastraMessageV2) => m.id),\n });\n\n includeMessages.push(...contextMessages);\n } catch (error) {\n this.logger.warn('Failed to get included message', { messageId: includeItem.id, error });\n }\n }\n\n this.logger.debug('Total included messages', {\n count: includeMessages.length,\n ids: includeMessages.map((m: MastraMessageV2) => m.id),\n });\n\n return includeMessages;\n }\n\n async updateMessages(args: {\n messages: Partial<Omit<MastraMessageV2, 'createdAt'>> &\n {\n id: string;\n content?: { metadata?: MastraMessageContentV2['metadata']; content?: MastraMessageContentV2['content'] };\n }[];\n }): Promise<MastraMessageV2[]> {\n const { messages } = args;\n this.logger.debug('Updating messages', { count: messages.length });\n\n if (!messages.length) {\n return [];\n }\n\n const updatedMessages: MastraMessageV2[] = [];\n const affectedThreadIds = new Set<string>();\n\n try {\n for (const updateData of messages) {\n const { id, ...updates } = updateData;\n\n // Get the existing message\n const existingMessage = await this.service.entities.message.get({ entity: 'message', id }).go();\n if (!existingMessage.data) {\n this.logger.warn('Message not found for update', { id });\n continue;\n }\n\n const existingMsg = this.parseMessageData(existingMessage.data) as MastraMessageV2;\n const originalThreadId = existingMsg.threadId;\n affectedThreadIds.add(originalThreadId!);\n\n // Prepare the update payload\n const updatePayload: any = {\n updatedAt: new Date().toISOString(),\n };\n\n // Handle basic field updates\n if ('role' in updates && updates.role !== undefined) updatePayload.role = updates.role;\n if ('type' in updates && updates.type !== undefined) updatePayload.type = updates.type;\n if ('resourceId' in updates && updates.resourceId !== undefined) updatePayload.resourceId = updates.resourceId;\n if ('threadId' in updates && updates.threadId !== undefined && updates.threadId !== null) {\n updatePayload.threadId = updates.threadId;\n affectedThreadIds.add(updates.threadId as string);\n }\n\n // Handle content updates\n if (updates.content) {\n const existingContent = existingMsg.content;\n let newContent = { ...existingContent };\n\n // Deep merge metadata if provided\n if (updates.content.metadata !== undefined) {\n newContent.metadata = {\n ...(existingContent.metadata || {}),\n ...(updates.content.metadata || {}),\n };\n }\n\n // Update content string if provided\n if (updates.content.content !== undefined) {\n newContent.content = updates.content.content;\n }\n\n // Update parts if provided (only if it exists in the content type)\n if ('parts' in updates.content && updates.content.parts !== undefined) {\n (newContent as any).parts = updates.content.parts;\n }\n\n updatePayload.content = JSON.stringify(newContent);\n }\n\n // Update the message\n await this.service.entities.message.update({ entity: 'message', id }).set(updatePayload).go();\n\n // Get the updated message\n const updatedMessage = await this.service.entities.message.get({ entity: 'message', id }).go();\n if (updatedMessage.data) {\n updatedMessages.push(this.parseMessageData(updatedMessage.data) as MastraMessageV2);\n }\n }\n\n // Update timestamps for all affected threads\n for (const threadId of affectedThreadIds) {\n await this.service.entities.thread\n .update({ entity: 'thread', id: threadId })\n .set({\n updatedAt: new Date().toISOString(),\n })\n .go();\n }\n\n return updatedMessages;\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_UPDATE_MESSAGES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { count: messages.length },\n },\n error,\n );\n }\n }\n\n async getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n this.logger.debug('Getting resource by ID', { resourceId });\n try {\n const result = await this.service.entities.resource.get({ entity: 'resource', id: resourceId }).go();\n\n if (!result.data) {\n return null;\n }\n\n // ElectroDB handles the transformation with attribute getters\n const data = result.data;\n return {\n ...data,\n // Convert date strings back to Date objects for consistency\n createdAt: typeof data.createdAt === 'string' ? new Date(data.createdAt) : data.createdAt,\n updatedAt: typeof data.updatedAt === 'string' ? new Date(data.updatedAt) : data.updatedAt,\n // Ensure workingMemory is always returned as a string, regardless of automatic parsing\n workingMemory: typeof data.workingMemory === 'object' ? JSON.stringify(data.workingMemory) : data.workingMemory,\n // metadata is already transformed by the entity's getter\n } as StorageResourceType;\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_GET_RESOURCE_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { resourceId },\n },\n error,\n );\n }\n }\n\n async saveResource({ resource }: { resource: StorageResourceType }): Promise<StorageResourceType> {\n this.logger.debug('Saving resource', { resourceId: resource.id });\n\n const now = new Date();\n\n const resourceData = {\n entity: 'resource',\n id: resource.id,\n workingMemory: resource.workingMemory,\n metadata: resource.metadata ? JSON.stringify(resource.metadata) : undefined,\n createdAt: resource.createdAt?.toISOString() || now.toISOString(),\n updatedAt: now.toISOString(),\n };\n\n try {\n await this.service.entities.resource.upsert(resourceData).go();\n\n return {\n id: resource.id,\n workingMemory: resource.workingMemory,\n metadata: resource.metadata,\n createdAt: resource.createdAt || now,\n updatedAt: now,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_SAVE_RESOURCE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { resourceId: resource.id },\n },\n error,\n );\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 this.logger.debug('Updating resource', { resourceId });\n\n try {\n // First, get the existing resource to merge with updates\n const existingResource = await this.getResourceById({ resourceId });\n\n if (!existingResource) {\n // Create new resource if it doesn't exist\n const newResource: StorageResourceType = {\n id: resourceId,\n workingMemory,\n metadata: metadata || {},\n createdAt: new Date(),\n updatedAt: new Date(),\n };\n return this.saveResource({ resource: newResource });\n }\n\n const now = new Date();\n\n // Prepare the update\n const updateData: any = {\n updatedAt: now.toISOString(),\n };\n\n if (workingMemory !== undefined) {\n updateData.workingMemory = workingMemory;\n }\n\n if (metadata) {\n // Merge with existing metadata instead of overwriting\n const existingMetadata = existingResource.metadata || {};\n const mergedMetadata = { ...existingMetadata, ...metadata };\n updateData.metadata = JSON.stringify(mergedMetadata);\n }\n\n // Update the resource using the primary key\n await this.service.entities.resource.update({ entity: 'resource', id: resourceId }).set(updateData).go();\n\n // Return the updated resource object\n return {\n ...existingResource,\n workingMemory: workingMemory !== undefined ? workingMemory : existingResource.workingMemory,\n metadata: metadata ? { ...existingResource.metadata, ...metadata } : existingResource.metadata,\n updatedAt: now,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_UPDATE_RESOURCE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { resourceId },\n },\n error,\n );\n }\n }\n}\n","import { DescribeTableCommand } from '@aws-sdk/client-dynamodb';\nimport type { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n StoreOperations,\n TABLE_AI_SPANS,\n TABLE_EVALS,\n TABLE_MESSAGES,\n TABLE_RESOURCES,\n TABLE_SCORERS,\n TABLE_THREADS,\n TABLE_TRACES,\n TABLE_WORKFLOW_SNAPSHOT,\n} from '@mastra/core/storage';\nimport type { StorageColumn, TABLE_NAMES } from '@mastra/core/storage';\nimport type { Service } from 'electrodb';\n\nexport class StoreOperationsDynamoDB extends StoreOperations {\n client: DynamoDBDocumentClient;\n tableName: string;\n service: Service<Record<string, any>>;\n constructor({\n service,\n tableName,\n client,\n }: {\n service: Service<Record<string, any>>;\n tableName: string;\n client: DynamoDBDocumentClient;\n }) {\n super();\n this.service = service;\n this.client = client;\n this.tableName = tableName;\n }\n\n async hasColumn(): Promise<boolean> {\n return true;\n }\n\n async dropTable(): Promise<void> {}\n\n // Helper methods for entity/table mapping\n private getEntityNameForTable(tableName: TABLE_NAMES): string | null {\n const mapping: Record<TABLE_NAMES, string> = {\n [TABLE_THREADS]: 'thread',\n [TABLE_MESSAGES]: 'message',\n [TABLE_WORKFLOW_SNAPSHOT]: 'workflow_snapshot',\n [TABLE_EVALS]: 'eval',\n [TABLE_SCORERS]: 'score',\n [TABLE_TRACES]: 'trace',\n [TABLE_RESOURCES]: 'resource',\n [TABLE_AI_SPANS]: 'ai_span',\n };\n return mapping[tableName] || null;\n }\n\n /**\n * Pre-processes a record to ensure Date objects are converted to ISO strings\n * This is necessary because ElectroDB validation happens before setters are applied\n */\n private preprocessRecord(record: Record<string, any>): Record<string, any> {\n const processed = { ...record };\n\n // Convert Date objects to ISO strings for date fields\n // This prevents ElectroDB validation errors that occur when Date objects are passed\n // to string-typed attributes, even when the attribute has a setter that converts dates\n if (processed.createdAt instanceof Date) {\n processed.createdAt = processed.createdAt.toISOString();\n }\n if (processed.updatedAt instanceof Date) {\n processed.updatedAt = processed.updatedAt.toISOString();\n }\n if (processed.created_at instanceof Date) {\n processed.created_at = processed.created_at.toISOString();\n }\n\n // Convert result field to JSON string if it's an object\n if (processed.result && typeof processed.result === 'object') {\n processed.result = JSON.stringify(processed.result);\n }\n\n // Convert test_info field to JSON string if it's an object, or remove if undefined/null\n if (processed.test_info && typeof processed.test_info === 'object') {\n processed.test_info = JSON.stringify(processed.test_info);\n } else if (processed.test_info === undefined || processed.test_info === null) {\n delete processed.test_info;\n }\n\n // Convert snapshot field to JSON string if it's an object\n if (processed.snapshot && typeof processed.snapshot === 'object') {\n processed.snapshot = JSON.stringify(processed.snapshot);\n }\n\n // Convert trace-specific fields to JSON strings if they're objects\n // These fields have set/get functions in the entity but validation happens before set\n if (processed.attributes && typeof processed.attributes === 'object') {\n processed.attributes = JSON.stringify(processed.attributes);\n }\n\n if (processed.status && typeof processed.status === 'object') {\n processed.status = JSON.stringify(processed.status);\n }\n\n if (processed.events && typeof processed.events === 'object') {\n processed.events = JSON.stringify(processed.events);\n }\n\n if (processed.links && typeof processed.links === 'object') {\n processed.links = JSON.stringify(processed.links);\n }\n\n return processed;\n }\n\n /**\n * Validates that the required DynamoDB table exists and is accessible.\n * This does not check the table structure - it assumes the table\n * was created with the correct structure via CDK/CloudFormation.\n */\n private async validateTableExists(): Promise<boolean> {\n try {\n const command = new DescribeTableCommand({\n TableName: this.tableName,\n });\n\n // If the table exists, this call will succeed\n // If the table doesn't exist, it will throw a ResourceNotFoundException\n await this.client.send(command);\n return true;\n } catch (error: any) {\n // If the table doesn't exist, DynamoDB returns a ResourceNotFoundException\n if (error.name === 'ResourceNotFoundException') {\n return false;\n }\n\n // For other errors (like permissions issues), we should throw\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_VALIDATE_TABLE_EXISTS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName: this.tableName },\n },\n error,\n );\n }\n }\n\n /**\n * This method is modified for DynamoDB with ElectroDB single-table design.\n * It assumes the table is created and managed externally via CDK/CloudFormation.\n *\n * This implementation only validates that the required table exists and is accessible.\n * No table creation is attempted - we simply check if we can access the table.\n */\n async createTable({ tableName }: { tableName: TABLE_NAMES; schema: Record<string, any> }): Promise<void> {\n this.logger.debug('Validating access to externally managed table', { tableName, physicalTable: this.tableName });\n\n // For single-table design, we just need to verify the table exists and is accessible\n try {\n const tableExists = await this.validateTableExists();\n\n if (!tableExists) {\n this.logger.error(\n `Table ${this.tableName} does not exist or is not accessible. It should be created via CDK/CloudFormation.`,\n );\n throw new Error(\n `Table ${this.tableName} does not exist or is not accessible. Ensure it's created via CDK/CloudFormation before using this store.`,\n );\n }\n\n this.logger.debug(`Table ${this.tableName} exists and is accessible`);\n } catch (error) {\n this.logger.error('Error validating table access', { tableName: this.tableName, error });\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_VALIDATE_TABLE_ACCESS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName: this.tableName },\n },\n error,\n );\n }\n }\n\n async insert({ tableName, record }: { tableName: TABLE_NAMES; record: Record<string, any> }): Promise<void> {\n this.logger.debug('DynamoDB insert called', { tableName });\n\n const entityName = this.getEntityNameForTable(tableName);\n if (!entityName || !this.service.entities[entityName]) {\n throw new MastraError({\n id: 'STORAGE_DYNAMODB_STORE_INSERT_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'No entity defined for tableName',\n details: { tableName },\n });\n }\n\n try {\n // Add the entity type to the record and preprocess before creating\n const dataToSave = { entity: entityName, ...this.preprocessRecord(record) };\n await this.service.entities[entityName].create(dataToSave).go();\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_INSERT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async alterTable(_args: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void> {\n // Nothing to do here, DynamoDB has a flexible schema and handles new attributes automatically upon insertion/update.\n }\n\n /**\n * Clear all items from a logical \"table\" (entity type)\n */\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n this.logger.debug('DynamoDB clearTable called', { tableName });\n\n const entityName = this.getEntityNameForTable(tableName)!;\n\n if (!entityName || !this.service.entities[entityName]) {\n throw new MastraError({\n id: 'STORAGE_DYNAMODB_STORE_CLEAR_TABLE_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'No entity defined for tableName',\n details: { tableName },\n });\n }\n\n try {\n // Scan requires no key, just uses the entity handler\n const result = await this.service.entities[entityName].scan.go({ pages: 'all' }); // Get all pages\n\n if (!result.data.length) {\n this.logger.debug(`No records found to clear for ${tableName}`);\n return;\n }\n\n this.logger.debug(`Found ${result.data.length} records to delete for ${tableName}`);\n\n // ElectroDB batch delete expects the key components for each item\n const keysToDelete = result.data.map((item: any) => {\n const key: { entity: string; [key: string]: any } = { entity: entityName };\n\n // Construct the key based on the specific entity's primary key structure\n switch (entityName) {\n case 'thread':\n if (!item.id) throw new Error(`Missing required key 'id' for entity 'thread'`);\n key.id = item.id;\n break;\n case 'message':\n if (!item.id) throw new Error(`Missing required key 'id' for entity 'message'`);\n key.id = item.id;\n break;\n case 'workflow_snapshot':\n if (!item.workflow_name)\n throw new Error(`Missing required key 'workflow_name' for entity 'workflow_snapshot'`);\n if (!item.run_id) throw new Error(`Missing required key 'run_id' for entity 'workflow_snapshot'`);\n key.workflow_name = item.workflow_name;\n key.run_id = item.run_id;\n break;\n case 'eval':\n // Assuming 'eval' uses 'run_id' or another unique identifier as part of its PK\n // Adjust based on the actual primary key defined in getElectroDbService\n if (!item.run_id) throw new Error(`Missing required key 'run_id' for entity 'eval'`);\n // Add other key components if necessary for 'eval' PK\n key.run_id = item.run_id;\n // Example: if global_run_id is also part of PK:\n // if (!item.global_run_id) throw new Error(`Missing required key 'global_run_id' for entity 'eval'`);\n // key.global_run_id = item.global_run_id;\n break;\n case 'trace':\n // Assuming 'trace' uses 'id' as its PK\n // Adjust based on the actual primary key defined in getElectroDbService\n if (!item.id) throw new Error(`Missing required key 'id' for entity 'trace'`);\n key.id = item.id;\n break;\n case 'score':\n // Score entity uses 'id' as its PK\n if (!item.id) throw new Error(`Missing required key 'id' for entity 'score'`);\n key.id = item.id;\n break;\n default:\n // Handle unknown entity types - log a warning or throw an error\n this.logger.warn(`Unknown entity type encountered during clearTable: ${entityName}`);\n // Optionally throw an error if strict handling is required\n throw new Error(`Cannot construct delete key for unknown entity type: ${entityName}`);\n }\n\n return key;\n });\n\n const batchSize = 25;\n for (let i = 0; i < keysToDelete.length; i += batchSize) {\n const batchKeys = keysToDelete.slice(i, i + batchSize);\n // Pass the array of key objects to delete\n await this.service.entities[entityName].delete(batchKeys).go();\n }\n\n this.logger.debug(`Successfully cleared all records for ${tableName}`);\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_CLEAR_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n /**\n * Insert multiple records as a batch\n */\n async batchInsert({ tableName, records }: { tableName: TABLE_NAMES; records: Record<string, any>[] }): Promise<void> {\n this.logger.debug('DynamoDB batchInsert called', { tableName, count: records.length });\n\n const entityName = this.getEntityNameForTable(tableName);\n if (!entityName || !this.service.entities[entityName]) {\n throw new MastraError({\n id: 'STORAGE_DYNAMODB_STORE_BATCH_INSERT_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'No entity defined for tableName',\n details: { tableName },\n });\n }\n\n // Add entity type and preprocess each record\n const recordsToSave = records.map(rec => ({ entity: entityName, ...this.preprocessRecord(rec) }));\n\n // ElectroDB has batch limits of 25 items, so we need to chunk\n const batchSize = 25;\n const batches = [];\n for (let i = 0; i < recordsToSave.length; i += batchSize) {\n const batch = recordsToSave.slice(i, i + batchSize);\n batches.push(batch);\n }\n\n try {\n // Process each batch\n for (const batch of batches) {\n // Create each item individually within the batch\n for (const recordData of batch) {\n if (!recordData.entity) {\n this.logger.error('Missing entity property in record data for batchInsert', { recordData, tableName });\n throw new Error(`Internal error: Missing entity property during batchInsert for ${tableName}`);\n }\n // Log the object just before the create call\n this.logger.debug('Attempting to create record in batchInsert:', { entityName, recordData });\n await this.service.entities[entityName].create(recordData).go();\n }\n // Original batch call: await this.service.entities[entityName].create(batch).go();\n }\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_BATCH_INSERT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n /**\n * Load a record by its keys\n */\n async load<R>({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, string> }): Promise<R | null> {\n this.logger.debug('DynamoDB load called', { tableName, keys });\n\n const entityName = this.getEntityNameForTable(tableName);\n if (!entityName || !this.service.entities[entityName]) {\n throw new MastraError({\n id: 'STORAGE_DYNAMODB_STORE_LOAD_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'No entity defined for tableName',\n details: { tableName },\n });\n }\n\n try {\n // Add the entity type to the key object for the .get call\n const keyObject = { entity: entityName, ...keys };\n const result = await this.service.entities[entityName].get(keyObject).go();\n\n if (!result.data) {\n return null;\n }\n\n // Add parsing logic if necessary (e.g., for metadata)\n let data = result.data;\n if (data.metadata && typeof data.metadata === 'string') {\n try {\n // data.metadata = JSON.parse(data.metadata); // REMOVED by AI\n } catch {\n /* ignore parse error */\n }\n }\n // Add similar parsing for other JSON fields if needed based on entity type\n\n return data as R;\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_LOAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { ScoreRowData, ScoringSource, ValidatedSaveScorePayload } from '@mastra/core/scores';\nimport { saveScorePayloadSchema } from '@mastra/core/scores';\nimport { ScoresStorage } from '@mastra/core/storage';\nimport type { PaginationInfo, StoragePagination } from '@mastra/core/storage';\nimport type { Service } from 'electrodb';\n\nexport class ScoresStorageDynamoDB extends ScoresStorage {\n private service: Service<Record<string, any>>;\n constructor({ service }: { service: Service<Record<string, any>> }) {\n super();\n this.service = service;\n }\n\n // Helper function to parse score data (handle JSON fields)\n private parseScoreData(data: any): ScoreRowData {\n return {\n ...data,\n // Convert date strings back to Date objects for consistency\n createdAt: data.createdAt ? new Date(data.createdAt) : new Date(),\n updatedAt: data.updatedAt ? new Date(data.updatedAt) : new Date(),\n // JSON fields are already transformed by the entity's getters\n } as ScoreRowData;\n }\n\n async getScoreById({ id }: { id: string }): Promise<ScoreRowData | null> {\n this.logger.debug('Getting score by ID', { id });\n try {\n const result = await this.service.entities.score.get({ entity: 'score', id }).go();\n\n if (!result.data) {\n return null;\n }\n\n return this.parseScoreData(result.data);\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_GET_SCORE_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { id },\n },\n error,\n );\n }\n }\n\n async saveScore(score: Omit<ScoreRowData, 'id' | 'createdAt' | 'updatedAt'>): Promise<{ score: ScoreRowData }> {\n let validatedScore: ValidatedSaveScorePayload;\n try {\n validatedScore = saveScorePayloadSchema.parse(score);\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_SAVE_SCORE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n\n const now = new Date();\n const scoreId = `score-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n\n const scoreData = {\n entity: 'score',\n id: scoreId,\n scorerId: validatedScore.scorerId,\n traceId: validatedScore.traceId || '',\n spanId: validatedScore.spanId || '',\n runId: validatedScore.runId,\n scorer: typeof validatedScore.scorer === 'string' ? validatedScore.scorer : JSON.stringify(validatedScore.scorer),\n preprocessStepResult:\n typeof validatedScore.preprocessStepResult === 'string'\n ? validatedScore.preprocessStepResult\n : JSON.stringify(validatedScore.preprocessStepResult),\n analyzeStepResult:\n typeof validatedScore.analyzeStepResult === 'string'\n ? validatedScore.analyzeStepResult\n : JSON.stringify(validatedScore.analyzeStepResult),\n score: validatedScore.score,\n reason: validatedScore.reason,\n preprocessPrompt: validatedScore.preprocessPrompt,\n generateScorePrompt: validatedScore.generateScorePrompt,\n generateReasonPrompt: validatedScore.generateReasonPrompt,\n analyzePrompt: validatedScore.analyzePrompt,\n input: typeof validatedScore.input === 'string' ? validatedScore.input : JSON.stringify(validatedScore.input),\n output: typeof validatedScore.output === 'string' ? validatedScore.output : JSON.stringify(validatedScore.output),\n additionalContext:\n typeof validatedScore.additionalContext === 'string'\n ? validatedScore.additionalContext\n : JSON.stringify(validatedScore.additionalContext),\n runtimeContext:\n typeof validatedScore.runtimeContext === 'string'\n ? validatedScore.runtimeContext\n : JSON.stringify(validatedScore.runtimeContext),\n entityType: validatedScore.entityType,\n entityData:\n typeof validatedScore.entity === 'string' ? validatedScore.entity : JSON.stringify(validatedScore.entity),\n entityId: validatedScore.entityId,\n source: validatedScore.source,\n resourceId: validatedScore.resourceId || '',\n threadId: validatedScore.threadId || '',\n createdAt: now.toISOString(),\n updatedAt: now.toISOString(),\n };\n\n try {\n await this.service.entities.score.upsert(scoreData).go();\n\n const savedScore: ScoreRowData = {\n ...score,\n id: scoreId,\n createdAt: now,\n updatedAt: now,\n };\n\n return { score: savedScore };\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_SAVE_SCORE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { scorerId: score.scorerId, runId: score.runId },\n },\n error,\n );\n }\n }\n\n async getScoresByScorerId({\n scorerId,\n pagination,\n entityId,\n entityType,\n source,\n }: {\n scorerId: string;\n pagination: StoragePagination;\n entityId?: string;\n entityType?: string;\n source?: ScoringSource;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n try {\n // Query scores by scorer ID using the GSI\n const query = this.service.entities.score.query.byScorer({ entity: 'score', scorerId });\n\n // Get all scores for this scorer ID (DynamoDB doesn't support OFFSET/LIMIT)\n const results = await query.go();\n let allScores = results.data.map((data: any) => this.parseScoreData(data));\n\n // Apply additional filters if provided\n if (entityId) {\n allScores = allScores.filter((score: ScoreRowData) => score.entityId === entityId);\n }\n if (entityType) {\n allScores = allScores.filter((score: ScoreRowData) => score.entityType === entityType);\n }\n if (source) {\n allScores = allScores.filter((score: ScoreRowData) => score.source === source);\n }\n\n // Sort by createdAt DESC (newest first)\n allScores.sort((a: ScoreRowData, b: ScoreRowData) => b.createdAt.getTime() - a.createdAt.getTime());\n\n // Apply pagination in memory\n const startIndex = pagination.page * pagination.perPage;\n const endIndex = startIndex + pagination.perPage;\n const paginatedScores = allScores.slice(startIndex, endIndex);\n\n // Calculate pagination info\n const total = allScores.length;\n const hasMore = endIndex < total;\n\n return {\n scores: paginatedScores,\n pagination: {\n total,\n page: pagination.page,\n perPage: pagination.perPage,\n hasMore,\n },\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_GET_SCORES_BY_SCORER_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n scorerId: scorerId || '',\n entityId: entityId || '',\n entityType: entityType || '',\n source: source || '',\n page: pagination.page,\n perPage: pagination.perPage,\n },\n },\n error,\n );\n }\n }\n\n async getScoresByRunId({\n runId,\n pagination,\n }: {\n runId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n this.logger.debug('Getting scores by run ID', { runId, pagination });\n\n try {\n // Query scores by run ID using the GSI\n const query = this.service.entities.score.query.byRun({ entity: 'score', runId });\n\n // Get all scores for this run ID\n const results = await query.go();\n const allScores = results.data.map((data: any) => this.parseScoreData(data));\n\n // Sort by createdAt DESC (newest first)\n allScores.sort((a: ScoreRowData, b: ScoreRowData) => b.createdAt.getTime() - a.createdAt.getTime());\n\n // Apply pagination in memory\n const startIndex = pagination.page * pagination.perPage;\n const endIndex = startIndex + pagination.perPage;\n const paginatedScores = allScores.slice(startIndex, endIndex);\n\n // Calculate pagination info\n const total = allScores.length;\n const hasMore = endIndex < total;\n\n return {\n scores: paginatedScores,\n pagination: {\n total,\n page: pagination.page,\n perPage: pagination.perPage,\n hasMore,\n },\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_GET_SCORES_BY_RUN_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { runId, page: pagination.page, perPage: pagination.perPage },\n },\n error,\n );\n }\n }\n\n async getScoresByEntityId({\n entityId,\n entityType,\n pagination,\n }: {\n entityId: string;\n entityType: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n this.logger.debug('Getting scores by entity ID', { entityId, entityType, pagination });\n\n try {\n // Use the byEntityData index which uses entityId as the primary key\n const query = this.service.entities.score.query.byEntityData({ entity: 'score', entityId });\n\n // Get all scores for this entity ID\n const results = await query.go();\n let allScores = results.data.map((data: any) => this.parseScoreData(data));\n\n // Filter by entityType since the index only uses entityId\n allScores = allScores.filter((score: ScoreRowData) => score.entityType === entityType);\n\n // Sort by createdAt DESC (newest first)\n allScores.sort((a: ScoreRowData, b: ScoreRowData) => b.createdAt.getTime() - a.createdAt.getTime());\n\n // Apply pagination in memory\n const startIndex = pagination.page * pagination.perPage;\n const endIndex = startIndex + pagination.perPage;\n const paginatedScores = allScores.slice(startIndex, endIndex);\n\n // Calculate pagination info\n const total = allScores.length;\n const hasMore = endIndex < total;\n\n return {\n scores: paginatedScores,\n pagination: {\n total,\n page: pagination.page,\n perPage: pagination.perPage,\n hasMore,\n },\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_GET_SCORES_BY_ENTITY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { entityId, entityType, page: pagination.page, perPage: pagination.perPage },\n },\n error,\n );\n }\n }\n\n async getScoresBySpan({\n traceId,\n spanId,\n pagination,\n }: {\n traceId: string;\n spanId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n this.logger.debug('Getting scores by span', { traceId, spanId, pagination });\n\n try {\n // Query scores by trace ID and span ID using the GSI\n const query = this.service.entities.score.query.bySpan({ entity: 'score', traceId, spanId });\n\n // Get all scores for this trace and span ID\n const results = await query.go();\n const allScores = results.data.map((data: any) => this.parseScoreData(data));\n\n // Sort by createdAt DESC (newest first)\n allScores.sort((a: ScoreRowData, b: ScoreRowData) => b.createdAt.getTime() - a.createdAt.getTime());\n\n // Apply pagination in memory\n const startIndex = pagination.page * pagination.perPage;\n const endIndex = startIndex + pagination.perPage;\n const paginatedScores = allScores.slice(startIndex, endIndex);\n\n // Calculate pagination info\n const total = allScores.length;\n const hasMore = endIndex < total;\n\n return {\n scores: paginatedScores,\n pagination: {\n total,\n page: pagination.page,\n perPage: pagination.perPage,\n hasMore,\n },\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_GET_SCORES_BY_SPAN_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { traceId, spanId, page: pagination.page, perPage: pagination.perPage },\n },\n error,\n );\n }\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { TABLE_TRACES, TracesStorage } from '@mastra/core/storage';\nimport type { PaginationInfo, StorageGetTracesPaginatedArg } from '@mastra/core/storage';\nimport type { Trace } from '@mastra/core/telemetry';\nimport type { Service } from 'electrodb';\nimport type { StoreOperationsDynamoDB } from '../operations';\n\nexport class TracesStorageDynamoDB extends TracesStorage {\n private service: Service<Record<string, any>>;\n private operations: StoreOperationsDynamoDB;\n constructor({ service, operations }: { service: Service<Record<string, any>>; operations: StoreOperationsDynamoDB }) {\n super();\n\n this.service = service;\n this.operations = operations;\n }\n\n // Trace operations\n async getTraces(args: {\n name?: string;\n scope?: string;\n page: number;\n perPage: number;\n attributes?: Record<string, string>;\n filters?: Record<string, any>;\n }): Promise<any[]> {\n const { name, scope, page, perPage } = args;\n this.logger.debug('Getting traces', { name, scope, page, perPage });\n\n try {\n let query;\n\n // Determine which index to use based on the provided filters\n // Provide *all* composite key components for the relevant index\n if (name) {\n query = this.service.entities.trace.query.byName({ entity: 'trace', name });\n } else if (scope) {\n query = this.service.entities.trace.query.byScope({ entity: 'trace', scope });\n } else {\n this.logger.warn('Performing a scan operation on traces - consider using a more specific query');\n query = this.service.entities.trace.scan;\n }\n\n let items: any[] = [];\n let cursor = null;\n let pagesFetched = 0;\n const startPage = page > 0 ? page : 1;\n\n do {\n const results: { data: any[]; cursor: string | null } = await query.go({ cursor, limit: perPage });\n pagesFetched++;\n if (pagesFetched === startPage) {\n items = results.data;\n break;\n }\n cursor = results.cursor;\n if (!cursor && results.data.length > 0 && pagesFetched < startPage) {\n break;\n }\n } while (cursor && pagesFetched < startPage);\n\n return items;\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_GET_TRACES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async batchTraceInsert({ records }: { records: Record<string, any>[] }): Promise<void> {\n this.logger.debug('Batch inserting traces', { count: records.length });\n\n if (!records.length) {\n return;\n }\n\n try {\n // Add 'entity' type to each record before passing to generic batchInsert\n const recordsToSave = records.map(rec => ({ entity: 'trace', ...rec }));\n await this.operations.batchInsert({\n tableName: TABLE_TRACES,\n records: recordsToSave, // Pass records with 'entity' included\n });\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_BATCH_TRACE_INSERT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { count: records.length },\n },\n error,\n );\n }\n }\n\n async getTracesPaginated(args: StorageGetTracesPaginatedArg): Promise<PaginationInfo & { traces: Trace[] }> {\n const { name, scope, page = 0, perPage = 100, attributes, filters, dateRange } = args;\n this.logger.debug('Getting traces with pagination', { name, scope, page, perPage, attributes, filters, dateRange });\n\n try {\n let query;\n\n // Determine which index to use based on the provided filters\n if (name) {\n query = this.service.entities.trace.query.byName({ entity: 'trace', name });\n } else if (scope) {\n query = this.service.entities.trace.query.byScope({ entity: 'trace', scope });\n } else {\n this.logger.warn('Performing a scan operation on traces - consider using a more specific query');\n query = this.service.entities.trace.scan;\n }\n\n // For DynamoDB, we need to fetch all data and apply pagination in memory\n // since DynamoDB doesn't support traditional offset-based pagination\n const results = await query.go({\n order: 'desc',\n pages: 'all', // Get all pages to apply filtering and pagination\n });\n\n if (!results.data.length) {\n return {\n traces: [],\n total: 0,\n page,\n perPage,\n hasMore: false,\n };\n }\n\n // Apply filters in memory\n let filteredData = results.data;\n\n // Filter by attributes if provided\n if (attributes) {\n filteredData = filteredData.filter((item: Record<string, any>) => {\n try {\n // Handle the case where attributes might be stored as \"[object Object]\" or JSON string\n let itemAttributes: Record<string, any> = {};\n\n if (item.attributes) {\n if (typeof item.attributes === 'string') {\n if (item.attributes === '[object Object]') {\n // This means the object was stringified incorrectly\n itemAttributes = {};\n } else {\n try {\n itemAttributes = JSON.parse(item.attributes);\n } catch {\n itemAttributes = {};\n }\n }\n } else if (typeof item.attributes === 'object') {\n itemAttributes = item.attributes;\n }\n }\n\n return Object.entries(attributes).every(([key, value]) => itemAttributes[key] === value);\n } catch (e) {\n this.logger.warn('Failed to parse attributes during filtering', { item, error: e });\n return false;\n }\n });\n }\n\n // Filter by date range if provided\n if (dateRange?.start) {\n filteredData = filteredData.filter((item: Record<string, any>) => {\n const itemDate = new Date(item.createdAt);\n return itemDate >= dateRange.start!;\n });\n }\n\n if (dateRange?.end) {\n filteredData = filteredData.filter((item: Record<string, any>) => {\n const itemDate = new Date(item.createdAt);\n return itemDate <= dateRange.end!;\n });\n }\n\n // Apply pagination\n const total = filteredData.length;\n const start = page * perPage;\n const end = start + perPage;\n const paginatedData = filteredData.slice(start, end);\n\n const traces = paginatedData.map((item: any) => {\n // Handle the case where attributes might be stored as \"[object Object]\" or JSON string\n let attributes: Record<string, any> | undefined;\n if (item.attributes) {\n if (typeof item.attributes === 'string') {\n if (item.attributes === '[object Object]') {\n attributes = undefined;\n } else {\n try {\n attributes = JSON.parse(item.attributes);\n } catch {\n attributes = undefined;\n }\n }\n } else if (typeof item.attributes === 'object') {\n attributes = item.attributes;\n }\n }\n\n let status: Record<string, any> | undefined;\n if (item.status) {\n if (typeof item.status === 'string') {\n try {\n status = JSON.parse(item.status);\n } catch {\n status = undefined;\n }\n } else if (typeof item.status === 'object') {\n status = item.status;\n }\n }\n\n let events: any[] | undefined;\n if (item.events) {\n if (typeof item.events === 'string') {\n try {\n events = JSON.parse(item.events);\n } catch {\n events = undefined;\n }\n } else if (Array.isArray(item.events)) {\n events = item.events;\n }\n }\n\n let links: any[] | undefined;\n if (item.links) {\n if (typeof item.links === 'string') {\n try {\n links = JSON.parse(item.links);\n } catch {\n links = undefined;\n }\n } else if (Array.isArray(item.links)) {\n links = item.links;\n }\n }\n\n return {\n id: item.id,\n parentSpanId: item.parentSpanId,\n name: item.name,\n traceId: item.traceId,\n scope: item.scope,\n kind: item.kind,\n attributes,\n status,\n events,\n links,\n other: item.other,\n startTime: item.startTime,\n endTime: item.endTime,\n createdAt: item.createdAt,\n };\n });\n\n return {\n traces,\n total,\n page,\n perPage,\n hasMore: end < total,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_GET_TRACES_PAGINATED_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { WorkflowsStorage } from '@mastra/core/storage';\nimport type { WorkflowRun, WorkflowRuns } from '@mastra/core/storage';\nimport type { StepResult, WorkflowRunState } from '@mastra/core/workflows';\nimport type { Service } from 'electrodb';\n\n// Define the structure for workflow snapshot items retrieved from DynamoDB\ninterface WorkflowSnapshotDBItem {\n entity: string; // Typically 'workflow_snapshot'\n workflow_name: string;\n run_id: string;\n snapshot: WorkflowRunState; // Should be WorkflowRunState after ElectroDB get attribute processing\n createdAt: string; // ISO Date string\n updatedAt: string; // ISO Date string\n resourceId?: string;\n}\n\nfunction formatWorkflowRun(snapshotData: WorkflowSnapshotDBItem): WorkflowRun {\n return {\n workflowName: snapshotData.workflow_name,\n runId: snapshotData.run_id,\n snapshot: snapshotData.snapshot as WorkflowRunState,\n createdAt: new Date(snapshotData.createdAt),\n updatedAt: new Date(snapshotData.updatedAt),\n resourceId: snapshotData.resourceId,\n };\n}\n\nexport class WorkflowStorageDynamoDB extends WorkflowsStorage {\n private service: Service<Record<string, any>>;\n constructor({ service }: { service: Service<Record<string, any>> }) {\n super();\n\n this.service = service;\n }\n\n updateWorkflowResults(\n {\n // workflowName,\n // runId,\n // stepId,\n // result,\n // runtimeContext,\n }: {\n workflowName: string;\n runId: string;\n stepId: string;\n result: StepResult<any, any, any, any>;\n runtimeContext: Record<string, any>;\n },\n ): Promise<Record<string, StepResult<any, any, any, any>>> {\n throw new Error('Method not implemented.');\n }\n updateWorkflowState(\n {\n // workflowName,\n // runId,\n // opts,\n }: {\n workflowName: string;\n runId: string;\n opts: {\n status: string;\n result?: StepResult<any, any, any, any>;\n error?: string;\n suspendedPaths?: Record<string, number[]>;\n waitingPaths?: Record<string, number[]>;\n };\n },\n ): Promise<WorkflowRunState | undefined> {\n throw new Error('Method not implemented.');\n }\n\n // Workflow operations\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 this.logger.debug('Persisting workflow snapshot', { workflowName, runId });\n\n try {\n const now = new Date().toISOString();\n // Prepare data including the 'entity' type\n const data = {\n entity: 'workflow_snapshot', // Add entity type\n workflow_name: workflowName,\n run_id: runId,\n snapshot: JSON.stringify(snapshot), // Stringify the snapshot object\n createdAt: now,\n updatedAt: now,\n resourceId,\n };\n // Use upsert instead of create to handle both create and update cases\n await this.service.entities.workflow_snapshot.upsert(data).go();\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_PERSIST_WORKFLOW_SNAPSHOT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { workflowName, runId },\n },\n error,\n );\n }\n }\n\n async loadWorkflowSnapshot({\n workflowName,\n runId,\n }: {\n workflowName: string;\n runId: string;\n }): Promise<WorkflowRunState | null> {\n this.logger.debug('Loading workflow snapshot', { workflowName, runId });\n\n try {\n // Provide *all* composite key components for the primary index ('entity', 'workflow_name', 'run_id')\n const result = await this.service.entities.workflow_snapshot\n .get({\n entity: 'workflow_snapshot', // Add entity type\n workflow_name: workflowName,\n run_id: runId,\n })\n .go();\n\n if (!result.data?.snapshot) {\n // Check snapshot exists\n return null;\n }\n\n // Parse the snapshot string\n return result.data.snapshot as WorkflowRunState;\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_LOAD_WORKFLOW_SNAPSHOT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { workflowName, runId },\n },\n error,\n );\n }\n }\n\n async getWorkflowRuns(args?: {\n workflowName?: string;\n fromDate?: Date;\n toDate?: Date;\n limit?: number;\n offset?: number;\n resourceId?: string;\n }): Promise<WorkflowRuns> {\n this.logger.debug('Getting workflow runs', { args });\n\n try {\n // Default values\n const limit = args?.limit || 10;\n const offset = args?.offset || 0;\n\n let query;\n\n if (args?.workflowName) {\n // Query by workflow name using the primary index\n // Provide *all* composite key components for the PK ('entity', 'workflow_name')\n query = this.service.entities.workflow_snapshot.query.primary({\n entity: 'workflow_snapshot', // Add entity type\n workflow_name: args.workflowName,\n });\n } else {\n // If no workflow name, we need to scan\n // This is not ideal for production with large datasets\n this.logger.warn('Performing a scan operation on workflow snapshots - consider using a more specific query');\n query = this.service.entities.workflow_snapshot.scan; // Scan still uses the service entity\n }\n\n const allMatchingSnapshots: WorkflowSnapshotDBItem[] = [];\n let cursor: string | null = null;\n const DYNAMODB_PAGE_SIZE = 100; // Sensible page size for fetching\n\n do {\n const pageResults: { data: WorkflowSnapshotDBItem[]; cursor: string | null } = await query.go({\n limit: DYNAMODB_PAGE_SIZE,\n cursor,\n });\n\n if (pageResults.data && pageResults.data.length > 0) {\n let pageFilteredData: WorkflowSnapshotDBItem[] = pageResults.data;\n\n // Apply date filters if specified\n if (args?.fromDate || args?.toDate) {\n pageFilteredData = pageFilteredData.filter((snapshot: WorkflowSnapshotDBItem) => {\n const createdAt = new Date(snapshot.createdAt);\n if (args.fromDate && createdAt < args.fromDate) {\n return false;\n }\n if (args.toDate && createdAt > args.toDate) {\n return false;\n }\n return true;\n });\n }\n\n // Filter by resourceId if specified\n if (args?.resourceId) {\n pageFilteredData = pageFilteredData.filter((snapshot: WorkflowSnapshotDBItem) => {\n return snapshot.resourceId === args.resourceId;\n });\n }\n allMatchingSnapshots.push(...pageFilteredData);\n }\n\n cursor = pageResults.cursor;\n } while (cursor);\n\n if (!allMatchingSnapshots.length) {\n return { runs: [], total: 0 };\n }\n\n // Apply offset and limit to the accumulated filtered results\n const total = allMatchingSnapshots.length;\n const paginatedData = allMatchingSnapshots.slice(offset, offset + limit);\n\n // Format and return the results\n const runs = paginatedData.map((snapshot: WorkflowSnapshotDBItem) => formatWorkflowRun(snapshot));\n\n return {\n runs,\n total,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_GET_WORKFLOW_RUNS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { workflowName: args?.workflowName || '', resourceId: args?.resourceId || '' },\n },\n error,\n );\n }\n }\n\n async getWorkflowRunById(args: { runId: string; workflowName?: string }): Promise<WorkflowRun | null> {\n const { runId, workflowName } = args;\n this.logger.debug('Getting workflow run by ID', { runId, workflowName });\n\n try {\n // If we have a workflowName, we can do a direct get using the primary key\n if (workflowName) {\n this.logger.debug('WorkflowName provided, using direct GET operation.');\n const result = await this.service.entities.workflow_snapshot\n .get({\n entity: 'workflow_snapshot', // Entity type for PK\n workflow_name: workflowName,\n run_id: runId,\n })\n .go();\n\n if (!result.data) {\n return null;\n }\n\n const snapshot = result.data.snapshot;\n return {\n workflowName: result.data.workflow_name,\n runId: result.data.run_id,\n snapshot,\n createdAt: new Date(result.data.createdAt),\n updatedAt: new Date(result.data.updatedAt),\n resourceId: result.data.resourceId,\n };\n }\n\n // Otherwise, if workflowName is not provided, use the GSI on runId.\n // This is more efficient than a full table scan.\n this.logger.debug(\n 'WorkflowName not provided. Attempting to find workflow run by runId using GSI. Ensure GSI (e.g., \"byRunId\") is defined on the workflowSnapshot entity with run_id as its key and provisioned in DynamoDB.',\n );\n\n // IMPORTANT: This assumes a GSI (e.g., named 'byRunId') exists on the workflowSnapshot entity\n // with 'run_id' as its partition key. This GSI must be:\n // 1. Defined in your ElectroDB model (e.g., in stores/dynamodb/src/entities/index.ts).\n // 2. Provisioned in the actual DynamoDB table (e.g., via CDK/CloudFormation).\n // The query key object includes 'entity' as it's good practice with ElectroDB and single-table design,\n // aligning with how other GSIs are queried in this file.\n const result = await this.service.entities.workflow_snapshot.query\n .gsi2({ entity: 'workflow_snapshot', run_id: runId }) // Replace 'byRunId' with your actual GSI name\n .go();\n\n // If the GSI query returns multiple items (e.g., if run_id is not globally unique across all snapshots),\n // this will take the first one. The original scan logic also effectively took the first match found.\n // If run_id is guaranteed unique, result.data should contain at most one item.\n const matchingRunDbItem: WorkflowSnapshotDBItem | null =\n result.data && result.data.length > 0 ? result.data[0] : null;\n\n if (!matchingRunDbItem) {\n return null;\n }\n\n const snapshot = matchingRunDbItem.snapshot;\n return {\n workflowName: matchingRunDbItem.workflow_name,\n runId: matchingRunDbItem.run_id,\n snapshot,\n createdAt: new Date(matchingRunDbItem.createdAt),\n updatedAt: new Date(matchingRunDbItem.updatedAt),\n resourceId: matchingRunDbItem.resourceId,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_GET_WORKFLOW_RUN_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { runId, workflowName: args?.workflowName || '' },\n },\n error,\n );\n }\n }\n}\n","import { DynamoDBClient, DescribeTableCommand } from '@aws-sdk/client-dynamodb';\nimport { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb';\nimport type { MastraMessageContentV2 } from '@mastra/core/agent';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { StorageThreadType, MastraMessageV2, MastraMessageV1 } from '@mastra/core/memory';\n\nimport type { ScoreRowData, ScoringSource } from '@mastra/core/scores';\nimport { MastraStorage } from '@mastra/core/storage';\nimport type {\n EvalRow,\n StorageGetMessagesArg,\n WorkflowRun,\n WorkflowRuns,\n TABLE_NAMES,\n StorageGetTracesArg,\n PaginationInfo,\n StorageColumn,\n StoragePagination,\n StorageDomains,\n PaginationArgs,\n StorageResourceType,\n ThreadSortOptions,\n} from '@mastra/core/storage';\nimport type { Trace } from '@mastra/core/telemetry';\nimport type { StepResult, WorkflowRunState } from '@mastra/core/workflows';\nimport type { Service } from 'electrodb';\nimport { getElectroDbService } from '../entities';\nimport { LegacyEvalsDynamoDB } from './domains/legacy-evals';\nimport { MemoryStorageDynamoDB } from './domains/memory';\nimport { StoreOperationsDynamoDB } from './domains/operations';\nimport { ScoresStorageDynamoDB } from './domains/score';\nimport { TracesStorageDynamoDB } from './domains/traces';\nimport { WorkflowStorageDynamoDB } from './domains/workflows';\n\nexport interface DynamoDBStoreConfig {\n region?: string;\n tableName: string;\n endpoint?: string;\n credentials?: {\n accessKeyId: string;\n secretAccessKey: string;\n };\n}\n\n// Define a type for our service that allows string indexing\ntype MastraService = Service<Record<string, any>> & {\n [key: string]: any;\n};\n\nexport class DynamoDBStore extends MastraStorage {\n private tableName: string;\n private client: DynamoDBDocumentClient;\n private service: MastraService;\n protected hasInitialized: Promise<boolean> | null = null;\n stores: StorageDomains;\n\n constructor({ name, config }: { name: string; config: DynamoDBStoreConfig }) {\n super({ name });\n\n // Validate required config\n try {\n if (!config.tableName || typeof config.tableName !== 'string' || config.tableName.trim() === '') {\n throw new Error('DynamoDBStore: config.tableName must be provided and cannot be empty.');\n }\n // Validate tableName characters (basic check)\n if (!/^[a-zA-Z0-9_.-]{3,255}$/.test(config.tableName)) {\n throw new Error(\n `DynamoDBStore: config.tableName \"${config.tableName}\" contains invalid characters or is not between 3 and 255 characters long.`,\n );\n }\n\n const dynamoClient = new DynamoDBClient({\n region: config.region || 'us-east-1',\n endpoint: config.endpoint,\n credentials: config.credentials,\n });\n\n this.tableName = config.tableName;\n this.client = DynamoDBDocumentClient.from(dynamoClient);\n this.service = getElectroDbService(this.client, this.tableName) as MastraService;\n\n const operations = new StoreOperationsDynamoDB({\n service: this.service,\n tableName: this.tableName,\n client: this.client,\n });\n\n const traces = new TracesStorageDynamoDB({ service: this.service, operations });\n\n const workflows = new WorkflowStorageDynamoDB({ service: this.service });\n\n const memory = new MemoryStorageDynamoDB({ service: this.service });\n\n const scores = new ScoresStorageDynamoDB({ service: this.service });\n\n this.stores = {\n operations,\n legacyEvals: new LegacyEvalsDynamoDB({ service: this.service, tableName: this.tableName }),\n traces,\n workflows,\n memory,\n scores,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_CONSTRUCTOR_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n },\n error,\n );\n }\n\n // We're using a single table design with ElectroDB,\n // so we don't need to create multiple tables\n }\n\n get supports() {\n return {\n selectByIncludeResourceScope: true,\n resourceWorkingMemory: true,\n hasColumn: false,\n createTable: false,\n deleteMessages: false,\n getScoresBySpan: true,\n };\n }\n\n /**\n * Validates that the required DynamoDB table exists and is accessible.\n * This does not check the table structure - it assumes the table\n * was created with the correct structure via CDK/CloudFormation.\n */\n private async validateTableExists(): Promise<boolean> {\n try {\n const command = new DescribeTableCommand({\n TableName: this.tableName,\n });\n\n // If the table exists, this call will succeed\n // If the table doesn't exist, it will throw a ResourceNotFoundException\n await this.client.send(command);\n return true;\n } catch (error: any) {\n // If the table doesn't exist, DynamoDB returns a ResourceNotFoundException\n if (error.name === 'ResourceNotFoundException') {\n return false;\n }\n\n // For other errors (like permissions issues), we should throw\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_VALIDATE_TABLE_EXISTS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName: this.tableName },\n },\n error,\n );\n }\n }\n\n /**\n * Initialize storage, validating the externally managed table is accessible.\n * For the single-table design, we only validate once that we can access\n * the table that was created via CDK/CloudFormation.\n */\n async init(): Promise<void> {\n if (this.hasInitialized === null) {\n // If no initialization promise exists, create and store it.\n // This assignment ensures that even if multiple calls arrive here concurrently,\n // they will all eventually await the same promise instance created by the first one\n // to complete this assignment.\n this.hasInitialized = this._performInitializationAndStore();\n }\n\n try {\n // Await the stored promise.\n // If initialization was successful, this resolves.\n // If it failed, this will re-throw the error caught and re-thrown by _performInitializationAndStore.\n await this.hasInitialized;\n } catch (error) {\n // The error has already been handled by _performInitializationAndStore\n // (i.e., this.hasInitialized was reset). Re-throwing here ensures\n // the caller of init() is aware of the failure.\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_INIT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName: this.tableName },\n },\n error,\n );\n }\n }\n\n /**\n * Performs the actual table validation and stores the promise.\n * Handles resetting the stored promise on failure to allow retries.\n */\n private _performInitializationAndStore(): Promise<boolean> {\n return this.validateTableExists()\n .then(exists => {\n if (!exists) {\n throw new Error(\n `Table ${this.tableName} does not exist or is not accessible. Ensure it's created via CDK/CloudFormation before using this store.`,\n );\n }\n // Successfully initialized\n return true;\n })\n .catch(err => {\n // Initialization failed. Clear the stored promise to allow future calls to init() to retry.\n this.hasInitialized = null;\n // Re-throw the error so it can be caught by the awaiter in init()\n throw err;\n });\n }\n\n async createTable({ tableName, schema }: { tableName: TABLE_NAMES; schema: Record<string, any> }): Promise<void> {\n return this.stores.operations.createTable({ tableName, schema });\n }\n\n async alterTable(_args: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void> {\n return this.stores.operations.alterTable(_args);\n }\n\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n return this.stores.operations.clearTable({ tableName });\n }\n\n async dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n return this.stores.operations.dropTable({ tableName });\n }\n\n async insert({ tableName, record }: { tableName: TABLE_NAMES; record: Record<string, any> }): Promise<void> {\n return this.stores.operations.insert({ tableName, record });\n }\n\n async batchInsert({ tableName, records }: { tableName: TABLE_NAMES; records: Record<string, any>[] }): Promise<void> {\n return this.stores.operations.batchInsert({ tableName, records });\n }\n\n async load<R>({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, string> }): Promise<R | null> {\n return this.stores.operations.load({ tableName, keys });\n }\n\n // Thread operations\n async getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null> {\n return this.stores.memory.getThreadById({ threadId });\n }\n\n async getThreadsByResourceId(args: { resourceId: string } & ThreadSortOptions): Promise<StorageThreadType[]> {\n return this.stores.memory.getThreadsByResourceId(args);\n }\n\n async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n return this.stores.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.stores.memory.updateThread({ id, title, metadata });\n }\n\n async deleteThread({ threadId }: { threadId: string }): Promise<void> {\n return this.stores.memory.deleteThread({ threadId });\n }\n\n // Message operations\n public async getMessages(args: StorageGetMessagesArg & { format?: 'v1' }): Promise<MastraMessageV1[]>;\n public async getMessages(args: StorageGetMessagesArg & { format: 'v2' }): Promise<MastraMessageV2[]>;\n public async getMessages({\n threadId,\n resourceId,\n selectBy,\n format,\n }: StorageGetMessagesArg & { format?: 'v1' | 'v2' }): Promise<MastraMessageV1[] | MastraMessageV2[]> {\n return this.stores.memory.getMessages({ threadId, resourceId, selectBy, format });\n }\n\n async getMessagesById({ messageIds, format }: { messageIds: string[]; format: 'v1' }): Promise<MastraMessageV1[]>;\n async getMessagesById({ messageIds, format }: { messageIds: string[]; format?: 'v2' }): Promise<MastraMessageV2[]>;\n async getMessagesById({\n messageIds,\n format,\n }: {\n messageIds: string[];\n format?: 'v1' | 'v2';\n }): Promise<MastraMessageV1[] | MastraMessageV2[]> {\n return this.stores.memory.getMessagesById({ messageIds, format });\n }\n\n async saveMessages(args: { messages: MastraMessageV1[]; format?: undefined | 'v1' }): Promise<MastraMessageV1[]>;\n async saveMessages(args: { messages: MastraMessageV2[]; format: 'v2' }): Promise<MastraMessageV2[]>;\n async saveMessages(\n args: { messages: MastraMessageV1[]; format?: undefined | 'v1' } | { messages: MastraMessageV2[]; format: 'v2' },\n ): Promise<MastraMessageV2[] | MastraMessageV1[]> {\n return this.stores.memory.saveMessages(args);\n }\n\n async getThreadsByResourceIdPaginated(\n args: {\n resourceId: string;\n page: number;\n perPage: number;\n } & ThreadSortOptions,\n ): Promise<PaginationInfo & { threads: StorageThreadType[] }> {\n return this.stores.memory.getThreadsByResourceIdPaginated(args);\n }\n\n async getMessagesPaginated(\n args: StorageGetMessagesArg & { format?: 'v1' | 'v2' },\n ): Promise<PaginationInfo & { messages: MastraMessageV1[] | MastraMessageV2[] }> {\n return this.stores.memory.getMessagesPaginated(args);\n }\n\n async updateMessages(_args: {\n messages: Partial<Omit<MastraMessageV2, 'createdAt'>> &\n {\n id: string;\n content?: { metadata?: MastraMessageContentV2['metadata']; content?: MastraMessageContentV2['content'] };\n }[];\n }): Promise<MastraMessageV2[]> {\n return this.stores.memory.updateMessages(_args);\n }\n\n // Trace operations\n async getTraces(args: {\n name?: string;\n scope?: string;\n page: number;\n perPage: number;\n attributes?: Record<string, string>;\n filters?: Record<string, any>;\n }): Promise<any[]> {\n return this.stores.traces.getTraces(args);\n }\n\n async batchTraceInsert({ records }: { records: Record<string, any>[] }): Promise<void> {\n return this.stores.traces.batchTraceInsert({ records });\n }\n\n async getTracesPaginated(_args: StorageGetTracesArg): Promise<PaginationInfo & { traces: Trace[] }> {\n return this.stores.traces.getTracesPaginated(_args);\n }\n\n // Workflow operations\n async updateWorkflowResults({\n workflowName,\n runId,\n stepId,\n result,\n runtimeContext,\n }: {\n workflowName: string;\n runId: string;\n stepId: string;\n result: StepResult<any, any, any, any>;\n runtimeContext: Record<string, any>;\n }): Promise<Record<string, StepResult<any, any, any, any>>> {\n return this.stores.workflows.updateWorkflowResults({ workflowName, runId, stepId, result, runtimeContext });\n }\n\n async updateWorkflowState({\n workflowName,\n runId,\n opts,\n }: {\n workflowName: string;\n runId: string;\n opts: {\n status: string;\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.stores.workflows.updateWorkflowState({ workflowName, runId, opts });\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 return this.stores.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.stores.workflows.loadWorkflowSnapshot({ workflowName, runId });\n }\n\n async getWorkflowRuns(args?: {\n workflowName?: string;\n fromDate?: Date;\n toDate?: Date;\n limit?: number;\n offset?: number;\n resourceId?: string;\n }): Promise<WorkflowRuns> {\n return this.stores.workflows.getWorkflowRuns(args);\n }\n\n async getWorkflowRunById(args: { runId: string; workflowName?: string }): Promise<WorkflowRun | null> {\n return this.stores.workflows.getWorkflowRunById(args);\n }\n\n async getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n return this.stores.memory.getResourceById({ resourceId });\n }\n\n async saveResource({ resource }: { resource: StorageResourceType }): Promise<StorageResourceType> {\n return this.stores.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, any>;\n }): Promise<StorageResourceType> {\n return this.stores.memory.updateResource({ resourceId, workingMemory, metadata });\n }\n\n // Eval operations\n async getEvalsByAgentName(agentName: string, type?: 'test' | 'live'): Promise<EvalRow[]> {\n return this.stores.legacyEvals.getEvalsByAgentName(agentName, type);\n }\n\n async getEvals(\n options: {\n agentName?: string;\n type?: 'test' | 'live';\n } & PaginationArgs,\n ): Promise<PaginationInfo & { evals: EvalRow[] }> {\n return this.stores.legacyEvals.getEvals(options);\n }\n\n /**\n * Closes the DynamoDB client connection and cleans up resources.\n * Should be called when the store is no longer needed, e.g., at the end of tests or application shutdown.\n */\n public async close(): Promise<void> {\n this.logger.debug('Closing DynamoDB client for store:', { name: this.name });\n try {\n this.client.destroy();\n this.logger.debug('DynamoDB client closed successfully for store:', { name: this.name });\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_CLOSE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n /**\n * SCORERS - Not implemented\n */\n async getScoreById({ id: _id }: { id: string }): Promise<ScoreRowData | null> {\n return this.stores.scores.getScoreById({ id: _id });\n }\n\n async saveScore(_score: ScoreRowData): Promise<{ score: ScoreRowData }> {\n return this.stores.scores.saveScore(_score);\n }\n\n async getScoresByRunId({\n runId: _runId,\n pagination: _pagination,\n }: {\n runId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.getScoresByRunId({ runId: _runId, pagination: _pagination });\n }\n\n async getScoresByEntityId({\n entityId: _entityId,\n entityType: _entityType,\n pagination: _pagination,\n }: {\n pagination: StoragePagination;\n entityId: string;\n entityType: string;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.getScoresByEntityId({\n entityId: _entityId,\n entityType: _entityType,\n pagination: _pagination,\n });\n }\n\n async getScoresByScorerId({\n scorerId,\n source,\n entityId,\n entityType,\n pagination,\n }: {\n scorerId: string;\n entityId?: string;\n entityType?: string;\n source?: ScoringSource;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.getScoresByScorerId({ scorerId, source, entityId, entityType, pagination });\n }\n\n async getScoresBySpan({\n traceId,\n spanId,\n pagination,\n }: {\n traceId: string;\n spanId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.getScoresBySpan({ traceId, spanId, pagination });\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/entities/utils.ts","../src/entities/eval.ts","../src/entities/message.ts","../src/entities/resource.ts","../src/entities/score.ts","../src/entities/thread.ts","../src/entities/trace.ts","../src/entities/workflow-snapshot.ts","../src/entities/index.ts","../src/storage/domains/memory/index.ts","../src/storage/domains/operations/index.ts","../src/storage/domains/score/index.ts","../src/storage/domains/workflows/index.ts","../src/storage/index.ts"],"names":["Entity","Service","MemoryStorage","error","MastraError","ErrorDomain","ErrorCategory","data","MessageList","normalizePerPage","calculatePagination","StoreOperations","TABLE_THREADS","TABLE_MESSAGES","TABLE_WORKFLOW_SNAPSHOT","TABLE_SCORERS","TABLE_TRACES","TABLE_RESOURCES","TABLE_SPANS","DescribeTableCommand","ScoresStorage","saveScorePayloadSchema","WorkflowsStorage","result","snapshot","MastraStorage","DynamoDBClient","DynamoDBDocumentClient"],"mappings":"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","file":"index.cjs","sourcesContent":["export const baseAttributes = {\n createdAt: {\n type: 'string',\n required: true,\n readOnly: true,\n // Convert Date to ISO string on set\n set: (value?: Date | string) => {\n if (value instanceof Date) {\n return value.toISOString();\n }\n return value || new Date().toISOString();\n },\n // Initialize with current timestamp if not provided\n default: () => new Date().toISOString(),\n },\n updatedAt: {\n type: 'string',\n required: true,\n // Convert Date to ISO string on set\n set: (value?: Date | string) => {\n if (value instanceof Date) {\n return value.toISOString();\n }\n return value || new Date().toISOString();\n },\n // Always use current timestamp when creating/updating\n default: () => new Date().toISOString(),\n },\n metadata: {\n type: 'string', // JSON stringified\n // Stringify objects on set\n set: (value?: Record<string, unknown> | string) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n // Parse JSON string to object on get\n get: (value?: string) => {\n if (value) {\n try {\n return JSON.parse(value);\n } catch {\n // If parsing fails, return the original string\n return value;\n }\n }\n return value;\n },\n },\n} as const;\n","import { Entity } from 'electrodb';\nimport { baseAttributes } from './utils';\n\nexport const evalEntity = new Entity({\n model: {\n entity: 'eval',\n version: '1',\n service: 'mastra',\n },\n attributes: {\n entity: {\n type: 'string',\n required: true,\n },\n ...baseAttributes,\n input: {\n type: 'string',\n required: true,\n },\n output: {\n type: 'string',\n required: true,\n },\n result: {\n type: 'string', // JSON stringified\n required: true,\n // Stringify object on set\n set: (value?: any) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n // Parse JSON string to object on get\n get: (value?: string) => {\n if (value) {\n return JSON.parse(value);\n }\n return value;\n },\n },\n agent_name: {\n type: 'string',\n required: true,\n },\n metric_name: {\n type: 'string',\n required: true,\n },\n instructions: {\n type: 'string',\n required: true,\n },\n test_info: {\n type: 'string', // JSON stringified\n required: false,\n // Stringify object on set\n set: (value?: any) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n // Parse JSON string to object on get\n get: (value?: string) => {\n return value;\n },\n },\n global_run_id: {\n type: 'string',\n required: true,\n },\n run_id: {\n type: 'string',\n required: true,\n },\n created_at: {\n type: 'string',\n required: true,\n // Initialize with current timestamp if not provided\n default: () => new Date().toISOString(),\n // Convert Date to ISO string on set\n set: (value?: Date | string) => {\n if (value instanceof Date) {\n return value.toISOString();\n }\n return value || new Date().toISOString();\n },\n },\n },\n indexes: {\n primary: {\n pk: { field: 'pk', composite: ['entity', 'run_id'] },\n sk: { field: 'sk', composite: [] },\n },\n byAgent: {\n index: 'gsi1',\n pk: { field: 'gsi1pk', composite: ['entity', 'agent_name'] },\n sk: { field: 'gsi1sk', composite: ['created_at'] },\n },\n },\n});\n","import { Entity } from 'electrodb';\nimport { baseAttributes } from './utils';\n\nexport const messageEntity = new Entity({\n model: {\n entity: 'message',\n version: '1',\n service: 'mastra',\n },\n attributes: {\n entity: {\n type: 'string',\n required: true,\n },\n ...baseAttributes,\n id: {\n type: 'string',\n required: true,\n },\n threadId: {\n type: 'string',\n required: true,\n },\n content: {\n type: 'string',\n required: true,\n // Stringify content object on set if it's not already a string\n set: (value?: string | void) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n // Parse JSON string to object on get ONLY if it looks like JSON\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n // Attempt to parse only if it might be JSON (e.g., starts with { or [)\n if (value.startsWith('{') || value.startsWith('[')) {\n return JSON.parse(value);\n }\n } catch {\n // Ignore parse error, return original string\n return value;\n }\n }\n return value;\n },\n },\n role: {\n type: 'string',\n required: true,\n },\n type: {\n type: 'string',\n default: 'text',\n },\n resourceId: {\n type: 'string',\n required: false,\n },\n toolCallIds: {\n type: 'string',\n required: false,\n set: (value?: string[] | string) => {\n if (Array.isArray(value)) {\n return JSON.stringify(value);\n }\n return value;\n },\n // Parse JSON string to array on get\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n return JSON.parse(value);\n } catch {\n // Return raw value on error, consistent with 'content' field\n return value;\n }\n }\n // If value was not a string, or if it was an empty string, return it as is.\n return value;\n },\n },\n toolCallArgs: {\n type: 'string',\n required: false,\n set: (value?: Record<string, unknown>[] | string) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n // Parse JSON string to object on get\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n return JSON.parse(value);\n } catch {\n // Return raw value on error, consistent with 'content' field\n return value;\n }\n }\n // If value was not a string, or if it was an empty string, return it as is.\n return value;\n },\n },\n toolNames: {\n type: 'string',\n required: false,\n set: (value?: string[] | string) => {\n if (Array.isArray(value)) {\n return JSON.stringify(value);\n }\n return value;\n },\n // Parse JSON string to array on get\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n return JSON.parse(value);\n } catch {\n // Return raw value on error, consistent with 'content' field\n return value;\n }\n }\n // If value was not a string, or if it was an empty string, return it as is.\n return value;\n },\n },\n },\n indexes: {\n primary: {\n pk: { field: 'pk', composite: ['entity', 'id'] },\n sk: { field: 'sk', composite: ['entity'] },\n },\n byThread: {\n index: 'gsi1',\n pk: { field: 'gsi1pk', composite: ['entity', 'threadId'] },\n sk: { field: 'gsi1sk', composite: ['createdAt'] },\n },\n },\n});\n","import { Entity } from 'electrodb';\nimport { baseAttributes } from './utils';\n\nexport const resourceEntity = new Entity({\n model: {\n entity: 'resource',\n version: '1',\n service: 'mastra',\n },\n attributes: {\n entity: {\n type: 'string',\n required: true,\n },\n ...baseAttributes,\n id: {\n type: 'string',\n required: true,\n },\n workingMemory: {\n type: 'string',\n required: false,\n },\n metadata: {\n type: 'string',\n required: false,\n // Stringify content object on set if it's not already a string\n set: (value?: string | void) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n // Parse JSON string to object on get ONLY if it looks like JSON\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n // Attempt to parse only if it might be JSON (e.g., starts with { or [)\n if (value.startsWith('{') || value.startsWith('[')) {\n return JSON.parse(value);\n }\n } catch {\n // Ignore parse error, return original string\n return value;\n }\n }\n return value;\n },\n },\n },\n indexes: {\n primary: {\n pk: { field: 'pk', composite: ['entity', 'id'] },\n sk: { field: 'sk', composite: ['entity'] },\n },\n },\n});\n","import { Entity } from 'electrodb';\nimport { baseAttributes } from './utils';\n\nexport const scoreEntity = new Entity({\n model: {\n entity: 'score',\n version: '1',\n service: 'mastra',\n },\n attributes: {\n entity: {\n type: 'string',\n required: true,\n },\n ...baseAttributes,\n id: {\n type: 'string',\n required: true,\n },\n scorerId: {\n type: 'string',\n required: true,\n },\n traceId: {\n type: 'string',\n required: false,\n },\n spanId: {\n type: 'string',\n required: false,\n },\n runId: {\n type: 'string',\n required: true,\n },\n scorer: {\n type: 'string',\n required: true,\n set: (value?: Record<string, unknown> | string) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n if (value.startsWith('{') || value.startsWith('[')) {\n return JSON.parse(value);\n }\n } catch {\n return value;\n }\n }\n return value;\n },\n },\n extractStepResult: {\n type: 'string',\n required: false,\n set: (value?: Record<string, unknown> | string) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n if (value.startsWith('{') || value.startsWith('[')) {\n return JSON.parse(value);\n }\n } catch {\n return value;\n }\n }\n return value;\n },\n },\n preprocessStepResult: {\n type: 'string',\n required: false,\n set: (value?: Record<string, unknown> | string) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n if (value.startsWith('{') || value.startsWith('[')) {\n return JSON.parse(value);\n }\n } catch {\n return value;\n }\n }\n return value;\n },\n },\n analyzeStepResult: {\n type: 'string',\n required: false,\n set: (value?: Record<string, unknown> | string) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n if (value.startsWith('{') || value.startsWith('[')) {\n return JSON.parse(value);\n }\n } catch {\n return value;\n }\n }\n return value;\n },\n },\n score: {\n type: 'number',\n required: true,\n },\n reason: {\n type: 'string',\n required: false,\n },\n extractPrompt: {\n type: 'string',\n required: false,\n },\n analyzePrompt: {\n type: 'string',\n required: false,\n },\n\n // Deprecated in favor of generateReasonPrompt\n reasonPrompt: {\n type: 'string',\n required: false,\n },\n generateScorePrompt: {\n type: 'string',\n required: false,\n },\n generateReasonPrompt: {\n type: 'string',\n required: false,\n },\n input: {\n type: 'string',\n required: true,\n set: (value?: Record<string, unknown> | string) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n if (value.startsWith('{') || value.startsWith('[')) {\n return JSON.parse(value);\n }\n } catch {\n return value;\n }\n }\n return value;\n },\n },\n output: {\n type: 'string',\n required: true,\n set: (value?: Record<string, unknown> | string) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n if (value.startsWith('{') || value.startsWith('[')) {\n return JSON.parse(value);\n }\n } catch {\n return value;\n }\n }\n return value;\n },\n },\n additionalContext: {\n type: 'string',\n required: false,\n set: (value?: Record<string, unknown> | string) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n if (value.startsWith('{') || value.startsWith('[')) {\n return JSON.parse(value);\n }\n } catch {\n return value;\n }\n }\n return value;\n },\n },\n requestContext: {\n type: 'string',\n required: false,\n set: (value?: Record<string, unknown> | string) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n if (value.startsWith('{') || value.startsWith('[')) {\n return JSON.parse(value);\n }\n } catch {\n return value;\n }\n }\n return value;\n },\n },\n entityType: {\n type: 'string',\n required: false,\n },\n entityData: {\n type: 'string',\n required: false,\n set: (value?: Record<string, unknown> | string) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n if (value.startsWith('{') || value.startsWith('[')) {\n return JSON.parse(value);\n }\n } catch {\n return value;\n }\n }\n return value;\n },\n },\n entityId: {\n type: 'string',\n required: false,\n },\n source: {\n type: 'string',\n required: true,\n },\n resourceId: {\n type: 'string',\n required: false,\n },\n threadId: {\n type: 'string',\n required: false,\n },\n },\n indexes: {\n primary: {\n pk: { field: 'pk', composite: ['entity', 'id'] },\n sk: { field: 'sk', composite: ['entity'] },\n },\n byScorer: {\n index: 'gsi1',\n pk: { field: 'gsi1pk', composite: ['entity', 'scorerId'] },\n sk: { field: 'gsi1sk', composite: ['createdAt'] },\n },\n byRun: {\n index: 'gsi2',\n pk: { field: 'gsi2pk', composite: ['entity', 'runId'] },\n sk: { field: 'gsi2sk', composite: ['createdAt'] },\n },\n byTrace: {\n index: 'gsi3',\n pk: { field: 'gsi3pk', composite: ['entity', 'traceId'] },\n sk: { field: 'gsi3sk', composite: ['createdAt'] },\n },\n byEntityData: {\n index: 'gsi4',\n pk: { field: 'gsi4pk', composite: ['entity', 'entityId'] },\n sk: { field: 'gsi4sk', composite: ['createdAt'] },\n },\n byResource: {\n index: 'gsi5',\n pk: { field: 'gsi5pk', composite: ['entity', 'resourceId'] },\n sk: { field: 'gsi5sk', composite: ['createdAt'] },\n },\n byThread: {\n index: 'gsi6',\n pk: { field: 'gsi6pk', composite: ['entity', 'threadId'] },\n sk: { field: 'gsi6sk', composite: ['createdAt'] },\n },\n bySpan: {\n index: 'gsi7',\n pk: { field: 'gsi7pk', composite: ['entity', 'traceId', 'spanId'] },\n sk: { field: 'gsi7sk', composite: ['createdAt'] },\n },\n },\n});\n","import { Entity } from 'electrodb';\nimport { baseAttributes } from './utils';\n\nexport const threadEntity = new Entity({\n model: {\n entity: 'thread',\n version: '1',\n service: 'mastra',\n },\n attributes: {\n entity: {\n type: 'string',\n required: true,\n },\n ...baseAttributes,\n id: {\n type: 'string',\n required: true,\n },\n resourceId: {\n type: 'string',\n required: true,\n },\n title: {\n type: 'string',\n required: true,\n },\n metadata: {\n type: 'string',\n required: false,\n // Stringify metadata object on set if it's not already a string\n set: (value?: Record<string, unknown> | string) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n // Parse JSON string to object on get\n get: (value?: string) => {\n if (value && typeof value === 'string') {\n try {\n // Attempt to parse only if it might be JSON (e.g., starts with { or [)\n if (value.startsWith('{') || value.startsWith('[')) {\n return JSON.parse(value);\n }\n } catch {\n // Ignore parse error, return original string\n return value;\n }\n }\n return value;\n },\n },\n },\n indexes: {\n primary: {\n pk: { field: 'pk', composite: ['entity', 'id'] },\n sk: { field: 'sk', composite: ['id'] },\n },\n byResource: {\n index: 'gsi1',\n pk: { field: 'gsi1pk', composite: ['entity', 'resourceId'] },\n sk: { field: 'gsi1sk', composite: ['createdAt'] },\n },\n },\n});\n","import { Entity } from 'electrodb';\nimport { baseAttributes } from './utils';\n\nexport const traceEntity = new Entity({\n model: {\n entity: 'trace',\n version: '1',\n service: 'mastra',\n },\n attributes: {\n entity: {\n type: 'string',\n required: true,\n },\n ...baseAttributes,\n id: {\n type: 'string',\n required: true,\n },\n parentSpanId: {\n type: 'string',\n required: false,\n },\n name: {\n type: 'string',\n required: true,\n },\n traceId: {\n type: 'string',\n required: true,\n },\n scope: {\n type: 'string',\n required: true,\n },\n kind: {\n type: 'number',\n required: true,\n },\n attributes: {\n type: 'string', // JSON stringified\n required: false,\n // Stringify object on set\n set: (value?: any) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n // Parse JSON string to object on get\n get: (value?: string) => {\n return value ? JSON.parse(value) : value;\n },\n },\n status: {\n type: 'string', // JSON stringified\n required: false,\n // Stringify object on set\n set: (value?: any) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n // Parse JSON string to object on get\n get: (value?: string) => {\n return value;\n },\n },\n events: {\n type: 'string', // JSON stringified\n required: false,\n // Stringify object on set\n set: (value?: any) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n // Parse JSON string to object on get\n get: (value?: string) => {\n return value;\n },\n },\n links: {\n type: 'string', // JSON stringified\n required: false,\n // Stringify object on set\n set: (value?: any) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n // Parse JSON string to object on get\n get: (value?: string) => {\n return value;\n },\n },\n other: {\n type: 'string',\n required: false,\n },\n startTime: {\n type: 'number',\n required: true,\n },\n endTime: {\n type: 'number',\n required: true,\n },\n },\n indexes: {\n primary: {\n pk: { field: 'pk', composite: ['entity', 'id'] },\n sk: { field: 'sk', composite: [] },\n },\n byName: {\n index: 'gsi1',\n pk: { field: 'gsi1pk', composite: ['entity', 'name'] },\n sk: { field: 'gsi1sk', composite: ['startTime'] },\n },\n byScope: {\n index: 'gsi2',\n pk: { field: 'gsi2pk', composite: ['entity', 'scope'] },\n sk: { field: 'gsi2sk', composite: ['startTime'] },\n },\n },\n});\n","import { Entity } from 'electrodb';\nimport { baseAttributes } from './utils';\n\nexport const workflowSnapshotEntity = new Entity({\n model: {\n entity: 'workflow_snapshot',\n version: '1',\n service: 'mastra',\n },\n attributes: {\n entity: {\n type: 'string',\n required: true,\n },\n ...baseAttributes,\n workflow_name: {\n type: 'string',\n required: true,\n },\n run_id: {\n type: 'string',\n required: true,\n },\n snapshot: {\n type: 'string', // JSON stringified\n required: true,\n // Stringify snapshot object on set\n set: (value?: any) => {\n if (value && typeof value !== 'string') {\n return JSON.stringify(value);\n }\n return value;\n },\n // Parse JSON string to object on get\n get: (value?: string) => {\n return value ? JSON.parse(value) : value;\n },\n },\n resourceId: {\n type: 'string',\n required: false,\n },\n },\n indexes: {\n primary: {\n pk: { field: 'pk', composite: ['entity', 'workflow_name'] },\n sk: { field: 'sk', composite: ['run_id'] },\n },\n // GSI to allow querying by run_id efficiently without knowing the workflow_name\n gsi2: {\n index: 'gsi2',\n pk: { field: 'gsi2pk', composite: ['entity', 'run_id'] },\n sk: { field: 'gsi2sk', composite: ['workflow_name'] },\n },\n },\n});\n","import type { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb';\nimport { Service } from 'electrodb';\nimport { evalEntity } from './eval';\nimport { messageEntity } from './message';\nimport { resourceEntity } from './resource';\nimport { scoreEntity } from './score';\nimport { threadEntity } from './thread';\nimport { traceEntity } from './trace';\nimport { workflowSnapshotEntity } from './workflow-snapshot';\n\nexport function getElectroDbService(client: DynamoDBDocumentClient, tableName: string) {\n return new Service(\n {\n thread: threadEntity,\n message: messageEntity,\n eval: evalEntity,\n trace: traceEntity,\n workflow_snapshot: workflowSnapshotEntity,\n resource: resourceEntity,\n score: scoreEntity,\n },\n {\n client,\n table: tableName,\n },\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 { StorageThreadType, MastraMessageV1, MastraDBMessage } from '@mastra/core/memory';\nimport { MemoryStorage, normalizePerPage, calculatePagination } from '@mastra/core/storage';\nimport type {\n StorageResourceType,\n StorageListMessagesInput,\n StorageListMessagesOutput,\n StorageListThreadsByResourceIdInput,\n StorageListThreadsByResourceIdOutput,\n} from '@mastra/core/storage';\nimport type { Service } from 'electrodb';\n\nexport class MemoryStorageDynamoDB extends MemoryStorage {\n private service: Service<Record<string, any>>;\n constructor({ service }: { service: Service<Record<string, any>> }) {\n super();\n this.service = service;\n }\n\n // Helper function to parse message data (handle JSON fields)\n private parseMessageData(data: any): MastraDBMessage | MastraMessageV1 {\n // Removed try/catch and JSON.parse logic - now handled by entity 'get' attributes\n // This function now primarily ensures correct typing and Date conversion.\n return {\n ...data,\n // Ensure dates are Date objects if needed (ElectroDB might return strings)\n createdAt: data.createdAt ? new Date(data.createdAt) : undefined,\n updatedAt: data.updatedAt ? new Date(data.updatedAt) : undefined,\n // Other fields like content, toolCallArgs etc. are assumed to be correctly\n // transformed by the ElectroDB entity getters.\n };\n }\n\n // Helper function to transform and sort threads\n private transformAndSortThreads(rawThreads: any[], field: string, direction: string): StorageThreadType[] {\n return rawThreads\n .map((data: any) => ({\n ...data,\n // Convert date strings back to Date objects for consistency\n createdAt: typeof data.createdAt === 'string' ? new Date(data.createdAt) : data.createdAt,\n updatedAt: typeof data.updatedAt === 'string' ? new Date(data.updatedAt) : data.updatedAt,\n }))\n .sort((a: StorageThreadType, b: StorageThreadType) => {\n const fieldA = field === 'createdAt' ? a.createdAt : a.updatedAt;\n const fieldB = field === 'createdAt' ? b.createdAt : b.updatedAt;\n\n const comparison = fieldA.getTime() - fieldB.getTime();\n return direction === 'DESC' ? -comparison : comparison;\n }) as StorageThreadType[];\n }\n\n async getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null> {\n this.logger.debug('Getting thread by ID', { threadId });\n try {\n const result = await this.service.entities.thread.get({ entity: 'thread', id: threadId }).go();\n\n if (!result.data) {\n return null;\n }\n\n // ElectroDB handles the transformation with attribute getters\n const data = result.data;\n return {\n ...data,\n // Convert date strings back to Date objects for consistency\n createdAt: typeof data.createdAt === 'string' ? new Date(data.createdAt) : data.createdAt,\n updatedAt: typeof data.updatedAt === 'string' ? new Date(data.updatedAt) : data.updatedAt,\n // metadata: data.metadata ? JSON.parse(data.metadata) : undefined, // REMOVED by AI\n // metadata is already transformed by the entity's getter\n } as StorageThreadType;\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_GET_THREAD_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { threadId },\n },\n error,\n );\n }\n }\n\n async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n this.logger.debug('Saving thread', { threadId: thread.id });\n\n const now = new Date();\n\n const threadData = {\n entity: 'thread',\n id: thread.id,\n resourceId: thread.resourceId,\n title: thread.title || `Thread ${thread.id}`,\n createdAt: thread.createdAt?.toISOString() || now.toISOString(),\n updatedAt: thread.updatedAt?.toISOString() || now.toISOString(),\n metadata: thread.metadata ? JSON.stringify(thread.metadata) : undefined,\n };\n\n try {\n await this.service.entities.thread.upsert(threadData).go();\n\n return {\n id: thread.id,\n resourceId: thread.resourceId,\n title: threadData.title,\n createdAt: thread.createdAt || now,\n updatedAt: thread.updatedAt || now,\n metadata: thread.metadata,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_SAVE_THREAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { threadId: thread.id },\n },\n error,\n );\n }\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 this.logger.debug('Updating thread', { threadId: id });\n\n try {\n // First, get the existing thread to merge with updates\n const existingThread = await this.getThreadById({ threadId: id });\n\n if (!existingThread) {\n throw new Error(`Thread not found: ${id}`);\n }\n\n const now = new Date();\n\n // Prepare the update\n // Define type for only the fields we are actually updating\n type ThreadUpdatePayload = {\n updatedAt: string; // ISO String for DDB\n title?: string;\n metadata?: string; // Stringified JSON for DDB\n };\n const updateData: ThreadUpdatePayload = {\n updatedAt: now.toISOString(),\n };\n\n if (title) {\n updateData.title = title;\n }\n\n if (metadata) {\n // Merge with existing metadata instead of overwriting\n const existingMetadata = existingThread.metadata\n ? typeof existingThread.metadata === 'string'\n ? JSON.parse(existingThread.metadata)\n : existingThread.metadata\n : {};\n const mergedMetadata = { ...existingMetadata, ...metadata };\n updateData.metadata = JSON.stringify(mergedMetadata); // Stringify merged metadata for update\n }\n\n // Update the thread using the primary key\n await this.service.entities.thread.update({ entity: 'thread', id }).set(updateData).go();\n\n // Return the potentially updated thread object\n return {\n ...existingThread,\n title: title || existingThread.title,\n metadata: metadata ? { ...existingThread.metadata, ...metadata } : existingThread.metadata,\n updatedAt: now,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_UPDATE_THREAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { threadId: id },\n },\n error,\n );\n }\n }\n\n async deleteThread({ threadId }: { threadId: string }): Promise<void> {\n this.logger.debug('Deleting thread', { threadId });\n\n try {\n // First, delete all messages associated with this thread\n // Use perPage: false to fetch ALL messages, not just the first page\n const { messages } = await this.listMessages({ threadId, perPage: false });\n if (messages.length > 0) {\n // Delete messages in batches\n const batchSize = 25; // DynamoDB batch limits\n for (let i = 0; i < messages.length; i += batchSize) {\n const batch = messages.slice(i, i + batchSize);\n await Promise.all(\n batch.map((message: MastraDBMessage) =>\n this.service.entities.message\n .delete({\n entity: 'message',\n id: message.id,\n threadId: message.threadId,\n })\n .go(),\n ),\n );\n }\n }\n\n // Then delete the thread using the primary key\n await this.service.entities.thread.delete({ entity: 'thread', id: threadId }).go();\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_DELETE_THREAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { threadId },\n },\n error,\n );\n }\n }\n\n public async listMessagesById({ messageIds }: { messageIds: string[] }): Promise<{ messages: MastraDBMessage[] }> {\n this.logger.debug('Getting messages by ID', { messageIds });\n if (messageIds.length === 0) return { messages: [] };\n\n try {\n const results = await Promise.all(\n messageIds.map(id => this.service.entities.message.query.primary({ entity: 'message', id }).go()),\n );\n\n const data = results.map(result => result.data).flat(1);\n\n let parsedMessages = data\n .map((data: any) => this.parseMessageData(data))\n .filter((msg: any): msg is MastraDBMessage => 'content' in msg);\n\n // Deduplicate messages by ID (like libsql)\n const uniqueMessages = parsedMessages.filter(\n (message, index, self) => index === self.findIndex(m => m.id === message.id),\n );\n\n const list = new MessageList().add(uniqueMessages as (MastraMessageV1 | MastraDBMessage)[], 'memory');\n return { messages: list.get.all.db() };\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_LIST_MESSAGES_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { messageIds: JSON.stringify(messageIds) },\n },\n error,\n );\n }\n }\n\n public async listMessages(args: StorageListMessagesInput): Promise<StorageListMessagesOutput> {\n const { threadId, resourceId, include, filter, perPage: perPageInput, page = 0, orderBy } = args;\n\n if (!threadId.trim()) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_LIST_MESSAGES_INVALID_THREAD_ID',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { threadId },\n },\n new Error('threadId must be a non-empty string'),\n );\n }\n\n const perPage = normalizePerPage(perPageInput, 40);\n // When perPage is false (get all), ignore page offset\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n try {\n if (page < 0) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_LIST_MESSAGES_INVALID_PAGE',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { page },\n },\n new Error('page must be >= 0'),\n );\n }\n\n // Determine sort field and direction\n const { field, direction } = this.parseOrderBy(orderBy, 'ASC');\n\n this.logger.debug('Getting messages with listMessages', {\n threadId,\n resourceId,\n perPageInput,\n offset,\n perPage,\n page,\n field,\n direction,\n });\n\n // Step 1: Get paginated messages from the thread first (without excluding included ones)\n const query = this.service.entities.message.query.byThread({ entity: 'message', threadId });\n const results = await query.go();\n\n let allThreadMessages = results.data\n .map((data: any) => this.parseMessageData(data))\n .filter((msg: any): msg is MastraDBMessage => 'content' in msg && typeof msg.content === 'object');\n\n // Apply resourceId filter\n if (resourceId) {\n allThreadMessages = allThreadMessages.filter((msg: MastraDBMessage) => msg.resourceId === resourceId);\n }\n\n // Apply date range filter\n if (filter?.dateRange) {\n const dateRange = filter.dateRange;\n allThreadMessages = allThreadMessages.filter((msg: MastraDBMessage) => {\n const createdAt = new Date(msg.createdAt).getTime();\n if (dateRange.start) {\n const startTime =\n dateRange.start instanceof Date ? dateRange.start.getTime() : new Date(dateRange.start).getTime();\n if (createdAt < startTime) return false;\n }\n if (dateRange.end) {\n const endTime = dateRange.end instanceof Date ? dateRange.end.getTime() : new Date(dateRange.end).getTime();\n if (createdAt > endTime) return false;\n }\n return true;\n });\n }\n\n // Sort messages by the specified field and direction\n allThreadMessages.sort((a: MastraDBMessage, b: MastraDBMessage) => {\n const aValue = field === 'createdAt' ? new Date(a.createdAt).getTime() : (a as any)[field];\n const bValue = field === 'createdAt' ? new Date(b.createdAt).getTime() : (b as any)[field];\n\n // Handle tiebreaker for stable sorting\n if (aValue === bValue) {\n return a.id.localeCompare(b.id);\n }\n\n return direction === 'ASC' ? aValue - bValue : bValue - aValue;\n });\n\n // Save total before pagination\n const total = allThreadMessages.length;\n\n // Apply pagination\n const paginatedMessages = allThreadMessages.slice(offset, offset + perPage);\n const paginatedCount = paginatedMessages.length;\n\n // Only return early if there are no messages AND no includes to process\n if (total === 0 && paginatedCount === 0 && (!include || include.length === 0)) {\n return {\n messages: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n // Step 2: Add included messages with context (if any), excluding duplicates\n const messageIds = new Set(paginatedMessages.map((m: MastraDBMessage) => m.id));\n let includeMessages: MastraDBMessage[] = [];\n\n if (include && include.length > 0) {\n // Use the existing _getIncludedMessages helper, but adapt it for listMessages format\n const selectBy = { include };\n includeMessages = await this._getIncludedMessages(threadId, selectBy);\n\n // Deduplicate: only add messages that aren't already in the paginated results\n for (const includeMsg of includeMessages) {\n if (!messageIds.has(includeMsg.id)) {\n paginatedMessages.push(includeMsg);\n messageIds.add(includeMsg.id);\n }\n }\n }\n\n // Use MessageList for proper deduplication and format conversion to V2\n const list = new MessageList().add(paginatedMessages, 'memory');\n let finalMessages = list.get.all.db();\n\n // Sort all messages (paginated + included) for final output\n finalMessages = finalMessages.sort((a, b) => {\n const aValue = field === 'createdAt' ? new Date(a.createdAt).getTime() : (a as any)[field];\n const bValue = field === 'createdAt' ? new Date(b.createdAt).getTime() : (b as any)[field];\n\n // Handle tiebreaker for stable sorting\n if (aValue === bValue) {\n return a.id.localeCompare(b.id);\n }\n\n return direction === 'ASC' ? aValue - bValue : bValue - aValue;\n });\n\n // Calculate hasMore based on pagination window\n // If all thread messages have been returned (through pagination or include), hasMore = false\n // Otherwise, check if there are more pages in the pagination window\n const returnedThreadMessageIds = new Set(finalMessages.filter(m => m.threadId === threadId).map(m => m.id));\n const allThreadMessagesReturned = returnedThreadMessageIds.size >= total;\n let hasMore = false;\n if (perPageInput !== false && !allThreadMessagesReturned) {\n hasMore = offset + paginatedCount < total;\n }\n\n return {\n messages: finalMessages,\n total,\n page,\n perPage: perPageForResponse,\n hasMore,\n };\n } catch (error: any) {\n const mastraError = new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_LIST_MESSAGES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n threadId,\n resourceId: resourceId ?? '',\n },\n },\n error,\n );\n this.logger?.error?.(mastraError.toString());\n this.logger?.trackException?.(mastraError);\n return {\n messages: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n }\n\n async saveMessages(args: { messages: MastraDBMessage[] }): Promise<{ messages: MastraDBMessage[] }> {\n const { messages } = args;\n this.logger.debug('Saving messages', { count: messages.length });\n\n if (!messages.length) {\n return { messages: [] };\n }\n\n const threadId = messages[0]?.threadId;\n if (!threadId) {\n throw new Error('Thread ID is required');\n }\n\n // Ensure 'entity' is added and complex fields are handled\n const messagesToSave = messages.map(msg => {\n const now = new Date().toISOString();\n return {\n entity: 'message', // Add entity type\n id: msg.id,\n threadId: msg.threadId,\n role: msg.role,\n type: msg.type,\n resourceId: msg.resourceId,\n // Ensure complex fields are stringified if not handled by attribute setters\n content: typeof msg.content === 'string' ? msg.content : JSON.stringify(msg.content),\n toolCallArgs: `toolCallArgs` in msg && msg.toolCallArgs ? JSON.stringify(msg.toolCallArgs) : undefined,\n toolCallIds: `toolCallIds` in msg && msg.toolCallIds ? JSON.stringify(msg.toolCallIds) : undefined,\n toolNames: `toolNames` in msg && msg.toolNames ? JSON.stringify(msg.toolNames) : undefined,\n createdAt: msg.createdAt instanceof Date ? msg.createdAt.toISOString() : msg.createdAt || now,\n updatedAt: now, // Add updatedAt\n };\n });\n\n try {\n // Process messages sequentially to enable rollback on error\n const savedMessageIds: string[] = [];\n\n for (const messageData of messagesToSave) {\n // Ensure each item has the entity property before sending\n if (!messageData.entity) {\n this.logger.error('Missing entity property in message data for create', { messageData });\n throw new Error('Internal error: Missing entity property during saveMessages');\n }\n\n try {\n await this.service.entities.message.put(messageData).go();\n savedMessageIds.push(messageData.id);\n } catch (error) {\n // Rollback: delete all previously saved messages\n for (const savedId of savedMessageIds) {\n try {\n await this.service.entities.message.delete({ entity: 'message', id: savedId }).go();\n } catch (rollbackError) {\n this.logger.error('Failed to rollback message during save error', {\n messageId: savedId,\n error: rollbackError,\n });\n }\n }\n throw error;\n }\n }\n\n // Update thread's updatedAt timestamp\n await this.service.entities.thread\n .update({ entity: 'thread', id: threadId })\n .set({\n updatedAt: new Date().toISOString(),\n })\n .go();\n\n const list = new MessageList().add(messages as (MastraMessageV1 | MastraDBMessage)[], 'memory');\n return { messages: list.get.all.db() };\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_SAVE_MESSAGES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { count: messages.length },\n },\n error,\n );\n }\n }\n\n public async listThreadsByResourceId(\n args: StorageListThreadsByResourceIdInput,\n ): Promise<StorageListThreadsByResourceIdOutput> {\n const { resourceId, page = 0, perPage: perPageInput, orderBy } = args;\n const perPage = normalizePerPage(perPageInput, 100);\n\n if (page < 0) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_LIST_THREADS_BY_RESOURCE_ID_INVALID_PAGE',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { page },\n },\n new Error('page must be >= 0'),\n );\n }\n\n // When perPage is false (get all), ignore page offset\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const { field, direction } = this.parseOrderBy(orderBy);\n\n this.logger.debug('Getting threads by resource ID with pagination', {\n resourceId,\n page,\n perPage,\n field,\n direction,\n });\n\n try {\n // Query threads by resource ID using the GSI\n const query = this.service.entities.thread.query.byResource({ entity: 'thread', resourceId });\n\n // Get all threads for this resource ID (DynamoDB doesn't support OFFSET/LIMIT)\n const results = await query.go();\n\n // Use shared helper method for transformation and sorting\n const allThreads = this.transformAndSortThreads(results.data, field, direction);\n\n // Apply pagination in memory\n const endIndex = offset + perPage;\n const paginatedThreads = allThreads.slice(offset, endIndex);\n\n // Calculate pagination info\n const total = allThreads.length;\n const hasMore = offset + perPage < total;\n\n return {\n threads: paginatedThreads,\n total,\n page,\n perPage: perPageForResponse,\n hasMore,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'DYNAMODB_STORAGE_LIST_THREADS_BY_RESOURCE_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { resourceId, page, perPage },\n },\n error,\n );\n }\n }\n\n // Helper method to get included messages with context\n private async _getIncludedMessages(threadId: string, selectBy: any): Promise<MastraDBMessage[]> {\n if (!threadId.trim()) throw new Error('threadId must be a non-empty string');\n\n if (!selectBy?.include?.length) {\n return [];\n }\n\n const includeMessages: MastraDBMessage[] = [];\n\n for (const includeItem of selectBy.include) {\n try {\n const { id, threadId: targetThreadId, withPreviousMessages = 0, withNextMessages = 0 } = includeItem;\n const searchThreadId = targetThreadId || threadId;\n\n this.logger.debug('Getting included messages for', {\n id,\n targetThreadId,\n searchThreadId,\n withPreviousMessages,\n withNextMessages,\n });\n\n // Get all messages for the target thread\n const query = this.service.entities.message.query.byThread({ entity: 'message', threadId: searchThreadId });\n const results = await query.go();\n const allMessages = results.data\n .map((data: any) => this.parseMessageData(data))\n .filter((msg: any): msg is MastraDBMessage => 'content' in msg && typeof msg.content === 'object');\n\n this.logger.debug('Found messages in thread', {\n threadId: searchThreadId,\n messageCount: allMessages.length,\n messageIds: allMessages.map((m: MastraDBMessage) => m.id),\n });\n\n // Sort by createdAt ASC to get proper order, with ID tiebreaker for stable ordering\n allMessages.sort((a: MastraDBMessage, b: MastraDBMessage) => {\n const timeA = a.createdAt.getTime();\n const timeB = b.createdAt.getTime();\n if (timeA === timeB) {\n return a.id.localeCompare(b.id);\n }\n return timeA - timeB;\n });\n\n // Find the target message\n const targetIndex = allMessages.findIndex((msg: MastraDBMessage) => msg.id === id);\n if (targetIndex === -1) {\n this.logger.warn('Target message not found', { id, threadId: searchThreadId });\n continue;\n }\n\n this.logger.debug('Found target message at index', { id, targetIndex, totalMessages: allMessages.length });\n\n // Get context messages (previous and next)\n const startIndex = Math.max(0, targetIndex - withPreviousMessages);\n const endIndex = Math.min(allMessages.length, targetIndex + withNextMessages + 1);\n const contextMessages = allMessages.slice(startIndex, endIndex);\n\n this.logger.debug('Context messages', {\n startIndex,\n endIndex,\n contextCount: contextMessages.length,\n contextIds: contextMessages.map((m: MastraDBMessage) => m.id),\n });\n\n includeMessages.push(...contextMessages);\n } catch (error) {\n this.logger.warn('Failed to get included message', { messageId: includeItem.id, error });\n }\n }\n\n this.logger.debug('Total included messages', {\n count: includeMessages.length,\n ids: includeMessages.map((m: MastraDBMessage) => m.id),\n });\n\n return includeMessages;\n }\n\n async updateMessages(args: {\n messages: Partial<Omit<MastraDBMessage, 'createdAt'>> &\n {\n id: string;\n content?: { metadata?: MastraMessageContentV2['metadata']; content?: MastraMessageContentV2['content'] };\n }[];\n }): Promise<MastraDBMessage[]> {\n const { messages } = args;\n this.logger.debug('Updating messages', { count: messages.length });\n\n if (!messages.length) {\n return [];\n }\n\n const updatedMessages: MastraDBMessage[] = [];\n const affectedThreadIds = new Set<string>();\n\n try {\n for (const updateData of messages) {\n const { id, ...updates } = updateData;\n\n // Get the existing message\n const existingMessage = await this.service.entities.message.get({ entity: 'message', id }).go();\n if (!existingMessage.data) {\n this.logger.warn('Message not found for update', { id });\n continue;\n }\n\n const existingMsg = this.parseMessageData(existingMessage.data) as MastraDBMessage;\n const originalThreadId = existingMsg.threadId;\n affectedThreadIds.add(originalThreadId!);\n\n // Prepare the update payload\n const updatePayload: any = {\n updatedAt: new Date().toISOString(),\n };\n\n // Handle basic field updates\n if ('role' in updates && updates.role !== undefined) updatePayload.role = updates.role;\n if ('type' in updates && updates.type !== undefined) updatePayload.type = updates.type;\n if ('resourceId' in updates && updates.resourceId !== undefined) updatePayload.resourceId = updates.resourceId;\n if ('threadId' in updates && updates.threadId !== undefined && updates.threadId !== null) {\n updatePayload.threadId = updates.threadId;\n affectedThreadIds.add(updates.threadId as string);\n }\n\n // Handle content updates\n if (updates.content) {\n const existingContent = existingMsg.content;\n let newContent = { ...existingContent };\n\n // Deep merge metadata if provided\n if (updates.content.metadata !== undefined) {\n newContent.metadata = {\n ...(existingContent.metadata || {}),\n ...(updates.content.metadata || {}),\n };\n }\n\n // Update content string if provided\n if (updates.content.content !== undefined) {\n newContent.content = updates.content.content;\n }\n\n // Update parts if provided (only if it exists in the content type)\n if ('parts' in updates.content && updates.content.parts !== undefined) {\n (newContent as any).parts = updates.content.parts;\n }\n\n updatePayload.content = JSON.stringify(newContent);\n }\n\n // Update the message\n await this.service.entities.message.update({ entity: 'message', id }).set(updatePayload).go();\n\n // Get the updated message\n const updatedMessage = await this.service.entities.message.get({ entity: 'message', id }).go();\n if (updatedMessage.data) {\n updatedMessages.push(this.parseMessageData(updatedMessage.data) as MastraDBMessage);\n }\n }\n\n // Update timestamps for all affected threads\n for (const threadId of affectedThreadIds) {\n await this.service.entities.thread\n .update({ entity: 'thread', id: threadId })\n .set({\n updatedAt: new Date().toISOString(),\n })\n .go();\n }\n\n return updatedMessages;\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_UPDATE_MESSAGES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { count: messages.length },\n },\n error,\n );\n }\n }\n\n async getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n this.logger.debug('Getting resource by ID', { resourceId });\n try {\n const result = await this.service.entities.resource.get({ entity: 'resource', id: resourceId }).go();\n\n if (!result.data) {\n return null;\n }\n\n // ElectroDB handles the transformation with attribute getters\n const data = result.data;\n return {\n ...data,\n // Convert date strings back to Date objects for consistency\n createdAt: typeof data.createdAt === 'string' ? new Date(data.createdAt) : data.createdAt,\n updatedAt: typeof data.updatedAt === 'string' ? new Date(data.updatedAt) : data.updatedAt,\n // Ensure workingMemory is always returned as a string, regardless of automatic parsing\n workingMemory: typeof data.workingMemory === 'object' ? JSON.stringify(data.workingMemory) : data.workingMemory,\n // metadata is already transformed by the entity's getter\n } as StorageResourceType;\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_GET_RESOURCE_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { resourceId },\n },\n error,\n );\n }\n }\n\n async saveResource({ resource }: { resource: StorageResourceType }): Promise<StorageResourceType> {\n this.logger.debug('Saving resource', { resourceId: resource.id });\n\n const now = new Date();\n\n const resourceData = {\n entity: 'resource',\n id: resource.id,\n workingMemory: resource.workingMemory,\n metadata: resource.metadata ? JSON.stringify(resource.metadata) : undefined,\n createdAt: resource.createdAt?.toISOString() || now.toISOString(),\n updatedAt: now.toISOString(),\n };\n\n try {\n await this.service.entities.resource.upsert(resourceData).go();\n\n return {\n id: resource.id,\n workingMemory: resource.workingMemory,\n metadata: resource.metadata,\n createdAt: resource.createdAt || now,\n updatedAt: now,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_SAVE_RESOURCE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { resourceId: resource.id },\n },\n error,\n );\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 this.logger.debug('Updating resource', { resourceId });\n\n try {\n // First, get the existing resource to merge with updates\n const existingResource = await this.getResourceById({ resourceId });\n\n if (!existingResource) {\n // Create new resource if it doesn't exist\n const newResource: StorageResourceType = {\n id: resourceId,\n workingMemory,\n metadata: metadata || {},\n createdAt: new Date(),\n updatedAt: new Date(),\n };\n return this.saveResource({ resource: newResource });\n }\n\n const now = new Date();\n\n // Prepare the update\n const updateData: any = {\n updatedAt: now.toISOString(),\n };\n\n if (workingMemory !== undefined) {\n updateData.workingMemory = workingMemory;\n }\n\n if (metadata) {\n // Merge with existing metadata instead of overwriting\n const existingMetadata = existingResource.metadata || {};\n const mergedMetadata = { ...existingMetadata, ...metadata };\n updateData.metadata = JSON.stringify(mergedMetadata);\n }\n\n // Update the resource using the primary key\n await this.service.entities.resource.update({ entity: 'resource', id: resourceId }).set(updateData).go();\n\n // Return the updated resource object\n return {\n ...existingResource,\n workingMemory: workingMemory !== undefined ? workingMemory : existingResource.workingMemory,\n metadata: metadata ? { ...existingResource.metadata, ...metadata } : existingResource.metadata,\n updatedAt: now,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_UPDATE_RESOURCE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { resourceId },\n },\n error,\n );\n }\n }\n}\n","import { DescribeTableCommand } from '@aws-sdk/client-dynamodb';\nimport type { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n StoreOperations,\n TABLE_SPANS,\n TABLE_MESSAGES,\n TABLE_RESOURCES,\n TABLE_SCORERS,\n TABLE_THREADS,\n TABLE_TRACES,\n TABLE_WORKFLOW_SNAPSHOT,\n} from '@mastra/core/storage';\nimport type { StorageColumn, TABLE_NAMES } from '@mastra/core/storage';\nimport type { Service } from 'electrodb';\n\nexport class StoreOperationsDynamoDB extends StoreOperations {\n client: DynamoDBDocumentClient;\n tableName: string;\n service: Service<Record<string, any>>;\n constructor({\n service,\n tableName,\n client,\n }: {\n service: Service<Record<string, any>>;\n tableName: string;\n client: DynamoDBDocumentClient;\n }) {\n super();\n this.service = service;\n this.client = client;\n this.tableName = tableName;\n }\n\n async hasColumn(): Promise<boolean> {\n return true;\n }\n\n async dropTable(): Promise<void> {}\n\n // Helper methods for entity/table mapping\n private getEntityNameForTable(tableName: TABLE_NAMES): string | null {\n const mapping: Record<TABLE_NAMES, string> = {\n [TABLE_THREADS]: 'thread',\n [TABLE_MESSAGES]: 'message',\n [TABLE_WORKFLOW_SNAPSHOT]: 'workflow_snapshot',\n [TABLE_SCORERS]: 'score',\n [TABLE_TRACES]: 'trace',\n [TABLE_RESOURCES]: 'resource',\n [TABLE_SPANS]: 'ai_span',\n };\n return mapping[tableName] || null;\n }\n\n /**\n * Pre-processes a record to ensure Date objects are converted to ISO strings\n * This is necessary because ElectroDB validation happens before setters are applied\n */\n private preprocessRecord(record: Record<string, any>): Record<string, any> {\n const processed = { ...record };\n\n // Convert Date objects to ISO strings for date fields\n // This prevents ElectroDB validation errors that occur when Date objects are passed\n // to string-typed attributes, even when the attribute has a setter that converts dates\n if (processed.createdAt instanceof Date) {\n processed.createdAt = processed.createdAt.toISOString();\n }\n if (processed.updatedAt instanceof Date) {\n processed.updatedAt = processed.updatedAt.toISOString();\n }\n if (processed.created_at instanceof Date) {\n processed.created_at = processed.created_at.toISOString();\n }\n\n // Convert result field to JSON string if it's an object\n if (processed.result && typeof processed.result === 'object') {\n processed.result = JSON.stringify(processed.result);\n }\n\n // Convert test_info field to JSON string if it's an object, or remove if undefined/null\n if (processed.test_info && typeof processed.test_info === 'object') {\n processed.test_info = JSON.stringify(processed.test_info);\n } else if (processed.test_info === undefined || processed.test_info === null) {\n delete processed.test_info;\n }\n\n // Convert snapshot field to JSON string if it's an object\n if (processed.snapshot && typeof processed.snapshot === 'object') {\n processed.snapshot = JSON.stringify(processed.snapshot);\n }\n\n // Convert trace-specific fields to JSON strings if they're objects\n // These fields have set/get functions in the entity but validation happens before set\n if (processed.attributes && typeof processed.attributes === 'object') {\n processed.attributes = JSON.stringify(processed.attributes);\n }\n\n if (processed.status && typeof processed.status === 'object') {\n processed.status = JSON.stringify(processed.status);\n }\n\n if (processed.events && typeof processed.events === 'object') {\n processed.events = JSON.stringify(processed.events);\n }\n\n if (processed.links && typeof processed.links === 'object') {\n processed.links = JSON.stringify(processed.links);\n }\n\n return processed;\n }\n\n /**\n * Validates that the required DynamoDB table exists and is accessible.\n * This does not check the table structure - it assumes the table\n * was created with the correct structure via CDK/CloudFormation.\n */\n private async validateTableExists(): Promise<boolean> {\n try {\n const command = new DescribeTableCommand({\n TableName: this.tableName,\n });\n\n // If the table exists, this call will succeed\n // If the table doesn't exist, it will throw a ResourceNotFoundException\n await this.client.send(command);\n return true;\n } catch (error: any) {\n // If the table doesn't exist, DynamoDB returns a ResourceNotFoundException\n if (error.name === 'ResourceNotFoundException') {\n return false;\n }\n\n // For other errors (like permissions issues), we should throw\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_VALIDATE_TABLE_EXISTS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName: this.tableName },\n },\n error,\n );\n }\n }\n\n /**\n * This method is modified for DynamoDB with ElectroDB single-table design.\n * It assumes the table is created and managed externally via CDK/CloudFormation.\n *\n * This implementation only validates that the required table exists and is accessible.\n * No table creation is attempted - we simply check if we can access the table.\n */\n async createTable({ tableName }: { tableName: TABLE_NAMES; schema: Record<string, any> }): Promise<void> {\n this.logger.debug('Validating access to externally managed table', { tableName, physicalTable: this.tableName });\n\n // For single-table design, we just need to verify the table exists and is accessible\n try {\n const tableExists = await this.validateTableExists();\n\n if (!tableExists) {\n this.logger.error(\n `Table ${this.tableName} does not exist or is not accessible. It should be created via CDK/CloudFormation.`,\n );\n throw new Error(\n `Table ${this.tableName} does not exist or is not accessible. Ensure it's created via CDK/CloudFormation before using this store.`,\n );\n }\n\n this.logger.debug(`Table ${this.tableName} exists and is accessible`);\n } catch (error) {\n this.logger.error('Error validating table access', { tableName: this.tableName, error });\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_VALIDATE_TABLE_ACCESS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName: this.tableName },\n },\n error,\n );\n }\n }\n\n async insert({ tableName, record }: { tableName: TABLE_NAMES; record: Record<string, any> }): Promise<void> {\n this.logger.debug('DynamoDB insert called', { tableName });\n\n const entityName = this.getEntityNameForTable(tableName);\n if (!entityName || !this.service.entities[entityName]) {\n throw new MastraError({\n id: 'STORAGE_DYNAMODB_STORE_INSERT_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'No entity defined for tableName',\n details: { tableName },\n });\n }\n\n try {\n // Add the entity type to the record and preprocess before creating\n const dataToSave = { entity: entityName, ...this.preprocessRecord(record) };\n await this.service.entities[entityName].create(dataToSave).go();\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_INSERT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async alterTable(_args: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void> {\n // Nothing to do here, DynamoDB has a flexible schema and handles new attributes automatically upon insertion/update.\n }\n\n /**\n * Clear all items from a logical \"table\" (entity type)\n */\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n this.logger.debug('DynamoDB clearTable called', { tableName });\n\n const entityName = this.getEntityNameForTable(tableName)!;\n\n if (!entityName || !this.service.entities[entityName]) {\n throw new MastraError({\n id: 'STORAGE_DYNAMODB_STORE_CLEAR_TABLE_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'No entity defined for tableName',\n details: { tableName },\n });\n }\n\n try {\n // Scan requires no key, just uses the entity handler\n const result = await this.service.entities[entityName].scan.go({ pages: 'all' }); // Get all pages\n\n if (!result.data.length) {\n this.logger.debug(`No records found to clear for ${tableName}`);\n return;\n }\n\n this.logger.debug(`Found ${result.data.length} records to delete for ${tableName}`);\n\n // ElectroDB batch delete expects the key components for each item\n const keysToDelete = result.data.map((item: any) => {\n const key: { entity: string; [key: string]: any } = { entity: entityName };\n\n // Construct the key based on the specific entity's primary key structure\n switch (entityName) {\n case 'thread':\n if (!item.id) throw new Error(`Missing required key 'id' for entity 'thread'`);\n key.id = item.id;\n break;\n case 'message':\n if (!item.id) throw new Error(`Missing required key 'id' for entity 'message'`);\n key.id = item.id;\n break;\n case 'workflow_snapshot':\n if (!item.workflow_name)\n throw new Error(`Missing required key 'workflow_name' for entity 'workflow_snapshot'`);\n if (!item.run_id) throw new Error(`Missing required key 'run_id' for entity 'workflow_snapshot'`);\n key.workflow_name = item.workflow_name;\n key.run_id = item.run_id;\n break;\n case 'eval':\n // Assuming 'eval' uses 'run_id' or another unique identifier as part of its PK\n // Adjust based on the actual primary key defined in getElectroDbService\n if (!item.run_id) throw new Error(`Missing required key 'run_id' for entity 'eval'`);\n // Add other key components if necessary for 'eval' PK\n key.run_id = item.run_id;\n // Example: if global_run_id is also part of PK:\n // if (!item.global_run_id) throw new Error(`Missing required key 'global_run_id' for entity 'eval'`);\n // key.global_run_id = item.global_run_id;\n break;\n case 'trace':\n // Assuming 'trace' uses 'id' as its PK\n // Adjust based on the actual primary key defined in getElectroDbService\n if (!item.id) throw new Error(`Missing required key 'id' for entity 'trace'`);\n key.id = item.id;\n break;\n case 'score':\n // Score entity uses 'id' as its PK\n if (!item.id) throw new Error(`Missing required key 'id' for entity 'score'`);\n key.id = item.id;\n break;\n case 'resource':\n // Resource entity uses 'id' as its PK\n if (!item.id) throw new Error(`Missing required key 'id' for entity 'resource'`);\n key.id = item.id;\n break;\n default:\n // Handle unknown entity types - log a warning or throw an error\n this.logger.warn(`Unknown entity type encountered during clearTable: ${entityName}`);\n // Optionally throw an error if strict handling is required\n throw new Error(`Cannot construct delete key for unknown entity type: ${entityName}`);\n }\n\n return key;\n });\n\n const batchSize = 25;\n for (let i = 0; i < keysToDelete.length; i += batchSize) {\n const batchKeys = keysToDelete.slice(i, i + batchSize);\n // Pass the array of key objects to delete\n await this.service.entities[entityName].delete(batchKeys).go();\n }\n\n this.logger.debug(`Successfully cleared all records for ${tableName}`);\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_CLEAR_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n /**\n * Insert multiple records as a batch\n */\n async batchInsert({ tableName, records }: { tableName: TABLE_NAMES; records: Record<string, any>[] }): Promise<void> {\n this.logger.debug('DynamoDB batchInsert called', { tableName, count: records.length });\n\n const entityName = this.getEntityNameForTable(tableName);\n if (!entityName || !this.service.entities[entityName]) {\n throw new MastraError({\n id: 'STORAGE_DYNAMODB_STORE_BATCH_INSERT_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'No entity defined for tableName',\n details: { tableName },\n });\n }\n\n // Add entity type and preprocess each record\n const recordsToSave = records.map(rec => ({ entity: entityName, ...this.preprocessRecord(rec) }));\n\n // ElectroDB has batch limits of 25 items, so we need to chunk\n const batchSize = 25;\n const batches = [];\n for (let i = 0; i < recordsToSave.length; i += batchSize) {\n const batch = recordsToSave.slice(i, i + batchSize);\n batches.push(batch);\n }\n\n try {\n // Process each batch\n for (const batch of batches) {\n // Create each item individually within the batch\n for (const recordData of batch) {\n if (!recordData.entity) {\n this.logger.error('Missing entity property in record data for batchInsert', { recordData, tableName });\n throw new Error(`Internal error: Missing entity property during batchInsert for ${tableName}`);\n }\n // Log the object just before the create call\n this.logger.debug('Attempting to create record in batchInsert:', { entityName, recordData });\n await this.service.entities[entityName].create(recordData).go();\n }\n // Original batch call: await this.service.entities[entityName].create(batch).go();\n }\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_BATCH_INSERT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n /**\n * Load a record by its keys\n */\n async load<R>({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, string> }): Promise<R | null> {\n this.logger.debug('DynamoDB load called', { tableName, keys });\n\n const entityName = this.getEntityNameForTable(tableName);\n if (!entityName || !this.service.entities[entityName]) {\n throw new MastraError({\n id: 'STORAGE_DYNAMODB_STORE_LOAD_INVALID_ARGS',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'No entity defined for tableName',\n details: { tableName },\n });\n }\n\n try {\n // Add the entity type to the key object for the .get call\n const keyObject = { entity: entityName, ...keys };\n const result = await this.service.entities[entityName].get(keyObject).go();\n\n if (!result.data) {\n return null;\n }\n\n // Add parsing logic if necessary (e.g., for metadata)\n let data = result.data;\n if (data.metadata && typeof data.metadata === 'string') {\n try {\n // data.metadata = JSON.parse(data.metadata); // REMOVED by AI\n } catch {\n /* ignore parse error */\n }\n }\n // Add similar parsing for other JSON fields if needed based on entity type\n\n return data as R;\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_LOAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { ScoreRowData, ScoringSource, ValidatedSaveScorePayload } from '@mastra/core/evals';\nimport { saveScorePayloadSchema } from '@mastra/core/evals';\nimport { ScoresStorage, calculatePagination, normalizePerPage } from '@mastra/core/storage';\nimport type { PaginationInfo, StoragePagination } from '@mastra/core/storage';\nimport type { Service } from 'electrodb';\n\nexport class ScoresStorageDynamoDB extends ScoresStorage {\n private service: Service<Record<string, any>>;\n constructor({ service }: { service: Service<Record<string, any>> }) {\n super();\n this.service = service;\n }\n\n // Helper function to parse score data (handle JSON fields)\n private parseScoreData(data: any): ScoreRowData {\n return {\n ...data,\n // Convert date strings back to Date objects for consistency\n createdAt: data.createdAt ? new Date(data.createdAt) : new Date(),\n updatedAt: data.updatedAt ? new Date(data.updatedAt) : new Date(),\n // JSON fields are already transformed by the entity's getters\n } as ScoreRowData;\n }\n\n async getScoreById({ id }: { id: string }): Promise<ScoreRowData | null> {\n this.logger.debug('Getting score by ID', { id });\n try {\n const result = await this.service.entities.score.get({ entity: 'score', id }).go();\n\n if (!result.data) {\n return null;\n }\n\n return this.parseScoreData(result.data);\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_GET_SCORE_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { id },\n },\n error,\n );\n }\n }\n\n async saveScore(score: Omit<ScoreRowData, 'id' | 'createdAt' | 'updatedAt'>): Promise<{ score: ScoreRowData }> {\n let validatedScore: ValidatedSaveScorePayload;\n try {\n validatedScore = saveScorePayloadSchema.parse(score);\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_SAVE_SCORE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n\n const now = new Date();\n const scoreId = `score-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n\n const scoreData = {\n entity: 'score',\n id: scoreId,\n scorerId: validatedScore.scorerId,\n traceId: validatedScore.traceId || '',\n spanId: validatedScore.spanId || '',\n runId: validatedScore.runId,\n scorer: typeof validatedScore.scorer === 'string' ? validatedScore.scorer : JSON.stringify(validatedScore.scorer),\n preprocessStepResult:\n typeof validatedScore.preprocessStepResult === 'string'\n ? validatedScore.preprocessStepResult\n : JSON.stringify(validatedScore.preprocessStepResult),\n analyzeStepResult:\n typeof validatedScore.analyzeStepResult === 'string'\n ? validatedScore.analyzeStepResult\n : JSON.stringify(validatedScore.analyzeStepResult),\n score: validatedScore.score,\n reason: validatedScore.reason,\n preprocessPrompt: validatedScore.preprocessPrompt,\n generateScorePrompt: validatedScore.generateScorePrompt,\n generateReasonPrompt: validatedScore.generateReasonPrompt,\n analyzePrompt: validatedScore.analyzePrompt,\n input: typeof validatedScore.input === 'string' ? validatedScore.input : JSON.stringify(validatedScore.input),\n output: typeof validatedScore.output === 'string' ? validatedScore.output : JSON.stringify(validatedScore.output),\n additionalContext:\n typeof validatedScore.additionalContext === 'string'\n ? validatedScore.additionalContext\n : JSON.stringify(validatedScore.additionalContext),\n requestContext:\n typeof validatedScore.requestContext === 'string'\n ? validatedScore.requestContext\n : JSON.stringify(validatedScore.requestContext),\n entityType: validatedScore.entityType,\n entityData:\n typeof validatedScore.entity === 'string' ? validatedScore.entity : JSON.stringify(validatedScore.entity),\n entityId: validatedScore.entityId,\n source: validatedScore.source,\n resourceId: validatedScore.resourceId || '',\n threadId: validatedScore.threadId || '',\n createdAt: now.toISOString(),\n updatedAt: now.toISOString(),\n };\n\n try {\n await this.service.entities.score.upsert(scoreData).go();\n\n const savedScore: ScoreRowData = {\n ...score,\n id: scoreId,\n createdAt: now,\n updatedAt: now,\n };\n\n return { score: savedScore };\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_SAVE_SCORE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { scorerId: score.scorerId, runId: score.runId },\n },\n error,\n );\n }\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?: string;\n source?: ScoringSource;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n try {\n // Query scores by scorer ID using the GSI\n const query = this.service.entities.score.query.byScorer({ entity: 'score', scorerId });\n\n // Get all scores for this scorer ID (DynamoDB doesn't support OFFSET/LIMIT)\n const results = await query.go();\n let allScores = results.data.map((data: any) => this.parseScoreData(data));\n\n // Apply additional filters if provided\n if (entityId) {\n allScores = allScores.filter((score: ScoreRowData) => score.entityId === entityId);\n }\n if (entityType) {\n allScores = allScores.filter((score: ScoreRowData) => score.entityType === entityType);\n }\n if (source) {\n allScores = allScores.filter((score: ScoreRowData) => score.source === source);\n }\n\n // Sort by createdAt DESC (newest first)\n allScores.sort((a: ScoreRowData, b: ScoreRowData) => b.createdAt.getTime() - a.createdAt.getTime());\n\n const { page, perPage: perPageInput } = pagination;\n const perPage = normalizePerPage(perPageInput, Number.MAX_SAFE_INTEGER);\n const { offset: start, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n // Apply pagination in memory\n const total = allScores.length;\n const end = perPageInput === false ? allScores.length : start + perPage;\n const paginatedScores = allScores.slice(start, end);\n\n return {\n scores: paginatedScores,\n pagination: {\n total,\n page,\n perPage: perPageForResponse,\n hasMore: end < total,\n },\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_GET_SCORES_BY_SCORER_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n scorerId: scorerId || '',\n entityId: entityId || '',\n entityType: entityType || '',\n source: source || '',\n page: pagination.page,\n perPage: pagination.perPage,\n },\n },\n error,\n );\n }\n }\n\n async listScoresByRunId({\n runId,\n pagination,\n }: {\n runId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n this.logger.debug('Getting scores by run ID', { runId, pagination });\n\n try {\n // Query scores by run ID using the GSI\n const query = this.service.entities.score.query.byRun({ entity: 'score', runId });\n\n // Get all scores for this run ID\n const results = await query.go();\n const allScores = results.data.map((data: any) => this.parseScoreData(data));\n\n // Sort by createdAt DESC (newest first)\n allScores.sort((a: ScoreRowData, b: ScoreRowData) => b.createdAt.getTime() - a.createdAt.getTime());\n\n const { page, perPage: perPageInput } = pagination;\n const perPage = normalizePerPage(perPageInput, Number.MAX_SAFE_INTEGER);\n const { offset: start, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n // Apply pagination in memory\n const total = allScores.length;\n const end = perPageInput === false ? allScores.length : start + perPage;\n const paginatedScores = allScores.slice(start, end);\n\n return {\n scores: paginatedScores,\n pagination: {\n total,\n page,\n perPage: perPageForResponse,\n hasMore: end < total,\n },\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_GET_SCORES_BY_RUN_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { runId, page: pagination.page, perPage: pagination.perPage },\n },\n error,\n );\n }\n }\n\n async listScoresByEntityId({\n entityId,\n entityType,\n pagination,\n }: {\n entityId: string;\n entityType: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n this.logger.debug('Getting scores by entity ID', { entityId, entityType, pagination });\n\n try {\n // Use the byEntityData index which uses entityId as the primary key\n const query = this.service.entities.score.query.byEntityData({ entity: 'score', entityId });\n\n // Get all scores for this entity ID\n const results = await query.go();\n let allScores = results.data.map((data: any) => this.parseScoreData(data));\n\n // Filter by entityType since the index only uses entityId\n allScores = allScores.filter((score: ScoreRowData) => score.entityType === entityType);\n\n // Sort by createdAt DESC (newest first)\n allScores.sort((a: ScoreRowData, b: ScoreRowData) => b.createdAt.getTime() - a.createdAt.getTime());\n\n const { page, perPage: perPageInput } = pagination;\n const perPage = normalizePerPage(perPageInput, Number.MAX_SAFE_INTEGER);\n const { offset: start, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n // Apply pagination in memory\n const total = allScores.length;\n const end = perPageInput === false ? allScores.length : start + perPage;\n const paginatedScores = allScores.slice(start, end);\n\n return {\n scores: paginatedScores,\n pagination: {\n total,\n page,\n perPage: perPageForResponse,\n hasMore: end < total,\n },\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_GET_SCORES_BY_ENTITY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { entityId, entityType, page: pagination.page, perPage: pagination.perPage },\n },\n error,\n );\n }\n }\n\n async listScoresBySpan({\n traceId,\n spanId,\n pagination,\n }: {\n traceId: string;\n spanId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n this.logger.debug('Getting scores by span', { traceId, spanId, pagination });\n\n try {\n // Query scores by trace ID and span ID using the GSI\n const query = this.service.entities.score.query.bySpan({ entity: 'score', traceId, spanId });\n\n // Get all scores for this trace and span ID\n const results = await query.go();\n const allScores = results.data.map((data: any) => this.parseScoreData(data));\n\n // Sort by createdAt DESC (newest first)\n allScores.sort((a: ScoreRowData, b: ScoreRowData) => b.createdAt.getTime() - a.createdAt.getTime());\n\n const { page, perPage: perPageInput } = pagination;\n const perPage = normalizePerPage(perPageInput, Number.MAX_SAFE_INTEGER);\n const { offset: start, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n // Apply pagination in memory\n const total = allScores.length;\n const end = perPageInput === false ? allScores.length : start + perPage;\n const paginatedScores = allScores.slice(start, end);\n\n return {\n scores: paginatedScores,\n pagination: {\n total,\n page,\n perPage: perPageForResponse,\n hasMore: end < total,\n },\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_GET_SCORES_BY_SPAN_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { traceId, spanId, page: pagination.page, perPage: pagination.perPage },\n },\n error,\n );\n }\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { normalizePerPage, WorkflowsStorage } from '@mastra/core/storage';\nimport type { WorkflowRun, WorkflowRuns, StorageListWorkflowRunsInput } from '@mastra/core/storage';\nimport type { StepResult, WorkflowRunState } from '@mastra/core/workflows';\nimport type { Service } from 'electrodb';\n\n// Define the structure for workflow snapshot items retrieved from DynamoDB\ninterface WorkflowSnapshotDBItem {\n entity: string; // Typically 'workflow_snapshot'\n workflow_name: string;\n run_id: string;\n snapshot: WorkflowRunState; // Should be WorkflowRunState after ElectroDB get attribute processing\n createdAt: string; // ISO Date string\n updatedAt: string; // ISO Date string\n resourceId?: string;\n}\n\nfunction formatWorkflowRun(snapshotData: WorkflowSnapshotDBItem): WorkflowRun {\n return {\n workflowName: snapshotData.workflow_name,\n runId: snapshotData.run_id,\n snapshot: snapshotData.snapshot as WorkflowRunState,\n createdAt: new Date(snapshotData.createdAt),\n updatedAt: new Date(snapshotData.updatedAt),\n resourceId: snapshotData.resourceId,\n };\n}\n\nexport class WorkflowStorageDynamoDB extends WorkflowsStorage {\n private service: Service<Record<string, any>>;\n constructor({ service }: { service: Service<Record<string, any>> }) {\n super();\n\n this.service = service;\n }\n\n updateWorkflowResults(\n {\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 },\n ): Promise<Record<string, StepResult<any, any, any, any>>> {\n throw new Error('Method not implemented.');\n }\n updateWorkflowState(\n {\n // workflowName,\n // runId,\n // opts,\n }: {\n workflowName: string;\n runId: string;\n opts: {\n status: string;\n result?: StepResult<any, any, any, any>;\n error?: string;\n suspendedPaths?: Record<string, number[]>;\n waitingPaths?: Record<string, number[]>;\n };\n },\n ): Promise<WorkflowRunState | undefined> {\n throw new Error('Method not implemented.');\n }\n\n // Workflow operations\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 this.logger.debug('Persisting workflow snapshot', { workflowName, runId });\n\n try {\n const now = new Date().toISOString();\n // Prepare data including the 'entity' type\n const data = {\n entity: 'workflow_snapshot', // Add entity type\n workflow_name: workflowName,\n run_id: runId,\n snapshot: JSON.stringify(snapshot), // Stringify the snapshot object\n createdAt: now,\n updatedAt: now,\n resourceId,\n };\n // Use upsert instead of create to handle both create and update cases\n await this.service.entities.workflow_snapshot.upsert(data).go();\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_PERSIST_WORKFLOW_SNAPSHOT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { workflowName, runId },\n },\n error,\n );\n }\n }\n\n async loadWorkflowSnapshot({\n workflowName,\n runId,\n }: {\n workflowName: string;\n runId: string;\n }): Promise<WorkflowRunState | null> {\n this.logger.debug('Loading workflow snapshot', { workflowName, runId });\n\n try {\n // Provide *all* composite key components for the primary index ('entity', 'workflow_name', 'run_id')\n const result = await this.service.entities.workflow_snapshot\n .get({\n entity: 'workflow_snapshot', // Add entity type\n workflow_name: workflowName,\n run_id: runId,\n })\n .go();\n\n if (!result.data?.snapshot) {\n // Check snapshot exists\n return null;\n }\n\n // Parse the snapshot string\n return result.data.snapshot as WorkflowRunState;\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_LOAD_WORKFLOW_SNAPSHOT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { workflowName, runId },\n },\n error,\n );\n }\n }\n\n async listWorkflowRuns(args?: StorageListWorkflowRunsInput): Promise<WorkflowRuns> {\n this.logger.debug('Getting workflow runs', { args });\n\n try {\n // Default values\n const perPage = args?.perPage !== undefined ? args.perPage : 10;\n const page = args?.page !== undefined ? args.page : 0;\n\n if (page < 0) {\n throw new MastraError(\n {\n id: 'DYNAMODB_STORE_INVALID_PAGE',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { page },\n },\n new Error('page must be >= 0'),\n );\n }\n\n const normalizedPerPage = normalizePerPage(perPage, 10);\n const offset = page * normalizedPerPage;\n\n let query;\n\n if (args?.workflowName) {\n // Query by workflow name using the primary index\n // Provide *all* composite key components for the PK ('entity', 'workflow_name')\n query = this.service.entities.workflow_snapshot.query.primary({\n entity: 'workflow_snapshot', // Add entity type\n workflow_name: args.workflowName,\n });\n } else {\n // If no workflow name, we need to scan\n // This is not ideal for production with large datasets\n this.logger.warn('Performing a scan operation on workflow snapshots - consider using a more specific query');\n query = this.service.entities.workflow_snapshot.scan; // Scan still uses the service entity\n }\n\n const allMatchingSnapshots: WorkflowSnapshotDBItem[] = [];\n let cursor: string | null = null;\n const DYNAMODB_PAGE_SIZE = 100; // Sensible page size for fetching\n\n do {\n const pageResults: { data: WorkflowSnapshotDBItem[]; cursor: string | null } = await query.go({\n limit: DYNAMODB_PAGE_SIZE,\n cursor,\n });\n\n if (pageResults.data && pageResults.data.length > 0) {\n let pageFilteredData: WorkflowSnapshotDBItem[] = pageResults.data;\n\n // Apply date filters if specified\n if (args?.fromDate || args?.toDate) {\n pageFilteredData = pageFilteredData.filter((snapshot: WorkflowSnapshotDBItem) => {\n const createdAt = new Date(snapshot.createdAt);\n if (args.fromDate && createdAt < args.fromDate) {\n return false;\n }\n if (args.toDate && createdAt > args.toDate) {\n return false;\n }\n return true;\n });\n }\n\n // Filter by resourceId if specified\n if (args?.resourceId) {\n pageFilteredData = pageFilteredData.filter((snapshot: WorkflowSnapshotDBItem) => {\n return snapshot.resourceId === args.resourceId;\n });\n }\n allMatchingSnapshots.push(...pageFilteredData);\n }\n\n cursor = pageResults.cursor;\n } while (cursor);\n\n if (!allMatchingSnapshots.length) {\n return { runs: [], total: 0 };\n }\n\n // Apply offset and limit to the accumulated filtered results\n const total = allMatchingSnapshots.length;\n const paginatedData = allMatchingSnapshots.slice(offset, offset + normalizedPerPage);\n\n // Format and return the results\n const runs = paginatedData.map((snapshot: WorkflowSnapshotDBItem) => formatWorkflowRun(snapshot));\n\n return {\n runs,\n total,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_LIST_WORKFLOW_RUNS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { workflowName: args?.workflowName || '', resourceId: args?.resourceId || '' },\n },\n error,\n );\n }\n }\n\n async getWorkflowRunById(args: { runId: string; workflowName?: string }): Promise<WorkflowRun | null> {\n const { runId, workflowName } = args;\n this.logger.debug('Getting workflow run by ID', { runId, workflowName });\n\n try {\n // If we have a workflowName, we can do a direct get using the primary key\n if (workflowName) {\n this.logger.debug('WorkflowName provided, using direct GET operation.');\n const result = await this.service.entities.workflow_snapshot\n .get({\n entity: 'workflow_snapshot', // Entity type for PK\n workflow_name: workflowName,\n run_id: runId,\n })\n .go();\n\n if (!result.data) {\n return null;\n }\n\n const snapshot = result.data.snapshot;\n return {\n workflowName: result.data.workflow_name,\n runId: result.data.run_id,\n snapshot,\n createdAt: new Date(result.data.createdAt),\n updatedAt: new Date(result.data.updatedAt),\n resourceId: result.data.resourceId,\n };\n }\n\n // Otherwise, if workflowName is not provided, use the GSI on runId.\n // This is more efficient than a full table scan.\n this.logger.debug(\n 'WorkflowName not provided. Attempting to find workflow run by runId using GSI. Ensure GSI (e.g., \"byRunId\") is defined on the workflowSnapshot entity with run_id as its key and provisioned in DynamoDB.',\n );\n\n // IMPORTANT: This assumes a GSI (e.g., named 'byRunId') exists on the workflowSnapshot entity\n // with 'run_id' as its partition key. This GSI must be:\n // 1. Defined in your ElectroDB model (e.g., in stores/dynamodb/src/entities/index.ts).\n // 2. Provisioned in the actual DynamoDB table (e.g., via CDK/CloudFormation).\n // The query key object includes 'entity' as it's good practice with ElectroDB and single-table design,\n // aligning with how other GSIs are queried in this file.\n const result = await this.service.entities.workflow_snapshot.query\n .gsi2({ entity: 'workflow_snapshot', run_id: runId }) // Replace 'byRunId' with your actual GSI name\n .go();\n\n // If the GSI query returns multiple items (e.g., if run_id is not globally unique across all snapshots),\n // this will take the first one. The original scan logic also effectively took the first match found.\n // If run_id is guaranteed unique, result.data should contain at most one item.\n const matchingRunDbItem: WorkflowSnapshotDBItem | null =\n result.data && result.data.length > 0 ? result.data[0] : null;\n\n if (!matchingRunDbItem) {\n return null;\n }\n\n const snapshot = matchingRunDbItem.snapshot;\n return {\n workflowName: matchingRunDbItem.workflow_name,\n runId: matchingRunDbItem.run_id,\n snapshot,\n createdAt: new Date(matchingRunDbItem.createdAt),\n updatedAt: new Date(matchingRunDbItem.updatedAt),\n resourceId: matchingRunDbItem.resourceId,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_GET_WORKFLOW_RUN_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { runId, workflowName: args?.workflowName || '' },\n },\n error,\n );\n }\n }\n}\n","import { DynamoDBClient, DescribeTableCommand } from '@aws-sdk/client-dynamodb';\nimport { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb';\nimport type { MastraMessageContentV2 } from '@mastra/core/agent';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { ScoreRowData, ScoringSource } from '@mastra/core/evals';\nimport type { StorageThreadType, MastraDBMessage } from '@mastra/core/memory';\n\nimport { MastraStorage } from '@mastra/core/storage';\nimport type {\n WorkflowRun,\n WorkflowRuns,\n TABLE_NAMES,\n PaginationInfo,\n StorageColumn,\n StoragePagination,\n StorageDomains,\n StorageResourceType,\n StorageListWorkflowRunsInput,\n} from '@mastra/core/storage';\nimport type { StepResult, WorkflowRunState } from '@mastra/core/workflows';\nimport type { Service } from 'electrodb';\nimport { getElectroDbService } from '../entities';\nimport { MemoryStorageDynamoDB } from './domains/memory';\nimport { StoreOperationsDynamoDB } from './domains/operations';\nimport { ScoresStorageDynamoDB } from './domains/score';\nimport { WorkflowStorageDynamoDB } from './domains/workflows';\n\nexport interface DynamoDBStoreConfig {\n id: string;\n region?: string;\n tableName: string;\n endpoint?: string;\n credentials?: {\n accessKeyId: string;\n secretAccessKey: string;\n };\n}\n\n// Define a type for our service that allows string indexing\ntype MastraService = Service<Record<string, any>> & {\n [key: string]: any;\n};\n\nexport class DynamoDBStore extends MastraStorage {\n private tableName: string;\n private client: DynamoDBDocumentClient;\n private service: MastraService;\n protected hasInitialized: Promise<boolean> | null = null;\n stores: StorageDomains;\n\n constructor({ name, config }: { name: string; config: DynamoDBStoreConfig }) {\n super({ id: config.id, name });\n\n // Validate required config\n try {\n if (!config.tableName || typeof config.tableName !== 'string' || config.tableName.trim() === '') {\n throw new Error('DynamoDBStore: config.tableName must be provided and cannot be empty.');\n }\n // Validate tableName characters (basic check)\n if (!/^[a-zA-Z0-9_.-]{3,255}$/.test(config.tableName)) {\n throw new Error(\n `DynamoDBStore: config.tableName \"${config.tableName}\" contains invalid characters or is not between 3 and 255 characters long.`,\n );\n }\n\n const dynamoClient = new DynamoDBClient({\n region: config.region || 'us-east-1',\n endpoint: config.endpoint,\n credentials: config.credentials,\n });\n\n this.tableName = config.tableName;\n this.client = DynamoDBDocumentClient.from(dynamoClient);\n this.service = getElectroDbService(this.client, this.tableName) as MastraService;\n\n const operations = new StoreOperationsDynamoDB({\n service: this.service,\n tableName: this.tableName,\n client: this.client,\n });\n\n const workflows = new WorkflowStorageDynamoDB({ service: this.service });\n\n const memory = new MemoryStorageDynamoDB({ service: this.service });\n\n const scores = new ScoresStorageDynamoDB({ service: this.service });\n\n this.stores = {\n operations,\n workflows,\n memory,\n scores,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_CONSTRUCTOR_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n },\n error,\n );\n }\n\n // We're using a single table design with ElectroDB,\n // so we don't need to create multiple tables\n }\n\n get supports() {\n return {\n selectByIncludeResourceScope: true,\n resourceWorkingMemory: true,\n hasColumn: false,\n createTable: false,\n deleteMessages: false,\n listScoresBySpan: true,\n };\n }\n\n /**\n * Validates that the required DynamoDB table exists and is accessible.\n * This does not check the table structure - it assumes the table\n * was created with the correct structure via CDK/CloudFormation.\n */\n private async validateTableExists(): Promise<boolean> {\n try {\n const command = new DescribeTableCommand({\n TableName: this.tableName,\n });\n\n // If the table exists, this call will succeed\n // If the table doesn't exist, it will throw a ResourceNotFoundException\n await this.client.send(command);\n return true;\n } catch (error: any) {\n // If the table doesn't exist, DynamoDB returns a ResourceNotFoundException\n if (error.name === 'ResourceNotFoundException') {\n return false;\n }\n\n // For other errors (like permissions issues), we should throw\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_VALIDATE_TABLE_EXISTS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName: this.tableName },\n },\n error,\n );\n }\n }\n\n /**\n * Initialize storage, validating the externally managed table is accessible.\n * For the single-table design, we only validate once that we can access\n * the table that was created via CDK/CloudFormation.\n */\n async init(): Promise<void> {\n if (this.hasInitialized === null) {\n // If no initialization promise exists, create and store it.\n // This assignment ensures that even if multiple calls arrive here concurrently,\n // they will all eventually await the same promise instance created by the first one\n // to complete this assignment.\n this.hasInitialized = this._performInitializationAndStore();\n }\n\n try {\n // Await the stored promise.\n // If initialization was successful, this resolves.\n // If it failed, this will re-throw the error caught and re-thrown by _performInitializationAndStore.\n await this.hasInitialized;\n } catch (error) {\n // The error has already been handled by _performInitializationAndStore\n // (i.e., this.hasInitialized was reset). Re-throwing here ensures\n // the caller of init() is aware of the failure.\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_INIT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName: this.tableName },\n },\n error,\n );\n }\n }\n\n /**\n * Performs the actual table validation and stores the promise.\n * Handles resetting the stored promise on failure to allow retries.\n */\n private _performInitializationAndStore(): Promise<boolean> {\n return this.validateTableExists()\n .then(exists => {\n if (!exists) {\n throw new Error(\n `Table ${this.tableName} does not exist or is not accessible. Ensure it's created via CDK/CloudFormation before using this store.`,\n );\n }\n // Successfully initialized\n return true;\n })\n .catch(err => {\n // Initialization failed. Clear the stored promise to allow future calls to init() to retry.\n this.hasInitialized = null;\n // Re-throw the error so it can be caught by the awaiter in init()\n throw err;\n });\n }\n\n async createTable({ tableName, schema }: { tableName: TABLE_NAMES; schema: Record<string, any> }): Promise<void> {\n return this.stores.operations.createTable({ tableName, schema });\n }\n\n async alterTable(_args: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void> {\n return this.stores.operations.alterTable(_args);\n }\n\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n return this.stores.operations.clearTable({ tableName });\n }\n\n async dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n return this.stores.operations.dropTable({ tableName });\n }\n\n async insert({ tableName, record }: { tableName: TABLE_NAMES; record: Record<string, any> }): Promise<void> {\n return this.stores.operations.insert({ tableName, record });\n }\n\n async batchInsert({ tableName, records }: { tableName: TABLE_NAMES; records: Record<string, any>[] }): Promise<void> {\n return this.stores.operations.batchInsert({ tableName, records });\n }\n\n async load<R>({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, string> }): Promise<R | null> {\n return this.stores.operations.load({ tableName, keys });\n }\n\n // Thread operations\n async getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null> {\n return this.stores.memory.getThreadById({ threadId });\n }\n\n async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n return this.stores.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.stores.memory.updateThread({ id, title, metadata });\n }\n\n async deleteThread({ threadId }: { threadId: string }): Promise<void> {\n return this.stores.memory.deleteThread({ threadId });\n }\n\n async listMessagesById(args: { messageIds: string[] }): Promise<{ messages: MastraDBMessage[] }> {\n return this.stores.memory.listMessagesById(args);\n }\n\n async saveMessages(args: { messages: MastraDBMessage[] }): Promise<{ messages: MastraDBMessage[] }> {\n return this.stores.memory.saveMessages(args);\n }\n\n async updateMessages(_args: {\n messages: (Partial<Omit<MastraDBMessage, 'createdAt'>> & {\n id: string;\n content?: { metadata?: MastraMessageContentV2['metadata']; content?: MastraMessageContentV2['content'] };\n })[];\n }): Promise<MastraDBMessage[]> {\n return this.stores.memory.updateMessages(_args);\n }\n\n // Workflow operations\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 return this.stores.workflows.updateWorkflowResults({ workflowName, runId, stepId, result, requestContext });\n }\n\n async updateWorkflowState({\n workflowName,\n runId,\n opts,\n }: {\n workflowName: string;\n runId: string;\n opts: {\n status: string;\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.stores.workflows.updateWorkflowState({ workflowName, runId, opts });\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 return this.stores.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.stores.workflows.loadWorkflowSnapshot({ workflowName, runId });\n }\n\n async listWorkflowRuns(args?: StorageListWorkflowRunsInput): Promise<WorkflowRuns> {\n return this.stores.workflows.listWorkflowRuns(args);\n }\n\n async getWorkflowRunById(args: { runId: string; workflowName?: string }): Promise<WorkflowRun | null> {\n return this.stores.workflows.getWorkflowRunById(args);\n }\n\n async getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n return this.stores.memory.getResourceById({ resourceId });\n }\n\n async saveResource({ resource }: { resource: StorageResourceType }): Promise<StorageResourceType> {\n return this.stores.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, any>;\n }): Promise<StorageResourceType> {\n return this.stores.memory.updateResource({ resourceId, workingMemory, metadata });\n }\n\n /**\n * Closes the DynamoDB client connection and cleans up resources.\n * Should be called when the store is no longer needed, e.g., at the end of tests or application shutdown.\n */\n public async close(): Promise<void> {\n this.logger.debug('Closing DynamoDB client for store:', { name: this.name });\n try {\n this.client.destroy();\n this.logger.debug('DynamoDB client closed successfully for store:', { name: this.name });\n } catch (error) {\n throw new MastraError(\n {\n id: 'STORAGE_DYNAMODB_STORE_CLOSE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n /**\n * SCORERS - Not implemented\n */\n async getScoreById({ id: _id }: { id: string }): Promise<ScoreRowData | null> {\n return this.stores.scores.getScoreById({ id: _id });\n }\n\n async saveScore(_score: ScoreRowData): Promise<{ score: ScoreRowData }> {\n return this.stores.scores.saveScore(_score);\n }\n\n async listScoresByRunId({\n runId: _runId,\n pagination: _pagination,\n }: {\n runId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.listScoresByRunId({ runId: _runId, pagination: _pagination });\n }\n\n async listScoresByEntityId({\n entityId: _entityId,\n entityType: _entityType,\n pagination: _pagination,\n }: {\n pagination: StoragePagination;\n entityId: string;\n entityType: string;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.listScoresByEntityId({\n entityId: _entityId,\n entityType: _entityType,\n pagination: _pagination,\n });\n }\n\n async listScoresByScorerId({\n scorerId,\n source,\n entityId,\n entityType,\n pagination,\n }: {\n scorerId: string;\n entityId?: string;\n entityType?: string;\n source?: ScoringSource;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.listScoresByScorerId({ scorerId, source, entityId, entityType, pagination });\n }\n\n async listScoresBySpan({\n traceId,\n spanId,\n pagination,\n }: {\n traceId: string;\n spanId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.listScoresBySpan({ traceId, spanId, pagination });\n }\n}\n"]}