@mastra/mysql 0.0.0 → 0.1.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/storage/domains/utils.ts","../src/storage/domains/operations/index.ts","../src/storage/domains/agents/index.ts","../src/storage/domains/background-tasks/index.ts","../src/storage/domains/blobs/index.ts","../src/storage/domains/channels/index.ts","../src/storage/domains/datasets/index.ts","../src/storage/domains/experiments/index.ts","../src/storage/domains/favorites/index.ts","../src/storage/domains/mcp-clients/index.ts","../src/storage/domains/mcp-servers/index.ts","../src/storage/domains/memory/index.ts","../src/storage/domains/observability/index.ts","../src/storage/domains/prompt-blocks/index.ts","../src/storage/domains/schedules/index.ts","../src/storage/domains/scorer-definitions/index.ts","../src/storage/domains/scores/index.ts","../src/storage/domains/skills/index.ts","../src/storage/domains/tool-provider-connections/index.ts","../src/storage/domains/workflows/index.ts","../src/storage/domains/workspaces/index.ts","../src/storage/index.ts"],"names":["parseSqlIdentifier","TABLE_SCHEMAS","StoreOperations","TABLE_CONFIGS","TABLE_WORKFLOW_SNAPSHOT","TABLE_SPANS","error","MastraError","ErrorDomain","ErrorCategory","AgentsStorage","TABLE_AGENTS","TABLE_AGENT_VERSIONS","AGENTS_SCHEMA","AGENT_VERSIONS_SCHEMA","createStorageErrorId","normalizePerPage","calculatePagination","TABLE_FAVORITES","BackgroundTasksStorage","TABLE_BACKGROUND_TASKS","BlobStore","TABLE_SKILL_BLOBS","SKILL_BLOBS_SCHEMA","ChannelsStorage","TABLE_CHANNEL_INSTALLATIONS","TABLE_CHANNEL_CONFIG","DatasetsStorage","TABLE_DATASETS","TABLE_DATASET_ITEMS","TABLE_DATASET_VERSIONS","DATASETS_SCHEMA","DATASET_ITEMS_SCHEMA","DATASET_VERSIONS_SCHEMA","randomUUID","TABLE_EXPERIMENT_RESULTS","TABLE_EXPERIMENTS","parseJSON","ExperimentsStorage","EXPERIMENTS_SCHEMA","EXPERIMENT_RESULTS_SCHEMA","TABLE_SKILLS","FavoritesStorage","FAVORITES_SCHEMA","MCPClientsStorage","TABLE_MCP_CLIENTS","TABLE_MCP_CLIENT_VERSIONS","MCP_CLIENTS_SCHEMA","MCP_CLIENT_VERSIONS_SCHEMA","MCPServersStorage","TABLE_MCP_SERVERS","TABLE_MCP_SERVER_VERSIONS","MCP_SERVERS_SCHEMA","MCP_SERVER_VERSIONS_SCHEMA","MemoryStorage","TABLE_THREADS","TABLE_MESSAGES","TABLE_RESOURCES","includeMessages","list","MessageList","messages","ObservabilityStorage","SPAN_SCHEMA","listTracesArgsSchema","TraceStatus","toTraceSpans","PromptBlocksStorage","TABLE_PROMPT_BLOCKS","TABLE_PROMPT_BLOCK_VERSIONS","PROMPT_BLOCKS_SCHEMA","PROMPT_BLOCK_VERSIONS_SCHEMA","parseJson","SchedulesStorage","TABLE_SCHEDULES","TABLE_SCHEDULE_TRIGGERS","ScorerDefinitionsStorage","TABLE_SCORER_DEFINITIONS","TABLE_SCORER_DEFINITION_VERSIONS","SCORER_DEFINITIONS_SCHEMA","SCORER_DEFINITION_VERSIONS_SCHEMA","ScoresStorage","TABLE_SCORERS","SCORERS_SCHEMA","SkillsStorage","TABLE_SKILL_VERSIONS","SKILLS_SCHEMA","SKILL_VERSIONS_SCHEMA","ToolProviderConnectionsStorage","TABLE_TOOL_PROVIDER_CONNECTIONS","TOOL_PROVIDER_CONNECTIONS_SCHEMA","WorkflowsStorage","SNAPSHOT_FIELDS","WorkspacesStorage","TABLE_WORKSPACES","TABLE_WORKSPACE_VERSIONS","WORKSPACES_SCHEMA","WORKSPACE_VERSIONS_SCHEMA","options","createPool","MastraCompositeStore"],"mappings":"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","file":"index.cjs","sourcesContent":["import { TABLE_SCHEMAS } from '@mastra/core/storage';\nimport type { TABLE_NAMES } from '@mastra/core/storage';\nimport { parseSqlIdentifier } from '@mastra/core/utils';\n\nexport type SqlParam = any;\n\nexport function quoteIdentifier(value: string, context: string): string {\n return `\\`${parseSqlIdentifier(value, context)}\\``;\n}\n\nexport function formatTableName(tableName: TABLE_NAMES, database?: string): string {\n const tableIdent = quoteIdentifier(tableName, 'table name');\n if (!database) {\n return tableIdent;\n }\n return `${quoteIdentifier(database, 'database name')}.${tableIdent}`;\n}\n\nexport function prepareWhereClause(filters: Record<string, any>): { sql: string; args: SqlParam[] } {\n const conditions: string[] = [];\n const args: SqlParam[] = [];\n\n Object.entries(filters).forEach(([key, value]) => {\n if (value === undefined) return;\n\n if (key.endsWith('_gte')) {\n const fieldName = key.slice(0, -4);\n conditions.push(`${quoteIdentifier(fieldName, 'column name')} >= ?`);\n args.push(transformToSqlValue(value));\n } else if (key.endsWith('_lte')) {\n const fieldName = key.slice(0, -4);\n conditions.push(`${quoteIdentifier(fieldName, 'column name')} <= ?`);\n args.push(transformToSqlValue(value));\n } else if (key.endsWith('_like')) {\n const fieldName = key.slice(0, -5);\n conditions.push(`${quoteIdentifier(fieldName, 'column name')} LIKE ?`);\n args.push(transformToSqlValue(value));\n } else if (key.endsWith('_in')) {\n const fieldName = key.slice(0, -3);\n const list = Array.isArray(value) ? value : [value];\n if (list.length === 0) {\n conditions.push('FALSE');\n } else {\n const placeholders = list.map(() => '?').join(', ');\n conditions.push(`${quoteIdentifier(fieldName, 'column name')} IN (${placeholders})`);\n args.push(...list.map(transformToSqlValue));\n }\n } else if (key.endsWith('_null')) {\n const fieldName = key.slice(0, -5);\n if (value === true) {\n conditions.push(`${quoteIdentifier(fieldName, 'column name')} IS NULL`);\n } else if (value === false) {\n conditions.push(`${quoteIdentifier(fieldName, 'column name')} IS NOT NULL`);\n }\n } else if (value === null) {\n conditions.push(`${quoteIdentifier(key, 'column name')} IS NULL`);\n } else if (Array.isArray(value)) {\n if (value.length === 0) {\n conditions.push('FALSE');\n } else {\n const placeholders = value.map(() => '?').join(', ');\n conditions.push(`${quoteIdentifier(key, 'column name')} IN (${placeholders})`);\n args.push(...value.map(transformToSqlValue));\n }\n } else {\n conditions.push(`${quoteIdentifier(key, 'column name')} = ?`);\n args.push(transformToSqlValue(value));\n }\n });\n\n return {\n sql: conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '',\n args,\n };\n}\n\nexport function transformToSqlValue(value: any): SqlParam {\n if (value === undefined || value === null) {\n return null;\n }\n if (value instanceof Date) {\n // MySQL DATETIME accepts 'YYYY-MM-DD HH:mm:ss.SSS' (no timezone). Preserve ms precision.\n return value.toISOString().slice(0, 23).replace('T', ' ');\n }\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n return value;\n}\n\nexport function prepareStatement({\n tableName,\n record,\n database,\n}: {\n tableName: TABLE_NAMES;\n record: Record<string, any>;\n database?: string;\n}): {\n sql: string;\n args: SqlParam[];\n} {\n const tableIdent = formatTableName(tableName, database);\n const columns = Object.keys(record);\n if (columns.length === 0) {\n throw new Error('Cannot prepare statement for empty record');\n }\n const columnIdentifiers = columns.map(column => quoteIdentifier(column, 'column name'));\n const values = columns.map(column => transformToSqlValue(record[column]));\n const placeholders = columns.map(() => '?').join(', ');\n const updateAssignments = columnIdentifiers.map(column => `${column} = ?`).join(', ');\n\n const sql = `INSERT INTO ${tableIdent} (${columnIdentifiers.join(', ')}) VALUES (${placeholders}) ON DUPLICATE KEY UPDATE ${updateAssignments}`;\n return {\n sql,\n args: [...values, ...values],\n };\n}\n\nexport function prepareUpdateStatement({\n tableName,\n updates,\n keys,\n database,\n}: {\n tableName: TABLE_NAMES;\n updates: Record<string, any>;\n keys: Record<string, any>;\n database?: string;\n}): {\n sql: string;\n args: SqlParam[];\n} {\n if (Object.keys(updates).length === 0) {\n throw new Error('Updates object cannot be empty');\n }\n const tableIdent = formatTableName(tableName, database);\n const setClause = Object.entries(updates)\n .map(([key]) => `${quoteIdentifier(key, 'column name')} = ?`)\n .join(', ');\n const updateValues = Object.values(updates).map(transformToSqlValue);\n const whereClause = prepareWhereClause(keys);\n\n return {\n sql: `UPDATE ${tableIdent} SET ${setClause}${whereClause.sql}`,\n args: [...updateValues, ...whereClause.args],\n };\n}\n\nexport function prepareDeleteStatement({\n tableName,\n keys,\n database,\n}: {\n tableName: TABLE_NAMES;\n keys: Record<string, any>;\n database?: string;\n}): {\n sql: string;\n args: SqlParam[];\n} {\n if (Object.keys(keys).length === 0) {\n throw new Error('Keys object cannot be empty for DELETE statement');\n }\n\n const tableIdent = formatTableName(tableName, database);\n const whereClause = prepareWhereClause(keys);\n\n return {\n sql: `DELETE FROM ${tableIdent}${whereClause.sql}`,\n args: whereClause.args,\n };\n}\n\nexport function transformFromSqlRow<T>({\n tableName,\n sqlRow,\n}: {\n tableName: TABLE_NAMES;\n sqlRow: Record<string, any>;\n}): T {\n const schema = TABLE_SCHEMAS[tableName];\n const result: Record<string, any> = {};\n\n Object.entries(sqlRow).forEach(([key, value]) => {\n const columnSchema = schema?.[key];\n\n if (columnSchema?.type === 'jsonb') {\n if (typeof value === 'string') {\n try {\n result[key] = JSON.parse(value);\n } catch {\n result[key] = value;\n }\n } else {\n result[key] = value;\n }\n } else if (columnSchema?.type === 'timestamp') {\n result[key] = value === null ? null : parseDateTime(value);\n } else if (columnSchema?.type === 'boolean') {\n result[key] = value === true || value === 1 || value === '1';\n } else {\n result[key] = value;\n }\n });\n\n return result as T;\n}\n\nexport function parseDateTime(value: Date | string | number | null | undefined): Date | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (value instanceof Date) {\n return value;\n }\n if (typeof value === 'number') {\n return new Date(value);\n }\n const str = String(value).trim();\n if (!str) return undefined;\n const normalized = str.includes('T') ? str : str.replace(' ', 'T');\n const withZone = /[zZ]|[+-]\\d\\d:?\\d\\d$/.test(normalized) ? normalized : `${normalized}Z`;\n return new Date(withZone);\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { StoreOperations, TABLE_CONFIGS, TABLE_SPANS, TABLE_WORKFLOW_SNAPSHOT } from '@mastra/core/storage';\nimport type { StorageColumn, TABLE_NAMES, CreateIndexOptions } from '@mastra/core/storage';\nimport type { Pool, PoolConnection, RowDataPacket } from 'mysql2/promise';\nimport {\n formatTableName,\n prepareDeleteStatement,\n prepareStatement,\n prepareUpdateStatement,\n prepareWhereClause,\n quoteIdentifier,\n transformFromSqlRow,\n transformToSqlValue,\n} from '../utils';\nimport type { SqlParam } from '../utils';\n\ntype WhereClause = {\n sql: string;\n args: SqlParam[];\n};\n\nexport class StoreOperationsMySQL extends StoreOperations {\n private pool: Pool;\n private database?: string;\n private resolvedDatabase?: string | null;\n\n constructor({ pool, database }: { pool: Pool; database?: string }) {\n super();\n this.pool = pool;\n this.database = database;\n this.resolvedDatabase = database ?? null;\n }\n\n getPool(): Pool {\n return this.pool;\n }\n\n async query<T = RowDataPacket>(sql: string, args: SqlParam[] = []): Promise<T[]> {\n const [rows] = await this.pool.execute<RowDataPacket[]>(sql, args.map(transformToSqlValue));\n return rows as unknown as T[];\n }\n\n private async getDatabase(): Promise<string | undefined> {\n if (this.resolvedDatabase !== null) {\n return this.resolvedDatabase ?? undefined;\n }\n\n const [rows] = await this.pool.query<RowDataPacket[]>('SELECT DATABASE() AS db');\n const db = rows[0]?.db as string | null;\n this.resolvedDatabase = db ?? null;\n return this.resolvedDatabase ?? undefined;\n }\n\n async hasColumn(table: string, column: string): Promise<boolean> {\n const db = await this.getDatabase();\n const params: SqlParam[] = [table, column];\n let sql =\n 'SELECT COUNT(*) as count FROM information_schema.columns WHERE table_name = ? AND (column_name = ? OR column_name = ? )';\n params.push(column.toLowerCase());\n if (db) {\n sql += ' AND table_schema = ?';\n params.push(db);\n }\n const [rows] = await this.pool.execute<RowDataPacket[]>(sql, params);\n return Number(rows[0]?.count ?? 0) > 0;\n }\n\n protected getSqlType(type: StorageColumn['type'], opts?: { isKey?: boolean; isNullable?: boolean }): string {\n const isKey = Boolean(opts?.isKey);\n const _isNullable = opts?.isNullable ?? true;\n switch (type) {\n case 'text':\n // Keys should remain short and indexable\n if (isKey) {\n return 'VARCHAR(191)';\n }\n // For non-key text fields, prefer LONGTEXT to avoid truncation errors\n // (message content, snapshots, etc. can exceed small VARCHAR limits)\n return 'LONGTEXT';\n case 'uuid':\n return 'VARCHAR(36)';\n case 'timestamp':\n return 'DATETIME(6)';\n case 'jsonb':\n return 'JSON';\n case 'integer':\n return 'INT';\n case 'float':\n return 'DOUBLE';\n case 'bigint':\n return 'BIGINT';\n case 'boolean':\n return 'TINYINT(1)';\n default:\n return super.getSqlType(type);\n }\n }\n\n private buildColumnDefinition(tableName: TABLE_NAMES, columnName: string, column: StorageColumn): string {\n const parts: string[] = [];\n const isKeyColumn = column.primaryKey || this.isKeyColumn(tableName, columnName);\n const isNullable = column.nullable !== false;\n parts.push(\n `${quoteIdentifier(columnName, 'column name')} ${this.getSqlType(column.type, {\n isKey: Boolean(isKeyColumn),\n isNullable,\n })}`,\n );\n if (column.nullable === false) {\n parts.push('NOT NULL');\n const defaultClause = this.getDefaultClause(column.type, {\n isNullable,\n isKey: Boolean(isKeyColumn),\n });\n if (defaultClause) {\n parts.push(defaultClause);\n }\n }\n if (column.primaryKey) {\n parts.push('PRIMARY KEY');\n }\n return parts.join(' ');\n }\n\n private getDefaultClause(\n type: StorageColumn['type'],\n { isNullable, isKey }: { isNullable: boolean; isKey: boolean },\n ): string | undefined {\n switch (type) {\n case 'jsonb':\n return undefined;\n case 'timestamp':\n return \"DEFAULT '1970-01-01 00:00:00'\";\n case 'text':\n return !isNullable && isKey ? \"DEFAULT ''\" : undefined;\n case 'boolean':\n return !isNullable ? 'DEFAULT 0' : undefined;\n default:\n return super.getDefaultValue(type);\n }\n }\n\n private getCreateTableSQL(tableName: TABLE_NAMES, schema: Record<string, StorageColumn>): string {\n const columns = Object.entries(schema).map(([name, column]) => this.buildColumnDefinition(tableName, name, column));\n const tableIdent = formatTableName(tableName, this.database);\n\n const extraConstraints: string[] = [];\n // Check if this table has a composite primary key defined in TABLE_CONFIGS\n const tableConfig = TABLE_CONFIGS[tableName];\n if (tableConfig?.compositePrimaryKey) {\n const pkColumns = tableConfig.compositePrimaryKey\n .map(col => quoteIdentifier(col, 'primary key column'))\n .join(', ');\n extraConstraints.push(`PRIMARY KEY (${pkColumns})`);\n }\n\n return `CREATE TABLE IF NOT EXISTS ${tableIdent} (${[...columns, ...extraConstraints].filter(Boolean).join(', ')}) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci`;\n }\n\n private isKeyColumn(tableName: TABLE_NAMES, columnName: string): boolean {\n if (columnName === 'id') {\n return true;\n }\n\n // Check if this column is part of a composite primary key\n const tableConfig = TABLE_CONFIGS[tableName];\n if (tableConfig?.compositePrimaryKey?.includes(columnName)) {\n return true;\n }\n\n if (tableName === TABLE_WORKFLOW_SNAPSHOT && (columnName === 'workflow_name' || columnName === 'run_id')) {\n return true;\n }\n\n if (tableName === TABLE_SPANS && (columnName === 'traceId' || columnName === 'spanId')) {\n return true;\n }\n\n return false;\n }\n\n async createTable({\n tableName,\n schema,\n }: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n }): Promise<void> {\n const connection = await this.pool.getConnection();\n try {\n const db = await this.getDatabase();\n const [t_rows] = await connection.query(\n 'SELECT COUNT(*) AS count FROM information_schema.tables WHERE table_schema = ? AND table_name = ?',\n [db ?? '', tableName],\n );\n const exists = Array.isArray(t_rows) && t_rows.length > 0 && (t_rows[0] as any).count > 0;\n if (exists) {\n return;\n }\n const sql = this.getCreateTableSQL(tableName, schema);\n await connection.execute(sql);\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_STORE_CREATE_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n } finally {\n connection.release();\n }\n }\n\n async dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n try {\n await this.pool.execute(`DROP TABLE IF EXISTS ${formatTableName(tableName, this.database)}`);\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_STORE_DROP_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n try {\n await this.pool.execute(`DELETE FROM ${formatTableName(tableName, this.database)}`);\n } catch (error) {\n // Ignore table not exists errors\n if ((error as any)?.code === 'ER_NO_SUCH_TABLE') {\n return;\n }\n throw new MastraError(\n {\n id: 'MYSQL_STORE_CLEAR_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async withTransaction<T>(fn: (connection: PoolConnection) => Promise<T>): Promise<T> {\n const connection = await this.pool.getConnection();\n try {\n await connection.beginTransaction();\n const result = await fn(connection);\n await connection.commit();\n return result;\n } catch (error) {\n await connection.rollback();\n throw error;\n } finally {\n connection.release();\n }\n }\n\n async createIndex(options: CreateIndexOptions): Promise<void> {\n const { name, table, columns, unique = false } = options;\n const tableName = formatTableName(table as TABLE_NAMES, this.database);\n const indexName = quoteIdentifier(name, 'index name');\n\n try {\n // Check if index already exists\n const db = (await this.getDatabase()) ?? '';\n const [existing] = await this.pool.execute<RowDataPacket[]>(\n `SELECT 1 FROM information_schema.STATISTICS \n WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ? AND INDEX_NAME = ?\n LIMIT 1`,\n [db, table, name],\n );\n\n if (existing.length > 0) {\n return; // Index already exists\n }\n\n // Build column list\n const columnsStr = columns\n .map(col => {\n // Handle DESC/ASC modifiers\n if (col.includes(' DESC') || col.includes(' ASC')) {\n const [colName, ...modifiers] = col.split(' ');\n return `${quoteIdentifier(colName!, 'column name')} ${modifiers.join(' ')}`;\n }\n return quoteIdentifier(col, 'column name');\n })\n .join(', ');\n\n const uniqueStr = unique ? 'UNIQUE ' : '';\n const sql = `CREATE ${uniqueStr}INDEX ${indexName} ON ${tableName} (${columnsStr})`;\n\n await this.pool.execute(sql);\n } catch (error) {\n // Log but don't throw - indexes are performance optimizations\n console.warn(`Failed to create index ${name}:`, error);\n }\n }\n\n async insert({ tableName, record }: { tableName: TABLE_NAMES; record: Record<string, any> }): Promise<void> {\n try {\n const statement = prepareStatement({ tableName, record, database: this.database });\n await this.pool.execute(statement.sql, statement.args);\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_STORE_INSERT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async batchInsert({ tableName, records }: { tableName: TABLE_NAMES; records: Record<string, any>[] }): Promise<void> {\n if (records.length === 0) return;\n try {\n await this.withTransaction(async connection => {\n for (const record of records) {\n const statement = prepareStatement({ tableName, record, database: this.database });\n await connection.execute(statement.sql, statement.args);\n }\n });\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_STORE_BATCH_INSERT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName, numberOfRecords: records.length },\n },\n error,\n );\n }\n }\n\n async update({\n tableName,\n keys,\n data,\n }: {\n tableName: TABLE_NAMES;\n keys: Record<string, any>;\n data: Record<string, any>;\n }): Promise<void> {\n try {\n const statement = prepareUpdateStatement({ tableName, updates: data, keys, database: this.database });\n await this.pool.execute(statement.sql, statement.args);\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_STORE_UPDATE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async batchUpdate({\n tableName,\n items,\n }: {\n tableName: TABLE_NAMES;\n items: { keys: Record<string, any>; data: Record<string, any> }[];\n }): Promise<void> {\n if (items.length === 0) return;\n try {\n await this.withTransaction(async connection => {\n for (const item of items) {\n const statement = prepareUpdateStatement({\n tableName,\n updates: item.data,\n keys: item.keys,\n database: this.database,\n });\n await connection.execute(statement.sql, statement.args);\n }\n });\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_STORE_BATCH_UPDATE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName, numberOfRecords: items.length },\n },\n error,\n );\n }\n }\n\n async batchDelete({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, any>[] }): Promise<void> {\n if (keys.length === 0) return;\n try {\n await this.withTransaction(async connection => {\n for (const key of keys) {\n const statement = prepareDeleteStatement({ tableName, keys: key, database: this.database });\n await connection.execute(statement.sql, statement.args);\n }\n });\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_STORE_BATCH_DELETE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName, numberOfRecords: keys.length },\n },\n error,\n );\n }\n }\n\n async delete({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, any> }): Promise<void> {\n try {\n const statement = prepareDeleteStatement({ tableName, keys, database: this.database });\n await this.pool.execute(statement.sql, statement.args);\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_STORE_DELETE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async load<R>({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, any> }): Promise<R | null> {\n try {\n const whereClause = prepareWhereClause(keys);\n const sql = `SELECT * FROM ${formatTableName(tableName, this.database)}${whereClause.sql} ORDER BY createdAt DESC LIMIT 1`;\n const [rows] = await this.pool.execute<RowDataPacket[]>(sql, whereClause.args.map(transformToSqlValue));\n if (!rows.length) {\n return null;\n }\n let record = transformFromSqlRow<R>({ tableName, sqlRow: rows[0] as any });\n if (tableName === TABLE_WORKFLOW_SNAPSHOT) {\n const snapshotRecord: any = record;\n if (typeof snapshotRecord.snapshot === 'string') {\n try {\n snapshotRecord.snapshot = JSON.parse(snapshotRecord.snapshot);\n } catch {}\n }\n record = snapshotRecord;\n }\n return record;\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_STORE_LOAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async loadMany<R>({\n tableName,\n whereClause,\n orderBy,\n offset,\n limit,\n }: {\n tableName: TABLE_NAMES;\n whereClause?: WhereClause;\n orderBy?: string;\n offset?: number;\n limit?: number;\n }): Promise<R[]> {\n try {\n let sql = `SELECT * FROM ${formatTableName(tableName, this.database)}`;\n const args: SqlParam[] = [];\n\n if (whereClause?.sql) {\n sql += whereClause.sql;\n args.push(...whereClause.args.map(transformToSqlValue));\n }\n\n if (orderBy) {\n sql += ` ORDER BY ${sanitizeOrderBy(orderBy)}`;\n }\n\n if (typeof limit === 'number') {\n const safeLimit = Math.max(0, Number(limit));\n sql += ` LIMIT ${safeLimit}`;\n if (typeof offset === 'number') {\n const safeOffset = Math.max(0, Number(offset));\n sql += ` OFFSET ${safeOffset}`;\n }\n } else if (typeof offset === 'number') {\n const safeOffset = Math.max(0, Number(offset));\n sql += ` LIMIT 18446744073709551615 OFFSET ${safeOffset}`;\n }\n\n const [rows] = await this.pool.execute<RowDataPacket[]>(sql, args);\n return rows.map((row: RowDataPacket) => transformFromSqlRow<R>({ tableName, sqlRow: row as any }));\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_STORE_LOAD_MANY_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async loadTotalCount({\n tableName,\n whereClause,\n }: {\n tableName: TABLE_NAMES;\n whereClause?: WhereClause;\n }): Promise<number> {\n try {\n let sql = `SELECT COUNT(*) as count FROM ${formatTableName(tableName, this.database)}`;\n const args: SqlParam[] = [];\n if (whereClause?.sql) {\n sql += whereClause.sql;\n args.push(...whereClause.args.map(transformToSqlValue));\n }\n const [rows] = await this.pool.execute<RowDataPacket[]>(sql, args);\n return Number(rows[0]?.count ?? 0);\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_STORE_LOAD_TOTAL_COUNT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async alterTable({\n tableName,\n schema,\n ifNotExists,\n }: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void> {\n if (!ifNotExists.length) return;\n\n // Check if table exists first\n const db = await this.getDatabase();\n const tableExistsSql =\n 'SELECT COUNT(*) AS count FROM information_schema.tables WHERE table_schema = ? AND table_name = ?';\n const [tableRows] = await this.pool.execute<RowDataPacket[]>(tableExistsSql, [db ?? '', tableName]);\n const tableExists = Array.isArray(tableRows) && tableRows.length > 0 && (tableRows[0] as any).count > 0;\n\n if (!tableExists) {\n return; // Silently return if table doesn't exist\n }\n\n const params: SqlParam[] = [tableName];\n let sql = 'SELECT column_name FROM information_schema.columns WHERE table_name = ?';\n if (db) {\n sql += ' AND table_schema = ?';\n params.push(db);\n }\n const [rows] = await this.pool.execute<RowDataPacket[]>(sql, params);\n const existing = new Set((rows || []).map((row: RowDataPacket) => String(row.column_name).toLowerCase()));\n\n for (const columnName of ifNotExists) {\n if (existing.has(columnName.toLowerCase())) {\n continue;\n }\n const column = schema[columnName];\n if (!column) continue;\n\n const isNullable = column.nullable !== false;\n const isKeyColumn = Boolean(column.primaryKey) || this.isKeyColumn(tableName, columnName);\n const parts: string[] = [\n quoteIdentifier(columnName, 'column name'),\n this.getSqlType(column.type, { isKey: isKeyColumn, isNullable }),\n ];\n if (column.nullable === false) {\n parts.push('NOT NULL');\n const defaultClause = this.getDefaultClause(column.type, { isNullable, isKey: isKeyColumn });\n if (defaultClause) {\n parts.push(defaultClause);\n }\n }\n\n const alterSql = `ALTER TABLE ${formatTableName(tableName, this.database)} ADD COLUMN ${parts.join(' ')}`;\n try {\n await this.pool.execute(alterSql);\n } catch (error) {\n if ((error as any)?.code === 'ER_DUP_FIELDNAME') {\n continue;\n }\n throw new MastraError(\n {\n id: 'MYSQL_STORE_ALTER_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName, columnName },\n },\n error,\n );\n }\n }\n }\n}\n\nconst ORDER_BY_PATTERN = /^`[A-Za-z0-9_]+`(?:\\s+(ASC|DESC))?$/i;\n\nfunction sanitizeOrderBy(orderBy: string): string {\n const clauses = orderBy\n .split(',')\n .map(clause => clause.trim())\n .filter(Boolean);\n\n if (!clauses.length) {\n throw new Error('ORDER BY clause cannot be empty.');\n }\n\n clauses.forEach(clause => {\n if (!ORDER_BY_PATTERN.test(clause)) {\n throw new Error(`Invalid ORDER BY clause: ${clause}`);\n }\n });\n\n return clauses.join(', ');\n}\n\n/**\n * Generates MySQL CREATE TABLE SQL for export.\n * @param tableName - Table name\n * @param schema - Column definitions\n * @param compositePrimaryKey - Optional composite primary key columns\n */\nexport function generateTableSQL({\n tableName,\n schema,\n compositePrimaryKey,\n}: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n compositePrimaryKey?: string[];\n}): string {\n const tableIdent = formatTableName(tableName);\n const columns = Object.entries(schema).map(([name, def]) => {\n const colName = quoteIdentifier(name, 'column name');\n const constraints: string[] = [];\n if (def.primaryKey && !compositePrimaryKey?.includes(name)) constraints.push('PRIMARY KEY');\n if (!def.nullable) constraints.push('NOT NULL');\n const sqlType = mapToMySqlType(def.type);\n return `${colName} ${sqlType} ${constraints.join(' ')}`;\n });\n\n const tableConstraints: string[] = [];\n if (compositePrimaryKey) {\n const pkCols = compositePrimaryKey.map(c => quoteIdentifier(c, 'primary key column')).join(', ');\n tableConstraints.push(`PRIMARY KEY (${pkCols})`);\n }\n\n return `CREATE TABLE IF NOT EXISTS ${tableIdent} (\\n${[...columns, ...tableConstraints].join(',\\n')}\\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`;\n}\n\n/**\n * Generates MySQL CREATE INDEX SQL for export.\n */\nexport function generateIndexSQL(options: CreateIndexOptions): string {\n const { name, table, columns, unique = false } = options;\n const tableName = formatTableName(table as TABLE_NAMES);\n const indexName = quoteIdentifier(name, 'index name');\n const uniqueStr = unique ? 'UNIQUE ' : '';\n\n const columnsStr = columns\n .map(col => {\n if (col.includes(' DESC') || col.includes(' ASC')) {\n const [colName, ...modifiers] = col.split(' ');\n return `${quoteIdentifier(colName!, 'column name')} ${modifiers.join(' ')}`;\n }\n return quoteIdentifier(col, 'column name');\n })\n .join(', ');\n\n return `CREATE ${uniqueStr}INDEX ${indexName} ON ${tableName} (${columnsStr});`;\n}\n\nfunction mapToMySqlType(type: StorageColumn['type']): string {\n switch (type) {\n case 'text':\n return 'TEXT';\n case 'timestamp':\n return 'DATETIME(3)';\n case 'bigint':\n return 'BIGINT';\n case 'integer':\n return 'INT';\n case 'float':\n return 'FLOAT';\n case 'boolean':\n return 'BOOLEAN';\n case 'uuid':\n return 'VARCHAR(36)';\n case 'jsonb':\n return 'JSON';\n default:\n return 'TEXT';\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n AgentsStorage,\n createStorageErrorId,\n normalizePerPage,\n calculatePagination,\n TABLE_AGENTS,\n TABLE_AGENT_VERSIONS,\n TABLE_FAVORITES,\n TABLE_SCHEMAS,\n AGENTS_SCHEMA,\n AGENT_VERSIONS_SCHEMA,\n} from '@mastra/core/storage';\nimport type {\n StorageAgentType,\n StorageCreateAgentInput,\n StorageUpdateAgentInput,\n StorageListAgentsInput,\n StorageListAgentsOutput,\n CreateIndexOptions,\n AgentVersion,\n CreateVersionInput,\n ListVersionsInput,\n ListVersionsOutput,\n AgentInstructionBlock,\n} from '@mastra/core/storage';\nimport type { Pool, RowDataPacket } from 'mysql2/promise';\n\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL } from '../operations';\nimport { formatTableName, quoteIdentifier } from '../utils';\n\nexport class AgentsMySQL extends AgentsStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_AGENTS, TABLE_AGENT_VERSIONS] as const;\n\n /**\n * Returns default index definitions for the agents domain tables.\n * Currently no default indexes are defined for agents.\n */\n static getDefaultIndexDefs(_prefix: string = ''): CreateIndexOptions[] {\n return [];\n }\n\n /**\n * Exports DDL statements for all managed tables.\n */\n static getExportDDL(): string[] {\n return [\n generateTableSQL({ tableName: TABLE_AGENTS, schema: TABLE_SCHEMAS[TABLE_AGENTS] }),\n generateTableSQL({ tableName: TABLE_AGENT_VERSIONS, schema: TABLE_SCHEMAS[TABLE_AGENT_VERSIONS] }),\n ];\n }\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx => (AgentsMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n /**\n * Returns default index definitions for the agents domain tables.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return AgentsMySQL.getDefaultIndexDefs('');\n }\n\n /**\n * Creates default indexes for optimal query performance.\n * Currently no default indexes are defined for agents.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n // No default indexes for agents domain\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({ tableName: TABLE_AGENTS, schema: AGENTS_SCHEMA });\n await this.operations.createTable({ tableName: TABLE_AGENT_VERSIONS, schema: AGENT_VERSIONS_SCHEMA });\n await this.operations.alterTable({\n tableName: TABLE_AGENTS,\n schema: AGENTS_SCHEMA,\n ifNotExists: ['status', 'authorId', 'visibility', 'favoriteCount'],\n });\n await this.operations.alterTable({\n tableName: TABLE_AGENT_VERSIONS,\n schema: AGENT_VERSIONS_SCHEMA,\n ifNotExists: ['mcpClients', 'requestContextSchema', 'workspace', 'skills', 'skillsFormat'],\n });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.operations.clearTable({ tableName: TABLE_AGENT_VERSIONS });\n await this.operations.clearTable({ tableName: TABLE_AGENTS });\n }\n\n private safeParseJSON<T = unknown>(value: unknown): T | undefined {\n if (value === null || value === undefined) return undefined;\n if (typeof value === 'string') {\n try {\n return JSON.parse(value) as T;\n } catch {\n return value as T;\n }\n }\n return value as T;\n }\n\n private parseRow(row: Record<string, unknown>): StorageAgentType {\n return {\n id: row.id as string,\n status: (row.status as 'draft' | 'published' | 'archived') ?? 'draft',\n activeVersionId: (row.activeVersionId as string) ?? undefined,\n authorId: (row.authorId as string) ?? undefined,\n visibility: (row.visibility as 'private' | 'public') ?? undefined,\n metadata: this.safeParseJSON(row.metadata),\n favoriteCount: row.favoriteCount === null || row.favoriteCount === undefined ? 0 : Number(row.favoriteCount),\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n updatedAt: row.updatedAt instanceof Date ? row.updatedAt : new Date(row.updatedAt as string),\n };\n }\n\n async getById(id: string): Promise<StorageAgentType | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_AGENTS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n return rows.length ? this.parseRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_AGENT_BY_ID', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId: id },\n },\n error,\n );\n }\n }\n\n async create(input: { agent: StorageCreateAgentInput }): Promise<StorageAgentType> {\n const { agent } = input;\n try {\n const now = new Date();\n\n await this.operations.insert({\n tableName: TABLE_AGENTS,\n record: {\n id: agent.id,\n status: 'draft',\n activeVersionId: null,\n authorId: agent.authorId ?? null,\n visibility: agent.visibility ?? null,\n metadata: agent.metadata ?? null,\n favoriteCount: 0,\n createdAt: now,\n updatedAt: now,\n },\n });\n\n const { id: _id, authorId: _authorId, metadata: _metadata, ...snapshotConfig } = agent;\n\n const versionId = crypto.randomUUID();\n try {\n await this.createVersion({\n id: versionId,\n agentId: agent.id,\n versionNumber: 1,\n ...snapshotConfig,\n changedFields: Object.keys(snapshotConfig),\n changeMessage: 'Initial version',\n });\n } catch (versionError) {\n try {\n await this.operations.delete({ tableName: TABLE_AGENTS, keys: { id: agent.id } });\n } catch (rollbackError) {\n // Log rollback failure but preserve original error\n console.error('Failed to rollback agent creation:', rollbackError);\n }\n throw versionError;\n }\n\n const created = await this.getById(agent.id);\n if (!created) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'CREATE_AGENT', 'NOT_FOUND_AFTER_CREATE'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `Agent ${agent.id} not found after creation`,\n details: { agentId: agent.id },\n });\n }\n\n return created;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_AGENT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId: agent.id },\n },\n error,\n );\n }\n }\n\n async update(input: StorageUpdateAgentInput): Promise<StorageAgentType> {\n const { id, ...updates } = input;\n try {\n const existing = await this.getById(id);\n if (!existing) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_AGENT', 'NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Agent ${id} not found`,\n details: { agentId: id },\n });\n }\n\n const { authorId, activeVersionId, metadata, status } = updates;\n\n const updateData: Record<string, unknown> = {\n updatedAt: new Date(),\n };\n\n if (authorId !== undefined) updateData.authorId = authorId;\n if (activeVersionId !== undefined) updateData.activeVersionId = activeVersionId;\n if (status !== undefined) updateData.status = status;\n if (metadata !== undefined) {\n updateData.metadata = { ...existing.metadata, ...metadata };\n }\n\n await this.operations.update({\n tableName: TABLE_AGENTS,\n keys: { id },\n data: updateData,\n });\n\n const updatedAgent = await this.getById(id);\n if (!updatedAgent) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_AGENT', 'NOT_FOUND_AFTER_UPDATE'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `Agent ${id} not found after update`,\n details: { agentId: id },\n });\n }\n\n return updatedAgent;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'UPDATE_AGENT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId: id },\n },\n error,\n );\n }\n }\n\n async delete(id: string): Promise<void> {\n try {\n await this.deleteVersionsByParentId(id);\n await this.operations.delete({ tableName: TABLE_AGENTS, keys: { id } });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_AGENT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId: id },\n },\n error,\n );\n }\n }\n\n async list(args?: StorageListAgentsInput): Promise<StorageListAgentsOutput> {\n const {\n page = 0,\n perPage: perPageInput,\n orderBy,\n authorId,\n metadata,\n status,\n visibility,\n entityIds,\n pinFavoritedFor,\n favoritedOnly,\n } = args || {};\n const { field, direction } = this.parseOrderBy(orderBy);\n\n if (page < 0) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_AGENTS', '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 perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n try {\n // Empty entityIds is short-circuit: no rows possible\n if (entityIds && entityIds.length === 0) {\n return { agents: [], total: 0, page, perPage: perPageForResponse, hasMore: false };\n }\n\n const agentsTable = formatTableName(TABLE_AGENTS);\n const favoritesTable = formatTableName(TABLE_FAVORITES);\n\n // Build WHERE conditions\n const conditions: string[] = [];\n const queryParams: any[] = [];\n\n // Determine if we need a JOIN\n const joinUserId = pinFavoritedFor;\n const useJoin = Boolean(joinUserId);\n\n if (status) {\n conditions.push(`a.${quoteIdentifier('status', 'column name')} = ?`);\n queryParams.push(status);\n }\n\n if (authorId !== undefined) {\n conditions.push(`a.${quoteIdentifier('authorId', 'column name')} = ?`);\n queryParams.push(authorId);\n }\n\n if (visibility !== undefined) {\n conditions.push(`a.${quoteIdentifier('visibility', 'column name')} = ?`);\n queryParams.push(visibility);\n }\n\n if (entityIds && entityIds.length > 0) {\n const placeholders = entityIds.map(() => '?').join(', ');\n conditions.push(`a.${quoteIdentifier('id', 'column name')} IN (${placeholders})`);\n queryParams.push(...entityIds);\n }\n\n if (metadata && Object.keys(metadata).length > 0) {\n for (const [key, value] of Object.entries(metadata)) {\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(key)) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'LIST_AGENTS', 'INVALID_METADATA_KEY'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Invalid metadata key: ${key}. Keys must be alphanumeric with underscores.`,\n details: { key },\n });\n }\n if (typeof value === 'string') {\n conditions.push(\n `JSON_UNQUOTE(JSON_EXTRACT(a.${quoteIdentifier('metadata', 'column name')}, '$.${key}')) = ?`,\n );\n queryParams.push(value);\n } else {\n conditions.push(\n `JSON_EXTRACT(a.${quoteIdentifier('metadata', 'column name')}, '$.${key}') = CAST(? AS JSON)`,\n );\n queryParams.push(JSON.stringify(value));\n }\n }\n }\n\n // Handle favoritedOnly\n if (useJoin && favoritedOnly) {\n conditions.push(`sr.${quoteIdentifier('userId', 'column name')} IS NOT NULL`);\n } else if (favoritedOnly) {\n // Defensive: favoritedOnly with no userId can never match a real row\n conditions.push('1=0');\n }\n\n const joinClause = useJoin\n ? `LEFT JOIN ${favoritesTable} sr ON sr.${quoteIdentifier('entityType', 'column name')} = 'agent' AND sr.${quoteIdentifier('entityId', 'column name')} = a.${quoteIdentifier('id', 'column name')} AND sr.${quoteIdentifier('userId', 'column name')} = ?`\n : '';\n\n const joinParams: any[] = useJoin && joinUserId ? [joinUserId] : [];\n const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';\n\n // Get total count\n const [countRows] = await this.pool.query<RowDataPacket[]>(\n `SELECT COUNT(*) as count FROM ${agentsTable} a ${joinClause} ${whereClause}`,\n [...joinParams, ...queryParams],\n );\n const total = parseInt(countRows[0]?.count ?? '0', 10);\n\n if (total === 0) {\n return {\n agents: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n const limitValue = perPageInput === false ? total : perPage;\n const hasMore = perPageInput === false ? false : offset + perPage < total;\n\n // Build ORDER BY\n let orderByClause: string;\n if (useJoin) {\n // Pin favorited agents first\n orderByClause = `CASE WHEN sr.${quoteIdentifier('userId', 'column name')} IS NOT NULL THEN 0 ELSE 1 END ASC, a.${quoteIdentifier(field, 'column name')} ${direction}`;\n } else {\n orderByClause = `a.${quoteIdentifier(field, 'column name')} ${direction}`;\n }\n\n const [rows] = await this.pool.query<RowDataPacket[]>(\n `SELECT a.* FROM ${agentsTable} a ${joinClause} ${whereClause} ORDER BY ${orderByClause} LIMIT ? OFFSET ?`,\n [...joinParams, ...queryParams, limitValue, offset],\n );\n\n const agents = rows.map(row => this.parseRow(row));\n\n return {\n agents,\n total,\n page,\n perPage: perPageForResponse,\n hasMore,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_AGENTS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n // ==========================================================================\n // Agent Version Methods\n // ==========================================================================\n\n async createVersion(input: CreateVersionInput): Promise<AgentVersion> {\n try {\n const now = new Date();\n\n await this.operations.insert({\n tableName: TABLE_AGENT_VERSIONS,\n record: {\n id: input.id,\n agentId: input.agentId,\n versionNumber: input.versionNumber,\n name: input.name ?? null,\n description: input.description ?? null,\n instructions: this.serializeInstructions(input.instructions),\n model: input.model,\n tools: input.tools ?? null,\n defaultOptions: input.defaultOptions ?? null,\n workflows: input.workflows ?? null,\n agents: input.agents ?? null,\n integrationTools: input.integrationTools ?? null,\n inputProcessors: input.inputProcessors ?? null,\n outputProcessors: input.outputProcessors ?? null,\n memory: input.memory ?? null,\n scorers: input.scorers ?? null,\n mcpClients: input.mcpClients ?? null,\n requestContextSchema: input.requestContextSchema ?? null,\n workspace: input.workspace ?? null,\n skills: input.skills ?? null,\n skillsFormat: input.skillsFormat ?? null,\n changedFields: input.changedFields ?? null,\n changeMessage: input.changeMessage ?? null,\n createdAt: now,\n },\n });\n\n return {\n ...input,\n createdAt: now,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { versionId: input.id, agentId: input.agentId },\n },\n error,\n );\n }\n }\n\n async getVersion(id: string): Promise<AgentVersion | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_AGENT_VERSIONS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { versionId: id },\n },\n error,\n );\n }\n }\n\n async getVersionByNumber(agentId: string, versionNumber: number): Promise<AgentVersion | null> {\n try {\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_AGENT_VERSIONS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('agentId', 'column name')} = ? AND ${quoteIdentifier('versionNumber', 'column name')} = ?`,\n args: [agentId, versionNumber],\n },\n limit: 1,\n });\n\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_VERSION_BY_NUMBER', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId, versionNumber },\n },\n error,\n );\n }\n }\n\n async getLatestVersion(agentId: string): Promise<AgentVersion | null> {\n try {\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_AGENT_VERSIONS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('agentId', 'column name')} = ?`,\n args: [agentId],\n },\n orderBy: `${quoteIdentifier('versionNumber', 'column name')} DESC`,\n limit: 1,\n });\n\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_LATEST_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId },\n },\n error,\n );\n }\n }\n\n async listVersions(input: ListVersionsInput): Promise<ListVersionsOutput> {\n const { agentId, page = 0, perPage: perPageInput, orderBy } = input;\n\n if (page < 0) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_VERSIONS', '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 perPage = normalizePerPage(perPageInput, 20);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n try {\n const { field, direction } = this.parseVersionOrderBy(orderBy);\n\n const whereClause = {\n sql: ` WHERE ${quoteIdentifier('agentId', 'column name')} = ?`,\n args: [agentId],\n };\n\n const total = await this.operations.loadTotalCount({ tableName: TABLE_AGENT_VERSIONS, whereClause });\n\n if (total === 0) {\n return {\n versions: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n const limitValue = perPageInput === false ? total : perPage;\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_AGENT_VERSIONS,\n whereClause,\n orderBy: `${quoteIdentifier(field, 'column name')} ${direction}`,\n offset,\n limit: limitValue,\n });\n\n const versions = rows.map(row => this.parseVersionRow(row));\n\n return {\n versions,\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_VERSIONS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId },\n },\n error,\n );\n }\n }\n\n async deleteVersion(id: string): Promise<void> {\n try {\n await this.operations.delete({ tableName: TABLE_AGENT_VERSIONS, keys: { id } });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { versionId: id },\n },\n error,\n );\n }\n }\n\n async deleteVersionsByParentId(entityId: string): Promise<void> {\n try {\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_AGENT_VERSIONS)} WHERE ${quoteIdentifier('agentId', 'column name')} = ?`,\n [entityId],\n );\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_VERSIONS_BY_AGENT_ID', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId: entityId },\n },\n error,\n );\n }\n }\n\n async countVersions(agentId: string): Promise<number> {\n try {\n return await this.operations.loadTotalCount({\n tableName: TABLE_AGENT_VERSIONS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('agentId', 'column name')} = ?`,\n args: [agentId],\n },\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'COUNT_VERSIONS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId },\n },\n error,\n );\n }\n }\n\n // ==========================================================================\n // Private Helper Methods\n // ==========================================================================\n\n private serializeInstructions(instructions: string | AgentInstructionBlock[]): string {\n return Array.isArray(instructions) ? JSON.stringify(instructions) : instructions;\n }\n\n private deserializeInstructions(raw: string): string | AgentInstructionBlock[] {\n if (!raw) return raw;\n try {\n const parsed = JSON.parse(raw);\n if (Array.isArray(parsed)) return parsed as AgentInstructionBlock[];\n } catch {\n // Not JSON — plain string\n }\n return raw;\n }\n\n private parseVersionRow(row: Record<string, unknown>): AgentVersion {\n return {\n id: row.id as string,\n agentId: row.agentId as string,\n versionNumber: Number(row.versionNumber),\n name: row.name as string,\n description: (row.description as string) ?? undefined,\n instructions: this.deserializeInstructions(row.instructions as string),\n model: this.safeParseJSON(row.model) as AgentVersion['model'],\n tools: this.safeParseJSON(row.tools) as AgentVersion['tools'],\n defaultOptions: this.safeParseJSON(row.defaultOptions) as AgentVersion['defaultOptions'],\n workflows: this.safeParseJSON(row.workflows) as AgentVersion['workflows'],\n agents: this.safeParseJSON(row.agents) as AgentVersion['agents'],\n integrationTools: this.safeParseJSON(row.integrationTools) as AgentVersion['integrationTools'],\n inputProcessors: this.safeParseJSON(row.inputProcessors) as AgentVersion['inputProcessors'],\n outputProcessors: this.safeParseJSON(row.outputProcessors) as AgentVersion['outputProcessors'],\n memory: this.safeParseJSON(row.memory) as AgentVersion['memory'],\n scorers: this.safeParseJSON(row.scorers) as AgentVersion['scorers'],\n mcpClients: this.safeParseJSON(row.mcpClients) as AgentVersion['mcpClients'],\n requestContextSchema: this.safeParseJSON(row.requestContextSchema) as AgentVersion['requestContextSchema'],\n workspace: this.safeParseJSON(row.workspace) as AgentVersion['workspace'],\n skills: this.safeParseJSON(row.skills) as AgentVersion['skills'],\n skillsFormat: row.skillsFormat as 'xml' | 'json' | 'markdown' | undefined,\n changedFields: this.safeParseJSON(row.changedFields) as AgentVersion['changedFields'],\n changeMessage: (row.changeMessage as string) ?? undefined,\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n };\n }\n}\n","import type {\n BackgroundTask,\n BackgroundTaskStatus,\n TaskFilter,\n TaskListResult,\n UpdateBackgroundTask,\n} from '@mastra/core/background-tasks';\nimport { BackgroundTasksStorage, TABLE_BACKGROUND_TASKS, TABLE_SCHEMAS } from '@mastra/core/storage';\nimport type { CreateIndexOptions } from '@mastra/core/storage';\nimport type { Pool, RowDataPacket } from 'mysql2/promise';\n\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL, generateIndexSQL } from '../operations';\nimport { formatTableName, parseDateTime, quoteIdentifier, transformToSqlValue } from '../utils';\n\nfunction serializeJson(v: unknown): any {\n if (typeof v === 'object' && v != null) return JSON.stringify(v);\n return v ?? null;\n}\n\nfunction parseJson(val: unknown): any {\n if (val == null) return undefined;\n if (typeof val === 'string') {\n try {\n return JSON.parse(val);\n } catch {\n return val;\n }\n }\n return val;\n}\n\nfunction rowToTask(row: Record<string, any>): BackgroundTask {\n return {\n id: String(row.id),\n status: String(row.status) as BackgroundTaskStatus,\n toolName: String(row.tool_name),\n toolCallId: String(row.tool_call_id),\n args: parseJson(row.args) ?? {},\n agentId: String(row.agent_id),\n threadId: row.thread_id != null ? String(row.thread_id) : undefined,\n resourceId: row.resource_id != null ? String(row.resource_id) : undefined,\n runId: String(row.run_id),\n result: parseJson(row.result),\n error: parseJson(row.error),\n suspendPayload: parseJson(row.suspend_payload),\n retryCount: Number(row.retry_count),\n maxRetries: Number(row.max_retries),\n timeoutMs: Number(row.timeout_ms),\n createdAt: parseDateTime(row.createdAt)!,\n startedAt: parseDateTime(row.startedAt),\n suspendedAt: parseDateTime(row.suspendedAt),\n completedAt: parseDateTime(row.completedAt),\n };\n}\n\nexport class BackgroundTasksMySQL extends BackgroundTasksStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n static readonly MANAGED_TABLES = [TABLE_BACKGROUND_TASKS] as const;\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx =>\n (BackgroundTasksMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table),\n );\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({\n tableName: TABLE_BACKGROUND_TASKS,\n schema: TABLE_SCHEMAS[TABLE_BACKGROUND_TASKS],\n });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n static getDefaultIndexDefs(prefix: string = ''): CreateIndexOptions[] {\n return [\n {\n name: `${prefix}mastra_bg_tasks_status_created_at_idx`,\n table: TABLE_BACKGROUND_TASKS,\n columns: ['status', 'createdAt'],\n },\n {\n name: `${prefix}mastra_bg_tasks_agent_status_idx`,\n table: TABLE_BACKGROUND_TASKS,\n columns: ['agent_id', 'status'],\n },\n {\n name: `${prefix}mastra_bg_tasks_thread_idx`,\n table: TABLE_BACKGROUND_TASKS,\n columns: ['thread_id', 'createdAt'],\n },\n {\n name: `${prefix}mastra_bg_tasks_tool_call_idx`,\n table: TABLE_BACKGROUND_TASKS,\n columns: ['tool_call_id'],\n },\n ];\n }\n\n static getExportDDL(): string[] {\n const statements: string[] = [];\n\n statements.push(\n generateTableSQL({\n tableName: TABLE_BACKGROUND_TASKS,\n schema: TABLE_SCHEMAS[TABLE_BACKGROUND_TASKS],\n }),\n );\n\n for (const idx of BackgroundTasksMySQL.getDefaultIndexDefs()) {\n statements.push(generateIndexSQL(idx));\n }\n\n return statements;\n }\n\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return BackgroundTasksMySQL.getDefaultIndexDefs('');\n }\n\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n for (const indexDef of this.getDefaultIndexDefinitions()) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.operations.clearTable({ tableName: TABLE_BACKGROUND_TASKS });\n }\n\n async createTask(task: BackgroundTask): Promise<void> {\n await this.pool.execute(\n `INSERT INTO ${formatTableName(TABLE_BACKGROUND_TASKS)} (${quoteIdentifier('id', 'column name')}, ${quoteIdentifier('tool_call_id', 'column name')}, ${quoteIdentifier('tool_name', 'column name')}, ${quoteIdentifier('agent_id', 'column name')}, ${quoteIdentifier('thread_id', 'column name')}, ${quoteIdentifier('resource_id', 'column name')}, ${quoteIdentifier('run_id', 'column name')}, ${quoteIdentifier('status', 'column name')}, ${quoteIdentifier('args', 'column name')}, ${quoteIdentifier('result', 'column name')}, ${quoteIdentifier('error', 'column name')}, ${quoteIdentifier('suspend_payload', 'column name')}, ${quoteIdentifier('retry_count', 'column name')}, ${quoteIdentifier('max_retries', 'column name')}, ${quoteIdentifier('timeout_ms', 'column name')}, ${quoteIdentifier('createdAt', 'column name')}, ${quoteIdentifier('startedAt', 'column name')}, ${quoteIdentifier('suspendedAt', 'column name')}, ${quoteIdentifier('completedAt', 'column name')}) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n [\n task.id,\n task.toolCallId,\n task.toolName,\n task.agentId,\n task.threadId ?? null,\n task.resourceId ?? null,\n task.runId,\n task.status,\n JSON.stringify(task.args),\n task.result ? JSON.stringify(task.result) : null,\n task.error ? JSON.stringify(task.error) : null,\n task.suspendPayload ? JSON.stringify(task.suspendPayload) : null,\n task.retryCount,\n task.maxRetries,\n task.timeoutMs,\n transformToSqlValue(task.createdAt),\n transformToSqlValue(task.startedAt),\n transformToSqlValue(task.suspendedAt),\n transformToSqlValue(task.completedAt),\n ],\n );\n }\n\n async updateTask(taskId: string, update: UpdateBackgroundTask): Promise<void> {\n const setClauses: string[] = [];\n const params: (string | number | null)[] = [];\n\n if ('status' in update) {\n setClauses.push(`${quoteIdentifier('status', 'column name')} = ?`);\n params.push(update.status as string);\n }\n if ('result' in update) {\n setClauses.push(`${quoteIdentifier('result', 'column name')} = ?`);\n params.push(serializeJson(update.result));\n }\n if ('error' in update) {\n setClauses.push(`${quoteIdentifier('error', 'column name')} = ?`);\n params.push(serializeJson(update.error));\n }\n if ('suspendPayload' in update) {\n setClauses.push(`${quoteIdentifier('suspend_payload', 'column name')} = ?`);\n params.push(serializeJson(update.suspendPayload));\n }\n if ('retryCount' in update) {\n setClauses.push(`${quoteIdentifier('retry_count', 'column name')} = ?`);\n params.push(update.retryCount as number);\n }\n if ('startedAt' in update) {\n setClauses.push(`${quoteIdentifier('startedAt', 'column name')} = ?`);\n params.push(transformToSqlValue(update.startedAt));\n }\n if ('suspendedAt' in update) {\n setClauses.push(`${quoteIdentifier('suspendedAt', 'column name')} = ?`);\n params.push(transformToSqlValue(update.suspendedAt));\n }\n if ('completedAt' in update) {\n setClauses.push(`${quoteIdentifier('completedAt', 'column name')} = ?`);\n params.push(transformToSqlValue(update.completedAt));\n }\n\n if (setClauses.length === 0) return;\n\n params.push(taskId);\n await this.pool.execute(\n `UPDATE ${formatTableName(TABLE_BACKGROUND_TASKS)} SET ${setClauses.join(', ')} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n params,\n );\n }\n\n async getTask(taskId: string): Promise<BackgroundTask | null> {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_BACKGROUND_TASKS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [taskId],\n );\n const row = rows[0];\n return row ? rowToTask(row as Record<string, any>) : null;\n }\n\n async listTasks(filter: TaskFilter): Promise<TaskListResult> {\n const conditions: string[] = [];\n const params: (string | number | null)[] = [];\n\n if (filter.status) {\n const statuses = Array.isArray(filter.status) ? filter.status : [filter.status];\n const placeholders = statuses.map(() => '?').join(', ');\n conditions.push(`${quoteIdentifier('status', 'column name')} IN (${placeholders})`);\n params.push(...statuses);\n }\n if (filter.agentId) {\n conditions.push(`${quoteIdentifier('agent_id', 'column name')} = ?`);\n params.push(filter.agentId);\n }\n if (filter.threadId) {\n conditions.push(`${quoteIdentifier('thread_id', 'column name')} = ?`);\n params.push(filter.threadId);\n }\n if (filter.runId) {\n conditions.push(`${quoteIdentifier('run_id', 'column name')} = ?`);\n params.push(filter.runId);\n }\n if (filter.resourceId) {\n conditions.push(`${quoteIdentifier('resource_id', 'column name')} = ?`);\n params.push(filter.resourceId);\n }\n if (filter.toolName) {\n conditions.push(`${quoteIdentifier('tool_name', 'column name')} = ?`);\n params.push(filter.toolName);\n }\n if (filter.toolCallId) {\n conditions.push(`${quoteIdentifier('tool_call_id', 'column name')} = ?`);\n params.push(filter.toolCallId);\n }\n // Date range filtering\n const dateCol =\n filter.dateFilterBy === 'startedAt'\n ? quoteIdentifier('startedAt', 'column name')\n : filter.dateFilterBy === 'suspendedAt'\n ? quoteIdentifier('suspendedAt', 'column name')\n : filter.dateFilterBy === 'completedAt'\n ? quoteIdentifier('completedAt', 'column name')\n : quoteIdentifier('createdAt', 'column name');\n if (filter.fromDate) {\n conditions.push(`${dateCol} >= ?`);\n params.push(transformToSqlValue(filter.fromDate));\n }\n if (filter.toDate) {\n conditions.push(`${dateCol} < ?`);\n params.push(transformToSqlValue(filter.toDate));\n }\n\n const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';\n\n // Count total matching rows (before pagination)\n const [countRows] = await this.pool.query<RowDataPacket[]>(\n `SELECT COUNT(*) as count FROM ${formatTableName(TABLE_BACKGROUND_TASKS)} ${where}`,\n [...params],\n );\n const total = Number(countRows[0]?.count ?? 0);\n\n const orderCol =\n filter.orderBy === 'startedAt'\n ? quoteIdentifier('startedAt', 'column name')\n : filter.orderBy === 'suspendedAt'\n ? quoteIdentifier('suspendedAt', 'column name')\n : filter.orderBy === 'completedAt'\n ? quoteIdentifier('completedAt', 'column name')\n : quoteIdentifier('createdAt', 'column name');\n const direction = filter.orderDirection === 'desc' ? 'DESC' : 'ASC';\n\n let sql = `SELECT * FROM ${formatTableName(TABLE_BACKGROUND_TASKS)} ${where} ORDER BY ${orderCol} ${direction}`;\n\n if (filter.perPage != null) {\n sql += ' LIMIT ?';\n params.push(filter.perPage);\n if (filter.page != null) {\n sql += ' OFFSET ?';\n params.push(filter.page * filter.perPage);\n }\n }\n\n const [rows] = await this.pool.query<RowDataPacket[]>(sql, params);\n return { tasks: rows.map(row => rowToTask(row as Record<string, any>)), total };\n }\n\n async deleteTask(taskId: string): Promise<void> {\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_BACKGROUND_TASKS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [taskId],\n );\n }\n\n async deleteTasks(filter: TaskFilter): Promise<void> {\n const conditions: string[] = [];\n const params: (string | number | null)[] = [];\n\n if (filter.status) {\n const statuses = Array.isArray(filter.status) ? filter.status : [filter.status];\n const placeholders = statuses.map(() => '?').join(', ');\n conditions.push(`${quoteIdentifier('status', 'column name')} IN (${placeholders})`);\n params.push(...statuses);\n }\n // Date range filtering\n const dateCol =\n filter.dateFilterBy === 'startedAt'\n ? quoteIdentifier('startedAt', 'column name')\n : filter.dateFilterBy === 'suspendedAt'\n ? quoteIdentifier('suspendedAt', 'column name')\n : filter.dateFilterBy === 'completedAt'\n ? quoteIdentifier('completedAt', 'column name')\n : quoteIdentifier('createdAt', 'column name');\n if (filter.fromDate) {\n conditions.push(`${dateCol} >= ?`);\n params.push(transformToSqlValue(filter.fromDate));\n }\n if (filter.toDate) {\n conditions.push(`${dateCol} < ?`);\n params.push(transformToSqlValue(filter.toDate));\n }\n if (filter.agentId) {\n conditions.push(`${quoteIdentifier('agent_id', 'column name')} = ?`);\n params.push(filter.agentId);\n }\n if (filter.runId) {\n conditions.push(`${quoteIdentifier('run_id', 'column name')} = ?`);\n params.push(filter.runId);\n }\n\n if (conditions.length === 0) return; // Safety: don't delete everything\n\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_BACKGROUND_TASKS)} WHERE ${conditions.join(' AND ')}`,\n params,\n );\n }\n\n async getRunningCount(): Promise<number> {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT COUNT(*) as count FROM ${formatTableName(TABLE_BACKGROUND_TASKS)} WHERE ${quoteIdentifier('status', 'column name')} = ?`,\n ['running'],\n );\n return Number(rows[0]?.count ?? 0);\n }\n\n async getRunningCountByAgent(agentId: string): Promise<number> {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT COUNT(*) as count FROM ${formatTableName(TABLE_BACKGROUND_TASKS)} WHERE ${quoteIdentifier('status', 'column name')} = ? AND ${quoteIdentifier('agent_id', 'column name')} = ?`,\n ['running', agentId],\n );\n return Number(rows[0]?.count ?? 0);\n }\n}\n","import type { Pool, RowDataPacket } from 'mysql2/promise';\nimport { BlobStore, TABLE_SKILL_BLOBS, SKILL_BLOBS_SCHEMA } from '@mastra/core/storage';\nimport type { StorageBlobEntry } from '@mastra/core/storage';\n\nimport type { StoreOperationsMySQL } from '../operations';\nimport { formatTableName, quoteIdentifier, transformToSqlValue } from '../utils';\n\nexport class BlobsMySQL extends BlobStore {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n\n constructor({ pool, operations }: { pool: Pool; operations: StoreOperationsMySQL }) {\n super();\n this.pool = pool;\n this.operations = operations;\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({ tableName: TABLE_SKILL_BLOBS, schema: SKILL_BLOBS_SCHEMA });\n }\n\n async put(entry: StorageBlobEntry): Promise<void> {\n const now = entry.createdAt ?? new Date();\n await this.pool.execute(\n `INSERT IGNORE INTO ${formatTableName(TABLE_SKILL_BLOBS)} (${quoteIdentifier('hash', 'column name')}, ${quoteIdentifier('content', 'column name')}, ${quoteIdentifier('size', 'column name')}, ${quoteIdentifier('mimeType', 'column name')}, ${quoteIdentifier('createdAt', 'column name')}) VALUES (?, ?, ?, ?, ?)`,\n [entry.hash, entry.content, entry.size, entry.mimeType ?? null, transformToSqlValue(now)],\n );\n }\n\n async get(hash: string): Promise<StorageBlobEntry | null> {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_SKILL_BLOBS)} WHERE ${quoteIdentifier('hash', 'column name')} = ?`,\n [hash],\n );\n if (!rows.length) return null;\n return this.#parseRow(rows[0]!);\n }\n\n async has(hash: string): Promise<boolean> {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT 1 FROM ${formatTableName(TABLE_SKILL_BLOBS)} WHERE ${quoteIdentifier('hash', 'column name')} = ? LIMIT 1`,\n [hash],\n );\n return rows.length > 0;\n }\n\n async delete(hash: string): Promise<boolean> {\n const [result] = await this.pool.execute<any>(\n `DELETE FROM ${formatTableName(TABLE_SKILL_BLOBS)} WHERE ${quoteIdentifier('hash', 'column name')} = ?`,\n [hash],\n );\n return result.affectedRows > 0;\n }\n\n async putMany(entries: StorageBlobEntry[]): Promise<void> {\n if (entries.length === 0) return;\n await this.operations.batchInsert({\n tableName: TABLE_SKILL_BLOBS,\n records: entries.map(entry => ({\n hash: entry.hash,\n content: entry.content,\n size: entry.size,\n mimeType: entry.mimeType ?? null,\n createdAt: entry.createdAt ?? new Date(),\n })),\n });\n }\n\n async getMany(hashes: string[]): Promise<Map<string, StorageBlobEntry>> {\n const result = new Map<string, StorageBlobEntry>();\n if (hashes.length === 0) return result;\n\n const batchSize = 500;\n for (let i = 0; i < hashes.length; i += batchSize) {\n const batch = hashes.slice(i, i + batchSize);\n const placeholders = batch.map(() => '?').join(', ');\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_SKILL_BLOBS)} WHERE ${quoteIdentifier('hash', 'column name')} IN (${placeholders})`,\n batch,\n );\n for (const row of rows) {\n const entry = this.#parseRow(row);\n result.set(entry.hash, entry);\n }\n }\n return result;\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.operations.clearTable({ tableName: TABLE_SKILL_BLOBS });\n }\n\n #parseRow(row: Record<string, unknown>): StorageBlobEntry {\n return {\n hash: row.hash as string,\n content: row.content as string,\n size: Number(row.size),\n mimeType: (row.mimeType as string) || undefined,\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n };\n }\n}\n","import {\n ChannelsStorage,\n TABLE_CHANNEL_INSTALLATIONS,\n TABLE_CHANNEL_CONFIG,\n TABLE_SCHEMAS,\n} from '@mastra/core/storage';\nimport type { ChannelInstallation, ChannelConfig, CreateIndexOptions } from '@mastra/core/storage';\nimport type { Pool, RowDataPacket } from 'mysql2/promise';\n\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL, generateIndexSQL } from '../operations';\nimport { formatTableName, quoteIdentifier, transformToSqlValue, parseDateTime } from '../utils';\n\nexport class ChannelsMySQL extends ChannelsStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n static readonly MANAGED_TABLES = [TABLE_CHANNEL_INSTALLATIONS, TABLE_CHANNEL_CONFIG] as const;\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx => (ChannelsMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({\n tableName: TABLE_CHANNEL_INSTALLATIONS,\n schema: TABLE_SCHEMAS[TABLE_CHANNEL_INSTALLATIONS],\n });\n await this.operations.createTable({\n tableName: TABLE_CHANNEL_CONFIG,\n schema: TABLE_SCHEMAS[TABLE_CHANNEL_CONFIG],\n });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n static getDefaultIndexDefs(prefix: string = ''): CreateIndexOptions[] {\n return [\n {\n name: `${prefix}idx_channel_installations_webhook`,\n table: TABLE_CHANNEL_INSTALLATIONS,\n columns: ['webhookId'],\n unique: true,\n },\n {\n name: `${prefix}idx_channel_installations_platform_agent`,\n table: TABLE_CHANNEL_INSTALLATIONS,\n columns: ['platform', 'agentId'],\n },\n ];\n }\n\n static getExportDDL(): string[] {\n const statements: string[] = [];\n\n for (const tableName of ChannelsMySQL.MANAGED_TABLES) {\n statements.push(\n generateTableSQL({\n tableName,\n schema: TABLE_SCHEMAS[tableName],\n }),\n );\n }\n\n for (const idx of ChannelsMySQL.getDefaultIndexDefs()) {\n statements.push(generateIndexSQL(idx));\n }\n\n return statements;\n }\n\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return ChannelsMySQL.getDefaultIndexDefs('');\n }\n\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n for (const indexDef of this.getDefaultIndexDefinitions()) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.operations.clearTable({ tableName: TABLE_CHANNEL_INSTALLATIONS });\n await this.operations.clearTable({ tableName: TABLE_CHANNEL_CONFIG });\n }\n\n async saveInstallation(installation: ChannelInstallation): Promise<void> {\n const now = new Date();\n await this.pool.execute(\n `INSERT INTO ${formatTableName(TABLE_CHANNEL_INSTALLATIONS)} (${quoteIdentifier('id', 'column name')}, ${quoteIdentifier('platform', 'column name')}, ${quoteIdentifier('agentId', 'column name')}, ${quoteIdentifier('status', 'column name')}, ${quoteIdentifier('webhookId', 'column name')}, ${quoteIdentifier('data', 'column name')}, ${quoteIdentifier('configHash', 'column name')}, ${quoteIdentifier('error', 'column name')}, ${quoteIdentifier('createdAt', 'column name')}, ${quoteIdentifier('updatedAt', 'column name')}) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE ${quoteIdentifier('platform', 'column name')} = VALUES(${quoteIdentifier('platform', 'column name')}), ${quoteIdentifier('agentId', 'column name')} = VALUES(${quoteIdentifier('agentId', 'column name')}), ${quoteIdentifier('status', 'column name')} = VALUES(${quoteIdentifier('status', 'column name')}), ${quoteIdentifier('webhookId', 'column name')} = VALUES(${quoteIdentifier('webhookId', 'column name')}), ${quoteIdentifier('data', 'column name')} = VALUES(${quoteIdentifier('data', 'column name')}), ${quoteIdentifier('configHash', 'column name')} = VALUES(${quoteIdentifier('configHash', 'column name')}), ${quoteIdentifier('error', 'column name')} = VALUES(${quoteIdentifier('error', 'column name')}), ${quoteIdentifier('updatedAt', 'column name')} = VALUES(${quoteIdentifier('updatedAt', 'column name')})`,\n [\n installation.id,\n installation.platform,\n installation.agentId,\n installation.status,\n installation.webhookId ?? null,\n JSON.stringify(installation.data),\n installation.configHash ?? null,\n installation.error ?? null,\n transformToSqlValue(installation.createdAt ?? now),\n transformToSqlValue(now),\n ],\n );\n }\n\n async getInstallation(id: string): Promise<ChannelInstallation | null> {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_CHANNEL_INSTALLATIONS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n const row = rows[0];\n return row ? this.parseInstallationRow(row) : null;\n }\n\n async getInstallationByAgent(platform: string, agentId: string): Promise<ChannelInstallation | null> {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_CHANNEL_INSTALLATIONS)} WHERE ${quoteIdentifier('platform', 'column name')} = ? AND ${quoteIdentifier('agentId', 'column name')} = ? ORDER BY CASE ${quoteIdentifier('status', 'column name')} WHEN 'active' THEN 0 WHEN 'pending' THEN 1 ELSE 2 END, ${quoteIdentifier('updatedAt', 'column name')} DESC LIMIT 1`,\n [platform, agentId],\n );\n const row = rows[0];\n return row ? this.parseInstallationRow(row) : null;\n }\n\n async getInstallationByWebhookId(webhookId: string): Promise<ChannelInstallation | null> {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_CHANNEL_INSTALLATIONS)} WHERE ${quoteIdentifier('webhookId', 'column name')} = ?`,\n [webhookId],\n );\n const row = rows[0];\n return row ? this.parseInstallationRow(row) : null;\n }\n\n async listInstallations(platform: string): Promise<ChannelInstallation[]> {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_CHANNEL_INSTALLATIONS)} WHERE ${quoteIdentifier('platform', 'column name')} = ? ORDER BY ${quoteIdentifier('createdAt', 'column name')} DESC`,\n [platform],\n );\n return rows.map(row => this.parseInstallationRow(row));\n }\n\n async deleteInstallation(id: string): Promise<void> {\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_CHANNEL_INSTALLATIONS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n }\n\n async saveConfig(config: ChannelConfig): Promise<void> {\n await this.pool.execute(\n `INSERT INTO ${formatTableName(TABLE_CHANNEL_CONFIG)} (${quoteIdentifier('platform', 'column name')}, ${quoteIdentifier('data', 'column name')}, ${quoteIdentifier('updatedAt', 'column name')}) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE ${quoteIdentifier('data', 'column name')} = VALUES(${quoteIdentifier('data', 'column name')}), ${quoteIdentifier('updatedAt', 'column name')} = VALUES(${quoteIdentifier('updatedAt', 'column name')})`,\n [config.platform, JSON.stringify(config.data), transformToSqlValue(config.updatedAt)],\n );\n }\n\n async getConfig(platform: string): Promise<ChannelConfig | null> {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_CHANNEL_CONFIG)} WHERE ${quoteIdentifier('platform', 'column name')} = ?`,\n [platform],\n );\n const row = rows[0];\n if (!row) return null;\n return {\n platform: row.platform as string,\n data: typeof row.data === 'string' ? JSON.parse(row.data || '{}') : row.data,\n updatedAt: parseDateTime(row.updatedAt) ?? new Date(),\n };\n }\n\n async deleteConfig(platform: string): Promise<void> {\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_CHANNEL_CONFIG)} WHERE ${quoteIdentifier('platform', 'column name')} = ?`,\n [platform],\n );\n }\n\n private parseInstallationRow(row: Record<string, unknown>): ChannelInstallation {\n return {\n id: row.id as string,\n platform: row.platform as string,\n agentId: row.agentId as string,\n status: row.status as 'pending' | 'active' | 'error',\n webhookId: (row.webhookId as string) || undefined,\n data: typeof row.data === 'string' ? JSON.parse(row.data || '{}') : row.data,\n configHash: (row.configHash as string) || undefined,\n error: (row.error as string) || undefined,\n createdAt: parseDateTime(row.createdAt as string | number | Date | null | undefined) ?? new Date(),\n updatedAt: parseDateTime(row.updatedAt as string | number | Date | null | undefined) ?? new Date(),\n };\n }\n}\n","import { randomUUID } from 'node:crypto';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n TABLE_DATASETS,\n TABLE_DATASET_ITEMS,\n TABLE_DATASET_VERSIONS,\n TABLE_EXPERIMENTS,\n TABLE_EXPERIMENT_RESULTS,\n TABLE_SCHEMAS,\n DATASETS_SCHEMA,\n DATASET_ITEMS_SCHEMA,\n DATASET_VERSIONS_SCHEMA,\n DatasetsStorage,\n calculatePagination,\n normalizePerPage,\n} from '@mastra/core/storage';\nimport type {\n CreateIndexOptions,\n DatasetRecord,\n DatasetItem,\n DatasetItemRow,\n DatasetVersion,\n CreateDatasetInput,\n UpdateDatasetInput,\n AddDatasetItemInput,\n UpdateDatasetItemInput,\n ListDatasetsInput,\n ListDatasetsOutput,\n ListDatasetItemsInput,\n ListDatasetItemsOutput,\n ListDatasetVersionsInput,\n ListDatasetVersionsOutput,\n BatchInsertItemsInput,\n BatchDeleteItemsInput,\n} from '@mastra/core/storage';\nimport type { Pool, RowDataPacket } from 'mysql2/promise';\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL } from '../operations';\nimport { formatTableName, parseDateTime, quoteIdentifier, transformToSqlValue } from '../utils';\n\nfunction parseJSON<T>(value: unknown): T | undefined {\n if (value === null || value === undefined) return undefined;\n if (typeof value === 'string') {\n if (!value) return undefined;\n try {\n return JSON.parse(value) as T;\n } catch {\n return undefined;\n }\n }\n if (typeof value === 'object') return value as T;\n return undefined;\n}\n\nfunction jsonArg(value: unknown): string | null {\n return value === undefined || value === null ? null : JSON.stringify(value);\n}\n\nexport class DatasetsMySQL extends DatasetsStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_DATASETS, TABLE_DATASET_ITEMS, TABLE_DATASET_VERSIONS] as const;\n\n /**\n * Returns default index definitions for the datasets domain tables.\n * Currently no default indexes are defined for datasets.\n */\n static getDefaultIndexDefs(_prefix: string = ''): CreateIndexOptions[] {\n return [];\n }\n\n /**\n * Exports DDL statements for all managed tables.\n */\n static getExportDDL(): string[] {\n return [\n generateTableSQL({ tableName: TABLE_DATASETS, schema: TABLE_SCHEMAS[TABLE_DATASETS] }),\n generateTableSQL({\n tableName: TABLE_DATASET_ITEMS,\n schema: TABLE_SCHEMAS[TABLE_DATASET_ITEMS],\n compositePrimaryKey: ['id', 'datasetVersion'],\n }),\n generateTableSQL({ tableName: TABLE_DATASET_VERSIONS, schema: TABLE_SCHEMAS[TABLE_DATASET_VERSIONS] }),\n ];\n }\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx => (DatasetsMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n /**\n * Returns default index definitions for the datasets domain tables.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return DatasetsMySQL.getDefaultIndexDefs('');\n }\n\n /**\n * Creates default indexes for optimal query performance.\n * Currently no default indexes are defined for datasets.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n // No default indexes for datasets domain\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({ tableName: TABLE_DATASETS, schema: DATASETS_SCHEMA });\n await this.operations.createTable({ tableName: TABLE_DATASET_ITEMS as any, schema: DATASET_ITEMS_SCHEMA });\n await this.operations.createTable({ tableName: TABLE_DATASET_VERSIONS, schema: DATASET_VERSIONS_SCHEMA });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.pool.execute(`DELETE FROM ${formatTableName(TABLE_DATASET_VERSIONS)}`);\n await this.pool.execute(`DELETE FROM ${formatTableName(TABLE_DATASET_ITEMS)}`);\n await this.pool.execute(`DELETE FROM ${formatTableName(TABLE_DATASETS)}`);\n }\n\n // --- Row transformers ---\n\n private mapDataset(row: Record<string, any>): DatasetRecord {\n return {\n id: row.id as string,\n name: row.name as string,\n description: row.description as string | undefined,\n metadata: parseJSON<Record<string, unknown>>(row.metadata),\n inputSchema: parseJSON<Record<string, unknown>>(row.inputSchema),\n groundTruthSchema: parseJSON<Record<string, unknown>>(row.groundTruthSchema),\n version: row.version as number,\n createdAt: parseDateTime(row.createdAt) ?? new Date(),\n updatedAt: parseDateTime(row.updatedAt) ?? new Date(),\n };\n }\n\n private mapItem(row: Record<string, any>): DatasetItem {\n return {\n id: row.id as string,\n datasetId: row.datasetId as string,\n datasetVersion: row.datasetVersion as number,\n input: parseJSON<Record<string, unknown>>(row.input),\n groundTruth: row.groundTruth ? parseJSON<Record<string, unknown>>(row.groundTruth) : undefined,\n metadata: row.metadata ? parseJSON<Record<string, unknown>>(row.metadata) : undefined,\n createdAt: parseDateTime(row.createdAt) ?? new Date(),\n updatedAt: parseDateTime(row.updatedAt) ?? new Date(),\n };\n }\n\n private mapItemFull(row: Record<string, any>): DatasetItemRow {\n return {\n id: row.id as string,\n datasetId: row.datasetId as string,\n datasetVersion: row.datasetVersion as number,\n validTo: row.validTo as number | null,\n isDeleted: Boolean(row.isDeleted),\n input: parseJSON<Record<string, unknown>>(row.input),\n groundTruth: row.groundTruth ? parseJSON<Record<string, unknown>>(row.groundTruth) : undefined,\n metadata: row.metadata ? parseJSON<Record<string, unknown>>(row.metadata) : undefined,\n createdAt: parseDateTime(row.createdAt) ?? new Date(),\n updatedAt: parseDateTime(row.updatedAt) ?? new Date(),\n };\n }\n\n private mapVersion(row: Record<string, any>): DatasetVersion {\n return {\n id: row.id as string,\n datasetId: row.datasetId as string,\n version: row.version as number,\n createdAt: parseDateTime(row.createdAt) ?? new Date(),\n };\n }\n\n // --- Dataset CRUD ---\n\n async createDataset(input: CreateDatasetInput): Promise<DatasetRecord> {\n try {\n const id = randomUUID();\n const now = new Date();\n\n await this.operations.insert({\n tableName: TABLE_DATASETS,\n record: {\n id,\n name: input.name,\n description: input.description ?? null,\n metadata: jsonArg(input.metadata),\n inputSchema: jsonArg(input.inputSchema),\n groundTruthSchema: jsonArg(input.groundTruthSchema),\n version: 0,\n createdAt: now,\n updatedAt: now,\n },\n });\n\n return {\n id,\n name: input.name,\n description: input.description,\n metadata: input.metadata,\n inputSchema: input.inputSchema ?? undefined,\n groundTruthSchema: input.groundTruthSchema ?? undefined,\n version: 0,\n createdAt: now,\n updatedAt: now,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_CREATE_DATASET_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getDatasetById({ id }: { id: string }): Promise<DatasetRecord | null> {\n try {\n const row = await this.operations.load<Record<string, any>>({\n tableName: TABLE_DATASETS,\n keys: { id },\n });\n return row ? this.mapDataset(row) : null;\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_GET_DATASET_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n protected async _doUpdateDataset(args: UpdateDatasetInput): Promise<DatasetRecord> {\n try {\n const existing = await this.getDatasetById({ id: args.id });\n if (!existing) {\n throw new MastraError({\n id: 'MYSQL_UPDATE_DATASET_NOT_FOUND',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { datasetId: args.id },\n });\n }\n\n const data: Record<string, any> = { updatedAt: new Date() };\n\n if (args.name !== undefined) data.name = args.name;\n if (args.description !== undefined) data.description = args.description;\n if (args.metadata !== undefined) data.metadata = JSON.stringify(args.metadata);\n if (args.inputSchema !== undefined)\n data.inputSchema = args.inputSchema === null ? null : JSON.stringify(args.inputSchema);\n if (args.groundTruthSchema !== undefined)\n data.groundTruthSchema = args.groundTruthSchema === null ? null : JSON.stringify(args.groundTruthSchema);\n\n await this.operations.update({\n tableName: TABLE_DATASETS,\n keys: { id: args.id },\n data,\n });\n\n return {\n ...existing,\n name: args.name ?? existing.name,\n description: args.description ?? existing.description,\n metadata: args.metadata ?? existing.metadata,\n inputSchema: (args.inputSchema !== undefined ? args.inputSchema : existing.inputSchema) ?? undefined,\n groundTruthSchema:\n (args.groundTruthSchema !== undefined ? args.groundTruthSchema : existing.groundTruthSchema) ?? undefined,\n updatedAt: data.updatedAt,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: 'MYSQL_UPDATE_DATASET_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteDataset({ id }: { id: string }): Promise<void> {\n const connection = await this.pool.getConnection();\n try {\n await connection.beginTransaction();\n\n try {\n await connection.execute(\n `DELETE FROM ${formatTableName(TABLE_EXPERIMENT_RESULTS)} WHERE ${quoteIdentifier('experimentId', 'column name')} IN (SELECT id FROM ${formatTableName(TABLE_EXPERIMENTS)} WHERE ${quoteIdentifier('datasetId', 'column name')} = ?)`,\n [id],\n );\n } catch {\n // experiment_results table may not exist\n }\n try {\n await connection.execute(\n `UPDATE ${formatTableName(TABLE_EXPERIMENTS)} SET ${quoteIdentifier('datasetId', 'column name')} = NULL, ${quoteIdentifier('datasetVersion', 'column name')} = NULL WHERE ${quoteIdentifier('datasetId', 'column name')} = ?`,\n [id],\n );\n } catch {\n // experiments table may not exist\n }\n\n await connection.execute(\n `DELETE FROM ${formatTableName(TABLE_DATASET_VERSIONS)} WHERE ${quoteIdentifier('datasetId', 'column name')} = ?`,\n [id],\n );\n await connection.execute(\n `DELETE FROM ${formatTableName(TABLE_DATASET_ITEMS)} WHERE ${quoteIdentifier('datasetId', 'column name')} = ?`,\n [id],\n );\n await connection.execute(`DELETE FROM ${formatTableName(TABLE_DATASETS)} WHERE id = ?`, [id]);\n\n await connection.commit();\n } catch (error) {\n await connection.rollback();\n throw new MastraError(\n {\n id: 'MYSQL_DELETE_DATASET_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n } finally {\n connection.release();\n }\n }\n\n async listDatasets(args: ListDatasetsInput): Promise<ListDatasetsOutput> {\n try {\n const { page, perPage: perPageInput } = args.pagination;\n\n const whereClause = { sql: '', args: [] as any[] };\n const total = await this.operations.loadTotalCount({ tableName: TABLE_DATASETS, whereClause });\n\n if (total === 0) {\n return {\n datasets: [],\n pagination: { total: 0, page, perPage: perPageInput, hasMore: false },\n };\n }\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<Record<string, any>>({\n tableName: TABLE_DATASETS,\n whereClause,\n orderBy: `${quoteIdentifier('createdAt', 'column name')} DESC, \\`id\\` ASC`,\n offset,\n limit: limitValue,\n });\n\n return {\n datasets: rows.map(row => this.mapDataset(row)),\n pagination: {\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n },\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_LIST_DATASETS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n // --- SCD-2 item mutations ---\n\n protected async _doAddItem(args: AddDatasetItemInput): Promise<DatasetItem> {\n const connection = await this.pool.getConnection();\n try {\n await connection.beginTransaction();\n\n const id = randomUUID();\n const versionId = randomUUID();\n const now = new Date();\n const tableDatasetsName = formatTableName(TABLE_DATASETS);\n const tableItemsName = formatTableName(TABLE_DATASET_ITEMS);\n const tableVersionsName = formatTableName(TABLE_DATASET_VERSIONS);\n\n // Bump version\n await connection.execute(`UPDATE ${tableDatasetsName} SET \\`version\\` = \\`version\\` + 1 WHERE id = ?`, [\n args.datasetId,\n ]);\n\n // Get new version\n const [versionRows] = await connection.execute<RowDataPacket[]>(\n `SELECT \\`version\\` FROM ${tableDatasetsName} WHERE id = ?`,\n [args.datasetId],\n );\n const newVersion = (versionRows as any[])[0]?.version as number;\n\n // Insert item\n await connection.execute(\n `INSERT INTO ${tableItemsName} (\\`id\\`, \\`datasetId\\`, \\`datasetVersion\\`, \\`validTo\\`, \\`isDeleted\\`, \\`input\\`, \\`groundTruth\\`, \\`metadata\\`, \\`createdAt\\`, \\`updatedAt\\`) VALUES (?, ?, ?, NULL, 0, ?, ?, ?, ?, ?)`,\n [\n id,\n args.datasetId,\n newVersion,\n jsonArg(args.input),\n jsonArg(args.groundTruth),\n jsonArg(args.metadata),\n transformToSqlValue(now),\n transformToSqlValue(now),\n ],\n );\n\n // Insert dataset version record\n await connection.execute(\n `INSERT INTO ${tableVersionsName} (\\`id\\`, \\`datasetId\\`, \\`version\\`, \\`createdAt\\`) VALUES (?, ?, ?, ?)`,\n [versionId, args.datasetId, newVersion, transformToSqlValue(now)],\n );\n\n await connection.commit();\n\n return {\n id,\n datasetId: args.datasetId,\n datasetVersion: newVersion,\n input: args.input,\n groundTruth: args.groundTruth,\n metadata: args.metadata,\n createdAt: now,\n updatedAt: now,\n };\n } catch (error) {\n await connection.rollback();\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: 'MYSQL_ADD_ITEM_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n } finally {\n connection.release();\n }\n }\n\n protected async _doUpdateItem(args: UpdateDatasetItemInput): Promise<DatasetItem> {\n const existing = await this.getItemById({ id: args.id });\n if (!existing) {\n throw new MastraError({\n id: 'MYSQL_UPDATE_ITEM_NOT_FOUND',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { itemId: args.id },\n });\n }\n if (existing.datasetId !== args.datasetId) {\n throw new MastraError({\n id: 'MYSQL_UPDATE_ITEM_DATASET_MISMATCH',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { itemId: args.id, expectedDatasetId: args.datasetId, actualDatasetId: existing.datasetId },\n });\n }\n\n const connection = await this.pool.getConnection();\n try {\n await connection.beginTransaction();\n\n const versionId = randomUUID();\n const now = new Date();\n const tableDatasetsName = formatTableName(TABLE_DATASETS);\n const tableItemsName = formatTableName(TABLE_DATASET_ITEMS);\n const tableVersionsName = formatTableName(TABLE_DATASET_VERSIONS);\n\n const mergedInput = args.input ?? existing.input;\n const mergedGroundTruth = args.groundTruth ?? existing.groundTruth;\n const mergedMetadata = args.metadata ?? existing.metadata;\n\n // Bump version\n await connection.execute(`UPDATE ${tableDatasetsName} SET \\`version\\` = \\`version\\` + 1 WHERE id = ?`, [\n args.datasetId,\n ]);\n\n const [versionRows] = await connection.execute<RowDataPacket[]>(\n `SELECT \\`version\\` FROM ${tableDatasetsName} WHERE id = ?`,\n [args.datasetId],\n );\n const newVersion = (versionRows as any[])[0]?.version as number;\n\n // Close old row\n await connection.execute(\n `UPDATE ${tableItemsName} SET \\`validTo\\` = ? WHERE \\`id\\` = ? AND \\`validTo\\` IS NULL AND \\`isDeleted\\` = 0`,\n [newVersion, args.id],\n );\n\n // Insert new row\n await connection.execute(\n `INSERT INTO ${tableItemsName} (\\`id\\`, \\`datasetId\\`, \\`datasetVersion\\`, \\`validTo\\`, \\`isDeleted\\`, \\`input\\`, \\`groundTruth\\`, \\`metadata\\`, \\`createdAt\\`, \\`updatedAt\\`) VALUES (?, ?, ?, NULL, 0, ?, ?, ?, ?, ?)`,\n [\n args.id,\n args.datasetId,\n newVersion,\n jsonArg(mergedInput),\n jsonArg(mergedGroundTruth),\n jsonArg(mergedMetadata),\n transformToSqlValue(existing.createdAt),\n transformToSqlValue(now),\n ],\n );\n\n // Insert dataset version record\n await connection.execute(\n `INSERT INTO ${tableVersionsName} (\\`id\\`, \\`datasetId\\`, \\`version\\`, \\`createdAt\\`) VALUES (?, ?, ?, ?)`,\n [versionId, args.datasetId, newVersion, transformToSqlValue(now)],\n );\n\n await connection.commit();\n\n return {\n ...existing,\n datasetVersion: newVersion,\n input: mergedInput,\n groundTruth: mergedGroundTruth,\n metadata: mergedMetadata,\n updatedAt: now,\n };\n } catch (error) {\n await connection.rollback();\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: 'MYSQL_UPDATE_ITEM_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n } finally {\n connection.release();\n }\n }\n\n protected async _doDeleteItem({ id, datasetId }: { id: string; datasetId: string }): Promise<void> {\n const existing = await this.getItemById({ id });\n if (!existing) return;\n if (existing.datasetId !== datasetId) {\n throw new MastraError({\n id: 'MYSQL_DELETE_ITEM_DATASET_MISMATCH',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { itemId: id, expectedDatasetId: datasetId, actualDatasetId: existing.datasetId },\n });\n }\n\n const connection = await this.pool.getConnection();\n try {\n await connection.beginTransaction();\n\n const versionId = randomUUID();\n const now = new Date();\n const tableDatasetsName = formatTableName(TABLE_DATASETS);\n const tableItemsName = formatTableName(TABLE_DATASET_ITEMS);\n const tableVersionsName = formatTableName(TABLE_DATASET_VERSIONS);\n\n // Bump version\n await connection.execute(`UPDATE ${tableDatasetsName} SET \\`version\\` = \\`version\\` + 1 WHERE id = ?`, [\n datasetId,\n ]);\n\n const [versionRows] = await connection.execute<RowDataPacket[]>(\n `SELECT \\`version\\` FROM ${tableDatasetsName} WHERE id = ?`,\n [datasetId],\n );\n const newVersion = (versionRows as any[])[0]?.version as number;\n\n // Close old row\n await connection.execute(\n `UPDATE ${tableItemsName} SET \\`validTo\\` = ? WHERE \\`id\\` = ? AND \\`validTo\\` IS NULL AND \\`isDeleted\\` = 0`,\n [newVersion, id],\n );\n\n // Insert tombstone\n await connection.execute(\n `INSERT INTO ${tableItemsName} (\\`id\\`, \\`datasetId\\`, \\`datasetVersion\\`, \\`validTo\\`, \\`isDeleted\\`, \\`input\\`, \\`groundTruth\\`, \\`metadata\\`, \\`createdAt\\`, \\`updatedAt\\`) VALUES (?, ?, ?, NULL, 1, ?, ?, ?, ?, ?)`,\n [\n id,\n datasetId,\n newVersion,\n jsonArg(existing.input),\n jsonArg(existing.groundTruth),\n jsonArg(existing.metadata),\n transformToSqlValue(existing.createdAt),\n transformToSqlValue(now),\n ],\n );\n\n // Insert dataset version record\n await connection.execute(\n `INSERT INTO ${tableVersionsName} (\\`id\\`, \\`datasetId\\`, \\`version\\`, \\`createdAt\\`) VALUES (?, ?, ?, ?)`,\n [versionId, datasetId, newVersion, transformToSqlValue(now)],\n );\n\n await connection.commit();\n } catch (error) {\n await connection.rollback();\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: 'MYSQL_DELETE_ITEM_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n } finally {\n connection.release();\n }\n }\n\n // --- SCD-2 queries ---\n\n async getItemById(args: { id: string; datasetVersion?: number }): Promise<DatasetItem | null> {\n try {\n const tableItemsName = formatTableName(TABLE_DATASET_ITEMS);\n let rows: RowDataPacket[];\n\n if (args.datasetVersion !== undefined) {\n [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${tableItemsName} WHERE \\`id\\` = ? AND \\`datasetVersion\\` = ? AND \\`isDeleted\\` = 0`,\n [args.id, args.datasetVersion],\n );\n } else {\n [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${tableItemsName} WHERE \\`id\\` = ? AND \\`validTo\\` IS NULL AND \\`isDeleted\\` = 0`,\n [args.id],\n );\n }\n\n return rows.length > 0 ? this.mapItem(rows[0]!) : null;\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_GET_ITEM_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getItemsByVersion({ datasetId, version }: { datasetId: string; version: number }): Promise<DatasetItem[]> {\n try {\n const tableItemsName = formatTableName(TABLE_DATASET_ITEMS);\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${tableItemsName} WHERE \\`datasetId\\` = ? AND \\`datasetVersion\\` <= ? AND (\\`validTo\\` IS NULL OR \\`validTo\\` > ?) AND \\`isDeleted\\` = 0 ORDER BY \\`createdAt\\` DESC, \\`id\\` ASC`,\n [datasetId, version, version],\n );\n\n return (rows as any[]).map(row => this.mapItem(row));\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_GET_ITEMS_BY_VERSION_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getItemHistory(itemId: string): Promise<DatasetItemRow[]> {\n try {\n const tableItemsName = formatTableName(TABLE_DATASET_ITEMS);\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${tableItemsName} WHERE \\`id\\` = ? ORDER BY \\`datasetVersion\\` DESC`,\n [itemId],\n );\n\n return (rows as any[]).map(row => this.mapItemFull(row));\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_GET_ITEM_HISTORY_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listItems(args: ListDatasetItemsInput): Promise<ListDatasetItemsOutput> {\n try {\n const { page, perPage: perPageInput } = args.pagination;\n const tableItemsName = formatTableName(TABLE_DATASET_ITEMS);\n\n const conditions: string[] = [`\\`datasetId\\` = ?`];\n const params: any[] = [args.datasetId];\n\n if (args.version !== undefined) {\n // SCD-2 time-travel query\n conditions.push(`\\`datasetVersion\\` <= ?`);\n conditions.push(`(\\`validTo\\` IS NULL OR \\`validTo\\` > ?)`);\n conditions.push(`\\`isDeleted\\` = 0`);\n params.push(args.version, args.version);\n } else {\n // Current items only\n conditions.push(`\\`validTo\\` IS NULL`);\n conditions.push(`\\`isDeleted\\` = 0`);\n }\n\n if (args.search) {\n conditions.push(`(LOWER(\\`input\\`) LIKE ? OR LOWER(COALESCE(\\`groundTruth\\`, '')) LIKE ?)`);\n const searchPattern = `%${args.search.toLowerCase()}%`;\n params.push(searchPattern, searchPattern);\n }\n\n const whereSql = ` WHERE ${conditions.join(' AND ')}`;\n\n const [countRows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT COUNT(*) as count FROM ${tableItemsName}${whereSql}`,\n params,\n );\n const total = Number((countRows as any[])[0]?.count ?? 0);\n\n if (total === 0) {\n return {\n items: [],\n pagination: { total: 0, page, perPage: perPageInput, hasMore: false },\n };\n }\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${tableItemsName}${whereSql} ORDER BY \\`createdAt\\` DESC, \\`id\\` ASC LIMIT ${limitValue} OFFSET ${offset}`,\n params,\n );\n\n return {\n items: (rows as any[]).map(row => this.mapItem(row)),\n pagination: {\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n },\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_LIST_ITEMS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n // --- Dataset version methods ---\n\n async createDatasetVersion(datasetId: string, version: number): Promise<DatasetVersion> {\n try {\n const id = randomUUID();\n const now = new Date();\n\n await this.operations.insert({\n tableName: TABLE_DATASET_VERSIONS,\n record: {\n id,\n datasetId,\n version,\n createdAt: now,\n },\n });\n\n return { id, datasetId, version, createdAt: now };\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_CREATE_DATASET_VERSION_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listDatasetVersions(input: ListDatasetVersionsInput): Promise<ListDatasetVersionsOutput> {\n try {\n const { page, perPage: perPageInput } = input.pagination;\n\n const whereClause = {\n sql: ` WHERE ${quoteIdentifier('datasetId', 'column name')} = ?`,\n args: [input.datasetId] as any[],\n };\n\n const total = await this.operations.loadTotalCount({ tableName: TABLE_DATASET_VERSIONS, whereClause });\n if (total === 0) {\n return {\n versions: [],\n pagination: { total: 0, page, perPage: perPageInput, hasMore: false },\n };\n }\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<Record<string, any>>({\n tableName: TABLE_DATASET_VERSIONS,\n whereClause,\n orderBy: `\\`version\\` DESC`,\n offset,\n limit: limitValue,\n });\n\n return {\n versions: rows.map(row => this.mapVersion(row)),\n pagination: {\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n },\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_LIST_DATASET_VERSIONS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n // --- Bulk operations (SCD-2 internally) ---\n\n protected async _doBatchInsertItems(input: BatchInsertItemsInput): Promise<DatasetItem[]> {\n const dataset = await this.getDatasetById({ id: input.datasetId });\n if (!dataset) {\n throw new MastraError({\n id: 'MYSQL_BULK_ADD_ITEMS_DATASET_NOT_FOUND',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { datasetId: input.datasetId },\n });\n }\n\n const connection = await this.pool.getConnection();\n try {\n await connection.beginTransaction();\n\n const now = new Date();\n const versionId = randomUUID();\n const tableDatasetsName = formatTableName(TABLE_DATASETS);\n const tableItemsName = formatTableName(TABLE_DATASET_ITEMS);\n const tableVersionsName = formatTableName(TABLE_DATASET_VERSIONS);\n\n // Single version increment\n await connection.execute(`UPDATE ${tableDatasetsName} SET \\`version\\` = \\`version\\` + 1 WHERE id = ?`, [\n input.datasetId,\n ]);\n\n const [versionRows] = await connection.execute<RowDataPacket[]>(\n `SELECT \\`version\\` FROM ${tableDatasetsName} WHERE id = ?`,\n [input.datasetId],\n );\n const newVersion = (versionRows as any[])[0]?.version as number;\n\n const items: { id: string; itemInput: BatchInsertItemsInput['items'][number] }[] = [];\n for (const itemInput of input.items) {\n const id = randomUUID();\n items.push({ id, itemInput });\n\n await connection.execute(\n `INSERT INTO ${tableItemsName} (\\`id\\`, \\`datasetId\\`, \\`datasetVersion\\`, \\`validTo\\`, \\`isDeleted\\`, \\`input\\`, \\`groundTruth\\`, \\`metadata\\`, \\`createdAt\\`, \\`updatedAt\\`) VALUES (?, ?, ?, NULL, 0, ?, ?, ?, ?, ?)`,\n [\n id,\n input.datasetId,\n newVersion,\n jsonArg(itemInput.input),\n jsonArg(itemInput.groundTruth),\n jsonArg(itemInput.metadata),\n transformToSqlValue(now),\n transformToSqlValue(now),\n ],\n );\n }\n\n // Single dataset_version record\n await connection.execute(\n `INSERT INTO ${tableVersionsName} (\\`id\\`, \\`datasetId\\`, \\`version\\`, \\`createdAt\\`) VALUES (?, ?, ?, ?)`,\n [versionId, input.datasetId, newVersion, transformToSqlValue(now)],\n );\n\n await connection.commit();\n\n return items.map(({ id, itemInput }) => ({\n id,\n datasetId: input.datasetId,\n datasetVersion: newVersion,\n input: itemInput.input,\n groundTruth: itemInput.groundTruth,\n metadata: itemInput.metadata,\n createdAt: now,\n updatedAt: now,\n }));\n } catch (error) {\n await connection.rollback();\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: 'MYSQL_BULK_ADD_ITEMS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n } finally {\n connection.release();\n }\n }\n\n protected async _doBatchDeleteItems(input: BatchDeleteItemsInput): Promise<void> {\n const dataset = await this.getDatasetById({ id: input.datasetId });\n if (!dataset) {\n throw new MastraError({\n id: 'MYSQL_BULK_DELETE_ITEMS_DATASET_NOT_FOUND',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { datasetId: input.datasetId },\n });\n }\n\n // Fetch current items for tombstone data\n const currentItems: DatasetItem[] = [];\n for (const itemId of input.itemIds) {\n const item = await this.getItemById({ id: itemId });\n if (item && item.datasetId === input.datasetId) {\n currentItems.push(item);\n }\n }\n\n if (currentItems.length === 0) return;\n\n const connection = await this.pool.getConnection();\n try {\n await connection.beginTransaction();\n\n const now = new Date();\n const versionId = randomUUID();\n const tableDatasetsName = formatTableName(TABLE_DATASETS);\n const tableItemsName = formatTableName(TABLE_DATASET_ITEMS);\n const tableVersionsName = formatTableName(TABLE_DATASET_VERSIONS);\n\n // Single version increment\n await connection.execute(`UPDATE ${tableDatasetsName} SET \\`version\\` = \\`version\\` + 1 WHERE id = ?`, [\n input.datasetId,\n ]);\n\n const [versionRows] = await connection.execute<RowDataPacket[]>(\n `SELECT \\`version\\` FROM ${tableDatasetsName} WHERE id = ?`,\n [input.datasetId],\n );\n const newVersion = (versionRows as any[])[0]?.version as number;\n\n for (const item of currentItems) {\n // Close old row\n await connection.execute(\n `UPDATE ${tableItemsName} SET \\`validTo\\` = ? WHERE \\`id\\` = ? AND \\`validTo\\` IS NULL AND \\`isDeleted\\` = 0`,\n [newVersion, item.id],\n );\n\n // Insert tombstone\n await connection.execute(\n `INSERT INTO ${tableItemsName} (\\`id\\`, \\`datasetId\\`, \\`datasetVersion\\`, \\`validTo\\`, \\`isDeleted\\`, \\`input\\`, \\`groundTruth\\`, \\`metadata\\`, \\`createdAt\\`, \\`updatedAt\\`) VALUES (?, ?, ?, NULL, 1, ?, ?, ?, ?, ?)`,\n [\n item.id,\n input.datasetId,\n newVersion,\n jsonArg(item.input),\n jsonArg(item.groundTruth),\n jsonArg(item.metadata),\n transformToSqlValue(item.createdAt),\n transformToSqlValue(now),\n ],\n );\n }\n\n // Single dataset_version\n await connection.execute(\n `INSERT INTO ${tableVersionsName} (\\`id\\`, \\`datasetId\\`, \\`version\\`, \\`createdAt\\`) VALUES (?, ?, ?, ?)`,\n [versionId, input.datasetId, newVersion, transformToSqlValue(now)],\n );\n\n await connection.commit();\n } catch (error) {\n await connection.rollback();\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: 'MYSQL_BULK_DELETE_ITEMS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n } finally {\n connection.release();\n }\n }\n}\n","import { randomUUID } from 'node:crypto';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n TABLE_EXPERIMENTS,\n TABLE_EXPERIMENT_RESULTS,\n TABLE_SCHEMAS,\n EXPERIMENTS_SCHEMA,\n EXPERIMENT_RESULTS_SCHEMA,\n ExperimentsStorage,\n calculatePagination,\n normalizePerPage,\n} from '@mastra/core/storage';\nimport type {\n CreateIndexOptions,\n Experiment,\n ExperimentResult,\n ExperimentReviewCounts,\n ExperimentResultStatus,\n CreateExperimentInput,\n UpdateExperimentInput,\n AddExperimentResultInput,\n UpdateExperimentResultInput,\n ListExperimentsInput,\n ListExperimentsOutput,\n ListExperimentResultsInput,\n ListExperimentResultsOutput,\n} from '@mastra/core/storage';\nimport type { Pool } from 'mysql2/promise';\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL } from '../operations';\nimport { formatTableName, parseDateTime, quoteIdentifier } from '../utils';\n\nfunction parseJSON<T>(value: unknown): T | undefined {\n if (value === null || value === undefined) return undefined;\n if (typeof value === 'string') {\n if (!value) return undefined;\n try {\n return JSON.parse(value) as T;\n } catch {\n return undefined;\n }\n }\n if (typeof value === 'object') return value as T;\n return undefined;\n}\n\ninterface ExperimentRow {\n id: string;\n datasetId: string | null;\n datasetVersion: number | null;\n targetType: string;\n targetId: string;\n name: string | null;\n description: string | null;\n metadata: string | null;\n status: string;\n totalItems: number;\n succeededCount: number;\n failedCount: number;\n skippedCount: number;\n startedAt: Date | string | null;\n completedAt: Date | string | null;\n createdAt: Date | string;\n updatedAt: Date | string;\n}\n\ninterface ExperimentResultRow {\n id: string;\n experimentId: string;\n itemId: string;\n itemDatasetVersion: number | null;\n input: string;\n output: string | null;\n groundTruth: string | null;\n error: string | null;\n startedAt: Date | string;\n completedAt: Date | string;\n retryCount: number;\n traceId: string | null;\n status: string | null;\n tags: string | null;\n createdAt: Date | string;\n}\n\nexport class ExperimentsMySQL extends ExperimentsStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_EXPERIMENTS, TABLE_EXPERIMENT_RESULTS] as const;\n\n /**\n * Returns default index definitions for the experiments domain tables.\n * Currently no default indexes are defined for experiments.\n */\n static getDefaultIndexDefs(_prefix: string = ''): CreateIndexOptions[] {\n return [];\n }\n\n /**\n * Exports DDL statements for all managed tables.\n */\n static getExportDDL(): string[] {\n return [\n generateTableSQL({ tableName: TABLE_EXPERIMENTS, schema: TABLE_SCHEMAS[TABLE_EXPERIMENTS] }),\n generateTableSQL({ tableName: TABLE_EXPERIMENT_RESULTS, schema: TABLE_SCHEMAS[TABLE_EXPERIMENT_RESULTS] }),\n ];\n }\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx => (ExperimentsMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n /**\n * Returns default index definitions for the experiments domain tables.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return ExperimentsMySQL.getDefaultIndexDefs('');\n }\n\n /**\n * Creates default indexes for optimal query performance.\n * Currently no default indexes are defined for experiments.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n // No default indexes for experiments domain\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({ tableName: TABLE_EXPERIMENTS, schema: EXPERIMENTS_SCHEMA });\n await this.operations.createTable({ tableName: TABLE_EXPERIMENT_RESULTS, schema: EXPERIMENT_RESULTS_SCHEMA });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.pool.execute(`DELETE FROM ${formatTableName(TABLE_EXPERIMENT_RESULTS)}`);\n await this.pool.execute(`DELETE FROM ${formatTableName(TABLE_EXPERIMENTS)}`);\n }\n\n private mapExperiment(row: ExperimentRow): Experiment {\n return {\n id: row.id,\n datasetId: row.datasetId ?? null,\n datasetVersion: row.datasetVersion ?? null,\n targetType: row.targetType as Experiment['targetType'],\n targetId: row.targetId,\n name: row.name ?? undefined,\n description: row.description ?? undefined,\n metadata: parseJSON<Record<string, unknown>>(row.metadata),\n status: row.status as Experiment['status'],\n totalItems: row.totalItems,\n succeededCount: row.succeededCount,\n failedCount: row.failedCount,\n skippedCount: row.skippedCount ?? 0,\n startedAt: row.startedAt ? (parseDateTime(row.startedAt) ?? null) : null,\n completedAt: row.completedAt ? (parseDateTime(row.completedAt) ?? null) : null,\n createdAt: parseDateTime(row.createdAt) ?? new Date(),\n updatedAt: parseDateTime(row.updatedAt) ?? new Date(),\n };\n }\n\n private mapExperimentResult(row: ExperimentResultRow): ExperimentResult {\n return {\n id: row.id,\n experimentId: row.experimentId,\n itemId: row.itemId,\n itemDatasetVersion: row.itemDatasetVersion ?? null,\n input: parseJSON<Record<string, unknown>>(row.input),\n output: row.output ? parseJSON<Record<string, unknown>>(row.output) : null,\n groundTruth: row.groundTruth ? parseJSON<Record<string, unknown>>(row.groundTruth) : null,\n error: row.error ? (parseJSON<{ message: string; stack?: string; code?: string }>(row.error) ?? null) : null,\n startedAt: parseDateTime(row.startedAt) ?? new Date(),\n completedAt: parseDateTime(row.completedAt) ?? new Date(),\n retryCount: row.retryCount,\n traceId: row.traceId ?? null,\n status: (row.status as ExperimentResultStatus | null) ?? null,\n tags: row.tags ? (parseJSON<string[]>(row.tags) ?? null) : null,\n createdAt: parseDateTime(row.createdAt) ?? new Date(),\n };\n }\n\n async createExperiment(input: CreateExperimentInput): Promise<Experiment> {\n try {\n const id = input.id ?? randomUUID();\n const now = new Date();\n\n await this.operations.insert({\n tableName: TABLE_EXPERIMENTS,\n record: {\n id,\n datasetId: input.datasetId ?? null,\n datasetVersion: input.datasetVersion ?? null,\n targetType: input.targetType,\n targetId: input.targetId,\n name: input.name ?? null,\n description: input.description ?? null,\n metadata: input.metadata ? JSON.stringify(input.metadata) : null,\n status: 'pending',\n totalItems: input.totalItems,\n succeededCount: 0,\n failedCount: 0,\n skippedCount: 0,\n startedAt: null,\n completedAt: null,\n createdAt: now,\n updatedAt: now,\n },\n });\n\n return {\n id,\n datasetId: input.datasetId,\n datasetVersion: input.datasetVersion,\n targetType: input.targetType,\n targetId: input.targetId,\n name: input.name,\n description: input.description,\n metadata: input.metadata,\n status: 'pending',\n totalItems: input.totalItems,\n succeededCount: 0,\n failedCount: 0,\n skippedCount: 0,\n startedAt: null,\n completedAt: null,\n createdAt: now,\n updatedAt: now,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_CREATE_EXPERIMENT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async updateExperiment(input: UpdateExperimentInput): Promise<Experiment> {\n try {\n const existing = await this.getExperimentById({ id: input.id });\n if (!existing) {\n throw new MastraError({\n id: 'MYSQL_UPDATE_EXPERIMENT_NOT_FOUND',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { experimentId: input.id },\n });\n }\n\n const data: Record<string, any> = { updatedAt: new Date() };\n\n if (input.status !== undefined) data.status = input.status;\n if (input.succeededCount !== undefined) data.succeededCount = input.succeededCount;\n if (input.failedCount !== undefined) data.failedCount = input.failedCount;\n if (input.skippedCount !== undefined) data.skippedCount = input.skippedCount;\n if (input.totalItems !== undefined) data.totalItems = input.totalItems;\n if (input.startedAt !== undefined) data.startedAt = input.startedAt ?? null;\n if (input.completedAt !== undefined) data.completedAt = input.completedAt ?? null;\n if (input.name !== undefined) data.name = input.name;\n if (input.description !== undefined) data.description = input.description;\n if (input.metadata !== undefined) data.metadata = JSON.stringify(input.metadata);\n\n await this.operations.update({\n tableName: TABLE_EXPERIMENTS,\n keys: { id: input.id },\n data,\n });\n\n const updated = await this.getExperimentById({ id: input.id });\n return updated!;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: 'MYSQL_UPDATE_EXPERIMENT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getExperimentById(args: { id: string }): Promise<Experiment | null> {\n try {\n const row = await this.operations.load<ExperimentRow>({\n tableName: TABLE_EXPERIMENTS,\n keys: { id: args.id },\n });\n return row ? this.mapExperiment(row) : null;\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_GET_EXPERIMENT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listExperiments(args: ListExperimentsInput): Promise<ListExperimentsOutput> {\n try {\n const { page, perPage: perPageInput } = args.pagination;\n\n const conditions: string[] = [];\n const params: any[] = [];\n\n if (args.datasetId) {\n conditions.push(`${quoteIdentifier('datasetId', 'column name')} = ?`);\n params.push(args.datasetId);\n }\n\n const whereClause = {\n sql: conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '',\n args: params,\n };\n\n const total = await this.operations.loadTotalCount({ tableName: TABLE_EXPERIMENTS, whereClause });\n if (total === 0) {\n return {\n experiments: [],\n pagination: { total: 0, page, perPage: perPageInput, hasMore: false },\n };\n }\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<ExperimentRow>({\n tableName: TABLE_EXPERIMENTS,\n whereClause,\n orderBy: `${quoteIdentifier('createdAt', 'column name')} DESC`,\n offset,\n limit: limitValue,\n });\n\n return {\n experiments: rows.map(row => this.mapExperiment(row)),\n pagination: {\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n },\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_LIST_EXPERIMENTS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteExperiment(args: { id: string }): Promise<void> {\n try {\n const connection = await this.pool.getConnection();\n try {\n await connection.beginTransaction();\n await connection.execute(\n `DELETE FROM ${formatTableName(TABLE_EXPERIMENT_RESULTS)} WHERE ${quoteIdentifier('experimentId', 'column name')} = ?`,\n [args.id],\n );\n await connection.execute(`DELETE FROM ${formatTableName(TABLE_EXPERIMENTS)} WHERE id = ?`, [args.id]);\n await connection.commit();\n } catch (error) {\n try {\n await connection.rollback();\n } catch (rollbackError) {\n throw new MastraError(\n {\n id: 'MYSQL_DELETE_EXPERIMENT_ROLLBACK_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { experimentId: args.id },\n },\n rollbackError,\n );\n }\n throw error;\n } finally {\n connection.release();\n }\n } catch (error) {\n if (error instanceof MastraError) {\n throw error;\n }\n throw new MastraError(\n {\n id: 'MYSQL_DELETE_EXPERIMENT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async addExperimentResult(input: AddExperimentResultInput): Promise<ExperimentResult> {\n try {\n const id = input.id ?? randomUUID();\n const now = new Date();\n\n await this.operations.insert({\n tableName: TABLE_EXPERIMENT_RESULTS,\n record: {\n id,\n experimentId: input.experimentId,\n itemId: input.itemId,\n itemDatasetVersion: input.itemDatasetVersion ?? null,\n input: JSON.stringify(input.input),\n output: input.output ? JSON.stringify(input.output) : null,\n groundTruth: input.groundTruth ? JSON.stringify(input.groundTruth) : null,\n error: input.error ? JSON.stringify(input.error) : null,\n startedAt: input.startedAt,\n completedAt: input.completedAt,\n retryCount: input.retryCount,\n traceId: input.traceId ?? null,\n status: input.status ?? null,\n tags: input.tags ? JSON.stringify(input.tags) : null,\n createdAt: now,\n },\n });\n\n return {\n id,\n experimentId: input.experimentId,\n itemId: input.itemId,\n itemDatasetVersion: input.itemDatasetVersion,\n input: input.input,\n output: input.output,\n groundTruth: input.groundTruth,\n error: input.error,\n startedAt: input.startedAt,\n completedAt: input.completedAt,\n retryCount: input.retryCount,\n traceId: input.traceId ?? null,\n status: input.status ?? null,\n tags: input.tags ?? null,\n createdAt: now,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_ADD_EXPERIMENT_RESULT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getExperimentResultById(args: { id: string }): Promise<ExperimentResult | null> {\n try {\n const row = await this.operations.load<ExperimentResultRow>({\n tableName: TABLE_EXPERIMENT_RESULTS,\n keys: { id: args.id },\n });\n return row ? this.mapExperimentResult(row) : null;\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_GET_EXPERIMENT_RESULT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async updateExperimentResult(input: UpdateExperimentResultInput): Promise<ExperimentResult> {\n try {\n const existing = await this.operations.load<ExperimentResultRow>({\n tableName: TABLE_EXPERIMENT_RESULTS,\n keys: { id: input.id },\n });\n if (!existing) {\n throw new Error(`Experiment result not found: ${input.id}`);\n }\n if (input.experimentId && existing.experimentId !== input.experimentId) {\n throw new Error(`Experiment result ${input.id} does not belong to experiment ${input.experimentId}`);\n }\n\n const updateData: Record<string, unknown> = {};\n if (input.status !== undefined) {\n updateData.status = input.status;\n }\n if (input.tags !== undefined) {\n updateData.tags = input.tags ? JSON.stringify(input.tags) : null;\n }\n\n if (Object.keys(updateData).length > 0) {\n await this.operations.update({\n tableName: TABLE_EXPERIMENT_RESULTS,\n keys: { id: input.id },\n data: updateData,\n });\n }\n\n const updated = await this.getExperimentResultById({ id: input.id });\n if (!updated) {\n throw new Error(`Experiment result ${input.id} not found after update`);\n }\n return updated;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: 'MYSQL_UPDATE_EXPERIMENT_RESULT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getReviewSummary(): Promise<ExperimentReviewCounts[]> {\n try {\n const rows = await this.operations.query<{\n experimentId: string;\n status: string | null;\n count: number;\n }>(\n `SELECT ${quoteIdentifier('experimentId', 'column name')}, ${quoteIdentifier('status', 'column name')}, COUNT(*) as count FROM ${formatTableName(TABLE_EXPERIMENT_RESULTS)} GROUP BY ${quoteIdentifier('experimentId', 'column name')}, ${quoteIdentifier('status', 'column name')}`,\n );\n\n const counts = new Map<string, ExperimentReviewCounts>();\n for (const row of rows) {\n let entry = counts.get(row.experimentId);\n if (!entry) {\n entry = { experimentId: row.experimentId, total: 0, needsReview: 0, reviewed: 0, complete: 0 };\n counts.set(row.experimentId, entry);\n }\n const count = Number(row.count);\n entry.total += count;\n if (row.status === 'needs-review') entry.needsReview += count;\n else if (row.status === 'reviewed') entry.reviewed += count;\n else if (row.status === 'complete') entry.complete += count;\n }\n\n return Array.from(counts.values());\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_GET_REVIEW_SUMMARY_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listExperimentResults(args: ListExperimentResultsInput): Promise<ListExperimentResultsOutput> {\n try {\n const { page, perPage: perPageInput } = args.pagination;\n\n const whereClause = {\n sql: ` WHERE ${quoteIdentifier('experimentId', 'column name')} = ?`,\n args: [args.experimentId] as any[],\n };\n\n const total = await this.operations.loadTotalCount({ tableName: TABLE_EXPERIMENT_RESULTS, whereClause });\n if (total === 0) {\n return {\n results: [],\n pagination: { total: 0, page, perPage: perPageInput, hasMore: false },\n };\n }\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<ExperimentResultRow>({\n tableName: TABLE_EXPERIMENT_RESULTS,\n whereClause,\n orderBy: `${quoteIdentifier('startedAt', 'column name')} ASC`,\n offset,\n limit: limitValue,\n });\n\n return {\n results: rows.map(row => this.mapExperimentResult(row)),\n pagination: {\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n },\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_LIST_EXPERIMENT_RESULTS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteExperimentResults(args: { experimentId: string }): Promise<void> {\n try {\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_EXPERIMENT_RESULTS)} WHERE ${quoteIdentifier('experimentId', 'column name')} = ?`,\n [args.experimentId],\n );\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_DELETE_EXPERIMENT_RESULTS_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 {\n FavoritesStorage,\n createStorageErrorId,\n TABLE_AGENTS,\n TABLE_SKILLS,\n TABLE_FAVORITES,\n TABLE_SCHEMAS,\n FAVORITES_SCHEMA,\n} from '@mastra/core/storage';\nimport type {\n CreateIndexOptions,\n StorageDeleteFavoritesForEntityInput,\n StorageIsFavoritedBatchInput,\n StorageListFavoritesInput,\n StorageFavoriteEntityType,\n StorageFavoriteKey,\n} from '@mastra/core/storage';\nimport type { FavoriteToggleResult } from '@mastra/core/storage/domains/favorites';\nimport type { Pool, RowDataPacket, ResultSetHeader } from 'mysql2/promise';\n\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL } from '../operations';\nimport { formatTableName, quoteIdentifier } from '../utils';\n\n/**\n * Maps a favorite entity type to its parent entity table.\n */\nconst ENTITY_TABLE: Record<StorageFavoriteEntityType, typeof TABLE_AGENTS | typeof TABLE_SKILLS> = {\n agent: TABLE_AGENTS,\n skill: TABLE_SKILLS,\n};\n\nexport class FavoritesMySQL extends FavoritesStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_FAVORITES] as const;\n\n /**\n * Returns default index definitions for the favorites domain tables.\n * Currently no default indexes are defined for favorites.\n */\n static getDefaultIndexDefs(_prefix: string = ''): CreateIndexOptions[] {\n return [];\n }\n\n /**\n * Exports DDL statements for all managed tables.\n */\n static getExportDDL(): string[] {\n return [\n generateTableSQL({\n tableName: TABLE_FAVORITES,\n schema: TABLE_SCHEMAS[TABLE_FAVORITES],\n compositePrimaryKey: ['userId', 'entityType', 'entityId'],\n }),\n ];\n }\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx => (FavoritesMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n /**\n * Returns default index definitions for the favorites domain tables.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return FavoritesMySQL.getDefaultIndexDefs('');\n }\n\n /**\n * Creates default indexes for optimal query performance.\n * Currently no default indexes are defined for favorites.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n // No default indexes for favorites domain\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({\n tableName: TABLE_FAVORITES,\n schema: FAVORITES_SCHEMA,\n });\n\n // Ensure unique constraint exists for idempotency (MySQL doesn't allow TEXT in PK without key length)\n const tableName = formatTableName(TABLE_FAVORITES);\n const [idxCheck] = await this.pool.execute<RowDataPacket[]>(\n `SELECT INDEX_NAME FROM information_schema.STATISTICS \n WHERE TABLE_SCHEMA = DATABASE() \n AND TABLE_NAME = ? \n AND INDEX_NAME = 'unique_favorite'`,\n [TABLE_FAVORITES],\n );\n\n if (idxCheck.length === 0) {\n // Add unique index with key lengths (MySQL requires this for TEXT columns)\n // Using 255 chars per column (255 * 4 bytes for utf8mb4 = 1020 bytes each)\n await this.pool.execute(\n `CREATE UNIQUE INDEX unique_favorite ON ${tableName} (${quoteIdentifier('userId', 'index column')}(255), ${quoteIdentifier('entityType', 'index column')}(255), ${quoteIdentifier('entityId', 'index column')}(255))`,\n );\n }\n\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.operations.withTransaction(async connection => {\n await connection.execute(`DELETE FROM ${formatTableName(TABLE_FAVORITES)}`);\n // Reset denormalized counters on parent entities\n await connection.execute(\n `UPDATE ${formatTableName(TABLE_AGENTS)} SET ${quoteIdentifier('favoriteCount', 'column name')} = 0 WHERE ${quoteIdentifier('favoriteCount', 'column name')} > 0`,\n );\n await connection.execute(\n `UPDATE ${formatTableName(TABLE_SKILLS)} SET ${quoteIdentifier('favoriteCount', 'column name')} = 0 WHERE ${quoteIdentifier('favoriteCount', 'column name')} > 0`,\n );\n });\n }\n\n async favorite(input: StorageFavoriteKey): Promise<FavoriteToggleResult> {\n const { userId, entityType, entityId } = input;\n const entityTable = ENTITY_TABLE[entityType];\n\n try {\n return await this.operations.withTransaction(async connection => {\n // Verify entity exists\n const [entityRows] = await connection.execute<RowDataPacket[]>(\n `SELECT ${quoteIdentifier('favoriteCount', 'column name')} FROM ${formatTableName(entityTable)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [entityId],\n );\n if (!entityRows[0]) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'FAVORITE', 'ENTITY_NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `${entityType} ${entityId} not found`,\n details: { entityType, entityId },\n });\n }\n\n // Idempotent insert using INSERT IGNORE\n const [insertResult] = await connection.execute<ResultSetHeader>(\n `INSERT IGNORE INTO ${formatTableName(TABLE_FAVORITES)} (${quoteIdentifier('userId', 'column name')}, ${quoteIdentifier('entityType', 'column name')}, ${quoteIdentifier('entityId', 'column name')}, ${quoteIdentifier('createdAt', 'column name')}) VALUES (?, ?, ?, ?)`,\n [userId, entityType, entityId, new Date().toISOString()],\n );\n\n // Only bump counter when we actually inserted a new row\n if (insertResult.affectedRows > 0) {\n await connection.execute(\n `UPDATE ${formatTableName(entityTable)} SET ${quoteIdentifier('favoriteCount', 'column name')} = COALESCE(${quoteIdentifier('favoriteCount', 'column name')}, 0) + 1 WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [entityId],\n );\n }\n\n const [afterRows] = await connection.execute<RowDataPacket[]>(\n `SELECT ${quoteIdentifier('favoriteCount', 'column name')} FROM ${formatTableName(entityTable)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [entityId],\n );\n const favoriteCount = Number(afterRows[0]?.favoriteCount ?? 0);\n\n return { favorited: true, favoriteCount };\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'FAVORITE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { entityType, entityId },\n },\n error,\n );\n }\n }\n\n async unfavorite(input: StorageFavoriteKey): Promise<FavoriteToggleResult> {\n const { userId, entityType, entityId } = input;\n const entityTable = ENTITY_TABLE[entityType];\n\n try {\n return await this.operations.withTransaction(async connection => {\n const [entityRows] = await connection.execute<RowDataPacket[]>(\n `SELECT ${quoteIdentifier('favoriteCount', 'column name')} FROM ${formatTableName(entityTable)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [entityId],\n );\n if (!entityRows[0]) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UNFAVORITE', 'ENTITY_NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `${entityType} ${entityId} not found`,\n details: { entityType, entityId },\n });\n }\n\n const [deleteResult] = await connection.execute<ResultSetHeader>(\n `DELETE FROM ${formatTableName(TABLE_FAVORITES)} WHERE ${quoteIdentifier('userId', 'column name')} = ? AND ${quoteIdentifier('entityType', 'column name')} = ? AND ${quoteIdentifier('entityId', 'column name')} = ?`,\n [userId, entityType, entityId],\n );\n\n // Only decrement when we actually removed a row, clamp at 0\n if (deleteResult.affectedRows > 0) {\n await connection.execute(\n `UPDATE ${formatTableName(entityTable)} SET ${quoteIdentifier('favoriteCount', 'column name')} = GREATEST(COALESCE(${quoteIdentifier('favoriteCount', 'column name')}, 0) - 1, 0) WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [entityId],\n );\n }\n\n const [afterRows] = await connection.execute<RowDataPacket[]>(\n `SELECT ${quoteIdentifier('favoriteCount', 'column name')} FROM ${formatTableName(entityTable)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [entityId],\n );\n const favoriteCount = Number(afterRows[0]?.favoriteCount ?? 0);\n\n return { favorited: false, favoriteCount };\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'UNFAVORITE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { entityType, entityId },\n },\n error,\n );\n }\n }\n\n async isFavorited(input: StorageFavoriteKey): Promise<boolean> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT 1 FROM ${formatTableName(TABLE_FAVORITES)} WHERE ${quoteIdentifier('userId', 'column name')} = ? AND ${quoteIdentifier('entityType', 'column name')} = ? AND ${quoteIdentifier('entityId', 'column name')} = ? LIMIT 1`,\n [input.userId, input.entityType, input.entityId],\n );\n return rows.length > 0;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'IS_FAVORITED', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async isFavoritedBatch(input: StorageIsFavoritedBatchInput): Promise<Set<string>> {\n const { userId, entityType, entityIds } = input;\n if (entityIds.length === 0) {\n return new Set();\n }\n\n try {\n const placeholders = entityIds.map(() => '?').join(', ');\n const args = [userId, entityType, ...entityIds];\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT ${quoteIdentifier('entityId', 'column name')} FROM ${formatTableName(TABLE_FAVORITES)} WHERE ${quoteIdentifier('userId', 'column name')} = ? AND ${quoteIdentifier('entityType', 'column name')} = ? AND ${quoteIdentifier('entityId', 'column name')} IN (${placeholders})`,\n args,\n );\n const set = new Set<string>();\n for (const row of rows) {\n set.add(row.entityId as string);\n }\n return set;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'IS_FAVORITED_BATCH', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listFavoritedIds(input: StorageListFavoritesInput): Promise<string[]> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT ${quoteIdentifier('entityId', 'column name')} FROM ${formatTableName(TABLE_FAVORITES)} WHERE ${quoteIdentifier('userId', 'column name')} = ? AND ${quoteIdentifier('entityType', 'column name')} = ? ORDER BY ${quoteIdentifier('createdAt', 'column name')} DESC, ${quoteIdentifier('entityId', 'column name')} ASC`,\n [input.userId, input.entityType],\n );\n return rows.map(row => row.entityId as string);\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_FAVORITED_IDS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteFavoritesForEntity(input: StorageDeleteFavoritesForEntityInput): Promise<number> {\n const entityTable = ENTITY_TABLE[input.entityType];\n try {\n return await this.operations.withTransaction(async connection => {\n const [result] = await connection.execute<ResultSetHeader>(\n `DELETE FROM ${formatTableName(TABLE_FAVORITES)} WHERE ${quoteIdentifier('entityType', 'column name')} = ? AND ${quoteIdentifier('entityId', 'column name')} = ?`,\n [input.entityType, input.entityId],\n );\n // Reset the parent entity's favoriteCount\n await connection.execute(\n `UPDATE ${formatTableName(entityTable)} SET ${quoteIdentifier('favoriteCount', 'column name')} = 0 WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [input.entityId],\n );\n return result.affectedRows;\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_FAVORITES_FOR_ENTITY', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { entityType: input.entityType, entityId: input.entityId },\n },\n error,\n );\n }\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n MCPClientsStorage,\n createStorageErrorId,\n normalizePerPage,\n calculatePagination,\n TABLE_MCP_CLIENTS,\n TABLE_MCP_CLIENT_VERSIONS,\n TABLE_SCHEMAS,\n MCP_CLIENTS_SCHEMA,\n MCP_CLIENT_VERSIONS_SCHEMA,\n} from '@mastra/core/storage';\nimport type {\n CreateIndexOptions,\n StorageMCPClientType,\n StorageCreateMCPClientInput,\n StorageUpdateMCPClientInput,\n StorageListMCPClientsInput,\n StorageListMCPClientsOutput,\n} from '@mastra/core/storage';\nimport type {\n MCPClientVersion,\n CreateMCPClientVersionInput,\n ListMCPClientVersionsInput,\n ListMCPClientVersionsOutput,\n} from '@mastra/core/storage/domains/mcp-clients';\nimport type { Pool, RowDataPacket } from 'mysql2/promise';\n\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL } from '../operations';\nimport { formatTableName, quoteIdentifier } from '../utils';\n\nexport class MCPClientsMySQL extends MCPClientsStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_MCP_CLIENTS, TABLE_MCP_CLIENT_VERSIONS] as const;\n\n /**\n * Returns default index definitions for the mcp-clients domain tables.\n * Currently no default indexes are defined for mcp-clients.\n */\n static getDefaultIndexDefs(_prefix: string = ''): CreateIndexOptions[] {\n return [];\n }\n\n /**\n * Exports DDL statements for all managed tables.\n */\n static getExportDDL(): string[] {\n return [\n generateTableSQL({ tableName: TABLE_MCP_CLIENTS, schema: TABLE_SCHEMAS[TABLE_MCP_CLIENTS] }),\n generateTableSQL({ tableName: TABLE_MCP_CLIENT_VERSIONS, schema: TABLE_SCHEMAS[TABLE_MCP_CLIENT_VERSIONS] }),\n ];\n }\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx => (MCPClientsMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n /**\n * Returns default index definitions for the mcp-clients domain tables.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return MCPClientsMySQL.getDefaultIndexDefs('');\n }\n\n /**\n * Creates default indexes for optimal query performance.\n * Currently no default indexes are defined for mcp-clients.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n // No default indexes for mcp-clients domain\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({ tableName: TABLE_MCP_CLIENTS, schema: MCP_CLIENTS_SCHEMA });\n await this.operations.createTable({ tableName: TABLE_MCP_CLIENT_VERSIONS, schema: MCP_CLIENT_VERSIONS_SCHEMA });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.operations.clearTable({ tableName: TABLE_MCP_CLIENT_VERSIONS });\n await this.operations.clearTable({ tableName: TABLE_MCP_CLIENTS });\n }\n\n private safeParseJSON<T = unknown>(val: unknown): T | undefined {\n if (val === null || val === undefined) return undefined;\n if (typeof val === 'string') {\n try {\n return JSON.parse(val) as T;\n } catch {\n return val as T;\n }\n }\n return val as T;\n }\n\n private parseClientRow(row: Record<string, unknown>): StorageMCPClientType {\n return {\n id: row.id as string,\n status: (row.status as StorageMCPClientType['status']) ?? 'draft',\n activeVersionId: (row.activeVersionId as string) ?? undefined,\n authorId: (row.authorId as string) ?? undefined,\n metadata: this.safeParseJSON(row.metadata) as Record<string, unknown> | undefined,\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n updatedAt: row.updatedAt instanceof Date ? row.updatedAt : new Date(row.updatedAt as string),\n };\n }\n\n private parseVersionRow(row: Record<string, unknown>): MCPClientVersion {\n return {\n id: row.id as string,\n mcpClientId: row.mcpClientId as string,\n versionNumber: Number(row.versionNumber),\n name: row.name as string,\n description: (row.description as string) ?? undefined,\n servers: this.safeParseJSON(row.servers) as MCPClientVersion['servers'],\n changedFields: this.safeParseJSON(row.changedFields) as string[] | undefined,\n changeMessage: (row.changeMessage as string) ?? undefined,\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n };\n }\n\n async getById(id: string): Promise<StorageMCPClientType | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_MCP_CLIENTS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n return rows.length ? this.parseClientRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_MCP_CLIENT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async create(input: { mcpClient: StorageCreateMCPClientInput }): Promise<StorageMCPClientType> {\n const { mcpClient } = input;\n try {\n const now = new Date();\n await this.operations.insert({\n tableName: TABLE_MCP_CLIENTS,\n record: {\n id: mcpClient.id,\n status: 'draft',\n activeVersionId: null,\n authorId: mcpClient.authorId ?? null,\n metadata: mcpClient.metadata ?? null,\n createdAt: now,\n updatedAt: now,\n },\n });\n\n const { id: _id, authorId: _authorId, metadata: _metadata, ...snapshotConfig } = mcpClient;\n const versionId = crypto.randomUUID();\n try {\n await this.createVersion({\n id: versionId,\n mcpClientId: mcpClient.id,\n versionNumber: 1,\n ...snapshotConfig,\n changedFields: Object.keys(snapshotConfig),\n changeMessage: 'Initial version',\n });\n } catch (versionError) {\n try {\n await this.operations.delete({ tableName: TABLE_MCP_CLIENTS, keys: { id: mcpClient.id } });\n } catch (rollbackError) {\n console.error('Failed to rollback MCP client creation:', rollbackError);\n }\n throw versionError;\n }\n\n return {\n id: mcpClient.id,\n status: 'draft',\n activeVersionId: undefined,\n authorId: mcpClient.authorId,\n metadata: mcpClient.metadata,\n createdAt: now,\n updatedAt: now,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_MCP_CLIENT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async update(input: StorageUpdateMCPClientInput): Promise<StorageMCPClientType> {\n const { id, ...updates } = input;\n try {\n const existing = await this.getById(id);\n if (!existing) throw new Error(`MCP client with id ${id} not found`);\n\n const { authorId, activeVersionId, metadata, status } = updates;\n const updateData: Record<string, unknown> = { updatedAt: new Date() };\n if (authorId !== undefined) updateData.authorId = authorId;\n if (activeVersionId !== undefined) updateData.activeVersionId = activeVersionId;\n if (status !== undefined) updateData.status = status;\n if (metadata !== undefined) updateData.metadata = { ...existing.metadata, ...metadata };\n\n await this.operations.update({ tableName: TABLE_MCP_CLIENTS, keys: { id }, data: updateData });\n\n const updated = await this.getById(id);\n if (!updated)\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_MCP_CLIENT', 'NOT_FOUND_AFTER_UPDATE'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `MCP client ${id} not found after update`,\n details: { id },\n });\n return updated;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'UPDATE_MCP_CLIENT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async delete(id: string): Promise<void> {\n try {\n await this.deleteVersionsByParentId(id);\n await this.operations.delete({ tableName: TABLE_MCP_CLIENTS, keys: { id } });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_MCP_CLIENT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async list(args?: StorageListMCPClientsInput): Promise<StorageListMCPClientsOutput> {\n try {\n const { page = 0, perPage: perPageInput, orderBy, authorId, metadata, status = 'published' } = args || {};\n const { field, direction } = this.parseOrderBy(orderBy);\n\n const conditions: string[] = [];\n const queryParams: any[] = [];\n conditions.push(`${quoteIdentifier('status', 'column name')} = ?`);\n queryParams.push(status);\n if (authorId !== undefined) {\n conditions.push(`${quoteIdentifier('authorId', 'column name')} = ?`);\n queryParams.push(authorId);\n }\n if (metadata && Object.keys(metadata).length > 0) {\n for (const [key, value] of Object.entries(metadata)) {\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(key))\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'LIST_MCP_CLIENTS', 'INVALID_METADATA_KEY'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Invalid metadata key: ${key}`,\n details: { key },\n });\n if (typeof value === 'string') {\n conditions.push(\n `JSON_UNQUOTE(JSON_EXTRACT(${quoteIdentifier('metadata', 'column name')}, '$.${key}')) = ?`,\n );\n queryParams.push(value);\n } else {\n conditions.push(\n `JSON_EXTRACT(${quoteIdentifier('metadata', 'column name')}, '$.${key}') = CAST(? AS JSON)`,\n );\n queryParams.push(JSON.stringify(value));\n }\n }\n }\n\n const whereClause = { sql: ` WHERE ${conditions.join(' AND ')}`, args: queryParams };\n const total = await this.operations.loadTotalCount({ tableName: TABLE_MCP_CLIENTS, whereClause });\n if (total === 0) return { mcpClients: [], total: 0, page, perPage: perPageInput ?? 100, hasMore: false };\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_MCP_CLIENTS,\n whereClause,\n orderBy: `${quoteIdentifier(field, 'column name')} ${direction}`,\n offset,\n limit: limitValue,\n });\n\n return {\n mcpClients: rows.map(row => this.parseClientRow(row)),\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_MCP_CLIENTS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n // ==========================================================================\n // Version Methods\n // ==========================================================================\n\n async createVersion(input: CreateMCPClientVersionInput): Promise<MCPClientVersion> {\n try {\n const now = new Date();\n await this.operations.insert({\n tableName: TABLE_MCP_CLIENT_VERSIONS,\n record: {\n id: input.id,\n mcpClientId: input.mcpClientId,\n versionNumber: input.versionNumber,\n name: input.name,\n description: input.description ?? null,\n servers: input.servers ?? null,\n changedFields: input.changedFields ?? null,\n changeMessage: input.changeMessage ?? null,\n createdAt: now,\n },\n });\n return { ...input, createdAt: now };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_MCP_CLIENT_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getVersion(id: string): Promise<MCPClientVersion | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_MCP_CLIENT_VERSIONS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_MCP_CLIENT_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getVersionByNumber(mcpClientId: string, versionNumber: number): Promise<MCPClientVersion | null> {\n try {\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_MCP_CLIENT_VERSIONS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('mcpClientId', 'column name')} = ? AND ${quoteIdentifier('versionNumber', 'column name')} = ?`,\n args: [mcpClientId, versionNumber],\n },\n limit: 1,\n });\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_MCP_CLIENT_VERSION_BY_NUMBER', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getLatestVersion(mcpClientId: string): Promise<MCPClientVersion | null> {\n try {\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_MCP_CLIENT_VERSIONS,\n whereClause: { sql: ` WHERE ${quoteIdentifier('mcpClientId', 'column name')} = ?`, args: [mcpClientId] },\n orderBy: `${quoteIdentifier('versionNumber', 'column name')} DESC`,\n limit: 1,\n });\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_LATEST_MCP_CLIENT_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listVersions(input: ListMCPClientVersionsInput): Promise<ListMCPClientVersionsOutput> {\n try {\n const { mcpClientId, page = 0, perPage: perPageInput, orderBy } = input;\n const { field, direction } = this.parseVersionOrderBy(orderBy);\n const whereClause = { sql: ` WHERE ${quoteIdentifier('mcpClientId', 'column name')} = ?`, args: [mcpClientId] };\n const total = await this.operations.loadTotalCount({ tableName: TABLE_MCP_CLIENT_VERSIONS, whereClause });\n if (total === 0) return { versions: [], total: 0, page, perPage: perPageInput ?? 20, hasMore: false };\n\n const perPage = normalizePerPage(perPageInput, 20);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_MCP_CLIENT_VERSIONS,\n whereClause,\n orderBy: `${quoteIdentifier(field, 'column name')} ${direction}`,\n offset,\n limit: limitValue,\n });\n\n return {\n versions: rows.map(row => this.parseVersionRow(row)),\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_MCP_CLIENT_VERSIONS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteVersion(id: string): Promise<void> {\n try {\n await this.operations.delete({ tableName: TABLE_MCP_CLIENT_VERSIONS, keys: { id } });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_MCP_CLIENT_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteVersionsByParentId(entityId: string): Promise<void> {\n try {\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_MCP_CLIENT_VERSIONS)} WHERE ${quoteIdentifier('mcpClientId', 'column name')} = ?`,\n [entityId],\n );\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_MCP_CLIENT_VERSIONS_BY_CLIENT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async countVersions(mcpClientId: string): Promise<number> {\n try {\n return await this.operations.loadTotalCount({\n tableName: TABLE_MCP_CLIENT_VERSIONS,\n whereClause: { sql: ` WHERE ${quoteIdentifier('mcpClientId', 'column name')} = ?`, args: [mcpClientId] },\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'COUNT_MCP_CLIENT_VERSIONS', '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 {\n MCPServersStorage,\n createStorageErrorId,\n normalizePerPage,\n calculatePagination,\n TABLE_MCP_SERVERS,\n TABLE_MCP_SERVER_VERSIONS,\n TABLE_SCHEMAS,\n MCP_SERVERS_SCHEMA,\n MCP_SERVER_VERSIONS_SCHEMA,\n} from '@mastra/core/storage';\nimport type {\n CreateIndexOptions,\n StorageMCPServerType,\n StorageCreateMCPServerInput,\n StorageUpdateMCPServerInput,\n StorageListMCPServersInput,\n StorageListMCPServersOutput,\n} from '@mastra/core/storage';\nimport type {\n MCPServerVersion,\n CreateMCPServerVersionInput,\n ListMCPServerVersionsInput,\n ListMCPServerVersionsOutput,\n} from '@mastra/core/storage/domains/mcp-servers';\nimport type { Pool, RowDataPacket } from 'mysql2/promise';\n\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL } from '../operations';\nimport { formatTableName, quoteIdentifier } from '../utils';\n\nexport class MCPServersMySQL extends MCPServersStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_MCP_SERVERS, TABLE_MCP_SERVER_VERSIONS] as const;\n\n /**\n * Returns default index definitions for the mcp-servers domain tables.\n * Currently no default indexes are defined for mcp-servers.\n */\n static getDefaultIndexDefs(_prefix: string = ''): CreateIndexOptions[] {\n return [];\n }\n\n /**\n * Exports DDL statements for all managed tables.\n */\n static getExportDDL(): string[] {\n return [\n generateTableSQL({ tableName: TABLE_MCP_SERVERS, schema: TABLE_SCHEMAS[TABLE_MCP_SERVERS] }),\n generateTableSQL({ tableName: TABLE_MCP_SERVER_VERSIONS, schema: TABLE_SCHEMAS[TABLE_MCP_SERVER_VERSIONS] }),\n ];\n }\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx => (MCPServersMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n /**\n * Returns default index definitions for the mcp-servers domain tables.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return MCPServersMySQL.getDefaultIndexDefs('');\n }\n\n /**\n * Creates default indexes for optimal query performance.\n * Currently no default indexes are defined for mcp-servers.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n // No default indexes for mcp-servers domain\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({ tableName: TABLE_MCP_SERVERS, schema: MCP_SERVERS_SCHEMA });\n await this.operations.createTable({ tableName: TABLE_MCP_SERVER_VERSIONS, schema: MCP_SERVER_VERSIONS_SCHEMA });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.operations.clearTable({ tableName: TABLE_MCP_SERVER_VERSIONS });\n await this.operations.clearTable({ tableName: TABLE_MCP_SERVERS });\n }\n\n private safeParseJSON<T = unknown>(val: unknown): T | undefined {\n if (val === null || val === undefined) return undefined;\n if (typeof val === 'string') {\n try {\n return JSON.parse(val) as T;\n } catch {\n return val as T;\n }\n }\n return val as T;\n }\n\n private parseServerRow(row: Record<string, unknown>): StorageMCPServerType {\n return {\n id: row.id as string,\n status: (row.status as StorageMCPServerType['status']) ?? 'draft',\n activeVersionId: (row.activeVersionId as string) ?? undefined,\n authorId: (row.authorId as string) ?? undefined,\n metadata: this.safeParseJSON(row.metadata) as Record<string, unknown> | undefined,\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n updatedAt: row.updatedAt instanceof Date ? row.updatedAt : new Date(row.updatedAt as string),\n };\n }\n\n private parseVersionRow(row: Record<string, unknown>): MCPServerVersion {\n return {\n id: row.id as string,\n mcpServerId: row.mcpServerId as string,\n versionNumber: Number(row.versionNumber),\n name: row.name as string,\n version: row.version as string,\n description: (row.description as string) ?? undefined,\n instructions: (row.instructions as string) ?? undefined,\n repository: this.safeParseJSON(row.repository) as MCPServerVersion['repository'],\n releaseDate: (row.releaseDate as string) ?? undefined,\n isLatest:\n row.isLatest === null || row.isLatest === undefined\n ? undefined\n : Boolean(row.isLatest === true || row.isLatest === 1 || row.isLatest === '1'),\n packageCanonical: (row.packageCanonical as string) ?? undefined,\n tools: this.safeParseJSON(row.tools) as MCPServerVersion['tools'],\n agents: this.safeParseJSON(row.agents) as MCPServerVersion['agents'],\n workflows: this.safeParseJSON(row.workflows) as MCPServerVersion['workflows'],\n changedFields: this.safeParseJSON(row.changedFields) as string[] | undefined,\n changeMessage: (row.changeMessage as string) ?? undefined,\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n };\n }\n\n async getById(id: string): Promise<StorageMCPServerType | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_MCP_SERVERS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n return rows.length ? this.parseServerRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_MCP_SERVER', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async create(input: { mcpServer: StorageCreateMCPServerInput }): Promise<StorageMCPServerType> {\n const { mcpServer } = input;\n try {\n const now = new Date();\n await this.operations.insert({\n tableName: TABLE_MCP_SERVERS,\n record: {\n id: mcpServer.id,\n status: 'draft',\n activeVersionId: null,\n authorId: mcpServer.authorId ?? null,\n metadata: mcpServer.metadata ?? null,\n createdAt: now,\n updatedAt: now,\n },\n });\n\n const { id: _id, authorId: _authorId, metadata: _metadata, ...snapshotConfig } = mcpServer;\n const versionId = crypto.randomUUID();\n try {\n await this.createVersion({\n id: versionId,\n mcpServerId: mcpServer.id,\n versionNumber: 1,\n ...snapshotConfig,\n changedFields: Object.keys(snapshotConfig),\n changeMessage: 'Initial version',\n });\n } catch (versionError) {\n try {\n await this.operations.delete({ tableName: TABLE_MCP_SERVERS, keys: { id: mcpServer.id } });\n } catch (rollbackError) {\n console.error('Failed to rollback MCP server creation:', rollbackError);\n }\n throw versionError;\n }\n\n return {\n id: mcpServer.id,\n status: 'draft',\n activeVersionId: undefined,\n authorId: mcpServer.authorId,\n metadata: mcpServer.metadata,\n createdAt: now,\n updatedAt: now,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_MCP_SERVER', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async update(input: StorageUpdateMCPServerInput): Promise<StorageMCPServerType> {\n const { id, ...updates } = input;\n try {\n const existing = await this.getById(id);\n if (!existing) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_MCP_SERVER', 'NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `MCP server with id ${id} not found`,\n details: { id },\n });\n }\n\n const { authorId, activeVersionId, metadata, status } = updates;\n const updateData: Record<string, unknown> = { updatedAt: new Date() };\n if (authorId !== undefined) updateData.authorId = authorId;\n if (activeVersionId !== undefined) updateData.activeVersionId = activeVersionId;\n if (status !== undefined) updateData.status = status;\n if (metadata !== undefined) updateData.metadata = { ...existing.metadata, ...metadata };\n\n await this.operations.update({ tableName: TABLE_MCP_SERVERS, keys: { id }, data: updateData });\n\n const updated = await this.getById(id);\n if (!updated)\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_MCP_SERVER', 'NOT_FOUND_AFTER_UPDATE'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `MCP server ${id} not found after update`,\n details: { id },\n });\n return updated;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'UPDATE_MCP_SERVER', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async delete(id: string): Promise<void> {\n try {\n await this.deleteVersionsByParentId(id);\n await this.operations.delete({ tableName: TABLE_MCP_SERVERS, keys: { id } });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_MCP_SERVER', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async list(args?: StorageListMCPServersInput): Promise<StorageListMCPServersOutput> {\n try {\n const { page = 0, perPage: perPageInput, orderBy, authorId, metadata, status = 'published' } = args || {};\n const { field, direction } = this.parseOrderBy(orderBy);\n\n const conditions: string[] = [];\n const queryParams: any[] = [];\n conditions.push(`${quoteIdentifier('status', 'column name')} = ?`);\n queryParams.push(status);\n if (authorId !== undefined) {\n conditions.push(`${quoteIdentifier('authorId', 'column name')} = ?`);\n queryParams.push(authorId);\n }\n if (metadata && Object.keys(metadata).length > 0) {\n for (const [key, value] of Object.entries(metadata)) {\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(key))\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'LIST_MCP_SERVERS', 'INVALID_METADATA_KEY'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Invalid metadata key: ${key}`,\n details: { key },\n });\n if (typeof value === 'string') {\n conditions.push(\n `JSON_UNQUOTE(JSON_EXTRACT(${quoteIdentifier('metadata', 'column name')}, '$.${key}')) = ?`,\n );\n queryParams.push(value);\n } else {\n conditions.push(\n `JSON_EXTRACT(${quoteIdentifier('metadata', 'column name')}, '$.${key}') = CAST(? AS JSON)`,\n );\n queryParams.push(JSON.stringify(value));\n }\n }\n }\n\n const whereClause = { sql: ` WHERE ${conditions.join(' AND ')}`, args: queryParams };\n const total = await this.operations.loadTotalCount({ tableName: TABLE_MCP_SERVERS, whereClause });\n if (total === 0) return { mcpServers: [], total: 0, page, perPage: perPageInput ?? 100, hasMore: false };\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_MCP_SERVERS,\n whereClause,\n orderBy: `${quoteIdentifier(field, 'column name')} ${direction}`,\n offset,\n limit: limitValue,\n });\n\n return {\n mcpServers: rows.map(row => this.parseServerRow(row)),\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_MCP_SERVERS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n // ==========================================================================\n // Version Methods\n // ==========================================================================\n\n async createVersion(input: CreateMCPServerVersionInput): Promise<MCPServerVersion> {\n try {\n const now = new Date();\n await this.operations.insert({\n tableName: TABLE_MCP_SERVER_VERSIONS,\n record: {\n id: input.id,\n mcpServerId: input.mcpServerId,\n versionNumber: input.versionNumber,\n name: input.name,\n version: input.version,\n description: input.description ?? null,\n instructions: input.instructions ?? null,\n repository: input.repository ?? null,\n releaseDate: input.releaseDate ?? null,\n isLatest: input.isLatest ?? null,\n packageCanonical: input.packageCanonical ?? null,\n tools: input.tools ?? null,\n agents: input.agents ?? null,\n workflows: input.workflows ?? null,\n changedFields: input.changedFields ?? null,\n changeMessage: input.changeMessage ?? null,\n createdAt: now,\n },\n });\n return { ...input, createdAt: now };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_MCP_SERVER_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getVersion(id: string): Promise<MCPServerVersion | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_MCP_SERVER_VERSIONS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_MCP_SERVER_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getVersionByNumber(mcpServerId: string, versionNumber: number): Promise<MCPServerVersion | null> {\n try {\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_MCP_SERVER_VERSIONS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('mcpServerId', 'column name')} = ? AND ${quoteIdentifier('versionNumber', 'column name')} = ?`,\n args: [mcpServerId, versionNumber],\n },\n limit: 1,\n });\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_MCP_SERVER_VERSION_BY_NUMBER', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getLatestVersion(mcpServerId: string): Promise<MCPServerVersion | null> {\n try {\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_MCP_SERVER_VERSIONS,\n whereClause: { sql: ` WHERE ${quoteIdentifier('mcpServerId', 'column name')} = ?`, args: [mcpServerId] },\n orderBy: `${quoteIdentifier('versionNumber', 'column name')} DESC`,\n limit: 1,\n });\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_LATEST_MCP_SERVER_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listVersions(input: ListMCPServerVersionsInput): Promise<ListMCPServerVersionsOutput> {\n try {\n const { mcpServerId, page = 0, perPage: perPageInput, orderBy } = input;\n const { field, direction } = this.parseVersionOrderBy(orderBy);\n const whereClause = { sql: ` WHERE ${quoteIdentifier('mcpServerId', 'column name')} = ?`, args: [mcpServerId] };\n const total = await this.operations.loadTotalCount({ tableName: TABLE_MCP_SERVER_VERSIONS, whereClause });\n if (total === 0) return { versions: [], total: 0, page, perPage: perPageInput ?? 20, hasMore: false };\n\n const perPage = normalizePerPage(perPageInput, 20);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_MCP_SERVER_VERSIONS,\n whereClause,\n orderBy: `${quoteIdentifier(field, 'column name')} ${direction}`,\n offset,\n limit: limitValue,\n });\n\n return {\n versions: rows.map(row => this.parseVersionRow(row)),\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_MCP_SERVER_VERSIONS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteVersion(id: string): Promise<void> {\n try {\n await this.operations.delete({ tableName: TABLE_MCP_SERVER_VERSIONS, keys: { id } });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_MCP_SERVER_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteVersionsByParentId(entityId: string): Promise<void> {\n try {\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_MCP_SERVER_VERSIONS)} WHERE ${quoteIdentifier('mcpServerId', 'column name')} = ?`,\n [entityId],\n );\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_MCP_SERVER_VERSIONS_BY_SERVER', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async countVersions(mcpServerId: string): Promise<number> {\n try {\n return await this.operations.loadTotalCount({\n tableName: TABLE_MCP_SERVER_VERSIONS,\n whereClause: { sql: ` WHERE ${quoteIdentifier('mcpServerId', 'column name')} = ?`, args: [mcpServerId] },\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'COUNT_MCP_SERVER_VERSIONS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n}\n","import { randomUUID } from 'node:crypto';\nimport { MessageList } from '@mastra/core/agent';\nimport type { MastraDBMessage, MastraMessageContentV2 } from '@mastra/core/agent';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { StorageThreadType } from '@mastra/core/memory';\nimport {\n MemoryStorage,\n TABLE_MESSAGES,\n TABLE_RESOURCES,\n TABLE_THREADS,\n TABLE_SCHEMAS,\n calculatePagination,\n normalizePerPage,\n createStorageErrorId,\n} from '@mastra/core/storage';\nimport type {\n BufferedObservationChunk,\n CreateIndexOptions,\n CreateObservationalMemoryInput,\n CreateReflectionGenerationInput,\n ObservationalMemoryHistoryOptions,\n ObservationalMemoryRecord,\n PaginationArgs,\n PaginationInfo,\n StorageCloneThreadInput,\n StorageCloneThreadOutput,\n StorageListMessagesByResourceIdInput,\n StorageListMessagesInput,\n StorageListMessagesOutput,\n StorageListThreadsInput,\n StorageListThreadsOutput,\n StorageResourceType,\n SwapBufferedReflectionToActiveInput,\n SwapBufferedToActiveInput,\n SwapBufferedToActiveResult,\n ThreadCloneMetadata,\n ThreadSortOptions,\n UpdateActiveObservationsInput,\n UpdateBufferedObservationsInput,\n UpdateBufferedReflectionInput,\n} from '@mastra/core/storage';\nimport type { Pool, RowDataPacket, ResultSetHeader } from 'mysql2/promise';\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL, generateIndexSQL } from '../operations';\nimport { formatTableName, parseDateTime, quoteIdentifier, transformToSqlValue } from '../utils';\n\nconst OM_TABLE = 'mastra_observational_memory' as const;\nconst OM_TABLE_QUOTED = quoteIdentifier(OM_TABLE, 'table name');\n\nfunction emitValidationError(message: string): MastraError {\n return new MastraError({\n id: 'MYSQL_MEMORY_VALIDATION_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: message,\n });\n}\n\nfunction omCol(name: string): string {\n return quoteIdentifier(name, 'column name');\n}\n\nfunction rethrowOrWrapOM(error: unknown, id: string, operation: string, details?: Record<string, any>): never {\n if (error instanceof MastraError) {\n throw error;\n }\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', operation, 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: details ?? { id },\n },\n error,\n );\n}\n\nfunction throwOMNotFound(id: string, operation: string, details?: Record<string, any>): never {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', operation, 'NOT_FOUND'),\n text: `Observational memory record not found: ${id}`,\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: details ?? { id },\n });\n}\n\nfunction parseMySQLBool(value: unknown): boolean {\n return value === true || value === 1 || value === '1';\n}\n\nfunction parseJSONColumn<T>(value: unknown): T | undefined {\n if (!value) return undefined;\n if (typeof value === 'string') return JSON.parse(value) as T;\n return value as T;\n}\n\nfunction parseBufferedChunks(raw: unknown): BufferedObservationChunk[] {\n if (!raw) return [];\n try {\n const parsed = typeof raw === 'string' ? JSON.parse(raw) : raw;\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n}\n\ninterface ThreadRow {\n id: string;\n resourceId: string;\n title: string;\n metadata: string | Record<string, unknown> | null;\n createdAt: Date | string;\n updatedAt: Date | string;\n}\n\ninterface MessageRow {\n id: string;\n thread_id: string;\n content: string | Record<string, unknown>;\n role: MastraDBMessage['role'];\n type: string | null;\n createdAt: Date | string;\n resourceId: string | null;\n}\n\ninterface ResourceRow {\n id: string;\n workingMemory: string | null;\n metadata: string | Record<string, unknown> | null;\n createdAt: Date | string;\n updatedAt: Date | string;\n}\n\nfunction parseJSON<T>(value: T | string | null | undefined): T | null {\n if (value === null || value === undefined) return null;\n if (typeof value === 'object') return value as T;\n if (typeof value !== 'string') return null;\n if (!value) return null;\n try {\n return JSON.parse(value) as T;\n } catch {\n return null;\n }\n}\n\nexport class MemoryMySQL extends MemoryStorage {\n readonly supportsObservationalMemory = true;\n\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n static readonly MANAGED_TABLES = [TABLE_THREADS, TABLE_MESSAGES, TABLE_RESOURCES] as const;\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx => (MemoryMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({ tableName: TABLE_THREADS, schema: TABLE_SCHEMAS[TABLE_THREADS] });\n await this.operations.createTable({ tableName: TABLE_MESSAGES, schema: TABLE_SCHEMAS[TABLE_MESSAGES] });\n await this.operations.createTable({ tableName: TABLE_RESOURCES, schema: TABLE_SCHEMAS[TABLE_RESOURCES] });\n\n // Dynamically import OM schema to avoid crashing on older @mastra/core versions\n let omSchema: Record<string, any> | undefined;\n try {\n const { OBSERVATIONAL_MEMORY_TABLE_SCHEMA } = await import('@mastra/core/storage');\n omSchema = OBSERVATIONAL_MEMORY_TABLE_SCHEMA?.[OM_TABLE];\n } catch {\n // Older @mastra/core without OM support\n }\n\n if (omSchema) {\n await this.operations.createTable({\n tableName: OM_TABLE as any,\n schema: omSchema,\n });\n await this.operations.alterTable({\n tableName: OM_TABLE as any,\n schema: omSchema,\n ifNotExists: [\n 'observedMessageIds',\n 'observedTimezone',\n 'bufferedObservations',\n 'bufferedObservationTokens',\n 'bufferedMessageIds',\n 'bufferedReflection',\n 'bufferedReflectionTokens',\n 'bufferedReflectionInputTokens',\n 'reflectedObservationLineCount',\n 'bufferedObservationChunks',\n 'isBufferingObservation',\n 'isBufferingReflection',\n 'lastBufferedAtTokens',\n 'lastBufferedAtTime',\n ],\n });\n }\n\n // Add resourceId column for backwards compatibility\n await this.operations.alterTable({\n tableName: TABLE_MESSAGES,\n schema: TABLE_SCHEMAS[TABLE_MESSAGES],\n ifNotExists: ['resourceId'],\n });\n\n if (omSchema) {\n // Create index on lookupKey for efficient OM queries\n // MySQL does not support CREATE INDEX IF NOT EXISTS, so catch ER_DUP_KEYNAME (errno 1061)\n try {\n await this.pool.execute(\n `CREATE INDEX idx_om_lookup_key ON ${OM_TABLE_QUOTED} (${quoteIdentifier('lookupKey', 'column name')}(191))`,\n );\n } catch (err: any) {\n if (err?.errno !== 1061) {\n throw err;\n }\n }\n }\n\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n static getDefaultIndexDefs(prefix: string = ''): CreateIndexOptions[] {\n return [\n {\n name: `${prefix}mastra_threads_resourceid_createdat_idx`,\n table: TABLE_THREADS,\n columns: ['resourceId', 'createdAt DESC'],\n },\n {\n name: `${prefix}mastra_messages_thread_id_createdat_idx`,\n table: TABLE_MESSAGES,\n columns: ['thread_id', 'createdAt DESC'],\n },\n ];\n }\n\n static getExportDDL(): string[] {\n const statements: string[] = [];\n\n for (const tableName of [TABLE_THREADS, TABLE_MESSAGES, TABLE_RESOURCES] as const) {\n statements.push(\n generateTableSQL({\n tableName,\n schema: TABLE_SCHEMAS[tableName],\n }),\n );\n }\n\n for (const idx of MemoryMySQL.getDefaultIndexDefs()) {\n statements.push(generateIndexSQL(idx));\n }\n\n return statements;\n }\n\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return MemoryMySQL.getDefaultIndexDefs('');\n }\n\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n for (const indexDef of this.getDefaultIndexDefinitions()) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.pool.execute(`DELETE FROM ${formatTableName(TABLE_MESSAGES)}`);\n await this.pool.execute(`DELETE FROM ${formatTableName(TABLE_THREADS)}`);\n await this.pool.execute(`DELETE FROM ${formatTableName(TABLE_RESOURCES)}`);\n try {\n await this.pool.execute(`DELETE FROM ${OM_TABLE_QUOTED}`);\n } catch (err: any) {\n // errno 1146 = ER_NO_SUCH_TABLE — table may not exist yet\n if (err?.errno !== 1146) {\n throw err;\n }\n }\n }\n\n private mapThread(row: ThreadRow): StorageThreadType {\n return {\n id: row.id,\n resourceId: row.resourceId,\n title: row.title,\n metadata: parseJSON<Record<string, unknown>>(row.metadata) ?? undefined,\n createdAt: parseDateTime(row.createdAt) ?? new Date(),\n updatedAt: parseDateTime(row.updatedAt) ?? new Date(),\n } satisfies StorageThreadType;\n }\n\n private mapMessage(row: MessageRow): MastraDBMessage {\n const createdAt = parseDateTime(row.createdAt) ?? new Date();\n let content: MastraMessageContentV2;\n content = row.content as MastraMessageContentV2;\n if (typeof row.content === 'string') {\n try {\n content = JSON.parse(row.content) as MastraMessageContentV2;\n } catch {\n // Wrap legacy v1 string content into v2 shape\n content = {\n format: 2,\n parts: [{ type: 'text', text: row.content } as any],\n content: row.content,\n } as MastraMessageContentV2;\n }\n }\n\n const message: MastraDBMessage = {\n id: row.id,\n threadId: row.thread_id,\n resourceId: row.resourceId ?? undefined,\n role: row.role,\n content,\n createdAt,\n };\n\n if (row.type && row.type !== 'v2') {\n message.type = row.type;\n }\n\n return message;\n }\n\n private async fetchMessagesForThread(threadId: string, limit?: number): Promise<MessageRow[]> {\n let sql = `SELECT id, thread_id, content, role, type, createdAt, resourceId FROM ${formatTableName(TABLE_MESSAGES)} WHERE ${quoteIdentifier('thread_id', 'column name')} = ? ORDER BY ${quoteIdentifier('createdAt', 'column name')} ASC`;\n const params: any[] = [threadId];\n if (limit && limit > 0) {\n sql += ` LIMIT ?`;\n params.push(limit);\n }\n const [rows] = await this.pool.execute<RowDataPacket[]>(sql, params);\n return rows as unknown as MessageRow[];\n }\n\n /**\n * Fetches included messages by ID, discovering their thread automatically.\n * This handles cross-thread includes where the include item doesn't specify a threadId.\n */\n private async _getIncludedMessages({\n include,\n }: {\n include: StorageListMessagesInput['include'];\n }): Promise<MessageRow[] | null> {\n if (!include || include.length === 0) return null;\n\n const tableName = formatTableName(TABLE_MESSAGES);\n const selectColumns = `id, thread_id, content, role, type, createdAt, resourceId`;\n\n // Phase 1: Batch-fetch metadata for all target messages\n const targetIds = include.map(inc => inc.id).filter(Boolean);\n if (targetIds.length === 0) return null;\n\n const idPlaceholders = targetIds.map(() => '?').join(', ');\n const [targetRows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT id, thread_id, createdAt FROM ${tableName} WHERE id IN (${idPlaceholders})`,\n targetIds,\n );\n\n if (!targetRows || targetRows.length === 0) return null;\n\n const targetMap = new Map(targetRows.map(r => [r.id, { threadId: r.thread_id, createdAt: r.createdAt }]));\n\n // Phase 2: Build UNION queries for each include item\n const unionQueries: string[] = [];\n const params: any[] = [];\n\n for (const inc of include) {\n const { id, withPreviousMessages = 0, withNextMessages = 0 } = inc;\n const target = targetMap.get(id);\n if (!target) continue;\n\n // Validate LIMIT values are safe integers\n const prevLimit = Math.max(0, Math.floor(withPreviousMessages + 1));\n const nextLimit = Math.max(0, Math.floor(withNextMessages));\n\n // Fetch the target message plus previous messages\n unionQueries.push(`(\n SELECT ${selectColumns}\n FROM ${tableName} m\n WHERE m.thread_id = ?\n AND m.createdAt <= ?\n ORDER BY m.createdAt DESC, m.id DESC\n LIMIT ${prevLimit}\n )`);\n params.push(target.threadId, target.createdAt);\n\n // Fetch messages after the target (only if requested)\n if (nextLimit > 0) {\n unionQueries.push(`(\n SELECT ${selectColumns}\n FROM ${tableName} m\n WHERE m.thread_id = ?\n AND m.createdAt > ?\n ORDER BY m.createdAt ASC, m.id ASC\n LIMIT ${nextLimit}\n )`);\n params.push(target.threadId, target.createdAt);\n }\n }\n\n if (unionQueries.length === 0) return null;\n\n // Combine queries with UNION ALL and sort\n const finalQuery = `SELECT * FROM (${unionQueries.join(' UNION ALL ')}) AS combined ORDER BY createdAt ASC, id ASC`;\n const [rows] = await this.pool.execute<RowDataPacket[]>(finalQuery, params);\n\n return rows as unknown as MessageRow[];\n }\n\n private async collectIncludeMessages({\n threadId,\n include,\n messagesByThread,\n }: {\n threadId: string;\n include?: StorageListMessagesInput['include'];\n messagesByThread: Map<string, MastraDBMessage[]>;\n }): Promise<MastraDBMessage[]> {\n if (!include?.length) return [];\n\n const includeMessages: MastraDBMessage[] = [];\n const seenIds = new Set<string>();\n\n for (const inc of include) {\n const targetThreadId = inc.threadId ?? threadId;\n\n let threadMessages = messagesByThread.get(targetThreadId);\n if (!threadMessages) {\n const rows = await this.fetchMessagesForThread(targetThreadId);\n threadMessages = rows.map(row => this.mapMessage(row));\n messagesByThread.set(targetThreadId, threadMessages);\n }\n\n // If the current cached set might be partial (e.g., paginated main thread), reload full thread\n const needsContext =\n (inc.withPreviousMessages ?? 0) > 0 ||\n (inc.withNextMessages ?? 0) > 0 ||\n threadMessages.length < (inc.withNextMessages ?? 0) + (inc.withPreviousMessages ?? 0) + 1;\n if (needsContext) {\n const rows = await this.fetchMessagesForThread(targetThreadId);\n threadMessages = rows.map(row => this.mapMessage(row));\n messagesByThread.set(targetThreadId, threadMessages);\n }\n\n const targetIndex = threadMessages.findIndex(msg => msg.id === inc.id);\n if (targetIndex === -1) continue;\n\n // Add the target message itself if not already included\n if (!seenIds.has(inc.id)) {\n seenIds.add(inc.id);\n includeMessages.push(threadMessages[targetIndex]!);\n }\n\n // Add previous messages\n if (inc.withPreviousMessages) {\n const start = Math.max(0, targetIndex - inc.withPreviousMessages);\n for (let i = start; i < targetIndex; i++) {\n const message = threadMessages[i]!;\n if (!seenIds.has(message.id)) {\n seenIds.add(message.id);\n includeMessages.push(message);\n }\n }\n }\n\n // Add next messages\n if (inc.withNextMessages) {\n const end = Math.min(threadMessages.length, targetIndex + inc.withNextMessages + 1);\n for (let i = targetIndex + 1; i < end; i++) {\n const message = threadMessages[i]!;\n if (!seenIds.has(message.id)) {\n seenIds.add(message.id);\n includeMessages.push(message);\n }\n }\n }\n }\n\n return includeMessages;\n }\n\n private async upsertThread(thread: StorageThreadType): Promise<void> {\n await this.operations.insert({\n tableName: TABLE_THREADS,\n record: {\n id: thread.id,\n resourceId: thread.resourceId,\n title: thread.title,\n metadata: thread.metadata ? JSON.stringify(thread.metadata) : null,\n createdAt: thread.createdAt,\n updatedAt: thread.updatedAt,\n },\n });\n }\n\n async getThreadById({\n threadId,\n resourceId,\n }: {\n threadId: string;\n resourceId?: string;\n }): Promise<StorageThreadType | null> {\n try {\n let sql = `SELECT * FROM ${formatTableName(TABLE_THREADS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`;\n const params: any[] = [threadId];\n\n if (resourceId !== undefined) {\n sql += ` AND ${quoteIdentifier('resourceId', 'column name')} = ?`;\n params.push(resourceId);\n }\n\n const [rows] = await this.pool.execute<RowDataPacket[]>(sql, params);\n const row = rows[0];\n return row ? this.mapThread(row as ThreadRow) : null;\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_MEMORY_GET_THREAD_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { threadId, ...(resourceId !== undefined && { resourceId }) },\n },\n error,\n );\n }\n }\n\n public async listThreads(args: StorageListThreadsInput): Promise<StorageListThreadsOutput> {\n const { page = 0, perPage: perPageInput, orderBy, filter } = args;\n const { field, direction } = this.parseOrderBy(orderBy, 'DESC');\n const perPageNormalized = normalizePerPage(perPageInput, 100);\n const { offset, perPage } = calculatePagination(page, perPageInput, perPageNormalized);\n\n const conditions: string[] = [];\n const params: unknown[] = [];\n\n if (filter?.resourceId) {\n conditions.push(`${quoteIdentifier('resourceId', 'column name')} = ?`);\n params.push(filter.resourceId);\n }\n\n if (filter?.metadata && Object.keys(filter.metadata).length > 0) {\n for (const [key, value] of Object.entries(filter.metadata)) {\n conditions.push(`JSON_EXTRACT(\\`metadata\\`, ?) = CAST(? AS JSON)`);\n params.push(`$.${key}`, JSON.stringify(value));\n }\n }\n\n const whereClause =\n conditions.length > 0 ? { sql: ` WHERE ${conditions.join(' AND ')}`, args: params } : { sql: '', args: [] };\n\n try {\n const total = await this.operations.loadTotalCount({ tableName: TABLE_THREADS, whereClause });\n if (total === 0) {\n return { threads: [], total: 0, page, perPage, hasMore: false };\n }\n\n const limitValue = perPageInput === false ? total : perPageNormalized;\n const rows = await this.operations.loadMany<ThreadRow>({\n tableName: TABLE_THREADS,\n whereClause,\n orderBy: `${quoteIdentifier(field, 'column name')} ${direction}`,\n offset,\n limit: limitValue,\n });\n const threads = rows.map(row => this.mapThread(row));\n\n return {\n threads,\n total,\n page,\n perPage,\n hasMore: perPageInput === false ? false : offset + perPageNormalized < total,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_MEMORY_LIST_THREADS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { filter: JSON.stringify(filter ?? {}) },\n },\n error,\n );\n }\n }\n\n public async getThreadsByResourceId(args: { resourceId: string } & ThreadSortOptions): Promise<StorageThreadType[]> {\n const { threads } = await this.listThreads({\n filter: { resourceId: args.resourceId },\n orderBy: args.orderBy || args.sortDirection ? { field: args.orderBy, direction: args.sortDirection } : undefined,\n page: 0,\n perPage: false,\n });\n\n return threads;\n }\n\n public async getThreadsByResourceIdPaginated(\n args: {\n resourceId: string;\n } & PaginationArgs &\n ThreadSortOptions,\n ): Promise<PaginationInfo & { threads: StorageThreadType[] }> {\n return this.listThreads({\n filter: { resourceId: args.resourceId },\n page: args.page as number | undefined,\n perPage: args.perPage as number | false | undefined,\n orderBy: args.orderBy || args.sortDirection ? { field: args.orderBy, direction: args.sortDirection } : undefined,\n });\n }\n\n async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n try {\n await this.upsertThread(thread);\n return thread;\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_MEMORY_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 try {\n const existing = await this.getThreadById({ threadId: id });\n if (!existing) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_THREAD', 'NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Thread ${id} not found`,\n details: { threadId: id },\n });\n }\n\n const mergedMetadata = {\n ...(existing.metadata ?? {}),\n ...(metadata ?? {}),\n } as Record<string, unknown>;\n\n const updatedAt = new Date();\n await this.operations.update({\n tableName: TABLE_THREADS,\n keys: { id },\n data: {\n title,\n metadata: JSON.stringify(mergedMetadata),\n updatedAt,\n },\n });\n\n return {\n ...existing,\n title,\n metadata: mergedMetadata,\n updatedAt,\n } satisfies StorageThreadType;\n } catch (error) {\n if (error instanceof MastraError) {\n throw error;\n }\n throw new MastraError(\n {\n id: 'MYSQL_MEMORY_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 try {\n await this.operations.batchDelete({\n tableName: TABLE_MESSAGES,\n keys: [{ thread_id: threadId }],\n });\n await this.operations.delete({ tableName: TABLE_THREADS, keys: { id: threadId } });\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_MEMORY_DELETE_THREAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { threadId },\n },\n error,\n );\n }\n }\n\n async listMessagesById({ messageIds }: { messageIds: string[] }): Promise<{ messages: MastraDBMessage[] }> {\n if (messageIds.length === 0) return { messages: [] };\n\n const placeholders = messageIds.map(() => '?').join(', ');\n const sql = `SELECT id, thread_id, content, role, type, createdAt, resourceId FROM ${formatTableName(TABLE_MESSAGES)} WHERE id IN (${placeholders}) ORDER BY ${quoteIdentifier('createdAt', 'column name')} ASC`;\n\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(sql, messageIds);\n const messages = (rows as unknown as MessageRow[]).map(row => this.mapMessage(row));\n return { messages };\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_MEMORY_LIST_MESSAGES_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async saveMessages(args: { messages: MastraDBMessage[] }): Promise<{ messages: MastraDBMessage[] }> {\n const messages = args.messages;\n if (messages.length === 0) {\n return { messages: [] };\n }\n\n const threadIds = new Set<string>();\n for (const message of messages) {\n if (!message.threadId || !message.threadId.trim()) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'SAVE_MESSAGES', 'INVALID_INPUT'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'Thread ID is required',\n details: { messageId: message.id ?? null },\n });\n }\n threadIds.add(message.threadId);\n if (!message.resourceId) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'SAVE_MESSAGES', 'INVALID_INPUT'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Expected to find a resourceId for message, but couldn't find one. An unexpected error has occurred.`,\n details: { messageId: message.id ?? null, threadId: message.threadId },\n });\n }\n }\n\n for (const threadId of threadIds) {\n const existingThread = await this.getThreadById({ threadId });\n if (!existingThread) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'SAVE_MESSAGES', 'NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Thread ${threadId} not found`,\n details: { threadId },\n });\n }\n }\n\n const connection = await this.pool.getConnection();\n const affectedThreads = new Map<string, Date>();\n const insertedIds: string[] = [];\n\n try {\n await connection.beginTransaction();\n\n for (const message of messages) {\n if (!message.threadId) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'SAVE_MESSAGES', 'INVALID_INPUT'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'Message must have threadId',\n details: { messageId: message.id ?? null },\n });\n }\n const createdAt = message.createdAt ? new Date(message.createdAt) : new Date();\n const id = message.id ?? randomUUID();\n const record = {\n id,\n thread_id: message.threadId,\n content: JSON.stringify(message.content ?? message),\n role: message.role,\n type: message.type ?? 'v2',\n createdAt,\n resourceId: message.resourceId ?? null,\n } satisfies Record<string, any>;\n const statement = {\n sql: `INSERT INTO ${formatTableName(TABLE_MESSAGES)} (id, thread_id, content, role, type, createdAt, resourceId)\n VALUES (?, ?, ?, ?, ?, ?, ?)\n ON DUPLICATE KEY UPDATE thread_id = VALUES(thread_id), content = VALUES(content), role = VALUES(role), type = VALUES(type), resourceId = VALUES(resourceId)`,\n args: [\n record.id,\n record.thread_id,\n record.content,\n record.role,\n record.type,\n transformToSqlValue(record.createdAt),\n record.resourceId,\n ],\n };\n await connection.execute(statement.sql, statement.args);\n const currentMax = affectedThreads.get(record.thread_id);\n if (!currentMax || currentMax.getTime() < createdAt.getTime()) {\n affectedThreads.set(record.thread_id, createdAt);\n }\n insertedIds.push(record.id);\n }\n\n for (const [threadId, updatedAt] of affectedThreads.entries()) {\n await connection.execute(\n `UPDATE ${formatTableName(TABLE_THREADS)} SET ${quoteIdentifier('updatedAt', 'column name')} = ? WHERE id = ?`,\n [transformToSqlValue(updatedAt), threadId],\n );\n }\n\n await connection.commit();\n } catch (error) {\n await connection.rollback();\n if (error instanceof MastraError) {\n throw error;\n }\n throw new MastraError(\n {\n id: 'MYSQL_MEMORY_SAVE_MESSAGES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n } finally {\n connection.release();\n }\n\n const { messages: persisted } = await this.listMessagesById({ messageIds: insertedIds });\n const ordered = insertedIds.map(id => persisted.find(msg => msg.id === id)).filter(Boolean) as MastraDBMessage[];\n return { messages: ordered };\n }\n\n async updateMessages(args: {\n messages: (Partial<Omit<MastraDBMessage, 'createdAt'>> & {\n id: string;\n content?: Partial<MastraMessageContentV2>;\n })[];\n }): Promise<MastraDBMessage[]> {\n const { messages } = args;\n if (!messages.length) return [];\n\n try {\n const { messages: existing } = await this.listMessagesById({\n messageIds: messages.map(m => m.id),\n });\n const existingMap = new Map(existing.map(msg => [msg.id, msg]));\n\n const updates: { keys: Record<string, any>; data: Record<string, any> }[] = [];\n const affectedThreads = new Map<string, Date>();\n\n for (const update of messages) {\n const current = existingMap.get(update.id);\n if (!current) continue;\n\n const targetThreadId = update.threadId ?? current.threadId;\n if (!targetThreadId) {\n // If threadId is somehow missing, skip this update safely\n continue;\n }\n const data: Record<string, any> = {};\n\n if (update.threadId && update.threadId !== current.threadId) {\n data.thread_id = update.threadId;\n }\n if (update.role) {\n data.role = update.role;\n }\n if (update.type) {\n data.type = update.type;\n }\n if (update.resourceId !== undefined) {\n data.resourceId = update.resourceId;\n }\n\n if (update.content) {\n const existingContent = (current.content ?? {}) as Record<string, any>;\n const mergedContent: Record<string, any> = { ...existingContent, ...update.content };\n if (\n existingContent.metadata &&\n typeof existingContent.metadata === 'object' &&\n update.content.metadata &&\n typeof update.content.metadata === 'object'\n ) {\n mergedContent.metadata = {\n ...(existingContent.metadata as Record<string, any>),\n ...(update.content.metadata as Record<string, any>),\n };\n }\n data.content = JSON.stringify(mergedContent);\n }\n\n if (Object.keys(data).length === 0) {\n continue;\n }\n\n updates.push({ keys: { id: update.id }, data });\n\n const now = new Date();\n affectedThreads.set(targetThreadId, now);\n if (update.threadId && update.threadId !== current.threadId && current.threadId) {\n affectedThreads.set(current.threadId, now);\n }\n }\n\n if (!updates.length) {\n return existing;\n }\n\n await this.operations.batchUpdate({\n tableName: TABLE_MESSAGES,\n items: updates,\n });\n\n for (const [threadId, timestamp] of affectedThreads.entries()) {\n await this.operations.update({\n tableName: TABLE_THREADS,\n keys: { id: threadId },\n data: { updatedAt: timestamp },\n });\n }\n\n const { messages: updated } = await this.listMessagesById({ messageIds: messages.map(m => m.id) });\n return updated;\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_MEMORY_UPDATE_MESSAGES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteMessages(messageIds: string[]): Promise<void> {\n if (!messageIds.length) return;\n try {\n const placeholders = messageIds.map(() => '?').join(', ');\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT DISTINCT thread_id FROM ${formatTableName(TABLE_MESSAGES)} WHERE id IN (${placeholders})`,\n messageIds,\n );\n const threadIds = (rows as { thread_id: string | null }[])\n .map(row => row.thread_id)\n .filter((threadId): threadId is string => Boolean(threadId));\n\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_MESSAGES)} WHERE id IN (${placeholders})`,\n messageIds,\n );\n\n if (threadIds.length) {\n const threadPlaceholders = threadIds.map(() => '?').join(', ');\n const timestamp = transformToSqlValue(new Date());\n await this.pool.execute(\n `UPDATE ${formatTableName(TABLE_THREADS)} SET ${quoteIdentifier('updatedAt', 'column name')} = ? WHERE id IN (${threadPlaceholders})`,\n [timestamp, ...threadIds],\n );\n }\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_MEMORY_DELETE_MESSAGES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async cloneThread(args: StorageCloneThreadInput): Promise<StorageCloneThreadOutput> {\n const { sourceThreadId, newThreadId: providedThreadId, resourceId, title, metadata, options } = args;\n\n // Get the source thread\n const sourceThread = await this.getThreadById({ threadId: sourceThreadId });\n if (!sourceThread) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'CLONE_THREAD', 'SOURCE_NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Source thread with id ${sourceThreadId} not found`,\n details: { sourceThreadId },\n });\n }\n\n // Use provided ID or generate a new one\n const newThreadId = providedThreadId || randomUUID();\n\n // Check if the new thread ID already exists\n const existingThread = await this.getThreadById({ threadId: newThreadId });\n if (existingThread) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'CLONE_THREAD', 'THREAD_EXISTS'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Thread with id ${newThreadId} already exists`,\n details: { newThreadId },\n });\n }\n\n const connection = await this.pool.getConnection();\n try {\n await connection.beginTransaction();\n\n // Build message query with filters\n let messageQuery = `SELECT id, thread_id, content, role, type, createdAt, resourceId\n FROM ${formatTableName(TABLE_MESSAGES)} WHERE thread_id = ?`;\n const messageParams: any[] = [sourceThreadId];\n\n // Apply date filters\n if (options?.messageFilter?.startDate) {\n messageQuery += ` AND createdAt >= ?`;\n messageParams.push(transformToSqlValue(options.messageFilter.startDate));\n }\n if (options?.messageFilter?.endDate) {\n messageQuery += ` AND createdAt <= ?`;\n messageParams.push(transformToSqlValue(options.messageFilter.endDate));\n }\n\n // Apply message ID filter\n if (options?.messageFilter?.messageIds && options.messageFilter.messageIds.length > 0) {\n const placeholders = options.messageFilter.messageIds.map(() => '?').join(', ');\n messageQuery += ` AND id IN (${placeholders})`;\n messageParams.push(...options.messageFilter.messageIds);\n }\n\n messageQuery += ` ORDER BY createdAt ASC`;\n\n // Apply message limit (from most recent, so we need to reverse order for limit then sort back)\n if (options?.messageLimit && options.messageLimit > 0) {\n const limitQuery = `SELECT * FROM (${messageQuery.replace('ORDER BY createdAt ASC', 'ORDER BY createdAt DESC')} LIMIT ?) AS limited ORDER BY createdAt ASC`;\n messageParams.push(options.messageLimit);\n messageQuery = limitQuery;\n }\n\n const [sourceMessageRows] = await connection.execute<RowDataPacket[]>(messageQuery, messageParams);\n\n const now = new Date();\n\n // Determine the last message ID for clone metadata\n const lastMessageId =\n sourceMessageRows.length > 0 ? (sourceMessageRows[sourceMessageRows.length - 1] as any).id : undefined;\n\n // Create clone metadata\n const cloneMetadata: ThreadCloneMetadata = {\n sourceThreadId,\n clonedAt: now,\n ...(lastMessageId && { lastMessageId }),\n };\n\n // Create the new thread\n const newThread: StorageThreadType = {\n id: newThreadId,\n resourceId: resourceId || sourceThread.resourceId,\n title: title || (sourceThread.title ? `Clone of ${sourceThread.title}` : ''),\n metadata: {\n ...metadata,\n clone: cloneMetadata,\n },\n createdAt: now,\n updatedAt: now,\n };\n\n // Insert the new thread\n await connection.execute(\n `INSERT INTO ${formatTableName(TABLE_THREADS)} (id, resourceId, title, metadata, createdAt, updatedAt)\n VALUES (?, ?, ?, ?, ?, ?)`,\n [\n newThread.id,\n newThread.resourceId,\n newThread.title,\n newThread.metadata ? JSON.stringify(newThread.metadata) : null,\n transformToSqlValue(now),\n transformToSqlValue(now),\n ],\n );\n\n // Clone messages with new IDs\n const clonedMessages: MastraDBMessage[] = [];\n const messageIdMap: Record<string, string> = {};\n const targetResourceId = resourceId || sourceThread.resourceId;\n\n for (const sourceRow of sourceMessageRows) {\n const row = sourceRow as MessageRow;\n const newMessageId = randomUUID();\n messageIdMap[row.id] = newMessageId;\n\n let content = row.content;\n try {\n content = typeof content === 'string' ? JSON.parse(content) : content;\n } catch {\n // use content as-is\n }\n\n const msgCreatedAt = parseDateTime(row.createdAt) ?? now;\n\n await connection.execute(\n `INSERT INTO ${formatTableName(TABLE_MESSAGES)} (id, thread_id, content, createdAt, role, type, resourceId)\n VALUES (?, ?, ?, ?, ?, ?, ?)`,\n [\n newMessageId,\n newThreadId,\n typeof row.content === 'string' ? row.content : JSON.stringify(row.content),\n transformToSqlValue(msgCreatedAt),\n row.role,\n row.type || 'v2',\n targetResourceId,\n ],\n );\n\n clonedMessages.push({\n id: newMessageId,\n threadId: newThreadId,\n content: content as MastraMessageContentV2,\n role: row.role as MastraDBMessage['role'],\n type: row.type ?? undefined,\n createdAt: msgCreatedAt,\n resourceId: targetResourceId,\n });\n }\n\n await connection.commit();\n\n return {\n thread: newThread,\n clonedMessages,\n messageIdMap,\n };\n } catch (error) {\n await connection.rollback();\n if (error instanceof MastraError) {\n throw error;\n }\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CLONE_THREAD', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { sourceThreadId, newThreadId },\n },\n error,\n );\n } finally {\n connection.release();\n }\n }\n\n async listMessages(args: StorageListMessagesInput): Promise<StorageListMessagesOutput> {\n const { threadId, resourceId, filter, orderBy, page = 0, perPage: perPageInput } = args;\n const selectBy = (\n args as StorageListMessagesInput & {\n selectBy?: { include?: StorageListMessagesInput['include']; last?: number; vectorSearchString?: string };\n }\n ).selectBy;\n const include = args.include ?? selectBy?.include;\n\n // Normalize threadId to array\n const threadIds = Array.isArray(threadId) ? threadId : [threadId];\n\n if (threadIds.length === 0 || threadIds.some(id => !id.trim())) {\n throw emitValidationError('threadId must be a non-empty string or array of non-empty strings');\n }\n\n const primaryThreadId = threadIds[0]!;\n\n const normalizedPerPage = normalizePerPage(perPageInput, 40);\n const { offset, perPage } = calculatePagination(page, perPageInput, normalizedPerPage);\n\n const field = orderBy?.field ?? 'createdAt';\n const direction = (orderBy?.direction ?? 'ASC').toUpperCase() === 'DESC' ? 'DESC' : 'ASC';\n const comparator = (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 if (aValue == null && bValue == null) return a.id.localeCompare(b.id);\n if (aValue == null) return 1;\n if (bValue == null) return -1;\n if (aValue === bValue) return a.id.localeCompare(b.id);\n\n if (typeof aValue === 'number' && typeof bValue === 'number') {\n return direction === 'ASC' ? aValue - bValue : bValue - aValue;\n }\n return direction === 'ASC'\n ? String(aValue).localeCompare(String(bValue))\n : String(bValue).localeCompare(String(aValue));\n };\n\n try {\n const conditions: string[] = [];\n const params: any[] = [];\n\n if (threadIds.length === 1) {\n conditions.push(`${quoteIdentifier('thread_id', 'column name')} = ?`);\n params.push(threadIds[0]!);\n } else {\n const placeholders = threadIds.map(() => '?').join(', ');\n conditions.push(`${quoteIdentifier('thread_id', 'column name')} IN (${placeholders})`);\n params.push(...threadIds);\n }\n\n if (resourceId) {\n conditions.push(`${quoteIdentifier('resourceId', 'column name')} = ?`);\n params.push(resourceId);\n }\n\n if (filter?.dateRange?.start) {\n const startOp = filter.dateRange.startExclusive ? '>' : '>=';\n conditions.push(`${quoteIdentifier('createdAt', 'column name')} ${startOp} ?`);\n params.push(transformToSqlValue(filter.dateRange.start));\n }\n if (filter?.dateRange?.end) {\n const endOp = filter.dateRange.endExclusive ? '<' : '<=';\n conditions.push(`${quoteIdentifier('createdAt', 'column name')} ${endOp} ?`);\n params.push(transformToSqlValue(filter.dateRange.end));\n }\n\n if (selectBy?.vectorSearchString) {\n conditions.push(`${quoteIdentifier('content', 'column name')} LIKE ?`);\n params.push(`%${selectBy.vectorSearchString}%`);\n }\n\n const whereSql = conditions.length ? ` WHERE ${conditions.join(' AND ')}` : '';\n const tableName = formatTableName(TABLE_MESSAGES);\n\n // Fast path: perPage=0 with no includes returns empty immediately\n if (perPage === 0 && (!include || include.length === 0)) {\n return {\n messages: [],\n total: 0,\n page,\n perPage,\n hasMore: false,\n };\n }\n\n // Fast path: perPage=0 with includes skips COUNT and main query\n if (perPage === 0 && include && include.length > 0) {\n const includeRows = await this._getIncludedMessages({ include });\n if (!includeRows || includeRows.length === 0) {\n return {\n messages: [],\n total: 0,\n page,\n perPage,\n hasMore: false,\n };\n }\n\n const includeMessages = includeRows.map(row => this.mapMessage(row));\n const list = new MessageList();\n list.add(includeMessages, 'memory');\n const messages = list.get.all.db().sort(comparator);\n\n return {\n messages,\n total: 0,\n page,\n perPage,\n hasMore: false,\n };\n }\n\n const [countRows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT COUNT(*) as count FROM ${tableName}${whereSql}`,\n params,\n );\n const total = Number(countRows[0]?.count ?? 0);\n\n // If nothing to return and no include, short circuit\n if (total === 0 && (!include || include.length === 0)) {\n return {\n messages: [],\n total: 0,\n page,\n perPage,\n hasMore: false,\n };\n }\n\n // last takes precedence over perPage\n const lastLimit =\n selectBy?.last !== undefined\n ? typeof selectBy.last === 'number' && selectBy.last > 0\n ? selectBy.last\n : Number.MAX_SAFE_INTEGER\n : undefined;\n\n const limitValue = lastLimit !== undefined ? lastLimit : perPageInput === false ? total : normalizedPerPage;\n const safeLimit = Math.max(0, Number(limitValue));\n const safeOffset = lastLimit !== undefined ? Math.max(0, total - safeLimit) : Math.max(0, Number(offset));\n\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT id, thread_id, content, role, type, createdAt, resourceId FROM ${tableName}${whereSql} ORDER BY ${quoteIdentifier(field, 'column name')} ${direction} LIMIT ${safeLimit} OFFSET ${safeOffset}`,\n params,\n );\n\n const messagesByThread = new Map<string, MastraDBMessage[]>();\n const paginatedMain = (rows as unknown as MessageRow[]).map(row => this.mapMessage(row));\n messagesByThread.set(primaryThreadId, paginatedMain);\n\n const includeMessages = await this.collectIncludeMessages({\n threadId: primaryThreadId,\n include,\n messagesByThread,\n });\n\n const combinedMap = new Map<string, MastraDBMessage>();\n for (const msg of paginatedMain) combinedMap.set(msg.id, msg);\n for (const msg of includeMessages) combinedMap.set(msg.id, msg);\n\n const combinedMessages = Array.from(combinedMap.values()).sort(comparator);\n\n const list = new MessageList();\n list.add(combinedMessages, 'memory');\n const normalizedMessages = list.get.all.db();\n const messages = [...normalizedMessages].sort(comparator);\n\n const baseHasMore = perPageInput === false ? false : safeOffset + safeLimit < total;\n\n const threadIdSet = new Set(threadIds);\n const mainThreadMessageCount = messages.filter(\n msg => msg.threadId !== undefined && threadIdSet.has(msg.threadId),\n ).length;\n const hasMore = include && include.length ? (mainThreadMessageCount >= total ? false : baseHasMore) : baseHasMore;\n\n return {\n messages,\n total,\n page,\n perPage,\n hasMore,\n };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MYSQL_MEMORY_GET_MESSAGES_PAGINATED_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n threadId: Array.isArray(threadId) ? threadId.join(',') : threadId,\n resourceId: resourceId ?? '',\n page,\n },\n },\n error,\n );\n this.logger?.error?.(mastraError.toString());\n this.logger?.trackException?.(mastraError);\n return { messages: [], total: 0, page, perPage, hasMore: false };\n }\n }\n\n public async listMessagesByResourceId(\n args: StorageListMessagesByResourceIdInput,\n ): Promise<StorageListMessagesOutput> {\n const { resourceId, include, filter, perPage: perPageInput, page = 0, orderBy } = args;\n\n if (!resourceId || typeof resourceId !== 'string' || resourceId.trim().length === 0) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_MESSAGES', 'INVALID_QUERY'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { resourceId: resourceId ?? '' },\n },\n new Error('resourceId is required'),\n );\n }\n\n if (page < 0) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', '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 const perPage = normalizePerPage(perPageInput, 40);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n try {\n const { field, direction } = this.parseOrderBy(orderBy, 'ASC');\n\n const conditions: string[] = [];\n const params: any[] = [];\n\n conditions.push(`${quoteIdentifier('resourceId', 'column name')} = ?`);\n params.push(resourceId);\n\n if (filter?.dateRange?.start) {\n const startOp = filter.dateRange.startExclusive ? '>' : '>=';\n conditions.push(`${quoteIdentifier('createdAt', 'column name')} ${startOp} ?`);\n params.push(transformToSqlValue(filter.dateRange.start));\n }\n\n if (filter?.dateRange?.end) {\n const endOp = filter.dateRange.endExclusive ? '<' : '<=';\n conditions.push(`${quoteIdentifier('createdAt', 'column name')} ${endOp} ?`);\n params.push(transformToSqlValue(filter.dateRange.end));\n }\n\n const whereSql = `WHERE ${conditions.join(' AND ')}`;\n const tableName = formatTableName(TABLE_MESSAGES);\n\n const [countRows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT COUNT(*) as count FROM ${tableName} ${whereSql}`,\n params,\n );\n const total = Number(countRows[0]?.count ?? 0);\n\n if (total === 0 && (!include || include.length === 0)) {\n return {\n messages: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n const limitValue = perPageInput === false ? total : perPage;\n\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT id, thread_id, content, role, type, createdAt, resourceId FROM ${tableName} ${whereSql} ORDER BY ${quoteIdentifier(field, 'column name')} ${direction} LIMIT ${Number(limitValue)} OFFSET ${Number(offset)}`,\n params,\n );\n const messages: MastraDBMessage[] = (rows as unknown as MessageRow[]).map(row => this.mapMessage(row));\n\n const messageIds = new Set(messages.map(m => m.id));\n if (include && include.length > 0) {\n // For listMessagesByResourceId, resolve threadId for include items that don't have one\n const resolvedInclude = await Promise.all(\n include.map(async inc => {\n if (inc.threadId) return inc;\n // Look up the message's thread_id\n const [msgRows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT thread_id FROM ${tableName} WHERE id = ? LIMIT 1`,\n [inc.id],\n );\n const threadId = msgRows?.[0]?.thread_id as string | undefined;\n return threadId ? { ...inc, threadId } : inc;\n }),\n );\n const validInclude = resolvedInclude.filter(inc => inc.threadId);\n if (validInclude.length > 0) {\n const messagesByThread = new Map<string, MastraDBMessage[]>();\n const includeMessages = await this.collectIncludeMessages({\n threadId: validInclude[0]!.threadId!,\n include: validInclude,\n messagesByThread,\n });\n for (const includeMsg of includeMessages) {\n if (!messageIds.has(includeMsg.id)) {\n messages.push(includeMsg);\n messageIds.add(includeMsg.id);\n }\n }\n }\n }\n\n const list = new MessageList().add(messages, 'memory');\n let finalMessages = list.get.all.db();\n\n finalMessages = finalMessages.sort((a, b) => {\n const isDateField = field === 'createdAt' || field === 'updatedAt';\n const aValue = isDateField ? new Date((a as any)[field]).getTime() : (a as any)[field];\n const bValue = isDateField ? new Date((b as any)[field]).getTime() : (b as any)[field];\n\n if (typeof aValue === 'number' && typeof bValue === 'number') {\n return direction === 'ASC' ? aValue - bValue : bValue - aValue;\n }\n return direction === 'ASC'\n ? String(aValue).localeCompare(String(bValue))\n : String(bValue).localeCompare(String(aValue));\n });\n\n const hasMore = perPageInput !== false && offset + perPage < total;\n\n return {\n messages: finalMessages,\n total,\n page,\n perPage: perPageForResponse,\n hasMore,\n };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_MESSAGES', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { resourceId },\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 getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n try {\n const row = await this.operations.load<ResourceRow>({\n tableName: TABLE_RESOURCES,\n keys: { id: resourceId },\n });\n if (!row) return null;\n\n const parsedMetadata =\n typeof row.metadata === 'string'\n ? parseJSON<Record<string, unknown>>(row.metadata)\n : (row.metadata as Record<string, unknown> | null | undefined);\n\n return {\n id: row.id,\n workingMemory: row.workingMemory ?? undefined,\n metadata: parsedMetadata ?? undefined,\n createdAt: parseDateTime(row.createdAt) ?? new Date(),\n updatedAt: parseDateTime(row.updatedAt) ?? new Date(),\n } satisfies StorageResourceType;\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_MEMORY_GET_RESOURCE_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 try {\n const metadataValue =\n resource.metadata === undefined || resource.metadata === null ? null : JSON.stringify(resource.metadata);\n await this.operations.insert({\n tableName: TABLE_RESOURCES,\n record: {\n id: resource.id,\n workingMemory: resource.workingMemory ?? null,\n metadata: metadataValue,\n createdAt: resource.createdAt ?? new Date(),\n updatedAt: resource.updatedAt ?? new Date(),\n },\n });\n return resource;\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_MEMORY_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 try {\n const existing = await this.getResourceById({ resourceId });\n\n if (!existing) {\n // Create new resource if not exists\n const newResource: StorageResourceType = {\n id: resourceId,\n workingMemory: workingMemory ?? '',\n metadata: metadata ?? {},\n createdAt: new Date(),\n updatedAt: new Date(),\n };\n return await this.saveResource({ resource: newResource });\n }\n\n const mergedMetadata =\n metadata !== undefined ? { ...(existing.metadata ?? {}), ...(metadata ?? {}) } : existing.metadata;\n const metadataValue =\n metadata !== undefined ? (metadata === null ? null : JSON.stringify(mergedMetadata ?? {})) : undefined;\n\n await this.operations.update({\n tableName: TABLE_RESOURCES,\n keys: { id: resourceId },\n data: {\n ...(workingMemory !== undefined ? { workingMemory } : {}),\n ...(metadataValue !== undefined ? { metadata: metadataValue } : {}),\n updatedAt: new Date(),\n },\n });\n const updated = await this.getResourceById({ resourceId });\n if (!updated) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_RESOURCE', 'NOT_FOUND_AFTER_UPDATE'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `Resource ${resourceId} not found after update`,\n details: { resourceId },\n });\n }\n return updated;\n } catch (error) {\n if (error instanceof MastraError) {\n throw error;\n }\n throw new MastraError(\n {\n id: 'MYSQL_MEMORY_UPDATE_RESOURCE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { resourceId },\n },\n error,\n );\n }\n }\n\n // ============================================\n // Observational Memory Methods\n // ============================================\n\n async getObservationalMemory(threadId: string | null, resourceId: string): Promise<ObservationalMemoryRecord | null> {\n try {\n const lookupKey = this.getOMKey(threadId, resourceId);\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${OM_TABLE_QUOTED} WHERE ${omCol('lookupKey')} = ? ORDER BY ${omCol('generationCount')} DESC LIMIT 1`,\n [lookupKey],\n );\n if (!rows || rows.length === 0) return null;\n return this.parseOMRow(rows[0]);\n } catch (error) {\n rethrowOrWrapOM(error, '', 'GET_OBSERVATIONAL_MEMORY', { threadId, resourceId });\n }\n }\n\n async getObservationalMemoryHistory(\n threadId: string | null,\n resourceId: string,\n limit: number = 10,\n options?: ObservationalMemoryHistoryOptions,\n ): Promise<ObservationalMemoryRecord[]> {\n try {\n const lookupKey = this.getOMKey(threadId, resourceId);\n const safeLimit = Math.max(1, Math.floor(Number(limit)) || 10);\n\n const conditions: string[] = [`${omCol('lookupKey')} = ?`];\n const params: any[] = [lookupKey];\n\n if (options?.from) {\n conditions.push(`${omCol('createdAt')} >= ?`);\n params.push(transformToSqlValue(options.from));\n }\n if (options?.to) {\n conditions.push(`${omCol('createdAt')} <= ?`);\n params.push(transformToSqlValue(options.to));\n }\n\n const whereClause = conditions.join(' AND ');\n let sql = `SELECT * FROM ${OM_TABLE_QUOTED} WHERE ${whereClause} ORDER BY ${omCol('generationCount')} DESC LIMIT ${safeLimit}`;\n\n if (options?.offset != null && options.offset > 0) {\n sql += ` OFFSET ${options.offset}`;\n }\n\n const [rows] = await this.pool.execute<RowDataPacket[]>(sql, params);\n if (!rows) return [];\n return rows.map(row => this.parseOMRow(row));\n } catch (error) {\n rethrowOrWrapOM(error, '', 'GET_OBSERVATIONAL_MEMORY_HISTORY', { threadId, resourceId, limit });\n }\n }\n\n async initializeObservationalMemory(input: CreateObservationalMemoryInput): Promise<ObservationalMemoryRecord> {\n try {\n const id = randomUUID();\n const now = new Date();\n const lookupKey = this.getOMKey(input.threadId, input.resourceId);\n\n const record: ObservationalMemoryRecord = {\n id,\n scope: input.scope,\n threadId: input.threadId,\n resourceId: input.resourceId,\n createdAt: now,\n updatedAt: now,\n lastObservedAt: undefined,\n originType: 'initial',\n generationCount: 0,\n activeObservations: '',\n totalTokensObserved: 0,\n observationTokenCount: 0,\n pendingMessageTokens: 0,\n isReflecting: false,\n isObserving: false,\n isBufferingObservation: false,\n isBufferingReflection: false,\n lastBufferedAtTokens: 0,\n lastBufferedAtTime: null,\n config: input.config,\n observedTimezone: input.observedTimezone,\n };\n\n const nowSql = transformToSqlValue(now);\n const cols = [\n 'id',\n 'lookupKey',\n 'scope',\n 'resourceId',\n 'threadId',\n 'activeObservations',\n 'activeObservationsPendingUpdate',\n 'originType',\n 'config',\n 'generationCount',\n 'lastObservedAt',\n 'lastReflectionAt',\n 'pendingMessageTokens',\n 'totalTokensObserved',\n 'observationTokenCount',\n 'isObserving',\n 'isReflecting',\n 'isBufferingObservation',\n 'isBufferingReflection',\n 'lastBufferedAtTokens',\n 'lastBufferedAtTime',\n 'observedTimezone',\n 'createdAt',\n 'updatedAt',\n ]\n .map(omCol)\n .join(', ');\n const placeholders = Array.from({ length: 24 }, () => '?').join(', ');\n\n await this.pool.execute(`INSERT INTO ${OM_TABLE_QUOTED} (${cols}) VALUES (${placeholders})`, [\n id,\n lookupKey,\n input.scope,\n input.resourceId,\n input.threadId || null,\n '',\n null,\n 'initial',\n JSON.stringify(input.config),\n 0,\n null,\n null,\n 0,\n 0,\n 0,\n false,\n false,\n false,\n false,\n 0,\n null,\n input.observedTimezone || null,\n nowSql,\n nowSql,\n ]);\n\n return record;\n } catch (error) {\n rethrowOrWrapOM(error, '', 'INITIALIZE_OBSERVATIONAL_MEMORY', {\n threadId: input.threadId,\n resourceId: input.resourceId,\n });\n }\n }\n\n async updateActiveObservations(input: UpdateActiveObservationsInput): Promise<void> {\n try {\n const now = new Date();\n const observedMessageIdsJson = input.observedMessageIds ? JSON.stringify(input.observedMessageIds) : null;\n\n const [result] = await this.pool.execute(\n `UPDATE ${OM_TABLE_QUOTED} SET\n ${omCol('activeObservations')} = ?,\n ${omCol('lastObservedAt')} = ?,\n ${omCol('pendingMessageTokens')} = 0,\n ${omCol('observationTokenCount')} = ?,\n ${omCol('totalTokensObserved')} = ${omCol('totalTokensObserved')} + ?,\n ${omCol('observedMessageIds')} = ?,\n ${omCol('updatedAt')} = ?\n WHERE ${omCol('id')} = ?`,\n [\n input.observations,\n transformToSqlValue(input.lastObservedAt),\n input.tokenCount,\n input.tokenCount,\n observedMessageIdsJson,\n transformToSqlValue(now),\n input.id,\n ],\n );\n\n if ((result as ResultSetHeader).affectedRows === 0) {\n throwOMNotFound(input.id, 'UPDATE_ACTIVE_OBSERVATIONS');\n }\n } catch (error) {\n rethrowOrWrapOM(error, input.id, 'UPDATE_ACTIVE_OBSERVATIONS');\n }\n }\n\n async createReflectionGeneration(input: CreateReflectionGenerationInput): Promise<ObservationalMemoryRecord> {\n try {\n const id = randomUUID();\n const now = new Date();\n const lookupKey = this.getOMKey(input.currentRecord.threadId, input.currentRecord.resourceId);\n\n const record: ObservationalMemoryRecord = {\n id,\n scope: input.currentRecord.scope,\n threadId: input.currentRecord.threadId,\n resourceId: input.currentRecord.resourceId,\n createdAt: now,\n updatedAt: now,\n lastObservedAt: input.currentRecord.lastObservedAt,\n originType: 'reflection',\n generationCount: input.currentRecord.generationCount + 1,\n activeObservations: input.reflection,\n totalTokensObserved: input.currentRecord.totalTokensObserved,\n observationTokenCount: input.tokenCount,\n pendingMessageTokens: 0,\n isReflecting: false,\n isObserving: false,\n isBufferingObservation: false,\n isBufferingReflection: false,\n lastBufferedAtTokens: 0,\n lastBufferedAtTime: null,\n config: input.currentRecord.config,\n metadata: input.currentRecord.metadata,\n observedTimezone: input.currentRecord.observedTimezone,\n };\n\n const nowSql = transformToSqlValue(now);\n const cols = [\n 'id',\n 'lookupKey',\n 'scope',\n 'resourceId',\n 'threadId',\n 'activeObservations',\n 'activeObservationsPendingUpdate',\n 'originType',\n 'config',\n 'generationCount',\n 'lastObservedAt',\n 'lastReflectionAt',\n 'pendingMessageTokens',\n 'totalTokensObserved',\n 'observationTokenCount',\n 'isObserving',\n 'isReflecting',\n 'isBufferingObservation',\n 'isBufferingReflection',\n 'lastBufferedAtTokens',\n 'lastBufferedAtTime',\n 'observedTimezone',\n 'createdAt',\n 'updatedAt',\n ]\n .map(omCol)\n .join(', ');\n const placeholders = Array.from({ length: 24 }, () => '?').join(', ');\n\n await this.pool.execute(`INSERT INTO ${OM_TABLE_QUOTED} (${cols}) VALUES (${placeholders})`, [\n id,\n lookupKey,\n record.scope,\n record.resourceId,\n record.threadId || null,\n input.reflection,\n null,\n 'reflection',\n JSON.stringify(record.config),\n input.currentRecord.generationCount + 1,\n record.lastObservedAt ? transformToSqlValue(record.lastObservedAt) : null,\n nowSql,\n record.pendingMessageTokens,\n record.totalTokensObserved,\n record.observationTokenCount,\n false,\n false,\n false,\n false,\n 0,\n null,\n record.observedTimezone || null,\n nowSql,\n nowSql,\n ]);\n\n return record;\n } catch (error) {\n rethrowOrWrapOM(error, input.currentRecord.id, 'CREATE_REFLECTION_GENERATION', {\n currentRecordId: input.currentRecord.id,\n });\n }\n }\n\n async setReflectingFlag(id: string, isReflecting: boolean): Promise<void> {\n await this.updateOMFlag(id, 'isReflecting', isReflecting, 'SET_REFLECTING_FLAG');\n }\n\n async setObservingFlag(id: string, isObserving: boolean): Promise<void> {\n await this.updateOMFlag(id, 'isObserving', isObserving, 'SET_OBSERVING_FLAG');\n }\n\n async setBufferingObservationFlag(id: string, isBuffering: boolean, lastBufferedAtTokens?: number): Promise<void> {\n try {\n const nowSql = transformToSqlValue(new Date());\n const sets = [\n `${omCol('isBufferingObservation')} = ?`,\n ...(lastBufferedAtTokens !== undefined ? [`${omCol('lastBufferedAtTokens')} = ?`] : []),\n `${omCol('updatedAt')} = ?`,\n ].join(', ');\n const params = [isBuffering, ...(lastBufferedAtTokens !== undefined ? [lastBufferedAtTokens] : []), nowSql, id];\n\n const [result] = await this.pool.execute(\n `UPDATE ${OM_TABLE_QUOTED} SET ${sets} WHERE ${omCol('id')} = ?`,\n params,\n );\n\n if ((result as ResultSetHeader).affectedRows === 0) {\n throwOMNotFound(id, 'SET_BUFFERING_OBSERVATION_FLAG');\n }\n } catch (error) {\n rethrowOrWrapOM(error, id, 'SET_BUFFERING_OBSERVATION_FLAG');\n }\n }\n\n async setBufferingReflectionFlag(id: string, isBuffering: boolean): Promise<void> {\n await this.updateOMFlag(id, 'isBufferingReflection', isBuffering, 'SET_BUFFERING_REFLECTION_FLAG');\n }\n\n async clearObservationalMemory(threadId: string | null, resourceId: string): Promise<void> {\n try {\n const lookupKey = this.getOMKey(threadId, resourceId);\n await this.pool.execute(`DELETE FROM ${OM_TABLE_QUOTED} WHERE ${omCol('lookupKey')} = ?`, [lookupKey]);\n } catch (error) {\n rethrowOrWrapOM(error, '', 'CLEAR_OBSERVATIONAL_MEMORY', { threadId, resourceId });\n }\n }\n\n async setPendingMessageTokens(id: string, tokenCount: number): Promise<void> {\n try {\n const [result] = await this.pool.execute(\n `UPDATE ${OM_TABLE_QUOTED} SET\n ${omCol('pendingMessageTokens')} = ?,\n ${omCol('updatedAt')} = ?\n WHERE ${omCol('id')} = ?`,\n [tokenCount, transformToSqlValue(new Date()), id],\n );\n\n if ((result as ResultSetHeader).affectedRows === 0) {\n throwOMNotFound(id, 'SET_PENDING_MESSAGE_TOKENS');\n }\n } catch (error) {\n rethrowOrWrapOM(error, id, 'SET_PENDING_MESSAGE_TOKENS');\n }\n }\n\n async updateBufferedObservations(input: UpdateBufferedObservationsInput): Promise<void> {\n try {\n const connection = await this.pool.getConnection();\n try {\n await connection.beginTransaction();\n\n const nowSql = transformToSqlValue(new Date());\n\n const [currentRows] = await connection.execute<RowDataPacket[]>(\n `SELECT ${omCol('bufferedObservationChunks')} FROM ${OM_TABLE_QUOTED} WHERE ${omCol('id')} = ? FOR UPDATE`,\n [input.id],\n );\n\n if (!currentRows || currentRows.length === 0) {\n throwOMNotFound(input.id, 'UPDATE_BUFFERED_OBSERVATIONS');\n }\n\n const existingChunks = parseBufferedChunks(currentRows[0]!.bufferedObservationChunks);\n\n const newChunk: BufferedObservationChunk = {\n id: `ombuf-${randomUUID()}`,\n cycleId: input.chunk.cycleId,\n observations: input.chunk.observations,\n tokenCount: input.chunk.tokenCount,\n messageIds: input.chunk.messageIds,\n messageTokens: input.chunk.messageTokens,\n lastObservedAt: input.chunk.lastObservedAt,\n createdAt: new Date(),\n suggestedContinuation: input.chunk.suggestedContinuation,\n currentTask: input.chunk.currentTask,\n };\n\n const newChunks = [...existingChunks, newChunk];\n const lastBufferedAtTime = input.lastBufferedAtTime ? transformToSqlValue(input.lastBufferedAtTime) : null;\n\n const [result] = await connection.execute(\n `UPDATE ${OM_TABLE_QUOTED} SET\n ${omCol('bufferedObservationChunks')} = ?,\n ${omCol('lastBufferedAtTime')} = COALESCE(?, ${omCol('lastBufferedAtTime')}),\n ${omCol('updatedAt')} = ?\n WHERE ${omCol('id')} = ?`,\n [JSON.stringify(newChunks), lastBufferedAtTime, nowSql, input.id],\n );\n\n if ((result as ResultSetHeader).affectedRows === 0) {\n throwOMNotFound(input.id, 'UPDATE_BUFFERED_OBSERVATIONS');\n }\n\n await connection.commit();\n } catch (error) {\n await connection.rollback();\n throw error;\n } finally {\n connection.release();\n }\n } catch (error) {\n rethrowOrWrapOM(error, input.id, 'UPDATE_BUFFERED_OBSERVATIONS');\n }\n }\n\n async swapBufferedToActive(input: SwapBufferedToActiveInput): Promise<SwapBufferedToActiveResult> {\n const connection = await this.pool.getConnection();\n try {\n await connection.beginTransaction();\n\n const nowSql = transformToSqlValue(new Date());\n\n const [currentRows] = await connection.execute<RowDataPacket[]>(\n `SELECT * FROM ${OM_TABLE_QUOTED} WHERE ${omCol('id')} = ? FOR UPDATE`,\n [input.id],\n );\n\n if (!currentRows || currentRows.length === 0) {\n throwOMNotFound(input.id, 'SWAP_BUFFERED_TO_ACTIVE');\n }\n\n const row = currentRows[0]!;\n const chunks = parseBufferedChunks(row.bufferedObservationChunks);\n\n if (chunks.length === 0) {\n await connection.commit();\n return {\n chunksActivated: 0,\n messageTokensActivated: 0,\n observationTokensActivated: 0,\n messagesActivated: 0,\n activatedCycleIds: [],\n activatedMessageIds: [],\n };\n }\n\n // Calculate target message tokens to activate\n const retentionFloor = input.messageTokensThreshold * (1 - input.activationRatio);\n const targetMessageTokens = Math.max(0, input.currentPendingTokens - retentionFloor);\n\n // Find the closest chunk boundary to the target\n let cumulativeMessageTokens = 0;\n let bestOverBoundary = 0;\n let bestOverTokens = 0;\n let bestUnderBoundary = 0;\n let bestUnderTokens = 0;\n\n for (let i = 0; i < chunks.length; i++) {\n cumulativeMessageTokens += chunks[i]!.messageTokens ?? 0;\n const boundary = i + 1;\n\n if (cumulativeMessageTokens >= targetMessageTokens) {\n if (bestOverBoundary === 0 || cumulativeMessageTokens < bestOverTokens) {\n bestOverBoundary = boundary;\n bestOverTokens = cumulativeMessageTokens;\n }\n } else {\n if (cumulativeMessageTokens > bestUnderTokens) {\n bestUnderBoundary = boundary;\n bestUnderTokens = cumulativeMessageTokens;\n }\n }\n }\n\n const maxOvershoot = retentionFloor * 0.95;\n const overshoot = bestOverTokens - targetMessageTokens;\n const remainingAfterOver = input.currentPendingTokens - bestOverTokens;\n const remainingAfterUnder = input.currentPendingTokens - bestUnderTokens;\n const minRemaining = Math.min(1000, retentionFloor);\n\n let chunksToActivate: number;\n if (input.forceMaxActivation && bestOverBoundary > 0 && remainingAfterOver >= minRemaining) {\n chunksToActivate = bestOverBoundary;\n } else if (bestOverBoundary > 0 && overshoot <= maxOvershoot && remainingAfterOver >= minRemaining) {\n chunksToActivate = bestOverBoundary;\n } else if (bestUnderBoundary > 0 && remainingAfterUnder >= minRemaining) {\n chunksToActivate = bestUnderBoundary;\n } else if (bestOverBoundary > 0) {\n chunksToActivate = bestOverBoundary;\n } else {\n chunksToActivate = 1;\n }\n\n // Split chunks\n const activatedChunks = chunks.slice(0, chunksToActivate);\n const remainingChunks = chunks.slice(chunksToActivate);\n\n // Combine activated observations\n const activatedContent = activatedChunks.map(c => c.observations).join('\\n\\n');\n const activatedTokens = activatedChunks.reduce((sum, c) => sum + c.tokenCount, 0);\n const activatedMessageTokens = activatedChunks.reduce((sum, c) => sum + (c.messageTokens ?? 0), 0);\n const activatedMessageCount = activatedChunks.reduce((sum, c) => sum + c.messageIds.length, 0);\n const activatedCycleIds = activatedChunks.map(c => c.cycleId).filter((cid): cid is string => !!cid);\n const activatedMessageIds = activatedChunks.flatMap(c => c.messageIds ?? []);\n\n // Derive lastObservedAt from the latest activated chunk\n const latestChunk = activatedChunks[activatedChunks.length - 1];\n const lastObservedAt =\n input.lastObservedAt ?? (latestChunk?.lastObservedAt ? new Date(latestChunk.lastObservedAt) : new Date());\n const lastObservedAtSql = transformToSqlValue(lastObservedAt);\n\n // Get existing values\n const existingActive = (row.activeObservations as string) || '';\n const existingTokenCount = Number(row.observationTokenCount || 0);\n\n // Calculate new values\n const newActive = existingActive ? `${existingActive}\\n\\n${activatedContent}` : activatedContent;\n const newTokenCount = existingTokenCount + activatedTokens;\n\n // Decrement pending message tokens (clamped to zero)\n const existingPending = Number(row.pendingMessageTokens || 0);\n const newPending = Math.max(0, existingPending - activatedMessageTokens);\n\n await connection.execute(\n `UPDATE ${OM_TABLE_QUOTED} SET\n ${omCol('activeObservations')} = ?,\n ${omCol('observationTokenCount')} = ?,\n ${omCol('pendingMessageTokens')} = ?,\n ${omCol('bufferedObservationChunks')} = ?,\n ${omCol('lastObservedAt')} = ?,\n ${omCol('updatedAt')} = ?\n WHERE ${omCol('id')} = ?`,\n [\n newActive,\n newTokenCount,\n newPending,\n remainingChunks.length > 0 ? JSON.stringify(remainingChunks) : null,\n lastObservedAtSql,\n nowSql,\n input.id,\n ],\n );\n\n await connection.commit();\n\n const latestChunkHints = activatedChunks[activatedChunks.length - 1];\n\n return {\n chunksActivated: activatedChunks.length,\n messageTokensActivated: activatedMessageTokens,\n observationTokensActivated: activatedTokens,\n messagesActivated: activatedMessageCount,\n activatedCycleIds,\n activatedMessageIds,\n observations: activatedContent,\n perChunk: activatedChunks.map(c => ({\n cycleId: c.cycleId ?? '',\n messageTokens: c.messageTokens ?? 0,\n observationTokens: c.tokenCount,\n messageCount: c.messageIds.length,\n observations: c.observations,\n })),\n suggestedContinuation: latestChunkHints?.suggestedContinuation ?? undefined,\n currentTask: latestChunkHints?.currentTask ?? undefined,\n };\n } catch (error) {\n await connection.rollback();\n rethrowOrWrapOM(error, input.id, 'SWAP_BUFFERED_TO_ACTIVE');\n } finally {\n connection.release();\n }\n }\n\n async updateBufferedReflection(input: UpdateBufferedReflectionInput): Promise<void> {\n try {\n const nowSql = transformToSqlValue(new Date());\n const br = omCol('bufferedReflection');\n\n const [result] = await this.pool.execute(\n `UPDATE ${OM_TABLE_QUOTED} SET\n ${br} = CASE\n WHEN ${br} IS NOT NULL AND ${br} != ''\n THEN CONCAT(${br}, CHAR(10), CHAR(10), ?)\n ELSE ?\n END,\n ${omCol('bufferedReflectionTokens')} = COALESCE(${omCol('bufferedReflectionTokens')}, 0) + ?,\n ${omCol('bufferedReflectionInputTokens')} = COALESCE(${omCol('bufferedReflectionInputTokens')}, 0) + ?,\n ${omCol('reflectedObservationLineCount')} = ?,\n ${omCol('updatedAt')} = ?\n WHERE ${omCol('id')} = ?`,\n [\n input.reflection,\n input.reflection,\n input.tokenCount,\n input.inputTokenCount,\n input.reflectedObservationLineCount,\n nowSql,\n input.id,\n ],\n );\n\n if ((result as ResultSetHeader).affectedRows === 0) {\n throwOMNotFound(input.id, 'UPDATE_BUFFERED_REFLECTION');\n }\n } catch (error) {\n rethrowOrWrapOM(error, input.id, 'UPDATE_BUFFERED_REFLECTION');\n }\n }\n\n async swapBufferedReflectionToActive(input: SwapBufferedReflectionToActiveInput): Promise<ObservationalMemoryRecord> {\n try {\n const [currentRows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${OM_TABLE_QUOTED} WHERE ${omCol('id')} = ?`,\n [input.currentRecord.id],\n );\n\n if (!currentRows || currentRows.length === 0) {\n throwOMNotFound(input.currentRecord.id, 'SWAP_BUFFERED_REFLECTION_TO_ACTIVE');\n }\n\n const row = currentRows[0]!;\n const bufferedReflection = (row.bufferedReflection as string) || '';\n const reflectedLineCount = Number(row.reflectedObservationLineCount || 0);\n\n if (!bufferedReflection) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'SWAP_BUFFERED_REFLECTION_TO_ACTIVE', 'NO_CONTENT'),\n text: 'No buffered reflection to swap',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { id: input.currentRecord.id },\n });\n }\n\n const currentObservations = (row.activeObservations as string) || '';\n const unreflectedContent = currentObservations.split('\\n').slice(reflectedLineCount).join('\\n').trim();\n\n const newObservations = unreflectedContent\n ? `${bufferedReflection}\\n\\n${unreflectedContent}`\n : bufferedReflection;\n\n const newRecord = await this.createReflectionGeneration({\n currentRecord: input.currentRecord,\n reflection: newObservations,\n tokenCount: input.tokenCount,\n });\n\n const nowSql = transformToSqlValue(new Date());\n await this.pool.execute(\n `UPDATE ${OM_TABLE_QUOTED} SET\n ${omCol('bufferedReflection')} = NULL,\n ${omCol('bufferedReflectionTokens')} = NULL,\n ${omCol('bufferedReflectionInputTokens')} = NULL,\n ${omCol('reflectedObservationLineCount')} = NULL,\n ${omCol('updatedAt')} = ?\n WHERE ${omCol('id')} = ?`,\n [nowSql, input.currentRecord.id],\n );\n\n return newRecord;\n } catch (error) {\n rethrowOrWrapOM(error, input.currentRecord.id, 'SWAP_BUFFERED_REFLECTION_TO_ACTIVE');\n }\n }\n\n private async updateOMFlag(id: string, column: string, value: boolean, operation: string): Promise<void> {\n try {\n const [result] = await this.pool.execute(\n `UPDATE ${OM_TABLE_QUOTED} SET ${omCol(column)} = ?, ${omCol('updatedAt')} = ? WHERE ${omCol('id')} = ?`,\n [value, transformToSqlValue(new Date()), id],\n );\n\n if ((result as ResultSetHeader).affectedRows === 0) {\n throwOMNotFound(id, operation);\n }\n } catch (error) {\n rethrowOrWrapOM(error, id, operation);\n }\n }\n\n private getOMKey(threadId: string | null, resourceId: string): string {\n return threadId ? `thread:${threadId}` : `resource:${resourceId}`;\n }\n\n private parseOMRow(row: any): ObservationalMemoryRecord {\n return {\n id: row.id,\n scope: row.scope,\n threadId: row.threadId || null,\n resourceId: row.resourceId,\n createdAt: parseDateTime(row.createdAt) ?? new Date(),\n updatedAt: parseDateTime(row.updatedAt) ?? new Date(),\n lastObservedAt: row.lastObservedAt ? parseDateTime(row.lastObservedAt) : undefined,\n originType: row.originType || 'initial',\n generationCount: Number(row.generationCount || 0),\n activeObservations: row.activeObservations || '',\n bufferedObservationChunks: parseJSONColumn<BufferedObservationChunk[]>(row.bufferedObservationChunks),\n bufferedObservations: row.activeObservationsPendingUpdate || undefined,\n bufferedObservationTokens: row.bufferedObservationTokens ? Number(row.bufferedObservationTokens) : undefined,\n bufferedMessageIds: undefined,\n bufferedReflection: row.bufferedReflection || undefined,\n bufferedReflectionTokens: row.bufferedReflectionTokens ? Number(row.bufferedReflectionTokens) : undefined,\n bufferedReflectionInputTokens: row.bufferedReflectionInputTokens\n ? Number(row.bufferedReflectionInputTokens)\n : undefined,\n reflectedObservationLineCount: row.reflectedObservationLineCount\n ? Number(row.reflectedObservationLineCount)\n : undefined,\n totalTokensObserved: Number(row.totalTokensObserved || 0),\n observationTokenCount: Number(row.observationTokenCount || 0),\n pendingMessageTokens: Number(row.pendingMessageTokens || 0),\n isReflecting: parseMySQLBool(row.isReflecting),\n isObserving: parseMySQLBool(row.isObserving),\n isBufferingObservation: parseMySQLBool(row.isBufferingObservation),\n isBufferingReflection: parseMySQLBool(row.isBufferingReflection),\n lastBufferedAtTokens:\n typeof row.lastBufferedAtTokens === 'number'\n ? row.lastBufferedAtTokens\n : parseInt(String(row.lastBufferedAtTokens ?? '0'), 10) || 0,\n lastBufferedAtTime: row.lastBufferedAtTime ? (parseDateTime(row.lastBufferedAtTime) ?? null) : null,\n config: parseJSONColumn(row.config) ?? {},\n metadata: parseJSONColumn(row.metadata),\n observedMessageIds: parseJSONColumn<string[]>(row.observedMessageIds),\n observedTimezone: row.observedTimezone || undefined,\n };\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n createStorageErrorId,\n listTracesArgsSchema,\n ObservabilityStorage,\n SPAN_SCHEMA,\n TABLE_SCHEMAS,\n TABLE_SPANS,\n toTraceSpans,\n TraceStatus,\n} from '@mastra/core/storage';\nimport type {\n SpanRecord,\n ListTracesArgs,\n ListTracesResponse,\n TracingStorageStrategy,\n UpdateSpanArgs,\n BatchDeleteTracesArgs,\n BatchUpdateSpansArgs,\n BatchCreateSpansArgs,\n CreateSpanArgs,\n CreateIndexOptions,\n GetSpanArgs,\n GetSpanResponse,\n GetRootSpanArgs,\n GetRootSpanResponse,\n GetTraceArgs,\n GetTraceResponse,\n GetTraceLightResponse,\n LightSpanRecord,\n} from '@mastra/core/storage';\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL, generateIndexSQL } from '../operations';\nimport { formatTableName, quoteIdentifier, transformFromSqlRow } from '../utils';\n\nconst JSON_SPAN_FIELDS = ['input', 'output', 'attributes', 'metadata', 'error', 'links', 'scope', 'tags'] as const;\n\nfunction serializeJsonFields(source: Record<string, any>): Record<string, any> {\n const result: Record<string, any> = {};\n for (const field of JSON_SPAN_FIELDS) {\n if (field in source && source[field] !== undefined) {\n result[field] = source[field] !== null ? JSON.stringify(source[field]) : null;\n }\n }\n return result;\n}\n\nexport class ObservabilityMySQL extends ObservabilityStorage {\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n static readonly MANAGED_TABLES = [TABLE_SPANS] as const;\n\n constructor({\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx =>\n (ObservabilityMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table),\n );\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({ tableName: TABLE_SPANS, schema: SPAN_SCHEMA });\n await this.operations.alterTable({\n tableName: TABLE_SPANS,\n schema: SPAN_SCHEMA,\n ifNotExists: Object.keys(SPAN_SCHEMA),\n });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n static getDefaultIndexDefs(prefix: string = ''): CreateIndexOptions[] {\n return [\n {\n name: `${prefix}mastra_ai_spans_traceid_startedat_idx`,\n table: TABLE_SPANS,\n columns: ['traceId', 'startedAt DESC'],\n },\n {\n name: `${prefix}mastra_ai_spans_parentspanid_startedat_idx`,\n table: TABLE_SPANS,\n columns: ['parentSpanId', 'startedAt DESC'],\n },\n {\n name: `${prefix}mastra_ai_spans_name_idx`,\n table: TABLE_SPANS,\n columns: ['name'],\n },\n {\n name: `${prefix}mastra_ai_spans_spantype_startedat_idx`,\n table: TABLE_SPANS,\n columns: ['spanType', 'startedAt DESC'],\n },\n {\n name: `${prefix}mastra_ai_spans_root_spans_idx`,\n table: TABLE_SPANS,\n columns: ['startedAt DESC'],\n },\n ];\n }\n\n static getExportDDL(): string[] {\n const statements: string[] = [];\n\n statements.push(\n generateTableSQL({\n tableName: TABLE_SPANS,\n schema: TABLE_SCHEMAS[TABLE_SPANS],\n }),\n );\n\n for (const idx of ObservabilityMySQL.getDefaultIndexDefs()) {\n statements.push(generateIndexSQL(idx));\n }\n\n return statements;\n }\n\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return ObservabilityMySQL.getDefaultIndexDefs('');\n }\n\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n for (const indexDef of this.getDefaultIndexDefinitions()) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.operations.clearTable({ tableName: TABLE_SPANS });\n }\n\n public override get tracingStrategy(): {\n preferred: TracingStorageStrategy;\n supported: TracingStorageStrategy[];\n } {\n return {\n preferred: 'batch-with-updates',\n supported: ['batch-with-updates', 'insert-only'],\n };\n }\n\n async createSpan(args: CreateSpanArgs): Promise<void> {\n const { span } = args;\n try {\n const now = new Date();\n const record = {\n ...span,\n ...serializeJsonFields(span),\n createdAt: now,\n updatedAt: now,\n };\n await this.operations.insert({ tableName: TABLE_SPANS, record });\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_SPAN', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: {\n spanId: span.spanId,\n traceId: span.traceId,\n spanType: span.spanType,\n name: span.name,\n },\n },\n error,\n );\n }\n }\n\n async getSpan(args: GetSpanArgs): Promise<GetSpanResponse | null> {\n const { traceId, spanId } = args;\n try {\n const rows = await this.operations.loadMany<SpanRecord>({\n tableName: TABLE_SPANS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('traceId', 'column name')} = ? AND ${quoteIdentifier('spanId', 'column name')} = ?`,\n args: [traceId, spanId],\n },\n limit: 1,\n });\n\n if (!rows || rows.length === 0) {\n return null;\n }\n\n return { span: rows[0]! };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_SPAN', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { traceId, spanId },\n },\n error,\n );\n }\n }\n\n async getRootSpan(args: GetRootSpanArgs): Promise<GetRootSpanResponse | null> {\n const { traceId } = args;\n try {\n const rows = await this.operations.loadMany<SpanRecord>({\n tableName: TABLE_SPANS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('traceId', 'column name')} = ? AND ${quoteIdentifier('parentSpanId', 'column name')} IS NULL`,\n args: [traceId],\n },\n limit: 1,\n });\n\n if (!rows || rows.length === 0) {\n return null;\n }\n\n return { span: rows[0]! };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_ROOT_SPAN', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { traceId },\n },\n error,\n );\n }\n }\n\n async getTrace(args: GetTraceArgs): Promise<GetTraceResponse | null> {\n const { traceId } = args;\n try {\n const spans = await this.operations.loadMany<SpanRecord>({\n tableName: TABLE_SPANS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('traceId', 'column name')} = ?`,\n args: [traceId],\n },\n orderBy: `${quoteIdentifier('startedAt', 'column name')} ASC`,\n });\n\n if (!spans || spans.length === 0) {\n return null;\n }\n\n return {\n traceId,\n spans,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_TRACE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { traceId },\n },\n error,\n );\n }\n }\n\n async getStructure(args: GetTraceArgs): Promise<GetTraceLightResponse | null> {\n const { traceId } = args;\n try {\n const spans = await this.operations.loadMany<LightSpanRecord>({\n tableName: TABLE_SPANS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('traceId', 'column name')} = ?`,\n args: [traceId],\n },\n orderBy: `${quoteIdentifier('startedAt', 'column name')} ASC`,\n });\n\n if (!spans || spans.length === 0) {\n return null;\n }\n\n // Strip heavy fields (input, output, attributes, metadata, tags, links) for lightweight response\n const lightSpans: LightSpanRecord[] = spans.map(span => ({\n traceId: span.traceId,\n spanId: span.spanId,\n parentSpanId: span.parentSpanId,\n name: span.name,\n entityType: span.entityType,\n entityId: span.entityId,\n entityName: span.entityName,\n spanType: span.spanType,\n error: span.error,\n isEvent: span.isEvent,\n startedAt: span.startedAt,\n endedAt: span.endedAt,\n createdAt: span.createdAt,\n updatedAt: span.updatedAt,\n }));\n\n return {\n traceId,\n spans: lightSpans,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_STRUCTURE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { traceId },\n },\n error,\n );\n }\n }\n\n async updateSpan(args: UpdateSpanArgs): Promise<void> {\n const { traceId, spanId, updates } = args;\n try {\n const data: Record<string, any> = {\n ...updates,\n ...serializeJsonFields(updates),\n updatedAt: new Date(),\n };\n\n await this.operations.update({\n tableName: TABLE_SPANS,\n keys: { spanId, traceId },\n data,\n });\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'UPDATE_SPAN', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { spanId, traceId },\n },\n error,\n );\n }\n }\n\n async listTraces(args: ListTracesArgs): Promise<ListTracesResponse> {\n const { filters, pagination, orderBy } = listTracesArgsSchema.parse(args);\n const { page, perPage } = pagination;\n\n const tbl = formatTableName(TABLE_SPANS);\n\n try {\n const conditions: string[] = [`${quoteIdentifier('parentSpanId', 'column name')} IS NULL`];\n const queryArgs: any[] = [];\n\n if (filters) {\n // Date range filters\n if (filters.startedAt?.start) {\n conditions.push(`${quoteIdentifier('startedAt', 'column name')} >= ?`);\n queryArgs.push(filters.startedAt.start);\n }\n if (filters.startedAt?.end) {\n conditions.push(`${quoteIdentifier('startedAt', 'column name')} <= ?`);\n queryArgs.push(filters.startedAt.end);\n }\n if (filters.endedAt?.start) {\n conditions.push(`${quoteIdentifier('endedAt', 'column name')} >= ?`);\n queryArgs.push(filters.endedAt.start);\n }\n if (filters.endedAt?.end) {\n conditions.push(`${quoteIdentifier('endedAt', 'column name')} <= ?`);\n queryArgs.push(filters.endedAt.end);\n }\n\n // Span type filter\n if (filters.spanType !== undefined) {\n conditions.push(`${quoteIdentifier('spanType', 'column name')} = ?`);\n queryArgs.push(filters.spanType);\n }\n\n // Entity filters\n if (filters.entityType !== undefined) {\n conditions.push(`${quoteIdentifier('entityType', 'column name')} = ?`);\n queryArgs.push(filters.entityType);\n }\n if (filters.entityId !== undefined) {\n conditions.push(`${quoteIdentifier('entityId', 'column name')} = ?`);\n queryArgs.push(filters.entityId);\n }\n if (filters.entityName !== undefined) {\n conditions.push(`${quoteIdentifier('entityName', 'column name')} = ?`);\n queryArgs.push(filters.entityName);\n }\n\n // Identity & tenancy filters\n if (filters.userId !== undefined) {\n conditions.push(`${quoteIdentifier('userId', 'column name')} = ?`);\n queryArgs.push(filters.userId);\n }\n if (filters.organizationId !== undefined) {\n conditions.push(`${quoteIdentifier('organizationId', 'column name')} = ?`);\n queryArgs.push(filters.organizationId);\n }\n if (filters.resourceId !== undefined) {\n conditions.push(`${quoteIdentifier('resourceId', 'column name')} = ?`);\n queryArgs.push(filters.resourceId);\n }\n\n // Correlation ID filters\n if (filters.runId !== undefined) {\n conditions.push(`${quoteIdentifier('runId', 'column name')} = ?`);\n queryArgs.push(filters.runId);\n }\n if (filters.sessionId !== undefined) {\n conditions.push(`${quoteIdentifier('sessionId', 'column name')} = ?`);\n queryArgs.push(filters.sessionId);\n }\n if (filters.threadId !== undefined) {\n conditions.push(`${quoteIdentifier('threadId', 'column name')} = ?`);\n queryArgs.push(filters.threadId);\n }\n if (filters.requestId !== undefined) {\n conditions.push(`${quoteIdentifier('requestId', 'column name')} = ?`);\n queryArgs.push(filters.requestId);\n }\n\n // Deployment context filters\n if (filters.environment !== undefined) {\n conditions.push(`${quoteIdentifier('environment', 'column name')} = ?`);\n queryArgs.push(filters.environment);\n }\n if (filters.source !== undefined) {\n conditions.push(`${quoteIdentifier('source', 'column name')} = ?`);\n queryArgs.push(filters.source);\n }\n if (filters.serviceName !== undefined) {\n conditions.push(`${quoteIdentifier('serviceName', 'column name')} = ?`);\n queryArgs.push(filters.serviceName);\n }\n\n // Scope filter (JSON containment - MySQL uses JSON_EXTRACT)\n if (filters.scope != null) {\n for (const [key, value] of Object.entries(filters.scope)) {\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(key)) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'LIST_TRACES', 'INVALID_FILTER_KEY'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { key },\n });\n }\n conditions.push(`JSON_EXTRACT(${quoteIdentifier('scope', 'column name')}, '$.${key}') = ?`);\n queryArgs.push(typeof value === 'string' ? value : JSON.stringify(value));\n }\n }\n\n // Metadata filter (JSON containment)\n if (filters.metadata != null) {\n for (const [key, value] of Object.entries(filters.metadata)) {\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(key)) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'LIST_TRACES', 'INVALID_FILTER_KEY'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { key },\n });\n }\n if (typeof value === 'string') {\n conditions.push(\n `JSON_UNQUOTE(JSON_EXTRACT(${quoteIdentifier('metadata', 'column name')}, '$.${key}')) = ?`,\n );\n queryArgs.push(value);\n } else {\n conditions.push(\n `JSON_EXTRACT(${quoteIdentifier('metadata', 'column name')}, '$.${key}') = CAST(? AS JSON)`,\n );\n queryArgs.push(JSON.stringify(value));\n }\n }\n }\n\n // Tags filter (all tags must be present - MySQL uses JSON_CONTAINS)\n if (filters.tags != null && filters.tags.length > 0) {\n for (const tag of filters.tags) {\n conditions.push(`JSON_CONTAINS(${quoteIdentifier('tags', 'column name')}, ?, '$')`);\n queryArgs.push(JSON.stringify(tag));\n }\n }\n\n // Status filter (derived from error and endedAt)\n if (filters.status !== undefined) {\n switch (filters.status) {\n case TraceStatus.ERROR:\n conditions.push(`${quoteIdentifier('error', 'column name')} IS NOT NULL`);\n break;\n case TraceStatus.RUNNING:\n conditions.push(\n `${quoteIdentifier('endedAt', 'column name')} IS NULL AND ${quoteIdentifier('error', 'column name')} IS NULL`,\n );\n break;\n case TraceStatus.SUCCESS:\n conditions.push(\n `${quoteIdentifier('endedAt', 'column name')} IS NOT NULL AND ${quoteIdentifier('error', 'column name')} IS NULL`,\n );\n break;\n }\n }\n\n // hasChildError filter (requires subquery)\n if (filters.hasChildError !== undefined) {\n if (filters.hasChildError) {\n conditions.push(`EXISTS (\n SELECT 1 FROM ${tbl} c\n WHERE c.${quoteIdentifier('traceId', 'column name')} = ${tbl}.${quoteIdentifier('traceId', 'column name')}\n AND c.${quoteIdentifier('parentSpanId', 'column name')} IS NOT NULL\n AND c.${quoteIdentifier('error', 'column name')} IS NOT NULL\n )`);\n } else {\n conditions.push(`NOT EXISTS (\n SELECT 1 FROM ${tbl} c\n WHERE c.${quoteIdentifier('traceId', 'column name')} = ${tbl}.${quoteIdentifier('traceId', 'column name')}\n AND c.${quoteIdentifier('parentSpanId', 'column name')} IS NOT NULL\n AND c.${quoteIdentifier('error', 'column name')} IS NOT NULL\n )`);\n }\n }\n }\n\n const whereClause = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '';\n\n // Order by clause with proper NULL handling for endedAt\n // MySQL's natural behavior: NULLs are \"smaller\" than any value\n // - ASC: NULLs first (natural)\n // - DESC: NULLs last (natural)\n // We need CASE WHEN workarounds for endedAt to get desired ordering\n const sortField = quoteIdentifier(orderBy.field, 'column name');\n const sortDirection = orderBy.direction;\n let orderByClause: string;\n if (orderBy.field === 'endedAt') {\n orderByClause =\n sortDirection === 'DESC'\n ? `CASE WHEN ${sortField} IS NULL THEN 0 ELSE 1 END, ${sortField} DESC`\n : `CASE WHEN ${sortField} IS NULL THEN 1 ELSE 0 END, ${sortField} ASC`;\n } else {\n orderByClause = `${sortField} ${sortDirection}`;\n }\n\n // Get total count\n const count = await this.operations.loadTotalCount({\n tableName: TABLE_SPANS,\n whereClause: { sql: whereClause, args: queryArgs },\n });\n\n if (count === 0) {\n return {\n pagination: {\n total: 0,\n page,\n perPage,\n hasMore: false,\n },\n spans: [],\n };\n }\n\n // Use raw query to support CASE WHEN in ORDER BY (sanitizeOrderBy in loadMany rejects it)\n const offset = page * perPage;\n const selectSql = `SELECT * FROM ${tbl}${whereClause} ORDER BY ${orderByClause} LIMIT ${Math.max(0, perPage)} OFFSET ${Math.max(0, offset)}`;\n const rawRows = await this.operations.query(selectSql, queryArgs);\n const spans = rawRows.map(row => transformFromSqlRow<SpanRecord>({ tableName: TABLE_SPANS, sqlRow: row as any }));\n\n return {\n pagination: {\n total: count,\n page,\n perPage,\n hasMore: (page + 1) * perPage < count,\n },\n spans: toTraceSpans(spans),\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_TRACES', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n },\n error,\n );\n }\n }\n\n async batchCreateSpans(args: BatchCreateSpansArgs): Promise<void> {\n try {\n if (!args.records.length) {\n return;\n }\n const now = new Date();\n await this.operations.batchInsert({\n tableName: TABLE_SPANS,\n records: args.records.map(record => ({\n ...record,\n ...serializeJsonFields(record),\n createdAt: now,\n updatedAt: now,\n })),\n });\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'BATCH_CREATE_SPANS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n },\n error,\n );\n }\n }\n\n async batchUpdateSpans(args: BatchUpdateSpansArgs): Promise<void> {\n try {\n if (!args.records.length) {\n return;\n }\n const now = new Date();\n await this.operations.batchUpdate({\n tableName: TABLE_SPANS,\n items: args.records.map(record => ({\n keys: { spanId: record.spanId, traceId: record.traceId },\n data: {\n ...record.updates,\n ...serializeJsonFields(record.updates),\n updatedAt: now,\n },\n })),\n });\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'BATCH_UPDATE_SPANS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n },\n error,\n );\n }\n }\n\n async batchDeleteTraces(args: BatchDeleteTracesArgs): Promise<void> {\n try {\n if (!args.traceIds.length) {\n return;\n }\n const keys = args.traceIds.map(traceId => ({ traceId }));\n await this.operations.batchDelete({\n tableName: TABLE_SPANS,\n keys,\n });\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'BATCH_DELETE_TRACES', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n },\n error,\n );\n }\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n PromptBlocksStorage,\n createStorageErrorId,\n normalizePerPage,\n calculatePagination,\n TABLE_PROMPT_BLOCKS,\n TABLE_PROMPT_BLOCK_VERSIONS,\n PROMPT_BLOCKS_SCHEMA,\n PROMPT_BLOCK_VERSIONS_SCHEMA,\n TABLE_SCHEMAS,\n} from '@mastra/core/storage';\nimport type {\n StoragePromptBlockType,\n StorageCreatePromptBlockInput,\n StorageUpdatePromptBlockInput,\n StorageListPromptBlocksInput,\n StorageListPromptBlocksOutput,\n PromptBlockVersion,\n CreatePromptBlockVersionInput,\n ListPromptBlockVersionsInput,\n ListPromptBlockVersionsOutput,\n CreateIndexOptions,\n} from '@mastra/core/storage';\nimport type { Pool, RowDataPacket } from 'mysql2/promise';\n\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL, generateIndexSQL } from '../operations';\nimport { formatTableName, quoteIdentifier } from '../utils';\n\nexport class PromptBlocksMySQL extends PromptBlocksStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n static readonly MANAGED_TABLES = [TABLE_PROMPT_BLOCKS, TABLE_PROMPT_BLOCK_VERSIONS] as const;\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx => (PromptBlocksMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({ tableName: TABLE_PROMPT_BLOCKS, schema: PROMPT_BLOCKS_SCHEMA });\n await this.operations.createTable({ tableName: TABLE_PROMPT_BLOCK_VERSIONS, schema: PROMPT_BLOCK_VERSIONS_SCHEMA });\n await this.operations.alterTable({\n tableName: TABLE_PROMPT_BLOCK_VERSIONS,\n schema: PROMPT_BLOCK_VERSIONS_SCHEMA,\n ifNotExists: ['requestContextSchema'],\n });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n static getDefaultIndexDefs(prefix: string = ''): CreateIndexOptions[] {\n return [\n {\n name: `${prefix}idx_prompt_block_versions_block_version`,\n table: TABLE_PROMPT_BLOCK_VERSIONS,\n columns: ['blockId', 'versionNumber'],\n unique: true,\n },\n ];\n }\n\n static getExportDDL(): string[] {\n const statements: string[] = [];\n\n for (const tableName of PromptBlocksMySQL.MANAGED_TABLES) {\n statements.push(\n generateTableSQL({\n tableName,\n schema: TABLE_SCHEMAS[tableName],\n }),\n );\n }\n\n for (const idx of PromptBlocksMySQL.getDefaultIndexDefs()) {\n statements.push(generateIndexSQL(idx));\n }\n\n return statements;\n }\n\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return PromptBlocksMySQL.getDefaultIndexDefs('');\n }\n\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n for (const indexDef of this.getDefaultIndexDefinitions()) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.operations.clearTable({ tableName: TABLE_PROMPT_BLOCK_VERSIONS });\n await this.operations.clearTable({ tableName: TABLE_PROMPT_BLOCKS });\n }\n\n private safeParseJSON<T = unknown>(val: unknown): T | undefined {\n if (val === null || val === undefined) return undefined;\n if (typeof val === 'string') {\n try {\n return JSON.parse(val) as T;\n } catch {\n return val as T;\n }\n }\n return val as T;\n }\n\n private parseBlockRow(row: Record<string, unknown>): StoragePromptBlockType {\n return {\n id: row.id as string,\n status: (row.status as StoragePromptBlockType['status']) ?? 'draft',\n activeVersionId: (row.activeVersionId as string) ?? undefined,\n authorId: (row.authorId as string) ?? undefined,\n metadata: this.safeParseJSON(row.metadata) as Record<string, unknown> | undefined,\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n updatedAt: row.updatedAt instanceof Date ? row.updatedAt : new Date(row.updatedAt as string),\n };\n }\n\n private parseVersionRow(row: Record<string, unknown>): PromptBlockVersion {\n return {\n id: row.id as string,\n blockId: row.blockId as string,\n versionNumber: Number(row.versionNumber),\n name: row.name as string,\n description: (row.description as string) ?? undefined,\n content: row.content as string,\n rules: this.safeParseJSON(row.rules) as PromptBlockVersion['rules'],\n requestContextSchema: this.safeParseJSON(row.requestContextSchema) as Record<string, unknown> | undefined,\n changedFields: this.safeParseJSON(row.changedFields) as string[] | undefined,\n changeMessage: (row.changeMessage as string) ?? undefined,\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n };\n }\n\n async getById(id: string): Promise<StoragePromptBlockType | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_PROMPT_BLOCKS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n return rows.length ? this.parseBlockRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_PROMPT_BLOCK', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async create(input: { promptBlock: StorageCreatePromptBlockInput }): Promise<StoragePromptBlockType> {\n const { promptBlock } = input;\n try {\n const now = new Date();\n\n await this.operations.insert({\n tableName: TABLE_PROMPT_BLOCKS,\n record: {\n id: promptBlock.id,\n status: 'draft',\n activeVersionId: null,\n authorId: promptBlock.authorId ?? null,\n metadata: promptBlock.metadata ?? null,\n createdAt: now,\n updatedAt: now,\n },\n });\n\n const { id: _id, authorId: _authorId, metadata: _metadata, ...snapshotConfig } = promptBlock;\n const versionId = crypto.randomUUID();\n try {\n await this.createVersion({\n id: versionId,\n blockId: promptBlock.id,\n versionNumber: 1,\n ...snapshotConfig,\n changedFields: Object.keys(snapshotConfig),\n changeMessage: 'Initial version',\n });\n } catch (versionError) {\n try {\n await this.operations.delete({ tableName: TABLE_PROMPT_BLOCKS, keys: { id: promptBlock.id } });\n } catch (rollbackError) {\n console.error('Failed to rollback prompt block creation:', rollbackError);\n }\n throw versionError;\n }\n\n return {\n id: promptBlock.id,\n status: 'draft',\n activeVersionId: undefined,\n authorId: promptBlock.authorId,\n metadata: promptBlock.metadata,\n createdAt: now,\n updatedAt: now,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_PROMPT_BLOCK', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async update(input: StorageUpdatePromptBlockInput): Promise<StoragePromptBlockType> {\n const { id, ...updates } = input;\n try {\n const existing = await this.getById(id);\n if (!existing) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_PROMPT_BLOCK', 'NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Prompt block with id ${id} not found`,\n details: { id },\n });\n }\n\n const { authorId, activeVersionId, metadata, status } = updates;\n const updateData: Record<string, unknown> = { updatedAt: new Date() };\n\n if (authorId !== undefined) updateData.authorId = authorId;\n if (activeVersionId !== undefined) updateData.activeVersionId = activeVersionId;\n if (status !== undefined) updateData.status = status;\n if (metadata !== undefined) updateData.metadata = { ...existing.metadata, ...metadata };\n\n await this.operations.update({ tableName: TABLE_PROMPT_BLOCKS, keys: { id }, data: updateData });\n\n const updated = await this.getById(id);\n if (!updated) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_PROMPT_BLOCK', 'NOT_FOUND_AFTER_UPDATE'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `Prompt block ${id} not found after update`,\n details: { id },\n });\n }\n return updated;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'UPDATE_PROMPT_BLOCK', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async delete(id: string): Promise<void> {\n try {\n await this.deleteVersionsByParentId(id);\n await this.operations.delete({ tableName: TABLE_PROMPT_BLOCKS, keys: { id } });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_PROMPT_BLOCK', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async list(args?: StorageListPromptBlocksInput): Promise<StorageListPromptBlocksOutput> {\n try {\n const { page = 0, perPage: perPageInput, orderBy, authorId, metadata, status } = args || {};\n const { field, direction } = this.parseOrderBy(orderBy);\n\n const conditions: string[] = [];\n const queryParams: any[] = [];\n\n if (status) {\n conditions.push(`${quoteIdentifier('status', 'column name')} = ?`);\n queryParams.push(status);\n }\n if (authorId !== undefined) {\n conditions.push(`${quoteIdentifier('authorId', 'column name')} = ?`);\n queryParams.push(authorId);\n }\n if (metadata && Object.keys(metadata).length > 0) {\n for (const [key, value] of Object.entries(metadata)) {\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(key)) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'LIST_PROMPT_BLOCKS', 'INVALID_METADATA_KEY'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Invalid metadata key: ${key}`,\n details: { key },\n });\n }\n if (typeof value === 'string') {\n conditions.push(\n `JSON_UNQUOTE(JSON_EXTRACT(${quoteIdentifier('metadata', 'column name')}, '$.${key}')) = ?`,\n );\n queryParams.push(value);\n } else {\n conditions.push(\n `JSON_EXTRACT(${quoteIdentifier('metadata', 'column name')}, '$.${key}') = CAST(? AS JSON)`,\n );\n queryParams.push(JSON.stringify(value));\n }\n }\n }\n\n const whereClause =\n conditions.length > 0 ? { sql: ` WHERE ${conditions.join(' AND ')}`, args: queryParams } : undefined;\n const total = await this.operations.loadTotalCount({ tableName: TABLE_PROMPT_BLOCKS, whereClause });\n\n if (total === 0) {\n return { promptBlocks: [], total: 0, page, perPage: perPageInput ?? 100, hasMore: false };\n }\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_PROMPT_BLOCKS,\n whereClause,\n orderBy: `${quoteIdentifier(field, 'column name')} ${direction}`,\n offset,\n limit: limitValue,\n });\n\n return {\n promptBlocks: rows.map(row => this.parseBlockRow(row)),\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_PROMPT_BLOCKS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n // ==========================================================================\n // Version Methods\n // ==========================================================================\n\n async createVersion(input: CreatePromptBlockVersionInput): Promise<PromptBlockVersion> {\n try {\n const now = new Date();\n await this.operations.insert({\n tableName: TABLE_PROMPT_BLOCK_VERSIONS,\n record: {\n id: input.id,\n blockId: input.blockId,\n versionNumber: input.versionNumber,\n name: input.name,\n description: input.description ?? null,\n content: input.content,\n rules: input.rules ?? null,\n requestContextSchema: input.requestContextSchema ?? null,\n changedFields: input.changedFields ?? null,\n changeMessage: input.changeMessage ?? null,\n createdAt: now,\n },\n });\n return { ...input, createdAt: now };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_PROMPT_BLOCK_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getVersion(id: string): Promise<PromptBlockVersion | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_PROMPT_BLOCK_VERSIONS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_PROMPT_BLOCK_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getVersionByNumber(blockId: string, versionNumber: number): Promise<PromptBlockVersion | null> {\n try {\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_PROMPT_BLOCK_VERSIONS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('blockId', 'column name')} = ? AND ${quoteIdentifier('versionNumber', 'column name')} = ?`,\n args: [blockId, versionNumber],\n },\n limit: 1,\n });\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_PROMPT_BLOCK_VERSION_BY_NUMBER', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getLatestVersion(blockId: string): Promise<PromptBlockVersion | null> {\n try {\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_PROMPT_BLOCK_VERSIONS,\n whereClause: { sql: ` WHERE ${quoteIdentifier('blockId', 'column name')} = ?`, args: [blockId] },\n orderBy: `${quoteIdentifier('versionNumber', 'column name')} DESC`,\n limit: 1,\n });\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_LATEST_PROMPT_BLOCK_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listVersions(input: ListPromptBlockVersionsInput): Promise<ListPromptBlockVersionsOutput> {\n try {\n const { blockId, page = 0, perPage: perPageInput, orderBy } = input;\n const { field, direction } = this.parseVersionOrderBy(orderBy);\n\n const whereClause = { sql: ` WHERE ${quoteIdentifier('blockId', 'column name')} = ?`, args: [blockId] };\n const total = await this.operations.loadTotalCount({ tableName: TABLE_PROMPT_BLOCK_VERSIONS, whereClause });\n\n if (total === 0) {\n return { versions: [], total: 0, page, perPage: perPageInput ?? 20, hasMore: false };\n }\n\n const perPage = normalizePerPage(perPageInput, 20);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_PROMPT_BLOCK_VERSIONS,\n whereClause,\n orderBy: `${quoteIdentifier(field, 'column name')} ${direction}`,\n offset,\n limit: limitValue,\n });\n\n return {\n versions: rows.map(row => this.parseVersionRow(row)),\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_PROMPT_BLOCK_VERSIONS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteVersion(id: string): Promise<void> {\n try {\n await this.operations.delete({ tableName: TABLE_PROMPT_BLOCK_VERSIONS, keys: { id } });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_PROMPT_BLOCK_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteVersionsByParentId(entityId: string): Promise<void> {\n try {\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_PROMPT_BLOCK_VERSIONS)} WHERE ${quoteIdentifier('blockId', 'column name')} = ?`,\n [entityId],\n );\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_PROMPT_BLOCK_VERSIONS_BY_BLOCK', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async countVersions(blockId: string): Promise<number> {\n try {\n return await this.operations.loadTotalCount({\n tableName: TABLE_PROMPT_BLOCK_VERSIONS,\n whereClause: { sql: ` WHERE ${quoteIdentifier('blockId', 'column name')} = ?`, args: [blockId] },\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'COUNT_PROMPT_BLOCK_VERSIONS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n}\n","import { randomUUID } from 'node:crypto';\nimport { SchedulesStorage, TABLE_SCHEDULES, TABLE_SCHEDULE_TRIGGERS, TABLE_SCHEMAS } from '@mastra/core/storage';\nimport type {\n Schedule,\n ScheduleFilter,\n ScheduleTrigger,\n ScheduleTriggerListOptions,\n ScheduleStatus,\n ScheduleTarget,\n ScheduleUpdate,\n CreateIndexOptions,\n} from '@mastra/core/storage';\nimport type { Pool, RowDataPacket, ResultSetHeader } from 'mysql2/promise';\n\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL, generateIndexSQL } from '../operations';\nimport { formatTableName, quoteIdentifier } from '../utils';\n\nfunction parseJson<T = unknown>(val: unknown): T | undefined {\n if (val == null) return undefined;\n if (typeof val === 'string') {\n try {\n return JSON.parse(val) as T;\n } catch {\n return val as T;\n }\n }\n return val as T;\n}\n\nfunction toNumber(val: unknown): number {\n if (typeof val === 'bigint') return Number(val);\n return Number(val);\n}\n\nfunction rowToSchedule(row: Record<string, any>): Schedule {\n const target = parseJson<ScheduleTarget>(row.target);\n if (!target) {\n throw new Error(`Schedule row ${row.id} has invalid target`);\n }\n const schedule: Schedule = {\n id: String(row.id),\n target,\n cron: String(row.cron),\n status: String(row.status) as ScheduleStatus,\n nextFireAt: toNumber(row.next_fire_at),\n createdAt: toNumber(row.created_at),\n updatedAt: toNumber(row.updated_at),\n };\n if (row.timezone != null) schedule.timezone = String(row.timezone);\n if (row.last_fire_at != null) schedule.lastFireAt = toNumber(row.last_fire_at);\n if (row.last_run_id != null) schedule.lastRunId = String(row.last_run_id);\n const metadata = parseJson<Record<string, unknown>>(row.metadata);\n if (metadata !== undefined) schedule.metadata = metadata;\n if (row.owner_type != null) schedule.ownerType = String(row.owner_type) as Schedule['ownerType'];\n if (row.owner_id != null) schedule.ownerId = String(row.owner_id);\n return schedule;\n}\n\nfunction rowToTrigger(row: Record<string, any>): ScheduleTrigger {\n const trigger: ScheduleTrigger = {\n id: row.id != null ? String(row.id) : undefined,\n scheduleId: String(row.schedule_id),\n runId: row.run_id != null ? String(row.run_id) : null,\n scheduledFireAt: toNumber(row.scheduled_fire_at),\n actualFireAt: toNumber(row.actual_fire_at),\n outcome: String(row.outcome) as ScheduleTrigger['outcome'],\n triggerKind:\n row.trigger_kind != null ? (String(row.trigger_kind) as ScheduleTrigger['triggerKind']) : 'schedule-fire',\n };\n if (row.error != null) trigger.error = String(row.error);\n if (row.parent_trigger_id != null) trigger.parentTriggerId = String(row.parent_trigger_id);\n const metadata = parseJson<Record<string, unknown>>(row.metadata);\n if (metadata !== undefined) trigger.metadata = metadata;\n return trigger;\n}\n\nexport class SchedulesMySQL extends SchedulesStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n static readonly MANAGED_TABLES = [TABLE_SCHEDULES, TABLE_SCHEDULE_TRIGGERS] as const;\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx => (SchedulesMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({\n tableName: TABLE_SCHEDULES,\n schema: TABLE_SCHEMAS[TABLE_SCHEDULES],\n });\n await this.operations.createTable({\n tableName: TABLE_SCHEDULE_TRIGGERS,\n schema: TABLE_SCHEMAS[TABLE_SCHEDULE_TRIGGERS],\n });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n static getDefaultIndexDefs(prefix: string = ''): CreateIndexOptions[] {\n return [\n {\n name: `${prefix}idx_mastra_schedules_status_next_fire`,\n table: TABLE_SCHEDULES,\n columns: ['status', 'next_fire_at'],\n },\n {\n name: `${prefix}idx_mastra_schedule_triggers_schedule_fire`,\n table: TABLE_SCHEDULE_TRIGGERS,\n columns: ['schedule_id', 'actual_fire_at DESC'],\n },\n ];\n }\n\n static getExportDDL(): string[] {\n const statements: string[] = [];\n\n statements.push(\n generateTableSQL({\n tableName: TABLE_SCHEDULES,\n schema: TABLE_SCHEMAS[TABLE_SCHEDULES],\n }),\n );\n statements.push(\n generateTableSQL({\n tableName: TABLE_SCHEDULE_TRIGGERS,\n schema: TABLE_SCHEMAS[TABLE_SCHEDULE_TRIGGERS],\n }),\n );\n\n for (const idx of SchedulesMySQL.getDefaultIndexDefs()) {\n statements.push(generateIndexSQL(idx));\n }\n\n return statements;\n }\n\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return SchedulesMySQL.getDefaultIndexDefs('');\n }\n\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n for (const indexDef of this.getDefaultIndexDefinitions()) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.operations.clearTable({ tableName: TABLE_SCHEDULE_TRIGGERS });\n await this.operations.clearTable({ tableName: TABLE_SCHEDULES });\n }\n\n async createSchedule(schedule: Schedule): Promise<Schedule> {\n const existing = await this.getSchedule(schedule.id);\n if (existing) {\n throw new Error(`Schedule with id \"${schedule.id}\" already exists`);\n }\n await this.pool.execute(\n `INSERT INTO ${formatTableName(TABLE_SCHEDULES)} (${quoteIdentifier('id', 'column name')}, ${quoteIdentifier('target', 'column name')}, ${quoteIdentifier('cron', 'column name')}, ${quoteIdentifier('timezone', 'column name')}, ${quoteIdentifier('status', 'column name')}, ${quoteIdentifier('next_fire_at', 'column name')}, ${quoteIdentifier('last_fire_at', 'column name')}, ${quoteIdentifier('last_run_id', 'column name')}, ${quoteIdentifier('created_at', 'column name')}, ${quoteIdentifier('updated_at', 'column name')}, ${quoteIdentifier('metadata', 'column name')}, ${quoteIdentifier('owner_type', 'column name')}, ${quoteIdentifier('owner_id', 'column name')}) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n [\n schedule.id,\n JSON.stringify(schedule.target),\n schedule.cron,\n schedule.timezone ?? null,\n schedule.status,\n schedule.nextFireAt,\n schedule.lastFireAt ?? null,\n schedule.lastRunId ?? null,\n schedule.createdAt,\n schedule.updatedAt,\n schedule.metadata ? JSON.stringify(schedule.metadata) : null,\n schedule.ownerType ?? null,\n schedule.ownerId ?? null,\n ],\n );\n return schedule;\n }\n\n async getSchedule(id: string): Promise<Schedule | null> {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_SCHEDULES)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n const row = rows[0];\n return row ? rowToSchedule(row as Record<string, any>) : null;\n }\n\n async listSchedules(filter?: ScheduleFilter): Promise<Schedule[]> {\n const conditions: string[] = [];\n const params: (string | number | null)[] = [];\n\n if (filter?.status) {\n conditions.push(`${quoteIdentifier('status', 'column name')} = ?`);\n params.push(filter.status);\n }\n if (filter?.workflowId) {\n // target is JSON; MySQL JSON_EXTRACT\n conditions.push(`JSON_EXTRACT(${quoteIdentifier('target', 'column name')}, '$.workflowId') = ?`);\n params.push(filter.workflowId);\n }\n if (filter?.ownerType !== undefined) {\n if (filter.ownerType === null) {\n conditions.push(`${quoteIdentifier('owner_type', 'column name')} IS NULL`);\n } else {\n conditions.push(`${quoteIdentifier('owner_type', 'column name')} = ?`);\n params.push(filter.ownerType);\n }\n }\n if (filter?.ownerId !== undefined) {\n if (filter.ownerId === null) {\n conditions.push(`${quoteIdentifier('owner_id', 'column name')} IS NULL`);\n } else {\n conditions.push(`${quoteIdentifier('owner_id', 'column name')} = ?`);\n params.push(filter.ownerId);\n }\n }\n\n const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_SCHEDULES)} ${where} ORDER BY ${quoteIdentifier('created_at', 'column name')} ASC`,\n params,\n );\n return rows.map(r => rowToSchedule(r as Record<string, any>));\n }\n\n async listDueSchedules(now: number, limit?: number): Promise<Schedule[]> {\n const cap = limit ?? 100;\n const [rows] = await this.pool.query<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_SCHEDULES)} WHERE ${quoteIdentifier('status', 'column name')} = ? AND ${quoteIdentifier('next_fire_at', 'column name')} <= ? ORDER BY ${quoteIdentifier('next_fire_at', 'column name')} ASC LIMIT ?`,\n ['active', String(now), cap],\n );\n return rows.map(r => rowToSchedule(r as Record<string, any>));\n }\n\n async updateSchedule(id: string, update: ScheduleUpdate): Promise<Schedule> {\n const setClauses: string[] = [];\n const params: (string | number | null)[] = [];\n\n if ('cron' in update) {\n setClauses.push(`${quoteIdentifier('cron', 'column name')} = ?`);\n params.push(update.cron as string);\n }\n if ('timezone' in update) {\n setClauses.push(`${quoteIdentifier('timezone', 'column name')} = ?`);\n params.push((update.timezone as string) ?? null);\n }\n if ('status' in update) {\n setClauses.push(`${quoteIdentifier('status', 'column name')} = ?`);\n params.push(update.status as string);\n }\n if ('nextFireAt' in update) {\n setClauses.push(`${quoteIdentifier('next_fire_at', 'column name')} = ?`);\n params.push(update.nextFireAt as number);\n }\n if ('metadata' in update) {\n setClauses.push(`${quoteIdentifier('metadata', 'column name')} = ?`);\n params.push(update.metadata ? JSON.stringify(update.metadata) : null);\n }\n if ('ownerType' in update) {\n setClauses.push(`${quoteIdentifier('owner_type', 'column name')} = ?`);\n params.push((update.ownerType as string) ?? null);\n }\n if ('ownerId' in update) {\n setClauses.push(`${quoteIdentifier('owner_id', 'column name')} = ?`);\n params.push((update.ownerId as string) ?? null);\n }\n\n if (setClauses.length === 0) {\n const existing = await this.getSchedule(id);\n if (!existing) throw new Error(`Schedule ${id} not found`);\n return existing;\n }\n\n setClauses.push(`${quoteIdentifier('updated_at', 'column name')} = ?`);\n params.push(Date.now());\n params.push(id);\n\n await this.pool.execute(\n `UPDATE ${formatTableName(TABLE_SCHEDULES)} SET ${setClauses.join(', ')} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n params,\n );\n\n const updated = await this.getSchedule(id);\n if (!updated) throw new Error(`Schedule ${id} not found`);\n return updated;\n }\n\n async updateScheduleNextFire(\n id: string,\n expectedNextFireAt: number,\n newNextFireAt: number,\n lastFireAt: number,\n lastRunId: string,\n ): Promise<boolean> {\n const [result] = await this.pool.execute<ResultSetHeader>(\n `UPDATE ${formatTableName(TABLE_SCHEDULES)} SET ${quoteIdentifier('next_fire_at', 'column name')} = ?, ${quoteIdentifier('last_fire_at', 'column name')} = ?, ${quoteIdentifier('last_run_id', 'column name')} = ?, ${quoteIdentifier('updated_at', 'column name')} = ? WHERE ${quoteIdentifier('id', 'column name')} = ? AND ${quoteIdentifier('next_fire_at', 'column name')} = ? AND ${quoteIdentifier('status', 'column name')} = ?`,\n [newNextFireAt, lastFireAt, lastRunId, Date.now(), id, expectedNextFireAt, 'active'],\n );\n return result.affectedRows > 0;\n }\n\n async deleteSchedule(id: string): Promise<void> {\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_SCHEDULE_TRIGGERS)} WHERE ${quoteIdentifier('schedule_id', 'column name')} = ?`,\n [id],\n );\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_SCHEDULES)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n }\n\n async recordTrigger(trigger: ScheduleTrigger): Promise<void> {\n const id = trigger.id ?? randomUUID();\n await this.pool.execute(\n `INSERT INTO ${formatTableName(TABLE_SCHEDULE_TRIGGERS)} (${quoteIdentifier('id', 'column name')}, ${quoteIdentifier('schedule_id', 'column name')}, ${quoteIdentifier('run_id', 'column name')}, ${quoteIdentifier('scheduled_fire_at', 'column name')}, ${quoteIdentifier('actual_fire_at', 'column name')}, ${quoteIdentifier('outcome', 'column name')}, ${quoteIdentifier('error', 'column name')}, ${quoteIdentifier('trigger_kind', 'column name')}, ${quoteIdentifier('parent_trigger_id', 'column name')}, ${quoteIdentifier('metadata', 'column name')}) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n [\n id,\n trigger.scheduleId,\n trigger.runId,\n trigger.scheduledFireAt,\n trigger.actualFireAt,\n trigger.outcome,\n trigger.error ?? null,\n trigger.triggerKind ?? 'schedule-fire',\n trigger.parentTriggerId ?? null,\n trigger.metadata ? JSON.stringify(trigger.metadata) : null,\n ],\n );\n }\n\n async listTriggers(scheduleId: string, opts?: ScheduleTriggerListOptions): Promise<ScheduleTrigger[]> {\n const conditions: string[] = [`${quoteIdentifier('schedule_id', 'column name')} = ?`];\n const params: (string | number | null)[] = [scheduleId];\n\n if (opts?.fromActualFireAt != null) {\n conditions.push(`${quoteIdentifier('actual_fire_at', 'column name')} >= ?`);\n params.push(opts.fromActualFireAt);\n }\n if (opts?.toActualFireAt != null) {\n conditions.push(`${quoteIdentifier('actual_fire_at', 'column name')} < ?`);\n params.push(opts.toActualFireAt);\n }\n\n const limitClause = opts?.limit != null ? `LIMIT ${Math.floor(opts.limit)}` : '';\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_SCHEDULE_TRIGGERS)} WHERE ${conditions.join(' AND ')} ORDER BY ${quoteIdentifier('actual_fire_at', 'column name')} DESC ${limitClause}`,\n params,\n );\n return rows.map(r => rowToTrigger(r as Record<string, any>));\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n ScorerDefinitionsStorage,\n createStorageErrorId,\n normalizePerPage,\n calculatePagination,\n TABLE_SCORER_DEFINITIONS,\n TABLE_SCORER_DEFINITION_VERSIONS,\n SCORER_DEFINITIONS_SCHEMA,\n SCORER_DEFINITION_VERSIONS_SCHEMA,\n TABLE_SCHEMAS,\n} from '@mastra/core/storage';\nimport type {\n StorageScorerDefinitionType,\n StorageCreateScorerDefinitionInput,\n StorageUpdateScorerDefinitionInput,\n StorageListScorerDefinitionsInput,\n StorageListScorerDefinitionsOutput,\n CreateIndexOptions,\n} from '@mastra/core/storage';\nimport type {\n ScorerDefinitionVersion,\n CreateScorerDefinitionVersionInput,\n ListScorerDefinitionVersionsInput,\n ListScorerDefinitionVersionsOutput,\n} from '@mastra/core/storage/domains/scorer-definitions';\nimport type { Pool, RowDataPacket } from 'mysql2/promise';\n\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL, generateIndexSQL } from '../operations';\nimport { formatTableName, quoteIdentifier } from '../utils';\n\nexport class ScorerDefinitionsMySQL extends ScorerDefinitionsStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n static readonly MANAGED_TABLES = [TABLE_SCORER_DEFINITIONS, TABLE_SCORER_DEFINITION_VERSIONS] as const;\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx =>\n (ScorerDefinitionsMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table),\n );\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({ tableName: TABLE_SCORER_DEFINITIONS, schema: SCORER_DEFINITIONS_SCHEMA });\n await this.operations.createTable({\n tableName: TABLE_SCORER_DEFINITION_VERSIONS,\n schema: SCORER_DEFINITION_VERSIONS_SCHEMA,\n });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n static getDefaultIndexDefs(prefix: string = ''): CreateIndexOptions[] {\n return [\n {\n name: `${prefix}idx_scorer_definition_versions_def_version`,\n table: TABLE_SCORER_DEFINITION_VERSIONS,\n columns: ['scorerDefinitionId', 'versionNumber'],\n unique: true,\n },\n ];\n }\n\n static getExportDDL(): string[] {\n const statements: string[] = [];\n\n for (const tableName of ScorerDefinitionsMySQL.MANAGED_TABLES) {\n statements.push(\n generateTableSQL({\n tableName,\n schema: TABLE_SCHEMAS[tableName],\n }),\n );\n }\n\n for (const idx of ScorerDefinitionsMySQL.getDefaultIndexDefs()) {\n statements.push(generateIndexSQL(idx));\n }\n\n return statements;\n }\n\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return ScorerDefinitionsMySQL.getDefaultIndexDefs('');\n }\n\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n for (const indexDef of this.getDefaultIndexDefinitions()) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.operations.clearTable({ tableName: TABLE_SCORER_DEFINITION_VERSIONS });\n await this.operations.clearTable({ tableName: TABLE_SCORER_DEFINITIONS });\n }\n\n private safeParseJSON<T = unknown>(val: unknown): T | undefined {\n if (val === null || val === undefined) return undefined;\n if (typeof val === 'string') {\n try {\n return JSON.parse(val) as T;\n } catch {\n return val as T;\n }\n }\n return val as T;\n }\n\n private parseScorerRow(row: Record<string, unknown>): StorageScorerDefinitionType {\n return {\n id: row.id as string,\n status: (row.status as StorageScorerDefinitionType['status']) ?? 'draft',\n activeVersionId: (row.activeVersionId as string) ?? undefined,\n authorId: (row.authorId as string) ?? undefined,\n metadata: this.safeParseJSON(row.metadata) as Record<string, unknown> | undefined,\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n updatedAt: row.updatedAt instanceof Date ? row.updatedAt : new Date(row.updatedAt as string),\n };\n }\n\n private parseVersionRow(row: Record<string, unknown>): ScorerDefinitionVersion {\n return {\n id: row.id as string,\n scorerDefinitionId: row.scorerDefinitionId as string,\n versionNumber: Number(row.versionNumber),\n name: row.name as string,\n description: (row.description as string) ?? undefined,\n type: row.type as string as ScorerDefinitionVersion['type'],\n model: this.safeParseJSON(row.model) as ScorerDefinitionVersion['model'],\n instructions: (row.instructions as string) ?? undefined,\n scoreRange: this.safeParseJSON(row.scoreRange) as ScorerDefinitionVersion['scoreRange'],\n presetConfig: this.safeParseJSON(row.presetConfig) as ScorerDefinitionVersion['presetConfig'],\n defaultSampling: this.safeParseJSON(row.defaultSampling) as ScorerDefinitionVersion['defaultSampling'],\n changedFields: this.safeParseJSON(row.changedFields) as string[] | undefined,\n changeMessage: (row.changeMessage as string) ?? undefined,\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n };\n }\n\n async getById(id: string): Promise<StorageScorerDefinitionType | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_SCORER_DEFINITIONS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n return rows.length ? this.parseScorerRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_SCORER_DEFINITION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async create(input: { scorerDefinition: StorageCreateScorerDefinitionInput }): Promise<StorageScorerDefinitionType> {\n const { scorerDefinition } = input;\n try {\n const now = new Date();\n await this.operations.insert({\n tableName: TABLE_SCORER_DEFINITIONS,\n record: {\n id: scorerDefinition.id,\n status: 'draft',\n activeVersionId: null,\n authorId: scorerDefinition.authorId ?? null,\n metadata: scorerDefinition.metadata ?? null,\n createdAt: now,\n updatedAt: now,\n },\n });\n\n const { id: _id, authorId: _authorId, metadata: _metadata, ...snapshotConfig } = scorerDefinition;\n const versionId = crypto.randomUUID();\n try {\n await this.createVersion({\n id: versionId,\n scorerDefinitionId: scorerDefinition.id,\n versionNumber: 1,\n ...snapshotConfig,\n changedFields: Object.keys(snapshotConfig),\n changeMessage: 'Initial version',\n });\n } catch (versionError) {\n try {\n await this.operations.delete({ tableName: TABLE_SCORER_DEFINITIONS, keys: { id: scorerDefinition.id } });\n } catch (rollbackError) {\n console.error('Failed to rollback scorer definition creation:', rollbackError);\n }\n throw versionError;\n }\n\n return {\n id: scorerDefinition.id,\n status: 'draft',\n activeVersionId: undefined,\n authorId: scorerDefinition.authorId,\n metadata: scorerDefinition.metadata,\n createdAt: now,\n updatedAt: now,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_SCORER_DEFINITION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async update(input: StorageUpdateScorerDefinitionInput): Promise<StorageScorerDefinitionType> {\n const { id, ...updates } = input;\n try {\n const existing = await this.getById(id);\n if (!existing) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_SCORER_DEFINITION', 'NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Scorer definition with id ${id} not found`,\n details: { id },\n });\n }\n\n const { authorId, activeVersionId, metadata, status } = updates;\n const updateData: Record<string, unknown> = { updatedAt: new Date() };\n if (authorId !== undefined) updateData.authorId = authorId;\n if (activeVersionId !== undefined) updateData.activeVersionId = activeVersionId;\n if (status !== undefined) updateData.status = status;\n if (metadata !== undefined) updateData.metadata = { ...existing.metadata, ...metadata };\n\n await this.operations.update({ tableName: TABLE_SCORER_DEFINITIONS, keys: { id }, data: updateData });\n\n const updated = await this.getById(id);\n if (!updated)\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_SCORER_DEFINITION', 'NOT_FOUND_AFTER_UPDATE'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `Scorer definition ${id} not found after update`,\n details: { id },\n });\n return updated;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'UPDATE_SCORER_DEFINITION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async delete(id: string): Promise<void> {\n try {\n await this.operations.withTransaction(async () => {\n await this.deleteVersionsByParentId(id);\n await this.operations.delete({ tableName: TABLE_SCORER_DEFINITIONS, keys: { id } });\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_SCORER_DEFINITION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async list(args?: StorageListScorerDefinitionsInput): Promise<StorageListScorerDefinitionsOutput> {\n try {\n const { page = 0, perPage: perPageInput, orderBy, authorId, metadata, status } = args || {};\n const { field, direction } = this.parseOrderBy(orderBy);\n\n const conditions: string[] = [];\n const queryParams: any[] = [];\n if (status) {\n conditions.push(`${quoteIdentifier('status', 'column name')} = ?`);\n queryParams.push(status);\n }\n if (authorId !== undefined) {\n conditions.push(`${quoteIdentifier('authorId', 'column name')} = ?`);\n queryParams.push(authorId);\n }\n if (metadata && Object.keys(metadata).length > 0) {\n for (const [key, value] of Object.entries(metadata)) {\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(key))\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'LIST_SCORER_DEFINITIONS', 'INVALID_METADATA_KEY'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Invalid metadata key: ${key}`,\n details: { key },\n });\n if (typeof value === 'string') {\n conditions.push(\n `JSON_UNQUOTE(JSON_EXTRACT(${quoteIdentifier('metadata', 'column name')}, '$.${key}')) = ?`,\n );\n queryParams.push(value);\n } else {\n conditions.push(\n `JSON_EXTRACT(${quoteIdentifier('metadata', 'column name')}, '$.${key}') = CAST(? AS JSON)`,\n );\n queryParams.push(JSON.stringify(value));\n }\n }\n }\n\n const whereClause =\n conditions.length > 0 ? { sql: ` WHERE ${conditions.join(' AND ')}`, args: queryParams } : undefined;\n const total = await this.operations.loadTotalCount({ tableName: TABLE_SCORER_DEFINITIONS, whereClause });\n if (total === 0) return { scorerDefinitions: [], total: 0, page, perPage: perPageInput ?? 100, hasMore: false };\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_SCORER_DEFINITIONS,\n whereClause,\n orderBy: `${quoteIdentifier(field, 'column name')} ${direction}`,\n offset,\n limit: limitValue,\n });\n\n return {\n scorerDefinitions: rows.map(row => this.parseScorerRow(row)),\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_SCORER_DEFINITIONS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n // ==========================================================================\n // Version Methods\n // ==========================================================================\n\n async createVersion(input: CreateScorerDefinitionVersionInput): Promise<ScorerDefinitionVersion> {\n try {\n const now = new Date();\n await this.operations.insert({\n tableName: TABLE_SCORER_DEFINITION_VERSIONS,\n record: {\n id: input.id,\n scorerDefinitionId: input.scorerDefinitionId,\n versionNumber: input.versionNumber,\n name: input.name,\n description: input.description ?? null,\n type: input.type,\n model: input.model ?? null,\n instructions: input.instructions ?? null,\n scoreRange: input.scoreRange ?? null,\n presetConfig: input.presetConfig ?? null,\n defaultSampling: input.defaultSampling ?? null,\n changedFields: input.changedFields ?? null,\n changeMessage: input.changeMessage ?? null,\n createdAt: now,\n },\n });\n return { ...input, createdAt: now };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_SCORER_DEFINITION_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getVersion(id: string): Promise<ScorerDefinitionVersion | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_SCORER_DEFINITION_VERSIONS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_SCORER_DEFINITION_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getVersionByNumber(scorerDefinitionId: string, versionNumber: number): Promise<ScorerDefinitionVersion | null> {\n try {\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_SCORER_DEFINITION_VERSIONS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('scorerDefinitionId', 'column name')} = ? AND ${quoteIdentifier('versionNumber', 'column name')} = ?`,\n args: [scorerDefinitionId, versionNumber],\n },\n limit: 1,\n });\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_SCORER_DEFINITION_VERSION_BY_NUMBER', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getLatestVersion(scorerDefinitionId: string): Promise<ScorerDefinitionVersion | null> {\n try {\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_SCORER_DEFINITION_VERSIONS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('scorerDefinitionId', 'column name')} = ?`,\n args: [scorerDefinitionId],\n },\n orderBy: `${quoteIdentifier('versionNumber', 'column name')} DESC`,\n limit: 1,\n });\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_LATEST_SCORER_DEFINITION_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listVersions(input: ListScorerDefinitionVersionsInput): Promise<ListScorerDefinitionVersionsOutput> {\n try {\n const { scorerDefinitionId, page = 0, perPage: perPageInput, orderBy } = input;\n const { field, direction } = this.parseVersionOrderBy(orderBy);\n const whereClause = {\n sql: ` WHERE ${quoteIdentifier('scorerDefinitionId', 'column name')} = ?`,\n args: [scorerDefinitionId],\n };\n const total = await this.operations.loadTotalCount({ tableName: TABLE_SCORER_DEFINITION_VERSIONS, whereClause });\n if (total === 0) return { versions: [], total: 0, page, perPage: perPageInput ?? 20, hasMore: false };\n\n const perPage = normalizePerPage(perPageInput, 20);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_SCORER_DEFINITION_VERSIONS,\n whereClause,\n orderBy: `${quoteIdentifier(field, 'column name')} ${direction}`,\n offset,\n limit: limitValue,\n });\n\n return {\n versions: rows.map(row => this.parseVersionRow(row)),\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_SCORER_DEFINITION_VERSIONS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteVersion(id: string): Promise<void> {\n try {\n await this.operations.delete({ tableName: TABLE_SCORER_DEFINITION_VERSIONS, keys: { id } });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_SCORER_DEFINITION_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteVersionsByParentId(entityId: string): Promise<void> {\n try {\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_SCORER_DEFINITION_VERSIONS)} WHERE ${quoteIdentifier('scorerDefinitionId', 'column name')} = ?`,\n [entityId],\n );\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_SCORER_DEFINITION_VERSIONS_BY_SCORER', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async countVersions(scorerDefinitionId: string): Promise<number> {\n try {\n return await this.operations.loadTotalCount({\n tableName: TABLE_SCORER_DEFINITION_VERSIONS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('scorerDefinitionId', 'column name')} = ?`,\n args: [scorerDefinitionId],\n },\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'COUNT_SCORER_DEFINITION_VERSIONS', '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 type { ScoreRowData, ScoringSource } from '@mastra/core/evals';\nimport {\n ScoresStorage,\n SCORERS_SCHEMA,\n TABLE_SCHEMAS,\n TABLE_SCORERS,\n calculatePagination,\n normalizePerPage,\n} from '@mastra/core/storage';\nimport type { PaginationInfo, StoragePagination, CreateIndexOptions } from '@mastra/core/storage';\nimport type { Pool } from 'mysql2/promise';\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL, generateIndexSQL } from '../operations';\nimport { parseDateTime, quoteIdentifier } from '../utils';\n\ntype SaveScoreInput = Omit<ScoreRowData, 'id' | 'createdAt' | 'updatedAt'>;\ntype ListScoresResult = { pagination: PaginationInfo; scores: ScoreRowData[] };\n\ninterface ScoreRow {\n id: string;\n scorerId: string;\n traceId: string | null;\n spanId: string | null;\n runId: string;\n score: number;\n reason: string | null;\n metadata: string | null;\n preprocessStepResult: string | null;\n extractStepResult: string | null;\n analyzeStepResult: string | null;\n preprocessPrompt: string | null;\n extractPrompt: string | null;\n generateScorePrompt: string | null;\n generateReasonPrompt: string | null;\n analyzePrompt: string | null;\n reasonPrompt: string | null;\n scorer: string | null;\n input: string | null;\n output: string | null;\n additionalContext: string | null;\n requestContext: string | null;\n entityType: string | null;\n entity: string | null;\n entityId: string | null;\n source: string | null;\n resourceId: string | null;\n threadId: string | null;\n createdAt: Date | string;\n updatedAt: Date | string;\n}\n\nfunction parseJSON<T>(value: unknown): T | undefined {\n if (value === null || value === undefined) return undefined;\n if (typeof value === 'string') {\n if (!value) return undefined;\n try {\n return JSON.parse(value) as T;\n } catch {\n return undefined;\n }\n }\n if (typeof value === 'object') {\n return value as T;\n }\n return undefined;\n}\n\nexport class ScoresMySQL extends ScoresStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n static readonly MANAGED_TABLES = [TABLE_SCORERS] as const;\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx => (ScoresMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({ tableName: TABLE_SCORERS, schema: SCORERS_SCHEMA });\n await this.operations.alterTable({\n tableName: TABLE_SCORERS,\n schema: SCORERS_SCHEMA,\n ifNotExists: ['spanId', 'requestContext'],\n });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n static getDefaultIndexDefs(prefix: string = ''): CreateIndexOptions[] {\n return [\n {\n name: `${prefix}mastra_scores_trace_id_span_id_created_at_idx`,\n table: TABLE_SCORERS,\n columns: ['traceId', 'spanId', 'createdAt DESC'],\n },\n ];\n }\n\n static getExportDDL(): string[] {\n const statements: string[] = [];\n\n statements.push(\n generateTableSQL({\n tableName: TABLE_SCORERS,\n schema: TABLE_SCHEMAS[TABLE_SCORERS],\n }),\n );\n\n for (const idx of ScoresMySQL.getDefaultIndexDefs()) {\n statements.push(generateIndexSQL(idx));\n }\n\n return statements;\n }\n\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return ScoresMySQL.getDefaultIndexDefs('');\n }\n\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n for (const indexDef of this.getDefaultIndexDefinitions()) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.pool.execute(`DELETE FROM ${TABLE_SCORERS}`);\n }\n\n private mapScore(row: ScoreRow): ScoreRowData {\n const mapped = {\n id: row.id,\n scorerId: row.scorerId,\n traceId: row.traceId ?? undefined,\n spanId: row.spanId ?? undefined,\n runId: row.runId,\n score: row.score,\n reason: row.reason ?? undefined,\n metadata: parseJSON<Record<string, unknown>>(row.metadata),\n preprocessStepResult: parseJSON<Record<string, unknown>>(row.preprocessStepResult),\n extractStepResult: parseJSON<Record<string, unknown>>(row.extractStepResult),\n analyzeStepResult: parseJSON<Record<string, unknown>>(row.analyzeStepResult),\n preprocessPrompt: row.preprocessPrompt ?? undefined,\n extractPrompt: row.extractPrompt ?? undefined,\n generateScorePrompt: row.generateScorePrompt ?? undefined,\n generateReasonPrompt: row.generateReasonPrompt ?? undefined,\n analyzePrompt: row.analyzePrompt ?? undefined,\n reasonPrompt: row.reasonPrompt ?? undefined,\n scorer: parseJSON<Record<string, unknown>>(row.scorer) as ScoreRowData['scorer'],\n input: parseJSON<any>(row.input) ?? undefined,\n output: parseJSON<Record<string, unknown>>(row.output),\n additionalContext: parseJSON<Record<string, unknown>>(row.additionalContext),\n requestContext: parseJSON<Record<string, unknown>>(row.requestContext) ?? undefined,\n // entityType is required by the ScoreRowData type but may be null in DB; keep as-is and cast below\n entityType: (row.entityType ?? undefined) as any,\n entity: parseJSON<Record<string, unknown>>(row.entity),\n entityId: row.entityId ?? undefined,\n source: (row.source ?? undefined) as ScoreRowData['source'],\n resourceId: row.resourceId ?? undefined,\n threadId: row.threadId ?? undefined,\n createdAt: parseDateTime(row.createdAt) ?? new Date(),\n updatedAt: parseDateTime(row.updatedAt) ?? new Date(),\n };\n return mapped as ScoreRowData;\n }\n\n private serializeScore(score: SaveScoreInput, id: string, createdAt: Date, updatedAt: Date): Record<string, any> {\n const toJson = (value: unknown): string | null => (value === undefined ? null : JSON.stringify(value));\n\n return {\n id,\n scorerId: score.scorerId,\n traceId: score.traceId ?? null,\n spanId: score.spanId ?? null,\n runId: score.runId,\n score: score.score,\n reason: score.reason ?? null,\n metadata: toJson(score.metadata),\n preprocessStepResult: toJson(score.preprocessStepResult),\n extractStepResult: toJson(score.extractStepResult),\n analyzeStepResult: toJson(score.analyzeStepResult),\n preprocessPrompt: score.preprocessPrompt ?? null,\n extractPrompt: score.extractPrompt ?? null,\n generateScorePrompt: score.generateScorePrompt ?? null,\n generateReasonPrompt: score.generateReasonPrompt ?? null,\n analyzePrompt: score.analyzePrompt ?? null,\n reasonPrompt: score.reasonPrompt ?? null,\n scorer: toJson(score.scorer),\n input: toJson(score.input),\n output: toJson(score.output),\n additionalContext: toJson(score.additionalContext),\n requestContext: toJson(score.requestContext),\n entityType: score.entityType ?? null,\n entity: toJson(score.entity),\n entityId: score.entityId ?? null,\n resourceId: score.resourceId ?? null,\n threadId: score.threadId ?? null,\n source: score.source ?? null,\n createdAt,\n updatedAt,\n };\n }\n\n async saveScore(score: SaveScoreInput): Promise<{ score: ScoreRowData }> {\n try {\n const id = crypto.randomUUID();\n const now = new Date();\n\n await this.operations.insert({\n tableName: TABLE_SCORERS,\n record: this.serializeScore(score, id, now, now),\n });\n return { score: { ...score, id, createdAt: now, updatedAt: now } as ScoreRowData };\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_SCORES_SAVE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getScoreById({ id }: { id: string }): Promise<ScoreRowData | null> {\n try {\n const row = await this.operations.load<ScoreRow>({ tableName: TABLE_SCORERS, keys: { id } });\n return row ? this.mapScore(row) : null;\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_SCORES_GET_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { id },\n },\n error,\n );\n }\n }\n\n private async fetchScores(\n whereClause: { sql: string; args: any[] },\n pagination: StoragePagination,\n ): Promise<ListScoresResult> {\n const { page = 0, perPage: perPageInput } = pagination;\n const perPageNormalized = normalizePerPage(perPageInput, 50);\n const { offset, perPage } = calculatePagination(page, perPageInput, perPageNormalized);\n\n const total = await this.operations.loadTotalCount({ tableName: TABLE_SCORERS, whereClause });\n if (total === 0) {\n return {\n scores: [],\n pagination: { total: 0, page, perPage, hasMore: false },\n };\n }\n\n const limitValue = perPageInput === false ? total : perPageNormalized;\n\n const rows = await this.operations.loadMany<ScoreRow>({\n tableName: TABLE_SCORERS,\n whereClause,\n orderBy: `${quoteIdentifier('createdAt', 'column name')} DESC`,\n offset,\n limit: limitValue,\n });\n\n const scores = rows.map(row => this.mapScore(row));\n\n return {\n scores,\n pagination: {\n total,\n page,\n perPage,\n hasMore: perPageInput === false ? false : offset + scores.length < total,\n },\n };\n }\n\n private buildWhereClause(filters: Record<string, string | undefined>): { sql: string; args: any[] } {\n const conditions: string[] = [];\n const args: any[] = [];\n for (const [column, value] of Object.entries(filters)) {\n if (value !== undefined) {\n conditions.push(`${quoteIdentifier(column, 'column name')} = ?`);\n args.push(value);\n }\n }\n return {\n sql: conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '',\n args,\n };\n }\n\n async getScoresByScorerId(args: {\n scorerId: string;\n pagination: StoragePagination;\n entityId?: string;\n entityType?: string;\n source?: ScoringSource;\n }): Promise<ListScoresResult> {\n return this.listScoresByScorerId(args);\n }\n\n async getScoresByRunId(args: { runId: string; pagination: StoragePagination }): Promise<ListScoresResult> {\n return this.listScoresByRunId(args);\n }\n\n async getScoresByEntityId(args: {\n entityId: string;\n entityType: string;\n pagination: StoragePagination;\n }): Promise<ListScoresResult> {\n return this.listScoresByEntityId(args);\n }\n\n async getScoresBySpan(args: {\n traceId: string;\n spanId: string;\n pagination: StoragePagination;\n }): Promise<ListScoresResult> {\n return this.listScoresBySpan(args);\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<ListScoresResult> {\n return this.fetchScores(this.buildWhereClause({ scorerId, entityId, entityType, source }), pagination);\n }\n\n async listScoresByRunId({\n runId,\n pagination,\n entityId,\n entityType,\n source,\n }: {\n runId: string;\n pagination: StoragePagination;\n entityId?: string;\n entityType?: string;\n source?: ScoringSource;\n }): Promise<ListScoresResult> {\n return this.fetchScores(this.buildWhereClause({ runId, entityId, entityType, source }), pagination);\n }\n\n async listScoresBySpan({\n traceId,\n spanId,\n pagination,\n }: {\n traceId: string;\n spanId: string;\n pagination: StoragePagination;\n }): Promise<ListScoresResult> {\n return this.fetchScores(this.buildWhereClause({ traceId, spanId }), pagination);\n }\n\n async listScoresByEntityId({\n entityId,\n pagination,\n entityType,\n source,\n }: {\n entityId: string;\n pagination: StoragePagination;\n entityType?: string;\n source?: ScoringSource;\n }): Promise<ListScoresResult> {\n return this.fetchScores(this.buildWhereClause({ entityId, entityType, source }), pagination);\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n SkillsStorage,\n createStorageErrorId,\n normalizePerPage,\n calculatePagination,\n TABLE_SKILLS,\n TABLE_SKILL_VERSIONS,\n TABLE_FAVORITES,\n TABLE_SCHEMAS,\n SKILLS_SCHEMA,\n SKILL_VERSIONS_SCHEMA,\n} from '@mastra/core/storage';\nimport type {\n CreateIndexOptions,\n StorageSkillType,\n StorageCreateSkillInput,\n StorageUpdateSkillInput,\n StorageListSkillsInput,\n StorageListSkillsOutput,\n} from '@mastra/core/storage';\nimport type {\n SkillVersion,\n CreateSkillVersionInput,\n ListSkillVersionsInput,\n ListSkillVersionsOutput,\n} from '@mastra/core/storage/domains/skills';\nimport type { Pool, RowDataPacket } from 'mysql2/promise';\n\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL } from '../operations';\nimport { formatTableName, quoteIdentifier } from '../utils';\n\nconst SNAPSHOT_FIELDS = [\n 'name',\n 'description',\n 'instructions',\n 'license',\n 'compatibility',\n 'source',\n 'references',\n 'scripts',\n 'assets',\n 'metadata',\n 'tree',\n] as const;\n\nexport class SkillsMySQL extends SkillsStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_SKILLS, TABLE_SKILL_VERSIONS] as const;\n\n /**\n * Returns default index definitions for the skills domain tables.\n * Currently no default indexes are defined for skills.\n */\n static getDefaultIndexDefs(_prefix: string = ''): CreateIndexOptions[] {\n return [];\n }\n\n /**\n * Exports DDL statements for all managed tables.\n */\n static getExportDDL(): string[] {\n return [\n generateTableSQL({ tableName: TABLE_SKILLS, schema: TABLE_SCHEMAS[TABLE_SKILLS] }),\n generateTableSQL({ tableName: TABLE_SKILL_VERSIONS, schema: TABLE_SCHEMAS[TABLE_SKILL_VERSIONS] }),\n ];\n }\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx => (SkillsMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n /**\n * Returns default index definitions for the skills domain tables.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return SkillsMySQL.getDefaultIndexDefs('');\n }\n\n /**\n * Creates default indexes for optimal query performance.\n * Currently no default indexes are defined for skills.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n // No default indexes for skills domain\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({ tableName: TABLE_SKILLS, schema: SKILLS_SCHEMA });\n await this.operations.createTable({ tableName: TABLE_SKILL_VERSIONS, schema: SKILL_VERSIONS_SCHEMA });\n await this.operations.alterTable({\n tableName: TABLE_SKILLS,\n schema: SKILLS_SCHEMA,\n ifNotExists: ['visibility', 'favoriteCount'],\n });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.operations.clearTable({ tableName: TABLE_SKILL_VERSIONS });\n await this.operations.clearTable({ tableName: TABLE_SKILLS });\n }\n\n private safeParseJSON(val: unknown): any {\n if (val === null || val === undefined) return undefined;\n if (typeof val === 'string') {\n try {\n return JSON.parse(val);\n } catch {\n return val;\n }\n }\n return val;\n }\n\n private parseSkillRow(row: Record<string, unknown>): StorageSkillType {\n return {\n id: row.id as string,\n status: (row.status as StorageSkillType['status']) ?? 'draft',\n activeVersionId: (row.activeVersionId as string) ?? undefined,\n authorId: (row.authorId as string) ?? undefined,\n favoriteCount: row.favoriteCount === null || row.favoriteCount === undefined ? 0 : Number(row.favoriteCount),\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n updatedAt: row.updatedAt instanceof Date ? row.updatedAt : new Date(row.updatedAt as string),\n };\n }\n\n private parseVersionRow(row: Record<string, unknown>): SkillVersion {\n return {\n id: row.id as string,\n skillId: row.skillId as string,\n versionNumber: Number(row.versionNumber),\n name: row.name as string,\n description: (row.description as string) ?? undefined,\n instructions: (row.instructions as string) ?? undefined,\n license: (row.license as string) ?? undefined,\n compatibility: this.safeParseJSON(row.compatibility) as SkillVersion['compatibility'],\n source: this.safeParseJSON(row.source) as SkillVersion['source'],\n references: this.safeParseJSON(row.references) as SkillVersion['references'],\n scripts: this.safeParseJSON(row.scripts) as SkillVersion['scripts'],\n assets: this.safeParseJSON(row.assets) as SkillVersion['assets'],\n metadata: this.safeParseJSON(row.metadata) as Record<string, unknown> | undefined,\n tree: this.safeParseJSON(row.tree) as SkillVersion['tree'],\n changedFields: this.safeParseJSON(row.changedFields) as string[] | undefined,\n changeMessage: (row.changeMessage as string) ?? undefined,\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n };\n }\n\n async getById(id: string): Promise<StorageSkillType | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_SKILLS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n return rows.length ? this.parseSkillRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_SKILL', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async create(input: { skill: StorageCreateSkillInput }): Promise<StorageSkillType> {\n const { skill } = input;\n try {\n const now = new Date();\n await this.operations.insert({\n tableName: TABLE_SKILLS,\n record: {\n id: skill.id,\n status: 'draft',\n activeVersionId: null,\n authorId: skill.authorId ?? null,\n favoriteCount: 0,\n createdAt: now,\n updatedAt: now,\n },\n });\n\n const { id: _id, authorId: _authorId, ...snapshotConfig } = skill;\n const versionId = crypto.randomUUID();\n try {\n await this.createVersion({\n id: versionId,\n skillId: skill.id,\n versionNumber: 1,\n ...snapshotConfig,\n changedFields: Object.keys(snapshotConfig),\n changeMessage: 'Initial version',\n });\n } catch (versionError) {\n await this.operations.delete({ tableName: TABLE_SKILLS, keys: { id: skill.id } });\n throw versionError;\n }\n\n return {\n id: skill.id,\n status: 'draft',\n activeVersionId: undefined,\n authorId: skill.authorId,\n favoriteCount: 0,\n createdAt: now,\n updatedAt: now,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_SKILL', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async update(input: StorageUpdateSkillInput): Promise<StorageSkillType> {\n const { id, ...updates } = input;\n try {\n const existing = await this.getById(id);\n if (!existing)\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_SKILL', 'NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Skill ${id} not found`,\n details: { skillId: id },\n });\n\n const { authorId, activeVersionId, status, ...configFields } = updates;\n const configFieldNames = SNAPSHOT_FIELDS as readonly string[];\n const hasConfigUpdate = configFieldNames.some(field => field in configFields);\n\n const updateData: Record<string, unknown> = { updatedAt: new Date() };\n if (authorId !== undefined) updateData.authorId = authorId;\n if (activeVersionId !== undefined) {\n updateData.activeVersionId = activeVersionId;\n if (status === undefined) updateData.status = 'published';\n }\n if (status !== undefined) updateData.status = status;\n\n await this.operations.update({ tableName: TABLE_SKILLS, keys: { id }, data: updateData });\n\n if (hasConfigUpdate) {\n const latestVersion = await this.getLatestVersion(id);\n if (!latestVersion)\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_SKILL', 'NO_VERSIONS'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `No versions found for skill ${id}`,\n details: { skillId: id },\n });\n\n const {\n id: _versionId,\n skillId: _skillId,\n versionNumber: _versionNumber,\n changedFields: _changedFields,\n changeMessage: _changeMessage,\n createdAt: _createdAt,\n ...latestConfig\n } = latestVersion;\n const newConfig = { ...latestConfig, ...configFields };\n const changedFields = configFieldNames.filter(\n field =>\n field in configFields &&\n JSON.stringify(configFields[field as keyof typeof configFields]) !==\n JSON.stringify(latestConfig[field as keyof typeof latestConfig]),\n );\n\n if (changedFields.length > 0) {\n const newVersionId = crypto.randomUUID();\n await this.createVersion({\n id: newVersionId,\n skillId: id,\n versionNumber: latestVersion.versionNumber + 1,\n ...newConfig,\n changedFields,\n changeMessage: `Updated ${changedFields.join(', ')}`,\n });\n }\n }\n\n const updated = await this.getById(id);\n if (!updated)\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_SKILL', 'NOT_FOUND_AFTER_UPDATE'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `Skill ${id} not found after update`,\n details: { id },\n });\n return updated;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'UPDATE_SKILL', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async delete(id: string): Promise<void> {\n try {\n await this.deleteVersionsByParentId(id);\n await this.operations.delete({ tableName: TABLE_SKILLS, keys: { id } });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_SKILL', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async list(args?: StorageListSkillsInput): Promise<StorageListSkillsOutput> {\n try {\n const {\n page = 0,\n perPage: perPageInput,\n orderBy,\n authorId,\n status,\n visibility,\n entityIds,\n pinFavoritedFor,\n favoritedOnly,\n } = args || {};\n const { field, direction } = this.parseOrderBy(orderBy);\n\n if (page < 0) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_SKILLS', '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 perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n // Empty entityIds is short-circuit: no rows possible\n if (entityIds && entityIds.length === 0) {\n return { skills: [], total: 0, page, perPage: perPageForResponse, hasMore: false };\n }\n\n const skillsTable = formatTableName(TABLE_SKILLS);\n const favoritesTable = formatTableName(TABLE_FAVORITES);\n\n // Build WHERE conditions\n const conditions: string[] = [];\n const queryParams: any[] = [];\n let paramIdx = 0;\n\n // Determine if we need a JOIN\n const joinUserId = pinFavoritedFor;\n const useJoin = Boolean(joinUserId);\n let joinUserIdParamIdx: number | null = null;\n if (useJoin) {\n joinUserIdParamIdx = paramIdx++;\n }\n\n if (status) {\n conditions.push(`s.${quoteIdentifier('status', 'column name')} = ?`);\n queryParams.push(status);\n paramIdx++;\n }\n\n if (authorId !== undefined) {\n conditions.push(`s.${quoteIdentifier('authorId', 'column name')} = ?`);\n queryParams.push(authorId);\n paramIdx++;\n }\n\n if (visibility !== undefined) {\n conditions.push(`s.${quoteIdentifier('visibility', 'column name')} = ?`);\n queryParams.push(visibility);\n paramIdx++;\n }\n\n if (entityIds && entityIds.length > 0) {\n const placeholders = entityIds.map(() => '?').join(', ');\n conditions.push(`s.${quoteIdentifier('id', 'column name')} IN (${placeholders})`);\n queryParams.push(...entityIds);\n paramIdx += entityIds.length;\n }\n\n // Handle favoritedOnly\n if (useJoin && favoritedOnly) {\n conditions.push(`sr.${quoteIdentifier('userId', 'column name')} IS NOT NULL`);\n } else if (favoritedOnly) {\n // Defensive: favoritedOnly with no userId can never match a real row\n conditions.push('1=0');\n }\n\n const joinClause =\n useJoin && joinUserIdParamIdx !== null\n ? `LEFT JOIN ${favoritesTable} sr ON sr.${quoteIdentifier('entityType', 'column name')} = 'skill' AND sr.${quoteIdentifier('entityId', 'column name')} = s.${quoteIdentifier('id', 'column name')} AND sr.${quoteIdentifier('userId', 'column name')} = ?`\n : '';\n\n const joinParams: any[] = useJoin && joinUserId ? [joinUserId] : [];\n const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';\n\n // Get total count\n const [countRows] = await this.pool.query<RowDataPacket[]>(\n `SELECT COUNT(*) as count FROM ${skillsTable} s ${joinClause} ${whereClause}`,\n [...joinParams, ...queryParams],\n );\n const total = parseInt(countRows[0]?.count ?? '0', 10);\n\n if (total === 0) {\n return { skills: [], total: 0, page, perPage: perPageForResponse, hasMore: false };\n }\n\n const limitValue = perPageInput === false ? total : perPage;\n const hasMore = perPageInput === false ? false : offset + perPage < total;\n\n // Build ORDER BY\n let orderByClause: string;\n if (useJoin) {\n // Pin favorited skills first\n orderByClause = `CASE WHEN sr.${quoteIdentifier('userId', 'column name')} IS NOT NULL THEN 0 ELSE 1 END ASC, s.${quoteIdentifier(field, 'column name')} ${direction}`;\n } else {\n orderByClause = `s.${quoteIdentifier(field, 'column name')} ${direction}`;\n }\n\n const [rows] = await this.pool.query<RowDataPacket[]>(\n `SELECT s.* FROM ${skillsTable} s ${joinClause} ${whereClause} ORDER BY ${orderByClause} LIMIT ? OFFSET ?`,\n [...joinParams, ...queryParams, limitValue, offset],\n );\n\n return {\n skills: rows.map(row => this.parseSkillRow(row)),\n total,\n page,\n perPage: perPageForResponse,\n hasMore,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_SKILLS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n // ==========================================================================\n // Version Methods\n // ==========================================================================\n\n async createVersion(input: CreateSkillVersionInput): Promise<SkillVersion> {\n try {\n const now = new Date();\n await this.operations.insert({\n tableName: TABLE_SKILL_VERSIONS,\n record: {\n id: input.id,\n skillId: input.skillId,\n versionNumber: input.versionNumber,\n name: input.name,\n description: input.description ?? null,\n instructions: input.instructions ?? null,\n license: input.license ?? null,\n compatibility: input.compatibility ?? null,\n source: input.source ?? null,\n references: input.references ?? null,\n scripts: input.scripts ?? null,\n assets: input.assets ?? null,\n metadata: input.metadata ?? null,\n tree: input.tree ?? null,\n changedFields: input.changedFields ?? null,\n changeMessage: input.changeMessage ?? null,\n createdAt: now,\n },\n });\n return { ...input, createdAt: now };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_SKILL_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getVersion(id: string): Promise<SkillVersion | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_SKILL_VERSIONS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_SKILL_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getVersionByNumber(skillId: string, versionNumber: number): Promise<SkillVersion | null> {\n try {\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_SKILL_VERSIONS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('skillId', 'column name')} = ? AND ${quoteIdentifier('versionNumber', 'column name')} = ?`,\n args: [skillId, versionNumber],\n },\n limit: 1,\n });\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_SKILL_VERSION_BY_NUMBER', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getLatestVersion(skillId: string): Promise<SkillVersion | null> {\n try {\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_SKILL_VERSIONS,\n whereClause: { sql: ` WHERE ${quoteIdentifier('skillId', 'column name')} = ?`, args: [skillId] },\n orderBy: `${quoteIdentifier('versionNumber', 'column name')} DESC`,\n limit: 1,\n });\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_LATEST_SKILL_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listVersions(input: ListSkillVersionsInput): Promise<ListSkillVersionsOutput> {\n try {\n const { skillId, page = 0, perPage: perPageInput, orderBy } = input;\n const { field, direction } = this.parseVersionOrderBy(orderBy);\n const whereClause = { sql: ` WHERE ${quoteIdentifier('skillId', 'column name')} = ?`, args: [skillId] };\n const total = await this.operations.loadTotalCount({ tableName: TABLE_SKILL_VERSIONS, whereClause });\n if (total === 0) return { versions: [], total: 0, page, perPage: perPageInput ?? 20, hasMore: false };\n\n const perPage = normalizePerPage(perPageInput, 20);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_SKILL_VERSIONS,\n whereClause,\n orderBy: `${quoteIdentifier(field, 'column name')} ${direction}`,\n offset,\n limit: limitValue,\n });\n\n return {\n versions: rows.map(row => this.parseVersionRow(row)),\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_SKILL_VERSIONS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteVersion(id: string): Promise<void> {\n try {\n await this.operations.delete({ tableName: TABLE_SKILL_VERSIONS, keys: { id } });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_SKILL_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteVersionsByParentId(entityId: string): Promise<void> {\n try {\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_SKILL_VERSIONS)} WHERE ${quoteIdentifier('skillId', 'column name')} = ?`,\n [entityId],\n );\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_SKILL_VERSIONS_BY_SKILL', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async countVersions(skillId: string): Promise<number> {\n try {\n return await this.operations.loadTotalCount({\n tableName: TABLE_SKILL_VERSIONS,\n whereClause: { sql: ` WHERE ${quoteIdentifier('skillId', 'column name')} = ?`, args: [skillId] },\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'COUNT_SKILL_VERSIONS', '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 {\n ToolProviderConnectionsStorage,\n createStorageErrorId,\n TABLE_TOOL_PROVIDER_CONNECTIONS,\n TABLE_SCHEMAS,\n TOOL_PROVIDER_CONNECTIONS_SCHEMA,\n} from '@mastra/core/storage';\nimport type {\n CreateIndexOptions,\n StorageDeleteToolProviderConnectionInput,\n StorageListToolProviderConnectionsInput,\n StorageToolProviderConnection,\n StorageToolProviderConnectionKey,\n StorageToolProviderConnectionScope,\n StorageUpsertToolProviderConnectionInput,\n} from '@mastra/core/storage';\nimport type { Pool, RowDataPacket } from 'mysql2/promise';\n\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL } from '../operations';\nimport { formatTableName, quoteIdentifier, transformToSqlValue, parseDateTime } from '../utils';\n\nfunction normaliseScope(raw: unknown): StorageToolProviderConnectionScope {\n const value = raw == null ? 'per-author' : String(raw);\n if (value === 'shared') return 'shared';\n if (value === 'caller-supplied') return 'caller-supplied';\n return 'per-author';\n}\n\nfunction rowToToolProviderConnection(row: Record<string, unknown>): StorageToolProviderConnection {\n return {\n authorId: String(row.authorId),\n providerId: String(row.providerId),\n toolkit: String(row.toolkit),\n connectionId: String(row.connectionId),\n label: row.label == null ? null : String(row.label),\n scope: normaliseScope(row.scope),\n createdAt: parseDateTime(row.createdAt as string | number | Date | null | undefined) ?? new Date(),\n updatedAt: parseDateTime(row.updatedAt as string | number | Date | null | undefined) ?? new Date(),\n };\n}\n\nexport class ToolProviderConnectionsMySQL extends ToolProviderConnectionsStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_TOOL_PROVIDER_CONNECTIONS] as const;\n\n /**\n * Returns default index definitions for the tool-provider-connections domain tables.\n * Currently no default indexes are defined for tool-provider-connections.\n */\n static getDefaultIndexDefs(_prefix: string = ''): CreateIndexOptions[] {\n return [];\n }\n\n /**\n * Exports DDL statements for all managed tables.\n */\n static getExportDDL(): string[] {\n return [\n generateTableSQL({\n tableName: TABLE_TOOL_PROVIDER_CONNECTIONS,\n schema: TABLE_SCHEMAS[TABLE_TOOL_PROVIDER_CONNECTIONS],\n compositePrimaryKey: ['authorId', 'providerId', 'connectionId'],\n }),\n ];\n }\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx =>\n (ToolProviderConnectionsMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table),\n );\n }\n\n /**\n * Returns default index definitions for the tool-provider-connections domain tables.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return ToolProviderConnectionsMySQL.getDefaultIndexDefs('');\n }\n\n /**\n * Creates default indexes for optimal query performance.\n * Currently no default indexes are defined for tool-provider-connections.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n // No default indexes for tool-provider-connections domain\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({\n tableName: TABLE_TOOL_PROVIDER_CONNECTIONS,\n schema: TOOL_PROVIDER_CONNECTIONS_SCHEMA,\n });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.operations.clearTable({ tableName: TABLE_TOOL_PROVIDER_CONNECTIONS });\n }\n\n async getConnectionById({\n authorId,\n providerId,\n connectionId,\n }: StorageToolProviderConnectionKey): Promise<StorageToolProviderConnection | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_TOOL_PROVIDER_CONNECTIONS)} WHERE ${quoteIdentifier('authorId', 'column name')} = ? AND ${quoteIdentifier('providerId', 'column name')} = ? AND ${quoteIdentifier('connectionId', 'column name')} = ? LIMIT 1`,\n [authorId, providerId, connectionId],\n );\n return rows.length ? rowToToolProviderConnection(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'TOOL_PROVIDER_CONNECTION_GET', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { authorId, providerId, connectionId },\n },\n error,\n );\n }\n }\n\n async upsertConnection(input: StorageUpsertToolProviderConnectionInput): Promise<StorageToolProviderConnection> {\n const { authorId, providerId, toolkit, connectionId, label } = input;\n const now = new Date();\n const labelValue = label == null ? null : label;\n\n try {\n return await this.operations.withTransaction(async connection => {\n const [existing] = await connection.execute<RowDataPacket[]>(\n `SELECT ${quoteIdentifier('createdAt', 'column name')}, ${quoteIdentifier('scope', 'column name')} FROM ${formatTableName(TABLE_TOOL_PROVIDER_CONNECTIONS)} WHERE ${quoteIdentifier('authorId', 'column name')} = ? AND ${quoteIdentifier('providerId', 'column name')} = ? AND ${quoteIdentifier('connectionId', 'column name')} = ? LIMIT 1`,\n [authorId, providerId, connectionId],\n );\n\n const existingRow = existing[0];\n const createdAt = existingRow ? existingRow.createdAt : now;\n const existingScope = existingRow && existingRow.scope != null ? normaliseScope(existingRow.scope) : undefined;\n const scope: StorageToolProviderConnectionScope = input.scope ?? existingScope ?? 'per-author';\n\n if (existingRow) {\n await connection.execute(\n `UPDATE ${formatTableName(TABLE_TOOL_PROVIDER_CONNECTIONS)} SET ${quoteIdentifier('toolkit', 'column name')} = ?, ${quoteIdentifier('label', 'column name')} = ?, ${quoteIdentifier('scope', 'column name')} = ?, ${quoteIdentifier('updatedAt', 'column name')} = ? WHERE ${quoteIdentifier('authorId', 'column name')} = ? AND ${quoteIdentifier('providerId', 'column name')} = ? AND ${quoteIdentifier('connectionId', 'column name')} = ?`,\n [toolkit, labelValue, scope, transformToSqlValue(now), authorId, providerId, connectionId],\n );\n } else {\n await connection.execute(\n `INSERT INTO ${formatTableName(TABLE_TOOL_PROVIDER_CONNECTIONS)} (${quoteIdentifier('authorId', 'column name')}, ${quoteIdentifier('providerId', 'column name')}, ${quoteIdentifier('toolkit', 'column name')}, ${quoteIdentifier('connectionId', 'column name')}, ${quoteIdentifier('label', 'column name')}, ${quoteIdentifier('scope', 'column name')}, ${quoteIdentifier('createdAt', 'column name')}, ${quoteIdentifier('updatedAt', 'column name')}) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,\n [\n authorId,\n providerId,\n toolkit,\n connectionId,\n labelValue,\n scope,\n transformToSqlValue(createdAt),\n transformToSqlValue(now),\n ],\n );\n }\n\n return {\n authorId,\n providerId,\n toolkit,\n connectionId,\n label: labelValue,\n scope,\n createdAt: parseDateTime(createdAt) ?? now,\n updatedAt: now,\n };\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'TOOL_PROVIDER_CONNECTION_UPSERT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { authorId, providerId, connectionId },\n },\n error,\n );\n }\n }\n\n async listConnectionsByAuthor({\n authorId,\n providerId,\n toolkit,\n scope,\n }: StorageListToolProviderConnectionsInput): Promise<StorageToolProviderConnection[]> {\n try {\n const clauses: string[] = [];\n const args: (string | number | null)[] = [];\n if (authorId !== undefined) {\n clauses.push(`${quoteIdentifier('authorId', 'column name')} = ?`);\n args.push(authorId);\n }\n if (providerId) {\n clauses.push(`${quoteIdentifier('providerId', 'column name')} = ?`);\n args.push(providerId);\n }\n if (toolkit) {\n clauses.push(`${quoteIdentifier('toolkit', 'column name')} = ?`);\n args.push(toolkit);\n }\n if (scope) {\n clauses.push(`${quoteIdentifier('scope', 'column name')} = ?`);\n args.push(scope);\n }\n const whereClause = clauses.length > 0 ? ` WHERE ${clauses.join(' AND ')}` : '';\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_TOOL_PROVIDER_CONNECTIONS)}${whereClause}`,\n args,\n );\n return rows.map(row => rowToToolProviderConnection(row as Record<string, unknown>));\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'TOOL_PROVIDER_CONNECTION_LIST', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { authorId: authorId ?? '', providerId: providerId ?? '', toolkit: toolkit ?? '' },\n },\n error,\n );\n }\n }\n\n async deleteConnection({\n authorId,\n providerId,\n connectionId,\n }: StorageDeleteToolProviderConnectionInput): Promise<void> {\n try {\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_TOOL_PROVIDER_CONNECTIONS)} WHERE ${quoteIdentifier('authorId', 'column name')} = ? AND ${quoteIdentifier('providerId', 'column name')} = ? AND ${quoteIdentifier('connectionId', 'column name')} = ?`,\n [authorId, providerId, connectionId],\n );\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'TOOL_PROVIDER_CONNECTION_DELETE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { authorId, providerId, connectionId },\n },\n error,\n );\n }\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { TABLE_WORKFLOW_SNAPSHOT, TABLE_SCHEMAS, WorkflowsStorage, normalizePerPage } from '@mastra/core/storage';\nimport type {\n CreateIndexOptions,\n StorageListWorkflowRunsInput,\n UpdateWorkflowStateOptions,\n WorkflowRun,\n WorkflowRuns,\n} from '@mastra/core/storage';\nimport type { StepResult, WorkflowRunState } from '@mastra/core/workflows';\nimport type { Pool, RowDataPacket } from 'mysql2/promise';\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL } from '../operations';\nimport { formatTableName, parseDateTime, quoteIdentifier, transformToSqlValue } from '../utils';\n\ninterface WorkflowRow {\n workflow_name: string;\n run_id: string;\n resourceId: string | null;\n snapshot: string | WorkflowRunState;\n createdAt: Date | string;\n updatedAt: Date | string;\n}\n\nfunction parseSnapshot(snapshot: string | WorkflowRunState): WorkflowRunState | string {\n if (typeof snapshot === 'string') {\n try {\n return JSON.parse(snapshot) as WorkflowRunState;\n } catch {\n return snapshot;\n }\n }\n return snapshot;\n}\n\nfunction mapWorkflowRow(row: WorkflowRow): WorkflowRun {\n return {\n workflowName: row.workflow_name,\n runId: row.run_id,\n resourceId: row.resourceId ?? undefined,\n snapshot: parseSnapshot(row.snapshot),\n createdAt: parseDateTime(row.createdAt) ?? new Date(),\n updatedAt: parseDateTime(row.updatedAt) ?? new Date(),\n };\n}\n\nexport class WorkflowsMySQL extends WorkflowsStorage {\n private operations: StoreOperationsMySQL;\n private pool: Pool;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_WORKFLOW_SNAPSHOT] as const;\n\n /**\n * Returns default index definitions for the workflows domain tables.\n * Currently no default indexes are defined for workflows.\n */\n static getDefaultIndexDefs(_prefix: string = ''): CreateIndexOptions[] {\n return [];\n }\n\n /**\n * Exports DDL statements for all managed tables.\n */\n static getExportDDL(): string[] {\n return [generateTableSQL({ tableName: TABLE_WORKFLOW_SNAPSHOT, schema: TABLE_SCHEMAS[TABLE_WORKFLOW_SNAPSHOT] })];\n }\n\n constructor({\n operations,\n pool,\n skipDefaultIndexes,\n indexes,\n }: {\n operations: StoreOperationsMySQL;\n pool: Pool;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.operations = operations;\n this.pool = pool;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx => (WorkflowsMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n supportsConcurrentUpdates(): boolean {\n return true;\n }\n\n /**\n * Returns default index definitions for the workflows domain tables.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return WorkflowsMySQL.getDefaultIndexDefs('');\n }\n\n /**\n * Creates default indexes for optimal query performance.\n * Currently no default indexes are defined for workflows.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n // No default indexes for workflows domain\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async init(): Promise<void> {\n const schema = TABLE_SCHEMAS[TABLE_WORKFLOW_SNAPSHOT];\n await this.operations.createTable({ tableName: TABLE_WORKFLOW_SNAPSHOT, schema });\n await this.operations.alterTable({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n schema,\n ifNotExists: ['resourceId'],\n });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.pool.execute(`DELETE FROM ${formatTableName(TABLE_WORKFLOW_SNAPSHOT)}`);\n }\n\n async deleteWorkflowRunById({ runId, workflowName }: { runId: string; workflowName: string }): Promise<void> {\n try {\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_WORKFLOW_SNAPSHOT)} WHERE ${quoteIdentifier('workflow_name', 'column name')} = ? AND ${quoteIdentifier('run_id', 'column name')} = ?`,\n [workflowName, runId],\n );\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_WORKFLOWS_DELETE_RUN_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { runId, workflowName },\n },\n error,\n );\n }\n }\n\n async updateWorkflowResults({\n workflowName,\n runId,\n stepId,\n result,\n requestContext,\n }: {\n workflowName: string;\n runId: string;\n stepId: string;\n result: StepResult<any, any, any, any>;\n requestContext?: Record<string, any>;\n }): Promise<Record<string, StepResult<any, any, any, any>>> {\n const connection = await this.pool.getConnection();\n try {\n await connection.beginTransaction();\n const [rows] = await connection.execute<RowDataPacket[]>(\n `SELECT snapshot FROM ${formatTableName(TABLE_WORKFLOW_SNAPSHOT)} WHERE ${quoteIdentifier('workflow_name', 'column name')} = ? AND ${quoteIdentifier('run_id', 'column name')} = ? FOR UPDATE`,\n [workflowName, runId],\n );\n if (!Array.isArray(rows) || rows.length === 0) {\n await connection.rollback();\n throw new MastraError({\n id: 'MYSQL_WORKFLOWS_UPDATE_RESULTS_NOT_FOUND',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { workflowName, runId },\n });\n }\n\n const currentSnapshot = parseSnapshot(rows[0]!.snapshot) as WorkflowRunState;\n const context = { ...(currentSnapshot.context ?? {}) };\n\n context[stepId] = result;\n\n const updatedSnapshot: WorkflowRunState = {\n ...currentSnapshot,\n context,\n requestContext: { ...(currentSnapshot.requestContext ?? {}), ...(requestContext ?? {}) },\n };\n\n await connection.execute(\n `UPDATE ${formatTableName(TABLE_WORKFLOW_SNAPSHOT)} SET ${quoteIdentifier('snapshot', 'column name')} = ?, ${quoteIdentifier('updatedAt', 'column name')} = ? WHERE ${quoteIdentifier('workflow_name', 'column name')} = ? AND ${quoteIdentifier('run_id', 'column name')} = ?`,\n [JSON.stringify(updatedSnapshot), transformToSqlValue(new Date()), workflowName, runId],\n );\n\n await connection.commit();\n\n return context;\n } catch (error) {\n await connection.rollback();\n if (error instanceof MastraError) {\n throw error;\n }\n throw new MastraError(\n {\n id: 'MYSQL_WORKFLOWS_UPDATE_RESULTS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { workflowName, runId, stepId },\n },\n error,\n );\n } finally {\n connection.release();\n }\n }\n\n async updateWorkflowState({\n workflowName,\n runId,\n opts,\n }: {\n workflowName: string;\n runId: string;\n opts: UpdateWorkflowStateOptions;\n }): Promise<WorkflowRunState | undefined> {\n const connection = await this.pool.getConnection();\n try {\n await connection.beginTransaction();\n const [rows] = await connection.execute<RowDataPacket[]>(\n `SELECT snapshot FROM ${formatTableName(TABLE_WORKFLOW_SNAPSHOT)} WHERE ${quoteIdentifier('workflow_name', 'column name')} = ? AND ${quoteIdentifier('run_id', 'column name')} = ? FOR UPDATE`,\n [workflowName, runId],\n );\n if (!Array.isArray(rows) || rows.length === 0) {\n await connection.rollback();\n return undefined;\n }\n\n const existing = parseSnapshot(rows[0]!.snapshot) as WorkflowRunState;\n\n // Merge opts into the snapshot\n const updatedSnapshot = { ...existing, ...opts };\n\n await connection.execute(\n `UPDATE ${formatTableName(TABLE_WORKFLOW_SNAPSHOT)} SET ${quoteIdentifier('snapshot', 'column name')} = ?, ${quoteIdentifier('updatedAt', 'column name')} = ? WHERE ${quoteIdentifier('workflow_name', 'column name')} = ? AND ${quoteIdentifier('run_id', 'column name')} = ?`,\n [JSON.stringify(updatedSnapshot), transformToSqlValue(new Date()), workflowName, runId],\n );\n await connection.commit();\n\n return updatedSnapshot;\n } catch (error) {\n await connection.rollback();\n throw new MastraError(\n {\n id: 'MYSQL_WORKFLOWS_UPDATE_STATE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { workflowName, runId },\n },\n error,\n );\n } finally {\n connection.release();\n }\n }\n\n async persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId,\n snapshot,\n createdAt,\n updatedAt,\n }: {\n workflowName: string;\n runId: string;\n resourceId?: string;\n snapshot: WorkflowRunState;\n createdAt?: Date;\n updatedAt?: Date;\n }): Promise<void> {\n const now = new Date();\n const createdAtValue = createdAt ?? now;\n const updatedAtValue = updatedAt ?? now;\n try {\n const tableName = formatTableName(TABLE_WORKFLOW_SNAPSHOT);\n await this.pool.execute(\n `INSERT INTO ${tableName} (${quoteIdentifier('workflow_name', 'column name')}, ${quoteIdentifier('run_id', 'column name')}, ${quoteIdentifier('resourceId', 'column name')}, ${quoteIdentifier('snapshot', 'column name')}, ${quoteIdentifier('createdAt', 'column name')}, ${quoteIdentifier('updatedAt', 'column name')})\n VALUES (?, ?, ?, ?, ?, ?)\n ON DUPLICATE KEY UPDATE ${quoteIdentifier('resourceId', 'column name')} = VALUES(${quoteIdentifier('resourceId', 'column name')}), ${quoteIdentifier('snapshot', 'column name')} = VALUES(${quoteIdentifier('snapshot', 'column name')}), ${quoteIdentifier('updatedAt', 'column name')} = VALUES(${quoteIdentifier('updatedAt', 'column name')})`,\n [\n workflowName,\n runId,\n resourceId ?? null,\n JSON.stringify(snapshot),\n transformToSqlValue(createdAtValue),\n transformToSqlValue(updatedAtValue),\n ],\n );\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_WORKFLOWS_PERSIST_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 try {\n const row = await this.operations.load<WorkflowRow>({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n keys: { workflow_name: workflowName, run_id: runId },\n });\n return row ? (parseSnapshot(row.snapshot) as WorkflowRunState) : null;\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_WORKFLOWS_LOAD_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 const { workflowName, fromDate, toDate, perPage, page, resourceId, status } = args;\n\n const conditions: string[] = [];\n const params: any[] = [];\n\n if (workflowName) {\n conditions.push(`${quoteIdentifier('workflow_name', 'column name')} = ?`);\n params.push(workflowName);\n }\n if (resourceId) {\n conditions.push(`${quoteIdentifier('resourceId', 'column name')} = ?`);\n params.push(resourceId);\n }\n if (status) {\n conditions.push(`JSON_EXTRACT(${quoteIdentifier('snapshot', 'column name')}, '$.status') = ?`);\n params.push(status);\n }\n if (fromDate) {\n conditions.push(`${quoteIdentifier('createdAt', 'column name')} >= ?`);\n params.push(transformToSqlValue(fromDate));\n }\n if (toDate) {\n conditions.push(`${quoteIdentifier('createdAt', 'column name')} <= ?`);\n params.push(transformToSqlValue(toDate));\n }\n\n const whereSql = conditions.length ? ` WHERE ${conditions.join(' AND ')}` : '';\n const tableName = formatTableName(TABLE_WORKFLOW_SNAPSHOT);\n\n try {\n let total = 0;\n const usePagination = typeof perPage === 'number' && typeof page === 'number';\n\n if (usePagination) {\n const [countRows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT COUNT(*) as count FROM ${tableName}${whereSql}`,\n params,\n );\n total = Number(countRows[0]?.count ?? 0);\n\n if (total === 0) {\n return { runs: [], total: 0 };\n }\n }\n\n let paginationClause = '';\n\n if (usePagination) {\n const normalizedPerPage = normalizePerPage(perPage, Number.MAX_SAFE_INTEGER);\n const offset = page * normalizedPerPage;\n paginationClause = ` LIMIT ${Number(normalizedPerPage)} OFFSET ${Number(offset)}`;\n }\n\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT workflow_name, run_id, resourceId, snapshot, createdAt, updatedAt FROM ${tableName}${whereSql} ORDER BY ${quoteIdentifier('createdAt', 'column name')} DESC${paginationClause}`,\n params,\n );\n\n const runs = (rows as unknown as WorkflowRow[]).map(mapWorkflowRow);\n\n return {\n runs,\n total: total || runs.length,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_WORKFLOWS_GET_RUNS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getWorkflowRuns(args: StorageListWorkflowRunsInput = {}): Promise<WorkflowRuns> {\n return this.listWorkflowRuns(args);\n }\n\n async getWorkflowRunById({\n runId,\n workflowName,\n }: {\n runId: string;\n workflowName?: string;\n }): Promise<WorkflowRun | null> {\n try {\n const runs = await this.operations.loadMany<WorkflowRow>({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n whereClause: {\n sql: workflowName ? ' WHERE workflow_name = ? AND run_id = ?' : ' WHERE run_id = ?',\n args: workflowName ? [workflowName, runId] : [runId],\n },\n orderBy: '`createdAt` DESC',\n limit: 1,\n });\n if (!runs.length) return null;\n return mapWorkflowRow(runs[0]!);\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_WORKFLOWS_GET_RUN_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { runId, workflowName: workflowName ?? '' },\n },\n error,\n );\n }\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n WorkspacesStorage,\n createStorageErrorId,\n normalizePerPage,\n calculatePagination,\n TABLE_WORKSPACES,\n TABLE_WORKSPACE_VERSIONS,\n TABLE_SCHEMAS,\n WORKSPACES_SCHEMA,\n WORKSPACE_VERSIONS_SCHEMA,\n} from '@mastra/core/storage';\nimport type {\n CreateIndexOptions,\n StorageWorkspaceType,\n StorageCreateWorkspaceInput,\n StorageUpdateWorkspaceInput,\n StorageListWorkspacesInput,\n StorageListWorkspacesOutput,\n} from '@mastra/core/storage';\nimport type {\n WorkspaceVersion,\n CreateWorkspaceVersionInput,\n ListWorkspaceVersionsInput,\n ListWorkspaceVersionsOutput,\n} from '@mastra/core/storage/domains/workspaces';\nimport type { Pool, RowDataPacket } from 'mysql2/promise';\n\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL } from '../operations';\nimport { formatTableName, quoteIdentifier } from '../utils';\n\nconst SNAPSHOT_FIELDS = [\n 'name',\n 'description',\n 'filesystem',\n 'sandbox',\n 'mounts',\n 'search',\n 'skills',\n 'tools',\n 'autoSync',\n 'operationTimeout',\n] as const;\n\nexport class WorkspacesMySQL extends WorkspacesStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_WORKSPACES, TABLE_WORKSPACE_VERSIONS] as const;\n\n /**\n * Returns default index definitions for the workspaces domain tables.\n * Currently no default indexes are defined for workspaces.\n */\n static getDefaultIndexDefs(_prefix: string = ''): CreateIndexOptions[] {\n return [];\n }\n\n /**\n * Exports DDL statements for all managed tables.\n */\n static getExportDDL(): string[] {\n return [\n generateTableSQL({ tableName: TABLE_WORKSPACES, schema: TABLE_SCHEMAS[TABLE_WORKSPACES] }),\n generateTableSQL({ tableName: TABLE_WORKSPACE_VERSIONS, schema: TABLE_SCHEMAS[TABLE_WORKSPACE_VERSIONS] }),\n ];\n }\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx => (WorkspacesMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n /**\n * Returns default index definitions for the workspaces domain tables.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return WorkspacesMySQL.getDefaultIndexDefs('');\n }\n\n /**\n * Creates default indexes for optimal query performance.\n * Currently no default indexes are defined for workspaces.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n // No default indexes for workspaces domain\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({ tableName: TABLE_WORKSPACES, schema: WORKSPACES_SCHEMA });\n await this.operations.createTable({ tableName: TABLE_WORKSPACE_VERSIONS, schema: WORKSPACE_VERSIONS_SCHEMA });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.operations.clearTable({ tableName: TABLE_WORKSPACE_VERSIONS });\n await this.operations.clearTable({ tableName: TABLE_WORKSPACES });\n }\n\n private safeParseJSON<T = unknown>(val: unknown): T | undefined {\n if (val === null || val === undefined) return undefined;\n if (typeof val === 'string') {\n try {\n return JSON.parse(val) as T;\n } catch {\n return val as T;\n }\n }\n return val as T;\n }\n\n private parseWorkspaceRow(row: Record<string, unknown>): StorageWorkspaceType {\n return {\n id: row.id as string,\n status: (row.status as StorageWorkspaceType['status']) ?? 'draft',\n activeVersionId: (row.activeVersionId as string) ?? undefined,\n authorId: (row.authorId as string) ?? undefined,\n metadata: this.safeParseJSON(row.metadata) as Record<string, unknown> | undefined,\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n updatedAt: row.updatedAt instanceof Date ? row.updatedAt : new Date(row.updatedAt as string),\n };\n }\n\n private parseVersionRow(row: Record<string, unknown>): WorkspaceVersion {\n return {\n id: row.id as string,\n workspaceId: row.workspaceId as string,\n versionNumber: Number(row.versionNumber),\n name: row.name as string,\n description: (row.description as string) ?? undefined,\n filesystem: this.safeParseJSON(row.filesystem) as WorkspaceVersion['filesystem'],\n sandbox: this.safeParseJSON(row.sandbox) as WorkspaceVersion['sandbox'],\n mounts: this.safeParseJSON(row.mounts) as WorkspaceVersion['mounts'],\n search: this.safeParseJSON(row.search) as WorkspaceVersion['search'],\n skills: this.safeParseJSON(row.skills) as WorkspaceVersion['skills'],\n tools: this.safeParseJSON(row.tools) as WorkspaceVersion['tools'],\n autoSync: row.autoSync === true || row.autoSync === 1 || row.autoSync === '1',\n operationTimeout: row.operationTimeout != null ? Number(row.operationTimeout) : undefined,\n changedFields: this.safeParseJSON(row.changedFields) as string[] | undefined,\n changeMessage: (row.changeMessage as string) ?? undefined,\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n };\n }\n\n async getById(id: string): Promise<StorageWorkspaceType | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_WORKSPACES)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n return rows.length ? this.parseWorkspaceRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_WORKSPACE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async create(input: { workspace: StorageCreateWorkspaceInput }): Promise<StorageWorkspaceType> {\n const { workspace } = input;\n try {\n const now = new Date();\n await this.operations.withTransaction(async () => {\n await this.operations.insert({\n tableName: TABLE_WORKSPACES,\n record: {\n id: workspace.id,\n status: 'draft',\n activeVersionId: null,\n authorId: workspace.authorId ?? null,\n metadata: workspace.metadata ?? null,\n createdAt: now,\n updatedAt: now,\n },\n });\n\n const { id: _id, authorId: _authorId, metadata: _metadata, ...snapshotConfig } = workspace;\n const versionId = crypto.randomUUID();\n await this.createVersion({\n id: versionId,\n workspaceId: workspace.id,\n versionNumber: 1,\n ...snapshotConfig,\n changedFields: Object.keys(snapshotConfig),\n changeMessage: 'Initial version',\n });\n });\n\n return {\n id: workspace.id,\n status: 'draft',\n activeVersionId: undefined,\n authorId: workspace.authorId,\n metadata: workspace.metadata,\n createdAt: now,\n updatedAt: now,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_WORKSPACE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async update(input: StorageUpdateWorkspaceInput): Promise<StorageWorkspaceType> {\n const { id, ...updates } = input;\n try {\n const existing = await this.getById(id);\n if (!existing)\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_WORKSPACE', 'NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Workspace ${id} not found`,\n details: { workspaceId: id },\n });\n\n const { authorId, activeVersionId, metadata, status, ...configFields } = updates;\n const configFieldNames = SNAPSHOT_FIELDS as readonly string[];\n const hasConfigUpdate = configFieldNames.some(field => field in configFields);\n\n const updateData: Record<string, unknown> = { updatedAt: new Date() };\n if (authorId !== undefined) updateData.authorId = authorId;\n if (activeVersionId !== undefined) {\n updateData.activeVersionId = activeVersionId;\n if (status === undefined) updateData.status = 'published';\n }\n if (status !== undefined) updateData.status = status;\n if (metadata !== undefined) updateData.metadata = { ...(existing.metadata || {}), ...metadata };\n\n await this.operations.withTransaction(async connection => {\n // Lock the workspace row so concurrent updates serialize and cannot\n // race on the version number increment below.\n await connection.execute(\n `SELECT ${quoteIdentifier('id', 'column name')} FROM ${formatTableName(TABLE_WORKSPACES)} WHERE ${quoteIdentifier('id', 'column name')} = ? FOR UPDATE`,\n [id],\n );\n\n await this.operations.update({ tableName: TABLE_WORKSPACES, keys: { id }, data: updateData });\n\n if (hasConfigUpdate) {\n // Read latest version inside transaction to prevent race conditions\n const latestVersion = await this.getLatestVersion(id);\n if (!latestVersion) throw new Error(`No versions found for workspace ${id}`);\n\n const {\n id: _versionId,\n workspaceId: _workspaceId,\n versionNumber: _versionNumber,\n changedFields: _changedFields,\n changeMessage: _changeMessage,\n createdAt: _createdAt,\n ...latestConfig\n } = latestVersion;\n const newConfig = { ...latestConfig, ...configFields };\n const changedFields = configFieldNames.filter(\n field =>\n field in configFields &&\n JSON.stringify(configFields[field as keyof typeof configFields]) !==\n JSON.stringify(latestConfig[field as keyof typeof latestConfig]),\n );\n\n if (changedFields.length > 0) {\n const newVersionId = crypto.randomUUID();\n await this.createVersion({\n id: newVersionId,\n workspaceId: id,\n versionNumber: latestVersion.versionNumber + 1,\n ...newConfig,\n changedFields,\n changeMessage: `Updated ${changedFields.join(', ')}`,\n });\n }\n }\n });\n\n const updated = await this.getById(id);\n if (!updated)\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_WORKSPACE', 'NOT_FOUND_AFTER_UPDATE'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `Workspace ${id} not found after update`,\n details: { id },\n });\n return updated;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'UPDATE_WORKSPACE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async delete(id: string): Promise<void> {\n try {\n await this.operations.withTransaction(async () => {\n await this.deleteVersionsByParentId(id);\n await this.operations.delete({ tableName: TABLE_WORKSPACES, keys: { id } });\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_WORKSPACE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async list(args?: StorageListWorkspacesInput): Promise<StorageListWorkspacesOutput> {\n try {\n const { page = 0, perPage: perPageInput, orderBy, authorId, metadata } = args || {};\n const { field, direction } = this.parseOrderBy(orderBy);\n\n const conditions: string[] = [];\n const queryParams: any[] = [];\n if (authorId !== undefined) {\n conditions.push(`${quoteIdentifier('authorId', 'column name')} = ?`);\n queryParams.push(authorId);\n }\n if (metadata && Object.keys(metadata).length > 0) {\n for (const [key, value] of Object.entries(metadata)) {\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(key))\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'LIST_WORKSPACES', 'INVALID_METADATA_KEY'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Invalid metadata key: ${key}`,\n details: { key },\n });\n if (typeof value === 'string') {\n conditions.push(\n `JSON_UNQUOTE(JSON_EXTRACT(${quoteIdentifier('metadata', 'column name')}, '$.${key}')) = ?`,\n );\n queryParams.push(value);\n } else {\n conditions.push(\n `JSON_EXTRACT(${quoteIdentifier('metadata', 'column name')}, '$.${key}') = CAST(? AS JSON)`,\n );\n queryParams.push(JSON.stringify(value));\n }\n }\n }\n\n const whereClause =\n conditions.length > 0 ? { sql: ` WHERE ${conditions.join(' AND ')}`, args: queryParams } : undefined;\n const total = await this.operations.loadTotalCount({ tableName: TABLE_WORKSPACES, whereClause });\n if (total === 0) return { workspaces: [], total: 0, page, perPage: perPageInput ?? 100, hasMore: false };\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_WORKSPACES,\n whereClause,\n orderBy: `${quoteIdentifier(field, 'column name')} ${direction}`,\n offset,\n limit: limitValue,\n });\n\n return {\n workspaces: rows.map(row => this.parseWorkspaceRow(row)),\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_WORKSPACES', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n // ==========================================================================\n // Version Methods\n // ==========================================================================\n\n async createVersion(input: CreateWorkspaceVersionInput): Promise<WorkspaceVersion> {\n try {\n const now = new Date();\n await this.operations.insert({\n tableName: TABLE_WORKSPACE_VERSIONS,\n record: {\n id: input.id,\n workspaceId: input.workspaceId,\n versionNumber: input.versionNumber,\n name: input.name,\n description: input.description ?? null,\n filesystem: input.filesystem ?? null,\n sandbox: input.sandbox ?? null,\n mounts: input.mounts ?? null,\n search: input.search ?? null,\n skills: input.skills ?? null,\n tools: input.tools ?? null,\n autoSync: input.autoSync ? 1 : 0,\n operationTimeout: input.operationTimeout ?? null,\n changedFields: input.changedFields ?? null,\n changeMessage: input.changeMessage ?? null,\n createdAt: now,\n },\n });\n return { ...input, createdAt: now };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_WORKSPACE_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getVersion(id: string): Promise<WorkspaceVersion | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_WORKSPACE_VERSIONS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_WORKSPACE_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getVersionByNumber(workspaceId: string, versionNumber: number): Promise<WorkspaceVersion | null> {\n try {\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_WORKSPACE_VERSIONS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('workspaceId', 'column name')} = ? AND ${quoteIdentifier('versionNumber', 'column name')} = ?`,\n args: [workspaceId, versionNumber],\n },\n limit: 1,\n });\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_WORKSPACE_VERSION_BY_NUMBER', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getLatestVersion(workspaceId: string): Promise<WorkspaceVersion | null> {\n try {\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_WORKSPACE_VERSIONS,\n whereClause: { sql: ` WHERE ${quoteIdentifier('workspaceId', 'column name')} = ?`, args: [workspaceId] },\n orderBy: `${quoteIdentifier('versionNumber', 'column name')} DESC`,\n limit: 1,\n });\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_LATEST_WORKSPACE_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listVersions(input: ListWorkspaceVersionsInput): Promise<ListWorkspaceVersionsOutput> {\n try {\n const { workspaceId, page = 0, perPage: perPageInput, orderBy } = input;\n const { field, direction } = this.parseVersionOrderBy(orderBy);\n const whereClause = { sql: ` WHERE ${quoteIdentifier('workspaceId', 'column name')} = ?`, args: [workspaceId] };\n const total = await this.operations.loadTotalCount({ tableName: TABLE_WORKSPACE_VERSIONS, whereClause });\n if (total === 0) return { versions: [], total: 0, page, perPage: perPageInput ?? 20, hasMore: false };\n\n const perPage = normalizePerPage(perPageInput, 20);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_WORKSPACE_VERSIONS,\n whereClause,\n orderBy: `${quoteIdentifier(field, 'column name')} ${direction}`,\n offset,\n limit: limitValue,\n });\n\n return {\n versions: rows.map(row => this.parseVersionRow(row)),\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_WORKSPACE_VERSIONS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteVersion(id: string): Promise<void> {\n try {\n await this.operations.delete({ tableName: TABLE_WORKSPACE_VERSIONS, keys: { id } });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_WORKSPACE_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteVersionsByParentId(entityId: string): Promise<void> {\n try {\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_WORKSPACE_VERSIONS)} WHERE ${quoteIdentifier('workspaceId', 'column name')} = ?`,\n [entityId],\n );\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_WORKSPACE_VERSIONS_BY_WORKSPACE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async countVersions(workspaceId: string): Promise<number> {\n try {\n return await this.operations.loadTotalCount({\n tableName: TABLE_WORKSPACE_VERSIONS,\n whereClause: { sql: ` WHERE ${quoteIdentifier('workspaceId', 'column name')} = ?`, args: [workspaceId] },\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'COUNT_WORKSPACE_VERSIONS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n}\n","import { MastraError, ErrorCategory, ErrorDomain } from '@mastra/core/error';\nimport { MastraCompositeStore } from '@mastra/core/storage';\nimport type { StorageDomains, CreateIndexOptions } from '@mastra/core/storage';\nimport { createPool } from 'mysql2/promise';\nimport type { Pool, PoolOptions } from 'mysql2/promise';\n\nimport { AgentsMySQL } from './domains/agents';\nimport { BackgroundTasksMySQL } from './domains/background-tasks';\nimport { BlobsMySQL } from './domains/blobs';\nimport { ChannelsMySQL } from './domains/channels';\nimport { DatasetsMySQL } from './domains/datasets';\nimport { ExperimentsMySQL } from './domains/experiments';\nimport { FavoritesMySQL } from './domains/favorites';\nimport { MCPClientsMySQL } from './domains/mcp-clients';\nimport { MCPServersMySQL } from './domains/mcp-servers';\nimport { MemoryMySQL } from './domains/memory';\nimport { ObservabilityMySQL } from './domains/observability';\nimport { StoreOperationsMySQL } from './domains/operations';\nimport { PromptBlocksMySQL } from './domains/prompt-blocks';\nimport { SchedulesMySQL } from './domains/schedules';\nimport { ScorerDefinitionsMySQL } from './domains/scorer-definitions';\nimport { ScoresMySQL } from './domains/scores';\nimport { SkillsMySQL } from './domains/skills';\nimport { ToolProviderConnectionsMySQL } from './domains/tool-provider-connections';\nimport { WorkflowsMySQL } from './domains/workflows';\nimport { WorkspacesMySQL } from './domains/workspaces';\n\n// Export domain classes for direct use with MastraStorage composition\nexport {\n AgentsMySQL,\n BackgroundTasksMySQL,\n BlobsMySQL,\n ChannelsMySQL,\n DatasetsMySQL,\n ExperimentsMySQL,\n FavoritesMySQL,\n MCPClientsMySQL,\n MCPServersMySQL,\n MemoryMySQL,\n ObservabilityMySQL,\n StoreOperationsMySQL,\n PromptBlocksMySQL,\n SchedulesMySQL,\n ScorerDefinitionsMySQL,\n ScoresMySQL,\n SkillsMySQL,\n ToolProviderConnectionsMySQL,\n WorkflowsMySQL,\n WorkspacesMySQL,\n};\n\nexport type MySQLStoreConfig = (\n | {\n connectionString: string;\n database?: string;\n max?: number;\n ssl?: boolean | Record<string, unknown>;\n }\n | {\n host: string;\n port?: number;\n user: string;\n password?: string;\n database: string;\n ssl?: boolean | Record<string, unknown>;\n max?: number;\n waitForConnections?: boolean;\n queueLimit?: number;\n }\n) & {\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n};\n\nfunction validateConfig(config: MySQLStoreConfig): void {\n if ('connectionString' in config) {\n if (!config.connectionString || typeof config.connectionString !== 'string') {\n throw new Error('MySQLStore: connectionString must be a non-empty string.');\n }\n return;\n }\n\n const required: Array<keyof typeof config> = ['host', 'user', 'database'];\n for (const key of required) {\n const value = config[key];\n if (typeof value !== 'string' || value.trim() === '') {\n throw new Error(`MySQLStore: ${key} must be provided and cannot be empty.`);\n }\n }\n\n if ('password' in config && config.password !== undefined) {\n if (typeof config.password !== 'string') {\n throw new Error('MySQLStore: password must be a string if provided.');\n }\n }\n}\n\nfunction createMySQLPool(config: MySQLStoreConfig): { pool: Pool; database?: string } {\n if ('connectionString' in config) {\n const { options } = parseConnectionString(config.connectionString, config);\n return { pool: createPool(options), database: options.database };\n }\n\n const options: PoolOptions = {\n host: config.host,\n port: config.port ?? 3306,\n user: config.user,\n database: config.database,\n connectionLimit: config.max ?? 10,\n waitForConnections: config.waitForConnections ?? true,\n queueLimit: config.queueLimit ?? 0,\n dateStrings: true,\n };\n\n if (config.password !== undefined) {\n options.password = config.password;\n }\n\n if ('ssl' in config && config.ssl) {\n options.ssl = typeof config.ssl === 'boolean' ? {} : (config.ssl as PoolOptions['ssl']);\n }\n\n return { pool: createPool(options), database: options.database };\n}\n\nfunction parseConnectionString(\n connectionString: string,\n overrides: Extract<MySQLStoreConfig, { connectionString: string }>,\n): { options: PoolOptions } {\n const url = new URL(connectionString);\n\n const databaseFromUrl = url.pathname.replace(/^\\//, '') || undefined;\n\n const base: PoolOptions = {\n host: url.hostname || 'localhost',\n port: url.port ? Number(url.port) : 3306,\n user: decodeURIComponent(url.username),\n password: decodeURIComponent(url.password),\n database: overrides.database ?? databaseFromUrl,\n connectionLimit: overrides.max ?? 10,\n waitForConnections: true,\n queueLimit: 0,\n dateStrings: true,\n };\n\n if (url.searchParams.has('waitForConnections')) {\n base.waitForConnections = url.searchParams.get('waitForConnections') === 'true';\n }\n if (url.searchParams.has('queueLimit')) {\n const queueLimit = Number(url.searchParams.get('queueLimit'));\n if (!Number.isNaN(queueLimit)) {\n base.queueLimit = queueLimit;\n }\n }\n if (url.searchParams.has('connectionLimit')) {\n const connectionLimit = Number(url.searchParams.get('connectionLimit'));\n if (!Number.isNaN(connectionLimit)) {\n base.connectionLimit = connectionLimit;\n }\n }\n if (url.searchParams.has('dateStrings')) {\n base.dateStrings = url.searchParams.get('dateStrings') === 'true';\n }\n\n let sslParam: unknown = overrides.ssl ?? url.searchParams.get('ssl') ?? undefined;\n if (typeof sslParam === 'string') {\n const trimmed = sslParam.trim();\n const lowered = trimmed.toLowerCase();\n if (['false', '0', 'off', ''].includes(lowered)) {\n sslParam = undefined;\n } else if (['true', '1', 'on'].includes(lowered)) {\n sslParam = {};\n } else if (\n (trimmed.startsWith('{') && trimmed.endsWith('}')) ||\n (trimmed.startsWith('[') && trimmed.endsWith(']'))\n ) {\n try {\n sslParam = JSON.parse(trimmed);\n } catch {\n sslParam = undefined;\n }\n }\n }\n if (sslParam && typeof sslParam === 'object') {\n base.ssl = sslParam as PoolOptions['ssl'];\n }\n\n return { options: base };\n}\n\nexport class MySQLStore extends MastraCompositeStore {\n private pool: Pool;\n\n stores: StorageDomains;\n\n constructor(config: MySQLStoreConfig & { id?: string; disableInit?: boolean }) {\n super({ id: config.id ?? 'mysql', name: 'MySQLStore', disableInit: config.disableInit });\n validateConfig(config);\n const { pool, database } = createMySQLPool(config);\n this.pool = pool;\n\n const operations = new StoreOperationsMySQL({ pool: this.pool, database });\n\n const memory = new MemoryMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const workflows = new WorkflowsMySQL({\n operations,\n pool: this.pool,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const scores = new ScoresMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const observability = new ObservabilityMySQL({\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const agents = new AgentsMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const datasets = new DatasetsMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const experiments = new ExperimentsMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const promptBlocks = new PromptBlocksMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const scorerDefinitions = new ScorerDefinitionsMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const mcpClients = new MCPClientsMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const mcpServers = new MCPServersMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const workspaces = new WorkspacesMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const skills = new SkillsMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const blobs = new BlobsMySQL({ pool: this.pool, operations });\n const backgroundTasks = new BackgroundTasksMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const channels = new ChannelsMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const favorites = new FavoritesMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const schedules = new SchedulesMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const toolProviderConnections = new ToolProviderConnectionsMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n\n this.stores = {\n memory,\n workflows,\n scores,\n observability,\n agents,\n datasets,\n experiments,\n promptBlocks,\n scorerDefinitions,\n mcpClients,\n mcpServers,\n workspaces,\n skills,\n blobs,\n backgroundTasks,\n channels,\n favorites,\n schedules,\n toolProviderConnections,\n };\n }\n\n async init(): Promise<void> {\n try {\n const connection = await this.pool.getConnection();\n connection.release();\n await super.init();\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_STORE_INIT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async close(): Promise<void> {\n await this.pool.end();\n }\n}\n\n/**\n * All storage domain classes that provide static getExportDDL methods.\n */\nconst ALL_DOMAINS = [\n MemoryMySQL,\n ObservabilityMySQL,\n ScoresMySQL,\n ScorerDefinitionsMySQL,\n PromptBlocksMySQL,\n AgentsMySQL,\n WorkflowsMySQL,\n DatasetsMySQL,\n ExperimentsMySQL,\n BackgroundTasksMySQL,\n FavoritesMySQL,\n ChannelsMySQL,\n SchedulesMySQL,\n] as const;\n\n/**\n * Exports the Mastra database schema as MySQL DDL statements.\n * Does not require a database connection.\n */\nexport function exportSchemas(): string {\n const statements: string[] = [];\n\n for (const Domain of ALL_DOMAINS) {\n statements.push(...Domain.getExportDDL());\n }\n\n return statements.join('\\n');\n}\n"]}
1
+ {"version":3,"sources":["../src/storage/domains/utils.ts","../src/storage/domains/operations/index.ts","../src/storage/domains/agents/index.ts","../src/storage/domains/background-tasks/index.ts","../src/storage/domains/blobs/index.ts","../src/storage/domains/channels/index.ts","../src/storage/domains/datasets/index.ts","../src/storage/domains/experiments/index.ts","../src/storage/domains/favorites/index.ts","../src/storage/domains/mcp-clients/index.ts","../src/storage/domains/mcp-servers/index.ts","../src/storage/domains/memory/index.ts","../src/storage/domains/observability/index.ts","../src/storage/domains/prompt-blocks/index.ts","../src/storage/domains/schedules/index.ts","../src/storage/domains/scorer-definitions/index.ts","../src/storage/domains/scores/index.ts","../src/storage/domains/skills/index.ts","../src/storage/domains/tool-provider-connections/index.ts","../src/storage/domains/workflows/index.ts","../src/storage/domains/workspaces/index.ts","../src/storage/index.ts"],"names":["parseSqlIdentifier","TABLE_SCHEMAS","StoreOperations","TABLE_CONFIGS","TABLE_WORKFLOW_SNAPSHOT","TABLE_SPANS","error","MastraError","ErrorDomain","ErrorCategory","AgentsStorage","TABLE_AGENTS","TABLE_AGENT_VERSIONS","AGENTS_SCHEMA","AGENT_VERSIONS_SCHEMA","createStorageErrorId","normalizePerPage","calculatePagination","TABLE_FAVORITES","BackgroundTasksStorage","TABLE_BACKGROUND_TASKS","BlobStore","TABLE_SKILL_BLOBS","SKILL_BLOBS_SCHEMA","ChannelsStorage","TABLE_CHANNEL_INSTALLATIONS","TABLE_CHANNEL_CONFIG","DatasetsStorage","TABLE_DATASETS","TABLE_DATASET_ITEMS","TABLE_DATASET_VERSIONS","DATASETS_SCHEMA","DATASET_ITEMS_SCHEMA","DATASET_VERSIONS_SCHEMA","randomUUID","TABLE_EXPERIMENT_RESULTS","TABLE_EXPERIMENTS","parseJSON","ExperimentsStorage","EXPERIMENTS_SCHEMA","EXPERIMENT_RESULTS_SCHEMA","TABLE_SKILLS","FavoritesStorage","FAVORITES_SCHEMA","MCPClientsStorage","TABLE_MCP_CLIENTS","TABLE_MCP_CLIENT_VERSIONS","MCP_CLIENTS_SCHEMA","MCP_CLIENT_VERSIONS_SCHEMA","MCPServersStorage","TABLE_MCP_SERVERS","TABLE_MCP_SERVER_VERSIONS","MCP_SERVERS_SCHEMA","MCP_SERVER_VERSIONS_SCHEMA","MemoryStorage","TABLE_THREADS","TABLE_MESSAGES","TABLE_RESOURCES","includeMessages","list","MessageList","messages","ObservabilityStorage","SPAN_SCHEMA","listTracesArgsSchema","TraceStatus","toTraceSpans","PromptBlocksStorage","TABLE_PROMPT_BLOCKS","TABLE_PROMPT_BLOCK_VERSIONS","PROMPT_BLOCKS_SCHEMA","PROMPT_BLOCK_VERSIONS_SCHEMA","parseJson","SchedulesStorage","TABLE_SCHEDULES","TABLE_SCHEDULE_TRIGGERS","ScorerDefinitionsStorage","TABLE_SCORER_DEFINITIONS","TABLE_SCORER_DEFINITION_VERSIONS","SCORER_DEFINITIONS_SCHEMA","SCORER_DEFINITION_VERSIONS_SCHEMA","ScoresStorage","TABLE_SCORERS","SCORERS_SCHEMA","SkillsStorage","TABLE_SKILL_VERSIONS","SKILLS_SCHEMA","SKILL_VERSIONS_SCHEMA","ToolProviderConnectionsStorage","TABLE_TOOL_PROVIDER_CONNECTIONS","TOOL_PROVIDER_CONNECTIONS_SCHEMA","WorkflowsStorage","SNAPSHOT_FIELDS","WorkspacesStorage","TABLE_WORKSPACES","TABLE_WORKSPACE_VERSIONS","WORKSPACES_SCHEMA","WORKSPACE_VERSIONS_SCHEMA","options","createPool","MastraCompositeStore"],"mappings":"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","file":"index.cjs","sourcesContent":["import { TABLE_SCHEMAS } from '@mastra/core/storage';\nimport type { TABLE_NAMES } from '@mastra/core/storage';\nimport { parseSqlIdentifier } from '@mastra/core/utils';\n\nexport type SqlParam = any;\n\nexport function quoteIdentifier(value: string, context: string): string {\n return `\\`${parseSqlIdentifier(value, context)}\\``;\n}\n\nexport function formatTableName(tableName: TABLE_NAMES, database?: string): string {\n const tableIdent = quoteIdentifier(tableName, 'table name');\n if (!database) {\n return tableIdent;\n }\n return `${quoteIdentifier(database, 'database name')}.${tableIdent}`;\n}\n\nexport function prepareWhereClause(filters: Record<string, any>): { sql: string; args: SqlParam[] } {\n const conditions: string[] = [];\n const args: SqlParam[] = [];\n\n Object.entries(filters).forEach(([key, value]) => {\n if (value === undefined) return;\n\n if (key.endsWith('_gte')) {\n const fieldName = key.slice(0, -4);\n conditions.push(`${quoteIdentifier(fieldName, 'column name')} >= ?`);\n args.push(transformToSqlValue(value));\n } else if (key.endsWith('_lte')) {\n const fieldName = key.slice(0, -4);\n conditions.push(`${quoteIdentifier(fieldName, 'column name')} <= ?`);\n args.push(transformToSqlValue(value));\n } else if (key.endsWith('_like')) {\n const fieldName = key.slice(0, -5);\n conditions.push(`${quoteIdentifier(fieldName, 'column name')} LIKE ?`);\n args.push(transformToSqlValue(value));\n } else if (key.endsWith('_in')) {\n const fieldName = key.slice(0, -3);\n const list = Array.isArray(value) ? value : [value];\n if (list.length === 0) {\n conditions.push('FALSE');\n } else {\n const placeholders = list.map(() => '?').join(', ');\n conditions.push(`${quoteIdentifier(fieldName, 'column name')} IN (${placeholders})`);\n args.push(...list.map(transformToSqlValue));\n }\n } else if (key.endsWith('_null')) {\n const fieldName = key.slice(0, -5);\n if (value === true) {\n conditions.push(`${quoteIdentifier(fieldName, 'column name')} IS NULL`);\n } else if (value === false) {\n conditions.push(`${quoteIdentifier(fieldName, 'column name')} IS NOT NULL`);\n }\n } else if (value === null) {\n conditions.push(`${quoteIdentifier(key, 'column name')} IS NULL`);\n } else if (Array.isArray(value)) {\n if (value.length === 0) {\n conditions.push('FALSE');\n } else {\n const placeholders = value.map(() => '?').join(', ');\n conditions.push(`${quoteIdentifier(key, 'column name')} IN (${placeholders})`);\n args.push(...value.map(transformToSqlValue));\n }\n } else {\n conditions.push(`${quoteIdentifier(key, 'column name')} = ?`);\n args.push(transformToSqlValue(value));\n }\n });\n\n return {\n sql: conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '',\n args,\n };\n}\n\nexport function transformToSqlValue(value: any): SqlParam {\n if (value === undefined || value === null) {\n return null;\n }\n if (value instanceof Date) {\n // MySQL DATETIME accepts 'YYYY-MM-DD HH:mm:ss.SSS' (no timezone). Preserve ms precision.\n return value.toISOString().slice(0, 23).replace('T', ' ');\n }\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n return value;\n}\n\nexport function prepareStatement({\n tableName,\n record,\n database,\n}: {\n tableName: TABLE_NAMES;\n record: Record<string, any>;\n database?: string;\n}): {\n sql: string;\n args: SqlParam[];\n} {\n const tableIdent = formatTableName(tableName, database);\n const columns = Object.keys(record);\n if (columns.length === 0) {\n throw new Error('Cannot prepare statement for empty record');\n }\n const columnIdentifiers = columns.map(column => quoteIdentifier(column, 'column name'));\n const values = columns.map(column => transformToSqlValue(record[column]));\n const placeholders = columns.map(() => '?').join(', ');\n const updateAssignments = columnIdentifiers.map(column => `${column} = ?`).join(', ');\n\n const sql = `INSERT INTO ${tableIdent} (${columnIdentifiers.join(', ')}) VALUES (${placeholders}) ON DUPLICATE KEY UPDATE ${updateAssignments}`;\n return {\n sql,\n args: [...values, ...values],\n };\n}\n\nexport function prepareUpdateStatement({\n tableName,\n updates,\n keys,\n database,\n}: {\n tableName: TABLE_NAMES;\n updates: Record<string, any>;\n keys: Record<string, any>;\n database?: string;\n}): {\n sql: string;\n args: SqlParam[];\n} {\n if (Object.keys(updates).length === 0) {\n throw new Error('Updates object cannot be empty');\n }\n const tableIdent = formatTableName(tableName, database);\n const setClause = Object.entries(updates)\n .map(([key]) => `${quoteIdentifier(key, 'column name')} = ?`)\n .join(', ');\n const updateValues = Object.values(updates).map(transformToSqlValue);\n const whereClause = prepareWhereClause(keys);\n\n return {\n sql: `UPDATE ${tableIdent} SET ${setClause}${whereClause.sql}`,\n args: [...updateValues, ...whereClause.args],\n };\n}\n\nexport function prepareDeleteStatement({\n tableName,\n keys,\n database,\n}: {\n tableName: TABLE_NAMES;\n keys: Record<string, any>;\n database?: string;\n}): {\n sql: string;\n args: SqlParam[];\n} {\n if (Object.keys(keys).length === 0) {\n throw new Error('Keys object cannot be empty for DELETE statement');\n }\n\n const tableIdent = formatTableName(tableName, database);\n const whereClause = prepareWhereClause(keys);\n\n return {\n sql: `DELETE FROM ${tableIdent}${whereClause.sql}`,\n args: whereClause.args,\n };\n}\n\nexport function transformFromSqlRow<T>({\n tableName,\n sqlRow,\n}: {\n tableName: TABLE_NAMES;\n sqlRow: Record<string, any>;\n}): T {\n const schema = TABLE_SCHEMAS[tableName];\n const result: Record<string, any> = {};\n\n Object.entries(sqlRow).forEach(([key, value]) => {\n const columnSchema = schema?.[key];\n\n if (columnSchema?.type === 'jsonb') {\n if (typeof value === 'string') {\n try {\n result[key] = JSON.parse(value);\n } catch {\n result[key] = value;\n }\n } else {\n result[key] = value;\n }\n } else if (columnSchema?.type === 'timestamp') {\n result[key] = value === null ? null : parseDateTime(value);\n } else if (columnSchema?.type === 'boolean') {\n result[key] = value === true || value === 1 || value === '1';\n } else {\n result[key] = value;\n }\n });\n\n return result as T;\n}\n\nexport function parseDateTime(value: Date | string | number | null | undefined): Date | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (value instanceof Date) {\n return value;\n }\n if (typeof value === 'number') {\n return new Date(value);\n }\n const str = String(value).trim();\n if (!str) return undefined;\n const normalized = str.includes('T') ? str : str.replace(' ', 'T');\n const withZone = /[zZ]|[+-]\\d\\d:?\\d\\d$/.test(normalized) ? normalized : `${normalized}Z`;\n return new Date(withZone);\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { StoreOperations, TABLE_CONFIGS, TABLE_SPANS, TABLE_WORKFLOW_SNAPSHOT } from '@mastra/core/storage';\nimport type { StorageColumn, TABLE_NAMES, CreateIndexOptions } from '@mastra/core/storage';\nimport type { Pool, PoolConnection, RowDataPacket } from 'mysql2/promise';\nimport {\n formatTableName,\n prepareDeleteStatement,\n prepareStatement,\n prepareUpdateStatement,\n prepareWhereClause,\n quoteIdentifier,\n transformFromSqlRow,\n transformToSqlValue,\n} from '../utils';\nimport type { SqlParam } from '../utils';\n\ntype WhereClause = {\n sql: string;\n args: SqlParam[];\n};\n\nexport class StoreOperationsMySQL extends StoreOperations {\n private pool: Pool;\n private database?: string;\n private resolvedDatabase?: string | null;\n\n constructor({ pool, database }: { pool: Pool; database?: string }) {\n super();\n this.pool = pool;\n this.database = database;\n this.resolvedDatabase = database ?? null;\n }\n\n getPool(): Pool {\n return this.pool;\n }\n\n async query<T = RowDataPacket>(sql: string, args: SqlParam[] = []): Promise<T[]> {\n const [rows] = await this.pool.execute<RowDataPacket[]>(sql, args.map(transformToSqlValue));\n return rows as unknown as T[];\n }\n\n private async getDatabase(): Promise<string | undefined> {\n if (this.resolvedDatabase !== null) {\n return this.resolvedDatabase ?? undefined;\n }\n\n const [rows] = await this.pool.query<RowDataPacket[]>('SELECT DATABASE() AS db');\n const db = rows[0]?.db as string | null;\n this.resolvedDatabase = db ?? null;\n return this.resolvedDatabase ?? undefined;\n }\n\n async hasColumn(table: string, column: string): Promise<boolean> {\n const db = await this.getDatabase();\n const params: SqlParam[] = [table, column];\n let sql =\n 'SELECT COUNT(*) as count FROM information_schema.columns WHERE table_name = ? AND (column_name = ? OR column_name = ? )';\n params.push(column.toLowerCase());\n if (db) {\n sql += ' AND table_schema = ?';\n params.push(db);\n }\n const [rows] = await this.pool.execute<RowDataPacket[]>(sql, params);\n return Number(rows[0]?.count ?? 0) > 0;\n }\n\n protected getSqlType(type: StorageColumn['type'], opts?: { isKey?: boolean; isNullable?: boolean }): string {\n const isKey = Boolean(opts?.isKey);\n const _isNullable = opts?.isNullable ?? true;\n switch (type) {\n case 'text':\n // Keys should remain short and indexable\n if (isKey) {\n return 'VARCHAR(191)';\n }\n // For non-key text fields, prefer LONGTEXT to avoid truncation errors\n // (message content, snapshots, etc. can exceed small VARCHAR limits)\n return 'LONGTEXT';\n case 'uuid':\n return 'VARCHAR(36)';\n case 'timestamp':\n return 'DATETIME(6)';\n case 'jsonb':\n return 'JSON';\n case 'integer':\n return 'INT';\n case 'float':\n return 'DOUBLE';\n case 'bigint':\n return 'BIGINT';\n case 'boolean':\n return 'TINYINT(1)';\n default:\n return super.getSqlType(type);\n }\n }\n\n private buildColumnDefinition(tableName: TABLE_NAMES, columnName: string, column: StorageColumn): string {\n const parts: string[] = [];\n const isKeyColumn = column.primaryKey || this.isKeyColumn(tableName, columnName);\n const isNullable = column.nullable !== false;\n parts.push(\n `${quoteIdentifier(columnName, 'column name')} ${this.getSqlType(column.type, {\n isKey: Boolean(isKeyColumn),\n isNullable,\n })}`,\n );\n if (column.nullable === false) {\n parts.push('NOT NULL');\n const defaultClause = this.getDefaultClause(column.type, {\n isNullable,\n isKey: Boolean(isKeyColumn),\n });\n if (defaultClause) {\n parts.push(defaultClause);\n }\n }\n if (column.primaryKey) {\n parts.push('PRIMARY KEY');\n }\n return parts.join(' ');\n }\n\n private getDefaultClause(\n type: StorageColumn['type'],\n { isNullable, isKey }: { isNullable: boolean; isKey: boolean },\n ): string | undefined {\n switch (type) {\n case 'jsonb':\n return undefined;\n case 'timestamp':\n return \"DEFAULT '1970-01-01 00:00:00'\";\n case 'text':\n return !isNullable && isKey ? \"DEFAULT ''\" : undefined;\n case 'boolean':\n return !isNullable ? 'DEFAULT 0' : undefined;\n default:\n return super.getDefaultValue(type);\n }\n }\n\n private getCreateTableSQL(tableName: TABLE_NAMES, schema: Record<string, StorageColumn>): string {\n const columns = Object.entries(schema).map(([name, column]) => this.buildColumnDefinition(tableName, name, column));\n const tableIdent = formatTableName(tableName, this.database);\n\n const extraConstraints: string[] = [];\n // Check if this table has a composite primary key defined in TABLE_CONFIGS\n const tableConfig = TABLE_CONFIGS[tableName];\n if (tableConfig?.compositePrimaryKey) {\n const pkColumns = tableConfig.compositePrimaryKey\n .map(col => quoteIdentifier(col, 'primary key column'))\n .join(', ');\n extraConstraints.push(`PRIMARY KEY (${pkColumns})`);\n }\n\n return `CREATE TABLE IF NOT EXISTS ${tableIdent} (${[...columns, ...extraConstraints].filter(Boolean).join(', ')}) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci`;\n }\n\n private isKeyColumn(tableName: TABLE_NAMES, columnName: string): boolean {\n if (columnName === 'id') {\n return true;\n }\n\n // Check if this column is part of a composite primary key\n const tableConfig = TABLE_CONFIGS[tableName];\n if (tableConfig?.compositePrimaryKey?.includes(columnName)) {\n return true;\n }\n\n if (tableName === TABLE_WORKFLOW_SNAPSHOT && (columnName === 'workflow_name' || columnName === 'run_id')) {\n return true;\n }\n\n if (tableName === TABLE_SPANS && (columnName === 'traceId' || columnName === 'spanId')) {\n return true;\n }\n\n return false;\n }\n\n async createTable({\n tableName,\n schema,\n }: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n }): Promise<void> {\n const connection = await this.pool.getConnection();\n try {\n const db = await this.getDatabase();\n const [t_rows] = await connection.query(\n 'SELECT COUNT(*) AS count FROM information_schema.tables WHERE table_schema = ? AND table_name = ?',\n [db ?? '', tableName],\n );\n const exists = Array.isArray(t_rows) && t_rows.length > 0 && (t_rows[0] as any).count > 0;\n if (exists) {\n return;\n }\n const sql = this.getCreateTableSQL(tableName, schema);\n await connection.execute(sql);\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_STORE_CREATE_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n } finally {\n connection.release();\n }\n }\n\n async dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n try {\n await this.pool.execute(`DROP TABLE IF EXISTS ${formatTableName(tableName, this.database)}`);\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_STORE_DROP_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n try {\n await this.pool.execute(`DELETE FROM ${formatTableName(tableName, this.database)}`);\n } catch (error) {\n // Ignore table not exists errors\n if ((error as any)?.code === 'ER_NO_SUCH_TABLE') {\n return;\n }\n throw new MastraError(\n {\n id: 'MYSQL_STORE_CLEAR_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async withTransaction<T>(fn: (connection: PoolConnection) => Promise<T>): Promise<T> {\n const connection = await this.pool.getConnection();\n try {\n await connection.beginTransaction();\n const result = await fn(connection);\n await connection.commit();\n return result;\n } catch (error) {\n await connection.rollback();\n throw error;\n } finally {\n connection.release();\n }\n }\n\n async createIndex(options: CreateIndexOptions): Promise<void> {\n const { name, table, columns, unique = false } = options;\n const tableName = formatTableName(table as TABLE_NAMES, this.database);\n const indexName = quoteIdentifier(name, 'index name');\n\n try {\n // Check if index already exists\n const db = (await this.getDatabase()) ?? '';\n const [existing] = await this.pool.execute<RowDataPacket[]>(\n `SELECT 1 FROM information_schema.STATISTICS \n WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ? AND INDEX_NAME = ?\n LIMIT 1`,\n [db, table, name],\n );\n\n if (existing.length > 0) {\n return; // Index already exists\n }\n\n // Look up column data types so we can add prefix lengths for TEXT/BLOB\n // columns, which MySQL cannot index without an explicit key length.\n const [columnMeta] = await this.pool.execute<RowDataPacket[]>(\n `SELECT COLUMN_NAME, DATA_TYPE FROM information_schema.COLUMNS\n WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?`,\n [db, table],\n );\n const dataTypeByColumn = new Map<string, string>(\n columnMeta.map(row => [String(row.COLUMN_NAME).toLowerCase(), String(row.DATA_TYPE).toLowerCase()]),\n );\n const PREFIX_TYPES = new Set([\n 'tinytext',\n 'text',\n 'mediumtext',\n 'longtext',\n 'blob',\n 'tinyblob',\n 'mediumblob',\n 'longblob',\n ]);\n const indexColumn = (colName: string): string => {\n const quoted = quoteIdentifier(colName, 'column name');\n const dataType = dataTypeByColumn.get(colName.toLowerCase());\n return dataType && PREFIX_TYPES.has(dataType) ? `${quoted}(191)` : quoted;\n };\n\n // Build column list\n const columnsStr = columns\n .map(col => {\n // Handle DESC/ASC modifiers\n if (col.includes(' DESC') || col.includes(' ASC')) {\n const [colName, ...modifiers] = col.split(' ');\n return `${indexColumn(colName!)} ${modifiers.join(' ')}`;\n }\n return indexColumn(col);\n })\n .join(', ');\n\n const uniqueStr = unique ? 'UNIQUE ' : '';\n const sql = `CREATE ${uniqueStr}INDEX ${indexName} ON ${tableName} (${columnsStr})`;\n\n await this.pool.execute(sql);\n } catch (error) {\n // Log but don't throw - indexes are performance optimizations\n console.warn(`Failed to create index ${name}:`, error);\n }\n }\n\n async insert({ tableName, record }: { tableName: TABLE_NAMES; record: Record<string, any> }): Promise<void> {\n try {\n const statement = prepareStatement({ tableName, record, database: this.database });\n await this.pool.execute(statement.sql, statement.args);\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_STORE_INSERT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async batchInsert({ tableName, records }: { tableName: TABLE_NAMES; records: Record<string, any>[] }): Promise<void> {\n if (records.length === 0) return;\n try {\n await this.withTransaction(async connection => {\n for (const record of records) {\n const statement = prepareStatement({ tableName, record, database: this.database });\n await connection.execute(statement.sql, statement.args);\n }\n });\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_STORE_BATCH_INSERT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName, numberOfRecords: records.length },\n },\n error,\n );\n }\n }\n\n async update({\n tableName,\n keys,\n data,\n }: {\n tableName: TABLE_NAMES;\n keys: Record<string, any>;\n data: Record<string, any>;\n }): Promise<void> {\n try {\n const statement = prepareUpdateStatement({ tableName, updates: data, keys, database: this.database });\n await this.pool.execute(statement.sql, statement.args);\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_STORE_UPDATE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async batchUpdate({\n tableName,\n items,\n }: {\n tableName: TABLE_NAMES;\n items: { keys: Record<string, any>; data: Record<string, any> }[];\n }): Promise<void> {\n if (items.length === 0) return;\n try {\n await this.withTransaction(async connection => {\n for (const item of items) {\n const statement = prepareUpdateStatement({\n tableName,\n updates: item.data,\n keys: item.keys,\n database: this.database,\n });\n await connection.execute(statement.sql, statement.args);\n }\n });\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_STORE_BATCH_UPDATE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName, numberOfRecords: items.length },\n },\n error,\n );\n }\n }\n\n async batchDelete({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, any>[] }): Promise<void> {\n if (keys.length === 0) return;\n try {\n await this.withTransaction(async connection => {\n for (const key of keys) {\n const statement = prepareDeleteStatement({ tableName, keys: key, database: this.database });\n await connection.execute(statement.sql, statement.args);\n }\n });\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_STORE_BATCH_DELETE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName, numberOfRecords: keys.length },\n },\n error,\n );\n }\n }\n\n async delete({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, any> }): Promise<void> {\n try {\n const statement = prepareDeleteStatement({ tableName, keys, database: this.database });\n await this.pool.execute(statement.sql, statement.args);\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_STORE_DELETE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async load<R>({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, any> }): Promise<R | null> {\n try {\n const whereClause = prepareWhereClause(keys);\n const sql = `SELECT * FROM ${formatTableName(tableName, this.database)}${whereClause.sql} ORDER BY createdAt DESC LIMIT 1`;\n const [rows] = await this.pool.execute<RowDataPacket[]>(sql, whereClause.args.map(transformToSqlValue));\n if (!rows.length) {\n return null;\n }\n let record = transformFromSqlRow<R>({ tableName, sqlRow: rows[0] as any });\n if (tableName === TABLE_WORKFLOW_SNAPSHOT) {\n const snapshotRecord: any = record;\n if (typeof snapshotRecord.snapshot === 'string') {\n try {\n snapshotRecord.snapshot = JSON.parse(snapshotRecord.snapshot);\n } catch {}\n }\n record = snapshotRecord;\n }\n return record;\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_STORE_LOAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async loadMany<R>({\n tableName,\n whereClause,\n orderBy,\n offset,\n limit,\n }: {\n tableName: TABLE_NAMES;\n whereClause?: WhereClause;\n orderBy?: string;\n offset?: number;\n limit?: number;\n }): Promise<R[]> {\n try {\n let sql = `SELECT * FROM ${formatTableName(tableName, this.database)}`;\n const args: SqlParam[] = [];\n\n if (whereClause?.sql) {\n sql += whereClause.sql;\n args.push(...whereClause.args.map(transformToSqlValue));\n }\n\n if (orderBy) {\n sql += ` ORDER BY ${sanitizeOrderBy(orderBy)}`;\n }\n\n if (typeof limit === 'number') {\n const safeLimit = Math.max(0, Number(limit));\n sql += ` LIMIT ${safeLimit}`;\n if (typeof offset === 'number') {\n const safeOffset = Math.max(0, Number(offset));\n sql += ` OFFSET ${safeOffset}`;\n }\n } else if (typeof offset === 'number') {\n const safeOffset = Math.max(0, Number(offset));\n sql += ` LIMIT 18446744073709551615 OFFSET ${safeOffset}`;\n }\n\n const [rows] = await this.pool.execute<RowDataPacket[]>(sql, args);\n return rows.map((row: RowDataPacket) => transformFromSqlRow<R>({ tableName, sqlRow: row as any }));\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_STORE_LOAD_MANY_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async loadTotalCount({\n tableName,\n whereClause,\n }: {\n tableName: TABLE_NAMES;\n whereClause?: WhereClause;\n }): Promise<number> {\n try {\n let sql = `SELECT COUNT(*) as count FROM ${formatTableName(tableName, this.database)}`;\n const args: SqlParam[] = [];\n if (whereClause?.sql) {\n sql += whereClause.sql;\n args.push(...whereClause.args.map(transformToSqlValue));\n }\n const [rows] = await this.pool.execute<RowDataPacket[]>(sql, args);\n return Number(rows[0]?.count ?? 0);\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_STORE_LOAD_TOTAL_COUNT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName },\n },\n error,\n );\n }\n }\n\n async alterTable({\n tableName,\n schema,\n ifNotExists,\n }: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void> {\n if (!ifNotExists.length) return;\n\n // Check if table exists first\n const db = await this.getDatabase();\n const tableExistsSql =\n 'SELECT COUNT(*) AS count FROM information_schema.tables WHERE table_schema = ? AND table_name = ?';\n const [tableRows] = await this.pool.execute<RowDataPacket[]>(tableExistsSql, [db ?? '', tableName]);\n const tableExists = Array.isArray(tableRows) && tableRows.length > 0 && (tableRows[0] as any).count > 0;\n\n if (!tableExists) {\n return; // Silently return if table doesn't exist\n }\n\n const params: SqlParam[] = [tableName];\n let sql = 'SELECT column_name FROM information_schema.columns WHERE table_name = ?';\n if (db) {\n sql += ' AND table_schema = ?';\n params.push(db);\n }\n const [rows] = await this.pool.execute<RowDataPacket[]>(sql, params);\n const existing = new Set((rows || []).map((row: RowDataPacket) => String(row.column_name).toLowerCase()));\n\n for (const columnName of ifNotExists) {\n if (existing.has(columnName.toLowerCase())) {\n continue;\n }\n const column = schema[columnName];\n if (!column) continue;\n\n const isNullable = column.nullable !== false;\n const isKeyColumn = Boolean(column.primaryKey) || this.isKeyColumn(tableName, columnName);\n const parts: string[] = [\n quoteIdentifier(columnName, 'column name'),\n this.getSqlType(column.type, { isKey: isKeyColumn, isNullable }),\n ];\n if (column.nullable === false) {\n parts.push('NOT NULL');\n const defaultClause = this.getDefaultClause(column.type, { isNullable, isKey: isKeyColumn });\n if (defaultClause) {\n parts.push(defaultClause);\n }\n }\n\n const alterSql = `ALTER TABLE ${formatTableName(tableName, this.database)} ADD COLUMN ${parts.join(' ')}`;\n try {\n await this.pool.execute(alterSql);\n } catch (error) {\n if ((error as any)?.code === 'ER_DUP_FIELDNAME') {\n continue;\n }\n throw new MastraError(\n {\n id: 'MYSQL_STORE_ALTER_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { tableName, columnName },\n },\n error,\n );\n }\n }\n }\n}\n\nconst ORDER_BY_PATTERN = /^`[A-Za-z0-9_]+`(?:\\s+(ASC|DESC))?$/i;\n\nfunction sanitizeOrderBy(orderBy: string): string {\n const clauses = orderBy\n .split(',')\n .map(clause => clause.trim())\n .filter(Boolean);\n\n if (!clauses.length) {\n throw new Error('ORDER BY clause cannot be empty.');\n }\n\n clauses.forEach(clause => {\n if (!ORDER_BY_PATTERN.test(clause)) {\n throw new Error(`Invalid ORDER BY clause: ${clause}`);\n }\n });\n\n return clauses.join(', ');\n}\n\n/**\n * Generates MySQL CREATE TABLE SQL for export.\n * @param tableName - Table name\n * @param schema - Column definitions\n * @param compositePrimaryKey - Optional composite primary key columns\n */\nexport function generateTableSQL({\n tableName,\n schema,\n compositePrimaryKey,\n}: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n compositePrimaryKey?: string[];\n}): string {\n const tableIdent = formatTableName(tableName);\n const columns = Object.entries(schema).map(([name, def]) => {\n const colName = quoteIdentifier(name, 'column name');\n const constraints: string[] = [];\n if (def.primaryKey && !compositePrimaryKey?.includes(name)) constraints.push('PRIMARY KEY');\n if (!def.nullable) constraints.push('NOT NULL');\n const sqlType = mapToMySqlType(def.type);\n return `${colName} ${sqlType} ${constraints.join(' ')}`;\n });\n\n const tableConstraints: string[] = [];\n if (compositePrimaryKey) {\n const pkCols = compositePrimaryKey.map(c => quoteIdentifier(c, 'primary key column')).join(', ');\n tableConstraints.push(`PRIMARY KEY (${pkCols})`);\n }\n\n return `CREATE TABLE IF NOT EXISTS ${tableIdent} (\\n${[...columns, ...tableConstraints].join(',\\n')}\\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`;\n}\n\n/**\n * Generates MySQL CREATE INDEX SQL for export.\n */\nexport function generateIndexSQL(options: CreateIndexOptions): string {\n const { name, table, columns, unique = false } = options;\n const tableName = formatTableName(table as TABLE_NAMES);\n const indexName = quoteIdentifier(name, 'index name');\n const uniqueStr = unique ? 'UNIQUE ' : '';\n\n const columnsStr = columns\n .map(col => {\n if (col.includes(' DESC') || col.includes(' ASC')) {\n const [colName, ...modifiers] = col.split(' ');\n return `${quoteIdentifier(colName!, 'column name')} ${modifiers.join(' ')}`;\n }\n return quoteIdentifier(col, 'column name');\n })\n .join(', ');\n\n return `CREATE ${uniqueStr}INDEX ${indexName} ON ${tableName} (${columnsStr});`;\n}\n\nfunction mapToMySqlType(type: StorageColumn['type']): string {\n switch (type) {\n case 'text':\n return 'TEXT';\n case 'timestamp':\n return 'DATETIME(3)';\n case 'bigint':\n return 'BIGINT';\n case 'integer':\n return 'INT';\n case 'float':\n return 'FLOAT';\n case 'boolean':\n return 'BOOLEAN';\n case 'uuid':\n return 'VARCHAR(36)';\n case 'jsonb':\n return 'JSON';\n default:\n return 'TEXT';\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n AgentsStorage,\n createStorageErrorId,\n normalizePerPage,\n calculatePagination,\n TABLE_AGENTS,\n TABLE_AGENT_VERSIONS,\n TABLE_FAVORITES,\n TABLE_SCHEMAS,\n AGENTS_SCHEMA,\n AGENT_VERSIONS_SCHEMA,\n} from '@mastra/core/storage';\nimport type {\n StorageAgentType,\n StorageCreateAgentInput,\n StorageUpdateAgentInput,\n StorageListAgentsInput,\n StorageListAgentsOutput,\n CreateIndexOptions,\n AgentVersion,\n CreateVersionInput,\n ListVersionsInput,\n ListVersionsOutput,\n AgentInstructionBlock,\n} from '@mastra/core/storage';\nimport type { Pool, RowDataPacket } from 'mysql2/promise';\n\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL } from '../operations';\nimport { formatTableName, quoteIdentifier } from '../utils';\n\nexport class AgentsMySQL extends AgentsStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_AGENTS, TABLE_AGENT_VERSIONS] as const;\n\n /**\n * Returns default index definitions for the agents domain tables.\n * Currently no default indexes are defined for agents.\n */\n static getDefaultIndexDefs(_prefix: string = ''): CreateIndexOptions[] {\n return [];\n }\n\n /**\n * Exports DDL statements for all managed tables.\n */\n static getExportDDL(): string[] {\n return [\n generateTableSQL({ tableName: TABLE_AGENTS, schema: TABLE_SCHEMAS[TABLE_AGENTS] }),\n generateTableSQL({ tableName: TABLE_AGENT_VERSIONS, schema: TABLE_SCHEMAS[TABLE_AGENT_VERSIONS] }),\n ];\n }\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx => (AgentsMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n /**\n * Returns default index definitions for the agents domain tables.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return AgentsMySQL.getDefaultIndexDefs('');\n }\n\n /**\n * Creates default indexes for optimal query performance.\n * Currently no default indexes are defined for agents.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n // No default indexes for agents domain\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({ tableName: TABLE_AGENTS, schema: AGENTS_SCHEMA });\n await this.operations.createTable({ tableName: TABLE_AGENT_VERSIONS, schema: AGENT_VERSIONS_SCHEMA });\n await this.operations.alterTable({\n tableName: TABLE_AGENTS,\n schema: AGENTS_SCHEMA,\n ifNotExists: ['status', 'authorId', 'visibility', 'favoriteCount'],\n });\n await this.operations.alterTable({\n tableName: TABLE_AGENT_VERSIONS,\n schema: AGENT_VERSIONS_SCHEMA,\n ifNotExists: ['mcpClients', 'requestContextSchema', 'workspace', 'skills', 'skillsFormat'],\n });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.operations.clearTable({ tableName: TABLE_AGENT_VERSIONS });\n await this.operations.clearTable({ tableName: TABLE_AGENTS });\n }\n\n private safeParseJSON<T = unknown>(value: unknown): T | undefined {\n if (value === null || value === undefined) return undefined;\n if (typeof value === 'string') {\n try {\n return JSON.parse(value) as T;\n } catch {\n return value as T;\n }\n }\n return value as T;\n }\n\n private parseRow(row: Record<string, unknown>): StorageAgentType {\n return {\n id: row.id as string,\n status: (row.status as 'draft' | 'published' | 'archived') ?? 'draft',\n activeVersionId: (row.activeVersionId as string) ?? undefined,\n authorId: (row.authorId as string) ?? undefined,\n visibility: (row.visibility as 'private' | 'public') ?? undefined,\n metadata: this.safeParseJSON(row.metadata),\n favoriteCount: row.favoriteCount === null || row.favoriteCount === undefined ? 0 : Number(row.favoriteCount),\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n updatedAt: row.updatedAt instanceof Date ? row.updatedAt : new Date(row.updatedAt as string),\n };\n }\n\n async getById(id: string): Promise<StorageAgentType | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_AGENTS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n return rows.length ? this.parseRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_AGENT_BY_ID', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId: id },\n },\n error,\n );\n }\n }\n\n async create(input: { agent: StorageCreateAgentInput }): Promise<StorageAgentType> {\n const { agent } = input;\n try {\n const now = new Date();\n\n await this.operations.insert({\n tableName: TABLE_AGENTS,\n record: {\n id: agent.id,\n status: 'draft',\n activeVersionId: null,\n authorId: agent.authorId ?? null,\n visibility: agent.visibility ?? null,\n metadata: agent.metadata ?? null,\n favoriteCount: 0,\n createdAt: now,\n updatedAt: now,\n },\n });\n\n const { id: _id, authorId: _authorId, metadata: _metadata, ...snapshotConfig } = agent;\n\n const versionId = crypto.randomUUID();\n try {\n await this.createVersion({\n id: versionId,\n agentId: agent.id,\n versionNumber: 1,\n ...snapshotConfig,\n changedFields: Object.keys(snapshotConfig),\n changeMessage: 'Initial version',\n });\n } catch (versionError) {\n try {\n await this.operations.delete({ tableName: TABLE_AGENTS, keys: { id: agent.id } });\n } catch (rollbackError) {\n // Log rollback failure but preserve original error\n console.error('Failed to rollback agent creation:', rollbackError);\n }\n throw versionError;\n }\n\n const created = await this.getById(agent.id);\n if (!created) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'CREATE_AGENT', 'NOT_FOUND_AFTER_CREATE'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `Agent ${agent.id} not found after creation`,\n details: { agentId: agent.id },\n });\n }\n\n return created;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_AGENT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId: agent.id },\n },\n error,\n );\n }\n }\n\n async update(input: StorageUpdateAgentInput): Promise<StorageAgentType> {\n const { id, ...updates } = input;\n try {\n const existing = await this.getById(id);\n if (!existing) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_AGENT', 'NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Agent ${id} not found`,\n details: { agentId: id },\n });\n }\n\n const { authorId, activeVersionId, metadata, status } = updates;\n\n const updateData: Record<string, unknown> = {\n updatedAt: new Date(),\n };\n\n if (authorId !== undefined) updateData.authorId = authorId;\n if (activeVersionId !== undefined) updateData.activeVersionId = activeVersionId;\n if (status !== undefined) updateData.status = status;\n if (metadata !== undefined) {\n updateData.metadata = { ...existing.metadata, ...metadata };\n }\n\n await this.operations.update({\n tableName: TABLE_AGENTS,\n keys: { id },\n data: updateData,\n });\n\n const updatedAgent = await this.getById(id);\n if (!updatedAgent) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_AGENT', 'NOT_FOUND_AFTER_UPDATE'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `Agent ${id} not found after update`,\n details: { agentId: id },\n });\n }\n\n return updatedAgent;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'UPDATE_AGENT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId: id },\n },\n error,\n );\n }\n }\n\n async delete(id: string): Promise<void> {\n try {\n await this.deleteVersionsByParentId(id);\n await this.operations.delete({ tableName: TABLE_AGENTS, keys: { id } });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_AGENT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId: id },\n },\n error,\n );\n }\n }\n\n async list(args?: StorageListAgentsInput): Promise<StorageListAgentsOutput> {\n const {\n page = 0,\n perPage: perPageInput,\n orderBy,\n authorId,\n metadata,\n status,\n visibility,\n entityIds,\n pinFavoritedFor,\n favoritedOnly,\n } = args || {};\n const { field, direction } = this.parseOrderBy(orderBy);\n\n if (page < 0) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_AGENTS', '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 perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n try {\n // Empty entityIds is short-circuit: no rows possible\n if (entityIds && entityIds.length === 0) {\n return { agents: [], total: 0, page, perPage: perPageForResponse, hasMore: false };\n }\n\n const agentsTable = formatTableName(TABLE_AGENTS);\n const favoritesTable = formatTableName(TABLE_FAVORITES);\n\n // Build WHERE conditions\n const conditions: string[] = [];\n const queryParams: any[] = [];\n\n // Determine if we need a JOIN\n const joinUserId = pinFavoritedFor;\n const useJoin = Boolean(joinUserId);\n\n if (status) {\n conditions.push(`a.${quoteIdentifier('status', 'column name')} = ?`);\n queryParams.push(status);\n }\n\n if (authorId !== undefined) {\n conditions.push(`a.${quoteIdentifier('authorId', 'column name')} = ?`);\n queryParams.push(authorId);\n }\n\n if (visibility !== undefined) {\n conditions.push(`a.${quoteIdentifier('visibility', 'column name')} = ?`);\n queryParams.push(visibility);\n }\n\n if (entityIds && entityIds.length > 0) {\n const placeholders = entityIds.map(() => '?').join(', ');\n conditions.push(`a.${quoteIdentifier('id', 'column name')} IN (${placeholders})`);\n queryParams.push(...entityIds);\n }\n\n if (metadata && Object.keys(metadata).length > 0) {\n for (const [key, value] of Object.entries(metadata)) {\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(key)) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'LIST_AGENTS', 'INVALID_METADATA_KEY'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Invalid metadata key: ${key}. Keys must be alphanumeric with underscores.`,\n details: { key },\n });\n }\n if (typeof value === 'string') {\n conditions.push(\n `JSON_UNQUOTE(JSON_EXTRACT(a.${quoteIdentifier('metadata', 'column name')}, '$.${key}')) = ?`,\n );\n queryParams.push(value);\n } else {\n conditions.push(\n `JSON_EXTRACT(a.${quoteIdentifier('metadata', 'column name')}, '$.${key}') = CAST(? AS JSON)`,\n );\n queryParams.push(JSON.stringify(value));\n }\n }\n }\n\n // Handle favoritedOnly\n if (useJoin && favoritedOnly) {\n conditions.push(`sr.${quoteIdentifier('userId', 'column name')} IS NOT NULL`);\n } else if (favoritedOnly) {\n // Defensive: favoritedOnly with no userId can never match a real row\n conditions.push('1=0');\n }\n\n const joinClause = useJoin\n ? `LEFT JOIN ${favoritesTable} sr ON sr.${quoteIdentifier('entityType', 'column name')} = 'agent' AND sr.${quoteIdentifier('entityId', 'column name')} = a.${quoteIdentifier('id', 'column name')} AND sr.${quoteIdentifier('userId', 'column name')} = ?`\n : '';\n\n const joinParams: any[] = useJoin && joinUserId ? [joinUserId] : [];\n const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';\n\n // Get total count\n const [countRows] = await this.pool.query<RowDataPacket[]>(\n `SELECT COUNT(*) as count FROM ${agentsTable} a ${joinClause} ${whereClause}`,\n [...joinParams, ...queryParams],\n );\n const total = parseInt(countRows[0]?.count ?? '0', 10);\n\n if (total === 0) {\n return {\n agents: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n const limitValue = perPageInput === false ? total : perPage;\n const hasMore = perPageInput === false ? false : offset + perPage < total;\n\n // Build ORDER BY\n let orderByClause: string;\n if (useJoin) {\n // Pin favorited agents first\n orderByClause = `CASE WHEN sr.${quoteIdentifier('userId', 'column name')} IS NOT NULL THEN 0 ELSE 1 END ASC, a.${quoteIdentifier(field, 'column name')} ${direction}`;\n } else {\n orderByClause = `a.${quoteIdentifier(field, 'column name')} ${direction}`;\n }\n\n const [rows] = await this.pool.query<RowDataPacket[]>(\n `SELECT a.* FROM ${agentsTable} a ${joinClause} ${whereClause} ORDER BY ${orderByClause} LIMIT ? OFFSET ?`,\n [...joinParams, ...queryParams, limitValue, offset],\n );\n\n const agents = rows.map(row => this.parseRow(row));\n\n return {\n agents,\n total,\n page,\n perPage: perPageForResponse,\n hasMore,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_AGENTS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n // ==========================================================================\n // Agent Version Methods\n // ==========================================================================\n\n async createVersion(input: CreateVersionInput): Promise<AgentVersion> {\n try {\n const now = new Date();\n\n await this.operations.insert({\n tableName: TABLE_AGENT_VERSIONS,\n record: {\n id: input.id,\n agentId: input.agentId,\n versionNumber: input.versionNumber,\n name: input.name ?? null,\n description: input.description ?? null,\n instructions: this.serializeInstructions(input.instructions),\n model: input.model,\n tools: input.tools ?? null,\n defaultOptions: input.defaultOptions ?? null,\n workflows: input.workflows ?? null,\n agents: input.agents ?? null,\n integrationTools: input.integrationTools ?? null,\n inputProcessors: input.inputProcessors ?? null,\n outputProcessors: input.outputProcessors ?? null,\n memory: input.memory ?? null,\n scorers: input.scorers ?? null,\n mcpClients: input.mcpClients ?? null,\n requestContextSchema: input.requestContextSchema ?? null,\n workspace: input.workspace ?? null,\n skills: input.skills ?? null,\n skillsFormat: input.skillsFormat ?? null,\n changedFields: input.changedFields ?? null,\n changeMessage: input.changeMessage ?? null,\n createdAt: now,\n },\n });\n\n return {\n ...input,\n createdAt: now,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { versionId: input.id, agentId: input.agentId },\n },\n error,\n );\n }\n }\n\n async getVersion(id: string): Promise<AgentVersion | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_AGENT_VERSIONS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { versionId: id },\n },\n error,\n );\n }\n }\n\n async getVersionByNumber(agentId: string, versionNumber: number): Promise<AgentVersion | null> {\n try {\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_AGENT_VERSIONS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('agentId', 'column name')} = ? AND ${quoteIdentifier('versionNumber', 'column name')} = ?`,\n args: [agentId, versionNumber],\n },\n limit: 1,\n });\n\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_VERSION_BY_NUMBER', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId, versionNumber },\n },\n error,\n );\n }\n }\n\n async getLatestVersion(agentId: string): Promise<AgentVersion | null> {\n try {\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_AGENT_VERSIONS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('agentId', 'column name')} = ?`,\n args: [agentId],\n },\n orderBy: `${quoteIdentifier('versionNumber', 'column name')} DESC`,\n limit: 1,\n });\n\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_LATEST_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId },\n },\n error,\n );\n }\n }\n\n async listVersions(input: ListVersionsInput): Promise<ListVersionsOutput> {\n const { agentId, page = 0, perPage: perPageInput, orderBy } = input;\n\n if (page < 0) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_VERSIONS', '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 perPage = normalizePerPage(perPageInput, 20);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n try {\n const { field, direction } = this.parseVersionOrderBy(orderBy);\n\n const whereClause = {\n sql: ` WHERE ${quoteIdentifier('agentId', 'column name')} = ?`,\n args: [agentId],\n };\n\n const total = await this.operations.loadTotalCount({ tableName: TABLE_AGENT_VERSIONS, whereClause });\n\n if (total === 0) {\n return {\n versions: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n const limitValue = perPageInput === false ? total : perPage;\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_AGENT_VERSIONS,\n whereClause,\n orderBy: `${quoteIdentifier(field, 'column name')} ${direction}`,\n offset,\n limit: limitValue,\n });\n\n const versions = rows.map(row => this.parseVersionRow(row));\n\n return {\n versions,\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_VERSIONS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId },\n },\n error,\n );\n }\n }\n\n async deleteVersion(id: string): Promise<void> {\n try {\n await this.operations.delete({ tableName: TABLE_AGENT_VERSIONS, keys: { id } });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { versionId: id },\n },\n error,\n );\n }\n }\n\n async deleteVersionsByParentId(entityId: string): Promise<void> {\n try {\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_AGENT_VERSIONS)} WHERE ${quoteIdentifier('agentId', 'column name')} = ?`,\n [entityId],\n );\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_VERSIONS_BY_AGENT_ID', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId: entityId },\n },\n error,\n );\n }\n }\n\n async countVersions(agentId: string): Promise<number> {\n try {\n return await this.operations.loadTotalCount({\n tableName: TABLE_AGENT_VERSIONS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('agentId', 'column name')} = ?`,\n args: [agentId],\n },\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'COUNT_VERSIONS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { agentId },\n },\n error,\n );\n }\n }\n\n // ==========================================================================\n // Private Helper Methods\n // ==========================================================================\n\n private serializeInstructions(instructions: string | AgentInstructionBlock[]): string {\n return Array.isArray(instructions) ? JSON.stringify(instructions) : instructions;\n }\n\n private deserializeInstructions(raw: string): string | AgentInstructionBlock[] {\n if (!raw) return raw;\n try {\n const parsed = JSON.parse(raw);\n if (Array.isArray(parsed)) return parsed as AgentInstructionBlock[];\n } catch {\n // Not JSON — plain string\n }\n return raw;\n }\n\n private parseVersionRow(row: Record<string, unknown>): AgentVersion {\n return {\n id: row.id as string,\n agentId: row.agentId as string,\n versionNumber: Number(row.versionNumber),\n name: row.name as string,\n description: (row.description as string) ?? undefined,\n instructions: this.deserializeInstructions(row.instructions as string),\n model: this.safeParseJSON(row.model) as AgentVersion['model'],\n tools: this.safeParseJSON(row.tools) as AgentVersion['tools'],\n defaultOptions: this.safeParseJSON(row.defaultOptions) as AgentVersion['defaultOptions'],\n workflows: this.safeParseJSON(row.workflows) as AgentVersion['workflows'],\n agents: this.safeParseJSON(row.agents) as AgentVersion['agents'],\n integrationTools: this.safeParseJSON(row.integrationTools) as AgentVersion['integrationTools'],\n inputProcessors: this.safeParseJSON(row.inputProcessors) as AgentVersion['inputProcessors'],\n outputProcessors: this.safeParseJSON(row.outputProcessors) as AgentVersion['outputProcessors'],\n memory: this.safeParseJSON(row.memory) as AgentVersion['memory'],\n scorers: this.safeParseJSON(row.scorers) as AgentVersion['scorers'],\n mcpClients: this.safeParseJSON(row.mcpClients) as AgentVersion['mcpClients'],\n requestContextSchema: this.safeParseJSON(row.requestContextSchema) as AgentVersion['requestContextSchema'],\n workspace: this.safeParseJSON(row.workspace) as AgentVersion['workspace'],\n skills: this.safeParseJSON(row.skills) as AgentVersion['skills'],\n skillsFormat: row.skillsFormat as 'xml' | 'json' | 'markdown' | undefined,\n changedFields: this.safeParseJSON(row.changedFields) as AgentVersion['changedFields'],\n changeMessage: (row.changeMessage as string) ?? undefined,\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n };\n }\n}\n","import type {\n BackgroundTask,\n BackgroundTaskStatus,\n TaskFilter,\n TaskListResult,\n UpdateBackgroundTask,\n} from '@mastra/core/background-tasks';\nimport { BackgroundTasksStorage, TABLE_BACKGROUND_TASKS, TABLE_SCHEMAS } from '@mastra/core/storage';\nimport type { CreateIndexOptions } from '@mastra/core/storage';\nimport type { Pool, RowDataPacket } from 'mysql2/promise';\n\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL, generateIndexSQL } from '../operations';\nimport { formatTableName, parseDateTime, quoteIdentifier, transformToSqlValue } from '../utils';\n\nfunction serializeJson(v: unknown): any {\n if (typeof v === 'object' && v != null) return JSON.stringify(v);\n return v ?? null;\n}\n\nfunction parseJson(val: unknown): any {\n if (val == null) return undefined;\n if (typeof val === 'string') {\n try {\n return JSON.parse(val);\n } catch {\n return val;\n }\n }\n return val;\n}\n\nfunction rowToTask(row: Record<string, any>): BackgroundTask {\n return {\n id: String(row.id),\n status: String(row.status) as BackgroundTaskStatus,\n toolName: String(row.tool_name),\n toolCallId: String(row.tool_call_id),\n args: parseJson(row.args) ?? {},\n agentId: String(row.agent_id),\n threadId: row.thread_id != null ? String(row.thread_id) : undefined,\n resourceId: row.resource_id != null ? String(row.resource_id) : undefined,\n runId: String(row.run_id),\n result: parseJson(row.result),\n error: parseJson(row.error),\n suspendPayload: parseJson(row.suspend_payload),\n retryCount: Number(row.retry_count),\n maxRetries: Number(row.max_retries),\n timeoutMs: Number(row.timeout_ms),\n createdAt: parseDateTime(row.createdAt)!,\n startedAt: parseDateTime(row.startedAt),\n suspendedAt: parseDateTime(row.suspendedAt),\n completedAt: parseDateTime(row.completedAt),\n };\n}\n\nexport class BackgroundTasksMySQL extends BackgroundTasksStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n static readonly MANAGED_TABLES = [TABLE_BACKGROUND_TASKS] as const;\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx =>\n (BackgroundTasksMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table),\n );\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({\n tableName: TABLE_BACKGROUND_TASKS,\n schema: TABLE_SCHEMAS[TABLE_BACKGROUND_TASKS],\n });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n static getDefaultIndexDefs(prefix: string = ''): CreateIndexOptions[] {\n return [\n {\n name: `${prefix}mastra_bg_tasks_status_created_at_idx`,\n table: TABLE_BACKGROUND_TASKS,\n columns: ['status', 'createdAt'],\n },\n {\n name: `${prefix}mastra_bg_tasks_agent_status_idx`,\n table: TABLE_BACKGROUND_TASKS,\n columns: ['agent_id', 'status'],\n },\n {\n name: `${prefix}mastra_bg_tasks_thread_idx`,\n table: TABLE_BACKGROUND_TASKS,\n columns: ['thread_id', 'createdAt'],\n },\n {\n name: `${prefix}mastra_bg_tasks_tool_call_idx`,\n table: TABLE_BACKGROUND_TASKS,\n columns: ['tool_call_id'],\n },\n ];\n }\n\n static getExportDDL(): string[] {\n const statements: string[] = [];\n\n statements.push(\n generateTableSQL({\n tableName: TABLE_BACKGROUND_TASKS,\n schema: TABLE_SCHEMAS[TABLE_BACKGROUND_TASKS],\n }),\n );\n\n for (const idx of BackgroundTasksMySQL.getDefaultIndexDefs()) {\n statements.push(generateIndexSQL(idx));\n }\n\n return statements;\n }\n\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return BackgroundTasksMySQL.getDefaultIndexDefs('');\n }\n\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n for (const indexDef of this.getDefaultIndexDefinitions()) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.operations.clearTable({ tableName: TABLE_BACKGROUND_TASKS });\n }\n\n async createTask(task: BackgroundTask): Promise<void> {\n await this.pool.execute(\n `INSERT INTO ${formatTableName(TABLE_BACKGROUND_TASKS)} (${quoteIdentifier('id', 'column name')}, ${quoteIdentifier('tool_call_id', 'column name')}, ${quoteIdentifier('tool_name', 'column name')}, ${quoteIdentifier('agent_id', 'column name')}, ${quoteIdentifier('thread_id', 'column name')}, ${quoteIdentifier('resource_id', 'column name')}, ${quoteIdentifier('run_id', 'column name')}, ${quoteIdentifier('status', 'column name')}, ${quoteIdentifier('args', 'column name')}, ${quoteIdentifier('result', 'column name')}, ${quoteIdentifier('error', 'column name')}, ${quoteIdentifier('suspend_payload', 'column name')}, ${quoteIdentifier('retry_count', 'column name')}, ${quoteIdentifier('max_retries', 'column name')}, ${quoteIdentifier('timeout_ms', 'column name')}, ${quoteIdentifier('createdAt', 'column name')}, ${quoteIdentifier('startedAt', 'column name')}, ${quoteIdentifier('suspendedAt', 'column name')}, ${quoteIdentifier('completedAt', 'column name')}) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n [\n task.id,\n task.toolCallId,\n task.toolName,\n task.agentId,\n task.threadId ?? null,\n task.resourceId ?? null,\n task.runId,\n task.status,\n JSON.stringify(task.args),\n task.result ? JSON.stringify(task.result) : null,\n task.error ? JSON.stringify(task.error) : null,\n task.suspendPayload ? JSON.stringify(task.suspendPayload) : null,\n task.retryCount,\n task.maxRetries,\n task.timeoutMs,\n transformToSqlValue(task.createdAt),\n transformToSqlValue(task.startedAt),\n transformToSqlValue(task.suspendedAt),\n transformToSqlValue(task.completedAt),\n ],\n );\n }\n\n async updateTask(taskId: string, update: UpdateBackgroundTask): Promise<void> {\n const setClauses: string[] = [];\n const params: (string | number | null)[] = [];\n\n if ('status' in update) {\n setClauses.push(`${quoteIdentifier('status', 'column name')} = ?`);\n params.push(update.status as string);\n }\n if ('result' in update) {\n setClauses.push(`${quoteIdentifier('result', 'column name')} = ?`);\n params.push(serializeJson(update.result));\n }\n if ('error' in update) {\n setClauses.push(`${quoteIdentifier('error', 'column name')} = ?`);\n params.push(serializeJson(update.error));\n }\n if ('suspendPayload' in update) {\n setClauses.push(`${quoteIdentifier('suspend_payload', 'column name')} = ?`);\n params.push(serializeJson(update.suspendPayload));\n }\n if ('retryCount' in update) {\n setClauses.push(`${quoteIdentifier('retry_count', 'column name')} = ?`);\n params.push(update.retryCount as number);\n }\n if ('startedAt' in update) {\n setClauses.push(`${quoteIdentifier('startedAt', 'column name')} = ?`);\n params.push(transformToSqlValue(update.startedAt));\n }\n if ('suspendedAt' in update) {\n setClauses.push(`${quoteIdentifier('suspendedAt', 'column name')} = ?`);\n params.push(transformToSqlValue(update.suspendedAt));\n }\n if ('completedAt' in update) {\n setClauses.push(`${quoteIdentifier('completedAt', 'column name')} = ?`);\n params.push(transformToSqlValue(update.completedAt));\n }\n\n if (setClauses.length === 0) return;\n\n params.push(taskId);\n await this.pool.execute(\n `UPDATE ${formatTableName(TABLE_BACKGROUND_TASKS)} SET ${setClauses.join(', ')} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n params,\n );\n }\n\n async getTask(taskId: string): Promise<BackgroundTask | null> {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_BACKGROUND_TASKS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [taskId],\n );\n const row = rows[0];\n return row ? rowToTask(row as Record<string, any>) : null;\n }\n\n async listTasks(filter: TaskFilter): Promise<TaskListResult> {\n const conditions: string[] = [];\n const params: (string | number | null)[] = [];\n\n if (filter.status) {\n const statuses = Array.isArray(filter.status) ? filter.status : [filter.status];\n const placeholders = statuses.map(() => '?').join(', ');\n conditions.push(`${quoteIdentifier('status', 'column name')} IN (${placeholders})`);\n params.push(...statuses);\n }\n if (filter.agentId) {\n conditions.push(`${quoteIdentifier('agent_id', 'column name')} = ?`);\n params.push(filter.agentId);\n }\n if (filter.threadId) {\n conditions.push(`${quoteIdentifier('thread_id', 'column name')} = ?`);\n params.push(filter.threadId);\n }\n if (filter.runId) {\n conditions.push(`${quoteIdentifier('run_id', 'column name')} = ?`);\n params.push(filter.runId);\n }\n if (filter.resourceId) {\n conditions.push(`${quoteIdentifier('resource_id', 'column name')} = ?`);\n params.push(filter.resourceId);\n }\n if (filter.toolName) {\n conditions.push(`${quoteIdentifier('tool_name', 'column name')} = ?`);\n params.push(filter.toolName);\n }\n if (filter.toolCallId) {\n conditions.push(`${quoteIdentifier('tool_call_id', 'column name')} = ?`);\n params.push(filter.toolCallId);\n }\n // Date range filtering\n const dateCol =\n filter.dateFilterBy === 'startedAt'\n ? quoteIdentifier('startedAt', 'column name')\n : filter.dateFilterBy === 'suspendedAt'\n ? quoteIdentifier('suspendedAt', 'column name')\n : filter.dateFilterBy === 'completedAt'\n ? quoteIdentifier('completedAt', 'column name')\n : quoteIdentifier('createdAt', 'column name');\n if (filter.fromDate) {\n conditions.push(`${dateCol} >= ?`);\n params.push(transformToSqlValue(filter.fromDate));\n }\n if (filter.toDate) {\n conditions.push(`${dateCol} < ?`);\n params.push(transformToSqlValue(filter.toDate));\n }\n\n const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';\n\n // Count total matching rows (before pagination)\n const [countRows] = await this.pool.query<RowDataPacket[]>(\n `SELECT COUNT(*) as count FROM ${formatTableName(TABLE_BACKGROUND_TASKS)} ${where}`,\n [...params],\n );\n const total = Number(countRows[0]?.count ?? 0);\n\n const orderCol =\n filter.orderBy === 'startedAt'\n ? quoteIdentifier('startedAt', 'column name')\n : filter.orderBy === 'suspendedAt'\n ? quoteIdentifier('suspendedAt', 'column name')\n : filter.orderBy === 'completedAt'\n ? quoteIdentifier('completedAt', 'column name')\n : quoteIdentifier('createdAt', 'column name');\n const direction = filter.orderDirection === 'desc' ? 'DESC' : 'ASC';\n\n let sql = `SELECT * FROM ${formatTableName(TABLE_BACKGROUND_TASKS)} ${where} ORDER BY ${orderCol} ${direction}`;\n\n if (filter.perPage != null) {\n sql += ' LIMIT ?';\n params.push(filter.perPage);\n if (filter.page != null) {\n sql += ' OFFSET ?';\n params.push(filter.page * filter.perPage);\n }\n }\n\n const [rows] = await this.pool.query<RowDataPacket[]>(sql, params);\n return { tasks: rows.map(row => rowToTask(row as Record<string, any>)), total };\n }\n\n async deleteTask(taskId: string): Promise<void> {\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_BACKGROUND_TASKS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [taskId],\n );\n }\n\n async deleteTasks(filter: TaskFilter): Promise<void> {\n const conditions: string[] = [];\n const params: (string | number | null)[] = [];\n\n if (filter.status) {\n const statuses = Array.isArray(filter.status) ? filter.status : [filter.status];\n const placeholders = statuses.map(() => '?').join(', ');\n conditions.push(`${quoteIdentifier('status', 'column name')} IN (${placeholders})`);\n params.push(...statuses);\n }\n // Date range filtering\n const dateCol =\n filter.dateFilterBy === 'startedAt'\n ? quoteIdentifier('startedAt', 'column name')\n : filter.dateFilterBy === 'suspendedAt'\n ? quoteIdentifier('suspendedAt', 'column name')\n : filter.dateFilterBy === 'completedAt'\n ? quoteIdentifier('completedAt', 'column name')\n : quoteIdentifier('createdAt', 'column name');\n if (filter.fromDate) {\n conditions.push(`${dateCol} >= ?`);\n params.push(transformToSqlValue(filter.fromDate));\n }\n if (filter.toDate) {\n conditions.push(`${dateCol} < ?`);\n params.push(transformToSqlValue(filter.toDate));\n }\n if (filter.agentId) {\n conditions.push(`${quoteIdentifier('agent_id', 'column name')} = ?`);\n params.push(filter.agentId);\n }\n if (filter.runId) {\n conditions.push(`${quoteIdentifier('run_id', 'column name')} = ?`);\n params.push(filter.runId);\n }\n\n if (conditions.length === 0) return; // Safety: don't delete everything\n\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_BACKGROUND_TASKS)} WHERE ${conditions.join(' AND ')}`,\n params,\n );\n }\n\n async getRunningCount(): Promise<number> {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT COUNT(*) as count FROM ${formatTableName(TABLE_BACKGROUND_TASKS)} WHERE ${quoteIdentifier('status', 'column name')} = ?`,\n ['running'],\n );\n return Number(rows[0]?.count ?? 0);\n }\n\n async getRunningCountByAgent(agentId: string): Promise<number> {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT COUNT(*) as count FROM ${formatTableName(TABLE_BACKGROUND_TASKS)} WHERE ${quoteIdentifier('status', 'column name')} = ? AND ${quoteIdentifier('agent_id', 'column name')} = ?`,\n ['running', agentId],\n );\n return Number(rows[0]?.count ?? 0);\n }\n}\n","import { BlobStore, TABLE_SKILL_BLOBS, SKILL_BLOBS_SCHEMA } from '@mastra/core/storage';\nimport type { StorageBlobEntry } from '@mastra/core/storage';\nimport type { Pool, RowDataPacket } from 'mysql2/promise';\n\nimport type { StoreOperationsMySQL } from '../operations';\nimport { formatTableName, quoteIdentifier, transformToSqlValue } from '../utils';\n\nexport class BlobsMySQL extends BlobStore {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n\n constructor({ pool, operations }: { pool: Pool; operations: StoreOperationsMySQL }) {\n super();\n this.pool = pool;\n this.operations = operations;\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({ tableName: TABLE_SKILL_BLOBS, schema: SKILL_BLOBS_SCHEMA });\n }\n\n async put(entry: StorageBlobEntry): Promise<void> {\n const now = entry.createdAt ?? new Date();\n await this.pool.execute(\n `INSERT IGNORE INTO ${formatTableName(TABLE_SKILL_BLOBS)} (${quoteIdentifier('hash', 'column name')}, ${quoteIdentifier('content', 'column name')}, ${quoteIdentifier('size', 'column name')}, ${quoteIdentifier('mimeType', 'column name')}, ${quoteIdentifier('createdAt', 'column name')}) VALUES (?, ?, ?, ?, ?)`,\n [entry.hash, entry.content, entry.size, entry.mimeType ?? null, transformToSqlValue(now)],\n );\n }\n\n async get(hash: string): Promise<StorageBlobEntry | null> {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_SKILL_BLOBS)} WHERE ${quoteIdentifier('hash', 'column name')} = ?`,\n [hash],\n );\n if (!rows.length) return null;\n return this.#parseRow(rows[0]!);\n }\n\n async has(hash: string): Promise<boolean> {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT 1 FROM ${formatTableName(TABLE_SKILL_BLOBS)} WHERE ${quoteIdentifier('hash', 'column name')} = ? LIMIT 1`,\n [hash],\n );\n return rows.length > 0;\n }\n\n async delete(hash: string): Promise<boolean> {\n const [result] = await this.pool.execute<any>(\n `DELETE FROM ${formatTableName(TABLE_SKILL_BLOBS)} WHERE ${quoteIdentifier('hash', 'column name')} = ?`,\n [hash],\n );\n return result.affectedRows > 0;\n }\n\n async putMany(entries: StorageBlobEntry[]): Promise<void> {\n if (entries.length === 0) return;\n await this.operations.batchInsert({\n tableName: TABLE_SKILL_BLOBS,\n records: entries.map(entry => ({\n hash: entry.hash,\n content: entry.content,\n size: entry.size,\n mimeType: entry.mimeType ?? null,\n createdAt: entry.createdAt ?? new Date(),\n })),\n });\n }\n\n async getMany(hashes: string[]): Promise<Map<string, StorageBlobEntry>> {\n const result = new Map<string, StorageBlobEntry>();\n if (hashes.length === 0) return result;\n\n const batchSize = 500;\n for (let i = 0; i < hashes.length; i += batchSize) {\n const batch = hashes.slice(i, i + batchSize);\n const placeholders = batch.map(() => '?').join(', ');\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_SKILL_BLOBS)} WHERE ${quoteIdentifier('hash', 'column name')} IN (${placeholders})`,\n batch,\n );\n for (const row of rows) {\n const entry = this.#parseRow(row);\n result.set(entry.hash, entry);\n }\n }\n return result;\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.operations.clearTable({ tableName: TABLE_SKILL_BLOBS });\n }\n\n #parseRow(row: Record<string, unknown>): StorageBlobEntry {\n return {\n hash: row.hash as string,\n content: row.content as string,\n size: Number(row.size),\n mimeType: (row.mimeType as string) || undefined,\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n };\n }\n}\n","import {\n ChannelsStorage,\n TABLE_CHANNEL_INSTALLATIONS,\n TABLE_CHANNEL_CONFIG,\n TABLE_SCHEMAS,\n} from '@mastra/core/storage';\nimport type { ChannelInstallation, ChannelConfig, CreateIndexOptions } from '@mastra/core/storage';\nimport type { Pool, RowDataPacket } from 'mysql2/promise';\n\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL, generateIndexSQL } from '../operations';\nimport { formatTableName, quoteIdentifier, transformToSqlValue, parseDateTime } from '../utils';\n\nexport class ChannelsMySQL extends ChannelsStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n static readonly MANAGED_TABLES = [TABLE_CHANNEL_INSTALLATIONS, TABLE_CHANNEL_CONFIG] as const;\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx => (ChannelsMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({\n tableName: TABLE_CHANNEL_INSTALLATIONS,\n schema: TABLE_SCHEMAS[TABLE_CHANNEL_INSTALLATIONS],\n });\n await this.operations.createTable({\n tableName: TABLE_CHANNEL_CONFIG,\n schema: TABLE_SCHEMAS[TABLE_CHANNEL_CONFIG],\n });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n static getDefaultIndexDefs(prefix: string = ''): CreateIndexOptions[] {\n return [\n {\n name: `${prefix}idx_channel_installations_webhook`,\n table: TABLE_CHANNEL_INSTALLATIONS,\n columns: ['webhookId'],\n unique: true,\n },\n {\n name: `${prefix}idx_channel_installations_platform_agent`,\n table: TABLE_CHANNEL_INSTALLATIONS,\n columns: ['platform', 'agentId'],\n },\n ];\n }\n\n static getExportDDL(): string[] {\n const statements: string[] = [];\n\n for (const tableName of ChannelsMySQL.MANAGED_TABLES) {\n statements.push(\n generateTableSQL({\n tableName,\n schema: TABLE_SCHEMAS[tableName],\n }),\n );\n }\n\n for (const idx of ChannelsMySQL.getDefaultIndexDefs()) {\n statements.push(generateIndexSQL(idx));\n }\n\n return statements;\n }\n\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return ChannelsMySQL.getDefaultIndexDefs('');\n }\n\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n for (const indexDef of this.getDefaultIndexDefinitions()) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.operations.clearTable({ tableName: TABLE_CHANNEL_INSTALLATIONS });\n await this.operations.clearTable({ tableName: TABLE_CHANNEL_CONFIG });\n }\n\n async saveInstallation(installation: ChannelInstallation): Promise<void> {\n const now = new Date();\n await this.pool.execute(\n `INSERT INTO ${formatTableName(TABLE_CHANNEL_INSTALLATIONS)} (${quoteIdentifier('id', 'column name')}, ${quoteIdentifier('platform', 'column name')}, ${quoteIdentifier('agentId', 'column name')}, ${quoteIdentifier('status', 'column name')}, ${quoteIdentifier('webhookId', 'column name')}, ${quoteIdentifier('data', 'column name')}, ${quoteIdentifier('configHash', 'column name')}, ${quoteIdentifier('error', 'column name')}, ${quoteIdentifier('createdAt', 'column name')}, ${quoteIdentifier('updatedAt', 'column name')}) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE ${quoteIdentifier('platform', 'column name')} = VALUES(${quoteIdentifier('platform', 'column name')}), ${quoteIdentifier('agentId', 'column name')} = VALUES(${quoteIdentifier('agentId', 'column name')}), ${quoteIdentifier('status', 'column name')} = VALUES(${quoteIdentifier('status', 'column name')}), ${quoteIdentifier('webhookId', 'column name')} = VALUES(${quoteIdentifier('webhookId', 'column name')}), ${quoteIdentifier('data', 'column name')} = VALUES(${quoteIdentifier('data', 'column name')}), ${quoteIdentifier('configHash', 'column name')} = VALUES(${quoteIdentifier('configHash', 'column name')}), ${quoteIdentifier('error', 'column name')} = VALUES(${quoteIdentifier('error', 'column name')}), ${quoteIdentifier('updatedAt', 'column name')} = VALUES(${quoteIdentifier('updatedAt', 'column name')})`,\n [\n installation.id,\n installation.platform,\n installation.agentId,\n installation.status,\n installation.webhookId ?? null,\n JSON.stringify(installation.data),\n installation.configHash ?? null,\n installation.error ?? null,\n transformToSqlValue(installation.createdAt ?? now),\n transformToSqlValue(now),\n ],\n );\n }\n\n async getInstallation(id: string): Promise<ChannelInstallation | null> {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_CHANNEL_INSTALLATIONS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n const row = rows[0];\n return row ? this.parseInstallationRow(row) : null;\n }\n\n async getInstallationByAgent(platform: string, agentId: string): Promise<ChannelInstallation | null> {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_CHANNEL_INSTALLATIONS)} WHERE ${quoteIdentifier('platform', 'column name')} = ? AND ${quoteIdentifier('agentId', 'column name')} = ? ORDER BY CASE ${quoteIdentifier('status', 'column name')} WHEN 'active' THEN 0 WHEN 'pending' THEN 1 ELSE 2 END, ${quoteIdentifier('updatedAt', 'column name')} DESC LIMIT 1`,\n [platform, agentId],\n );\n const row = rows[0];\n return row ? this.parseInstallationRow(row) : null;\n }\n\n async getInstallationByWebhookId(webhookId: string): Promise<ChannelInstallation | null> {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_CHANNEL_INSTALLATIONS)} WHERE ${quoteIdentifier('webhookId', 'column name')} = ?`,\n [webhookId],\n );\n const row = rows[0];\n return row ? this.parseInstallationRow(row) : null;\n }\n\n async listInstallations(platform: string): Promise<ChannelInstallation[]> {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_CHANNEL_INSTALLATIONS)} WHERE ${quoteIdentifier('platform', 'column name')} = ? ORDER BY ${quoteIdentifier('createdAt', 'column name')} DESC`,\n [platform],\n );\n return rows.map(row => this.parseInstallationRow(row));\n }\n\n async deleteInstallation(id: string): Promise<void> {\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_CHANNEL_INSTALLATIONS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n }\n\n async saveConfig(config: ChannelConfig): Promise<void> {\n await this.pool.execute(\n `INSERT INTO ${formatTableName(TABLE_CHANNEL_CONFIG)} (${quoteIdentifier('platform', 'column name')}, ${quoteIdentifier('data', 'column name')}, ${quoteIdentifier('updatedAt', 'column name')}) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE ${quoteIdentifier('data', 'column name')} = VALUES(${quoteIdentifier('data', 'column name')}), ${quoteIdentifier('updatedAt', 'column name')} = VALUES(${quoteIdentifier('updatedAt', 'column name')})`,\n [config.platform, JSON.stringify(config.data), transformToSqlValue(config.updatedAt)],\n );\n }\n\n async getConfig(platform: string): Promise<ChannelConfig | null> {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_CHANNEL_CONFIG)} WHERE ${quoteIdentifier('platform', 'column name')} = ?`,\n [platform],\n );\n const row = rows[0];\n if (!row) return null;\n return {\n platform: row.platform as string,\n data: typeof row.data === 'string' ? JSON.parse(row.data || '{}') : row.data,\n updatedAt: parseDateTime(row.updatedAt) ?? new Date(),\n };\n }\n\n async deleteConfig(platform: string): Promise<void> {\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_CHANNEL_CONFIG)} WHERE ${quoteIdentifier('platform', 'column name')} = ?`,\n [platform],\n );\n }\n\n private parseInstallationRow(row: Record<string, unknown>): ChannelInstallation {\n return {\n id: row.id as string,\n platform: row.platform as string,\n agentId: row.agentId as string,\n status: row.status as 'pending' | 'active' | 'error',\n webhookId: (row.webhookId as string) || undefined,\n data: typeof row.data === 'string' ? JSON.parse(row.data || '{}') : row.data,\n configHash: (row.configHash as string) || undefined,\n error: (row.error as string) || undefined,\n createdAt: parseDateTime(row.createdAt as string | number | Date | null | undefined) ?? new Date(),\n updatedAt: parseDateTime(row.updatedAt as string | number | Date | null | undefined) ?? new Date(),\n };\n }\n}\n","import { randomUUID } from 'node:crypto';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n TABLE_DATASETS,\n TABLE_DATASET_ITEMS,\n TABLE_DATASET_VERSIONS,\n TABLE_EXPERIMENTS,\n TABLE_EXPERIMENT_RESULTS,\n TABLE_SCHEMAS,\n DATASETS_SCHEMA,\n DATASET_ITEMS_SCHEMA,\n DATASET_VERSIONS_SCHEMA,\n DatasetsStorage,\n calculatePagination,\n normalizePerPage,\n} from '@mastra/core/storage';\nimport type {\n CreateIndexOptions,\n DatasetRecord,\n DatasetItem,\n DatasetItemRow,\n DatasetVersion,\n CreateDatasetInput,\n UpdateDatasetInput,\n AddDatasetItemInput,\n UpdateDatasetItemInput,\n ListDatasetsInput,\n ListDatasetsOutput,\n ListDatasetItemsInput,\n ListDatasetItemsOutput,\n ListDatasetVersionsInput,\n ListDatasetVersionsOutput,\n BatchInsertItemsInput,\n BatchDeleteItemsInput,\n} from '@mastra/core/storage';\nimport type { Pool, RowDataPacket } from 'mysql2/promise';\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL } from '../operations';\nimport { formatTableName, parseDateTime, quoteIdentifier, transformToSqlValue } from '../utils';\n\nfunction parseJSON<T>(value: unknown): T | undefined {\n if (value === null || value === undefined) return undefined;\n if (typeof value === 'string') {\n if (!value) return undefined;\n try {\n return JSON.parse(value) as T;\n } catch {\n return undefined;\n }\n }\n if (typeof value === 'object') return value as T;\n return undefined;\n}\n\nfunction jsonArg(value: unknown): string | null {\n return value === undefined || value === null ? null : JSON.stringify(value);\n}\n\nexport class DatasetsMySQL extends DatasetsStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_DATASETS, TABLE_DATASET_ITEMS, TABLE_DATASET_VERSIONS] as const;\n\n /**\n * Returns default index definitions for the datasets domain tables.\n * Currently no default indexes are defined for datasets.\n */\n static getDefaultIndexDefs(_prefix: string = ''): CreateIndexOptions[] {\n return [];\n }\n\n /**\n * Exports DDL statements for all managed tables.\n */\n static getExportDDL(): string[] {\n return [\n generateTableSQL({ tableName: TABLE_DATASETS, schema: TABLE_SCHEMAS[TABLE_DATASETS] }),\n generateTableSQL({\n tableName: TABLE_DATASET_ITEMS,\n schema: TABLE_SCHEMAS[TABLE_DATASET_ITEMS],\n compositePrimaryKey: ['id', 'datasetVersion'],\n }),\n generateTableSQL({ tableName: TABLE_DATASET_VERSIONS, schema: TABLE_SCHEMAS[TABLE_DATASET_VERSIONS] }),\n ];\n }\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx => (DatasetsMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n /**\n * Returns default index definitions for the datasets domain tables.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return DatasetsMySQL.getDefaultIndexDefs('');\n }\n\n /**\n * Creates default indexes for optimal query performance.\n * Currently no default indexes are defined for datasets.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n // No default indexes for datasets domain\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({ tableName: TABLE_DATASETS, schema: DATASETS_SCHEMA });\n await this.operations.createTable({ tableName: TABLE_DATASET_ITEMS as any, schema: DATASET_ITEMS_SCHEMA });\n await this.operations.createTable({ tableName: TABLE_DATASET_VERSIONS, schema: DATASET_VERSIONS_SCHEMA });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.pool.execute(`DELETE FROM ${formatTableName(TABLE_DATASET_VERSIONS)}`);\n await this.pool.execute(`DELETE FROM ${formatTableName(TABLE_DATASET_ITEMS)}`);\n await this.pool.execute(`DELETE FROM ${formatTableName(TABLE_DATASETS)}`);\n }\n\n // --- Row transformers ---\n\n private mapDataset(row: Record<string, any>): DatasetRecord {\n return {\n id: row.id as string,\n name: row.name as string,\n description: row.description as string | undefined,\n metadata: parseJSON<Record<string, unknown>>(row.metadata),\n inputSchema: parseJSON<Record<string, unknown>>(row.inputSchema),\n groundTruthSchema: parseJSON<Record<string, unknown>>(row.groundTruthSchema),\n version: row.version as number,\n createdAt: parseDateTime(row.createdAt) ?? new Date(),\n updatedAt: parseDateTime(row.updatedAt) ?? new Date(),\n };\n }\n\n private mapItem(row: Record<string, any>): DatasetItem {\n return {\n id: row.id as string,\n datasetId: row.datasetId as string,\n datasetVersion: row.datasetVersion as number,\n input: parseJSON<Record<string, unknown>>(row.input),\n groundTruth: row.groundTruth ? parseJSON<Record<string, unknown>>(row.groundTruth) : undefined,\n metadata: row.metadata ? parseJSON<Record<string, unknown>>(row.metadata) : undefined,\n createdAt: parseDateTime(row.createdAt) ?? new Date(),\n updatedAt: parseDateTime(row.updatedAt) ?? new Date(),\n };\n }\n\n private mapItemFull(row: Record<string, any>): DatasetItemRow {\n return {\n id: row.id as string,\n datasetId: row.datasetId as string,\n datasetVersion: row.datasetVersion as number,\n validTo: row.validTo as number | null,\n isDeleted: Boolean(row.isDeleted),\n input: parseJSON<Record<string, unknown>>(row.input),\n groundTruth: row.groundTruth ? parseJSON<Record<string, unknown>>(row.groundTruth) : undefined,\n metadata: row.metadata ? parseJSON<Record<string, unknown>>(row.metadata) : undefined,\n createdAt: parseDateTime(row.createdAt) ?? new Date(),\n updatedAt: parseDateTime(row.updatedAt) ?? new Date(),\n };\n }\n\n private mapVersion(row: Record<string, any>): DatasetVersion {\n return {\n id: row.id as string,\n datasetId: row.datasetId as string,\n version: row.version as number,\n createdAt: parseDateTime(row.createdAt) ?? new Date(),\n };\n }\n\n // --- Dataset CRUD ---\n\n async createDataset(input: CreateDatasetInput): Promise<DatasetRecord> {\n try {\n const id = randomUUID();\n const now = new Date();\n\n await this.operations.insert({\n tableName: TABLE_DATASETS,\n record: {\n id,\n name: input.name,\n description: input.description ?? null,\n metadata: jsonArg(input.metadata),\n inputSchema: jsonArg(input.inputSchema),\n groundTruthSchema: jsonArg(input.groundTruthSchema),\n version: 0,\n createdAt: now,\n updatedAt: now,\n },\n });\n\n return {\n id,\n name: input.name,\n description: input.description,\n metadata: input.metadata,\n inputSchema: input.inputSchema ?? undefined,\n groundTruthSchema: input.groundTruthSchema ?? undefined,\n version: 0,\n createdAt: now,\n updatedAt: now,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_CREATE_DATASET_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getDatasetById({ id }: { id: string }): Promise<DatasetRecord | null> {\n try {\n const row = await this.operations.load<Record<string, any>>({\n tableName: TABLE_DATASETS,\n keys: { id },\n });\n return row ? this.mapDataset(row) : null;\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_GET_DATASET_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n protected async _doUpdateDataset(args: UpdateDatasetInput): Promise<DatasetRecord> {\n try {\n const existing = await this.getDatasetById({ id: args.id });\n if (!existing) {\n throw new MastraError({\n id: 'MYSQL_UPDATE_DATASET_NOT_FOUND',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { datasetId: args.id },\n });\n }\n\n const data: Record<string, any> = { updatedAt: new Date() };\n\n if (args.name !== undefined) data.name = args.name;\n if (args.description !== undefined) data.description = args.description;\n if (args.metadata !== undefined) data.metadata = JSON.stringify(args.metadata);\n if (args.inputSchema !== undefined)\n data.inputSchema = args.inputSchema === null ? null : JSON.stringify(args.inputSchema);\n if (args.groundTruthSchema !== undefined)\n data.groundTruthSchema = args.groundTruthSchema === null ? null : JSON.stringify(args.groundTruthSchema);\n\n await this.operations.update({\n tableName: TABLE_DATASETS,\n keys: { id: args.id },\n data,\n });\n\n return {\n ...existing,\n name: args.name ?? existing.name,\n description: args.description ?? existing.description,\n metadata: args.metadata ?? existing.metadata,\n inputSchema: (args.inputSchema !== undefined ? args.inputSchema : existing.inputSchema) ?? undefined,\n groundTruthSchema:\n (args.groundTruthSchema !== undefined ? args.groundTruthSchema : existing.groundTruthSchema) ?? undefined,\n updatedAt: data.updatedAt,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: 'MYSQL_UPDATE_DATASET_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteDataset({ id }: { id: string }): Promise<void> {\n const connection = await this.pool.getConnection();\n try {\n await connection.beginTransaction();\n\n try {\n await connection.execute(\n `DELETE FROM ${formatTableName(TABLE_EXPERIMENT_RESULTS)} WHERE ${quoteIdentifier('experimentId', 'column name')} IN (SELECT id FROM ${formatTableName(TABLE_EXPERIMENTS)} WHERE ${quoteIdentifier('datasetId', 'column name')} = ?)`,\n [id],\n );\n } catch {\n // experiment_results table may not exist\n }\n try {\n await connection.execute(\n `UPDATE ${formatTableName(TABLE_EXPERIMENTS)} SET ${quoteIdentifier('datasetId', 'column name')} = NULL, ${quoteIdentifier('datasetVersion', 'column name')} = NULL WHERE ${quoteIdentifier('datasetId', 'column name')} = ?`,\n [id],\n );\n } catch {\n // experiments table may not exist\n }\n\n await connection.execute(\n `DELETE FROM ${formatTableName(TABLE_DATASET_VERSIONS)} WHERE ${quoteIdentifier('datasetId', 'column name')} = ?`,\n [id],\n );\n await connection.execute(\n `DELETE FROM ${formatTableName(TABLE_DATASET_ITEMS)} WHERE ${quoteIdentifier('datasetId', 'column name')} = ?`,\n [id],\n );\n await connection.execute(`DELETE FROM ${formatTableName(TABLE_DATASETS)} WHERE id = ?`, [id]);\n\n await connection.commit();\n } catch (error) {\n await connection.rollback();\n throw new MastraError(\n {\n id: 'MYSQL_DELETE_DATASET_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n } finally {\n connection.release();\n }\n }\n\n async listDatasets(args: ListDatasetsInput): Promise<ListDatasetsOutput> {\n try {\n const { page, perPage: perPageInput } = args.pagination;\n\n const whereClause = { sql: '', args: [] as any[] };\n const total = await this.operations.loadTotalCount({ tableName: TABLE_DATASETS, whereClause });\n\n if (total === 0) {\n return {\n datasets: [],\n pagination: { total: 0, page, perPage: perPageInput, hasMore: false },\n };\n }\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<Record<string, any>>({\n tableName: TABLE_DATASETS,\n whereClause,\n orderBy: `${quoteIdentifier('createdAt', 'column name')} DESC, \\`id\\` ASC`,\n offset,\n limit: limitValue,\n });\n\n return {\n datasets: rows.map(row => this.mapDataset(row)),\n pagination: {\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n },\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_LIST_DATASETS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n // --- SCD-2 item mutations ---\n\n protected async _doAddItem(args: AddDatasetItemInput): Promise<DatasetItem> {\n const connection = await this.pool.getConnection();\n try {\n await connection.beginTransaction();\n\n const id = randomUUID();\n const versionId = randomUUID();\n const now = new Date();\n const tableDatasetsName = formatTableName(TABLE_DATASETS);\n const tableItemsName = formatTableName(TABLE_DATASET_ITEMS);\n const tableVersionsName = formatTableName(TABLE_DATASET_VERSIONS);\n\n // Bump version\n await connection.execute(`UPDATE ${tableDatasetsName} SET \\`version\\` = \\`version\\` + 1 WHERE id = ?`, [\n args.datasetId,\n ]);\n\n // Get new version\n const [versionRows] = await connection.execute<RowDataPacket[]>(\n `SELECT \\`version\\` FROM ${tableDatasetsName} WHERE id = ?`,\n [args.datasetId],\n );\n const newVersion = (versionRows as any[])[0]?.version as number;\n\n // Insert item\n await connection.execute(\n `INSERT INTO ${tableItemsName} (\\`id\\`, \\`datasetId\\`, \\`datasetVersion\\`, \\`validTo\\`, \\`isDeleted\\`, \\`input\\`, \\`groundTruth\\`, \\`metadata\\`, \\`createdAt\\`, \\`updatedAt\\`) VALUES (?, ?, ?, NULL, 0, ?, ?, ?, ?, ?)`,\n [\n id,\n args.datasetId,\n newVersion,\n jsonArg(args.input),\n jsonArg(args.groundTruth),\n jsonArg(args.metadata),\n transformToSqlValue(now),\n transformToSqlValue(now),\n ],\n );\n\n // Insert dataset version record\n await connection.execute(\n `INSERT INTO ${tableVersionsName} (\\`id\\`, \\`datasetId\\`, \\`version\\`, \\`createdAt\\`) VALUES (?, ?, ?, ?)`,\n [versionId, args.datasetId, newVersion, transformToSqlValue(now)],\n );\n\n await connection.commit();\n\n return {\n id,\n datasetId: args.datasetId,\n datasetVersion: newVersion,\n input: args.input,\n groundTruth: args.groundTruth,\n metadata: args.metadata,\n createdAt: now,\n updatedAt: now,\n };\n } catch (error) {\n await connection.rollback();\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: 'MYSQL_ADD_ITEM_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n } finally {\n connection.release();\n }\n }\n\n protected async _doUpdateItem(args: UpdateDatasetItemInput): Promise<DatasetItem> {\n const existing = await this.getItemById({ id: args.id });\n if (!existing) {\n throw new MastraError({\n id: 'MYSQL_UPDATE_ITEM_NOT_FOUND',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { itemId: args.id },\n });\n }\n if (existing.datasetId !== args.datasetId) {\n throw new MastraError({\n id: 'MYSQL_UPDATE_ITEM_DATASET_MISMATCH',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { itemId: args.id, expectedDatasetId: args.datasetId, actualDatasetId: existing.datasetId },\n });\n }\n\n const connection = await this.pool.getConnection();\n try {\n await connection.beginTransaction();\n\n const versionId = randomUUID();\n const now = new Date();\n const tableDatasetsName = formatTableName(TABLE_DATASETS);\n const tableItemsName = formatTableName(TABLE_DATASET_ITEMS);\n const tableVersionsName = formatTableName(TABLE_DATASET_VERSIONS);\n\n const mergedInput = args.input ?? existing.input;\n const mergedGroundTruth = args.groundTruth ?? existing.groundTruth;\n const mergedMetadata = args.metadata ?? existing.metadata;\n\n // Bump version\n await connection.execute(`UPDATE ${tableDatasetsName} SET \\`version\\` = \\`version\\` + 1 WHERE id = ?`, [\n args.datasetId,\n ]);\n\n const [versionRows] = await connection.execute<RowDataPacket[]>(\n `SELECT \\`version\\` FROM ${tableDatasetsName} WHERE id = ?`,\n [args.datasetId],\n );\n const newVersion = (versionRows as any[])[0]?.version as number;\n\n // Close old row\n await connection.execute(\n `UPDATE ${tableItemsName} SET \\`validTo\\` = ? WHERE \\`id\\` = ? AND \\`validTo\\` IS NULL AND \\`isDeleted\\` = 0`,\n [newVersion, args.id],\n );\n\n // Insert new row\n await connection.execute(\n `INSERT INTO ${tableItemsName} (\\`id\\`, \\`datasetId\\`, \\`datasetVersion\\`, \\`validTo\\`, \\`isDeleted\\`, \\`input\\`, \\`groundTruth\\`, \\`metadata\\`, \\`createdAt\\`, \\`updatedAt\\`) VALUES (?, ?, ?, NULL, 0, ?, ?, ?, ?, ?)`,\n [\n args.id,\n args.datasetId,\n newVersion,\n jsonArg(mergedInput),\n jsonArg(mergedGroundTruth),\n jsonArg(mergedMetadata),\n transformToSqlValue(existing.createdAt),\n transformToSqlValue(now),\n ],\n );\n\n // Insert dataset version record\n await connection.execute(\n `INSERT INTO ${tableVersionsName} (\\`id\\`, \\`datasetId\\`, \\`version\\`, \\`createdAt\\`) VALUES (?, ?, ?, ?)`,\n [versionId, args.datasetId, newVersion, transformToSqlValue(now)],\n );\n\n await connection.commit();\n\n return {\n ...existing,\n datasetVersion: newVersion,\n input: mergedInput,\n groundTruth: mergedGroundTruth,\n metadata: mergedMetadata,\n updatedAt: now,\n };\n } catch (error) {\n await connection.rollback();\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: 'MYSQL_UPDATE_ITEM_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n } finally {\n connection.release();\n }\n }\n\n protected async _doDeleteItem({ id, datasetId }: { id: string; datasetId: string }): Promise<void> {\n const existing = await this.getItemById({ id });\n if (!existing) return;\n if (existing.datasetId !== datasetId) {\n throw new MastraError({\n id: 'MYSQL_DELETE_ITEM_DATASET_MISMATCH',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { itemId: id, expectedDatasetId: datasetId, actualDatasetId: existing.datasetId },\n });\n }\n\n const connection = await this.pool.getConnection();\n try {\n await connection.beginTransaction();\n\n const versionId = randomUUID();\n const now = new Date();\n const tableDatasetsName = formatTableName(TABLE_DATASETS);\n const tableItemsName = formatTableName(TABLE_DATASET_ITEMS);\n const tableVersionsName = formatTableName(TABLE_DATASET_VERSIONS);\n\n // Bump version\n await connection.execute(`UPDATE ${tableDatasetsName} SET \\`version\\` = \\`version\\` + 1 WHERE id = ?`, [\n datasetId,\n ]);\n\n const [versionRows] = await connection.execute<RowDataPacket[]>(\n `SELECT \\`version\\` FROM ${tableDatasetsName} WHERE id = ?`,\n [datasetId],\n );\n const newVersion = (versionRows as any[])[0]?.version as number;\n\n // Close old row\n await connection.execute(\n `UPDATE ${tableItemsName} SET \\`validTo\\` = ? WHERE \\`id\\` = ? AND \\`validTo\\` IS NULL AND \\`isDeleted\\` = 0`,\n [newVersion, id],\n );\n\n // Insert tombstone\n await connection.execute(\n `INSERT INTO ${tableItemsName} (\\`id\\`, \\`datasetId\\`, \\`datasetVersion\\`, \\`validTo\\`, \\`isDeleted\\`, \\`input\\`, \\`groundTruth\\`, \\`metadata\\`, \\`createdAt\\`, \\`updatedAt\\`) VALUES (?, ?, ?, NULL, 1, ?, ?, ?, ?, ?)`,\n [\n id,\n datasetId,\n newVersion,\n jsonArg(existing.input),\n jsonArg(existing.groundTruth),\n jsonArg(existing.metadata),\n transformToSqlValue(existing.createdAt),\n transformToSqlValue(now),\n ],\n );\n\n // Insert dataset version record\n await connection.execute(\n `INSERT INTO ${tableVersionsName} (\\`id\\`, \\`datasetId\\`, \\`version\\`, \\`createdAt\\`) VALUES (?, ?, ?, ?)`,\n [versionId, datasetId, newVersion, transformToSqlValue(now)],\n );\n\n await connection.commit();\n } catch (error) {\n await connection.rollback();\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: 'MYSQL_DELETE_ITEM_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n } finally {\n connection.release();\n }\n }\n\n // --- SCD-2 queries ---\n\n async getItemById(args: { id: string; datasetVersion?: number }): Promise<DatasetItem | null> {\n try {\n const tableItemsName = formatTableName(TABLE_DATASET_ITEMS);\n let rows: RowDataPacket[];\n\n if (args.datasetVersion !== undefined) {\n [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${tableItemsName} WHERE \\`id\\` = ? AND \\`datasetVersion\\` = ? AND \\`isDeleted\\` = 0`,\n [args.id, args.datasetVersion],\n );\n } else {\n [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${tableItemsName} WHERE \\`id\\` = ? AND \\`validTo\\` IS NULL AND \\`isDeleted\\` = 0`,\n [args.id],\n );\n }\n\n return rows.length > 0 ? this.mapItem(rows[0]!) : null;\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_GET_ITEM_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getItemsByVersion({ datasetId, version }: { datasetId: string; version: number }): Promise<DatasetItem[]> {\n try {\n const tableItemsName = formatTableName(TABLE_DATASET_ITEMS);\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${tableItemsName} WHERE \\`datasetId\\` = ? AND \\`datasetVersion\\` <= ? AND (\\`validTo\\` IS NULL OR \\`validTo\\` > ?) AND \\`isDeleted\\` = 0 ORDER BY \\`createdAt\\` DESC, \\`id\\` ASC`,\n [datasetId, version, version],\n );\n\n return (rows as any[]).map(row => this.mapItem(row));\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_GET_ITEMS_BY_VERSION_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getItemHistory(itemId: string): Promise<DatasetItemRow[]> {\n try {\n const tableItemsName = formatTableName(TABLE_DATASET_ITEMS);\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${tableItemsName} WHERE \\`id\\` = ? ORDER BY \\`datasetVersion\\` DESC`,\n [itemId],\n );\n\n return (rows as any[]).map(row => this.mapItemFull(row));\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_GET_ITEM_HISTORY_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listItems(args: ListDatasetItemsInput): Promise<ListDatasetItemsOutput> {\n try {\n const { page, perPage: perPageInput } = args.pagination;\n const tableItemsName = formatTableName(TABLE_DATASET_ITEMS);\n\n const conditions: string[] = [`\\`datasetId\\` = ?`];\n const params: any[] = [args.datasetId];\n\n if (args.version !== undefined) {\n // SCD-2 time-travel query\n conditions.push(`\\`datasetVersion\\` <= ?`);\n conditions.push(`(\\`validTo\\` IS NULL OR \\`validTo\\` > ?)`);\n conditions.push(`\\`isDeleted\\` = 0`);\n params.push(args.version, args.version);\n } else {\n // Current items only\n conditions.push(`\\`validTo\\` IS NULL`);\n conditions.push(`\\`isDeleted\\` = 0`);\n }\n\n if (args.search) {\n conditions.push(`(LOWER(\\`input\\`) LIKE ? OR LOWER(COALESCE(\\`groundTruth\\`, '')) LIKE ?)`);\n const searchPattern = `%${args.search.toLowerCase()}%`;\n params.push(searchPattern, searchPattern);\n }\n\n const whereSql = ` WHERE ${conditions.join(' AND ')}`;\n\n const [countRows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT COUNT(*) as count FROM ${tableItemsName}${whereSql}`,\n params,\n );\n const total = Number((countRows as any[])[0]?.count ?? 0);\n\n if (total === 0) {\n return {\n items: [],\n pagination: { total: 0, page, perPage: perPageInput, hasMore: false },\n };\n }\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${tableItemsName}${whereSql} ORDER BY \\`createdAt\\` DESC, \\`id\\` ASC LIMIT ${limitValue} OFFSET ${offset}`,\n params,\n );\n\n return {\n items: (rows as any[]).map(row => this.mapItem(row)),\n pagination: {\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n },\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_LIST_ITEMS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n // --- Dataset version methods ---\n\n async createDatasetVersion(datasetId: string, version: number): Promise<DatasetVersion> {\n try {\n const id = randomUUID();\n const now = new Date();\n\n await this.operations.insert({\n tableName: TABLE_DATASET_VERSIONS,\n record: {\n id,\n datasetId,\n version,\n createdAt: now,\n },\n });\n\n return { id, datasetId, version, createdAt: now };\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_CREATE_DATASET_VERSION_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listDatasetVersions(input: ListDatasetVersionsInput): Promise<ListDatasetVersionsOutput> {\n try {\n const { page, perPage: perPageInput } = input.pagination;\n\n const whereClause = {\n sql: ` WHERE ${quoteIdentifier('datasetId', 'column name')} = ?`,\n args: [input.datasetId] as any[],\n };\n\n const total = await this.operations.loadTotalCount({ tableName: TABLE_DATASET_VERSIONS, whereClause });\n if (total === 0) {\n return {\n versions: [],\n pagination: { total: 0, page, perPage: perPageInput, hasMore: false },\n };\n }\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<Record<string, any>>({\n tableName: TABLE_DATASET_VERSIONS,\n whereClause,\n orderBy: `\\`version\\` DESC`,\n offset,\n limit: limitValue,\n });\n\n return {\n versions: rows.map(row => this.mapVersion(row)),\n pagination: {\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n },\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_LIST_DATASET_VERSIONS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n // --- Bulk operations (SCD-2 internally) ---\n\n protected async _doBatchInsertItems(input: BatchInsertItemsInput): Promise<DatasetItem[]> {\n const dataset = await this.getDatasetById({ id: input.datasetId });\n if (!dataset) {\n throw new MastraError({\n id: 'MYSQL_BULK_ADD_ITEMS_DATASET_NOT_FOUND',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { datasetId: input.datasetId },\n });\n }\n\n const connection = await this.pool.getConnection();\n try {\n await connection.beginTransaction();\n\n const now = new Date();\n const versionId = randomUUID();\n const tableDatasetsName = formatTableName(TABLE_DATASETS);\n const tableItemsName = formatTableName(TABLE_DATASET_ITEMS);\n const tableVersionsName = formatTableName(TABLE_DATASET_VERSIONS);\n\n // Single version increment\n await connection.execute(`UPDATE ${tableDatasetsName} SET \\`version\\` = \\`version\\` + 1 WHERE id = ?`, [\n input.datasetId,\n ]);\n\n const [versionRows] = await connection.execute<RowDataPacket[]>(\n `SELECT \\`version\\` FROM ${tableDatasetsName} WHERE id = ?`,\n [input.datasetId],\n );\n const newVersion = (versionRows as any[])[0]?.version as number;\n\n const items: { id: string; itemInput: BatchInsertItemsInput['items'][number] }[] = [];\n for (const itemInput of input.items) {\n const id = randomUUID();\n items.push({ id, itemInput });\n\n await connection.execute(\n `INSERT INTO ${tableItemsName} (\\`id\\`, \\`datasetId\\`, \\`datasetVersion\\`, \\`validTo\\`, \\`isDeleted\\`, \\`input\\`, \\`groundTruth\\`, \\`metadata\\`, \\`createdAt\\`, \\`updatedAt\\`) VALUES (?, ?, ?, NULL, 0, ?, ?, ?, ?, ?)`,\n [\n id,\n input.datasetId,\n newVersion,\n jsonArg(itemInput.input),\n jsonArg(itemInput.groundTruth),\n jsonArg(itemInput.metadata),\n transformToSqlValue(now),\n transformToSqlValue(now),\n ],\n );\n }\n\n // Single dataset_version record\n await connection.execute(\n `INSERT INTO ${tableVersionsName} (\\`id\\`, \\`datasetId\\`, \\`version\\`, \\`createdAt\\`) VALUES (?, ?, ?, ?)`,\n [versionId, input.datasetId, newVersion, transformToSqlValue(now)],\n );\n\n await connection.commit();\n\n return items.map(({ id, itemInput }) => ({\n id,\n datasetId: input.datasetId,\n datasetVersion: newVersion,\n input: itemInput.input,\n groundTruth: itemInput.groundTruth,\n metadata: itemInput.metadata,\n createdAt: now,\n updatedAt: now,\n }));\n } catch (error) {\n await connection.rollback();\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: 'MYSQL_BULK_ADD_ITEMS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n } finally {\n connection.release();\n }\n }\n\n protected async _doBatchDeleteItems(input: BatchDeleteItemsInput): Promise<void> {\n const dataset = await this.getDatasetById({ id: input.datasetId });\n if (!dataset) {\n throw new MastraError({\n id: 'MYSQL_BULK_DELETE_ITEMS_DATASET_NOT_FOUND',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { datasetId: input.datasetId },\n });\n }\n\n // Fetch current items for tombstone data\n const currentItems: DatasetItem[] = [];\n for (const itemId of input.itemIds) {\n const item = await this.getItemById({ id: itemId });\n if (item && item.datasetId === input.datasetId) {\n currentItems.push(item);\n }\n }\n\n if (currentItems.length === 0) return;\n\n const connection = await this.pool.getConnection();\n try {\n await connection.beginTransaction();\n\n const now = new Date();\n const versionId = randomUUID();\n const tableDatasetsName = formatTableName(TABLE_DATASETS);\n const tableItemsName = formatTableName(TABLE_DATASET_ITEMS);\n const tableVersionsName = formatTableName(TABLE_DATASET_VERSIONS);\n\n // Single version increment\n await connection.execute(`UPDATE ${tableDatasetsName} SET \\`version\\` = \\`version\\` + 1 WHERE id = ?`, [\n input.datasetId,\n ]);\n\n const [versionRows] = await connection.execute<RowDataPacket[]>(\n `SELECT \\`version\\` FROM ${tableDatasetsName} WHERE id = ?`,\n [input.datasetId],\n );\n const newVersion = (versionRows as any[])[0]?.version as number;\n\n for (const item of currentItems) {\n // Close old row\n await connection.execute(\n `UPDATE ${tableItemsName} SET \\`validTo\\` = ? WHERE \\`id\\` = ? AND \\`validTo\\` IS NULL AND \\`isDeleted\\` = 0`,\n [newVersion, item.id],\n );\n\n // Insert tombstone\n await connection.execute(\n `INSERT INTO ${tableItemsName} (\\`id\\`, \\`datasetId\\`, \\`datasetVersion\\`, \\`validTo\\`, \\`isDeleted\\`, \\`input\\`, \\`groundTruth\\`, \\`metadata\\`, \\`createdAt\\`, \\`updatedAt\\`) VALUES (?, ?, ?, NULL, 1, ?, ?, ?, ?, ?)`,\n [\n item.id,\n input.datasetId,\n newVersion,\n jsonArg(item.input),\n jsonArg(item.groundTruth),\n jsonArg(item.metadata),\n transformToSqlValue(item.createdAt),\n transformToSqlValue(now),\n ],\n );\n }\n\n // Single dataset_version\n await connection.execute(\n `INSERT INTO ${tableVersionsName} (\\`id\\`, \\`datasetId\\`, \\`version\\`, \\`createdAt\\`) VALUES (?, ?, ?, ?)`,\n [versionId, input.datasetId, newVersion, transformToSqlValue(now)],\n );\n\n await connection.commit();\n } catch (error) {\n await connection.rollback();\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: 'MYSQL_BULK_DELETE_ITEMS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n } finally {\n connection.release();\n }\n }\n}\n","import { randomUUID } from 'node:crypto';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n TABLE_EXPERIMENTS,\n TABLE_EXPERIMENT_RESULTS,\n TABLE_SCHEMAS,\n EXPERIMENTS_SCHEMA,\n EXPERIMENT_RESULTS_SCHEMA,\n ExperimentsStorage,\n calculatePagination,\n normalizePerPage,\n} from '@mastra/core/storage';\nimport type {\n CreateIndexOptions,\n Experiment,\n ExperimentResult,\n ExperimentReviewCounts,\n ExperimentResultStatus,\n CreateExperimentInput,\n UpdateExperimentInput,\n AddExperimentResultInput,\n UpdateExperimentResultInput,\n ListExperimentsInput,\n ListExperimentsOutput,\n ListExperimentResultsInput,\n ListExperimentResultsOutput,\n} from '@mastra/core/storage';\nimport type { Pool } from 'mysql2/promise';\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL } from '../operations';\nimport { formatTableName, parseDateTime, quoteIdentifier } from '../utils';\n\nfunction parseJSON<T>(value: unknown): T | undefined {\n if (value === null || value === undefined) return undefined;\n if (typeof value === 'string') {\n if (!value) return undefined;\n try {\n return JSON.parse(value) as T;\n } catch {\n return undefined;\n }\n }\n if (typeof value === 'object') return value as T;\n return undefined;\n}\n\ninterface ExperimentRow {\n id: string;\n datasetId: string | null;\n datasetVersion: number | null;\n targetType: string;\n targetId: string;\n name: string | null;\n description: string | null;\n metadata: string | null;\n status: string;\n totalItems: number;\n succeededCount: number;\n failedCount: number;\n skippedCount: number;\n startedAt: Date | string | null;\n completedAt: Date | string | null;\n createdAt: Date | string;\n updatedAt: Date | string;\n}\n\ninterface ExperimentResultRow {\n id: string;\n experimentId: string;\n itemId: string;\n itemDatasetVersion: number | null;\n input: string;\n output: string | null;\n groundTruth: string | null;\n error: string | null;\n startedAt: Date | string;\n completedAt: Date | string;\n retryCount: number;\n traceId: string | null;\n status: string | null;\n tags: string | null;\n createdAt: Date | string;\n}\n\nexport class ExperimentsMySQL extends ExperimentsStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_EXPERIMENTS, TABLE_EXPERIMENT_RESULTS] as const;\n\n /**\n * Returns default index definitions for the experiments domain tables.\n * Currently no default indexes are defined for experiments.\n */\n static getDefaultIndexDefs(_prefix: string = ''): CreateIndexOptions[] {\n return [];\n }\n\n /**\n * Exports DDL statements for all managed tables.\n */\n static getExportDDL(): string[] {\n return [\n generateTableSQL({ tableName: TABLE_EXPERIMENTS, schema: TABLE_SCHEMAS[TABLE_EXPERIMENTS] }),\n generateTableSQL({ tableName: TABLE_EXPERIMENT_RESULTS, schema: TABLE_SCHEMAS[TABLE_EXPERIMENT_RESULTS] }),\n ];\n }\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx => (ExperimentsMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n /**\n * Returns default index definitions for the experiments domain tables.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return ExperimentsMySQL.getDefaultIndexDefs('');\n }\n\n /**\n * Creates default indexes for optimal query performance.\n * Currently no default indexes are defined for experiments.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n // No default indexes for experiments domain\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({ tableName: TABLE_EXPERIMENTS, schema: EXPERIMENTS_SCHEMA });\n await this.operations.createTable({ tableName: TABLE_EXPERIMENT_RESULTS, schema: EXPERIMENT_RESULTS_SCHEMA });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.pool.execute(`DELETE FROM ${formatTableName(TABLE_EXPERIMENT_RESULTS)}`);\n await this.pool.execute(`DELETE FROM ${formatTableName(TABLE_EXPERIMENTS)}`);\n }\n\n private mapExperiment(row: ExperimentRow): Experiment {\n return {\n id: row.id,\n datasetId: row.datasetId ?? null,\n datasetVersion: row.datasetVersion ?? null,\n targetType: row.targetType as Experiment['targetType'],\n targetId: row.targetId,\n name: row.name ?? undefined,\n description: row.description ?? undefined,\n metadata: parseJSON<Record<string, unknown>>(row.metadata),\n status: row.status as Experiment['status'],\n totalItems: row.totalItems,\n succeededCount: row.succeededCount,\n failedCount: row.failedCount,\n skippedCount: row.skippedCount ?? 0,\n startedAt: row.startedAt ? (parseDateTime(row.startedAt) ?? null) : null,\n completedAt: row.completedAt ? (parseDateTime(row.completedAt) ?? null) : null,\n createdAt: parseDateTime(row.createdAt) ?? new Date(),\n updatedAt: parseDateTime(row.updatedAt) ?? new Date(),\n };\n }\n\n private mapExperimentResult(row: ExperimentResultRow): ExperimentResult {\n return {\n id: row.id,\n experimentId: row.experimentId,\n itemId: row.itemId,\n itemDatasetVersion: row.itemDatasetVersion ?? null,\n input: parseJSON<Record<string, unknown>>(row.input),\n output: row.output ? parseJSON<Record<string, unknown>>(row.output) : null,\n groundTruth: row.groundTruth ? parseJSON<Record<string, unknown>>(row.groundTruth) : null,\n error: row.error ? (parseJSON<{ message: string; stack?: string; code?: string }>(row.error) ?? null) : null,\n startedAt: parseDateTime(row.startedAt) ?? new Date(),\n completedAt: parseDateTime(row.completedAt) ?? new Date(),\n retryCount: row.retryCount,\n traceId: row.traceId ?? null,\n status: (row.status as ExperimentResultStatus | null) ?? null,\n tags: row.tags ? (parseJSON<string[]>(row.tags) ?? null) : null,\n createdAt: parseDateTime(row.createdAt) ?? new Date(),\n };\n }\n\n async createExperiment(input: CreateExperimentInput): Promise<Experiment> {\n try {\n const id = input.id ?? randomUUID();\n const now = new Date();\n\n await this.operations.insert({\n tableName: TABLE_EXPERIMENTS,\n record: {\n id,\n datasetId: input.datasetId ?? null,\n datasetVersion: input.datasetVersion ?? null,\n targetType: input.targetType,\n targetId: input.targetId,\n name: input.name ?? null,\n description: input.description ?? null,\n metadata: input.metadata ? JSON.stringify(input.metadata) : null,\n status: 'pending',\n totalItems: input.totalItems,\n succeededCount: 0,\n failedCount: 0,\n skippedCount: 0,\n startedAt: null,\n completedAt: null,\n createdAt: now,\n updatedAt: now,\n },\n });\n\n return {\n id,\n datasetId: input.datasetId,\n datasetVersion: input.datasetVersion,\n targetType: input.targetType,\n targetId: input.targetId,\n name: input.name,\n description: input.description,\n metadata: input.metadata,\n status: 'pending',\n totalItems: input.totalItems,\n succeededCount: 0,\n failedCount: 0,\n skippedCount: 0,\n startedAt: null,\n completedAt: null,\n createdAt: now,\n updatedAt: now,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_CREATE_EXPERIMENT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async updateExperiment(input: UpdateExperimentInput): Promise<Experiment> {\n try {\n const existing = await this.getExperimentById({ id: input.id });\n if (!existing) {\n throw new MastraError({\n id: 'MYSQL_UPDATE_EXPERIMENT_NOT_FOUND',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { experimentId: input.id },\n });\n }\n\n const data: Record<string, any> = { updatedAt: new Date() };\n\n if (input.status !== undefined) data.status = input.status;\n if (input.succeededCount !== undefined) data.succeededCount = input.succeededCount;\n if (input.failedCount !== undefined) data.failedCount = input.failedCount;\n if (input.skippedCount !== undefined) data.skippedCount = input.skippedCount;\n if (input.totalItems !== undefined) data.totalItems = input.totalItems;\n if (input.startedAt !== undefined) data.startedAt = input.startedAt ?? null;\n if (input.completedAt !== undefined) data.completedAt = input.completedAt ?? null;\n if (input.name !== undefined) data.name = input.name;\n if (input.description !== undefined) data.description = input.description;\n if (input.metadata !== undefined) data.metadata = JSON.stringify(input.metadata);\n\n await this.operations.update({\n tableName: TABLE_EXPERIMENTS,\n keys: { id: input.id },\n data,\n });\n\n const updated = await this.getExperimentById({ id: input.id });\n return updated!;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: 'MYSQL_UPDATE_EXPERIMENT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getExperimentById(args: { id: string }): Promise<Experiment | null> {\n try {\n const row = await this.operations.load<ExperimentRow>({\n tableName: TABLE_EXPERIMENTS,\n keys: { id: args.id },\n });\n return row ? this.mapExperiment(row) : null;\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_GET_EXPERIMENT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listExperiments(args: ListExperimentsInput): Promise<ListExperimentsOutput> {\n try {\n const { page, perPage: perPageInput } = args.pagination;\n\n const conditions: string[] = [];\n const params: any[] = [];\n\n if (args.datasetId) {\n conditions.push(`${quoteIdentifier('datasetId', 'column name')} = ?`);\n params.push(args.datasetId);\n }\n\n const whereClause = {\n sql: conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '',\n args: params,\n };\n\n const total = await this.operations.loadTotalCount({ tableName: TABLE_EXPERIMENTS, whereClause });\n if (total === 0) {\n return {\n experiments: [],\n pagination: { total: 0, page, perPage: perPageInput, hasMore: false },\n };\n }\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<ExperimentRow>({\n tableName: TABLE_EXPERIMENTS,\n whereClause,\n orderBy: `${quoteIdentifier('createdAt', 'column name')} DESC`,\n offset,\n limit: limitValue,\n });\n\n return {\n experiments: rows.map(row => this.mapExperiment(row)),\n pagination: {\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n },\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_LIST_EXPERIMENTS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteExperiment(args: { id: string }): Promise<void> {\n try {\n const connection = await this.pool.getConnection();\n try {\n await connection.beginTransaction();\n await connection.execute(\n `DELETE FROM ${formatTableName(TABLE_EXPERIMENT_RESULTS)} WHERE ${quoteIdentifier('experimentId', 'column name')} = ?`,\n [args.id],\n );\n await connection.execute(`DELETE FROM ${formatTableName(TABLE_EXPERIMENTS)} WHERE id = ?`, [args.id]);\n await connection.commit();\n } catch (error) {\n try {\n await connection.rollback();\n } catch (rollbackError) {\n throw new MastraError(\n {\n id: 'MYSQL_DELETE_EXPERIMENT_ROLLBACK_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { experimentId: args.id },\n },\n rollbackError,\n );\n }\n throw error;\n } finally {\n connection.release();\n }\n } catch (error) {\n if (error instanceof MastraError) {\n throw error;\n }\n throw new MastraError(\n {\n id: 'MYSQL_DELETE_EXPERIMENT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async addExperimentResult(input: AddExperimentResultInput): Promise<ExperimentResult> {\n try {\n const id = input.id ?? randomUUID();\n const now = new Date();\n\n await this.operations.insert({\n tableName: TABLE_EXPERIMENT_RESULTS,\n record: {\n id,\n experimentId: input.experimentId,\n itemId: input.itemId,\n itemDatasetVersion: input.itemDatasetVersion ?? null,\n input: JSON.stringify(input.input),\n output: input.output ? JSON.stringify(input.output) : null,\n groundTruth: input.groundTruth ? JSON.stringify(input.groundTruth) : null,\n error: input.error ? JSON.stringify(input.error) : null,\n startedAt: input.startedAt,\n completedAt: input.completedAt,\n retryCount: input.retryCount,\n traceId: input.traceId ?? null,\n status: input.status ?? null,\n tags: input.tags ? JSON.stringify(input.tags) : null,\n createdAt: now,\n },\n });\n\n return {\n id,\n experimentId: input.experimentId,\n itemId: input.itemId,\n itemDatasetVersion: input.itemDatasetVersion,\n input: input.input,\n output: input.output,\n groundTruth: input.groundTruth,\n error: input.error,\n startedAt: input.startedAt,\n completedAt: input.completedAt,\n retryCount: input.retryCount,\n traceId: input.traceId ?? null,\n status: input.status ?? null,\n tags: input.tags ?? null,\n createdAt: now,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_ADD_EXPERIMENT_RESULT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getExperimentResultById(args: { id: string }): Promise<ExperimentResult | null> {\n try {\n const row = await this.operations.load<ExperimentResultRow>({\n tableName: TABLE_EXPERIMENT_RESULTS,\n keys: { id: args.id },\n });\n return row ? this.mapExperimentResult(row) : null;\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_GET_EXPERIMENT_RESULT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async updateExperimentResult(input: UpdateExperimentResultInput): Promise<ExperimentResult> {\n try {\n const existing = await this.operations.load<ExperimentResultRow>({\n tableName: TABLE_EXPERIMENT_RESULTS,\n keys: { id: input.id },\n });\n if (!existing) {\n throw new Error(`Experiment result not found: ${input.id}`);\n }\n if (input.experimentId && existing.experimentId !== input.experimentId) {\n throw new Error(`Experiment result ${input.id} does not belong to experiment ${input.experimentId}`);\n }\n\n const updateData: Record<string, unknown> = {};\n if (input.status !== undefined) {\n updateData.status = input.status;\n }\n if (input.tags !== undefined) {\n updateData.tags = input.tags ? JSON.stringify(input.tags) : null;\n }\n\n if (Object.keys(updateData).length > 0) {\n await this.operations.update({\n tableName: TABLE_EXPERIMENT_RESULTS,\n keys: { id: input.id },\n data: updateData,\n });\n }\n\n const updated = await this.getExperimentResultById({ id: input.id });\n if (!updated) {\n throw new Error(`Experiment result ${input.id} not found after update`);\n }\n return updated;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: 'MYSQL_UPDATE_EXPERIMENT_RESULT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getReviewSummary(): Promise<ExperimentReviewCounts[]> {\n try {\n const rows = await this.operations.query<{\n experimentId: string;\n status: string | null;\n count: number;\n }>(\n `SELECT ${quoteIdentifier('experimentId', 'column name')}, ${quoteIdentifier('status', 'column name')}, COUNT(*) as count FROM ${formatTableName(TABLE_EXPERIMENT_RESULTS)} GROUP BY ${quoteIdentifier('experimentId', 'column name')}, ${quoteIdentifier('status', 'column name')}`,\n );\n\n const counts = new Map<string, ExperimentReviewCounts>();\n for (const row of rows) {\n let entry = counts.get(row.experimentId);\n if (!entry) {\n entry = { experimentId: row.experimentId, total: 0, needsReview: 0, reviewed: 0, complete: 0 };\n counts.set(row.experimentId, entry);\n }\n const count = Number(row.count);\n entry.total += count;\n if (row.status === 'needs-review') entry.needsReview += count;\n else if (row.status === 'reviewed') entry.reviewed += count;\n else if (row.status === 'complete') entry.complete += count;\n }\n\n return Array.from(counts.values());\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_GET_REVIEW_SUMMARY_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listExperimentResults(args: ListExperimentResultsInput): Promise<ListExperimentResultsOutput> {\n try {\n const { page, perPage: perPageInput } = args.pagination;\n\n const whereClause = {\n sql: ` WHERE ${quoteIdentifier('experimentId', 'column name')} = ?`,\n args: [args.experimentId] as any[],\n };\n\n const total = await this.operations.loadTotalCount({ tableName: TABLE_EXPERIMENT_RESULTS, whereClause });\n if (total === 0) {\n return {\n results: [],\n pagination: { total: 0, page, perPage: perPageInput, hasMore: false },\n };\n }\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<ExperimentResultRow>({\n tableName: TABLE_EXPERIMENT_RESULTS,\n whereClause,\n orderBy: `${quoteIdentifier('startedAt', 'column name')} ASC`,\n offset,\n limit: limitValue,\n });\n\n return {\n results: rows.map(row => this.mapExperimentResult(row)),\n pagination: {\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n },\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_LIST_EXPERIMENT_RESULTS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteExperimentResults(args: { experimentId: string }): Promise<void> {\n try {\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_EXPERIMENT_RESULTS)} WHERE ${quoteIdentifier('experimentId', 'column name')} = ?`,\n [args.experimentId],\n );\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_DELETE_EXPERIMENT_RESULTS_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 {\n FavoritesStorage,\n createStorageErrorId,\n TABLE_AGENTS,\n TABLE_SKILLS,\n TABLE_FAVORITES,\n TABLE_SCHEMAS,\n FAVORITES_SCHEMA,\n} from '@mastra/core/storage';\nimport type {\n CreateIndexOptions,\n StorageDeleteFavoritesForEntityInput,\n StorageIsFavoritedBatchInput,\n StorageListFavoritesInput,\n StorageFavoriteEntityType,\n StorageFavoriteKey,\n} from '@mastra/core/storage';\nimport type { FavoriteToggleResult } from '@mastra/core/storage/domains/favorites';\nimport type { Pool, RowDataPacket, ResultSetHeader } from 'mysql2/promise';\n\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL } from '../operations';\nimport { formatTableName, quoteIdentifier } from '../utils';\n\n/**\n * Maps a favorite entity type to its parent entity table.\n */\nconst ENTITY_TABLE: Record<StorageFavoriteEntityType, typeof TABLE_AGENTS | typeof TABLE_SKILLS> = {\n agent: TABLE_AGENTS,\n skill: TABLE_SKILLS,\n};\n\nexport class FavoritesMySQL extends FavoritesStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_FAVORITES] as const;\n\n /**\n * Returns default index definitions for the favorites domain tables.\n * Currently no default indexes are defined for favorites.\n */\n static getDefaultIndexDefs(_prefix: string = ''): CreateIndexOptions[] {\n return [];\n }\n\n /**\n * Exports DDL statements for all managed tables.\n */\n static getExportDDL(): string[] {\n return [\n generateTableSQL({\n tableName: TABLE_FAVORITES,\n schema: TABLE_SCHEMAS[TABLE_FAVORITES],\n compositePrimaryKey: ['userId', 'entityType', 'entityId'],\n }),\n ];\n }\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx => (FavoritesMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n /**\n * Returns default index definitions for the favorites domain tables.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return FavoritesMySQL.getDefaultIndexDefs('');\n }\n\n /**\n * Creates default indexes for optimal query performance.\n * Currently no default indexes are defined for favorites.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n // No default indexes for favorites domain\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({\n tableName: TABLE_FAVORITES,\n schema: FAVORITES_SCHEMA,\n });\n\n // The composite PRIMARY KEY (userId, entityType, entityId) created by createTable\n // already enforces uniqueness for INSERT IGNORE idempotency. No extra unique index needed.\n\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.operations.withTransaction(async connection => {\n await connection.execute(`DELETE FROM ${formatTableName(TABLE_FAVORITES)}`);\n // Reset denormalized counters on parent entities\n await connection.execute(\n `UPDATE ${formatTableName(TABLE_AGENTS)} SET ${quoteIdentifier('favoriteCount', 'column name')} = 0 WHERE ${quoteIdentifier('favoriteCount', 'column name')} > 0`,\n );\n await connection.execute(\n `UPDATE ${formatTableName(TABLE_SKILLS)} SET ${quoteIdentifier('favoriteCount', 'column name')} = 0 WHERE ${quoteIdentifier('favoriteCount', 'column name')} > 0`,\n );\n });\n }\n\n async favorite(input: StorageFavoriteKey): Promise<FavoriteToggleResult> {\n const { userId, entityType, entityId } = input;\n const entityTable = ENTITY_TABLE[entityType];\n\n try {\n return await this.operations.withTransaction(async connection => {\n // Verify entity exists\n const [entityRows] = await connection.execute<RowDataPacket[]>(\n `SELECT ${quoteIdentifier('favoriteCount', 'column name')} FROM ${formatTableName(entityTable)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [entityId],\n );\n if (!entityRows[0]) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'FAVORITE', 'ENTITY_NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `${entityType} ${entityId} not found`,\n details: { entityType, entityId },\n });\n }\n\n // Idempotent insert using INSERT IGNORE\n const [insertResult] = await connection.execute<ResultSetHeader>(\n `INSERT IGNORE INTO ${formatTableName(TABLE_FAVORITES)} (${quoteIdentifier('userId', 'column name')}, ${quoteIdentifier('entityType', 'column name')}, ${quoteIdentifier('entityId', 'column name')}, ${quoteIdentifier('createdAt', 'column name')}) VALUES (?, ?, ?, ?)`,\n [userId, entityType, entityId, new Date().toISOString()],\n );\n\n // Only bump counter when we actually inserted a new row\n if (insertResult.affectedRows > 0) {\n await connection.execute(\n `UPDATE ${formatTableName(entityTable)} SET ${quoteIdentifier('favoriteCount', 'column name')} = COALESCE(${quoteIdentifier('favoriteCount', 'column name')}, 0) + 1 WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [entityId],\n );\n }\n\n const [afterRows] = await connection.execute<RowDataPacket[]>(\n `SELECT ${quoteIdentifier('favoriteCount', 'column name')} FROM ${formatTableName(entityTable)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [entityId],\n );\n const favoriteCount = Number(afterRows[0]?.favoriteCount ?? 0);\n\n return { favorited: true, favoriteCount };\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'FAVORITE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { entityType, entityId },\n },\n error,\n );\n }\n }\n\n async unfavorite(input: StorageFavoriteKey): Promise<FavoriteToggleResult> {\n const { userId, entityType, entityId } = input;\n const entityTable = ENTITY_TABLE[entityType];\n\n try {\n return await this.operations.withTransaction(async connection => {\n const [entityRows] = await connection.execute<RowDataPacket[]>(\n `SELECT ${quoteIdentifier('favoriteCount', 'column name')} FROM ${formatTableName(entityTable)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [entityId],\n );\n if (!entityRows[0]) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UNFAVORITE', 'ENTITY_NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `${entityType} ${entityId} not found`,\n details: { entityType, entityId },\n });\n }\n\n const [deleteResult] = await connection.execute<ResultSetHeader>(\n `DELETE FROM ${formatTableName(TABLE_FAVORITES)} WHERE ${quoteIdentifier('userId', 'column name')} = ? AND ${quoteIdentifier('entityType', 'column name')} = ? AND ${quoteIdentifier('entityId', 'column name')} = ?`,\n [userId, entityType, entityId],\n );\n\n // Only decrement when we actually removed a row, clamp at 0\n if (deleteResult.affectedRows > 0) {\n await connection.execute(\n `UPDATE ${formatTableName(entityTable)} SET ${quoteIdentifier('favoriteCount', 'column name')} = GREATEST(COALESCE(${quoteIdentifier('favoriteCount', 'column name')}, 0) - 1, 0) WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [entityId],\n );\n }\n\n const [afterRows] = await connection.execute<RowDataPacket[]>(\n `SELECT ${quoteIdentifier('favoriteCount', 'column name')} FROM ${formatTableName(entityTable)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [entityId],\n );\n const favoriteCount = Number(afterRows[0]?.favoriteCount ?? 0);\n\n return { favorited: false, favoriteCount };\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'UNFAVORITE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { entityType, entityId },\n },\n error,\n );\n }\n }\n\n async isFavorited(input: StorageFavoriteKey): Promise<boolean> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT 1 FROM ${formatTableName(TABLE_FAVORITES)} WHERE ${quoteIdentifier('userId', 'column name')} = ? AND ${quoteIdentifier('entityType', 'column name')} = ? AND ${quoteIdentifier('entityId', 'column name')} = ? LIMIT 1`,\n [input.userId, input.entityType, input.entityId],\n );\n return rows.length > 0;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'IS_FAVORITED', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async isFavoritedBatch(input: StorageIsFavoritedBatchInput): Promise<Set<string>> {\n const { userId, entityType, entityIds } = input;\n if (entityIds.length === 0) {\n return new Set();\n }\n\n try {\n const placeholders = entityIds.map(() => '?').join(', ');\n const args = [userId, entityType, ...entityIds];\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT ${quoteIdentifier('entityId', 'column name')} FROM ${formatTableName(TABLE_FAVORITES)} WHERE ${quoteIdentifier('userId', 'column name')} = ? AND ${quoteIdentifier('entityType', 'column name')} = ? AND ${quoteIdentifier('entityId', 'column name')} IN (${placeholders})`,\n args,\n );\n const set = new Set<string>();\n for (const row of rows) {\n set.add(row.entityId as string);\n }\n return set;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'IS_FAVORITED_BATCH', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listFavoritedIds(input: StorageListFavoritesInput): Promise<string[]> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT ${quoteIdentifier('entityId', 'column name')} FROM ${formatTableName(TABLE_FAVORITES)} WHERE ${quoteIdentifier('userId', 'column name')} = ? AND ${quoteIdentifier('entityType', 'column name')} = ? ORDER BY ${quoteIdentifier('createdAt', 'column name')} DESC, ${quoteIdentifier('entityId', 'column name')} ASC`,\n [input.userId, input.entityType],\n );\n return rows.map(row => row.entityId as string);\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_FAVORITED_IDS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteFavoritesForEntity(input: StorageDeleteFavoritesForEntityInput): Promise<number> {\n const entityTable = ENTITY_TABLE[input.entityType];\n try {\n return await this.operations.withTransaction(async connection => {\n const [result] = await connection.execute<ResultSetHeader>(\n `DELETE FROM ${formatTableName(TABLE_FAVORITES)} WHERE ${quoteIdentifier('entityType', 'column name')} = ? AND ${quoteIdentifier('entityId', 'column name')} = ?`,\n [input.entityType, input.entityId],\n );\n // Reset the parent entity's favoriteCount\n await connection.execute(\n `UPDATE ${formatTableName(entityTable)} SET ${quoteIdentifier('favoriteCount', 'column name')} = 0 WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [input.entityId],\n );\n return result.affectedRows;\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_FAVORITES_FOR_ENTITY', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { entityType: input.entityType, entityId: input.entityId },\n },\n error,\n );\n }\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n MCPClientsStorage,\n createStorageErrorId,\n normalizePerPage,\n calculatePagination,\n TABLE_MCP_CLIENTS,\n TABLE_MCP_CLIENT_VERSIONS,\n TABLE_SCHEMAS,\n MCP_CLIENTS_SCHEMA,\n MCP_CLIENT_VERSIONS_SCHEMA,\n} from '@mastra/core/storage';\nimport type {\n CreateIndexOptions,\n StorageMCPClientType,\n StorageCreateMCPClientInput,\n StorageUpdateMCPClientInput,\n StorageListMCPClientsInput,\n StorageListMCPClientsOutput,\n} from '@mastra/core/storage';\nimport type {\n MCPClientVersion,\n CreateMCPClientVersionInput,\n ListMCPClientVersionsInput,\n ListMCPClientVersionsOutput,\n} from '@mastra/core/storage/domains/mcp-clients';\nimport type { Pool, RowDataPacket } from 'mysql2/promise';\n\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL } from '../operations';\nimport { formatTableName, quoteIdentifier } from '../utils';\n\nexport class MCPClientsMySQL extends MCPClientsStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_MCP_CLIENTS, TABLE_MCP_CLIENT_VERSIONS] as const;\n\n /**\n * Returns default index definitions for the mcp-clients domain tables.\n * Currently no default indexes are defined for mcp-clients.\n */\n static getDefaultIndexDefs(_prefix: string = ''): CreateIndexOptions[] {\n return [];\n }\n\n /**\n * Exports DDL statements for all managed tables.\n */\n static getExportDDL(): string[] {\n return [\n generateTableSQL({ tableName: TABLE_MCP_CLIENTS, schema: TABLE_SCHEMAS[TABLE_MCP_CLIENTS] }),\n generateTableSQL({ tableName: TABLE_MCP_CLIENT_VERSIONS, schema: TABLE_SCHEMAS[TABLE_MCP_CLIENT_VERSIONS] }),\n ];\n }\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx => (MCPClientsMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n /**\n * Returns default index definitions for the mcp-clients domain tables.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return MCPClientsMySQL.getDefaultIndexDefs('');\n }\n\n /**\n * Creates default indexes for optimal query performance.\n * Currently no default indexes are defined for mcp-clients.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n // No default indexes for mcp-clients domain\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({ tableName: TABLE_MCP_CLIENTS, schema: MCP_CLIENTS_SCHEMA });\n await this.operations.createTable({ tableName: TABLE_MCP_CLIENT_VERSIONS, schema: MCP_CLIENT_VERSIONS_SCHEMA });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.operations.clearTable({ tableName: TABLE_MCP_CLIENT_VERSIONS });\n await this.operations.clearTable({ tableName: TABLE_MCP_CLIENTS });\n }\n\n private safeParseJSON<T = unknown>(val: unknown): T | undefined {\n if (val === null || val === undefined) return undefined;\n if (typeof val === 'string') {\n try {\n return JSON.parse(val) as T;\n } catch {\n return val as T;\n }\n }\n return val as T;\n }\n\n private parseClientRow(row: Record<string, unknown>): StorageMCPClientType {\n return {\n id: row.id as string,\n status: (row.status as StorageMCPClientType['status']) ?? 'draft',\n activeVersionId: (row.activeVersionId as string) ?? undefined,\n authorId: (row.authorId as string) ?? undefined,\n metadata: this.safeParseJSON(row.metadata) as Record<string, unknown> | undefined,\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n updatedAt: row.updatedAt instanceof Date ? row.updatedAt : new Date(row.updatedAt as string),\n };\n }\n\n private parseVersionRow(row: Record<string, unknown>): MCPClientVersion {\n return {\n id: row.id as string,\n mcpClientId: row.mcpClientId as string,\n versionNumber: Number(row.versionNumber),\n name: row.name as string,\n description: (row.description as string) ?? undefined,\n servers: this.safeParseJSON(row.servers) as MCPClientVersion['servers'],\n changedFields: this.safeParseJSON(row.changedFields) as string[] | undefined,\n changeMessage: (row.changeMessage as string) ?? undefined,\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n };\n }\n\n async getById(id: string): Promise<StorageMCPClientType | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_MCP_CLIENTS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n return rows.length ? this.parseClientRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_MCP_CLIENT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async create(input: { mcpClient: StorageCreateMCPClientInput }): Promise<StorageMCPClientType> {\n const { mcpClient } = input;\n try {\n const now = new Date();\n await this.operations.insert({\n tableName: TABLE_MCP_CLIENTS,\n record: {\n id: mcpClient.id,\n status: 'draft',\n activeVersionId: null,\n authorId: mcpClient.authorId ?? null,\n metadata: mcpClient.metadata ?? null,\n createdAt: now,\n updatedAt: now,\n },\n });\n\n const { id: _id, authorId: _authorId, metadata: _metadata, ...snapshotConfig } = mcpClient;\n const versionId = crypto.randomUUID();\n try {\n await this.createVersion({\n id: versionId,\n mcpClientId: mcpClient.id,\n versionNumber: 1,\n ...snapshotConfig,\n changedFields: Object.keys(snapshotConfig),\n changeMessage: 'Initial version',\n });\n } catch (versionError) {\n try {\n await this.operations.delete({ tableName: TABLE_MCP_CLIENTS, keys: { id: mcpClient.id } });\n } catch (rollbackError) {\n console.error('Failed to rollback MCP client creation:', rollbackError);\n }\n throw versionError;\n }\n\n return {\n id: mcpClient.id,\n status: 'draft',\n activeVersionId: undefined,\n authorId: mcpClient.authorId,\n metadata: mcpClient.metadata,\n createdAt: now,\n updatedAt: now,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_MCP_CLIENT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async update(input: StorageUpdateMCPClientInput): Promise<StorageMCPClientType> {\n const { id, ...updates } = input;\n try {\n const existing = await this.getById(id);\n if (!existing) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_MCP_CLIENT', 'NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `MCP client with id ${id} not found`,\n details: { id },\n });\n }\n\n const { authorId, activeVersionId, metadata, status } = updates;\n const updateData: Record<string, unknown> = { updatedAt: new Date() };\n if (authorId !== undefined) updateData.authorId = authorId;\n if (activeVersionId !== undefined) updateData.activeVersionId = activeVersionId;\n if (status !== undefined) updateData.status = status;\n if (metadata !== undefined) updateData.metadata = { ...existing.metadata, ...metadata };\n\n await this.operations.update({ tableName: TABLE_MCP_CLIENTS, keys: { id }, data: updateData });\n\n const updated = await this.getById(id);\n if (!updated)\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_MCP_CLIENT', 'NOT_FOUND_AFTER_UPDATE'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `MCP client ${id} not found after update`,\n details: { id },\n });\n return updated;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'UPDATE_MCP_CLIENT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async delete(id: string): Promise<void> {\n try {\n await this.deleteVersionsByParentId(id);\n await this.operations.delete({ tableName: TABLE_MCP_CLIENTS, keys: { id } });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_MCP_CLIENT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async list(args?: StorageListMCPClientsInput): Promise<StorageListMCPClientsOutput> {\n try {\n const { page = 0, perPage: perPageInput, orderBy, authorId, metadata, status = 'published' } = args || {};\n const { field, direction } = this.parseOrderBy(orderBy);\n\n const conditions: string[] = [];\n const queryParams: any[] = [];\n conditions.push(`${quoteIdentifier('status', 'column name')} = ?`);\n queryParams.push(status);\n if (authorId !== undefined) {\n conditions.push(`${quoteIdentifier('authorId', 'column name')} = ?`);\n queryParams.push(authorId);\n }\n if (metadata && Object.keys(metadata).length > 0) {\n for (const [key, value] of Object.entries(metadata)) {\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(key))\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'LIST_MCP_CLIENTS', 'INVALID_METADATA_KEY'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Invalid metadata key: ${key}`,\n details: { key },\n });\n if (typeof value === 'string') {\n conditions.push(\n `JSON_UNQUOTE(JSON_EXTRACT(${quoteIdentifier('metadata', 'column name')}, '$.${key}')) = ?`,\n );\n queryParams.push(value);\n } else {\n conditions.push(\n `JSON_EXTRACT(${quoteIdentifier('metadata', 'column name')}, '$.${key}') = CAST(? AS JSON)`,\n );\n queryParams.push(JSON.stringify(value));\n }\n }\n }\n\n const whereClause = { sql: ` WHERE ${conditions.join(' AND ')}`, args: queryParams };\n const total = await this.operations.loadTotalCount({ tableName: TABLE_MCP_CLIENTS, whereClause });\n if (total === 0) return { mcpClients: [], total: 0, page, perPage: perPageInput ?? 100, hasMore: false };\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_MCP_CLIENTS,\n whereClause,\n orderBy: `${quoteIdentifier(field, 'column name')} ${direction}`,\n offset,\n limit: limitValue,\n });\n\n return {\n mcpClients: rows.map(row => this.parseClientRow(row)),\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_MCP_CLIENTS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n // ==========================================================================\n // Version Methods\n // ==========================================================================\n\n async createVersion(input: CreateMCPClientVersionInput): Promise<MCPClientVersion> {\n try {\n const now = new Date();\n await this.operations.insert({\n tableName: TABLE_MCP_CLIENT_VERSIONS,\n record: {\n id: input.id,\n mcpClientId: input.mcpClientId,\n versionNumber: input.versionNumber,\n name: input.name,\n description: input.description ?? null,\n servers: input.servers ?? null,\n changedFields: input.changedFields ?? null,\n changeMessage: input.changeMessage ?? null,\n createdAt: now,\n },\n });\n return { ...input, createdAt: now };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_MCP_CLIENT_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getVersion(id: string): Promise<MCPClientVersion | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_MCP_CLIENT_VERSIONS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_MCP_CLIENT_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getVersionByNumber(mcpClientId: string, versionNumber: number): Promise<MCPClientVersion | null> {\n try {\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_MCP_CLIENT_VERSIONS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('mcpClientId', 'column name')} = ? AND ${quoteIdentifier('versionNumber', 'column name')} = ?`,\n args: [mcpClientId, versionNumber],\n },\n limit: 1,\n });\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_MCP_CLIENT_VERSION_BY_NUMBER', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getLatestVersion(mcpClientId: string): Promise<MCPClientVersion | null> {\n try {\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_MCP_CLIENT_VERSIONS,\n whereClause: { sql: ` WHERE ${quoteIdentifier('mcpClientId', 'column name')} = ?`, args: [mcpClientId] },\n orderBy: `${quoteIdentifier('versionNumber', 'column name')} DESC`,\n limit: 1,\n });\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_LATEST_MCP_CLIENT_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listVersions(input: ListMCPClientVersionsInput): Promise<ListMCPClientVersionsOutput> {\n try {\n const { mcpClientId, page = 0, perPage: perPageInput, orderBy } = input;\n const { field, direction } = this.parseVersionOrderBy(orderBy);\n const whereClause = { sql: ` WHERE ${quoteIdentifier('mcpClientId', 'column name')} = ?`, args: [mcpClientId] };\n const total = await this.operations.loadTotalCount({ tableName: TABLE_MCP_CLIENT_VERSIONS, whereClause });\n if (total === 0) return { versions: [], total: 0, page, perPage: perPageInput ?? 20, hasMore: false };\n\n const perPage = normalizePerPage(perPageInput, 20);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_MCP_CLIENT_VERSIONS,\n whereClause,\n orderBy: `${quoteIdentifier(field, 'column name')} ${direction}`,\n offset,\n limit: limitValue,\n });\n\n return {\n versions: rows.map(row => this.parseVersionRow(row)),\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_MCP_CLIENT_VERSIONS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteVersion(id: string): Promise<void> {\n try {\n await this.operations.delete({ tableName: TABLE_MCP_CLIENT_VERSIONS, keys: { id } });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_MCP_CLIENT_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteVersionsByParentId(entityId: string): Promise<void> {\n try {\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_MCP_CLIENT_VERSIONS)} WHERE ${quoteIdentifier('mcpClientId', 'column name')} = ?`,\n [entityId],\n );\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_MCP_CLIENT_VERSIONS_BY_CLIENT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async countVersions(mcpClientId: string): Promise<number> {\n try {\n return await this.operations.loadTotalCount({\n tableName: TABLE_MCP_CLIENT_VERSIONS,\n whereClause: { sql: ` WHERE ${quoteIdentifier('mcpClientId', 'column name')} = ?`, args: [mcpClientId] },\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'COUNT_MCP_CLIENT_VERSIONS', '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 {\n MCPServersStorage,\n createStorageErrorId,\n normalizePerPage,\n calculatePagination,\n TABLE_MCP_SERVERS,\n TABLE_MCP_SERVER_VERSIONS,\n TABLE_SCHEMAS,\n MCP_SERVERS_SCHEMA,\n MCP_SERVER_VERSIONS_SCHEMA,\n} from '@mastra/core/storage';\nimport type {\n CreateIndexOptions,\n StorageMCPServerType,\n StorageCreateMCPServerInput,\n StorageUpdateMCPServerInput,\n StorageListMCPServersInput,\n StorageListMCPServersOutput,\n} from '@mastra/core/storage';\nimport type {\n MCPServerVersion,\n CreateMCPServerVersionInput,\n ListMCPServerVersionsInput,\n ListMCPServerVersionsOutput,\n} from '@mastra/core/storage/domains/mcp-servers';\nimport type { Pool, RowDataPacket } from 'mysql2/promise';\n\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL } from '../operations';\nimport { formatTableName, quoteIdentifier } from '../utils';\n\nexport class MCPServersMySQL extends MCPServersStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_MCP_SERVERS, TABLE_MCP_SERVER_VERSIONS] as const;\n\n /**\n * Returns default index definitions for the mcp-servers domain tables.\n * Currently no default indexes are defined for mcp-servers.\n */\n static getDefaultIndexDefs(_prefix: string = ''): CreateIndexOptions[] {\n return [];\n }\n\n /**\n * Exports DDL statements for all managed tables.\n */\n static getExportDDL(): string[] {\n return [\n generateTableSQL({ tableName: TABLE_MCP_SERVERS, schema: TABLE_SCHEMAS[TABLE_MCP_SERVERS] }),\n generateTableSQL({ tableName: TABLE_MCP_SERVER_VERSIONS, schema: TABLE_SCHEMAS[TABLE_MCP_SERVER_VERSIONS] }),\n ];\n }\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx => (MCPServersMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n /**\n * Returns default index definitions for the mcp-servers domain tables.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return MCPServersMySQL.getDefaultIndexDefs('');\n }\n\n /**\n * Creates default indexes for optimal query performance.\n * Currently no default indexes are defined for mcp-servers.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n // No default indexes for mcp-servers domain\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({ tableName: TABLE_MCP_SERVERS, schema: MCP_SERVERS_SCHEMA });\n await this.operations.createTable({ tableName: TABLE_MCP_SERVER_VERSIONS, schema: MCP_SERVER_VERSIONS_SCHEMA });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.operations.clearTable({ tableName: TABLE_MCP_SERVER_VERSIONS });\n await this.operations.clearTable({ tableName: TABLE_MCP_SERVERS });\n }\n\n private safeParseJSON<T = unknown>(val: unknown): T | undefined {\n if (val === null || val === undefined) return undefined;\n if (typeof val === 'string') {\n try {\n return JSON.parse(val) as T;\n } catch {\n return val as T;\n }\n }\n return val as T;\n }\n\n private parseServerRow(row: Record<string, unknown>): StorageMCPServerType {\n return {\n id: row.id as string,\n status: (row.status as StorageMCPServerType['status']) ?? 'draft',\n activeVersionId: (row.activeVersionId as string) ?? undefined,\n authorId: (row.authorId as string) ?? undefined,\n metadata: this.safeParseJSON(row.metadata) as Record<string, unknown> | undefined,\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n updatedAt: row.updatedAt instanceof Date ? row.updatedAt : new Date(row.updatedAt as string),\n };\n }\n\n private parseVersionRow(row: Record<string, unknown>): MCPServerVersion {\n return {\n id: row.id as string,\n mcpServerId: row.mcpServerId as string,\n versionNumber: Number(row.versionNumber),\n name: row.name as string,\n version: row.version as string,\n description: (row.description as string) ?? undefined,\n instructions: (row.instructions as string) ?? undefined,\n repository: this.safeParseJSON(row.repository) as MCPServerVersion['repository'],\n releaseDate: (row.releaseDate as string) ?? undefined,\n isLatest:\n row.isLatest === null || row.isLatest === undefined\n ? undefined\n : Boolean(row.isLatest === true || row.isLatest === 1 || row.isLatest === '1'),\n packageCanonical: (row.packageCanonical as string) ?? undefined,\n tools: this.safeParseJSON(row.tools) as MCPServerVersion['tools'],\n agents: this.safeParseJSON(row.agents) as MCPServerVersion['agents'],\n workflows: this.safeParseJSON(row.workflows) as MCPServerVersion['workflows'],\n changedFields: this.safeParseJSON(row.changedFields) as string[] | undefined,\n changeMessage: (row.changeMessage as string) ?? undefined,\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n };\n }\n\n async getById(id: string): Promise<StorageMCPServerType | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_MCP_SERVERS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n return rows.length ? this.parseServerRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_MCP_SERVER', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async create(input: { mcpServer: StorageCreateMCPServerInput }): Promise<StorageMCPServerType> {\n const { mcpServer } = input;\n try {\n const now = new Date();\n await this.operations.insert({\n tableName: TABLE_MCP_SERVERS,\n record: {\n id: mcpServer.id,\n status: 'draft',\n activeVersionId: null,\n authorId: mcpServer.authorId ?? null,\n metadata: mcpServer.metadata ?? null,\n createdAt: now,\n updatedAt: now,\n },\n });\n\n const { id: _id, authorId: _authorId, metadata: _metadata, ...snapshotConfig } = mcpServer;\n const versionId = crypto.randomUUID();\n try {\n await this.createVersion({\n id: versionId,\n mcpServerId: mcpServer.id,\n versionNumber: 1,\n ...snapshotConfig,\n changedFields: Object.keys(snapshotConfig),\n changeMessage: 'Initial version',\n });\n } catch (versionError) {\n try {\n await this.operations.delete({ tableName: TABLE_MCP_SERVERS, keys: { id: mcpServer.id } });\n } catch (rollbackError) {\n console.error('Failed to rollback MCP server creation:', rollbackError);\n }\n throw versionError;\n }\n\n return {\n id: mcpServer.id,\n status: 'draft',\n activeVersionId: undefined,\n authorId: mcpServer.authorId,\n metadata: mcpServer.metadata,\n createdAt: now,\n updatedAt: now,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_MCP_SERVER', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async update(input: StorageUpdateMCPServerInput): Promise<StorageMCPServerType> {\n const { id, ...updates } = input;\n try {\n const existing = await this.getById(id);\n if (!existing) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_MCP_SERVER', 'NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `MCP server with id ${id} not found`,\n details: { id },\n });\n }\n\n const { authorId, activeVersionId, metadata, status } = updates;\n const updateData: Record<string, unknown> = { updatedAt: new Date() };\n if (authorId !== undefined) updateData.authorId = authorId;\n if (activeVersionId !== undefined) updateData.activeVersionId = activeVersionId;\n if (status !== undefined) updateData.status = status;\n if (metadata !== undefined) updateData.metadata = { ...existing.metadata, ...metadata };\n\n await this.operations.update({ tableName: TABLE_MCP_SERVERS, keys: { id }, data: updateData });\n\n const updated = await this.getById(id);\n if (!updated)\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_MCP_SERVER', 'NOT_FOUND_AFTER_UPDATE'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `MCP server ${id} not found after update`,\n details: { id },\n });\n return updated;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'UPDATE_MCP_SERVER', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async delete(id: string): Promise<void> {\n try {\n await this.deleteVersionsByParentId(id);\n await this.operations.delete({ tableName: TABLE_MCP_SERVERS, keys: { id } });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_MCP_SERVER', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async list(args?: StorageListMCPServersInput): Promise<StorageListMCPServersOutput> {\n try {\n const { page = 0, perPage: perPageInput, orderBy, authorId, metadata, status = 'published' } = args || {};\n const { field, direction } = this.parseOrderBy(orderBy);\n\n const conditions: string[] = [];\n const queryParams: any[] = [];\n conditions.push(`${quoteIdentifier('status', 'column name')} = ?`);\n queryParams.push(status);\n if (authorId !== undefined) {\n conditions.push(`${quoteIdentifier('authorId', 'column name')} = ?`);\n queryParams.push(authorId);\n }\n if (metadata && Object.keys(metadata).length > 0) {\n for (const [key, value] of Object.entries(metadata)) {\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(key))\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'LIST_MCP_SERVERS', 'INVALID_METADATA_KEY'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Invalid metadata key: ${key}`,\n details: { key },\n });\n if (typeof value === 'string') {\n conditions.push(\n `JSON_UNQUOTE(JSON_EXTRACT(${quoteIdentifier('metadata', 'column name')}, '$.${key}')) = ?`,\n );\n queryParams.push(value);\n } else {\n conditions.push(\n `JSON_EXTRACT(${quoteIdentifier('metadata', 'column name')}, '$.${key}') = CAST(? AS JSON)`,\n );\n queryParams.push(JSON.stringify(value));\n }\n }\n }\n\n const whereClause = { sql: ` WHERE ${conditions.join(' AND ')}`, args: queryParams };\n const total = await this.operations.loadTotalCount({ tableName: TABLE_MCP_SERVERS, whereClause });\n if (total === 0) return { mcpServers: [], total: 0, page, perPage: perPageInput ?? 100, hasMore: false };\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_MCP_SERVERS,\n whereClause,\n orderBy: `${quoteIdentifier(field, 'column name')} ${direction}`,\n offset,\n limit: limitValue,\n });\n\n return {\n mcpServers: rows.map(row => this.parseServerRow(row)),\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_MCP_SERVERS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n // ==========================================================================\n // Version Methods\n // ==========================================================================\n\n async createVersion(input: CreateMCPServerVersionInput): Promise<MCPServerVersion> {\n try {\n const now = new Date();\n await this.operations.insert({\n tableName: TABLE_MCP_SERVER_VERSIONS,\n record: {\n id: input.id,\n mcpServerId: input.mcpServerId,\n versionNumber: input.versionNumber,\n name: input.name,\n version: input.version,\n description: input.description ?? null,\n instructions: input.instructions ?? null,\n repository: input.repository ?? null,\n releaseDate: input.releaseDate ?? null,\n isLatest: input.isLatest ?? null,\n packageCanonical: input.packageCanonical ?? null,\n tools: input.tools ?? null,\n agents: input.agents ?? null,\n workflows: input.workflows ?? null,\n changedFields: input.changedFields ?? null,\n changeMessage: input.changeMessage ?? null,\n createdAt: now,\n },\n });\n return { ...input, createdAt: now };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_MCP_SERVER_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getVersion(id: string): Promise<MCPServerVersion | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_MCP_SERVER_VERSIONS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_MCP_SERVER_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getVersionByNumber(mcpServerId: string, versionNumber: number): Promise<MCPServerVersion | null> {\n try {\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_MCP_SERVER_VERSIONS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('mcpServerId', 'column name')} = ? AND ${quoteIdentifier('versionNumber', 'column name')} = ?`,\n args: [mcpServerId, versionNumber],\n },\n limit: 1,\n });\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_MCP_SERVER_VERSION_BY_NUMBER', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getLatestVersion(mcpServerId: string): Promise<MCPServerVersion | null> {\n try {\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_MCP_SERVER_VERSIONS,\n whereClause: { sql: ` WHERE ${quoteIdentifier('mcpServerId', 'column name')} = ?`, args: [mcpServerId] },\n orderBy: `${quoteIdentifier('versionNumber', 'column name')} DESC`,\n limit: 1,\n });\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_LATEST_MCP_SERVER_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listVersions(input: ListMCPServerVersionsInput): Promise<ListMCPServerVersionsOutput> {\n try {\n const { mcpServerId, page = 0, perPage: perPageInput, orderBy } = input;\n const { field, direction } = this.parseVersionOrderBy(orderBy);\n const whereClause = { sql: ` WHERE ${quoteIdentifier('mcpServerId', 'column name')} = ?`, args: [mcpServerId] };\n const total = await this.operations.loadTotalCount({ tableName: TABLE_MCP_SERVER_VERSIONS, whereClause });\n if (total === 0) return { versions: [], total: 0, page, perPage: perPageInput ?? 20, hasMore: false };\n\n const perPage = normalizePerPage(perPageInput, 20);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_MCP_SERVER_VERSIONS,\n whereClause,\n orderBy: `${quoteIdentifier(field, 'column name')} ${direction}`,\n offset,\n limit: limitValue,\n });\n\n return {\n versions: rows.map(row => this.parseVersionRow(row)),\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_MCP_SERVER_VERSIONS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteVersion(id: string): Promise<void> {\n try {\n await this.operations.delete({ tableName: TABLE_MCP_SERVER_VERSIONS, keys: { id } });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_MCP_SERVER_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteVersionsByParentId(entityId: string): Promise<void> {\n try {\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_MCP_SERVER_VERSIONS)} WHERE ${quoteIdentifier('mcpServerId', 'column name')} = ?`,\n [entityId],\n );\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_MCP_SERVER_VERSIONS_BY_SERVER', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async countVersions(mcpServerId: string): Promise<number> {\n try {\n return await this.operations.loadTotalCount({\n tableName: TABLE_MCP_SERVER_VERSIONS,\n whereClause: { sql: ` WHERE ${quoteIdentifier('mcpServerId', 'column name')} = ?`, args: [mcpServerId] },\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'COUNT_MCP_SERVER_VERSIONS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n}\n","import { randomUUID } from 'node:crypto';\nimport { MessageList } from '@mastra/core/agent';\nimport type { MastraDBMessage, MastraMessageContentV2 } from '@mastra/core/agent';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { StorageThreadType } from '@mastra/core/memory';\nimport {\n MemoryStorage,\n TABLE_MESSAGES,\n TABLE_RESOURCES,\n TABLE_THREADS,\n TABLE_SCHEMAS,\n calculatePagination,\n normalizePerPage,\n createStorageErrorId,\n} from '@mastra/core/storage';\nimport type {\n BufferedObservationChunk,\n CreateIndexOptions,\n CreateObservationalMemoryInput,\n CreateReflectionGenerationInput,\n ObservationalMemoryHistoryOptions,\n ObservationalMemoryRecord,\n PaginationArgs,\n PaginationInfo,\n StorageCloneThreadInput,\n StorageCloneThreadOutput,\n StorageListMessagesByResourceIdInput,\n StorageListMessagesInput,\n StorageListMessagesOutput,\n StorageListThreadsInput,\n StorageListThreadsOutput,\n StorageResourceType,\n SwapBufferedReflectionToActiveInput,\n SwapBufferedToActiveInput,\n SwapBufferedToActiveResult,\n ThreadCloneMetadata,\n ThreadSortOptions,\n UpdateActiveObservationsInput,\n UpdateBufferedObservationsInput,\n UpdateBufferedReflectionInput,\n} from '@mastra/core/storage';\nimport type { Pool, RowDataPacket, ResultSetHeader } from 'mysql2/promise';\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL, generateIndexSQL } from '../operations';\nimport { formatTableName, parseDateTime, quoteIdentifier, transformToSqlValue } from '../utils';\n\nconst OM_TABLE = 'mastra_observational_memory' as const;\nconst OM_TABLE_QUOTED = quoteIdentifier(OM_TABLE, 'table name');\n\nfunction emitValidationError(message: string): MastraError {\n return new MastraError({\n id: 'MYSQL_MEMORY_VALIDATION_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: message,\n });\n}\n\nfunction omCol(name: string): string {\n return quoteIdentifier(name, 'column name');\n}\n\nfunction rethrowOrWrapOM(error: unknown, id: string, operation: string, details?: Record<string, any>): never {\n if (error instanceof MastraError) {\n throw error;\n }\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', operation, 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: details ?? { id },\n },\n error,\n );\n}\n\nfunction throwOMNotFound(id: string, operation: string, details?: Record<string, any>): never {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', operation, 'NOT_FOUND'),\n text: `Observational memory record not found: ${id}`,\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: details ?? { id },\n });\n}\n\nfunction parseMySQLBool(value: unknown): boolean {\n return value === true || value === 1 || value === '1';\n}\n\nfunction parseJSONColumn<T>(value: unknown): T | undefined {\n if (!value) return undefined;\n if (typeof value === 'string') return JSON.parse(value) as T;\n return value as T;\n}\n\nfunction parseBufferedChunks(raw: unknown): BufferedObservationChunk[] {\n if (!raw) return [];\n try {\n const parsed = typeof raw === 'string' ? JSON.parse(raw) : raw;\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n}\n\ninterface ThreadRow {\n id: string;\n resourceId: string;\n title: string;\n metadata: string | Record<string, unknown> | null;\n createdAt: Date | string;\n updatedAt: Date | string;\n}\n\ninterface MessageRow {\n id: string;\n thread_id: string;\n content: string | Record<string, unknown>;\n role: MastraDBMessage['role'];\n type: string | null;\n createdAt: Date | string;\n resourceId: string | null;\n}\n\ninterface ResourceRow {\n id: string;\n workingMemory: string | null;\n metadata: string | Record<string, unknown> | null;\n createdAt: Date | string;\n updatedAt: Date | string;\n}\n\nfunction parseJSON<T>(value: T | string | null | undefined): T | null {\n if (value === null || value === undefined) return null;\n if (typeof value === 'object') return value as T;\n if (typeof value !== 'string') return null;\n if (!value) return null;\n try {\n return JSON.parse(value) as T;\n } catch {\n return null;\n }\n}\n\nexport class MemoryMySQL extends MemoryStorage {\n readonly supportsObservationalMemory = true;\n\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n static readonly MANAGED_TABLES = [TABLE_THREADS, TABLE_MESSAGES, TABLE_RESOURCES] as const;\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx => (MemoryMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({ tableName: TABLE_THREADS, schema: TABLE_SCHEMAS[TABLE_THREADS] });\n await this.operations.createTable({ tableName: TABLE_MESSAGES, schema: TABLE_SCHEMAS[TABLE_MESSAGES] });\n await this.operations.createTable({ tableName: TABLE_RESOURCES, schema: TABLE_SCHEMAS[TABLE_RESOURCES] });\n\n // Dynamically import OM schema to avoid crashing on older @mastra/core versions\n let omSchema: Record<string, any> | undefined;\n try {\n const { OBSERVATIONAL_MEMORY_TABLE_SCHEMA } = await import('@mastra/core/storage');\n omSchema = OBSERVATIONAL_MEMORY_TABLE_SCHEMA?.[OM_TABLE];\n } catch {\n // Older @mastra/core without OM support\n }\n\n if (omSchema) {\n await this.operations.createTable({\n tableName: OM_TABLE as any,\n schema: omSchema,\n });\n await this.operations.alterTable({\n tableName: OM_TABLE as any,\n schema: omSchema,\n ifNotExists: [\n 'observedMessageIds',\n 'observedTimezone',\n 'bufferedObservations',\n 'bufferedObservationTokens',\n 'bufferedMessageIds',\n 'bufferedReflection',\n 'bufferedReflectionTokens',\n 'bufferedReflectionInputTokens',\n 'reflectedObservationLineCount',\n 'bufferedObservationChunks',\n 'isBufferingObservation',\n 'isBufferingReflection',\n 'lastBufferedAtTokens',\n 'lastBufferedAtTime',\n ],\n });\n }\n\n // Add resourceId column for backwards compatibility\n await this.operations.alterTable({\n tableName: TABLE_MESSAGES,\n schema: TABLE_SCHEMAS[TABLE_MESSAGES],\n ifNotExists: ['resourceId'],\n });\n\n if (omSchema) {\n // Create index on lookupKey for efficient OM queries\n // MySQL does not support CREATE INDEX IF NOT EXISTS, so catch ER_DUP_KEYNAME (errno 1061)\n try {\n await this.pool.execute(\n `CREATE INDEX idx_om_lookup_key ON ${OM_TABLE_QUOTED} (${quoteIdentifier('lookupKey', 'column name')}(191))`,\n );\n } catch (err: any) {\n if (err?.errno !== 1061) {\n throw err;\n }\n }\n }\n\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n static getDefaultIndexDefs(prefix: string = ''): CreateIndexOptions[] {\n return [\n {\n name: `${prefix}mastra_threads_resourceid_createdat_idx`,\n table: TABLE_THREADS,\n columns: ['resourceId', 'createdAt DESC'],\n },\n {\n name: `${prefix}mastra_messages_thread_id_createdat_idx`,\n table: TABLE_MESSAGES,\n columns: ['thread_id', 'createdAt DESC'],\n },\n ];\n }\n\n static getExportDDL(): string[] {\n const statements: string[] = [];\n\n for (const tableName of [TABLE_THREADS, TABLE_MESSAGES, TABLE_RESOURCES] as const) {\n statements.push(\n generateTableSQL({\n tableName,\n schema: TABLE_SCHEMAS[tableName],\n }),\n );\n }\n\n for (const idx of MemoryMySQL.getDefaultIndexDefs()) {\n statements.push(generateIndexSQL(idx));\n }\n\n return statements;\n }\n\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return MemoryMySQL.getDefaultIndexDefs('');\n }\n\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n for (const indexDef of this.getDefaultIndexDefinitions()) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.pool.execute(`DELETE FROM ${formatTableName(TABLE_MESSAGES)}`);\n await this.pool.execute(`DELETE FROM ${formatTableName(TABLE_THREADS)}`);\n await this.pool.execute(`DELETE FROM ${formatTableName(TABLE_RESOURCES)}`);\n try {\n await this.pool.execute(`DELETE FROM ${OM_TABLE_QUOTED}`);\n } catch (err: any) {\n // errno 1146 = ER_NO_SUCH_TABLE — table may not exist yet\n if (err?.errno !== 1146) {\n throw err;\n }\n }\n }\n\n private mapThread(row: ThreadRow): StorageThreadType {\n return {\n id: row.id,\n resourceId: row.resourceId,\n title: row.title,\n metadata: parseJSON<Record<string, unknown>>(row.metadata) ?? undefined,\n createdAt: parseDateTime(row.createdAt) ?? new Date(),\n updatedAt: parseDateTime(row.updatedAt) ?? new Date(),\n } satisfies StorageThreadType;\n }\n\n private mapMessage(row: MessageRow): MastraDBMessage {\n const createdAt = parseDateTime(row.createdAt) ?? new Date();\n let content: MastraMessageContentV2;\n content = row.content as MastraMessageContentV2;\n if (typeof row.content === 'string') {\n try {\n content = JSON.parse(row.content) as MastraMessageContentV2;\n } catch {\n // Wrap legacy v1 string content into v2 shape\n content = {\n format: 2,\n parts: [{ type: 'text', text: row.content } as any],\n content: row.content,\n } as MastraMessageContentV2;\n }\n }\n\n const message: MastraDBMessage = {\n id: row.id,\n threadId: row.thread_id,\n resourceId: row.resourceId ?? undefined,\n role: row.role,\n content,\n createdAt,\n };\n\n if (row.type && row.type !== 'v2') {\n message.type = row.type;\n }\n\n return message;\n }\n\n private async fetchMessagesForThread(threadId: string, limit?: number): Promise<MessageRow[]> {\n let sql = `SELECT id, thread_id, content, role, type, createdAt, resourceId FROM ${formatTableName(TABLE_MESSAGES)} WHERE ${quoteIdentifier('thread_id', 'column name')} = ? ORDER BY ${quoteIdentifier('createdAt', 'column name')} ASC`;\n const params: any[] = [threadId];\n if (limit && limit > 0) {\n sql += ` LIMIT ?`;\n params.push(limit);\n }\n const [rows] = await this.pool.execute<RowDataPacket[]>(sql, params);\n return rows as unknown as MessageRow[];\n }\n\n /**\n * Fetches included messages by ID, discovering their thread automatically.\n * This handles cross-thread includes where the include item doesn't specify a threadId.\n */\n private async _getIncludedMessages({\n include,\n }: {\n include: StorageListMessagesInput['include'];\n }): Promise<MessageRow[] | null> {\n if (!include || include.length === 0) return null;\n\n const tableName = formatTableName(TABLE_MESSAGES);\n const selectColumns = `id, thread_id, content, role, type, createdAt, resourceId`;\n\n // Phase 1: Batch-fetch metadata for all target messages\n const targetIds = include.map(inc => inc.id).filter(Boolean);\n if (targetIds.length === 0) return null;\n\n const idPlaceholders = targetIds.map(() => '?').join(', ');\n const [targetRows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT id, thread_id, createdAt FROM ${tableName} WHERE id IN (${idPlaceholders})`,\n targetIds,\n );\n\n if (!targetRows || targetRows.length === 0) return null;\n\n const targetMap = new Map(targetRows.map(r => [r.id, { threadId: r.thread_id, createdAt: r.createdAt }]));\n\n // Phase 2: Build UNION queries for each include item\n const unionQueries: string[] = [];\n const params: any[] = [];\n\n for (const inc of include) {\n const { id, withPreviousMessages = 0, withNextMessages = 0 } = inc;\n const target = targetMap.get(id);\n if (!target) continue;\n\n // Validate LIMIT values are safe integers\n const prevLimit = Math.max(0, Math.floor(withPreviousMessages + 1));\n const nextLimit = Math.max(0, Math.floor(withNextMessages));\n\n // Fetch the target message plus previous messages\n unionQueries.push(`(\n SELECT ${selectColumns}\n FROM ${tableName} m\n WHERE m.thread_id = ?\n AND m.createdAt <= ?\n ORDER BY m.createdAt DESC, m.id DESC\n LIMIT ${prevLimit}\n )`);\n params.push(target.threadId, target.createdAt);\n\n // Fetch messages after the target (only if requested)\n if (nextLimit > 0) {\n unionQueries.push(`(\n SELECT ${selectColumns}\n FROM ${tableName} m\n WHERE m.thread_id = ?\n AND m.createdAt > ?\n ORDER BY m.createdAt ASC, m.id ASC\n LIMIT ${nextLimit}\n )`);\n params.push(target.threadId, target.createdAt);\n }\n }\n\n if (unionQueries.length === 0) return null;\n\n // Combine queries with UNION ALL and sort\n const finalQuery = `SELECT * FROM (${unionQueries.join(' UNION ALL ')}) AS combined ORDER BY createdAt ASC, id ASC`;\n const [rows] = await this.pool.execute<RowDataPacket[]>(finalQuery, params);\n\n return rows as unknown as MessageRow[];\n }\n\n private async collectIncludeMessages({\n threadId,\n include,\n messagesByThread,\n }: {\n threadId: string;\n include?: StorageListMessagesInput['include'];\n messagesByThread: Map<string, MastraDBMessage[]>;\n }): Promise<MastraDBMessage[]> {\n if (!include?.length) return [];\n\n const includeMessages: MastraDBMessage[] = [];\n const seenIds = new Set<string>();\n\n for (const inc of include) {\n const targetThreadId = inc.threadId ?? threadId;\n\n let threadMessages = messagesByThread.get(targetThreadId);\n if (!threadMessages) {\n const rows = await this.fetchMessagesForThread(targetThreadId);\n threadMessages = rows.map(row => this.mapMessage(row));\n messagesByThread.set(targetThreadId, threadMessages);\n }\n\n // If the current cached set might be partial (e.g., paginated main thread), reload full thread\n const needsContext =\n (inc.withPreviousMessages ?? 0) > 0 ||\n (inc.withNextMessages ?? 0) > 0 ||\n threadMessages.length < (inc.withNextMessages ?? 0) + (inc.withPreviousMessages ?? 0) + 1;\n if (needsContext) {\n const rows = await this.fetchMessagesForThread(targetThreadId);\n threadMessages = rows.map(row => this.mapMessage(row));\n messagesByThread.set(targetThreadId, threadMessages);\n }\n\n const targetIndex = threadMessages.findIndex(msg => msg.id === inc.id);\n if (targetIndex === -1) continue;\n\n // Add the target message itself if not already included\n if (!seenIds.has(inc.id)) {\n seenIds.add(inc.id);\n includeMessages.push(threadMessages[targetIndex]!);\n }\n\n // Add previous messages\n if (inc.withPreviousMessages) {\n const start = Math.max(0, targetIndex - inc.withPreviousMessages);\n for (let i = start; i < targetIndex; i++) {\n const message = threadMessages[i]!;\n if (!seenIds.has(message.id)) {\n seenIds.add(message.id);\n includeMessages.push(message);\n }\n }\n }\n\n // Add next messages\n if (inc.withNextMessages) {\n const end = Math.min(threadMessages.length, targetIndex + inc.withNextMessages + 1);\n for (let i = targetIndex + 1; i < end; i++) {\n const message = threadMessages[i]!;\n if (!seenIds.has(message.id)) {\n seenIds.add(message.id);\n includeMessages.push(message);\n }\n }\n }\n }\n\n return includeMessages;\n }\n\n private async upsertThread(thread: StorageThreadType): Promise<void> {\n await this.operations.insert({\n tableName: TABLE_THREADS,\n record: {\n id: thread.id,\n resourceId: thread.resourceId,\n title: thread.title,\n metadata: thread.metadata ? JSON.stringify(thread.metadata) : null,\n createdAt: thread.createdAt,\n updatedAt: thread.updatedAt,\n },\n });\n }\n\n async getThreadById({\n threadId,\n resourceId,\n }: {\n threadId: string;\n resourceId?: string;\n }): Promise<StorageThreadType | null> {\n try {\n let sql = `SELECT * FROM ${formatTableName(TABLE_THREADS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`;\n const params: any[] = [threadId];\n\n if (resourceId !== undefined) {\n sql += ` AND ${quoteIdentifier('resourceId', 'column name')} = ?`;\n params.push(resourceId);\n }\n\n const [rows] = await this.pool.execute<RowDataPacket[]>(sql, params);\n const row = rows[0];\n return row ? this.mapThread(row as ThreadRow) : null;\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_MEMORY_GET_THREAD_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { threadId, ...(resourceId !== undefined && { resourceId }) },\n },\n error,\n );\n }\n }\n\n public async listThreads(args: StorageListThreadsInput): Promise<StorageListThreadsOutput> {\n const { page = 0, perPage: perPageInput, orderBy, filter } = args;\n const { field, direction } = this.parseOrderBy(orderBy, 'DESC');\n const perPageNormalized = normalizePerPage(perPageInput, 100);\n const { offset, perPage } = calculatePagination(page, perPageInput, perPageNormalized);\n\n const conditions: string[] = [];\n const params: unknown[] = [];\n\n if (filter?.resourceId) {\n conditions.push(`${quoteIdentifier('resourceId', 'column name')} = ?`);\n params.push(filter.resourceId);\n }\n\n if (filter?.metadata && Object.keys(filter.metadata).length > 0) {\n for (const [key, value] of Object.entries(filter.metadata)) {\n conditions.push(`JSON_EXTRACT(\\`metadata\\`, ?) = CAST(? AS JSON)`);\n params.push(`$.${key}`, JSON.stringify(value));\n }\n }\n\n const whereClause =\n conditions.length > 0 ? { sql: ` WHERE ${conditions.join(' AND ')}`, args: params } : { sql: '', args: [] };\n\n try {\n const total = await this.operations.loadTotalCount({ tableName: TABLE_THREADS, whereClause });\n if (total === 0) {\n return { threads: [], total: 0, page, perPage, hasMore: false };\n }\n\n const limitValue = perPageInput === false ? total : perPageNormalized;\n const rows = await this.operations.loadMany<ThreadRow>({\n tableName: TABLE_THREADS,\n whereClause,\n orderBy: `${quoteIdentifier(field, 'column name')} ${direction}`,\n offset,\n limit: limitValue,\n });\n const threads = rows.map(row => this.mapThread(row));\n\n return {\n threads,\n total,\n page,\n perPage,\n hasMore: perPageInput === false ? false : offset + perPageNormalized < total,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_MEMORY_LIST_THREADS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { filter: JSON.stringify(filter ?? {}) },\n },\n error,\n );\n }\n }\n\n public async getThreadsByResourceId(args: { resourceId: string } & ThreadSortOptions): Promise<StorageThreadType[]> {\n const { threads } = await this.listThreads({\n filter: { resourceId: args.resourceId },\n orderBy: args.orderBy || args.sortDirection ? { field: args.orderBy, direction: args.sortDirection } : undefined,\n page: 0,\n perPage: false,\n });\n\n return threads;\n }\n\n public async getThreadsByResourceIdPaginated(\n args: {\n resourceId: string;\n } & PaginationArgs &\n ThreadSortOptions,\n ): Promise<PaginationInfo & { threads: StorageThreadType[] }> {\n return this.listThreads({\n filter: { resourceId: args.resourceId },\n page: args.page as number | undefined,\n perPage: args.perPage as number | false | undefined,\n orderBy: args.orderBy || args.sortDirection ? { field: args.orderBy, direction: args.sortDirection } : undefined,\n });\n }\n\n async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n try {\n await this.upsertThread(thread);\n return thread;\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_MEMORY_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 try {\n const existing = await this.getThreadById({ threadId: id });\n if (!existing) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_THREAD', 'NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Thread ${id} not found`,\n details: { threadId: id },\n });\n }\n\n const mergedMetadata = {\n ...(existing.metadata ?? {}),\n ...(metadata ?? {}),\n } as Record<string, unknown>;\n\n const updatedAt = new Date();\n await this.operations.update({\n tableName: TABLE_THREADS,\n keys: { id },\n data: {\n title,\n metadata: JSON.stringify(mergedMetadata),\n updatedAt,\n },\n });\n\n return {\n ...existing,\n title,\n metadata: mergedMetadata,\n updatedAt,\n } satisfies StorageThreadType;\n } catch (error) {\n if (error instanceof MastraError) {\n throw error;\n }\n throw new MastraError(\n {\n id: 'MYSQL_MEMORY_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 try {\n await this.operations.batchDelete({\n tableName: TABLE_MESSAGES,\n keys: [{ thread_id: threadId }],\n });\n await this.operations.delete({ tableName: TABLE_THREADS, keys: { id: threadId } });\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_MEMORY_DELETE_THREAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { threadId },\n },\n error,\n );\n }\n }\n\n async listMessagesById({ messageIds }: { messageIds: string[] }): Promise<{ messages: MastraDBMessage[] }> {\n if (messageIds.length === 0) return { messages: [] };\n\n const placeholders = messageIds.map(() => '?').join(', ');\n const sql = `SELECT id, thread_id, content, role, type, createdAt, resourceId FROM ${formatTableName(TABLE_MESSAGES)} WHERE id IN (${placeholders}) ORDER BY ${quoteIdentifier('createdAt', 'column name')} ASC`;\n\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(sql, messageIds);\n const messages = (rows as unknown as MessageRow[]).map(row => this.mapMessage(row));\n return { messages };\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_MEMORY_LIST_MESSAGES_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async saveMessages(args: { messages: MastraDBMessage[] }): Promise<{ messages: MastraDBMessage[] }> {\n const messages = args.messages;\n if (messages.length === 0) {\n return { messages: [] };\n }\n\n const threadIds = new Set<string>();\n for (const message of messages) {\n if (!message.threadId || !message.threadId.trim()) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'SAVE_MESSAGES', 'INVALID_INPUT'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'Thread ID is required',\n details: { messageId: message.id ?? null },\n });\n }\n threadIds.add(message.threadId);\n if (!message.resourceId) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'SAVE_MESSAGES', 'INVALID_INPUT'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Expected to find a resourceId for message, but couldn't find one. An unexpected error has occurred.`,\n details: { messageId: message.id ?? null, threadId: message.threadId },\n });\n }\n }\n\n for (const threadId of threadIds) {\n const existingThread = await this.getThreadById({ threadId });\n if (!existingThread) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'SAVE_MESSAGES', 'NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Thread ${threadId} not found`,\n details: { threadId },\n });\n }\n }\n\n const connection = await this.pool.getConnection();\n const affectedThreads = new Map<string, Date>();\n const insertedIds: string[] = [];\n\n try {\n await connection.beginTransaction();\n\n for (const message of messages) {\n if (!message.threadId) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'SAVE_MESSAGES', 'INVALID_INPUT'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'Message must have threadId',\n details: { messageId: message.id ?? null },\n });\n }\n const createdAt = message.createdAt ? new Date(message.createdAt) : new Date();\n const id = message.id ?? randomUUID();\n const record = {\n id,\n thread_id: message.threadId,\n content: JSON.stringify(message.content ?? message),\n role: message.role,\n type: message.type ?? 'v2',\n createdAt,\n resourceId: message.resourceId ?? null,\n } satisfies Record<string, any>;\n const statement = {\n sql: `INSERT INTO ${formatTableName(TABLE_MESSAGES)} (id, thread_id, content, role, type, createdAt, resourceId)\n VALUES (?, ?, ?, ?, ?, ?, ?)\n ON DUPLICATE KEY UPDATE thread_id = VALUES(thread_id), content = VALUES(content), role = VALUES(role), type = VALUES(type), resourceId = VALUES(resourceId)`,\n args: [\n record.id,\n record.thread_id,\n record.content,\n record.role,\n record.type,\n transformToSqlValue(record.createdAt),\n record.resourceId,\n ],\n };\n await connection.execute(statement.sql, statement.args);\n const currentMax = affectedThreads.get(record.thread_id);\n if (!currentMax || currentMax.getTime() < createdAt.getTime()) {\n affectedThreads.set(record.thread_id, createdAt);\n }\n insertedIds.push(record.id);\n }\n\n for (const [threadId, updatedAt] of affectedThreads.entries()) {\n await connection.execute(\n `UPDATE ${formatTableName(TABLE_THREADS)} SET ${quoteIdentifier('updatedAt', 'column name')} = ? WHERE id = ?`,\n [transformToSqlValue(updatedAt), threadId],\n );\n }\n\n await connection.commit();\n } catch (error) {\n await connection.rollback();\n if (error instanceof MastraError) {\n throw error;\n }\n throw new MastraError(\n {\n id: 'MYSQL_MEMORY_SAVE_MESSAGES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n } finally {\n connection.release();\n }\n\n const { messages: persisted } = await this.listMessagesById({ messageIds: insertedIds });\n const ordered = insertedIds.map(id => persisted.find(msg => msg.id === id)).filter(Boolean) as MastraDBMessage[];\n return { messages: ordered };\n }\n\n async updateMessages(args: {\n messages: (Partial<Omit<MastraDBMessage, 'createdAt'>> & {\n id: string;\n content?: Partial<MastraMessageContentV2>;\n })[];\n }): Promise<MastraDBMessage[]> {\n const { messages } = args;\n if (!messages.length) return [];\n\n try {\n const { messages: existing } = await this.listMessagesById({\n messageIds: messages.map(m => m.id),\n });\n const existingMap = new Map(existing.map(msg => [msg.id, msg]));\n\n const updates: { keys: Record<string, any>; data: Record<string, any> }[] = [];\n const affectedThreads = new Map<string, Date>();\n\n for (const update of messages) {\n const current = existingMap.get(update.id);\n if (!current) continue;\n\n const targetThreadId = update.threadId ?? current.threadId;\n if (!targetThreadId) {\n // If threadId is somehow missing, skip this update safely\n continue;\n }\n const data: Record<string, any> = {};\n\n if (update.threadId && update.threadId !== current.threadId) {\n data.thread_id = update.threadId;\n }\n if (update.role) {\n data.role = update.role;\n }\n if (update.type) {\n data.type = update.type;\n }\n if (update.resourceId !== undefined) {\n data.resourceId = update.resourceId;\n }\n\n if (update.content) {\n const existingContent = (current.content ?? {}) as Record<string, any>;\n const mergedContent: Record<string, any> = { ...existingContent, ...update.content };\n if (\n existingContent.metadata &&\n typeof existingContent.metadata === 'object' &&\n update.content.metadata &&\n typeof update.content.metadata === 'object'\n ) {\n mergedContent.metadata = {\n ...(existingContent.metadata as Record<string, any>),\n ...(update.content.metadata as Record<string, any>),\n };\n }\n data.content = JSON.stringify(mergedContent);\n }\n\n if (Object.keys(data).length === 0) {\n continue;\n }\n\n updates.push({ keys: { id: update.id }, data });\n\n const now = new Date();\n affectedThreads.set(targetThreadId, now);\n if (update.threadId && update.threadId !== current.threadId && current.threadId) {\n affectedThreads.set(current.threadId, now);\n }\n }\n\n if (!updates.length) {\n return existing;\n }\n\n await this.operations.batchUpdate({\n tableName: TABLE_MESSAGES,\n items: updates,\n });\n\n for (const [threadId, timestamp] of affectedThreads.entries()) {\n await this.operations.update({\n tableName: TABLE_THREADS,\n keys: { id: threadId },\n data: { updatedAt: timestamp },\n });\n }\n\n const { messages: updated } = await this.listMessagesById({ messageIds: messages.map(m => m.id) });\n return updated;\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_MEMORY_UPDATE_MESSAGES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteMessages(messageIds: string[]): Promise<void> {\n if (!messageIds.length) return;\n try {\n const placeholders = messageIds.map(() => '?').join(', ');\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT DISTINCT thread_id FROM ${formatTableName(TABLE_MESSAGES)} WHERE id IN (${placeholders})`,\n messageIds,\n );\n const threadIds = (rows as { thread_id: string | null }[])\n .map(row => row.thread_id)\n .filter((threadId): threadId is string => Boolean(threadId));\n\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_MESSAGES)} WHERE id IN (${placeholders})`,\n messageIds,\n );\n\n if (threadIds.length) {\n const threadPlaceholders = threadIds.map(() => '?').join(', ');\n const timestamp = transformToSqlValue(new Date());\n await this.pool.execute(\n `UPDATE ${formatTableName(TABLE_THREADS)} SET ${quoteIdentifier('updatedAt', 'column name')} = ? WHERE id IN (${threadPlaceholders})`,\n [timestamp, ...threadIds],\n );\n }\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_MEMORY_DELETE_MESSAGES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async cloneThread(args: StorageCloneThreadInput): Promise<StorageCloneThreadOutput> {\n const { sourceThreadId, newThreadId: providedThreadId, resourceId, title, metadata, options } = args;\n\n // Get the source thread\n const sourceThread = await this.getThreadById({ threadId: sourceThreadId });\n if (!sourceThread) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'CLONE_THREAD', 'SOURCE_NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Source thread with id ${sourceThreadId} not found`,\n details: { sourceThreadId },\n });\n }\n\n // Use provided ID or generate a new one\n const newThreadId = providedThreadId || randomUUID();\n\n // Check if the new thread ID already exists\n const existingThread = await this.getThreadById({ threadId: newThreadId });\n if (existingThread) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'CLONE_THREAD', 'THREAD_EXISTS'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Thread with id ${newThreadId} already exists`,\n details: { newThreadId },\n });\n }\n\n const connection = await this.pool.getConnection();\n try {\n await connection.beginTransaction();\n\n // Build message query with filters\n let messageQuery = `SELECT id, thread_id, content, role, type, createdAt, resourceId\n FROM ${formatTableName(TABLE_MESSAGES)} WHERE thread_id = ?`;\n const messageParams: any[] = [sourceThreadId];\n\n // Apply date filters\n if (options?.messageFilter?.startDate) {\n messageQuery += ` AND createdAt >= ?`;\n messageParams.push(transformToSqlValue(options.messageFilter.startDate));\n }\n if (options?.messageFilter?.endDate) {\n messageQuery += ` AND createdAt <= ?`;\n messageParams.push(transformToSqlValue(options.messageFilter.endDate));\n }\n\n // Apply message ID filter\n if (options?.messageFilter?.messageIds && options.messageFilter.messageIds.length > 0) {\n const placeholders = options.messageFilter.messageIds.map(() => '?').join(', ');\n messageQuery += ` AND id IN (${placeholders})`;\n messageParams.push(...options.messageFilter.messageIds);\n }\n\n messageQuery += ` ORDER BY createdAt ASC`;\n\n // Apply message limit (from most recent, so we need to reverse order for limit then sort back)\n if (options?.messageLimit && options.messageLimit > 0) {\n const limitQuery = `SELECT * FROM (${messageQuery.replace('ORDER BY createdAt ASC', 'ORDER BY createdAt DESC')} LIMIT ?) AS limited ORDER BY createdAt ASC`;\n messageParams.push(options.messageLimit);\n messageQuery = limitQuery;\n }\n\n const [sourceMessageRows] = await connection.execute<RowDataPacket[]>(messageQuery, messageParams);\n\n const now = new Date();\n\n // Determine the last message ID for clone metadata\n const lastMessageId =\n sourceMessageRows.length > 0 ? (sourceMessageRows[sourceMessageRows.length - 1] as any).id : undefined;\n\n // Create clone metadata\n const cloneMetadata: ThreadCloneMetadata = {\n sourceThreadId,\n clonedAt: now,\n ...(lastMessageId && { lastMessageId }),\n };\n\n // Create the new thread\n const newThread: StorageThreadType = {\n id: newThreadId,\n resourceId: resourceId || sourceThread.resourceId,\n title: title || (sourceThread.title ? `Clone of ${sourceThread.title}` : ''),\n metadata: {\n ...metadata,\n clone: cloneMetadata,\n },\n createdAt: now,\n updatedAt: now,\n };\n\n // Insert the new thread\n await connection.execute(\n `INSERT INTO ${formatTableName(TABLE_THREADS)} (id, resourceId, title, metadata, createdAt, updatedAt)\n VALUES (?, ?, ?, ?, ?, ?)`,\n [\n newThread.id,\n newThread.resourceId,\n newThread.title,\n newThread.metadata ? JSON.stringify(newThread.metadata) : null,\n transformToSqlValue(now),\n transformToSqlValue(now),\n ],\n );\n\n // Clone messages with new IDs\n const clonedMessages: MastraDBMessage[] = [];\n const messageIdMap: Record<string, string> = {};\n const targetResourceId = resourceId || sourceThread.resourceId;\n\n for (const sourceRow of sourceMessageRows) {\n const row = sourceRow as MessageRow;\n const newMessageId = randomUUID();\n messageIdMap[row.id] = newMessageId;\n\n let content = row.content;\n try {\n content = typeof content === 'string' ? JSON.parse(content) : content;\n } catch {\n // use content as-is\n }\n\n const msgCreatedAt = parseDateTime(row.createdAt) ?? now;\n\n await connection.execute(\n `INSERT INTO ${formatTableName(TABLE_MESSAGES)} (id, thread_id, content, createdAt, role, type, resourceId)\n VALUES (?, ?, ?, ?, ?, ?, ?)`,\n [\n newMessageId,\n newThreadId,\n typeof row.content === 'string' ? row.content : JSON.stringify(row.content),\n transformToSqlValue(msgCreatedAt),\n row.role,\n row.type || 'v2',\n targetResourceId,\n ],\n );\n\n clonedMessages.push({\n id: newMessageId,\n threadId: newThreadId,\n content: content as MastraMessageContentV2,\n role: row.role as MastraDBMessage['role'],\n type: row.type ?? undefined,\n createdAt: msgCreatedAt,\n resourceId: targetResourceId,\n });\n }\n\n await connection.commit();\n\n return {\n thread: newThread,\n clonedMessages,\n messageIdMap,\n };\n } catch (error) {\n await connection.rollback();\n if (error instanceof MastraError) {\n throw error;\n }\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CLONE_THREAD', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { sourceThreadId, newThreadId },\n },\n error,\n );\n } finally {\n connection.release();\n }\n }\n\n async listMessages(args: StorageListMessagesInput): Promise<StorageListMessagesOutput> {\n const { threadId, resourceId, filter, orderBy, page = 0, perPage: perPageInput } = args;\n const selectBy = (\n args as StorageListMessagesInput & {\n selectBy?: { include?: StorageListMessagesInput['include']; last?: number; vectorSearchString?: string };\n }\n ).selectBy;\n const include = args.include ?? selectBy?.include;\n\n // Normalize threadId to array\n const threadIds = Array.isArray(threadId) ? threadId : [threadId];\n\n if (threadIds.length === 0 || threadIds.some(id => !id.trim())) {\n throw emitValidationError('threadId must be a non-empty string or array of non-empty strings');\n }\n\n const primaryThreadId = threadIds[0]!;\n\n const normalizedPerPage = normalizePerPage(perPageInput, 40);\n const { offset, perPage } = calculatePagination(page, perPageInput, normalizedPerPage);\n\n const field = orderBy?.field ?? 'createdAt';\n const direction = (orderBy?.direction ?? 'ASC').toUpperCase() === 'DESC' ? 'DESC' : 'ASC';\n const comparator = (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 if (aValue == null && bValue == null) return a.id.localeCompare(b.id);\n if (aValue == null) return 1;\n if (bValue == null) return -1;\n if (aValue === bValue) return a.id.localeCompare(b.id);\n\n if (typeof aValue === 'number' && typeof bValue === 'number') {\n return direction === 'ASC' ? aValue - bValue : bValue - aValue;\n }\n return direction === 'ASC'\n ? String(aValue).localeCompare(String(bValue))\n : String(bValue).localeCompare(String(aValue));\n };\n\n try {\n const conditions: string[] = [];\n const params: any[] = [];\n\n if (threadIds.length === 1) {\n conditions.push(`${quoteIdentifier('thread_id', 'column name')} = ?`);\n params.push(threadIds[0]!);\n } else {\n const placeholders = threadIds.map(() => '?').join(', ');\n conditions.push(`${quoteIdentifier('thread_id', 'column name')} IN (${placeholders})`);\n params.push(...threadIds);\n }\n\n if (resourceId) {\n conditions.push(`${quoteIdentifier('resourceId', 'column name')} = ?`);\n params.push(resourceId);\n }\n\n if (filter?.dateRange?.start) {\n const startOp = filter.dateRange.startExclusive ? '>' : '>=';\n conditions.push(`${quoteIdentifier('createdAt', 'column name')} ${startOp} ?`);\n params.push(transformToSqlValue(filter.dateRange.start));\n }\n if (filter?.dateRange?.end) {\n const endOp = filter.dateRange.endExclusive ? '<' : '<=';\n conditions.push(`${quoteIdentifier('createdAt', 'column name')} ${endOp} ?`);\n params.push(transformToSqlValue(filter.dateRange.end));\n }\n\n if (selectBy?.vectorSearchString) {\n conditions.push(`${quoteIdentifier('content', 'column name')} LIKE ?`);\n params.push(`%${selectBy.vectorSearchString}%`);\n }\n\n const whereSql = conditions.length ? ` WHERE ${conditions.join(' AND ')}` : '';\n const tableName = formatTableName(TABLE_MESSAGES);\n\n // Fast path: perPage=0 with no includes returns empty immediately\n if (perPage === 0 && (!include || include.length === 0)) {\n return {\n messages: [],\n total: 0,\n page,\n perPage,\n hasMore: false,\n };\n }\n\n // Fast path: perPage=0 with includes skips COUNT and main query\n if (perPage === 0 && include && include.length > 0) {\n const includeRows = await this._getIncludedMessages({ include });\n if (!includeRows || includeRows.length === 0) {\n return {\n messages: [],\n total: 0,\n page,\n perPage,\n hasMore: false,\n };\n }\n\n const includeMessages = includeRows.map(row => this.mapMessage(row));\n const list = new MessageList();\n list.add(includeMessages, 'memory');\n const messages = list.get.all.db().sort(comparator);\n\n return {\n messages,\n total: 0,\n page,\n perPage,\n hasMore: false,\n };\n }\n\n const [countRows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT COUNT(*) as count FROM ${tableName}${whereSql}`,\n params,\n );\n const total = Number(countRows[0]?.count ?? 0);\n\n // If nothing to return and no include, short circuit\n if (total === 0 && (!include || include.length === 0)) {\n return {\n messages: [],\n total: 0,\n page,\n perPage,\n hasMore: false,\n };\n }\n\n // last takes precedence over perPage\n const lastLimit =\n selectBy?.last !== undefined\n ? typeof selectBy.last === 'number' && selectBy.last > 0\n ? selectBy.last\n : Number.MAX_SAFE_INTEGER\n : undefined;\n\n const limitValue = lastLimit !== undefined ? lastLimit : perPageInput === false ? total : normalizedPerPage;\n const safeLimit = Math.max(0, Number(limitValue));\n const safeOffset = lastLimit !== undefined ? Math.max(0, total - safeLimit) : Math.max(0, Number(offset));\n\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT id, thread_id, content, role, type, createdAt, resourceId FROM ${tableName}${whereSql} ORDER BY ${quoteIdentifier(field, 'column name')} ${direction} LIMIT ${safeLimit} OFFSET ${safeOffset}`,\n params,\n );\n\n const messagesByThread = new Map<string, MastraDBMessage[]>();\n const paginatedMain = (rows as unknown as MessageRow[]).map(row => this.mapMessage(row));\n messagesByThread.set(primaryThreadId, paginatedMain);\n\n const includeMessages = await this.collectIncludeMessages({\n threadId: primaryThreadId,\n include,\n messagesByThread,\n });\n\n const combinedMap = new Map<string, MastraDBMessage>();\n for (const msg of paginatedMain) combinedMap.set(msg.id, msg);\n for (const msg of includeMessages) combinedMap.set(msg.id, msg);\n\n const combinedMessages = Array.from(combinedMap.values()).sort(comparator);\n\n const list = new MessageList();\n list.add(combinedMessages, 'memory');\n const normalizedMessages = list.get.all.db();\n const messages = [...normalizedMessages].sort(comparator);\n\n const baseHasMore = perPageInput === false ? false : safeOffset + safeLimit < total;\n\n const threadIdSet = new Set(threadIds);\n const mainThreadMessageCount = messages.filter(\n msg => msg.threadId !== undefined && threadIdSet.has(msg.threadId),\n ).length;\n const hasMore = include && include.length ? (mainThreadMessageCount >= total ? false : baseHasMore) : baseHasMore;\n\n return {\n messages,\n total,\n page,\n perPage,\n hasMore,\n };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MYSQL_MEMORY_GET_MESSAGES_PAGINATED_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n threadId: Array.isArray(threadId) ? threadId.join(',') : threadId,\n resourceId: resourceId ?? '',\n page,\n },\n },\n error,\n );\n this.logger?.error?.(mastraError.toString());\n this.logger?.trackException?.(mastraError);\n return { messages: [], total: 0, page, perPage, hasMore: false };\n }\n }\n\n public async listMessagesByResourceId(\n args: StorageListMessagesByResourceIdInput,\n ): Promise<StorageListMessagesOutput> {\n const { resourceId, include, filter, perPage: perPageInput, page = 0, orderBy } = args;\n\n if (!resourceId || typeof resourceId !== 'string' || resourceId.trim().length === 0) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_MESSAGES', 'INVALID_QUERY'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { resourceId: resourceId ?? '' },\n },\n new Error('resourceId is required'),\n );\n }\n\n if (page < 0) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', '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 const perPage = normalizePerPage(perPageInput, 40);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n try {\n const { field, direction } = this.parseOrderBy(orderBy, 'ASC');\n\n const conditions: string[] = [];\n const params: any[] = [];\n\n conditions.push(`${quoteIdentifier('resourceId', 'column name')} = ?`);\n params.push(resourceId);\n\n if (filter?.dateRange?.start) {\n const startOp = filter.dateRange.startExclusive ? '>' : '>=';\n conditions.push(`${quoteIdentifier('createdAt', 'column name')} ${startOp} ?`);\n params.push(transformToSqlValue(filter.dateRange.start));\n }\n\n if (filter?.dateRange?.end) {\n const endOp = filter.dateRange.endExclusive ? '<' : '<=';\n conditions.push(`${quoteIdentifier('createdAt', 'column name')} ${endOp} ?`);\n params.push(transformToSqlValue(filter.dateRange.end));\n }\n\n const whereSql = `WHERE ${conditions.join(' AND ')}`;\n const tableName = formatTableName(TABLE_MESSAGES);\n\n const [countRows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT COUNT(*) as count FROM ${tableName} ${whereSql}`,\n params,\n );\n const total = Number(countRows[0]?.count ?? 0);\n\n if (total === 0 && (!include || include.length === 0)) {\n return {\n messages: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n const limitValue = perPageInput === false ? total : perPage;\n\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT id, thread_id, content, role, type, createdAt, resourceId FROM ${tableName} ${whereSql} ORDER BY ${quoteIdentifier(field, 'column name')} ${direction} LIMIT ${Number(limitValue)} OFFSET ${Number(offset)}`,\n params,\n );\n const messages: MastraDBMessage[] = (rows as unknown as MessageRow[]).map(row => this.mapMessage(row));\n\n const messageIds = new Set(messages.map(m => m.id));\n if (include && include.length > 0) {\n // For listMessagesByResourceId, resolve threadId for include items that don't have one\n const resolvedInclude = await Promise.all(\n include.map(async inc => {\n if (inc.threadId) return inc;\n // Look up the message's thread_id\n const [msgRows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT thread_id FROM ${tableName} WHERE id = ? LIMIT 1`,\n [inc.id],\n );\n const threadId = msgRows?.[0]?.thread_id as string | undefined;\n return threadId ? { ...inc, threadId } : inc;\n }),\n );\n const validInclude = resolvedInclude.filter(inc => inc.threadId);\n if (validInclude.length > 0) {\n const messagesByThread = new Map<string, MastraDBMessage[]>();\n const includeMessages = await this.collectIncludeMessages({\n threadId: validInclude[0]!.threadId!,\n include: validInclude,\n messagesByThread,\n });\n for (const includeMsg of includeMessages) {\n if (!messageIds.has(includeMsg.id)) {\n messages.push(includeMsg);\n messageIds.add(includeMsg.id);\n }\n }\n }\n }\n\n const list = new MessageList().add(messages, 'memory');\n let finalMessages = list.get.all.db();\n\n finalMessages = finalMessages.sort((a, b) => {\n const isDateField = field === 'createdAt' || field === 'updatedAt';\n const aValue = isDateField ? new Date((a as any)[field]).getTime() : (a as any)[field];\n const bValue = isDateField ? new Date((b as any)[field]).getTime() : (b as any)[field];\n\n if (typeof aValue === 'number' && typeof bValue === 'number') {\n return direction === 'ASC' ? aValue - bValue : bValue - aValue;\n }\n return direction === 'ASC'\n ? String(aValue).localeCompare(String(bValue))\n : String(bValue).localeCompare(String(aValue));\n });\n\n const hasMore = perPageInput !== false && offset + perPage < total;\n\n return {\n messages: finalMessages,\n total,\n page,\n perPage: perPageForResponse,\n hasMore,\n };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_MESSAGES', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { resourceId },\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 getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n try {\n const row = await this.operations.load<ResourceRow>({\n tableName: TABLE_RESOURCES,\n keys: { id: resourceId },\n });\n if (!row) return null;\n\n const parsedMetadata =\n typeof row.metadata === 'string'\n ? parseJSON<Record<string, unknown>>(row.metadata)\n : (row.metadata as Record<string, unknown> | null | undefined);\n\n return {\n id: row.id,\n workingMemory: row.workingMemory ?? undefined,\n metadata: parsedMetadata ?? undefined,\n createdAt: parseDateTime(row.createdAt) ?? new Date(),\n updatedAt: parseDateTime(row.updatedAt) ?? new Date(),\n } satisfies StorageResourceType;\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_MEMORY_GET_RESOURCE_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 try {\n const metadataValue =\n resource.metadata === undefined || resource.metadata === null ? null : JSON.stringify(resource.metadata);\n await this.operations.insert({\n tableName: TABLE_RESOURCES,\n record: {\n id: resource.id,\n workingMemory: resource.workingMemory ?? null,\n metadata: metadataValue,\n createdAt: resource.createdAt ?? new Date(),\n updatedAt: resource.updatedAt ?? new Date(),\n },\n });\n return resource;\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_MEMORY_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 try {\n const existing = await this.getResourceById({ resourceId });\n\n if (!existing) {\n // Create new resource if not exists\n const newResource: StorageResourceType = {\n id: resourceId,\n workingMemory: workingMemory ?? '',\n metadata: metadata ?? {},\n createdAt: new Date(),\n updatedAt: new Date(),\n };\n return await this.saveResource({ resource: newResource });\n }\n\n const mergedMetadata =\n metadata !== undefined ? { ...(existing.metadata ?? {}), ...(metadata ?? {}) } : existing.metadata;\n const metadataValue =\n metadata !== undefined ? (metadata === null ? null : JSON.stringify(mergedMetadata ?? {})) : undefined;\n\n await this.operations.update({\n tableName: TABLE_RESOURCES,\n keys: { id: resourceId },\n data: {\n ...(workingMemory !== undefined ? { workingMemory } : {}),\n ...(metadataValue !== undefined ? { metadata: metadataValue } : {}),\n updatedAt: new Date(),\n },\n });\n const updated = await this.getResourceById({ resourceId });\n if (!updated) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_RESOURCE', 'NOT_FOUND_AFTER_UPDATE'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `Resource ${resourceId} not found after update`,\n details: { resourceId },\n });\n }\n return updated;\n } catch (error) {\n if (error instanceof MastraError) {\n throw error;\n }\n throw new MastraError(\n {\n id: 'MYSQL_MEMORY_UPDATE_RESOURCE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { resourceId },\n },\n error,\n );\n }\n }\n\n // ============================================\n // Observational Memory Methods\n // ============================================\n\n async getObservationalMemory(threadId: string | null, resourceId: string): Promise<ObservationalMemoryRecord | null> {\n try {\n const lookupKey = this.getOMKey(threadId, resourceId);\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${OM_TABLE_QUOTED} WHERE ${omCol('lookupKey')} = ? ORDER BY ${omCol('generationCount')} DESC LIMIT 1`,\n [lookupKey],\n );\n if (!rows || rows.length === 0) return null;\n return this.parseOMRow(rows[0]);\n } catch (error) {\n rethrowOrWrapOM(error, '', 'GET_OBSERVATIONAL_MEMORY', { threadId, resourceId });\n }\n }\n\n async getObservationalMemoryHistory(\n threadId: string | null,\n resourceId: string,\n limit: number = 10,\n options?: ObservationalMemoryHistoryOptions,\n ): Promise<ObservationalMemoryRecord[]> {\n try {\n const lookupKey = this.getOMKey(threadId, resourceId);\n const safeLimit = Math.max(1, Math.floor(Number(limit)) || 10);\n\n const conditions: string[] = [`${omCol('lookupKey')} = ?`];\n const params: any[] = [lookupKey];\n\n if (options?.from) {\n conditions.push(`${omCol('createdAt')} >= ?`);\n params.push(transformToSqlValue(options.from));\n }\n if (options?.to) {\n conditions.push(`${omCol('createdAt')} <= ?`);\n params.push(transformToSqlValue(options.to));\n }\n\n const whereClause = conditions.join(' AND ');\n let sql = `SELECT * FROM ${OM_TABLE_QUOTED} WHERE ${whereClause} ORDER BY ${omCol('generationCount')} DESC LIMIT ${safeLimit}`;\n\n if (options?.offset != null && options.offset > 0) {\n sql += ` OFFSET ${options.offset}`;\n }\n\n const [rows] = await this.pool.execute<RowDataPacket[]>(sql, params);\n if (!rows) return [];\n return rows.map(row => this.parseOMRow(row));\n } catch (error) {\n rethrowOrWrapOM(error, '', 'GET_OBSERVATIONAL_MEMORY_HISTORY', { threadId, resourceId, limit });\n }\n }\n\n async initializeObservationalMemory(input: CreateObservationalMemoryInput): Promise<ObservationalMemoryRecord> {\n try {\n const id = randomUUID();\n const now = new Date();\n const lookupKey = this.getOMKey(input.threadId, input.resourceId);\n\n const record: ObservationalMemoryRecord = {\n id,\n scope: input.scope,\n threadId: input.threadId,\n resourceId: input.resourceId,\n createdAt: now,\n updatedAt: now,\n lastObservedAt: undefined,\n originType: 'initial',\n generationCount: 0,\n activeObservations: '',\n totalTokensObserved: 0,\n observationTokenCount: 0,\n pendingMessageTokens: 0,\n isReflecting: false,\n isObserving: false,\n isBufferingObservation: false,\n isBufferingReflection: false,\n lastBufferedAtTokens: 0,\n lastBufferedAtTime: null,\n config: input.config,\n observedTimezone: input.observedTimezone,\n };\n\n const nowSql = transformToSqlValue(now);\n const cols = [\n 'id',\n 'lookupKey',\n 'scope',\n 'resourceId',\n 'threadId',\n 'activeObservations',\n 'activeObservationsPendingUpdate',\n 'originType',\n 'config',\n 'generationCount',\n 'lastObservedAt',\n 'lastReflectionAt',\n 'pendingMessageTokens',\n 'totalTokensObserved',\n 'observationTokenCount',\n 'isObserving',\n 'isReflecting',\n 'isBufferingObservation',\n 'isBufferingReflection',\n 'lastBufferedAtTokens',\n 'lastBufferedAtTime',\n 'observedTimezone',\n 'createdAt',\n 'updatedAt',\n ]\n .map(omCol)\n .join(', ');\n const placeholders = Array.from({ length: 24 }, () => '?').join(', ');\n\n await this.pool.execute(`INSERT INTO ${OM_TABLE_QUOTED} (${cols}) VALUES (${placeholders})`, [\n id,\n lookupKey,\n input.scope,\n input.resourceId,\n input.threadId || null,\n '',\n null,\n 'initial',\n JSON.stringify(input.config),\n 0,\n null,\n null,\n 0,\n 0,\n 0,\n false,\n false,\n false,\n false,\n 0,\n null,\n input.observedTimezone || null,\n nowSql,\n nowSql,\n ]);\n\n return record;\n } catch (error) {\n rethrowOrWrapOM(error, '', 'INITIALIZE_OBSERVATIONAL_MEMORY', {\n threadId: input.threadId,\n resourceId: input.resourceId,\n });\n }\n }\n\n async updateActiveObservations(input: UpdateActiveObservationsInput): Promise<void> {\n try {\n const now = new Date();\n const observedMessageIdsJson = input.observedMessageIds ? JSON.stringify(input.observedMessageIds) : null;\n\n const [result] = await this.pool.execute(\n `UPDATE ${OM_TABLE_QUOTED} SET\n ${omCol('activeObservations')} = ?,\n ${omCol('lastObservedAt')} = ?,\n ${omCol('pendingMessageTokens')} = 0,\n ${omCol('observationTokenCount')} = ?,\n ${omCol('totalTokensObserved')} = ${omCol('totalTokensObserved')} + ?,\n ${omCol('observedMessageIds')} = ?,\n ${omCol('updatedAt')} = ?\n WHERE ${omCol('id')} = ?`,\n [\n input.observations,\n transformToSqlValue(input.lastObservedAt),\n input.tokenCount,\n input.tokenCount,\n observedMessageIdsJson,\n transformToSqlValue(now),\n input.id,\n ],\n );\n\n if ((result as ResultSetHeader).affectedRows === 0) {\n throwOMNotFound(input.id, 'UPDATE_ACTIVE_OBSERVATIONS');\n }\n } catch (error) {\n rethrowOrWrapOM(error, input.id, 'UPDATE_ACTIVE_OBSERVATIONS');\n }\n }\n\n async createReflectionGeneration(input: CreateReflectionGenerationInput): Promise<ObservationalMemoryRecord> {\n try {\n const id = randomUUID();\n const now = new Date();\n const lookupKey = this.getOMKey(input.currentRecord.threadId, input.currentRecord.resourceId);\n\n const record: ObservationalMemoryRecord = {\n id,\n scope: input.currentRecord.scope,\n threadId: input.currentRecord.threadId,\n resourceId: input.currentRecord.resourceId,\n createdAt: now,\n updatedAt: now,\n lastObservedAt: input.currentRecord.lastObservedAt,\n originType: 'reflection',\n generationCount: input.currentRecord.generationCount + 1,\n activeObservations: input.reflection,\n totalTokensObserved: input.currentRecord.totalTokensObserved,\n observationTokenCount: input.tokenCount,\n pendingMessageTokens: 0,\n isReflecting: false,\n isObserving: false,\n isBufferingObservation: false,\n isBufferingReflection: false,\n lastBufferedAtTokens: 0,\n lastBufferedAtTime: null,\n config: input.currentRecord.config,\n metadata: input.currentRecord.metadata,\n observedTimezone: input.currentRecord.observedTimezone,\n };\n\n const nowSql = transformToSqlValue(now);\n const cols = [\n 'id',\n 'lookupKey',\n 'scope',\n 'resourceId',\n 'threadId',\n 'activeObservations',\n 'activeObservationsPendingUpdate',\n 'originType',\n 'config',\n 'generationCount',\n 'lastObservedAt',\n 'lastReflectionAt',\n 'pendingMessageTokens',\n 'totalTokensObserved',\n 'observationTokenCount',\n 'isObserving',\n 'isReflecting',\n 'isBufferingObservation',\n 'isBufferingReflection',\n 'lastBufferedAtTokens',\n 'lastBufferedAtTime',\n 'observedTimezone',\n 'createdAt',\n 'updatedAt',\n ]\n .map(omCol)\n .join(', ');\n const placeholders = Array.from({ length: 24 }, () => '?').join(', ');\n\n await this.pool.execute(`INSERT INTO ${OM_TABLE_QUOTED} (${cols}) VALUES (${placeholders})`, [\n id,\n lookupKey,\n record.scope,\n record.resourceId,\n record.threadId || null,\n input.reflection,\n null,\n 'reflection',\n JSON.stringify(record.config),\n input.currentRecord.generationCount + 1,\n record.lastObservedAt ? transformToSqlValue(record.lastObservedAt) : null,\n nowSql,\n record.pendingMessageTokens,\n record.totalTokensObserved,\n record.observationTokenCount,\n false,\n false,\n false,\n false,\n 0,\n null,\n record.observedTimezone || null,\n nowSql,\n nowSql,\n ]);\n\n return record;\n } catch (error) {\n rethrowOrWrapOM(error, input.currentRecord.id, 'CREATE_REFLECTION_GENERATION', {\n currentRecordId: input.currentRecord.id,\n });\n }\n }\n\n async setReflectingFlag(id: string, isReflecting: boolean): Promise<void> {\n await this.updateOMFlag(id, 'isReflecting', isReflecting, 'SET_REFLECTING_FLAG');\n }\n\n async setObservingFlag(id: string, isObserving: boolean): Promise<void> {\n await this.updateOMFlag(id, 'isObserving', isObserving, 'SET_OBSERVING_FLAG');\n }\n\n async setBufferingObservationFlag(id: string, isBuffering: boolean, lastBufferedAtTokens?: number): Promise<void> {\n try {\n const nowSql = transformToSqlValue(new Date());\n const sets = [\n `${omCol('isBufferingObservation')} = ?`,\n ...(lastBufferedAtTokens !== undefined ? [`${omCol('lastBufferedAtTokens')} = ?`] : []),\n `${omCol('updatedAt')} = ?`,\n ].join(', ');\n const params = [isBuffering, ...(lastBufferedAtTokens !== undefined ? [lastBufferedAtTokens] : []), nowSql, id];\n\n const [result] = await this.pool.execute(\n `UPDATE ${OM_TABLE_QUOTED} SET ${sets} WHERE ${omCol('id')} = ?`,\n params,\n );\n\n if ((result as ResultSetHeader).affectedRows === 0) {\n throwOMNotFound(id, 'SET_BUFFERING_OBSERVATION_FLAG');\n }\n } catch (error) {\n rethrowOrWrapOM(error, id, 'SET_BUFFERING_OBSERVATION_FLAG');\n }\n }\n\n async setBufferingReflectionFlag(id: string, isBuffering: boolean): Promise<void> {\n await this.updateOMFlag(id, 'isBufferingReflection', isBuffering, 'SET_BUFFERING_REFLECTION_FLAG');\n }\n\n async clearObservationalMemory(threadId: string | null, resourceId: string): Promise<void> {\n try {\n const lookupKey = this.getOMKey(threadId, resourceId);\n await this.pool.execute(`DELETE FROM ${OM_TABLE_QUOTED} WHERE ${omCol('lookupKey')} = ?`, [lookupKey]);\n } catch (error) {\n rethrowOrWrapOM(error, '', 'CLEAR_OBSERVATIONAL_MEMORY', { threadId, resourceId });\n }\n }\n\n async setPendingMessageTokens(id: string, tokenCount: number): Promise<void> {\n try {\n const [result] = await this.pool.execute(\n `UPDATE ${OM_TABLE_QUOTED} SET\n ${omCol('pendingMessageTokens')} = ?,\n ${omCol('updatedAt')} = ?\n WHERE ${omCol('id')} = ?`,\n [tokenCount, transformToSqlValue(new Date()), id],\n );\n\n if ((result as ResultSetHeader).affectedRows === 0) {\n throwOMNotFound(id, 'SET_PENDING_MESSAGE_TOKENS');\n }\n } catch (error) {\n rethrowOrWrapOM(error, id, 'SET_PENDING_MESSAGE_TOKENS');\n }\n }\n\n async updateBufferedObservations(input: UpdateBufferedObservationsInput): Promise<void> {\n try {\n const connection = await this.pool.getConnection();\n try {\n await connection.beginTransaction();\n\n const nowSql = transformToSqlValue(new Date());\n\n const [currentRows] = await connection.execute<RowDataPacket[]>(\n `SELECT ${omCol('bufferedObservationChunks')} FROM ${OM_TABLE_QUOTED} WHERE ${omCol('id')} = ? FOR UPDATE`,\n [input.id],\n );\n\n if (!currentRows || currentRows.length === 0) {\n throwOMNotFound(input.id, 'UPDATE_BUFFERED_OBSERVATIONS');\n }\n\n const existingChunks = parseBufferedChunks(currentRows[0]!.bufferedObservationChunks);\n\n const newChunk: BufferedObservationChunk = {\n id: `ombuf-${randomUUID()}`,\n cycleId: input.chunk.cycleId,\n observations: input.chunk.observations,\n tokenCount: input.chunk.tokenCount,\n messageIds: input.chunk.messageIds,\n messageTokens: input.chunk.messageTokens,\n lastObservedAt: input.chunk.lastObservedAt,\n createdAt: new Date(),\n suggestedContinuation: input.chunk.suggestedContinuation,\n currentTask: input.chunk.currentTask,\n };\n\n const newChunks = [...existingChunks, newChunk];\n const lastBufferedAtTime = input.lastBufferedAtTime ? transformToSqlValue(input.lastBufferedAtTime) : null;\n\n const [result] = await connection.execute(\n `UPDATE ${OM_TABLE_QUOTED} SET\n ${omCol('bufferedObservationChunks')} = ?,\n ${omCol('lastBufferedAtTime')} = COALESCE(?, ${omCol('lastBufferedAtTime')}),\n ${omCol('updatedAt')} = ?\n WHERE ${omCol('id')} = ?`,\n [JSON.stringify(newChunks), lastBufferedAtTime, nowSql, input.id],\n );\n\n if ((result as ResultSetHeader).affectedRows === 0) {\n throwOMNotFound(input.id, 'UPDATE_BUFFERED_OBSERVATIONS');\n }\n\n await connection.commit();\n } catch (error) {\n await connection.rollback();\n throw error;\n } finally {\n connection.release();\n }\n } catch (error) {\n rethrowOrWrapOM(error, input.id, 'UPDATE_BUFFERED_OBSERVATIONS');\n }\n }\n\n async swapBufferedToActive(input: SwapBufferedToActiveInput): Promise<SwapBufferedToActiveResult> {\n const connection = await this.pool.getConnection();\n try {\n await connection.beginTransaction();\n\n const nowSql = transformToSqlValue(new Date());\n\n const [currentRows] = await connection.execute<RowDataPacket[]>(\n `SELECT * FROM ${OM_TABLE_QUOTED} WHERE ${omCol('id')} = ? FOR UPDATE`,\n [input.id],\n );\n\n if (!currentRows || currentRows.length === 0) {\n throwOMNotFound(input.id, 'SWAP_BUFFERED_TO_ACTIVE');\n }\n\n const row = currentRows[0]!;\n const chunks = parseBufferedChunks(row.bufferedObservationChunks);\n\n if (chunks.length === 0) {\n await connection.commit();\n return {\n chunksActivated: 0,\n messageTokensActivated: 0,\n observationTokensActivated: 0,\n messagesActivated: 0,\n activatedCycleIds: [],\n activatedMessageIds: [],\n };\n }\n\n // Calculate target message tokens to activate\n const retentionFloor = input.messageTokensThreshold * (1 - input.activationRatio);\n const targetMessageTokens = Math.max(0, input.currentPendingTokens - retentionFloor);\n\n // Find the closest chunk boundary to the target\n let cumulativeMessageTokens = 0;\n let bestOverBoundary = 0;\n let bestOverTokens = 0;\n let bestUnderBoundary = 0;\n let bestUnderTokens = 0;\n\n for (let i = 0; i < chunks.length; i++) {\n cumulativeMessageTokens += chunks[i]!.messageTokens ?? 0;\n const boundary = i + 1;\n\n if (cumulativeMessageTokens >= targetMessageTokens) {\n if (bestOverBoundary === 0 || cumulativeMessageTokens < bestOverTokens) {\n bestOverBoundary = boundary;\n bestOverTokens = cumulativeMessageTokens;\n }\n } else {\n if (cumulativeMessageTokens > bestUnderTokens) {\n bestUnderBoundary = boundary;\n bestUnderTokens = cumulativeMessageTokens;\n }\n }\n }\n\n const maxOvershoot = retentionFloor * 0.95;\n const overshoot = bestOverTokens - targetMessageTokens;\n const remainingAfterOver = input.currentPendingTokens - bestOverTokens;\n const remainingAfterUnder = input.currentPendingTokens - bestUnderTokens;\n const minRemaining = Math.min(1000, retentionFloor);\n\n let chunksToActivate: number;\n if (input.forceMaxActivation && bestOverBoundary > 0 && remainingAfterOver >= minRemaining) {\n chunksToActivate = bestOverBoundary;\n } else if (bestOverBoundary > 0 && overshoot <= maxOvershoot && remainingAfterOver >= minRemaining) {\n chunksToActivate = bestOverBoundary;\n } else if (bestUnderBoundary > 0 && remainingAfterUnder >= minRemaining) {\n chunksToActivate = bestUnderBoundary;\n } else if (bestOverBoundary > 0) {\n chunksToActivate = bestOverBoundary;\n } else {\n chunksToActivate = 1;\n }\n\n // Split chunks\n const activatedChunks = chunks.slice(0, chunksToActivate);\n const remainingChunks = chunks.slice(chunksToActivate);\n\n // Combine activated observations\n const activatedContent = activatedChunks.map(c => c.observations).join('\\n\\n');\n const activatedTokens = activatedChunks.reduce((sum, c) => sum + c.tokenCount, 0);\n const activatedMessageTokens = activatedChunks.reduce((sum, c) => sum + (c.messageTokens ?? 0), 0);\n const activatedMessageCount = activatedChunks.reduce((sum, c) => sum + c.messageIds.length, 0);\n const activatedCycleIds = activatedChunks.map(c => c.cycleId).filter((cid): cid is string => !!cid);\n const activatedMessageIds = activatedChunks.flatMap(c => c.messageIds ?? []);\n\n // Derive lastObservedAt from the latest activated chunk\n const latestChunk = activatedChunks[activatedChunks.length - 1];\n const lastObservedAt =\n input.lastObservedAt ?? (latestChunk?.lastObservedAt ? new Date(latestChunk.lastObservedAt) : new Date());\n const lastObservedAtSql = transformToSqlValue(lastObservedAt);\n\n // Get existing values\n const existingActive = (row.activeObservations as string) || '';\n const existingTokenCount = Number(row.observationTokenCount || 0);\n\n // Calculate new values\n const newActive = existingActive ? `${existingActive}\\n\\n${activatedContent}` : activatedContent;\n const newTokenCount = existingTokenCount + activatedTokens;\n\n // Decrement pending message tokens (clamped to zero)\n const existingPending = Number(row.pendingMessageTokens || 0);\n const newPending = Math.max(0, existingPending - activatedMessageTokens);\n\n await connection.execute(\n `UPDATE ${OM_TABLE_QUOTED} SET\n ${omCol('activeObservations')} = ?,\n ${omCol('observationTokenCount')} = ?,\n ${omCol('pendingMessageTokens')} = ?,\n ${omCol('bufferedObservationChunks')} = ?,\n ${omCol('lastObservedAt')} = ?,\n ${omCol('updatedAt')} = ?\n WHERE ${omCol('id')} = ?`,\n [\n newActive,\n newTokenCount,\n newPending,\n remainingChunks.length > 0 ? JSON.stringify(remainingChunks) : null,\n lastObservedAtSql,\n nowSql,\n input.id,\n ],\n );\n\n await connection.commit();\n\n const latestChunkHints = activatedChunks[activatedChunks.length - 1];\n\n return {\n chunksActivated: activatedChunks.length,\n messageTokensActivated: activatedMessageTokens,\n observationTokensActivated: activatedTokens,\n messagesActivated: activatedMessageCount,\n activatedCycleIds,\n activatedMessageIds,\n observations: activatedContent,\n perChunk: activatedChunks.map(c => ({\n cycleId: c.cycleId ?? '',\n messageTokens: c.messageTokens ?? 0,\n observationTokens: c.tokenCount,\n messageCount: c.messageIds.length,\n observations: c.observations,\n })),\n suggestedContinuation: latestChunkHints?.suggestedContinuation ?? undefined,\n currentTask: latestChunkHints?.currentTask ?? undefined,\n };\n } catch (error) {\n await connection.rollback();\n rethrowOrWrapOM(error, input.id, 'SWAP_BUFFERED_TO_ACTIVE');\n } finally {\n connection.release();\n }\n }\n\n async updateBufferedReflection(input: UpdateBufferedReflectionInput): Promise<void> {\n try {\n const nowSql = transformToSqlValue(new Date());\n const br = omCol('bufferedReflection');\n\n const [result] = await this.pool.execute(\n `UPDATE ${OM_TABLE_QUOTED} SET\n ${br} = CASE\n WHEN ${br} IS NOT NULL AND ${br} != ''\n THEN CONCAT(${br}, CHAR(10), CHAR(10), ?)\n ELSE ?\n END,\n ${omCol('bufferedReflectionTokens')} = COALESCE(${omCol('bufferedReflectionTokens')}, 0) + ?,\n ${omCol('bufferedReflectionInputTokens')} = COALESCE(${omCol('bufferedReflectionInputTokens')}, 0) + ?,\n ${omCol('reflectedObservationLineCount')} = ?,\n ${omCol('updatedAt')} = ?\n WHERE ${omCol('id')} = ?`,\n [\n input.reflection,\n input.reflection,\n input.tokenCount,\n input.inputTokenCount,\n input.reflectedObservationLineCount,\n nowSql,\n input.id,\n ],\n );\n\n if ((result as ResultSetHeader).affectedRows === 0) {\n throwOMNotFound(input.id, 'UPDATE_BUFFERED_REFLECTION');\n }\n } catch (error) {\n rethrowOrWrapOM(error, input.id, 'UPDATE_BUFFERED_REFLECTION');\n }\n }\n\n async swapBufferedReflectionToActive(input: SwapBufferedReflectionToActiveInput): Promise<ObservationalMemoryRecord> {\n try {\n const [currentRows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${OM_TABLE_QUOTED} WHERE ${omCol('id')} = ?`,\n [input.currentRecord.id],\n );\n\n if (!currentRows || currentRows.length === 0) {\n throwOMNotFound(input.currentRecord.id, 'SWAP_BUFFERED_REFLECTION_TO_ACTIVE');\n }\n\n const row = currentRows[0]!;\n const bufferedReflection = (row.bufferedReflection as string) || '';\n const reflectedLineCount = Number(row.reflectedObservationLineCount || 0);\n\n if (!bufferedReflection) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'SWAP_BUFFERED_REFLECTION_TO_ACTIVE', 'NO_CONTENT'),\n text: 'No buffered reflection to swap',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { id: input.currentRecord.id },\n });\n }\n\n const currentObservations = (row.activeObservations as string) || '';\n const unreflectedContent = currentObservations.split('\\n').slice(reflectedLineCount).join('\\n').trim();\n\n const newObservations = unreflectedContent\n ? `${bufferedReflection}\\n\\n${unreflectedContent}`\n : bufferedReflection;\n\n const newRecord = await this.createReflectionGeneration({\n currentRecord: input.currentRecord,\n reflection: newObservations,\n tokenCount: input.tokenCount,\n });\n\n const nowSql = transformToSqlValue(new Date());\n await this.pool.execute(\n `UPDATE ${OM_TABLE_QUOTED} SET\n ${omCol('bufferedReflection')} = NULL,\n ${omCol('bufferedReflectionTokens')} = NULL,\n ${omCol('bufferedReflectionInputTokens')} = NULL,\n ${omCol('reflectedObservationLineCount')} = NULL,\n ${omCol('updatedAt')} = ?\n WHERE ${omCol('id')} = ?`,\n [nowSql, input.currentRecord.id],\n );\n\n return newRecord;\n } catch (error) {\n rethrowOrWrapOM(error, input.currentRecord.id, 'SWAP_BUFFERED_REFLECTION_TO_ACTIVE');\n }\n }\n\n private async updateOMFlag(id: string, column: string, value: boolean, operation: string): Promise<void> {\n try {\n const [result] = await this.pool.execute(\n `UPDATE ${OM_TABLE_QUOTED} SET ${omCol(column)} = ?, ${omCol('updatedAt')} = ? WHERE ${omCol('id')} = ?`,\n [value, transformToSqlValue(new Date()), id],\n );\n\n if ((result as ResultSetHeader).affectedRows === 0) {\n throwOMNotFound(id, operation);\n }\n } catch (error) {\n rethrowOrWrapOM(error, id, operation);\n }\n }\n\n private getOMKey(threadId: string | null, resourceId: string): string {\n return threadId ? `thread:${threadId}` : `resource:${resourceId}`;\n }\n\n private parseOMRow(row: any): ObservationalMemoryRecord {\n return {\n id: row.id,\n scope: row.scope,\n threadId: row.threadId || null,\n resourceId: row.resourceId,\n createdAt: parseDateTime(row.createdAt) ?? new Date(),\n updatedAt: parseDateTime(row.updatedAt) ?? new Date(),\n lastObservedAt: row.lastObservedAt ? parseDateTime(row.lastObservedAt) : undefined,\n originType: row.originType || 'initial',\n generationCount: Number(row.generationCount || 0),\n activeObservations: row.activeObservations || '',\n bufferedObservationChunks: parseJSONColumn<BufferedObservationChunk[]>(row.bufferedObservationChunks),\n bufferedObservations: row.activeObservationsPendingUpdate || undefined,\n bufferedObservationTokens: row.bufferedObservationTokens ? Number(row.bufferedObservationTokens) : undefined,\n bufferedMessageIds: undefined,\n bufferedReflection: row.bufferedReflection || undefined,\n bufferedReflectionTokens: row.bufferedReflectionTokens ? Number(row.bufferedReflectionTokens) : undefined,\n bufferedReflectionInputTokens: row.bufferedReflectionInputTokens\n ? Number(row.bufferedReflectionInputTokens)\n : undefined,\n reflectedObservationLineCount: row.reflectedObservationLineCount\n ? Number(row.reflectedObservationLineCount)\n : undefined,\n totalTokensObserved: Number(row.totalTokensObserved || 0),\n observationTokenCount: Number(row.observationTokenCount || 0),\n pendingMessageTokens: Number(row.pendingMessageTokens || 0),\n isReflecting: parseMySQLBool(row.isReflecting),\n isObserving: parseMySQLBool(row.isObserving),\n isBufferingObservation: parseMySQLBool(row.isBufferingObservation),\n isBufferingReflection: parseMySQLBool(row.isBufferingReflection),\n lastBufferedAtTokens:\n typeof row.lastBufferedAtTokens === 'number'\n ? row.lastBufferedAtTokens\n : parseInt(String(row.lastBufferedAtTokens ?? '0'), 10) || 0,\n lastBufferedAtTime: row.lastBufferedAtTime ? (parseDateTime(row.lastBufferedAtTime) ?? null) : null,\n config: parseJSONColumn(row.config) ?? {},\n metadata: parseJSONColumn(row.metadata),\n observedMessageIds: parseJSONColumn<string[]>(row.observedMessageIds),\n observedTimezone: row.observedTimezone || undefined,\n };\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n createStorageErrorId,\n listTracesArgsSchema,\n ObservabilityStorage,\n SPAN_SCHEMA,\n TABLE_SCHEMAS,\n TABLE_SPANS,\n toTraceSpans,\n TraceStatus,\n} from '@mastra/core/storage';\nimport type {\n SpanRecord,\n ListTracesArgs,\n ListTracesResponse,\n TracingStorageStrategy,\n UpdateSpanArgs,\n BatchDeleteTracesArgs,\n BatchUpdateSpansArgs,\n BatchCreateSpansArgs,\n CreateSpanArgs,\n CreateIndexOptions,\n GetSpanArgs,\n GetSpanResponse,\n GetRootSpanArgs,\n GetRootSpanResponse,\n GetTraceArgs,\n GetTraceResponse,\n GetTraceLightResponse,\n LightSpanRecord,\n} from '@mastra/core/storage';\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL, generateIndexSQL } from '../operations';\nimport { formatTableName, quoteIdentifier, transformFromSqlRow } from '../utils';\n\nconst JSON_SPAN_FIELDS = ['input', 'output', 'attributes', 'metadata', 'error', 'links', 'scope', 'tags'] as const;\n\nfunction serializeJsonFields(source: Record<string, any>): Record<string, any> {\n const result: Record<string, any> = {};\n for (const field of JSON_SPAN_FIELDS) {\n if (field in source && source[field] !== undefined) {\n result[field] = source[field] !== null ? JSON.stringify(source[field]) : null;\n }\n }\n return result;\n}\n\nexport class ObservabilityMySQL extends ObservabilityStorage {\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n static readonly MANAGED_TABLES = [TABLE_SPANS] as const;\n\n constructor({\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx =>\n (ObservabilityMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table),\n );\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({ tableName: TABLE_SPANS, schema: SPAN_SCHEMA });\n await this.operations.alterTable({\n tableName: TABLE_SPANS,\n schema: SPAN_SCHEMA,\n ifNotExists: Object.keys(SPAN_SCHEMA),\n });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n static getDefaultIndexDefs(prefix: string = ''): CreateIndexOptions[] {\n return [\n {\n name: `${prefix}mastra_ai_spans_traceid_startedat_idx`,\n table: TABLE_SPANS,\n columns: ['traceId', 'startedAt DESC'],\n },\n {\n name: `${prefix}mastra_ai_spans_parentspanid_startedat_idx`,\n table: TABLE_SPANS,\n columns: ['parentSpanId', 'startedAt DESC'],\n },\n {\n name: `${prefix}mastra_ai_spans_name_idx`,\n table: TABLE_SPANS,\n columns: ['name'],\n },\n {\n name: `${prefix}mastra_ai_spans_spantype_startedat_idx`,\n table: TABLE_SPANS,\n columns: ['spanType', 'startedAt DESC'],\n },\n {\n name: `${prefix}mastra_ai_spans_root_spans_idx`,\n table: TABLE_SPANS,\n columns: ['startedAt DESC'],\n },\n ];\n }\n\n static getExportDDL(): string[] {\n const statements: string[] = [];\n\n statements.push(\n generateTableSQL({\n tableName: TABLE_SPANS,\n schema: TABLE_SCHEMAS[TABLE_SPANS],\n }),\n );\n\n for (const idx of ObservabilityMySQL.getDefaultIndexDefs()) {\n statements.push(generateIndexSQL(idx));\n }\n\n return statements;\n }\n\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return ObservabilityMySQL.getDefaultIndexDefs('');\n }\n\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n for (const indexDef of this.getDefaultIndexDefinitions()) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.operations.clearTable({ tableName: TABLE_SPANS });\n }\n\n public override get tracingStrategy(): {\n preferred: TracingStorageStrategy;\n supported: TracingStorageStrategy[];\n } {\n return {\n preferred: 'batch-with-updates',\n supported: ['batch-with-updates', 'insert-only'],\n };\n }\n\n async createSpan(args: CreateSpanArgs): Promise<void> {\n const { span } = args;\n try {\n const now = new Date();\n const record = {\n ...span,\n ...serializeJsonFields(span),\n createdAt: now,\n updatedAt: now,\n };\n await this.operations.insert({ tableName: TABLE_SPANS, record });\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_SPAN', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: {\n spanId: span.spanId,\n traceId: span.traceId,\n spanType: span.spanType,\n name: span.name,\n },\n },\n error,\n );\n }\n }\n\n async getSpan(args: GetSpanArgs): Promise<GetSpanResponse | null> {\n const { traceId, spanId } = args;\n try {\n const rows = await this.operations.loadMany<SpanRecord>({\n tableName: TABLE_SPANS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('traceId', 'column name')} = ? AND ${quoteIdentifier('spanId', 'column name')} = ?`,\n args: [traceId, spanId],\n },\n limit: 1,\n });\n\n if (!rows || rows.length === 0) {\n return null;\n }\n\n return { span: rows[0]! };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_SPAN', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { traceId, spanId },\n },\n error,\n );\n }\n }\n\n async getRootSpan(args: GetRootSpanArgs): Promise<GetRootSpanResponse | null> {\n const { traceId } = args;\n try {\n const rows = await this.operations.loadMany<SpanRecord>({\n tableName: TABLE_SPANS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('traceId', 'column name')} = ? AND ${quoteIdentifier('parentSpanId', 'column name')} IS NULL`,\n args: [traceId],\n },\n limit: 1,\n });\n\n if (!rows || rows.length === 0) {\n return null;\n }\n\n return { span: rows[0]! };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_ROOT_SPAN', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { traceId },\n },\n error,\n );\n }\n }\n\n async getTrace(args: GetTraceArgs): Promise<GetTraceResponse | null> {\n const { traceId } = args;\n try {\n const spans = await this.operations.loadMany<SpanRecord>({\n tableName: TABLE_SPANS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('traceId', 'column name')} = ?`,\n args: [traceId],\n },\n orderBy: `${quoteIdentifier('startedAt', 'column name')} ASC`,\n });\n\n if (!spans || spans.length === 0) {\n return null;\n }\n\n return {\n traceId,\n spans,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_TRACE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { traceId },\n },\n error,\n );\n }\n }\n\n async getStructure(args: GetTraceArgs): Promise<GetTraceLightResponse | null> {\n const { traceId } = args;\n try {\n const spans = await this.operations.loadMany<LightSpanRecord>({\n tableName: TABLE_SPANS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('traceId', 'column name')} = ?`,\n args: [traceId],\n },\n orderBy: `${quoteIdentifier('startedAt', 'column name')} ASC`,\n });\n\n if (!spans || spans.length === 0) {\n return null;\n }\n\n // Strip heavy fields (input, output, attributes, metadata, tags, links) for lightweight response\n const lightSpans: LightSpanRecord[] = spans.map(span => ({\n traceId: span.traceId,\n spanId: span.spanId,\n parentSpanId: span.parentSpanId,\n name: span.name,\n entityType: span.entityType,\n entityId: span.entityId,\n entityName: span.entityName,\n spanType: span.spanType,\n error: span.error,\n isEvent: span.isEvent,\n startedAt: span.startedAt,\n endedAt: span.endedAt,\n createdAt: span.createdAt,\n updatedAt: span.updatedAt,\n }));\n\n return {\n traceId,\n spans: lightSpans,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_STRUCTURE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { traceId },\n },\n error,\n );\n }\n }\n\n async updateSpan(args: UpdateSpanArgs): Promise<void> {\n const { traceId, spanId, updates } = args;\n try {\n const data: Record<string, any> = {\n ...updates,\n ...serializeJsonFields(updates),\n updatedAt: new Date(),\n };\n\n await this.operations.update({\n tableName: TABLE_SPANS,\n keys: { spanId, traceId },\n data,\n });\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'UPDATE_SPAN', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { spanId, traceId },\n },\n error,\n );\n }\n }\n\n async listTraces(args: ListTracesArgs): Promise<ListTracesResponse> {\n const { filters, pagination, orderBy } = listTracesArgsSchema.parse(args);\n const { page, perPage } = pagination;\n\n const tbl = formatTableName(TABLE_SPANS);\n\n try {\n const conditions: string[] = [`${quoteIdentifier('parentSpanId', 'column name')} IS NULL`];\n const queryArgs: any[] = [];\n\n if (filters) {\n // Date range filters\n if (filters.startedAt?.start) {\n conditions.push(`${quoteIdentifier('startedAt', 'column name')} >= ?`);\n queryArgs.push(filters.startedAt.start);\n }\n if (filters.startedAt?.end) {\n conditions.push(`${quoteIdentifier('startedAt', 'column name')} <= ?`);\n queryArgs.push(filters.startedAt.end);\n }\n if (filters.endedAt?.start) {\n conditions.push(`${quoteIdentifier('endedAt', 'column name')} >= ?`);\n queryArgs.push(filters.endedAt.start);\n }\n if (filters.endedAt?.end) {\n conditions.push(`${quoteIdentifier('endedAt', 'column name')} <= ?`);\n queryArgs.push(filters.endedAt.end);\n }\n\n // Span type filter\n if (filters.spanType !== undefined) {\n conditions.push(`${quoteIdentifier('spanType', 'column name')} = ?`);\n queryArgs.push(filters.spanType);\n }\n\n // Entity filters\n if (filters.entityType !== undefined) {\n conditions.push(`${quoteIdentifier('entityType', 'column name')} = ?`);\n queryArgs.push(filters.entityType);\n }\n if (filters.entityId !== undefined) {\n conditions.push(`${quoteIdentifier('entityId', 'column name')} = ?`);\n queryArgs.push(filters.entityId);\n }\n if (filters.entityName !== undefined) {\n conditions.push(`${quoteIdentifier('entityName', 'column name')} = ?`);\n queryArgs.push(filters.entityName);\n }\n\n // Identity & tenancy filters\n if (filters.userId !== undefined) {\n conditions.push(`${quoteIdentifier('userId', 'column name')} = ?`);\n queryArgs.push(filters.userId);\n }\n if (filters.organizationId !== undefined) {\n conditions.push(`${quoteIdentifier('organizationId', 'column name')} = ?`);\n queryArgs.push(filters.organizationId);\n }\n if (filters.resourceId !== undefined) {\n conditions.push(`${quoteIdentifier('resourceId', 'column name')} = ?`);\n queryArgs.push(filters.resourceId);\n }\n\n // Correlation ID filters\n if (filters.runId !== undefined) {\n conditions.push(`${quoteIdentifier('runId', 'column name')} = ?`);\n queryArgs.push(filters.runId);\n }\n if (filters.sessionId !== undefined) {\n conditions.push(`${quoteIdentifier('sessionId', 'column name')} = ?`);\n queryArgs.push(filters.sessionId);\n }\n if (filters.threadId !== undefined) {\n conditions.push(`${quoteIdentifier('threadId', 'column name')} = ?`);\n queryArgs.push(filters.threadId);\n }\n if (filters.requestId !== undefined) {\n conditions.push(`${quoteIdentifier('requestId', 'column name')} = ?`);\n queryArgs.push(filters.requestId);\n }\n\n // Deployment context filters\n if (filters.environment !== undefined) {\n conditions.push(`${quoteIdentifier('environment', 'column name')} = ?`);\n queryArgs.push(filters.environment);\n }\n if (filters.source !== undefined) {\n conditions.push(`${quoteIdentifier('source', 'column name')} = ?`);\n queryArgs.push(filters.source);\n }\n if (filters.serviceName !== undefined) {\n conditions.push(`${quoteIdentifier('serviceName', 'column name')} = ?`);\n queryArgs.push(filters.serviceName);\n }\n\n // Scope filter (JSON containment - MySQL uses JSON_EXTRACT)\n if (filters.scope != null) {\n for (const [key, value] of Object.entries(filters.scope)) {\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(key)) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'LIST_TRACES', 'INVALID_FILTER_KEY'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { key },\n });\n }\n conditions.push(`JSON_EXTRACT(${quoteIdentifier('scope', 'column name')}, '$.${key}') = ?`);\n queryArgs.push(typeof value === 'string' ? value : JSON.stringify(value));\n }\n }\n\n // Metadata filter (JSON containment)\n if (filters.metadata != null) {\n for (const [key, value] of Object.entries(filters.metadata)) {\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(key)) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'LIST_TRACES', 'INVALID_FILTER_KEY'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { key },\n });\n }\n if (typeof value === 'string') {\n conditions.push(\n `JSON_UNQUOTE(JSON_EXTRACT(${quoteIdentifier('metadata', 'column name')}, '$.${key}')) = ?`,\n );\n queryArgs.push(value);\n } else {\n conditions.push(\n `JSON_EXTRACT(${quoteIdentifier('metadata', 'column name')}, '$.${key}') = CAST(? AS JSON)`,\n );\n queryArgs.push(JSON.stringify(value));\n }\n }\n }\n\n // Tags filter (all tags must be present - MySQL uses JSON_CONTAINS)\n if (filters.tags != null && filters.tags.length > 0) {\n for (const tag of filters.tags) {\n conditions.push(`JSON_CONTAINS(${quoteIdentifier('tags', 'column name')}, ?, '$')`);\n queryArgs.push(JSON.stringify(tag));\n }\n }\n\n // Status filter (derived from error and endedAt)\n if (filters.status !== undefined) {\n switch (filters.status) {\n case TraceStatus.ERROR:\n conditions.push(`${quoteIdentifier('error', 'column name')} IS NOT NULL`);\n break;\n case TraceStatus.RUNNING:\n conditions.push(\n `${quoteIdentifier('endedAt', 'column name')} IS NULL AND ${quoteIdentifier('error', 'column name')} IS NULL`,\n );\n break;\n case TraceStatus.SUCCESS:\n conditions.push(\n `${quoteIdentifier('endedAt', 'column name')} IS NOT NULL AND ${quoteIdentifier('error', 'column name')} IS NULL`,\n );\n break;\n }\n }\n\n // hasChildError filter (requires subquery)\n if (filters.hasChildError !== undefined) {\n if (filters.hasChildError) {\n conditions.push(`EXISTS (\n SELECT 1 FROM ${tbl} c\n WHERE c.${quoteIdentifier('traceId', 'column name')} = ${tbl}.${quoteIdentifier('traceId', 'column name')}\n AND c.${quoteIdentifier('parentSpanId', 'column name')} IS NOT NULL\n AND c.${quoteIdentifier('error', 'column name')} IS NOT NULL\n )`);\n } else {\n conditions.push(`NOT EXISTS (\n SELECT 1 FROM ${tbl} c\n WHERE c.${quoteIdentifier('traceId', 'column name')} = ${tbl}.${quoteIdentifier('traceId', 'column name')}\n AND c.${quoteIdentifier('parentSpanId', 'column name')} IS NOT NULL\n AND c.${quoteIdentifier('error', 'column name')} IS NOT NULL\n )`);\n }\n }\n }\n\n const whereClause = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '';\n\n // Order by clause with proper NULL handling for endedAt\n // MySQL's natural behavior: NULLs are \"smaller\" than any value\n // - ASC: NULLs first (natural)\n // - DESC: NULLs last (natural)\n // We need CASE WHEN workarounds for endedAt to get desired ordering\n const sortField = quoteIdentifier(orderBy.field, 'column name');\n const sortDirection = orderBy.direction;\n let orderByClause: string;\n if (orderBy.field === 'endedAt') {\n orderByClause =\n sortDirection === 'DESC'\n ? `CASE WHEN ${sortField} IS NULL THEN 0 ELSE 1 END, ${sortField} DESC`\n : `CASE WHEN ${sortField} IS NULL THEN 1 ELSE 0 END, ${sortField} ASC`;\n } else {\n orderByClause = `${sortField} ${sortDirection}`;\n }\n\n // Get total count\n const count = await this.operations.loadTotalCount({\n tableName: TABLE_SPANS,\n whereClause: { sql: whereClause, args: queryArgs },\n });\n\n if (count === 0) {\n return {\n pagination: {\n total: 0,\n page,\n perPage,\n hasMore: false,\n },\n spans: [],\n };\n }\n\n // Use raw query to support CASE WHEN in ORDER BY (sanitizeOrderBy in loadMany rejects it)\n const offset = page * perPage;\n const selectSql = `SELECT * FROM ${tbl}${whereClause} ORDER BY ${orderByClause} LIMIT ${Math.max(0, perPage)} OFFSET ${Math.max(0, offset)}`;\n const rawRows = await this.operations.query(selectSql, queryArgs);\n const spans = rawRows.map(row => transformFromSqlRow<SpanRecord>({ tableName: TABLE_SPANS, sqlRow: row as any }));\n\n return {\n pagination: {\n total: count,\n page,\n perPage,\n hasMore: (page + 1) * perPage < count,\n },\n spans: toTraceSpans(spans),\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_TRACES', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n },\n error,\n );\n }\n }\n\n async batchCreateSpans(args: BatchCreateSpansArgs): Promise<void> {\n try {\n if (!args.records.length) {\n return;\n }\n const now = new Date();\n await this.operations.batchInsert({\n tableName: TABLE_SPANS,\n records: args.records.map(record => ({\n ...record,\n ...serializeJsonFields(record),\n createdAt: now,\n updatedAt: now,\n })),\n });\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'BATCH_CREATE_SPANS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n },\n error,\n );\n }\n }\n\n async batchUpdateSpans(args: BatchUpdateSpansArgs): Promise<void> {\n try {\n if (!args.records.length) {\n return;\n }\n const now = new Date();\n await this.operations.batchUpdate({\n tableName: TABLE_SPANS,\n items: args.records.map(record => ({\n keys: { spanId: record.spanId, traceId: record.traceId },\n data: {\n ...record.updates,\n ...serializeJsonFields(record.updates),\n updatedAt: now,\n },\n })),\n });\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'BATCH_UPDATE_SPANS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n },\n error,\n );\n }\n }\n\n async batchDeleteTraces(args: BatchDeleteTracesArgs): Promise<void> {\n try {\n if (!args.traceIds.length) {\n return;\n }\n const keys = args.traceIds.map(traceId => ({ traceId }));\n await this.operations.batchDelete({\n tableName: TABLE_SPANS,\n keys,\n });\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'BATCH_DELETE_TRACES', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n },\n error,\n );\n }\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n PromptBlocksStorage,\n createStorageErrorId,\n normalizePerPage,\n calculatePagination,\n TABLE_PROMPT_BLOCKS,\n TABLE_PROMPT_BLOCK_VERSIONS,\n PROMPT_BLOCKS_SCHEMA,\n PROMPT_BLOCK_VERSIONS_SCHEMA,\n TABLE_SCHEMAS,\n} from '@mastra/core/storage';\nimport type {\n StoragePromptBlockType,\n StorageCreatePromptBlockInput,\n StorageUpdatePromptBlockInput,\n StorageListPromptBlocksInput,\n StorageListPromptBlocksOutput,\n PromptBlockVersion,\n CreatePromptBlockVersionInput,\n ListPromptBlockVersionsInput,\n ListPromptBlockVersionsOutput,\n CreateIndexOptions,\n} from '@mastra/core/storage';\nimport type { Pool, RowDataPacket } from 'mysql2/promise';\n\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL, generateIndexSQL } from '../operations';\nimport { formatTableName, quoteIdentifier } from '../utils';\n\nexport class PromptBlocksMySQL extends PromptBlocksStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n static readonly MANAGED_TABLES = [TABLE_PROMPT_BLOCKS, TABLE_PROMPT_BLOCK_VERSIONS] as const;\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx => (PromptBlocksMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({ tableName: TABLE_PROMPT_BLOCKS, schema: PROMPT_BLOCKS_SCHEMA });\n await this.operations.createTable({ tableName: TABLE_PROMPT_BLOCK_VERSIONS, schema: PROMPT_BLOCK_VERSIONS_SCHEMA });\n await this.operations.alterTable({\n tableName: TABLE_PROMPT_BLOCK_VERSIONS,\n schema: PROMPT_BLOCK_VERSIONS_SCHEMA,\n ifNotExists: ['requestContextSchema'],\n });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n static getDefaultIndexDefs(prefix: string = ''): CreateIndexOptions[] {\n return [\n {\n name: `${prefix}idx_prompt_block_versions_block_version`,\n table: TABLE_PROMPT_BLOCK_VERSIONS,\n columns: ['blockId', 'versionNumber'],\n unique: true,\n },\n ];\n }\n\n static getExportDDL(): string[] {\n const statements: string[] = [];\n\n for (const tableName of PromptBlocksMySQL.MANAGED_TABLES) {\n statements.push(\n generateTableSQL({\n tableName,\n schema: TABLE_SCHEMAS[tableName],\n }),\n );\n }\n\n for (const idx of PromptBlocksMySQL.getDefaultIndexDefs()) {\n statements.push(generateIndexSQL(idx));\n }\n\n return statements;\n }\n\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return PromptBlocksMySQL.getDefaultIndexDefs('');\n }\n\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n for (const indexDef of this.getDefaultIndexDefinitions()) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.operations.clearTable({ tableName: TABLE_PROMPT_BLOCK_VERSIONS });\n await this.operations.clearTable({ tableName: TABLE_PROMPT_BLOCKS });\n }\n\n private safeParseJSON<T = unknown>(val: unknown): T | undefined {\n if (val === null || val === undefined) return undefined;\n if (typeof val === 'string') {\n try {\n return JSON.parse(val) as T;\n } catch {\n return val as T;\n }\n }\n return val as T;\n }\n\n private parseBlockRow(row: Record<string, unknown>): StoragePromptBlockType {\n return {\n id: row.id as string,\n status: (row.status as StoragePromptBlockType['status']) ?? 'draft',\n activeVersionId: (row.activeVersionId as string) ?? undefined,\n authorId: (row.authorId as string) ?? undefined,\n metadata: this.safeParseJSON(row.metadata) as Record<string, unknown> | undefined,\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n updatedAt: row.updatedAt instanceof Date ? row.updatedAt : new Date(row.updatedAt as string),\n };\n }\n\n private parseVersionRow(row: Record<string, unknown>): PromptBlockVersion {\n return {\n id: row.id as string,\n blockId: row.blockId as string,\n versionNumber: Number(row.versionNumber),\n name: row.name as string,\n description: (row.description as string) ?? undefined,\n content: row.content as string,\n rules: this.safeParseJSON(row.rules) as PromptBlockVersion['rules'],\n requestContextSchema: this.safeParseJSON(row.requestContextSchema) as Record<string, unknown> | undefined,\n changedFields: this.safeParseJSON(row.changedFields) as string[] | undefined,\n changeMessage: (row.changeMessage as string) ?? undefined,\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n };\n }\n\n async getById(id: string): Promise<StoragePromptBlockType | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_PROMPT_BLOCKS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n return rows.length ? this.parseBlockRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_PROMPT_BLOCK', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async create(input: { promptBlock: StorageCreatePromptBlockInput }): Promise<StoragePromptBlockType> {\n const { promptBlock } = input;\n try {\n const now = new Date();\n\n await this.operations.insert({\n tableName: TABLE_PROMPT_BLOCKS,\n record: {\n id: promptBlock.id,\n status: 'draft',\n activeVersionId: null,\n authorId: promptBlock.authorId ?? null,\n metadata: promptBlock.metadata ?? null,\n createdAt: now,\n updatedAt: now,\n },\n });\n\n const { id: _id, authorId: _authorId, metadata: _metadata, ...snapshotConfig } = promptBlock;\n const versionId = crypto.randomUUID();\n try {\n await this.createVersion({\n id: versionId,\n blockId: promptBlock.id,\n versionNumber: 1,\n ...snapshotConfig,\n changedFields: Object.keys(snapshotConfig),\n changeMessage: 'Initial version',\n });\n } catch (versionError) {\n try {\n await this.operations.delete({ tableName: TABLE_PROMPT_BLOCKS, keys: { id: promptBlock.id } });\n } catch (rollbackError) {\n console.error('Failed to rollback prompt block creation:', rollbackError);\n }\n throw versionError;\n }\n\n return {\n id: promptBlock.id,\n status: 'draft',\n activeVersionId: undefined,\n authorId: promptBlock.authorId,\n metadata: promptBlock.metadata,\n createdAt: now,\n updatedAt: now,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_PROMPT_BLOCK', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async update(input: StorageUpdatePromptBlockInput): Promise<StoragePromptBlockType> {\n const { id, ...updates } = input;\n try {\n const existing = await this.getById(id);\n if (!existing) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_PROMPT_BLOCK', 'NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Prompt block with id ${id} not found`,\n details: { id },\n });\n }\n\n const { authorId, activeVersionId, metadata, status } = updates;\n const updateData: Record<string, unknown> = { updatedAt: new Date() };\n\n if (authorId !== undefined) updateData.authorId = authorId;\n if (activeVersionId !== undefined) updateData.activeVersionId = activeVersionId;\n if (status !== undefined) updateData.status = status;\n if (metadata !== undefined) updateData.metadata = { ...existing.metadata, ...metadata };\n\n await this.operations.update({ tableName: TABLE_PROMPT_BLOCKS, keys: { id }, data: updateData });\n\n const updated = await this.getById(id);\n if (!updated) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_PROMPT_BLOCK', 'NOT_FOUND_AFTER_UPDATE'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `Prompt block ${id} not found after update`,\n details: { id },\n });\n }\n return updated;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'UPDATE_PROMPT_BLOCK', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async delete(id: string): Promise<void> {\n try {\n await this.deleteVersionsByParentId(id);\n await this.operations.delete({ tableName: TABLE_PROMPT_BLOCKS, keys: { id } });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_PROMPT_BLOCK', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async list(args?: StorageListPromptBlocksInput): Promise<StorageListPromptBlocksOutput> {\n try {\n const { page = 0, perPage: perPageInput, orderBy, authorId, metadata, status } = args || {};\n const { field, direction } = this.parseOrderBy(orderBy);\n\n const conditions: string[] = [];\n const queryParams: any[] = [];\n\n if (status) {\n conditions.push(`${quoteIdentifier('status', 'column name')} = ?`);\n queryParams.push(status);\n }\n if (authorId !== undefined) {\n conditions.push(`${quoteIdentifier('authorId', 'column name')} = ?`);\n queryParams.push(authorId);\n }\n if (metadata && Object.keys(metadata).length > 0) {\n for (const [key, value] of Object.entries(metadata)) {\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(key)) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'LIST_PROMPT_BLOCKS', 'INVALID_METADATA_KEY'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Invalid metadata key: ${key}`,\n details: { key },\n });\n }\n if (typeof value === 'string') {\n conditions.push(\n `JSON_UNQUOTE(JSON_EXTRACT(${quoteIdentifier('metadata', 'column name')}, '$.${key}')) = ?`,\n );\n queryParams.push(value);\n } else {\n conditions.push(\n `JSON_EXTRACT(${quoteIdentifier('metadata', 'column name')}, '$.${key}') = CAST(? AS JSON)`,\n );\n queryParams.push(JSON.stringify(value));\n }\n }\n }\n\n const whereClause =\n conditions.length > 0 ? { sql: ` WHERE ${conditions.join(' AND ')}`, args: queryParams } : undefined;\n const total = await this.operations.loadTotalCount({ tableName: TABLE_PROMPT_BLOCKS, whereClause });\n\n if (total === 0) {\n return { promptBlocks: [], total: 0, page, perPage: perPageInput ?? 100, hasMore: false };\n }\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_PROMPT_BLOCKS,\n whereClause,\n orderBy: `${quoteIdentifier(field, 'column name')} ${direction}`,\n offset,\n limit: limitValue,\n });\n\n return {\n promptBlocks: rows.map(row => this.parseBlockRow(row)),\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_PROMPT_BLOCKS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n // ==========================================================================\n // Version Methods\n // ==========================================================================\n\n async createVersion(input: CreatePromptBlockVersionInput): Promise<PromptBlockVersion> {\n try {\n const now = new Date();\n await this.operations.insert({\n tableName: TABLE_PROMPT_BLOCK_VERSIONS,\n record: {\n id: input.id,\n blockId: input.blockId,\n versionNumber: input.versionNumber,\n name: input.name,\n description: input.description ?? null,\n content: input.content,\n rules: input.rules ?? null,\n requestContextSchema: input.requestContextSchema ?? null,\n changedFields: input.changedFields ?? null,\n changeMessage: input.changeMessage ?? null,\n createdAt: now,\n },\n });\n return { ...input, createdAt: now };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_PROMPT_BLOCK_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getVersion(id: string): Promise<PromptBlockVersion | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_PROMPT_BLOCK_VERSIONS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_PROMPT_BLOCK_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getVersionByNumber(blockId: string, versionNumber: number): Promise<PromptBlockVersion | null> {\n try {\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_PROMPT_BLOCK_VERSIONS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('blockId', 'column name')} = ? AND ${quoteIdentifier('versionNumber', 'column name')} = ?`,\n args: [blockId, versionNumber],\n },\n limit: 1,\n });\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_PROMPT_BLOCK_VERSION_BY_NUMBER', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getLatestVersion(blockId: string): Promise<PromptBlockVersion | null> {\n try {\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_PROMPT_BLOCK_VERSIONS,\n whereClause: { sql: ` WHERE ${quoteIdentifier('blockId', 'column name')} = ?`, args: [blockId] },\n orderBy: `${quoteIdentifier('versionNumber', 'column name')} DESC`,\n limit: 1,\n });\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_LATEST_PROMPT_BLOCK_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listVersions(input: ListPromptBlockVersionsInput): Promise<ListPromptBlockVersionsOutput> {\n try {\n const { blockId, page = 0, perPage: perPageInput, orderBy } = input;\n const { field, direction } = this.parseVersionOrderBy(orderBy);\n\n const whereClause = { sql: ` WHERE ${quoteIdentifier('blockId', 'column name')} = ?`, args: [blockId] };\n const total = await this.operations.loadTotalCount({ tableName: TABLE_PROMPT_BLOCK_VERSIONS, whereClause });\n\n if (total === 0) {\n return { versions: [], total: 0, page, perPage: perPageInput ?? 20, hasMore: false };\n }\n\n const perPage = normalizePerPage(perPageInput, 20);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_PROMPT_BLOCK_VERSIONS,\n whereClause,\n orderBy: `${quoteIdentifier(field, 'column name')} ${direction}`,\n offset,\n limit: limitValue,\n });\n\n return {\n versions: rows.map(row => this.parseVersionRow(row)),\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_PROMPT_BLOCK_VERSIONS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteVersion(id: string): Promise<void> {\n try {\n await this.operations.delete({ tableName: TABLE_PROMPT_BLOCK_VERSIONS, keys: { id } });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_PROMPT_BLOCK_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteVersionsByParentId(entityId: string): Promise<void> {\n try {\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_PROMPT_BLOCK_VERSIONS)} WHERE ${quoteIdentifier('blockId', 'column name')} = ?`,\n [entityId],\n );\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_PROMPT_BLOCK_VERSIONS_BY_BLOCK', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async countVersions(blockId: string): Promise<number> {\n try {\n return await this.operations.loadTotalCount({\n tableName: TABLE_PROMPT_BLOCK_VERSIONS,\n whereClause: { sql: ` WHERE ${quoteIdentifier('blockId', 'column name')} = ?`, args: [blockId] },\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'COUNT_PROMPT_BLOCK_VERSIONS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n}\n","import { randomUUID } from 'node:crypto';\nimport { SchedulesStorage, TABLE_SCHEDULES, TABLE_SCHEDULE_TRIGGERS, TABLE_SCHEMAS } from '@mastra/core/storage';\nimport type {\n Schedule,\n ScheduleFilter,\n ScheduleTrigger,\n ScheduleTriggerListOptions,\n ScheduleStatus,\n ScheduleTarget,\n ScheduleUpdate,\n CreateIndexOptions,\n} from '@mastra/core/storage';\nimport type { Pool, RowDataPacket, ResultSetHeader } from 'mysql2/promise';\n\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL, generateIndexSQL } from '../operations';\nimport { formatTableName, quoteIdentifier } from '../utils';\n\nfunction parseJson<T = unknown>(val: unknown): T | undefined {\n if (val == null) return undefined;\n if (typeof val === 'string') {\n try {\n return JSON.parse(val) as T;\n } catch {\n return val as T;\n }\n }\n return val as T;\n}\n\nfunction toNumber(val: unknown): number {\n if (typeof val === 'bigint') return Number(val);\n return Number(val);\n}\n\nfunction rowToSchedule(row: Record<string, any>): Schedule {\n const target = parseJson<ScheduleTarget>(row.target);\n if (!target) {\n throw new Error(`Schedule row ${row.id} has invalid target`);\n }\n const schedule: Schedule = {\n id: String(row.id),\n target,\n cron: String(row.cron),\n status: String(row.status) as ScheduleStatus,\n nextFireAt: toNumber(row.next_fire_at),\n createdAt: toNumber(row.created_at),\n updatedAt: toNumber(row.updated_at),\n };\n if (row.timezone != null) schedule.timezone = String(row.timezone);\n if (row.last_fire_at != null) schedule.lastFireAt = toNumber(row.last_fire_at);\n if (row.last_run_id != null) schedule.lastRunId = String(row.last_run_id);\n const metadata = parseJson<Record<string, unknown>>(row.metadata);\n if (metadata !== undefined) schedule.metadata = metadata;\n if (row.owner_type != null) schedule.ownerType = String(row.owner_type) as Schedule['ownerType'];\n if (row.owner_id != null) schedule.ownerId = String(row.owner_id);\n return schedule;\n}\n\nfunction rowToTrigger(row: Record<string, any>): ScheduleTrigger {\n const trigger: ScheduleTrigger = {\n id: row.id != null ? String(row.id) : undefined,\n scheduleId: String(row.schedule_id),\n runId: row.run_id != null ? String(row.run_id) : null,\n scheduledFireAt: toNumber(row.scheduled_fire_at),\n actualFireAt: toNumber(row.actual_fire_at),\n outcome: String(row.outcome) as ScheduleTrigger['outcome'],\n triggerKind:\n row.trigger_kind != null ? (String(row.trigger_kind) as ScheduleTrigger['triggerKind']) : 'schedule-fire',\n };\n if (row.error != null) trigger.error = String(row.error);\n if (row.parent_trigger_id != null) trigger.parentTriggerId = String(row.parent_trigger_id);\n const metadata = parseJson<Record<string, unknown>>(row.metadata);\n if (metadata !== undefined) trigger.metadata = metadata;\n return trigger;\n}\n\nexport class SchedulesMySQL extends SchedulesStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n static readonly MANAGED_TABLES = [TABLE_SCHEDULES, TABLE_SCHEDULE_TRIGGERS] as const;\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx => (SchedulesMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({\n tableName: TABLE_SCHEDULES,\n schema: TABLE_SCHEMAS[TABLE_SCHEDULES],\n });\n await this.operations.createTable({\n tableName: TABLE_SCHEDULE_TRIGGERS,\n schema: TABLE_SCHEMAS[TABLE_SCHEDULE_TRIGGERS],\n });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n static getDefaultIndexDefs(prefix: string = ''): CreateIndexOptions[] {\n return [\n {\n name: `${prefix}idx_mastra_schedules_status_next_fire`,\n table: TABLE_SCHEDULES,\n columns: ['status', 'next_fire_at'],\n },\n {\n name: `${prefix}idx_mastra_schedule_triggers_schedule_fire`,\n table: TABLE_SCHEDULE_TRIGGERS,\n columns: ['schedule_id', 'actual_fire_at DESC'],\n },\n ];\n }\n\n static getExportDDL(): string[] {\n const statements: string[] = [];\n\n statements.push(\n generateTableSQL({\n tableName: TABLE_SCHEDULES,\n schema: TABLE_SCHEMAS[TABLE_SCHEDULES],\n }),\n );\n statements.push(\n generateTableSQL({\n tableName: TABLE_SCHEDULE_TRIGGERS,\n schema: TABLE_SCHEMAS[TABLE_SCHEDULE_TRIGGERS],\n }),\n );\n\n for (const idx of SchedulesMySQL.getDefaultIndexDefs()) {\n statements.push(generateIndexSQL(idx));\n }\n\n return statements;\n }\n\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return SchedulesMySQL.getDefaultIndexDefs('');\n }\n\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n for (const indexDef of this.getDefaultIndexDefinitions()) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.operations.clearTable({ tableName: TABLE_SCHEDULE_TRIGGERS });\n await this.operations.clearTable({ tableName: TABLE_SCHEDULES });\n }\n\n async createSchedule(schedule: Schedule): Promise<Schedule> {\n const existing = await this.getSchedule(schedule.id);\n if (existing) {\n throw new Error(`Schedule with id \"${schedule.id}\" already exists`);\n }\n await this.pool.execute(\n `INSERT INTO ${formatTableName(TABLE_SCHEDULES)} (${quoteIdentifier('id', 'column name')}, ${quoteIdentifier('target', 'column name')}, ${quoteIdentifier('cron', 'column name')}, ${quoteIdentifier('timezone', 'column name')}, ${quoteIdentifier('status', 'column name')}, ${quoteIdentifier('next_fire_at', 'column name')}, ${quoteIdentifier('last_fire_at', 'column name')}, ${quoteIdentifier('last_run_id', 'column name')}, ${quoteIdentifier('created_at', 'column name')}, ${quoteIdentifier('updated_at', 'column name')}, ${quoteIdentifier('metadata', 'column name')}, ${quoteIdentifier('owner_type', 'column name')}, ${quoteIdentifier('owner_id', 'column name')}) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n [\n schedule.id,\n JSON.stringify(schedule.target),\n schedule.cron,\n schedule.timezone ?? null,\n schedule.status,\n schedule.nextFireAt,\n schedule.lastFireAt ?? null,\n schedule.lastRunId ?? null,\n schedule.createdAt,\n schedule.updatedAt,\n schedule.metadata ? JSON.stringify(schedule.metadata) : null,\n schedule.ownerType ?? null,\n schedule.ownerId ?? null,\n ],\n );\n return schedule;\n }\n\n async getSchedule(id: string): Promise<Schedule | null> {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_SCHEDULES)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n const row = rows[0];\n return row ? rowToSchedule(row as Record<string, any>) : null;\n }\n\n async listSchedules(filter?: ScheduleFilter): Promise<Schedule[]> {\n const conditions: string[] = [];\n const params: (string | number | null)[] = [];\n\n if (filter?.status) {\n conditions.push(`${quoteIdentifier('status', 'column name')} = ?`);\n params.push(filter.status);\n }\n if (filter?.workflowId) {\n // target is JSON; MySQL JSON_EXTRACT\n conditions.push(`JSON_EXTRACT(${quoteIdentifier('target', 'column name')}, '$.workflowId') = ?`);\n params.push(filter.workflowId);\n }\n if (filter?.ownerType !== undefined) {\n if (filter.ownerType === null) {\n conditions.push(`${quoteIdentifier('owner_type', 'column name')} IS NULL`);\n } else {\n conditions.push(`${quoteIdentifier('owner_type', 'column name')} = ?`);\n params.push(filter.ownerType);\n }\n }\n if (filter?.ownerId !== undefined) {\n if (filter.ownerId === null) {\n conditions.push(`${quoteIdentifier('owner_id', 'column name')} IS NULL`);\n } else {\n conditions.push(`${quoteIdentifier('owner_id', 'column name')} = ?`);\n params.push(filter.ownerId);\n }\n }\n\n const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_SCHEDULES)} ${where} ORDER BY ${quoteIdentifier('created_at', 'column name')} ASC`,\n params,\n );\n return rows.map(r => rowToSchedule(r as Record<string, any>));\n }\n\n async listDueSchedules(now: number, limit?: number): Promise<Schedule[]> {\n const cap = limit ?? 100;\n const [rows] = await this.pool.query<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_SCHEDULES)} WHERE ${quoteIdentifier('status', 'column name')} = ? AND ${quoteIdentifier('next_fire_at', 'column name')} <= ? ORDER BY ${quoteIdentifier('next_fire_at', 'column name')} ASC LIMIT ?`,\n ['active', String(now), cap],\n );\n return rows.map(r => rowToSchedule(r as Record<string, any>));\n }\n\n async updateSchedule(id: string, update: ScheduleUpdate): Promise<Schedule> {\n const setClauses: string[] = [];\n const params: (string | number | null)[] = [];\n\n if ('cron' in update) {\n setClauses.push(`${quoteIdentifier('cron', 'column name')} = ?`);\n params.push(update.cron as string);\n }\n if ('timezone' in update) {\n setClauses.push(`${quoteIdentifier('timezone', 'column name')} = ?`);\n params.push((update.timezone as string) ?? null);\n }\n if ('status' in update) {\n setClauses.push(`${quoteIdentifier('status', 'column name')} = ?`);\n params.push(update.status as string);\n }\n if ('nextFireAt' in update) {\n setClauses.push(`${quoteIdentifier('next_fire_at', 'column name')} = ?`);\n params.push(update.nextFireAt as number);\n }\n if ('metadata' in update) {\n setClauses.push(`${quoteIdentifier('metadata', 'column name')} = ?`);\n params.push(update.metadata ? JSON.stringify(update.metadata) : null);\n }\n if ('ownerType' in update) {\n setClauses.push(`${quoteIdentifier('owner_type', 'column name')} = ?`);\n params.push((update.ownerType as string) ?? null);\n }\n if ('ownerId' in update) {\n setClauses.push(`${quoteIdentifier('owner_id', 'column name')} = ?`);\n params.push((update.ownerId as string) ?? null);\n }\n\n if (setClauses.length === 0) {\n const existing = await this.getSchedule(id);\n if (!existing) throw new Error(`Schedule ${id} not found`);\n return existing;\n }\n\n setClauses.push(`${quoteIdentifier('updated_at', 'column name')} = ?`);\n params.push(Date.now());\n params.push(id);\n\n await this.pool.execute(\n `UPDATE ${formatTableName(TABLE_SCHEDULES)} SET ${setClauses.join(', ')} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n params,\n );\n\n const updated = await this.getSchedule(id);\n if (!updated) throw new Error(`Schedule ${id} not found`);\n return updated;\n }\n\n async updateScheduleNextFire(\n id: string,\n expectedNextFireAt: number,\n newNextFireAt: number,\n lastFireAt: number,\n lastRunId: string,\n ): Promise<boolean> {\n const [result] = await this.pool.execute<ResultSetHeader>(\n `UPDATE ${formatTableName(TABLE_SCHEDULES)} SET ${quoteIdentifier('next_fire_at', 'column name')} = ?, ${quoteIdentifier('last_fire_at', 'column name')} = ?, ${quoteIdentifier('last_run_id', 'column name')} = ?, ${quoteIdentifier('updated_at', 'column name')} = ? WHERE ${quoteIdentifier('id', 'column name')} = ? AND ${quoteIdentifier('next_fire_at', 'column name')} = ? AND ${quoteIdentifier('status', 'column name')} = ?`,\n [newNextFireAt, lastFireAt, lastRunId, Date.now(), id, expectedNextFireAt, 'active'],\n );\n return result.affectedRows > 0;\n }\n\n async deleteSchedule(id: string): Promise<void> {\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_SCHEDULE_TRIGGERS)} WHERE ${quoteIdentifier('schedule_id', 'column name')} = ?`,\n [id],\n );\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_SCHEDULES)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n }\n\n async recordTrigger(trigger: ScheduleTrigger): Promise<void> {\n const id = trigger.id ?? randomUUID();\n await this.pool.execute(\n `INSERT INTO ${formatTableName(TABLE_SCHEDULE_TRIGGERS)} (${quoteIdentifier('id', 'column name')}, ${quoteIdentifier('schedule_id', 'column name')}, ${quoteIdentifier('run_id', 'column name')}, ${quoteIdentifier('scheduled_fire_at', 'column name')}, ${quoteIdentifier('actual_fire_at', 'column name')}, ${quoteIdentifier('outcome', 'column name')}, ${quoteIdentifier('error', 'column name')}, ${quoteIdentifier('trigger_kind', 'column name')}, ${quoteIdentifier('parent_trigger_id', 'column name')}, ${quoteIdentifier('metadata', 'column name')}) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n [\n id,\n trigger.scheduleId,\n trigger.runId,\n trigger.scheduledFireAt,\n trigger.actualFireAt,\n trigger.outcome,\n trigger.error ?? null,\n trigger.triggerKind ?? 'schedule-fire',\n trigger.parentTriggerId ?? null,\n trigger.metadata ? JSON.stringify(trigger.metadata) : null,\n ],\n );\n }\n\n async listTriggers(scheduleId: string, opts?: ScheduleTriggerListOptions): Promise<ScheduleTrigger[]> {\n const conditions: string[] = [`${quoteIdentifier('schedule_id', 'column name')} = ?`];\n const params: (string | number | null)[] = [scheduleId];\n\n if (opts?.fromActualFireAt != null) {\n conditions.push(`${quoteIdentifier('actual_fire_at', 'column name')} >= ?`);\n params.push(opts.fromActualFireAt);\n }\n if (opts?.toActualFireAt != null) {\n conditions.push(`${quoteIdentifier('actual_fire_at', 'column name')} < ?`);\n params.push(opts.toActualFireAt);\n }\n\n const limitClause = opts?.limit != null ? `LIMIT ${Math.floor(opts.limit)}` : '';\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_SCHEDULE_TRIGGERS)} WHERE ${conditions.join(' AND ')} ORDER BY ${quoteIdentifier('actual_fire_at', 'column name')} DESC ${limitClause}`,\n params,\n );\n return rows.map(r => rowToTrigger(r as Record<string, any>));\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n ScorerDefinitionsStorage,\n createStorageErrorId,\n normalizePerPage,\n calculatePagination,\n TABLE_SCORER_DEFINITIONS,\n TABLE_SCORER_DEFINITION_VERSIONS,\n SCORER_DEFINITIONS_SCHEMA,\n SCORER_DEFINITION_VERSIONS_SCHEMA,\n TABLE_SCHEMAS,\n} from '@mastra/core/storage';\nimport type {\n StorageScorerDefinitionType,\n StorageCreateScorerDefinitionInput,\n StorageUpdateScorerDefinitionInput,\n StorageListScorerDefinitionsInput,\n StorageListScorerDefinitionsOutput,\n CreateIndexOptions,\n} from '@mastra/core/storage';\nimport type {\n ScorerDefinitionVersion,\n CreateScorerDefinitionVersionInput,\n ListScorerDefinitionVersionsInput,\n ListScorerDefinitionVersionsOutput,\n} from '@mastra/core/storage/domains/scorer-definitions';\nimport type { Pool, RowDataPacket } from 'mysql2/promise';\n\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL, generateIndexSQL } from '../operations';\nimport { formatTableName, quoteIdentifier } from '../utils';\n\nexport class ScorerDefinitionsMySQL extends ScorerDefinitionsStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n static readonly MANAGED_TABLES = [TABLE_SCORER_DEFINITIONS, TABLE_SCORER_DEFINITION_VERSIONS] as const;\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx =>\n (ScorerDefinitionsMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table),\n );\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({ tableName: TABLE_SCORER_DEFINITIONS, schema: SCORER_DEFINITIONS_SCHEMA });\n await this.operations.createTable({\n tableName: TABLE_SCORER_DEFINITION_VERSIONS,\n schema: SCORER_DEFINITION_VERSIONS_SCHEMA,\n });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n static getDefaultIndexDefs(prefix: string = ''): CreateIndexOptions[] {\n return [\n {\n name: `${prefix}idx_scorer_definition_versions_def_version`,\n table: TABLE_SCORER_DEFINITION_VERSIONS,\n columns: ['scorerDefinitionId', 'versionNumber'],\n unique: true,\n },\n ];\n }\n\n static getExportDDL(): string[] {\n const statements: string[] = [];\n\n for (const tableName of ScorerDefinitionsMySQL.MANAGED_TABLES) {\n statements.push(\n generateTableSQL({\n tableName,\n schema: TABLE_SCHEMAS[tableName],\n }),\n );\n }\n\n for (const idx of ScorerDefinitionsMySQL.getDefaultIndexDefs()) {\n statements.push(generateIndexSQL(idx));\n }\n\n return statements;\n }\n\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return ScorerDefinitionsMySQL.getDefaultIndexDefs('');\n }\n\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n for (const indexDef of this.getDefaultIndexDefinitions()) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.operations.clearTable({ tableName: TABLE_SCORER_DEFINITION_VERSIONS });\n await this.operations.clearTable({ tableName: TABLE_SCORER_DEFINITIONS });\n }\n\n private safeParseJSON<T = unknown>(val: unknown): T | undefined {\n if (val === null || val === undefined) return undefined;\n if (typeof val === 'string') {\n try {\n return JSON.parse(val) as T;\n } catch {\n return val as T;\n }\n }\n return val as T;\n }\n\n private parseScorerRow(row: Record<string, unknown>): StorageScorerDefinitionType {\n return {\n id: row.id as string,\n status: (row.status as StorageScorerDefinitionType['status']) ?? 'draft',\n activeVersionId: (row.activeVersionId as string) ?? undefined,\n authorId: (row.authorId as string) ?? undefined,\n metadata: this.safeParseJSON(row.metadata) as Record<string, unknown> | undefined,\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n updatedAt: row.updatedAt instanceof Date ? row.updatedAt : new Date(row.updatedAt as string),\n };\n }\n\n private parseVersionRow(row: Record<string, unknown>): ScorerDefinitionVersion {\n return {\n id: row.id as string,\n scorerDefinitionId: row.scorerDefinitionId as string,\n versionNumber: Number(row.versionNumber),\n name: row.name as string,\n description: (row.description as string) ?? undefined,\n type: row.type as string as ScorerDefinitionVersion['type'],\n model: this.safeParseJSON(row.model) as ScorerDefinitionVersion['model'],\n instructions: (row.instructions as string) ?? undefined,\n scoreRange: this.safeParseJSON(row.scoreRange) as ScorerDefinitionVersion['scoreRange'],\n presetConfig: this.safeParseJSON(row.presetConfig) as ScorerDefinitionVersion['presetConfig'],\n defaultSampling: this.safeParseJSON(row.defaultSampling) as ScorerDefinitionVersion['defaultSampling'],\n changedFields: this.safeParseJSON(row.changedFields) as string[] | undefined,\n changeMessage: (row.changeMessage as string) ?? undefined,\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n };\n }\n\n async getById(id: string): Promise<StorageScorerDefinitionType | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_SCORER_DEFINITIONS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n return rows.length ? this.parseScorerRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_SCORER_DEFINITION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async create(input: { scorerDefinition: StorageCreateScorerDefinitionInput }): Promise<StorageScorerDefinitionType> {\n const { scorerDefinition } = input;\n try {\n const now = new Date();\n await this.operations.insert({\n tableName: TABLE_SCORER_DEFINITIONS,\n record: {\n id: scorerDefinition.id,\n status: 'draft',\n activeVersionId: null,\n authorId: scorerDefinition.authorId ?? null,\n metadata: scorerDefinition.metadata ?? null,\n createdAt: now,\n updatedAt: now,\n },\n });\n\n const { id: _id, authorId: _authorId, metadata: _metadata, ...snapshotConfig } = scorerDefinition;\n const versionId = crypto.randomUUID();\n try {\n await this.createVersion({\n id: versionId,\n scorerDefinitionId: scorerDefinition.id,\n versionNumber: 1,\n ...snapshotConfig,\n changedFields: Object.keys(snapshotConfig),\n changeMessage: 'Initial version',\n });\n } catch (versionError) {\n try {\n await this.operations.delete({ tableName: TABLE_SCORER_DEFINITIONS, keys: { id: scorerDefinition.id } });\n } catch (rollbackError) {\n console.error('Failed to rollback scorer definition creation:', rollbackError);\n }\n throw versionError;\n }\n\n return {\n id: scorerDefinition.id,\n status: 'draft',\n activeVersionId: undefined,\n authorId: scorerDefinition.authorId,\n metadata: scorerDefinition.metadata,\n createdAt: now,\n updatedAt: now,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_SCORER_DEFINITION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async update(input: StorageUpdateScorerDefinitionInput): Promise<StorageScorerDefinitionType> {\n const { id, ...updates } = input;\n try {\n const existing = await this.getById(id);\n if (!existing) {\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_SCORER_DEFINITION', 'NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Scorer definition with id ${id} not found`,\n details: { id },\n });\n }\n\n const { authorId, activeVersionId, metadata, status } = updates;\n const updateData: Record<string, unknown> = { updatedAt: new Date() };\n if (authorId !== undefined) updateData.authorId = authorId;\n if (activeVersionId !== undefined) updateData.activeVersionId = activeVersionId;\n if (status !== undefined) updateData.status = status;\n if (metadata !== undefined) updateData.metadata = { ...existing.metadata, ...metadata };\n\n await this.operations.update({ tableName: TABLE_SCORER_DEFINITIONS, keys: { id }, data: updateData });\n\n const updated = await this.getById(id);\n if (!updated)\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_SCORER_DEFINITION', 'NOT_FOUND_AFTER_UPDATE'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `Scorer definition ${id} not found after update`,\n details: { id },\n });\n return updated;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'UPDATE_SCORER_DEFINITION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async delete(id: string): Promise<void> {\n try {\n await this.operations.withTransaction(async () => {\n await this.deleteVersionsByParentId(id);\n await this.operations.delete({ tableName: TABLE_SCORER_DEFINITIONS, keys: { id } });\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_SCORER_DEFINITION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async list(args?: StorageListScorerDefinitionsInput): Promise<StorageListScorerDefinitionsOutput> {\n try {\n const { page = 0, perPage: perPageInput, orderBy, authorId, metadata, status } = args || {};\n const { field, direction } = this.parseOrderBy(orderBy);\n\n const conditions: string[] = [];\n const queryParams: any[] = [];\n if (status) {\n conditions.push(`${quoteIdentifier('status', 'column name')} = ?`);\n queryParams.push(status);\n }\n if (authorId !== undefined) {\n conditions.push(`${quoteIdentifier('authorId', 'column name')} = ?`);\n queryParams.push(authorId);\n }\n if (metadata && Object.keys(metadata).length > 0) {\n for (const [key, value] of Object.entries(metadata)) {\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(key))\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'LIST_SCORER_DEFINITIONS', 'INVALID_METADATA_KEY'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Invalid metadata key: ${key}`,\n details: { key },\n });\n if (typeof value === 'string') {\n conditions.push(\n `JSON_UNQUOTE(JSON_EXTRACT(${quoteIdentifier('metadata', 'column name')}, '$.${key}')) = ?`,\n );\n queryParams.push(value);\n } else {\n conditions.push(\n `JSON_EXTRACT(${quoteIdentifier('metadata', 'column name')}, '$.${key}') = CAST(? AS JSON)`,\n );\n queryParams.push(JSON.stringify(value));\n }\n }\n }\n\n const whereClause =\n conditions.length > 0 ? { sql: ` WHERE ${conditions.join(' AND ')}`, args: queryParams } : undefined;\n const total = await this.operations.loadTotalCount({ tableName: TABLE_SCORER_DEFINITIONS, whereClause });\n if (total === 0) return { scorerDefinitions: [], total: 0, page, perPage: perPageInput ?? 100, hasMore: false };\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_SCORER_DEFINITIONS,\n whereClause,\n orderBy: `${quoteIdentifier(field, 'column name')} ${direction}`,\n offset,\n limit: limitValue,\n });\n\n return {\n scorerDefinitions: rows.map(row => this.parseScorerRow(row)),\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_SCORER_DEFINITIONS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n // ==========================================================================\n // Version Methods\n // ==========================================================================\n\n async createVersion(input: CreateScorerDefinitionVersionInput): Promise<ScorerDefinitionVersion> {\n try {\n const now = new Date();\n await this.operations.insert({\n tableName: TABLE_SCORER_DEFINITION_VERSIONS,\n record: {\n id: input.id,\n scorerDefinitionId: input.scorerDefinitionId,\n versionNumber: input.versionNumber,\n name: input.name,\n description: input.description ?? null,\n type: input.type,\n model: input.model ?? null,\n instructions: input.instructions ?? null,\n scoreRange: input.scoreRange ?? null,\n presetConfig: input.presetConfig ?? null,\n defaultSampling: input.defaultSampling ?? null,\n changedFields: input.changedFields ?? null,\n changeMessage: input.changeMessage ?? null,\n createdAt: now,\n },\n });\n return { ...input, createdAt: now };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_SCORER_DEFINITION_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getVersion(id: string): Promise<ScorerDefinitionVersion | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_SCORER_DEFINITION_VERSIONS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_SCORER_DEFINITION_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getVersionByNumber(scorerDefinitionId: string, versionNumber: number): Promise<ScorerDefinitionVersion | null> {\n try {\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_SCORER_DEFINITION_VERSIONS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('scorerDefinitionId', 'column name')} = ? AND ${quoteIdentifier('versionNumber', 'column name')} = ?`,\n args: [scorerDefinitionId, versionNumber],\n },\n limit: 1,\n });\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_SCORER_DEFINITION_VERSION_BY_NUMBER', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getLatestVersion(scorerDefinitionId: string): Promise<ScorerDefinitionVersion | null> {\n try {\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_SCORER_DEFINITION_VERSIONS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('scorerDefinitionId', 'column name')} = ?`,\n args: [scorerDefinitionId],\n },\n orderBy: `${quoteIdentifier('versionNumber', 'column name')} DESC`,\n limit: 1,\n });\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_LATEST_SCORER_DEFINITION_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listVersions(input: ListScorerDefinitionVersionsInput): Promise<ListScorerDefinitionVersionsOutput> {\n try {\n const { scorerDefinitionId, page = 0, perPage: perPageInput, orderBy } = input;\n const { field, direction } = this.parseVersionOrderBy(orderBy);\n const whereClause = {\n sql: ` WHERE ${quoteIdentifier('scorerDefinitionId', 'column name')} = ?`,\n args: [scorerDefinitionId],\n };\n const total = await this.operations.loadTotalCount({ tableName: TABLE_SCORER_DEFINITION_VERSIONS, whereClause });\n if (total === 0) return { versions: [], total: 0, page, perPage: perPageInput ?? 20, hasMore: false };\n\n const perPage = normalizePerPage(perPageInput, 20);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_SCORER_DEFINITION_VERSIONS,\n whereClause,\n orderBy: `${quoteIdentifier(field, 'column name')} ${direction}`,\n offset,\n limit: limitValue,\n });\n\n return {\n versions: rows.map(row => this.parseVersionRow(row)),\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_SCORER_DEFINITION_VERSIONS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteVersion(id: string): Promise<void> {\n try {\n await this.operations.delete({ tableName: TABLE_SCORER_DEFINITION_VERSIONS, keys: { id } });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_SCORER_DEFINITION_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteVersionsByParentId(entityId: string): Promise<void> {\n try {\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_SCORER_DEFINITION_VERSIONS)} WHERE ${quoteIdentifier('scorerDefinitionId', 'column name')} = ?`,\n [entityId],\n );\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_SCORER_DEFINITION_VERSIONS_BY_SCORER', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async countVersions(scorerDefinitionId: string): Promise<number> {\n try {\n return await this.operations.loadTotalCount({\n tableName: TABLE_SCORER_DEFINITION_VERSIONS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('scorerDefinitionId', 'column name')} = ?`,\n args: [scorerDefinitionId],\n },\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'COUNT_SCORER_DEFINITION_VERSIONS', '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 type { ScoreRowData, ScoringSource } from '@mastra/core/evals';\nimport {\n ScoresStorage,\n SCORERS_SCHEMA,\n TABLE_SCHEMAS,\n TABLE_SCORERS,\n calculatePagination,\n normalizePerPage,\n} from '@mastra/core/storage';\nimport type { PaginationInfo, StoragePagination, CreateIndexOptions } from '@mastra/core/storage';\nimport type { Pool } from 'mysql2/promise';\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL, generateIndexSQL } from '../operations';\nimport { parseDateTime, quoteIdentifier } from '../utils';\n\ntype SaveScoreInput = Omit<ScoreRowData, 'id' | 'createdAt' | 'updatedAt'>;\ntype ListScoresResult = { pagination: PaginationInfo; scores: ScoreRowData[] };\n\ninterface ScoreRow {\n id: string;\n scorerId: string;\n traceId: string | null;\n spanId: string | null;\n runId: string;\n score: number;\n reason: string | null;\n metadata: string | null;\n preprocessStepResult: string | null;\n extractStepResult: string | null;\n analyzeStepResult: string | null;\n preprocessPrompt: string | null;\n extractPrompt: string | null;\n generateScorePrompt: string | null;\n generateReasonPrompt: string | null;\n analyzePrompt: string | null;\n reasonPrompt: string | null;\n scorer: string | null;\n input: string | null;\n output: string | null;\n additionalContext: string | null;\n requestContext: string | null;\n entityType: string | null;\n entity: string | null;\n entityId: string | null;\n source: string | null;\n resourceId: string | null;\n threadId: string | null;\n createdAt: Date | string;\n updatedAt: Date | string;\n}\n\nfunction parseJSON<T>(value: unknown): T | undefined {\n if (value === null || value === undefined) return undefined;\n if (typeof value === 'string') {\n if (!value) return undefined;\n try {\n return JSON.parse(value) as T;\n } catch {\n return undefined;\n }\n }\n if (typeof value === 'object') {\n return value as T;\n }\n return undefined;\n}\n\nexport class ScoresMySQL extends ScoresStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n static readonly MANAGED_TABLES = [TABLE_SCORERS] as const;\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx => (ScoresMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({ tableName: TABLE_SCORERS, schema: SCORERS_SCHEMA });\n await this.operations.alterTable({\n tableName: TABLE_SCORERS,\n schema: SCORERS_SCHEMA,\n ifNotExists: ['spanId', 'requestContext'],\n });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n static getDefaultIndexDefs(prefix: string = ''): CreateIndexOptions[] {\n return [\n {\n name: `${prefix}mastra_scores_trace_id_span_id_created_at_idx`,\n table: TABLE_SCORERS,\n columns: ['traceId', 'spanId', 'createdAt DESC'],\n },\n ];\n }\n\n static getExportDDL(): string[] {\n const statements: string[] = [];\n\n statements.push(\n generateTableSQL({\n tableName: TABLE_SCORERS,\n schema: TABLE_SCHEMAS[TABLE_SCORERS],\n }),\n );\n\n for (const idx of ScoresMySQL.getDefaultIndexDefs()) {\n statements.push(generateIndexSQL(idx));\n }\n\n return statements;\n }\n\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return ScoresMySQL.getDefaultIndexDefs('');\n }\n\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n for (const indexDef of this.getDefaultIndexDefinitions()) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.pool.execute(`DELETE FROM ${TABLE_SCORERS}`);\n }\n\n private mapScore(row: ScoreRow): ScoreRowData {\n const mapped = {\n id: row.id,\n scorerId: row.scorerId,\n traceId: row.traceId ?? undefined,\n spanId: row.spanId ?? undefined,\n runId: row.runId,\n score: row.score,\n reason: row.reason ?? undefined,\n metadata: parseJSON<Record<string, unknown>>(row.metadata),\n preprocessStepResult: parseJSON<Record<string, unknown>>(row.preprocessStepResult),\n extractStepResult: parseJSON<Record<string, unknown>>(row.extractStepResult),\n analyzeStepResult: parseJSON<Record<string, unknown>>(row.analyzeStepResult),\n preprocessPrompt: row.preprocessPrompt ?? undefined,\n extractPrompt: row.extractPrompt ?? undefined,\n generateScorePrompt: row.generateScorePrompt ?? undefined,\n generateReasonPrompt: row.generateReasonPrompt ?? undefined,\n analyzePrompt: row.analyzePrompt ?? undefined,\n reasonPrompt: row.reasonPrompt ?? undefined,\n scorer: parseJSON<Record<string, unknown>>(row.scorer) as ScoreRowData['scorer'],\n input: parseJSON<any>(row.input) ?? undefined,\n output: parseJSON<Record<string, unknown>>(row.output),\n additionalContext: parseJSON<Record<string, unknown>>(row.additionalContext),\n requestContext: parseJSON<Record<string, unknown>>(row.requestContext) ?? undefined,\n // entityType is required by the ScoreRowData type but may be null in DB; keep as-is and cast below\n entityType: (row.entityType ?? undefined) as any,\n entity: parseJSON<Record<string, unknown>>(row.entity),\n entityId: row.entityId ?? undefined,\n source: (row.source ?? undefined) as ScoreRowData['source'],\n resourceId: row.resourceId ?? undefined,\n threadId: row.threadId ?? undefined,\n createdAt: parseDateTime(row.createdAt) ?? new Date(),\n updatedAt: parseDateTime(row.updatedAt) ?? new Date(),\n };\n return mapped as ScoreRowData;\n }\n\n private serializeScore(score: SaveScoreInput, id: string, createdAt: Date, updatedAt: Date): Record<string, any> {\n const toJson = (value: unknown): string | null => (value === undefined ? null : JSON.stringify(value));\n\n return {\n id,\n scorerId: score.scorerId,\n traceId: score.traceId ?? null,\n spanId: score.spanId ?? null,\n runId: score.runId,\n score: score.score,\n reason: score.reason ?? null,\n metadata: toJson(score.metadata),\n preprocessStepResult: toJson(score.preprocessStepResult),\n extractStepResult: toJson(score.extractStepResult),\n analyzeStepResult: toJson(score.analyzeStepResult),\n preprocessPrompt: score.preprocessPrompt ?? null,\n extractPrompt: score.extractPrompt ?? null,\n generateScorePrompt: score.generateScorePrompt ?? null,\n generateReasonPrompt: score.generateReasonPrompt ?? null,\n analyzePrompt: score.analyzePrompt ?? null,\n reasonPrompt: score.reasonPrompt ?? null,\n scorer: toJson(score.scorer),\n input: toJson(score.input),\n output: toJson(score.output),\n additionalContext: toJson(score.additionalContext),\n requestContext: toJson(score.requestContext),\n entityType: score.entityType ?? null,\n entity: toJson(score.entity),\n entityId: score.entityId ?? null,\n resourceId: score.resourceId ?? null,\n threadId: score.threadId ?? null,\n source: score.source ?? null,\n createdAt,\n updatedAt,\n };\n }\n\n async saveScore(score: SaveScoreInput): Promise<{ score: ScoreRowData }> {\n try {\n const id = crypto.randomUUID();\n const now = new Date();\n\n await this.operations.insert({\n tableName: TABLE_SCORERS,\n record: this.serializeScore(score, id, now, now),\n });\n return { score: { ...score, id, createdAt: now, updatedAt: now } as ScoreRowData };\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_SCORES_SAVE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getScoreById({ id }: { id: string }): Promise<ScoreRowData | null> {\n try {\n const row = await this.operations.load<ScoreRow>({ tableName: TABLE_SCORERS, keys: { id } });\n return row ? this.mapScore(row) : null;\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_SCORES_GET_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { id },\n },\n error,\n );\n }\n }\n\n private async fetchScores(\n whereClause: { sql: string; args: any[] },\n pagination: StoragePagination,\n ): Promise<ListScoresResult> {\n const { page = 0, perPage: perPageInput } = pagination;\n const perPageNormalized = normalizePerPage(perPageInput, 50);\n const { offset, perPage } = calculatePagination(page, perPageInput, perPageNormalized);\n\n const total = await this.operations.loadTotalCount({ tableName: TABLE_SCORERS, whereClause });\n if (total === 0) {\n return {\n scores: [],\n pagination: { total: 0, page, perPage, hasMore: false },\n };\n }\n\n const limitValue = perPageInput === false ? total : perPageNormalized;\n\n const rows = await this.operations.loadMany<ScoreRow>({\n tableName: TABLE_SCORERS,\n whereClause,\n orderBy: `${quoteIdentifier('createdAt', 'column name')} DESC`,\n offset,\n limit: limitValue,\n });\n\n const scores = rows.map(row => this.mapScore(row));\n\n return {\n scores,\n pagination: {\n total,\n page,\n perPage,\n hasMore: perPageInput === false ? false : offset + scores.length < total,\n },\n };\n }\n\n private buildWhereClause(filters: Record<string, string | undefined>): { sql: string; args: any[] } {\n const conditions: string[] = [];\n const args: any[] = [];\n for (const [column, value] of Object.entries(filters)) {\n if (value !== undefined) {\n conditions.push(`${quoteIdentifier(column, 'column name')} = ?`);\n args.push(value);\n }\n }\n return {\n sql: conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '',\n args,\n };\n }\n\n async getScoresByScorerId(args: {\n scorerId: string;\n pagination: StoragePagination;\n entityId?: string;\n entityType?: string;\n source?: ScoringSource;\n }): Promise<ListScoresResult> {\n return this.listScoresByScorerId(args);\n }\n\n async getScoresByRunId(args: { runId: string; pagination: StoragePagination }): Promise<ListScoresResult> {\n return this.listScoresByRunId(args);\n }\n\n async getScoresByEntityId(args: {\n entityId: string;\n entityType: string;\n pagination: StoragePagination;\n }): Promise<ListScoresResult> {\n return this.listScoresByEntityId(args);\n }\n\n async getScoresBySpan(args: {\n traceId: string;\n spanId: string;\n pagination: StoragePagination;\n }): Promise<ListScoresResult> {\n return this.listScoresBySpan(args);\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<ListScoresResult> {\n return this.fetchScores(this.buildWhereClause({ scorerId, entityId, entityType, source }), pagination);\n }\n\n async listScoresByRunId({\n runId,\n pagination,\n entityId,\n entityType,\n source,\n }: {\n runId: string;\n pagination: StoragePagination;\n entityId?: string;\n entityType?: string;\n source?: ScoringSource;\n }): Promise<ListScoresResult> {\n return this.fetchScores(this.buildWhereClause({ runId, entityId, entityType, source }), pagination);\n }\n\n async listScoresBySpan({\n traceId,\n spanId,\n pagination,\n }: {\n traceId: string;\n spanId: string;\n pagination: StoragePagination;\n }): Promise<ListScoresResult> {\n return this.fetchScores(this.buildWhereClause({ traceId, spanId }), pagination);\n }\n\n async listScoresByEntityId({\n entityId,\n pagination,\n entityType,\n source,\n }: {\n entityId: string;\n pagination: StoragePagination;\n entityType?: string;\n source?: ScoringSource;\n }): Promise<ListScoresResult> {\n return this.fetchScores(this.buildWhereClause({ entityId, entityType, source }), pagination);\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n SkillsStorage,\n createStorageErrorId,\n normalizePerPage,\n calculatePagination,\n TABLE_SKILLS,\n TABLE_SKILL_VERSIONS,\n TABLE_FAVORITES,\n TABLE_SCHEMAS,\n SKILLS_SCHEMA,\n SKILL_VERSIONS_SCHEMA,\n} from '@mastra/core/storage';\nimport type {\n CreateIndexOptions,\n StorageSkillType,\n StorageCreateSkillInput,\n StorageUpdateSkillInput,\n StorageListSkillsInput,\n StorageListSkillsOutput,\n} from '@mastra/core/storage';\nimport type {\n SkillVersion,\n CreateSkillVersionInput,\n ListSkillVersionsInput,\n ListSkillVersionsOutput,\n} from '@mastra/core/storage/domains/skills';\nimport type { Pool, RowDataPacket } from 'mysql2/promise';\n\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL } from '../operations';\nimport { formatTableName, quoteIdentifier } from '../utils';\n\nconst SNAPSHOT_FIELDS = [\n 'name',\n 'description',\n 'instructions',\n 'license',\n 'compatibility',\n 'source',\n 'references',\n 'scripts',\n 'assets',\n 'metadata',\n 'tree',\n] as const;\n\nexport class SkillsMySQL extends SkillsStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_SKILLS, TABLE_SKILL_VERSIONS] as const;\n\n /**\n * Returns default index definitions for the skills domain tables.\n * Currently no default indexes are defined for skills.\n */\n static getDefaultIndexDefs(_prefix: string = ''): CreateIndexOptions[] {\n return [];\n }\n\n /**\n * Exports DDL statements for all managed tables.\n */\n static getExportDDL(): string[] {\n return [\n generateTableSQL({ tableName: TABLE_SKILLS, schema: TABLE_SCHEMAS[TABLE_SKILLS] }),\n generateTableSQL({ tableName: TABLE_SKILL_VERSIONS, schema: TABLE_SCHEMAS[TABLE_SKILL_VERSIONS] }),\n ];\n }\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx => (SkillsMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n /**\n * Returns default index definitions for the skills domain tables.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return SkillsMySQL.getDefaultIndexDefs('');\n }\n\n /**\n * Creates default indexes for optimal query performance.\n * Currently no default indexes are defined for skills.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n // No default indexes for skills domain\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({ tableName: TABLE_SKILLS, schema: SKILLS_SCHEMA });\n await this.operations.createTable({ tableName: TABLE_SKILL_VERSIONS, schema: SKILL_VERSIONS_SCHEMA });\n await this.operations.alterTable({\n tableName: TABLE_SKILLS,\n schema: SKILLS_SCHEMA,\n ifNotExists: ['visibility', 'favoriteCount'],\n });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.operations.clearTable({ tableName: TABLE_SKILL_VERSIONS });\n await this.operations.clearTable({ tableName: TABLE_SKILLS });\n }\n\n private safeParseJSON(val: unknown): any {\n if (val === null || val === undefined) return undefined;\n if (typeof val === 'string') {\n try {\n return JSON.parse(val);\n } catch {\n return val;\n }\n }\n return val;\n }\n\n private parseSkillRow(row: Record<string, unknown>): StorageSkillType {\n return {\n id: row.id as string,\n status: (row.status as StorageSkillType['status']) ?? 'draft',\n activeVersionId: (row.activeVersionId as string) ?? undefined,\n authorId: (row.authorId as string) ?? undefined,\n favoriteCount: row.favoriteCount === null || row.favoriteCount === undefined ? 0 : Number(row.favoriteCount),\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n updatedAt: row.updatedAt instanceof Date ? row.updatedAt : new Date(row.updatedAt as string),\n };\n }\n\n private parseVersionRow(row: Record<string, unknown>): SkillVersion {\n return {\n id: row.id as string,\n skillId: row.skillId as string,\n versionNumber: Number(row.versionNumber),\n name: row.name as string,\n description: (row.description as string) ?? undefined,\n instructions: (row.instructions as string) ?? undefined,\n license: (row.license as string) ?? undefined,\n compatibility: this.safeParseJSON(row.compatibility) as SkillVersion['compatibility'],\n source: this.safeParseJSON(row.source) as SkillVersion['source'],\n references: this.safeParseJSON(row.references) as SkillVersion['references'],\n scripts: this.safeParseJSON(row.scripts) as SkillVersion['scripts'],\n assets: this.safeParseJSON(row.assets) as SkillVersion['assets'],\n metadata: this.safeParseJSON(row.metadata) as Record<string, unknown> | undefined,\n tree: this.safeParseJSON(row.tree) as SkillVersion['tree'],\n changedFields: this.safeParseJSON(row.changedFields) as string[] | undefined,\n changeMessage: (row.changeMessage as string) ?? undefined,\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n };\n }\n\n async getById(id: string): Promise<StorageSkillType | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_SKILLS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n return rows.length ? this.parseSkillRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_SKILL', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async create(input: { skill: StorageCreateSkillInput }): Promise<StorageSkillType> {\n const { skill } = input;\n try {\n const now = new Date();\n await this.operations.insert({\n tableName: TABLE_SKILLS,\n record: {\n id: skill.id,\n status: 'draft',\n activeVersionId: null,\n authorId: skill.authorId ?? null,\n favoriteCount: 0,\n createdAt: now,\n updatedAt: now,\n },\n });\n\n const { id: _id, authorId: _authorId, ...snapshotConfig } = skill;\n const versionId = crypto.randomUUID();\n try {\n await this.createVersion({\n id: versionId,\n skillId: skill.id,\n versionNumber: 1,\n ...snapshotConfig,\n changedFields: Object.keys(snapshotConfig),\n changeMessage: 'Initial version',\n });\n } catch (versionError) {\n await this.operations.delete({ tableName: TABLE_SKILLS, keys: { id: skill.id } });\n throw versionError;\n }\n\n return {\n id: skill.id,\n status: 'draft',\n activeVersionId: undefined,\n authorId: skill.authorId,\n favoriteCount: 0,\n createdAt: now,\n updatedAt: now,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_SKILL', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async update(input: StorageUpdateSkillInput): Promise<StorageSkillType> {\n const { id, ...updates } = input;\n try {\n const existing = await this.getById(id);\n if (!existing)\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_SKILL', 'NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Skill ${id} not found`,\n details: { skillId: id },\n });\n\n const { authorId, activeVersionId, status, ...configFields } = updates;\n const configFieldNames = SNAPSHOT_FIELDS as readonly string[];\n const hasConfigUpdate = configFieldNames.some(field => field in configFields);\n\n const updateData: Record<string, unknown> = { updatedAt: new Date() };\n if (authorId !== undefined) updateData.authorId = authorId;\n if (activeVersionId !== undefined) {\n updateData.activeVersionId = activeVersionId;\n if (status === undefined) updateData.status = 'published';\n }\n if (status !== undefined) updateData.status = status;\n\n await this.operations.update({ tableName: TABLE_SKILLS, keys: { id }, data: updateData });\n\n if (hasConfigUpdate) {\n const latestVersion = await this.getLatestVersion(id);\n if (!latestVersion)\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_SKILL', 'NO_VERSIONS'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `No versions found for skill ${id}`,\n details: { skillId: id },\n });\n\n const {\n id: _versionId,\n skillId: _skillId,\n versionNumber: _versionNumber,\n changedFields: _changedFields,\n changeMessage: _changeMessage,\n createdAt: _createdAt,\n ...latestConfig\n } = latestVersion;\n const newConfig = { ...latestConfig, ...configFields };\n const changedFields = configFieldNames.filter(\n field =>\n field in configFields &&\n JSON.stringify(configFields[field as keyof typeof configFields]) !==\n JSON.stringify(latestConfig[field as keyof typeof latestConfig]),\n );\n\n if (changedFields.length > 0) {\n const newVersionId = crypto.randomUUID();\n await this.createVersion({\n id: newVersionId,\n skillId: id,\n versionNumber: latestVersion.versionNumber + 1,\n ...newConfig,\n changedFields,\n changeMessage: `Updated ${changedFields.join(', ')}`,\n });\n }\n }\n\n const updated = await this.getById(id);\n if (!updated)\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_SKILL', 'NOT_FOUND_AFTER_UPDATE'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `Skill ${id} not found after update`,\n details: { id },\n });\n return updated;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'UPDATE_SKILL', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async delete(id: string): Promise<void> {\n try {\n await this.deleteVersionsByParentId(id);\n await this.operations.delete({ tableName: TABLE_SKILLS, keys: { id } });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_SKILL', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async list(args?: StorageListSkillsInput): Promise<StorageListSkillsOutput> {\n try {\n const {\n page = 0,\n perPage: perPageInput,\n orderBy,\n authorId,\n status,\n visibility,\n entityIds,\n pinFavoritedFor,\n favoritedOnly,\n } = args || {};\n const { field, direction } = this.parseOrderBy(orderBy);\n\n if (page < 0) {\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_SKILLS', '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 perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n // Empty entityIds is short-circuit: no rows possible\n if (entityIds && entityIds.length === 0) {\n return { skills: [], total: 0, page, perPage: perPageForResponse, hasMore: false };\n }\n\n const skillsTable = formatTableName(TABLE_SKILLS);\n const favoritesTable = formatTableName(TABLE_FAVORITES);\n\n // Build WHERE conditions\n const conditions: string[] = [];\n const queryParams: any[] = [];\n let paramIdx = 0;\n\n // Determine if we need a JOIN\n const joinUserId = pinFavoritedFor;\n const useJoin = Boolean(joinUserId);\n let joinUserIdParamIdx: number | null = null;\n if (useJoin) {\n joinUserIdParamIdx = paramIdx++;\n }\n\n if (status) {\n conditions.push(`s.${quoteIdentifier('status', 'column name')} = ?`);\n queryParams.push(status);\n paramIdx++;\n }\n\n if (authorId !== undefined) {\n conditions.push(`s.${quoteIdentifier('authorId', 'column name')} = ?`);\n queryParams.push(authorId);\n paramIdx++;\n }\n\n if (visibility !== undefined) {\n conditions.push(`s.${quoteIdentifier('visibility', 'column name')} = ?`);\n queryParams.push(visibility);\n paramIdx++;\n }\n\n if (entityIds && entityIds.length > 0) {\n const placeholders = entityIds.map(() => '?').join(', ');\n conditions.push(`s.${quoteIdentifier('id', 'column name')} IN (${placeholders})`);\n queryParams.push(...entityIds);\n paramIdx += entityIds.length;\n }\n\n // Handle favoritedOnly\n if (useJoin && favoritedOnly) {\n conditions.push(`sr.${quoteIdentifier('userId', 'column name')} IS NOT NULL`);\n } else if (favoritedOnly) {\n // Defensive: favoritedOnly with no userId can never match a real row\n conditions.push('1=0');\n }\n\n const joinClause =\n useJoin && joinUserIdParamIdx !== null\n ? `LEFT JOIN ${favoritesTable} sr ON sr.${quoteIdentifier('entityType', 'column name')} = 'skill' AND sr.${quoteIdentifier('entityId', 'column name')} = s.${quoteIdentifier('id', 'column name')} AND sr.${quoteIdentifier('userId', 'column name')} = ?`\n : '';\n\n const joinParams: any[] = useJoin && joinUserId ? [joinUserId] : [];\n const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';\n\n // Get total count\n const [countRows] = await this.pool.query<RowDataPacket[]>(\n `SELECT COUNT(*) as count FROM ${skillsTable} s ${joinClause} ${whereClause}`,\n [...joinParams, ...queryParams],\n );\n const total = parseInt(countRows[0]?.count ?? '0', 10);\n\n if (total === 0) {\n return { skills: [], total: 0, page, perPage: perPageForResponse, hasMore: false };\n }\n\n const limitValue = perPageInput === false ? total : perPage;\n const hasMore = perPageInput === false ? false : offset + perPage < total;\n\n // Build ORDER BY\n let orderByClause: string;\n if (useJoin) {\n // Pin favorited skills first\n orderByClause = `CASE WHEN sr.${quoteIdentifier('userId', 'column name')} IS NOT NULL THEN 0 ELSE 1 END ASC, s.${quoteIdentifier(field, 'column name')} ${direction}`;\n } else {\n orderByClause = `s.${quoteIdentifier(field, 'column name')} ${direction}`;\n }\n\n const [rows] = await this.pool.query<RowDataPacket[]>(\n `SELECT s.* FROM ${skillsTable} s ${joinClause} ${whereClause} ORDER BY ${orderByClause} LIMIT ? OFFSET ?`,\n [...joinParams, ...queryParams, limitValue, offset],\n );\n\n return {\n skills: rows.map(row => this.parseSkillRow(row)),\n total,\n page,\n perPage: perPageForResponse,\n hasMore,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_SKILLS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n // ==========================================================================\n // Version Methods\n // ==========================================================================\n\n async createVersion(input: CreateSkillVersionInput): Promise<SkillVersion> {\n try {\n const now = new Date();\n await this.operations.insert({\n tableName: TABLE_SKILL_VERSIONS,\n record: {\n id: input.id,\n skillId: input.skillId,\n versionNumber: input.versionNumber,\n name: input.name,\n description: input.description ?? null,\n instructions: input.instructions ?? null,\n license: input.license ?? null,\n compatibility: input.compatibility ?? null,\n source: input.source ?? null,\n references: input.references ?? null,\n scripts: input.scripts ?? null,\n assets: input.assets ?? null,\n metadata: input.metadata ?? null,\n tree: input.tree ?? null,\n changedFields: input.changedFields ?? null,\n changeMessage: input.changeMessage ?? null,\n createdAt: now,\n },\n });\n return { ...input, createdAt: now };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_SKILL_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getVersion(id: string): Promise<SkillVersion | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_SKILL_VERSIONS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_SKILL_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getVersionByNumber(skillId: string, versionNumber: number): Promise<SkillVersion | null> {\n try {\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_SKILL_VERSIONS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('skillId', 'column name')} = ? AND ${quoteIdentifier('versionNumber', 'column name')} = ?`,\n args: [skillId, versionNumber],\n },\n limit: 1,\n });\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_SKILL_VERSION_BY_NUMBER', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getLatestVersion(skillId: string): Promise<SkillVersion | null> {\n try {\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_SKILL_VERSIONS,\n whereClause: { sql: ` WHERE ${quoteIdentifier('skillId', 'column name')} = ?`, args: [skillId] },\n orderBy: `${quoteIdentifier('versionNumber', 'column name')} DESC`,\n limit: 1,\n });\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_LATEST_SKILL_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listVersions(input: ListSkillVersionsInput): Promise<ListSkillVersionsOutput> {\n try {\n const { skillId, page = 0, perPage: perPageInput, orderBy } = input;\n const { field, direction } = this.parseVersionOrderBy(orderBy);\n const whereClause = { sql: ` WHERE ${quoteIdentifier('skillId', 'column name')} = ?`, args: [skillId] };\n const total = await this.operations.loadTotalCount({ tableName: TABLE_SKILL_VERSIONS, whereClause });\n if (total === 0) return { versions: [], total: 0, page, perPage: perPageInput ?? 20, hasMore: false };\n\n const perPage = normalizePerPage(perPageInput, 20);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_SKILL_VERSIONS,\n whereClause,\n orderBy: `${quoteIdentifier(field, 'column name')} ${direction}`,\n offset,\n limit: limitValue,\n });\n\n return {\n versions: rows.map(row => this.parseVersionRow(row)),\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_SKILL_VERSIONS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteVersion(id: string): Promise<void> {\n try {\n await this.operations.delete({ tableName: TABLE_SKILL_VERSIONS, keys: { id } });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_SKILL_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteVersionsByParentId(entityId: string): Promise<void> {\n try {\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_SKILL_VERSIONS)} WHERE ${quoteIdentifier('skillId', 'column name')} = ?`,\n [entityId],\n );\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_SKILL_VERSIONS_BY_SKILL', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async countVersions(skillId: string): Promise<number> {\n try {\n return await this.operations.loadTotalCount({\n tableName: TABLE_SKILL_VERSIONS,\n whereClause: { sql: ` WHERE ${quoteIdentifier('skillId', 'column name')} = ?`, args: [skillId] },\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'COUNT_SKILL_VERSIONS', '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 {\n ToolProviderConnectionsStorage,\n createStorageErrorId,\n TABLE_TOOL_PROVIDER_CONNECTIONS,\n TABLE_SCHEMAS,\n TOOL_PROVIDER_CONNECTIONS_SCHEMA,\n} from '@mastra/core/storage';\nimport type {\n CreateIndexOptions,\n StorageDeleteToolProviderConnectionInput,\n StorageListToolProviderConnectionsInput,\n StorageToolProviderConnection,\n StorageToolProviderConnectionKey,\n StorageToolProviderConnectionScope,\n StorageUpsertToolProviderConnectionInput,\n} from '@mastra/core/storage';\nimport type { Pool, RowDataPacket } from 'mysql2/promise';\n\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL } from '../operations';\nimport { formatTableName, quoteIdentifier, transformToSqlValue, parseDateTime } from '../utils';\n\nfunction normaliseScope(raw: unknown): StorageToolProviderConnectionScope {\n const value = raw == null ? 'per-author' : String(raw);\n if (value === 'shared') return 'shared';\n if (value === 'caller-supplied') return 'caller-supplied';\n return 'per-author';\n}\n\nfunction rowToToolProviderConnection(row: Record<string, unknown>): StorageToolProviderConnection {\n return {\n authorId: String(row.authorId),\n providerId: String(row.providerId),\n toolkit: String(row.toolkit),\n connectionId: String(row.connectionId),\n label: row.label == null ? null : String(row.label),\n scope: normaliseScope(row.scope),\n createdAt: parseDateTime(row.createdAt as string | number | Date | null | undefined) ?? new Date(),\n updatedAt: parseDateTime(row.updatedAt as string | number | Date | null | undefined) ?? new Date(),\n };\n}\n\nexport class ToolProviderConnectionsMySQL extends ToolProviderConnectionsStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_TOOL_PROVIDER_CONNECTIONS] as const;\n\n /**\n * Returns default index definitions for the tool-provider-connections domain tables.\n * Currently no default indexes are defined for tool-provider-connections.\n */\n static getDefaultIndexDefs(_prefix: string = ''): CreateIndexOptions[] {\n return [];\n }\n\n /**\n * Exports DDL statements for all managed tables.\n */\n static getExportDDL(): string[] {\n return [\n generateTableSQL({\n tableName: TABLE_TOOL_PROVIDER_CONNECTIONS,\n schema: TABLE_SCHEMAS[TABLE_TOOL_PROVIDER_CONNECTIONS],\n compositePrimaryKey: ['authorId', 'providerId', 'connectionId'],\n }),\n ];\n }\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx =>\n (ToolProviderConnectionsMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table),\n );\n }\n\n /**\n * Returns default index definitions for the tool-provider-connections domain tables.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return ToolProviderConnectionsMySQL.getDefaultIndexDefs('');\n }\n\n /**\n * Creates default indexes for optimal query performance.\n * Currently no default indexes are defined for tool-provider-connections.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n // No default indexes for tool-provider-connections domain\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({\n tableName: TABLE_TOOL_PROVIDER_CONNECTIONS,\n schema: TOOL_PROVIDER_CONNECTIONS_SCHEMA,\n });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.operations.clearTable({ tableName: TABLE_TOOL_PROVIDER_CONNECTIONS });\n }\n\n async getConnectionById({\n authorId,\n providerId,\n connectionId,\n }: StorageToolProviderConnectionKey): Promise<StorageToolProviderConnection | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_TOOL_PROVIDER_CONNECTIONS)} WHERE ${quoteIdentifier('authorId', 'column name')} = ? AND ${quoteIdentifier('providerId', 'column name')} = ? AND ${quoteIdentifier('connectionId', 'column name')} = ? LIMIT 1`,\n [authorId, providerId, connectionId],\n );\n return rows.length ? rowToToolProviderConnection(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'TOOL_PROVIDER_CONNECTION_GET', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { authorId, providerId, connectionId },\n },\n error,\n );\n }\n }\n\n async upsertConnection(input: StorageUpsertToolProviderConnectionInput): Promise<StorageToolProviderConnection> {\n const { authorId, providerId, toolkit, connectionId, label } = input;\n const now = new Date();\n const labelValue = label == null ? null : label;\n\n try {\n return await this.operations.withTransaction(async connection => {\n const [existing] = await connection.execute<RowDataPacket[]>(\n `SELECT ${quoteIdentifier('createdAt', 'column name')}, ${quoteIdentifier('scope', 'column name')} FROM ${formatTableName(TABLE_TOOL_PROVIDER_CONNECTIONS)} WHERE ${quoteIdentifier('authorId', 'column name')} = ? AND ${quoteIdentifier('providerId', 'column name')} = ? AND ${quoteIdentifier('connectionId', 'column name')} = ? LIMIT 1`,\n [authorId, providerId, connectionId],\n );\n\n const existingRow = existing[0];\n const createdAt = existingRow ? existingRow.createdAt : now;\n const existingScope = existingRow && existingRow.scope != null ? normaliseScope(existingRow.scope) : undefined;\n const scope: StorageToolProviderConnectionScope = input.scope ?? existingScope ?? 'per-author';\n\n if (existingRow) {\n await connection.execute(\n `UPDATE ${formatTableName(TABLE_TOOL_PROVIDER_CONNECTIONS)} SET ${quoteIdentifier('toolkit', 'column name')} = ?, ${quoteIdentifier('label', 'column name')} = ?, ${quoteIdentifier('scope', 'column name')} = ?, ${quoteIdentifier('updatedAt', 'column name')} = ? WHERE ${quoteIdentifier('authorId', 'column name')} = ? AND ${quoteIdentifier('providerId', 'column name')} = ? AND ${quoteIdentifier('connectionId', 'column name')} = ?`,\n [toolkit, labelValue, scope, transformToSqlValue(now), authorId, providerId, connectionId],\n );\n } else {\n await connection.execute(\n `INSERT INTO ${formatTableName(TABLE_TOOL_PROVIDER_CONNECTIONS)} (${quoteIdentifier('authorId', 'column name')}, ${quoteIdentifier('providerId', 'column name')}, ${quoteIdentifier('toolkit', 'column name')}, ${quoteIdentifier('connectionId', 'column name')}, ${quoteIdentifier('label', 'column name')}, ${quoteIdentifier('scope', 'column name')}, ${quoteIdentifier('createdAt', 'column name')}, ${quoteIdentifier('updatedAt', 'column name')}) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,\n [\n authorId,\n providerId,\n toolkit,\n connectionId,\n labelValue,\n scope,\n transformToSqlValue(createdAt),\n transformToSqlValue(now),\n ],\n );\n }\n\n return {\n authorId,\n providerId,\n toolkit,\n connectionId,\n label: labelValue,\n scope,\n createdAt: parseDateTime(createdAt) ?? now,\n updatedAt: now,\n };\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'TOOL_PROVIDER_CONNECTION_UPSERT', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { authorId, providerId, connectionId },\n },\n error,\n );\n }\n }\n\n async listConnectionsByAuthor({\n authorId,\n providerId,\n toolkit,\n scope,\n }: StorageListToolProviderConnectionsInput): Promise<StorageToolProviderConnection[]> {\n try {\n const clauses: string[] = [];\n const args: (string | number | null)[] = [];\n if (authorId !== undefined) {\n clauses.push(`${quoteIdentifier('authorId', 'column name')} = ?`);\n args.push(authorId);\n }\n if (providerId) {\n clauses.push(`${quoteIdentifier('providerId', 'column name')} = ?`);\n args.push(providerId);\n }\n if (toolkit) {\n clauses.push(`${quoteIdentifier('toolkit', 'column name')} = ?`);\n args.push(toolkit);\n }\n if (scope) {\n clauses.push(`${quoteIdentifier('scope', 'column name')} = ?`);\n args.push(scope);\n }\n const whereClause = clauses.length > 0 ? ` WHERE ${clauses.join(' AND ')}` : '';\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_TOOL_PROVIDER_CONNECTIONS)}${whereClause}`,\n args,\n );\n return rows.map(row => rowToToolProviderConnection(row as Record<string, unknown>));\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'TOOL_PROVIDER_CONNECTION_LIST', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { authorId: authorId ?? '', providerId: providerId ?? '', toolkit: toolkit ?? '' },\n },\n error,\n );\n }\n }\n\n async deleteConnection({\n authorId,\n providerId,\n connectionId,\n }: StorageDeleteToolProviderConnectionInput): Promise<void> {\n try {\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_TOOL_PROVIDER_CONNECTIONS)} WHERE ${quoteIdentifier('authorId', 'column name')} = ? AND ${quoteIdentifier('providerId', 'column name')} = ? AND ${quoteIdentifier('connectionId', 'column name')} = ?`,\n [authorId, providerId, connectionId],\n );\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'TOOL_PROVIDER_CONNECTION_DELETE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { authorId, providerId, connectionId },\n },\n error,\n );\n }\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { TABLE_WORKFLOW_SNAPSHOT, TABLE_SCHEMAS, WorkflowsStorage, normalizePerPage } from '@mastra/core/storage';\nimport type {\n CreateIndexOptions,\n StorageListWorkflowRunsInput,\n UpdateWorkflowStateOptions,\n WorkflowRun,\n WorkflowRuns,\n} from '@mastra/core/storage';\nimport type { StepResult, WorkflowRunState } from '@mastra/core/workflows';\nimport type { Pool, RowDataPacket } from 'mysql2/promise';\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL } from '../operations';\nimport { formatTableName, parseDateTime, quoteIdentifier, transformToSqlValue } from '../utils';\n\ninterface WorkflowRow {\n workflow_name: string;\n run_id: string;\n resourceId: string | null;\n snapshot: string | WorkflowRunState;\n createdAt: Date | string;\n updatedAt: Date | string;\n}\n\nfunction parseSnapshot(snapshot: string | WorkflowRunState): WorkflowRunState | string {\n if (typeof snapshot === 'string') {\n try {\n return JSON.parse(snapshot) as WorkflowRunState;\n } catch {\n return snapshot;\n }\n }\n return snapshot;\n}\n\nfunction mapWorkflowRow(row: WorkflowRow): WorkflowRun {\n return {\n workflowName: row.workflow_name,\n runId: row.run_id,\n resourceId: row.resourceId ?? undefined,\n snapshot: parseSnapshot(row.snapshot),\n createdAt: parseDateTime(row.createdAt) ?? new Date(),\n updatedAt: parseDateTime(row.updatedAt) ?? new Date(),\n };\n}\n\nexport class WorkflowsMySQL extends WorkflowsStorage {\n private operations: StoreOperationsMySQL;\n private pool: Pool;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_WORKFLOW_SNAPSHOT] as const;\n\n /**\n * Returns default index definitions for the workflows domain tables.\n * Currently no default indexes are defined for workflows.\n */\n static getDefaultIndexDefs(_prefix: string = ''): CreateIndexOptions[] {\n return [];\n }\n\n /**\n * Exports DDL statements for all managed tables.\n */\n static getExportDDL(): string[] {\n return [generateTableSQL({ tableName: TABLE_WORKFLOW_SNAPSHOT, schema: TABLE_SCHEMAS[TABLE_WORKFLOW_SNAPSHOT] })];\n }\n\n constructor({\n operations,\n pool,\n skipDefaultIndexes,\n indexes,\n }: {\n operations: StoreOperationsMySQL;\n pool: Pool;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.operations = operations;\n this.pool = pool;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx => (WorkflowsMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n supportsConcurrentUpdates(): boolean {\n return true;\n }\n\n /**\n * Returns default index definitions for the workflows domain tables.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return WorkflowsMySQL.getDefaultIndexDefs('');\n }\n\n /**\n * Creates default indexes for optimal query performance.\n * Currently no default indexes are defined for workflows.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n // No default indexes for workflows domain\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async init(): Promise<void> {\n const schema = TABLE_SCHEMAS[TABLE_WORKFLOW_SNAPSHOT];\n await this.operations.createTable({ tableName: TABLE_WORKFLOW_SNAPSHOT, schema });\n await this.operations.alterTable({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n schema,\n ifNotExists: ['resourceId'],\n });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.pool.execute(`DELETE FROM ${formatTableName(TABLE_WORKFLOW_SNAPSHOT)}`);\n }\n\n async deleteWorkflowRunById({ runId, workflowName }: { runId: string; workflowName: string }): Promise<void> {\n try {\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_WORKFLOW_SNAPSHOT)} WHERE ${quoteIdentifier('workflow_name', 'column name')} = ? AND ${quoteIdentifier('run_id', 'column name')} = ?`,\n [workflowName, runId],\n );\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_WORKFLOWS_DELETE_RUN_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { runId, workflowName },\n },\n error,\n );\n }\n }\n\n async updateWorkflowResults({\n workflowName,\n runId,\n stepId,\n result,\n requestContext,\n }: {\n workflowName: string;\n runId: string;\n stepId: string;\n result: StepResult<any, any, any, any>;\n requestContext?: Record<string, any>;\n }): Promise<Record<string, StepResult<any, any, any, any>>> {\n const connection = await this.pool.getConnection();\n try {\n await connection.beginTransaction();\n const [rows] = await connection.execute<RowDataPacket[]>(\n `SELECT snapshot FROM ${formatTableName(TABLE_WORKFLOW_SNAPSHOT)} WHERE ${quoteIdentifier('workflow_name', 'column name')} = ? AND ${quoteIdentifier('run_id', 'column name')} = ? FOR UPDATE`,\n [workflowName, runId],\n );\n if (!Array.isArray(rows) || rows.length === 0) {\n await connection.rollback();\n throw new MastraError({\n id: 'MYSQL_WORKFLOWS_UPDATE_RESULTS_NOT_FOUND',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { workflowName, runId },\n });\n }\n\n const currentSnapshot = parseSnapshot(rows[0]!.snapshot) as WorkflowRunState;\n const context = { ...(currentSnapshot.context ?? {}) };\n\n context[stepId] = result;\n\n const updatedSnapshot: WorkflowRunState = {\n ...currentSnapshot,\n context,\n requestContext: { ...(currentSnapshot.requestContext ?? {}), ...(requestContext ?? {}) },\n };\n\n await connection.execute(\n `UPDATE ${formatTableName(TABLE_WORKFLOW_SNAPSHOT)} SET ${quoteIdentifier('snapshot', 'column name')} = ?, ${quoteIdentifier('updatedAt', 'column name')} = ? WHERE ${quoteIdentifier('workflow_name', 'column name')} = ? AND ${quoteIdentifier('run_id', 'column name')} = ?`,\n [JSON.stringify(updatedSnapshot), transformToSqlValue(new Date()), workflowName, runId],\n );\n\n await connection.commit();\n\n return context;\n } catch (error) {\n await connection.rollback();\n if (error instanceof MastraError) {\n throw error;\n }\n throw new MastraError(\n {\n id: 'MYSQL_WORKFLOWS_UPDATE_RESULTS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { workflowName, runId, stepId },\n },\n error,\n );\n } finally {\n connection.release();\n }\n }\n\n async updateWorkflowState({\n workflowName,\n runId,\n opts,\n }: {\n workflowName: string;\n runId: string;\n opts: UpdateWorkflowStateOptions;\n }): Promise<WorkflowRunState | undefined> {\n const connection = await this.pool.getConnection();\n try {\n await connection.beginTransaction();\n const [rows] = await connection.execute<RowDataPacket[]>(\n `SELECT snapshot FROM ${formatTableName(TABLE_WORKFLOW_SNAPSHOT)} WHERE ${quoteIdentifier('workflow_name', 'column name')} = ? AND ${quoteIdentifier('run_id', 'column name')} = ? FOR UPDATE`,\n [workflowName, runId],\n );\n if (!Array.isArray(rows) || rows.length === 0) {\n await connection.rollback();\n return undefined;\n }\n\n const existing = parseSnapshot(rows[0]!.snapshot) as WorkflowRunState;\n\n // Merge opts into the snapshot\n const updatedSnapshot = { ...existing, ...opts };\n\n await connection.execute(\n `UPDATE ${formatTableName(TABLE_WORKFLOW_SNAPSHOT)} SET ${quoteIdentifier('snapshot', 'column name')} = ?, ${quoteIdentifier('updatedAt', 'column name')} = ? WHERE ${quoteIdentifier('workflow_name', 'column name')} = ? AND ${quoteIdentifier('run_id', 'column name')} = ?`,\n [JSON.stringify(updatedSnapshot), transformToSqlValue(new Date()), workflowName, runId],\n );\n await connection.commit();\n\n return updatedSnapshot;\n } catch (error) {\n await connection.rollback();\n throw new MastraError(\n {\n id: 'MYSQL_WORKFLOWS_UPDATE_STATE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { workflowName, runId },\n },\n error,\n );\n } finally {\n connection.release();\n }\n }\n\n async persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId,\n snapshot,\n createdAt,\n updatedAt,\n }: {\n workflowName: string;\n runId: string;\n resourceId?: string;\n snapshot: WorkflowRunState;\n createdAt?: Date;\n updatedAt?: Date;\n }): Promise<void> {\n const now = new Date();\n const createdAtValue = createdAt ?? now;\n const updatedAtValue = updatedAt ?? now;\n try {\n const tableName = formatTableName(TABLE_WORKFLOW_SNAPSHOT);\n await this.pool.execute(\n `INSERT INTO ${tableName} (${quoteIdentifier('workflow_name', 'column name')}, ${quoteIdentifier('run_id', 'column name')}, ${quoteIdentifier('resourceId', 'column name')}, ${quoteIdentifier('snapshot', 'column name')}, ${quoteIdentifier('createdAt', 'column name')}, ${quoteIdentifier('updatedAt', 'column name')})\n VALUES (?, ?, ?, ?, ?, ?)\n ON DUPLICATE KEY UPDATE ${quoteIdentifier('resourceId', 'column name')} = VALUES(${quoteIdentifier('resourceId', 'column name')}), ${quoteIdentifier('snapshot', 'column name')} = VALUES(${quoteIdentifier('snapshot', 'column name')}), ${quoteIdentifier('updatedAt', 'column name')} = VALUES(${quoteIdentifier('updatedAt', 'column name')})`,\n [\n workflowName,\n runId,\n resourceId ?? null,\n JSON.stringify(snapshot),\n transformToSqlValue(createdAtValue),\n transformToSqlValue(updatedAtValue),\n ],\n );\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_WORKFLOWS_PERSIST_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 try {\n const row = await this.operations.load<WorkflowRow>({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n keys: { workflow_name: workflowName, run_id: runId },\n });\n return row ? (parseSnapshot(row.snapshot) as WorkflowRunState) : null;\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_WORKFLOWS_LOAD_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 const { workflowName, fromDate, toDate, perPage, page, resourceId, status } = args;\n\n const conditions: string[] = [];\n const params: any[] = [];\n\n if (workflowName) {\n conditions.push(`${quoteIdentifier('workflow_name', 'column name')} = ?`);\n params.push(workflowName);\n }\n if (resourceId) {\n conditions.push(`${quoteIdentifier('resourceId', 'column name')} = ?`);\n params.push(resourceId);\n }\n if (status) {\n conditions.push(`JSON_EXTRACT(${quoteIdentifier('snapshot', 'column name')}, '$.status') = ?`);\n params.push(status);\n }\n if (fromDate) {\n conditions.push(`${quoteIdentifier('createdAt', 'column name')} >= ?`);\n params.push(transformToSqlValue(fromDate));\n }\n if (toDate) {\n conditions.push(`${quoteIdentifier('createdAt', 'column name')} <= ?`);\n params.push(transformToSqlValue(toDate));\n }\n\n const whereSql = conditions.length ? ` WHERE ${conditions.join(' AND ')}` : '';\n const tableName = formatTableName(TABLE_WORKFLOW_SNAPSHOT);\n\n try {\n let total = 0;\n const usePagination = typeof perPage === 'number' && typeof page === 'number';\n\n if (usePagination) {\n const [countRows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT COUNT(*) as count FROM ${tableName}${whereSql}`,\n params,\n );\n total = Number(countRows[0]?.count ?? 0);\n\n if (total === 0) {\n return { runs: [], total: 0 };\n }\n }\n\n let paginationClause = '';\n\n if (usePagination) {\n const normalizedPerPage = normalizePerPage(perPage, Number.MAX_SAFE_INTEGER);\n const offset = page * normalizedPerPage;\n paginationClause = ` LIMIT ${Number(normalizedPerPage)} OFFSET ${Number(offset)}`;\n }\n\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT workflow_name, run_id, resourceId, snapshot, createdAt, updatedAt FROM ${tableName}${whereSql} ORDER BY ${quoteIdentifier('createdAt', 'column name')} DESC${paginationClause}`,\n params,\n );\n\n const runs = (rows as unknown as WorkflowRow[]).map(mapWorkflowRow);\n\n return {\n runs,\n total: total || runs.length,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_WORKFLOWS_GET_RUNS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getWorkflowRuns(args: StorageListWorkflowRunsInput = {}): Promise<WorkflowRuns> {\n return this.listWorkflowRuns(args);\n }\n\n async getWorkflowRunById({\n runId,\n workflowName,\n }: {\n runId: string;\n workflowName?: string;\n }): Promise<WorkflowRun | null> {\n try {\n const runs = await this.operations.loadMany<WorkflowRow>({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n whereClause: {\n sql: workflowName ? ' WHERE workflow_name = ? AND run_id = ?' : ' WHERE run_id = ?',\n args: workflowName ? [workflowName, runId] : [runId],\n },\n orderBy: '`createdAt` DESC',\n limit: 1,\n });\n if (!runs.length) return null;\n return mapWorkflowRow(runs[0]!);\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_WORKFLOWS_GET_RUN_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: { runId, workflowName: workflowName ?? '' },\n },\n error,\n );\n }\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n WorkspacesStorage,\n createStorageErrorId,\n normalizePerPage,\n calculatePagination,\n TABLE_WORKSPACES,\n TABLE_WORKSPACE_VERSIONS,\n TABLE_SCHEMAS,\n WORKSPACES_SCHEMA,\n WORKSPACE_VERSIONS_SCHEMA,\n} from '@mastra/core/storage';\nimport type {\n CreateIndexOptions,\n StorageWorkspaceType,\n StorageCreateWorkspaceInput,\n StorageUpdateWorkspaceInput,\n StorageListWorkspacesInput,\n StorageListWorkspacesOutput,\n} from '@mastra/core/storage';\nimport type {\n WorkspaceVersion,\n CreateWorkspaceVersionInput,\n ListWorkspaceVersionsInput,\n ListWorkspaceVersionsOutput,\n} from '@mastra/core/storage/domains/workspaces';\nimport type { Pool, RowDataPacket } from 'mysql2/promise';\n\nimport type { StoreOperationsMySQL } from '../operations';\nimport { generateTableSQL } from '../operations';\nimport { formatTableName, quoteIdentifier } from '../utils';\n\nconst SNAPSHOT_FIELDS = [\n 'name',\n 'description',\n 'filesystem',\n 'sandbox',\n 'mounts',\n 'search',\n 'skills',\n 'tools',\n 'autoSync',\n 'operationTimeout',\n] as const;\n\nexport class WorkspacesMySQL extends WorkspacesStorage {\n private pool: Pool;\n private operations: StoreOperationsMySQL;\n #skipDefaultIndexes?: boolean;\n #indexes?: CreateIndexOptions[];\n\n /** Tables managed by this domain */\n static readonly MANAGED_TABLES = [TABLE_WORKSPACES, TABLE_WORKSPACE_VERSIONS] as const;\n\n /**\n * Returns default index definitions for the workspaces domain tables.\n * Currently no default indexes are defined for workspaces.\n */\n static getDefaultIndexDefs(_prefix: string = ''): CreateIndexOptions[] {\n return [];\n }\n\n /**\n * Exports DDL statements for all managed tables.\n */\n static getExportDDL(): string[] {\n return [\n generateTableSQL({ tableName: TABLE_WORKSPACES, schema: TABLE_SCHEMAS[TABLE_WORKSPACES] }),\n generateTableSQL({ tableName: TABLE_WORKSPACE_VERSIONS, schema: TABLE_SCHEMAS[TABLE_WORKSPACE_VERSIONS] }),\n ];\n }\n\n constructor({\n pool,\n operations,\n skipDefaultIndexes,\n indexes,\n }: {\n pool: Pool;\n operations: StoreOperationsMySQL;\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n }) {\n super();\n this.pool = pool;\n this.operations = operations;\n this.#skipDefaultIndexes = skipDefaultIndexes;\n this.#indexes = indexes?.filter(idx => (WorkspacesMySQL.MANAGED_TABLES as readonly string[]).includes(idx.table));\n }\n\n /**\n * Returns default index definitions for the workspaces domain tables.\n */\n getDefaultIndexDefinitions(): CreateIndexOptions[] {\n return WorkspacesMySQL.getDefaultIndexDefs('');\n }\n\n /**\n * Creates default indexes for optimal query performance.\n * Currently no default indexes are defined for workspaces.\n */\n async createDefaultIndexes(): Promise<void> {\n if (this.#skipDefaultIndexes) return;\n // No default indexes for workspaces domain\n }\n\n /**\n * Creates custom user-defined indexes for this domain's tables.\n */\n async createCustomIndexes(): Promise<void> {\n if (!this.#indexes || this.#indexes.length === 0) return;\n for (const indexDef of this.#indexes) {\n await this.operations.createIndex(indexDef);\n }\n }\n\n async init(): Promise<void> {\n await this.operations.createTable({ tableName: TABLE_WORKSPACES, schema: WORKSPACES_SCHEMA });\n await this.operations.createTable({ tableName: TABLE_WORKSPACE_VERSIONS, schema: WORKSPACE_VERSIONS_SCHEMA });\n await this.createDefaultIndexes();\n await this.createCustomIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.operations.clearTable({ tableName: TABLE_WORKSPACE_VERSIONS });\n await this.operations.clearTable({ tableName: TABLE_WORKSPACES });\n }\n\n private safeParseJSON<T = unknown>(val: unknown): T | undefined {\n if (val === null || val === undefined) return undefined;\n if (typeof val === 'string') {\n try {\n return JSON.parse(val) as T;\n } catch {\n return val as T;\n }\n }\n return val as T;\n }\n\n private parseWorkspaceRow(row: Record<string, unknown>): StorageWorkspaceType {\n return {\n id: row.id as string,\n status: (row.status as StorageWorkspaceType['status']) ?? 'draft',\n activeVersionId: (row.activeVersionId as string) ?? undefined,\n authorId: (row.authorId as string) ?? undefined,\n metadata: this.safeParseJSON(row.metadata) as Record<string, unknown> | undefined,\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n updatedAt: row.updatedAt instanceof Date ? row.updatedAt : new Date(row.updatedAt as string),\n };\n }\n\n private parseVersionRow(row: Record<string, unknown>): WorkspaceVersion {\n return {\n id: row.id as string,\n workspaceId: row.workspaceId as string,\n versionNumber: Number(row.versionNumber),\n name: row.name as string,\n description: (row.description as string) ?? undefined,\n filesystem: this.safeParseJSON(row.filesystem) as WorkspaceVersion['filesystem'],\n sandbox: this.safeParseJSON(row.sandbox) as WorkspaceVersion['sandbox'],\n mounts: this.safeParseJSON(row.mounts) as WorkspaceVersion['mounts'],\n search: this.safeParseJSON(row.search) as WorkspaceVersion['search'],\n skills: this.safeParseJSON(row.skills) as WorkspaceVersion['skills'],\n tools: this.safeParseJSON(row.tools) as WorkspaceVersion['tools'],\n autoSync: row.autoSync === true || row.autoSync === 1 || row.autoSync === '1',\n operationTimeout: row.operationTimeout != null ? Number(row.operationTimeout) : undefined,\n changedFields: this.safeParseJSON(row.changedFields) as string[] | undefined,\n changeMessage: (row.changeMessage as string) ?? undefined,\n createdAt: row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt as string),\n };\n }\n\n async getById(id: string): Promise<StorageWorkspaceType | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_WORKSPACES)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n return rows.length ? this.parseWorkspaceRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_WORKSPACE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async create(input: { workspace: StorageCreateWorkspaceInput }): Promise<StorageWorkspaceType> {\n const { workspace } = input;\n try {\n const now = new Date();\n await this.operations.withTransaction(async () => {\n await this.operations.insert({\n tableName: TABLE_WORKSPACES,\n record: {\n id: workspace.id,\n status: 'draft',\n activeVersionId: null,\n authorId: workspace.authorId ?? null,\n metadata: workspace.metadata ?? null,\n createdAt: now,\n updatedAt: now,\n },\n });\n\n const { id: _id, authorId: _authorId, metadata: _metadata, ...snapshotConfig } = workspace;\n const versionId = crypto.randomUUID();\n await this.createVersion({\n id: versionId,\n workspaceId: workspace.id,\n versionNumber: 1,\n ...snapshotConfig,\n changedFields: Object.keys(snapshotConfig),\n changeMessage: 'Initial version',\n });\n });\n\n return {\n id: workspace.id,\n status: 'draft',\n activeVersionId: undefined,\n authorId: workspace.authorId,\n metadata: workspace.metadata,\n createdAt: now,\n updatedAt: now,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_WORKSPACE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async update(input: StorageUpdateWorkspaceInput): Promise<StorageWorkspaceType> {\n const { id, ...updates } = input;\n try {\n const existing = await this.getById(id);\n if (!existing)\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_WORKSPACE', 'NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Workspace ${id} not found`,\n details: { workspaceId: id },\n });\n\n const { authorId, activeVersionId, metadata, status, ...configFields } = updates;\n const configFieldNames = SNAPSHOT_FIELDS as readonly string[];\n const hasConfigUpdate = configFieldNames.some(field => field in configFields);\n\n const updateData: Record<string, unknown> = { updatedAt: new Date() };\n if (authorId !== undefined) updateData.authorId = authorId;\n if (activeVersionId !== undefined) {\n updateData.activeVersionId = activeVersionId;\n if (status === undefined) updateData.status = 'published';\n }\n if (status !== undefined) updateData.status = status;\n if (metadata !== undefined) updateData.metadata = { ...(existing.metadata || {}), ...metadata };\n\n await this.operations.withTransaction(async connection => {\n // Lock the workspace row so concurrent updates serialize and cannot\n // race on the version number increment below.\n await connection.execute(\n `SELECT ${quoteIdentifier('id', 'column name')} FROM ${formatTableName(TABLE_WORKSPACES)} WHERE ${quoteIdentifier('id', 'column name')} = ? FOR UPDATE`,\n [id],\n );\n\n await this.operations.update({ tableName: TABLE_WORKSPACES, keys: { id }, data: updateData });\n\n if (hasConfigUpdate) {\n // Read latest version inside transaction to prevent race conditions\n const latestVersion = await this.getLatestVersion(id);\n if (!latestVersion) throw new Error(`No versions found for workspace ${id}`);\n\n const {\n id: _versionId,\n workspaceId: _workspaceId,\n versionNumber: _versionNumber,\n changedFields: _changedFields,\n changeMessage: _changeMessage,\n createdAt: _createdAt,\n ...latestConfig\n } = latestVersion;\n const newConfig = { ...latestConfig, ...configFields };\n const changedFields = configFieldNames.filter(\n field =>\n field in configFields &&\n JSON.stringify(configFields[field as keyof typeof configFields]) !==\n JSON.stringify(latestConfig[field as keyof typeof latestConfig]),\n );\n\n if (changedFields.length > 0) {\n const newVersionId = crypto.randomUUID();\n await this.createVersion({\n id: newVersionId,\n workspaceId: id,\n versionNumber: latestVersion.versionNumber + 1,\n ...newConfig,\n changedFields,\n changeMessage: `Updated ${changedFields.join(', ')}`,\n });\n }\n }\n });\n\n const updated = await this.getById(id);\n if (!updated)\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'UPDATE_WORKSPACE', 'NOT_FOUND_AFTER_UPDATE'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: `Workspace ${id} not found after update`,\n details: { id },\n });\n return updated;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'UPDATE_WORKSPACE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async delete(id: string): Promise<void> {\n try {\n await this.operations.withTransaction(async () => {\n await this.deleteVersionsByParentId(id);\n await this.operations.delete({ tableName: TABLE_WORKSPACES, keys: { id } });\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_WORKSPACE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async list(args?: StorageListWorkspacesInput): Promise<StorageListWorkspacesOutput> {\n try {\n const { page = 0, perPage: perPageInput, orderBy, authorId, metadata } = args || {};\n const { field, direction } = this.parseOrderBy(orderBy);\n\n const conditions: string[] = [];\n const queryParams: any[] = [];\n if (authorId !== undefined) {\n conditions.push(`${quoteIdentifier('authorId', 'column name')} = ?`);\n queryParams.push(authorId);\n }\n if (metadata && Object.keys(metadata).length > 0) {\n for (const [key, value] of Object.entries(metadata)) {\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(key))\n throw new MastraError({\n id: createStorageErrorId('MYSQL', 'LIST_WORKSPACES', 'INVALID_METADATA_KEY'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Invalid metadata key: ${key}`,\n details: { key },\n });\n if (typeof value === 'string') {\n conditions.push(\n `JSON_UNQUOTE(JSON_EXTRACT(${quoteIdentifier('metadata', 'column name')}, '$.${key}')) = ?`,\n );\n queryParams.push(value);\n } else {\n conditions.push(\n `JSON_EXTRACT(${quoteIdentifier('metadata', 'column name')}, '$.${key}') = CAST(? AS JSON)`,\n );\n queryParams.push(JSON.stringify(value));\n }\n }\n }\n\n const whereClause =\n conditions.length > 0 ? { sql: ` WHERE ${conditions.join(' AND ')}`, args: queryParams } : undefined;\n const total = await this.operations.loadTotalCount({ tableName: TABLE_WORKSPACES, whereClause });\n if (total === 0) return { workspaces: [], total: 0, page, perPage: perPageInput ?? 100, hasMore: false };\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_WORKSPACES,\n whereClause,\n orderBy: `${quoteIdentifier(field, 'column name')} ${direction}`,\n offset,\n limit: limitValue,\n });\n\n return {\n workspaces: rows.map(row => this.parseWorkspaceRow(row)),\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_WORKSPACES', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n // ==========================================================================\n // Version Methods\n // ==========================================================================\n\n async createVersion(input: CreateWorkspaceVersionInput): Promise<WorkspaceVersion> {\n try {\n const now = new Date();\n await this.operations.insert({\n tableName: TABLE_WORKSPACE_VERSIONS,\n record: {\n id: input.id,\n workspaceId: input.workspaceId,\n versionNumber: input.versionNumber,\n name: input.name,\n description: input.description ?? null,\n filesystem: input.filesystem ?? null,\n sandbox: input.sandbox ?? null,\n mounts: input.mounts ?? null,\n search: input.search ?? null,\n skills: input.skills ?? null,\n tools: input.tools ?? null,\n autoSync: input.autoSync ? 1 : 0,\n operationTimeout: input.operationTimeout ?? null,\n changedFields: input.changedFields ?? null,\n changeMessage: input.changeMessage ?? null,\n createdAt: now,\n },\n });\n return { ...input, createdAt: now };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'CREATE_WORKSPACE_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getVersion(id: string): Promise<WorkspaceVersion | null> {\n try {\n const [rows] = await this.pool.execute<RowDataPacket[]>(\n `SELECT * FROM ${formatTableName(TABLE_WORKSPACE_VERSIONS)} WHERE ${quoteIdentifier('id', 'column name')} = ?`,\n [id],\n );\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_WORKSPACE_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getVersionByNumber(workspaceId: string, versionNumber: number): Promise<WorkspaceVersion | null> {\n try {\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_WORKSPACE_VERSIONS,\n whereClause: {\n sql: ` WHERE ${quoteIdentifier('workspaceId', 'column name')} = ? AND ${quoteIdentifier('versionNumber', 'column name')} = ?`,\n args: [workspaceId, versionNumber],\n },\n limit: 1,\n });\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_WORKSPACE_VERSION_BY_NUMBER', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async getLatestVersion(workspaceId: string): Promise<WorkspaceVersion | null> {\n try {\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_WORKSPACE_VERSIONS,\n whereClause: { sql: ` WHERE ${quoteIdentifier('workspaceId', 'column name')} = ?`, args: [workspaceId] },\n orderBy: `${quoteIdentifier('versionNumber', 'column name')} DESC`,\n limit: 1,\n });\n return rows.length ? this.parseVersionRow(rows[0]!) : null;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'GET_LATEST_WORKSPACE_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async listVersions(input: ListWorkspaceVersionsInput): Promise<ListWorkspaceVersionsOutput> {\n try {\n const { workspaceId, page = 0, perPage: perPageInput, orderBy } = input;\n const { field, direction } = this.parseVersionOrderBy(orderBy);\n const whereClause = { sql: ` WHERE ${quoteIdentifier('workspaceId', 'column name')} = ?`, args: [workspaceId] };\n const total = await this.operations.loadTotalCount({ tableName: TABLE_WORKSPACE_VERSIONS, whereClause });\n if (total === 0) return { versions: [], total: 0, page, perPage: perPageInput ?? 20, hasMore: false };\n\n const perPage = normalizePerPage(perPageInput, 20);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const limitValue = perPageInput === false ? total : perPage;\n\n const rows = await this.operations.loadMany<Record<string, unknown>>({\n tableName: TABLE_WORKSPACE_VERSIONS,\n whereClause,\n orderBy: `${quoteIdentifier(field, 'column name')} ${direction}`,\n offset,\n limit: limitValue,\n });\n\n return {\n versions: rows.map(row => this.parseVersionRow(row)),\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'LIST_WORKSPACE_VERSIONS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteVersion(id: string): Promise<void> {\n try {\n await this.operations.delete({ tableName: TABLE_WORKSPACE_VERSIONS, keys: { id } });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_WORKSPACE_VERSION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async deleteVersionsByParentId(entityId: string): Promise<void> {\n try {\n await this.pool.execute(\n `DELETE FROM ${formatTableName(TABLE_WORKSPACE_VERSIONS)} WHERE ${quoteIdentifier('workspaceId', 'column name')} = ?`,\n [entityId],\n );\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'DELETE_WORKSPACE_VERSIONS_BY_WORKSPACE', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async countVersions(workspaceId: string): Promise<number> {\n try {\n return await this.operations.loadTotalCount({\n tableName: TABLE_WORKSPACE_VERSIONS,\n whereClause: { sql: ` WHERE ${quoteIdentifier('workspaceId', 'column name')} = ?`, args: [workspaceId] },\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId('MYSQL', 'COUNT_WORKSPACE_VERSIONS', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n}\n","import { MastraError, ErrorCategory, ErrorDomain } from '@mastra/core/error';\nimport { MastraCompositeStore } from '@mastra/core/storage';\nimport type { StorageDomains, CreateIndexOptions } from '@mastra/core/storage';\nimport { createPool } from 'mysql2/promise';\nimport type { Pool, PoolOptions } from 'mysql2/promise';\n\nimport { AgentsMySQL } from './domains/agents';\nimport { BackgroundTasksMySQL } from './domains/background-tasks';\nimport { BlobsMySQL } from './domains/blobs';\nimport { ChannelsMySQL } from './domains/channels';\nimport { DatasetsMySQL } from './domains/datasets';\nimport { ExperimentsMySQL } from './domains/experiments';\nimport { FavoritesMySQL } from './domains/favorites';\nimport { MCPClientsMySQL } from './domains/mcp-clients';\nimport { MCPServersMySQL } from './domains/mcp-servers';\nimport { MemoryMySQL } from './domains/memory';\nimport { ObservabilityMySQL } from './domains/observability';\nimport { StoreOperationsMySQL } from './domains/operations';\nimport { PromptBlocksMySQL } from './domains/prompt-blocks';\nimport { SchedulesMySQL } from './domains/schedules';\nimport { ScorerDefinitionsMySQL } from './domains/scorer-definitions';\nimport { ScoresMySQL } from './domains/scores';\nimport { SkillsMySQL } from './domains/skills';\nimport { ToolProviderConnectionsMySQL } from './domains/tool-provider-connections';\nimport { WorkflowsMySQL } from './domains/workflows';\nimport { WorkspacesMySQL } from './domains/workspaces';\n\n// Export domain classes for direct use with MastraStorage composition\nexport {\n AgentsMySQL,\n BackgroundTasksMySQL,\n BlobsMySQL,\n ChannelsMySQL,\n DatasetsMySQL,\n ExperimentsMySQL,\n FavoritesMySQL,\n MCPClientsMySQL,\n MCPServersMySQL,\n MemoryMySQL,\n ObservabilityMySQL,\n StoreOperationsMySQL,\n PromptBlocksMySQL,\n SchedulesMySQL,\n ScorerDefinitionsMySQL,\n ScoresMySQL,\n SkillsMySQL,\n ToolProviderConnectionsMySQL,\n WorkflowsMySQL,\n WorkspacesMySQL,\n};\n\nexport type MySQLStoreConfig = (\n | {\n connectionString: string;\n database?: string;\n max?: number;\n ssl?: boolean | Record<string, unknown>;\n }\n | {\n host: string;\n port?: number;\n user: string;\n password?: string;\n database: string;\n ssl?: boolean | Record<string, unknown>;\n max?: number;\n waitForConnections?: boolean;\n queueLimit?: number;\n }\n) & {\n skipDefaultIndexes?: boolean;\n indexes?: CreateIndexOptions[];\n};\n\nfunction validateConfig(config: MySQLStoreConfig): void {\n if ('connectionString' in config) {\n if (!config.connectionString || typeof config.connectionString !== 'string') {\n throw new Error('MySQLStore: connectionString must be a non-empty string.');\n }\n return;\n }\n\n const required: Array<keyof typeof config> = ['host', 'user', 'database'];\n for (const key of required) {\n const value = config[key];\n if (typeof value !== 'string' || value.trim() === '') {\n throw new Error(`MySQLStore: ${key} must be provided and cannot be empty.`);\n }\n }\n\n if ('password' in config && config.password !== undefined) {\n if (typeof config.password !== 'string') {\n throw new Error('MySQLStore: password must be a string if provided.');\n }\n }\n}\n\nfunction createMySQLPool(config: MySQLStoreConfig): { pool: Pool; database?: string } {\n if ('connectionString' in config) {\n const { options } = parseConnectionString(config.connectionString, config);\n return { pool: createPool(options), database: options.database };\n }\n\n const options: PoolOptions = {\n host: config.host,\n port: config.port ?? 3306,\n user: config.user,\n database: config.database,\n connectionLimit: config.max ?? 10,\n waitForConnections: config.waitForConnections ?? true,\n queueLimit: config.queueLimit ?? 0,\n dateStrings: true,\n };\n\n if (config.password !== undefined) {\n options.password = config.password;\n }\n\n if ('ssl' in config && config.ssl) {\n options.ssl = typeof config.ssl === 'boolean' ? {} : (config.ssl as PoolOptions['ssl']);\n }\n\n return { pool: createPool(options), database: options.database };\n}\n\nfunction parseConnectionString(\n connectionString: string,\n overrides: Extract<MySQLStoreConfig, { connectionString: string }>,\n): { options: PoolOptions } {\n const url = new URL(connectionString);\n\n const databaseFromUrl = url.pathname.replace(/^\\//, '') || undefined;\n\n const base: PoolOptions = {\n host: url.hostname || 'localhost',\n port: url.port ? Number(url.port) : 3306,\n user: decodeURIComponent(url.username),\n password: decodeURIComponent(url.password),\n database: overrides.database ?? databaseFromUrl,\n connectionLimit: overrides.max ?? 10,\n waitForConnections: true,\n queueLimit: 0,\n dateStrings: true,\n };\n\n if (url.searchParams.has('waitForConnections')) {\n base.waitForConnections = url.searchParams.get('waitForConnections') === 'true';\n }\n if (url.searchParams.has('queueLimit')) {\n const queueLimit = Number(url.searchParams.get('queueLimit'));\n if (!Number.isNaN(queueLimit)) {\n base.queueLimit = queueLimit;\n }\n }\n if (url.searchParams.has('connectionLimit')) {\n const connectionLimit = Number(url.searchParams.get('connectionLimit'));\n if (!Number.isNaN(connectionLimit)) {\n base.connectionLimit = connectionLimit;\n }\n }\n if (url.searchParams.has('dateStrings')) {\n base.dateStrings = url.searchParams.get('dateStrings') === 'true';\n }\n\n let sslParam: unknown = overrides.ssl ?? url.searchParams.get('ssl') ?? undefined;\n if (typeof sslParam === 'string') {\n const trimmed = sslParam.trim();\n const lowered = trimmed.toLowerCase();\n if (['false', '0', 'off', ''].includes(lowered)) {\n sslParam = undefined;\n } else if (['true', '1', 'on'].includes(lowered)) {\n sslParam = {};\n } else if (\n (trimmed.startsWith('{') && trimmed.endsWith('}')) ||\n (trimmed.startsWith('[') && trimmed.endsWith(']'))\n ) {\n try {\n sslParam = JSON.parse(trimmed);\n } catch {\n sslParam = undefined;\n }\n }\n }\n if (sslParam && typeof sslParam === 'object') {\n base.ssl = sslParam as PoolOptions['ssl'];\n }\n\n return { options: base };\n}\n\nexport class MySQLStore extends MastraCompositeStore {\n private pool: Pool;\n\n stores: StorageDomains;\n\n constructor(config: MySQLStoreConfig & { id?: string; disableInit?: boolean }) {\n super({ id: config.id ?? 'mysql', name: 'MySQLStore', disableInit: config.disableInit });\n validateConfig(config);\n const { pool, database } = createMySQLPool(config);\n this.pool = pool;\n\n const operations = new StoreOperationsMySQL({ pool: this.pool, database });\n\n const memory = new MemoryMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const workflows = new WorkflowsMySQL({\n operations,\n pool: this.pool,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const scores = new ScoresMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const observability = new ObservabilityMySQL({\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const agents = new AgentsMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const datasets = new DatasetsMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const experiments = new ExperimentsMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const promptBlocks = new PromptBlocksMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const scorerDefinitions = new ScorerDefinitionsMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const mcpClients = new MCPClientsMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const mcpServers = new MCPServersMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const workspaces = new WorkspacesMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const skills = new SkillsMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const blobs = new BlobsMySQL({ pool: this.pool, operations });\n const backgroundTasks = new BackgroundTasksMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const channels = new ChannelsMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const favorites = new FavoritesMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const schedules = new SchedulesMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n const toolProviderConnections = new ToolProviderConnectionsMySQL({\n pool: this.pool,\n operations,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n });\n\n this.stores = {\n memory,\n workflows,\n scores,\n observability,\n agents,\n datasets,\n experiments,\n promptBlocks,\n scorerDefinitions,\n mcpClients,\n mcpServers,\n workspaces,\n skills,\n blobs,\n backgroundTasks,\n channels,\n favorites,\n schedules,\n toolProviderConnections,\n };\n }\n\n async init(): Promise<void> {\n try {\n const connection = await this.pool.getConnection();\n connection.release();\n await super.init();\n } catch (error) {\n throw new MastraError(\n {\n id: 'MYSQL_STORE_INIT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async close(): Promise<void> {\n await this.pool.end();\n }\n}\n\n/**\n * All storage domain classes that provide static getExportDDL methods.\n */\nconst ALL_DOMAINS = [\n MemoryMySQL,\n ObservabilityMySQL,\n ScoresMySQL,\n ScorerDefinitionsMySQL,\n PromptBlocksMySQL,\n AgentsMySQL,\n WorkflowsMySQL,\n DatasetsMySQL,\n ExperimentsMySQL,\n BackgroundTasksMySQL,\n FavoritesMySQL,\n ChannelsMySQL,\n SchedulesMySQL,\n] as const;\n\n/**\n * Exports the Mastra database schema as MySQL DDL statements.\n * Does not require a database connection.\n */\nexport function exportSchemas(): string {\n const statements: string[] = [];\n\n for (const Domain of ALL_DOMAINS) {\n statements.push(...Domain.getExportDDL());\n }\n\n return statements.join('\\n');\n}\n"]}