@mastra/oracledb 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/dist/docs/SKILL.md +2 -2
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/docs/references/docs-memory-observational-memory.md +13 -13
- package/dist/docs/references/docs-memory-semantic-recall.md +1 -1
- package/dist/docs/references/docs-memory-working-memory.md +3 -3
- package/dist/docs/references/{docs-storage-overview.md → docs-storage.md} +9 -7
- package/dist/docs/references/reference-rag-metadata-filters.md +17 -9
- package/dist/docs/references/reference-rag-retrieval.md +139 -23
- package/dist/index.cjs +5 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/storage/domains/workflows/index.d.ts.map +1 -1
- package/package.json +4 -4
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/shared/connection.ts","../src/vector/identifiers.ts","../src/vector/sql.ts","../src/vector/filter.ts","../src/vector/upsert.ts","../src/vector/ddl.ts","../src/vector/query.ts","../src/vector/stats.ts","../src/vector/index.ts","../src/storage/db/index.ts","../src/storage/domain-utils.ts","../src/storage/domains/agents/index.ts","../src/storage/domains/mcp-clients/index.ts","../src/storage/domains/memory/utils.ts","../src/storage/domains/memory/schema.ts","../src/storage/domains/memory/messages.ts","../src/storage/domains/memory/observational.ts","../src/storage/domains/memory/observational-buffering.ts","../src/storage/domains/memory/resources.ts","../src/storage/domains/memory/threads.ts","../src/storage/domains/memory/index.ts","../src/storage/domains/observability/schema.ts","../src/storage/domains/observability/binds.ts","../src/storage/domains/observability/logs.ts","../src/storage/domains/observability/scores-bridge.ts","../src/storage/domains/observability/spans.ts","../src/storage/domains/observability/index.ts","../src/storage/domains/scorer-definitions/index.ts","../src/storage/domains/scores/index.ts","../src/storage/domains/workflows/index.ts","../src/storage/migrations.ts","../src/storage/index.ts","../src/schema.ts","../src/vector/prompt.ts"],"names":["indexName","oracledb","tableName","ErrorCategory","MastraError","sql","result","validateTopK","table","validatePositiveInteger","ErrorDomain","STORE_NAME","TABLE_SCHEMAS","rows","jsonValue","VERSION_VERSION_NUMBER","VERSION_CHANGED_FIELDS","VERSION_CHANGE_MESSAGE","VERSION_CREATED_AT","normalizePerPage","calculatePagination","jsonComparableValue","optionalString","parseJson","randomUUID","TABLE_OBSERVATIONAL_MEMORY","TABLE_MESSAGES","TABLE_THREADS","TABLE_RESOURCES","bind","list","SIMPLE_IDENTIFIER","LOWERCASE_SQL_IDENTIFIER","storageError","isIdentifierLikeColumn","createStorageErrorId","TABLE_SCORERS","TABLE_SPANS","SNAPSHOT_FIELDS","coreTransformScoreRow","TABLE_WORKFLOW_SNAPSHOT","toDate","createHash","DEFAULT_VECTOR_REGISTRY_TABLE","TABLE_SCORER_DEFINITIONS","TABLE_SCORER_DEFINITION_VERSIONS","TABLE_MCP_CLIENTS","TABLE_MCP_CLIENT_VERSIONS","TABLE_AGENTS","TABLE_AGENT_VERSIONS"],"mappings":"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","file":"index.js","sourcesContent":["import oracledb from 'oracledb';\nimport type { Connection, Pool, PoolAttributes } from 'oracledb';\n\nexport interface OracleConnectionConfig {\n user?: string;\n password?: string;\n connectString?: string;\n pool?: Pool;\n poolMin?: number;\n poolMax?: number;\n poolIncrement?: number;\n configDir?: string;\n walletLocation?: string;\n walletPassword?: string;\n externalAuth?: boolean;\n}\n\ntype BindParameters = oracledb.BindParameters;\n\nexport type ObjectRow = Record<string, unknown>;\n\nexport class OraclePoolManager {\n // Pool creation is lazy and memoized so OracleStore and OracleVector can share one manager safely.\n private poolPromise?: Promise<Pool>;\n private readonly poolOptions?: PoolAttributes;\n private readonly ownsPool: boolean;\n\n constructor(private readonly config: OracleConnectionConfig) {\n validateOracleConnectionConfig(config);\n this.ownsPool = !config.pool;\n if (!config.pool) {\n this.poolOptions = buildPoolOptions(config);\n }\n }\n\n async getPool(): Promise<Pool> {\n if (this.config.pool) return this.config.pool;\n if (!this.poolOptions) {\n throw new Error('Oracle pool options were not initialized');\n }\n if (!this.poolPromise) {\n // Reset the promise on failure so a transient listener/network issue does not poison the manager forever.\n this.poolPromise = oracledb.createPool(this.poolOptions).catch(error => {\n this.poolPromise = undefined;\n throw error;\n });\n }\n return this.poolPromise;\n }\n\n async withConnection<T>(callback: (connection: Connection) => Promise<T>): Promise<T> {\n const pool = await this.getPool();\n const connection = await pool.getConnection();\n try {\n // Transaction ownership stays with the caller; this helper only owns acquire/release.\n return await callback(connection);\n } finally {\n await connection.close();\n }\n }\n\n async close(): Promise<void> {\n if (this.ownsPool && this.poolPromise) {\n const poolPromise = this.poolPromise;\n this.poolPromise = undefined;\n const pool = await poolPromise;\n await pool.close(0);\n }\n }\n}\n\nexport function validateOracleConnectionConfig(config: OracleConnectionConfig): void {\n if (!config.pool) {\n // External authentication (OS/Kerberos/wallet TLS) identifies the session\n // without explicit credentials, so user and password may both be omitted.\n if (!config.connectString || (!config.externalAuth && !config.user)) {\n throw new Error('Provide either an Oracle pool or user/connectString credentials');\n }\n if (!config.externalAuth && !config.password) {\n throw new Error('Password is required unless externalAuth is enabled');\n }\n }\n}\n\nexport function normalizeBatchSize(value: number | undefined, label: string, defaultValue: number): number {\n if (value === undefined) return defaultValue;\n if (!Number.isInteger(value) || value <= 0) {\n throw new Error(`${label} must be a positive integer`);\n }\n return value;\n}\n\nexport function buildPoolOptions(config: OracleConnectionConfig): PoolAttributes {\n const options: PoolAttributes = {\n user: config.user,\n password: config.password,\n connectString: config.connectString,\n poolMin: config.poolMin ?? 0,\n poolMax: config.poolMax ?? 4,\n poolIncrement: config.poolIncrement ?? 1,\n externalAuth: config.externalAuth,\n };\n\n if (config.configDir) options.configDir = config.configDir;\n if (config.walletLocation) options.walletLocation = config.walletLocation;\n if (config.walletPassword) options.walletPassword = config.walletPassword;\n\n return options;\n}\n\nexport function executeOptions(): oracledb.ExecuteOptions {\n return {\n outFormat: oracledb.OUT_FORMAT_OBJECT,\n // Mastra stores several rich text fields as CLOBs; fetch them as strings to keep domain mappers simple.\n fetchInfo: {\n content: { type: oracledb.STRING as unknown as number },\n instructions: { type: oracledb.STRING as unknown as number },\n description: { type: oracledb.STRING as unknown as number },\n changeMessage: { type: oracledb.STRING as unknown as number },\n other: { type: oracledb.STRING as unknown as number },\n workingMemory: { type: oracledb.STRING as unknown as number },\n activeObservations: { type: oracledb.STRING as unknown as number },\n activeObservationsPendingUpdate: { type: oracledb.STRING as unknown as number },\n bufferedObservations: { type: oracledb.STRING as unknown as number },\n bufferedReflection: { type: oracledb.STRING as unknown as number },\n message: { type: oracledb.STRING as unknown as number },\n reason: { type: oracledb.STRING as unknown as number },\n preprocessPrompt: { type: oracledb.STRING as unknown as number },\n extractPrompt: { type: oracledb.STRING as unknown as number },\n generateScorePrompt: { type: oracledb.STRING as unknown as number },\n generateReasonPrompt: { type: oracledb.STRING as unknown as number },\n analyzePrompt: { type: oracledb.STRING as unknown as number },\n reasonPrompt: { type: oracledb.STRING as unknown as number },\n },\n };\n}\n\nexport function rows<T extends ObjectRow = ObjectRow>(result: oracledb.Result<T>): T[] {\n return result.rows ?? [];\n}\n\nexport function asBindParameters(binds: Record<string, unknown>): BindParameters {\n return binds as BindParameters;\n}\n\nexport function jsonBind(value: unknown): oracledb.BindParameter {\n // Bind JSON as text and let the SERVER encode the OSON image. Images encoded\n // client-side by the node-oracledb thin driver (DB_TYPE_JSON) carry header\n // flags (HASH_ID_UINT8 | TINY_NODES_STAT) that Oracle's own JDBC parser does\n // not implement, so DBeaver/DataGrip/SQL Developer fail to render the rows\n // with UnsupportedOperationException in OsonHeader. The column type stays\n // native JSON; only the text->OSON encoding moves server-side.\n return { type: oracledb.DB_TYPE_VARCHAR, val: jsonBindText(value ?? null) };\n}\n\nexport function jsonBindText(value: unknown): string | null {\n if (value === undefined || value === null) return null;\n return sanitizeJsonString(safeJsonStringify(value));\n}\n\nexport function nullableJsonBind(value: unknown): oracledb.BindParameter | null {\n return value === undefined || value === null ? null : jsonBind(value);\n}\n\nexport function clobBind(value: string): oracledb.BindParameter {\n return { type: oracledb.DB_TYPE_CLOB, val: value };\n}\n\nexport function nullableClobBind(value: string | null | undefined): oracledb.BindParameter | null {\n return value === undefined || value === null ? null : { type: oracledb.DB_TYPE_CLOB, val: value };\n}\n\nexport function safeJsonValue(value: unknown): unknown {\n return JSON.parse(sanitizeJsonString(safeJsonStringify(value))) as unknown;\n}\n\nexport function safeJsonStringify(value: unknown): string {\n const ancestors = new Set<object>();\n\n const sanitize = (candidate: unknown): unknown => {\n if (candidate === null || candidate === undefined) return candidate;\n if (typeof candidate === 'function' || typeof candidate === 'symbol') return undefined;\n if (typeof candidate === 'bigint') return candidate.toString();\n if (typeof candidate !== 'object') return candidate;\n\n // Mastra runtime objects can contain cycles or class instances; keep only JSON-safe values for Oracle JSON columns.\n if (ancestors.has(candidate)) return undefined;\n\n ancestors.add(candidate);\n try {\n let keys: string[];\n try {\n keys = Object.keys(candidate);\n } catch {\n return undefined;\n }\n\n const toJSON = (candidate as Record<string, unknown>).toJSON;\n if (typeof toJSON === 'function') {\n try {\n return sanitize((toJSON as () => unknown).call(candidate));\n } catch {\n return undefined;\n }\n }\n\n if (Array.isArray(candidate)) {\n return candidate.map(item => sanitize(item));\n }\n\n const result: Record<string, unknown> = {};\n for (const key of keys) {\n const sanitized = sanitize((candidate as Record<string, unknown>)[key]);\n if (sanitized !== undefined) result[key] = sanitized;\n }\n return result;\n } finally {\n ancestors.delete(candidate);\n }\n };\n\n return JSON.stringify(sanitize(value)) ?? 'null';\n}\n\nexport function sanitizeJsonString(jsonString: string): string {\n return jsonString\n .replace(/\\\\\\\\?u(0000|[Dd][89A-Fa-f][0-9A-Fa-f]{2})/g, '')\n .replace(/(^|[^\\\\])(\\\\(?![\"\\\\/bfnrtu]))/g, '$1\\\\\\\\');\n}\n\nexport async function executeDdl(\n connection: Connection,\n ddl: string,\n ignoredErrorCodes: number[] = [],\n): Promise<boolean> {\n const retryableLockCodes = [-54, -14411];\n const retryDelays = [100, 250, 500, 1_000, 1_500];\n\n for (let attempt = 0; attempt <= retryDelays.length; attempt += 1) {\n try {\n await connection.execute(ddl);\n return true;\n } catch (error) {\n if (isOracleErrorCode(error, ignoredErrorCodes)) return false;\n // Online DDL can still briefly collide with readers/writers; retry the known Oracle lock codes.\n if (attempt < retryDelays.length && isOracleErrorCode(error, retryableLockCodes)) {\n await sleep(retryDelays[attempt]!);\n continue;\n }\n throw error;\n }\n }\n\n return false;\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\nexport async function rollbackQuietly(connection: Connection): Promise<void> {\n try {\n await connection.rollback();\n } catch {\n // Preserve the original database error.\n }\n}\n\nexport function isOracleErrorCode(error: unknown, ignoredCodes: number[]): boolean {\n if (!error || typeof error !== 'object') return false;\n const errorCode = 'errorNum' in error ? Number(error.errorNum) : undefined;\n if (errorCode && ignoredCodes.includes(-Math.abs(errorCode))) return true;\n\n const message = 'message' in error ? String(error.message) : '';\n return ignoredCodes.some(code => message.includes(`ORA-${String(Math.abs(code)).padStart(5, '0')}`));\n}\n","import { createHash } from 'node:crypto';\n\n// Oracle object names are capped at 128 bytes, while Mastra index names are user-facing labels.\nconst IDENTIFIER_PATTERN = /^[A-Za-z][A-Za-z0-9_]*$/;\nconst MAX_IDENTIFIER_LENGTH = 128;\nconst MAX_LOGICAL_INDEX_NAME_LENGTH = 512;\n\n// Strict identifiers are used only for physical Oracle objects and schema names.\nexport function normalizeIdentifier(value: string, label: string): string {\n const normalized = value.trim().toUpperCase();\n if (!IDENTIFIER_PATTERN.test(normalized)) {\n throw new Error(`${label} must start with a letter and contain only letters, numbers, and underscores`);\n }\n if (normalized.length > MAX_IDENTIFIER_LENGTH) {\n throw new Error(`${label} must be ${MAX_IDENTIFIER_LENGTH} characters or fewer`);\n }\n return normalized;\n}\n\n// Logical names stay case-sensitive and broad enough for app-level index naming.\nexport function normalizeLogicalIndexName(value: string, label = 'index name'): string {\n const normalized = value.trim();\n if (!normalized) {\n throw new Error(`${label} must be provided and cannot be empty`);\n }\n if (normalized.length > MAX_LOGICAL_INDEX_NAME_LENGTH) {\n throw new Error(`${label} must be ${MAX_LOGICAL_INDEX_NAME_LENGTH} characters or fewer`);\n }\n return normalized;\n}\n\n// Existing registry rows used uppercase Oracle identifiers, so lookups keep that fallback path.\nexport function legacyCanonicalIndexName(value: string): string {\n return normalizeIdentifier(value, 'legacy index name');\n}\n\nexport function quoteIdentifier(value: string, label: string): string {\n return `\"${normalizeIdentifier(value, label)}\"`;\n}\n\nexport function qualifyName(name: string, schemaName?: string): string {\n const quotedName = quoteIdentifier(name, 'object name');\n if (!schemaName) return quotedName;\n return `${quoteIdentifier(schemaName, 'schema name')}.${quotedName}`;\n}\n\n// Physical table names are deterministic and safe even when logical names contain URL-like tokens.\nexport function tableNameForIndex(indexName: string, tablePrefix = 'MASTRA_VEC'): string {\n const prefix = normalizeIdentifier(tablePrefix, 'table prefix');\n const logicalIndexName = normalizeLogicalIndexName(indexName);\n const legacyCompatibleIndexName = tryNormalizeIdentifier(logicalIndexName);\n const index = legacyCompatibleIndexName ?? safeIdentifierSegment(logicalIndexName, 'IDX');\n const base = `${prefix}_${index}`;\n if (base.length <= MAX_IDENTIFIER_LENGTH) return base;\n\n const hash = shortHash(`${prefix}:${logicalIndexName}`);\n return `${base.slice(0, MAX_IDENTIFIER_LENGTH - hash.length - 1)}_${hash}`;\n}\n\n// Derived index names share the table prefix and are shortened with a stable suffix when needed.\nexport function indexNameForTable(tableName: string, suffix: string): string {\n const base = `${normalizeIdentifier(tableName, 'table name')}_${normalizeIdentifier(suffix, 'index suffix')}`;\n if (base.length <= MAX_IDENTIFIER_LENGTH) return base;\n\n const hash = shortHash(base);\n return `${base.slice(0, MAX_IDENTIFIER_LENGTH - hash.length - 1)}_${hash}`;\n}\n\nexport function indexNameForMetadataField(tableName: string, field: string): string {\n const hash = shortHash(field);\n return indexNameForTable(tableName, `MD_${hash}_IDX`);\n}\n\n// JSON paths are quoted per segment so metadata keys never become SQL syntax.\nexport function assertJsonPath(path: string): string {\n const parts = path.split('.');\n if (parts.length === 0 || parts.some(part => part.length === 0)) {\n throw new Error(`Invalid JSON metadata path: ${path}`);\n }\n return `$${parts.map(jsonPathSegment).join('')}`;\n}\n\n// Oracle JSON_EXISTS predicates use @ as the current item instead of the root $ token.\nexport function jsonPathForPredicatePrefix(path: string): string {\n const fullPath = assertJsonPath(path);\n return `@${fullPath.slice(1)}`;\n}\n\nfunction tryNormalizeIdentifier(value: string): string | null {\n try {\n return normalizeIdentifier(value, 'identifier');\n } catch {\n return null;\n }\n}\n\nfunction safeIdentifierSegment(value: string, fallback: string): string {\n const sanitized = value\n .trim()\n .toUpperCase()\n .replace(/[^A-Z0-9_]+/g, '_')\n .replace(/_+/g, '_')\n .replace(/^_+|_+$/g, '');\n\n const withFallback = sanitized || fallback;\n const segment = /^[A-Z]/.test(withFallback) ? withFallback : `${fallback}_${withFallback}`;\n if (segment.length <= MAX_IDENTIFIER_LENGTH) return segment;\n\n const hash = shortHash(value);\n return `${segment.slice(0, MAX_IDENTIFIER_LENGTH - hash.length - 1)}_${hash}`;\n}\n\nfunction jsonPathSegment(part: string): string {\n if (IDENTIFIER_PATTERN.test(part)) {\n return `.${part}`;\n }\n if (/[\\u0000-\\u001F]/.test(part)) {\n throw new Error(`Invalid JSON metadata path: ${part}`);\n }\n const escaped = part.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/'/g, \"''\");\n return `.\"${escaped}\"`;\n}\n\nfunction shortHash(value: string): string {\n return createHash('sha256').update(value).digest('hex').slice(0, 12).toUpperCase();\n}\n","import type { OracleMetric, OracleVectorFormat, OracleVectorIndexConfig, OracleVectorIndexType } from './types';\n\n// Shared Oracle VECTOR SQL helpers used by both runtime queries and offline DDL export.\n// Keeping these in one place prevents the schema exporter from drifting away from OracleVector behavior.\nexport function normalizeMetric(metric: string): OracleMetric {\n const normalized = metric.toLowerCase();\n if (\n normalized !== 'cosine' &&\n normalized !== 'euclidean' &&\n normalized !== 'dotproduct' &&\n normalized !== 'hamming' &&\n normalized !== 'jaccard'\n ) {\n throw new Error('metric must be one of \"cosine\", \"euclidean\", \"dotproduct\", \"hamming\", or \"jaccard\"');\n }\n return normalized;\n}\n\nexport function normalizeVectorFormat(format: string): OracleVectorFormat {\n const normalized = format.toLowerCase();\n if (normalized !== 'vector' && normalized !== 'bit' && normalized !== 'int8') {\n throw new Error('vectorFormat must be one of \"vector\", \"bit\", or \"int8\"');\n }\n return normalized;\n}\n\nexport function metricToken(metric: OracleMetric): string {\n switch (metric) {\n case 'euclidean':\n return 'EUCLIDEAN';\n case 'dotproduct':\n return 'DOT';\n case 'hamming':\n return 'HAMMING';\n case 'jaccard':\n return 'JACCARD';\n case 'cosine':\n default:\n return 'COSINE';\n }\n}\n\nexport function defaultMetricForFormat(vectorFormat: OracleVectorFormat): OracleMetric {\n return vectorFormat === 'bit' ? 'hamming' : 'cosine';\n}\n\nexport function vectorFormatToken(vectorFormat: OracleVectorFormat): string {\n switch (vectorFormat) {\n case 'bit':\n return 'BINARY';\n case 'int8':\n return 'INT8';\n case 'vector':\n default:\n return 'FLOAT32';\n }\n}\n\n// `indexType` is optional so callers that only know the vector format (e.g. the offline schema\n// exporter) keep validating format/metric compatibility without being forced to resolve an index type.\nexport function validateMetricForFormat(\n metric: OracleMetric,\n vectorFormat: OracleVectorFormat,\n indexType?: OracleVectorIndexType,\n): void {\n if (vectorFormat === 'bit') {\n if (metric !== 'hamming' && metric !== 'jaccard') {\n throw new Error('bit vector indexes support only \"hamming\" or \"jaccard\" metrics');\n }\n } else if (metric === 'hamming' || metric === 'jaccard') {\n throw new Error(`${metric} metric requires vectorFormat \"bit\"`);\n }\n\n // Oracle only supports JACCARD for exact search (VECTOR_DISTANCE); CREATE VECTOR INDEX rejects it\n // for HNSW/IVF at DDL time, so fail fast here instead of surfacing a database error later.\n if (metric === 'jaccard' && (indexType === 'hnsw' || indexType === 'ivf')) {\n throw new Error(\n `jaccard metric is only supported for exact search; use index type \"none\" or a different metric for ${indexType} indexes`,\n );\n }\n}\n\nexport function buildVectorIndexParameterClause(indexConfig: OracleVectorIndexConfig): string {\n if (indexConfig.type === 'ivf') {\n const neighborPartitions = indexConfig.ivf?.neighborPartitions;\n // `!== undefined` (rather than truthy) so an explicit 0 reaches validatePositiveInteger and is\n // rejected instead of being silently treated as \"unset\".\n return neighborPartitions !== undefined\n ? `PARAMETERS (type IVF, neighbor partitions ${validatePositiveInteger(neighborPartitions)})`\n : '';\n }\n\n const parts: string[] = ['type HNSW'];\n if (indexConfig.hnsw?.neighbors !== undefined) {\n parts.push(`neighbors ${validatePositiveInteger(indexConfig.hnsw.neighbors)}`);\n }\n if (indexConfig.hnsw?.efConstruction !== undefined) {\n parts.push(`efconstruction ${validatePositiveInteger(indexConfig.hnsw.efConstruction)}`);\n }\n return parts.length > 1 ? `PARAMETERS (${parts.join(', ')})` : '';\n}\n\nexport function validateDimension(dimension: number): number {\n if (!Number.isInteger(dimension) || dimension <= 0) {\n throw new Error('dimension must be a positive integer');\n }\n return dimension;\n}\n\nexport function validateVectorFormatDimension(vectorFormat: OracleVectorFormat, dimension: number): void {\n if (vectorFormat === 'bit' && dimension % 8 !== 0) {\n throw new Error('bit vector dimensions must be a multiple of 8');\n }\n}\n\nexport function validateAccuracy(accuracy: number): number {\n if (!Number.isInteger(accuracy) || accuracy <= 0 || accuracy > 100) {\n throw new Error('vector index accuracy must be an integer between 1 and 100');\n }\n return accuracy;\n}\n\nfunction validatePositiveInteger(value: number): number {\n if (!Number.isInteger(value) || value <= 0) {\n throw new Error('vector index parameter must be a positive integer');\n }\n return value;\n}\n","import { assertJsonPath, jsonPathForPredicatePrefix } from './identifiers';\nimport type { OracleVectorFilter } from './types';\n\n// Filter compilation returns SQL plus binds so callers never interpolate user metadata values.\nexport interface SqlFragment {\n sql: string;\n binds: Record<string, unknown>;\n}\n\n// Bind names are generated locally to keep nested logical operators composable.\nclass BindCollector {\n private index = 0;\n readonly binds: Record<string, unknown> = {};\n\n add(value: unknown): string {\n const name = `b${this.index++}`;\n this.binds[name] = normalizeBindValue(value);\n return name;\n }\n}\n\n// Converts Mastra metadata filters into Oracle JSON_VALUE/JSON_EXISTS predicates.\nexport function buildMetadataWhereClause(filter?: OracleVectorFilter): SqlFragment {\n if (!filter || Object.keys(filter).length === 0) {\n return { sql: '', binds: {} };\n }\n\n const collector = new BindCollector();\n const sql = buildNode(filter, collector);\n return { sql: sql ? `WHERE ${sql}` : '', binds: collector.binds };\n}\n\nfunction buildNode(node: unknown, collector: BindCollector): string {\n if (!isPlainObject(node)) {\n throw new Error('Vector metadata filter must be an object');\n }\n\n const expressions: string[] = [];\n for (const [key, value] of Object.entries(node)) {\n if (key === '$and' || key === '$or' || key === '$nor') {\n expressions.push(buildLogicalOperator(key, value, collector));\n continue;\n }\n if (key === '$not') {\n expressions.push(`NOT (${buildNode(assertPlainObject(value, '$not'), collector)})`);\n continue;\n }\n if (key.startsWith('$')) {\n throw new Error(`Unsupported root filter operator: ${key}`);\n }\n expressions.push(buildFieldExpression(key, value, collector));\n }\n\n return expressions.length ? expressions.map(expr => `(${expr})`).join(' AND ') : '';\n}\n\n// Logical operators intentionally accept a single object for ergonomic parity with other providers.\nfunction buildLogicalOperator(operator: '$and' | '$or' | '$nor', value: unknown, collector: BindCollector): string {\n const values = Array.isArray(value) ? value : [value];\n if (values.length === 0) {\n return operator === '$or' ? '1 = 0' : '1 = 1';\n }\n\n const joiner = operator === '$and' ? ' AND ' : ' OR ';\n const expression = values.map(item => `(${buildNode(assertPlainObject(item, operator), collector)})`).join(joiner);\n return operator === '$nor' ? `NOT (${expression})` : expression;\n}\n\n// Plain nested objects are treated as dotted metadata paths, not opaque JSON object comparisons.\nfunction buildFieldExpression(path: string, value: unknown, collector: BindCollector): string {\n if (value instanceof RegExp) {\n return buildRegexExpression(path, value.source, value.flags, collector);\n }\n\n if (Array.isArray(value)) {\n return buildOperatorExpression(path, '$in', value, collector);\n }\n\n if (!isPlainObject(value)) {\n return buildOperatorExpression(path, '$eq', value, collector);\n }\n\n const entries = Object.entries(value);\n if (entries.length === 0) {\n throw new Error(`Vector metadata filter for \"${path}\" cannot be an empty object`);\n }\n\n const operatorEntries = entries.filter(([key]) => key.startsWith('$'));\n if (operatorEntries.length === 0) {\n return entries\n .map(([nestedKey, nestedValue]) => buildFieldExpression(`${path}.${nestedKey}`, nestedValue, collector))\n .map(expr => `(${expr})`)\n .join(' AND ');\n }\n\n if (operatorEntries.length < entries.length) {\n throw new Error(`Unsupported mixed operator/nested-field filter for \"${path}\"`);\n }\n\n return operatorEntries\n .map(([operator, operand]) => buildOperatorExpression(path, operator, operand, collector))\n .map(expr => `(${expr})`)\n .join(' AND ');\n}\n\nfunction buildOperatorExpression(path: string, operator: string, value: unknown, collector: BindCollector): string {\n switch (operator) {\n case '$eq':\n if (value === null) return `${jsonValue(path, value)} IS NULL`;\n return `${jsonValue(path, value)} = ${bind(collector, value)}`;\n case '$ne':\n if (value === null) return `${jsonValue(path, value)} IS NOT NULL`;\n return `${jsonValue(path, value)} <> ${bind(collector, value)}`;\n case '$gt':\n return `${jsonValue(path, value)} > ${bind(collector, value)}`;\n case '$gte':\n return `${jsonValue(path, value)} >= ${bind(collector, value)}`;\n case '$lt':\n return `${jsonValue(path, value)} < ${bind(collector, value)}`;\n case '$lte':\n return `${jsonValue(path, value)} <= ${bind(collector, value)}`;\n case '$in':\n return buildInExpression(path, value, collector, false);\n case '$nin':\n return buildInExpression(path, value, collector, true);\n case '$all':\n return buildAllExpression(path, value, collector);\n case '$elemMatch':\n return buildElemMatchExpression(path, value, collector);\n case '$exists':\n return value\n ? `JSON_EXISTS(metadata, '${assertJsonPath(path)}')`\n : `NOT JSON_EXISTS(metadata, '${assertJsonPath(path)}')`;\n case '$regex':\n return buildRegexExpression(path, String(value), '', collector);\n case '$contains':\n return buildContainsExpression(path, value, collector);\n case '$size':\n return buildSizeExpression(path, value, collector);\n case '$not':\n return `NOT (${buildNestedNotExpression(path, value, collector)})`;\n default:\n throw new Error(`Unsupported metadata filter operator: ${operator}`);\n }\n}\n\n// $not can wrap either operators or nested field expressions.\nfunction buildNestedNotExpression(path: string, value: unknown, collector: BindCollector): string {\n if (!isPlainObject(value) || Object.keys(value).length === 0) {\n throw new Error('$not requires a non-empty object');\n }\n return Object.entries(value)\n .map(([operator, operand]) => {\n if (!operator.startsWith('$')) {\n return buildFieldExpression(`${path}.${operator}`, operand, collector);\n }\n return buildOperatorExpression(path, operator, operand, collector);\n })\n .join(' AND ');\n}\n\n// Scalar IN checks are paired with array containment to match document-store semantics.\nfunction buildInExpression(path: string, value: unknown, collector: BindCollector, negate: boolean): string {\n const values = Array.isArray(value) ? value : [value];\n if (values.length === 0) {\n return negate ? '1 = 1' : '1 = 0';\n }\n\n const placeholders = values.map(item => bind(collector, item)).join(', ');\n const scalarExpression = `${jsonValue(path, values[0])} ${negate ? 'NOT ' : ''}IN (${placeholders})`;\n const arrayExpressions = values.map(item => jsonArrayContains(path, item, collector));\n const arrayExpression = arrayExpressions.length ? arrayExpressions.join(' OR ') : '1 = 0';\n return negate ? `(${scalarExpression} AND NOT (${arrayExpression}))` : `(${scalarExpression} OR ${arrayExpression})`;\n}\n\nfunction buildAllExpression(path: string, value: unknown, collector: BindCollector): string {\n const values = Array.isArray(value) ? value : [value];\n if (values.length === 0) return '1 = 1';\n return values.map(item => jsonArrayContains(path, item, collector)).join(' AND ');\n}\n\n// Element predicates use PASSING binds because Oracle JSON path variables cannot be standard SQL binds.\nfunction buildElemMatchExpression(path: string, value: unknown, collector: BindCollector): string {\n if (!isPlainObject(value)) {\n throw new Error('$elemMatch requires an object with conditions');\n }\n\n const passing: string[] = [];\n const conditions = Object.entries(value).map(([fieldOrOperator, operand]) => {\n if (fieldOrOperator.startsWith('$')) {\n return elemMatchCondition('@', fieldOrOperator, operand, collector, passing);\n }\n\n const nestedPath = jsonPathForPredicatePrefix(fieldOrOperator);\n\n if (isPlainObject(operand)) {\n return Object.entries(operand)\n .map(([operator, operatorOperand]) =>\n elemMatchCondition(nestedPath, operator, operatorOperand, collector, passing),\n )\n .join(' && ');\n }\n\n return elemMatchCondition(nestedPath, '$eq', operand, collector, passing);\n });\n\n return `JSON_EXISTS(metadata, '${assertJsonPath(path)}[*]?(${conditions.join(' && ')})'${passing.length ? ` PASSING ${passing.join(', ')}` : ''})`;\n}\n\n// Each element match operand gets its own JSON path variable for predictable bind ordering.\nfunction elemMatchCondition(\n jsonPathPrefix: string,\n operator: string,\n value: unknown,\n collector: BindCollector,\n passing: string[],\n): string {\n const jsonPathBind = (item: unknown): string => {\n const variable = collector.add(item);\n passing.push(`:${variable} AS \"${variable}\"`);\n return `$${variable}`;\n };\n\n switch (operator) {\n case '$eq':\n return `${jsonPathPrefix} == ${jsonPathBind(value)}`;\n case '$ne':\n return `${jsonPathPrefix} != ${jsonPathBind(value)}`;\n case '$gt':\n return `${jsonPathPrefix} > ${jsonPathBind(value)}`;\n case '$gte':\n return `${jsonPathPrefix} >= ${jsonPathBind(value)}`;\n case '$lt':\n return `${jsonPathPrefix} < ${jsonPathBind(value)}`;\n case '$lte':\n return `${jsonPathPrefix} <= ${jsonPathBind(value)}`;\n case '$in': {\n const values = Array.isArray(value) ? value : [value];\n if (values.length === 0) return 'false';\n return `(${values.map(item => `${jsonPathPrefix} == ${jsonPathBind(item)}`).join(' || ')})`;\n }\n case '$nin': {\n const values = Array.isArray(value) ? value : [value];\n if (values.length === 0) return 'true';\n return `(${values.map(item => `${jsonPathPrefix} != ${jsonPathBind(item)}`).join(' && ')})`;\n }\n default:\n throw new Error(`Unsupported $elemMatch operator: ${operator}`);\n }\n}\n\n// Regex binds the pattern and only emits Oracle's case-insensitive flag when requested.\nfunction buildRegexExpression(path: string, pattern: string, flags: string, collector: BindCollector): string {\n const matchParameter = flags.includes('i') || pattern.startsWith('(?i)') ? `, 'i'` : '';\n const normalizedPattern = pattern.startsWith('(?i)') ? pattern.slice(4) : pattern;\n const name = collector.add(normalizedPattern);\n return `REGEXP_LIKE(${jsonValue(path, '')}, :${name}${matchParameter})`;\n}\n\n// String contains uses LIKE, while structured contains compares serialized JSON.\nfunction buildContainsExpression(path: string, value: unknown, collector: BindCollector): string {\n if (Array.isArray(value)) return buildAllExpression(path, value, collector);\n if (typeof value === 'string') {\n const scalarVariable = collector.add(escapeLikePattern(value.toLowerCase()));\n const arrayVariable = collector.add(value);\n return `(${[\n `LOWER(${jsonValue(path, '')}) LIKE '%' || :${scalarVariable} || '%' ESCAPE '\\\\'`,\n `JSON_EXISTS(metadata, '${assertJsonPath(path)}[*]?(@ == $${arrayVariable})' PASSING :${arrayVariable} AS \"${arrayVariable}\")`,\n ].join(' OR ')})`;\n }\n\n const variable = collector.add(JSON.stringify(value));\n return `JSON_SERIALIZE(JSON_QUERY(metadata, '${assertJsonPath(path)}' RETURNING CLOB NULL ON ERROR) RETURNING VARCHAR2(4000)) = :${variable}`;\n}\n\nfunction buildSizeExpression(path: string, value: unknown, collector: BindCollector): string {\n if (!Number.isInteger(value) || Number(value) < 0) {\n throw new Error('$size requires a non-negative integer');\n }\n const variable = collector.add(value);\n return `JSON_EXISTS(metadata, '${assertJsonPath(path)}?(@.size() == $${variable})' PASSING :${variable} AS \"${variable}\")`;\n}\n\n// Oracle needs explicit return types so numeric comparisons do not fall back to string ordering.\nfunction jsonValue(path: string, comparisonValue: unknown): string {\n const jsonPath = assertJsonPath(path);\n if (typeof comparisonValue === 'number') {\n return `JSON_VALUE(metadata, '${jsonPath}' RETURNING NUMBER NULL ON ERROR)`;\n }\n return `JSON_VALUE(metadata, '${jsonPath}' RETURNING VARCHAR2(4000) NULL ON ERROR)`;\n}\n\nfunction jsonArrayContains(path: string, value: unknown, collector: BindCollector): string {\n const variable = collector.add(value);\n return `JSON_EXISTS(metadata, '${assertJsonPath(path)}[*]?(@ == $${variable})' PASSING :${variable} AS \"${variable}\")`;\n}\n\nfunction bind(collector: BindCollector, value: unknown): string {\n return `:${collector.add(value)}`;\n}\n\n// JSON_VALUE returns booleans as text in this path, so normalize before binding.\nfunction normalizeBindValue(value: unknown): unknown {\n if (value instanceof Date) return value.toISOString();\n if (typeof value === 'boolean') return String(value);\n return value;\n}\n\nfunction assertPlainObject(value: unknown, operator: string): Record<string, unknown> {\n if (!isPlainObject(value)) {\n throw new Error(`${operator} requires an object`);\n }\n if (Object.keys(value).length === 0 && operator === '$not') {\n throw new Error('$not requires a non-empty object');\n }\n return value;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n !(value instanceof RegExp) &&\n !(value instanceof Date)\n );\n}\n\nfunction escapeLikePattern(value: string): string {\n return value.replace(/([%_\\\\])/g, '\\\\$1');\n}\n","import { randomUUID } from 'node:crypto';\n\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { createVectorErrorId } from '@mastra/core/storage';\nimport { validateUpsertInput } from '@mastra/core/vector';\nimport type {\n DeleteVectorParams,\n DeleteVectorsParams,\n UpdateVectorParams,\n UpsertVectorParams,\n} from '@mastra/core/vector';\nimport oracledb from 'oracledb';\n\nimport { asBindParameters, jsonBind, jsonBindText, rollbackQuietly } from '../shared/connection';\nimport type { IndexRegistry, WithConnection } from './ddl';\nimport { buildMetadataWhereClause } from './filter';\nimport type { OracleIndexStats, OracleVectorFilter, OracleVectorFormat } from './types';\n\nexport const VECTOR_ID_DELETE_CHUNK_SIZE = 900;\nexport const DEFAULT_VECTOR_UPSERT_BATCH_SIZE = 200;\n\n// This module is the dependency-free base for the vector store split: it owns every operation that\n// writes vector rows (upsert/update/delete), the vector-format encode/decode + validation helpers\n// shared with query.ts and stats.ts, and the generic MastraError-wrapping helper every sibling\n// module uses. Its only import from ddl.ts is type-only (erased at build time), so there is no\n// runtime circular dependency even though ddl.ts imports asMastraError/withCause from here.\nexport const STORE_NAME = 'ORACLE';\n\ntype BindParameters = oracledb.BindParameters;\n\nexport async function upsert(\n registry: IndexRegistry,\n withConnection: WithConnection,\n upsertBatchSize: number,\n { indexName, vectors, metadata, ids, sparseVectors, deleteFilter }: UpsertVectorParams,\n): Promise<string[]> {\n try {\n if (sparseVectors !== undefined) {\n throw new Error('OracleVector does not support sparseVectors yet; use dense vector types');\n }\n validateUpsertInput(STORE_NAME, vectors, metadata, ids);\n validateVectors(vectors);\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw asMastraError('UPSERT', 'INVALID_INPUT', { indexName }, error, ErrorCategory.USER);\n }\n\n const vectorIds = ids ?? vectors.map(() => randomUUID());\n\n return withConnection(async connection => {\n const indexInfo = await registry.getIndexMetadata(connection, indexName);\n\n try {\n // deleteFilter + upsert is treated as one transaction to avoid partially refreshed indexes.\n if (deleteFilter && Object.keys(deleteFilter).length > 0) {\n const filter = buildMetadataWhereClause(deleteFilter);\n await connection.execute(\n `DELETE FROM ${indexInfo.qualifiedTableName} ${filter.sql}`,\n asBindParameters(filter.binds),\n );\n }\n\n const mergeSql = `\n MERGE INTO ${indexInfo.qualifiedTableName} target\n USING (\n SELECT\n :vector_id AS vector_id,\n :embedding AS embedding,\n :metadata AS metadata\n FROM dual\n ) source\n ON (target.vector_id = source.vector_id)\n WHEN MATCHED THEN UPDATE SET\n target.embedding = source.embedding,\n target.metadata = source.metadata,\n target.updated_at = SYSTIMESTAMP\n WHEN NOT MATCHED THEN INSERT (\n vector_id,\n embedding,\n metadata,\n created_at,\n updated_at\n ) VALUES (\n source.vector_id,\n source.embedding,\n source.metadata,\n SYSTIMESTAMP,\n SYSTIMESTAMP\n )`;\n\n const executeManyOptions: oracledb.ExecuteManyOptions = {\n bindDefs: {\n vector_id: { type: oracledb.STRING, maxSize: 512 },\n embedding: { type: oracledb.DB_TYPE_VECTOR },\n // JSON bound as text (see jsonBindText): server-side OSON encoding keeps the rows\n // readable by JDBC-based tools (DBeaver/DataGrip/SQL Developer). See ../shared/connection.\n metadata: { type: oracledb.DB_TYPE_CLOB },\n },\n };\n const upsertBinds = vectors.map((vector, i) => {\n validateVectorForIndex(vector, indexInfo, indexName);\n\n return {\n vector_id: vectorIds[i]!,\n embedding: vectorValue(vector, indexInfo.vectorFormat),\n metadata: jsonBindText(metadata?.[i] ?? {}),\n };\n });\n\n // Execute in chunks to avoid very large bind arrays while still using Oracle array DML.\n for (const chunk of chunkArray(upsertBinds, upsertBatchSize)) {\n await connection.executeMany(mergeSql, chunk as BindParameters[], executeManyOptions);\n }\n\n await connection.commit();\n return vectorIds;\n } catch (error) {\n await rollbackQuietly(connection);\n throw error;\n }\n }).catch(error => {\n if (error instanceof MastraError) throw error;\n throw asMastraError('UPSERT', 'FAILED', { indexName }, error);\n });\n}\n\nexport async function updateVector(\n registry: IndexRegistry,\n withConnection: WithConnection,\n { indexName, id, filter, update }: UpdateVectorParams<OracleVectorFilter>,\n): Promise<void> {\n try {\n if (!update.vector && !update.metadata) {\n throw new Error('No updates provided');\n }\n if (!id && !filter) {\n throw new Error('Either id or filter must be provided');\n }\n if (id && filter) {\n throw new Error('id and filter are mutually exclusive');\n }\n if (update.vector) {\n validateVectors([update.vector]);\n }\n } catch (error) {\n throw asMastraError('UPDATE_VECTOR', 'INVALID_INPUT', { indexName, id: id ?? '' }, error, ErrorCategory.USER);\n }\n\n return withConnection(async connection => {\n const indexInfo = await registry.getIndexMetadata(connection, indexName);\n if (update.vector) {\n validateVectorForIndex(update.vector, indexInfo, indexName);\n }\n\n const setParts: string[] = ['updated_at = SYSTIMESTAMP'];\n const binds: BindParameters = {};\n if (update.vector) {\n setParts.unshift('embedding = :embedding');\n binds.embedding = vectorBind(update.vector, indexInfo.vectorFormat);\n }\n if (update.metadata) {\n setParts.unshift('metadata = :metadata');\n binds.metadata = jsonBind(update.metadata);\n }\n\n const where = id ? { sql: 'WHERE vector_id = :id', binds: { id } } : buildMetadataWhereClause(filter);\n if (!where.sql) {\n throw asMastraError(\n 'UPDATE_VECTOR',\n 'EMPTY_FILTER',\n { indexName },\n new Error('Cannot update with an empty filter'),\n ErrorCategory.USER,\n );\n }\n\n try {\n await connection.execute(\n `\n UPDATE ${indexInfo.qualifiedTableName}\n SET ${setParts.join(', ')}\n ${where.sql}`,\n asBindParameters({ ...binds, ...where.binds }),\n { autoCommit: true },\n );\n } catch (error) {\n await rollbackQuietly(connection);\n throw error;\n }\n }).catch(error => {\n if (error instanceof MastraError) throw error;\n throw asMastraError('UPDATE_VECTOR', 'FAILED', { indexName, id: id ?? '' }, error);\n });\n}\n\nexport async function deleteVector(\n registry: IndexRegistry,\n withConnection: WithConnection,\n { indexName, id }: DeleteVectorParams,\n): Promise<void> {\n return withConnection(async connection => {\n const indexInfo = await registry.getIndexMetadata(connection, indexName);\n try {\n await connection.execute(\n `DELETE FROM ${indexInfo.qualifiedTableName} WHERE vector_id = :id`,\n { id },\n { autoCommit: true },\n );\n } catch (error) {\n await rollbackQuietly(connection);\n throw error;\n }\n }).catch(error => {\n if (error instanceof MastraError) throw error;\n throw asMastraError('DELETE_VECTOR', 'FAILED', { indexName, id }, error);\n });\n}\n\nexport async function deleteVectors(\n registry: IndexRegistry,\n withConnection: WithConnection,\n { indexName, ids, filter }: DeleteVectorsParams<OracleVectorFilter>,\n): Promise<void> {\n try {\n const hasFilter = filter !== undefined && filter !== null;\n if (ids !== undefined && hasFilter) {\n throw new Error('ids and filter are mutually exclusive');\n }\n if (ids !== undefined && ids.length === 0) {\n throw new Error('empty ids array');\n }\n if (hasFilter && Object.keys(filter).length === 0) {\n throw new Error('empty filter');\n }\n if (ids === undefined && !hasFilter) {\n throw new Error('Either filter or ids must be provided');\n }\n } catch (error) {\n throw asMastraError('DELETE_VECTORS', 'INVALID_INPUT', { indexName }, error, ErrorCategory.USER);\n }\n\n return withConnection(async connection => {\n const indexInfo = await registry.getIndexMetadata(connection, indexName);\n try {\n if (ids?.length) {\n for (const idChunk of chunkArray(ids, VECTOR_ID_DELETE_CHUNK_SIZE)) {\n await connection.executeMany(\n `DELETE FROM ${indexInfo.qualifiedTableName} WHERE vector_id = :id`,\n idChunk.map(id => ({ id })) as BindParameters[],\n {\n bindDefs: {\n id: { type: oracledb.STRING, maxSize: 512 },\n },\n },\n );\n }\n } else {\n const metadataFilter = buildMetadataWhereClause(filter);\n await connection.execute(\n `DELETE FROM ${indexInfo.qualifiedTableName} ${metadataFilter.sql}`,\n asBindParameters(metadataFilter.binds),\n );\n }\n await connection.commit();\n } catch (error) {\n await rollbackQuietly(connection);\n throw error;\n }\n }).catch(error => {\n if (error instanceof MastraError) throw error;\n throw asMastraError('DELETE_VECTORS', 'FAILED', { indexName }, error);\n });\n}\n\nexport function validateVectors(vectors: number[][]): void {\n for (let vectorIndex = 0; vectorIndex < vectors.length; vectorIndex += 1) {\n const vector = vectors[vectorIndex];\n if (!Array.isArray(vector) || vector.length === 0) {\n throw new Error(`Vector at index ${vectorIndex} must be a non-empty number array`);\n }\n for (let componentIndex = 0; componentIndex < vector.length; componentIndex += 1) {\n const value = vector[componentIndex];\n if (typeof value !== 'number' || !Number.isFinite(value)) {\n throw new Error(`Vector at index ${vectorIndex} has a non-finite value at component ${componentIndex}`);\n }\n }\n }\n}\n\nfunction validateVectorDimension(vector: number[], dimension: number, indexName: string): void {\n if (vector.length !== dimension) {\n throw asMastraError(\n 'UPSERT',\n 'INVALID_INPUT',\n { indexName, expected: String(dimension), actual: String(vector.length) },\n new Error(`Vector dimension mismatch: expected ${dimension}, received ${vector.length}`),\n ErrorCategory.USER,\n );\n }\n}\n\nexport function validateVectorForIndex(\n vector: number[],\n indexInfo: Pick<OracleIndexStats, 'dimension' | 'vectorFormat'>,\n indexName: string,\n): void {\n validateVectorDimension(vector, indexInfo.dimension, indexName);\n\n if (indexInfo.vectorFormat === 'bit') {\n for (const [index, value] of vector.entries()) {\n if (value !== 0 && value !== 1) {\n throw asMastraError(\n 'VECTOR_FORMAT',\n 'INVALID_BIT_VALUE',\n { indexName, index, value },\n new Error('bit vectors must contain only 0 or 1 values'),\n ErrorCategory.USER,\n );\n }\n }\n }\n\n if (indexInfo.vectorFormat === 'int8') {\n for (const [index, value] of vector.entries()) {\n if (!Number.isInteger(value) || value < -128 || value > 127) {\n throw asMastraError(\n 'VECTOR_FORMAT',\n 'INVALID_INT8_VALUE',\n { indexName, index, value },\n new Error('int8 vectors must contain integers from -128 to 127'),\n ErrorCategory.USER,\n );\n }\n }\n }\n}\n\nexport function vectorBind(vector: number[], vectorFormat: OracleVectorFormat): oracledb.BindParameter {\n return { type: oracledb.DB_TYPE_VECTOR, val: vectorValue(vector, vectorFormat) };\n}\n\nexport function vectorValue(vector: number[], vectorFormat: OracleVectorFormat): Float32Array | Int8Array | Uint8Array {\n // node-oracledb binds VECTOR columns through typed arrays, with bit vectors packed by byte.\n switch (vectorFormat) {\n case 'bit':\n return packBitVector(vector);\n case 'int8':\n return Int8Array.from(vector);\n case 'vector':\n default:\n return Float32Array.from(vector);\n }\n}\n\nfunction packBitVector(vector: number[]): Uint8Array {\n // Oracle BINARY vectors store eight user-facing 0/1 dimensions per byte.\n const bytes = new Uint8Array(vector.length / 8);\n for (let i = 0; i < vector.length; i += 1) {\n if (vector[i]) {\n const byteIndex = Math.floor(i / 8);\n bytes[byteIndex] = (bytes[byteIndex] ?? 0) | (1 << (7 - (i % 8)));\n }\n }\n return bytes;\n}\n\nexport function chunkArray<T>(values: T[], chunkSize: number): T[][] {\n const chunks: T[][] = [];\n for (let index = 0; index < values.length; index += chunkSize) {\n chunks.push(values.slice(index, index + chunkSize));\n }\n return chunks;\n}\n\nexport function withCause(error: Error, cause: unknown): Error {\n (error as Error & { cause?: unknown }).cause = cause;\n return error;\n}\n\nexport function asMastraError(\n operation: string,\n reason: string,\n details: Record<string, string | number | boolean | undefined>,\n cause: unknown,\n category: ErrorCategory = ErrorCategory.THIRD_PARTY,\n): MastraError {\n const safeDetails = Object.fromEntries(\n Object.entries(details).filter((entry): entry is [string, string | number | boolean] => entry[1] !== undefined),\n );\n\n return new MastraError(\n {\n id: createVectorErrorId(STORE_NAME, operation, reason),\n domain: ErrorDomain.MASTRA_VECTOR,\n category,\n details: safeDetails,\n },\n cause,\n );\n}\n","import { ErrorCategory, MastraError } from '@mastra/core/error';\nimport type { DeleteIndexParams } from '@mastra/core/vector';\nimport type { Connection } from 'oracledb';\nimport type oracledb from 'oracledb';\n\nimport type { ObjectRow } from '../shared/connection';\nimport { executeDdl as executeOracleDdl, executeOptions, isOracleErrorCode, rows } from '../shared/connection';\nimport {\n assertJsonPath,\n indexNameForMetadataField,\n indexNameForTable,\n legacyCanonicalIndexName,\n normalizeIdentifier,\n normalizeLogicalIndexName,\n qualifyName,\n tableNameForIndex,\n} from './identifiers';\nimport {\n buildVectorIndexParameterClause,\n defaultMetricForFormat,\n metricToken,\n normalizeMetric,\n normalizeVectorFormat,\n validateAccuracy,\n validateDimension,\n validateMetricForFormat,\n validateVectorFormatDimension,\n vectorFormatToken,\n} from './sql';\nimport type {\n OracleBuildIndexParams,\n OracleCreateIndexParams,\n OracleIndexStats,\n OracleMetric,\n OracleRebuildIndexParams,\n OracleVectorFormat,\n OracleVectorIndexConfig,\n OracleVectorIndexType,\n} from './types';\nimport { asMastraError, withCause } from './upsert';\n\n// Registry and DDL state for OracleVector. asMastraError/withCause live in upsert.ts (the\n// dependency-free base module) and are re-used here so every sibling module wraps errors the\n// same way without a circular runtime import (upsert.ts only needs ddl.ts's types, which are erased).\n\nexport const DEFAULT_TABLE_PREFIX = 'MASTRA_VEC';\nexport const DEFAULT_REGISTRY_TABLE = 'MASTRA_VECTOR_INDEXES';\nexport const DEFAULT_METADATA_INDEXES = ['thread_id', 'resource_id', 'message_id', 'source_id'];\nexport const DEFAULT_VECTOR_FORMAT: OracleVectorFormat = 'vector';\nconst VECTOR_MEMORY_EXHAUSTED_CODES = [-51962];\n\ntype BindParameters = oracledb.BindParameters;\n\n// A connection-scoped callback, shaped exactly like OraclePoolManager#withConnection, so sibling\n// modules can run queries without owning the pool themselves.\nexport type WithConnection = <T>(callback: (connection: Connection) => Promise<T>) => Promise<T>;\n\n// Registry metadata is the source of truth for mapping logical indexes to Oracle objects.\nexport interface IndexInfo extends OracleIndexStats {\n qualifiedTableName: string;\n}\n\nexport type CachedIndexInfo = Omit<IndexInfo, 'count'>;\n\nexport interface IndexRegistryConfig {\n schemaName?: string;\n tablePrefix: string;\n registryTableName: string;\n defaultMetadataIndexes: string[];\n defaultVectorFormat: OracleVectorFormat;\n defaultIndexConfig: OracleVectorIndexConfig;\n}\n\n// IndexRegistry owns the mutable state (locks, caches, registry readiness) plus every DDL/registry\n// operation. OracleVector holds one instance and delegates to it.\nexport class IndexRegistry {\n readonly schemaName?: string;\n private readonly tablePrefix: string;\n private readonly registryTableName: string;\n private readonly defaultMetadataIndexes: string[];\n private readonly defaultVectorFormat: OracleVectorFormat;\n private readonly defaultIndexConfig: OracleVectorIndexConfig;\n // One lock per logical index prevents two callers from creating/dropping the same Oracle objects at once.\n private readonly indexLocks = new Map<string, Promise<void>>();\n private readonly indexInfoCache = new Map<string, CachedIndexInfo>();\n private registryReady = false;\n private registryPromise?: Promise<void>;\n\n constructor(config: IndexRegistryConfig) {\n this.schemaName = config.schemaName;\n this.tablePrefix = config.tablePrefix;\n this.registryTableName = config.registryTableName;\n this.defaultMetadataIndexes = config.defaultMetadataIndexes;\n this.defaultVectorFormat = config.defaultVectorFormat;\n this.defaultIndexConfig = config.defaultIndexConfig;\n }\n\n async createIndex(\n withConnection: WithConnection,\n {\n indexName,\n dimension,\n metric,\n vectorFormat,\n indexConfig,\n buildIndex = true,\n metadataIndexes,\n }: OracleCreateIndexParams,\n ): Promise<void> {\n try {\n const logicalIndexName = normalizeLogicalIndexName(indexName);\n const normalizedFormat = normalizeVectorFormat(vectorFormat ?? this.defaultVectorFormat);\n const normalizedMetric = normalizeMetric(metric ?? defaultMetricForFormat(normalizedFormat));\n const mergedConfig = this.mergeIndexConfig(indexConfig);\n const unbuiltConfig = this.mergeIndexConfig({ type: 'none' });\n const builtConfig = buildIndex ? mergedConfig : unbuiltConfig;\n validateDimension(dimension);\n validateVectorFormatDimension(normalizedFormat, dimension);\n validateMetricForFormat(normalizedMetric, normalizedFormat, mergedConfig.type);\n\n await this.withIndexLock(logicalIndexName, () =>\n withConnection(async connection => {\n await this.ensureRegistry(connection);\n const existing = await this.getRegistryEntry(connection, logicalIndexName);\n if (existing) {\n // Re-running createIndex is allowed when the existing table shape matches the requested shape.\n const tableExists = await this.vectorTableExists(connection, existing.tableName);\n const tableName = tableExists ? existing.tableName : tableNameForIndex(logicalIndexName, this.tablePrefix);\n if (tableExists) {\n this.assertCompatibleExistingIndex(\n existing,\n logicalIndexName,\n dimension,\n normalizedMetric,\n normalizedFormat,\n );\n } else {\n await this.createVectorTable(connection, logicalIndexName, dimension, normalizedFormat);\n await this.upsertRegistry(\n connection,\n logicalIndexName,\n dimension,\n normalizedMetric,\n normalizedFormat,\n unbuiltConfig,\n );\n this.clearIndexMetadata(logicalIndexName);\n }\n\n await this.createMetadataIndexes(\n connection,\n logicalIndexName,\n metadataIndexes ?? this.defaultMetadataIndexes,\n tableName,\n );\n\n if (buildIndex && mergedConfig.type !== 'none') {\n const createdIndex = await this.createVectorIndex(\n connection,\n logicalIndexName,\n normalizedMetric,\n mergedConfig,\n tableName,\n );\n if (\n !createdIndex &&\n (!tableExists || !vectorIndexRegistryConfigMatches(existing, normalizedMetric, mergedConfig))\n ) {\n throw vectorIndexAlreadyExistsError('CREATE_INDEX', logicalIndexName, existing);\n }\n if (createdIndex) {\n await this.updateRegistryIndexConfig(connection, logicalIndexName, normalizedMetric, mergedConfig);\n }\n }\n const finalInfo =\n buildIndex && mergedConfig.type !== 'none'\n ? {\n ...existing,\n tableName,\n metric: normalizedMetric,\n indexType: mergedConfig.type,\n accuracy: mergedConfig.accuracy ?? 95,\n }\n : tableExists\n ? { ...existing, tableName }\n : {\n indexName: logicalIndexName,\n tableName,\n dimension,\n metric: normalizedMetric,\n indexType: builtConfig.type,\n vectorFormat: normalizedFormat,\n accuracy: builtConfig.accuracy ?? 95,\n };\n this.cacheIndexMetadata(logicalIndexName, {\n ...finalInfo,\n qualifiedTableName: qualifyName(tableName, this.schemaName),\n });\n return;\n }\n\n const tableName = tableNameForIndex(logicalIndexName, this.tablePrefix);\n if (await this.vectorTableExists(connection, tableName)) {\n // Oracle identifier normalization can collapse two distinct logical names (e.g. \"foo\" and\n // \"FOO\") onto the same physical table. Check the registry for a row already claiming this\n // table under a different index name so the error explains the real cause instead of the\n // generic \"registry metadata is missing\" message below.\n const collidingIndexName = await this.findRegistryEntryByTableName(connection, tableName);\n if (collidingIndexName && collidingIndexName !== logicalIndexName) {\n throw asMastraError(\n 'CREATE_INDEX',\n 'IDENTIFIER_COLLISION',\n { indexName: logicalIndexName, tableName, collidingIndexName },\n new Error(\n `Logical index name \"${logicalIndexName}\" collides with existing index \"${collidingIndexName}\" after Oracle identifier normalization (both map to table \"${tableName}\"). Choose a different index name.`,\n ),\n ErrorCategory.USER,\n );\n }\n\n // A physical table without registry metadata is unsafe because describe/query cannot validate dimensions.\n throw asMastraError(\n 'CREATE_INDEX',\n 'REGISTRY_MISSING',\n { indexName: logicalIndexName, tableName },\n new Error(\n `Oracle vector table \"${tableName}\" already exists, but registry metadata for \"${logicalIndexName}\" is missing. Delete the stale table or restore the registry entry before creating the index.`,\n ),\n ErrorCategory.USER,\n );\n }\n\n await this.createVectorTable(connection, logicalIndexName, dimension, normalizedFormat);\n await this.upsertRegistry(\n connection,\n logicalIndexName,\n dimension,\n normalizedMetric,\n normalizedFormat,\n unbuiltConfig,\n );\n this.clearIndexMetadata(logicalIndexName);\n await this.createMetadataIndexes(\n connection,\n logicalIndexName,\n metadataIndexes ?? this.defaultMetadataIndexes,\n );\n\n if (buildIndex && mergedConfig.type !== 'none') {\n const createdIndex = await this.createVectorIndex(\n connection,\n logicalIndexName,\n normalizedMetric,\n mergedConfig,\n );\n if (!createdIndex) {\n throw vectorIndexAlreadyExistsError('CREATE_INDEX', logicalIndexName, {\n metric: normalizedMetric,\n indexType: mergedConfig.type,\n });\n }\n await this.updateRegistryIndexConfig(connection, logicalIndexName, normalizedMetric, mergedConfig);\n }\n this.cacheIndexMetadata(logicalIndexName, {\n indexName: logicalIndexName,\n tableName,\n dimension,\n metric: normalizedMetric,\n indexType: builtConfig.type,\n vectorFormat: normalizedFormat,\n accuracy: builtConfig.accuracy ?? 95,\n qualifiedTableName: qualifyName(tableName, this.schemaName),\n });\n }),\n );\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw asMastraError('CREATE_INDEX', 'FAILED', { indexName }, error);\n }\n }\n\n async buildIndex(\n withConnection: WithConnection,\n { indexName, metric, indexConfig }: OracleBuildIndexParams,\n ): Promise<void> {\n const logicalIndexName = normalizeLogicalIndexName(indexName);\n // Locked like createIndex/deleteIndex so a concurrent build/rebuild on the same logical index\n // cannot interleave DROP/CREATE VECTOR INDEX statements against each other.\n return this.withIndexLock(logicalIndexName, () =>\n withConnection(async connection => {\n const indexInfo = await this.getIndexMetadata(connection, logicalIndexName);\n const existingBuiltConfig =\n indexInfo.indexType === 'none'\n ? undefined\n : {\n type: indexInfo.indexType,\n accuracy: indexInfo.accuracy,\n };\n const mergedConfig = this.mergeIndexConfig(indexConfig ?? existingBuiltConfig);\n\n // `none` is a valid exact-search mode, so buildIndex becomes a no-op for those indexes.\n if (mergedConfig.type === 'none') return;\n\n const normalizedMetric = normalizeMetric(metric ?? indexInfo.metric);\n validateMetricForFormat(normalizedMetric, indexInfo.vectorFormat, mergedConfig.type);\n const createdIndex = await this.createVectorIndex(\n connection,\n logicalIndexName,\n normalizedMetric,\n mergedConfig,\n indexInfo.tableName,\n );\n if (!createdIndex) {\n const explicitlyRequestedConfig = metric !== undefined || indexConfig !== undefined;\n const registryConfigChanged = !vectorIndexRegistryConfigMatches(indexInfo, normalizedMetric, mergedConfig);\n if (explicitlyRequestedConfig || registryConfigChanged) {\n throw vectorIndexAlreadyExistsError('BUILD_INDEX', logicalIndexName, indexInfo);\n }\n return;\n }\n await this.updateRegistryIndexConfig(connection, logicalIndexName, normalizedMetric, mergedConfig);\n this.cacheIndexMetadata(logicalIndexName, {\n ...indexInfo,\n metric: normalizedMetric,\n indexType: mergedConfig.type,\n accuracy: mergedConfig.accuracy ?? 95,\n });\n }),\n ).catch(error => {\n if (error instanceof MastraError) throw error;\n throw asMastraError('BUILD_INDEX', 'FAILED', { indexName }, error);\n });\n }\n\n async rebuildIndex(\n withConnection: WithConnection,\n { indexName, metric, indexConfig }: OracleRebuildIndexParams,\n ): Promise<void> {\n const logicalIndexName = normalizeLogicalIndexName(indexName);\n // Locked like createIndex/deleteIndex so a concurrent build/rebuild on the same logical index\n // cannot interleave DROP/CREATE VECTOR INDEX statements against each other.\n return this.withIndexLock(logicalIndexName, () =>\n withConnection(async connection => {\n const indexInfo = await this.getIndexMetadata(connection, logicalIndexName);\n const normalizedMetric = normalizeMetric(metric ?? indexInfo.metric);\n const mergedConfig = this.mergeIndexConfig(\n indexConfig ?? {\n type: indexInfo.indexType,\n accuracy: indexInfo.accuracy,\n },\n );\n validateMetricForFormat(normalizedMetric, indexInfo.vectorFormat, mergedConfig.type);\n\n if (mergedConfig.type === 'none') return;\n\n await this.dropVectorIndex(connection, logicalIndexName, indexInfo.tableName);\n const createdIndex = await this.createVectorIndex(\n connection,\n logicalIndexName,\n normalizedMetric,\n mergedConfig,\n indexInfo.tableName,\n );\n if (!createdIndex) {\n // The DROP above should have cleared the way for a fresh CREATE VECTOR INDEX; a `false`\n // return means the index still exists (e.g. a racing writer recreated it), so the registry\n // must not be advanced to describe a physical index that does not match this config.\n throw vectorIndexAlreadyExistsError('REBUILD_INDEX', logicalIndexName, indexInfo);\n }\n await this.updateRegistryIndexConfig(connection, logicalIndexName, normalizedMetric, mergedConfig);\n this.cacheIndexMetadata(logicalIndexName, {\n ...indexInfo,\n metric: normalizedMetric,\n indexType: mergedConfig.type,\n accuracy: mergedConfig.accuracy ?? 95,\n });\n }),\n ).catch(error => {\n if (error instanceof MastraError) throw error;\n throw asMastraError('REBUILD_INDEX', 'FAILED', { indexName }, error);\n });\n }\n\n async deleteIndex(withConnection: WithConnection, { indexName }: DeleteIndexParams): Promise<void> {\n const logicalIndexName = normalizeLogicalIndexName(indexName);\n return this.withIndexLock(logicalIndexName, () =>\n withConnection(async connection => {\n await this.ensureRegistry(connection);\n const registryRow = await this.getRegistryEntry(connection, logicalIndexName);\n const tableName = registryRow\n ? qualifyName(registryRow.tableName, this.schemaName)\n : this.qualifiedTableName(logicalIndexName);\n\n await executeOracleDdl(connection, `DROP TABLE ${tableName} CASCADE CONSTRAINTS PURGE`, [-942]);\n await connection.execute(\n `DELETE FROM ${this.qualifiedRegistryTable()} WHERE index_name IN (:indexName, :legacyIndexName)`,\n {\n indexName: logicalIndexName,\n legacyIndexName: safeLegacyCanonicalIndexName(logicalIndexName),\n },\n );\n await connection.commit();\n this.clearIndexMetadata(logicalIndexName);\n }),\n ).catch(error => {\n if (error instanceof MastraError) throw error;\n throw asMastraError('DELETE_INDEX', 'FAILED', { indexName }, error);\n });\n }\n\n async withIndexLock<T>(indexName: string, callback: () => Promise<T>): Promise<T> {\n const previousLock = this.indexLocks.get(indexName) ?? Promise.resolve();\n let release!: () => void;\n const currentLock = new Promise<void>(resolve => {\n release = resolve;\n });\n\n this.indexLocks.set(indexName, currentLock);\n // Wait for the previous operation even if it failed, then let this caller surface its own result.\n await previousLock.catch(() => undefined);\n\n try {\n return await callback();\n } finally {\n release();\n if (this.indexLocks.get(indexName) === currentLock) {\n this.indexLocks.delete(indexName);\n }\n }\n }\n\n async ensureRegistry(connection: Connection): Promise<void> {\n if (this.registryReady) return;\n if (!this.registryPromise) {\n this.registryPromise = (async () => {\n // ALTER keeps older registry tables compatible without forcing a migration step.\n await executeOracleDdl(\n connection,\n `\n CREATE TABLE ${this.qualifiedRegistryTable()} (\n index_name VARCHAR2(512) PRIMARY KEY,\n table_name VARCHAR2(128) NOT NULL,\n dimension NUMBER(10) NOT NULL,\n metric VARCHAR2(32) NOT NULL,\n index_type VARCHAR2(16) NOT NULL,\n vector_format VARCHAR2(16) DEFAULT 'vector' NOT NULL,\n accuracy NUMBER(3),\n created_at TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL,\n updated_at TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL\n )`,\n [-955],\n );\n await executeOracleDdl(\n connection,\n `ALTER TABLE ${this.qualifiedRegistryTable()} ADD vector_format VARCHAR2(16) DEFAULT 'vector' NOT NULL`,\n [-1430],\n );\n this.registryReady = true;\n })().catch(error => {\n this.registryPromise = undefined;\n throw error;\n });\n }\n await this.registryPromise;\n }\n\n async createVectorTable(\n connection: Connection,\n indexName: string,\n dimension: number,\n vectorFormat: OracleVectorFormat,\n ): Promise<void> {\n // Each logical Mastra index owns a table because dimensions and vector formats are table-level choices.\n await executeOracleDdl(\n connection,\n `\n CREATE TABLE ${this.qualifiedTableName(indexName)} (\n vector_id VARCHAR2(512) PRIMARY KEY,\n embedding VECTOR(${dimension}, ${vectorFormatToken(vectorFormat)}) NOT NULL,\n metadata JSON NOT NULL,\n created_at TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL,\n updated_at TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL\n )`,\n [-955],\n );\n }\n\n async upsertRegistry(\n connection: Connection,\n indexName: string,\n dimension: number,\n metric: OracleMetric,\n vectorFormat: OracleVectorFormat,\n indexConfig?: OracleVectorIndexConfig,\n ): Promise<void> {\n const tableName = tableNameForIndex(indexName, this.tablePrefix);\n const mergedConfig = this.mergeIndexConfig(indexConfig);\n\n // Registry writes are idempotent so createIndex can be safely retried by deployment scripts.\n await connection.execute(\n `\n MERGE INTO ${this.qualifiedRegistryTable()} target\n USING (\n SELECT\n :index_name AS index_name,\n :table_name AS table_name,\n :dimension AS dimension,\n :metric AS metric,\n :index_type AS index_type,\n :vector_format AS vector_format,\n :accuracy AS accuracy\n FROM dual\n ) source\n ON (target.index_name = source.index_name)\n WHEN MATCHED THEN UPDATE SET\n target.table_name = source.table_name,\n target.dimension = source.dimension,\n target.metric = source.metric,\n target.index_type = source.index_type,\n target.vector_format = source.vector_format,\n target.accuracy = source.accuracy,\n target.updated_at = SYSTIMESTAMP\n WHEN NOT MATCHED THEN INSERT (\n index_name,\n table_name,\n dimension,\n metric,\n index_type,\n vector_format,\n accuracy,\n created_at,\n updated_at\n ) VALUES (\n source.index_name,\n source.table_name,\n source.dimension,\n source.metric,\n source.index_type,\n source.vector_format,\n source.accuracy,\n SYSTIMESTAMP,\n SYSTIMESTAMP\n )`,\n {\n index_name: indexName,\n table_name: tableName,\n dimension,\n metric,\n index_type: mergedConfig.type ?? 'none',\n vector_format: vectorFormat,\n accuracy: mergedConfig.accuracy ?? 95,\n },\n );\n await connection.commit();\n }\n\n async updateRegistryIndexConfig(\n connection: Connection,\n indexName: string,\n metric: OracleMetric,\n indexConfig: OracleVectorIndexConfig,\n ): Promise<void> {\n const mergedConfig = this.mergeIndexConfig(indexConfig);\n await connection.execute(\n `\n UPDATE ${this.qualifiedRegistryTable()}\n SET\n metric = :metric,\n index_type = :index_type,\n accuracy = :accuracy,\n updated_at = SYSTIMESTAMP\n WHERE index_name = :indexName`,\n {\n indexName,\n metric,\n index_type: mergedConfig.type ?? 'none',\n accuracy: mergedConfig.accuracy ?? 95,\n },\n );\n await connection.commit();\n }\n\n async createVectorIndex(\n connection: Connection,\n indexName: string,\n metric: OracleMetric,\n indexConfig?: OracleVectorIndexConfig,\n tableNameOverride?: string,\n ): Promise<boolean> {\n const tableName = tableNameOverride ?? tableNameForIndex(indexName, this.tablePrefix);\n const indexObjectName = this.qualifiedIndexName(indexNameForTable(tableName, 'VECTOR_IDX'));\n const qualifiedTableName = qualifyName(tableName, this.schemaName);\n const mergedConfig = this.mergeIndexConfig(indexConfig);\n const accuracy = mergedConfig.accuracy ?? 95;\n validateAccuracy(accuracy);\n\n const organization =\n mergedConfig.type === 'ivf' ? 'ORGANIZATION NEIGHBOR PARTITIONS' : 'ORGANIZATION INMEMORY NEIGHBOR GRAPH';\n const parameterClause = buildVectorIndexParameterClause(mergedConfig);\n\n try {\n // Duplicate index errors are reported to callers so registry metadata is updated only when DDL actually ran.\n return await executeOracleDdl(\n connection,\n `\n CREATE VECTOR INDEX ${indexObjectName}\n ON ${qualifiedTableName} (embedding)\n ${organization}\n DISTANCE ${metricToken(metric)}\n WITH TARGET ACCURACY ${accuracy}\n ${parameterClause}`,\n [-955],\n );\n } catch (error) {\n if (isOracleErrorCode(error, VECTOR_MEMORY_EXHAUSTED_CODES)) {\n throw asMastraError(\n 'CREATE_INDEX',\n 'VECTOR_MEMORY_EXHAUSTED',\n {\n indexName,\n indexType: mergedConfig.type,\n accuracy,\n vectorMemoryParameter: 'VECTOR_MEMORY_SIZE',\n },\n createInsufficientVectorMemoryError(indexName, mergedConfig, error),\n ErrorCategory.USER,\n );\n }\n throw error;\n }\n }\n\n async dropVectorIndex(connection: Connection, indexName: string, tableNameOverride?: string): Promise<void> {\n const tableName = tableNameOverride ?? tableNameForIndex(indexName, this.tablePrefix);\n const indexObjectName = this.qualifiedIndexName(indexNameForTable(tableName, 'VECTOR_IDX'));\n await executeOracleDdl(connection, `DROP INDEX ${indexObjectName}`, [-1418]);\n }\n\n async createMetadataIndexes(\n connection: Connection,\n indexName: string,\n metadataFields: string[],\n tableNameOverride?: string,\n ): Promise<void> {\n const tableName = tableNameOverride ?? tableNameForIndex(indexName, this.tablePrefix);\n const qualifiedTableName = qualifyName(tableName, this.schemaName);\n for (const field of metadataFields) {\n const metadataIndexName = indexNameForMetadataField(tableName, field);\n const jsonPath = assertJsonPath(field);\n\n // Metadata indexes target scalar JSON_VALUE paths used by the filter compiler.\n await executeOracleDdl(\n connection,\n `\n CREATE INDEX ${this.qualifiedIndexName(metadataIndexName)}\n ON ${qualifiedTableName} (\n JSON_VALUE(metadata, '${jsonPath}' RETURNING VARCHAR2(4000) NULL ON ERROR)\n )`,\n [-955],\n );\n }\n }\n\n async getIndexMetadata(connection: Connection, indexName: string): Promise<CachedIndexInfo> {\n const logicalIndexName = normalizeLogicalIndexName(indexName);\n const cached = this.indexInfoCache.get(logicalIndexName);\n if (cached) return cached;\n\n await this.ensureRegistry(connection);\n\n const registryRow = await this.getRegistryEntry(connection, logicalIndexName);\n if (!registryRow) {\n throw new Error(`Vector index \"${indexName}\" does not exist`);\n }\n\n const qualifiedTableName = qualifyName(registryRow.tableName, this.schemaName);\n return this.cacheIndexMetadata(logicalIndexName, {\n ...registryRow,\n qualifiedTableName,\n });\n }\n\n cacheIndexMetadata(indexName: string, indexInfo: CachedIndexInfo): CachedIndexInfo {\n const logicalIndexName = normalizeLogicalIndexName(indexName);\n this.indexInfoCache.set(logicalIndexName, indexInfo);\n this.indexInfoCache.set(indexInfo.indexName, indexInfo);\n return indexInfo;\n }\n\n clearIndexMetadata(indexName: string): void {\n const logicalIndexName = normalizeLogicalIndexName(indexName);\n this.indexInfoCache.delete(logicalIndexName);\n this.indexInfoCache.delete(safeLegacyCanonicalIndexName(logicalIndexName));\n }\n\n async getRegistryEntry(\n connection: Connection,\n indexName: string,\n ): Promise<Omit<IndexInfo, 'qualifiedTableName' | 'count'> | null> {\n const logicalIndexName = normalizeLogicalIndexName(indexName);\n const legacyIndexName = safeLegacyCanonicalIndexName(logicalIndexName);\n // Prefer exact logical names, then fall back to the legacy uppercase registry key.\n const registryResult = await connection.execute<ObjectRow>(\n `\n SELECT\n index_name AS \"indexName\",\n table_name AS \"tableName\",\n dimension AS \"dimension\",\n metric AS \"metric\",\n index_type AS \"indexType\",\n vector_format AS \"vectorFormat\",\n accuracy AS \"accuracy\"\n FROM ${this.qualifiedRegistryTable()}\n WHERE index_name IN (:indexName, :legacyIndexName)\n ORDER BY CASE WHEN index_name = :indexName THEN 0 ELSE 1 END\n FETCH FIRST 1 ROWS ONLY`,\n { indexName: logicalIndexName, legacyIndexName },\n executeOptions(),\n );\n const registryRow = rows(registryResult)[0];\n if (!registryRow) return null;\n\n return {\n indexName: String(registryRow.indexName),\n tableName: String(registryRow.tableName),\n dimension: Number(registryRow.dimension),\n metric: normalizeMetric(String(registryRow.metric)),\n indexType: normalizeIndexType(String(registryRow.indexType)),\n vectorFormat: normalizeVectorFormat(String(registryRow.vectorFormat ?? DEFAULT_VECTOR_FORMAT)),\n accuracy:\n registryRow.accuracy === null || registryRow.accuracy === undefined ? undefined : Number(registryRow.accuracy),\n };\n }\n\n // Looks up a registry row by physical table name rather than logical index name, so createIndex can\n // tell an identifier-normalization collision (table claimed by a different index_name) apart from a\n // genuinely orphaned physical table with no registry row at all.\n async findRegistryEntryByTableName(connection: Connection, tableName: string): Promise<string | null> {\n const registryResult = await connection.execute<ObjectRow>(\n `\n SELECT index_name AS \"indexName\"\n FROM ${this.qualifiedRegistryTable()}\n WHERE table_name = :tableName\n FETCH FIRST 1 ROWS ONLY`,\n { tableName },\n executeOptions(),\n );\n const registryRow = rows(registryResult)[0];\n return registryRow ? String(registryRow.indexName) : null;\n }\n\n async vectorTableExists(connection: Connection, tableName: string): Promise<boolean> {\n const normalizedTableName = normalizeIdentifier(tableName, 'table name');\n const binds: BindParameters = { tableName: normalizedTableName };\n const ownerPredicate = this.schemaName ? ':ownerName' : \"SYS_CONTEXT('USERENV','CURRENT_SCHEMA')\";\n if (this.schemaName) {\n binds.ownerName = this.schemaName;\n }\n\n const result = await connection.execute<ObjectRow>(\n `SELECT 1 AS \"exists\" FROM all_tables WHERE owner = ${ownerPredicate} AND table_name = :tableName FETCH FIRST 1 ROW ONLY`,\n binds,\n executeOptions(),\n );\n return rows(result).length > 0;\n }\n\n assertCompatibleExistingIndex(\n existing: Omit<IndexInfo, 'qualifiedTableName' | 'count'>,\n indexName: string,\n dimension: number,\n metric: OracleMetric,\n vectorFormat: OracleVectorFormat,\n ): void {\n if (existing.dimension !== dimension) {\n throw asMastraError(\n 'CREATE_INDEX',\n 'DIMENSION_MISMATCH',\n { indexName, expected: existing.dimension, actual: dimension },\n new Error(\n `Vector index \"${indexName}\" already exists with dimension ${existing.dimension}; received ${dimension}`,\n ),\n ErrorCategory.USER,\n );\n }\n\n if (existing.metric !== metric) {\n throw asMastraError(\n 'CREATE_INDEX',\n 'METRIC_MISMATCH',\n { indexName, expected: existing.metric, actual: metric },\n new Error(`Vector index \"${indexName}\" already exists with metric ${existing.metric}; received ${metric}`),\n ErrorCategory.USER,\n );\n }\n\n if (existing.vectorFormat !== vectorFormat) {\n throw asMastraError(\n 'CREATE_INDEX',\n 'VECTOR_FORMAT_MISMATCH',\n { indexName, expected: existing.vectorFormat, actual: vectorFormat },\n new Error(\n `Vector index \"${indexName}\" already exists with vector format ${existing.vectorFormat}; received ${vectorFormat}`,\n ),\n ErrorCategory.USER,\n );\n }\n }\n\n mergeIndexConfig(\n indexConfig?: OracleVectorIndexConfig,\n ): Required<Pick<OracleVectorIndexConfig, 'type'>> & OracleVectorIndexConfig {\n const type = normalizeIndexType(indexConfig?.type ?? this.defaultIndexConfig.type ?? 'none');\n const accuracy = indexConfig?.accuracy ?? this.defaultIndexConfig.accuracy;\n if (accuracy !== undefined) validateAccuracy(accuracy);\n\n return {\n ...this.defaultIndexConfig,\n ...indexConfig,\n type,\n accuracy,\n hnsw: {\n ...this.defaultIndexConfig.hnsw,\n ...indexConfig?.hnsw,\n },\n ivf: {\n ...this.defaultIndexConfig.ivf,\n ...indexConfig?.ivf,\n },\n };\n }\n\n qualifiedRegistryTable(): string {\n return qualifyName(this.registryTableName, this.schemaName);\n }\n\n qualifiedTableName(indexName: string): string {\n return qualifyName(tableNameForIndex(indexName, this.tablePrefix), this.schemaName);\n }\n\n qualifiedIndexName(indexName: string): string {\n return qualifyName(indexName, this.schemaName);\n }\n}\n\nexport function normalizeIndexType(indexType: string): OracleVectorIndexType {\n const normalized = indexType.toLowerCase();\n if (normalized !== 'hnsw' && normalized !== 'ivf' && normalized !== 'none') {\n throw new Error('index type must be one of \"hnsw\", \"ivf\", or \"none\"');\n }\n return normalized;\n}\n\nfunction vectorIndexRegistryConfigMatches(\n indexInfo: Pick<OracleIndexStats, 'metric' | 'indexType' | 'accuracy'>,\n metric: OracleMetric,\n indexConfig: OracleVectorIndexConfig,\n): boolean {\n return (\n indexInfo.metric === metric &&\n indexInfo.indexType === normalizeIndexType(indexConfig.type ?? 'none') &&\n (indexInfo.accuracy ?? 95) === (indexConfig.accuracy ?? 95)\n );\n}\n\nfunction vectorIndexAlreadyExistsError(\n operation: 'BUILD_INDEX' | 'CREATE_INDEX' | 'REBUILD_INDEX',\n indexName: string,\n indexInfo: Pick<OracleIndexStats, 'metric' | 'indexType'>,\n): MastraError {\n return asMastraError(\n operation,\n 'INDEX_ALREADY_EXISTS',\n { indexName, indexType: indexInfo.indexType, metric: indexInfo.metric },\n new Error(\n `Oracle vector index for \"${indexName}\" already exists. Use rebuildIndex() to change the metric or index configuration.`,\n ),\n ErrorCategory.USER,\n );\n}\n\nfunction createInsufficientVectorMemoryError(\n indexName: string,\n indexConfig: OracleVectorIndexConfig,\n cause: unknown,\n): Error {\n const indexType = (indexConfig.type ?? 'hnsw').toUpperCase();\n return withCause(\n new Error(\n `Oracle could not create the ${indexType} vector index \"${indexName}\" because the current container's Vector Pool is out of space (ORA-51962). ` +\n 'HNSW indexes live in the Oracle Vector Pool, controlled by VECTOR_MEMORY_SIZE. ' +\n 'Increase it once with DBA privileges, for example: ALTER SYSTEM SET VECTOR_MEMORY_SIZE = 512M SCOPE=MEMORY. ' +\n 'From this adapter you can also run vector.configureVectorMemory({ size: \"512M\" }) using a privileged connection. ',\n ),\n cause,\n );\n}\n\nfunction safeLegacyCanonicalIndexName(indexName: string): string {\n try {\n return legacyCanonicalIndexName(indexName);\n } catch {\n return indexName;\n }\n}\n","import { ErrorCategory, MastraError } from '@mastra/core/error';\nimport { validateTopK } from '@mastra/core/vector';\nimport type { QueryResult } from '@mastra/core/vector';\n\nimport type { ObjectRow } from '../shared/connection';\nimport { asBindParameters, executeOptions, rows } from '../shared/connection';\nimport type { IndexRegistry, WithConnection } from './ddl';\nimport { buildMetadataWhereClause } from './filter';\nimport { metricToken, validateAccuracy } from './sql';\nimport type { OracleMetric, OracleQueryVectorParams, OracleVectorFormat } from './types';\nimport { STORE_NAME, asMastraError, validateVectorForIndex, validateVectors, vectorBind } from './upsert';\n\n// Handles exact and approximate vector search, including the metadata-only recall path and the\n// min-score post-filter that Oracle distance scores need for parity with other Mastra providers.\nexport async function query(\n registry: IndexRegistry,\n withConnection: WithConnection,\n {\n indexName,\n queryVector,\n topK = 10,\n filter,\n includeVector = false,\n minScore = -1,\n sparseVector,\n queryMode,\n targetAccuracy,\n }: OracleQueryVectorParams,\n): Promise<QueryResult[]> {\n try {\n if (sparseVector !== undefined) {\n throw new Error('OracleVector does not support sparseVector queries yet; use dense queryVector search');\n }\n validateTopK(STORE_NAME, topK);\n if (queryVector !== undefined) {\n validateVectors([queryVector]);\n } else if (!filter || Object.keys(filter).length === 0) {\n throw new Error('Either queryVector or filter must be provided');\n }\n if (!Number.isFinite(minScore)) {\n throw new Error('minScore must be a finite number');\n }\n if (targetAccuracy !== undefined) {\n validateAccuracy(targetAccuracy);\n }\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw asMastraError('QUERY', 'INVALID_INPUT', { indexName }, error, ErrorCategory.USER);\n }\n\n return withConnection(async connection => {\n const indexInfo = await registry.getIndexMetadata(connection, indexName);\n if (queryVector !== undefined) {\n validateVectorForIndex(queryVector, indexInfo, indexName);\n }\n\n const metadataFilter = buildMetadataWhereClause(filter);\n const vectorColumn = includeVector ? ', embedding AS \"vector\"' : '';\n\n if (queryVector === undefined) {\n // Metadata-only queries preserve provider parity for filtered recalls without a query embedding.\n const sql = `\n SELECT\n vector_id AS \"id\",\n 0 AS \"score\",\n metadata AS \"metadata\"\n ${vectorColumn}\n FROM ${indexInfo.qualifiedTableName}\n ${metadataFilter.sql}\n ORDER BY vector_id\n FETCH FIRST ${topK} ROWS ONLY`;\n\n const result = await connection.execute<ObjectRow>(sql, asBindParameters(metadataFilter.binds), executeOptions());\n return rows(result).map(row => rowToQueryResult(row, indexInfo.vectorFormat, indexInfo.dimension));\n }\n\n const distance = `VECTOR_DISTANCE(embedding, :queryVector, ${metricToken(indexInfo.metric)})`;\n const score = scoreExpression(distance, indexInfo.metric);\n const fetchMode = normalizeQueryMode(queryMode ?? (indexInfo.indexType === 'none' ? 'exact' : 'approx'));\n // Oracle applies approximate index search only when ORDER BY and FETCH are in the same query block.\n const targetAccuracyClause =\n fetchMode === 'approx' && targetAccuracy !== undefined ? ` WITH TARGET ACCURACY ${targetAccuracy}` : '';\n if (canSkipMinScoreFilter(indexInfo.metric, minScore)) {\n const sql = `\n SELECT\n vector_id AS \"id\",\n ${score} AS \"score\",\n metadata AS \"metadata\"\n ${vectorColumn}\n FROM ${indexInfo.qualifiedTableName}\n ${metadataFilter.sql}\n ORDER BY ${distance}\n FETCH ${fetchMode.toUpperCase()} FIRST ${topK} ROWS ONLY${targetAccuracyClause}`;\n\n const result = await connection.execute<ObjectRow>(\n sql,\n {\n ...metadataFilter.binds,\n queryVector: vectorBind(queryVector, indexInfo.vectorFormat),\n },\n executeOptions(),\n );\n\n return rows(result).map(row => rowToQueryResult(row, indexInfo.vectorFormat, indexInfo.dimension));\n }\n\n const sql = `\n WITH vector_scores AS (\n SELECT\n vector_id AS \"id\",\n ${score} AS \"score\",\n metadata AS \"metadata\"\n ${vectorColumn}\n FROM ${indexInfo.qualifiedTableName}\n ${metadataFilter.sql}\n ORDER BY ${distance}\n FETCH ${fetchMode.toUpperCase()} FIRST ${topK} ROWS ONLY${targetAccuracyClause}\n )\n SELECT\n \"id\",\n \"score\",\n \"metadata\"\n ${includeVector ? ', \"vector\"' : ''}\n FROM vector_scores\n WHERE \"score\" >= :minScore\n ORDER BY \"score\" DESC`;\n\n const result = await connection.execute<ObjectRow>(\n sql,\n {\n ...metadataFilter.binds,\n queryVector: vectorBind(queryVector, indexInfo.vectorFormat),\n minScore,\n },\n executeOptions(),\n );\n\n return rows(result).map(row => rowToQueryResult(row, indexInfo.vectorFormat, indexInfo.dimension));\n }).catch(error => {\n if (error instanceof MastraError) throw error;\n throw asMastraError('QUERY', 'FAILED', { indexName }, error);\n });\n}\n\nfunction normalizeQueryMode(queryMode: string): 'approx' | 'exact' {\n const normalized = queryMode.toLowerCase();\n if (normalized !== 'approx' && normalized !== 'exact') {\n throw new Error('queryMode must be one of \"approx\" or \"exact\"');\n }\n return normalized;\n}\n\nfunction scoreExpression(distanceExpression: string, metric: OracleMetric): string {\n // Mastra expects higher scores to be better, while Oracle distance is lower-is-better.\n switch (metric) {\n case 'euclidean':\n case 'hamming':\n return `1 / (1 + ${distanceExpression})`;\n case 'dotproduct':\n return `-1 * ${distanceExpression}`;\n case 'jaccard':\n case 'cosine':\n default:\n return `1 - ${distanceExpression}`;\n }\n}\n\nfunction canSkipMinScoreFilter(metric: OracleMetric, minScore: number): boolean {\n // The default threshold is non-restrictive for Oracle distance-derived scores except dotproduct,\n // whose score range is data-dependent.\n return minScore <= -1 && metric !== 'dotproduct';\n}\n\nfunction rowToQueryResult(row: ObjectRow, vectorFormat: OracleVectorFormat, dimension: number): QueryResult {\n const result: QueryResult = {\n id: String(row.id),\n score: Number(row.score),\n metadata: parseJson(row.metadata),\n };\n\n if (row.vector !== undefined && row.vector !== null) {\n result.vector = parseVector(row.vector, vectorFormat, dimension);\n }\n\n return result;\n}\n\nfunction parseJson(value: unknown): Record<string, unknown> {\n if (value === null || value === undefined) return {};\n if (typeof value === 'string') return JSON.parse(value) as Record<string, unknown>;\n if (Buffer.isBuffer(value)) return JSON.parse(value.toString('utf8')) as Record<string, unknown>;\n if (typeof value === 'object') return value as Record<string, unknown>;\n return {};\n}\n\nfunction parseVector(value: unknown, vectorFormat: OracleVectorFormat, dimension: number): number[] {\n // Oracle clients may return VECTOR values as arrays, typed arrays, or JSON strings depending on mode.\n if (Array.isArray(value)) {\n const values = value.map(Number);\n return vectorFormat === 'bit' && values.length !== dimension ? unpackBitVector(values, dimension) : values;\n }\n if (ArrayBuffer.isView(value)) {\n const values = Array.from(value as unknown as ArrayLike<number>).map(Number);\n return vectorFormat === 'bit' ? unpackBitVector(values, dimension) : values;\n }\n if (typeof value === 'string') {\n const values = (JSON.parse(value) as number[]).map(Number);\n return vectorFormat === 'bit' && values.length !== dimension ? unpackBitVector(values, dimension) : values;\n }\n return [];\n}\n\nfunction unpackBitVector(bytes: ArrayLike<number>, dimension: number): number[] {\n const vector: number[] = [];\n for (let i = 0; i < dimension; i += 1) {\n const byte = bytes[Math.floor(i / 8)] ?? 0;\n vector.push((byte & (1 << (7 - (i % 8)))) === 0 ? 0 : 1);\n }\n return vector;\n}\n","import { ErrorCategory, MastraError } from '@mastra/core/error';\nimport { validateTopK } from '@mastra/core/vector';\nimport type { DescribeIndexParams, IndexStats } from '@mastra/core/vector';\nimport type { Connection } from 'oracledb';\nimport type oracledb from 'oracledb';\n\nimport type { ObjectRow } from '../shared/connection';\nimport { executeOptions, rows } from '../shared/connection';\nimport type { IndexInfo, IndexRegistry, WithConnection } from './ddl';\nimport { normalizeIdentifier, normalizeLogicalIndexName, indexNameForTable } from './identifiers';\nimport { validateAccuracy } from './sql';\nimport type { OracleConfigureVectorMemoryParams, OracleIndexAccuracyParams, OracleIndexStatusParams } from './types';\nimport { STORE_NAME, asMastraError, validateVectorForIndex, vectorBind, withCause } from './upsert';\n\ntype BindParameters = oracledb.BindParameters;\n\n// Read-only diagnostics (describe/list/status/accuracy) plus the Vector Pool sizing helper.\n\nexport async function listIndexes(registry: IndexRegistry, withConnection: WithConnection): Promise<string[]> {\n return withConnection(async connection => {\n await registry.ensureRegistry(connection);\n const result = await connection.execute<ObjectRow>(\n `SELECT index_name AS \"indexName\" FROM ${registry.qualifiedRegistryTable()} ORDER BY index_name`,\n {},\n executeOptions(),\n );\n\n return rows(result).map(row => String(row.indexName));\n }).catch(error => {\n if (error instanceof MastraError) throw error;\n throw asMastraError('LIST_INDEXES', 'FAILED', {}, error);\n });\n}\n\nexport async function describeIndex(\n registry: IndexRegistry,\n withConnection: WithConnection,\n { indexName }: DescribeIndexParams,\n): Promise<IndexStats> {\n return withConnection(\n async connection => getIndexInfo(registry, connection, indexName) as unknown as IndexStats,\n ).catch(error => {\n if (error instanceof MastraError) throw error;\n throw asMastraError('DESCRIBE_INDEX', 'FAILED', { indexName }, error);\n });\n}\n\nexport async function getIndexStatus(\n registry: IndexRegistry,\n withConnection: WithConnection,\n { indexName, ownerName }: OracleIndexStatusParams,\n): Promise<string> {\n return withConnection(async connection => {\n const logicalIndexName = normalizeLogicalIndexName(indexName);\n const indexInfo = await registry.getIndexMetadata(connection, logicalIndexName);\n if (indexInfo.indexType === 'none') return 'NONE';\n\n const indexObjectName = indexNameForTable(indexInfo.tableName, 'VECTOR_IDX');\n const owner = ownerName ? normalizeIdentifier(ownerName, 'index owner name') : registry.schemaName;\n const ownerPredicate = owner ? ':ownerName' : \"SYS_CONTEXT('USERENV','CURRENT_SCHEMA')\";\n const binds: BindParameters = owner\n ? { ownerName: owner, indexName: indexObjectName }\n : { indexName: indexObjectName };\n const result = await connection.execute<ObjectRow>(\n `\n SELECT\n status AS \"status\",\n index_type AS \"indexType\",\n domidx_status AS \"domainStatus\"\n FROM all_indexes\n WHERE owner = ${ownerPredicate}\n AND index_name = :indexName\n FETCH FIRST 1 ROWS ONLY`,\n binds,\n executeOptions(),\n );\n\n const row = rows(result)[0];\n if (!row) return 'NOT_FOUND';\n\n const status = String(row.status ?? 'UNKNOWN');\n const indexType = row.indexType ? `type=${String(row.indexType)}` : '';\n const domainStatus = row.domainStatus ? `domain=${String(row.domainStatus)}` : '';\n return [status, indexType, domainStatus].filter(Boolean).join(' ');\n }).catch(error => {\n if (error instanceof MastraError) throw error;\n throw asMastraError('GET_INDEX_STATUS', 'FAILED', { indexName }, error);\n });\n}\n\nexport async function indexAccuracyQuery(\n registry: IndexRegistry,\n withConnection: WithConnection,\n { indexName, queryVector, topK, targetAccuracy }: OracleIndexAccuracyParams,\n): Promise<string> {\n return withConnection(async connection => {\n validateTopK(STORE_NAME, topK);\n if (targetAccuracy !== undefined) validateAccuracy(targetAccuracy);\n\n const logicalIndexName = normalizeLogicalIndexName(indexName);\n const indexInfo = await registry.getIndexMetadata(connection, logicalIndexName);\n validateVectorForIndex(queryVector, indexInfo, indexName);\n const indexObjectName = indexNameForTable(indexInfo.tableName, 'VECTOR_IDX');\n const ownerExpression = registry.schemaName ? ':ownerName' : \"SYS_CONTEXT('USERENV','CURRENT_SCHEMA')\";\n const result = await connection.execute<ObjectRow>(\n `SELECT DBMS_VECTOR.INDEX_ACCURACY_QUERY(\n ${ownerExpression},\n :indexName,\n :queryVector,\n :topK,\n :targetAccuracy\n ) AS \"accuracy\"\n FROM dual`,\n {\n ...(registry.schemaName ? { ownerName: registry.schemaName } : {}),\n indexName: indexObjectName,\n queryVector: vectorBind(queryVector, indexInfo.vectorFormat),\n topK,\n targetAccuracy: targetAccuracy ?? indexInfo.accuracy ?? 95,\n },\n executeOptions(),\n );\n\n return String(rows(result)[0]?.accuracy ?? '');\n }).catch(error => {\n if (error instanceof MastraError) throw error;\n throw asMastraError('INDEX_ACCURACY_QUERY', 'FAILED', { indexName }, error);\n });\n}\n\nexport async function configureVectorMemory(\n withConnection: WithConnection,\n { size, scope = 'MEMORY' }: OracleConfigureVectorMemoryParams,\n): Promise<void> {\n const normalizedSize = normalizeVectorMemorySize(size);\n const normalizedScope = normalizeVectorMemoryScope(scope);\n\n return withConnection(async connection => {\n // HNSW uses Oracle's Vector Pool; local/dev users can size it through this privileged helper.\n await connection.execute(`ALTER SYSTEM SET VECTOR_MEMORY_SIZE = ${normalizedSize} SCOPE=${normalizedScope}`);\n }).catch(error => {\n if (error instanceof MastraError) throw error;\n throw asMastraError(\n 'CONFIGURE_VECTOR_MEMORY',\n 'FAILED',\n { size: normalizedSize, scope: normalizedScope },\n createVectorMemoryConfigurationError(normalizedSize, normalizedScope, error),\n ErrorCategory.USER,\n );\n });\n}\n\nasync function getIndexInfo(registry: IndexRegistry, connection: Connection, indexName: string): Promise<IndexInfo> {\n const indexInfo = await registry.getIndexMetadata(connection, indexName);\n\n // describeIndex reports live row count, so read it from the physical vector table each time.\n const countResult = await connection.execute<ObjectRow>(\n `SELECT COUNT(*) AS \"count\" FROM ${indexInfo.qualifiedTableName}`,\n {},\n executeOptions(),\n );\n const count = Number(rows(countResult)[0]?.count ?? 0);\n\n return {\n ...indexInfo,\n count,\n };\n}\n\nfunction normalizeVectorMemorySize(size: string): string {\n const normalized = size.trim().toUpperCase();\n if (!/^\\d+(?:[KMG])?$/.test(normalized)) {\n throw new Error('vector memory size must be an integer optionally followed by K, M, or G, for example \"512M\"');\n }\n return normalized;\n}\n\nfunction normalizeVectorMemoryScope(scope: string): 'MEMORY' | 'SPFILE' | 'BOTH' {\n const normalized = scope.trim().toUpperCase();\n if (normalized !== 'MEMORY' && normalized !== 'SPFILE' && normalized !== 'BOTH') {\n throw new Error('vector memory scope must be one of \"MEMORY\", \"SPFILE\", or \"BOTH\"');\n }\n return normalized;\n}\n\nfunction createVectorMemoryConfigurationError(size: string, scope: string, cause: unknown): Error {\n return withCause(\n new Error(\n `Unable to set Oracle VECTOR_MEMORY_SIZE=${size} SCOPE=${scope}. ` +\n 'Run this with a DBA-capable user such as SYSTEM for local Docker databases, or ask your DBA to size the Vector Pool before building HNSW indexes.',\n ),\n cause,\n );\n}\n","export type * from './types';\n\nimport { MastraVector } from '@mastra/core/vector';\nimport type {\n DeleteIndexParams,\n DeleteVectorParams,\n DeleteVectorsParams,\n DescribeIndexParams,\n IndexStats,\n QueryResult,\n UpdateVectorParams,\n UpsertVectorParams,\n} from '@mastra/core/vector';\nimport type { Connection } from 'oracledb';\n\nimport { OraclePoolManager, normalizeBatchSize } from '../shared/connection';\nimport {\n DEFAULT_METADATA_INDEXES,\n DEFAULT_REGISTRY_TABLE,\n DEFAULT_TABLE_PREFIX,\n DEFAULT_VECTOR_FORMAT,\n IndexRegistry,\n} from './ddl';\nimport type { CachedIndexInfo } from './ddl';\nimport { normalizeIdentifier } from './identifiers';\nimport { query as queryOp } from './query';\nimport { normalizeVectorFormat } from './sql';\nimport {\n configureVectorMemory as configureVectorMemoryOp,\n describeIndex as describeIndexOp,\n getIndexStatus as getIndexStatusOp,\n indexAccuracyQuery as indexAccuracyQueryOp,\n listIndexes as listIndexesOp,\n} from './stats';\nimport type {\n OracleBuildIndexParams,\n OracleConfigureVectorMemoryParams,\n OracleCreateIndexParams,\n OracleIndexAccuracyParams,\n OracleIndexStatusParams,\n OracleMetric,\n OracleQueryVectorParams,\n OracleRebuildIndexParams,\n OracleVectorConfig,\n OracleVectorFilter,\n OracleVectorIndexConfig,\n} from './types';\nimport {\n DEFAULT_VECTOR_UPSERT_BATCH_SIZE,\n asMastraError,\n deleteVector as deleteVectorOp,\n deleteVectors as deleteVectorsOp,\n updateVector as updateVectorOp,\n upsert as upsertOp,\n} from './upsert';\n\n// OracleVector keeps Mastra's vector API stable while using native Oracle VECTOR and JSON features.\n// The implementation is split across sibling modules: ddl.ts (registry/DDL + shared error helper),\n// upsert.ts (write path + vector format encode/decode), query.ts (search), stats.ts (diagnostics).\n// This facade owns the connection pool and wires each call through to the right module.\nexport class OracleVector extends MastraVector<OracleVectorFilter> {\n private readonly poolManager: OraclePoolManager;\n private readonly ownsPoolManager: boolean;\n private readonly defaultIndexConfig: OracleVectorIndexConfig;\n private readonly upsertBatchSize: number;\n private readonly registry: IndexRegistry;\n\n constructor(config: OracleVectorConfig) {\n try {\n super({ id: config.id });\n\n this.poolManager = config.poolManager ?? new OraclePoolManager(config);\n this.ownsPoolManager = !config.poolManager;\n const schemaName = config.schemaName ? normalizeIdentifier(config.schemaName, 'schema name') : undefined;\n const tablePrefix = normalizeIdentifier(config.tablePrefix ?? DEFAULT_TABLE_PREFIX, 'table prefix');\n const registryTableName = normalizeIdentifier(\n config.registryTableName ?? DEFAULT_REGISTRY_TABLE,\n 'registry table name',\n );\n this.defaultIndexConfig = { type: 'none', accuracy: 95, ...config.defaultIndexConfig };\n const defaultMetadataIndexes = config.defaultMetadataIndexes ?? DEFAULT_METADATA_INDEXES;\n const defaultVectorFormat = normalizeVectorFormat(config.defaultVectorFormat ?? DEFAULT_VECTOR_FORMAT);\n this.upsertBatchSize = normalizeBatchSize(\n config.upsertBatchSize,\n 'upsertBatchSize',\n DEFAULT_VECTOR_UPSERT_BATCH_SIZE,\n );\n\n this.registry = new IndexRegistry({\n schemaName,\n tablePrefix,\n registryTableName,\n defaultMetadataIndexes,\n defaultVectorFormat,\n defaultIndexConfig: this.defaultIndexConfig,\n });\n } catch (error) {\n throw asMastraError('INITIALIZATION', 'FAILED', { schemaName: config.schemaName ?? '' }, error);\n }\n }\n\n async createIndex(params: OracleCreateIndexParams): Promise<void> {\n return this.registry.createIndex(this.withConnection.bind(this), params);\n }\n\n async buildIndex(params: OracleBuildIndexParams): Promise<void> {\n return this.registry.buildIndex(this.withConnection.bind(this), params);\n }\n\n async rebuildIndex(params: OracleRebuildIndexParams): Promise<void> {\n return this.registry.rebuildIndex(this.withConnection.bind(this), params);\n }\n\n async deleteIndex(params: DeleteIndexParams): Promise<void> {\n return this.registry.deleteIndex(this.withConnection.bind(this), params);\n }\n\n async configureVectorMemory(params: OracleConfigureVectorMemoryParams): Promise<void> {\n return configureVectorMemoryOp(this.withConnection.bind(this), params);\n }\n\n async getIndexStatus(params: OracleIndexStatusParams): Promise<string> {\n return getIndexStatusOp(this.registry, this.withConnection.bind(this), params);\n }\n\n async indexAccuracyQuery(params: OracleIndexAccuracyParams): Promise<string> {\n return indexAccuracyQueryOp(this.registry, this.withConnection.bind(this), params);\n }\n\n async upsert(params: UpsertVectorParams): Promise<string[]> {\n return upsertOp(this.registry, this.withConnection.bind(this), this.upsertBatchSize, params);\n }\n\n async query(params: OracleQueryVectorParams): Promise<QueryResult[]> {\n return queryOp(this.registry, this.withConnection.bind(this), params);\n }\n\n async listIndexes(): Promise<string[]> {\n return listIndexesOp(this.registry, this.withConnection.bind(this));\n }\n\n async describeIndex(params: DescribeIndexParams): Promise<IndexStats> {\n return describeIndexOp(this.registry, this.withConnection.bind(this), params);\n }\n\n async updateVector(params: UpdateVectorParams<OracleVectorFilter>): Promise<void> {\n return updateVectorOp(this.registry, this.withConnection.bind(this), params);\n }\n\n async deleteVector(params: DeleteVectorParams): Promise<void> {\n return deleteVectorOp(this.registry, this.withConnection.bind(this), params);\n }\n\n async deleteVectors(params: DeleteVectorsParams<OracleVectorFilter>): Promise<void> {\n return deleteVectorsOp(this.registry, this.withConnection.bind(this), params);\n }\n\n async disconnect(): Promise<void> {\n if (this.ownsPoolManager) {\n await this.poolManager.close();\n }\n }\n\n async close(): Promise<void> {\n await this.disconnect();\n }\n\n private async withConnection<T>(callback: (connection: Connection) => Promise<T>): Promise<T> {\n return this.poolManager.withConnection(callback);\n }\n\n // Unit tests reach into these two members directly (via `(vector as any)`), so they stay as thin\n // instance-method/property delegations even though the real logic now lives in IndexRegistry.\n private cacheIndexMetadata(indexName: string, indexInfo: CachedIndexInfo): CachedIndexInfo {\n return this.registry.cacheIndexMetadata(indexName, indexInfo);\n }\n\n private createVectorIndex(\n connection: Connection,\n indexName: string,\n metric: OracleMetric,\n indexConfig?: OracleVectorIndexConfig,\n tableNameOverride?: string,\n ): Promise<boolean> {\n return this.registry.createVectorIndex(connection, indexName, metric, indexConfig, tableNameOverride);\n }\n}\n","import {\n TABLE_MESSAGES,\n TABLE_OBSERVATIONAL_MEMORY,\n TABLE_RESOURCES,\n TABLE_SCHEMAS,\n TABLE_THREADS,\n TABLE_WORKFLOW_SNAPSHOT,\n} from '@mastra/core/storage';\nimport type { CreateIndexOptions, StorageColumn, TABLE_NAMES } from '@mastra/core/storage';\nimport type { Connection } from 'oracledb';\nimport type oracledb from 'oracledb';\n\nimport {\n asBindParameters,\n clobBind,\n executeDdl,\n executeOptions,\n jsonBind,\n rollbackQuietly,\n rows,\n safeJsonStringify,\n} from '../../shared/connection';\nimport type { ObjectRow, OraclePoolManager } from '../../shared/connection';\nimport { normalizeIdentifier, qualifyName } from '../../vector/identifiers';\n\nexport type OracleQueryBinds = Record<string, unknown>;\nexport type OracleExecuteManyBinds = Array<Record<string, unknown> | unknown[]>;\n\nexport interface OracleDBConfig {\n poolManager: OraclePoolManager;\n schemaName?: string;\n}\n\nexport interface OracleTxClient {\n execute<T extends ObjectRow = ObjectRow>(sql: string, binds?: OracleQueryBinds): Promise<T[]>;\n executeMany<T = unknown>(\n sql: string,\n binds: OracleExecuteManyBinds,\n options?: oracledb.ExecuteManyOptions,\n ): Promise<oracledb.Results<T> | undefined>;\n none(sql: string, binds?: OracleQueryBinds): Promise<void>;\n one<T extends ObjectRow = ObjectRow>(sql: string, binds?: OracleQueryBinds): Promise<T>;\n oneOrNone<T extends ObjectRow = ObjectRow>(sql: string, binds?: OracleQueryBinds): Promise<T | null>;\n manyOrNone<T extends ObjectRow = ObjectRow>(sql: string, binds?: OracleQueryBinds): Promise<T[]>;\n}\n\ntype OracleWriteClient = Pick<OracleTxClient, 'none'>;\n\ntype PreparedField = {\n columnName: string;\n columnSql: string;\n bindName: string;\n value: unknown;\n};\n\n// Thin adapter around one Oracle connection. It gives storage domains a small\n// API while keeping commit/rollback control in OracleDB.\nclass OracleConnectionClient implements OracleTxClient {\n constructor(private readonly connection: Connection) {}\n\n async execute<T extends ObjectRow = ObjectRow>(sql: string, binds: OracleQueryBinds = {}): Promise<T[]> {\n const result = await this.connection.execute<T>(sql, asBindParameters(binds), executeOptions());\n return rows(result);\n }\n\n async executeMany<T = unknown>(\n sql: string,\n binds: OracleExecuteManyBinds,\n options: oracledb.ExecuteManyOptions = {},\n ): Promise<oracledb.Results<T> | undefined> {\n if (binds.length === 0) return undefined;\n // executeMany is used for hot paths such as message writes; callers pass\n // explicit bind definitions when Oracle needs CLOB/JSON type information.\n return this.connection.executeMany<T>(sql, binds as oracledb.BindParameters[], options);\n }\n\n async none(sql: string, binds: OracleQueryBinds = {}): Promise<void> {\n await this.connection.execute(sql, asBindParameters(binds));\n }\n\n async one<T extends ObjectRow = ObjectRow>(sql: string, binds: OracleQueryBinds = {}): Promise<T> {\n const result = await this.execute<T>(sql, binds);\n if (result.length !== 1) {\n throw new Error(`Expected exactly one row but received ${result.length}`);\n }\n return result[0]!;\n }\n\n async oneOrNone<T extends ObjectRow = ObjectRow>(sql: string, binds: OracleQueryBinds = {}): Promise<T | null> {\n const result = await this.execute<T>(sql, binds);\n if (result.length > 1) {\n throw new Error(`Expected zero or one row but received ${result.length}`);\n }\n return result[0] ?? null;\n }\n\n async manyOrNone<T extends ObjectRow = ObjectRow>(sql: string, binds: OracleQueryBinds = {}): Promise<T[]> {\n return this.execute<T>(sql, binds);\n }\n}\n\n// OracleDB is the shared storage-domain facade for DDL, DML, transactions,\n// schema qualification, and Mastra schema-to-Oracle type conversion.\nexport class OracleDB {\n constructor(private readonly config: OracleDBConfig) {}\n\n table(tableName: string): string {\n // Centralize schema qualification so domains never concatenate owner names by hand.\n return qualifyName(tableName, this.config.schemaName);\n }\n\n async execute<T extends ObjectRow = ObjectRow>(sql: string, binds: OracleQueryBinds = {}): Promise<T[]> {\n return this.config.poolManager.withConnection(async connection =>\n new OracleConnectionClient(connection).execute<T>(sql, binds),\n );\n }\n\n async executeMany<T = unknown>(\n sql: string,\n binds: OracleExecuteManyBinds,\n options: oracledb.ExecuteManyOptions = {},\n ): Promise<oracledb.Results<T> | undefined> {\n return this.config.poolManager.withConnection(async connection => {\n try {\n // Non-transactional bulk calls still commit once so domain code gets\n // predictable write visibility without managing connection state itself.\n const result = await new OracleConnectionClient(connection).executeMany<T>(sql, binds, options);\n await connection.commit();\n return result;\n } catch (error) {\n await rollbackQuietly(connection);\n throw error;\n }\n });\n }\n\n async withConnection<T>(callback: (connection: Connection) => Promise<T>): Promise<T> {\n return this.config.poolManager.withConnection(callback);\n }\n\n async none(sql: string, binds: OracleQueryBinds = {}): Promise<void> {\n await this.config.poolManager.withConnection(async connection => {\n await connection.execute(sql, asBindParameters(binds));\n await connection.commit();\n });\n }\n\n async one<T extends ObjectRow = ObjectRow>(sql: string, binds: OracleQueryBinds = {}): Promise<T> {\n const result = await this.execute<T>(sql, binds);\n if (result.length !== 1) {\n throw new Error(`Expected exactly one row but received ${result.length}`);\n }\n return result[0]!;\n }\n\n async oneOrNone<T extends ObjectRow = ObjectRow>(sql: string, binds: OracleQueryBinds = {}): Promise<T | null> {\n const result = await this.execute<T>(sql, binds);\n if (result.length > 1) {\n throw new Error(`Expected zero or one row but received ${result.length}`);\n }\n return result[0] ?? null;\n }\n\n async manyOrNone<T extends ObjectRow = ObjectRow>(sql: string, binds: OracleQueryBinds = {}): Promise<T[]> {\n return this.execute<T>(sql, binds);\n }\n\n async tx<T>(callback: (client: OracleTxClient, connection: Connection) => Promise<T>): Promise<T> {\n return this.config.poolManager.withConnection(async connection => {\n try {\n // Domains use this for multi-row mutations that must commit or roll back as one Oracle transaction.\n const result = await callback(new OracleConnectionClient(connection), connection);\n await connection.commit();\n return result;\n } catch (error) {\n await rollbackQuietly(connection);\n throw error;\n }\n });\n }\n\n async executeDdl(sql: string, ignoredErrorCodes: number[] = []): Promise<void> {\n await this.config.poolManager.withConnection(async connection => {\n await executeDdl(connection, sql, ignoredErrorCodes);\n });\n }\n\n async hasColumn(tableName: string, columnName: string): Promise<boolean> {\n const table = normalizeIdentifier(tableName, 'table name');\n const candidates = columnNameCandidates(columnName);\n const binds: OracleQueryBinds = { tableName: table };\n const ownerPredicate = this.config.schemaName ? ':ownerName' : `SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA')`;\n if (this.config.schemaName) {\n binds.ownerName = normalizeIdentifier(this.config.schemaName, 'schema name');\n }\n\n const columnPredicates = candidates.map((candidate, index) => {\n const bindName = `columnName${index}`;\n binds[bindName] = candidate;\n return `:${bindName}`;\n });\n\n // Older Oracle provider builds may have created quoted camelCase columns;\n // check both exact and upper-case candidates before running additive DDL.\n const row = await this.oneOrNone(\n `SELECT 1 AS \"exists\" FROM all_tab_columns WHERE owner = ${ownerPredicate} AND table_name = :tableName AND column_name IN (${columnPredicates.join(', ')}) FETCH FIRST 1 ROW ONLY`,\n binds,\n );\n return !!row;\n }\n\n async createTable({\n tableName,\n schema,\n compositePrimaryKey,\n }: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n compositePrimaryKey?: string[];\n }): Promise<void> {\n // Oracle does not support CREATE TABLE IF NOT EXISTS, so ORA-00955 is the idempotency path.\n await this.executeDdl(\n generateOracleTableSQL({ tableName, schema, schemaName: this.config.schemaName, compositePrimaryKey }),\n [-955],\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 for (const columnName of ifNotExists) {\n const column = schema[columnName];\n if (!column) continue;\n if (await this.hasColumn(tableName, columnName)) continue;\n\n // Additive migrations use ALTER TABLE ADD and tolerate concurrent runs that add the same column first.\n await this.executeDdl(\n `ALTER TABLE ${this.table(tableName)} ADD (${oracleColumnDefinition(tableName, columnName, column, this.config.schemaName)})`,\n [-1430],\n );\n }\n }\n\n async insert({ tableName, record, schema }: OracleRecordOperation): Promise<void> {\n await executeInsert(this, this.table(tableName), tableName, record, schemaForTable(tableName, schema));\n }\n\n async batchInsert({ tableName, records, schema }: OracleBatchInsertOperation): Promise<void> {\n const tableSchema = schemaForTable(tableName, schema);\n const tableSql = this.table(tableName);\n await this.tx(async client => {\n // Keep batch inserts inside one transaction while reusing the same value\n // preparation path as single-row inserts for JSON, CLOB, and booleans.\n for (const record of records) {\n await executeInsert(client, tableSql, tableName, record, tableSchema);\n }\n });\n }\n\n async update({ tableName, keys, data, schema }: OracleUpdateOperation): Promise<void> {\n await executeUpdate(this, this.table(tableName), tableName, keys, data, schemaForTable(tableName, schema));\n }\n\n async batchUpdate({ tableName, updates, schema }: OracleBatchUpdateOperation): Promise<void> {\n const tableSchema = schemaForTable(tableName, schema);\n const tableSql = this.table(tableName);\n await this.tx(async client => {\n for (const { keys, data } of updates) {\n await executeUpdate(client, tableSql, tableName, keys, data, tableSchema);\n }\n });\n }\n\n async batchDelete({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, unknown>[] }): Promise<void> {\n if (keys.length === 0) return;\n await this.tx(async client => {\n for (const keySet of keys) {\n const { sql, binds } = whereFromKeys(keySet, 'k');\n await client.none(`DELETE FROM ${this.table(tableName)} WHERE ${sql}`, binds);\n }\n });\n }\n\n async merge({ tableName, keys, record, schema }: OracleMergeOperation): Promise<void> {\n if (keys.length === 0) {\n throw new Error('Oracle merge requires at least one key column');\n }\n\n const tableSchema = schemaForTable(tableName, schema);\n const keySet = new Set(keys);\n const fields = prepareRecord(tableName, record, tableSchema);\n if (fields.length === 0) return;\n\n for (const key of keys) {\n if (!fields.some(field => field.columnName === key)) {\n throw new Error(`Oracle merge record is missing key column ${key}`);\n }\n }\n\n const nonKeyFields = fields.filter(field => !keySet.has(field.columnName));\n const onClause = fields\n .filter(field => keySet.has(field.columnName))\n .map(field => `target.${field.columnSql} = :${field.bindName}`)\n .join(' AND ');\n const updateClause = nonKeyFields.map(field => `target.${field.columnSql} = :${field.bindName}`).join(', ');\n const insertColumns = fields.map(field => field.columnSql).join(', ');\n const insertValues = fields.map(field => `:${field.bindName}`).join(', ');\n const matchedClause = updateClause ? ` WHEN MATCHED THEN UPDATE SET ${updateClause}` : '';\n\n // MERGE gives domains a consistent upsert primitive without exposing Oracle-specific SQL at call sites.\n await this.none(\n `MERGE INTO ${this.table(tableName)} target USING dual ON (${onClause})${matchedClause} WHEN NOT MATCHED THEN INSERT (${insertColumns}) VALUES (${insertValues})`,\n bindsFromFields(fields),\n );\n }\n\n async load<R extends ObjectRow = ObjectRow>({\n tableName,\n keys,\n schema,\n orderBy,\n }: OracleLoadOperation): Promise<R | null> {\n const tableSchema = schemaForTable(tableName, schema);\n const { sql, binds } = whereFromKeys(keys, 'k');\n const orderClause = orderBy ?? (tableSchema.createdAt ? ` ORDER BY ${formatColumnName('createdAt')} DESC` : '');\n return this.oneOrNone<R>(\n `SELECT * FROM ${this.table(tableName)} WHERE ${sql}${orderClause} FETCH FIRST 1 ROW ONLY`,\n binds,\n );\n }\n\n async createIndex(options: OracleCreateIndexOptions): Promise<void> {\n await this.config.poolManager.withConnection(async connection => {\n await createOracleIndex(connection, options, this.config.schemaName);\n });\n }\n\n async dropTable(tableName: TABLE_NAMES): Promise<void> {\n await this.executeDdl(`DROP TABLE ${this.table(tableName)}`, [-942]);\n }\n\n async clearTable(tableName: string): Promise<void> {\n await this.none(`DELETE FROM ${this.table(tableName)}`);\n }\n}\n\nexport interface OracleRecordOperation {\n tableName: TABLE_NAMES;\n record: Record<string, unknown>;\n schema?: Record<string, StorageColumn>;\n}\n\nexport interface OracleBatchInsertOperation {\n tableName: TABLE_NAMES;\n records: Record<string, unknown>[];\n schema?: Record<string, StorageColumn>;\n}\n\nexport interface OracleUpdateOperation {\n tableName: TABLE_NAMES;\n keys: Record<string, unknown>;\n data: Record<string, unknown>;\n schema?: Record<string, StorageColumn>;\n}\n\nexport interface OracleBatchUpdateOperation {\n tableName: TABLE_NAMES;\n updates: Array<{ keys: Record<string, unknown>; data: Record<string, unknown> }>;\n schema?: Record<string, StorageColumn>;\n}\n\nexport interface OracleMergeOperation {\n tableName: TABLE_NAMES;\n keys: string[];\n record: Record<string, unknown>;\n schema?: Record<string, StorageColumn>;\n}\n\nexport interface OracleLoadOperation {\n tableName: TABLE_NAMES;\n keys: Record<string, unknown>;\n schema?: Record<string, StorageColumn>;\n orderBy?: string;\n}\n\nexport function parseOracleJson<T = unknown>(value: unknown): T | undefined {\n if (value === null || value === undefined) return undefined;\n if (typeof value !== 'string' && !Buffer.isBuffer(value)) return value as T;\n\n // Depending on driver fetch settings, Oracle JSON/CLOB values can arrive as\n // objects, strings, or buffers. Normalize all three into Mastra-facing values.\n const raw = Buffer.isBuffer(value) ? value.toString('utf8') : value;\n try {\n return JSON.parse(raw) as T;\n } catch {\n return raw as T;\n }\n}\n\nexport type OracleIndexType = 'normal' | 'bitmap';\n\nexport interface OracleCreateIndexOptions extends Omit<\n CreateIndexOptions,\n 'concurrent' | 'method' | 'opclass' | 'storage'\n> {\n /**\n * Oracle index type. `normal` creates a standard B-tree/function-based index.\n * `bitmap` is useful for low-cardinality columns, but should be avoided for\n * high-write OLTP workloads.\n */\n type?: OracleIndexType;\n /**\n * Creates the index online. This is the Oracle-native equivalent of avoiding\n * long blocking DDL, subject to Oracle edition/version support.\n */\n online?: boolean;\n /** Marks the index invisible so it can be tested before optimizer use. */\n invisible?: boolean;\n /** Adds PARALLEL or PARALLEL n to speed large index builds. */\n parallel?: boolean | number;\n /** Adds COMPRESS or COMPRESS n for duplicate leading-key compression. */\n compress?: boolean | number;\n /** Adds NOLOGGING for faster bulk index builds when recoverability policy allows it. */\n noLogging?: boolean;\n /** Creates a reverse key index. Only valid for normal B-tree indexes. */\n reverse?: boolean;\n}\n\ntype ParsedColumn = {\n expression: string;\n direction?: 'ASC' | 'DESC';\n};\n\nconst SIMPLE_IDENTIFIER = /^[A-Za-z][A-Za-z0-9_]*$/;\nconst LOWERCASE_SQL_IDENTIFIER = /^[a-z][a-z0-9_]*$/;\nconst QUOTED_IDENTIFIER = /^\"([A-Za-z][A-Za-z0-9_]*)\"$/;\nconst ORDERED_COLUMN = /^(.*?)(?:\\s+(ASC|DESC))?$/i;\nconst UNSAFE_SQL =\n /;|--|\\/\\*|\\*\\/|\\0|\\b(CREATE|ALTER|DROP|TRUNCATE|INSERT|UPDATE|DELETE|MERGE|GRANT|REVOKE|COMMIT|ROLLBACK|EXECUTE|BEGIN|END)\\b/i;\nconst RESERVED_COLUMN_NAMES = new Set(['references', 'size']);\nconst LONG_TEXT_COLUMNS = new Set([\n 'activeObservations',\n 'activeObservationsPendingUpdate',\n 'bufferedObservations',\n 'bufferedReflection',\n 'changeMessage',\n 'content',\n 'description',\n 'instructions',\n 'analyzePrompt',\n 'other',\n 'extractPrompt',\n 'generateReasonPrompt',\n 'generateScorePrompt',\n 'preprocessPrompt',\n 'reason',\n 'reasonPrompt',\n 'workingMemory',\n]);\n\nconst COLUMN_MAP: Record<string, Record<string, string>> = {\n ...Object.fromEntries(\n Object.entries(TABLE_SCHEMAS).map(([tableName, schema]) => [\n tableName,\n Object.fromEntries(Object.keys(schema).map(columnName => [columnName, formatColumnName(columnName)])),\n ]),\n ),\n [TABLE_THREADS]: {\n ...columnMapFor(TABLE_THREADS),\n id: 'id',\n resourceId: '\"resourceId\"',\n title: 'title',\n metadata: 'metadata',\n createdAt: '\"createdAt\"',\n updatedAt: '\"updatedAt\"',\n },\n [TABLE_MESSAGES]: {\n ...columnMapFor(TABLE_MESSAGES),\n id: 'id',\n thread_id: 'thread_id',\n content: 'content',\n role: 'role',\n type: 'type',\n resourceId: '\"resourceId\"',\n createdAt: '\"createdAt\"',\n },\n [TABLE_RESOURCES]: {\n ...columnMapFor(TABLE_RESOURCES),\n id: 'id',\n workingMemory: '\"workingMemory\"',\n metadata: 'metadata',\n createdAt: '\"createdAt\"',\n updatedAt: '\"updatedAt\"',\n },\n [TABLE_OBSERVATIONAL_MEMORY]: {\n ...columnMapFor(TABLE_OBSERVATIONAL_MEMORY),\n id: 'id',\n lookupKey: '\"lookupKey\"',\n scope: '\"scope\"',\n resourceId: '\"resourceId\"',\n threadId: '\"threadId\"',\n activeObservations: '\"activeObservations\"',\n activeObservationsPendingUpdate: '\"activeObservationsPendingUpdate\"',\n originType: '\"originType\"',\n config: 'config',\n generationCount: '\"generationCount\"',\n lastObservedAt: '\"lastObservedAt\"',\n lastReflectionAt: '\"lastReflectionAt\"',\n pendingMessageTokens: '\"pendingMessageTokens\"',\n totalTokensObserved: '\"totalTokensObserved\"',\n observationTokenCount: '\"observationTokenCount\"',\n isObserving: '\"isObserving\"',\n isReflecting: '\"isReflecting\"',\n observedMessageIds: '\"observedMessageIds\"',\n observedTimezone: '\"observedTimezone\"',\n bufferedObservationChunks: '\"bufferedObservationChunks\"',\n isBufferingObservation: '\"isBufferingObservation\"',\n isBufferingReflection: '\"isBufferingReflection\"',\n lastBufferedAtTokens: '\"lastBufferedAtTokens\"',\n lastBufferedAtTime: '\"lastBufferedAtTime\"',\n metadata: 'metadata',\n createdAt: '\"createdAt\"',\n updatedAt: '\"updatedAt\"',\n },\n [TABLE_WORKFLOW_SNAPSHOT]: {\n ...columnMapFor(TABLE_WORKFLOW_SNAPSHOT),\n workflow_name: 'workflow_name',\n run_id: 'run_id',\n resourceId: '\"resourceId\"',\n snapshot: 'snapshot',\n createdAt: '\"createdAt\"',\n updatedAt: '\"updatedAt\"',\n },\n};\n\nexport function generateOracleTableSQL({\n tableName,\n schema,\n schemaName,\n compositePrimaryKey,\n}: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n schemaName?: string;\n compositePrimaryKey?: string[];\n}): string {\n const compositePrimaryKeySet = compositePrimaryKey ? new Set(compositePrimaryKey) : undefined;\n const columns = Object.entries(schema).map(([columnName, column]) =>\n oracleColumnDefinition(tableName, columnName, column, schemaName, compositePrimaryKeySet),\n );\n const constraints = compositePrimaryKey?.length\n ? [`PRIMARY KEY (${compositePrimaryKey.map(columnName => formatColumnName(columnName)).join(', ')})`]\n : [];\n\n return `CREATE TABLE ${qualifyName(tableName, schemaName)} (\\n ${[...columns, ...constraints].join(',\\n ')}\\n)`;\n}\n\n// Mastra storage schemas are database-neutral. This is where we choose Oracle\n// native JSON for structured fields and CLOBs for prompts/messages that exceed VARCHAR2 limits.\nexport function oracleColumnType(tableName: TABLE_NAMES | string, columnName: string, column: StorageColumn): string {\n switch (column.type) {\n case 'text':\n if (column.primaryKey || isIdentifierLikeColumn(columnName)) return 'VARCHAR2(512)';\n if (isLongTextColumn(tableName, columnName)) return 'CLOB';\n return 'VARCHAR2(4000)';\n case 'uuid':\n return 'VARCHAR2(36)';\n case 'timestamp':\n return 'TIMESTAMP WITH TIME ZONE';\n case 'jsonb':\n return 'JSON';\n case 'integer':\n return 'NUMBER(10)';\n case 'bigint':\n return 'NUMBER(20)';\n case 'float':\n return 'BINARY_DOUBLE';\n case 'boolean':\n return 'NUMBER(1)';\n default:\n return 'VARCHAR2(4000)';\n }\n}\n\nfunction oracleColumnDefinition(\n tableName: TABLE_NAMES,\n columnName: string,\n column: StorageColumn,\n schemaName?: string,\n compositePrimaryKeySet?: Set<string>,\n): string {\n const constraints: string[] = [];\n const isCompositePrimaryKeyColumn = compositePrimaryKeySet?.has(columnName);\n\n if (!column.nullable && !column.primaryKey) constraints.push('NOT NULL');\n if (column.primaryKey && !isCompositePrimaryKeyColumn) constraints.push('PRIMARY KEY');\n if (column.references) {\n constraints.push(\n `REFERENCES ${qualifyName(column.references.table, schemaName)} (${formatColumnName(column.references.column)})`,\n );\n }\n\n return [formatColumnName(columnName), oracleColumnType(tableName, columnName, column), ...constraints].join(' ');\n}\n\nfunction schemaForTable(tableName: TABLE_NAMES, schema?: Record<string, StorageColumn>): Record<string, StorageColumn> {\n return schema ?? TABLE_SCHEMAS[tableName];\n}\n\nasync function executeInsert(\n client: OracleWriteClient,\n tableSql: string,\n tableName: TABLE_NAMES,\n record: Record<string, unknown>,\n schema: Record<string, StorageColumn>,\n): Promise<void> {\n const fields = prepareRecord(tableName, record, schema);\n if (fields.length === 0) return;\n\n await client.none(\n `INSERT INTO ${tableSql} (${fields.map(field => field.columnSql).join(', ')}) VALUES (${fields\n .map(field => `:${field.bindName}`)\n .join(', ')})`,\n bindsFromFields(fields),\n );\n}\n\nasync function executeUpdate(\n client: OracleWriteClient,\n tableSql: string,\n tableName: TABLE_NAMES,\n keys: Record<string, unknown>,\n data: Record<string, unknown>,\n schema: Record<string, StorageColumn>,\n): Promise<void> {\n const fields = prepareRecord(tableName, data, schema, 'v');\n if (fields.length === 0) return;\n\n const { sql, binds } = whereFromKeys(keys, 'k');\n const assignments = fields.map(field => `${field.columnSql} = :${field.bindName}`).join(', ');\n await client.none(`UPDATE ${tableSql} SET ${assignments} WHERE ${sql}`, { ...binds, ...bindsFromFields(fields) });\n}\n\nfunction prepareRecord(\n tableName: TABLE_NAMES,\n record: Record<string, unknown>,\n schema: Record<string, StorageColumn>,\n bindPrefix = 'v',\n): PreparedField[] {\n // Undefined means \"do not touch this column\"; null is preserved and written as SQL NULL / JSON null.\n return Object.entries(record)\n .filter(([, value]) => value !== undefined)\n .map(([columnName, value], index) => {\n const column = schema[columnName];\n return {\n columnName,\n columnSql: formatColumnName(columnName),\n bindName: `${bindPrefix}${index}`,\n value: prepareValue(tableName, columnName, value, column),\n };\n });\n}\n\nfunction bindsFromFields(fields: PreparedField[]): OracleQueryBinds {\n return Object.fromEntries(fields.map(field => [field.bindName, field.value]));\n}\n\nfunction whereFromKeys(keys: Record<string, unknown>, bindPrefix: string): { sql: string; binds: OracleQueryBinds } {\n const entries = Object.entries(keys).filter(([, value]) => value !== undefined);\n if (entries.length === 0) throw new Error('At least one key is required');\n\n // undefined means \"not part of the key\"; null is an intentional IS NULL\n // predicate so optional composite-key fields can still be matched.\n const binds: OracleQueryBinds = {};\n const sql = entries\n .map(([columnName, value], index) => {\n const bindName = `${bindPrefix}${index}`;\n if (value === null) return `${formatColumnName(columnName)} IS NULL`;\n binds[bindName] = value instanceof Date ? value : normalizePrimitiveBind(value);\n return `${formatColumnName(columnName)} = :${bindName}`;\n })\n .join(' AND ');\n\n return { sql, binds };\n}\n\nfunction prepareValue(tableName: TABLE_NAMES, columnName: string, value: unknown, column?: StorageColumn): unknown {\n // Respect Mastra's schema types first, then fall back to safe primitive binds.\n if (column?.type === 'jsonb') {\n if (value === null && column.nullable) return null;\n return jsonBind(value);\n }\n\n if (value === null) return null;\n if (value instanceof Date) return value;\n if (column?.type === 'boolean') return value ? 1 : 0;\n if (column?.type === 'text' && isLongTextColumn(tableName, columnName)) return clobBind(String(value));\n if (typeof value === 'object') return safeJsonStringify(value);\n\n return normalizePrimitiveBind(value);\n}\n\nfunction normalizePrimitiveBind(value: unknown): unknown {\n if (typeof value === 'boolean') return value ? 1 : 0;\n return value;\n}\n\nfunction columnMapFor(tableName: string): Record<string, string> {\n const schema = TABLE_SCHEMAS[tableName as TABLE_NAMES];\n if (!schema) return {};\n return Object.fromEntries(Object.keys(schema).map(columnName => [columnName, formatColumnName(columnName)]));\n}\n\nfunction formatColumnName(columnName: string): string {\n const trimmed = columnName.trim();\n if (!SIMPLE_IDENTIFIER.test(trimmed)) {\n throw new Error(`column name must start with a letter and contain only letters, numbers, and underscores`);\n }\n if (RESERVED_COLUMN_NAMES.has(trimmed.toLowerCase())) return `\"${trimmed}\"`;\n // Preserve camelCase names with quotes because Mastra schemas use names like resourceId and createdAt.\n if (LOWERCASE_SQL_IDENTIFIER.test(trimmed)) return trimmed;\n return `\"${trimmed}\"`;\n}\n\nfunction columnNameCandidates(columnName: string): string[] {\n const trimmed = columnName.trim();\n if (!SIMPLE_IDENTIFIER.test(trimmed)) {\n throw new Error(`column name must start with a letter and contain only letters, numbers, and underscores`);\n }\n return Array.from(new Set([trimmed, trimmed.toUpperCase()]));\n}\n\nfunction isIdentifierLikeColumn(columnName: string): boolean {\n return columnName === 'id' || columnName === 'hash' || columnName.endsWith('Id') || columnName.endsWith('_id');\n}\n\nfunction isLongTextColumn(tableName: TABLE_NAMES | string, columnName: string): boolean {\n if (tableName === TABLE_THREADS && columnName === 'title') return false;\n return LONG_TEXT_COLUMNS.has(columnName);\n}\n\n// Custom indexes accept a constrained SQL surface so domains can expose useful\n// Oracle options without letting arbitrary DDL fragments through provider config.\nexport function generateOracleIndexSQL(options: OracleCreateIndexOptions, schemaName?: string): string {\n validateIndexOptions(options);\n\n const table = canonicalTableName(options.table);\n const indexType = options.type ?? 'normal';\n const unique = options.unique ? 'UNIQUE ' : '';\n const bitmap = indexType === 'bitmap' ? 'BITMAP ' : '';\n const columns = options.columns.map(column => formatIndexColumn(table, column, options.where)).join(', ');\n const attributes = indexAttributes(options);\n\n return `CREATE ${unique}${bitmap}INDEX ${qualifyName(options.name, schemaName)} ON ${qualifyName(\n table,\n schemaName,\n )} (${columns})${attributes}`;\n}\n\nexport async function createOracleIndex(\n connection: Connection,\n options: OracleCreateIndexOptions,\n schemaName?: string,\n): Promise<void> {\n // ORA-01408 (\"column list already indexed\") must propagate rather than being\n // swallowed: a custom index request with different visibility, compression,\n // or tablespace settings than an existing index on the same columns must not\n // be silently skipped. Only ORA-00955 (name already used) is safe to ignore here.\n await executeDdl(connection, generateOracleIndexSQL(options, schemaName), [-955]);\n}\n\nexport function filterIndexesForTables(\n indexes: OracleCreateIndexOptions[] | undefined,\n managedTables: readonly string[],\n): OracleCreateIndexOptions[] {\n if (!indexes?.length) return [];\n const managed = new Set(managedTables.map(table => normalizeIdentifier(table, 'table name')));\n return indexes.filter(index => managed.has(normalizeIdentifier(index.table, 'table name')));\n}\n\nfunction validateIndexOptions(options: OracleCreateIndexOptions): void {\n normalizeIdentifier(options.name, 'index name');\n normalizeIdentifier(options.table, 'table name');\n\n if (!options.columns.length) {\n throw new Error(`Index ${options.name} must include at least one column or expression`);\n }\n if (options.unique && options.type === 'bitmap') {\n throw new Error(`Index ${options.name} cannot be both unique and bitmap`);\n }\n if (options.reverse && options.type === 'bitmap') {\n throw new Error(`Index ${options.name} cannot be both reverse and bitmap`);\n }\n if (options.where && options.type === 'bitmap') {\n throw new Error(`Index ${options.name} cannot emulate partial indexes with bitmap indexes`);\n }\n if (options.where) validateSqlFragment(options.where, 'index where clause');\n if (options.parallel !== undefined && options.parallel !== true && options.parallel !== false) {\n validatePositiveInteger(options.parallel, 'parallel');\n }\n if (typeof options.compress === 'number') {\n validatePositiveInteger(options.compress, 'compress');\n }\n if (options.tablespace) normalizeIdentifier(options.tablespace, 'tablespace name');\n}\n\nfunction formatIndexColumn(table: string, column: string, where?: string): string {\n const parsed = parseColumn(table, column);\n const expression = where ? `CASE WHEN (${where}) THEN ${parsed.expression} END` : parsed.expression;\n return parsed.direction ? `${expression} ${parsed.direction}` : expression;\n}\n\nfunction parseColumn(table: string, column: string): ParsedColumn {\n const trimmed = column.trim();\n if (!trimmed) throw new Error('Index column cannot be empty');\n\n // Custom index columns may be normal schema fields or vetted expressions such\n // as JSON_VALUE(...). Keep a narrow SQL surface before passing DDL to Oracle.\n const match = trimmed.match(ORDERED_COLUMN);\n const rawExpression = match?.[1]?.trim();\n const direction = match?.[2]?.toUpperCase() as 'ASC' | 'DESC' | undefined;\n if (!rawExpression) throw new Error(`Invalid index column: ${column}`);\n\n const quoted = rawExpression.match(QUOTED_IDENTIFIER);\n if (quoted) return { expression: `\"${quoted[1]}\"`, direction };\n\n if (SIMPLE_IDENTIFIER.test(rawExpression)) {\n return { expression: resolveColumnName(table, rawExpression), direction };\n }\n\n validateSqlFragment(rawExpression, 'index column expression');\n validateBalancedParentheses(rawExpression, 'index column expression');\n return { expression: rawExpression, direction };\n}\n\nfunction resolveColumnName(table: string, column: string): string {\n const mapped = COLUMN_MAP[table]?.[column];\n if (mapped) return mapped;\n return normalizeIdentifier(column, 'column name');\n}\n\nfunction canonicalTableName(table: string): string {\n const normalized = normalizeIdentifier(table, 'table name');\n return (\n Object.keys(COLUMN_MAP).find(knownTable => normalizeIdentifier(knownTable, 'table name') === normalized) ?? table\n );\n}\n\nfunction indexAttributes(options: OracleCreateIndexOptions): string {\n const attributes: string[] = [];\n\n if (options.compress === true) attributes.push('COMPRESS');\n if (typeof options.compress === 'number') attributes.push(`COMPRESS ${options.compress}`);\n if (options.tablespace) attributes.push(`TABLESPACE ${normalizeIdentifier(options.tablespace, 'tablespace name')}`);\n if (options.noLogging) attributes.push('NOLOGGING');\n if (options.parallel === true) attributes.push('PARALLEL');\n if (typeof options.parallel === 'number') attributes.push(`PARALLEL ${options.parallel}`);\n if (options.reverse) attributes.push('REVERSE');\n if (options.online) attributes.push('ONLINE');\n if (options.invisible) attributes.push('INVISIBLE');\n\n return attributes.length ? ` ${attributes.join(' ')}` : '';\n}\n\nfunction validateSqlFragment(fragment: string, label: string): void {\n if (UNSAFE_SQL.test(fragment)) {\n throw new Error(`${label} contains unsafe SQL`);\n }\n}\n\nfunction validateBalancedParentheses(expression: string, label: string): void {\n let depth = 0;\n for (const char of expression) {\n if (char === '(') depth += 1;\n if (char === ')') depth -= 1;\n if (depth < 0) throw new Error(`${label} has unbalanced parentheses`);\n }\n if (depth !== 0) throw new Error(`${label} has unbalanced parentheses`);\n}\n\nfunction validatePositiveInteger(value: number, label: string): void {\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw new Error(`${label} must be a positive safe integer`);\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { createStorageErrorId } from '@mastra/core/storage';\n\nimport { parseOracleJson } from './db';\n\nexport type OracleStorageErrorDetails = Record<string, string | number | boolean | undefined>;\n\nexport function createOracleStorageError({\n storeName = 'ORACLEDB',\n operation,\n reason,\n details,\n cause,\n category = ErrorCategory.THIRD_PARTY,\n}: {\n storeName?: string;\n operation: string;\n reason: string;\n details: OracleStorageErrorDetails;\n cause: unknown;\n category?: ErrorCategory;\n}): MastraError {\n const safeDetails = Object.fromEntries(\n Object.entries(details).filter((entry): entry is [string, string | number | boolean] => entry[1] !== undefined),\n );\n\n return new MastraError(\n {\n id: createStorageErrorId(storeName, operation, reason),\n domain: ErrorDomain.STORAGE,\n category,\n details: safeDetails,\n },\n cause,\n );\n}\n\nexport function parseJsonValue(value: unknown): unknown {\n if (value === null || value === undefined) return null;\n if (typeof value !== 'string' && !Buffer.isBuffer(value)) return value;\n\n const raw = Buffer.isBuffer(value) ? value.toString('utf8') : value;\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n}\n\nexport function parseOptionalJson<T>(value: unknown): T | undefined {\n return parseOracleJson<T>(value);\n}\n\nexport function parseOptionalJsonObject(\n value: unknown,\n options: { emptyObjectAsUndefined?: boolean } = {},\n): Record<string, unknown> | undefined {\n const parsed = parseJsonValue(value);\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) return undefined;\n if (options.emptyObjectAsUndefined && Object.keys(parsed).length === 0) return undefined;\n return parsed as Record<string, unknown>;\n}\n\nexport function parseOptionalStringArray(value: unknown): string[] | undefined {\n const parsed = parseJsonValue(value);\n if (!Array.isArray(parsed)) return undefined;\n return parsed.map(item => String(item));\n}\n\nexport function toDate(value: unknown): Date {\n return value instanceof Date ? value : new Date(String(value));\n}\n","import { ErrorCategory, MastraError } from '@mastra/core/error';\nimport {\n AgentsStorage,\n calculatePagination,\n normalizePerPage,\n TABLE_AGENTS,\n TABLE_AGENT_VERSIONS,\n TABLE_SCHEMAS,\n} from '@mastra/core/storage';\nimport type {\n AgentInstructionBlock,\n StorageAgentType,\n StorageCreateAgentInput,\n StorageListAgentsInput,\n StorageListAgentsOutput,\n StorageUpdateAgentInput,\n} from '@mastra/core/storage';\nimport type {\n AgentVersion,\n CreateVersionInput,\n ListVersionsInput,\n ListVersionsOutput,\n} from '@mastra/core/storage/domains/agents';\n\nimport { clobBind, jsonBind, nullableClobBind, nullableJsonBind, safeJsonValue } from '../../../shared/connection';\nimport { assertJsonPath, indexNameForTable, qualifyName } from '../../../vector/identifiers';\nimport { OracleDB, createOracleIndex, filterIndexesForTables, parseOracleJson } from '../../db';\nimport type { OracleCreateIndexOptions, OracleTxClient } from '../../db';\nimport { createOracleStorageError, parseOptionalJson, parseOptionalJsonObject, toDate } from '../../domain-utils';\nimport type { OracleDomainConfig } from '../../types';\n\n// Agents are versioned registry records: the parent row supports listing and lifecycle state while version rows preserve editable snapshots.\nconst STORE_NAME = 'ORACLEDB';\nconst AGENT_ACTIVE_VERSION_ID = '\"activeVersionId\"';\nconst AGENT_AUTHOR_ID = '\"authorId\"';\nconst AGENT_FAVORITE_COUNT = '\"favoriteCount\"';\nconst AGENT_CREATED_AT = '\"createdAt\"';\nconst AGENT_UPDATED_AT = '\"updatedAt\"';\n\nconst VERSION_AGENT_ID = '\"agentId\"';\nconst VERSION_VERSION_NUMBER = '\"versionNumber\"';\nconst VERSION_DEFAULT_OPTIONS = '\"defaultOptions\"';\nconst VERSION_INTEGRATION_TOOLS = '\"integrationTools\"';\nconst VERSION_INPUT_PROCESSORS = '\"inputProcessors\"';\nconst VERSION_OUTPUT_PROCESSORS = '\"outputProcessors\"';\nconst VERSION_MCP_CLIENTS = '\"mcpClients\"';\nconst VERSION_REQUEST_CONTEXT_SCHEMA = '\"requestContextSchema\"';\nconst VERSION_CHANGED_FIELDS = '\"changedFields\"';\nconst VERSION_CHANGE_MESSAGE = '\"changeMessage\"';\nconst VERSION_CREATED_AT = '\"createdAt\"';\n\ntype AgentRow = {\n id: string;\n status: StorageAgentType['status'];\n activeVersionId?: string | null;\n authorId?: string | null;\n visibility?: StorageAgentType['visibility'] | null;\n metadata?: unknown;\n favoriteCount?: number | string | null;\n createdAt: Date | string;\n updatedAt: Date | string;\n};\n\ntype AgentVersionRow = {\n id: string;\n agentId: string;\n versionNumber: number | string;\n name: string;\n description?: string | null;\n instructions?: string | null;\n model: unknown;\n tools?: unknown;\n defaultOptions?: unknown;\n workflows?: unknown;\n agents?: unknown;\n integrationTools?: unknown;\n inputProcessors?: unknown;\n outputProcessors?: unknown;\n memory?: unknown;\n scorers?: unknown;\n mcpClients?: unknown;\n requestContextSchema?: unknown;\n browser?: unknown;\n changedFields?: unknown;\n changeMessage?: string | null;\n createdAt: Date | string;\n};\n\ntype VersionWriteClient = Pick<OracleTxClient, 'none'>;\n\nconst ORACLE_AGENT_VERSIONS_SCHEMA = Object.fromEntries(\n Object.entries(TABLE_SCHEMAS[TABLE_AGENT_VERSIONS]).filter(([column]) => {\n return column !== 'workspace' && !column.startsWith('skill');\n }),\n);\n\nexport { ORACLE_AGENT_VERSIONS_SCHEMA };\n\nexport class AgentsOracle extends AgentsStorage {\n // Agents use a parent row for lifecycle/status and a version row for each editable snapshot.\n static readonly MANAGED_TABLES = [TABLE_AGENTS, TABLE_AGENT_VERSIONS] as const;\n\n private readonly db: OracleDB;\n private readonly schemaName?: string;\n private readonly skipDefaultIndexes?: boolean;\n private readonly indexes: OracleCreateIndexOptions[];\n\n constructor(config: OracleDomainConfig) {\n super();\n this.db = new OracleDB(config);\n this.schemaName = config.schemaName;\n this.skipDefaultIndexes = config.skipDefaultIndexes;\n this.indexes = filterIndexesForTables(config.indexes, AgentsOracle.MANAGED_TABLES);\n }\n\n async init(): Promise<void> {\n await this.db.createTable({\n tableName: TABLE_AGENTS,\n schema: TABLE_SCHEMAS[TABLE_AGENTS],\n });\n await this.db.createTable({\n tableName: TABLE_AGENT_VERSIONS,\n schema: ORACLE_AGENT_VERSIONS_SCHEMA,\n });\n\n await this.db.alterTable({\n tableName: TABLE_AGENTS,\n schema: TABLE_SCHEMAS[TABLE_AGENTS],\n ifNotExists: ['activeVersionId', 'authorId', 'visibility', 'metadata', 'favoriteCount'],\n });\n await this.db.alterTable({\n tableName: TABLE_AGENT_VERSIONS,\n schema: ORACLE_AGENT_VERSIONS_SCHEMA,\n ifNotExists: [\n 'tools',\n 'mcpClients',\n 'requestContextSchema',\n 'browser',\n 'integrationTools',\n 'inputProcessors',\n 'outputProcessors',\n ],\n });\n\n // Keep init safe for existing schemas: additive columns are created above,\n // then legacy JSON shapes are normalized before indexes are used by queries.\n await this.migrateToolsToObjectFormat();\n await this.createIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.db.tx(async client => {\n await client.none(`DELETE FROM ${this.table(TABLE_AGENT_VERSIONS)}`);\n await client.none(`DELETE FROM ${this.table(TABLE_AGENTS)}`);\n });\n }\n\n getDefaultIndexDefinitions(): OracleCreateIndexOptions[] {\n return getDefaultAgentIndexDefinitions(this.indexName.bind(this));\n }\n\n async getById(id: string): Promise<StorageAgentType | null> {\n try {\n const row = await this.db.oneOrNone<AgentRow>(\n `${this.agentSelect()} FROM ${this.table(TABLE_AGENTS)} WHERE id = :id`,\n { id },\n );\n return row ? this.parseAgentRow(row) : null;\n } catch (error) {\n throw this.storageError('GET_AGENT_BY_ID', 'FAILED', { agentId: id }, error);\n }\n }\n\n async create(input: { agent: StorageCreateAgentInput }): Promise<StorageAgentType> {\n const { agent } = input;\n\n try {\n const now = new Date();\n const visibility = agent.visibility ?? (agent.authorId ? 'private' : undefined);\n\n await this.db.tx(async client => {\n const existing = await client.oneOrNone<{ id: string }>(\n `SELECT id AS \"id\" FROM ${this.table(TABLE_AGENTS)} WHERE id = :id`,\n { id: agent.id },\n );\n if (existing) {\n throw new Error(`Agent with id ${agent.id} already exists`);\n }\n\n await client.none(\n `INSERT INTO ${this.table(TABLE_AGENTS)} (\n id, status, ${AGENT_ACTIVE_VERSION_ID}, ${AGENT_AUTHOR_ID}, visibility, metadata,\n ${AGENT_FAVORITE_COUNT}, ${AGENT_CREATED_AT}, ${AGENT_UPDATED_AT}\n ) VALUES (\n :id, :status, :activeVersionId, :authorId, :visibility, :metadata,\n :favoriteCount, :createdAt, :updatedAt\n )`,\n {\n id: agent.id,\n status: 'draft',\n activeVersionId: null,\n authorId: agent.authorId ?? null,\n visibility: visibility ?? null,\n metadata: nullableJsonBind(agent.metadata),\n favoriteCount: 0,\n createdAt: now,\n updatedAt: now,\n },\n );\n\n // The initial version captures the runnable agent config while the parent row stays small and queryable.\n const { id: _id, authorId: _authorId, visibility: _visibility, metadata: _metadata, ...snapshotConfig } = agent;\n await this.insertVersion(client, {\n id: crypto.randomUUID(),\n agentId: agent.id,\n versionNumber: 1,\n ...snapshotConfig,\n changedFields: Object.keys(snapshotConfig),\n changeMessage: 'Initial version',\n });\n });\n\n return {\n id: agent.id,\n status: 'draft',\n activeVersionId: undefined,\n authorId: agent.authorId,\n visibility,\n metadata: agent.metadata,\n favoriteCount: 0,\n createdAt: now,\n updatedAt: now,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw this.storageError('CREATE_AGENT', 'FAILED', { agentId: agent.id }, error);\n }\n }\n\n async update(input: StorageUpdateAgentInput): Promise<StorageAgentType> {\n const { id, ...updates } = input;\n\n try {\n const existingAgent = await this.getById(id);\n if (!existingAgent) {\n throw new Error(`Agent with id ${id} not found`);\n }\n\n // Updating an agent only changes parent-row state. Runnable configuration\n // changes go through createVersion so historical versions stay immutable.\n const { authorId, activeVersionId, metadata, status, visibility } = updates;\n const setClauses: string[] = [];\n const binds: Record<string, unknown> = { id };\n\n if (authorId !== undefined) {\n setClauses.push(`${AGENT_AUTHOR_ID} = :authorId`);\n binds.authorId = authorId;\n }\n\n if (activeVersionId !== undefined) {\n setClauses.push(`${AGENT_ACTIVE_VERSION_ID} = :activeVersionId`);\n binds.activeVersionId = activeVersionId;\n }\n\n if (status !== undefined) {\n setClauses.push(`status = :status`);\n binds.status = status;\n }\n\n if (visibility !== undefined) {\n setClauses.push(`visibility = :visibility`);\n binds.visibility = visibility;\n }\n\n if (metadata !== undefined) {\n setClauses.push(`metadata = :metadata`);\n binds.metadata = jsonBind(metadata);\n }\n\n setClauses.push(`${AGENT_UPDATED_AT} = :updatedAt`);\n binds.updatedAt = new Date();\n\n await this.db.none(`UPDATE ${this.table(TABLE_AGENTS)} SET ${setClauses.join(', ')} WHERE id = :id`, binds);\n\n const updatedAgent = await this.getById(id);\n if (!updatedAgent) {\n throw new Error(`Agent with id ${id} not found after update`);\n }\n return updatedAgent;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw this.storageError('UPDATE_AGENT', 'FAILED', { agentId: id }, error);\n }\n }\n\n async delete(id: string): Promise<void> {\n try {\n await this.db.tx(async client => {\n await client.none(`DELETE FROM ${this.table(TABLE_AGENT_VERSIONS)} WHERE ${VERSION_AGENT_ID} = :id`, { id });\n await client.none(`DELETE FROM ${this.table(TABLE_AGENTS)} WHERE id = :id`, { id });\n });\n } catch (error) {\n throw this.storageError('DELETE_AGENT', 'FAILED', { agentId: id }, error);\n }\n }\n\n async list(args?: StorageListAgentsInput): Promise<StorageListAgentsOutput> {\n const {\n page = 0,\n perPage: perPageInput,\n orderBy,\n authorId,\n visibility,\n metadata,\n status,\n entityIds,\n favoritedOnly,\n } = args || {};\n\n try {\n this.validatePagination(page, perPageInput, 100);\n } catch (error) {\n throw this.storageError('LIST_AGENTS', 'INVALID_INPUT', { page }, error, ErrorCategory.USER);\n }\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n try {\n if (entityIds && entityIds.length === 0) {\n return {\n agents: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n const { field, direction } = this.parseOrderBy(orderBy);\n const { whereClause, binds } = this.agentWhereClause({\n status,\n authorId,\n visibility,\n metadata,\n entityIds,\n favoritedOnly,\n });\n\n const countRow = await this.db.oneOrNone<{ count: number | string }>(\n `SELECT COUNT(*) AS \"count\" FROM ${this.table(TABLE_AGENTS)} a ${whereClause}`,\n binds,\n );\n const total = Number(countRow?.count ?? 0);\n\n if (total === 0) {\n return {\n agents: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n if (perPage === 0) {\n return {\n agents: [],\n total,\n page,\n perPage: perPageForResponse,\n hasMore: total > 0,\n };\n }\n\n const limit = perPageInput === false ? total : perPage;\n const orderByParts: string[] = [];\n orderByParts.push(`a.${this.agentOrderColumn(field)} ${direction}`);\n orderByParts.push(`a.id ASC`);\n\n const rows = await this.db.manyOrNone<AgentRow>(\n `${this.agentSelect('a')} FROM ${this.table(TABLE_AGENTS)} a ${whereClause} ORDER BY ${orderByParts.join(\n ', ',\n )} OFFSET :offset ROWS FETCH NEXT :limit ROWS ONLY`,\n { ...binds, offset, limit },\n );\n\n const agents = rows.flatMap(row => {\n try {\n return [this.parseAgentRow(row)];\n } catch (error) {\n this.logger?.warn?.('[Oracle] Failed to map agent row, skipping', { id: row?.id, error });\n return [];\n }\n });\n\n return {\n agents,\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 this.storageError('LIST_AGENTS', 'FAILED', {}, error);\n }\n }\n\n async createVersion(input: CreateVersionInput): Promise<AgentVersion> {\n try {\n const existingById = await this.db.oneOrNone<{ id: string }>(\n `SELECT id AS \"id\" FROM ${this.table(TABLE_AGENT_VERSIONS)} WHERE id = :id`,\n { id: input.id },\n );\n if (existingById) {\n throw new Error(`Version with id ${input.id} already exists`);\n }\n\n const existingByNumber = await this.db.oneOrNone<{ id: string }>(\n `SELECT id AS \"id\" FROM ${this.table(\n TABLE_AGENT_VERSIONS,\n )} WHERE ${VERSION_AGENT_ID} = :agentId AND ${VERSION_VERSION_NUMBER} = :versionNumber`,\n { agentId: input.agentId, versionNumber: input.versionNumber },\n );\n if (existingByNumber) {\n throw new Error(`Version number ${input.versionNumber} already exists for agent ${input.agentId}`);\n }\n\n const createdAt = new Date();\n await this.insertVersion(this.db, input, createdAt);\n\n return this.toStoredVersion(input, createdAt);\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw this.storageError('CREATE_AGENT_VERSION', 'FAILED', { versionId: input.id, agentId: input.agentId }, error);\n }\n }\n\n async getVersion(id: string): Promise<AgentVersion | null> {\n try {\n const row = await this.db.oneOrNone<AgentVersionRow>(\n `${this.versionSelect()} FROM ${this.table(TABLE_AGENT_VERSIONS)} WHERE id = :id`,\n { id },\n );\n return row ? this.parseVersionRow(row) : null;\n } catch (error) {\n throw this.storageError('GET_AGENT_VERSION', 'FAILED', { versionId: id }, error);\n }\n }\n\n async getVersionByNumber(agentId: string, versionNumber: number): Promise<AgentVersion | null> {\n try {\n const row = await this.db.oneOrNone<AgentVersionRow>(\n `${this.versionSelect()} FROM ${this.table(\n TABLE_AGENT_VERSIONS,\n )} WHERE ${VERSION_AGENT_ID} = :agentId AND ${VERSION_VERSION_NUMBER} = :versionNumber`,\n { agentId, versionNumber },\n );\n return row ? this.parseVersionRow(row) : null;\n } catch (error) {\n throw this.storageError('GET_AGENT_VERSION_BY_NUMBER', 'FAILED', { agentId, versionNumber }, error);\n }\n }\n\n async getLatestVersion(agentId: string): Promise<AgentVersion | null> {\n try {\n const row = await this.db.oneOrNone<AgentVersionRow>(\n `${this.versionSelect()} FROM ${this.table(\n TABLE_AGENT_VERSIONS,\n )} WHERE ${VERSION_AGENT_ID} = :agentId ORDER BY ${VERSION_VERSION_NUMBER} DESC FETCH FIRST 1 ROWS ONLY`,\n { agentId },\n );\n return row ? this.parseVersionRow(row) : null;\n } catch (error) {\n throw this.storageError('GET_LATEST_AGENT_VERSION', 'FAILED', { agentId }, error);\n }\n }\n\n async listVersions(input: ListVersionsInput): Promise<ListVersionsOutput> {\n const { agentId, page = 0, perPage: perPageInput, orderBy } = input;\n\n try {\n this.validatePagination(page, perPageInput, 20);\n } catch (error) {\n throw this.storageError('LIST_AGENT_VERSIONS', 'INVALID_INPUT', { page, agentId }, error, ErrorCategory.USER);\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 const countRow = await this.db.oneOrNone<{ count: number | string }>(\n `SELECT COUNT(*) AS \"count\" FROM ${this.table(TABLE_AGENT_VERSIONS)} WHERE ${VERSION_AGENT_ID} = :agentId`,\n { agentId },\n );\n const total = Number(countRow?.count ?? 0);\n\n if (total === 0) {\n return {\n versions: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n if (perPage === 0) {\n return {\n versions: [],\n total,\n page,\n perPage: perPageForResponse,\n hasMore: total > 0,\n };\n }\n\n const limit = perPageInput === false ? total : perPage;\n // `id ASC` breaks ties between versions sharing the same order-by value so\n // pages stay stable instead of duplicating or dropping rows across pages.\n const rows = await this.db.manyOrNone<AgentVersionRow>(\n `${this.versionSelect()} FROM ${this.table(\n TABLE_AGENT_VERSIONS,\n )} WHERE ${VERSION_AGENT_ID} = :agentId ORDER BY ${this.versionOrderColumn(\n field,\n )} ${direction}, id ASC OFFSET :offset ROWS FETCH NEXT :limit ROWS ONLY`,\n { agentId, offset, limit },\n );\n\n const versions = rows.flatMap(row => {\n try {\n return [this.parseVersionRow(row)];\n } catch (error) {\n this.logger?.warn?.('[Oracle] Failed to map agent version row, skipping', { id: row?.id, error });\n return [];\n }\n });\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 this.storageError('LIST_AGENT_VERSIONS', 'FAILED', { agentId }, error);\n }\n }\n\n async deleteVersion(id: string): Promise<void> {\n try {\n await this.db.none(`DELETE FROM ${this.table(TABLE_AGENT_VERSIONS)} WHERE id = :id`, { id });\n } catch (error) {\n throw this.storageError('DELETE_AGENT_VERSION', 'FAILED', { versionId: id }, error);\n }\n }\n\n async deleteVersionsByParentId(entityId: string): Promise<void> {\n try {\n await this.db.none(`DELETE FROM ${this.table(TABLE_AGENT_VERSIONS)} WHERE ${VERSION_AGENT_ID} = :entityId`, {\n entityId,\n });\n } catch (error) {\n throw this.storageError('DELETE_AGENT_VERSIONS_BY_AGENT_ID', 'FAILED', { agentId: entityId }, error);\n }\n }\n\n async countVersions(agentId: string): Promise<number> {\n try {\n const row = await this.db.oneOrNone<{ count: number | string }>(\n `SELECT COUNT(*) AS \"count\" FROM ${this.table(TABLE_AGENT_VERSIONS)} WHERE ${VERSION_AGENT_ID} = :agentId`,\n { agentId },\n );\n return Number(row?.count ?? 0);\n } catch (error) {\n throw this.storageError('COUNT_AGENT_VERSIONS', 'FAILED', { agentId }, error);\n }\n }\n\n private toStoredVersion(input: CreateVersionInput, createdAt: Date): AgentVersion {\n return {\n id: input.id,\n agentId: input.agentId,\n versionNumber: input.versionNumber,\n name: input.name,\n description: input.description,\n instructions: input.instructions,\n model: input.model,\n tools: normalizeLegacyTools(input.tools) as AgentVersion['tools'],\n defaultOptions: input.defaultOptions,\n workflows: input.workflows,\n agents: input.agents,\n integrationTools: input.integrationTools,\n inputProcessors: input.inputProcessors,\n outputProcessors: input.outputProcessors,\n memory: input.memory,\n scorers: input.scorers,\n mcpClients: input.mcpClients,\n requestContextSchema: input.requestContextSchema,\n browser: input.browser,\n changedFields: input.changedFields,\n changeMessage: input.changeMessage,\n createdAt,\n };\n }\n\n private async createIndexes(): Promise<void> {\n await this.db.withConnection(async connection => {\n if (!this.skipDefaultIndexes) {\n for (const index of this.getDefaultIndexDefinitions()) {\n try {\n await createOracleIndex(connection, index, this.schemaName);\n } catch (error) {\n this.logger?.warn?.(`Failed to create Oracle default index ${index.name}:`, error);\n }\n }\n }\n\n for (const index of this.indexes) {\n try {\n await createOracleIndex(connection, index, this.schemaName);\n } catch (error) {\n this.logger?.warn?.(`Failed to create Oracle custom index ${index.name}:`, error);\n }\n }\n });\n }\n\n private async insertVersion(\n client: VersionWriteClient,\n input: CreateVersionInput,\n createdAt = new Date(),\n ): Promise<void> {\n // Version rows contain the full runnable snapshot. CLOB binds cover long\n // prompts/change messages, while JSON binds preserve structured tool config.\n await client.none(\n `INSERT INTO ${this.table(TABLE_AGENT_VERSIONS)} (\n id, ${VERSION_AGENT_ID}, ${VERSION_VERSION_NUMBER},\n name, description, instructions, model, tools,\n ${VERSION_DEFAULT_OPTIONS}, workflows, agents, ${VERSION_INTEGRATION_TOOLS},\n ${VERSION_INPUT_PROCESSORS}, ${VERSION_OUTPUT_PROCESSORS}, memory, scorers,\n ${VERSION_MCP_CLIENTS}, ${VERSION_REQUEST_CONTEXT_SCHEMA},\n browser, ${VERSION_CHANGED_FIELDS}, ${VERSION_CHANGE_MESSAGE}, ${VERSION_CREATED_AT}\n ) VALUES (\n :id, :agentId, :versionNumber,\n :name, :description, :instructions, :model, :tools,\n :defaultOptions, :workflows, :agents, :integrationTools,\n :inputProcessors, :outputProcessors, :memory, :scorers,\n :mcpClients, :requestContextSchema,\n :browser, :changedFields, :changeMessage, :createdAt\n )`,\n {\n id: input.id,\n agentId: input.agentId,\n versionNumber: input.versionNumber,\n name: input.name,\n description: nullableClobBind(input.description),\n instructions: clobBind(this.serializeInstructions(input.instructions)),\n model: jsonBind(input.model),\n tools: nullableJsonBind(normalizeLegacyTools(input.tools)),\n defaultOptions: nullableJsonBind(input.defaultOptions),\n workflows: nullableJsonBind(input.workflows),\n agents: nullableJsonBind(input.agents),\n integrationTools: nullableJsonBind(input.integrationTools),\n inputProcessors: nullableJsonBind(input.inputProcessors),\n outputProcessors: nullableJsonBind(input.outputProcessors),\n memory: nullableJsonBind(input.memory),\n scorers: nullableJsonBind(input.scorers),\n mcpClients: nullableJsonBind(input.mcpClients),\n requestContextSchema: nullableJsonBind(input.requestContextSchema),\n browser: nullableJsonBind(input.browser),\n changedFields: nullableJsonBind(input.changedFields),\n changeMessage: nullableClobBind(input.changeMessage),\n createdAt,\n },\n );\n }\n\n private agentWhereClause(args: {\n status?: StorageAgentType['status'];\n authorId?: string;\n visibility?: StorageAgentType['visibility'];\n metadata?: Record<string, unknown>;\n entityIds?: string[];\n favoritedOnly?: boolean;\n }): { whereClause: string; binds: Record<string, unknown> } {\n const conditions: string[] = [];\n const binds: Record<string, unknown> = {};\n\n if (args.status) {\n conditions.push(`a.status = :status`);\n binds.status = args.status;\n }\n\n if (args.authorId !== undefined) {\n conditions.push(`a.${AGENT_AUTHOR_ID} = :authorId`);\n binds.authorId = args.authorId;\n }\n\n if (args.visibility !== undefined) {\n conditions.push(`a.visibility = :visibility`);\n binds.visibility = args.visibility;\n }\n\n if (args.metadata && Object.keys(args.metadata).length > 0) {\n let index = 0;\n for (const [key, value] of Object.entries(args.metadata)) {\n const bindName = `metadata${index++}`;\n // Metadata filters are translated into JSON_VALUE predicates so Oracle\n // can use function-based indexes for common scalar fields.\n conditions.push(`${jsonValue('a.metadata', key, value)} = :${bindName}`);\n binds[bindName] = jsonComparableValue(value);\n }\n }\n\n if (args.entityIds && args.entityIds.length > 0) {\n const bindNames = args.entityIds.map((entityId, index) => {\n const bindName = `entityId${index}`;\n binds[bindName] = entityId;\n return `:${bindName}`;\n });\n conditions.push(`a.id IN (${bindNames.join(', ')})`);\n }\n\n if (args.favoritedOnly) {\n conditions.push('1 = 0');\n }\n\n return {\n whereClause: conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '',\n binds,\n };\n }\n\n private agentSelect(alias?: string): string {\n const prefix = alias ? `${alias}.` : '';\n return [\n `SELECT ${prefix}id AS \"id\"`,\n `${prefix}status AS \"status\"`,\n `${prefix}${AGENT_ACTIVE_VERSION_ID} AS \"activeVersionId\"`,\n `${prefix}${AGENT_AUTHOR_ID} AS \"authorId\"`,\n `${prefix}visibility AS \"visibility\"`,\n `${prefix}metadata AS \"metadata\"`,\n `${prefix}${AGENT_FAVORITE_COUNT} AS \"favoriteCount\"`,\n `${prefix}${AGENT_CREATED_AT} AS \"createdAt\"`,\n `${prefix}${AGENT_UPDATED_AT} AS \"updatedAt\"`,\n ].join(', ');\n }\n\n private versionSelect(): string {\n return [\n `SELECT id AS \"id\"`,\n `${VERSION_AGENT_ID} AS \"agentId\"`,\n `${VERSION_VERSION_NUMBER} AS \"versionNumber\"`,\n `name AS \"name\"`,\n `description AS \"description\"`,\n `instructions AS \"instructions\"`,\n `model AS \"model\"`,\n `tools AS \"tools\"`,\n `${VERSION_DEFAULT_OPTIONS} AS \"defaultOptions\"`,\n `workflows AS \"workflows\"`,\n `agents AS \"agents\"`,\n `${VERSION_INTEGRATION_TOOLS} AS \"integrationTools\"`,\n `${VERSION_INPUT_PROCESSORS} AS \"inputProcessors\"`,\n `${VERSION_OUTPUT_PROCESSORS} AS \"outputProcessors\"`,\n `memory AS \"memory\"`,\n `scorers AS \"scorers\"`,\n `${VERSION_MCP_CLIENTS} AS \"mcpClients\"`,\n `${VERSION_REQUEST_CONTEXT_SCHEMA} AS \"requestContextSchema\"`,\n `browser AS \"browser\"`,\n `${VERSION_CHANGED_FIELDS} AS \"changedFields\"`,\n `${VERSION_CHANGE_MESSAGE} AS \"changeMessage\"`,\n `${VERSION_CREATED_AT} AS \"createdAt\"`,\n ].join(', ');\n }\n\n private parseAgentRow(row: AgentRow): StorageAgentType {\n return {\n id: String(row.id),\n status: row.status,\n activeVersionId: optionalString(row.activeVersionId),\n authorId: optionalString(row.authorId),\n visibility: optionalVisibility(row.visibility),\n metadata: parseOptionalJsonObject(row.metadata),\n favoriteCount: row.favoriteCount === null || row.favoriteCount === undefined ? 0 : Number(row.favoriteCount),\n createdAt: toDate(row.createdAt),\n updatedAt: toDate(row.updatedAt),\n };\n }\n\n private parseVersionRow(row: AgentVersionRow): AgentVersion {\n // Oracle can return JSON columns as objects or serialized values depending\n // on fetch mode, so every structured field is normalized before returning.\n return {\n id: String(row.id),\n agentId: String(row.agentId),\n versionNumber: Number(row.versionNumber),\n name: String(row.name),\n description: optionalString(row.description),\n instructions: this.deserializeInstructions(row.instructions),\n model: parseOracleJson(row.model) as AgentVersion['model'],\n tools: normalizeLegacyTools(parseOptionalJson<AgentVersion['tools']>(row.tools)) as AgentVersion['tools'],\n defaultOptions: parseOptionalJson<AgentVersion['defaultOptions']>(row.defaultOptions),\n workflows: parseOptionalJson<AgentVersion['workflows']>(row.workflows),\n agents: parseOptionalJson<AgentVersion['agents']>(row.agents),\n integrationTools: parseOptionalJson<AgentVersion['integrationTools']>(row.integrationTools),\n inputProcessors: parseOptionalJson<AgentVersion['inputProcessors']>(row.inputProcessors),\n outputProcessors: parseOptionalJson<AgentVersion['outputProcessors']>(row.outputProcessors),\n memory: parseOptionalJson<AgentVersion['memory']>(row.memory),\n scorers: parseOptionalJson<AgentVersion['scorers']>(row.scorers),\n mcpClients: parseOptionalJson<AgentVersion['mcpClients']>(row.mcpClients),\n requestContextSchema: parseOptionalJson<AgentVersion['requestContextSchema']>(row.requestContextSchema),\n browser: parseOptionalJson<AgentVersion['browser']>(row.browser),\n changedFields: parseOptionalJson<AgentVersion['changedFields']>(row.changedFields),\n changeMessage: optionalString(row.changeMessage),\n createdAt: toDate(row.createdAt),\n };\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 | null | undefined): string | AgentInstructionBlock[] {\n if (!raw) return '';\n try {\n const parsed = JSON.parse(raw);\n if (Array.isArray(parsed)) return parsed as AgentInstructionBlock[];\n } catch {\n // Plain string instructions are the common case.\n }\n return raw;\n }\n\n private agentOrderColumn(field: string): string {\n return field === 'updatedAt' ? AGENT_UPDATED_AT : AGENT_CREATED_AT;\n }\n\n private versionOrderColumn(field: string): string {\n return field === 'createdAt' ? VERSION_CREATED_AT : VERSION_VERSION_NUMBER;\n }\n\n private validatePagination(page: number, perPageInput: number | false | undefined, defaultPerPage: number): void {\n if (page < 0) {\n throw new Error('page must be >= 0');\n }\n\n const perPage = normalizePerPage(perPageInput, defaultPerPage);\n const maxOffset = Number.MAX_SAFE_INTEGER / 2;\n if (perPageInput !== false && page * perPage > maxOffset) {\n throw new Error('page value too large');\n }\n }\n\n private async migrateToolsToObjectFormat(): Promise<void> {\n try {\n // Older rows may store tools as string arrays; the current API expects an\n // object map. Migrate lazily during init to avoid a hard breaking migration.\n const rows = await this.db.manyOrNone<{ id: string; tools?: unknown }>(\n `SELECT id AS \"id\", tools AS \"tools\" FROM ${this.table(TABLE_AGENT_VERSIONS)} WHERE tools IS NOT NULL`,\n );\n const updates = rows.flatMap(row => {\n const tools = parseOracleJson(row.tools);\n if (!isLegacyToolArray(tools)) return [];\n return [{ id: row.id, tools: Object.fromEntries(tools.map(toolName => [toolName, {}])) }];\n });\n\n if (updates.length === 0) return;\n\n await this.db.tx(async client => {\n for (const update of updates) {\n await client.none(`UPDATE ${this.table(TABLE_AGENT_VERSIONS)} SET tools = :tools WHERE id = :id`, {\n id: update.id,\n tools: jsonBind(update.tools),\n });\n }\n });\n\n this.logger?.info?.(`Migrated ${updates.length} agent version(s) tools from array to object format`);\n } catch (error) {\n this.logger?.warn?.('Failed to migrate agent tools to object format:', error);\n }\n }\n\n private table(tableName: string): string {\n return qualifyName(tableName, this.schemaName);\n }\n\n private indexName(indexName: string): string {\n return indexNameForTable(indexName, 'IDX');\n }\n\n private storageError(\n operation: string,\n reason: string,\n details: Record<string, string | number | boolean | undefined>,\n cause: unknown,\n category: ErrorCategory = ErrorCategory.THIRD_PARTY,\n ): MastraError {\n return createOracleStorageError({ storeName: STORE_NAME, operation, reason, details, cause, category });\n }\n}\n\nexport function getDefaultAgentIndexDefinitions(indexName: (name: string) => string): OracleCreateIndexOptions[] {\n return [\n {\n name: indexName('MASTRA_AGENTS_STATUS_CREATED'),\n table: TABLE_AGENTS,\n columns: ['status', 'createdAt'],\n },\n {\n name: indexName('MASTRA_AGENTS_AUTHOR_CREATED'),\n table: TABLE_AGENTS,\n columns: ['authorId', 'createdAt'],\n },\n {\n name: indexName('MASTRA_AGENTS_ACTIVE_VERSION'),\n table: TABLE_AGENTS,\n columns: ['activeVersionId'],\n },\n {\n name: indexName('MASTRA_AGENT_VERSIONS_AGENT_VERSION'),\n table: TABLE_AGENT_VERSIONS,\n columns: ['agentId', 'versionNumber'],\n unique: true,\n },\n ];\n}\n\nfunction optionalString(value: unknown): string | undefined {\n if (value === null || value === undefined) return undefined;\n return String(value);\n}\n\nfunction optionalVisibility(value: unknown): StorageAgentType['visibility'] | undefined {\n if (value === 'private' || value === 'public') return value;\n return undefined;\n}\n\nfunction normalizeLegacyTools(value: unknown): unknown {\n if (!isLegacyToolArray(value)) return value;\n return Object.fromEntries(value.map(toolName => [toolName, {}]));\n}\n\nfunction isLegacyToolArray(value: unknown): value is string[] {\n return Array.isArray(value) && value.every(item => typeof item === 'string');\n}\n\nfunction jsonValue(column: string, path: string, comparisonValue: unknown): string {\n const jsonPath = assertJsonPath(path);\n if (typeof comparisonValue === 'number') {\n return `JSON_VALUE(${column}, '${jsonPath}' RETURNING NUMBER NULL ON ERROR)`;\n }\n return `JSON_VALUE(${column}, '${jsonPath}' RETURNING VARCHAR2(4000) NULL ON ERROR)`;\n}\n\nfunction jsonComparableValue(value: unknown): unknown {\n if (value instanceof Date) return value.toISOString();\n if (typeof value === 'boolean') return String(value);\n if (value === null || value === undefined) return '';\n if (typeof value === 'object') return JSON.stringify(safeJsonValue(value));\n return value;\n}\n","import { ErrorCategory, MastraError } from '@mastra/core/error';\nimport {\n calculatePagination,\n MCPClientsStorage,\n normalizePerPage,\n TABLE_MCP_CLIENTS,\n TABLE_MCP_CLIENT_VERSIONS,\n TABLE_SCHEMAS,\n} from '@mastra/core/storage';\nimport type {\n StorageCreateMCPClientInput,\n StorageListMCPClientsInput,\n StorageListMCPClientsOutput,\n StorageMCPClientType,\n StorageUpdateMCPClientInput,\n} from '@mastra/core/storage';\nimport type {\n CreateMCPClientVersionInput,\n ListMCPClientVersionsInput,\n ListMCPClientVersionsOutput,\n MCPClientVersion,\n} from '@mastra/core/storage/domains/mcp-clients';\n\nimport { jsonBind, nullableJsonBind, safeJsonValue } from '../../../shared/connection';\nimport { assertJsonPath, indexNameForTable, qualifyName } from '../../../vector/identifiers';\nimport { OracleDB, createOracleIndex, filterIndexesForTables, parseOracleJson } from '../../db';\nimport type { OracleCreateIndexOptions, OracleTxClient } from '../../db';\nimport {\n createOracleStorageError,\n parseOptionalJsonObject,\n parseOptionalStringArray,\n toDate,\n} from '../../domain-utils';\nimport type { OracleDomainConfig } from '../../types';\n\n// MCP clients use the same registry/version pattern as agents: parent rows handle discovery while version rows snapshot server bindings.\nconst STORE_NAME = 'ORACLEDB';\nconst SNAPSHOT_FIELDS = ['name', 'description', 'servers'] as const;\n\nconst CLIENT_ACTIVE_VERSION_ID = '\"activeVersionId\"';\nconst CLIENT_AUTHOR_ID = '\"authorId\"';\nconst CLIENT_CREATED_AT = '\"createdAt\"';\nconst CLIENT_UPDATED_AT = '\"updatedAt\"';\nconst VERSION_MCP_CLIENT_ID = '\"mcpClientId\"';\nconst VERSION_VERSION_NUMBER = '\"versionNumber\"';\nconst VERSION_CHANGED_FIELDS = '\"changedFields\"';\nconst VERSION_CHANGE_MESSAGE = '\"changeMessage\"';\nconst VERSION_CREATED_AT = '\"createdAt\"';\n\ntype MCPClientRow = {\n id: string;\n status: StorageMCPClientType['status'];\n activeVersionId?: string | null;\n authorId?: string | null;\n metadata?: unknown;\n createdAt: Date | string;\n updatedAt: Date | string;\n};\n\ntype MCPClientVersionRow = {\n id: string;\n mcpClientId: string;\n versionNumber: number | string;\n name: string;\n description?: string | null;\n servers: unknown;\n changedFields?: unknown;\n changeMessage?: string | null;\n createdAt: Date | string;\n};\n\ntype VersionWriteClient = Pick<OracleTxClient, 'none'>;\n\nexport class MCPClientsOracle extends MCPClientsStorage {\n // MCP clients follow the registry pattern: parent lifecycle row plus versioned server config snapshots.\n static readonly MANAGED_TABLES = [TABLE_MCP_CLIENTS, TABLE_MCP_CLIENT_VERSIONS] as const;\n\n private readonly db: OracleDB;\n private readonly schemaName?: string;\n private readonly skipDefaultIndexes?: boolean;\n private readonly indexes: OracleCreateIndexOptions[];\n\n constructor(config: OracleDomainConfig) {\n super();\n this.db = new OracleDB(config);\n this.schemaName = config.schemaName;\n this.skipDefaultIndexes = config.skipDefaultIndexes;\n this.indexes = filterIndexesForTables(config.indexes, MCPClientsOracle.MANAGED_TABLES);\n }\n\n async init(): Promise<void> {\n await this.db.createTable({\n tableName: TABLE_MCP_CLIENTS,\n schema: TABLE_SCHEMAS[TABLE_MCP_CLIENTS],\n });\n await this.db.createTable({\n tableName: TABLE_MCP_CLIENT_VERSIONS,\n schema: TABLE_SCHEMAS[TABLE_MCP_CLIENT_VERSIONS],\n });\n await this.createIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.db.tx(async client => {\n await client.none(`DELETE FROM ${this.table(TABLE_MCP_CLIENT_VERSIONS)}`);\n await client.none(`DELETE FROM ${this.table(TABLE_MCP_CLIENTS)}`);\n });\n }\n\n getDefaultIndexDefinitions(): OracleCreateIndexOptions[] {\n return getDefaultMCPClientIndexDefinitions(this.indexName.bind(this));\n }\n\n async getById(id: string): Promise<StorageMCPClientType | null> {\n try {\n const row = await this.db.oneOrNone<MCPClientRow>(\n `${this.clientSelect()} FROM ${this.table(TABLE_MCP_CLIENTS)} WHERE id = :id`,\n { id },\n );\n return row ? this.parseMCPClientRow(row) : null;\n } catch (error) {\n throw this.storageError('GET_MCP_CLIENT_BY_ID', 'FAILED', { mcpClientId: id }, error);\n }\n }\n\n async create(input: { mcpClient: StorageCreateMCPClientInput }): Promise<StorageMCPClientType> {\n const { mcpClient } = input;\n\n try {\n const now = new Date();\n\n await this.db.tx(async client => {\n const existing = await client.oneOrNone<{ id: string }>(\n `SELECT id AS \"id\" FROM ${this.table(TABLE_MCP_CLIENTS)} WHERE id = :id`,\n { id: mcpClient.id },\n );\n if (existing) {\n throw new Error(`MCP client with id ${mcpClient.id} already exists`);\n }\n\n await client.none(\n `INSERT INTO ${this.table(TABLE_MCP_CLIENTS)} (\n id, status, ${CLIENT_ACTIVE_VERSION_ID}, ${CLIENT_AUTHOR_ID}, metadata,\n ${CLIENT_CREATED_AT}, ${CLIENT_UPDATED_AT}\n ) VALUES (\n :id, :status, :activeVersionId, :authorId, :metadata,\n :createdAt, :updatedAt\n )`,\n {\n id: mcpClient.id,\n status: 'draft',\n activeVersionId: null,\n authorId: mcpClient.authorId ?? null,\n metadata: nullableJsonBind(mcpClient.metadata),\n createdAt: now,\n updatedAt: now,\n },\n );\n\n // Store the editable server map in the version row so historical client configs remain inspectable.\n const { id: _id, authorId: _authorId, metadata: _metadata, ...snapshotConfig } = mcpClient;\n await this.insertVersion(client, {\n id: crypto.randomUUID(),\n mcpClientId: mcpClient.id,\n versionNumber: 1,\n ...snapshotConfig,\n changedFields: [...SNAPSHOT_FIELDS],\n changeMessage: 'Initial version',\n });\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 this.storageError('CREATE_MCP_CLIENT', 'FAILED', { mcpClientId: mcpClient.id }, error);\n }\n }\n\n async update(input: StorageUpdateMCPClientInput): Promise<StorageMCPClientType> {\n const { id, ...updates } = input;\n\n try {\n const existingClient = await this.getById(id);\n if (!existingClient) {\n throw new Error(`MCP client with id ${id} not found`);\n }\n\n const { authorId, activeVersionId, metadata, status } = updates;\n const setClauses: string[] = [];\n const binds: Record<string, unknown> = { id };\n\n if (authorId !== undefined) {\n setClauses.push(`${CLIENT_AUTHOR_ID} = :authorId`);\n binds.authorId = authorId;\n }\n\n if (activeVersionId !== undefined) {\n setClauses.push(`${CLIENT_ACTIVE_VERSION_ID} = :activeVersionId`);\n binds.activeVersionId = activeVersionId;\n }\n\n if (status !== undefined) {\n setClauses.push(`status = :status`);\n binds.status = status;\n }\n\n if (metadata !== undefined) {\n const mergedMetadata = { ...(existingClient.metadata ?? {}), ...metadata };\n // Client discovery metadata is mutable on the parent row; server\n // connection maps are kept in explicit version rows.\n setClauses.push(`metadata = :metadata`);\n binds.metadata = jsonBind(mergedMetadata);\n }\n\n setClauses.push(`${CLIENT_UPDATED_AT} = :updatedAt`);\n binds.updatedAt = new Date();\n\n await this.db.none(`UPDATE ${this.table(TABLE_MCP_CLIENTS)} SET ${setClauses.join(', ')} WHERE id = :id`, binds);\n\n const updatedClient = await this.getById(id);\n if (!updatedClient) {\n throw new Error(`MCP client with id ${id} not found after update`);\n }\n return updatedClient;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw this.storageError('UPDATE_MCP_CLIENT', 'FAILED', { mcpClientId: id }, error);\n }\n }\n\n async delete(id: string): Promise<void> {\n try {\n await this.db.tx(async client => {\n await client.none(`DELETE FROM ${this.table(TABLE_MCP_CLIENT_VERSIONS)} WHERE ${VERSION_MCP_CLIENT_ID} = :id`, {\n id,\n });\n await client.none(`DELETE FROM ${this.table(TABLE_MCP_CLIENTS)} WHERE id = :id`, { id });\n });\n } catch (error) {\n throw this.storageError('DELETE_MCP_CLIENT', 'FAILED', { mcpClientId: id }, error);\n }\n }\n\n async list(args?: StorageListMCPClientsInput): Promise<StorageListMCPClientsOutput> {\n const { page = 0, perPage: perPageInput, orderBy, authorId, metadata, status = 'published' } = args || {};\n\n try {\n this.validatePagination(page, perPageInput, 100);\n } catch (error) {\n throw this.storageError('LIST_MCP_CLIENTS', 'INVALID_INPUT', { page }, error, ErrorCategory.USER);\n }\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n try {\n const { field, direction } = this.parseOrderBy(orderBy);\n const { whereClause, binds } = this.clientWhereClause({ status, authorId, metadata });\n\n const countRow = await this.db.oneOrNone<{ count: number | string }>(\n `SELECT COUNT(*) AS \"count\" FROM ${this.table(TABLE_MCP_CLIENTS)} ${whereClause}`,\n binds,\n );\n const total = Number(countRow?.count ?? 0);\n\n if (total === 0) {\n return {\n mcpClients: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n if (perPage === 0) {\n return {\n mcpClients: [],\n total,\n page,\n perPage: perPageForResponse,\n hasMore: total > 0,\n };\n }\n\n const limit = perPageInput === false ? total : perPage;\n // `id ASC` breaks ties between rows sharing the same order-by value so\n // pages stay stable instead of duplicating or dropping rows across pages.\n const rows = await this.db.manyOrNone<MCPClientRow>(\n `${this.clientSelect()} FROM ${this.table(TABLE_MCP_CLIENTS)} ${whereClause} ORDER BY ${this.clientOrderColumn(\n field,\n )} ${direction}, id ASC OFFSET :offset ROWS FETCH NEXT :limit ROWS ONLY`,\n { ...binds, offset, limit },\n );\n\n return {\n mcpClients: rows.map(row => this.parseMCPClientRow(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 this.storageError('LIST_MCP_CLIENTS', 'FAILED', {}, error);\n }\n }\n\n async createVersion(input: CreateMCPClientVersionInput): Promise<MCPClientVersion> {\n try {\n const existingById = await this.db.oneOrNone<{ id: string }>(\n `SELECT id AS \"id\" FROM ${this.table(TABLE_MCP_CLIENT_VERSIONS)} WHERE id = :id`,\n { id: input.id },\n );\n if (existingById) {\n throw new Error(`Version with id ${input.id} already exists`);\n }\n\n const existingByNumber = await this.db.oneOrNone<{ id: string }>(\n `SELECT id AS \"id\" FROM ${this.table(\n TABLE_MCP_CLIENT_VERSIONS,\n )} WHERE ${VERSION_MCP_CLIENT_ID} = :mcpClientId AND ${VERSION_VERSION_NUMBER} = :versionNumber`,\n { mcpClientId: input.mcpClientId, versionNumber: input.versionNumber },\n );\n if (existingByNumber) {\n throw new Error(`Version number ${input.versionNumber} already exists for MCP client ${input.mcpClientId}`);\n }\n\n const createdAt = new Date();\n await this.insertVersion(this.db, input, createdAt);\n\n return {\n ...input,\n createdAt,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw this.storageError(\n 'CREATE_MCP_CLIENT_VERSION',\n 'FAILED',\n { versionId: input.id, mcpClientId: input.mcpClientId },\n error,\n );\n }\n }\n\n async getVersion(id: string): Promise<MCPClientVersion | null> {\n try {\n const row = await this.db.oneOrNone<MCPClientVersionRow>(\n `${this.versionSelect()} FROM ${this.table(TABLE_MCP_CLIENT_VERSIONS)} WHERE id = :id`,\n { id },\n );\n return row ? this.parseVersionRow(row) : null;\n } catch (error) {\n throw this.storageError('GET_MCP_CLIENT_VERSION', 'FAILED', { versionId: id }, error);\n }\n }\n\n async getVersionByNumber(mcpClientId: string, versionNumber: number): Promise<MCPClientVersion | null> {\n try {\n const row = await this.db.oneOrNone<MCPClientVersionRow>(\n `${this.versionSelect()} FROM ${this.table(\n TABLE_MCP_CLIENT_VERSIONS,\n )} WHERE ${VERSION_MCP_CLIENT_ID} = :mcpClientId AND ${VERSION_VERSION_NUMBER} = :versionNumber`,\n { mcpClientId, versionNumber },\n );\n return row ? this.parseVersionRow(row) : null;\n } catch (error) {\n throw this.storageError('GET_MCP_CLIENT_VERSION_BY_NUMBER', 'FAILED', { mcpClientId, versionNumber }, error);\n }\n }\n\n async getLatestVersion(mcpClientId: string): Promise<MCPClientVersion | null> {\n try {\n const row = await this.db.oneOrNone<MCPClientVersionRow>(\n `${this.versionSelect()} FROM ${this.table(\n TABLE_MCP_CLIENT_VERSIONS,\n )} WHERE ${VERSION_MCP_CLIENT_ID} = :mcpClientId ORDER BY ${VERSION_VERSION_NUMBER} DESC FETCH FIRST 1 ROWS ONLY`,\n { mcpClientId },\n );\n return row ? this.parseVersionRow(row) : null;\n } catch (error) {\n throw this.storageError('GET_LATEST_MCP_CLIENT_VERSION', 'FAILED', { mcpClientId }, error);\n }\n }\n\n async listVersions(input: ListMCPClientVersionsInput): Promise<ListMCPClientVersionsOutput> {\n const { mcpClientId, page = 0, perPage: perPageInput, orderBy } = input;\n\n try {\n this.validatePagination(page, perPageInput, 20);\n } catch (error) {\n throw this.storageError(\n 'LIST_MCP_CLIENT_VERSIONS',\n 'INVALID_INPUT',\n { page, mcpClientId },\n error,\n ErrorCategory.USER,\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 const countRow = await this.db.oneOrNone<{ count: number | string }>(\n `SELECT COUNT(*) AS \"count\" FROM ${this.table(TABLE_MCP_CLIENT_VERSIONS)} WHERE ${VERSION_MCP_CLIENT_ID} = :mcpClientId`,\n { mcpClientId },\n );\n const total = Number(countRow?.count ?? 0);\n\n if (total === 0) {\n return {\n versions: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n if (perPage === 0) {\n return {\n versions: [],\n total,\n page,\n perPage: perPageForResponse,\n hasMore: total > 0,\n };\n }\n\n const limit = perPageInput === false ? total : perPage;\n // `id ASC` breaks ties between versions sharing the same order-by value so\n // pages stay stable instead of duplicating or dropping rows across pages.\n const rows = await this.db.manyOrNone<MCPClientVersionRow>(\n `${this.versionSelect()} FROM ${this.table(\n TABLE_MCP_CLIENT_VERSIONS,\n )} WHERE ${VERSION_MCP_CLIENT_ID} = :mcpClientId ORDER BY ${this.versionOrderColumn(\n field,\n )} ${direction}, id ASC OFFSET :offset ROWS FETCH NEXT :limit ROWS ONLY`,\n { mcpClientId, offset, limit },\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 this.storageError('LIST_MCP_CLIENT_VERSIONS', 'FAILED', { mcpClientId }, error);\n }\n }\n\n async deleteVersion(id: string): Promise<void> {\n try {\n await this.db.none(`DELETE FROM ${this.table(TABLE_MCP_CLIENT_VERSIONS)} WHERE id = :id`, { id });\n } catch (error) {\n throw this.storageError('DELETE_MCP_CLIENT_VERSION', 'FAILED', { versionId: id }, error);\n }\n }\n\n async deleteVersionsByParentId(entityId: string): Promise<void> {\n try {\n await this.db.none(\n `DELETE FROM ${this.table(TABLE_MCP_CLIENT_VERSIONS)} WHERE ${VERSION_MCP_CLIENT_ID} = :entityId`,\n {\n entityId,\n },\n );\n } catch (error) {\n throw this.storageError(\n 'DELETE_MCP_CLIENT_VERSIONS_BY_MCP_CLIENT_ID',\n 'FAILED',\n { mcpClientId: entityId },\n error,\n );\n }\n }\n\n async countVersions(mcpClientId: string): Promise<number> {\n try {\n const row = await this.db.oneOrNone<{ count: number | string }>(\n `SELECT COUNT(*) AS \"count\" FROM ${this.table(TABLE_MCP_CLIENT_VERSIONS)} WHERE ${VERSION_MCP_CLIENT_ID} = :mcpClientId`,\n { mcpClientId },\n );\n return Number(row?.count ?? 0);\n } catch (error) {\n throw this.storageError('COUNT_MCP_CLIENT_VERSIONS', 'FAILED', { mcpClientId }, error);\n }\n }\n\n private async createIndexes(): Promise<void> {\n await this.db.withConnection(async connection => {\n if (!this.skipDefaultIndexes) {\n for (const index of this.getDefaultIndexDefinitions()) {\n try {\n await createOracleIndex(connection, index, this.schemaName);\n } catch (error) {\n this.logger?.warn?.(`Failed to create Oracle default index ${index.name}:`, error);\n }\n }\n }\n\n for (const index of this.indexes) {\n try {\n await createOracleIndex(connection, index, this.schemaName);\n } catch (error) {\n this.logger?.warn?.(`Failed to create Oracle custom index ${index.name}:`, error);\n }\n }\n });\n }\n\n private async insertVersion(\n client: VersionWriteClient,\n input: CreateMCPClientVersionInput,\n createdAt = new Date(),\n ): Promise<void> {\n // The server map is the important reproducible client config, so it is\n // stored as Oracle JSON on each version row.\n await client.none(\n `INSERT INTO ${this.table(TABLE_MCP_CLIENT_VERSIONS)} (\n id, ${VERSION_MCP_CLIENT_ID}, ${VERSION_VERSION_NUMBER},\n name, description, servers,\n ${VERSION_CHANGED_FIELDS}, ${VERSION_CHANGE_MESSAGE},\n ${VERSION_CREATED_AT}\n ) VALUES (\n :id, :mcpClientId, :versionNumber,\n :name, :description, :servers,\n :changedFields, :changeMessage,\n :createdAt\n )`,\n {\n id: input.id,\n mcpClientId: input.mcpClientId,\n versionNumber: input.versionNumber,\n name: input.name,\n description: input.description ?? null,\n servers: jsonBind(input.servers),\n changedFields: nullableJsonBind(input.changedFields),\n changeMessage: input.changeMessage ?? null,\n createdAt,\n },\n );\n }\n\n private clientWhereClause(args: {\n status: StorageMCPClientType['status'];\n authorId?: string;\n metadata?: Record<string, unknown>;\n }): { whereClause: string; binds: Record<string, unknown> } {\n const conditions = ['status = :status'];\n const binds: Record<string, unknown> = { status: args.status };\n\n if (args.authorId !== undefined) {\n conditions.push(`${CLIENT_AUTHOR_ID} = :authorId`);\n binds.authorId = args.authorId;\n }\n\n if (args.metadata && Object.keys(args.metadata).length > 0) {\n let index = 0;\n for (const [key, value] of Object.entries(args.metadata)) {\n const bindName = `metadata${index++}`;\n // Scalar metadata filters use JSON_VALUE so provider listings stay\n // indexable without loading every client row.\n conditions.push(`${jsonValue('metadata', key, value)} = :${bindName}`);\n binds[bindName] = jsonComparableValue(value);\n }\n }\n\n return { whereClause: `WHERE ${conditions.join(' AND ')}`, binds };\n }\n\n private clientSelect(): string {\n return [\n `SELECT id AS \"id\"`,\n `status AS \"status\"`,\n `${CLIENT_ACTIVE_VERSION_ID} AS \"activeVersionId\"`,\n `${CLIENT_AUTHOR_ID} AS \"authorId\"`,\n `metadata AS \"metadata\"`,\n `${CLIENT_CREATED_AT} AS \"createdAt\"`,\n `${CLIENT_UPDATED_AT} AS \"updatedAt\"`,\n ].join(', ');\n }\n\n private versionSelect(): string {\n return [\n `SELECT id AS \"id\"`,\n `${VERSION_MCP_CLIENT_ID} AS \"mcpClientId\"`,\n `${VERSION_VERSION_NUMBER} AS \"versionNumber\"`,\n `name AS \"name\"`,\n `description AS \"description\"`,\n `servers AS \"servers\"`,\n `${VERSION_CHANGED_FIELDS} AS \"changedFields\"`,\n `${VERSION_CHANGE_MESSAGE} AS \"changeMessage\"`,\n `${VERSION_CREATED_AT} AS \"createdAt\"`,\n ].join(', ');\n }\n\n private parseMCPClientRow(row: MCPClientRow): StorageMCPClientType {\n return {\n id: String(row.id),\n status: row.status,\n activeVersionId: optionalString(row.activeVersionId),\n authorId: optionalString(row.authorId),\n metadata: parseOptionalJsonObject(row.metadata),\n createdAt: toDate(row.createdAt),\n updatedAt: toDate(row.updatedAt),\n };\n }\n\n private parseVersionRow(row: MCPClientVersionRow): MCPClientVersion {\n // Normalize the JSON server map before returning it to Mastra core.\n return {\n id: String(row.id),\n mcpClientId: String(row.mcpClientId),\n versionNumber: Number(row.versionNumber),\n name: String(row.name),\n description: optionalString(row.description),\n servers: parseOracleJson(row.servers) as MCPClientVersion['servers'],\n changedFields: parseOptionalStringArray(row.changedFields),\n changeMessage: optionalString(row.changeMessage),\n createdAt: toDate(row.createdAt),\n };\n }\n\n private clientOrderColumn(field: string): string {\n return field === 'updatedAt' ? CLIENT_UPDATED_AT : CLIENT_CREATED_AT;\n }\n\n private versionOrderColumn(field: string): string {\n return field === 'createdAt' ? VERSION_CREATED_AT : VERSION_VERSION_NUMBER;\n }\n\n private validatePagination(page: number, perPageInput: number | false | undefined, defaultPerPage: number): void {\n if (page < 0) {\n throw new Error('page must be >= 0');\n }\n\n const perPage = normalizePerPage(perPageInput, defaultPerPage);\n const maxOffset = Number.MAX_SAFE_INTEGER / 2;\n if (perPageInput !== false && page * perPage > maxOffset) {\n throw new Error('page value too large');\n }\n }\n\n private table(tableName: string): string {\n return qualifyName(tableName, this.schemaName);\n }\n\n private indexName(indexName: string): string {\n return indexNameForTable(indexName, 'IDX');\n }\n\n private storageError(\n operation: string,\n reason: string,\n details: Record<string, string | number | boolean | undefined>,\n cause: unknown,\n category: ErrorCategory = ErrorCategory.THIRD_PARTY,\n ): MastraError {\n return createOracleStorageError({ storeName: STORE_NAME, operation, reason, details, cause, category });\n }\n}\n\nexport function getDefaultMCPClientIndexDefinitions(indexName: (name: string) => string): OracleCreateIndexOptions[] {\n return [\n {\n name: indexName('MASTRA_MCP_CLIENT_VERSIONS_CLIENT_VERSION'),\n table: TABLE_MCP_CLIENT_VERSIONS,\n columns: ['mcpClientId', 'versionNumber'],\n unique: true,\n },\n ];\n}\n\nfunction optionalString(value: unknown): string | undefined {\n if (value === null || value === undefined) return undefined;\n return String(value);\n}\n\nfunction jsonValue(column: string, path: string, comparisonValue: unknown): string {\n const jsonPath = assertJsonPath(path);\n if (typeof comparisonValue === 'number') {\n return `JSON_VALUE(${column}, '${jsonPath}' RETURNING NUMBER NULL ON ERROR)`;\n }\n return `JSON_VALUE(${column}, '${jsonPath}' RETURNING VARCHAR2(4000) NULL ON ERROR)`;\n}\n\nfunction jsonComparableValue(value: unknown): unknown {\n if (value instanceof Date) return value.toISOString();\n if (typeof value === 'boolean') return String(value);\n if (value === null || value === undefined) return '';\n if (typeof value === 'object') return JSON.stringify(safeJsonValue(value));\n return value;\n}\n","import { randomUUID } from 'node:crypto';\n\nimport type { MastraError } from '@mastra/core/error';\nimport { ErrorCategory } from '@mastra/core/error';\nimport type { IMastraLogger } from '@mastra/core/logger';\nimport type { MastraDBMessage, StorageThreadType } from '@mastra/core/memory';\nimport type {\n BufferedObservationChunk,\n StorageResourceType,\n ThreadOrderBy,\n ThreadSortDirection,\n StorageOrderBy,\n} from '@mastra/core/storage';\n\nimport { clobBind, isOracleErrorCode } from '../../../shared/connection';\nimport { qualifyName } from '../../../vector/identifiers';\nimport type { OracleDB, OracleCreateIndexOptions, OracleTxClient } from '../../db';\nimport { createOracleStorageError, parseJsonValue, toDate } from '../../domain-utils';\n\n// Shared helpers used across the memory domain modules (schema, threads, messages,\n// resources, observational memory). Kept together so binds/parsing stay consistent\n// no matter which sub-module reads or writes a row.\nconst STORE_NAME = 'ORACLEDB';\n\nexport const ORACLE_IN_LIMIT = 900;\nexport const EMPTY_STRING_SENTINEL = '__MASTRA_ORACLE_EMPTY_STRING__';\nexport const STRING_SENTINEL_ESCAPE_PREFIX = '__MASTRA_ORACLE_ESCAPED__';\n\n/**\n * Per-call context every memory sub-module function receives instead of `this`.\n * Built fresh by `MemoryOracle` on every public method call so mocked/replaced\n * fields (e.g. tests swapping `db`) are always picked up.\n */\nexport interface MemoryContext {\n db: OracleDB;\n schemaName?: string;\n messageBatchSize: number;\n vectorRegistryTableName: string;\n skipDefaultIndexes?: boolean;\n indexes: OracleCreateIndexOptions[];\n logger: IMastraLogger;\n validatePaginationInput(page: number, perPageInput: number | false): void;\n validateMetadataKeys(metadata: Record<string, unknown> | undefined): void;\n parseOrderBy(\n orderBy?: StorageOrderBy,\n defaultDirection?: ThreadSortDirection,\n ): { field: ThreadOrderBy; direction: ThreadSortDirection };\n deepMergeConfig(target: Record<string, unknown>, source: Record<string, unknown>): Record<string, unknown>;\n // Bound references to the *public* MemoryOracle methods of the same name.\n // Other public methods that historically called `this.xyz(...)` internally\n // (e.g. saveMessages validating threads via getThreadById, updateResource\n // reading-then-writing) go through these instead of importing the sibling\n // module directly, so an instance-level override/mock (tests, subclasses)\n // is still honored exactly like it was on the single monolithic class.\n getThreadById(args: { threadId: string; resourceId?: string }): Promise<StorageThreadType | null>;\n listMessagesById(args: { messageIds: string[] }): Promise<{ messages: MastraDBMessage[] }>;\n getResourceById(args: { resourceId: string }): Promise<StorageResourceType | null>;\n saveResource(args: { resource: StorageResourceType }): Promise<StorageResourceType>;\n}\n\nexport function table(ctx: Pick<MemoryContext, 'schemaName'>, tableName: string): string {\n return qualifyName(tableName, ctx.schemaName);\n}\n\nexport function storageError(\n operation: string,\n reason: string,\n details: Record<string, string | number | boolean | undefined>,\n cause: unknown,\n category: ErrorCategory = ErrorCategory.THIRD_PARTY,\n): MastraError {\n return createOracleStorageError({ storeName: STORE_NAME, operation, reason, details, cause, category });\n}\n\nexport function assertRowsAffected(rowsAffected: number | undefined, operation: string, id: string): void {\n if (rowsAffected && rowsAffected > 0) return;\n throw storageError(\n operation,\n 'NOT_FOUND',\n { id },\n new Error(`Observational memory record not found: ${id}`),\n ErrorCategory.THIRD_PARTY,\n );\n}\n\nexport function inClause(prefix: string, values: readonly string[]): { sql: string; binds: Record<string, unknown> } {\n const binds: Record<string, unknown> = {};\n const placeholders = values.map((value, index) => {\n const key = `${prefix}${index}`;\n binds[key] = value;\n return `:${key}`;\n });\n return { sql: placeholders.join(', '), binds };\n}\n\nexport function chunkValues<T>(values: T[], size = ORACLE_IN_LIMIT): T[][] {\n const chunks: T[][] = [];\n for (let index = 0; index < values.length; index += size) {\n chunks.push(values.slice(index, index + size));\n }\n return chunks;\n}\n\nexport function boolToNumber(value: boolean | undefined): number {\n return value ? 1 : 0;\n}\n\nexport function toBoolean(value: unknown): boolean {\n return value === true || value === 1 || value === '1' || value === 'true' || value === 'TRUE';\n}\n\nexport function numberOrZero(value: unknown): number {\n if (typeof value === 'number') return Number.isFinite(value) ? value : 0;\n if (value === null || value === undefined || value === '') return 0;\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : 0;\n}\n\nexport function optionalNumber(value: unknown): number | undefined {\n if (value === null || value === undefined || value === '') return undefined;\n return numberOrZero(value);\n}\n\nexport function stringOrEmpty(value: unknown): string {\n if (value === null || value === undefined) return '';\n return String(value);\n}\n\nexport function emptyToUndefined(value: unknown): string | undefined {\n const stringValue = stringOrEmpty(value);\n return stringValue.length === 0 ? undefined : stringValue;\n}\n\nexport function optionalStringBind(value: string | null | undefined): string | null {\n if (value === undefined || value === null) return null;\n if (value.length === 0) return EMPTY_STRING_SENTINEL;\n if (value.startsWith(EMPTY_STRING_SENTINEL) || value.startsWith(STRING_SENTINEL_ESCAPE_PREFIX)) {\n return `${STRING_SENTINEL_ESCAPE_PREFIX}${value}`;\n }\n return value;\n}\n\nexport function optionalClobStringBind(value: string | null | undefined) {\n const encoded = optionalStringBind(value);\n return encoded === null ? null : clobBind(encoded);\n}\n\nexport function parseOptionalString(value: unknown): string | undefined {\n if (value === null || value === undefined) return undefined;\n const stringValue = String(value);\n if (stringValue === EMPTY_STRING_SENTINEL) return '';\n if (stringValue.startsWith(STRING_SENTINEL_ESCAPE_PREFIX)) {\n return stringValue.slice(STRING_SENTINEL_ESCAPE_PREFIX.length);\n }\n return stringValue;\n}\n\nexport function parseJson(value: unknown): Record<string, unknown> {\n if (value === null || value === undefined) return {};\n if (typeof value === 'string') return JSON.parse(value) as Record<string, unknown>;\n if (Buffer.isBuffer(value)) return JSON.parse(value.toString('utf8')) as Record<string, unknown>;\n if (typeof value === 'object') return value as Record<string, unknown>;\n return {};\n}\n\nexport function paginationClause(perPageInput: number | false | undefined, perPage: number, offset: number): string {\n if (perPageInput === false) return '';\n return `OFFSET ${offset} ROWS FETCH NEXT ${perPage} ROWS ONLY`;\n}\n\n// Shared by observational.ts (row parsing) and observational-buffering.ts\n// (buffer chunk reads/writes) so both agree on the buffered-chunk shape.\nexport function parseBufferedChunks(value: unknown): BufferedObservationChunk[] {\n const parsed = parseJsonValue(value);\n if (!Array.isArray(parsed)) return [];\n return parsed.map(chunk => {\n const item = chunk as Partial<BufferedObservationChunk>;\n return {\n id: String(item.id ?? `ombuf-${randomUUID()}`),\n cycleId: String(item.cycleId ?? ''),\n observations: String(item.observations ?? ''),\n tokenCount: Math.round(numberOrZero(item.tokenCount)),\n messageIds: Array.isArray(item.messageIds) ? item.messageIds.map(id => String(id)) : [],\n messageTokens: Math.round(numberOrZero(item.messageTokens)),\n lastObservedAt: item.lastObservedAt ? toDate(item.lastObservedAt as Date | string) : new Date(),\n createdAt: item.createdAt ? toDate(item.createdAt as Date | string) : new Date(),\n suggestedContinuation: item.suggestedContinuation,\n currentTask: item.currentTask,\n threadTitle: item.threadTitle,\n extractedValues: item.extractedValues,\n extractionFailures: item.extractionFailures,\n };\n });\n}\n\nasync function semanticRecallVectorTables(\n ctx: Pick<MemoryContext, 'schemaName' | 'vectorRegistryTableName'>,\n client: OracleTxClient,\n): Promise<Array<{ tableName: string }>> {\n try {\n return await client.manyOrNone<{ tableName: string }>(\n `\n SELECT table_name AS \"tableName\"\n FROM ${qualifyName(ctx.vectorRegistryTableName, ctx.schemaName)}\n WHERE LOWER(index_name) = 'memory_messages'\n OR LOWER(index_name) LIKE 'memory_messages\\\\_%' ESCAPE '\\\\'\n OR LOWER(index_name) LIKE 'mastra_memory\\\\_%' ESCAPE '\\\\'`,\n );\n } catch (error) {\n if (isOracleErrorCode(error, [-942])) return [];\n throw error;\n }\n}\n\n// Semantic recall stores embeddings outside the threads/messages tables, so\n// deleting a thread or a set of messages must also sweep those vector rows.\nexport async function deleteSemanticRecallVectors(\n ctx: Pick<MemoryContext, 'schemaName' | 'vectorRegistryTableName'>,\n client: OracleTxClient,\n threadId: string,\n): Promise<void> {\n const vectorTables = await semanticRecallVectorTables(ctx, client);\n\n for (const { tableName } of vectorTables) {\n try {\n await client.none(\n `DELETE FROM ${qualifyName(tableName, ctx.schemaName)}\n WHERE JSON_VALUE(metadata, '$.thread_id' RETURNING VARCHAR2(512) NULL ON ERROR) = :threadId`,\n { threadId },\n );\n } catch (error) {\n if (!isOracleErrorCode(error, [-942])) throw error;\n }\n }\n}\n\nexport async function deleteSemanticRecallVectorsByMessageIds(\n ctx: Pick<MemoryContext, 'schemaName' | 'vectorRegistryTableName'>,\n client: OracleTxClient,\n messageIds: readonly string[],\n): Promise<void> {\n if (messageIds.length === 0) return;\n\n const vectorTables = await semanticRecallVectorTables(ctx, client);\n const { sql, binds } = inClause('semanticMessageId', messageIds);\n\n for (const { tableName } of vectorTables) {\n try {\n await client.none(\n `DELETE FROM ${qualifyName(tableName, ctx.schemaName)}\n WHERE JSON_VALUE(metadata, '$.message_id' RETURNING VARCHAR2(512) NULL ON ERROR) IN (${sql})`,\n binds,\n );\n } catch (error) {\n if (!isOracleErrorCode(error, [-942])) throw error;\n }\n }\n}\n","import { TABLE_MESSAGES, TABLE_OBSERVATIONAL_MEMORY, TABLE_RESOURCES, TABLE_THREADS } from '@mastra/core/storage';\nimport type { Connection } from 'oracledb';\n\nimport { executeDdl, asBindParameters, executeOptions, rows } from '../../../shared/connection';\nimport type { ObjectRow } from '../../../shared/connection';\nimport { indexNameForTable } from '../../../vector/identifiers';\nimport { createOracleIndex } from '../../db';\nimport type { OracleCreateIndexOptions } from '../../db';\nimport { table } from './utils';\nimport type { MemoryContext } from './utils';\n\n// DDL and quoted-column identifiers for every table the memory domain owns\n// (threads, messages, resources, observational memory). Column name constants\n// live here so threads.ts/messages.ts/resources.ts/observational*.ts all agree\n// on the physical schema.\nexport const THREAD_RESOURCE_ID = '\"resourceId\"';\nexport const THREAD_CREATED_AT = '\"createdAt\"';\nexport const THREAD_UPDATED_AT = '\"updatedAt\"';\nexport const MESSAGE_RESOURCE_ID = '\"resourceId\"';\nexport const MESSAGE_CREATED_AT = '\"createdAt\"';\nexport const RESOURCE_WORKING_MEMORY = '\"workingMemory\"';\nexport const RESOURCE_CREATED_AT = '\"createdAt\"';\nexport const RESOURCE_UPDATED_AT = '\"updatedAt\"';\nexport const OM_LOOKUP_KEY = '\"lookupKey\"';\nexport const OM_SCOPE = '\"scope\"';\nexport const OM_RESOURCE_ID = '\"resourceId\"';\nexport const OM_THREAD_ID = '\"threadId\"';\nexport const OM_ACTIVE_OBSERVATIONS = '\"activeObservations\"';\nexport const OM_ACTIVE_OBSERVATIONS_PENDING_UPDATE = '\"activeObservationsPendingUpdate\"';\nexport const OM_ORIGIN_TYPE = '\"originType\"';\nexport const OM_GENERATION_COUNT = '\"generationCount\"';\nexport const OM_LAST_OBSERVED_AT = '\"lastObservedAt\"';\nexport const OM_LAST_REFLECTION_AT = '\"lastReflectionAt\"';\nexport const OM_PENDING_MESSAGE_TOKENS = '\"pendingMessageTokens\"';\nexport const OM_TOTAL_TOKENS_OBSERVED = '\"totalTokensObserved\"';\nexport const OM_OBSERVATION_TOKEN_COUNT = '\"observationTokenCount\"';\nexport const OM_IS_OBSERVING = '\"isObserving\"';\nexport const OM_IS_REFLECTING = '\"isReflecting\"';\nexport const OM_OBSERVED_MESSAGE_IDS = '\"observedMessageIds\"';\nexport const OM_OBSERVED_TIMEZONE = '\"observedTimezone\"';\nexport const OM_BUFFERED_OBSERVATIONS = '\"bufferedObservations\"';\nexport const OM_BUFFERED_OBSERVATION_TOKENS = '\"bufferedObservationTokens\"';\nexport const OM_BUFFERED_MESSAGE_IDS = '\"bufferedMessageIds\"';\nexport const OM_BUFFERED_REFLECTION = '\"bufferedReflection\"';\nexport const OM_BUFFERED_REFLECTION_TOKENS = '\"bufferedReflectionTokens\"';\nexport const OM_BUFFERED_REFLECTION_INPUT_TOKENS = '\"bufferedReflectionInputTokens\"';\nexport const OM_REFLECTED_OBSERVATION_LINE_COUNT = '\"reflectedObservationLineCount\"';\nexport const OM_BUFFERED_OBSERVATION_CHUNKS = '\"bufferedObservationChunks\"';\nexport const OM_IS_BUFFERING_OBSERVATION = '\"isBufferingObservation\"';\nexport const OM_IS_BUFFERING_REFLECTION = '\"isBufferingReflection\"';\nexport const OM_LAST_BUFFERED_AT_TOKENS = '\"lastBufferedAtTokens\"';\nexport const OM_LAST_BUFFERED_AT_TIME = '\"lastBufferedAtTime\"';\nexport const OM_CREATED_AT = '\"createdAt\"';\nexport const OM_UPDATED_AT = '\"updatedAt\"';\n\nexport async function initMemorySchema(ctx: MemoryContext): Promise<void> {\n await ctx.db.withConnection(async connection => {\n // Use one connection for table, column, and index setup so schema-qualified\n // deployments see a consistent Oracle session throughout initialization.\n await createTables(ctx, connection);\n await createIndexes(ctx, connection);\n });\n}\n\nexport async function clearAllMemoryTables(ctx: MemoryContext): Promise<void> {\n await ctx.db.tx(async client => {\n await client.none(`DELETE FROM ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)}`);\n await client.none(`DELETE FROM ${table(ctx, TABLE_MESSAGES)}`);\n await client.none(`DELETE FROM ${table(ctx, TABLE_THREADS)}`);\n await client.none(`DELETE FROM ${table(ctx, TABLE_RESOURCES)}`);\n });\n}\n\nasync function createTables(ctx: MemoryContext, connection: Connection): Promise<void> {\n // Memory table DDL is kept manual instead of relying only on TABLE_SCHEMAS\n // because Oracle-specific CLOB/JSON choices are central to this provider.\n await executeDdl(\n connection,\n `\n CREATE TABLE ${table(ctx, TABLE_RESOURCES)} (\n id VARCHAR2(512) PRIMARY KEY,\n ${RESOURCE_WORKING_MEMORY} CLOB,\n metadata JSON,\n ${RESOURCE_CREATED_AT} TIMESTAMP WITH TIME ZONE NOT NULL,\n ${RESOURCE_UPDATED_AT} TIMESTAMP WITH TIME ZONE NOT NULL\n )`,\n [-955],\n );\n\n await executeDdl(\n connection,\n `\n CREATE TABLE ${table(ctx, TABLE_THREADS)} (\n id VARCHAR2(512) PRIMARY KEY,\n ${THREAD_RESOURCE_ID} VARCHAR2(512) NOT NULL,\n title VARCHAR2(1024),\n metadata JSON,\n ${THREAD_CREATED_AT} TIMESTAMP WITH TIME ZONE NOT NULL,\n ${THREAD_UPDATED_AT} TIMESTAMP WITH TIME ZONE NOT NULL\n )`,\n [-955],\n );\n\n await relaxThreadTitleNullability(ctx, connection);\n\n await executeDdl(\n connection,\n `\n CREATE TABLE ${table(ctx, TABLE_MESSAGES)} (\n id VARCHAR2(512) PRIMARY KEY,\n thread_id VARCHAR2(512) NOT NULL,\n content CLOB NOT NULL,\n role VARCHAR2(64) NOT NULL,\n type VARCHAR2(64) NOT NULL,\n ${MESSAGE_CREATED_AT} TIMESTAMP WITH TIME ZONE NOT NULL,\n ${MESSAGE_RESOURCE_ID} VARCHAR2(512)\n )`,\n [-955],\n );\n await executeDdl(\n connection,\n `ALTER TABLE ${table(ctx, TABLE_MESSAGES)} ADD (${MESSAGE_RESOURCE_ID} VARCHAR2(512))`,\n [-1430],\n );\n\n await executeDdl(\n connection,\n `\n CREATE TABLE ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)} (\n id VARCHAR2(512) PRIMARY KEY,\n ${OM_LOOKUP_KEY} VARCHAR2(1024) NOT NULL,\n ${OM_SCOPE} VARCHAR2(32) NOT NULL,\n ${OM_RESOURCE_ID} VARCHAR2(512) NOT NULL,\n ${OM_THREAD_ID} VARCHAR2(512),\n ${OM_ACTIVE_OBSERVATIONS} CLOB,\n ${OM_ACTIVE_OBSERVATIONS_PENDING_UPDATE} CLOB,\n ${OM_ORIGIN_TYPE} VARCHAR2(32) NOT NULL,\n config JSON NOT NULL,\n ${OM_GENERATION_COUNT} NUMBER(10) DEFAULT 0 NOT NULL,\n ${OM_LAST_OBSERVED_AT} TIMESTAMP WITH TIME ZONE,\n ${OM_LAST_REFLECTION_AT} TIMESTAMP WITH TIME ZONE,\n ${OM_PENDING_MESSAGE_TOKENS} NUMBER(20) DEFAULT 0 NOT NULL,\n ${OM_TOTAL_TOKENS_OBSERVED} NUMBER(20) DEFAULT 0 NOT NULL,\n ${OM_OBSERVATION_TOKEN_COUNT} NUMBER(20) DEFAULT 0 NOT NULL,\n ${OM_IS_OBSERVING} NUMBER(1) DEFAULT 0 NOT NULL,\n ${OM_IS_REFLECTING} NUMBER(1) DEFAULT 0 NOT NULL,\n ${OM_OBSERVED_MESSAGE_IDS} JSON,\n ${OM_OBSERVED_TIMEZONE} VARCHAR2(128),\n ${OM_BUFFERED_OBSERVATIONS} CLOB,\n ${OM_BUFFERED_OBSERVATION_TOKENS} NUMBER(20),\n ${OM_BUFFERED_MESSAGE_IDS} JSON,\n ${OM_BUFFERED_REFLECTION} CLOB,\n ${OM_BUFFERED_REFLECTION_TOKENS} NUMBER(20),\n ${OM_BUFFERED_REFLECTION_INPUT_TOKENS} NUMBER(20),\n ${OM_REFLECTED_OBSERVATION_LINE_COUNT} NUMBER(20),\n ${OM_BUFFERED_OBSERVATION_CHUNKS} JSON,\n ${OM_IS_BUFFERING_OBSERVATION} NUMBER(1) DEFAULT 0 NOT NULL,\n ${OM_IS_BUFFERING_REFLECTION} NUMBER(1) DEFAULT 0 NOT NULL,\n ${OM_LAST_BUFFERED_AT_TOKENS} NUMBER(20) DEFAULT 0 NOT NULL,\n ${OM_LAST_BUFFERED_AT_TIME} TIMESTAMP WITH TIME ZONE,\n metadata JSON,\n ${OM_CREATED_AT} TIMESTAMP WITH TIME ZONE NOT NULL,\n ${OM_UPDATED_AT} TIMESTAMP WITH TIME ZONE NOT NULL\n )`,\n [-955],\n );\n\n await ensureObservationalMemoryColumns(ctx, connection);\n await relaxObservationalMemoryNullability(ctx, connection);\n}\n\nasync function ensureObservationalMemoryColumns(ctx: MemoryContext, connection: Connection): Promise<void> {\n // Observational memory evolved after basic memory storage. This additive\n // pass lets older Oracle schemas upgrade in place without dropping data.\n const columns = [\n { name: OM_LOOKUP_KEY, type: 'VARCHAR2(1024)' },\n { name: OM_SCOPE, type: 'VARCHAR2(32)' },\n { name: OM_RESOURCE_ID, type: 'VARCHAR2(512)' },\n { name: OM_THREAD_ID, type: 'VARCHAR2(512)' },\n { name: OM_ACTIVE_OBSERVATIONS, type: 'CLOB' },\n { name: OM_ACTIVE_OBSERVATIONS_PENDING_UPDATE, type: 'CLOB' },\n { name: OM_ORIGIN_TYPE, type: 'VARCHAR2(32)' },\n { name: 'config', type: 'JSON' },\n { name: OM_GENERATION_COUNT, type: 'NUMBER(10) DEFAULT 0' },\n { name: OM_LAST_OBSERVED_AT, type: 'TIMESTAMP WITH TIME ZONE' },\n { name: OM_LAST_REFLECTION_AT, type: 'TIMESTAMP WITH TIME ZONE' },\n { name: OM_PENDING_MESSAGE_TOKENS, type: 'NUMBER(20) DEFAULT 0' },\n { name: OM_TOTAL_TOKENS_OBSERVED, type: 'NUMBER(20) DEFAULT 0' },\n { name: OM_OBSERVATION_TOKEN_COUNT, type: 'NUMBER(20) DEFAULT 0' },\n { name: OM_IS_OBSERVING, type: 'NUMBER(1) DEFAULT 0' },\n { name: OM_IS_REFLECTING, type: 'NUMBER(1) DEFAULT 0' },\n { name: OM_OBSERVED_MESSAGE_IDS, type: 'JSON' },\n { name: OM_OBSERVED_TIMEZONE, type: 'VARCHAR2(128)' },\n { name: OM_BUFFERED_OBSERVATIONS, type: 'CLOB' },\n { name: OM_BUFFERED_OBSERVATION_TOKENS, type: 'NUMBER(20)' },\n { name: OM_BUFFERED_MESSAGE_IDS, type: 'JSON' },\n { name: OM_BUFFERED_REFLECTION, type: 'CLOB' },\n { name: OM_BUFFERED_REFLECTION_TOKENS, type: 'NUMBER(20)' },\n { name: OM_BUFFERED_REFLECTION_INPUT_TOKENS, type: 'NUMBER(20)' },\n { name: OM_REFLECTED_OBSERVATION_LINE_COUNT, type: 'NUMBER(20)' },\n { name: OM_BUFFERED_OBSERVATION_CHUNKS, type: 'JSON' },\n { name: OM_IS_BUFFERING_OBSERVATION, type: 'NUMBER(1) DEFAULT 0' },\n { name: OM_IS_BUFFERING_REFLECTION, type: 'NUMBER(1) DEFAULT 0' },\n { name: OM_LAST_BUFFERED_AT_TOKENS, type: 'NUMBER(20) DEFAULT 0' },\n { name: OM_LAST_BUFFERED_AT_TIME, type: 'TIMESTAMP WITH TIME ZONE' },\n { name: 'metadata', type: 'JSON' },\n { name: OM_CREATED_AT, type: 'TIMESTAMP WITH TIME ZONE' },\n { name: OM_UPDATED_AT, type: 'TIMESTAMP WITH TIME ZONE' },\n ];\n\n for (const column of columns) {\n await executeDdl(\n connection,\n `ALTER TABLE ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)} ADD (${column.name} ${column.type})`,\n [-1430],\n );\n }\n}\n\nasync function relaxThreadTitleNullability(ctx: MemoryContext, connection: Connection): Promise<void> {\n const tableName = TABLE_THREADS.toUpperCase();\n const result = ctx.schemaName\n ? await connection.execute<ObjectRow>(\n `SELECT nullable AS \"nullable\" FROM all_tab_columns WHERE owner = :owner AND table_name = :tableName AND column_name = 'TITLE'`,\n asBindParameters({ owner: ctx.schemaName, tableName }),\n executeOptions(),\n )\n : await connection.execute<ObjectRow>(\n `SELECT nullable AS \"nullable\" FROM user_tab_columns WHERE table_name = :tableName AND column_name = 'TITLE'`,\n asBindParameters({ tableName }),\n executeOptions(),\n );\n\n if (String(rows(result)[0]?.nullable ?? 'Y').toUpperCase() !== 'N') return;\n\n await executeDdl(connection, `ALTER TABLE ${table(ctx, TABLE_THREADS)} MODIFY (title NULL)`, [-1451, -54]);\n}\n\nasync function relaxObservationalMemoryNullability(ctx: MemoryContext, connection: Connection): Promise<void> {\n await executeDdl(\n connection,\n `ALTER TABLE ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)} MODIFY (${OM_ACTIVE_OBSERVATIONS} NULL)`,\n [-1451, -54],\n );\n}\n\nasync function createIndexes(ctx: MemoryContext, connection: Connection): Promise<void> {\n if (!ctx.skipDefaultIndexes) {\n for (const index of defaultIndexes(ctx)) {\n try {\n await createOracleIndex(connection, index, ctx.schemaName);\n } catch (error) {\n ctx.logger?.warn?.(`Failed to create Oracle default index ${index.name}:`, error);\n }\n }\n }\n\n for (const index of ctx.indexes) {\n await createOracleIndex(connection, index, ctx.schemaName);\n }\n}\n\nfunction indexName(name: string): string {\n return indexNameForTable(name, 'IDX');\n}\n\nfunction defaultIndexes(_ctx: MemoryContext): OracleCreateIndexOptions[] {\n return [\n {\n name: indexName('MASTRA_THREADS_RESOURCE_CREATED_IDX'),\n table: TABLE_THREADS,\n columns: ['resourceId', 'createdAt'],\n },\n {\n name: indexName('MASTRA_MESSAGES_THREAD_CREATED_IDX'),\n table: TABLE_MESSAGES,\n columns: ['thread_id', 'createdAt'],\n },\n {\n name: indexName('MASTRA_MESSAGES_RESOURCE_CREATED_IDX'),\n table: TABLE_MESSAGES,\n columns: ['resourceId', 'createdAt'],\n },\n {\n name: indexName('MASTRA_OM_LOOKUP_GENERATION_IDX'),\n table: TABLE_OBSERVATIONAL_MEMORY,\n columns: ['lookupKey', 'generationCount'],\n },\n {\n name: indexName('MASTRA_OM_RESOURCE_CREATED_IDX'),\n table: TABLE_OBSERVATIONAL_MEMORY,\n columns: ['resourceId', 'createdAt'],\n },\n {\n name: indexName('MASTRA_OM_THREAD_CREATED_IDX'),\n table: TABLE_OBSERVATIONAL_MEMORY,\n columns: ['threadId', 'createdAt'],\n },\n ];\n}\n","import { MessageList } from '@mastra/core/agent';\nimport type { MastraMessageContentV2 } from '@mastra/core/agent';\nimport { ErrorCategory, MastraError } from '@mastra/core/error';\nimport type { MastraDBMessage, MastraMessageV1 } from '@mastra/core/memory';\nimport {\n calculatePagination,\n normalizePerPage,\n storageMessageMatchesMetadataFilter,\n TABLE_MESSAGES,\n TABLE_THREADS,\n validateStorageMetadataFilter,\n} from '@mastra/core/storage';\nimport type {\n StorageListMessagesByResourceIdInput,\n StorageListMessagesInput,\n StorageListMessagesOutput,\n} from '@mastra/core/storage';\nimport oracledb from 'oracledb';\nimport type { Connection } from 'oracledb';\n\nimport { asBindParameters, clobBind, executeOptions, rows } from '../../../shared/connection';\nimport type { ObjectRow } from '../../../shared/connection';\nimport { quoteIdentifier } from '../../../vector/identifiers';\nimport type { OracleTxClient } from '../../db';\nimport { toDate } from '../../domain-utils';\nimport { MESSAGE_CREATED_AT, MESSAGE_RESOURCE_ID, THREAD_UPDATED_AT } from './schema';\nimport {\n chunkValues,\n deleteSemanticRecallVectorsByMessageIds,\n inClause,\n paginationClause,\n storageError,\n table,\n} from './utils';\nimport type { MemoryContext } from './utils';\n\n// Message CRUD, pagination/include windows, and batched saves. Deleting\n// messages also sweeps their semantic-recall vectors (see utils.ts).\nconst MAX_MESSAGE_STRING_BIND_BYTES = 3900;\n\ntype MessageRow = {\n id: string;\n content: unknown;\n role: string;\n type?: string;\n createdAt: Date | string;\n threadId: string;\n resourceId?: string | null;\n};\n\ntype MessageSaveBind = {\n id: string;\n threadId: string;\n content: string;\n role: string;\n type: string;\n createdAt: Date;\n resourceId: string;\n};\n\nexport async function listMessagesById(\n ctx: MemoryContext,\n { messageIds }: { messageIds: string[] },\n): Promise<{ messages: MastraDBMessage[] }> {\n if (messageIds.length === 0) return { messages: [] };\n\n try {\n return await ctx.db.withConnection(async connection => {\n const messageRows: MastraDBMessage[] = [];\n for (const [chunkIndex, chunk] of chunkValues(messageIds).entries()) {\n // Large include lists can exceed Oracle's bind limits. Chunking keeps\n // semantic recall and message include paths safe for long histories.\n const { sql, binds } = inClause(`messageId${chunkIndex}`, chunk);\n const result = await connection.execute<ObjectRow>(\n `${messageSelect()} FROM ${table(ctx, TABLE_MESSAGES)} WHERE id IN (${sql}) ORDER BY ${MESSAGE_CREATED_AT} DESC, id DESC`,\n asBindParameters(binds),\n executeOptions(),\n );\n messageRows.push(...rows(result).map(row => parseMessage(row as MessageRow)));\n }\n const list = new MessageList().add(\n sortMessages(messageRows, 'createdAt', 'DESC') as (MastraMessageV1 | MastraDBMessage)[],\n 'memory',\n );\n return { messages: list.get.all.db() };\n });\n } catch (error) {\n throw storageError('LIST_MESSAGES_BY_ID', 'FAILED', { messageIds: messageIds.join(',') }, error);\n }\n}\n\nexport async function listMessages(\n ctx: MemoryContext,\n args: StorageListMessagesInput,\n): Promise<StorageListMessagesOutput> {\n const { threadId, resourceId, include, filter, perPage: perPageInput, page = 0, orderBy } = args;\n const threadIds = (Array.isArray(threadId) ? threadId : [threadId]).filter(\n (id): id is string => typeof id === 'string' && id.trim().length > 0,\n );\n\n if (threadIds.length === 0) {\n throw storageError(\n 'LIST_MESSAGES',\n 'INVALID_THREAD_ID',\n { threadId: String(threadId) },\n new Error('threadId must be a non-empty string or array of non-empty strings'),\n ErrorCategory.USER,\n );\n }\n\n return listMessagesWithWhere(ctx, {\n operation: 'LIST_MESSAGES',\n baseFilter: { threadIds, resourceId },\n include,\n filter,\n perPageInput,\n page,\n orderBy,\n });\n}\n\nexport async function listMessagesByResourceId(\n ctx: MemoryContext,\n args: StorageListMessagesByResourceIdInput,\n): Promise<StorageListMessagesOutput> {\n const { resourceId, include, filter, perPage: perPageInput, page = 0, orderBy } = args;\n if (!resourceId || !resourceId.trim()) {\n throw storageError(\n 'LIST_MESSAGES_BY_RESOURCE_ID',\n 'INVALID_QUERY',\n { resourceId: resourceId ?? '' },\n new Error('resourceId is required'),\n ErrorCategory.USER,\n );\n }\n\n return listMessagesWithWhere(ctx, {\n operation: 'LIST_MESSAGES_BY_RESOURCE_ID',\n baseFilter: { resourceId },\n include,\n filter,\n perPageInput,\n page,\n orderBy,\n });\n}\n\nexport async function saveMessages(\n ctx: MemoryContext,\n { messages }: { messages: MastraDBMessage[] },\n): Promise<{ messages: MastraDBMessage[] }> {\n if (messages.length === 0) return { messages: [] };\n\n const threadIds = new Set<string>();\n\n try {\n for (const message of messages) {\n if (!message.threadId || !message.resourceId) {\n throw storageError(\n 'SAVE_MESSAGES',\n 'FAILED',\n { messageId: message.id },\n new Error('Each message must include threadId and resourceId'),\n ErrorCategory.USER,\n );\n }\n threadIds.add(message.threadId);\n }\n\n for (const threadId of threadIds) {\n const thread = await ctx.getThreadById({ threadId });\n if (!thread) {\n throw storageError(\n 'SAVE_MESSAGES',\n 'FAILED',\n { threadId },\n new Error(`Thread ${threadId} not found`),\n ErrorCategory.USER,\n );\n }\n }\n\n await ctx.db.tx(async client => {\n await insertMessageBatch(ctx, client, messages);\n });\n\n const list = new MessageList().add(messages as (MastraMessageV1 | MastraDBMessage)[], 'memory');\n return { messages: list.get.all.db() };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError('SAVE_MESSAGES', 'FAILED', { threadIds: Array.from(threadIds).join(',') }, error);\n }\n}\n\n/**\n * Batch-inserts/merges message rows and touches their threads' updatedAt\n * against the given transactional client. Extracted out of `saveMessages` so\n * `cloneThread` (memory/index.ts) can run this in the SAME transaction as the\n * destination thread MERGE — a failure here must not leave an orphaned,\n * message-less cloned thread committed. Does not verify that the owning\n * thread exists; `saveMessages` checks that before opening its transaction.\n */\nexport async function insertMessageBatch(\n ctx: MemoryContext,\n client: OracleTxClient,\n messages: MastraDBMessage[],\n): Promise<void> {\n const threadIds = new Set<string>();\n const stringExecuteManyOptions: oracledb.ExecuteManyOptions = {\n bindDefs: {\n id: { type: oracledb.STRING, maxSize: 512 },\n threadId: { type: oracledb.STRING, maxSize: 512 },\n content: { type: oracledb.STRING, maxSize: 4000 },\n role: { type: oracledb.STRING, maxSize: 512 },\n type: { type: oracledb.STRING, maxSize: 64 },\n createdAt: { type: oracledb.DB_TYPE_TIMESTAMP_TZ },\n resourceId: { type: oracledb.STRING, maxSize: 512 },\n },\n };\n const clobExecuteManyOptions: oracledb.ExecuteManyOptions = {\n bindDefs: {\n ...stringExecuteManyOptions.bindDefs,\n content: { type: oracledb.DB_TYPE_CLOB },\n },\n };\n const stringMessageBinds: MessageSaveBind[] = [];\n const clobMessageBinds: MessageSaveBind[] = [];\n\n for (const message of messages) {\n const messageThreadId = message.threadId;\n const messageResourceId = message.resourceId;\n if (!messageThreadId || !messageResourceId) {\n throw new Error('Each message must include threadId and resourceId');\n }\n threadIds.add(messageThreadId);\n const content = serializeContent(message.content);\n const bind = {\n id: message.id,\n threadId: messageThreadId,\n content,\n role: message.role,\n type: message.type ?? 'v2',\n createdAt: message.createdAt ?? new Date(),\n resourceId: messageResourceId,\n };\n if (Buffer.byteLength(content, 'utf8') <= MAX_MESSAGE_STRING_BIND_BYTES) {\n stringMessageBinds.push(bind);\n } else {\n clobMessageBinds.push(bind);\n }\n }\n\n for (const chunk of chunkValues(stringMessageBinds, ctx.messageBatchSize)) {\n await client.executeMany(messageMergeSql(ctx), chunk, stringExecuteManyOptions);\n }\n // Large or multipart messages still use CLOB binds; small messages take\n // the cheaper string path above, which avoids CLOB allocation overhead.\n for (const chunk of chunkValues(clobMessageBinds, ctx.messageBatchSize)) {\n await client.executeMany(messageMergeSql(ctx), chunk, clobExecuteManyOptions);\n }\n\n const updatedAt = new Date();\n await client.executeMany(\n `UPDATE ${table(ctx, TABLE_THREADS)} SET ${THREAD_UPDATED_AT} = :updatedAt WHERE id = :threadId`,\n Array.from(threadIds, messageThreadId => ({ updatedAt, threadId: messageThreadId })),\n );\n}\n\nexport async function updateMessages(\n ctx: MemoryContext,\n {\n messages,\n }: {\n messages: (Partial<Omit<MastraDBMessage, 'createdAt'>> & {\n id: string;\n content?: { metadata?: MastraMessageContentV2['metadata']; content?: MastraMessageContentV2['content'] };\n })[];\n },\n): Promise<MastraDBMessage[]> {\n if (messages.length === 0) return [];\n\n const messageIds = messages.map(message => message.id);\n const existingMessages = (await ctx.listMessagesById({ messageIds })).messages;\n if (existingMessages.length === 0) return [];\n\n const existingById = new Map(existingMessages.map(message => [message.id, message]));\n const threadIdsToUpdate = new Set<string>();\n\n try {\n await ctx.db.tx(async client => {\n // Message ids whose content/threadId/resourceId actually changed. Those\n // fields feed semantic-recall embeddings/metadata, so the vectors for\n // these ids are stale once the update below commits.\n const semanticRecallMessageIds: string[] = [];\n\n for (const updatePayload of messages) {\n const existing = existingById.get(updatePayload.id);\n if (!existing) continue;\n\n const { id, ...fieldsToUpdate } = updatePayload;\n if (Object.keys(fieldsToUpdate).length === 0) continue;\n\n const setParts: string[] = [];\n const binds: Record<string, unknown> = { id };\n let invalidatesSemanticRecallVectors = false;\n\n threadIdsToUpdate.add(existing.threadId!);\n if (fieldsToUpdate.threadId && fieldsToUpdate.threadId !== existing.threadId) {\n threadIdsToUpdate.add(fieldsToUpdate.threadId);\n }\n\n if (fieldsToUpdate.content) {\n setParts.push('content = :content');\n // Partial content updates merge into the stored V2 envelope instead\n // of overwriting metadata/content subfields independently.\n binds.content = clobBind(serializeContent(mergeMessageContent(existing.content, fieldsToUpdate.content)));\n invalidatesSemanticRecallVectors = true;\n }\n if (fieldsToUpdate.threadId) {\n setParts.push('thread_id = :threadId');\n binds.threadId = fieldsToUpdate.threadId;\n invalidatesSemanticRecallVectors = true;\n }\n if (fieldsToUpdate.resourceId) {\n setParts.push(`${MESSAGE_RESOURCE_ID} = :resourceId`);\n binds.resourceId = fieldsToUpdate.resourceId;\n invalidatesSemanticRecallVectors = true;\n }\n if (fieldsToUpdate.role) {\n setParts.push('role = :role');\n binds.role = fieldsToUpdate.role;\n }\n if (fieldsToUpdate.type) {\n setParts.push('type = :type');\n binds.type = fieldsToUpdate.type;\n }\n\n if (setParts.length > 0) {\n await client.none(`UPDATE ${table(ctx, TABLE_MESSAGES)} SET ${setParts.join(', ')} WHERE id = :id`, binds);\n }\n\n if (invalidatesSemanticRecallVectors) {\n semanticRecallMessageIds.push(id);\n }\n }\n\n if (semanticRecallMessageIds.length > 0) {\n // Delete stale semantic-recall vectors in the same transaction as the\n // message update, so a subsequent retrieval never surfaces embeddings\n // for content/thread/resource state that no longer exists.\n await deleteSemanticRecallVectorsByMessageIds(ctx, client, semanticRecallMessageIds);\n }\n\n const updatedAt = new Date();\n await client.executeMany(\n `UPDATE ${table(ctx, TABLE_THREADS)} SET ${THREAD_UPDATED_AT} = :updatedAt WHERE id = :threadId`,\n Array.from(threadIdsToUpdate, updatedThreadId => ({ updatedAt, threadId: updatedThreadId })),\n );\n });\n\n return (await ctx.listMessagesById({ messageIds })).messages;\n } catch (error) {\n throw storageError('UPDATE_MESSAGES', 'FAILED', { messageIds: messageIds.join(',') }, error);\n }\n}\n\nexport async function deleteMessages(ctx: MemoryContext, messageIds: string[]): Promise<void> {\n if (!messageIds.length) return;\n\n try {\n await ctx.db.tx(async client => {\n const threadIds = new Set<string>();\n\n for (const [chunkIndex, chunk] of chunkValues(messageIds).entries()) {\n const { sql, binds } = inClause(`messageId${chunkIndex}`, chunk);\n const threadRows = await client.manyOrNone<ObjectRow>(\n `SELECT DISTINCT thread_id AS \"threadId\" FROM ${table(ctx, TABLE_MESSAGES)} WHERE id IN (${sql})`,\n binds,\n );\n for (const row of threadRows) {\n if (row.threadId) threadIds.add(String(row.threadId));\n }\n\n await client.none(`DELETE FROM ${table(ctx, TABLE_MESSAGES)} WHERE id IN (${sql})`, binds);\n await deleteSemanticRecallVectorsByMessageIds(ctx, client, chunk);\n }\n\n const updatedAt = new Date();\n await client.executeMany(\n `UPDATE ${table(ctx, TABLE_THREADS)} SET ${THREAD_UPDATED_AT} = :updatedAt WHERE id = :threadId`,\n Array.from(threadIds, updatedThreadId => ({ updatedAt, threadId: updatedThreadId })),\n );\n });\n } catch (error) {\n throw storageError('DELETE_MESSAGES', 'FAILED', { messageIds: messageIds.join(',') }, error);\n }\n}\n\nasync function listMessagesWithWhere(\n ctx: MemoryContext,\n {\n operation,\n baseFilter,\n include,\n filter,\n perPageInput,\n page,\n orderBy,\n }: {\n operation: string;\n baseFilter: { threadIds?: string[]; resourceId?: string };\n include?: StorageListMessagesInput['include'];\n filter?: StorageListMessagesInput['filter'];\n perPageInput?: number | false;\n page: number;\n orderBy?: StorageListMessagesInput['orderBy'];\n },\n): Promise<StorageListMessagesOutput> {\n const metadataFilter = validateStorageMetadataFilter(filter?.metadata);\n\n try {\n ctx.validatePaginationInput(page, perPageInput ?? 40);\n } catch (error) {\n throw storageError(operation, 'INVALID_PAGE', { page }, error, ErrorCategory.USER);\n }\n\n const perPage = normalizePerPage(perPageInput, 40);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n try {\n return await ctx.db.withConnection(async connection => {\n const { field, direction } = ctx.parseOrderBy(orderBy, 'ASC');\n const { whereClause, binds } = messageWhereClause(baseFilter, filter);\n\n if (perPage === 0 && (!include || include.length === 0)) {\n return { messages: [], total: 0, page, perPage: perPageForResponse, hasMore: false };\n }\n\n if (perPage === 0 && include && include.length > 0) {\n const includeMessages = await getIncludedMessages(ctx, connection, include, baseFilter.resourceId);\n const list = new MessageList().add(includeMessages as (MastraMessageV1 | MastraDBMessage)[], 'memory');\n return {\n messages: sortMessages(list.get.all.db(), field, direction),\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n let total: number;\n let messages: MastraDBMessage[];\n if (metadataFilter) {\n // Match the shared storage contract: metadata filtering happens before\n // pagination and uses strict scalar equality. Keeping the comparison in\n // the canonical core helper also avoids Oracle coercing JSON strings to\n // numbers when JSON_VALUE is asked to RETURN NUMBER.\n const result = await connection.execute<ObjectRow>(\n `${messageSelect()} FROM ${table(ctx, TABLE_MESSAGES)} ${whereClause} ORDER BY ${messageOrderColumn(field)} ${direction}, id ${direction}`,\n asBindParameters(binds),\n executeOptions(),\n );\n const filteredMessages = rows(result)\n .map(row => parseMessage(row as MessageRow))\n .filter(message => storageMessageMatchesMetadataFilter(message.content, metadataFilter));\n total = filteredMessages.length;\n messages =\n perPageInput === false ? filteredMessages : filteredMessages.slice(offset, offset + Math.max(0, perPage));\n } else {\n const countResult = await connection.execute<ObjectRow>(\n `SELECT COUNT(*) AS \"count\" FROM ${table(ctx, TABLE_MESSAGES)} ${whereClause}`,\n asBindParameters(binds),\n executeOptions(),\n );\n total = Number(rows(countResult)[0]?.count ?? 0);\n\n const pagination = paginationClause(perPageInput, perPage, offset);\n const result = await connection.execute<ObjectRow>(\n `${messageSelect()} FROM ${table(ctx, TABLE_MESSAGES)} ${whereClause} ORDER BY ${messageOrderColumn(field)} ${direction}, id ${direction} ${pagination}`,\n asBindParameters(binds),\n executeOptions(),\n );\n messages = rows(result).map(row => parseMessage(row as MessageRow));\n }\n const primaryPageCount = messages.length;\n\n const messageIds = new Set(messages.map(message => message.id));\n if (include && include.length > 0) {\n // Included messages may fall outside the paged query. Merge by id,\n // then let MessageList normalize ordering and provider shape.\n const includeMessages = await getIncludedMessages(ctx, connection, include, baseFilter.resourceId);\n for (const message of includeMessages) {\n if (!messageIds.has(message.id)) {\n messages.push(message);\n messageIds.add(message.id);\n }\n }\n }\n\n const list = new MessageList().add(messages as (MastraMessageV1 | MastraDBMessage)[], 'memory');\n const finalMessages = sortMessages(list.get.all.db(), field, direction);\n const baseThreadIds = new Set(baseFilter.threadIds ?? []);\n const returnedThreadMessageIds = new Set(\n finalMessages\n .filter(\n message =>\n baseThreadIds.size === 0 || (message.threadId !== undefined && baseThreadIds.has(message.threadId)),\n )\n .map(message => message.id),\n );\n const hasMore = metadataFilter\n ? perPageInput !== false && offset + primaryPageCount < total\n : perPageInput !== false && returnedThreadMessageIds.size < total && offset + perPage < total;\n\n return {\n messages: finalMessages,\n total,\n page,\n perPage: perPageForResponse,\n hasMore,\n };\n });\n } catch (error) {\n throw storageError(operation, 'FAILED', { page }, error);\n }\n}\n\nasync function getIncludedMessages(\n ctx: MemoryContext,\n connection: Connection,\n include: NonNullable<StorageListMessagesInput['include']>,\n resourceId?: string,\n): Promise<MastraDBMessage[]> {\n const targetIds = include.map(item => item.id).filter(Boolean);\n if (targetIds.length === 0) return [];\n\n const { sql, binds } = inClause('targetId', targetIds);\n const resourceCondition = resourceId ? ` AND ${MESSAGE_RESOURCE_ID} = :includeResourceId` : '';\n const targetResult = await connection.execute<ObjectRow>(\n `SELECT id AS \"id\", thread_id AS \"threadId\", ${MESSAGE_CREATED_AT} AS \"createdAt\" FROM ${table(ctx, TABLE_MESSAGES)} WHERE id IN (${sql})${resourceCondition}`,\n asBindParameters({ ...binds, ...(resourceId ? { includeResourceId: resourceId } : {}) }),\n executeOptions(),\n );\n const targetMap = new Map(rows(targetResult).map(row => [String(row.id), row]));\n const collected: MastraDBMessage[] = [];\n const seen = new Set<string>();\n\n for (let index = 0; index < include.length; index += 1) {\n const item = include[index]!;\n const target = targetMap.get(item.id);\n if (!target) continue;\n\n const previousLimit = Math.max(0, item.withPreviousMessages ?? 0) + 1;\n const previousRows = await queryMessageWindow(ctx, connection, {\n threadId: String(target.threadId),\n createdAt: target.createdAt as Date | string,\n operator: '<=',\n direction: 'DESC',\n limit: previousLimit,\n bindPrefix: `prev${index}`,\n resourceId,\n });\n\n for (const message of previousRows.reverse()) {\n if (!seen.has(message.id)) {\n collected.push(message);\n seen.add(message.id);\n }\n }\n\n const nextLimit = Math.max(0, item.withNextMessages ?? 0);\n if (nextLimit > 0) {\n const nextRows = await queryMessageWindow(ctx, connection, {\n threadId: String(target.threadId),\n createdAt: target.createdAt as Date | string,\n operator: '>',\n direction: 'ASC',\n limit: nextLimit,\n bindPrefix: `next${index}`,\n resourceId,\n });\n for (const message of nextRows) {\n if (!seen.has(message.id)) {\n collected.push(message);\n seen.add(message.id);\n }\n }\n }\n }\n\n return collected;\n}\n\nasync function queryMessageWindow(\n ctx: MemoryContext,\n connection: Connection,\n params: {\n threadId: string;\n createdAt: Date | string;\n operator: '<=' | '>';\n direction: 'ASC' | 'DESC';\n limit: number;\n bindPrefix: string;\n resourceId?: string;\n },\n): Promise<MastraDBMessage[]> {\n const resourceCondition = params.resourceId ? ` AND ${MESSAGE_RESOURCE_ID} = :${params.bindPrefix}_resourceId` : '';\n const result = await connection.execute<ObjectRow>(\n `${messageSelect()} FROM ${table(ctx, TABLE_MESSAGES)} WHERE thread_id = :${params.bindPrefix}_threadId${resourceCondition} AND ${MESSAGE_CREATED_AT} ${params.operator} :${params.bindPrefix}_createdAt ORDER BY ${MESSAGE_CREATED_AT} ${params.direction}, id ${params.direction} FETCH FIRST ${params.limit} ROWS ONLY`,\n asBindParameters({\n [`${params.bindPrefix}_threadId`]: params.threadId,\n [`${params.bindPrefix}_createdAt`]: params.createdAt,\n ...(params.resourceId ? { [`${params.bindPrefix}_resourceId`]: params.resourceId } : {}),\n }),\n executeOptions(),\n );\n return rows(result).map(row => parseMessage(row as MessageRow));\n}\n\nfunction messageWhereClause(\n baseFilter: { threadIds?: string[]; resourceId?: string },\n filter?: StorageListMessagesInput['filter'],\n): { whereClause: string; binds: Record<string, unknown> } {\n const conditions: string[] = [];\n const binds: Record<string, unknown> = {};\n\n if (baseFilter.threadIds?.length) {\n const threadClause = inClause('threadId', baseFilter.threadIds);\n conditions.push(`thread_id IN (${threadClause.sql})`);\n Object.assign(binds, threadClause.binds);\n }\n if (baseFilter.resourceId) {\n conditions.push(`${MESSAGE_RESOURCE_ID} = :resourceId`);\n binds.resourceId = baseFilter.resourceId;\n }\n if (filter?.dateRange?.start) {\n conditions.push(`${MESSAGE_CREATED_AT} ${filter.dateRange.startExclusive ? '>' : '>='} :startDate`);\n binds.startDate = toDate(filter.dateRange.start);\n }\n if (filter?.dateRange?.end) {\n conditions.push(`${MESSAGE_CREATED_AT} ${filter.dateRange.endExclusive ? '<' : '<='} :endDate`);\n binds.endDate = toDate(filter.dateRange.end);\n }\n\n return { whereClause: conditions.length ? `WHERE ${conditions.join(' AND ')}` : '', binds };\n}\n\nfunction sortMessages(messages: MastraDBMessage[], field: string, direction: string): MastraDBMessage[] {\n return messages.sort((a, b) => {\n const aValue = field === 'createdAt' ? new Date(a.createdAt).getTime() : (a as Record<string, unknown>)[field];\n const bValue = field === 'createdAt' ? new Date(b.createdAt).getTime() : (b as Record<string, unknown>)[field];\n if (aValue === bValue) return a.id.localeCompare(b.id);\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\nfunction parseMessage(row: MessageRow): MastraDBMessage {\n return {\n id: String(row.id),\n content: parseContent(row.content),\n role: String(row.role) as MastraDBMessage['role'],\n createdAt: toDate(row.createdAt),\n threadId: String(row.threadId),\n resourceId: row.resourceId === null || row.resourceId === undefined ? undefined : String(row.resourceId),\n ...(row.type && row.type !== 'v2' ? { type: String(row.type) } : {}),\n } satisfies MastraDBMessage;\n}\n\nfunction messageSelect(): string {\n return `SELECT id AS \"id\", content AS \"content\", role AS \"role\", type AS \"type\", ${MESSAGE_CREATED_AT} AS \"createdAt\", thread_id AS \"threadId\", ${MESSAGE_RESOURCE_ID} AS \"resourceId\"`;\n}\n\nfunction messageMergeSql(ctx: MemoryContext): string {\n return `\n MERGE INTO ${table(ctx, TABLE_MESSAGES)} target\n USING (\n SELECT\n :id AS id,\n :threadId AS thread_id,\n :content AS content,\n :role AS role,\n :type AS type,\n :createdAt AS created_at,\n :resourceId AS resource_id\n FROM dual\n ) source\n ON (target.id = source.id)\n WHEN MATCHED THEN UPDATE SET\n target.thread_id = source.thread_id,\n target.content = source.content,\n target.role = source.role,\n target.type = source.type,\n target.${MESSAGE_RESOURCE_ID} = source.resource_id\n WHEN NOT MATCHED THEN INSERT (\n id,\n thread_id,\n content,\n role,\n type,\n ${MESSAGE_CREATED_AT},\n ${MESSAGE_RESOURCE_ID}\n ) VALUES (\n source.id,\n source.thread_id,\n source.content,\n source.role,\n source.type,\n source.created_at,\n source.resource_id\n )`;\n}\n\nfunction messageOrderColumn(field: string): string {\n return field === 'createdAt' ? MESSAGE_CREATED_AT : quoteIdentifier(field, 'message order field');\n}\n\nfunction serializeContent(content: MastraDBMessage['content']): string {\n return typeof content === 'string' ? content : JSON.stringify(content);\n}\n\nfunction parseContent(value: unknown): MastraDBMessage['content'] {\n if (typeof value !== 'string') return value as MastraDBMessage['content'];\n try {\n return JSON.parse(value) as MastraDBMessage['content'];\n } catch {\n return value as unknown as MastraDBMessage['content'];\n }\n}\n\nfunction mergeMessageContent(\n existingContent: MastraDBMessage['content'],\n updateContent: { metadata?: MastraMessageContentV2['metadata']; content?: MastraMessageContentV2['content'] },\n): MastraDBMessage['content'] {\n if (typeof existingContent !== 'object' || existingContent === null || Array.isArray(existingContent)) {\n return updateContent as MastraDBMessage['content'];\n }\n\n return {\n ...existingContent,\n ...updateContent,\n ...('metadata' in existingContent && updateContent.metadata\n ? { metadata: { ...(existingContent.metadata ?? {}), ...updateContent.metadata } }\n : {}),\n } as MastraDBMessage['content'];\n}\n","import { randomUUID } from 'node:crypto';\n\nimport { ErrorCategory, MastraError } from '@mastra/core/error';\nimport { TABLE_OBSERVATIONAL_MEMORY } from '@mastra/core/storage';\nimport type {\n CreateObservationalMemoryInput,\n CreateReflectionGenerationInput,\n ObservationalMemoryHistoryOptions,\n ObservationalMemoryRecord,\n UpdateActiveObservationsInput,\n UpdateObservationalMemoryConfigInput,\n} from '@mastra/core/storage';\nimport type { Connection } from 'oracledb';\n\nimport {\n asBindParameters,\n executeOptions,\n jsonBind,\n nullableClobBind,\n nullableJsonBind,\n rows,\n} from '../../../shared/connection';\nimport type { ObjectRow } from '../../../shared/connection';\nimport { toDate, parseOptionalJsonObject, parseOptionalStringArray } from '../../domain-utils';\nimport {\n OM_ACTIVE_OBSERVATIONS,\n OM_ACTIVE_OBSERVATIONS_PENDING_UPDATE,\n OM_BUFFERED_MESSAGE_IDS,\n OM_BUFFERED_OBSERVATIONS,\n OM_BUFFERED_OBSERVATION_CHUNKS,\n OM_BUFFERED_OBSERVATION_TOKENS,\n OM_BUFFERED_REFLECTION,\n OM_BUFFERED_REFLECTION_INPUT_TOKENS,\n OM_BUFFERED_REFLECTION_TOKENS,\n OM_CREATED_AT,\n OM_GENERATION_COUNT,\n OM_IS_BUFFERING_OBSERVATION,\n OM_IS_BUFFERING_REFLECTION,\n OM_IS_OBSERVING,\n OM_IS_REFLECTING,\n OM_LAST_BUFFERED_AT_TIME,\n OM_LAST_BUFFERED_AT_TOKENS,\n OM_LAST_OBSERVED_AT,\n OM_LAST_REFLECTION_AT,\n OM_LOOKUP_KEY,\n OM_OBSERVATION_TOKEN_COUNT,\n OM_OBSERVED_MESSAGE_IDS,\n OM_OBSERVED_TIMEZONE,\n OM_ORIGIN_TYPE,\n OM_PENDING_MESSAGE_TOKENS,\n OM_REFLECTED_OBSERVATION_LINE_COUNT,\n OM_RESOURCE_ID,\n OM_SCOPE,\n OM_THREAD_ID,\n OM_TOTAL_TOKENS_OBSERVED,\n OM_UPDATED_AT,\n} from './schema';\nimport {\n assertRowsAffected,\n boolToNumber,\n emptyToUndefined,\n numberOrZero,\n optionalNumber,\n parseBufferedChunks,\n parseJson,\n storageError,\n stringOrEmpty,\n table,\n toBoolean,\n} from './utils';\nimport type { MemoryContext } from './utils';\n\n// Core observational memory: current record lookup/history, record creation,\n// active-observation updates, config merges, and simple state flags. The\n// async buffering/reflection-swap workflow lives in observational-buffering.ts.\n\nexport type ObservationalMemoryRow = {\n id: string;\n lookupKey: string;\n scope: 'thread' | 'resource';\n resourceId: string;\n threadId?: string | null;\n activeObservations?: unknown;\n activeObservationsPendingUpdate?: unknown;\n originType?: 'initial' | 'reflection';\n config?: unknown;\n generationCount?: number | string;\n lastObservedAt?: Date | string | null;\n lastReflectionAt?: Date | string | null;\n pendingMessageTokens?: number | string | null;\n totalTokensObserved?: number | string | null;\n observationTokenCount?: number | string | null;\n isObserving?: number | boolean | string | null;\n isReflecting?: number | boolean | string | null;\n observedMessageIds?: unknown;\n observedTimezone?: string | null;\n bufferedObservations?: unknown;\n bufferedObservationTokens?: number | string | null;\n bufferedMessageIds?: unknown;\n bufferedReflection?: unknown;\n bufferedReflectionTokens?: number | string | null;\n bufferedReflectionInputTokens?: number | string | null;\n reflectedObservationLineCount?: number | string | null;\n bufferedObservationChunks?: unknown;\n isBufferingObservation?: number | boolean | string | null;\n isBufferingReflection?: number | boolean | string | null;\n lastBufferedAtTokens?: number | string | null;\n lastBufferedAtTime?: Date | string | null;\n metadata?: unknown;\n createdAt: Date | string;\n updatedAt: Date | string;\n};\n\nexport async function getObservationalMemory(\n ctx: MemoryContext,\n threadId: string | null,\n resourceId: string,\n): Promise<ObservationalMemoryRecord | null> {\n try {\n const lookupKey = getOMKey(threadId, resourceId);\n // A resource can have global and thread-scoped observations. lookupKey\n // keeps those scopes independent while sharing one indexed table.\n return await ctx.db.withConnection(async connection => {\n const result = await connection.execute<ObjectRow>(\n `${omSelect()} FROM ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)}\n WHERE ${OM_LOOKUP_KEY} = :lookupKey\n ORDER BY ${OM_GENERATION_COUNT} DESC\n FETCH FIRST 1 ROWS ONLY`,\n asBindParameters({ lookupKey }),\n executeOptions(),\n );\n const row = rows(result)[0] as ObservationalMemoryRow | undefined;\n return row ? parseOMRow(row) : null;\n });\n } catch (error) {\n throw storageError('GET_OBSERVATIONAL_MEMORY', 'FAILED', { threadId: threadId ?? '', resourceId }, error);\n }\n}\n\nexport async function getObservationalMemoryHistory(\n ctx: MemoryContext,\n threadId: string | null,\n resourceId: string,\n limit = 10,\n options?: ObservationalMemoryHistoryOptions,\n): Promise<ObservationalMemoryRecord[]> {\n try {\n ctx.validatePaginationInput(options?.offset ?? 0, limit);\n } catch (error) {\n throw storageError(\n 'GET_OBSERVATIONAL_MEMORY_HISTORY',\n 'INVALID_INPUT',\n { resourceId, limit },\n error,\n ErrorCategory.USER,\n );\n }\n\n try {\n const lookupKey = getOMKey(threadId, resourceId);\n const conditions = [`${OM_LOOKUP_KEY} = :lookupKey`];\n const binds: Record<string, unknown> = { lookupKey, limit };\n\n if (options?.from) {\n conditions.push(`${OM_CREATED_AT} >= :fromDate`);\n binds.fromDate = options.from;\n }\n if (options?.to) {\n conditions.push(`${OM_CREATED_AT} <= :toDate`);\n binds.toDate = options.to;\n }\n if (options?.offset !== undefined) {\n binds.offset = options.offset;\n }\n\n return await ctx.db.withConnection(async connection => {\n const result = await connection.execute<ObjectRow>(\n `${omSelect()} FROM ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)}\n WHERE ${conditions.join(' AND ')}\n ORDER BY ${OM_GENERATION_COUNT} DESC\n OFFSET :offset ROWS FETCH NEXT :limit ROWS ONLY`,\n asBindParameters({ offset: options?.offset ?? 0, ...binds }),\n executeOptions(),\n );\n return rows(result).map(row => parseOMRow(row as ObservationalMemoryRow));\n });\n } catch (error) {\n throw storageError(\n 'GET_OBSERVATIONAL_MEMORY_HISTORY',\n 'FAILED',\n { threadId: threadId ?? '', resourceId, limit },\n error,\n );\n }\n}\n\nexport async function initializeObservationalMemory(\n ctx: MemoryContext,\n input: CreateObservationalMemoryInput,\n): Promise<ObservationalMemoryRecord> {\n const now = new Date();\n // Start with empty active observations; later calls append observations and reflection output transactionally.\n const record: ObservationalMemoryRecord = {\n id: randomUUID(),\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 try {\n await ctx.db.tx(async (_client, connection) => {\n await insertOMRecord(ctx, connection, record);\n });\n return record;\n } catch (error) {\n throw storageError(\n 'INITIALIZE_OBSERVATIONAL_MEMORY',\n 'FAILED',\n { threadId: input.threadId ?? '', resourceId: input.resourceId },\n error,\n );\n }\n}\n\nexport async function insertObservationalMemoryRecord(\n ctx: MemoryContext,\n record: ObservationalMemoryRecord,\n): Promise<void> {\n try {\n await ctx.db.tx(async (_client, connection) => {\n await insertOMRecord(ctx, connection, record);\n });\n } catch (error) {\n throw storageError(\n 'INSERT_OBSERVATIONAL_MEMORY_RECORD',\n 'FAILED',\n { id: record.id, resourceId: record.resourceId },\n error,\n );\n }\n}\n\nexport async function updateActiveObservations(\n ctx: MemoryContext,\n input: UpdateActiveObservationsInput,\n): Promise<void> {\n try {\n await ctx.db.tx(async (_client, connection) => {\n const result = await connection.execute(\n `\n UPDATE ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)}\n SET ${OM_ACTIVE_OBSERVATIONS} = :activeObservations,\n ${OM_LAST_OBSERVED_AT} = :lastObservedAt,\n ${OM_PENDING_MESSAGE_TOKENS} = 0,\n ${OM_OBSERVATION_TOKEN_COUNT} = :tokenCount,\n ${OM_TOTAL_TOKENS_OBSERVED} = COALESCE(${OM_TOTAL_TOKENS_OBSERVED}, 0) + :tokenCount,\n ${OM_OBSERVED_MESSAGE_IDS} = :observedMessageIds,\n ${OM_OBSERVED_TIMEZONE} = COALESCE(:observedTimezone, ${OM_OBSERVED_TIMEZONE}),\n ${OM_UPDATED_AT} = :updatedAt\n WHERE id = :id`,\n {\n id: input.id,\n activeObservations: nullableClobBind(input.observations),\n lastObservedAt: input.lastObservedAt,\n // Moving observations to active memory consumes pending tokens and\n // advances the cumulative observed-token counter atomically.\n tokenCount: Math.round(input.tokenCount),\n observedMessageIds: nullableJsonBind(input.observedMessageIds),\n observedTimezone: input.observedTimezone ?? null,\n updatedAt: new Date(),\n },\n );\n assertRowsAffected(result.rowsAffected, 'UPDATE_ACTIVE_OBSERVATIONS', input.id);\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError('UPDATE_ACTIVE_OBSERVATIONS', 'FAILED', { id: input.id }, error);\n }\n}\n\nexport async function createReflectionGeneration(\n ctx: MemoryContext,\n input: CreateReflectionGenerationInput,\n): Promise<ObservationalMemoryRecord> {\n const now = new Date();\n const record: ObservationalMemoryRecord = {\n id: randomUUID(),\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: Math.round(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 try {\n await ctx.db.tx(async (_client, connection) => {\n await insertOMRecord(ctx, connection, record, now);\n });\n return record;\n } catch (error) {\n throw storageError('CREATE_REFLECTION_GENERATION', 'FAILED', { id: input.currentRecord.id }, error);\n }\n}\n\nexport async function setReflectingFlag(ctx: MemoryContext, id: string, isReflecting: boolean): Promise<void> {\n await updateOMFlag(ctx, id, OM_IS_REFLECTING, isReflecting, 'SET_REFLECTING_FLAG');\n}\n\nexport async function setObservingFlag(ctx: MemoryContext, id: string, isObserving: boolean): Promise<void> {\n await updateOMFlag(ctx, id, OM_IS_OBSERVING, isObserving, 'SET_OBSERVING_FLAG');\n}\n\nexport async function setBufferingObservationFlag(\n ctx: MemoryContext,\n id: string,\n isBuffering: boolean,\n lastBufferedAtTokens?: number,\n): Promise<void> {\n try {\n await ctx.db.tx(async (_client, connection) => {\n const setTokens =\n lastBufferedAtTokens !== undefined ? `, ${OM_LAST_BUFFERED_AT_TOKENS} = :lastBufferedAtTokens` : '';\n const binds: Record<string, unknown> = {\n id,\n isBuffering: boolToNumber(isBuffering),\n updatedAt: new Date(),\n };\n if (lastBufferedAtTokens !== undefined) {\n binds.lastBufferedAtTokens = Math.round(lastBufferedAtTokens);\n }\n\n const result = await connection.execute(\n `UPDATE ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)}\n SET ${OM_IS_BUFFERING_OBSERVATION} = :isBuffering,\n ${OM_UPDATED_AT} = :updatedAt\n ${setTokens}\n WHERE id = :id`,\n asBindParameters(binds),\n );\n assertRowsAffected(result.rowsAffected, 'SET_BUFFERING_OBSERVATION_FLAG', id);\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError('SET_BUFFERING_OBSERVATION_FLAG', 'FAILED', { id, isBuffering }, error);\n }\n}\n\nexport async function setBufferingReflectionFlag(ctx: MemoryContext, id: string, isBuffering: boolean): Promise<void> {\n await updateOMFlag(ctx, id, OM_IS_BUFFERING_REFLECTION, isBuffering, 'SET_BUFFERING_REFLECTION_FLAG');\n}\n\nexport async function clearObservationalMemory(\n ctx: MemoryContext,\n threadId: string | null,\n resourceId: string,\n): Promise<void> {\n try {\n const lookupKey = getOMKey(threadId, resourceId);\n await ctx.db.none(`DELETE FROM ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)} WHERE ${OM_LOOKUP_KEY} = :lookupKey`, {\n lookupKey,\n });\n } catch (error) {\n throw storageError('CLEAR_OBSERVATIONAL_MEMORY', 'FAILED', { threadId: threadId ?? '', resourceId }, error);\n }\n}\n\nexport async function setPendingMessageTokens(ctx: MemoryContext, id: string, tokenCount: number): Promise<void> {\n try {\n await updateOMColumns(ctx, id, 'SET_PENDING_MESSAGE_TOKENS', {\n [OM_PENDING_MESSAGE_TOKENS]: Math.round(tokenCount),\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError('SET_PENDING_MESSAGE_TOKENS', 'FAILED', { id, tokenCount }, error);\n }\n}\n\nexport async function updateObservationalMemoryConfig(\n ctx: MemoryContext,\n input: UpdateObservationalMemoryConfigInput,\n): Promise<void> {\n try {\n await ctx.db.tx(async (_client, connection) => {\n // Lock current config before deep-merging so concurrent observers do not\n // drop nested config keys written by another request.\n const result = await connection.execute<ObjectRow>(\n `SELECT config AS \"config\" FROM ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)} WHERE id = :id FOR UPDATE`,\n { id: input.id },\n executeOptions(),\n );\n const row = rows(result)[0];\n if (!row) {\n assertRowsAffected(0, 'UPDATE_OM_CONFIG', input.id);\n }\n\n const existing = parseJson(row?.config);\n const merged = ctx.deepMergeConfig(existing, input.config);\n const updateResult = await connection.execute(\n `UPDATE ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)}\n SET config = :config,\n ${OM_UPDATED_AT} = :updatedAt\n WHERE id = :id`,\n { id: input.id, config: jsonBind(merged), updatedAt: new Date() },\n );\n assertRowsAffected(updateResult.rowsAffected, 'UPDATE_OM_CONFIG', input.id);\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError('UPDATE_OM_CONFIG', 'FAILED', { id: input.id }, error);\n }\n}\n\nfunction getOMKey(threadId: string | null, resourceId: string): string {\n return threadId ? `thread:${threadId}` : `resource:${resourceId}`;\n}\n\nexport async function insertOMRecord(\n ctx: MemoryContext,\n connection: Connection,\n record: ObservationalMemoryRecord,\n timestamp = record.createdAt,\n): Promise<void> {\n // Store free-form observations/reflections as CLOBs while keeping config,\n // ids, chunks, and counters typed for runtime queries and state transitions.\n await connection.execute(\n `\n INSERT INTO ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)} (\n id,\n ${OM_LOOKUP_KEY},\n ${OM_SCOPE},\n ${OM_RESOURCE_ID},\n ${OM_THREAD_ID},\n ${OM_ACTIVE_OBSERVATIONS},\n ${OM_ACTIVE_OBSERVATIONS_PENDING_UPDATE},\n ${OM_ORIGIN_TYPE},\n config,\n ${OM_GENERATION_COUNT},\n ${OM_LAST_OBSERVED_AT},\n ${OM_LAST_REFLECTION_AT},\n ${OM_PENDING_MESSAGE_TOKENS},\n ${OM_TOTAL_TOKENS_OBSERVED},\n ${OM_OBSERVATION_TOKEN_COUNT},\n ${OM_OBSERVED_MESSAGE_IDS},\n ${OM_OBSERVED_TIMEZONE},\n ${OM_BUFFERED_OBSERVATIONS},\n ${OM_BUFFERED_OBSERVATION_TOKENS},\n ${OM_BUFFERED_MESSAGE_IDS},\n ${OM_BUFFERED_REFLECTION},\n ${OM_BUFFERED_REFLECTION_TOKENS},\n ${OM_BUFFERED_REFLECTION_INPUT_TOKENS},\n ${OM_REFLECTED_OBSERVATION_LINE_COUNT},\n ${OM_BUFFERED_OBSERVATION_CHUNKS},\n ${OM_IS_OBSERVING},\n ${OM_IS_REFLECTING},\n ${OM_IS_BUFFERING_OBSERVATION},\n ${OM_IS_BUFFERING_REFLECTION},\n ${OM_LAST_BUFFERED_AT_TOKENS},\n ${OM_LAST_BUFFERED_AT_TIME},\n metadata,\n ${OM_CREATED_AT},\n ${OM_UPDATED_AT}\n ) VALUES (\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 :observedMessageIds,\n :observedTimezone,\n :bufferedObservations,\n :bufferedObservationTokens,\n :bufferedMessageIds,\n :bufferedReflection,\n :bufferedReflectionTokens,\n :bufferedReflectionInputTokens,\n :reflectedObservationLineCount,\n :bufferedObservationChunks,\n :isObserving,\n :isReflecting,\n :isBufferingObservation,\n :isBufferingReflection,\n :lastBufferedAtTokens,\n :lastBufferedAtTime,\n :metadata,\n :createdAt,\n :updatedAt\n )`,\n {\n id: record.id,\n lookupKey: getOMKey(record.threadId, record.resourceId),\n scope: record.scope,\n resourceId: record.resourceId,\n threadId: record.threadId ?? null,\n activeObservations: nullableClobBind(record.activeObservations ?? ''),\n activeObservationsPendingUpdate: nullableClobBind(record.bufferedObservations),\n originType: record.originType ?? 'initial',\n config: jsonBind(record.config ?? {}),\n generationCount: record.generationCount ?? 0,\n lastObservedAt: record.lastObservedAt ?? null,\n lastReflectionAt: record.originType === 'reflection' ? timestamp : null,\n pendingMessageTokens: Math.round(record.pendingMessageTokens ?? 0),\n totalTokensObserved: Math.round(record.totalTokensObserved ?? 0),\n observationTokenCount: Math.round(record.observationTokenCount ?? 0),\n observedMessageIds: nullableJsonBind(record.observedMessageIds),\n observedTimezone: record.observedTimezone ?? null,\n bufferedObservations: nullableClobBind(record.bufferedObservations),\n bufferedObservationTokens: record.bufferedObservationTokens ?? null,\n bufferedMessageIds: nullableJsonBind(record.bufferedMessageIds),\n bufferedReflection: nullableClobBind(record.bufferedReflection),\n bufferedReflectionTokens: record.bufferedReflectionTokens ?? null,\n bufferedReflectionInputTokens: record.bufferedReflectionInputTokens ?? null,\n reflectedObservationLineCount: record.reflectedObservationLineCount ?? null,\n bufferedObservationChunks: nullableJsonBind(record.bufferedObservationChunks),\n isObserving: boolToNumber(record.isObserving),\n isReflecting: boolToNumber(record.isReflecting),\n isBufferingObservation: boolToNumber(record.isBufferingObservation),\n isBufferingReflection: boolToNumber(record.isBufferingReflection),\n lastBufferedAtTokens: Math.round(record.lastBufferedAtTokens ?? 0),\n lastBufferedAtTime: record.lastBufferedAtTime ?? null,\n metadata: nullableJsonBind(record.metadata),\n createdAt: record.createdAt,\n updatedAt: record.updatedAt,\n },\n );\n}\n\nasync function updateOMFlag(\n ctx: MemoryContext,\n id: string,\n column: string,\n value: boolean,\n operation: string,\n): Promise<void> {\n try {\n await updateOMColumns(ctx, id, operation, { [column]: boolToNumber(value) });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError(operation, 'FAILED', { id, value }, error);\n }\n}\n\nasync function updateOMColumns(\n ctx: MemoryContext,\n id: string,\n operation: string,\n columns: Record<string, unknown>,\n): Promise<void> {\n await ctx.db.tx(async (_client, connection) => {\n const setParts = Object.keys(columns).map((column, index) => `${column} = :value${index}`);\n const binds = Object.fromEntries(Object.values(columns).map((value, index) => [`value${index}`, value]));\n const result = await connection.execute(\n `UPDATE ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)}\n SET ${setParts.join(', ')},\n ${OM_UPDATED_AT} = :updatedAt\n WHERE id = :id`,\n { ...binds, id, updatedAt: new Date() },\n );\n assertRowsAffected(result.rowsAffected, operation, id);\n });\n}\n\nexport function omSelect(): string {\n return `SELECT\n id AS \"id\",\n ${OM_LOOKUP_KEY} AS \"lookupKey\",\n ${OM_SCOPE} AS \"scope\",\n ${OM_RESOURCE_ID} AS \"resourceId\",\n ${OM_THREAD_ID} AS \"threadId\",\n ${OM_ACTIVE_OBSERVATIONS} AS \"activeObservations\",\n ${OM_ACTIVE_OBSERVATIONS_PENDING_UPDATE} AS \"activeObservationsPendingUpdate\",\n ${OM_ORIGIN_TYPE} AS \"originType\",\n config AS \"config\",\n ${OM_GENERATION_COUNT} AS \"generationCount\",\n ${OM_LAST_OBSERVED_AT} AS \"lastObservedAt\",\n ${OM_LAST_REFLECTION_AT} AS \"lastReflectionAt\",\n ${OM_PENDING_MESSAGE_TOKENS} AS \"pendingMessageTokens\",\n ${OM_TOTAL_TOKENS_OBSERVED} AS \"totalTokensObserved\",\n ${OM_OBSERVATION_TOKEN_COUNT} AS \"observationTokenCount\",\n ${OM_IS_OBSERVING} AS \"isObserving\",\n ${OM_IS_REFLECTING} AS \"isReflecting\",\n ${OM_OBSERVED_MESSAGE_IDS} AS \"observedMessageIds\",\n ${OM_OBSERVED_TIMEZONE} AS \"observedTimezone\",\n ${OM_BUFFERED_OBSERVATIONS} AS \"bufferedObservations\",\n ${OM_BUFFERED_OBSERVATION_TOKENS} AS \"bufferedObservationTokens\",\n ${OM_BUFFERED_MESSAGE_IDS} AS \"bufferedMessageIds\",\n ${OM_BUFFERED_REFLECTION} AS \"bufferedReflection\",\n ${OM_BUFFERED_REFLECTION_TOKENS} AS \"bufferedReflectionTokens\",\n ${OM_BUFFERED_REFLECTION_INPUT_TOKENS} AS \"bufferedReflectionInputTokens\",\n ${OM_REFLECTED_OBSERVATION_LINE_COUNT} AS \"reflectedObservationLineCount\",\n ${OM_BUFFERED_OBSERVATION_CHUNKS} AS \"bufferedObservationChunks\",\n ${OM_IS_BUFFERING_OBSERVATION} AS \"isBufferingObservation\",\n ${OM_IS_BUFFERING_REFLECTION} AS \"isBufferingReflection\",\n ${OM_LAST_BUFFERED_AT_TOKENS} AS \"lastBufferedAtTokens\",\n ${OM_LAST_BUFFERED_AT_TIME} AS \"lastBufferedAtTime\",\n metadata AS \"metadata\",\n ${OM_CREATED_AT} AS \"createdAt\",\n ${OM_UPDATED_AT} AS \"updatedAt\"`;\n}\n\nexport function parseOMRow(row: ObservationalMemoryRow): ObservationalMemoryRecord {\n return {\n id: String(row.id),\n scope: row.scope,\n threadId: row.threadId === null || row.threadId === undefined ? null : String(row.threadId),\n resourceId: String(row.resourceId),\n createdAt: toDate(row.createdAt),\n updatedAt: toDate(row.updatedAt),\n lastObservedAt: row.lastObservedAt ? toDate(row.lastObservedAt) : undefined,\n originType: row.originType ?? 'initial',\n generationCount: numberOrZero(row.generationCount),\n activeObservations: stringOrEmpty(row.activeObservations),\n bufferedObservationChunks: parseBufferedChunks(row.bufferedObservationChunks),\n bufferedObservations: emptyToUndefined(row.bufferedObservations ?? row.activeObservationsPendingUpdate),\n bufferedObservationTokens: optionalNumber(row.bufferedObservationTokens),\n bufferedMessageIds: parseOptionalStringArray(row.bufferedMessageIds),\n bufferedReflection: emptyToUndefined(row.bufferedReflection),\n bufferedReflectionTokens: optionalNumber(row.bufferedReflectionTokens),\n bufferedReflectionInputTokens: optionalNumber(row.bufferedReflectionInputTokens),\n reflectedObservationLineCount: optionalNumber(row.reflectedObservationLineCount),\n totalTokensObserved: numberOrZero(row.totalTokensObserved),\n observationTokenCount: numberOrZero(row.observationTokenCount),\n pendingMessageTokens: numberOrZero(row.pendingMessageTokens),\n isReflecting: toBoolean(row.isReflecting),\n isObserving: toBoolean(row.isObserving),\n isBufferingObservation: toBoolean(row.isBufferingObservation),\n isBufferingReflection: toBoolean(row.isBufferingReflection),\n lastBufferedAtTokens: numberOrZero(row.lastBufferedAtTokens),\n lastBufferedAtTime: row.lastBufferedAtTime ? toDate(row.lastBufferedAtTime) : null,\n config: parseJson(row.config),\n metadata: parseOptionalJsonObject(row.metadata, { emptyObjectAsUndefined: true }),\n observedMessageIds: parseOptionalStringArray(row.observedMessageIds),\n observedTimezone: row.observedTimezone ? String(row.observedTimezone) : undefined,\n };\n}\n","import { randomUUID } from 'node:crypto';\n\nimport { ErrorCategory, MastraError } from '@mastra/core/error';\nimport { TABLE_OBSERVATIONAL_MEMORY } from '@mastra/core/storage';\nimport type {\n BufferedObservationChunk,\n ObservationalMemoryRecord,\n SwapBufferedReflectionToActiveInput,\n SwapBufferedToActiveInput,\n SwapBufferedToActiveResult,\n UpdateBufferedObservationsInput,\n UpdateBufferedReflectionInput,\n} from '@mastra/core/storage';\nimport type { Connection } from 'oracledb';\n\nimport { asBindParameters, executeOptions, nullableClobBind, nullableJsonBind, rows } from '../../../shared/connection';\nimport type { ObjectRow } from '../../../shared/connection';\nimport { toDate } from '../../domain-utils';\nimport { insertOMRecord, omSelect, parseOMRow } from './observational';\nimport type { ObservationalMemoryRow } from './observational';\nimport {\n OM_ACTIVE_OBSERVATIONS,\n OM_BUFFERED_OBSERVATION_CHUNKS,\n OM_BUFFERED_REFLECTION,\n OM_BUFFERED_REFLECTION_INPUT_TOKENS,\n OM_BUFFERED_REFLECTION_TOKENS,\n OM_LAST_BUFFERED_AT_TIME,\n OM_LAST_OBSERVED_AT,\n OM_OBSERVATION_TOKEN_COUNT,\n OM_PENDING_MESSAGE_TOKENS,\n OM_REFLECTED_OBSERVATION_LINE_COUNT,\n OM_UPDATED_AT,\n} from './schema';\nimport { assertRowsAffected, numberOrZero, parseBufferedChunks, storageError, stringOrEmpty, table } from './utils';\nimport type { MemoryContext } from './utils';\n\n// Async buffering/reflection workflow: observations and reflections generated\n// off the hot path accumulate here before being swapped into active state.\n// Depends on observational.ts for the row shape, SELECT clause, and insert helper.\n\nexport async function updateBufferedObservations(\n ctx: MemoryContext,\n input: UpdateBufferedObservationsInput,\n): Promise<void> {\n try {\n await ctx.db.tx(async (_client, connection) => {\n const row = await lockOMRow(ctx, connection, input.id, 'UPDATE_BUFFERED_OBSERVATIONS');\n const existingChunks = parseBufferedChunks(row.bufferedObservationChunks);\n // Buffer chunks let long observation cycles append safely without\n // rewriting the active observation CLOB on every small update.\n const newChunk: BufferedObservationChunk = {\n id: `ombuf-${randomUUID()}`,\n cycleId: input.chunk.cycleId,\n observations: input.chunk.observations,\n tokenCount: Math.round(input.chunk.tokenCount),\n messageIds: input.chunk.messageIds,\n messageTokens: Math.round(input.chunk.messageTokens ?? 0),\n lastObservedAt: input.chunk.lastObservedAt,\n createdAt: new Date(),\n suggestedContinuation: input.chunk.suggestedContinuation,\n currentTask: input.chunk.currentTask,\n threadTitle: input.chunk.threadTitle,\n extractedValues: input.chunk.extractedValues,\n extractionFailures: input.chunk.extractionFailures,\n };\n const updatedChunks = [...existingChunks, newChunk];\n const lastBufferedAtTimeSql =\n input.lastBufferedAtTime === undefined || input.lastBufferedAtTime === null\n ? ''\n : `,\\n ${OM_LAST_BUFFERED_AT_TIME} = :lastBufferedAtTime`;\n const binds: Record<string, unknown> = {\n id: input.id,\n bufferedObservationChunks: nullableJsonBind(updatedChunks),\n updatedAt: new Date(),\n };\n if (input.lastBufferedAtTime !== undefined && input.lastBufferedAtTime !== null) {\n binds.lastBufferedAtTime = toDate(input.lastBufferedAtTime);\n }\n\n const result = await connection.execute(\n `UPDATE ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)}\n SET ${OM_BUFFERED_OBSERVATION_CHUNKS} = :bufferedObservationChunks,\n ${OM_UPDATED_AT} = :updatedAt${lastBufferedAtTimeSql}\n WHERE id = :id`,\n asBindParameters(binds),\n );\n assertRowsAffected(result.rowsAffected, 'UPDATE_BUFFERED_OBSERVATIONS', input.id);\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError('UPDATE_BUFFERED_OBSERVATIONS', 'FAILED', { id: input.id }, error);\n }\n}\n\nexport async function swapBufferedToActive(\n ctx: MemoryContext,\n input: SwapBufferedToActiveInput,\n): Promise<SwapBufferedToActiveResult> {\n try {\n return await ctx.db.tx(async (_client, connection) => {\n const row = await lockOMRow(ctx, connection, input.id, 'SWAP_BUFFERED_TO_ACTIVE');\n const chunks = input.bufferedChunks?.length\n ? input.bufferedChunks\n : parseBufferedChunks(row.bufferedObservationChunks);\n\n if (chunks.length === 0) {\n return emptySwapResult();\n }\n\n const activation = calculateBufferedActivation(chunks, input);\n const lastObservedAt =\n input.lastObservedAt ??\n (activation.activatedChunks.at(-1)?.lastObservedAt\n ? toDate(activation.activatedChunks.at(-1)!.lastObservedAt)\n : new Date());\n const boundary = `\\n\\n--- message boundary (${lastObservedAt.toISOString()}) ---\\n\\n`;\n // Keep each activated chunk readable inside one CLOB while preserving the observation timestamp boundary.\n const existingActive = stringOrEmpty(row.activeObservations);\n const newActive = existingActive\n ? `${existingActive}${boundary}${activation.activatedContent}`\n : activation.activatedContent;\n const pendingTokens = Math.max(0, numberOrZero(row.pendingMessageTokens) - activation.activatedMessageTokens);\n\n const result = await connection.execute(\n `UPDATE ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)}\n SET ${OM_ACTIVE_OBSERVATIONS} = :activeObservations,\n ${OM_OBSERVATION_TOKEN_COUNT} = COALESCE(${OM_OBSERVATION_TOKEN_COUNT}, 0) + :observationTokens,\n ${OM_PENDING_MESSAGE_TOKENS} = :pendingMessageTokens,\n ${OM_BUFFERED_OBSERVATION_CHUNKS} = :bufferedObservationChunks,\n ${OM_LAST_OBSERVED_AT} = :lastObservedAt,\n ${OM_UPDATED_AT} = :updatedAt\n WHERE id = :id`,\n {\n id: input.id,\n activeObservations: nullableClobBind(newActive),\n observationTokens: activation.activatedTokens,\n pendingMessageTokens: pendingTokens,\n bufferedObservationChunks: nullableJsonBind(\n activation.remainingChunks.length > 0 ? activation.remainingChunks : null,\n ),\n lastObservedAt,\n updatedAt: new Date(),\n },\n );\n assertRowsAffected(result.rowsAffected, 'SWAP_BUFFERED_TO_ACTIVE', input.id);\n\n return activation.result;\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError('SWAP_BUFFERED_TO_ACTIVE', 'FAILED', { id: input.id }, error);\n }\n}\n\nexport async function updateBufferedReflection(\n ctx: MemoryContext,\n input: UpdateBufferedReflectionInput,\n): Promise<void> {\n try {\n await ctx.db.tx(async (_client, connection) => {\n const result = await connection.execute(\n `UPDATE ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)}\n SET ${OM_BUFFERED_REFLECTION} = CASE\n WHEN ${OM_BUFFERED_REFLECTION} IS NOT NULL AND DBMS_LOB.GETLENGTH(${OM_BUFFERED_REFLECTION}) > 0\n THEN ${OM_BUFFERED_REFLECTION} || CHR(10) || CHR(10) || :reflection\n ELSE :reflection\n END,\n ${OM_BUFFERED_REFLECTION_TOKENS} = COALESCE(${OM_BUFFERED_REFLECTION_TOKENS}, 0) + :tokenCount,\n ${OM_BUFFERED_REFLECTION_INPUT_TOKENS} = COALESCE(${OM_BUFFERED_REFLECTION_INPUT_TOKENS}, 0) + :inputTokenCount,\n ${OM_REFLECTED_OBSERVATION_LINE_COUNT} = :reflectedObservationLineCount,\n ${OM_UPDATED_AT} = :updatedAt\n WHERE id = :id`,\n {\n id: input.id,\n reflection: nullableClobBind(input.reflection),\n tokenCount: Math.round(input.tokenCount),\n inputTokenCount: Math.round(input.inputTokenCount),\n reflectedObservationLineCount: Math.round(input.reflectedObservationLineCount),\n updatedAt: new Date(),\n },\n );\n assertRowsAffected(result.rowsAffected, 'UPDATE_BUFFERED_REFLECTION', input.id);\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError('UPDATE_BUFFERED_REFLECTION', 'FAILED', { id: input.id }, error);\n }\n}\n\nexport async function swapBufferedReflectionToActive(\n ctx: MemoryContext,\n input: SwapBufferedReflectionToActiveInput,\n): Promise<ObservationalMemoryRecord> {\n try {\n return await ctx.db.tx(async (_client, connection) => {\n const row = await lockOMRow(ctx, connection, input.currentRecord.id, 'SWAP_BUFFERED_REFLECTION_TO_ACTIVE');\n const bufferedReflection = stringOrEmpty(row.bufferedReflection);\n if (!bufferedReflection) {\n throw storageError(\n 'SWAP_BUFFERED_REFLECTION_TO_ACTIVE',\n 'NO_CONTENT',\n { id: input.currentRecord.id },\n new Error('No buffered reflection to swap'),\n ErrorCategory.USER,\n );\n }\n\n const reflectedLineCount = numberOrZero(row.reflectedObservationLineCount);\n const currentObservations = stringOrEmpty(row.activeObservations);\n // The buffered reflection replaces the lines it summarized, but any\n // observations added after reflection started are preserved below it.\n const unreflectedContent = currentObservations.split('\\n').slice(reflectedLineCount).join('\\n').trim();\n const newObservations = unreflectedContent\n ? `${bufferedReflection}\\n\\n${unreflectedContent}`\n : bufferedReflection;\n const now = new Date();\n // Derive the carried-over fields from the row we just locked (FOR UPDATE\n // above) instead of input.currentRecord, which can be stale if another\n // writer updated generationCount/config/metadata/etc. concurrently.\n const lockedRecord = parseOMRow(row);\n const newRecord: ObservationalMemoryRecord = {\n id: randomUUID(),\n scope: lockedRecord.scope,\n threadId: lockedRecord.threadId,\n resourceId: lockedRecord.resourceId,\n createdAt: now,\n updatedAt: now,\n lastObservedAt: lockedRecord.lastObservedAt,\n originType: 'reflection',\n generationCount: lockedRecord.generationCount + 1,\n activeObservations: newObservations,\n totalTokensObserved: lockedRecord.totalTokensObserved,\n observationTokenCount: Math.round(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: lockedRecord.config,\n metadata: lockedRecord.metadata,\n observedTimezone: lockedRecord.observedTimezone,\n };\n\n await insertOMRecord(ctx, connection, newRecord, now);\n const updateResult = await connection.execute(\n `UPDATE ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)}\n SET ${OM_BUFFERED_REFLECTION} = NULL,\n ${OM_BUFFERED_REFLECTION_TOKENS} = NULL,\n ${OM_BUFFERED_REFLECTION_INPUT_TOKENS} = NULL,\n ${OM_REFLECTED_OBSERVATION_LINE_COUNT} = NULL,\n ${OM_UPDATED_AT} = :updatedAt\n WHERE id = :id`,\n { id: input.currentRecord.id, updatedAt: now },\n );\n assertRowsAffected(updateResult.rowsAffected, 'SWAP_BUFFERED_REFLECTION_TO_ACTIVE', input.currentRecord.id);\n\n return newRecord;\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError('SWAP_BUFFERED_REFLECTION_TO_ACTIVE', 'FAILED', { id: input.currentRecord.id }, error);\n }\n}\n\nasync function lockOMRow(\n ctx: MemoryContext,\n connection: Connection,\n id: string,\n operation: string,\n): Promise<ObservationalMemoryRow> {\n // Observational memory updates are incremental and order-sensitive, so\n // mutating paths derive their next state from a locked row.\n const result = await connection.execute<ObjectRow>(\n `${omSelect()} FROM ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)} WHERE id = :id FOR UPDATE`,\n { id },\n executeOptions(),\n );\n const row = rows(result)[0] as ObservationalMemoryRow | undefined;\n if (!row) {\n assertRowsAffected(0, operation, id);\n throw new Error(`Observational memory record not found: ${id}`);\n }\n return row;\n}\n\nfunction emptySwapResult(): SwapBufferedToActiveResult {\n return {\n chunksActivated: 0,\n messageTokensActivated: 0,\n observationTokensActivated: 0,\n messagesActivated: 0,\n activatedCycleIds: [],\n activatedMessageIds: [],\n };\n}\n\nfunction calculateBufferedActivation(\n chunks: BufferedObservationChunk[],\n input: SwapBufferedToActiveInput,\n): {\n activatedChunks: BufferedObservationChunk[];\n remainingChunks: BufferedObservationChunk[];\n activatedContent: string;\n activatedTokens: number;\n activatedMessageTokens: number;\n result: SwapBufferedToActiveResult;\n} {\n const retentionFloor = input.messageTokensThreshold * (1 - input.activationRatio);\n const targetMessageTokens = Math.max(0, input.currentPendingTokens - retentionFloor);\n\n let cumulativeMessageTokens = 0;\n let bestOverBoundary = 0;\n let bestOverTokens = 0;\n let bestUnderBoundary = 0;\n let bestUnderTokens = 0;\n\n for (let index = 0; index < chunks.length; index += 1) {\n cumulativeMessageTokens += chunks[index]?.messageTokens ?? 0;\n const boundary = index + 1;\n\n if (cumulativeMessageTokens >= targetMessageTokens) {\n if (bestOverBoundary === 0 || cumulativeMessageTokens < bestOverTokens) {\n bestOverBoundary = boundary;\n bestOverTokens = cumulativeMessageTokens;\n }\n } else if (cumulativeMessageTokens > bestUnderTokens) {\n bestUnderBoundary = boundary;\n bestUnderTokens = cumulativeMessageTokens;\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 const activatedChunks = chunks.slice(0, chunksToActivate);\n const remainingChunks = chunks.slice(chunksToActivate);\n const activatedContent = activatedChunks.map(chunk => chunk.observations).join('\\n\\n');\n const activatedTokens = Math.round(activatedChunks.reduce((sum, chunk) => sum + chunk.tokenCount, 0));\n const activatedMessageTokens = Math.round(\n activatedChunks.reduce((sum, chunk) => sum + (chunk.messageTokens ?? 0), 0),\n );\n const activatedMessageIds = activatedChunks.flatMap(chunk => chunk.messageIds ?? []);\n const latestChunkHints = activatedChunks.at(-1);\n\n return {\n activatedChunks,\n remainingChunks,\n activatedContent,\n activatedTokens,\n activatedMessageTokens,\n result: {\n chunksActivated: activatedChunks.length,\n messageTokensActivated: activatedMessageTokens,\n observationTokensActivated: activatedTokens,\n messagesActivated: activatedChunks.reduce((sum, chunk) => sum + (chunk.messageIds?.length ?? 0), 0),\n activatedCycleIds: activatedChunks.map(chunk => chunk.cycleId).filter(Boolean),\n activatedMessageIds,\n observations: activatedContent,\n perChunk: activatedChunks.map(chunk => ({\n cycleId: chunk.cycleId ?? '',\n messageTokens: chunk.messageTokens ?? 0,\n observationTokens: chunk.tokenCount,\n messageCount: chunk.messageIds?.length ?? 0,\n observations: chunk.observations,\n })),\n suggestedContinuation: latestChunkHints?.suggestedContinuation,\n currentTask: latestChunkHints?.currentTask,\n },\n };\n}\n","import { MastraError } from '@mastra/core/error';\nimport type { StorageResourceType } from '@mastra/core/storage';\nimport { TABLE_RESOURCES } from '@mastra/core/storage';\nimport type { Connection } from 'oracledb';\n\nimport { executeOptions, jsonBind, rows } from '../../../shared/connection';\nimport type { ObjectRow } from '../../../shared/connection';\nimport { toDate } from '../../domain-utils';\nimport { RESOURCE_CREATED_AT, RESOURCE_UPDATED_AT, RESOURCE_WORKING_MEMORY } from './schema';\nimport { optionalClobStringBind, parseJson, parseOptionalString, storageError, table } from './utils';\nimport type { MemoryContext } from './utils';\n\n// Resource working memory: one row per resourceId, upserted the same way\n// threads are (title/metadata may not be known until after the first message).\n\ntype ResourceRow = {\n id: string;\n workingMemory?: unknown;\n metadata?: unknown;\n createdAt: Date | string;\n updatedAt: Date | string;\n};\n\nexport async function getResourceById(\n ctx: MemoryContext,\n { resourceId }: { resourceId: string },\n): Promise<StorageResourceType | null> {\n try {\n return await ctx.db.withConnection(async connection => {\n const result = await connection.execute<ObjectRow>(\n `${resourceSelect()} FROM ${table(ctx, TABLE_RESOURCES)} WHERE id = :resourceId`,\n { resourceId },\n executeOptions(),\n );\n const row = rows(result)[0] as ResourceRow | undefined;\n return row ? parseResource(row) : null;\n });\n } catch (error) {\n throw storageError('GET_RESOURCE_BY_ID', 'FAILED', { resourceId }, error);\n }\n}\n\nexport async function saveResource(\n ctx: MemoryContext,\n { resource }: { resource: StorageResourceType },\n): Promise<StorageResourceType> {\n try {\n await ctx.db.none(\n `\n MERGE INTO ${table(ctx, TABLE_RESOURCES)} target\n USING (\n SELECT\n :id AS id,\n :workingMemory AS working_memory,\n :metadata AS metadata,\n :createdAt AS created_at,\n :updatedAt AS updated_at\n FROM dual\n ) source\n ON (target.id = source.id)\n WHEN MATCHED THEN UPDATE SET\n target.${RESOURCE_WORKING_MEMORY} = source.working_memory,\n target.metadata = source.metadata,\n target.${RESOURCE_UPDATED_AT} = source.updated_at\n WHEN NOT MATCHED THEN INSERT (\n id,\n ${RESOURCE_WORKING_MEMORY},\n metadata,\n ${RESOURCE_CREATED_AT},\n ${RESOURCE_UPDATED_AT}\n ) VALUES (\n source.id,\n source.working_memory,\n source.metadata,\n source.created_at,\n source.updated_at\n )`,\n {\n id: resource.id,\n workingMemory: optionalClobStringBind(resource.workingMemory),\n metadata: jsonBind(resource.metadata ?? {}),\n createdAt: resource.createdAt ?? new Date(),\n updatedAt: resource.updatedAt ?? new Date(),\n },\n );\n return resource;\n } catch (error) {\n throw storageError('SAVE_RESOURCE', 'FAILED', { resourceId: resource.id }, error);\n }\n}\n\nexport async function updateResource(\n ctx: MemoryContext,\n {\n resourceId,\n workingMemory,\n metadata,\n }: {\n resourceId: string;\n workingMemory?: string;\n metadata?: Record<string, unknown>;\n },\n): Promise<StorageResourceType> {\n const existing = await ctx.getResourceById({ resourceId });\n if (!existing) {\n const resource: StorageResourceType = {\n id: resourceId,\n workingMemory,\n metadata: metadata ?? {},\n createdAt: new Date(),\n updatedAt: new Date(),\n };\n return ctx.saveResource({ resource });\n }\n\n try {\n return await ctx.db.tx(async (_client, connection) => {\n // Re-read under FOR UPDATE so a concurrent updateResource on the same id\n // cannot interleave between this lock and the MERGE below, which would\n // otherwise let one writer's workingMemory/metadata clobber the other's.\n const result = await connection.execute<ObjectRow>(\n `${resourceSelect()} FROM ${table(ctx, TABLE_RESOURCES)} WHERE id = :resourceId FOR UPDATE`,\n { resourceId },\n executeOptions(),\n );\n const row = rows(result)[0] as ResourceRow | undefined;\n const locked = row ? parseResource(row) : existing;\n\n const updated: StorageResourceType = {\n ...locked,\n workingMemory: workingMemory !== undefined ? workingMemory : locked.workingMemory,\n metadata: metadata ? { ...(locked.metadata ?? {}), ...metadata } : locked.metadata,\n updatedAt: new Date(),\n };\n\n await mergeResourceRow(ctx, connection, updated);\n return updated;\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError('UPDATE_RESOURCE', 'FAILED', { resourceId }, error);\n }\n}\n\n/**\n * Upserts one resource row against the given raw connection. Shared by\n * `saveResource` (auto-commit) and `updateResource`, which runs this inside\n * the SAME transaction as the FOR UPDATE lock above, so the merge sees and\n * replaces exactly the row it locked.\n */\nasync function mergeResourceRow(\n ctx: Pick<MemoryContext, 'schemaName'>,\n connection: Connection,\n resource: StorageResourceType,\n): Promise<void> {\n await connection.execute(\n `\n MERGE INTO ${table(ctx, TABLE_RESOURCES)} target\n USING (\n SELECT\n :id AS id,\n :workingMemory AS working_memory,\n :metadata AS metadata,\n :createdAt AS created_at,\n :updatedAt AS updated_at\n FROM dual\n ) source\n ON (target.id = source.id)\n WHEN MATCHED THEN UPDATE SET\n target.${RESOURCE_WORKING_MEMORY} = source.working_memory,\n target.metadata = source.metadata,\n target.${RESOURCE_UPDATED_AT} = source.updated_at\n WHEN NOT MATCHED THEN INSERT (\n id,\n ${RESOURCE_WORKING_MEMORY},\n metadata,\n ${RESOURCE_CREATED_AT},\n ${RESOURCE_UPDATED_AT}\n ) VALUES (\n source.id,\n source.working_memory,\n source.metadata,\n source.created_at,\n source.updated_at\n )`,\n {\n id: resource.id,\n workingMemory: optionalClobStringBind(resource.workingMemory),\n metadata: jsonBind(resource.metadata ?? {}),\n createdAt: resource.createdAt ?? new Date(),\n updatedAt: resource.updatedAt ?? new Date(),\n },\n );\n}\n\nfunction parseResource(row: ResourceRow): StorageResourceType {\n const workingMemory = parseOptionalString(row.workingMemory);\n return {\n id: String(row.id),\n workingMemory,\n metadata: parseJson(row.metadata),\n createdAt: toDate(row.createdAt),\n updatedAt: toDate(row.updatedAt),\n };\n}\n\nfunction resourceSelect(): string {\n return `SELECT id AS \"id\", ${RESOURCE_WORKING_MEMORY} AS \"workingMemory\", metadata AS \"metadata\", ${RESOURCE_CREATED_AT} AS \"createdAt\", ${RESOURCE_UPDATED_AT} AS \"updatedAt\"`;\n}\n","import { ErrorCategory, MastraError } from '@mastra/core/error';\nimport type { StorageThreadType } from '@mastra/core/memory';\nimport { calculatePagination, normalizePerPage, TABLE_MESSAGES, TABLE_THREADS } from '@mastra/core/storage';\nimport type { StorageListThreadsInput, StorageListThreadsOutput } from '@mastra/core/storage';\n\nimport { asBindParameters, executeOptions, jsonBind, rows } from '../../../shared/connection';\nimport type { ObjectRow } from '../../../shared/connection';\nimport { assertJsonPath } from '../../../vector/identifiers';\nimport type { OracleTxClient } from '../../db';\nimport { toDate } from '../../domain-utils';\nimport { THREAD_CREATED_AT, THREAD_RESOURCE_ID, THREAD_UPDATED_AT } from './schema';\nimport {\n deleteSemanticRecallVectors,\n optionalStringBind,\n paginationClause,\n parseJson,\n parseOptionalString,\n storageError,\n table,\n} from './utils';\nimport type { MemoryContext } from './utils';\n\n// Thread CRUD + listing. Thread deletion also sweeps semantic-recall vectors\n// and messages belonging to the thread (see utils.ts for the vector cleanup).\n\ntype ThreadRow = {\n id: string;\n resourceId: string;\n title?: string | null;\n metadata?: unknown;\n createdAt: Date | string;\n updatedAt: Date | string;\n};\n\nexport async function getThreadById(\n ctx: MemoryContext,\n { threadId, resourceId }: { threadId: string; resourceId?: string },\n): Promise<StorageThreadType | null> {\n try {\n return await ctx.db.withConnection(async connection => {\n const binds: Record<string, unknown> = { threadId };\n const conditions = ['id = :threadId'];\n if (resourceId !== undefined) {\n conditions.push(`${THREAD_RESOURCE_ID} = :resourceId`);\n binds.resourceId = resourceId;\n }\n\n const result = await connection.execute<ObjectRow>(\n `${threadSelect()} FROM ${table(ctx, TABLE_THREADS)} WHERE ${conditions.join(' AND ')}`,\n asBindParameters(binds),\n executeOptions(),\n );\n const row = rows(result)[0] as ThreadRow | undefined;\n return row ? parseThread(row) : null;\n });\n } catch (error) {\n throw storageError('GET_THREAD_BY_ID', 'FAILED', { threadId }, error);\n }\n}\n\nexport async function saveThread(\n ctx: MemoryContext,\n { thread }: { thread: StorageThreadType },\n): Promise<StorageThreadType> {\n try {\n await mergeThreadRow(ctx, ctx.db, thread);\n return thread;\n } catch (error) {\n throw storageError('SAVE_THREAD', 'FAILED', { threadId: thread.id }, error);\n }\n}\n\n/**\n * Upserts one thread row against the given client. Only `saveThread` may\n * upsert; `cloneThread` (memory/index.ts) uses the insert-only\n * `insertThreadRow` below so a concurrent clone can never overwrite an\n * existing destination thread.\n */\nexport async function mergeThreadRow(\n ctx: Pick<MemoryContext, 'schemaName'>,\n client: Pick<OracleTxClient, 'none'>,\n thread: StorageThreadType,\n): Promise<void> {\n // Upsert threads because titles and metadata are often produced after the\n // first message, while the thread id must remain stable for memory lookups.\n await client.none(\n `\n MERGE INTO ${table(ctx, TABLE_THREADS)} target\n USING (\n SELECT\n :id AS id,\n :resourceId AS resource_id,\n :title AS title,\n :metadata AS metadata,\n :createdAt AS created_at,\n :updatedAt AS updated_at\n FROM dual\n ) source\n ON (target.id = source.id)\n WHEN MATCHED THEN UPDATE SET\n target.${THREAD_RESOURCE_ID} = source.resource_id,\n target.title = source.title,\n target.metadata = source.metadata,\n target.${THREAD_UPDATED_AT} = source.updated_at\n WHEN NOT MATCHED THEN INSERT (\n id,\n ${THREAD_RESOURCE_ID},\n title,\n metadata,\n ${THREAD_CREATED_AT},\n ${THREAD_UPDATED_AT}\n ) VALUES (\n source.id,\n source.resource_id,\n source.title,\n source.metadata,\n source.created_at,\n source.updated_at\n )`,\n {\n id: thread.id,\n resourceId: thread.resourceId,\n title: optionalStringBind(thread.title),\n metadata: jsonBind(thread.metadata ?? {}),\n createdAt: thread.createdAt ?? new Date(),\n updatedAt: thread.updatedAt ?? new Date(),\n },\n );\n}\n\n/**\n * Insert-only variant of `mergeThreadRow` for `cloneThread` (memory/index.ts).\n * The clone destination must be brand new, so an existing row has to fail the\n * INSERT (ORA-00001) — which the caller translates to DESTINATION_EXISTS —\n * instead of being silently updated by a MERGE. Runs against the caller's\n * transaction client, alongside the cloned-messages insert, so a failure\n * partway through rolls back the whole clone.\n */\nexport async function insertThreadRow(\n ctx: Pick<MemoryContext, 'schemaName'>,\n client: Pick<OracleTxClient, 'none'>,\n thread: StorageThreadType,\n): Promise<void> {\n await client.none(\n `\n INSERT INTO ${table(ctx, TABLE_THREADS)} (\n id,\n ${THREAD_RESOURCE_ID},\n title,\n metadata,\n ${THREAD_CREATED_AT},\n ${THREAD_UPDATED_AT}\n ) VALUES (\n :id,\n :resourceId,\n :title,\n :metadata,\n :createdAt,\n :updatedAt\n )`,\n {\n id: thread.id,\n resourceId: thread.resourceId,\n title: optionalStringBind(thread.title),\n metadata: jsonBind(thread.metadata ?? {}),\n createdAt: thread.createdAt ?? new Date(),\n updatedAt: thread.updatedAt ?? new Date(),\n },\n );\n}\n\nexport async function updateThread(\n ctx: MemoryContext,\n {\n id,\n title,\n metadata,\n }: {\n id: string;\n title?: string;\n metadata?: Record<string, unknown>;\n },\n): Promise<StorageThreadType> {\n const existingThread = await ctx.getThreadById({ threadId: id });\n if (!existingThread) {\n throw storageError(\n 'UPDATE_THREAD',\n 'FAILED',\n { threadId: id, title },\n new Error(`Thread ${id} not found`),\n ErrorCategory.USER,\n );\n }\n\n const mergedMetadata = { ...(existingThread.metadata ?? {}), ...metadata };\n const updatedAt = new Date();\n\n try {\n await ctx.db.none(\n `\n UPDATE ${table(ctx, TABLE_THREADS)}\n SET title = COALESCE(:title, title),\n metadata = :metadata,\n ${THREAD_UPDATED_AT} = :updatedAt\n WHERE id = :id`,\n {\n id,\n title: optionalStringBind(title),\n metadata: jsonBind(mergedMetadata),\n updatedAt,\n },\n );\n\n const updatedThread = await ctx.getThreadById({ threadId: id });\n if (!updatedThread) {\n throw storageError(\n 'UPDATE_THREAD',\n 'FAILED',\n { threadId: id, title },\n new Error(`Thread ${id} not found after update`),\n );\n }\n return updatedThread;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError('UPDATE_THREAD', 'FAILED', { threadId: id, title }, error);\n }\n}\n\nexport async function deleteThread(ctx: MemoryContext, { threadId }: { threadId: string }): Promise<void> {\n try {\n await ctx.db.tx(async client => {\n await client.none(`DELETE FROM ${table(ctx, TABLE_MESSAGES)} WHERE thread_id = :threadId`, { threadId });\n // Semantic recall stores embeddings outside the messages table; delete\n // those vector rows in the same transaction as thread/message cleanup.\n await deleteSemanticRecallVectors(ctx, client, threadId);\n await client.none(`DELETE FROM ${table(ctx, TABLE_THREADS)} WHERE id = :threadId`, { threadId });\n });\n } catch (error) {\n throw storageError('DELETE_THREAD', 'FAILED', { threadId }, error);\n }\n}\n\nexport async function listThreads(\n ctx: MemoryContext,\n args: StorageListThreadsInput,\n): Promise<StorageListThreadsOutput> {\n const { page = 0, perPage: perPageInput, orderBy, filter } = args;\n\n try {\n ctx.validatePaginationInput(page, perPageInput ?? 100);\n ctx.validateMetadataKeys(filter?.metadata);\n } catch (error) {\n throw storageError('LIST_THREADS', 'INVALID_INPUT', { page }, error, ErrorCategory.USER);\n }\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n try {\n return await ctx.db.withConnection(async connection => {\n const { field, direction } = ctx.parseOrderBy(orderBy);\n const { sql: whereClause, binds } = threadWhereClause(filter);\n const baseQuery = `FROM ${table(ctx, TABLE_THREADS)} ${whereClause}`;\n // Count before fetching rows so the response can match Mastra's\n // pagination contract even when this page is empty.\n const countResult = await connection.execute<ObjectRow>(\n `SELECT COUNT(*) AS \"count\" ${baseQuery}`,\n asBindParameters(binds),\n executeOptions(),\n );\n const total = Number(rows(countResult)[0]?.count ?? 0);\n\n if (total === 0 || perPage === 0) {\n return { threads: [], total, page, perPage: perPageForResponse, hasMore: false };\n }\n\n const pagination = paginationClause(perPageInput, perPage, offset);\n const result = await connection.execute<ObjectRow>(\n `${threadSelect()} ${baseQuery} ORDER BY ${threadOrderColumn(field)} ${direction} ${pagination}`,\n asBindParameters(binds),\n executeOptions(),\n );\n const threads = rows(result).map(row => parseThread(row as ThreadRow));\n\n return {\n threads,\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n });\n } catch (error) {\n throw storageError('LIST_THREADS', 'FAILED', { page }, error);\n }\n}\n\nfunction threadWhereClause(filter?: StorageListThreadsInput['filter']): {\n sql: string;\n binds: Record<string, unknown>;\n} {\n const conditions: string[] = [];\n const binds: Record<string, unknown> = {};\n if (filter?.resourceId) {\n conditions.push(`${THREAD_RESOURCE_ID} = :resourceId`);\n binds.resourceId = filter.resourceId;\n }\n if (filter?.metadata) {\n let index = 0;\n for (const [key, value] of Object.entries(filter.metadata)) {\n const bindName = `metadata${index++}`;\n conditions.push(`${jsonValue('metadata', key, value)} = :${bindName}`);\n binds[bindName] = normalizeMetadataBind(value);\n }\n }\n return { sql: conditions.length ? `WHERE ${conditions.join(' AND ')}` : '', binds };\n}\n\nfunction jsonValue(column: string, path: string, comparisonValue: unknown): string {\n const jsonPath = assertJsonPath(path);\n if (typeof comparisonValue === 'number') {\n return `JSON_VALUE(${column}, '${jsonPath}' RETURNING NUMBER NULL ON ERROR)`;\n }\n return `JSON_VALUE(${column}, '${jsonPath}' RETURNING VARCHAR2(4000) NULL ON ERROR)`;\n}\n\nfunction normalizeMetadataBind(value: unknown): unknown {\n if (value instanceof Date) return value.toISOString();\n if (typeof value === 'boolean') return String(value);\n return value;\n}\n\nfunction parseThread(row: ThreadRow): StorageThreadType {\n return {\n id: String(row.id),\n resourceId: String(row.resourceId),\n title: parseOptionalString(row.title),\n metadata: parseJson(row.metadata),\n createdAt: toDate(row.createdAt),\n updatedAt: toDate(row.updatedAt),\n };\n}\n\nfunction threadSelect(): string {\n return `SELECT id AS \"id\", ${THREAD_RESOURCE_ID} AS \"resourceId\", title AS \"title\", metadata AS \"metadata\", ${THREAD_CREATED_AT} AS \"createdAt\", ${THREAD_UPDATED_AT} AS \"updatedAt\"`;\n}\n\nfunction threadOrderColumn(field: string): string {\n return field === 'updatedAt' ? THREAD_UPDATED_AT : THREAD_CREATED_AT;\n}\n","import { randomUUID } from 'node:crypto';\n\nimport type { MastraMessageContentV2 } from '@mastra/core/agent';\nimport { ErrorCategory, MastraError } from '@mastra/core/error';\nimport type { MastraDBMessage, StorageThreadType } from '@mastra/core/memory';\nimport {\n MemoryStorage,\n TABLE_MESSAGES,\n TABLE_OBSERVATIONAL_MEMORY,\n TABLE_RESOURCES,\n TABLE_THREADS,\n} from '@mastra/core/storage';\nimport type {\n CreateObservationalMemoryInput,\n CreateReflectionGenerationInput,\n ObservationalMemoryHistoryOptions,\n ObservationalMemoryRecord,\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 UpdateActiveObservationsInput,\n UpdateBufferedObservationsInput,\n UpdateBufferedReflectionInput,\n UpdateObservationalMemoryConfigInput,\n} from '@mastra/core/storage';\n\nimport { isOracleErrorCode, normalizeBatchSize } from '../../../shared/connection';\nimport { normalizeIdentifier } from '../../../vector/identifiers';\nimport { filterIndexesForTables, OracleDB } from '../../db';\nimport type { OracleCreateIndexOptions } from '../../db';\nimport type { OracleDomainConfig } from '../../types';\nimport {\n deleteMessages,\n insertMessageBatch,\n listMessages,\n listMessagesByResourceId,\n listMessagesById,\n saveMessages,\n updateMessages,\n} from './messages';\nimport {\n clearObservationalMemory,\n createReflectionGeneration,\n getObservationalMemory,\n getObservationalMemoryHistory,\n initializeObservationalMemory,\n insertObservationalMemoryRecord,\n setBufferingObservationFlag,\n setBufferingReflectionFlag,\n setObservingFlag,\n setPendingMessageTokens,\n setReflectingFlag,\n updateActiveObservations,\n updateObservationalMemoryConfig,\n} from './observational';\nimport {\n swapBufferedReflectionToActive,\n swapBufferedToActive,\n updateBufferedObservations,\n updateBufferedReflection,\n} from './observational-buffering';\nimport { getResourceById, saveResource, updateResource } from './resources';\nimport { clearAllMemoryTables, initMemorySchema } from './schema';\nimport { deleteThread, getThreadById, insertThreadRow, listThreads, saveThread, updateThread } from './threads';\nimport { storageError } from './utils';\nimport type { MemoryContext } from './utils';\n\n// Memory is the highest-traffic storage domain. It owns conversation threads,\n// messages, resources/working memory, and observational memory state. This\n// file is a thin facade: `MemoryOracle` builds the shared `MemoryContext` and\n// delegates to schema.ts / threads.ts / messages.ts / resources.ts /\n// observational.ts / observational-buffering.ts, which hold the actual SQL.\nconst DEFAULT_MESSAGE_SAVE_BATCH_SIZE = 200;\nconst DEFAULT_VECTOR_REGISTRY_TABLE = 'MASTRA_VECTOR_INDEXES';\n\nexport class MemoryOracle extends MemoryStorage {\n override readonly supportsPartialThreadUpdate = true;\n readonly supportsObservationalMemory = true;\n // Memory owns all tables needed for normal message history plus observational memory state.\n static readonly MANAGED_TABLES = [\n TABLE_THREADS,\n TABLE_MESSAGES,\n TABLE_RESOURCES,\n TABLE_OBSERVATIONAL_MEMORY,\n ] as const;\n\n private readonly db: OracleDB;\n private readonly schemaName?: string;\n private readonly messageBatchSize: number;\n private readonly skipDefaultIndexes?: boolean;\n private readonly indexes: OracleCreateIndexOptions[];\n private readonly vectorRegistryTableName: string;\n\n constructor(config: OracleDomainConfig) {\n super();\n this.db = new OracleDB(config);\n this.schemaName = config.schemaName;\n this.messageBatchSize = normalizeBatchSize(\n config.messageBatchSize,\n 'messageBatchSize',\n DEFAULT_MESSAGE_SAVE_BATCH_SIZE,\n );\n this.skipDefaultIndexes = config.skipDefaultIndexes;\n this.indexes = filterIndexesForTables(config.indexes, MemoryOracle.MANAGED_TABLES);\n this.vectorRegistryTableName = config.vectorRegistryTableName\n ? normalizeIdentifier(config.vectorRegistryTableName, 'vector registry table name')\n : DEFAULT_VECTOR_REGISTRY_TABLE;\n }\n\n // Built fresh on every call (not cached) so tests/callers that swap `db`\n // after construction, or a later `__setLogger`, are always honored.\n private get ctx(): MemoryContext {\n return {\n db: this.db,\n schemaName: this.schemaName,\n messageBatchSize: this.messageBatchSize,\n vectorRegistryTableName: this.vectorRegistryTableName,\n skipDefaultIndexes: this.skipDefaultIndexes,\n indexes: this.indexes,\n logger: this.logger,\n validatePaginationInput: this.validatePaginationInput.bind(this),\n validateMetadataKeys: this.validateMetadataKeys.bind(this),\n parseOrderBy: this.parseOrderBy.bind(this),\n deepMergeConfig: this.deepMergeConfig.bind(this),\n getThreadById: this.getThreadById.bind(this),\n listMessagesById: this.listMessagesById.bind(this),\n getResourceById: this.getResourceById.bind(this),\n saveResource: this.saveResource.bind(this),\n };\n }\n\n async init(): Promise<void> {\n await initMemorySchema(this.ctx);\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await clearAllMemoryTables(this.ctx);\n }\n\n async getThreadById(args: { threadId: string; resourceId?: string }): Promise<StorageThreadType | null> {\n return getThreadById(this.ctx, args);\n }\n\n async saveThread(args: { thread: StorageThreadType }): Promise<StorageThreadType> {\n return saveThread(this.ctx, args);\n }\n\n async updateThread(args: {\n id: string;\n title?: string;\n metadata?: Record<string, unknown>;\n }): Promise<StorageThreadType> {\n return updateThread(this.ctx, args);\n }\n\n async deleteThread(args: { threadId: string }): Promise<void> {\n return deleteThread(this.ctx, args);\n }\n\n async listThreads(args: StorageListThreadsInput): Promise<StorageListThreadsOutput> {\n return listThreads(this.ctx, args);\n }\n\n async listMessagesById(args: { messageIds: string[] }): Promise<{ messages: MastraDBMessage[] }> {\n return listMessagesById(this.ctx, args);\n }\n\n async listMessages(args: StorageListMessagesInput): Promise<StorageListMessagesOutput> {\n return listMessages(this.ctx, args);\n }\n\n async listMessagesByResourceId(args: StorageListMessagesByResourceIdInput): Promise<StorageListMessagesOutput> {\n return listMessagesByResourceId(this.ctx, args);\n }\n\n async saveMessages(args: { messages: MastraDBMessage[] }): Promise<{ messages: MastraDBMessage[] }> {\n return saveMessages(this.ctx, args);\n }\n\n async updateMessages(args: {\n messages: (Partial<Omit<MastraDBMessage, 'createdAt'>> & {\n id: string;\n content?: { metadata?: MastraMessageContentV2['metadata']; content?: MastraMessageContentV2['content'] };\n })[];\n }): Promise<MastraDBMessage[]> {\n return updateMessages(this.ctx, args);\n }\n\n async deleteMessages(messageIds: string[]): Promise<void> {\n return deleteMessages(this.ctx, messageIds);\n }\n\n async getResourceById(args: { resourceId: string }): Promise<StorageResourceType | null> {\n return getResourceById(this.ctx, args);\n }\n\n async saveResource(args: { resource: StorageResourceType }): Promise<StorageResourceType> {\n return saveResource(this.ctx, args);\n }\n\n async updateResource(args: {\n resourceId: string;\n workingMemory?: string;\n metadata?: Record<string, unknown>;\n }): Promise<StorageResourceType> {\n return updateResource(this.ctx, args);\n }\n\n async cloneThread(args: StorageCloneThreadInput): Promise<StorageCloneThreadOutput> {\n const sourceThread = await this.getThreadById({ threadId: args.sourceThreadId });\n if (!sourceThread) {\n throw storageError(\n 'CLONE_THREAD',\n 'FAILED',\n { threadId: args.sourceThreadId },\n new Error(`Thread ${args.sourceThreadId} not found`),\n ErrorCategory.USER,\n );\n }\n\n const sourceMessages = await this.messagesForClone(args);\n const newThreadId = args.newThreadId ?? randomUUID();\n const existingDestination = await this.getThreadById({ threadId: newThreadId });\n if (existingDestination) {\n throw storageError(\n 'CLONE_THREAD',\n 'DESTINATION_EXISTS',\n { threadId: newThreadId },\n new Error(`Thread ${newThreadId} already exists`),\n ErrorCategory.USER,\n );\n }\n const now = new Date();\n const cloneMetadata: ThreadCloneMetadata = {\n sourceThreadId: sourceThread.id,\n clonedAt: now,\n lastMessageId: sourceMessages.at(-1)?.id,\n };\n const thread: StorageThreadType = {\n id: newThreadId,\n resourceId: args.resourceId ?? sourceThread.resourceId,\n title: args.title ?? `${sourceThread.title ?? 'Thread'} (clone)`,\n metadata: { ...(sourceThread.metadata ?? {}), ...args.metadata, clone: cloneMetadata },\n createdAt: now,\n updatedAt: now,\n };\n\n const messageIdMap: Record<string, string> = {};\n // Preserve a source-to-clone id map so callers can reconnect tool calls,\n // UI selections, or traces to the cloned message ids.\n const clonedMessages = sourceMessages.map(message => {\n const newMessageId = randomUUID();\n messageIdMap[message.id] = newMessageId;\n return {\n ...message,\n id: newMessageId,\n threadId: newThreadId,\n resourceId: thread.resourceId,\n createdAt: new Date(message.createdAt),\n } satisfies MastraDBMessage;\n });\n\n try {\n // Insert the destination thread and its cloned messages in one\n // transaction: a failure partway through (e.g. a message insert error)\n // must not leave an orphaned, message-less clone of the thread committed.\n await this.db.tx(async client => {\n try {\n // Insert-only, never MERGE: the existence check above is only a\n // friendly fast path, so a concurrent clone that won the race must\n // surface here as a unique-key violation instead of silently\n // updating the winner's thread and mixing both message batches.\n await insertThreadRow(this.ctx, client, thread);\n } catch (error) {\n if (isOracleErrorCode(error, [-1])) {\n throw storageError(\n 'CLONE_THREAD',\n 'DESTINATION_EXISTS',\n { threadId: newThreadId },\n error,\n ErrorCategory.USER,\n );\n }\n throw error;\n }\n if (clonedMessages.length) await insertMessageBatch(this.ctx, client, clonedMessages);\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError('CLONE_THREAD', 'FAILED', { threadId: newThreadId }, error);\n }\n\n return { thread, clonedMessages, messageIdMap };\n }\n\n private async messagesForClone(args: StorageCloneThreadInput): Promise<MastraDBMessage[]> {\n const options = args.options;\n const messageIds = options?.messageFilter?.messageIds;\n if (messageIds?.length) {\n return (await this.listMessagesById({ messageIds })).messages.filter(\n message => message.threadId === args.sourceThreadId,\n );\n }\n\n const output = await this.listMessages({\n threadId: args.sourceThreadId,\n perPage: false,\n filter: {\n dateRange: {\n start: options?.messageFilter?.startDate,\n end: options?.messageFilter?.endDate,\n },\n },\n orderBy: { field: 'createdAt', direction: 'ASC' },\n });\n\n if (options?.messageLimit && options.messageLimit > 0) {\n return output.messages.slice(-options.messageLimit);\n }\n return output.messages;\n }\n\n // ============================================\n // Observational Memory\n // ============================================\n\n async getObservationalMemory(threadId: string | null, resourceId: string): Promise<ObservationalMemoryRecord | null> {\n return getObservationalMemory(this.ctx, threadId, resourceId);\n }\n\n async getObservationalMemoryHistory(\n threadId: string | null,\n resourceId: string,\n limit = 10,\n options?: ObservationalMemoryHistoryOptions,\n ): Promise<ObservationalMemoryRecord[]> {\n return getObservationalMemoryHistory(this.ctx, threadId, resourceId, limit, options);\n }\n\n async initializeObservationalMemory(input: CreateObservationalMemoryInput): Promise<ObservationalMemoryRecord> {\n return initializeObservationalMemory(this.ctx, input);\n }\n\n async insertObservationalMemoryRecord(record: ObservationalMemoryRecord): Promise<void> {\n return insertObservationalMemoryRecord(this.ctx, record);\n }\n\n async updateActiveObservations(input: UpdateActiveObservationsInput): Promise<void> {\n return updateActiveObservations(this.ctx, input);\n }\n\n async createReflectionGeneration(input: CreateReflectionGenerationInput): Promise<ObservationalMemoryRecord> {\n return createReflectionGeneration(this.ctx, input);\n }\n\n async setReflectingFlag(id: string, isReflecting: boolean): Promise<void> {\n return setReflectingFlag(this.ctx, id, isReflecting);\n }\n\n async setObservingFlag(id: string, isObserving: boolean): Promise<void> {\n return setObservingFlag(this.ctx, id, isObserving);\n }\n\n async setBufferingObservationFlag(id: string, isBuffering: boolean, lastBufferedAtTokens?: number): Promise<void> {\n return setBufferingObservationFlag(this.ctx, id, isBuffering, lastBufferedAtTokens);\n }\n\n async setBufferingReflectionFlag(id: string, isBuffering: boolean): Promise<void> {\n return setBufferingReflectionFlag(this.ctx, id, isBuffering);\n }\n\n async clearObservationalMemory(threadId: string | null, resourceId: string): Promise<void> {\n return clearObservationalMemory(this.ctx, threadId, resourceId);\n }\n\n async setPendingMessageTokens(id: string, tokenCount: number): Promise<void> {\n return setPendingMessageTokens(this.ctx, id, tokenCount);\n }\n\n async updateObservationalMemoryConfig(input: UpdateObservationalMemoryConfigInput): Promise<void> {\n return updateObservationalMemoryConfig(this.ctx, input);\n }\n\n async updateBufferedObservations(input: UpdateBufferedObservationsInput): Promise<void> {\n return updateBufferedObservations(this.ctx, input);\n }\n\n async swapBufferedToActive(input: SwapBufferedToActiveInput): Promise<SwapBufferedToActiveResult> {\n return swapBufferedToActive(this.ctx, input);\n }\n\n async updateBufferedReflection(input: UpdateBufferedReflectionInput): Promise<void> {\n return updateBufferedReflection(this.ctx, input);\n }\n\n async swapBufferedReflectionToActive(input: SwapBufferedReflectionToActiveInput): Promise<ObservationalMemoryRecord> {\n return swapBufferedReflectionToActive(this.ctx, input);\n }\n}\n","import { ErrorCategory } from '@mastra/core/error';\nimport type { MastraError } from '@mastra/core/error';\nimport { TABLE_SCHEMAS, TABLE_SCORERS, TABLE_SPANS } from '@mastra/core/storage';\n\nimport { safeJsonValue } from '../../../shared/connection';\nimport type { OracleCreateIndexOptions } from '../../db';\nimport { createOracleStorageError } from '../../domain-utils';\n\n// Observability persists spans and log events for Studio/API trace inspection,\n// keeping large structured payloads in Oracle JSON/CLOB-friendly columns.\nexport const STORE_NAME = 'ORACLEDB';\nexport const SPAN_SCHEMA = TABLE_SCHEMAS[TABLE_SPANS];\nexport const SCORE_SCHEMA = TABLE_SCHEMAS[TABLE_SCORERS];\nexport const LOG_EVENTS_TABLE = 'mastra_log_events';\nconst SIMPLE_IDENTIFIER = /^[A-Za-z][A-Za-z0-9_]*$/;\nconst LOWERCASE_SQL_IDENTIFIER = /^[a-z][a-z0-9_]*$/;\n\nexport type SpanColumn = keyof typeof SPAN_SCHEMA & string;\nexport type SpanRow = Record<string, unknown>;\nexport type LogColumn = (typeof LOG_COLUMNS)[number];\nexport type LogRow = Record<string, unknown>;\nexport type SharedContextColumn = 'entityType' | 'entityName' | 'serviceName' | 'environment';\nexport type ScoreRow = Record<string, unknown>;\n\nexport const SPAN_COLUMNS = Object.keys(SPAN_SCHEMA) as SpanColumn[];\nexport const SPAN_KEY_COLUMNS = new Set<SpanColumn>(['traceId', 'spanId']);\n// Column sets are derived once from Mastra schemas so mutation builders can bind each type correctly.\nexport const SPAN_JSON_COLUMNS = new Set(\n SPAN_COLUMNS.filter(columnName => SPAN_SCHEMA[columnName]?.type === 'jsonb'),\n) as ReadonlySet<SpanColumn>;\nexport const SPAN_TIMESTAMP_COLUMNS = new Set(\n SPAN_COLUMNS.filter(columnName => SPAN_SCHEMA[columnName]?.type === 'timestamp'),\n) as ReadonlySet<SpanColumn>;\nexport const SPAN_BOOLEAN_COLUMNS = new Set(\n SPAN_COLUMNS.filter(columnName => SPAN_SCHEMA[columnName]?.type === 'boolean'),\n) as ReadonlySet<SpanColumn>;\nexport const SPAN_NULLABLE_COLUMNS = SPAN_COLUMNS.filter(columnName => SPAN_SCHEMA[columnName]?.nullable);\n\nexport const LIGHT_SPAN_COLUMNS = [\n 'traceId',\n 'spanId',\n 'parentSpanId',\n 'name',\n 'entityType',\n 'entityId',\n 'entityName',\n 'spanType',\n 'error',\n 'isEvent',\n 'startedAt',\n 'endedAt',\n 'createdAt',\n 'updatedAt',\n] as const satisfies readonly SpanColumn[];\n\nexport const FILTER_TEXT_COLUMNS = [\n 'traceId',\n 'spanType',\n 'entityType',\n 'entityId',\n 'entityName',\n 'entityVersionId',\n 'parentEntityType',\n 'parentEntityId',\n 'parentEntityName',\n 'parentEntityVersionId',\n 'rootEntityType',\n 'rootEntityId',\n 'rootEntityName',\n 'rootEntityVersionId',\n 'experimentId',\n 'userId',\n 'organizationId',\n 'resourceId',\n 'runId',\n 'sessionId',\n 'threadId',\n 'requestId',\n 'environment',\n 'source',\n 'serviceName',\n] as const satisfies readonly SpanColumn[];\n\nexport const LOG_COLUMNS = [\n 'logId',\n 'timestamp',\n 'level',\n 'message',\n 'data',\n 'traceId',\n 'spanId',\n 'entityType',\n 'entityId',\n 'entityName',\n 'entityVersionId',\n 'parentEntityType',\n 'parentEntityId',\n 'parentEntityName',\n 'parentEntityVersionId',\n 'rootEntityType',\n 'rootEntityId',\n 'rootEntityName',\n 'rootEntityVersionId',\n 'userId',\n 'organizationId',\n 'resourceId',\n 'runId',\n 'sessionId',\n 'threadId',\n 'requestId',\n 'environment',\n 'executionSource',\n 'source',\n 'serviceName',\n 'experimentId',\n 'tags',\n 'metadata',\n 'scope',\n] as const;\n\nexport const LOG_JSON_COLUMNS = new Set<LogColumn>(['data', 'tags', 'metadata', 'scope']);\nexport const LOG_TEXT_FILTER_COLUMNS = [\n 'traceId',\n 'spanId',\n 'entityType',\n 'entityId',\n 'entityName',\n 'entityVersionId',\n 'parentEntityType',\n 'parentEntityId',\n 'parentEntityName',\n 'parentEntityVersionId',\n 'rootEntityType',\n 'rootEntityId',\n 'rootEntityName',\n 'rootEntityVersionId',\n 'experimentId',\n 'userId',\n 'organizationId',\n 'resourceId',\n 'runId',\n 'sessionId',\n 'threadId',\n 'requestId',\n 'environment',\n 'serviceName',\n] as const satisfies readonly LogColumn[];\n\nexport const SCORE_TEXT_FILTER_COLUMNS = [\n 'traceId',\n 'spanId',\n 'runId',\n 'entityType',\n 'entityId',\n 'resourceId',\n 'threadId',\n] as const;\n\nexport const SCORE_METADATA_FILTER_FIELDS = [\n 'entityName',\n 'entityVersionId',\n 'parentEntityType',\n 'parentEntityName',\n 'parentEntityVersionId',\n 'rootEntityType',\n 'rootEntityName',\n 'rootEntityVersionId',\n 'userId',\n 'organizationId',\n 'sessionId',\n 'requestId',\n 'environment',\n 'serviceName',\n 'executionSource',\n] as const;\n\nexport function col(columnName: SpanColumn): string {\n if (!SPAN_SCHEMA[columnName]) {\n throw new Error(`Unknown span column: ${columnName}`);\n }\n if (!SIMPLE_IDENTIFIER.test(columnName)) {\n throw new Error(`Invalid span column: ${columnName}`);\n }\n if (LOWERCASE_SQL_IDENTIFIER.test(columnName)) return columnName;\n return `\"${columnName}\"`;\n}\n\nexport function logCol(columnName: LogColumn): string {\n if (!LOG_COLUMNS.includes(columnName)) {\n throw new Error(`Unknown log column: ${columnName}`);\n }\n if (!SIMPLE_IDENTIFIER.test(columnName)) {\n throw new Error(`Invalid log column: ${columnName}`);\n }\n return `\"${columnName}\"`;\n}\n\nexport function scoreCol(columnName: string): string {\n if (!SCORE_SCHEMA[columnName]) {\n throw new Error(`Unknown score column: ${columnName}`);\n }\n if (!SIMPLE_IDENTIFIER.test(columnName)) {\n throw new Error(`Invalid score column: ${columnName}`);\n }\n if (LOWERCASE_SQL_IDENTIFIER.test(columnName)) return columnName;\n return `\"${columnName}\"`;\n}\n\nexport function qcol(tableAlias: string | undefined, columnName: SpanColumn): string {\n const column = col(columnName);\n return tableAlias ? `${tableAlias}.${column}` : column;\n}\n\nexport function logQcol(tableAlias: string | undefined, columnName: LogColumn): string {\n const column = logCol(columnName);\n return tableAlias ? `${tableAlias}.${column}` : column;\n}\n\nexport function scoreQcol(tableAlias: string | undefined, columnName: string): string {\n const column = scoreCol(columnName);\n return tableAlias ? `${tableAlias}.${column}` : column;\n}\n\nexport function getDefaultObservabilityIndexDefinitions(\n indexName: (name: string) => string,\n): OracleCreateIndexOptions[] {\n return [\n {\n name: indexName('MASTRA_AI_SPANS_TRACEID_STARTEDAT'),\n table: TABLE_SPANS,\n columns: ['traceId', 'startedAt DESC'],\n },\n {\n name: indexName('MASTRA_AI_SPANS_PARENTSPANID_STARTEDAT'),\n table: TABLE_SPANS,\n columns: ['parentSpanId', 'startedAt DESC'],\n },\n {\n name: indexName('MASTRA_AI_SPANS_NAME'),\n table: TABLE_SPANS,\n columns: ['name'],\n },\n {\n name: indexName('MASTRA_AI_SPANS_SPANTYPE_STARTEDAT'),\n table: TABLE_SPANS,\n columns: ['spanType', 'startedAt DESC'],\n },\n {\n name: indexName('MASTRA_AI_SPANS_ROOT_LOOKUP'),\n table: TABLE_SPANS,\n columns: ['traceId'],\n where: `${col('parentSpanId')} IS NULL`,\n },\n {\n name: indexName('MASTRA_AI_SPANS_ENTITYTYPE_ENTITYID'),\n table: TABLE_SPANS,\n columns: ['entityType', 'entityId'],\n },\n {\n name: indexName('MASTRA_AI_SPANS_ENTITYTYPE_ENTITYNAME'),\n table: TABLE_SPANS,\n columns: ['entityType', 'entityName'],\n },\n {\n name: indexName('MASTRA_AI_SPANS_ORGID_USERID'),\n table: TABLE_SPANS,\n columns: ['organizationId', 'userId'],\n },\n {\n name: indexName('MASTRA_LOG_EVENTS_TIMESTAMP'),\n table: LOG_EVENTS_TABLE,\n columns: ['\"timestamp\" DESC'],\n },\n {\n name: indexName('MASTRA_LOG_EVENTS_TRACE_SPAN_TS'),\n table: LOG_EVENTS_TABLE,\n columns: ['\"traceId\"', '\"spanId\"', '\"timestamp\" DESC'],\n },\n {\n name: indexName('MASTRA_LOG_EVENTS_LEVEL_TS'),\n table: LOG_EVENTS_TABLE,\n columns: ['\"level\"', '\"timestamp\" DESC'],\n },\n {\n name: indexName('MASTRA_LOG_EVENTS_ENTITY_ID'),\n table: LOG_EVENTS_TABLE,\n columns: ['\"entityType\"', '\"entityId\"'],\n },\n {\n name: indexName('MASTRA_LOG_EVENTS_ORG_USER'),\n table: LOG_EVENTS_TABLE,\n columns: ['\"organizationId\"', '\"userId\"'],\n },\n ];\n}\n\nexport function logEventsTableSql(tableName: string): string {\n return `CREATE TABLE ${tableName} (\n ${logCol('logId')} VARCHAR2(512) PRIMARY KEY,\n ${logCol('timestamp')} TIMESTAMP WITH TIME ZONE NOT NULL,\n ${logCol('level')} VARCHAR2(64) NOT NULL,\n ${logCol('message')} CLOB NOT NULL,\n ${logCol('data')} JSON,\n ${logCol('traceId')} VARCHAR2(512),\n ${logCol('spanId')} VARCHAR2(512),\n ${logCol('entityType')} VARCHAR2(512),\n ${logCol('entityId')} VARCHAR2(512),\n ${logCol('entityName')} VARCHAR2(512),\n ${logCol('entityVersionId')} VARCHAR2(512),\n ${logCol('parentEntityType')} VARCHAR2(512),\n ${logCol('parentEntityId')} VARCHAR2(512),\n ${logCol('parentEntityName')} VARCHAR2(512),\n ${logCol('parentEntityVersionId')} VARCHAR2(512),\n ${logCol('rootEntityType')} VARCHAR2(512),\n ${logCol('rootEntityId')} VARCHAR2(512),\n ${logCol('rootEntityName')} VARCHAR2(512),\n ${logCol('rootEntityVersionId')} VARCHAR2(512),\n ${logCol('userId')} VARCHAR2(512),\n ${logCol('organizationId')} VARCHAR2(512),\n ${logCol('resourceId')} VARCHAR2(512),\n ${logCol('runId')} VARCHAR2(512),\n ${logCol('sessionId')} VARCHAR2(512),\n ${logCol('threadId')} VARCHAR2(512),\n ${logCol('requestId')} VARCHAR2(512),\n ${logCol('environment')} VARCHAR2(512),\n ${logCol('executionSource')} VARCHAR2(512),\n ${logCol('source')} VARCHAR2(512),\n ${logCol('serviceName')} VARCHAR2(512),\n ${logCol('experimentId')} VARCHAR2(512),\n ${logCol('tags')} JSON,\n ${logCol('metadata')} JSON,\n ${logCol('scope')} JSON\n)`;\n}\n\n// Shared SQL-binding helpers reused by every filter builder across\n// spans.ts, logs.ts, and scores-bridge.ts.\nexport function addBind(binds: Record<string, unknown>, value: unknown): string {\n const name = `p${Object.keys(binds).length}`;\n binds[name] = value;\n return `:${name}`;\n}\n\nexport function jsonComparableValue(value: unknown): string {\n if (value === null || value === undefined) return '';\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n return JSON.stringify(safeJsonValue(value));\n}\n\n// Shared error helper so every split module (spans/logs/scores-bridge) reports\n// observability failures under the same store name and MastraError shape.\nexport function storageError(\n operation: string,\n reason: string,\n details: Record<string, string | number | boolean | undefined>,\n cause: unknown,\n category: ErrorCategory = ErrorCategory.THIRD_PARTY,\n): MastraError {\n return createOracleStorageError({ storeName: STORE_NAME, operation, reason, details, cause, category });\n}\n","import type { CreateSpanRecord, LogRecord } from '@mastra/core/storage';\nimport oracledb from 'oracledb';\n\nimport { jsonBindText } from '../../../shared/connection';\nimport { toDate } from '../../domain-utils';\nimport type { LogColumn, SpanColumn } from './schema';\nimport {\n LOG_COLUMNS,\n LOG_JSON_COLUMNS,\n SPAN_BOOLEAN_COLUMNS,\n SPAN_COLUMNS,\n SPAN_JSON_COLUMNS,\n SPAN_SCHEMA,\n SPAN_TIMESTAMP_COLUMNS,\n} from './schema';\n\nexport type SpanMutationRecord = CreateSpanRecord & { createdAt: Date; updatedAt: Date };\nexport type LogMutationRecord = LogRecord & { logId: string };\n\nexport function isIdentifierLikeColumn(columnName: string): boolean {\n return columnName === 'id' || columnName.endsWith('Id') || columnName.endsWith('_id');\n}\n\nexport function bindValue(columnName: SpanColumn, value: unknown): unknown {\n if (value === undefined) return null;\n if (SPAN_JSON_COLUMNS.has(columnName)) return jsonBindText(value ?? null);\n if (SPAN_BOOLEAN_COLUMNS.has(columnName)) return value ? 1 : 0;\n if (SPAN_TIMESTAMP_COLUMNS.has(columnName) && value != null) return toDate(value);\n return value ?? null;\n}\n\nexport function spanRecordBinds(record: SpanMutationRecord): Record<string, unknown> {\n return Object.fromEntries(\n SPAN_COLUMNS.map(columnName => [columnName, bindValue(columnName, record[columnName as keyof SpanMutationRecord])]),\n );\n}\n\nexport function bindDefsForColumns(\n columns: readonly SpanColumn[],\n): NonNullable<oracledb.ExecuteManyOptions['bindDefs']> {\n return Object.fromEntries(columns.map(columnName => [columnName, bindDefForColumn(columnName)])) as Record<\n string,\n oracledb.BindDefinition\n >;\n}\n\nexport function bindDefForColumn(columnName: SpanColumn): oracledb.BindDefinition {\n const column = SPAN_SCHEMA[columnName];\n\n switch (column?.type) {\n case 'jsonb':\n // Bound as JSON text (see jsonBindText): the server encodes the OSON\n // image so JDBC-based tools can read it back.\n return { type: oracledb.DB_TYPE_CLOB };\n case 'timestamp':\n return { type: oracledb.DB_TYPE_TIMESTAMP_TZ };\n case 'boolean':\n case 'integer':\n case 'bigint':\n case 'float':\n return { type: oracledb.NUMBER };\n case 'uuid':\n case 'text':\n default:\n return { type: oracledb.STRING, maxSize: isIdentifierLikeColumn(columnName) ? 512 : 4000 };\n }\n}\n\nexport function logBindValue(columnName: LogColumn, value: unknown): unknown {\n if (value === undefined) return null;\n if (LOG_JSON_COLUMNS.has(columnName)) return jsonBindText(value ?? null);\n if (columnName === 'timestamp') return toDate(value);\n return value ?? null;\n}\n\nexport function logRecordBinds(record: LogMutationRecord): Record<string, unknown> {\n return Object.fromEntries(\n LOG_COLUMNS.map(columnName => [\n logBindName(columnName),\n logBindValue(columnName, record[columnName as keyof LogMutationRecord]),\n ]),\n );\n}\n\nexport function logBindName(columnName: LogColumn): string {\n return `b_${columnName}`;\n}\n\nexport function bindDefsForLogColumns(\n columns: readonly LogColumn[],\n): NonNullable<oracledb.ExecuteManyOptions['bindDefs']> {\n return Object.fromEntries(\n columns.map(columnName => [logBindName(columnName), bindDefForLogColumn(columnName)]),\n ) as Record<string, oracledb.BindDefinition>;\n}\n\nexport function bindDefForLogColumn(columnName: LogColumn): oracledb.BindDefinition {\n if (LOG_JSON_COLUMNS.has(columnName)) return { type: oracledb.DB_TYPE_CLOB };\n if (columnName === 'timestamp') return { type: oracledb.DB_TYPE_TIMESTAMP_TZ };\n if (columnName === 'message') return { type: oracledb.DB_TYPE_CLOB };\n return { type: oracledb.STRING, maxSize: isIdentifierLikeColumn(columnName) ? 512 : 4000 };\n}\n","import { randomUUID } from 'node:crypto';\n\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { createStorageErrorId, listLogsArgsSchema } from '@mastra/core/storage';\nimport type { BatchCreateLogsArgs, ListLogsArgs, ListLogsResponse, LogRecord } from '@mastra/core/storage';\n\nimport { assertJsonPath, qualifyName } from '../../../vector/identifiers';\nimport type { OracleDB } from '../../db';\nimport { parseJsonValue, toDate } from '../../domain-utils';\nimport { bindDefsForLogColumns, logBindName, logRecordBinds } from './binds';\nimport type { LogColumn, LogRow } from './schema';\nimport {\n addBind,\n jsonComparableValue,\n LOG_COLUMNS,\n LOG_EVENTS_TABLE,\n LOG_JSON_COLUMNS,\n LOG_TEXT_FILTER_COLUMNS,\n logCol,\n logQcol,\n STORE_NAME,\n storageError,\n} from './schema';\n\nexport async function batchCreateLogs(\n db: OracleDB,\n schemaName: string | undefined,\n args: BatchCreateLogsArgs,\n): Promise<void> {\n if (args.logs.length === 0) return;\n\n try {\n const binds = args.logs.map(log =>\n logRecordBinds({\n ...log,\n logId: log.logId ?? randomUUID(),\n executionSource: log.executionSource ?? log.source ?? null,\n }),\n );\n\n await db.tx(async client => {\n // Logs can be retried by telemetry pipelines; MERGE by logId prevents\n // duplicate rows while preserving insert-only semantics.\n await client.executeMany(logMergeSql(schemaName), binds, {\n bindDefs: bindDefsForLogColumns(LOG_COLUMNS),\n });\n });\n } catch (error) {\n throw storageError('BATCH_CREATE_LOGS', 'FAILED', { count: args.logs.length }, error, ErrorCategory.USER);\n }\n}\n\nexport async function listLogs(\n db: OracleDB,\n schemaName: string | undefined,\n args: ListLogsArgs,\n): Promise<ListLogsResponse> {\n const { mode, filters, pagination, orderBy } = listLogsArgsSchema.parse(args);\n if (mode === 'delta') {\n throw new MastraError({\n id: createStorageErrorId(STORE_NAME, 'LIST_LOGS', 'DELTA_NOT_SUPPORTED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'Oracle observability logs do not support delta polling yet',\n });\n }\n\n const page = pagination.page;\n const perPage = pagination.perPage;\n const binds: Record<string, unknown> = {};\n const conditions: string[] = [];\n\n try {\n if (filters) {\n // Scalar filters use normal columns; metadata/scope/tags use JSON\n // predicates so logs remain flexible without a separate document store.\n const logFilters = filters as typeof filters & {\n metadata?: Record<string, unknown> | null;\n scope?: Record<string, unknown> | null;\n };\n addLogDateRangeFilter(conditions, binds, 'l', filters.timestamp);\n\n if (filters.level !== undefined) {\n const levels = Array.isArray(filters.level) ? filters.level : [filters.level];\n if (levels.length > 0) {\n conditions.push(`${logQcol('l', 'level')} IN (${levels.map(level => addBind(binds, level)).join(', ')})`);\n }\n }\n\n for (const columnName of LOG_TEXT_FILTER_COLUMNS) {\n const value = filters[columnName as keyof typeof filters];\n if (value !== undefined) {\n conditions.push(`${logQcol('l', columnName)} = ${addBind(binds, value)}`);\n }\n }\n\n const sourceFilter = filters.executionSource ?? filters.source;\n if (sourceFilter !== undefined) {\n conditions.push(\n `COALESCE(${logQcol('l', 'executionSource')}, ${logQcol('l', 'source')}) = ${addBind(binds, sourceFilter)}`,\n );\n }\n\n addLogJsonObjectFilter(conditions, binds, 'l', 'metadata', logFilters.metadata);\n addLogJsonObjectFilter(conditions, binds, 'l', 'scope', logFilters.scope);\n addLogTagsFilter(conditions, binds, 'l', filters.tags);\n }\n\n const whereClause = conditions.length ? `WHERE ${conditions.join(' AND ')}` : '';\n const countRow = await db.oneOrNone<{ count: number | string }>(\n `SELECT COUNT(*) AS \"count\" FROM ${qualifyName(LOG_EVENTS_TABLE, schemaName)} l ${whereClause}`,\n binds,\n );\n const total = Number(countRow?.count ?? 0);\n\n if (total === 0) {\n return { logs: [], pagination: { total: 0, page, perPage, hasMore: false } };\n }\n\n const offset = page * perPage;\n const logs = await db.manyOrNone<LogRow>(\n `${logSelect(LOG_COLUMNS, 'l')} FROM ${qualifyName(LOG_EVENTS_TABLE, schemaName)} l ${whereClause} ORDER BY ${logQcol(\n 'l',\n orderBy.field,\n )} ${orderBy.direction}, ${logQcol('l', 'logId')} ${orderBy.direction} OFFSET :offset ROWS FETCH NEXT :limit ROWS ONLY`,\n { ...binds, offset, limit: perPage },\n );\n\n return {\n logs: logs.map(row => transformLogRow(row)),\n pagination: {\n total,\n page,\n perPage,\n hasMore: offset + perPage < total,\n },\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError('LIST_LOGS', 'FAILED', {}, error, ErrorCategory.USER);\n }\n}\n\nfunction logMergeSql(schemaName: string | undefined): string {\n const sourceColumns = LOG_COLUMNS.map(columnName => `:${logBindName(columnName)} AS ${logCol(columnName)}`).join(\n ', ',\n );\n const insertColumns = LOG_COLUMNS.map(columnName => logCol(columnName)).join(', ');\n const insertValues = LOG_COLUMNS.map(columnName => `source.${logCol(columnName)}`).join(', ');\n\n return `\n MERGE INTO ${qualifyName(LOG_EVENTS_TABLE, schemaName)} target\n USING (SELECT ${sourceColumns} FROM dual) source\n ON (target.${logCol('logId')} = source.${logCol('logId')})\n WHEN NOT MATCHED THEN INSERT (${insertColumns}) VALUES (${insertValues})\n `;\n}\n\nfunction logSelect(columns: readonly LogColumn[], tableAlias?: string): string {\n return `SELECT ${columns.map(columnName => `${logQcol(tableAlias, columnName)} AS \"${columnName}\"`).join(', ')}`;\n}\n\nfunction transformLogRow(row: LogRow): LogRecord {\n const result: LogRow = {};\n\n for (const [key, value] of Object.entries(row)) {\n const columnName = key as LogColumn;\n if (LOG_JSON_COLUMNS.has(columnName)) {\n result[key] = parseJsonValue(value);\n } else if (columnName === 'timestamp') {\n result[key] = toDate(value);\n } else {\n result[key] = value;\n }\n }\n\n return result as LogRecord;\n}\n\nfunction addLogDateRangeFilter(\n conditions: string[],\n binds: Record<string, unknown>,\n tableAlias: string,\n range?: { start?: Date; end?: Date; startExclusive?: boolean; endExclusive?: boolean },\n): void {\n if (range?.start) {\n conditions.push(\n `${logQcol(tableAlias, 'timestamp')} ${range.startExclusive ? '>' : '>='} ${addBind(binds, range.start)}`,\n );\n }\n if (range?.end) {\n conditions.push(\n `${logQcol(tableAlias, 'timestamp')} ${range.endExclusive ? '<' : '<='} ${addBind(binds, range.end)}`,\n );\n }\n}\n\nfunction addLogJsonObjectFilter(\n conditions: string[],\n binds: Record<string, unknown>,\n tableAlias: string,\n columnName: 'scope' | 'metadata',\n filter?: Record<string, unknown> | null,\n): void {\n if (!filter) return;\n\n for (const [path, value] of Object.entries(filter)) {\n conditions.push(\n `JSON_VALUE(${logQcol(tableAlias, columnName)}, '${assertJsonPath(\n path,\n )}' RETURNING VARCHAR2(4000) NULL ON ERROR) = ${addBind(binds, jsonComparableValue(value))}`,\n );\n }\n}\n\nfunction addLogTagsFilter(\n conditions: string[],\n binds: Record<string, unknown>,\n tableAlias: string,\n tags?: string[] | null,\n): void {\n if (!tags?.length) return;\n\n for (const tag of tags) {\n conditions.push(\n `EXISTS (SELECT 1 FROM JSON_TABLE(${logQcol(\n tableAlias,\n 'tags',\n )}, '$[*]' COLUMNS (tag VARCHAR2(4000) PATH '$')) tag_filter WHERE tag_filter.tag = ${addBind(binds, tag)})`,\n );\n }\n}\n","import { randomUUID } from 'node:crypto';\n\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { createStorageErrorId, listScoresArgsSchema, TABLE_SCORERS } from '@mastra/core/storage';\nimport type {\n BatchCreateScoresArgs,\n CreateScoreArgs,\n ListScoresArgs,\n ListScoresResponse,\n ScoreRecord,\n} from '@mastra/core/storage';\n\nimport { safeJsonValue } from '../../../shared/connection';\nimport { qualifyName } from '../../../vector/identifiers';\nimport type { OracleDB } from '../../db';\nimport { parseJsonValue, toDate } from '../../domain-utils';\nimport type { ScoreRow } from './schema';\nimport {\n addBind,\n SCORE_METADATA_FILTER_FIELDS,\n SCORE_SCHEMA,\n SCORE_TEXT_FILTER_COLUMNS,\n scoreQcol,\n STORE_NAME,\n storageError,\n} from './schema';\n\nexport async function listScores(\n db: OracleDB,\n schemaName: string | undefined,\n args: ListScoresArgs,\n): Promise<ListScoresResponse> {\n const { mode, filters, pagination, orderBy } = listScoresArgsSchema.parse(args);\n if (mode === 'delta') {\n throw new MastraError({\n id: createStorageErrorId(STORE_NAME, 'LIST_SCORES', 'DELTA_NOT_SUPPORTED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'Oracle observability scores do not support delta polling yet',\n });\n }\n\n const page = pagination.page;\n const perPage = pagination.perPage;\n const binds: Record<string, unknown> = {};\n const conditions: string[] = [];\n\n try {\n addScoreFilters(conditions, binds, filters);\n\n const whereClause = conditions.length ? `WHERE ${conditions.join(' AND ')}` : '';\n const countRow = await db.oneOrNone<{ count: number | string }>(\n `SELECT COUNT(*) AS \"count\" FROM ${qualifyName(TABLE_SCORERS, schemaName)} s ${whereClause}`,\n binds,\n );\n const total = Number(countRow?.count ?? 0);\n\n if (total === 0) {\n return { scores: [], pagination: { total: 0, page, perPage, hasMore: false } };\n }\n\n const offset = page * perPage;\n const scoreOrderColumn = orderBy.field === 'score' ? scoreQcol('s', 'score') : scoreQcol('s', 'createdAt');\n const rows = await db.manyOrNone<ScoreRow>(\n `${scoreSelect('s')} FROM ${qualifyName(TABLE_SCORERS, schemaName)} s ${whereClause} ORDER BY ${scoreOrderColumn} ${\n orderBy.direction\n }, ${scoreQcol('s', 'id')} ${orderBy.direction} OFFSET :offset ROWS FETCH NEXT :limit ROWS ONLY`,\n { ...binds, offset, limit: perPage },\n );\n\n return {\n scores: rows.map(row => transformObservabilityScoreRow(row)),\n pagination: {\n total,\n page,\n perPage,\n hasMore: offset + perPage < total,\n },\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError('LIST_SCORES', 'FAILED', {}, error, ErrorCategory.USER);\n }\n}\n\nexport async function createScore(db: OracleDB, schemaName: string | undefined, args: CreateScoreArgs): Promise<void> {\n await batchCreateScores(db, schemaName, { scores: [args.score] });\n}\n\nexport async function batchCreateScores(\n db: OracleDB,\n _schemaName: string | undefined,\n args: BatchCreateScoresArgs,\n): Promise<void> {\n if (args.scores.length === 0) return;\n\n try {\n // batchInsert wraps every insert in one transaction so a failure partway\n // through the batch leaves zero rows persisted instead of a partial write.\n await db.batchInsert({\n tableName: TABLE_SCORERS,\n schema: SCORE_SCHEMA,\n records: args.scores.map(scoreRecordToTableRecord),\n });\n } catch (error) {\n throw storageError('BATCH_CREATE_SCORES', 'FAILED', { count: args.scores.length }, error, ErrorCategory.USER);\n }\n}\n\nexport async function getScoreById(\n db: OracleDB,\n schemaName: string | undefined,\n scoreId: string,\n): Promise<ScoreRecord | null> {\n try {\n const row = await db.oneOrNone<ScoreRow>(\n `${scoreSelect('s')} FROM ${qualifyName(TABLE_SCORERS, schemaName)} s WHERE ${scoreQcol('s', 'id')} = :scoreId`,\n { scoreId },\n );\n return row ? transformObservabilityScoreRow(row) : null;\n } catch (error) {\n throw storageError('GET_SCORE_BY_ID', 'FAILED', { scoreId }, error, ErrorCategory.USER);\n }\n}\n\nfunction scoreSelect(tableAlias?: string): string {\n return `SELECT ${Object.keys(SCORE_SCHEMA)\n .map(columnName => `${scoreQcol(tableAlias, columnName)} AS \"${columnName}\"`)\n .join(', ')}`;\n}\n\nfunction transformObservabilityScoreRow(row: ScoreRow): ScoreRecord {\n const metadata = parseObjectValue(row.metadata);\n const scorer = parseObjectValue(row.scorer);\n const entity = parseObjectValue(row.entity);\n const requestContext = parseObjectValue(row.requestContext);\n const source = optionalString(row.source);\n\n // Legacy evaluator scores and new observability scores share one table in Mastra.\n // This adapter maps the evaluator row shape into the Studio-facing ScoreRecord\n // shape so /observability/scores can browse the same persisted data.\n return {\n scoreId: optionalString(row.id),\n timestamp: toDate(row.createdAt ?? row.updatedAt ?? new Date()),\n traceId: optionalString(row.traceId),\n spanId: optionalString(row.spanId),\n scorerId: optionalString(row.scorerId) ?? optionalString(scorer?.id) ?? 'unknown-scorer',\n scorerName: optionalString(scorer?.name) ?? optionalString(scorer?.scorerName),\n scorerVersion: optionalString(scorer?.version) ?? optionalString(scorer?.scorerVersion),\n scoreSource: source,\n source,\n score: Number(row.score ?? 0),\n reason: optionalString(row.reason),\n entityType: optionalEntityType(row.entityType),\n entityId: optionalString(row.entityId),\n entityName: optionalString(entity?.name) ?? optionalString(metadata?.entityName),\n parentEntityType: optionalEntityType(metadata?.parentEntityType),\n parentEntityId: optionalString(metadata?.parentEntityId),\n parentEntityName: optionalString(metadata?.parentEntityName),\n rootEntityType: optionalEntityType(metadata?.rootEntityType),\n rootEntityId: optionalString(metadata?.rootEntityId),\n rootEntityName: optionalString(metadata?.rootEntityName),\n userId: optionalString(metadata?.userId),\n organizationId: optionalString(metadata?.organizationId),\n resourceId: optionalString(row.resourceId),\n runId: optionalString(row.runId),\n sessionId: optionalString(metadata?.sessionId),\n threadId: optionalString(row.threadId),\n requestId: optionalString(metadata?.requestId),\n environment: optionalString(metadata?.environment),\n serviceName: optionalString(metadata?.serviceName),\n scope: parseObjectValue(metadata?.scope),\n entityVersionId: optionalString(metadata?.entityVersionId),\n parentEntityVersionId: optionalString(metadata?.parentEntityVersionId),\n rootEntityVersionId: optionalString(metadata?.rootEntityVersionId),\n experimentId: optionalString(metadata?.experimentId) ?? optionalString(requestContext?.experimentId),\n executionSource: optionalString(metadata?.executionSource),\n tags: parseStringArray(metadata?.tags),\n scoreTraceId: optionalString(metadata?.scoreTraceId) ?? optionalString(requestContext?.scoreTraceId),\n metadata,\n };\n}\n\nfunction scoreRecordToTableRecord(score: ScoreRecord): Record<string, unknown> {\n const id = score.scoreId ?? randomUUID();\n const timestamp = score.timestamp instanceof Date ? score.timestamp : new Date(score.timestamp ?? Date.now());\n const source = score.scoreSource ?? score.source ?? 'observability';\n // Filter out undefined contextual fields BEFORE merging over score.metadata.\n // Otherwise an undefined top-level field (e.g. score.entityName) would clobber\n // a value already present under the same key in the original metadata.\n const contextualMetadata = removeUndefined({\n entityName: score.entityName,\n entityVersionId: score.entityVersionId,\n parentEntityType: score.parentEntityType,\n parentEntityId: score.parentEntityId,\n parentEntityName: score.parentEntityName,\n parentEntityVersionId: score.parentEntityVersionId,\n rootEntityType: score.rootEntityType,\n rootEntityId: score.rootEntityId,\n rootEntityName: score.rootEntityName,\n rootEntityVersionId: score.rootEntityVersionId,\n userId: score.userId,\n organizationId: score.organizationId,\n sessionId: score.sessionId,\n requestId: score.requestId,\n environment: score.environment,\n serviceName: score.serviceName,\n executionSource: score.executionSource,\n experimentId: score.experimentId,\n tags: score.tags,\n scoreTraceId: score.scoreTraceId,\n scope: score.scope,\n });\n const metadata = { ...(score.metadata ?? {}), ...contextualMetadata };\n\n // Observability scores and evaluator scores share Mastra's scorer table.\n // Fields that do not exist as first-class scorer columns are folded into\n // metadata so the Studio score browser can still filter by context.\n return {\n id,\n scorerId: score.scorerId,\n traceId: score.traceId,\n spanId: score.spanId,\n runId: score.runId ?? score.traceId ?? id,\n scorer: safeJsonValue({\n id: score.scorerId,\n name: score.scorerName,\n version: score.scorerVersion,\n }),\n preprocessStepResult: null,\n extractStepResult: null,\n analyzeStepResult: null,\n score: score.score,\n reason: score.reason,\n metadata: safeJsonValue(removeUndefined(metadata)),\n preprocessPrompt: null,\n extractPrompt: null,\n generateScorePrompt: null,\n generateReasonPrompt: null,\n analyzePrompt: null,\n reasonPrompt: null,\n input: safeJsonValue({}),\n output: safeJsonValue({}),\n additionalContext: null,\n requestContext: safeJsonValue(\n removeUndefined({\n experimentId: score.experimentId,\n scoreTraceId: score.scoreTraceId,\n }),\n ),\n entityType: score.entityType,\n entity: safeJsonValue(removeUndefined({ id: score.entityId, name: score.entityName })),\n entityId: score.entityId,\n source,\n resourceId: score.resourceId,\n threadId: score.threadId,\n createdAt: timestamp,\n updatedAt: timestamp,\n };\n}\n\nfunction parseObjectValue(value: unknown): Record<string, unknown> | undefined {\n const parsed = parseJsonValue(value);\n return parsed !== null && typeof parsed === 'object' && !Array.isArray(parsed)\n ? (parsed as Record<string, unknown>)\n : undefined;\n}\n\nfunction parseStringArray(value: unknown): string[] | undefined {\n const parsed = parseJsonValue(value);\n if (!Array.isArray(parsed)) return undefined;\n return parsed.filter((item): item is string => typeof item === 'string');\n}\n\nfunction removeUndefined<T extends Record<string, unknown>>(record: T): Record<string, unknown> {\n return Object.fromEntries(Object.entries(record).filter(([, value]) => value !== undefined));\n}\n\nfunction optionalString(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\nfunction optionalEntityType(value: unknown): ScoreRecord['entityType'] {\n return optionalString(value) as ScoreRecord['entityType'];\n}\n\nfunction addScoreFilters(\n conditions: string[],\n binds: Record<string, unknown>,\n filters?: ListScoresArgs['filters'],\n): void {\n if (!filters) return;\n\n addScoreDateRangeFilter(conditions, binds, 's', filters.timestamp);\n\n for (const columnName of SCORE_TEXT_FILTER_COLUMNS) {\n const value = filters[columnName as keyof typeof filters];\n if (value !== undefined) {\n conditions.push(`${scoreQcol('s', columnName)} = ${addBind(binds, value)}`);\n }\n }\n\n if (filters.scorerId !== undefined) {\n const scorerIds = Array.isArray(filters.scorerId) ? filters.scorerId : [filters.scorerId];\n if (scorerIds.length > 0) {\n conditions.push(`${scoreQcol('s', 'scorerId')} IN (${scorerIds.map(id => addBind(binds, id)).join(', ')})`);\n }\n }\n\n const scoreSource = filters.scoreSource ?? filters.source;\n if (scoreSource !== undefined) {\n conditions.push(`${scoreQcol('s', 'source')} = ${addBind(binds, scoreSource)}`);\n }\n\n if (filters.experimentId !== undefined) {\n const experimentIdBind = addBind(binds, filters.experimentId);\n conditions.push(\n `(JSON_VALUE(${scoreQcol(\n 's',\n 'metadata',\n )}, '$.experimentId' RETURNING VARCHAR2(4000) NULL ON ERROR) = ${experimentIdBind} OR JSON_VALUE(${scoreQcol(\n 's',\n 'requestContext',\n )}, '$.experimentId' RETURNING VARCHAR2(4000) NULL ON ERROR) = ${experimentIdBind})`,\n );\n }\n\n for (const fieldName of SCORE_METADATA_FILTER_FIELDS) {\n const value = filters[fieldName as keyof typeof filters];\n if (value !== undefined) {\n conditions.push(\n `JSON_VALUE(${scoreQcol(\n 's',\n 'metadata',\n )}, '$.${fieldName}' RETURNING VARCHAR2(4000) NULL ON ERROR) = ${addBind(binds, value)}`,\n );\n }\n }\n\n addScoreMetadataTagsFilter(conditions, binds, 's', filters.tags);\n}\n\nfunction addScoreDateRangeFilter(\n conditions: string[],\n binds: Record<string, unknown>,\n tableAlias: string,\n range?: { start?: unknown; end?: unknown; startExclusive?: boolean; endExclusive?: boolean },\n): void {\n if (range?.start) {\n conditions.push(\n `${scoreQcol(tableAlias, 'createdAt')} ${range.startExclusive ? '>' : '>='} ${addBind(\n binds,\n toDate(range.start),\n )}`,\n );\n }\n if (range?.end) {\n conditions.push(\n `${scoreQcol(tableAlias, 'createdAt')} ${range.endExclusive ? '<' : '<='} ${addBind(binds, toDate(range.end))}`,\n );\n }\n}\n\nfunction addScoreMetadataTagsFilter(\n conditions: string[],\n binds: Record<string, unknown>,\n tableAlias: string,\n tags?: string[] | null,\n): void {\n if (!tags?.length) return;\n\n for (const tag of tags) {\n conditions.push(\n `EXISTS (SELECT 1 FROM JSON_TABLE(${scoreQcol(\n tableAlias,\n 'metadata',\n )}, '$.tags[*]' COLUMNS (tag VARCHAR2(4000) PATH '$')) tag_filter WHERE tag_filter.tag = ${addBind(binds, tag)})`,\n );\n }\n}\n","import { ErrorCategory } from '@mastra/core/error';\nimport { TABLE_SPANS, TraceStatus, listTracesArgsSchema, toTraceSpans } from '@mastra/core/storage';\nimport type {\n BatchCreateSpansArgs,\n BatchDeleteTracesArgs,\n BatchUpdateSpansArgs,\n CreateSpanArgs,\n CreateSpanRecord,\n GetEntityNamesArgs,\n GetEntityNamesResponse,\n GetEntityTypesArgs,\n GetEntityTypesResponse,\n GetEnvironmentsArgs,\n GetEnvironmentsResponse,\n GetRootSpanArgs,\n GetRootSpanResponse,\n GetServiceNamesArgs,\n GetServiceNamesResponse,\n GetSpanArgs,\n GetSpanResponse,\n GetTagsArgs,\n GetTagsResponse,\n GetTraceArgs,\n GetTraceLightResponse,\n GetTraceResponse,\n LightSpanRecord,\n ListTracesArgs,\n ListTracesResponse,\n SpanRecord,\n UpdateSpanArgs,\n} from '@mastra/core/storage';\nimport oracledb from 'oracledb';\n\nimport { assertJsonPath, qualifyName } from '../../../vector/identifiers';\nimport type { OracleDB } from '../../db';\nimport { parseJsonValue, toDate } from '../../domain-utils';\nimport { bindDefsForColumns, bindValue, spanRecordBinds } from './binds';\nimport type { LogColumn, SharedContextColumn, SpanColumn, SpanRow } from './schema';\nimport {\n addBind,\n col,\n FILTER_TEXT_COLUMNS,\n jsonComparableValue,\n LIGHT_SPAN_COLUMNS,\n LOG_EVENTS_TABLE,\n logCol,\n logQcol,\n qcol,\n SPAN_COLUMNS,\n SPAN_KEY_COLUMNS,\n SPAN_SCHEMA,\n storageError,\n} from './schema';\n\nexport async function createSpan(db: OracleDB, schemaName: string | undefined, args: CreateSpanArgs): Promise<void> {\n const { span } = args;\n try {\n await upsertSpans(db, schemaName, [span]);\n } catch (error) {\n throw storageError(\n 'CREATE_SPAN',\n 'FAILED',\n {\n spanId: span.spanId,\n traceId: span.traceId,\n spanType: span.spanType,\n name: span.name,\n },\n error,\n ErrorCategory.USER,\n );\n }\n}\n\nexport async function batchCreateSpans(\n db: OracleDB,\n schemaName: string | undefined,\n args: BatchCreateSpansArgs,\n): Promise<void> {\n if (args.records.length === 0) return;\n\n try {\n await upsertSpans(db, schemaName, args.records);\n } catch (error) {\n throw storageError('BATCH_CREATE_SPANS', 'FAILED', { count: args.records.length }, error, ErrorCategory.USER);\n }\n}\n\nexport async function getSpan(\n db: OracleDB,\n schemaName: string | undefined,\n args: GetSpanArgs,\n): Promise<GetSpanResponse | null> {\n const { traceId, spanId } = args;\n try {\n const row = await db.oneOrNone<SpanRow>(\n `${fullSpanSelect()} FROM ${qualifyName(TABLE_SPANS, schemaName)} WHERE ${col('traceId')} = :traceId AND ${col('spanId')} = :spanId`,\n { traceId, spanId },\n );\n\n return row ? { span: transformSpanRow<SpanRecord>(row) } : null;\n } catch (error) {\n throw storageError('GET_SPAN', 'FAILED', { traceId, spanId }, error, ErrorCategory.USER);\n }\n}\n\nexport async function getRootSpan(\n db: OracleDB,\n schemaName: string | undefined,\n args: GetRootSpanArgs,\n): Promise<GetRootSpanResponse | null> {\n const { traceId } = args;\n try {\n const row = await db.oneOrNone<SpanRow>(\n `${fullSpanSelect()} FROM ${qualifyName(TABLE_SPANS, schemaName)} WHERE ${col('traceId')} = :traceId AND ${col(\n 'parentSpanId',\n )} IS NULL FETCH FIRST 1 ROWS ONLY`,\n { traceId },\n );\n\n return row ? { span: transformSpanRow<SpanRecord>(row) } : null;\n } catch (error) {\n throw storageError('GET_ROOT_SPAN', 'FAILED', { traceId }, error, ErrorCategory.USER);\n }\n}\n\nexport async function getTrace(\n db: OracleDB,\n schemaName: string | undefined,\n args: GetTraceArgs,\n): Promise<GetTraceResponse | null> {\n const { traceId } = args;\n try {\n const spans = await db.manyOrNone<SpanRow>(\n `${fullSpanSelect()} FROM ${qualifyName(TABLE_SPANS, schemaName)} WHERE ${col('traceId')} = :traceId ORDER BY ${col(\n 'startedAt',\n )} ASC, ${col('spanId')} ASC`,\n { traceId },\n );\n\n if (spans.length === 0) return null;\n return {\n traceId,\n spans: spans.map(row => transformSpanRow<SpanRecord>(row)),\n };\n } catch (error) {\n throw storageError('GET_TRACE', 'FAILED', { traceId }, error, ErrorCategory.USER);\n }\n}\n\nexport async function getTraceLight(\n db: OracleDB,\n schemaName: string | undefined,\n args: GetTraceArgs,\n): Promise<GetTraceLightResponse | null> {\n const { traceId } = args;\n try {\n const spans = await db.manyOrNone<SpanRow>(\n `${lightSpanSelect()} FROM ${qualifyName(TABLE_SPANS, schemaName)} WHERE ${col('traceId')} = :traceId ORDER BY ${col(\n 'startedAt',\n )} ASC, ${col('spanId')} ASC`,\n { traceId },\n );\n\n if (spans.length === 0) return null;\n return {\n traceId,\n spans: spans.map(row => transformSpanRow<LightSpanRecord>(row)),\n };\n } catch (error) {\n throw storageError('GET_TRACE_LIGHT', 'FAILED', { traceId }, error, ErrorCategory.USER);\n }\n}\n\nexport async function updateSpan(db: OracleDB, schemaName: string | undefined, args: UpdateSpanArgs): Promise<void> {\n const { traceId, spanId } = args;\n try {\n await batchUpdateSpans(db, schemaName, { records: [args] });\n } catch (error) {\n throw storageError('UPDATE_SPAN', 'FAILED', { traceId, spanId }, error, ErrorCategory.USER);\n }\n}\n\nexport async function batchUpdateSpans(\n db: OracleDB,\n schemaName: string | undefined,\n args: BatchUpdateSpansArgs,\n): Promise<void> {\n if (args.records.length === 0) return;\n\n try {\n const now = new Date();\n const groups = new Map<string, { columns: SpanColumn[]; binds: Record<string, unknown>[] }>();\n\n for (const record of coalesceSpanUpdates(args.records)) {\n const columns = updateColumns(record.updates);\n const data = { ...record.updates, updatedAt: now } as Record<string, unknown>;\n const key = columns.join('\\0');\n const group = groups.get(key) ?? { columns, binds: [] };\n group.binds.push({\n traceId: record.traceId,\n spanId: record.spanId,\n ...Object.fromEntries(columns.map(columnName => [columnName, bindValue(columnName, data[columnName])])),\n });\n groups.set(key, group);\n }\n\n await db.tx(async client => {\n // Group updates by changed column set so executeMany can bind each\n // shape once instead of issuing one UPDATE per span.\n for (const group of groups.values()) {\n await client.executeMany(updateSql(schemaName, group.columns), group.binds, {\n bindDefs: bindDefsForColumns(['traceId', 'spanId', ...group.columns]),\n });\n }\n });\n } catch (error) {\n throw storageError('BATCH_UPDATE_SPANS', 'FAILED', { count: args.records.length }, error, ErrorCategory.USER);\n }\n}\n\nexport async function batchDeleteTraces(\n db: OracleDB,\n schemaName: string | undefined,\n args: BatchDeleteTracesArgs,\n): Promise<void> {\n if (args.traceIds.length === 0) return;\n\n try {\n await db.tx(async client => {\n await client.executeMany(\n `DELETE FROM ${qualifyName(TABLE_SPANS, schemaName)} WHERE ${col('traceId')} = :traceId`,\n args.traceIds.map(traceId => ({ traceId })),\n { bindDefs: { traceId: { type: oracledb.STRING, maxSize: 512 } } },\n );\n await client.executeMany(\n `DELETE FROM ${qualifyName(LOG_EVENTS_TABLE, schemaName)} WHERE ${logCol('traceId')} = :traceId`,\n args.traceIds.map(traceId => ({ traceId })),\n { bindDefs: { traceId: { type: oracledb.STRING, maxSize: 512 } } },\n );\n });\n } catch (error) {\n throw storageError('BATCH_DELETE_TRACES', 'FAILED', { count: args.traceIds.length }, error, ErrorCategory.USER);\n }\n}\n\nexport async function listTraces(\n db: OracleDB,\n schemaName: string | undefined,\n args: ListTracesArgs,\n): Promise<ListTracesResponse> {\n const { filters, pagination, orderBy } = listTracesArgsSchema.parse(args);\n const page = pagination.page;\n const perPage = pagination.perPage;\n const binds: Record<string, unknown> = {};\n const conditions = [`r.${col('parentSpanId')} IS NULL`];\n\n try {\n if (filters) {\n // Trace listings start from root spans. Child-error filters are expressed\n // with EXISTS so users can find failed traces without loading children.\n addDateRangeFilter(conditions, binds, 'r', 'startedAt', filters.startedAt);\n addDateRangeFilter(conditions, binds, 'r', 'endedAt', filters.endedAt);\n\n for (const columnName of FILTER_TEXT_COLUMNS) {\n const value = filters[columnName as keyof typeof filters];\n if (value !== undefined) {\n conditions.push(`${qcol('r', columnName)} = ${addBind(binds, value)}`);\n }\n }\n\n addJsonObjectFilter(conditions, binds, 'r', 'scope', filters.scope);\n addJsonObjectFilter(conditions, binds, 'r', 'metadata', filters.metadata);\n addTagsFilter(conditions, binds, 'r', filters.tags);\n addStatusFilter(conditions, 'r', filters.status);\n addChildErrorFilter(conditions, qualifyName(TABLE_SPANS, schemaName), filters.hasChildError);\n }\n\n const whereClause = `WHERE ${conditions.join(' AND ')}`;\n const orderClause = traceOrderClause(orderBy.field, orderBy.direction);\n const countRow = await db.oneOrNone<{ count: number | string }>(\n `SELECT COUNT(*) AS \"count\" FROM ${qualifyName(TABLE_SPANS, schemaName)} r ${whereClause}`,\n binds,\n );\n const total = Number(countRow?.count ?? 0);\n\n if (total === 0) {\n return {\n pagination: { total: 0, page, perPage, hasMore: false },\n spans: [],\n };\n }\n\n const offset = page * perPage;\n const spans = await db.manyOrNone<SpanRow>(\n `${spanSelect(SPAN_COLUMNS, 'r')} FROM ${qualifyName(TABLE_SPANS, schemaName)} r ${whereClause} ${orderClause} OFFSET :offset ROWS FETCH NEXT :limit ROWS ONLY`,\n { ...binds, offset, limit: perPage },\n );\n\n return {\n pagination: {\n total,\n page,\n perPage,\n hasMore: offset + perPage < total,\n },\n spans: toTraceSpans(spans.map(row => transformSpanRow<SpanRecord>(row))),\n };\n } catch (error) {\n throw storageError('LIST_TRACES', 'FAILED', {}, error, ErrorCategory.USER);\n }\n}\n\nexport async function getEntityTypes(\n db: OracleDB,\n schemaName: string | undefined,\n _args: GetEntityTypesArgs,\n): Promise<GetEntityTypesResponse> {\n try {\n return {\n entityTypes: (await distinctContextValues(db, schemaName, 'entityType')) as GetEntityTypesResponse['entityTypes'],\n };\n } catch (error) {\n throw storageError('GET_ENTITY_TYPES', 'FAILED', {}, error, ErrorCategory.USER);\n }\n}\n\nexport async function getEntityNames(\n db: OracleDB,\n schemaName: string | undefined,\n args: GetEntityNamesArgs,\n): Promise<GetEntityNamesResponse> {\n try {\n const binds: Record<string, unknown> = {};\n const entityTypeFilter = args.entityType ? addBind(binds, args.entityType) : undefined;\n const rows = await db.manyOrNone<{ value: string }>(\n `\n SELECT value AS \"value\"\n FROM (\n SELECT ${col('entityName')} AS value\n FROM ${qualifyName(TABLE_SPANS, schemaName)}\n WHERE ${col('entityName')} IS NOT NULL\n ${entityTypeFilter ? `AND ${col('entityType')} = ${entityTypeFilter}` : ''}\n UNION\n SELECT ${logCol('entityName')} AS value\n FROM ${qualifyName(LOG_EVENTS_TABLE, schemaName)}\n WHERE ${logCol('entityName')} IS NOT NULL\n ${entityTypeFilter ? `AND ${logCol('entityType')} = ${entityTypeFilter}` : ''}\n )\n ORDER BY value\n `,\n binds,\n );\n\n return { names: rows.map(row => row.value) };\n } catch (error) {\n throw storageError('GET_ENTITY_NAMES', 'FAILED', { entityType: args.entityType }, error, ErrorCategory.USER);\n }\n}\n\nexport async function getServiceNames(\n db: OracleDB,\n schemaName: string | undefined,\n _args: GetServiceNamesArgs,\n): Promise<GetServiceNamesResponse> {\n try {\n return { serviceNames: await distinctContextValues(db, schemaName, 'serviceName') };\n } catch (error) {\n throw storageError('GET_SERVICE_NAMES', 'FAILED', {}, error, ErrorCategory.USER);\n }\n}\n\nexport async function getEnvironments(\n db: OracleDB,\n schemaName: string | undefined,\n _args: GetEnvironmentsArgs,\n): Promise<GetEnvironmentsResponse> {\n try {\n return { environments: await distinctContextValues(db, schemaName, 'environment') };\n } catch (error) {\n throw storageError('GET_ENVIRONMENTS', 'FAILED', {}, error, ErrorCategory.USER);\n }\n}\n\nexport async function getTags(\n db: OracleDB,\n schemaName: string | undefined,\n args: GetTagsArgs,\n): Promise<GetTagsResponse> {\n try {\n const binds: Record<string, unknown> = {};\n const entityTypeFilter = args.entityType ? addBind(binds, args.entityType) : undefined;\n const rows = await db.manyOrNone<{ value: string }>(\n `\n SELECT value AS \"value\"\n FROM (\n SELECT span_tags.tag AS value\n FROM ${qualifyName(TABLE_SPANS, schemaName)} s,\n JSON_TABLE(${qcol('s', 'tags')}, '$[*]' COLUMNS (tag VARCHAR2(4000) PATH '$')) span_tags\n WHERE span_tags.tag IS NOT NULL\n ${entityTypeFilter ? `AND ${qcol('s', 'entityType')} = ${entityTypeFilter}` : ''}\n UNION\n SELECT log_tags.tag AS value\n FROM ${qualifyName(LOG_EVENTS_TABLE, schemaName)} l,\n JSON_TABLE(${logQcol('l', 'tags')}, '$[*]' COLUMNS (tag VARCHAR2(4000) PATH '$')) log_tags\n WHERE log_tags.tag IS NOT NULL\n ${entityTypeFilter ? `AND ${logQcol('l', 'entityType')} = ${entityTypeFilter}` : ''}\n )\n ORDER BY value\n `,\n binds,\n );\n\n return { tags: rows.map(row => row.value) };\n } catch (error) {\n throw storageError('GET_TAGS', 'FAILED', { entityType: args.entityType }, error, ErrorCategory.USER);\n }\n}\n\nasync function upsertSpans(db: OracleDB, schemaName: string | undefined, spans: CreateSpanRecord[]): Promise<void> {\n if (spans.length === 0) return;\n\n const now = new Date();\n const binds = spans.map(span => spanRecordBinds({ ...span, createdAt: now, updatedAt: now }));\n\n await db.tx(async client => {\n // MERGE supports both initial span creation and later span completion\n // updates through the same code path.\n await client.executeMany(upsertSql(schemaName), binds, {\n bindDefs: bindDefsForColumns(SPAN_COLUMNS),\n });\n });\n}\n\nfunction upsertSql(schemaName: string | undefined): string {\n const table = qualifyName(TABLE_SPANS, schemaName);\n const sourceColumns = SPAN_COLUMNS.map(columnName => `:${columnName} AS ${col(columnName)}`).join(', ');\n const updateAssignments = SPAN_COLUMNS.filter(\n columnName => !SPAN_KEY_COLUMNS.has(columnName) && columnName !== 'createdAt',\n )\n .map(columnName => `target.${col(columnName)} = source.${col(columnName)}`)\n .join(', ');\n const insertColumns = SPAN_COLUMNS.map(columnName => col(columnName)).join(', ');\n const insertValues = SPAN_COLUMNS.map(columnName => `source.${col(columnName)}`).join(', ');\n\n return `\n MERGE INTO ${table} target\n USING (SELECT ${sourceColumns} FROM dual) source\n ON (target.${col('traceId')} = source.${col('traceId')} AND target.${col('spanId')} = source.${col('spanId')})\n WHEN MATCHED THEN UPDATE SET ${updateAssignments}\n WHEN NOT MATCHED THEN INSERT (${insertColumns}) VALUES (${insertValues})\n `;\n}\n\nfunction updateSql(schemaName: string | undefined, columns: SpanColumn[]): string {\n const assignments = columns.map(columnName => `${col(columnName)} = :${columnName}`).join(', ');\n return `UPDATE ${qualifyName(TABLE_SPANS, schemaName)} SET ${assignments} WHERE ${col('traceId')} = :traceId AND ${col('spanId')} = :spanId`;\n}\n\nfunction fullSpanSelect(): string {\n return spanSelect(SPAN_COLUMNS);\n}\n\nfunction lightSpanSelect(): string {\n return spanSelect(LIGHT_SPAN_COLUMNS);\n}\n\nasync function distinctContextValues(\n db: OracleDB,\n schemaName: string | undefined,\n columnName: SharedContextColumn,\n): Promise<string[]> {\n // Studio discovery filters need values from both span rows and log rows.\n // UNION keeps the result distinct while allowing Oracle to use normal\n // scalar indexes on the shared observability context columns.\n const rows = await db.manyOrNone<{ value: string }>(\n `\n SELECT value AS \"value\"\n FROM (\n SELECT ${col(columnName as SpanColumn)} AS value\n FROM ${qualifyName(TABLE_SPANS, schemaName)}\n WHERE ${col(columnName as SpanColumn)} IS NOT NULL\n UNION\n SELECT ${logCol(columnName as LogColumn)} AS value\n FROM ${qualifyName(LOG_EVENTS_TABLE, schemaName)}\n WHERE ${logCol(columnName as LogColumn)} IS NOT NULL\n )\n ORDER BY value\n `,\n );\n\n return rows.map(row => row.value);\n}\n\ntype SpanUpdateRecord = BatchUpdateSpansArgs['records'][number];\n\nfunction coalesceSpanUpdates(records: SpanUpdateRecord[]): SpanUpdateRecord[] {\n // batchUpdateSpans groups records by changed-column shape so executeMany can\n // bind each shape once. That grouping reorders execution relative to the\n // batch's insertion order, so repeated updates to the same (traceId, spanId)\n // pair must be coalesced here first -- in insertion order, merging later\n // updates over earlier ones -- so only the last value for each field within\n // a batch ever reaches Oracle (see CR-10).\n const order: string[] = [];\n const merged = new Map<string, SpanUpdateRecord>();\n\n for (const record of records) {\n const key = `${record.traceId}\\0${record.spanId}`;\n const existing = merged.get(key);\n if (existing) {\n existing.updates = { ...existing.updates, ...record.updates };\n } else {\n order.push(key);\n merged.set(key, { traceId: record.traceId, spanId: record.spanId, updates: { ...record.updates } });\n }\n }\n\n return order.map(key => merged.get(key) as SpanUpdateRecord);\n}\n\nfunction updateColumns(updates: Record<string, unknown>): SpanColumn[] {\n const columns = SPAN_COLUMNS.filter(\n columnName =>\n !SPAN_KEY_COLUMNS.has(columnName) &&\n columnName !== 'createdAt' &&\n columnName !== 'updatedAt' &&\n Object.prototype.hasOwnProperty.call(updates, columnName) &&\n updates[columnName] !== undefined,\n );\n\n columns.push('updatedAt');\n return columns;\n}\n\nfunction spanSelect(columns: readonly SpanColumn[], tableAlias?: string): string {\n return `SELECT ${columns.map(columnName => `${qcol(tableAlias, columnName)} AS \"${columnName}\"`).join(', ')}`;\n}\n\nfunction transformSpanRow<T extends SpanRow>(row: SpanRow): T {\n const result: SpanRow = {};\n\n for (const [key, value] of Object.entries(row)) {\n const columnName = key as SpanColumn;\n const column = SPAN_SCHEMA[columnName];\n\n if (!column) {\n result[key] = value;\n } else if (column.type === 'jsonb') {\n result[key] = parseJsonValue(value);\n } else if (column.type === 'timestamp') {\n result[key] = value == null ? null : toDate(value);\n } else if (column.type === 'boolean') {\n result[key] = parseBoolean(value);\n } else {\n result[key] = value;\n }\n }\n\n return result as T;\n}\n\nfunction parseBoolean(value: unknown): boolean {\n if (typeof value === 'boolean') return value;\n if (typeof value === 'number') return value !== 0;\n if (typeof value === 'string') return value === '1' || value.toLowerCase() === 'true';\n return Boolean(value);\n}\n\nfunction addDateRangeFilter(\n conditions: string[],\n binds: Record<string, unknown>,\n tableAlias: string,\n columnName: 'startedAt' | 'endedAt',\n range?: { start?: Date; end?: Date },\n): void {\n if (range?.start) {\n conditions.push(`${qcol(tableAlias, columnName)} >= ${addBind(binds, range.start)}`);\n }\n if (range?.end) {\n conditions.push(`${qcol(tableAlias, columnName)} <= ${addBind(binds, range.end)}`);\n }\n}\n\nfunction addJsonObjectFilter(\n conditions: string[],\n binds: Record<string, unknown>,\n tableAlias: string,\n columnName: 'scope' | 'metadata',\n filter?: Record<string, unknown> | null,\n): void {\n if (!filter) return;\n\n for (const [path, value] of Object.entries(filter)) {\n conditions.push(\n `JSON_VALUE(${qcol(tableAlias, columnName)}, '${assertJsonPath(\n path,\n )}' RETURNING VARCHAR2(4000) NULL ON ERROR) = ${addBind(binds, jsonComparableValue(value))}`,\n );\n }\n}\n\nfunction addTagsFilter(\n conditions: string[],\n binds: Record<string, unknown>,\n tableAlias: string,\n tags?: string[] | null,\n): void {\n if (!tags?.length) return;\n\n for (const tag of tags) {\n conditions.push(\n `EXISTS (SELECT 1 FROM JSON_TABLE(${qcol(\n tableAlias,\n 'tags',\n )}, '$[*]' COLUMNS (tag VARCHAR2(4000) PATH '$')) tag_filter WHERE tag_filter.tag = ${addBind(binds, tag)})`,\n );\n }\n}\n\nfunction addStatusFilter(conditions: string[], tableAlias: string, status?: TraceStatus): void {\n if (status === undefined) return;\n\n switch (status) {\n case TraceStatus.ERROR:\n conditions.push(jsonValueIsPresent(qcol(tableAlias, 'error')));\n break;\n case TraceStatus.RUNNING:\n conditions.push(`${qcol(tableAlias, 'endedAt')} IS NULL AND ${jsonValueIsAbsent(qcol(tableAlias, 'error'))}`);\n break;\n case TraceStatus.SUCCESS:\n conditions.push(`${qcol(tableAlias, 'endedAt')} IS NOT NULL AND ${jsonValueIsAbsent(qcol(tableAlias, 'error'))}`);\n break;\n }\n}\n\nfunction addChildErrorFilter(conditions: string[], tableName: string, hasChildError?: boolean): void {\n if (hasChildError === undefined) return;\n\n const childErrorPredicate = `SELECT 1 FROM ${tableName} c WHERE c.${col('traceId')} = r.${col(\n 'traceId',\n )} AND ${jsonValueIsPresent(`c.${col('error')}`)}`;\n conditions.push(`${hasChildError ? 'EXISTS' : 'NOT EXISTS'} (${childErrorPredicate})`);\n}\n\nfunction jsonValueIsPresent(expression: string): string {\n return `${expression} IS NOT NULL AND JSON_EXISTS(${expression}, '$?(@ != null)')`;\n}\n\nfunction jsonValueIsAbsent(expression: string): string {\n return `(${expression} IS NULL OR NOT JSON_EXISTS(${expression}, '$?(@ != null)'))`;\n}\n\nfunction traceOrderClause(field: 'startedAt' | 'endedAt', direction: 'ASC' | 'DESC'): string {\n if (field === 'endedAt') {\n const nullsOrder = direction === 'DESC' ? 'NULLS FIRST' : 'NULLS LAST';\n return `ORDER BY r.${col('endedAt')} ${direction} ${nullsOrder}, r.${col('traceId')} ${direction}`;\n }\n\n return `ORDER BY r.${col('startedAt')} ${direction}, r.${col('traceId')} ${direction}`;\n}\n","import { ObservabilityStorage, TABLE_SPANS } from '@mastra/core/storage';\nimport type {\n BatchCreateLogsArgs,\n BatchCreateScoresArgs,\n BatchCreateSpansArgs,\n BatchDeleteTracesArgs,\n BatchUpdateSpansArgs,\n CreateScoreArgs,\n CreateSpanArgs,\n GetEntityNamesArgs,\n GetEntityNamesResponse,\n GetEntityTypesArgs,\n GetEntityTypesResponse,\n GetEnvironmentsArgs,\n GetEnvironmentsResponse,\n GetRootSpanArgs,\n GetRootSpanResponse,\n GetServiceNamesArgs,\n GetServiceNamesResponse,\n GetSpanArgs,\n GetSpanResponse,\n GetTagsArgs,\n GetTagsResponse,\n GetTraceArgs,\n GetTraceLightResponse,\n GetTraceResponse,\n ListLogsArgs,\n ListLogsResponse,\n ListScoresArgs,\n ListScoresResponse,\n ListTracesArgs,\n ListTracesResponse,\n ObservabilityStorageStrategy,\n ScoreRecord,\n TracingStorageStrategy,\n UpdateSpanArgs,\n} from '@mastra/core/storage';\n\nimport { indexNameForTable, qualifyName } from '../../../vector/identifiers';\nimport { createOracleIndex, filterIndexesForTables, OracleDB } from '../../db';\nimport type { OracleCreateIndexOptions } from '../../db';\nimport type { OracleDomainConfig } from '../../types';\nimport * as logsOps from './logs';\nimport {\n getDefaultObservabilityIndexDefinitions,\n LOG_EVENTS_TABLE,\n logEventsTableSql,\n SPAN_NULLABLE_COLUMNS,\n SPAN_SCHEMA,\n} from './schema';\nimport * as scoresOps from './scores-bridge';\nimport * as spansOps from './spans';\n\nexport { getDefaultObservabilityIndexDefinitions, LOG_EVENTS_TABLE, logEventsTableSql } from './schema';\n\nexport class ObservabilityOracle extends ObservabilityStorage {\n static readonly MANAGED_TABLES = [TABLE_SPANS, LOG_EVENTS_TABLE] as const;\n\n private readonly db: OracleDB;\n private readonly schemaName?: string;\n private readonly skipDefaultIndexes?: boolean;\n private readonly indexes: OracleCreateIndexOptions[];\n\n constructor(config: OracleDomainConfig) {\n super();\n this.db = new OracleDB(config);\n this.schemaName = config.schemaName;\n this.skipDefaultIndexes = config.skipDefaultIndexes;\n this.indexes = filterIndexesForTables(config.indexes, ObservabilityOracle.MANAGED_TABLES);\n }\n\n async init(): Promise<void> {\n await this.db.createTable({\n tableName: TABLE_SPANS,\n schema: SPAN_SCHEMA,\n // Spans are unique inside a trace; this composite key also makes MERGE\n // safe for insert/update observability strategies.\n compositePrimaryKey: ['traceId', 'spanId'],\n });\n await this.db.executeDdl(logEventsTableSql(this.table(LOG_EVENTS_TABLE)), [-955]);\n await this.db.alterTable({\n tableName: TABLE_SPANS,\n schema: SPAN_SCHEMA,\n ifNotExists: SPAN_NULLABLE_COLUMNS,\n });\n await this.createIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.db.tx(async client => {\n await client.none(`DELETE FROM ${this.table(LOG_EVENTS_TABLE)}`);\n await client.none(`DELETE FROM ${this.table(TABLE_SPANS)}`);\n });\n }\n\n public get observabilityStrategy(): {\n preferred: ObservabilityStorageStrategy;\n supported: ObservabilityStorageStrategy[];\n } {\n // Oracle supports efficient batch upserts, so prefer the strategy that lets\n // the runtime create spans early and update them as work completes.\n return {\n preferred: 'batch-with-updates',\n supported: ['batch-with-updates', 'insert-only'],\n };\n }\n\n public get tracingStrategy(): {\n preferred: TracingStorageStrategy;\n supported: TracingStorageStrategy[];\n } {\n return this.observabilityStrategy;\n }\n\n getDefaultIndexDefinitions(): OracleCreateIndexOptions[] {\n return getDefaultObservabilityIndexDefinitions(this.indexName.bind(this));\n }\n\n // Logs\n async batchCreateLogs(args: BatchCreateLogsArgs): Promise<void> {\n return logsOps.batchCreateLogs(this.db, this.schemaName, args);\n }\n\n async listLogs(args: ListLogsArgs): Promise<ListLogsResponse> {\n return logsOps.listLogs(this.db, this.schemaName, args);\n }\n\n // Scores\n async listScores(args: ListScoresArgs): Promise<ListScoresResponse> {\n return scoresOps.listScores(this.db, this.schemaName, args);\n }\n\n async createScore(args: CreateScoreArgs): Promise<void> {\n return scoresOps.createScore(this.db, this.schemaName, args);\n }\n\n async batchCreateScores(args: BatchCreateScoresArgs): Promise<void> {\n return scoresOps.batchCreateScores(this.db, this.schemaName, args);\n }\n\n async getScoreById(scoreId: string): Promise<ScoreRecord | null> {\n return scoresOps.getScoreById(this.db, this.schemaName, scoreId);\n }\n\n // Spans & traces\n async createSpan(args: CreateSpanArgs): Promise<void> {\n return spansOps.createSpan(this.db, this.schemaName, args);\n }\n\n async batchCreateSpans(args: BatchCreateSpansArgs): Promise<void> {\n return spansOps.batchCreateSpans(this.db, this.schemaName, args);\n }\n\n async getSpan(args: GetSpanArgs): Promise<GetSpanResponse | null> {\n return spansOps.getSpan(this.db, this.schemaName, args);\n }\n\n async getRootSpan(args: GetRootSpanArgs): Promise<GetRootSpanResponse | null> {\n return spansOps.getRootSpan(this.db, this.schemaName, args);\n }\n\n async getTrace(args: GetTraceArgs): Promise<GetTraceResponse | null> {\n return spansOps.getTrace(this.db, this.schemaName, args);\n }\n\n async getTraceLight(args: GetTraceArgs): Promise<GetTraceLightResponse | null> {\n return spansOps.getTraceLight(this.db, this.schemaName, args);\n }\n\n async updateSpan(args: UpdateSpanArgs): Promise<void> {\n return spansOps.updateSpan(this.db, this.schemaName, args);\n }\n\n async batchUpdateSpans(args: BatchUpdateSpansArgs): Promise<void> {\n return spansOps.batchUpdateSpans(this.db, this.schemaName, args);\n }\n\n async batchDeleteTraces(args: BatchDeleteTracesArgs): Promise<void> {\n return spansOps.batchDeleteTraces(this.db, this.schemaName, args);\n }\n\n async listTraces(args: ListTracesArgs): Promise<ListTracesResponse> {\n return spansOps.listTraces(this.db, this.schemaName, args);\n }\n\n // Discovery (spans + log events)\n async getEntityTypes(args: GetEntityTypesArgs): Promise<GetEntityTypesResponse> {\n return spansOps.getEntityTypes(this.db, this.schemaName, args);\n }\n\n async getEntityNames(args: GetEntityNamesArgs): Promise<GetEntityNamesResponse> {\n return spansOps.getEntityNames(this.db, this.schemaName, args);\n }\n\n async getServiceNames(args: GetServiceNamesArgs): Promise<GetServiceNamesResponse> {\n return spansOps.getServiceNames(this.db, this.schemaName, args);\n }\n\n async getEnvironments(args: GetEnvironmentsArgs): Promise<GetEnvironmentsResponse> {\n return spansOps.getEnvironments(this.db, this.schemaName, args);\n }\n\n async getTags(args: GetTagsArgs): Promise<GetTagsResponse> {\n return spansOps.getTags(this.db, this.schemaName, args);\n }\n\n private async createIndexes(): Promise<void> {\n await this.db.withConnection(async connection => {\n if (!this.skipDefaultIndexes) {\n for (const index of this.getDefaultIndexDefinitions()) {\n try {\n await createOracleIndex(connection, index, this.schemaName);\n } catch (error) {\n this.logger?.warn?.(`Failed to create Oracle default index ${index.name}:`, error);\n }\n }\n }\n\n for (const index of this.indexes) {\n try {\n await createOracleIndex(connection, index, this.schemaName);\n } catch (error) {\n this.logger?.warn?.(`Failed to create Oracle custom index ${index.name}:`, error);\n }\n }\n });\n }\n\n private table(tableName = TABLE_SPANS): string {\n return qualifyName(tableName, this.schemaName);\n }\n\n private indexName(indexName: string): string {\n return indexNameForTable(indexName, 'IDX');\n }\n}\n","import { ErrorCategory, MastraError } from '@mastra/core/error';\nimport {\n calculatePagination,\n normalizePerPage,\n ScorerDefinitionsStorage,\n TABLE_SCHEMAS,\n TABLE_SCORER_DEFINITION_VERSIONS,\n TABLE_SCORER_DEFINITIONS,\n} from '@mastra/core/storage';\nimport type {\n StorageCreateScorerDefinitionInput,\n StorageListScorerDefinitionsInput,\n StorageListScorerDefinitionsOutput,\n StorageScorerDefinitionType,\n StorageUpdateScorerDefinitionInput,\n} from '@mastra/core/storage';\nimport type {\n CreateScorerDefinitionVersionInput,\n ListScorerDefinitionVersionsInput,\n ListScorerDefinitionVersionsOutput,\n ScorerDefinitionVersion,\n} from '@mastra/core/storage/domains/scorer-definitions';\n\nimport { jsonBind, nullableClobBind, nullableJsonBind } from '../../../shared/connection';\nimport { assertJsonPath, indexNameForTable, qualifyName } from '../../../vector/identifiers';\nimport { OracleDB, createOracleIndex, filterIndexesForTables } from '../../db';\nimport type { OracleCreateIndexOptions, OracleTxClient } from '../../db';\nimport {\n createOracleStorageError,\n parseOptionalJson,\n parseOptionalJsonObject,\n parseOptionalStringArray,\n toDate,\n} from '../../domain-utils';\nimport type { OracleDomainConfig } from '../../types';\n\n// Scorer definitions are versioned scoring configurations. Parent rows cover\n// lifecycle/listing while version rows keep model, instructions, and ranges.\nconst STORE_NAME = 'ORACLEDB';\nconst SNAPSHOT_FIELDS = [\n 'name',\n 'description',\n 'type',\n 'model',\n 'instructions',\n 'scoreRange',\n 'presetConfig',\n 'defaultSampling',\n] as const;\n\nconst SCORER_ACTIVE_VERSION_ID = '\"activeVersionId\"';\nconst SCORER_AUTHOR_ID = '\"authorId\"';\nconst SCORER_CREATED_AT = '\"createdAt\"';\nconst SCORER_UPDATED_AT = '\"updatedAt\"';\n\nconst VERSION_SCORER_DEFINITION_ID = '\"scorerDefinitionId\"';\nconst VERSION_VERSION_NUMBER = '\"versionNumber\"';\nconst VERSION_SCORE_RANGE = '\"scoreRange\"';\nconst VERSION_PRESET_CONFIG = '\"presetConfig\"';\nconst VERSION_DEFAULT_SAMPLING = '\"defaultSampling\"';\nconst VERSION_CHANGED_FIELDS = '\"changedFields\"';\nconst VERSION_CHANGE_MESSAGE = '\"changeMessage\"';\nconst VERSION_CREATED_AT = '\"createdAt\"';\n\ntype ScorerDefinitionRow = {\n id: string;\n status: StorageScorerDefinitionType['status'];\n activeVersionId?: string | null;\n authorId?: string | null;\n metadata?: unknown;\n createdAt: Date | string;\n updatedAt: Date | string;\n};\n\ntype ScorerDefinitionVersionRow = {\n id: string;\n scorerDefinitionId: string;\n versionNumber: number | string;\n name: string;\n description?: string | null;\n type: ScorerDefinitionVersion['type'];\n model?: unknown;\n instructions?: string | null;\n scoreRange?: unknown;\n presetConfig?: unknown;\n defaultSampling?: unknown;\n changedFields?: unknown;\n changeMessage?: string | null;\n createdAt: Date | string;\n};\n\ntype VersionWriteClient = Pick<OracleTxClient, 'none'>;\n\nexport class ScorerDefinitionsOracle extends ScorerDefinitionsStorage {\n // Scorer definitions use a small parent row plus versioned scoring configuration.\n static readonly MANAGED_TABLES = [TABLE_SCORER_DEFINITIONS, TABLE_SCORER_DEFINITION_VERSIONS] as const;\n\n private readonly db: OracleDB;\n private readonly schemaName?: string;\n private readonly skipDefaultIndexes?: boolean;\n private readonly indexes: OracleCreateIndexOptions[];\n\n constructor(config: OracleDomainConfig) {\n super();\n this.db = new OracleDB(config);\n this.schemaName = config.schemaName;\n this.skipDefaultIndexes = config.skipDefaultIndexes;\n this.indexes = filterIndexesForTables(config.indexes, ScorerDefinitionsOracle.MANAGED_TABLES);\n }\n\n async init(): Promise<void> {\n await this.db.createTable({\n tableName: TABLE_SCORER_DEFINITIONS,\n schema: TABLE_SCHEMAS[TABLE_SCORER_DEFINITIONS],\n });\n await this.db.createTable({\n tableName: TABLE_SCORER_DEFINITION_VERSIONS,\n schema: TABLE_SCHEMAS[TABLE_SCORER_DEFINITION_VERSIONS],\n });\n await this.createIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.db.tx(async client => {\n await client.none(`DELETE FROM ${this.table(TABLE_SCORER_DEFINITION_VERSIONS)}`);\n await client.none(`DELETE FROM ${this.table(TABLE_SCORER_DEFINITIONS)}`);\n });\n }\n\n getDefaultIndexDefinitions(): OracleCreateIndexOptions[] {\n return getDefaultScorerDefinitionIndexDefinitions(this.indexName.bind(this));\n }\n\n async getById(id: string): Promise<StorageScorerDefinitionType | null> {\n try {\n const row = await this.db.oneOrNone<ScorerDefinitionRow>(\n `${this.scorerSelect()} FROM ${this.table(TABLE_SCORER_DEFINITIONS)} WHERE id = :id`,\n { id },\n );\n return row ? this.parseScorerDefinitionRow(row) : null;\n } catch (error) {\n throw this.storageError('GET_SCORER_DEFINITION_BY_ID', 'FAILED', { scorerDefinitionId: id }, error);\n }\n }\n\n async create(input: { scorerDefinition: StorageCreateScorerDefinitionInput }): Promise<StorageScorerDefinitionType> {\n const { scorerDefinition } = input;\n\n try {\n const now = new Date();\n\n await this.db.tx(async client => {\n const existing = await client.oneOrNone<{ id: string }>(\n `SELECT id AS \"id\" FROM ${this.table(TABLE_SCORER_DEFINITIONS)} WHERE id = :id`,\n { id: scorerDefinition.id },\n );\n if (existing) {\n throw new Error(`Scorer definition with id ${scorerDefinition.id} already exists`);\n }\n\n await client.none(\n `INSERT INTO ${this.table(TABLE_SCORER_DEFINITIONS)} (\n id, status, ${SCORER_ACTIVE_VERSION_ID}, ${SCORER_AUTHOR_ID}, metadata,\n ${SCORER_CREATED_AT}, ${SCORER_UPDATED_AT}\n ) VALUES (\n :id, :status, :activeVersionId, :authorId, :metadata,\n :createdAt, :updatedAt\n )`,\n {\n id: scorerDefinition.id,\n status: 'draft',\n activeVersionId: null,\n authorId: scorerDefinition.authorId ?? null,\n metadata: nullableJsonBind(scorerDefinition.metadata),\n createdAt: now,\n updatedAt: now,\n },\n );\n\n // Version rows keep scorer model, rubric, and sampling config reproducible across eval runs.\n const { id: _id, authorId: _authorId, metadata: _metadata, ...snapshotConfig } = scorerDefinition;\n await this.insertVersion(client, {\n id: crypto.randomUUID(),\n scorerDefinitionId: scorerDefinition.id,\n versionNumber: 1,\n ...snapshotConfig,\n changedFields: [...SNAPSHOT_FIELDS],\n changeMessage: 'Initial version',\n });\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 this.storageError('CREATE_SCORER_DEFINITION', 'FAILED', { scorerDefinitionId: scorerDefinition.id }, error);\n }\n }\n\n async update(input: StorageUpdateScorerDefinitionInput): Promise<StorageScorerDefinitionType> {\n const { id, ...updates } = input;\n\n try {\n const existingScorer = await this.getById(id);\n if (!existingScorer) {\n throw new Error(`Scorer definition with id ${id} not found`);\n }\n\n const { authorId, activeVersionId, metadata, status } = updates;\n const setClauses: string[] = [];\n const binds: Record<string, unknown> = { id };\n\n if (authorId !== undefined) {\n setClauses.push(`${SCORER_AUTHOR_ID} = :authorId`);\n binds.authorId = authorId;\n }\n\n if (activeVersionId !== undefined) {\n setClauses.push(`${SCORER_ACTIVE_VERSION_ID} = :activeVersionId`);\n binds.activeVersionId = activeVersionId;\n }\n\n if (status !== undefined) {\n setClauses.push(`status = :status`);\n binds.status = status;\n }\n\n if (metadata !== undefined) {\n const existingMetadata =\n existingScorer.metadata &&\n typeof existingScorer.metadata === 'object' &&\n !Array.isArray(existingScorer.metadata)\n ? existingScorer.metadata\n : {};\n // Discovery metadata is mutable on the parent row; scorer model/rubric\n // changes belong in explicit version rows.\n setClauses.push(`metadata = :metadata`);\n binds.metadata = jsonBind({ ...existingMetadata, ...metadata });\n }\n\n setClauses.push(`${SCORER_UPDATED_AT} = :updatedAt`);\n binds.updatedAt = new Date();\n\n await this.db.none(\n `UPDATE ${this.table(TABLE_SCORER_DEFINITIONS)} SET ${setClauses.join(', ')} WHERE id = :id`,\n binds,\n );\n\n const updatedScorer = await this.getById(id);\n if (!updatedScorer) {\n throw new Error(`Scorer definition with id ${id} not found after update`);\n }\n return updatedScorer;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw this.storageError('UPDATE_SCORER_DEFINITION', 'FAILED', { scorerDefinitionId: id }, error);\n }\n }\n\n async delete(id: string): Promise<void> {\n try {\n await this.db.tx(async client => {\n await client.none(\n `DELETE FROM ${this.table(TABLE_SCORER_DEFINITION_VERSIONS)} WHERE ${VERSION_SCORER_DEFINITION_ID} = :id`,\n { id },\n );\n await client.none(`DELETE FROM ${this.table(TABLE_SCORER_DEFINITIONS)} WHERE id = :id`, { id });\n });\n } catch (error) {\n throw this.storageError('DELETE_SCORER_DEFINITION', 'FAILED', { scorerDefinitionId: id }, error);\n }\n }\n\n async list(args?: StorageListScorerDefinitionsInput): Promise<StorageListScorerDefinitionsOutput> {\n const { page = 0, perPage: perPageInput, orderBy, authorId, metadata, status } = args || {};\n\n try {\n this.validatePagination(page, perPageInput, 100);\n } catch (error) {\n throw this.storageError('LIST_SCORER_DEFINITIONS', 'INVALID_INPUT', { page }, error, ErrorCategory.USER);\n }\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n try {\n const { field, direction } = this.parseOrderBy(orderBy);\n const { whereClause, binds } = this.scorerWhereClause({ status, authorId, metadata });\n\n const countRow = await this.db.oneOrNone<{ count: number | string }>(\n `SELECT COUNT(*) AS \"count\" FROM ${this.table(TABLE_SCORER_DEFINITIONS)} ${whereClause}`,\n binds,\n );\n const total = Number(countRow?.count ?? 0);\n\n if (total === 0) {\n return {\n scorerDefinitions: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n if (perPage === 0) {\n return {\n scorerDefinitions: [],\n total,\n page,\n perPage: perPageForResponse,\n hasMore: total > 0,\n };\n }\n\n const limit = perPageInput === false ? total : perPage;\n // `id ASC` breaks ties between rows sharing the same order-by value so\n // pages stay stable instead of duplicating or dropping rows across pages.\n const rows = await this.db.manyOrNone<ScorerDefinitionRow>(\n `${this.scorerSelect()} FROM ${this.table(\n TABLE_SCORER_DEFINITIONS,\n )} ${whereClause} ORDER BY ${this.scorerOrderColumn(\n field,\n )} ${direction}, id ASC OFFSET :offset ROWS FETCH NEXT :limit ROWS ONLY`,\n { ...binds, offset, limit },\n );\n\n const scorerDefinitions = rows.flatMap(row => {\n try {\n return [this.parseScorerDefinitionRow(row)];\n } catch (error) {\n this.logger?.warn?.('[Oracle] Failed to map scorer definition row, skipping', { id: row?.id, error });\n return [];\n }\n });\n\n return {\n scorerDefinitions,\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 this.storageError('LIST_SCORER_DEFINITIONS', 'FAILED', {}, error);\n }\n }\n\n async createVersion(input: CreateScorerDefinitionVersionInput): Promise<ScorerDefinitionVersion> {\n try {\n const existingById = await this.db.oneOrNone<{ id: string }>(\n `SELECT id AS \"id\" FROM ${this.table(TABLE_SCORER_DEFINITION_VERSIONS)} WHERE id = :id`,\n { id: input.id },\n );\n if (existingById) {\n throw new Error(`Version with id ${input.id} already exists`);\n }\n\n const existingByNumber = await this.db.oneOrNone<{ id: string }>(\n `SELECT id AS \"id\" FROM ${this.table(\n TABLE_SCORER_DEFINITION_VERSIONS,\n )} WHERE ${VERSION_SCORER_DEFINITION_ID} = :scorerDefinitionId AND ${VERSION_VERSION_NUMBER} = :versionNumber`,\n { scorerDefinitionId: input.scorerDefinitionId, versionNumber: input.versionNumber },\n );\n if (existingByNumber) {\n throw new Error(\n `Version number ${input.versionNumber} already exists for scorer definition ${input.scorerDefinitionId}`,\n );\n }\n\n const createdAt = new Date();\n await this.insertVersion(this.db, input, createdAt);\n\n return {\n ...input,\n createdAt,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw this.storageError(\n 'CREATE_SCORER_DEFINITION_VERSION',\n 'FAILED',\n { versionId: input.id, scorerDefinitionId: input.scorerDefinitionId },\n error,\n );\n }\n }\n\n async getVersion(id: string): Promise<ScorerDefinitionVersion | null> {\n try {\n const row = await this.db.oneOrNone<ScorerDefinitionVersionRow>(\n `${this.versionSelect()} FROM ${this.table(TABLE_SCORER_DEFINITION_VERSIONS)} WHERE id = :id`,\n { id },\n );\n return row ? this.parseVersionRow(row) : null;\n } catch (error) {\n throw this.storageError('GET_SCORER_DEFINITION_VERSION', 'FAILED', { versionId: id }, error);\n }\n }\n\n async getVersionByNumber(scorerDefinitionId: string, versionNumber: number): Promise<ScorerDefinitionVersion | null> {\n try {\n const row = await this.db.oneOrNone<ScorerDefinitionVersionRow>(\n `${this.versionSelect()} FROM ${this.table(\n TABLE_SCORER_DEFINITION_VERSIONS,\n )} WHERE ${VERSION_SCORER_DEFINITION_ID} = :scorerDefinitionId AND ${VERSION_VERSION_NUMBER} = :versionNumber`,\n { scorerDefinitionId, versionNumber },\n );\n return row ? this.parseVersionRow(row) : null;\n } catch (error) {\n throw this.storageError(\n 'GET_SCORER_DEFINITION_VERSION_BY_NUMBER',\n 'FAILED',\n { scorerDefinitionId, versionNumber },\n error,\n );\n }\n }\n\n async getLatestVersion(scorerDefinitionId: string): Promise<ScorerDefinitionVersion | null> {\n try {\n const row = await this.db.oneOrNone<ScorerDefinitionVersionRow>(\n `${this.versionSelect()} FROM ${this.table(\n TABLE_SCORER_DEFINITION_VERSIONS,\n )} WHERE ${VERSION_SCORER_DEFINITION_ID} = :scorerDefinitionId ORDER BY ${VERSION_VERSION_NUMBER} DESC FETCH FIRST 1 ROWS ONLY`,\n { scorerDefinitionId },\n );\n return row ? this.parseVersionRow(row) : null;\n } catch (error) {\n throw this.storageError('GET_LATEST_SCORER_DEFINITION_VERSION', 'FAILED', { scorerDefinitionId }, error);\n }\n }\n\n async listVersions(input: ListScorerDefinitionVersionsInput): Promise<ListScorerDefinitionVersionsOutput> {\n const { scorerDefinitionId, page = 0, perPage: perPageInput, orderBy } = input;\n\n try {\n this.validatePagination(page, perPageInput, 20);\n } catch (error) {\n throw this.storageError(\n 'LIST_SCORER_DEFINITION_VERSIONS',\n 'INVALID_INPUT',\n { page, scorerDefinitionId },\n error,\n ErrorCategory.USER,\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 const countRow = await this.db.oneOrNone<{ count: number | string }>(\n `SELECT COUNT(*) AS \"count\" FROM ${this.table(\n TABLE_SCORER_DEFINITION_VERSIONS,\n )} WHERE ${VERSION_SCORER_DEFINITION_ID} = :scorerDefinitionId`,\n { scorerDefinitionId },\n );\n const total = Number(countRow?.count ?? 0);\n\n if (total === 0) {\n return {\n versions: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n if (perPage === 0) {\n return {\n versions: [],\n total,\n page,\n perPage: perPageForResponse,\n hasMore: total > 0,\n };\n }\n\n const limit = perPageInput === false ? total : perPage;\n // `id ASC` breaks ties between versions sharing the same order-by value so\n // pages stay stable instead of duplicating or dropping rows across pages.\n const rows = await this.db.manyOrNone<ScorerDefinitionVersionRow>(\n `${this.versionSelect()} FROM ${this.table(\n TABLE_SCORER_DEFINITION_VERSIONS,\n )} WHERE ${VERSION_SCORER_DEFINITION_ID} = :scorerDefinitionId ORDER BY ${this.versionOrderColumn(\n field,\n )} ${direction}, id ASC OFFSET :offset ROWS FETCH NEXT :limit ROWS ONLY`,\n { scorerDefinitionId, offset, limit },\n );\n\n const versions = rows.flatMap(row => {\n try {\n return [this.parseVersionRow(row)];\n } catch (error) {\n this.logger?.warn?.('[Oracle] Failed to map scorer definition version row, skipping', {\n id: row?.id,\n error,\n });\n return [];\n }\n });\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 this.storageError('LIST_SCORER_DEFINITION_VERSIONS', 'FAILED', { scorerDefinitionId }, error);\n }\n }\n\n async deleteVersion(id: string): Promise<void> {\n try {\n await this.db.none(`DELETE FROM ${this.table(TABLE_SCORER_DEFINITION_VERSIONS)} WHERE id = :id`, { id });\n } catch (error) {\n throw this.storageError('DELETE_SCORER_DEFINITION_VERSION', 'FAILED', { versionId: id }, error);\n }\n }\n\n async deleteVersionsByParentId(entityId: string): Promise<void> {\n try {\n await this.db.none(\n `DELETE FROM ${this.table(TABLE_SCORER_DEFINITION_VERSIONS)} WHERE ${VERSION_SCORER_DEFINITION_ID} = :entityId`,\n { entityId },\n );\n } catch (error) {\n throw this.storageError(\n 'DELETE_SCORER_DEFINITION_VERSIONS_BY_SCORER_DEFINITION_ID',\n 'FAILED',\n { scorerDefinitionId: entityId },\n error,\n );\n }\n }\n\n async countVersions(scorerDefinitionId: string): Promise<number> {\n try {\n const row = await this.db.oneOrNone<{ count: number | string }>(\n `SELECT COUNT(*) AS \"count\" FROM ${this.table(\n TABLE_SCORER_DEFINITION_VERSIONS,\n )} WHERE ${VERSION_SCORER_DEFINITION_ID} = :scorerDefinitionId`,\n { scorerDefinitionId },\n );\n return Number(row?.count ?? 0);\n } catch (error) {\n throw this.storageError('COUNT_SCORER_DEFINITION_VERSIONS', 'FAILED', { scorerDefinitionId }, error);\n }\n }\n\n private async createIndexes(): Promise<void> {\n await this.db.withConnection(async connection => {\n if (!this.skipDefaultIndexes) {\n for (const index of this.getDefaultIndexDefinitions()) {\n try {\n await createOracleIndex(connection, index, this.schemaName);\n } catch (error) {\n this.logger?.warn?.(`Failed to create Oracle default index ${index.name}:`, error);\n }\n }\n }\n\n for (const index of this.indexes) {\n try {\n await createOracleIndex(connection, index, this.schemaName);\n } catch (error) {\n this.logger?.warn?.(`Failed to create Oracle custom index ${index.name}:`, error);\n }\n }\n });\n }\n\n private async insertVersion(\n client: VersionWriteClient,\n input: CreateScorerDefinitionVersionInput,\n createdAt = new Date(),\n ): Promise<void> {\n // Version rows keep evaluation behavior reproducible: model, instructions,\n // score range, presets, and sampling are all stored as one snapshot.\n await client.none(\n `INSERT INTO ${this.table(TABLE_SCORER_DEFINITION_VERSIONS)} (\n id, ${VERSION_SCORER_DEFINITION_ID}, ${VERSION_VERSION_NUMBER},\n name, description, type, model, instructions, ${VERSION_SCORE_RANGE}, ${VERSION_PRESET_CONFIG},\n ${VERSION_DEFAULT_SAMPLING}, ${VERSION_CHANGED_FIELDS}, ${VERSION_CHANGE_MESSAGE},\n ${VERSION_CREATED_AT}\n ) VALUES (\n :id, :scorerDefinitionId, :versionNumber,\n :name, :description, :type, :model, :instructions, :scoreRange, :presetConfig,\n :defaultSampling, :changedFields, :changeMessage,\n :createdAt\n )`,\n {\n id: input.id,\n scorerDefinitionId: input.scorerDefinitionId,\n versionNumber: input.versionNumber,\n name: input.name,\n description: nullableClobBind(input.description),\n type: input.type,\n model: nullableJsonBind(input.model),\n instructions: nullableClobBind(input.instructions),\n scoreRange: nullableJsonBind(input.scoreRange),\n presetConfig: nullableJsonBind(input.presetConfig),\n defaultSampling: nullableJsonBind(input.defaultSampling),\n changedFields: nullableJsonBind(input.changedFields),\n changeMessage: nullableClobBind(input.changeMessage),\n createdAt,\n },\n );\n }\n\n private scorerWhereClause(args: {\n status?: StorageScorerDefinitionType['status'];\n authorId?: string;\n metadata?: Record<string, unknown>;\n }): { whereClause: string; binds: Record<string, unknown> } {\n const conditions: string[] = [];\n const binds: Record<string, unknown> = {};\n\n if (args.status) {\n conditions.push(`status = :status`);\n binds.status = args.status;\n }\n\n if (args.authorId !== undefined) {\n conditions.push(`${SCORER_AUTHOR_ID} = :authorId`);\n binds.authorId = args.authorId;\n }\n\n if (args.metadata && Object.keys(args.metadata).length > 0) {\n let index = 0;\n for (const [key, value] of Object.entries(args.metadata)) {\n const bindName = `metadata${index++}`;\n // Use JSON containment-style predicates so nested scorer metadata\n // filters behave like PG JSONB containment where Oracle JSON allows it.\n conditions.push(metadataJsonEquals('metadata', key, bindName));\n binds[bindName] = jsonBind(value);\n }\n }\n\n return { whereClause: conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '', binds };\n }\n\n private scorerSelect(): string {\n return [\n `SELECT id AS \"id\"`,\n `status AS \"status\"`,\n `${SCORER_ACTIVE_VERSION_ID} AS \"activeVersionId\"`,\n `${SCORER_AUTHOR_ID} AS \"authorId\"`,\n `metadata AS \"metadata\"`,\n `${SCORER_CREATED_AT} AS \"createdAt\"`,\n `${SCORER_UPDATED_AT} AS \"updatedAt\"`,\n ].join(', ');\n }\n\n private versionSelect(): string {\n return [\n `SELECT id AS \"id\"`,\n `${VERSION_SCORER_DEFINITION_ID} AS \"scorerDefinitionId\"`,\n `${VERSION_VERSION_NUMBER} AS \"versionNumber\"`,\n `name AS \"name\"`,\n `description AS \"description\"`,\n `type AS \"type\"`,\n `model AS \"model\"`,\n `instructions AS \"instructions\"`,\n `${VERSION_SCORE_RANGE} AS \"scoreRange\"`,\n `${VERSION_PRESET_CONFIG} AS \"presetConfig\"`,\n `${VERSION_DEFAULT_SAMPLING} AS \"defaultSampling\"`,\n `${VERSION_CHANGED_FIELDS} AS \"changedFields\"`,\n `${VERSION_CHANGE_MESSAGE} AS \"changeMessage\"`,\n `${VERSION_CREATED_AT} AS \"createdAt\"`,\n ].join(', ');\n }\n\n private parseScorerDefinitionRow(row: ScorerDefinitionRow): StorageScorerDefinitionType {\n return {\n id: String(row.id),\n status: row.status,\n activeVersionId: optionalString(row.activeVersionId),\n authorId: optionalString(row.authorId),\n metadata: parseOptionalJsonObject(row.metadata),\n createdAt: toDate(row.createdAt),\n updatedAt: toDate(row.updatedAt),\n };\n }\n\n private parseVersionRow(row: ScorerDefinitionVersionRow): ScorerDefinitionVersion {\n // Normalize JSON config columns and CLOB text before returning the public\n // ScorerDefinitionVersion expected by core.\n return {\n id: String(row.id),\n scorerDefinitionId: String(row.scorerDefinitionId),\n versionNumber: Number(row.versionNumber),\n name: String(row.name),\n description: optionalString(row.description),\n type: row.type,\n model: parseOptionalJson<ScorerDefinitionVersion['model']>(row.model),\n instructions: optionalString(row.instructions),\n scoreRange: parseOptionalJson<ScorerDefinitionVersion['scoreRange']>(row.scoreRange),\n presetConfig: parseOptionalJson<ScorerDefinitionVersion['presetConfig']>(row.presetConfig),\n defaultSampling: parseOptionalJson<ScorerDefinitionVersion['defaultSampling']>(row.defaultSampling),\n changedFields: parseOptionalStringArray(row.changedFields),\n changeMessage: optionalString(row.changeMessage),\n createdAt: toDate(row.createdAt),\n };\n }\n\n private scorerOrderColumn(field: string): string {\n return field === 'updatedAt' ? SCORER_UPDATED_AT : SCORER_CREATED_AT;\n }\n\n private versionOrderColumn(field: string): string {\n return field === 'createdAt' ? VERSION_CREATED_AT : VERSION_VERSION_NUMBER;\n }\n\n private validatePagination(page: number, perPageInput: number | false | undefined, defaultPerPage: number): void {\n if (page < 0) {\n throw new Error('page must be >= 0');\n }\n\n const perPage = normalizePerPage(perPageInput, defaultPerPage);\n const maxOffset = Number.MAX_SAFE_INTEGER / 2;\n if (perPageInput !== false && page * perPage > maxOffset) {\n throw new Error('page value too large');\n }\n }\n\n private table(tableName: string): string {\n return qualifyName(tableName, this.schemaName);\n }\n\n private indexName(indexName: string): string {\n return indexNameForTable(indexName, 'IDX');\n }\n\n private storageError(\n operation: string,\n reason: string,\n details: Record<string, string | number | boolean | undefined>,\n cause: unknown,\n category: ErrorCategory = ErrorCategory.THIRD_PARTY,\n ): MastraError {\n return createOracleStorageError({ storeName: STORE_NAME, operation, reason, details, cause, category });\n }\n}\n\nexport function getDefaultScorerDefinitionIndexDefinitions(\n indexName: (name: string) => string,\n): OracleCreateIndexOptions[] {\n return [\n {\n name: indexName('MASTRA_SCORER_DEFINITION_VERSIONS_DEF_VERSION'),\n table: TABLE_SCORER_DEFINITION_VERSIONS,\n columns: ['scorerDefinitionId', 'versionNumber'],\n unique: true,\n },\n ];\n}\n\nfunction optionalString(value: unknown): string | undefined {\n if (value === null || value === undefined) return undefined;\n return String(value);\n}\n\nfunction metadataJsonEquals(column: string, path: string, bindName: string): string {\n const jsonPath = assertJsonPath(path);\n return `JSON_EXISTS(${column}, '${jsonPath}') AND JSON_EQUAL(JSON_QUERY(${column}, '${jsonPath}' RETURNING JSON NULL ON ERROR), :${bindName})`;\n}\n","import { randomUUID } from 'node:crypto';\n\nimport { ErrorCategory, MastraError } from '@mastra/core/error';\nimport type { ListScoresResponse, SaveScorePayload, ScoreRowData, ScoringSource } from '@mastra/core/evals';\nimport { saveScorePayloadSchema } from '@mastra/core/evals';\nimport {\n calculatePagination,\n normalizePerPage,\n ScoresStorage,\n TABLE_SCHEMAS,\n TABLE_SCORERS,\n transformScoreRow as coreTransformScoreRow,\n} from '@mastra/core/storage';\nimport type { ScoreTenancyFilters, StorageColumn, StoragePagination } from '@mastra/core/storage';\n\nimport { indexNameForTable, qualifyName } from '../../../vector/identifiers';\nimport { OracleDB, createOracleIndex, filterIndexesForTables } from '../../db';\nimport type { OracleCreateIndexOptions } from '../../db';\nimport { createOracleStorageError } from '../../domain-utils';\nimport type { OracleDomainConfig } from '../../types';\n\n// Scores are append-style evaluation outputs, indexed for scorer, trace/span,\n// entity, thread/resource, and run-level review queries.\nconst STORE_NAME = 'ORACLEDB';\n\nconst SCORE_CREATED_AT = '\"createdAt\"';\nconst SCORE_UPDATED_AT = '\"updatedAt\"';\nconst SCORE_SCORER_ID = '\"scorerId\"';\nconst SCORE_TRACE_ID = '\"traceId\"';\nconst SCORE_SPAN_ID = '\"spanId\"';\nconst SCORE_RUN_ID = '\"runId\"';\nconst SCORE_PREPROCESS_STEP_RESULT = '\"preprocessStepResult\"';\nconst SCORE_EXTRACT_STEP_RESULT = '\"extractStepResult\"';\nconst SCORE_ANALYZE_STEP_RESULT = '\"analyzeStepResult\"';\nconst SCORE_PREPROCESS_PROMPT = '\"preprocessPrompt\"';\nconst SCORE_EXTRACT_PROMPT = '\"extractPrompt\"';\nconst SCORE_GENERATE_SCORE_PROMPT = '\"generateScorePrompt\"';\nconst SCORE_GENERATE_REASON_PROMPT = '\"generateReasonPrompt\"';\nconst SCORE_ANALYZE_PROMPT = '\"analyzePrompt\"';\nconst SCORE_REASON_PROMPT = '\"reasonPrompt\"';\nconst SCORE_ADDITIONAL_CONTEXT = '\"additionalContext\"';\nconst SCORE_REQUEST_CONTEXT = '\"requestContext\"';\nconst SCORE_ENTITY_TYPE = '\"entityType\"';\nconst SCORE_ENTITY_ID = '\"entityId\"';\nconst SCORE_RESOURCE_ID = '\"resourceId\"';\nconst SCORE_THREAD_ID = '\"threadId\"';\nconst SCORE_ORGANIZATION_ID = '\"organizationId\"';\nconst SCORE_PROJECT_ID = '\"projectId\"';\nconst SCORE_BATCH_ID = '\"batchId\"';\nconst SCORE_DATASET_ID = '\"datasetId\"';\nconst SCORE_DATASET_ITEM_ID = '\"datasetItemId\"';\nconst SCORE_LONG_TEXT_COLUMNS = [\n 'reason',\n 'preprocessPrompt',\n 'extractPrompt',\n 'generateScorePrompt',\n 'generateReasonPrompt',\n 'analyzePrompt',\n 'reasonPrompt',\n] as const;\nconst SCORE_NULLABLE_JSON_COLUMNS = ['input', 'output'] as const;\nexport const ORACLE_SCORES_SCHEMA: Record<string, StorageColumn> = {\n ...TABLE_SCHEMAS[TABLE_SCORERS],\n // Experiment scorers can run against failed or suspended workflow runs, where\n // output is intentionally absent. PG stores that as a serialized null/empty\n // value; Oracle should accept the same runtime shape instead of rejecting it.\n input: { ...TABLE_SCHEMAS[TABLE_SCORERS].input!, nullable: true },\n output: { ...TABLE_SCHEMAS[TABLE_SCORERS].output!, nullable: true },\n};\n\ntype ScoreRow = Record<string, unknown>;\n\nfunction transformScoreRow(row: ScoreRow): ScoreRowData {\n // Reuse Mastra's shared score mapper so Oracle returns the same shape as other storage providers.\n return coreTransformScoreRow(row, { convertTimestamps: true });\n}\n\n/**\n * Appends multi-tenant scope conditions to a score query. Mutates `conditions`/`binds`.\n * Mirrors the PG scores domain so organizationId/projectId scoping behaves the same across stores.\n */\nfunction applyTenancyFilters(\n conditions: string[],\n binds: Record<string, unknown>,\n filters?: ScoreTenancyFilters,\n): void {\n if (filters?.organizationId !== undefined) {\n conditions.push(`${SCORE_ORGANIZATION_ID} = :organizationId`);\n binds.organizationId = filters.organizationId;\n }\n if (filters?.projectId !== undefined) {\n conditions.push(`${SCORE_PROJECT_ID} = :projectId`);\n binds.projectId = filters.projectId;\n }\n}\n\nexport class ScoresOracle extends ScoresStorage {\n // Scores are append-style eval records keyed for scorer, run, entity, trace, and span lookups.\n static readonly MANAGED_TABLES = [TABLE_SCORERS] as const;\n\n private readonly db: OracleDB;\n private readonly schemaName?: string;\n private readonly skipDefaultIndexes?: boolean;\n private readonly indexes: OracleCreateIndexOptions[];\n\n constructor(config: OracleDomainConfig) {\n super();\n this.db = new OracleDB(config);\n this.schemaName = config.schemaName;\n this.skipDefaultIndexes = config.skipDefaultIndexes;\n this.indexes = filterIndexesForTables(config.indexes, ScoresOracle.MANAGED_TABLES);\n }\n\n async init(): Promise<void> {\n await this.db.createTable({ tableName: TABLE_SCORERS, schema: ORACLE_SCORES_SCHEMA });\n await this.db.alterTable({\n tableName: TABLE_SCORERS,\n schema: ORACLE_SCORES_SCHEMA,\n ifNotExists: ['spanId', 'requestContext', 'organizationId', 'projectId', 'batchId', 'datasetId', 'datasetItemId'],\n });\n await this.ensureLongTextColumns();\n await this.ensureNullableJsonColumns();\n await this.createIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.db.clearTable(TABLE_SCORERS);\n }\n\n async getScoreById({ id }: { id: string }): Promise<ScoreRowData | null> {\n try {\n const row = await this.db.oneOrNone<ScoreRow>(`${this.selectScores()} FROM ${this.table()} WHERE id = :id`, {\n id,\n });\n return row ? transformScoreRow(row) : null;\n } catch (error) {\n throw this.storageError('GET_SCORE_BY_ID', 'FAILED', { id }, error);\n }\n }\n\n async saveScore(score: SaveScorePayload): Promise<{ score: ScoreRowData }> {\n let validatedScore: SaveScorePayload;\n try {\n validatedScore = saveScorePayloadSchema.parse(score);\n } catch (error) {\n throw this.storageError(\n 'SAVE_SCORE',\n 'VALIDATION_FAILED',\n {\n scorer: typeof score.scorer?.id === 'string' ? score.scorer.id : String(score.scorer?.id ?? 'unknown'),\n entityId: score.entityId ?? 'unknown',\n entityType: score.entityType ?? 'unknown',\n traceId: score.traceId ?? '',\n spanId: score.spanId ?? '',\n },\n error,\n ErrorCategory.USER,\n );\n }\n\n try {\n const id = randomUUID();\n const now = new Date();\n\n // Use the generic OracleDB insert path so JSON-heavy evaluator payloads\n // and long prompt fields follow the shared JSON/CLOB bind handling.\n await this.db.insert({\n tableName: TABLE_SCORERS,\n schema: ORACLE_SCORES_SCHEMA,\n record: {\n id,\n scorerId: validatedScore.scorerId,\n traceId: validatedScore.traceId,\n spanId: validatedScore.spanId,\n runId: validatedScore.runId,\n scorer: validatedScore.scorer,\n preprocessStepResult: validatedScore.preprocessStepResult,\n extractStepResult: validatedScore.extractStepResult,\n analyzeStepResult: validatedScore.analyzeStepResult,\n score: validatedScore.score,\n reason: validatedScore.reason,\n metadata: validatedScore.metadata,\n preprocessPrompt: validatedScore.preprocessPrompt,\n extractPrompt: validatedScore.extractPrompt,\n generateScorePrompt: validatedScore.generateScorePrompt,\n generateReasonPrompt: validatedScore.generateReasonPrompt,\n analyzePrompt: validatedScore.analyzePrompt,\n reasonPrompt: validatedScore.reasonPrompt,\n input: validatedScore.input,\n output: validatedScore.output,\n additionalContext: validatedScore.additionalContext,\n requestContext: validatedScore.requestContext,\n entityType: validatedScore.entityType,\n entity: validatedScore.entity,\n entityId: validatedScore.entityId,\n source: validatedScore.source,\n resourceId: validatedScore.resourceId,\n threadId: validatedScore.threadId,\n organizationId: validatedScore.organizationId,\n projectId: validatedScore.projectId,\n batchId: validatedScore.batchId,\n datasetId: validatedScore.datasetId,\n datasetItemId: validatedScore.datasetItemId,\n createdAt: now,\n updatedAt: now,\n },\n });\n\n return { score: { ...validatedScore, id, createdAt: now, updatedAt: now } };\n } catch (error) {\n throw this.storageError('SAVE_SCORE', 'FAILED', { scorerId: score.scorerId, runId: score.runId }, error);\n }\n }\n\n async listScoresByScorerId({\n scorerId,\n pagination,\n entityId,\n entityType,\n source,\n filters,\n }: {\n scorerId: string;\n pagination: StoragePagination;\n entityId?: string;\n entityType?: string;\n source?: ScoringSource;\n filters?: ScoreTenancyFilters;\n }): Promise<ListScoresResponse> {\n const conditions = [`${SCORE_SCORER_ID} = :scorerId`];\n const binds: Record<string, unknown> = { scorerId };\n\n if (entityId) {\n conditions.push(`${SCORE_ENTITY_ID} = :entityId`);\n binds.entityId = entityId;\n }\n if (entityType) {\n conditions.push(`${SCORE_ENTITY_TYPE} = :entityType`);\n binds.entityType = entityType;\n }\n if (source) {\n conditions.push(`source = :source`);\n binds.source = source;\n }\n applyTenancyFilters(conditions, binds, filters);\n\n try {\n return await this.listScores({\n whereClause: `WHERE ${conditions.join(' AND ')}`,\n binds,\n pagination,\n operation: 'LIST_SCORES_BY_SCORER_ID',\n details: { scorerId },\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw this.storageError('LIST_SCORES_BY_SCORER_ID', 'FAILED', { scorerId }, error);\n }\n }\n\n async listScoresByRunId({\n runId,\n pagination,\n filters,\n }: {\n runId: string;\n pagination: StoragePagination;\n filters?: ScoreTenancyFilters;\n }): Promise<ListScoresResponse> {\n try {\n const conditions = [`${SCORE_RUN_ID} = :runId`];\n const binds: Record<string, unknown> = { runId };\n applyTenancyFilters(conditions, binds, filters);\n\n return await this.listScores({\n whereClause: `WHERE ${conditions.join(' AND ')}`,\n binds,\n pagination,\n operation: 'LIST_SCORES_BY_RUN_ID',\n details: { runId },\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw this.storageError('LIST_SCORES_BY_RUN_ID', 'FAILED', { runId }, error);\n }\n }\n\n async listScoresByEntityId({\n entityId,\n entityType,\n pagination,\n filters,\n }: {\n pagination: StoragePagination;\n entityId: string;\n entityType: string;\n filters?: ScoreTenancyFilters;\n }): Promise<ListScoresResponse> {\n try {\n const conditions = [`${SCORE_ENTITY_ID} = :entityId`, `${SCORE_ENTITY_TYPE} = :entityType`];\n const binds: Record<string, unknown> = { entityId, entityType };\n applyTenancyFilters(conditions, binds, filters);\n\n return await this.listScores({\n whereClause: `WHERE ${conditions.join(' AND ')}`,\n binds,\n pagination,\n operation: 'LIST_SCORES_BY_ENTITY_ID',\n details: { entityId, entityType },\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw this.storageError('LIST_SCORES_BY_ENTITY_ID', 'FAILED', { entityId, entityType }, error);\n }\n }\n\n async listScoresBySpan({\n traceId,\n spanId,\n pagination,\n filters,\n }: {\n traceId: string;\n spanId: string;\n pagination: StoragePagination;\n filters?: ScoreTenancyFilters;\n }): Promise<ListScoresResponse> {\n try {\n const conditions = [`${SCORE_TRACE_ID} = :traceId`, `${SCORE_SPAN_ID} = :spanId`];\n const binds: Record<string, unknown> = { traceId, spanId };\n applyTenancyFilters(conditions, binds, filters);\n\n return await this.listScores({\n whereClause: `WHERE ${conditions.join(' AND ')}`,\n binds,\n pagination,\n operation: 'LIST_SCORES_BY_SPAN',\n details: { traceId, spanId },\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw this.storageError('LIST_SCORES_BY_SPAN', 'FAILED', { traceId, spanId }, error);\n }\n }\n\n getDefaultIndexDefinitions(): OracleCreateIndexOptions[] {\n return defaultScoreIndexes(this.indexName.bind(this));\n }\n\n private async createIndexes(): Promise<void> {\n await this.db.withConnection(async connection => {\n if (!this.skipDefaultIndexes) {\n for (const index of this.getDefaultIndexDefinitions()) {\n try {\n await createOracleIndex(connection, index, this.schemaName);\n } catch (error) {\n this.logger?.warn?.(`Failed to create Oracle default index ${index.name}:`, error);\n }\n }\n }\n\n for (const index of this.indexes) {\n try {\n await createOracleIndex(connection, index, this.schemaName);\n } catch (error) {\n this.logger?.warn?.(`Failed to create Oracle custom index ${index.name}:`, error);\n }\n }\n });\n }\n\n private async ensureLongTextColumns(): Promise<void> {\n // LLM scorer prompts can exceed VARCHAR2(4000). Existing Oracle installs\n // may already have the old column shape, so migrate only columns that are\n // still character types and leave CLOB columns untouched.\n for (const columnName of SCORE_LONG_TEXT_COLUMNS) {\n const dataType = await this.scoreColumnDataType(columnName);\n if (dataType === 'CLOB' || dataType === 'NCLOB') continue;\n\n if (!dataType) {\n // The narrow column can be missing entirely because a previous\n // migration crashed between DROP and RENAME, leaving the CLOB copy\n // parked under its temporary name. Only skip when there is genuinely\n // nothing to repair; otherwise fall through so the migration resumes\n // instead of leaving the table permanently missing the column.\n const tempExists = await this.scoreColumnExists(scoreTempClobColumnName(columnName));\n if (!tempExists) continue;\n }\n\n await this.migrateScoreTextColumnToClob(columnName);\n }\n }\n\n private async ensureNullableJsonColumns(): Promise<void> {\n for (const columnName of SCORE_NULLABLE_JSON_COLUMNS) {\n const nullable = await this.scoreColumnNullable(columnName);\n if (nullable === 'N') {\n await this.db.executeDdl(`ALTER TABLE ${this.table()} MODIFY (${scoreColumnSql(columnName)} NULL)`);\n }\n }\n }\n\n private async scoreColumnDataType(columnName: string): Promise<string | undefined> {\n const binds: Record<string, string> = {\n tableName: TABLE_SCORERS,\n columnName,\n };\n const ownerPredicate = this.schemaName\n ? 'owner = UPPER(:schemaName)'\n : `owner = SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA')`;\n if (this.schemaName) binds.schemaName = this.schemaName;\n\n const row = await this.db.oneOrNone<{ dataType: string }>(\n `SELECT data_type AS \"dataType\" FROM all_tab_columns WHERE ${ownerPredicate} AND table_name = UPPER(:tableName) AND column_name IN (:columnName, UPPER(:columnName)) FETCH FIRST 1 ROW ONLY`,\n binds,\n );\n\n return row?.dataType?.toUpperCase();\n }\n\n private async scoreColumnNullable(columnName: string): Promise<string | undefined> {\n const binds: Record<string, string> = {\n tableName: TABLE_SCORERS,\n columnName,\n };\n const ownerPredicate = this.schemaName\n ? 'owner = UPPER(:schemaName)'\n : `owner = SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA')`;\n if (this.schemaName) binds.schemaName = this.schemaName;\n\n const row = await this.db.oneOrNone<{ nullable: string }>(\n `SELECT nullable AS \"nullable\" FROM all_tab_columns WHERE ${ownerPredicate} AND table_name = UPPER(:tableName) AND column_name IN (:columnName, UPPER(:columnName)) FETCH FIRST 1 ROW ONLY`,\n binds,\n );\n\n return row?.nullable;\n }\n\n private async scoreColumnExists(columnName: string): Promise<boolean> {\n // Variant of scoreColumnDataType that only checks presence, used to detect\n // an orphaned temp CLOB column (or a dropped original column) after a\n // partially-failed migration, without caring about its data type.\n const binds: Record<string, string> = {\n tableName: TABLE_SCORERS,\n columnName,\n };\n const ownerPredicate = this.schemaName\n ? 'owner = UPPER(:schemaName)'\n : `owner = SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA')`;\n if (this.schemaName) binds.schemaName = this.schemaName;\n\n const row = await this.db.oneOrNone<{ exists: number }>(\n `SELECT 1 AS \"exists\" FROM all_tab_columns WHERE ${ownerPredicate} AND table_name = UPPER(:tableName) AND column_name IN (:columnName, UPPER(:columnName)) FETCH FIRST 1 ROW ONLY`,\n binds,\n );\n\n return row !== null;\n }\n\n private async migrateScoreTextColumnToClob(columnName: (typeof SCORE_LONG_TEXT_COLUMNS)[number]): Promise<void> {\n const oldColumn = scoreColumnSql(columnName);\n const tempColumn = scoreTempClobColumnName(columnName);\n\n // Oracle commits each DDL statement immediately - ADD, DROP, and RENAME\n // are not wrapped in one transaction - so a previous call to this method\n // can crash partway through (e.g. after DROP but before RENAME, which\n // would otherwise leave the table missing the column forever). Resume\n // from the observable column state instead of blindly repeating the full\n // sequence. The temp column existing is NOT proof the copy ran: a crash\n // can land between ADD and UPDATE, so while the original column is still\n // present it stays the source of truth and the copy re-runs.\n const oldExists = await this.scoreColumnExists(columnName);\n const tempExists = await this.scoreColumnExists(tempColumn);\n\n if (!tempExists) {\n await this.db.executeDdl(`ALTER TABLE ${this.table()} ADD (${tempColumn} CLOB)`, [-1430]);\n }\n\n if (oldExists) {\n // The UPDATE is idempotent (it rewrites the temp CLOB from the original\n // column), so re-running it on every attempt that still has the\n // original column is safe - and required, or a retry after a failed\n // copy would DROP the only column holding the data and RENAME an\n // empty CLOB into its place.\n await this.db.none(\n `UPDATE ${this.table()} SET ${tempColumn} = TO_CLOB(${oldColumn}) WHERE ${oldColumn} IS NOT NULL`,\n );\n await this.db.executeDdl(`ALTER TABLE ${this.table()} DROP COLUMN ${oldColumn}`);\n }\n\n await this.db.executeDdl(`ALTER TABLE ${this.table()} RENAME COLUMN ${tempColumn} TO ${oldColumn}`);\n }\n\n private async listScores({\n whereClause,\n binds,\n pagination,\n operation,\n details,\n }: {\n whereClause: string;\n binds: Record<string, unknown>;\n pagination: StoragePagination;\n operation: string;\n details: Record<string, string | number | boolean | undefined>;\n }): Promise<ListScoresResponse> {\n try {\n // All score listing variants share the same pagination path so scorer,\n // run, entity, and trace views stay behaviorally identical.\n const countRow = await this.db.oneOrNone<{ count: number | string }>(\n `SELECT COUNT(*) AS \"count\" FROM ${this.table()} ${whereClause}`,\n binds,\n );\n const total = Number(countRow?.count ?? 0);\n const { page, perPage: perPageInput } = pagination;\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n if (total === 0) {\n return {\n scores: [],\n pagination: {\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n },\n };\n }\n\n const limit = perPageInput === false ? total : perPage;\n const end = perPageInput === false ? total : offset + perPage;\n const rows = await this.db.execute<ScoreRow>(\n // `id ASC` breaks ties between rows with identical createdAt timestamps so\n // pages stay stable instead of duplicating or dropping rows across pages.\n `${this.selectScores()} FROM ${this.table()} ${whereClause} ORDER BY ${SCORE_CREATED_AT} DESC, id ASC OFFSET :offset ROWS FETCH NEXT :limit ROWS ONLY`,\n { ...binds, offset, limit },\n );\n\n return {\n scores: rows.map(row => transformScoreRow(row)),\n pagination: {\n total,\n page,\n perPage: perPageForResponse,\n hasMore: end < total,\n },\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw this.storageError(operation, 'FAILED', details, error);\n }\n }\n\n private selectScores(): string {\n return `SELECT ${scoreSelectColumns()}`;\n }\n\n private table(): string {\n return qualifyName(TABLE_SCORERS, this.schemaName);\n }\n\n private indexName(indexName: string): string {\n return indexNameForTable(indexName, 'IDX');\n }\n\n private storageError(\n operation: string,\n reason: string,\n details: Record<string, string | number | boolean | undefined>,\n cause: unknown,\n category: ErrorCategory = ErrorCategory.THIRD_PARTY,\n ): MastraError {\n return createOracleStorageError({ storeName: STORE_NAME, operation, reason, details, cause, category });\n }\n}\n\nexport function getDefaultScoreIndexDefinitions(schemaIndexName: (name: string) => string): OracleCreateIndexOptions[] {\n return defaultScoreIndexes(schemaIndexName);\n}\n\nexport function scoreSelectColumns(): string {\n return [\n `id AS \"id\"`,\n `${SCORE_SCORER_ID} AS \"scorerId\"`,\n `${SCORE_TRACE_ID} AS \"traceId\"`,\n `${SCORE_SPAN_ID} AS \"spanId\"`,\n `${SCORE_RUN_ID} AS \"runId\"`,\n `scorer AS \"scorer\"`,\n `${SCORE_PREPROCESS_STEP_RESULT} AS \"preprocessStepResult\"`,\n `${SCORE_EXTRACT_STEP_RESULT} AS \"extractStepResult\"`,\n `${SCORE_ANALYZE_STEP_RESULT} AS \"analyzeStepResult\"`,\n `score AS \"score\"`,\n `reason AS \"reason\"`,\n `metadata AS \"metadata\"`,\n `${SCORE_PREPROCESS_PROMPT} AS \"preprocessPrompt\"`,\n `${SCORE_EXTRACT_PROMPT} AS \"extractPrompt\"`,\n `${SCORE_GENERATE_SCORE_PROMPT} AS \"generateScorePrompt\"`,\n `${SCORE_GENERATE_REASON_PROMPT} AS \"generateReasonPrompt\"`,\n `${SCORE_ANALYZE_PROMPT} AS \"analyzePrompt\"`,\n `${SCORE_REASON_PROMPT} AS \"reasonPrompt\"`,\n `input AS \"input\"`,\n `output AS \"output\"`,\n `${SCORE_ADDITIONAL_CONTEXT} AS \"additionalContext\"`,\n `${SCORE_REQUEST_CONTEXT} AS \"requestContext\"`,\n `${SCORE_ENTITY_TYPE} AS \"entityType\"`,\n `entity AS \"entity\"`,\n `${SCORE_ENTITY_ID} AS \"entityId\"`,\n `source AS \"source\"`,\n `${SCORE_RESOURCE_ID} AS \"resourceId\"`,\n `${SCORE_THREAD_ID} AS \"threadId\"`,\n `${SCORE_ORGANIZATION_ID} AS \"organizationId\"`,\n `${SCORE_PROJECT_ID} AS \"projectId\"`,\n `${SCORE_BATCH_ID} AS \"batchId\"`,\n `${SCORE_DATASET_ID} AS \"datasetId\"`,\n `${SCORE_DATASET_ITEM_ID} AS \"datasetItemId\"`,\n `${SCORE_CREATED_AT} AS \"createdAt\"`,\n `${SCORE_UPDATED_AT} AS \"updatedAt\"`,\n ].join(', ');\n}\n\nfunction defaultScoreIndexes(indexName: (name: string) => string): OracleCreateIndexOptions[] {\n return [\n {\n name: indexName('MASTRA_SCORES_SCORER_ID'),\n table: TABLE_SCORERS,\n columns: ['scorerId'],\n },\n {\n name: indexName('MASTRA_SCORES_RUN_ID'),\n table: TABLE_SCORERS,\n columns: ['runId'],\n },\n {\n name: indexName('MASTRA_SCORES_ENTITY_ID_TYPE'),\n table: TABLE_SCORERS,\n columns: ['entityId', 'entityType'],\n },\n {\n name: indexName('MASTRA_SCORES_TRACE_ID_SPAN_ID_CREATED_AT'),\n table: TABLE_SCORERS,\n columns: ['traceId', 'spanId', 'createdAt DESC'],\n },\n ];\n}\n\nfunction scoreColumnSql(columnName: string): string {\n return /^[a-z][a-z0-9_]*$/.test(columnName) ? columnName : `\"${columnName}\"`;\n}\n\nfunction scoreTempClobColumnName(columnName: string): string {\n return `ORACLE_TMP_${columnName.toUpperCase()}_CLOB`;\n}\n","import { ErrorCategory } from '@mastra/core/error';\nimport { normalizePerPage, TABLE_WORKFLOW_SNAPSHOT, WorkflowsStorage } from '@mastra/core/storage';\nimport type {\n StorageListWorkflowRunsInput,\n UpdateWorkflowStateOptions,\n WorkflowRun,\n WorkflowRuns,\n} from '@mastra/core/storage';\nimport type { StepResult, WorkflowRunState } from '@mastra/core/workflows';\n\nimport { isOracleErrorCode, jsonBind } from '../../../shared/connection';\nimport { indexNameForTable, qualifyName } from '../../../vector/identifiers';\nimport { OracleDB, createOracleIndex, filterIndexesForTables } from '../../db';\nimport type { OracleCreateIndexOptions, OracleTxClient } from '../../db';\nimport { createOracleStorageError, toDate } from '../../domain-utils';\nimport type { OracleDomainConfig } from '../../types';\n\n// Workflows persist resumable run snapshots in Oracle JSON and lock rows before\n// patching step results so concurrent updates do not lose state.\nconst STORE_NAME = 'ORACLEDB';\n\nconst WORKFLOW_CREATED_AT = '\"createdAt\"';\nconst WORKFLOW_UPDATED_AT = '\"updatedAt\"';\nconst WORKFLOW_RESOURCE_ID = '\"resourceId\"';\n\ntype WorkflowRow = {\n workflowName: string;\n runId: string;\n resourceId?: string | null;\n snapshot: unknown;\n createdAt: Date | string;\n updatedAt: Date | string;\n};\n\nexport class WorkflowsOracle extends WorkflowsStorage {\n // Workflow state is a JSON snapshot keyed by workflow name + run id.\n static readonly MANAGED_TABLES = [TABLE_WORKFLOW_SNAPSHOT] as const;\n\n private readonly db: OracleDB;\n private readonly schemaName?: string;\n private readonly skipDefaultIndexes?: boolean;\n private readonly indexes: OracleCreateIndexOptions[];\n\n constructor(config: OracleDomainConfig) {\n super();\n this.db = new OracleDB(config);\n this.schemaName = config.schemaName;\n this.skipDefaultIndexes = config.skipDefaultIndexes;\n this.indexes = filterIndexesForTables(config.indexes, WorkflowsOracle.MANAGED_TABLES);\n }\n\n supportsConcurrentUpdates(): boolean {\n // Row-level locks protect JSON snapshot patches, so independent steps can\n // update the same workflow run without clobbering each other.\n return true;\n }\n\n async init(): Promise<void> {\n await this.createTables();\n await this.createIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.db.clearTable(TABLE_WORKFLOW_SNAPSHOT);\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 try {\n return await this.db.tx(async client => {\n await this.ensureWorkflowRunRow(client, workflowName, runId);\n\n // Lock the row before patching the JSON snapshot so concurrent step updates do not overwrite each other.\n const existing = await client.one<{ snapshot: unknown; resourceId?: string | null }>(\n `SELECT snapshot AS \"snapshot\", ${WORKFLOW_RESOURCE_ID} AS \"resourceId\" FROM ${this.table()} WHERE workflow_name = :workflowName AND run_id = :runId FOR UPDATE`,\n { workflowName, runId },\n );\n\n const snapshot = parseSnapshot(existing.snapshot);\n snapshot.context[stepId] = result;\n snapshot.requestContext = { ...(snapshot.requestContext ?? {}), ...requestContext };\n\n await client.none(this.workflowMergeSql(), {\n workflowName,\n runId,\n resourceId: existing?.resourceId ?? null,\n snapshot: jsonBind(snapshot),\n createdAt: new Date(),\n updatedAt: new Date(),\n });\n\n return snapshot.context;\n });\n } catch (error) {\n throw this.storageError('UPDATE_WORKFLOW_RESULTS', 'FAILED', { workflowName, runId, stepId }, error);\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 try {\n return await this.db.tx(async client => {\n // State updates patch top-level snapshot fields and require a pre-existing\n // run row; result updates create a default row when needed.\n const existing = await client.oneOrNone<{ snapshot: unknown }>(\n `SELECT snapshot AS \"snapshot\" FROM ${this.table()} WHERE workflow_name = :workflowName AND run_id = :runId FOR UPDATE`,\n { workflowName, runId },\n );\n if (!existing) return undefined;\n\n const snapshot = parseSnapshot(existing.snapshot);\n if (!snapshot?.context) {\n throw new Error(`Snapshot not found for runId ${runId}`);\n }\n\n const updatedSnapshot = { ...snapshot, ...opts };\n await client.none(\n `UPDATE ${this.table()} SET snapshot = :snapshot, ${WORKFLOW_UPDATED_AT} = :updatedAt WHERE workflow_name = :workflowName AND run_id = :runId`,\n { workflowName, runId, snapshot: jsonBind(updatedSnapshot), updatedAt: new Date() },\n );\n return updatedSnapshot;\n });\n } catch (error) {\n throw this.storageError('UPDATE_WORKFLOW_STATE', 'FAILED', { workflowName, runId }, error);\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 try {\n const now = new Date();\n // Persisting a snapshot is an upsert because workflows may suspend/resume\n // the same run multiple times.\n await this.db.none(this.workflowMergeSql(), {\n workflowName,\n runId,\n resourceId: resourceId ?? null,\n snapshot: jsonBind(snapshot),\n createdAt: createdAt ?? now,\n updatedAt: updatedAt ?? now,\n });\n } catch (error) {\n throw this.storageError('PERSIST_WORKFLOW_SNAPSHOT', 'FAILED', { workflowName, runId }, error);\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.db.oneOrNone<{ snapshot: unknown }>(\n `SELECT snapshot AS \"snapshot\" FROM ${this.table()} WHERE workflow_name = :workflowName AND run_id = :runId`,\n { workflowName, runId },\n );\n return row ? parseSnapshot(row.snapshot) : null;\n } catch (error) {\n throw this.storageError('LOAD_WORKFLOW_SNAPSHOT', 'FAILED', { workflowName, runId }, error);\n }\n }\n\n async listWorkflowRuns({\n workflowName,\n fromDate,\n toDate,\n perPage,\n page,\n resourceId,\n status,\n }: StorageListWorkflowRunsInput = {}): Promise<WorkflowRuns> {\n try {\n const { whereClause, binds } = this.workflowWhereClause({ workflowName, fromDate, toDate, resourceId, status });\n const usePagination = typeof perPage === 'number' && typeof page === 'number';\n const normalizedPerPage = usePagination ? normalizePerPage(perPage, Number.MAX_SAFE_INTEGER) : 0;\n const offset = usePagination ? page! * normalizedPerPage : 0;\n\n const count = usePagination\n ? Number(\n (\n await this.db.one<{ count: number }>(\n `SELECT COUNT(*) AS \"count\" FROM ${this.table()} ${whereClause}`,\n binds,\n )\n ).count ?? 0,\n )\n : 0;\n\n const rows = await this.db.manyOrNone<WorkflowRow>(\n `${this.workflowSelect()} FROM ${this.table()} ${whereClause} ORDER BY ${WORKFLOW_CREATED_AT} DESC ${\n usePagination ? 'OFFSET :offset ROWS FETCH NEXT :limit ROWS ONLY' : ''\n }`,\n usePagination ? { ...binds, offset, limit: normalizedPerPage } : binds,\n );\n\n const runs = rows.map(row => this.parseWorkflowRun(row));\n return { runs, total: usePagination ? count : runs.length };\n } catch (error) {\n throw this.storageError('LIST_WORKFLOW_RUNS', 'FAILED', { workflowName: workflowName ?? 'all' }, error);\n }\n }\n\n async getWorkflowRunById({\n runId,\n workflowName,\n }: {\n runId: string;\n workflowName?: string;\n }): Promise<WorkflowRun | null> {\n try {\n const conditions = ['run_id = :runId'];\n const binds: Record<string, unknown> = { runId };\n if (workflowName) {\n conditions.push('workflow_name = :workflowName');\n binds.workflowName = workflowName;\n }\n\n const rows = await this.db.manyOrNone<WorkflowRow>(\n `${this.workflowSelect()} FROM ${this.table()} WHERE ${conditions.join(' AND ')} ORDER BY ${WORKFLOW_CREATED_AT} DESC FETCH FIRST 1 ROWS ONLY`,\n binds,\n );\n return rows[0] ? this.parseWorkflowRun(rows[0]) : null;\n } catch (error) {\n throw this.storageError('GET_WORKFLOW_RUN_BY_ID', 'FAILED', { runId, workflowName: workflowName ?? '' }, error);\n }\n }\n\n async deleteWorkflowRunById({ runId, workflowName }: { runId: string; workflowName: string }): Promise<void> {\n try {\n await this.db.none(`DELETE FROM ${this.table()} WHERE workflow_name = :workflowName AND run_id = :runId`, {\n workflowName,\n runId,\n });\n } catch (error) {\n throw this.storageError('DELETE_WORKFLOW_RUN_BY_ID', 'FAILED', { runId, workflowName }, error);\n }\n }\n\n private async createTables(): Promise<void> {\n await this.db.executeDdl(\n `\n CREATE TABLE ${this.table()} (\n workflow_name VARCHAR2(512) NOT NULL,\n run_id VARCHAR2(512) NOT NULL,\n ${WORKFLOW_RESOURCE_ID} VARCHAR2(512),\n snapshot JSON NOT NULL,\n ${WORKFLOW_CREATED_AT} TIMESTAMP WITH TIME ZONE NOT NULL,\n ${WORKFLOW_UPDATED_AT} TIMESTAMP WITH TIME ZONE NOT NULL,\n CONSTRAINT ${this.constraint('MASTRA_WORKFLOW_SNAPSHOT_PK')} PRIMARY KEY (workflow_name, run_id)\n )`,\n [-955],\n );\n\n await this.db.executeDdl(`ALTER TABLE ${this.table()} ADD (${WORKFLOW_RESOURCE_ID} VARCHAR2(512))`, [-1430]);\n }\n\n private async createIndexes(): Promise<void> {\n await this.db.withConnection(async connection => {\n if (!this.skipDefaultIndexes) {\n for (const index of this.defaultIndexes()) {\n try {\n await createOracleIndex(connection, index, this.schemaName);\n } catch (error) {\n this.logger?.warn?.(`Failed to create Oracle default index ${index.name}:`, error);\n }\n }\n }\n\n for (const index of this.indexes) {\n await createOracleIndex(connection, index, this.schemaName);\n }\n });\n }\n\n private defaultIndexes(): OracleCreateIndexOptions[] {\n return [\n {\n name: this.indexName('MASTRA_WORKFLOW_NAME_CREATED_IDX'),\n table: TABLE_WORKFLOW_SNAPSHOT,\n columns: ['workflow_name', 'createdAt'],\n },\n {\n name: this.indexName('MASTRA_WORKFLOW_RESOURCE_CREATED_IDX'),\n table: TABLE_WORKFLOW_SNAPSHOT,\n columns: ['resourceId', 'createdAt'],\n },\n {\n name: this.indexName('MASTRA_WORKFLOW_STATUS_IDX'),\n table: TABLE_WORKFLOW_SNAPSHOT,\n columns: [\"JSON_VALUE(snapshot, '$.status' RETURNING VARCHAR2(64) NULL ON ERROR)\"],\n },\n ];\n }\n\n private workflowMergeSql(): string {\n return `\n MERGE INTO ${this.table()} target\n USING (\n SELECT\n :workflowName AS workflow_name,\n :runId AS run_id,\n :resourceId AS resource_id,\n :snapshot AS snapshot,\n :createdAt AS created_at,\n :updatedAt AS updated_at\n FROM dual\n ) source\n ON (target.workflow_name = source.workflow_name AND target.run_id = source.run_id)\n WHEN MATCHED THEN UPDATE SET\n target.${WORKFLOW_RESOURCE_ID} = source.resource_id,\n target.snapshot = source.snapshot,\n target.${WORKFLOW_UPDATED_AT} = source.updated_at\n WHEN NOT MATCHED THEN INSERT (\n workflow_name,\n run_id,\n ${WORKFLOW_RESOURCE_ID},\n snapshot,\n ${WORKFLOW_CREATED_AT},\n ${WORKFLOW_UPDATED_AT}\n ) VALUES (\n source.workflow_name,\n source.run_id,\n source.resource_id,\n source.snapshot,\n source.created_at,\n source.updated_at\n )`;\n }\n\n private async ensureWorkflowRunRow(client: OracleTxClient, workflowName: string, runId: string): Promise<void> {\n const now = new Date();\n try {\n // Step-result updates may arrive before a full snapshot is persisted.\n // Seed a minimal row so JSON patching always has a target.\n await client.none(\n `INSERT INTO ${this.table()} (\n workflow_name,\n run_id,\n ${WORKFLOW_RESOURCE_ID},\n snapshot,\n ${WORKFLOW_CREATED_AT},\n ${WORKFLOW_UPDATED_AT}\n ) VALUES (\n :workflowName,\n :runId,\n :resourceId,\n :snapshot,\n :createdAt,\n :updatedAt\n )`,\n {\n workflowName,\n runId,\n resourceId: null,\n snapshot: jsonBind(createDefaultSnapshot(runId)),\n createdAt: now,\n updatedAt: now,\n },\n );\n } catch (error) {\n if (!isOracleErrorCode(error, [-1])) throw error;\n }\n }\n\n private workflowWhereClause(args: {\n workflowName?: string;\n fromDate?: Date;\n toDate?: Date;\n resourceId?: string;\n status?: string;\n }): { whereClause: string; binds: Record<string, unknown> } {\n const conditions: string[] = [];\n const binds: Record<string, unknown> = {};\n // Status lives inside the JSON snapshot; identifiers/resource/time remain\n // scalar columns for the common workflow list filters.\n if (args.workflowName) {\n conditions.push('workflow_name = :workflowName');\n binds.workflowName = args.workflowName;\n }\n if (args.resourceId) {\n conditions.push(`${WORKFLOW_RESOURCE_ID} = :resourceId`);\n binds.resourceId = args.resourceId;\n }\n if (args.status) {\n conditions.push(`JSON_VALUE(snapshot, '$.status' RETURNING VARCHAR2(64) NULL ON ERROR) = :status`);\n binds.status = args.status;\n }\n if (args.fromDate) {\n conditions.push(`${WORKFLOW_CREATED_AT} >= :fromDate`);\n binds.fromDate = args.fromDate;\n }\n if (args.toDate) {\n conditions.push(`${WORKFLOW_CREATED_AT} <= :toDate`);\n binds.toDate = args.toDate;\n }\n\n return { whereClause: conditions.length ? `WHERE ${conditions.join(' AND ')}` : '', binds };\n }\n\n private workflowSelect(): string {\n return `SELECT workflow_name AS \"workflowName\", run_id AS \"runId\", ${WORKFLOW_RESOURCE_ID} AS \"resourceId\", snapshot AS \"snapshot\", ${WORKFLOW_CREATED_AT} AS \"createdAt\", ${WORKFLOW_UPDATED_AT} AS \"updatedAt\"`;\n }\n\n private parseWorkflowRun(row: WorkflowRow): WorkflowRun {\n return {\n workflowName: String(row.workflowName),\n runId: String(row.runId),\n resourceId: row.resourceId === null || row.resourceId === undefined ? undefined : String(row.resourceId),\n snapshot: parseSnapshot(row.snapshot),\n createdAt: toDate(row.createdAt),\n updatedAt: toDate(row.updatedAt),\n };\n }\n\n private table(): string {\n return qualifyName(TABLE_WORKFLOW_SNAPSHOT, this.schemaName);\n }\n\n private indexName(indexName: string): string {\n return indexNameForTable(indexName, 'IDX');\n }\n\n private constraint(name: string): string {\n return indexNameForTable(name, 'CONSTRAINT');\n }\n\n private storageError(\n operation: string,\n reason: string,\n details: Record<string, string | number | boolean | undefined>,\n cause: unknown,\n category: ErrorCategory = ErrorCategory.THIRD_PARTY,\n ) {\n return createOracleStorageError({ storeName: STORE_NAME, operation, reason, details, cause, category });\n }\n}\n\nfunction createDefaultSnapshot(runId: string): WorkflowRunState {\n return {\n context: {},\n activePaths: [],\n timestamp: Date.now(),\n suspendedPaths: {},\n activeStepsPath: {},\n resumeLabels: {},\n serializedStepGraph: [],\n status: 'pending',\n value: {},\n waitingPaths: {},\n runId,\n requestContext: {},\n } as WorkflowRunState;\n}\n\nfunction parseSnapshot(value: unknown): WorkflowRunState {\n if (typeof value === 'string') return JSON.parse(value) as WorkflowRunState;\n if (Buffer.isBuffer(value)) return JSON.parse(value.toString('utf8')) as WorkflowRunState;\n if (value && typeof value === 'object') return value as WorkflowRunState;\n throw new Error('Workflow snapshot is empty or invalid');\n}\n","import { createHash } from 'node:crypto';\n\nimport type { ObjectRow } from '../shared/connection';\nimport { normalizeIdentifier } from '../vector/identifiers';\nimport type { OracleQueryBinds, OracleTxClient } from './db';\n\nexport const DEFAULT_ORACLE_MIGRATIONS_TABLE = 'MASTRA_ORACLE_MIGRATIONS';\n\n// Versioned migrations protect one-time schema changes. Repeatable migrations\n// reconcile domain tables and indexes when checksums change or migrate() is forced.\nexport type OracleMigrationKind = 'versioned' | 'repeatable';\nexport type OracleMigrationStatus = 'applied' | 'reapplied' | 'skipped';\n\nexport interface OracleMigration {\n id: string;\n name: string;\n description?: string;\n kind?: OracleMigrationKind;\n checksum?: string;\n run(): Promise<void>;\n}\n\nexport interface OracleMigrationRecord {\n id: string;\n name: string;\n kind: OracleMigrationKind;\n checksum: string;\n description?: string | null;\n appliedAt?: unknown;\n updatedAt?: unknown;\n}\n\nexport interface OracleMigrationResult {\n id: string;\n name: string;\n kind: OracleMigrationKind;\n status: OracleMigrationStatus;\n checksum: string;\n}\n\nexport interface OracleMigrationRunOptions {\n forceRepeatable?: boolean;\n}\n\nexport interface OracleMigrationDatabase {\n table(tableName: string): string;\n executeDdl(sql: string, ignoredErrorCodes?: number[]): Promise<void>;\n manyOrNone<T extends ObjectRow = ObjectRow>(sql: string, binds?: OracleQueryBinds): Promise<T[]>;\n tx<T>(callback: (client: OracleTxClient) => Promise<T>): Promise<T>;\n}\n\nexport interface OracleMigrationRegistryConfig {\n db: OracleMigrationDatabase;\n tableName?: string;\n}\n\ntype OracleMigrationTableRow = {\n id: string;\n name: string;\n kind: OracleMigrationKind;\n checksum: string;\n description?: string | null;\n appliedAt?: unknown;\n updatedAt?: unknown;\n};\n\nconst MIGRATION_ID_PATTERN = /^[A-Za-z][A-Za-z0-9_.:-]*$/;\nconst MAX_MIGRATION_ID_LENGTH = 256;\nconst MAX_MIGRATION_NAME_LENGTH = 512;\nconst MAX_MIGRATION_DESCRIPTION_LENGTH = 4000;\n// Matches the ledger's checksum VARCHAR2(128) column so an oversized custom\n// checksum fails fast in normalizeMigration() instead of during record().\nconst MAX_MIGRATION_CHECKSUM_LENGTH = 128;\n\n// The ledger is intentionally small: it only records migration identity,\n// checksum, and timestamps, leaving domain code responsible for idempotent DDL.\nexport class OracleMigrationRegistry {\n private readonly db: OracleMigrationDatabase;\n private readonly tableName: string;\n\n constructor(config: OracleMigrationRegistryConfig) {\n this.db = config.db;\n this.tableName = normalizeIdentifier(config.tableName ?? DEFAULT_ORACLE_MIGRATIONS_TABLE, 'migration table name');\n }\n\n async init(): Promise<void> {\n await this.db.executeDdl(oracleMigrationTableSql(this.table()), [-955]);\n }\n\n async list(): Promise<OracleMigrationRecord[]> {\n await this.init();\n return this.readRecords();\n }\n\n async run(migrations: OracleMigration[], options: OracleMigrationRunOptions = {}): Promise<OracleMigrationResult[]> {\n await this.init();\n const applied = new Map((await this.readRecords()).map(record => [record.id, record]));\n const results: OracleMigrationResult[] = [];\n\n // Run migrations in the order provided by OracleStore. Normal init skips\n // unchanged repeatables; explicit migrate() can force reconciliation after upgrades.\n for (const migration of migrations) {\n const normalized = normalizeMigration(migration);\n const current = applied.get(normalized.id);\n\n if (current && current.kind !== normalized.kind) {\n throw new Error(\n `Oracle migration ${normalized.id} was already applied as ${current.kind} and cannot be changed to ${normalized.kind}.`,\n );\n }\n\n if (current && normalized.kind === 'versioned') {\n if (current.checksum !== normalized.checksum) {\n throw new Error(\n `Oracle migration ${normalized.id} was already applied with checksum ${current.checksum}, but the current definition has checksum ${normalized.checksum}. Add a new migration instead of changing an applied versioned migration.`,\n );\n }\n results.push({ ...normalized, status: 'skipped' });\n continue;\n }\n\n if (\n current &&\n normalized.kind === 'repeatable' &&\n current.checksum === normalized.checksum &&\n !options.forceRepeatable\n ) {\n results.push({ ...normalized, status: 'skipped' });\n continue;\n }\n\n await normalized.run();\n await this.record(normalized);\n applied.set(normalized.id, normalized);\n results.push({ ...normalized, status: current ? 'reapplied' : 'applied' });\n }\n\n return results;\n }\n\n private table(): string {\n return this.db.table(this.tableName);\n }\n\n private async readRecords(): Promise<OracleMigrationRecord[]> {\n return this.db.manyOrNone<OracleMigrationTableRow>(\n `SELECT\n id AS \"id\",\n name AS \"name\",\n kind AS \"kind\",\n checksum AS \"checksum\",\n description AS \"description\",\n applied_at AS \"appliedAt\",\n updated_at AS \"updatedAt\"\nFROM ${this.table()}\nORDER BY id`,\n );\n }\n\n private async record(migration: NormalizedOracleMigration): Promise<void> {\n await this.db.tx(async client => {\n // MERGE keeps the ledger accurate for both first application and repeatable re-application.\n await client.none(\n `MERGE INTO ${this.table()} target\nUSING (\n SELECT\n :id AS id,\n :name AS name,\n :kind AS kind,\n :checksum AS checksum,\n :description AS description\n FROM dual\n) source\nON (target.id = source.id)\nWHEN MATCHED THEN UPDATE SET\n target.name = source.name,\n target.kind = source.kind,\n target.checksum = source.checksum,\n target.description = source.description,\n target.updated_at = SYSTIMESTAMP\nWHEN NOT MATCHED THEN INSERT (id, name, kind, checksum, description, applied_at, updated_at)\nVALUES (source.id, source.name, source.kind, source.checksum, source.description, SYSTIMESTAMP, SYSTIMESTAMP)`,\n {\n id: migration.id,\n name: migration.name,\n kind: migration.kind,\n checksum: migration.checksum,\n description: migration.description ?? null,\n },\n );\n });\n }\n}\n\nexport function oracleMigrationTableSql(qualifiedTableName: string): string {\n return `CREATE TABLE ${qualifiedTableName} (\n id VARCHAR2(256) PRIMARY KEY,\n name VARCHAR2(512) NOT NULL,\n kind VARCHAR2(32) NOT NULL,\n checksum VARCHAR2(128) NOT NULL,\n description VARCHAR2(4000),\n applied_at TIMESTAMP WITH TIME ZONE DEFAULT SYSTIMESTAMP NOT NULL,\n updated_at TIMESTAMP WITH TIME ZONE DEFAULT SYSTIMESTAMP NOT NULL\n)`;\n}\n\ntype NormalizedOracleMigration = Omit<OracleMigration, 'kind' | 'description' | 'checksum'> & {\n kind: OracleMigrationKind;\n checksum: string;\n description?: string;\n};\n\nfunction normalizeMigration(migration: OracleMigration): NormalizedOracleMigration {\n // Normalize before checksum calculation so equivalent ids/names produce stable\n // ledger records across platforms and CI environments.\n const id = normalizeMigrationId(migration.id);\n const name = normalizeMigrationName(migration.name);\n const kind = migration.kind ?? 'versioned';\n const description = normalizeMigrationDescription(migration.description);\n const checksum = normalizeMigrationChecksum(migration.checksum) ?? checksumMigration({ id, name, kind, description });\n\n return {\n ...migration,\n id,\n name,\n kind,\n description,\n checksum,\n };\n}\n\nfunction normalizeMigrationId(value: string): string {\n const id = value.trim();\n if (!MIGRATION_ID_PATTERN.test(id)) {\n throw new Error('Oracle migration id must start with a letter and contain only letters, numbers, _, ., :, or -');\n }\n if (id.length > MAX_MIGRATION_ID_LENGTH) {\n throw new Error(`Oracle migration id must be ${MAX_MIGRATION_ID_LENGTH} characters or fewer`);\n }\n return id;\n}\n\nfunction normalizeMigrationName(value: string): string {\n const name = value.trim();\n if (!name) {\n throw new Error('Oracle migration name must be provided and cannot be empty');\n }\n if (name.length > MAX_MIGRATION_NAME_LENGTH) {\n throw new Error(`Oracle migration name must be ${MAX_MIGRATION_NAME_LENGTH} characters or fewer`);\n }\n return name;\n}\n\nfunction normalizeMigrationDescription(value: string | undefined): string | undefined {\n const description = value?.trim();\n if (!description) return undefined;\n if (description.length > MAX_MIGRATION_DESCRIPTION_LENGTH) {\n throw new Error(`Oracle migration description must be ${MAX_MIGRATION_DESCRIPTION_LENGTH} characters or fewer`);\n }\n return description;\n}\n\nfunction normalizeMigrationChecksum(value: string | undefined): string | undefined {\n const checksum = value?.trim();\n if (!checksum) return undefined;\n if (checksum.length > MAX_MIGRATION_CHECKSUM_LENGTH) {\n throw new Error(`Oracle migration checksum must be ${MAX_MIGRATION_CHECKSUM_LENGTH} characters or fewer`);\n }\n return checksum;\n}\n\nfunction checksumMigration(input: {\n id: string;\n name: string;\n kind: OracleMigrationKind;\n description?: string;\n}): string {\n // The checksum covers migration identity/description so accidental edits to\n // versioned migrations are caught before any DDL runs.\n return createHash('sha256').update(JSON.stringify(input)).digest('hex').toUpperCase();\n}\n","import { createHash } from 'node:crypto';\n\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { createStorageErrorId, MastraCompositeStore } from '@mastra/core/storage';\nimport type { StorageDomains } from '@mastra/core/storage';\nimport type { Pool } from 'oracledb';\n\nimport { OraclePoolManager } from '../shared/connection';\nimport { normalizeIdentifier } from '../vector/identifiers';\nimport { OracleDB, filterIndexesForTables } from './db';\nimport type { OracleCreateIndexOptions } from './db';\nimport { AgentsOracle } from './domains/agents';\nimport { MCPClientsOracle } from './domains/mcp-clients';\nimport { MemoryOracle } from './domains/memory';\nimport { ObservabilityOracle } from './domains/observability';\nimport { ScorerDefinitionsOracle } from './domains/scorer-definitions';\nimport { ScoresOracle } from './domains/scores';\nimport { WorkflowsOracle } from './domains/workflows';\nimport { OracleMigrationRegistry } from './migrations';\nimport type { OracleMigration, OracleMigrationRecord, OracleMigrationResult } from './migrations';\nimport type { OracleStoreConfig } from './types';\n\nconst STORE_NAME = 'ORACLEDB';\nconst DOMAIN_SCHEMA_VERSIONS: Record<string, number> = {\n R001_MEMORY_SCHEMA: 1,\n R002_WORKFLOWS_SCHEMA: 1,\n R003_OBSERVABILITY_SCHEMA: 1,\n R004_SCORES_SCHEMA: 1,\n R005_SCORER_DEFINITIONS_SCHEMA: 1,\n R006_MCP_CLIENTS_SCHEMA: 1,\n R007_AGENTS_SCHEMA: 1,\n};\n\nexport class OracleStore extends MastraCompositeStore {\n private readonly poolManager: OraclePoolManager;\n private readonly ownsPoolManager: boolean;\n private readonly schemaName?: string;\n private readonly skipDefaultIndexes?: boolean;\n private readonly indexes?: OracleCreateIndexOptions[];\n private readonly dbClient: OracleDB;\n private readonly migrationRegistry: OracleMigrationRegistry;\n private isInitialized = false;\n private initPromise?: Promise<void>;\n private migrationPromise?: Promise<OracleMigrationResult[]>;\n\n stores: StorageDomains;\n\n constructor(config: OracleStoreConfig) {\n try {\n super({ id: config.id, name: 'OracleStore', disableInit: config.disableInit });\n this.schemaName = config.schemaName ? normalizeIdentifier(config.schemaName, 'schema name') : undefined;\n this.skipDefaultIndexes = config.skipDefaultIndexes;\n this.indexes = config.indexes;\n this.poolManager = config.poolManager ?? new OraclePoolManager(config);\n this.ownsPoolManager = !config.poolManager;\n this.dbClient = new OracleDB({ poolManager: this.poolManager, schemaName: this.schemaName });\n this.migrationRegistry = new OracleMigrationRegistry({\n db: this.dbClient,\n tableName: config.migrationTableName,\n });\n\n const domainConfig = {\n poolManager: this.poolManager,\n schemaName: this.schemaName,\n messageBatchSize: config.messageBatchSize,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n vectorRegistryTableName: config.vectorRegistryTableName\n ? normalizeIdentifier(config.vectorRegistryTableName, 'vector registry table name')\n : undefined,\n };\n\n this.stores = {\n memory: new MemoryOracle(domainConfig),\n workflows: new WorkflowsOracle(domainConfig),\n observability: new ObservabilityOracle(domainConfig),\n scores: new ScoresOracle(domainConfig),\n scorerDefinitions: new ScorerDefinitionsOracle(domainConfig),\n mcpClients: new MCPClientsOracle(domainConfig),\n agents: new AgentsOracle(domainConfig),\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId(STORE_NAME, 'INITIALIZATION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { schemaName: config.schemaName ?? '' },\n },\n error,\n );\n }\n }\n\n async init(): Promise<void> {\n if (this.isInitialized) return;\n if (this.initPromise) return this.initPromise;\n\n this.initPromise = this.runMigrationsOnce(false).then(() => undefined);\n return this.initPromise;\n }\n\n async migrate(): Promise<OracleMigrationResult[]> {\n // If an init() is already in flight, let it settle first so a concurrent\n // migrate() still gets its own forced (forceRepeatable: true) run instead\n // of coalescing into the unforced init promise. runMigrations()'s finally\n // block clears migrationPromise/initPromise on settle, so this always\n // starts a fresh forced run afterward.\n if (this.initPromise) {\n await this.initPromise;\n }\n return this.runMigrationsOnce(true);\n }\n\n private async runMigrationsOnce(forceRepeatable: boolean): Promise<OracleMigrationResult[]> {\n if (this.migrationPromise) return this.migrationPromise;\n\n this.migrationPromise = this.runMigrations(forceRepeatable);\n return this.migrationPromise;\n }\n\n async listMigrations(): Promise<OracleMigrationRecord[]> {\n return this.migrationRegistry.list();\n }\n\n private async runMigrations(forceRepeatable: boolean): Promise<OracleMigrationResult[]> {\n try {\n const results = await this.migrationRegistry.run(this.storageMigrations(), { forceRepeatable });\n this.isInitialized = true;\n return results;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId(STORE_NAME, 'MIGRATION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n } finally {\n this.migrationPromise = undefined;\n this.initPromise = undefined;\n }\n }\n\n private storageMigrations(): OracleMigration[] {\n const repeatable = (\n id: string,\n name: string,\n description: string,\n managedTables: readonly string[],\n run: () => Promise<void>,\n ): OracleMigration => ({\n id,\n name,\n kind: 'repeatable',\n description,\n checksum: this.domainMigrationChecksum({ id, name, description, managedTables }),\n run,\n });\n\n return [\n repeatable(\n 'R001_MEMORY_SCHEMA',\n 'Memory domain schema',\n 'Creates or updates Oracle tables and indexes for threads, messages, resources, working memory, and observational memory.',\n MemoryOracle.MANAGED_TABLES,\n async () => {\n await this.stores.memory?.init();\n },\n ),\n repeatable(\n 'R002_WORKFLOWS_SCHEMA',\n 'Workflow domain schema',\n 'Creates or updates Oracle workflow snapshot tables for durable workflow state.',\n WorkflowsOracle.MANAGED_TABLES,\n async () => {\n await this.stores.workflows?.init();\n },\n ),\n repeatable(\n 'R003_OBSERVABILITY_SCHEMA',\n 'Observability domain schema',\n 'Creates or updates Oracle spans and log event tables used by Mastra observability.',\n ObservabilityOracle.MANAGED_TABLES,\n async () => {\n await this.stores.observability?.init();\n },\n ),\n repeatable(\n 'R004_SCORES_SCHEMA',\n 'Scores domain schema',\n 'Creates or updates Oracle scoring and evaluation result tables.',\n ScoresOracle.MANAGED_TABLES,\n async () => {\n await this.stores.scores?.init();\n },\n ),\n repeatable(\n 'R005_SCORER_DEFINITIONS_SCHEMA',\n 'Scorer definitions domain schema',\n 'Creates or updates Oracle scorer definition registry tables and indexes.',\n ScorerDefinitionsOracle.MANAGED_TABLES,\n async () => {\n await this.stores.scorerDefinitions?.init();\n },\n ),\n repeatable(\n 'R006_MCP_CLIENTS_SCHEMA',\n 'MCP clients domain schema',\n 'Creates or updates Oracle MCP client registry tables and indexes.',\n MCPClientsOracle.MANAGED_TABLES,\n async () => {\n await this.stores.mcpClients?.init();\n },\n ),\n repeatable(\n 'R007_AGENTS_SCHEMA',\n 'Agents domain schema',\n 'Creates or updates Oracle agent registry tables and indexes.',\n AgentsOracle.MANAGED_TABLES,\n async () => {\n await this.stores.agents?.init();\n },\n ),\n ];\n }\n\n private domainMigrationChecksum(input: {\n id: string;\n name: string;\n description: string;\n managedTables: readonly string[];\n }): string {\n const indexes = filterIndexesForTables(this.indexes, input.managedTables);\n\n return createHash('sha256')\n .update(\n stableStringify({\n id: input.id,\n name: input.name,\n kind: 'repeatable',\n description: input.description,\n schemaVersion: DOMAIN_SCHEMA_VERSIONS[input.id] ?? 1,\n managedTables: [...input.managedTables],\n indexConfig: {\n skipDefaultIndexes: this.skipDefaultIndexes === true,\n indexes,\n },\n }),\n )\n .digest('hex')\n .toUpperCase();\n }\n\n async getPool(): Promise<Pool> {\n return this.poolManager.getPool();\n }\n\n getPoolManager(): OraclePoolManager {\n return this.poolManager;\n }\n\n get db(): OracleDB {\n return this.dbClient;\n }\n\n async disconnect(): Promise<void> {\n if (this.ownsPoolManager) {\n await this.poolManager.close();\n }\n }\n\n async close(): Promise<void> {\n await this.disconnect();\n }\n}\n\nexport { OracleDB } from './db';\nexport { AgentsOracle } from './domains/agents';\nexport { MCPClientsOracle } from './domains/mcp-clients';\nexport { MemoryOracle } from './domains/memory';\nexport { ObservabilityOracle } from './domains/observability';\nexport { ScorerDefinitionsOracle } from './domains/scorer-definitions';\nexport { ScoresOracle } from './domains/scores';\nexport { WorkflowsOracle } from './domains/workflows';\nexport { DEFAULT_ORACLE_MIGRATIONS_TABLE, OracleMigrationRegistry, oracleMigrationTableSql } from './migrations';\nexport type {\n OracleMigration,\n OracleMigrationRecord,\n OracleMigrationResult,\n OracleMigrationRunOptions,\n} from './migrations';\nexport type { OracleStoreConfig } from './types';\n\nfunction stableStringify(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(stableStringify).join(',')}]`;\n if (!value || typeof value !== 'object') return JSON.stringify(value);\n\n return `{${Object.keys(value)\n .sort()\n .map(key => `${JSON.stringify(key)}:${stableStringify((value as Record<string, unknown>)[key])}`)\n .join(',')}}`;\n}\n","import {\n TABLE_AGENTS,\n TABLE_AGENT_VERSIONS,\n TABLE_MCP_CLIENTS,\n TABLE_MCP_CLIENT_VERSIONS,\n TABLE_MESSAGES,\n TABLE_OBSERVATIONAL_MEMORY,\n TABLE_RESOURCES,\n TABLE_SCHEMAS,\n TABLE_SCORER_DEFINITION_VERSIONS,\n TABLE_SCORER_DEFINITIONS,\n TABLE_SCORERS,\n TABLE_SPANS,\n TABLE_THREADS,\n TABLE_WORKFLOW_SNAPSHOT,\n} from '@mastra/core/storage';\n\nimport { generateOracleIndexSQL, generateOracleTableSQL } from './storage/db';\nimport type { OracleCreateIndexOptions } from './storage/db';\nimport { getDefaultAgentIndexDefinitions, ORACLE_AGENT_VERSIONS_SCHEMA } from './storage/domains/agents';\nimport { getDefaultMCPClientIndexDefinitions } from './storage/domains/mcp-clients';\nimport {\n getDefaultObservabilityIndexDefinitions,\n logEventsTableSql,\n LOG_EVENTS_TABLE,\n} from './storage/domains/observability';\nimport { getDefaultScorerDefinitionIndexDefinitions } from './storage/domains/scorer-definitions';\nimport { getDefaultScoreIndexDefinitions, ORACLE_SCORES_SCHEMA } from './storage/domains/scores';\nimport { DEFAULT_ORACLE_MIGRATIONS_TABLE, oracleMigrationTableSql } from './storage/migrations';\nimport {\n assertJsonPath,\n indexNameForMetadataField,\n indexNameForTable,\n normalizeIdentifier,\n normalizeLogicalIndexName,\n qualifyName,\n tableNameForIndex,\n} from './vector/identifiers';\nimport {\n buildVectorIndexParameterClause,\n defaultMetricForFormat,\n metricToken,\n normalizeMetric,\n normalizeVectorFormat,\n validateAccuracy,\n validateDimension,\n validateMetricForFormat,\n validateVectorFormatDimension,\n vectorFormatToken,\n} from './vector/sql';\nimport type { OracleMetric, OracleVectorFormat, OracleVectorIndexConfig } from './vector/types';\n\n// Offline DDL export mirrors the runtime migrations so DBA-managed deployments\n// can review or apply the exact Oracle schema before initializing a Mastra app.\nexport type OracleSchemaDomain =\n | 'migrations'\n | 'memory'\n | 'workflows'\n | 'observability'\n | 'scores'\n | 'scorerDefinitions'\n | 'mcpClients'\n | 'agents'\n | 'vector';\n\nexport interface OracleVectorSchemaIndex {\n indexName: string;\n dimension: number;\n metric?: OracleMetric;\n vectorFormat?: OracleVectorFormat;\n indexConfig?: OracleVectorIndexConfig;\n buildIndex?: boolean;\n metadataIndexes?: string[];\n}\n\nexport interface ExportOracleSchemasOptions {\n schemaName?: string;\n domains?: OracleSchemaDomain[];\n skipDefaultIndexes?: boolean;\n indexes?: OracleCreateIndexOptions[];\n migrationTableName?: string;\n vector?: {\n tablePrefix?: string;\n registryTableName?: string;\n defaultMetadataIndexes?: string[];\n indexes?: OracleVectorSchemaIndex[];\n };\n}\n\nconst DEFAULT_DOMAINS: OracleSchemaDomain[] = [\n 'migrations',\n 'memory',\n 'workflows',\n 'observability',\n 'scores',\n 'scorerDefinitions',\n 'mcpClients',\n 'agents',\n 'vector',\n];\nconst DEFAULT_VECTOR_TABLE_PREFIX = 'MASTRA_VEC';\nconst DEFAULT_VECTOR_REGISTRY_TABLE = 'MASTRA_VECTOR_INDEXES';\nconst DEFAULT_VECTOR_METADATA_INDEXES = ['thread_id', 'resource_id', 'message_id', 'source_id'];\n\n// Keep domain ordering deterministic: shared metadata first, storage domains next,\n// and vector tables last so generated SQL reads like the runtime initialization path.\nexport function exportSchemas(options: ExportOracleSchemasOptions = {}): string {\n const schemaName = options.schemaName ? normalizeIdentifier(options.schemaName, 'schema name') : undefined;\n const domains = new Set(options.domains ?? DEFAULT_DOMAINS);\n const statements: string[] = [];\n\n if (needsMigrationTable(domains)) {\n statements.push(...migrationSchemaStatements(schemaName, options.migrationTableName));\n }\n\n if (domains.has('memory')) {\n statements.push(...memorySchemaStatements(schemaName));\n if (!options.skipDefaultIndexes) statements.push(...memoryDefaultIndexStatements(schemaName));\n statements.push(...customIndexStatements(options.indexes, MemorySchemaTables, schemaName));\n }\n\n if (domains.has('workflows')) {\n statements.push(...workflowSchemaStatements(schemaName));\n if (!options.skipDefaultIndexes) statements.push(...workflowDefaultIndexStatements(schemaName));\n statements.push(...customIndexStatements(options.indexes, WorkflowSchemaTables, schemaName));\n }\n\n if (domains.has('observability')) {\n statements.push(...observabilitySchemaStatements(schemaName));\n if (!options.skipDefaultIndexes) statements.push(...observabilityDefaultIndexStatements(schemaName));\n statements.push(...customIndexStatements(options.indexes, ObservabilitySchemaTables, schemaName));\n }\n\n if (domains.has('scores')) {\n statements.push(...scoreSchemaStatements(schemaName));\n if (!options.skipDefaultIndexes) statements.push(...scoreDefaultIndexStatements(schemaName));\n statements.push(...customIndexStatements(options.indexes, ScoreSchemaTables, schemaName));\n }\n\n if (domains.has('scorerDefinitions')) {\n statements.push(...scorerDefinitionSchemaStatements(schemaName));\n if (!options.skipDefaultIndexes) statements.push(...scorerDefinitionDefaultIndexStatements(schemaName));\n statements.push(...customIndexStatements(options.indexes, ScorerDefinitionSchemaTables, schemaName));\n }\n\n if (domains.has('mcpClients')) {\n statements.push(...mcpClientSchemaStatements(schemaName));\n if (!options.skipDefaultIndexes) statements.push(...mcpClientDefaultIndexStatements(schemaName));\n statements.push(...customIndexStatements(options.indexes, MCPClientSchemaTables, schemaName));\n }\n\n if (domains.has('agents')) {\n statements.push(...agentSchemaStatements(schemaName));\n if (!options.skipDefaultIndexes) statements.push(...agentDefaultIndexStatements(schemaName));\n statements.push(...customIndexStatements(options.indexes, AgentSchemaTables, schemaName));\n }\n\n if (domains.has('vector')) {\n statements.push(...vectorSchemaStatements(options.vector, schemaName));\n }\n\n return statements.map(statement => `${statement.trim()};`).join('\\n\\n');\n}\n\nconst MemorySchemaTables = [TABLE_THREADS, TABLE_MESSAGES, TABLE_RESOURCES, TABLE_OBSERVATIONAL_MEMORY] as const;\nconst WorkflowSchemaTables = [TABLE_WORKFLOW_SNAPSHOT] as const;\nconst ObservabilitySchemaTables = [TABLE_SPANS, LOG_EVENTS_TABLE] as const;\nconst ScoreSchemaTables = [TABLE_SCORERS] as const;\nconst ScorerDefinitionSchemaTables = [TABLE_SCORER_DEFINITIONS, TABLE_SCORER_DEFINITION_VERSIONS] as const;\nconst MCPClientSchemaTables = [TABLE_MCP_CLIENTS, TABLE_MCP_CLIENT_VERSIONS] as const;\nconst AgentSchemaTables = [TABLE_AGENTS, TABLE_AGENT_VERSIONS] as const;\n\nfunction needsMigrationTable(domains: Set<OracleSchemaDomain>): boolean {\n return (\n domains.has('migrations') ||\n domains.has('memory') ||\n domains.has('workflows') ||\n domains.has('observability') ||\n domains.has('scores') ||\n domains.has('scorerDefinitions') ||\n domains.has('mcpClients') ||\n domains.has('agents')\n );\n}\n\nfunction migrationSchemaStatements(schemaName?: string, tableName = DEFAULT_ORACLE_MIGRATIONS_TABLE): string[] {\n return [oracleMigrationTableSql(qualifyName(normalizeIdentifier(tableName, 'migration table name'), schemaName))];\n}\n\nfunction memorySchemaStatements(schemaName?: string): string[] {\n // Memory DDL is explicit because messages, working memory, and observations\n // need Oracle-specific CLOB choices in addition to native JSON columns.\n return [\n `CREATE TABLE ${qualifyName(TABLE_RESOURCES, schemaName)} (\n id VARCHAR2(512) PRIMARY KEY,\n \"workingMemory\" CLOB,\n metadata JSON,\n \"createdAt\" TIMESTAMP WITH TIME ZONE NOT NULL,\n \"updatedAt\" TIMESTAMP WITH TIME ZONE NOT NULL\n)`,\n `CREATE TABLE ${qualifyName(TABLE_THREADS, schemaName)} (\n id VARCHAR2(512) PRIMARY KEY,\n \"resourceId\" VARCHAR2(512) NOT NULL,\n title VARCHAR2(1024),\n metadata JSON,\n \"createdAt\" TIMESTAMP WITH TIME ZONE NOT NULL,\n \"updatedAt\" TIMESTAMP WITH TIME ZONE NOT NULL\n)`,\n `CREATE TABLE ${qualifyName(TABLE_MESSAGES, schemaName)} (\n id VARCHAR2(512) PRIMARY KEY,\n thread_id VARCHAR2(512) NOT NULL,\n content CLOB NOT NULL,\n role VARCHAR2(64) NOT NULL,\n type VARCHAR2(64) NOT NULL,\n \"createdAt\" TIMESTAMP WITH TIME ZONE NOT NULL,\n \"resourceId\" VARCHAR2(512)\n)`,\n `CREATE TABLE ${qualifyName(TABLE_OBSERVATIONAL_MEMORY, schemaName)} (\n id VARCHAR2(512) PRIMARY KEY,\n \"lookupKey\" VARCHAR2(1024) NOT NULL,\n \"scope\" VARCHAR2(32) NOT NULL,\n \"resourceId\" VARCHAR2(512) NOT NULL,\n \"threadId\" VARCHAR2(512),\n \"activeObservations\" CLOB,\n \"activeObservationsPendingUpdate\" CLOB,\n \"originType\" VARCHAR2(32) NOT NULL,\n config JSON NOT NULL,\n \"generationCount\" NUMBER(10) DEFAULT 0 NOT NULL,\n \"lastObservedAt\" TIMESTAMP WITH TIME ZONE,\n \"lastReflectionAt\" TIMESTAMP WITH TIME ZONE,\n \"pendingMessageTokens\" NUMBER(20) DEFAULT 0 NOT NULL,\n \"totalTokensObserved\" NUMBER(20) DEFAULT 0 NOT NULL,\n \"observationTokenCount\" NUMBER(20) DEFAULT 0 NOT NULL,\n \"isObserving\" NUMBER(1) DEFAULT 0 NOT NULL,\n \"isReflecting\" NUMBER(1) DEFAULT 0 NOT NULL,\n \"observedMessageIds\" JSON,\n \"observedTimezone\" VARCHAR2(128),\n \"bufferedObservations\" CLOB,\n \"bufferedObservationTokens\" NUMBER(20),\n \"bufferedMessageIds\" JSON,\n \"bufferedReflection\" CLOB,\n \"bufferedReflectionTokens\" NUMBER(20),\n \"bufferedReflectionInputTokens\" NUMBER(20),\n \"reflectedObservationLineCount\" NUMBER(20),\n \"bufferedObservationChunks\" JSON,\n \"isBufferingObservation\" NUMBER(1) DEFAULT 0 NOT NULL,\n \"isBufferingReflection\" NUMBER(1) DEFAULT 0 NOT NULL,\n \"lastBufferedAtTokens\" NUMBER(20) DEFAULT 0 NOT NULL,\n \"lastBufferedAtTime\" TIMESTAMP WITH TIME ZONE,\n metadata JSON,\n \"createdAt\" TIMESTAMP WITH TIME ZONE NOT NULL,\n \"updatedAt\" TIMESTAMP WITH TIME ZONE NOT NULL\n)`,\n ];\n}\n\nfunction workflowSchemaStatements(schemaName?: string): string[] {\n return [\n `CREATE TABLE ${qualifyName(TABLE_WORKFLOW_SNAPSHOT, schemaName)} (\n workflow_name VARCHAR2(512) NOT NULL,\n run_id VARCHAR2(512) NOT NULL,\n \"resourceId\" VARCHAR2(512),\n snapshot JSON NOT NULL,\n \"createdAt\" TIMESTAMP WITH TIME ZONE NOT NULL,\n \"updatedAt\" TIMESTAMP WITH TIME ZONE NOT NULL,\n CONSTRAINT ${storageConstraintName('MASTRA_WORKFLOW_SNAPSHOT_PK')} PRIMARY KEY (workflow_name, run_id)\n)`,\n ];\n}\n\nfunction scoreSchemaStatements(schemaName?: string): string[] {\n return [\n generateOracleTableSQL({\n tableName: TABLE_SCORERS,\n schema: ORACLE_SCORES_SCHEMA,\n schemaName,\n }),\n ];\n}\n\nfunction observabilitySchemaStatements(schemaName?: string): string[] {\n return [\n generateOracleTableSQL({\n tableName: TABLE_SPANS,\n schema: TABLE_SCHEMAS[TABLE_SPANS],\n schemaName,\n compositePrimaryKey: ['traceId', 'spanId'],\n }),\n logEventsTableSql(qualifyName(LOG_EVENTS_TABLE, schemaName)),\n ];\n}\n\nfunction agentSchemaStatements(schemaName?: string): string[] {\n return [\n generateOracleTableSQL({\n tableName: TABLE_AGENTS,\n schema: TABLE_SCHEMAS[TABLE_AGENTS],\n schemaName,\n }),\n generateOracleTableSQL({\n tableName: TABLE_AGENT_VERSIONS,\n schema: ORACLE_AGENT_VERSIONS_SCHEMA,\n schemaName,\n }),\n ];\n}\n\nfunction scorerDefinitionSchemaStatements(schemaName?: string): string[] {\n return [\n generateOracleTableSQL({\n tableName: TABLE_SCORER_DEFINITIONS,\n schema: TABLE_SCHEMAS[TABLE_SCORER_DEFINITIONS],\n schemaName,\n }),\n generateOracleTableSQL({\n tableName: TABLE_SCORER_DEFINITION_VERSIONS,\n schema: TABLE_SCHEMAS[TABLE_SCORER_DEFINITION_VERSIONS],\n schemaName,\n }),\n ];\n}\n\nfunction mcpClientSchemaStatements(schemaName?: string): string[] {\n return [\n generateOracleTableSQL({\n tableName: TABLE_MCP_CLIENTS,\n schema: TABLE_SCHEMAS[TABLE_MCP_CLIENTS],\n schemaName,\n }),\n generateOracleTableSQL({\n tableName: TABLE_MCP_CLIENT_VERSIONS,\n schema: TABLE_SCHEMAS[TABLE_MCP_CLIENT_VERSIONS],\n schemaName,\n }),\n ];\n}\n\nfunction vectorSchemaStatements(config: ExportOracleSchemasOptions['vector'], schemaName?: string): string[] {\n // Vector export creates the same registry + physical VECTOR tables used by\n // OracleVector at runtime, so DBAs can pre-provision indexes deterministically.\n const registryTableName = normalizeIdentifier(\n config?.registryTableName ?? DEFAULT_VECTOR_REGISTRY_TABLE,\n 'registry table name',\n );\n const tablePrefix = normalizeIdentifier(config?.tablePrefix ?? DEFAULT_VECTOR_TABLE_PREFIX, 'table prefix');\n const statements = [vectorRegistryTableStatement(registryTableName, schemaName)];\n\n for (const vectorIndex of config?.indexes ?? []) {\n statements.push(\n ...vectorIndexStatements(vectorIndex, tablePrefix, registryTableName, config?.defaultMetadataIndexes, schemaName),\n );\n }\n\n return statements;\n}\n\nfunction memoryDefaultIndexStatements(schemaName?: string): string[] {\n return [\n {\n name: storageIndexName('MASTRA_THREADS_RESOURCE_CREATED_IDX'),\n table: TABLE_THREADS,\n columns: ['resourceId', 'createdAt'],\n },\n {\n name: storageIndexName('MASTRA_MESSAGES_THREAD_CREATED_IDX'),\n table: TABLE_MESSAGES,\n columns: ['thread_id', 'createdAt'],\n },\n {\n name: storageIndexName('MASTRA_MESSAGES_RESOURCE_CREATED_IDX'),\n table: TABLE_MESSAGES,\n columns: ['resourceId', 'createdAt'],\n },\n {\n name: storageIndexName('MASTRA_OM_LOOKUP_GENERATION_IDX'),\n table: TABLE_OBSERVATIONAL_MEMORY,\n columns: ['lookupKey', 'generationCount'],\n },\n {\n name: storageIndexName('MASTRA_OM_RESOURCE_CREATED_IDX'),\n table: TABLE_OBSERVATIONAL_MEMORY,\n columns: ['resourceId', 'createdAt'],\n },\n {\n name: storageIndexName('MASTRA_OM_THREAD_CREATED_IDX'),\n table: TABLE_OBSERVATIONAL_MEMORY,\n columns: ['threadId', 'createdAt'],\n },\n ].map(index => generateOracleIndexSQL(index, schemaName));\n}\n\nfunction workflowDefaultIndexStatements(schemaName?: string): string[] {\n return [\n {\n name: storageIndexName('MASTRA_WORKFLOW_NAME_CREATED_IDX'),\n table: TABLE_WORKFLOW_SNAPSHOT,\n columns: ['workflow_name', 'createdAt'],\n },\n {\n name: storageIndexName('MASTRA_WORKFLOW_RESOURCE_CREATED_IDX'),\n table: TABLE_WORKFLOW_SNAPSHOT,\n columns: ['resourceId', 'createdAt'],\n },\n {\n name: storageIndexName('MASTRA_WORKFLOW_STATUS_IDX'),\n table: TABLE_WORKFLOW_SNAPSHOT,\n columns: [\"JSON_VALUE(snapshot, '$.status' RETURNING VARCHAR2(64) NULL ON ERROR)\"],\n },\n ].map(index => generateOracleIndexSQL(index, schemaName));\n}\n\nfunction scoreDefaultIndexStatements(schemaName?: string): string[] {\n return getDefaultScoreIndexDefinitions(indexName => storageIndexName(indexName)).map(index =>\n generateOracleIndexSQL(index, schemaName),\n );\n}\n\nfunction observabilityDefaultIndexStatements(schemaName?: string): string[] {\n return getDefaultObservabilityIndexDefinitions(indexName => storageIndexName(indexName)).map(index =>\n generateOracleIndexSQL(index, schemaName),\n );\n}\n\nfunction agentDefaultIndexStatements(schemaName?: string): string[] {\n return getDefaultAgentIndexDefinitions(indexName => storageIndexName(indexName)).map(index =>\n generateOracleIndexSQL(index, schemaName),\n );\n}\n\nfunction scorerDefinitionDefaultIndexStatements(schemaName?: string): string[] {\n return getDefaultScorerDefinitionIndexDefinitions(indexName => storageIndexName(indexName)).map(index =>\n generateOracleIndexSQL(index, schemaName),\n );\n}\n\nfunction mcpClientDefaultIndexStatements(schemaName?: string): string[] {\n return getDefaultMCPClientIndexDefinitions(indexName => storageIndexName(indexName)).map(index =>\n generateOracleIndexSQL(index, schemaName),\n );\n}\n\nfunction customIndexStatements(\n indexes: OracleCreateIndexOptions[] | undefined,\n tables: readonly string[],\n schemaName?: string,\n): string[] {\n // A single config can contain indexes for every domain; filter here so a\n // domain-specific export never emits DDL for tables it does not own.\n if (!indexes?.length) return [];\n const managedTables = new Set(tables.map(table => normalizeIdentifier(table, 'table name')));\n return indexes\n .filter(index => managedTables.has(normalizeIdentifier(index.table, 'table name')))\n .map(index => generateOracleIndexSQL(index, schemaName));\n}\n\nfunction vectorRegistryTableStatement(registryTableName: string, schemaName?: string): string {\n return `CREATE TABLE ${qualifyName(registryTableName, schemaName)} (\n index_name VARCHAR2(512) PRIMARY KEY,\n table_name VARCHAR2(128) NOT NULL,\n dimension NUMBER(10) NOT NULL,\n metric VARCHAR2(32) NOT NULL,\n index_type VARCHAR2(16) NOT NULL,\n vector_format VARCHAR2(16) DEFAULT 'vector' NOT NULL,\n accuracy NUMBER(3),\n created_at TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL,\n updated_at TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL\n)`;\n}\n\nfunction vectorIndexStatements(\n vectorIndex: OracleVectorSchemaIndex,\n tablePrefix: string,\n registryTableName: string,\n defaultMetadataIndexes: string[] | undefined,\n schemaName?: string,\n): string[] {\n // Logical index metadata is stored in the registry table; the data lives in a\n // dedicated VECTOR table so index names map cleanly to Mastra's API surface.\n const indexName = normalizeLogicalIndexName(vectorIndex.indexName);\n const dimension = validateDimension(vectorIndex.dimension);\n const vectorFormat = normalizeVectorFormat(vectorIndex.vectorFormat ?? 'vector');\n validateVectorFormatDimension(vectorFormat, dimension);\n const metric = normalizeMetric(vectorIndex.metric ?? defaultMetricForFormat(vectorFormat));\n const tableName = tableNameForIndex(indexName, tablePrefix);\n const indexConfig: OracleVectorIndexConfig = { type: 'none', accuracy: 95, ...vectorIndex.indexConfig };\n const registryIndexConfig: OracleVectorIndexConfig =\n vectorIndex.buildIndex === false ? { type: 'none', accuracy: 95 } : indexConfig;\n validateMetricForFormat(metric, vectorFormat, registryIndexConfig.type);\n const statements = [\n `CREATE TABLE ${qualifyName(tableName, schemaName)} (\n vector_id VARCHAR2(512) PRIMARY KEY,\n embedding VECTOR(${dimension}, ${vectorFormatToken(vectorFormat)}) NOT NULL,\n metadata JSON NOT NULL,\n created_at TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL,\n updated_at TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL\n)`,\n vectorRegistryMergeStatement({\n registryTableName,\n indexName,\n tableName,\n dimension,\n metric,\n indexType: registryIndexConfig.type ?? 'none',\n vectorFormat,\n accuracy: registryIndexConfig.accuracy ?? 95,\n schemaName,\n }),\n ];\n\n for (const field of vectorIndex.metadataIndexes ?? defaultMetadataIndexes ?? DEFAULT_VECTOR_METADATA_INDEXES) {\n // Metadata indexes are function-based JSON_VALUE indexes, matching the\n // provider's JSON filter path for common resource/thread/document fields.\n const metadataIndexName = indexNameForMetadataField(tableName, field);\n const jsonPath = assertJsonPath(field);\n statements.push(`CREATE INDEX ${qualifyName(metadataIndexName, schemaName)}\nON ${qualifyName(tableName, schemaName)} (\n JSON_VALUE(metadata, '${jsonPath}' RETURNING VARCHAR2(4000) NULL ON ERROR)\n)`);\n }\n\n if (vectorIndex.buildIndex !== false && indexConfig.type && indexConfig.type !== 'none') {\n statements.push(vectorPhysicalIndexStatement({ tableName, metric, indexConfig, schemaName }));\n }\n\n return statements;\n}\n\nfunction vectorRegistryMergeStatement({\n registryTableName,\n indexName,\n tableName,\n dimension,\n metric,\n indexType,\n vectorFormat,\n accuracy,\n schemaName,\n}: {\n registryTableName: string;\n indexName: string;\n tableName: string;\n dimension: number;\n metric: OracleMetric;\n indexType: string;\n vectorFormat: OracleVectorFormat;\n accuracy: number;\n schemaName?: string;\n}): string {\n // MERGE makes generated SQL re-runnable during review, local setup, or DBA\n // deployment without duplicate registry rows.\n return `MERGE INTO ${qualifyName(registryTableName, schemaName)} target\nUSING (\n SELECT\n '${escapeSqlLiteral(indexName)}' AS index_name,\n '${tableName}' AS table_name,\n ${dimension} AS dimension,\n '${metric}' AS metric,\n '${indexType}' AS index_type,\n '${vectorFormat}' AS vector_format,\n ${validateAccuracy(accuracy)} AS accuracy\n FROM dual\n) source\nON (target.index_name = source.index_name)\nWHEN MATCHED THEN UPDATE SET\n target.table_name = source.table_name,\n target.dimension = source.dimension,\n target.metric = source.metric,\n target.index_type = source.index_type,\n target.vector_format = source.vector_format,\n target.accuracy = source.accuracy,\n target.updated_at = SYSTIMESTAMP\nWHEN NOT MATCHED THEN INSERT (\n index_name,\n table_name,\n dimension,\n metric,\n index_type,\n vector_format,\n accuracy,\n created_at,\n updated_at\n) VALUES (\n source.index_name,\n source.table_name,\n source.dimension,\n source.metric,\n source.index_type,\n source.vector_format,\n source.accuracy,\n SYSTIMESTAMP,\n SYSTIMESTAMP\n)`;\n}\n\nfunction vectorPhysicalIndexStatement({\n tableName,\n metric,\n indexConfig,\n schemaName,\n}: {\n tableName: string;\n metric: OracleMetric;\n indexConfig: OracleVectorIndexConfig;\n schemaName?: string;\n}): string {\n // Physical HNSW/IVF indexes are optional. Exact VECTOR_DISTANCE search works\n // without them, while approximate indexes are added when buildIndex is enabled.\n const accuracy = validateAccuracy(indexConfig.accuracy ?? 95);\n const organization =\n indexConfig.type === 'ivf' ? 'ORGANIZATION NEIGHBOR PARTITIONS' : 'ORGANIZATION INMEMORY NEIGHBOR GRAPH';\n const parameters = buildVectorIndexParameterClause(indexConfig);\n\n return `CREATE VECTOR INDEX ${qualifyName(indexNameForTable(tableName, 'VECTOR_IDX'), schemaName)}\nON ${qualifyName(tableName, schemaName)} (embedding)\n${organization}\nDISTANCE ${metricToken(metric)}\nWITH TARGET ACCURACY ${accuracy}${parameters ? `\\n${parameters}` : ''}`;\n}\n\nfunction storageIndexName(indexName: string): string {\n return indexNameForTable(indexName, 'IDX');\n}\n\nfunction storageConstraintName(name: string): string {\n return indexNameForTable(name, 'CONSTRAINT');\n}\n\nfunction escapeSqlLiteral(value: string): string {\n return value.replace(/'/g, \"''\");\n}\n","/**\n * Vector store specific prompt that details supported Oracle JSON metadata filter operators and examples.\n * This prompt helps users construct valid filters for Oracle Database Vector Search.\n */\nexport const ORACLEDB_PROMPT = `When querying Oracle Database Vector Search, you can ONLY use the operators listed below. Any other operators will be rejected.\nImportant: Don't explain how to construct the filter - use the specified operators and fields to search the content and return relevant results.\nIf a user tries to give an explicit operator that is not supported, reject the filter entirely and let them know that the operator is not supported.\n\nOracle-specific behavior:\n- Metadata is stored as Oracle JSON.\n- Scalar comparisons are compiled to JSON_VALUE(metadata, ...).\n- Array, existence, and element-match checks are compiled to JSON_EXISTS(metadata, ...).\n- Regex filters are compiled to Oracle REGEXP_LIKE.\n- String contains filters are compiled to case-insensitive LIKE predicates.\n- User metadata values are always bound as parameters; do not generate raw SQL fragments inside filters.\n\nBasic Comparison Operators:\n- $eq: Exact match (default when using field: value)\n Example: { \"category\": \"electronics\" }\n- $ne: Not equal\n Example: { \"category\": { \"$ne\": \"electronics\" } }\n- $gt: Greater than\n Example: { \"price\": { \"$gt\": 100 } }\n- $gte: Greater than or equal\n Example: { \"price\": { \"$gte\": 100 } }\n- $lt: Less than\n Example: { \"price\": { \"$lt\": 100 } }\n- $lte: Less than or equal\n Example: { \"price\": { \"$lte\": 100 } }\n\nArray Operators:\n- $in: Match any value in an array or scalar field\n Example: { \"category\": { \"$in\": [\"electronics\", \"books\"] } }\n- $nin: Does not match any value in an array or scalar field\n Example: { \"category\": { \"$nin\": [\"electronics\", \"books\"] } }\n- $all: Match all values in an array field\n Example: { \"tags\": { \"$all\": [\"premium\", \"sale\"] } }\n- $elemMatch: Match array elements that meet all specified conditions\n Example: { \"items\": { \"$elemMatch\": { \"price\": { \"$gt\": 100 } } } }\n- $contains: For strings, perform case-insensitive substring matching. For arrays, require contained values.\n Example: { \"title\": { \"$contains\": \"oracle\" } }\n Example: { \"tags\": { \"$contains\": \"premium\" } }\n\nLogical Operators:\n- $and: Logical AND (implicit when using multiple conditions)\n Example: { \"$and\": [{ \"price\": { \"$gt\": 100 } }, { \"category\": \"electronics\" }] }\n- $or: Logical OR\n Example: { \"$or\": [{ \"price\": { \"$lt\": 50 } }, { \"category\": \"books\" }] }\n- $not: Logical NOT\n Example: { \"$not\": { \"category\": \"electronics\" } }\n- $nor: Logical NOR\n Example: { \"$nor\": [{ \"price\": { \"$lt\": 50 } }, { \"category\": \"books\" }] }\n\nElement Operators:\n- $exists: Check if a JSON metadata field exists\n Example: { \"rating\": { \"$exists\": true } }\n\nSpecial Operators:\n- $size: Array length check\n Example: { \"tags\": { \"$size\": 2 } }\n- $regex: Oracle regular expression match using REGEXP_LIKE\n Example: { \"source\": { \"$regex\": \"oracle.*database\" } }\n\nRestrictions:\n- Nested fields are supported using dot notation\n- Multiple conditions on the same field are supported with both implicit and explicit $and\n- Array operations should be used only on JSON array fields\n- Empty arrays in $in, $nin, and $all conditions are handled gracefully\n- Only logical operators ($and, $or, $not, $nor) can be used at the top level\n- All other operators must be used within a field condition\n Valid: { \"field\": { \"$gt\": 100 } }\n Valid: { \"$and\": [{ \"field\": { \"$gt\": 100 } }] }\n Invalid: { \"$gt\": 100 }\n Invalid: { \"$contains\": \"value\" }\n- Logical operators must contain field conditions, not direct operators\n Valid: { \"$and\": [{ \"field\": { \"$gt\": 100 } }] }\n Invalid: { \"$and\": [{ \"$gt\": 100 }] }\n- $not operator:\n - Must be a non-empty object\n - Can be used at field level or top level\n - Valid: { \"$not\": { \"field\": \"value\" } }\n - Valid: { \"field\": { \"$not\": { \"$eq\": \"value\" } } }\n- Other logical operators ($and, $or, $nor):\n - Can only be used at top level or nested within other logical operators\n - Can not be used on a field level, or be nested inside a field\n - Can not be used inside an operator\n - Valid: { \"$and\": [{ \"field\": { \"$gt\": 100 } }] }\n - Valid: { \"$or\": [{ \"$and\": [{ \"field\": { \"$gt\": 100 } }] }] }\n - Invalid: { \"field\": { \"$and\": [{ \"$gt\": 100 }] } }\n - Invalid: { \"field\": { \"$or\": [{ \"$gt\": 100 }] } }\n - Invalid: { \"field\": { \"$gt\": { \"$and\": [{...}] } } }\n- $elemMatch requires an object with conditions\n Valid: { \"array\": { \"$elemMatch\": { \"field\": \"value\" } } }\n Invalid: { \"array\": { \"$elemMatch\": \"value\" } }\n\nExample Complex Query:\n{\n \"$and\": [\n { \"resource_id\": \"docs\" },\n { \"thread_id\": { \"$exists\": true } },\n { \"score\": { \"$gte\": 0.75 } },\n { \"tags\": { \"$all\": [\"oracle\", \"mastra\"] } },\n { \"chunks\": { \"$elemMatch\": { \"page\": { \"$gte\": 2 }, \"kind\": \"reference\" } } },\n { \"$or\": [\n { \"source\": { \"$regex\": \"oracle.*database\" } },\n { \"title\": { \"$contains\": \"vector search\" } }\n ]}\n ]\n}`;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/shared/connection.ts","../src/vector/identifiers.ts","../src/vector/sql.ts","../src/vector/filter.ts","../src/vector/upsert.ts","../src/vector/ddl.ts","../src/vector/query.ts","../src/vector/stats.ts","../src/vector/index.ts","../src/storage/db/index.ts","../src/storage/domain-utils.ts","../src/storage/domains/agents/index.ts","../src/storage/domains/mcp-clients/index.ts","../src/storage/domains/memory/utils.ts","../src/storage/domains/memory/schema.ts","../src/storage/domains/memory/messages.ts","../src/storage/domains/memory/observational.ts","../src/storage/domains/memory/observational-buffering.ts","../src/storage/domains/memory/resources.ts","../src/storage/domains/memory/threads.ts","../src/storage/domains/memory/index.ts","../src/storage/domains/observability/schema.ts","../src/storage/domains/observability/binds.ts","../src/storage/domains/observability/logs.ts","../src/storage/domains/observability/scores-bridge.ts","../src/storage/domains/observability/spans.ts","../src/storage/domains/observability/index.ts","../src/storage/domains/scorer-definitions/index.ts","../src/storage/domains/scores/index.ts","../src/storage/domains/workflows/index.ts","../src/storage/migrations.ts","../src/storage/index.ts","../src/schema.ts","../src/vector/prompt.ts"],"names":["indexName","oracledb","tableName","ErrorCategory","MastraError","sql","result","validateTopK","table","validatePositiveInteger","ErrorDomain","STORE_NAME","TABLE_SCHEMAS","rows","jsonValue","VERSION_VERSION_NUMBER","VERSION_CHANGED_FIELDS","VERSION_CHANGE_MESSAGE","VERSION_CREATED_AT","normalizePerPage","calculatePagination","jsonComparableValue","optionalString","parseJson","randomUUID","TABLE_OBSERVATIONAL_MEMORY","TABLE_MESSAGES","TABLE_THREADS","TABLE_RESOURCES","bind","list","SIMPLE_IDENTIFIER","LOWERCASE_SQL_IDENTIFIER","storageError","isIdentifierLikeColumn","createStorageErrorId","TABLE_SCORERS","TABLE_SPANS","SNAPSHOT_FIELDS","coreTransformScoreRow","TABLE_WORKFLOW_SNAPSHOT","toDate","createHash","DEFAULT_VECTOR_REGISTRY_TABLE","TABLE_SCORER_DEFINITIONS","TABLE_SCORER_DEFINITION_VERSIONS","TABLE_MCP_CLIENTS","TABLE_MCP_CLIENT_VERSIONS","TABLE_AGENTS","TABLE_AGENT_VERSIONS"],"mappings":"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","file":"index.js","sourcesContent":["import oracledb from 'oracledb';\nimport type { Connection, Pool, PoolAttributes } from 'oracledb';\n\nexport interface OracleConnectionConfig {\n user?: string;\n password?: string;\n connectString?: string;\n pool?: Pool;\n poolMin?: number;\n poolMax?: number;\n poolIncrement?: number;\n configDir?: string;\n walletLocation?: string;\n walletPassword?: string;\n externalAuth?: boolean;\n}\n\ntype BindParameters = oracledb.BindParameters;\n\nexport type ObjectRow = Record<string, unknown>;\n\nexport class OraclePoolManager {\n // Pool creation is lazy and memoized so OracleStore and OracleVector can share one manager safely.\n private poolPromise?: Promise<Pool>;\n private readonly poolOptions?: PoolAttributes;\n private readonly ownsPool: boolean;\n\n constructor(private readonly config: OracleConnectionConfig) {\n validateOracleConnectionConfig(config);\n this.ownsPool = !config.pool;\n if (!config.pool) {\n this.poolOptions = buildPoolOptions(config);\n }\n }\n\n async getPool(): Promise<Pool> {\n if (this.config.pool) return this.config.pool;\n if (!this.poolOptions) {\n throw new Error('Oracle pool options were not initialized');\n }\n if (!this.poolPromise) {\n // Reset the promise on failure so a transient listener/network issue does not poison the manager forever.\n this.poolPromise = oracledb.createPool(this.poolOptions).catch(error => {\n this.poolPromise = undefined;\n throw error;\n });\n }\n return this.poolPromise;\n }\n\n async withConnection<T>(callback: (connection: Connection) => Promise<T>): Promise<T> {\n const pool = await this.getPool();\n const connection = await pool.getConnection();\n try {\n // Transaction ownership stays with the caller; this helper only owns acquire/release.\n return await callback(connection);\n } finally {\n await connection.close();\n }\n }\n\n async close(): Promise<void> {\n if (this.ownsPool && this.poolPromise) {\n const poolPromise = this.poolPromise;\n this.poolPromise = undefined;\n const pool = await poolPromise;\n await pool.close(0);\n }\n }\n}\n\nexport function validateOracleConnectionConfig(config: OracleConnectionConfig): void {\n if (!config.pool) {\n // External authentication (OS/Kerberos/wallet TLS) identifies the session\n // without explicit credentials, so user and password may both be omitted.\n if (!config.connectString || (!config.externalAuth && !config.user)) {\n throw new Error('Provide either an Oracle pool or user/connectString credentials');\n }\n if (!config.externalAuth && !config.password) {\n throw new Error('Password is required unless externalAuth is enabled');\n }\n }\n}\n\nexport function normalizeBatchSize(value: number | undefined, label: string, defaultValue: number): number {\n if (value === undefined) return defaultValue;\n if (!Number.isInteger(value) || value <= 0) {\n throw new Error(`${label} must be a positive integer`);\n }\n return value;\n}\n\nexport function buildPoolOptions(config: OracleConnectionConfig): PoolAttributes {\n const options: PoolAttributes = {\n user: config.user,\n password: config.password,\n connectString: config.connectString,\n poolMin: config.poolMin ?? 0,\n poolMax: config.poolMax ?? 4,\n poolIncrement: config.poolIncrement ?? 1,\n externalAuth: config.externalAuth,\n };\n\n if (config.configDir) options.configDir = config.configDir;\n if (config.walletLocation) options.walletLocation = config.walletLocation;\n if (config.walletPassword) options.walletPassword = config.walletPassword;\n\n return options;\n}\n\nexport function executeOptions(): oracledb.ExecuteOptions {\n return {\n outFormat: oracledb.OUT_FORMAT_OBJECT,\n // Mastra stores several rich text fields as CLOBs; fetch them as strings to keep domain mappers simple.\n fetchInfo: {\n content: { type: oracledb.STRING as unknown as number },\n instructions: { type: oracledb.STRING as unknown as number },\n description: { type: oracledb.STRING as unknown as number },\n changeMessage: { type: oracledb.STRING as unknown as number },\n other: { type: oracledb.STRING as unknown as number },\n workingMemory: { type: oracledb.STRING as unknown as number },\n activeObservations: { type: oracledb.STRING as unknown as number },\n activeObservationsPendingUpdate: { type: oracledb.STRING as unknown as number },\n bufferedObservations: { type: oracledb.STRING as unknown as number },\n bufferedReflection: { type: oracledb.STRING as unknown as number },\n message: { type: oracledb.STRING as unknown as number },\n reason: { type: oracledb.STRING as unknown as number },\n preprocessPrompt: { type: oracledb.STRING as unknown as number },\n extractPrompt: { type: oracledb.STRING as unknown as number },\n generateScorePrompt: { type: oracledb.STRING as unknown as number },\n generateReasonPrompt: { type: oracledb.STRING as unknown as number },\n analyzePrompt: { type: oracledb.STRING as unknown as number },\n reasonPrompt: { type: oracledb.STRING as unknown as number },\n },\n };\n}\n\nexport function rows<T extends ObjectRow = ObjectRow>(result: oracledb.Result<T>): T[] {\n return result.rows ?? [];\n}\n\nexport function asBindParameters(binds: Record<string, unknown>): BindParameters {\n return binds as BindParameters;\n}\n\nexport function jsonBind(value: unknown): oracledb.BindParameter {\n // Bind JSON as text and let the SERVER encode the OSON image. Images encoded\n // client-side by the node-oracledb thin driver (DB_TYPE_JSON) carry header\n // flags (HASH_ID_UINT8 | TINY_NODES_STAT) that Oracle's own JDBC parser does\n // not implement, so DBeaver/DataGrip/SQL Developer fail to render the rows\n // with UnsupportedOperationException in OsonHeader. The column type stays\n // native JSON; only the text->OSON encoding moves server-side.\n return { type: oracledb.DB_TYPE_VARCHAR, val: jsonBindText(value ?? null) };\n}\n\nexport function jsonBindText(value: unknown): string | null {\n if (value === undefined || value === null) return null;\n return sanitizeJsonString(safeJsonStringify(value));\n}\n\nexport function nullableJsonBind(value: unknown): oracledb.BindParameter | null {\n return value === undefined || value === null ? null : jsonBind(value);\n}\n\nexport function clobBind(value: string): oracledb.BindParameter {\n return { type: oracledb.DB_TYPE_CLOB, val: value };\n}\n\nexport function nullableClobBind(value: string | null | undefined): oracledb.BindParameter | null {\n return value === undefined || value === null ? null : { type: oracledb.DB_TYPE_CLOB, val: value };\n}\n\nexport function safeJsonValue(value: unknown): unknown {\n return JSON.parse(sanitizeJsonString(safeJsonStringify(value))) as unknown;\n}\n\nexport function safeJsonStringify(value: unknown): string {\n const ancestors = new Set<object>();\n\n const sanitize = (candidate: unknown): unknown => {\n if (candidate === null || candidate === undefined) return candidate;\n if (typeof candidate === 'function' || typeof candidate === 'symbol') return undefined;\n if (typeof candidate === 'bigint') return candidate.toString();\n if (typeof candidate !== 'object') return candidate;\n\n // Mastra runtime objects can contain cycles or class instances; keep only JSON-safe values for Oracle JSON columns.\n if (ancestors.has(candidate)) return undefined;\n\n ancestors.add(candidate);\n try {\n let keys: string[];\n try {\n keys = Object.keys(candidate);\n } catch {\n return undefined;\n }\n\n const toJSON = (candidate as Record<string, unknown>).toJSON;\n if (typeof toJSON === 'function') {\n try {\n return sanitize((toJSON as () => unknown).call(candidate));\n } catch {\n return undefined;\n }\n }\n\n if (Array.isArray(candidate)) {\n return candidate.map(item => sanitize(item));\n }\n\n const result: Record<string, unknown> = {};\n for (const key of keys) {\n const sanitized = sanitize((candidate as Record<string, unknown>)[key]);\n if (sanitized !== undefined) result[key] = sanitized;\n }\n return result;\n } finally {\n ancestors.delete(candidate);\n }\n };\n\n return JSON.stringify(sanitize(value)) ?? 'null';\n}\n\nexport function sanitizeJsonString(jsonString: string): string {\n return jsonString\n .replace(/\\\\\\\\?u(0000|[Dd][89A-Fa-f][0-9A-Fa-f]{2})/g, '')\n .replace(/(^|[^\\\\])(\\\\(?![\"\\\\/bfnrtu]))/g, '$1\\\\\\\\');\n}\n\nexport async function executeDdl(\n connection: Connection,\n ddl: string,\n ignoredErrorCodes: number[] = [],\n): Promise<boolean> {\n const retryableLockCodes = [-54, -14411];\n const retryDelays = [100, 250, 500, 1_000, 1_500];\n\n for (let attempt = 0; attempt <= retryDelays.length; attempt += 1) {\n try {\n await connection.execute(ddl);\n return true;\n } catch (error) {\n if (isOracleErrorCode(error, ignoredErrorCodes)) return false;\n // Online DDL can still briefly collide with readers/writers; retry the known Oracle lock codes.\n if (attempt < retryDelays.length && isOracleErrorCode(error, retryableLockCodes)) {\n await sleep(retryDelays[attempt]!);\n continue;\n }\n throw error;\n }\n }\n\n return false;\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\nexport async function rollbackQuietly(connection: Connection): Promise<void> {\n try {\n await connection.rollback();\n } catch {\n // Preserve the original database error.\n }\n}\n\nexport function isOracleErrorCode(error: unknown, ignoredCodes: number[]): boolean {\n if (!error || typeof error !== 'object') return false;\n const errorCode = 'errorNum' in error ? Number(error.errorNum) : undefined;\n if (errorCode && ignoredCodes.includes(-Math.abs(errorCode))) return true;\n\n const message = 'message' in error ? String(error.message) : '';\n return ignoredCodes.some(code => message.includes(`ORA-${String(Math.abs(code)).padStart(5, '0')}`));\n}\n","import { createHash } from 'node:crypto';\n\n// Oracle object names are capped at 128 bytes, while Mastra index names are user-facing labels.\nconst IDENTIFIER_PATTERN = /^[A-Za-z][A-Za-z0-9_]*$/;\nconst MAX_IDENTIFIER_LENGTH = 128;\nconst MAX_LOGICAL_INDEX_NAME_LENGTH = 512;\n\n// Strict identifiers are used only for physical Oracle objects and schema names.\nexport function normalizeIdentifier(value: string, label: string): string {\n const normalized = value.trim().toUpperCase();\n if (!IDENTIFIER_PATTERN.test(normalized)) {\n throw new Error(`${label} must start with a letter and contain only letters, numbers, and underscores`);\n }\n if (normalized.length > MAX_IDENTIFIER_LENGTH) {\n throw new Error(`${label} must be ${MAX_IDENTIFIER_LENGTH} characters or fewer`);\n }\n return normalized;\n}\n\n// Logical names stay case-sensitive and broad enough for app-level index naming.\nexport function normalizeLogicalIndexName(value: string, label = 'index name'): string {\n const normalized = value.trim();\n if (!normalized) {\n throw new Error(`${label} must be provided and cannot be empty`);\n }\n if (normalized.length > MAX_LOGICAL_INDEX_NAME_LENGTH) {\n throw new Error(`${label} must be ${MAX_LOGICAL_INDEX_NAME_LENGTH} characters or fewer`);\n }\n return normalized;\n}\n\n// Existing registry rows used uppercase Oracle identifiers, so lookups keep that fallback path.\nexport function legacyCanonicalIndexName(value: string): string {\n return normalizeIdentifier(value, 'legacy index name');\n}\n\nexport function quoteIdentifier(value: string, label: string): string {\n return `\"${normalizeIdentifier(value, label)}\"`;\n}\n\nexport function qualifyName(name: string, schemaName?: string): string {\n const quotedName = quoteIdentifier(name, 'object name');\n if (!schemaName) return quotedName;\n return `${quoteIdentifier(schemaName, 'schema name')}.${quotedName}`;\n}\n\n// Physical table names are deterministic and safe even when logical names contain URL-like tokens.\nexport function tableNameForIndex(indexName: string, tablePrefix = 'MASTRA_VEC'): string {\n const prefix = normalizeIdentifier(tablePrefix, 'table prefix');\n const logicalIndexName = normalizeLogicalIndexName(indexName);\n const legacyCompatibleIndexName = tryNormalizeIdentifier(logicalIndexName);\n const index = legacyCompatibleIndexName ?? safeIdentifierSegment(logicalIndexName, 'IDX');\n const base = `${prefix}_${index}`;\n if (base.length <= MAX_IDENTIFIER_LENGTH) return base;\n\n const hash = shortHash(`${prefix}:${logicalIndexName}`);\n return `${base.slice(0, MAX_IDENTIFIER_LENGTH - hash.length - 1)}_${hash}`;\n}\n\n// Derived index names share the table prefix and are shortened with a stable suffix when needed.\nexport function indexNameForTable(tableName: string, suffix: string): string {\n const base = `${normalizeIdentifier(tableName, 'table name')}_${normalizeIdentifier(suffix, 'index suffix')}`;\n if (base.length <= MAX_IDENTIFIER_LENGTH) return base;\n\n const hash = shortHash(base);\n return `${base.slice(0, MAX_IDENTIFIER_LENGTH - hash.length - 1)}_${hash}`;\n}\n\nexport function indexNameForMetadataField(tableName: string, field: string): string {\n const hash = shortHash(field);\n return indexNameForTable(tableName, `MD_${hash}_IDX`);\n}\n\n// JSON paths are quoted per segment so metadata keys never become SQL syntax.\nexport function assertJsonPath(path: string): string {\n const parts = path.split('.');\n if (parts.length === 0 || parts.some(part => part.length === 0)) {\n throw new Error(`Invalid JSON metadata path: ${path}`);\n }\n return `$${parts.map(jsonPathSegment).join('')}`;\n}\n\n// Oracle JSON_EXISTS predicates use @ as the current item instead of the root $ token.\nexport function jsonPathForPredicatePrefix(path: string): string {\n const fullPath = assertJsonPath(path);\n return `@${fullPath.slice(1)}`;\n}\n\nfunction tryNormalizeIdentifier(value: string): string | null {\n try {\n return normalizeIdentifier(value, 'identifier');\n } catch {\n return null;\n }\n}\n\nfunction safeIdentifierSegment(value: string, fallback: string): string {\n const sanitized = value\n .trim()\n .toUpperCase()\n .replace(/[^A-Z0-9_]+/g, '_')\n .replace(/_+/g, '_')\n .replace(/^_+|_+$/g, '');\n\n const withFallback = sanitized || fallback;\n const segment = /^[A-Z]/.test(withFallback) ? withFallback : `${fallback}_${withFallback}`;\n if (segment.length <= MAX_IDENTIFIER_LENGTH) return segment;\n\n const hash = shortHash(value);\n return `${segment.slice(0, MAX_IDENTIFIER_LENGTH - hash.length - 1)}_${hash}`;\n}\n\nfunction jsonPathSegment(part: string): string {\n if (IDENTIFIER_PATTERN.test(part)) {\n return `.${part}`;\n }\n if (/[\\u0000-\\u001F]/.test(part)) {\n throw new Error(`Invalid JSON metadata path: ${part}`);\n }\n const escaped = part.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/'/g, \"''\");\n return `.\"${escaped}\"`;\n}\n\nfunction shortHash(value: string): string {\n return createHash('sha256').update(value).digest('hex').slice(0, 12).toUpperCase();\n}\n","import type { OracleMetric, OracleVectorFormat, OracleVectorIndexConfig, OracleVectorIndexType } from './types';\n\n// Shared Oracle VECTOR SQL helpers used by both runtime queries and offline DDL export.\n// Keeping these in one place prevents the schema exporter from drifting away from OracleVector behavior.\nexport function normalizeMetric(metric: string): OracleMetric {\n const normalized = metric.toLowerCase();\n if (\n normalized !== 'cosine' &&\n normalized !== 'euclidean' &&\n normalized !== 'dotproduct' &&\n normalized !== 'hamming' &&\n normalized !== 'jaccard'\n ) {\n throw new Error('metric must be one of \"cosine\", \"euclidean\", \"dotproduct\", \"hamming\", or \"jaccard\"');\n }\n return normalized;\n}\n\nexport function normalizeVectorFormat(format: string): OracleVectorFormat {\n const normalized = format.toLowerCase();\n if (normalized !== 'vector' && normalized !== 'bit' && normalized !== 'int8') {\n throw new Error('vectorFormat must be one of \"vector\", \"bit\", or \"int8\"');\n }\n return normalized;\n}\n\nexport function metricToken(metric: OracleMetric): string {\n switch (metric) {\n case 'euclidean':\n return 'EUCLIDEAN';\n case 'dotproduct':\n return 'DOT';\n case 'hamming':\n return 'HAMMING';\n case 'jaccard':\n return 'JACCARD';\n case 'cosine':\n default:\n return 'COSINE';\n }\n}\n\nexport function defaultMetricForFormat(vectorFormat: OracleVectorFormat): OracleMetric {\n return vectorFormat === 'bit' ? 'hamming' : 'cosine';\n}\n\nexport function vectorFormatToken(vectorFormat: OracleVectorFormat): string {\n switch (vectorFormat) {\n case 'bit':\n return 'BINARY';\n case 'int8':\n return 'INT8';\n case 'vector':\n default:\n return 'FLOAT32';\n }\n}\n\n// `indexType` is optional so callers that only know the vector format (e.g. the offline schema\n// exporter) keep validating format/metric compatibility without being forced to resolve an index type.\nexport function validateMetricForFormat(\n metric: OracleMetric,\n vectorFormat: OracleVectorFormat,\n indexType?: OracleVectorIndexType,\n): void {\n if (vectorFormat === 'bit') {\n if (metric !== 'hamming' && metric !== 'jaccard') {\n throw new Error('bit vector indexes support only \"hamming\" or \"jaccard\" metrics');\n }\n } else if (metric === 'hamming' || metric === 'jaccard') {\n throw new Error(`${metric} metric requires vectorFormat \"bit\"`);\n }\n\n // Oracle only supports JACCARD for exact search (VECTOR_DISTANCE); CREATE VECTOR INDEX rejects it\n // for HNSW/IVF at DDL time, so fail fast here instead of surfacing a database error later.\n if (metric === 'jaccard' && (indexType === 'hnsw' || indexType === 'ivf')) {\n throw new Error(\n `jaccard metric is only supported for exact search; use index type \"none\" or a different metric for ${indexType} indexes`,\n );\n }\n}\n\nexport function buildVectorIndexParameterClause(indexConfig: OracleVectorIndexConfig): string {\n if (indexConfig.type === 'ivf') {\n const neighborPartitions = indexConfig.ivf?.neighborPartitions;\n // `!== undefined` (rather than truthy) so an explicit 0 reaches validatePositiveInteger and is\n // rejected instead of being silently treated as \"unset\".\n return neighborPartitions !== undefined\n ? `PARAMETERS (type IVF, neighbor partitions ${validatePositiveInteger(neighborPartitions)})`\n : '';\n }\n\n const parts: string[] = ['type HNSW'];\n if (indexConfig.hnsw?.neighbors !== undefined) {\n parts.push(`neighbors ${validatePositiveInteger(indexConfig.hnsw.neighbors)}`);\n }\n if (indexConfig.hnsw?.efConstruction !== undefined) {\n parts.push(`efconstruction ${validatePositiveInteger(indexConfig.hnsw.efConstruction)}`);\n }\n return parts.length > 1 ? `PARAMETERS (${parts.join(', ')})` : '';\n}\n\nexport function validateDimension(dimension: number): number {\n if (!Number.isInteger(dimension) || dimension <= 0) {\n throw new Error('dimension must be a positive integer');\n }\n return dimension;\n}\n\nexport function validateVectorFormatDimension(vectorFormat: OracleVectorFormat, dimension: number): void {\n if (vectorFormat === 'bit' && dimension % 8 !== 0) {\n throw new Error('bit vector dimensions must be a multiple of 8');\n }\n}\n\nexport function validateAccuracy(accuracy: number): number {\n if (!Number.isInteger(accuracy) || accuracy <= 0 || accuracy > 100) {\n throw new Error('vector index accuracy must be an integer between 1 and 100');\n }\n return accuracy;\n}\n\nfunction validatePositiveInteger(value: number): number {\n if (!Number.isInteger(value) || value <= 0) {\n throw new Error('vector index parameter must be a positive integer');\n }\n return value;\n}\n","import { assertJsonPath, jsonPathForPredicatePrefix } from './identifiers';\nimport type { OracleVectorFilter } from './types';\n\n// Filter compilation returns SQL plus binds so callers never interpolate user metadata values.\nexport interface SqlFragment {\n sql: string;\n binds: Record<string, unknown>;\n}\n\n// Bind names are generated locally to keep nested logical operators composable.\nclass BindCollector {\n private index = 0;\n readonly binds: Record<string, unknown> = {};\n\n add(value: unknown): string {\n const name = `b${this.index++}`;\n this.binds[name] = normalizeBindValue(value);\n return name;\n }\n}\n\n// Converts Mastra metadata filters into Oracle JSON_VALUE/JSON_EXISTS predicates.\nexport function buildMetadataWhereClause(filter?: OracleVectorFilter): SqlFragment {\n if (!filter || Object.keys(filter).length === 0) {\n return { sql: '', binds: {} };\n }\n\n const collector = new BindCollector();\n const sql = buildNode(filter, collector);\n return { sql: sql ? `WHERE ${sql}` : '', binds: collector.binds };\n}\n\nfunction buildNode(node: unknown, collector: BindCollector): string {\n if (!isPlainObject(node)) {\n throw new Error('Vector metadata filter must be an object');\n }\n\n const expressions: string[] = [];\n for (const [key, value] of Object.entries(node)) {\n if (key === '$and' || key === '$or' || key === '$nor') {\n expressions.push(buildLogicalOperator(key, value, collector));\n continue;\n }\n if (key === '$not') {\n expressions.push(`NOT (${buildNode(assertPlainObject(value, '$not'), collector)})`);\n continue;\n }\n if (key.startsWith('$')) {\n throw new Error(`Unsupported root filter operator: ${key}`);\n }\n expressions.push(buildFieldExpression(key, value, collector));\n }\n\n return expressions.length ? expressions.map(expr => `(${expr})`).join(' AND ') : '';\n}\n\n// Logical operators intentionally accept a single object for ergonomic parity with other providers.\nfunction buildLogicalOperator(operator: '$and' | '$or' | '$nor', value: unknown, collector: BindCollector): string {\n const values = Array.isArray(value) ? value : [value];\n if (values.length === 0) {\n return operator === '$or' ? '1 = 0' : '1 = 1';\n }\n\n const joiner = operator === '$and' ? ' AND ' : ' OR ';\n const expression = values.map(item => `(${buildNode(assertPlainObject(item, operator), collector)})`).join(joiner);\n return operator === '$nor' ? `NOT (${expression})` : expression;\n}\n\n// Plain nested objects are treated as dotted metadata paths, not opaque JSON object comparisons.\nfunction buildFieldExpression(path: string, value: unknown, collector: BindCollector): string {\n if (value instanceof RegExp) {\n return buildRegexExpression(path, value.source, value.flags, collector);\n }\n\n if (Array.isArray(value)) {\n return buildOperatorExpression(path, '$in', value, collector);\n }\n\n if (!isPlainObject(value)) {\n return buildOperatorExpression(path, '$eq', value, collector);\n }\n\n const entries = Object.entries(value);\n if (entries.length === 0) {\n throw new Error(`Vector metadata filter for \"${path}\" cannot be an empty object`);\n }\n\n const operatorEntries = entries.filter(([key]) => key.startsWith('$'));\n if (operatorEntries.length === 0) {\n return entries\n .map(([nestedKey, nestedValue]) => buildFieldExpression(`${path}.${nestedKey}`, nestedValue, collector))\n .map(expr => `(${expr})`)\n .join(' AND ');\n }\n\n if (operatorEntries.length < entries.length) {\n throw new Error(`Unsupported mixed operator/nested-field filter for \"${path}\"`);\n }\n\n return operatorEntries\n .map(([operator, operand]) => buildOperatorExpression(path, operator, operand, collector))\n .map(expr => `(${expr})`)\n .join(' AND ');\n}\n\nfunction buildOperatorExpression(path: string, operator: string, value: unknown, collector: BindCollector): string {\n switch (operator) {\n case '$eq':\n if (value === null) return `${jsonValue(path, value)} IS NULL`;\n return `${jsonValue(path, value)} = ${bind(collector, value)}`;\n case '$ne':\n if (value === null) return `${jsonValue(path, value)} IS NOT NULL`;\n return `${jsonValue(path, value)} <> ${bind(collector, value)}`;\n case '$gt':\n return `${jsonValue(path, value)} > ${bind(collector, value)}`;\n case '$gte':\n return `${jsonValue(path, value)} >= ${bind(collector, value)}`;\n case '$lt':\n return `${jsonValue(path, value)} < ${bind(collector, value)}`;\n case '$lte':\n return `${jsonValue(path, value)} <= ${bind(collector, value)}`;\n case '$in':\n return buildInExpression(path, value, collector, false);\n case '$nin':\n return buildInExpression(path, value, collector, true);\n case '$all':\n return buildAllExpression(path, value, collector);\n case '$elemMatch':\n return buildElemMatchExpression(path, value, collector);\n case '$exists':\n return value\n ? `JSON_EXISTS(metadata, '${assertJsonPath(path)}')`\n : `NOT JSON_EXISTS(metadata, '${assertJsonPath(path)}')`;\n case '$regex':\n return buildRegexExpression(path, String(value), '', collector);\n case '$contains':\n return buildContainsExpression(path, value, collector);\n case '$size':\n return buildSizeExpression(path, value, collector);\n case '$not':\n return `NOT (${buildNestedNotExpression(path, value, collector)})`;\n default:\n throw new Error(`Unsupported metadata filter operator: ${operator}`);\n }\n}\n\n// $not can wrap either operators or nested field expressions.\nfunction buildNestedNotExpression(path: string, value: unknown, collector: BindCollector): string {\n if (!isPlainObject(value) || Object.keys(value).length === 0) {\n throw new Error('$not requires a non-empty object');\n }\n return Object.entries(value)\n .map(([operator, operand]) => {\n if (!operator.startsWith('$')) {\n return buildFieldExpression(`${path}.${operator}`, operand, collector);\n }\n return buildOperatorExpression(path, operator, operand, collector);\n })\n .join(' AND ');\n}\n\n// Scalar IN checks are paired with array containment to match document-store semantics.\nfunction buildInExpression(path: string, value: unknown, collector: BindCollector, negate: boolean): string {\n const values = Array.isArray(value) ? value : [value];\n if (values.length === 0) {\n return negate ? '1 = 1' : '1 = 0';\n }\n\n const placeholders = values.map(item => bind(collector, item)).join(', ');\n const scalarExpression = `${jsonValue(path, values[0])} ${negate ? 'NOT ' : ''}IN (${placeholders})`;\n const arrayExpressions = values.map(item => jsonArrayContains(path, item, collector));\n const arrayExpression = arrayExpressions.length ? arrayExpressions.join(' OR ') : '1 = 0';\n return negate ? `(${scalarExpression} AND NOT (${arrayExpression}))` : `(${scalarExpression} OR ${arrayExpression})`;\n}\n\nfunction buildAllExpression(path: string, value: unknown, collector: BindCollector): string {\n const values = Array.isArray(value) ? value : [value];\n if (values.length === 0) return '1 = 1';\n return values.map(item => jsonArrayContains(path, item, collector)).join(' AND ');\n}\n\n// Element predicates use PASSING binds because Oracle JSON path variables cannot be standard SQL binds.\nfunction buildElemMatchExpression(path: string, value: unknown, collector: BindCollector): string {\n if (!isPlainObject(value)) {\n throw new Error('$elemMatch requires an object with conditions');\n }\n\n const passing: string[] = [];\n const conditions = Object.entries(value).map(([fieldOrOperator, operand]) => {\n if (fieldOrOperator.startsWith('$')) {\n return elemMatchCondition('@', fieldOrOperator, operand, collector, passing);\n }\n\n const nestedPath = jsonPathForPredicatePrefix(fieldOrOperator);\n\n if (isPlainObject(operand)) {\n return Object.entries(operand)\n .map(([operator, operatorOperand]) =>\n elemMatchCondition(nestedPath, operator, operatorOperand, collector, passing),\n )\n .join(' && ');\n }\n\n return elemMatchCondition(nestedPath, '$eq', operand, collector, passing);\n });\n\n return `JSON_EXISTS(metadata, '${assertJsonPath(path)}[*]?(${conditions.join(' && ')})'${passing.length ? ` PASSING ${passing.join(', ')}` : ''})`;\n}\n\n// Each element match operand gets its own JSON path variable for predictable bind ordering.\nfunction elemMatchCondition(\n jsonPathPrefix: string,\n operator: string,\n value: unknown,\n collector: BindCollector,\n passing: string[],\n): string {\n const jsonPathBind = (item: unknown): string => {\n const variable = collector.add(item);\n passing.push(`:${variable} AS \"${variable}\"`);\n return `$${variable}`;\n };\n\n switch (operator) {\n case '$eq':\n return `${jsonPathPrefix} == ${jsonPathBind(value)}`;\n case '$ne':\n return `${jsonPathPrefix} != ${jsonPathBind(value)}`;\n case '$gt':\n return `${jsonPathPrefix} > ${jsonPathBind(value)}`;\n case '$gte':\n return `${jsonPathPrefix} >= ${jsonPathBind(value)}`;\n case '$lt':\n return `${jsonPathPrefix} < ${jsonPathBind(value)}`;\n case '$lte':\n return `${jsonPathPrefix} <= ${jsonPathBind(value)}`;\n case '$in': {\n const values = Array.isArray(value) ? value : [value];\n if (values.length === 0) return 'false';\n return `(${values.map(item => `${jsonPathPrefix} == ${jsonPathBind(item)}`).join(' || ')})`;\n }\n case '$nin': {\n const values = Array.isArray(value) ? value : [value];\n if (values.length === 0) return 'true';\n return `(${values.map(item => `${jsonPathPrefix} != ${jsonPathBind(item)}`).join(' && ')})`;\n }\n default:\n throw new Error(`Unsupported $elemMatch operator: ${operator}`);\n }\n}\n\n// Regex binds the pattern and only emits Oracle's case-insensitive flag when requested.\nfunction buildRegexExpression(path: string, pattern: string, flags: string, collector: BindCollector): string {\n const matchParameter = flags.includes('i') || pattern.startsWith('(?i)') ? `, 'i'` : '';\n const normalizedPattern = pattern.startsWith('(?i)') ? pattern.slice(4) : pattern;\n const name = collector.add(normalizedPattern);\n return `REGEXP_LIKE(${jsonValue(path, '')}, :${name}${matchParameter})`;\n}\n\n// String contains uses LIKE, while structured contains compares serialized JSON.\nfunction buildContainsExpression(path: string, value: unknown, collector: BindCollector): string {\n if (Array.isArray(value)) return buildAllExpression(path, value, collector);\n if (typeof value === 'string') {\n const scalarVariable = collector.add(escapeLikePattern(value.toLowerCase()));\n const arrayVariable = collector.add(value);\n return `(${[\n `LOWER(${jsonValue(path, '')}) LIKE '%' || :${scalarVariable} || '%' ESCAPE '\\\\'`,\n `JSON_EXISTS(metadata, '${assertJsonPath(path)}[*]?(@ == $${arrayVariable})' PASSING :${arrayVariable} AS \"${arrayVariable}\")`,\n ].join(' OR ')})`;\n }\n\n const variable = collector.add(JSON.stringify(value));\n return `JSON_SERIALIZE(JSON_QUERY(metadata, '${assertJsonPath(path)}' RETURNING CLOB NULL ON ERROR) RETURNING VARCHAR2(4000)) = :${variable}`;\n}\n\nfunction buildSizeExpression(path: string, value: unknown, collector: BindCollector): string {\n if (!Number.isInteger(value) || Number(value) < 0) {\n throw new Error('$size requires a non-negative integer');\n }\n const variable = collector.add(value);\n return `JSON_EXISTS(metadata, '${assertJsonPath(path)}?(@.size() == $${variable})' PASSING :${variable} AS \"${variable}\")`;\n}\n\n// Oracle needs explicit return types so numeric comparisons do not fall back to string ordering.\nfunction jsonValue(path: string, comparisonValue: unknown): string {\n const jsonPath = assertJsonPath(path);\n if (typeof comparisonValue === 'number') {\n return `JSON_VALUE(metadata, '${jsonPath}' RETURNING NUMBER NULL ON ERROR)`;\n }\n return `JSON_VALUE(metadata, '${jsonPath}' RETURNING VARCHAR2(4000) NULL ON ERROR)`;\n}\n\nfunction jsonArrayContains(path: string, value: unknown, collector: BindCollector): string {\n const variable = collector.add(value);\n return `JSON_EXISTS(metadata, '${assertJsonPath(path)}[*]?(@ == $${variable})' PASSING :${variable} AS \"${variable}\")`;\n}\n\nfunction bind(collector: BindCollector, value: unknown): string {\n return `:${collector.add(value)}`;\n}\n\n// JSON_VALUE returns booleans as text in this path, so normalize before binding.\nfunction normalizeBindValue(value: unknown): unknown {\n if (value instanceof Date) return value.toISOString();\n if (typeof value === 'boolean') return String(value);\n return value;\n}\n\nfunction assertPlainObject(value: unknown, operator: string): Record<string, unknown> {\n if (!isPlainObject(value)) {\n throw new Error(`${operator} requires an object`);\n }\n if (Object.keys(value).length === 0 && operator === '$not') {\n throw new Error('$not requires a non-empty object');\n }\n return value;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n !(value instanceof RegExp) &&\n !(value instanceof Date)\n );\n}\n\nfunction escapeLikePattern(value: string): string {\n return value.replace(/([%_\\\\])/g, '\\\\$1');\n}\n","import { randomUUID } from 'node:crypto';\n\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { createVectorErrorId } from '@mastra/core/storage';\nimport { validateUpsertInput } from '@mastra/core/vector';\nimport type {\n DeleteVectorParams,\n DeleteVectorsParams,\n UpdateVectorParams,\n UpsertVectorParams,\n} from '@mastra/core/vector';\nimport oracledb from 'oracledb';\n\nimport { asBindParameters, jsonBind, jsonBindText, rollbackQuietly } from '../shared/connection';\nimport type { IndexRegistry, WithConnection } from './ddl';\nimport { buildMetadataWhereClause } from './filter';\nimport type { OracleIndexStats, OracleVectorFilter, OracleVectorFormat } from './types';\n\nexport const VECTOR_ID_DELETE_CHUNK_SIZE = 900;\nexport const DEFAULT_VECTOR_UPSERT_BATCH_SIZE = 200;\n\n// This module is the dependency-free base for the vector store split: it owns every operation that\n// writes vector rows (upsert/update/delete), the vector-format encode/decode + validation helpers\n// shared with query.ts and stats.ts, and the generic MastraError-wrapping helper every sibling\n// module uses. Its only import from ddl.ts is type-only (erased at build time), so there is no\n// runtime circular dependency even though ddl.ts imports asMastraError/withCause from here.\nexport const STORE_NAME = 'ORACLE';\n\ntype BindParameters = oracledb.BindParameters;\n\nexport async function upsert(\n registry: IndexRegistry,\n withConnection: WithConnection,\n upsertBatchSize: number,\n { indexName, vectors, metadata, ids, sparseVectors, deleteFilter }: UpsertVectorParams,\n): Promise<string[]> {\n try {\n if (sparseVectors !== undefined) {\n throw new Error('OracleVector does not support sparseVectors yet; use dense vector types');\n }\n validateUpsertInput(STORE_NAME, vectors, metadata, ids);\n validateVectors(vectors);\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw asMastraError('UPSERT', 'INVALID_INPUT', { indexName }, error, ErrorCategory.USER);\n }\n\n const vectorIds = ids ?? vectors.map(() => randomUUID());\n\n return withConnection(async connection => {\n const indexInfo = await registry.getIndexMetadata(connection, indexName);\n\n try {\n // deleteFilter + upsert is treated as one transaction to avoid partially refreshed indexes.\n if (deleteFilter && Object.keys(deleteFilter).length > 0) {\n const filter = buildMetadataWhereClause(deleteFilter);\n await connection.execute(\n `DELETE FROM ${indexInfo.qualifiedTableName} ${filter.sql}`,\n asBindParameters(filter.binds),\n );\n }\n\n const mergeSql = `\n MERGE INTO ${indexInfo.qualifiedTableName} target\n USING (\n SELECT\n :vector_id AS vector_id,\n :embedding AS embedding,\n :metadata AS metadata\n FROM dual\n ) source\n ON (target.vector_id = source.vector_id)\n WHEN MATCHED THEN UPDATE SET\n target.embedding = source.embedding,\n target.metadata = source.metadata,\n target.updated_at = SYSTIMESTAMP\n WHEN NOT MATCHED THEN INSERT (\n vector_id,\n embedding,\n metadata,\n created_at,\n updated_at\n ) VALUES (\n source.vector_id,\n source.embedding,\n source.metadata,\n SYSTIMESTAMP,\n SYSTIMESTAMP\n )`;\n\n const executeManyOptions: oracledb.ExecuteManyOptions = {\n bindDefs: {\n vector_id: { type: oracledb.STRING, maxSize: 512 },\n embedding: { type: oracledb.DB_TYPE_VECTOR },\n // JSON bound as text (see jsonBindText): server-side OSON encoding keeps the rows\n // readable by JDBC-based tools (DBeaver/DataGrip/SQL Developer). See ../shared/connection.\n metadata: { type: oracledb.DB_TYPE_CLOB },\n },\n };\n const upsertBinds = vectors.map((vector, i) => {\n validateVectorForIndex(vector, indexInfo, indexName);\n\n return {\n vector_id: vectorIds[i]!,\n embedding: vectorValue(vector, indexInfo.vectorFormat),\n metadata: jsonBindText(metadata?.[i] ?? {}),\n };\n });\n\n // Execute in chunks to avoid very large bind arrays while still using Oracle array DML.\n for (const chunk of chunkArray(upsertBinds, upsertBatchSize)) {\n await connection.executeMany(mergeSql, chunk as BindParameters[], executeManyOptions);\n }\n\n await connection.commit();\n return vectorIds;\n } catch (error) {\n await rollbackQuietly(connection);\n throw error;\n }\n }).catch(error => {\n if (error instanceof MastraError) throw error;\n throw asMastraError('UPSERT', 'FAILED', { indexName }, error);\n });\n}\n\nexport async function updateVector(\n registry: IndexRegistry,\n withConnection: WithConnection,\n { indexName, id, filter, update }: UpdateVectorParams<OracleVectorFilter>,\n): Promise<void> {\n try {\n if (!update.vector && !update.metadata) {\n throw new Error('No updates provided');\n }\n if (!id && !filter) {\n throw new Error('Either id or filter must be provided');\n }\n if (id && filter) {\n throw new Error('id and filter are mutually exclusive');\n }\n if (update.vector) {\n validateVectors([update.vector]);\n }\n } catch (error) {\n throw asMastraError('UPDATE_VECTOR', 'INVALID_INPUT', { indexName, id: id ?? '' }, error, ErrorCategory.USER);\n }\n\n return withConnection(async connection => {\n const indexInfo = await registry.getIndexMetadata(connection, indexName);\n if (update.vector) {\n validateVectorForIndex(update.vector, indexInfo, indexName);\n }\n\n const setParts: string[] = ['updated_at = SYSTIMESTAMP'];\n const binds: BindParameters = {};\n if (update.vector) {\n setParts.unshift('embedding = :embedding');\n binds.embedding = vectorBind(update.vector, indexInfo.vectorFormat);\n }\n if (update.metadata) {\n setParts.unshift('metadata = :metadata');\n binds.metadata = jsonBind(update.metadata);\n }\n\n const where = id ? { sql: 'WHERE vector_id = :id', binds: { id } } : buildMetadataWhereClause(filter);\n if (!where.sql) {\n throw asMastraError(\n 'UPDATE_VECTOR',\n 'EMPTY_FILTER',\n { indexName },\n new Error('Cannot update with an empty filter'),\n ErrorCategory.USER,\n );\n }\n\n try {\n await connection.execute(\n `\n UPDATE ${indexInfo.qualifiedTableName}\n SET ${setParts.join(', ')}\n ${where.sql}`,\n asBindParameters({ ...binds, ...where.binds }),\n { autoCommit: true },\n );\n } catch (error) {\n await rollbackQuietly(connection);\n throw error;\n }\n }).catch(error => {\n if (error instanceof MastraError) throw error;\n throw asMastraError('UPDATE_VECTOR', 'FAILED', { indexName, id: id ?? '' }, error);\n });\n}\n\nexport async function deleteVector(\n registry: IndexRegistry,\n withConnection: WithConnection,\n { indexName, id }: DeleteVectorParams,\n): Promise<void> {\n return withConnection(async connection => {\n const indexInfo = await registry.getIndexMetadata(connection, indexName);\n try {\n await connection.execute(\n `DELETE FROM ${indexInfo.qualifiedTableName} WHERE vector_id = :id`,\n { id },\n { autoCommit: true },\n );\n } catch (error) {\n await rollbackQuietly(connection);\n throw error;\n }\n }).catch(error => {\n if (error instanceof MastraError) throw error;\n throw asMastraError('DELETE_VECTOR', 'FAILED', { indexName, id }, error);\n });\n}\n\nexport async function deleteVectors(\n registry: IndexRegistry,\n withConnection: WithConnection,\n { indexName, ids, filter }: DeleteVectorsParams<OracleVectorFilter>,\n): Promise<void> {\n try {\n const hasFilter = filter !== undefined && filter !== null;\n if (ids !== undefined && hasFilter) {\n throw new Error('ids and filter are mutually exclusive');\n }\n if (ids !== undefined && ids.length === 0) {\n throw new Error('empty ids array');\n }\n if (hasFilter && Object.keys(filter).length === 0) {\n throw new Error('empty filter');\n }\n if (ids === undefined && !hasFilter) {\n throw new Error('Either filter or ids must be provided');\n }\n } catch (error) {\n throw asMastraError('DELETE_VECTORS', 'INVALID_INPUT', { indexName }, error, ErrorCategory.USER);\n }\n\n return withConnection(async connection => {\n const indexInfo = await registry.getIndexMetadata(connection, indexName);\n try {\n if (ids?.length) {\n for (const idChunk of chunkArray(ids, VECTOR_ID_DELETE_CHUNK_SIZE)) {\n await connection.executeMany(\n `DELETE FROM ${indexInfo.qualifiedTableName} WHERE vector_id = :id`,\n idChunk.map(id => ({ id })) as BindParameters[],\n {\n bindDefs: {\n id: { type: oracledb.STRING, maxSize: 512 },\n },\n },\n );\n }\n } else {\n const metadataFilter = buildMetadataWhereClause(filter);\n await connection.execute(\n `DELETE FROM ${indexInfo.qualifiedTableName} ${metadataFilter.sql}`,\n asBindParameters(metadataFilter.binds),\n );\n }\n await connection.commit();\n } catch (error) {\n await rollbackQuietly(connection);\n throw error;\n }\n }).catch(error => {\n if (error instanceof MastraError) throw error;\n throw asMastraError('DELETE_VECTORS', 'FAILED', { indexName }, error);\n });\n}\n\nexport function validateVectors(vectors: number[][]): void {\n for (let vectorIndex = 0; vectorIndex < vectors.length; vectorIndex += 1) {\n const vector = vectors[vectorIndex];\n if (!Array.isArray(vector) || vector.length === 0) {\n throw new Error(`Vector at index ${vectorIndex} must be a non-empty number array`);\n }\n for (let componentIndex = 0; componentIndex < vector.length; componentIndex += 1) {\n const value = vector[componentIndex];\n if (typeof value !== 'number' || !Number.isFinite(value)) {\n throw new Error(`Vector at index ${vectorIndex} has a non-finite value at component ${componentIndex}`);\n }\n }\n }\n}\n\nfunction validateVectorDimension(vector: number[], dimension: number, indexName: string): void {\n if (vector.length !== dimension) {\n throw asMastraError(\n 'UPSERT',\n 'INVALID_INPUT',\n { indexName, expected: String(dimension), actual: String(vector.length) },\n new Error(`Vector dimension mismatch: expected ${dimension}, received ${vector.length}`),\n ErrorCategory.USER,\n );\n }\n}\n\nexport function validateVectorForIndex(\n vector: number[],\n indexInfo: Pick<OracleIndexStats, 'dimension' | 'vectorFormat'>,\n indexName: string,\n): void {\n validateVectorDimension(vector, indexInfo.dimension, indexName);\n\n if (indexInfo.vectorFormat === 'bit') {\n for (const [index, value] of vector.entries()) {\n if (value !== 0 && value !== 1) {\n throw asMastraError(\n 'VECTOR_FORMAT',\n 'INVALID_BIT_VALUE',\n { indexName, index, value },\n new Error('bit vectors must contain only 0 or 1 values'),\n ErrorCategory.USER,\n );\n }\n }\n }\n\n if (indexInfo.vectorFormat === 'int8') {\n for (const [index, value] of vector.entries()) {\n if (!Number.isInteger(value) || value < -128 || value > 127) {\n throw asMastraError(\n 'VECTOR_FORMAT',\n 'INVALID_INT8_VALUE',\n { indexName, index, value },\n new Error('int8 vectors must contain integers from -128 to 127'),\n ErrorCategory.USER,\n );\n }\n }\n }\n}\n\nexport function vectorBind(vector: number[], vectorFormat: OracleVectorFormat): oracledb.BindParameter {\n return { type: oracledb.DB_TYPE_VECTOR, val: vectorValue(vector, vectorFormat) };\n}\n\nexport function vectorValue(vector: number[], vectorFormat: OracleVectorFormat): Float32Array | Int8Array | Uint8Array {\n // node-oracledb binds VECTOR columns through typed arrays, with bit vectors packed by byte.\n switch (vectorFormat) {\n case 'bit':\n return packBitVector(vector);\n case 'int8':\n return Int8Array.from(vector);\n case 'vector':\n default:\n return Float32Array.from(vector);\n }\n}\n\nfunction packBitVector(vector: number[]): Uint8Array {\n // Oracle BINARY vectors store eight user-facing 0/1 dimensions per byte.\n const bytes = new Uint8Array(vector.length / 8);\n for (let i = 0; i < vector.length; i += 1) {\n if (vector[i]) {\n const byteIndex = Math.floor(i / 8);\n bytes[byteIndex] = (bytes[byteIndex] ?? 0) | (1 << (7 - (i % 8)));\n }\n }\n return bytes;\n}\n\nexport function chunkArray<T>(values: T[], chunkSize: number): T[][] {\n const chunks: T[][] = [];\n for (let index = 0; index < values.length; index += chunkSize) {\n chunks.push(values.slice(index, index + chunkSize));\n }\n return chunks;\n}\n\nexport function withCause(error: Error, cause: unknown): Error {\n (error as Error & { cause?: unknown }).cause = cause;\n return error;\n}\n\nexport function asMastraError(\n operation: string,\n reason: string,\n details: Record<string, string | number | boolean | undefined>,\n cause: unknown,\n category: ErrorCategory = ErrorCategory.THIRD_PARTY,\n): MastraError {\n const safeDetails = Object.fromEntries(\n Object.entries(details).filter((entry): entry is [string, string | number | boolean] => entry[1] !== undefined),\n );\n\n return new MastraError(\n {\n id: createVectorErrorId(STORE_NAME, operation, reason),\n domain: ErrorDomain.MASTRA_VECTOR,\n category,\n details: safeDetails,\n },\n cause,\n );\n}\n","import { ErrorCategory, MastraError } from '@mastra/core/error';\nimport type { DeleteIndexParams } from '@mastra/core/vector';\nimport type { Connection } from 'oracledb';\nimport type oracledb from 'oracledb';\n\nimport type { ObjectRow } from '../shared/connection';\nimport { executeDdl as executeOracleDdl, executeOptions, isOracleErrorCode, rows } from '../shared/connection';\nimport {\n assertJsonPath,\n indexNameForMetadataField,\n indexNameForTable,\n legacyCanonicalIndexName,\n normalizeIdentifier,\n normalizeLogicalIndexName,\n qualifyName,\n tableNameForIndex,\n} from './identifiers';\nimport {\n buildVectorIndexParameterClause,\n defaultMetricForFormat,\n metricToken,\n normalizeMetric,\n normalizeVectorFormat,\n validateAccuracy,\n validateDimension,\n validateMetricForFormat,\n validateVectorFormatDimension,\n vectorFormatToken,\n} from './sql';\nimport type {\n OracleBuildIndexParams,\n OracleCreateIndexParams,\n OracleIndexStats,\n OracleMetric,\n OracleRebuildIndexParams,\n OracleVectorFormat,\n OracleVectorIndexConfig,\n OracleVectorIndexType,\n} from './types';\nimport { asMastraError, withCause } from './upsert';\n\n// Registry and DDL state for OracleVector. asMastraError/withCause live in upsert.ts (the\n// dependency-free base module) and are re-used here so every sibling module wraps errors the\n// same way without a circular runtime import (upsert.ts only needs ddl.ts's types, which are erased).\n\nexport const DEFAULT_TABLE_PREFIX = 'MASTRA_VEC';\nexport const DEFAULT_REGISTRY_TABLE = 'MASTRA_VECTOR_INDEXES';\nexport const DEFAULT_METADATA_INDEXES = ['thread_id', 'resource_id', 'message_id', 'source_id'];\nexport const DEFAULT_VECTOR_FORMAT: OracleVectorFormat = 'vector';\nconst VECTOR_MEMORY_EXHAUSTED_CODES = [-51962];\n\ntype BindParameters = oracledb.BindParameters;\n\n// A connection-scoped callback, shaped exactly like OraclePoolManager#withConnection, so sibling\n// modules can run queries without owning the pool themselves.\nexport type WithConnection = <T>(callback: (connection: Connection) => Promise<T>) => Promise<T>;\n\n// Registry metadata is the source of truth for mapping logical indexes to Oracle objects.\nexport interface IndexInfo extends OracleIndexStats {\n qualifiedTableName: string;\n}\n\nexport type CachedIndexInfo = Omit<IndexInfo, 'count'>;\n\nexport interface IndexRegistryConfig {\n schemaName?: string;\n tablePrefix: string;\n registryTableName: string;\n defaultMetadataIndexes: string[];\n defaultVectorFormat: OracleVectorFormat;\n defaultIndexConfig: OracleVectorIndexConfig;\n}\n\n// IndexRegistry owns the mutable state (locks, caches, registry readiness) plus every DDL/registry\n// operation. OracleVector holds one instance and delegates to it.\nexport class IndexRegistry {\n readonly schemaName?: string;\n private readonly tablePrefix: string;\n private readonly registryTableName: string;\n private readonly defaultMetadataIndexes: string[];\n private readonly defaultVectorFormat: OracleVectorFormat;\n private readonly defaultIndexConfig: OracleVectorIndexConfig;\n // One lock per logical index prevents two callers from creating/dropping the same Oracle objects at once.\n private readonly indexLocks = new Map<string, Promise<void>>();\n private readonly indexInfoCache = new Map<string, CachedIndexInfo>();\n private registryReady = false;\n private registryPromise?: Promise<void>;\n\n constructor(config: IndexRegistryConfig) {\n this.schemaName = config.schemaName;\n this.tablePrefix = config.tablePrefix;\n this.registryTableName = config.registryTableName;\n this.defaultMetadataIndexes = config.defaultMetadataIndexes;\n this.defaultVectorFormat = config.defaultVectorFormat;\n this.defaultIndexConfig = config.defaultIndexConfig;\n }\n\n async createIndex(\n withConnection: WithConnection,\n {\n indexName,\n dimension,\n metric,\n vectorFormat,\n indexConfig,\n buildIndex = true,\n metadataIndexes,\n }: OracleCreateIndexParams,\n ): Promise<void> {\n try {\n const logicalIndexName = normalizeLogicalIndexName(indexName);\n const normalizedFormat = normalizeVectorFormat(vectorFormat ?? this.defaultVectorFormat);\n const normalizedMetric = normalizeMetric(metric ?? defaultMetricForFormat(normalizedFormat));\n const mergedConfig = this.mergeIndexConfig(indexConfig);\n const unbuiltConfig = this.mergeIndexConfig({ type: 'none' });\n const builtConfig = buildIndex ? mergedConfig : unbuiltConfig;\n validateDimension(dimension);\n validateVectorFormatDimension(normalizedFormat, dimension);\n validateMetricForFormat(normalizedMetric, normalizedFormat, mergedConfig.type);\n\n await this.withIndexLock(logicalIndexName, () =>\n withConnection(async connection => {\n await this.ensureRegistry(connection);\n const existing = await this.getRegistryEntry(connection, logicalIndexName);\n if (existing) {\n // Re-running createIndex is allowed when the existing table shape matches the requested shape.\n const tableExists = await this.vectorTableExists(connection, existing.tableName);\n const tableName = tableExists ? existing.tableName : tableNameForIndex(logicalIndexName, this.tablePrefix);\n if (tableExists) {\n this.assertCompatibleExistingIndex(\n existing,\n logicalIndexName,\n dimension,\n normalizedMetric,\n normalizedFormat,\n );\n } else {\n await this.createVectorTable(connection, logicalIndexName, dimension, normalizedFormat);\n await this.upsertRegistry(\n connection,\n logicalIndexName,\n dimension,\n normalizedMetric,\n normalizedFormat,\n unbuiltConfig,\n );\n this.clearIndexMetadata(logicalIndexName);\n }\n\n await this.createMetadataIndexes(\n connection,\n logicalIndexName,\n metadataIndexes ?? this.defaultMetadataIndexes,\n tableName,\n );\n\n if (buildIndex && mergedConfig.type !== 'none') {\n const createdIndex = await this.createVectorIndex(\n connection,\n logicalIndexName,\n normalizedMetric,\n mergedConfig,\n tableName,\n );\n if (\n !createdIndex &&\n (!tableExists || !vectorIndexRegistryConfigMatches(existing, normalizedMetric, mergedConfig))\n ) {\n throw vectorIndexAlreadyExistsError('CREATE_INDEX', logicalIndexName, existing);\n }\n if (createdIndex) {\n await this.updateRegistryIndexConfig(connection, logicalIndexName, normalizedMetric, mergedConfig);\n }\n }\n const finalInfo =\n buildIndex && mergedConfig.type !== 'none'\n ? {\n ...existing,\n tableName,\n metric: normalizedMetric,\n indexType: mergedConfig.type,\n accuracy: mergedConfig.accuracy ?? 95,\n }\n : tableExists\n ? { ...existing, tableName }\n : {\n indexName: logicalIndexName,\n tableName,\n dimension,\n metric: normalizedMetric,\n indexType: builtConfig.type,\n vectorFormat: normalizedFormat,\n accuracy: builtConfig.accuracy ?? 95,\n };\n this.cacheIndexMetadata(logicalIndexName, {\n ...finalInfo,\n qualifiedTableName: qualifyName(tableName, this.schemaName),\n });\n return;\n }\n\n const tableName = tableNameForIndex(logicalIndexName, this.tablePrefix);\n if (await this.vectorTableExists(connection, tableName)) {\n // Oracle identifier normalization can collapse two distinct logical names (e.g. \"foo\" and\n // \"FOO\") onto the same physical table. Check the registry for a row already claiming this\n // table under a different index name so the error explains the real cause instead of the\n // generic \"registry metadata is missing\" message below.\n const collidingIndexName = await this.findRegistryEntryByTableName(connection, tableName);\n if (collidingIndexName && collidingIndexName !== logicalIndexName) {\n throw asMastraError(\n 'CREATE_INDEX',\n 'IDENTIFIER_COLLISION',\n { indexName: logicalIndexName, tableName, collidingIndexName },\n new Error(\n `Logical index name \"${logicalIndexName}\" collides with existing index \"${collidingIndexName}\" after Oracle identifier normalization (both map to table \"${tableName}\"). Choose a different index name.`,\n ),\n ErrorCategory.USER,\n );\n }\n\n // A physical table without registry metadata is unsafe because describe/query cannot validate dimensions.\n throw asMastraError(\n 'CREATE_INDEX',\n 'REGISTRY_MISSING',\n { indexName: logicalIndexName, tableName },\n new Error(\n `Oracle vector table \"${tableName}\" already exists, but registry metadata for \"${logicalIndexName}\" is missing. Delete the stale table or restore the registry entry before creating the index.`,\n ),\n ErrorCategory.USER,\n );\n }\n\n await this.createVectorTable(connection, logicalIndexName, dimension, normalizedFormat);\n await this.upsertRegistry(\n connection,\n logicalIndexName,\n dimension,\n normalizedMetric,\n normalizedFormat,\n unbuiltConfig,\n );\n this.clearIndexMetadata(logicalIndexName);\n await this.createMetadataIndexes(\n connection,\n logicalIndexName,\n metadataIndexes ?? this.defaultMetadataIndexes,\n );\n\n if (buildIndex && mergedConfig.type !== 'none') {\n const createdIndex = await this.createVectorIndex(\n connection,\n logicalIndexName,\n normalizedMetric,\n mergedConfig,\n );\n if (!createdIndex) {\n throw vectorIndexAlreadyExistsError('CREATE_INDEX', logicalIndexName, {\n metric: normalizedMetric,\n indexType: mergedConfig.type,\n });\n }\n await this.updateRegistryIndexConfig(connection, logicalIndexName, normalizedMetric, mergedConfig);\n }\n this.cacheIndexMetadata(logicalIndexName, {\n indexName: logicalIndexName,\n tableName,\n dimension,\n metric: normalizedMetric,\n indexType: builtConfig.type,\n vectorFormat: normalizedFormat,\n accuracy: builtConfig.accuracy ?? 95,\n qualifiedTableName: qualifyName(tableName, this.schemaName),\n });\n }),\n );\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw asMastraError('CREATE_INDEX', 'FAILED', { indexName }, error);\n }\n }\n\n async buildIndex(\n withConnection: WithConnection,\n { indexName, metric, indexConfig }: OracleBuildIndexParams,\n ): Promise<void> {\n const logicalIndexName = normalizeLogicalIndexName(indexName);\n // Locked like createIndex/deleteIndex so a concurrent build/rebuild on the same logical index\n // cannot interleave DROP/CREATE VECTOR INDEX statements against each other.\n return this.withIndexLock(logicalIndexName, () =>\n withConnection(async connection => {\n const indexInfo = await this.getIndexMetadata(connection, logicalIndexName);\n const existingBuiltConfig =\n indexInfo.indexType === 'none'\n ? undefined\n : {\n type: indexInfo.indexType,\n accuracy: indexInfo.accuracy,\n };\n const mergedConfig = this.mergeIndexConfig(indexConfig ?? existingBuiltConfig);\n\n // `none` is a valid exact-search mode, so buildIndex becomes a no-op for those indexes.\n if (mergedConfig.type === 'none') return;\n\n const normalizedMetric = normalizeMetric(metric ?? indexInfo.metric);\n validateMetricForFormat(normalizedMetric, indexInfo.vectorFormat, mergedConfig.type);\n const createdIndex = await this.createVectorIndex(\n connection,\n logicalIndexName,\n normalizedMetric,\n mergedConfig,\n indexInfo.tableName,\n );\n if (!createdIndex) {\n const explicitlyRequestedConfig = metric !== undefined || indexConfig !== undefined;\n const registryConfigChanged = !vectorIndexRegistryConfigMatches(indexInfo, normalizedMetric, mergedConfig);\n if (explicitlyRequestedConfig || registryConfigChanged) {\n throw vectorIndexAlreadyExistsError('BUILD_INDEX', logicalIndexName, indexInfo);\n }\n return;\n }\n await this.updateRegistryIndexConfig(connection, logicalIndexName, normalizedMetric, mergedConfig);\n this.cacheIndexMetadata(logicalIndexName, {\n ...indexInfo,\n metric: normalizedMetric,\n indexType: mergedConfig.type,\n accuracy: mergedConfig.accuracy ?? 95,\n });\n }),\n ).catch(error => {\n if (error instanceof MastraError) throw error;\n throw asMastraError('BUILD_INDEX', 'FAILED', { indexName }, error);\n });\n }\n\n async rebuildIndex(\n withConnection: WithConnection,\n { indexName, metric, indexConfig }: OracleRebuildIndexParams,\n ): Promise<void> {\n const logicalIndexName = normalizeLogicalIndexName(indexName);\n // Locked like createIndex/deleteIndex so a concurrent build/rebuild on the same logical index\n // cannot interleave DROP/CREATE VECTOR INDEX statements against each other.\n return this.withIndexLock(logicalIndexName, () =>\n withConnection(async connection => {\n const indexInfo = await this.getIndexMetadata(connection, logicalIndexName);\n const normalizedMetric = normalizeMetric(metric ?? indexInfo.metric);\n const mergedConfig = this.mergeIndexConfig(\n indexConfig ?? {\n type: indexInfo.indexType,\n accuracy: indexInfo.accuracy,\n },\n );\n validateMetricForFormat(normalizedMetric, indexInfo.vectorFormat, mergedConfig.type);\n\n if (mergedConfig.type === 'none') return;\n\n await this.dropVectorIndex(connection, logicalIndexName, indexInfo.tableName);\n const createdIndex = await this.createVectorIndex(\n connection,\n logicalIndexName,\n normalizedMetric,\n mergedConfig,\n indexInfo.tableName,\n );\n if (!createdIndex) {\n // The DROP above should have cleared the way for a fresh CREATE VECTOR INDEX; a `false`\n // return means the index still exists (e.g. a racing writer recreated it), so the registry\n // must not be advanced to describe a physical index that does not match this config.\n throw vectorIndexAlreadyExistsError('REBUILD_INDEX', logicalIndexName, indexInfo);\n }\n await this.updateRegistryIndexConfig(connection, logicalIndexName, normalizedMetric, mergedConfig);\n this.cacheIndexMetadata(logicalIndexName, {\n ...indexInfo,\n metric: normalizedMetric,\n indexType: mergedConfig.type,\n accuracy: mergedConfig.accuracy ?? 95,\n });\n }),\n ).catch(error => {\n if (error instanceof MastraError) throw error;\n throw asMastraError('REBUILD_INDEX', 'FAILED', { indexName }, error);\n });\n }\n\n async deleteIndex(withConnection: WithConnection, { indexName }: DeleteIndexParams): Promise<void> {\n const logicalIndexName = normalizeLogicalIndexName(indexName);\n return this.withIndexLock(logicalIndexName, () =>\n withConnection(async connection => {\n await this.ensureRegistry(connection);\n const registryRow = await this.getRegistryEntry(connection, logicalIndexName);\n const tableName = registryRow\n ? qualifyName(registryRow.tableName, this.schemaName)\n : this.qualifiedTableName(logicalIndexName);\n\n await executeOracleDdl(connection, `DROP TABLE ${tableName} CASCADE CONSTRAINTS PURGE`, [-942]);\n await connection.execute(\n `DELETE FROM ${this.qualifiedRegistryTable()} WHERE index_name IN (:indexName, :legacyIndexName)`,\n {\n indexName: logicalIndexName,\n legacyIndexName: safeLegacyCanonicalIndexName(logicalIndexName),\n },\n );\n await connection.commit();\n this.clearIndexMetadata(logicalIndexName);\n }),\n ).catch(error => {\n if (error instanceof MastraError) throw error;\n throw asMastraError('DELETE_INDEX', 'FAILED', { indexName }, error);\n });\n }\n\n async withIndexLock<T>(indexName: string, callback: () => Promise<T>): Promise<T> {\n const previousLock = this.indexLocks.get(indexName) ?? Promise.resolve();\n let release!: () => void;\n const currentLock = new Promise<void>(resolve => {\n release = resolve;\n });\n\n this.indexLocks.set(indexName, currentLock);\n // Wait for the previous operation even if it failed, then let this caller surface its own result.\n await previousLock.catch(() => undefined);\n\n try {\n return await callback();\n } finally {\n release();\n if (this.indexLocks.get(indexName) === currentLock) {\n this.indexLocks.delete(indexName);\n }\n }\n }\n\n async ensureRegistry(connection: Connection): Promise<void> {\n if (this.registryReady) return;\n if (!this.registryPromise) {\n this.registryPromise = (async () => {\n // ALTER keeps older registry tables compatible without forcing a migration step.\n await executeOracleDdl(\n connection,\n `\n CREATE TABLE ${this.qualifiedRegistryTable()} (\n index_name VARCHAR2(512) PRIMARY KEY,\n table_name VARCHAR2(128) NOT NULL,\n dimension NUMBER(10) NOT NULL,\n metric VARCHAR2(32) NOT NULL,\n index_type VARCHAR2(16) NOT NULL,\n vector_format VARCHAR2(16) DEFAULT 'vector' NOT NULL,\n accuracy NUMBER(3),\n created_at TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL,\n updated_at TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL\n )`,\n [-955],\n );\n await executeOracleDdl(\n connection,\n `ALTER TABLE ${this.qualifiedRegistryTable()} ADD vector_format VARCHAR2(16) DEFAULT 'vector' NOT NULL`,\n [-1430],\n );\n this.registryReady = true;\n })().catch(error => {\n this.registryPromise = undefined;\n throw error;\n });\n }\n await this.registryPromise;\n }\n\n async createVectorTable(\n connection: Connection,\n indexName: string,\n dimension: number,\n vectorFormat: OracleVectorFormat,\n ): Promise<void> {\n // Each logical Mastra index owns a table because dimensions and vector formats are table-level choices.\n await executeOracleDdl(\n connection,\n `\n CREATE TABLE ${this.qualifiedTableName(indexName)} (\n vector_id VARCHAR2(512) PRIMARY KEY,\n embedding VECTOR(${dimension}, ${vectorFormatToken(vectorFormat)}) NOT NULL,\n metadata JSON NOT NULL,\n created_at TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL,\n updated_at TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL\n )`,\n [-955],\n );\n }\n\n async upsertRegistry(\n connection: Connection,\n indexName: string,\n dimension: number,\n metric: OracleMetric,\n vectorFormat: OracleVectorFormat,\n indexConfig?: OracleVectorIndexConfig,\n ): Promise<void> {\n const tableName = tableNameForIndex(indexName, this.tablePrefix);\n const mergedConfig = this.mergeIndexConfig(indexConfig);\n\n // Registry writes are idempotent so createIndex can be safely retried by deployment scripts.\n await connection.execute(\n `\n MERGE INTO ${this.qualifiedRegistryTable()} target\n USING (\n SELECT\n :index_name AS index_name,\n :table_name AS table_name,\n :dimension AS dimension,\n :metric AS metric,\n :index_type AS index_type,\n :vector_format AS vector_format,\n :accuracy AS accuracy\n FROM dual\n ) source\n ON (target.index_name = source.index_name)\n WHEN MATCHED THEN UPDATE SET\n target.table_name = source.table_name,\n target.dimension = source.dimension,\n target.metric = source.metric,\n target.index_type = source.index_type,\n target.vector_format = source.vector_format,\n target.accuracy = source.accuracy,\n target.updated_at = SYSTIMESTAMP\n WHEN NOT MATCHED THEN INSERT (\n index_name,\n table_name,\n dimension,\n metric,\n index_type,\n vector_format,\n accuracy,\n created_at,\n updated_at\n ) VALUES (\n source.index_name,\n source.table_name,\n source.dimension,\n source.metric,\n source.index_type,\n source.vector_format,\n source.accuracy,\n SYSTIMESTAMP,\n SYSTIMESTAMP\n )`,\n {\n index_name: indexName,\n table_name: tableName,\n dimension,\n metric,\n index_type: mergedConfig.type ?? 'none',\n vector_format: vectorFormat,\n accuracy: mergedConfig.accuracy ?? 95,\n },\n );\n await connection.commit();\n }\n\n async updateRegistryIndexConfig(\n connection: Connection,\n indexName: string,\n metric: OracleMetric,\n indexConfig: OracleVectorIndexConfig,\n ): Promise<void> {\n const mergedConfig = this.mergeIndexConfig(indexConfig);\n await connection.execute(\n `\n UPDATE ${this.qualifiedRegistryTable()}\n SET\n metric = :metric,\n index_type = :index_type,\n accuracy = :accuracy,\n updated_at = SYSTIMESTAMP\n WHERE index_name = :indexName`,\n {\n indexName,\n metric,\n index_type: mergedConfig.type ?? 'none',\n accuracy: mergedConfig.accuracy ?? 95,\n },\n );\n await connection.commit();\n }\n\n async createVectorIndex(\n connection: Connection,\n indexName: string,\n metric: OracleMetric,\n indexConfig?: OracleVectorIndexConfig,\n tableNameOverride?: string,\n ): Promise<boolean> {\n const tableName = tableNameOverride ?? tableNameForIndex(indexName, this.tablePrefix);\n const indexObjectName = this.qualifiedIndexName(indexNameForTable(tableName, 'VECTOR_IDX'));\n const qualifiedTableName = qualifyName(tableName, this.schemaName);\n const mergedConfig = this.mergeIndexConfig(indexConfig);\n const accuracy = mergedConfig.accuracy ?? 95;\n validateAccuracy(accuracy);\n\n const organization =\n mergedConfig.type === 'ivf' ? 'ORGANIZATION NEIGHBOR PARTITIONS' : 'ORGANIZATION INMEMORY NEIGHBOR GRAPH';\n const parameterClause = buildVectorIndexParameterClause(mergedConfig);\n\n try {\n // Duplicate index errors are reported to callers so registry metadata is updated only when DDL actually ran.\n return await executeOracleDdl(\n connection,\n `\n CREATE VECTOR INDEX ${indexObjectName}\n ON ${qualifiedTableName} (embedding)\n ${organization}\n DISTANCE ${metricToken(metric)}\n WITH TARGET ACCURACY ${accuracy}\n ${parameterClause}`,\n [-955],\n );\n } catch (error) {\n if (isOracleErrorCode(error, VECTOR_MEMORY_EXHAUSTED_CODES)) {\n throw asMastraError(\n 'CREATE_INDEX',\n 'VECTOR_MEMORY_EXHAUSTED',\n {\n indexName,\n indexType: mergedConfig.type,\n accuracy,\n vectorMemoryParameter: 'VECTOR_MEMORY_SIZE',\n },\n createInsufficientVectorMemoryError(indexName, mergedConfig, error),\n ErrorCategory.USER,\n );\n }\n throw error;\n }\n }\n\n async dropVectorIndex(connection: Connection, indexName: string, tableNameOverride?: string): Promise<void> {\n const tableName = tableNameOverride ?? tableNameForIndex(indexName, this.tablePrefix);\n const indexObjectName = this.qualifiedIndexName(indexNameForTable(tableName, 'VECTOR_IDX'));\n await executeOracleDdl(connection, `DROP INDEX ${indexObjectName}`, [-1418]);\n }\n\n async createMetadataIndexes(\n connection: Connection,\n indexName: string,\n metadataFields: string[],\n tableNameOverride?: string,\n ): Promise<void> {\n const tableName = tableNameOverride ?? tableNameForIndex(indexName, this.tablePrefix);\n const qualifiedTableName = qualifyName(tableName, this.schemaName);\n for (const field of metadataFields) {\n const metadataIndexName = indexNameForMetadataField(tableName, field);\n const jsonPath = assertJsonPath(field);\n\n // Metadata indexes target scalar JSON_VALUE paths used by the filter compiler.\n await executeOracleDdl(\n connection,\n `\n CREATE INDEX ${this.qualifiedIndexName(metadataIndexName)}\n ON ${qualifiedTableName} (\n JSON_VALUE(metadata, '${jsonPath}' RETURNING VARCHAR2(4000) NULL ON ERROR)\n )`,\n [-955],\n );\n }\n }\n\n async getIndexMetadata(connection: Connection, indexName: string): Promise<CachedIndexInfo> {\n const logicalIndexName = normalizeLogicalIndexName(indexName);\n const cached = this.indexInfoCache.get(logicalIndexName);\n if (cached) return cached;\n\n await this.ensureRegistry(connection);\n\n const registryRow = await this.getRegistryEntry(connection, logicalIndexName);\n if (!registryRow) {\n throw new Error(`Vector index \"${indexName}\" does not exist`);\n }\n\n const qualifiedTableName = qualifyName(registryRow.tableName, this.schemaName);\n return this.cacheIndexMetadata(logicalIndexName, {\n ...registryRow,\n qualifiedTableName,\n });\n }\n\n cacheIndexMetadata(indexName: string, indexInfo: CachedIndexInfo): CachedIndexInfo {\n const logicalIndexName = normalizeLogicalIndexName(indexName);\n this.indexInfoCache.set(logicalIndexName, indexInfo);\n this.indexInfoCache.set(indexInfo.indexName, indexInfo);\n return indexInfo;\n }\n\n clearIndexMetadata(indexName: string): void {\n const logicalIndexName = normalizeLogicalIndexName(indexName);\n this.indexInfoCache.delete(logicalIndexName);\n this.indexInfoCache.delete(safeLegacyCanonicalIndexName(logicalIndexName));\n }\n\n async getRegistryEntry(\n connection: Connection,\n indexName: string,\n ): Promise<Omit<IndexInfo, 'qualifiedTableName' | 'count'> | null> {\n const logicalIndexName = normalizeLogicalIndexName(indexName);\n const legacyIndexName = safeLegacyCanonicalIndexName(logicalIndexName);\n // Prefer exact logical names, then fall back to the legacy uppercase registry key.\n const registryResult = await connection.execute<ObjectRow>(\n `\n SELECT\n index_name AS \"indexName\",\n table_name AS \"tableName\",\n dimension AS \"dimension\",\n metric AS \"metric\",\n index_type AS \"indexType\",\n vector_format AS \"vectorFormat\",\n accuracy AS \"accuracy\"\n FROM ${this.qualifiedRegistryTable()}\n WHERE index_name IN (:indexName, :legacyIndexName)\n ORDER BY CASE WHEN index_name = :indexName THEN 0 ELSE 1 END\n FETCH FIRST 1 ROWS ONLY`,\n { indexName: logicalIndexName, legacyIndexName },\n executeOptions(),\n );\n const registryRow = rows(registryResult)[0];\n if (!registryRow) return null;\n\n return {\n indexName: String(registryRow.indexName),\n tableName: String(registryRow.tableName),\n dimension: Number(registryRow.dimension),\n metric: normalizeMetric(String(registryRow.metric)),\n indexType: normalizeIndexType(String(registryRow.indexType)),\n vectorFormat: normalizeVectorFormat(String(registryRow.vectorFormat ?? DEFAULT_VECTOR_FORMAT)),\n accuracy:\n registryRow.accuracy === null || registryRow.accuracy === undefined ? undefined : Number(registryRow.accuracy),\n };\n }\n\n // Looks up a registry row by physical table name rather than logical index name, so createIndex can\n // tell an identifier-normalization collision (table claimed by a different index_name) apart from a\n // genuinely orphaned physical table with no registry row at all.\n async findRegistryEntryByTableName(connection: Connection, tableName: string): Promise<string | null> {\n const registryResult = await connection.execute<ObjectRow>(\n `\n SELECT index_name AS \"indexName\"\n FROM ${this.qualifiedRegistryTable()}\n WHERE table_name = :tableName\n FETCH FIRST 1 ROWS ONLY`,\n { tableName },\n executeOptions(),\n );\n const registryRow = rows(registryResult)[0];\n return registryRow ? String(registryRow.indexName) : null;\n }\n\n async vectorTableExists(connection: Connection, tableName: string): Promise<boolean> {\n const normalizedTableName = normalizeIdentifier(tableName, 'table name');\n const binds: BindParameters = { tableName: normalizedTableName };\n const ownerPredicate = this.schemaName ? ':ownerName' : \"SYS_CONTEXT('USERENV','CURRENT_SCHEMA')\";\n if (this.schemaName) {\n binds.ownerName = this.schemaName;\n }\n\n const result = await connection.execute<ObjectRow>(\n `SELECT 1 AS \"exists\" FROM all_tables WHERE owner = ${ownerPredicate} AND table_name = :tableName FETCH FIRST 1 ROW ONLY`,\n binds,\n executeOptions(),\n );\n return rows(result).length > 0;\n }\n\n assertCompatibleExistingIndex(\n existing: Omit<IndexInfo, 'qualifiedTableName' | 'count'>,\n indexName: string,\n dimension: number,\n metric: OracleMetric,\n vectorFormat: OracleVectorFormat,\n ): void {\n if (existing.dimension !== dimension) {\n throw asMastraError(\n 'CREATE_INDEX',\n 'DIMENSION_MISMATCH',\n { indexName, expected: existing.dimension, actual: dimension },\n new Error(\n `Vector index \"${indexName}\" already exists with dimension ${existing.dimension}; received ${dimension}`,\n ),\n ErrorCategory.USER,\n );\n }\n\n if (existing.metric !== metric) {\n throw asMastraError(\n 'CREATE_INDEX',\n 'METRIC_MISMATCH',\n { indexName, expected: existing.metric, actual: metric },\n new Error(`Vector index \"${indexName}\" already exists with metric ${existing.metric}; received ${metric}`),\n ErrorCategory.USER,\n );\n }\n\n if (existing.vectorFormat !== vectorFormat) {\n throw asMastraError(\n 'CREATE_INDEX',\n 'VECTOR_FORMAT_MISMATCH',\n { indexName, expected: existing.vectorFormat, actual: vectorFormat },\n new Error(\n `Vector index \"${indexName}\" already exists with vector format ${existing.vectorFormat}; received ${vectorFormat}`,\n ),\n ErrorCategory.USER,\n );\n }\n }\n\n mergeIndexConfig(\n indexConfig?: OracleVectorIndexConfig,\n ): Required<Pick<OracleVectorIndexConfig, 'type'>> & OracleVectorIndexConfig {\n const type = normalizeIndexType(indexConfig?.type ?? this.defaultIndexConfig.type ?? 'none');\n const accuracy = indexConfig?.accuracy ?? this.defaultIndexConfig.accuracy;\n if (accuracy !== undefined) validateAccuracy(accuracy);\n\n return {\n ...this.defaultIndexConfig,\n ...indexConfig,\n type,\n accuracy,\n hnsw: {\n ...this.defaultIndexConfig.hnsw,\n ...indexConfig?.hnsw,\n },\n ivf: {\n ...this.defaultIndexConfig.ivf,\n ...indexConfig?.ivf,\n },\n };\n }\n\n qualifiedRegistryTable(): string {\n return qualifyName(this.registryTableName, this.schemaName);\n }\n\n qualifiedTableName(indexName: string): string {\n return qualifyName(tableNameForIndex(indexName, this.tablePrefix), this.schemaName);\n }\n\n qualifiedIndexName(indexName: string): string {\n return qualifyName(indexName, this.schemaName);\n }\n}\n\nexport function normalizeIndexType(indexType: string): OracleVectorIndexType {\n const normalized = indexType.toLowerCase();\n if (normalized !== 'hnsw' && normalized !== 'ivf' && normalized !== 'none') {\n throw new Error('index type must be one of \"hnsw\", \"ivf\", or \"none\"');\n }\n return normalized;\n}\n\nfunction vectorIndexRegistryConfigMatches(\n indexInfo: Pick<OracleIndexStats, 'metric' | 'indexType' | 'accuracy'>,\n metric: OracleMetric,\n indexConfig: OracleVectorIndexConfig,\n): boolean {\n return (\n indexInfo.metric === metric &&\n indexInfo.indexType === normalizeIndexType(indexConfig.type ?? 'none') &&\n (indexInfo.accuracy ?? 95) === (indexConfig.accuracy ?? 95)\n );\n}\n\nfunction vectorIndexAlreadyExistsError(\n operation: 'BUILD_INDEX' | 'CREATE_INDEX' | 'REBUILD_INDEX',\n indexName: string,\n indexInfo: Pick<OracleIndexStats, 'metric' | 'indexType'>,\n): MastraError {\n return asMastraError(\n operation,\n 'INDEX_ALREADY_EXISTS',\n { indexName, indexType: indexInfo.indexType, metric: indexInfo.metric },\n new Error(\n `Oracle vector index for \"${indexName}\" already exists. Use rebuildIndex() to change the metric or index configuration.`,\n ),\n ErrorCategory.USER,\n );\n}\n\nfunction createInsufficientVectorMemoryError(\n indexName: string,\n indexConfig: OracleVectorIndexConfig,\n cause: unknown,\n): Error {\n const indexType = (indexConfig.type ?? 'hnsw').toUpperCase();\n return withCause(\n new Error(\n `Oracle could not create the ${indexType} vector index \"${indexName}\" because the current container's Vector Pool is out of space (ORA-51962). ` +\n 'HNSW indexes live in the Oracle Vector Pool, controlled by VECTOR_MEMORY_SIZE. ' +\n 'Increase it once with DBA privileges, for example: ALTER SYSTEM SET VECTOR_MEMORY_SIZE = 512M SCOPE=MEMORY. ' +\n 'From this adapter you can also run vector.configureVectorMemory({ size: \"512M\" }) using a privileged connection. ',\n ),\n cause,\n );\n}\n\nfunction safeLegacyCanonicalIndexName(indexName: string): string {\n try {\n return legacyCanonicalIndexName(indexName);\n } catch {\n return indexName;\n }\n}\n","import { ErrorCategory, MastraError } from '@mastra/core/error';\nimport { validateTopK } from '@mastra/core/vector';\nimport type { QueryResult } from '@mastra/core/vector';\n\nimport type { ObjectRow } from '../shared/connection';\nimport { asBindParameters, executeOptions, rows } from '../shared/connection';\nimport type { IndexRegistry, WithConnection } from './ddl';\nimport { buildMetadataWhereClause } from './filter';\nimport { metricToken, validateAccuracy } from './sql';\nimport type { OracleMetric, OracleQueryVectorParams, OracleVectorFormat } from './types';\nimport { STORE_NAME, asMastraError, validateVectorForIndex, validateVectors, vectorBind } from './upsert';\n\n// Handles exact and approximate vector search, including the metadata-only recall path and the\n// min-score post-filter that Oracle distance scores need for parity with other Mastra providers.\nexport async function query(\n registry: IndexRegistry,\n withConnection: WithConnection,\n {\n indexName,\n queryVector,\n topK = 10,\n filter,\n includeVector = false,\n minScore = -1,\n sparseVector,\n queryMode,\n targetAccuracy,\n }: OracleQueryVectorParams,\n): Promise<QueryResult[]> {\n try {\n if (sparseVector !== undefined) {\n throw new Error('OracleVector does not support sparseVector queries yet; use dense queryVector search');\n }\n validateTopK(STORE_NAME, topK);\n if (queryVector !== undefined) {\n validateVectors([queryVector]);\n } else if (!filter || Object.keys(filter).length === 0) {\n throw new Error('Either queryVector or filter must be provided');\n }\n if (!Number.isFinite(minScore)) {\n throw new Error('minScore must be a finite number');\n }\n if (targetAccuracy !== undefined) {\n validateAccuracy(targetAccuracy);\n }\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw asMastraError('QUERY', 'INVALID_INPUT', { indexName }, error, ErrorCategory.USER);\n }\n\n return withConnection(async connection => {\n const indexInfo = await registry.getIndexMetadata(connection, indexName);\n if (queryVector !== undefined) {\n validateVectorForIndex(queryVector, indexInfo, indexName);\n }\n\n const metadataFilter = buildMetadataWhereClause(filter);\n const vectorColumn = includeVector ? ', embedding AS \"vector\"' : '';\n\n if (queryVector === undefined) {\n // Metadata-only queries preserve provider parity for filtered recalls without a query embedding.\n const sql = `\n SELECT\n vector_id AS \"id\",\n 0 AS \"score\",\n metadata AS \"metadata\"\n ${vectorColumn}\n FROM ${indexInfo.qualifiedTableName}\n ${metadataFilter.sql}\n ORDER BY vector_id\n FETCH FIRST ${topK} ROWS ONLY`;\n\n const result = await connection.execute<ObjectRow>(sql, asBindParameters(metadataFilter.binds), executeOptions());\n return rows(result).map(row => rowToQueryResult(row, indexInfo.vectorFormat, indexInfo.dimension));\n }\n\n const distance = `VECTOR_DISTANCE(embedding, :queryVector, ${metricToken(indexInfo.metric)})`;\n const score = scoreExpression(distance, indexInfo.metric);\n const fetchMode = normalizeQueryMode(queryMode ?? (indexInfo.indexType === 'none' ? 'exact' : 'approx'));\n // Oracle applies approximate index search only when ORDER BY and FETCH are in the same query block.\n const targetAccuracyClause =\n fetchMode === 'approx' && targetAccuracy !== undefined ? ` WITH TARGET ACCURACY ${targetAccuracy}` : '';\n if (canSkipMinScoreFilter(indexInfo.metric, minScore)) {\n const sql = `\n SELECT\n vector_id AS \"id\",\n ${score} AS \"score\",\n metadata AS \"metadata\"\n ${vectorColumn}\n FROM ${indexInfo.qualifiedTableName}\n ${metadataFilter.sql}\n ORDER BY ${distance}\n FETCH ${fetchMode.toUpperCase()} FIRST ${topK} ROWS ONLY${targetAccuracyClause}`;\n\n const result = await connection.execute<ObjectRow>(\n sql,\n {\n ...metadataFilter.binds,\n queryVector: vectorBind(queryVector, indexInfo.vectorFormat),\n },\n executeOptions(),\n );\n\n return rows(result).map(row => rowToQueryResult(row, indexInfo.vectorFormat, indexInfo.dimension));\n }\n\n const sql = `\n WITH vector_scores AS (\n SELECT\n vector_id AS \"id\",\n ${score} AS \"score\",\n metadata AS \"metadata\"\n ${vectorColumn}\n FROM ${indexInfo.qualifiedTableName}\n ${metadataFilter.sql}\n ORDER BY ${distance}\n FETCH ${fetchMode.toUpperCase()} FIRST ${topK} ROWS ONLY${targetAccuracyClause}\n )\n SELECT\n \"id\",\n \"score\",\n \"metadata\"\n ${includeVector ? ', \"vector\"' : ''}\n FROM vector_scores\n WHERE \"score\" >= :minScore\n ORDER BY \"score\" DESC`;\n\n const result = await connection.execute<ObjectRow>(\n sql,\n {\n ...metadataFilter.binds,\n queryVector: vectorBind(queryVector, indexInfo.vectorFormat),\n minScore,\n },\n executeOptions(),\n );\n\n return rows(result).map(row => rowToQueryResult(row, indexInfo.vectorFormat, indexInfo.dimension));\n }).catch(error => {\n if (error instanceof MastraError) throw error;\n throw asMastraError('QUERY', 'FAILED', { indexName }, error);\n });\n}\n\nfunction normalizeQueryMode(queryMode: string): 'approx' | 'exact' {\n const normalized = queryMode.toLowerCase();\n if (normalized !== 'approx' && normalized !== 'exact') {\n throw new Error('queryMode must be one of \"approx\" or \"exact\"');\n }\n return normalized;\n}\n\nfunction scoreExpression(distanceExpression: string, metric: OracleMetric): string {\n // Mastra expects higher scores to be better, while Oracle distance is lower-is-better.\n switch (metric) {\n case 'euclidean':\n case 'hamming':\n return `1 / (1 + ${distanceExpression})`;\n case 'dotproduct':\n return `-1 * ${distanceExpression}`;\n case 'jaccard':\n case 'cosine':\n default:\n return `1 - ${distanceExpression}`;\n }\n}\n\nfunction canSkipMinScoreFilter(metric: OracleMetric, minScore: number): boolean {\n // The default threshold is non-restrictive for Oracle distance-derived scores except dotproduct,\n // whose score range is data-dependent.\n return minScore <= -1 && metric !== 'dotproduct';\n}\n\nfunction rowToQueryResult(row: ObjectRow, vectorFormat: OracleVectorFormat, dimension: number): QueryResult {\n const result: QueryResult = {\n id: String(row.id),\n score: Number(row.score),\n metadata: parseJson(row.metadata),\n };\n\n if (row.vector !== undefined && row.vector !== null) {\n result.vector = parseVector(row.vector, vectorFormat, dimension);\n }\n\n return result;\n}\n\nfunction parseJson(value: unknown): Record<string, unknown> {\n if (value === null || value === undefined) return {};\n if (typeof value === 'string') return JSON.parse(value) as Record<string, unknown>;\n if (Buffer.isBuffer(value)) return JSON.parse(value.toString('utf8')) as Record<string, unknown>;\n if (typeof value === 'object') return value as Record<string, unknown>;\n return {};\n}\n\nfunction parseVector(value: unknown, vectorFormat: OracleVectorFormat, dimension: number): number[] {\n // Oracle clients may return VECTOR values as arrays, typed arrays, or JSON strings depending on mode.\n if (Array.isArray(value)) {\n const values = value.map(Number);\n return vectorFormat === 'bit' && values.length !== dimension ? unpackBitVector(values, dimension) : values;\n }\n if (ArrayBuffer.isView(value)) {\n const values = Array.from(value as unknown as ArrayLike<number>).map(Number);\n return vectorFormat === 'bit' ? unpackBitVector(values, dimension) : values;\n }\n if (typeof value === 'string') {\n const values = (JSON.parse(value) as number[]).map(Number);\n return vectorFormat === 'bit' && values.length !== dimension ? unpackBitVector(values, dimension) : values;\n }\n return [];\n}\n\nfunction unpackBitVector(bytes: ArrayLike<number>, dimension: number): number[] {\n const vector: number[] = [];\n for (let i = 0; i < dimension; i += 1) {\n const byte = bytes[Math.floor(i / 8)] ?? 0;\n vector.push((byte & (1 << (7 - (i % 8)))) === 0 ? 0 : 1);\n }\n return vector;\n}\n","import { ErrorCategory, MastraError } from '@mastra/core/error';\nimport { validateTopK } from '@mastra/core/vector';\nimport type { DescribeIndexParams, IndexStats } from '@mastra/core/vector';\nimport type { Connection } from 'oracledb';\nimport type oracledb from 'oracledb';\n\nimport type { ObjectRow } from '../shared/connection';\nimport { executeOptions, rows } from '../shared/connection';\nimport type { IndexInfo, IndexRegistry, WithConnection } from './ddl';\nimport { normalizeIdentifier, normalizeLogicalIndexName, indexNameForTable } from './identifiers';\nimport { validateAccuracy } from './sql';\nimport type { OracleConfigureVectorMemoryParams, OracleIndexAccuracyParams, OracleIndexStatusParams } from './types';\nimport { STORE_NAME, asMastraError, validateVectorForIndex, vectorBind, withCause } from './upsert';\n\ntype BindParameters = oracledb.BindParameters;\n\n// Read-only diagnostics (describe/list/status/accuracy) plus the Vector Pool sizing helper.\n\nexport async function listIndexes(registry: IndexRegistry, withConnection: WithConnection): Promise<string[]> {\n return withConnection(async connection => {\n await registry.ensureRegistry(connection);\n const result = await connection.execute<ObjectRow>(\n `SELECT index_name AS \"indexName\" FROM ${registry.qualifiedRegistryTable()} ORDER BY index_name`,\n {},\n executeOptions(),\n );\n\n return rows(result).map(row => String(row.indexName));\n }).catch(error => {\n if (error instanceof MastraError) throw error;\n throw asMastraError('LIST_INDEXES', 'FAILED', {}, error);\n });\n}\n\nexport async function describeIndex(\n registry: IndexRegistry,\n withConnection: WithConnection,\n { indexName }: DescribeIndexParams,\n): Promise<IndexStats> {\n return withConnection(\n async connection => getIndexInfo(registry, connection, indexName) as unknown as IndexStats,\n ).catch(error => {\n if (error instanceof MastraError) throw error;\n throw asMastraError('DESCRIBE_INDEX', 'FAILED', { indexName }, error);\n });\n}\n\nexport async function getIndexStatus(\n registry: IndexRegistry,\n withConnection: WithConnection,\n { indexName, ownerName }: OracleIndexStatusParams,\n): Promise<string> {\n return withConnection(async connection => {\n const logicalIndexName = normalizeLogicalIndexName(indexName);\n const indexInfo = await registry.getIndexMetadata(connection, logicalIndexName);\n if (indexInfo.indexType === 'none') return 'NONE';\n\n const indexObjectName = indexNameForTable(indexInfo.tableName, 'VECTOR_IDX');\n const owner = ownerName ? normalizeIdentifier(ownerName, 'index owner name') : registry.schemaName;\n const ownerPredicate = owner ? ':ownerName' : \"SYS_CONTEXT('USERENV','CURRENT_SCHEMA')\";\n const binds: BindParameters = owner\n ? { ownerName: owner, indexName: indexObjectName }\n : { indexName: indexObjectName };\n const result = await connection.execute<ObjectRow>(\n `\n SELECT\n status AS \"status\",\n index_type AS \"indexType\",\n domidx_status AS \"domainStatus\"\n FROM all_indexes\n WHERE owner = ${ownerPredicate}\n AND index_name = :indexName\n FETCH FIRST 1 ROWS ONLY`,\n binds,\n executeOptions(),\n );\n\n const row = rows(result)[0];\n if (!row) return 'NOT_FOUND';\n\n const status = String(row.status ?? 'UNKNOWN');\n const indexType = row.indexType ? `type=${String(row.indexType)}` : '';\n const domainStatus = row.domainStatus ? `domain=${String(row.domainStatus)}` : '';\n return [status, indexType, domainStatus].filter(Boolean).join(' ');\n }).catch(error => {\n if (error instanceof MastraError) throw error;\n throw asMastraError('GET_INDEX_STATUS', 'FAILED', { indexName }, error);\n });\n}\n\nexport async function indexAccuracyQuery(\n registry: IndexRegistry,\n withConnection: WithConnection,\n { indexName, queryVector, topK, targetAccuracy }: OracleIndexAccuracyParams,\n): Promise<string> {\n return withConnection(async connection => {\n validateTopK(STORE_NAME, topK);\n if (targetAccuracy !== undefined) validateAccuracy(targetAccuracy);\n\n const logicalIndexName = normalizeLogicalIndexName(indexName);\n const indexInfo = await registry.getIndexMetadata(connection, logicalIndexName);\n validateVectorForIndex(queryVector, indexInfo, indexName);\n const indexObjectName = indexNameForTable(indexInfo.tableName, 'VECTOR_IDX');\n const ownerExpression = registry.schemaName ? ':ownerName' : \"SYS_CONTEXT('USERENV','CURRENT_SCHEMA')\";\n const result = await connection.execute<ObjectRow>(\n `SELECT DBMS_VECTOR.INDEX_ACCURACY_QUERY(\n ${ownerExpression},\n :indexName,\n :queryVector,\n :topK,\n :targetAccuracy\n ) AS \"accuracy\"\n FROM dual`,\n {\n ...(registry.schemaName ? { ownerName: registry.schemaName } : {}),\n indexName: indexObjectName,\n queryVector: vectorBind(queryVector, indexInfo.vectorFormat),\n topK,\n targetAccuracy: targetAccuracy ?? indexInfo.accuracy ?? 95,\n },\n executeOptions(),\n );\n\n return String(rows(result)[0]?.accuracy ?? '');\n }).catch(error => {\n if (error instanceof MastraError) throw error;\n throw asMastraError('INDEX_ACCURACY_QUERY', 'FAILED', { indexName }, error);\n });\n}\n\nexport async function configureVectorMemory(\n withConnection: WithConnection,\n { size, scope = 'MEMORY' }: OracleConfigureVectorMemoryParams,\n): Promise<void> {\n const normalizedSize = normalizeVectorMemorySize(size);\n const normalizedScope = normalizeVectorMemoryScope(scope);\n\n return withConnection(async connection => {\n // HNSW uses Oracle's Vector Pool; local/dev users can size it through this privileged helper.\n await connection.execute(`ALTER SYSTEM SET VECTOR_MEMORY_SIZE = ${normalizedSize} SCOPE=${normalizedScope}`);\n }).catch(error => {\n if (error instanceof MastraError) throw error;\n throw asMastraError(\n 'CONFIGURE_VECTOR_MEMORY',\n 'FAILED',\n { size: normalizedSize, scope: normalizedScope },\n createVectorMemoryConfigurationError(normalizedSize, normalizedScope, error),\n ErrorCategory.USER,\n );\n });\n}\n\nasync function getIndexInfo(registry: IndexRegistry, connection: Connection, indexName: string): Promise<IndexInfo> {\n const indexInfo = await registry.getIndexMetadata(connection, indexName);\n\n // describeIndex reports live row count, so read it from the physical vector table each time.\n const countResult = await connection.execute<ObjectRow>(\n `SELECT COUNT(*) AS \"count\" FROM ${indexInfo.qualifiedTableName}`,\n {},\n executeOptions(),\n );\n const count = Number(rows(countResult)[0]?.count ?? 0);\n\n return {\n ...indexInfo,\n count,\n };\n}\n\nfunction normalizeVectorMemorySize(size: string): string {\n const normalized = size.trim().toUpperCase();\n if (!/^\\d+(?:[KMG])?$/.test(normalized)) {\n throw new Error('vector memory size must be an integer optionally followed by K, M, or G, for example \"512M\"');\n }\n return normalized;\n}\n\nfunction normalizeVectorMemoryScope(scope: string): 'MEMORY' | 'SPFILE' | 'BOTH' {\n const normalized = scope.trim().toUpperCase();\n if (normalized !== 'MEMORY' && normalized !== 'SPFILE' && normalized !== 'BOTH') {\n throw new Error('vector memory scope must be one of \"MEMORY\", \"SPFILE\", or \"BOTH\"');\n }\n return normalized;\n}\n\nfunction createVectorMemoryConfigurationError(size: string, scope: string, cause: unknown): Error {\n return withCause(\n new Error(\n `Unable to set Oracle VECTOR_MEMORY_SIZE=${size} SCOPE=${scope}. ` +\n 'Run this with a DBA-capable user such as SYSTEM for local Docker databases, or ask your DBA to size the Vector Pool before building HNSW indexes.',\n ),\n cause,\n );\n}\n","export type * from './types';\n\nimport { MastraVector } from '@mastra/core/vector';\nimport type {\n DeleteIndexParams,\n DeleteVectorParams,\n DeleteVectorsParams,\n DescribeIndexParams,\n IndexStats,\n QueryResult,\n UpdateVectorParams,\n UpsertVectorParams,\n} from '@mastra/core/vector';\nimport type { Connection } from 'oracledb';\n\nimport { OraclePoolManager, normalizeBatchSize } from '../shared/connection';\nimport {\n DEFAULT_METADATA_INDEXES,\n DEFAULT_REGISTRY_TABLE,\n DEFAULT_TABLE_PREFIX,\n DEFAULT_VECTOR_FORMAT,\n IndexRegistry,\n} from './ddl';\nimport type { CachedIndexInfo } from './ddl';\nimport { normalizeIdentifier } from './identifiers';\nimport { query as queryOp } from './query';\nimport { normalizeVectorFormat } from './sql';\nimport {\n configureVectorMemory as configureVectorMemoryOp,\n describeIndex as describeIndexOp,\n getIndexStatus as getIndexStatusOp,\n indexAccuracyQuery as indexAccuracyQueryOp,\n listIndexes as listIndexesOp,\n} from './stats';\nimport type {\n OracleBuildIndexParams,\n OracleConfigureVectorMemoryParams,\n OracleCreateIndexParams,\n OracleIndexAccuracyParams,\n OracleIndexStatusParams,\n OracleMetric,\n OracleQueryVectorParams,\n OracleRebuildIndexParams,\n OracleVectorConfig,\n OracleVectorFilter,\n OracleVectorIndexConfig,\n} from './types';\nimport {\n DEFAULT_VECTOR_UPSERT_BATCH_SIZE,\n asMastraError,\n deleteVector as deleteVectorOp,\n deleteVectors as deleteVectorsOp,\n updateVector as updateVectorOp,\n upsert as upsertOp,\n} from './upsert';\n\n// OracleVector keeps Mastra's vector API stable while using native Oracle VECTOR and JSON features.\n// The implementation is split across sibling modules: ddl.ts (registry/DDL + shared error helper),\n// upsert.ts (write path + vector format encode/decode), query.ts (search), stats.ts (diagnostics).\n// This facade owns the connection pool and wires each call through to the right module.\nexport class OracleVector extends MastraVector<OracleVectorFilter> {\n private readonly poolManager: OraclePoolManager;\n private readonly ownsPoolManager: boolean;\n private readonly defaultIndexConfig: OracleVectorIndexConfig;\n private readonly upsertBatchSize: number;\n private readonly registry: IndexRegistry;\n\n constructor(config: OracleVectorConfig) {\n try {\n super({ id: config.id });\n\n this.poolManager = config.poolManager ?? new OraclePoolManager(config);\n this.ownsPoolManager = !config.poolManager;\n const schemaName = config.schemaName ? normalizeIdentifier(config.schemaName, 'schema name') : undefined;\n const tablePrefix = normalizeIdentifier(config.tablePrefix ?? DEFAULT_TABLE_PREFIX, 'table prefix');\n const registryTableName = normalizeIdentifier(\n config.registryTableName ?? DEFAULT_REGISTRY_TABLE,\n 'registry table name',\n );\n this.defaultIndexConfig = { type: 'none', accuracy: 95, ...config.defaultIndexConfig };\n const defaultMetadataIndexes = config.defaultMetadataIndexes ?? DEFAULT_METADATA_INDEXES;\n const defaultVectorFormat = normalizeVectorFormat(config.defaultVectorFormat ?? DEFAULT_VECTOR_FORMAT);\n this.upsertBatchSize = normalizeBatchSize(\n config.upsertBatchSize,\n 'upsertBatchSize',\n DEFAULT_VECTOR_UPSERT_BATCH_SIZE,\n );\n\n this.registry = new IndexRegistry({\n schemaName,\n tablePrefix,\n registryTableName,\n defaultMetadataIndexes,\n defaultVectorFormat,\n defaultIndexConfig: this.defaultIndexConfig,\n });\n } catch (error) {\n throw asMastraError('INITIALIZATION', 'FAILED', { schemaName: config.schemaName ?? '' }, error);\n }\n }\n\n async createIndex(params: OracleCreateIndexParams): Promise<void> {\n return this.registry.createIndex(this.withConnection.bind(this), params);\n }\n\n async buildIndex(params: OracleBuildIndexParams): Promise<void> {\n return this.registry.buildIndex(this.withConnection.bind(this), params);\n }\n\n async rebuildIndex(params: OracleRebuildIndexParams): Promise<void> {\n return this.registry.rebuildIndex(this.withConnection.bind(this), params);\n }\n\n async deleteIndex(params: DeleteIndexParams): Promise<void> {\n return this.registry.deleteIndex(this.withConnection.bind(this), params);\n }\n\n async configureVectorMemory(params: OracleConfigureVectorMemoryParams): Promise<void> {\n return configureVectorMemoryOp(this.withConnection.bind(this), params);\n }\n\n async getIndexStatus(params: OracleIndexStatusParams): Promise<string> {\n return getIndexStatusOp(this.registry, this.withConnection.bind(this), params);\n }\n\n async indexAccuracyQuery(params: OracleIndexAccuracyParams): Promise<string> {\n return indexAccuracyQueryOp(this.registry, this.withConnection.bind(this), params);\n }\n\n async upsert(params: UpsertVectorParams): Promise<string[]> {\n return upsertOp(this.registry, this.withConnection.bind(this), this.upsertBatchSize, params);\n }\n\n async query(params: OracleQueryVectorParams): Promise<QueryResult[]> {\n return queryOp(this.registry, this.withConnection.bind(this), params);\n }\n\n async listIndexes(): Promise<string[]> {\n return listIndexesOp(this.registry, this.withConnection.bind(this));\n }\n\n async describeIndex(params: DescribeIndexParams): Promise<IndexStats> {\n return describeIndexOp(this.registry, this.withConnection.bind(this), params);\n }\n\n async updateVector(params: UpdateVectorParams<OracleVectorFilter>): Promise<void> {\n return updateVectorOp(this.registry, this.withConnection.bind(this), params);\n }\n\n async deleteVector(params: DeleteVectorParams): Promise<void> {\n return deleteVectorOp(this.registry, this.withConnection.bind(this), params);\n }\n\n async deleteVectors(params: DeleteVectorsParams<OracleVectorFilter>): Promise<void> {\n return deleteVectorsOp(this.registry, this.withConnection.bind(this), params);\n }\n\n async disconnect(): Promise<void> {\n if (this.ownsPoolManager) {\n await this.poolManager.close();\n }\n }\n\n async close(): Promise<void> {\n await this.disconnect();\n }\n\n private async withConnection<T>(callback: (connection: Connection) => Promise<T>): Promise<T> {\n return this.poolManager.withConnection(callback);\n }\n\n // Unit tests reach into these two members directly (via `(vector as any)`), so they stay as thin\n // instance-method/property delegations even though the real logic now lives in IndexRegistry.\n private cacheIndexMetadata(indexName: string, indexInfo: CachedIndexInfo): CachedIndexInfo {\n return this.registry.cacheIndexMetadata(indexName, indexInfo);\n }\n\n private createVectorIndex(\n connection: Connection,\n indexName: string,\n metric: OracleMetric,\n indexConfig?: OracleVectorIndexConfig,\n tableNameOverride?: string,\n ): Promise<boolean> {\n return this.registry.createVectorIndex(connection, indexName, metric, indexConfig, tableNameOverride);\n }\n}\n","import {\n TABLE_MESSAGES,\n TABLE_OBSERVATIONAL_MEMORY,\n TABLE_RESOURCES,\n TABLE_SCHEMAS,\n TABLE_THREADS,\n TABLE_WORKFLOW_SNAPSHOT,\n} from '@mastra/core/storage';\nimport type { CreateIndexOptions, StorageColumn, TABLE_NAMES } from '@mastra/core/storage';\nimport type { Connection } from 'oracledb';\nimport type oracledb from 'oracledb';\n\nimport {\n asBindParameters,\n clobBind,\n executeDdl,\n executeOptions,\n jsonBind,\n rollbackQuietly,\n rows,\n safeJsonStringify,\n} from '../../shared/connection';\nimport type { ObjectRow, OraclePoolManager } from '../../shared/connection';\nimport { normalizeIdentifier, qualifyName } from '../../vector/identifiers';\n\nexport type OracleQueryBinds = Record<string, unknown>;\nexport type OracleExecuteManyBinds = Array<Record<string, unknown> | unknown[]>;\n\nexport interface OracleDBConfig {\n poolManager: OraclePoolManager;\n schemaName?: string;\n}\n\nexport interface OracleTxClient {\n execute<T extends ObjectRow = ObjectRow>(sql: string, binds?: OracleQueryBinds): Promise<T[]>;\n executeMany<T = unknown>(\n sql: string,\n binds: OracleExecuteManyBinds,\n options?: oracledb.ExecuteManyOptions,\n ): Promise<oracledb.Results<T> | undefined>;\n none(sql: string, binds?: OracleQueryBinds): Promise<void>;\n one<T extends ObjectRow = ObjectRow>(sql: string, binds?: OracleQueryBinds): Promise<T>;\n oneOrNone<T extends ObjectRow = ObjectRow>(sql: string, binds?: OracleQueryBinds): Promise<T | null>;\n manyOrNone<T extends ObjectRow = ObjectRow>(sql: string, binds?: OracleQueryBinds): Promise<T[]>;\n}\n\ntype OracleWriteClient = Pick<OracleTxClient, 'none'>;\n\ntype PreparedField = {\n columnName: string;\n columnSql: string;\n bindName: string;\n value: unknown;\n};\n\n// Thin adapter around one Oracle connection. It gives storage domains a small\n// API while keeping commit/rollback control in OracleDB.\nclass OracleConnectionClient implements OracleTxClient {\n constructor(private readonly connection: Connection) {}\n\n async execute<T extends ObjectRow = ObjectRow>(sql: string, binds: OracleQueryBinds = {}): Promise<T[]> {\n const result = await this.connection.execute<T>(sql, asBindParameters(binds), executeOptions());\n return rows(result);\n }\n\n async executeMany<T = unknown>(\n sql: string,\n binds: OracleExecuteManyBinds,\n options: oracledb.ExecuteManyOptions = {},\n ): Promise<oracledb.Results<T> | undefined> {\n if (binds.length === 0) return undefined;\n // executeMany is used for hot paths such as message writes; callers pass\n // explicit bind definitions when Oracle needs CLOB/JSON type information.\n return this.connection.executeMany<T>(sql, binds as oracledb.BindParameters[], options);\n }\n\n async none(sql: string, binds: OracleQueryBinds = {}): Promise<void> {\n await this.connection.execute(sql, asBindParameters(binds));\n }\n\n async one<T extends ObjectRow = ObjectRow>(sql: string, binds: OracleQueryBinds = {}): Promise<T> {\n const result = await this.execute<T>(sql, binds);\n if (result.length !== 1) {\n throw new Error(`Expected exactly one row but received ${result.length}`);\n }\n return result[0]!;\n }\n\n async oneOrNone<T extends ObjectRow = ObjectRow>(sql: string, binds: OracleQueryBinds = {}): Promise<T | null> {\n const result = await this.execute<T>(sql, binds);\n if (result.length > 1) {\n throw new Error(`Expected zero or one row but received ${result.length}`);\n }\n return result[0] ?? null;\n }\n\n async manyOrNone<T extends ObjectRow = ObjectRow>(sql: string, binds: OracleQueryBinds = {}): Promise<T[]> {\n return this.execute<T>(sql, binds);\n }\n}\n\n// OracleDB is the shared storage-domain facade for DDL, DML, transactions,\n// schema qualification, and Mastra schema-to-Oracle type conversion.\nexport class OracleDB {\n constructor(private readonly config: OracleDBConfig) {}\n\n table(tableName: string): string {\n // Centralize schema qualification so domains never concatenate owner names by hand.\n return qualifyName(tableName, this.config.schemaName);\n }\n\n async execute<T extends ObjectRow = ObjectRow>(sql: string, binds: OracleQueryBinds = {}): Promise<T[]> {\n return this.config.poolManager.withConnection(async connection =>\n new OracleConnectionClient(connection).execute<T>(sql, binds),\n );\n }\n\n async executeMany<T = unknown>(\n sql: string,\n binds: OracleExecuteManyBinds,\n options: oracledb.ExecuteManyOptions = {},\n ): Promise<oracledb.Results<T> | undefined> {\n return this.config.poolManager.withConnection(async connection => {\n try {\n // Non-transactional bulk calls still commit once so domain code gets\n // predictable write visibility without managing connection state itself.\n const result = await new OracleConnectionClient(connection).executeMany<T>(sql, binds, options);\n await connection.commit();\n return result;\n } catch (error) {\n await rollbackQuietly(connection);\n throw error;\n }\n });\n }\n\n async withConnection<T>(callback: (connection: Connection) => Promise<T>): Promise<T> {\n return this.config.poolManager.withConnection(callback);\n }\n\n async none(sql: string, binds: OracleQueryBinds = {}): Promise<void> {\n await this.config.poolManager.withConnection(async connection => {\n await connection.execute(sql, asBindParameters(binds));\n await connection.commit();\n });\n }\n\n async one<T extends ObjectRow = ObjectRow>(sql: string, binds: OracleQueryBinds = {}): Promise<T> {\n const result = await this.execute<T>(sql, binds);\n if (result.length !== 1) {\n throw new Error(`Expected exactly one row but received ${result.length}`);\n }\n return result[0]!;\n }\n\n async oneOrNone<T extends ObjectRow = ObjectRow>(sql: string, binds: OracleQueryBinds = {}): Promise<T | null> {\n const result = await this.execute<T>(sql, binds);\n if (result.length > 1) {\n throw new Error(`Expected zero or one row but received ${result.length}`);\n }\n return result[0] ?? null;\n }\n\n async manyOrNone<T extends ObjectRow = ObjectRow>(sql: string, binds: OracleQueryBinds = {}): Promise<T[]> {\n return this.execute<T>(sql, binds);\n }\n\n async tx<T>(callback: (client: OracleTxClient, connection: Connection) => Promise<T>): Promise<T> {\n return this.config.poolManager.withConnection(async connection => {\n try {\n // Domains use this for multi-row mutations that must commit or roll back as one Oracle transaction.\n const result = await callback(new OracleConnectionClient(connection), connection);\n await connection.commit();\n return result;\n } catch (error) {\n await rollbackQuietly(connection);\n throw error;\n }\n });\n }\n\n async executeDdl(sql: string, ignoredErrorCodes: number[] = []): Promise<void> {\n await this.config.poolManager.withConnection(async connection => {\n await executeDdl(connection, sql, ignoredErrorCodes);\n });\n }\n\n async hasColumn(tableName: string, columnName: string): Promise<boolean> {\n const table = normalizeIdentifier(tableName, 'table name');\n const candidates = columnNameCandidates(columnName);\n const binds: OracleQueryBinds = { tableName: table };\n const ownerPredicate = this.config.schemaName ? ':ownerName' : `SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA')`;\n if (this.config.schemaName) {\n binds.ownerName = normalizeIdentifier(this.config.schemaName, 'schema name');\n }\n\n const columnPredicates = candidates.map((candidate, index) => {\n const bindName = `columnName${index}`;\n binds[bindName] = candidate;\n return `:${bindName}`;\n });\n\n // Older Oracle provider builds may have created quoted camelCase columns;\n // check both exact and upper-case candidates before running additive DDL.\n const row = await this.oneOrNone(\n `SELECT 1 AS \"exists\" FROM all_tab_columns WHERE owner = ${ownerPredicate} AND table_name = :tableName AND column_name IN (${columnPredicates.join(', ')}) FETCH FIRST 1 ROW ONLY`,\n binds,\n );\n return !!row;\n }\n\n async createTable({\n tableName,\n schema,\n compositePrimaryKey,\n }: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n compositePrimaryKey?: string[];\n }): Promise<void> {\n // Oracle does not support CREATE TABLE IF NOT EXISTS, so ORA-00955 is the idempotency path.\n await this.executeDdl(\n generateOracleTableSQL({ tableName, schema, schemaName: this.config.schemaName, compositePrimaryKey }),\n [-955],\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 for (const columnName of ifNotExists) {\n const column = schema[columnName];\n if (!column) continue;\n if (await this.hasColumn(tableName, columnName)) continue;\n\n // Additive migrations use ALTER TABLE ADD and tolerate concurrent runs that add the same column first.\n await this.executeDdl(\n `ALTER TABLE ${this.table(tableName)} ADD (${oracleColumnDefinition(tableName, columnName, column, this.config.schemaName)})`,\n [-1430],\n );\n }\n }\n\n async insert({ tableName, record, schema }: OracleRecordOperation): Promise<void> {\n await executeInsert(this, this.table(tableName), tableName, record, schemaForTable(tableName, schema));\n }\n\n async batchInsert({ tableName, records, schema }: OracleBatchInsertOperation): Promise<void> {\n const tableSchema = schemaForTable(tableName, schema);\n const tableSql = this.table(tableName);\n await this.tx(async client => {\n // Keep batch inserts inside one transaction while reusing the same value\n // preparation path as single-row inserts for JSON, CLOB, and booleans.\n for (const record of records) {\n await executeInsert(client, tableSql, tableName, record, tableSchema);\n }\n });\n }\n\n async update({ tableName, keys, data, schema }: OracleUpdateOperation): Promise<void> {\n await executeUpdate(this, this.table(tableName), tableName, keys, data, schemaForTable(tableName, schema));\n }\n\n async batchUpdate({ tableName, updates, schema }: OracleBatchUpdateOperation): Promise<void> {\n const tableSchema = schemaForTable(tableName, schema);\n const tableSql = this.table(tableName);\n await this.tx(async client => {\n for (const { keys, data } of updates) {\n await executeUpdate(client, tableSql, tableName, keys, data, tableSchema);\n }\n });\n }\n\n async batchDelete({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, unknown>[] }): Promise<void> {\n if (keys.length === 0) return;\n await this.tx(async client => {\n for (const keySet of keys) {\n const { sql, binds } = whereFromKeys(keySet, 'k');\n await client.none(`DELETE FROM ${this.table(tableName)} WHERE ${sql}`, binds);\n }\n });\n }\n\n async merge({ tableName, keys, record, schema }: OracleMergeOperation): Promise<void> {\n if (keys.length === 0) {\n throw new Error('Oracle merge requires at least one key column');\n }\n\n const tableSchema = schemaForTable(tableName, schema);\n const keySet = new Set(keys);\n const fields = prepareRecord(tableName, record, tableSchema);\n if (fields.length === 0) return;\n\n for (const key of keys) {\n if (!fields.some(field => field.columnName === key)) {\n throw new Error(`Oracle merge record is missing key column ${key}`);\n }\n }\n\n const nonKeyFields = fields.filter(field => !keySet.has(field.columnName));\n const onClause = fields\n .filter(field => keySet.has(field.columnName))\n .map(field => `target.${field.columnSql} = :${field.bindName}`)\n .join(' AND ');\n const updateClause = nonKeyFields.map(field => `target.${field.columnSql} = :${field.bindName}`).join(', ');\n const insertColumns = fields.map(field => field.columnSql).join(', ');\n const insertValues = fields.map(field => `:${field.bindName}`).join(', ');\n const matchedClause = updateClause ? ` WHEN MATCHED THEN UPDATE SET ${updateClause}` : '';\n\n // MERGE gives domains a consistent upsert primitive without exposing Oracle-specific SQL at call sites.\n await this.none(\n `MERGE INTO ${this.table(tableName)} target USING dual ON (${onClause})${matchedClause} WHEN NOT MATCHED THEN INSERT (${insertColumns}) VALUES (${insertValues})`,\n bindsFromFields(fields),\n );\n }\n\n async load<R extends ObjectRow = ObjectRow>({\n tableName,\n keys,\n schema,\n orderBy,\n }: OracleLoadOperation): Promise<R | null> {\n const tableSchema = schemaForTable(tableName, schema);\n const { sql, binds } = whereFromKeys(keys, 'k');\n const orderClause = orderBy ?? (tableSchema.createdAt ? ` ORDER BY ${formatColumnName('createdAt')} DESC` : '');\n return this.oneOrNone<R>(\n `SELECT * FROM ${this.table(tableName)} WHERE ${sql}${orderClause} FETCH FIRST 1 ROW ONLY`,\n binds,\n );\n }\n\n async createIndex(options: OracleCreateIndexOptions): Promise<void> {\n await this.config.poolManager.withConnection(async connection => {\n await createOracleIndex(connection, options, this.config.schemaName);\n });\n }\n\n async dropTable(tableName: TABLE_NAMES): Promise<void> {\n await this.executeDdl(`DROP TABLE ${this.table(tableName)}`, [-942]);\n }\n\n async clearTable(tableName: string): Promise<void> {\n await this.none(`DELETE FROM ${this.table(tableName)}`);\n }\n}\n\nexport interface OracleRecordOperation {\n tableName: TABLE_NAMES;\n record: Record<string, unknown>;\n schema?: Record<string, StorageColumn>;\n}\n\nexport interface OracleBatchInsertOperation {\n tableName: TABLE_NAMES;\n records: Record<string, unknown>[];\n schema?: Record<string, StorageColumn>;\n}\n\nexport interface OracleUpdateOperation {\n tableName: TABLE_NAMES;\n keys: Record<string, unknown>;\n data: Record<string, unknown>;\n schema?: Record<string, StorageColumn>;\n}\n\nexport interface OracleBatchUpdateOperation {\n tableName: TABLE_NAMES;\n updates: Array<{ keys: Record<string, unknown>; data: Record<string, unknown> }>;\n schema?: Record<string, StorageColumn>;\n}\n\nexport interface OracleMergeOperation {\n tableName: TABLE_NAMES;\n keys: string[];\n record: Record<string, unknown>;\n schema?: Record<string, StorageColumn>;\n}\n\nexport interface OracleLoadOperation {\n tableName: TABLE_NAMES;\n keys: Record<string, unknown>;\n schema?: Record<string, StorageColumn>;\n orderBy?: string;\n}\n\nexport function parseOracleJson<T = unknown>(value: unknown): T | undefined {\n if (value === null || value === undefined) return undefined;\n if (typeof value !== 'string' && !Buffer.isBuffer(value)) return value as T;\n\n // Depending on driver fetch settings, Oracle JSON/CLOB values can arrive as\n // objects, strings, or buffers. Normalize all three into Mastra-facing values.\n const raw = Buffer.isBuffer(value) ? value.toString('utf8') : value;\n try {\n return JSON.parse(raw) as T;\n } catch {\n return raw as T;\n }\n}\n\nexport type OracleIndexType = 'normal' | 'bitmap';\n\nexport interface OracleCreateIndexOptions extends Omit<\n CreateIndexOptions,\n 'concurrent' | 'method' | 'opclass' | 'storage'\n> {\n /**\n * Oracle index type. `normal` creates a standard B-tree/function-based index.\n * `bitmap` is useful for low-cardinality columns, but should be avoided for\n * high-write OLTP workloads.\n */\n type?: OracleIndexType;\n /**\n * Creates the index online. This is the Oracle-native equivalent of avoiding\n * long blocking DDL, subject to Oracle edition/version support.\n */\n online?: boolean;\n /** Marks the index invisible so it can be tested before optimizer use. */\n invisible?: boolean;\n /** Adds PARALLEL or PARALLEL n to speed large index builds. */\n parallel?: boolean | number;\n /** Adds COMPRESS or COMPRESS n for duplicate leading-key compression. */\n compress?: boolean | number;\n /** Adds NOLOGGING for faster bulk index builds when recoverability policy allows it. */\n noLogging?: boolean;\n /** Creates a reverse key index. Only valid for normal B-tree indexes. */\n reverse?: boolean;\n}\n\ntype ParsedColumn = {\n expression: string;\n direction?: 'ASC' | 'DESC';\n};\n\nconst SIMPLE_IDENTIFIER = /^[A-Za-z][A-Za-z0-9_]*$/;\nconst LOWERCASE_SQL_IDENTIFIER = /^[a-z][a-z0-9_]*$/;\nconst QUOTED_IDENTIFIER = /^\"([A-Za-z][A-Za-z0-9_]*)\"$/;\nconst ORDERED_COLUMN = /^(.*?)(?:\\s+(ASC|DESC))?$/i;\nconst UNSAFE_SQL =\n /;|--|\\/\\*|\\*\\/|\\0|\\b(CREATE|ALTER|DROP|TRUNCATE|INSERT|UPDATE|DELETE|MERGE|GRANT|REVOKE|COMMIT|ROLLBACK|EXECUTE|BEGIN|END)\\b/i;\nconst RESERVED_COLUMN_NAMES = new Set(['references', 'size']);\nconst LONG_TEXT_COLUMNS = new Set([\n 'activeObservations',\n 'activeObservationsPendingUpdate',\n 'bufferedObservations',\n 'bufferedReflection',\n 'changeMessage',\n 'content',\n 'description',\n 'instructions',\n 'analyzePrompt',\n 'other',\n 'extractPrompt',\n 'generateReasonPrompt',\n 'generateScorePrompt',\n 'preprocessPrompt',\n 'reason',\n 'reasonPrompt',\n 'workingMemory',\n]);\n\nconst COLUMN_MAP: Record<string, Record<string, string>> = {\n ...Object.fromEntries(\n Object.entries(TABLE_SCHEMAS).map(([tableName, schema]) => [\n tableName,\n Object.fromEntries(Object.keys(schema).map(columnName => [columnName, formatColumnName(columnName)])),\n ]),\n ),\n [TABLE_THREADS]: {\n ...columnMapFor(TABLE_THREADS),\n id: 'id',\n resourceId: '\"resourceId\"',\n title: 'title',\n metadata: 'metadata',\n createdAt: '\"createdAt\"',\n updatedAt: '\"updatedAt\"',\n },\n [TABLE_MESSAGES]: {\n ...columnMapFor(TABLE_MESSAGES),\n id: 'id',\n thread_id: 'thread_id',\n content: 'content',\n role: 'role',\n type: 'type',\n resourceId: '\"resourceId\"',\n createdAt: '\"createdAt\"',\n },\n [TABLE_RESOURCES]: {\n ...columnMapFor(TABLE_RESOURCES),\n id: 'id',\n workingMemory: '\"workingMemory\"',\n metadata: 'metadata',\n createdAt: '\"createdAt\"',\n updatedAt: '\"updatedAt\"',\n },\n [TABLE_OBSERVATIONAL_MEMORY]: {\n ...columnMapFor(TABLE_OBSERVATIONAL_MEMORY),\n id: 'id',\n lookupKey: '\"lookupKey\"',\n scope: '\"scope\"',\n resourceId: '\"resourceId\"',\n threadId: '\"threadId\"',\n activeObservations: '\"activeObservations\"',\n activeObservationsPendingUpdate: '\"activeObservationsPendingUpdate\"',\n originType: '\"originType\"',\n config: 'config',\n generationCount: '\"generationCount\"',\n lastObservedAt: '\"lastObservedAt\"',\n lastReflectionAt: '\"lastReflectionAt\"',\n pendingMessageTokens: '\"pendingMessageTokens\"',\n totalTokensObserved: '\"totalTokensObserved\"',\n observationTokenCount: '\"observationTokenCount\"',\n isObserving: '\"isObserving\"',\n isReflecting: '\"isReflecting\"',\n observedMessageIds: '\"observedMessageIds\"',\n observedTimezone: '\"observedTimezone\"',\n bufferedObservationChunks: '\"bufferedObservationChunks\"',\n isBufferingObservation: '\"isBufferingObservation\"',\n isBufferingReflection: '\"isBufferingReflection\"',\n lastBufferedAtTokens: '\"lastBufferedAtTokens\"',\n lastBufferedAtTime: '\"lastBufferedAtTime\"',\n metadata: 'metadata',\n createdAt: '\"createdAt\"',\n updatedAt: '\"updatedAt\"',\n },\n [TABLE_WORKFLOW_SNAPSHOT]: {\n ...columnMapFor(TABLE_WORKFLOW_SNAPSHOT),\n workflow_name: 'workflow_name',\n run_id: 'run_id',\n resourceId: '\"resourceId\"',\n snapshot: 'snapshot',\n createdAt: '\"createdAt\"',\n updatedAt: '\"updatedAt\"',\n },\n};\n\nexport function generateOracleTableSQL({\n tableName,\n schema,\n schemaName,\n compositePrimaryKey,\n}: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n schemaName?: string;\n compositePrimaryKey?: string[];\n}): string {\n const compositePrimaryKeySet = compositePrimaryKey ? new Set(compositePrimaryKey) : undefined;\n const columns = Object.entries(schema).map(([columnName, column]) =>\n oracleColumnDefinition(tableName, columnName, column, schemaName, compositePrimaryKeySet),\n );\n const constraints = compositePrimaryKey?.length\n ? [`PRIMARY KEY (${compositePrimaryKey.map(columnName => formatColumnName(columnName)).join(', ')})`]\n : [];\n\n return `CREATE TABLE ${qualifyName(tableName, schemaName)} (\\n ${[...columns, ...constraints].join(',\\n ')}\\n)`;\n}\n\n// Mastra storage schemas are database-neutral. This is where we choose Oracle\n// native JSON for structured fields and CLOBs for prompts/messages that exceed VARCHAR2 limits.\nexport function oracleColumnType(tableName: TABLE_NAMES | string, columnName: string, column: StorageColumn): string {\n switch (column.type) {\n case 'text':\n if (column.primaryKey || isIdentifierLikeColumn(columnName)) return 'VARCHAR2(512)';\n if (isLongTextColumn(tableName, columnName)) return 'CLOB';\n return 'VARCHAR2(4000)';\n case 'uuid':\n return 'VARCHAR2(36)';\n case 'timestamp':\n return 'TIMESTAMP WITH TIME ZONE';\n case 'jsonb':\n return 'JSON';\n case 'integer':\n return 'NUMBER(10)';\n case 'bigint':\n return 'NUMBER(20)';\n case 'float':\n return 'BINARY_DOUBLE';\n case 'boolean':\n return 'NUMBER(1)';\n default:\n return 'VARCHAR2(4000)';\n }\n}\n\nfunction oracleColumnDefinition(\n tableName: TABLE_NAMES,\n columnName: string,\n column: StorageColumn,\n schemaName?: string,\n compositePrimaryKeySet?: Set<string>,\n): string {\n const constraints: string[] = [];\n const isCompositePrimaryKeyColumn = compositePrimaryKeySet?.has(columnName);\n\n if (!column.nullable && !column.primaryKey) constraints.push('NOT NULL');\n if (column.primaryKey && !isCompositePrimaryKeyColumn) constraints.push('PRIMARY KEY');\n if (column.references) {\n constraints.push(\n `REFERENCES ${qualifyName(column.references.table, schemaName)} (${formatColumnName(column.references.column)})`,\n );\n }\n\n return [formatColumnName(columnName), oracleColumnType(tableName, columnName, column), ...constraints].join(' ');\n}\n\nfunction schemaForTable(tableName: TABLE_NAMES, schema?: Record<string, StorageColumn>): Record<string, StorageColumn> {\n return schema ?? TABLE_SCHEMAS[tableName];\n}\n\nasync function executeInsert(\n client: OracleWriteClient,\n tableSql: string,\n tableName: TABLE_NAMES,\n record: Record<string, unknown>,\n schema: Record<string, StorageColumn>,\n): Promise<void> {\n const fields = prepareRecord(tableName, record, schema);\n if (fields.length === 0) return;\n\n await client.none(\n `INSERT INTO ${tableSql} (${fields.map(field => field.columnSql).join(', ')}) VALUES (${fields\n .map(field => `:${field.bindName}`)\n .join(', ')})`,\n bindsFromFields(fields),\n );\n}\n\nasync function executeUpdate(\n client: OracleWriteClient,\n tableSql: string,\n tableName: TABLE_NAMES,\n keys: Record<string, unknown>,\n data: Record<string, unknown>,\n schema: Record<string, StorageColumn>,\n): Promise<void> {\n const fields = prepareRecord(tableName, data, schema, 'v');\n if (fields.length === 0) return;\n\n const { sql, binds } = whereFromKeys(keys, 'k');\n const assignments = fields.map(field => `${field.columnSql} = :${field.bindName}`).join(', ');\n await client.none(`UPDATE ${tableSql} SET ${assignments} WHERE ${sql}`, { ...binds, ...bindsFromFields(fields) });\n}\n\nfunction prepareRecord(\n tableName: TABLE_NAMES,\n record: Record<string, unknown>,\n schema: Record<string, StorageColumn>,\n bindPrefix = 'v',\n): PreparedField[] {\n // Undefined means \"do not touch this column\"; null is preserved and written as SQL NULL / JSON null.\n return Object.entries(record)\n .filter(([, value]) => value !== undefined)\n .map(([columnName, value], index) => {\n const column = schema[columnName];\n return {\n columnName,\n columnSql: formatColumnName(columnName),\n bindName: `${bindPrefix}${index}`,\n value: prepareValue(tableName, columnName, value, column),\n };\n });\n}\n\nfunction bindsFromFields(fields: PreparedField[]): OracleQueryBinds {\n return Object.fromEntries(fields.map(field => [field.bindName, field.value]));\n}\n\nfunction whereFromKeys(keys: Record<string, unknown>, bindPrefix: string): { sql: string; binds: OracleQueryBinds } {\n const entries = Object.entries(keys).filter(([, value]) => value !== undefined);\n if (entries.length === 0) throw new Error('At least one key is required');\n\n // undefined means \"not part of the key\"; null is an intentional IS NULL\n // predicate so optional composite-key fields can still be matched.\n const binds: OracleQueryBinds = {};\n const sql = entries\n .map(([columnName, value], index) => {\n const bindName = `${bindPrefix}${index}`;\n if (value === null) return `${formatColumnName(columnName)} IS NULL`;\n binds[bindName] = value instanceof Date ? value : normalizePrimitiveBind(value);\n return `${formatColumnName(columnName)} = :${bindName}`;\n })\n .join(' AND ');\n\n return { sql, binds };\n}\n\nfunction prepareValue(tableName: TABLE_NAMES, columnName: string, value: unknown, column?: StorageColumn): unknown {\n // Respect Mastra's schema types first, then fall back to safe primitive binds.\n if (column?.type === 'jsonb') {\n if (value === null && column.nullable) return null;\n return jsonBind(value);\n }\n\n if (value === null) return null;\n if (value instanceof Date) return value;\n if (column?.type === 'boolean') return value ? 1 : 0;\n if (column?.type === 'text' && isLongTextColumn(tableName, columnName)) return clobBind(String(value));\n if (typeof value === 'object') return safeJsonStringify(value);\n\n return normalizePrimitiveBind(value);\n}\n\nfunction normalizePrimitiveBind(value: unknown): unknown {\n if (typeof value === 'boolean') return value ? 1 : 0;\n return value;\n}\n\nfunction columnMapFor(tableName: string): Record<string, string> {\n const schema = TABLE_SCHEMAS[tableName as TABLE_NAMES];\n if (!schema) return {};\n return Object.fromEntries(Object.keys(schema).map(columnName => [columnName, formatColumnName(columnName)]));\n}\n\nfunction formatColumnName(columnName: string): string {\n const trimmed = columnName.trim();\n if (!SIMPLE_IDENTIFIER.test(trimmed)) {\n throw new Error(`column name must start with a letter and contain only letters, numbers, and underscores`);\n }\n if (RESERVED_COLUMN_NAMES.has(trimmed.toLowerCase())) return `\"${trimmed}\"`;\n // Preserve camelCase names with quotes because Mastra schemas use names like resourceId and createdAt.\n if (LOWERCASE_SQL_IDENTIFIER.test(trimmed)) return trimmed;\n return `\"${trimmed}\"`;\n}\n\nfunction columnNameCandidates(columnName: string): string[] {\n const trimmed = columnName.trim();\n if (!SIMPLE_IDENTIFIER.test(trimmed)) {\n throw new Error(`column name must start with a letter and contain only letters, numbers, and underscores`);\n }\n return Array.from(new Set([trimmed, trimmed.toUpperCase()]));\n}\n\nfunction isIdentifierLikeColumn(columnName: string): boolean {\n return columnName === 'id' || columnName === 'hash' || columnName.endsWith('Id') || columnName.endsWith('_id');\n}\n\nfunction isLongTextColumn(tableName: TABLE_NAMES | string, columnName: string): boolean {\n if (tableName === TABLE_THREADS && columnName === 'title') return false;\n return LONG_TEXT_COLUMNS.has(columnName);\n}\n\n// Custom indexes accept a constrained SQL surface so domains can expose useful\n// Oracle options without letting arbitrary DDL fragments through provider config.\nexport function generateOracleIndexSQL(options: OracleCreateIndexOptions, schemaName?: string): string {\n validateIndexOptions(options);\n\n const table = canonicalTableName(options.table);\n const indexType = options.type ?? 'normal';\n const unique = options.unique ? 'UNIQUE ' : '';\n const bitmap = indexType === 'bitmap' ? 'BITMAP ' : '';\n const columns = options.columns.map(column => formatIndexColumn(table, column, options.where)).join(', ');\n const attributes = indexAttributes(options);\n\n return `CREATE ${unique}${bitmap}INDEX ${qualifyName(options.name, schemaName)} ON ${qualifyName(\n table,\n schemaName,\n )} (${columns})${attributes}`;\n}\n\nexport async function createOracleIndex(\n connection: Connection,\n options: OracleCreateIndexOptions,\n schemaName?: string,\n): Promise<void> {\n // ORA-01408 (\"column list already indexed\") must propagate rather than being\n // swallowed: a custom index request with different visibility, compression,\n // or tablespace settings than an existing index on the same columns must not\n // be silently skipped. Only ORA-00955 (name already used) is safe to ignore here.\n await executeDdl(connection, generateOracleIndexSQL(options, schemaName), [-955]);\n}\n\nexport function filterIndexesForTables(\n indexes: OracleCreateIndexOptions[] | undefined,\n managedTables: readonly string[],\n): OracleCreateIndexOptions[] {\n if (!indexes?.length) return [];\n const managed = new Set(managedTables.map(table => normalizeIdentifier(table, 'table name')));\n return indexes.filter(index => managed.has(normalizeIdentifier(index.table, 'table name')));\n}\n\nfunction validateIndexOptions(options: OracleCreateIndexOptions): void {\n normalizeIdentifier(options.name, 'index name');\n normalizeIdentifier(options.table, 'table name');\n\n if (!options.columns.length) {\n throw new Error(`Index ${options.name} must include at least one column or expression`);\n }\n if (options.unique && options.type === 'bitmap') {\n throw new Error(`Index ${options.name} cannot be both unique and bitmap`);\n }\n if (options.reverse && options.type === 'bitmap') {\n throw new Error(`Index ${options.name} cannot be both reverse and bitmap`);\n }\n if (options.where && options.type === 'bitmap') {\n throw new Error(`Index ${options.name} cannot emulate partial indexes with bitmap indexes`);\n }\n if (options.where) validateSqlFragment(options.where, 'index where clause');\n if (options.parallel !== undefined && options.parallel !== true && options.parallel !== false) {\n validatePositiveInteger(options.parallel, 'parallel');\n }\n if (typeof options.compress === 'number') {\n validatePositiveInteger(options.compress, 'compress');\n }\n if (options.tablespace) normalizeIdentifier(options.tablespace, 'tablespace name');\n}\n\nfunction formatIndexColumn(table: string, column: string, where?: string): string {\n const parsed = parseColumn(table, column);\n const expression = where ? `CASE WHEN (${where}) THEN ${parsed.expression} END` : parsed.expression;\n return parsed.direction ? `${expression} ${parsed.direction}` : expression;\n}\n\nfunction parseColumn(table: string, column: string): ParsedColumn {\n const trimmed = column.trim();\n if (!trimmed) throw new Error('Index column cannot be empty');\n\n // Custom index columns may be normal schema fields or vetted expressions such\n // as JSON_VALUE(...). Keep a narrow SQL surface before passing DDL to Oracle.\n const match = trimmed.match(ORDERED_COLUMN);\n const rawExpression = match?.[1]?.trim();\n const direction = match?.[2]?.toUpperCase() as 'ASC' | 'DESC' | undefined;\n if (!rawExpression) throw new Error(`Invalid index column: ${column}`);\n\n const quoted = rawExpression.match(QUOTED_IDENTIFIER);\n if (quoted) return { expression: `\"${quoted[1]}\"`, direction };\n\n if (SIMPLE_IDENTIFIER.test(rawExpression)) {\n return { expression: resolveColumnName(table, rawExpression), direction };\n }\n\n validateSqlFragment(rawExpression, 'index column expression');\n validateBalancedParentheses(rawExpression, 'index column expression');\n return { expression: rawExpression, direction };\n}\n\nfunction resolveColumnName(table: string, column: string): string {\n const mapped = COLUMN_MAP[table]?.[column];\n if (mapped) return mapped;\n return normalizeIdentifier(column, 'column name');\n}\n\nfunction canonicalTableName(table: string): string {\n const normalized = normalizeIdentifier(table, 'table name');\n return (\n Object.keys(COLUMN_MAP).find(knownTable => normalizeIdentifier(knownTable, 'table name') === normalized) ?? table\n );\n}\n\nfunction indexAttributes(options: OracleCreateIndexOptions): string {\n const attributes: string[] = [];\n\n if (options.compress === true) attributes.push('COMPRESS');\n if (typeof options.compress === 'number') attributes.push(`COMPRESS ${options.compress}`);\n if (options.tablespace) attributes.push(`TABLESPACE ${normalizeIdentifier(options.tablespace, 'tablespace name')}`);\n if (options.noLogging) attributes.push('NOLOGGING');\n if (options.parallel === true) attributes.push('PARALLEL');\n if (typeof options.parallel === 'number') attributes.push(`PARALLEL ${options.parallel}`);\n if (options.reverse) attributes.push('REVERSE');\n if (options.online) attributes.push('ONLINE');\n if (options.invisible) attributes.push('INVISIBLE');\n\n return attributes.length ? ` ${attributes.join(' ')}` : '';\n}\n\nfunction validateSqlFragment(fragment: string, label: string): void {\n if (UNSAFE_SQL.test(fragment)) {\n throw new Error(`${label} contains unsafe SQL`);\n }\n}\n\nfunction validateBalancedParentheses(expression: string, label: string): void {\n let depth = 0;\n for (const char of expression) {\n if (char === '(') depth += 1;\n if (char === ')') depth -= 1;\n if (depth < 0) throw new Error(`${label} has unbalanced parentheses`);\n }\n if (depth !== 0) throw new Error(`${label} has unbalanced parentheses`);\n}\n\nfunction validatePositiveInteger(value: number, label: string): void {\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw new Error(`${label} must be a positive safe integer`);\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { createStorageErrorId } from '@mastra/core/storage';\n\nimport { parseOracleJson } from './db';\n\nexport type OracleStorageErrorDetails = Record<string, string | number | boolean | undefined>;\n\nexport function createOracleStorageError({\n storeName = 'ORACLEDB',\n operation,\n reason,\n details,\n cause,\n category = ErrorCategory.THIRD_PARTY,\n}: {\n storeName?: string;\n operation: string;\n reason: string;\n details: OracleStorageErrorDetails;\n cause: unknown;\n category?: ErrorCategory;\n}): MastraError {\n const safeDetails = Object.fromEntries(\n Object.entries(details).filter((entry): entry is [string, string | number | boolean] => entry[1] !== undefined),\n );\n\n return new MastraError(\n {\n id: createStorageErrorId(storeName, operation, reason),\n domain: ErrorDomain.STORAGE,\n category,\n details: safeDetails,\n },\n cause,\n );\n}\n\nexport function parseJsonValue(value: unknown): unknown {\n if (value === null || value === undefined) return null;\n if (typeof value !== 'string' && !Buffer.isBuffer(value)) return value;\n\n const raw = Buffer.isBuffer(value) ? value.toString('utf8') : value;\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n}\n\nexport function parseOptionalJson<T>(value: unknown): T | undefined {\n return parseOracleJson<T>(value);\n}\n\nexport function parseOptionalJsonObject(\n value: unknown,\n options: { emptyObjectAsUndefined?: boolean } = {},\n): Record<string, unknown> | undefined {\n const parsed = parseJsonValue(value);\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) return undefined;\n if (options.emptyObjectAsUndefined && Object.keys(parsed).length === 0) return undefined;\n return parsed as Record<string, unknown>;\n}\n\nexport function parseOptionalStringArray(value: unknown): string[] | undefined {\n const parsed = parseJsonValue(value);\n if (!Array.isArray(parsed)) return undefined;\n return parsed.map(item => String(item));\n}\n\nexport function toDate(value: unknown): Date {\n return value instanceof Date ? value : new Date(String(value));\n}\n","import { ErrorCategory, MastraError } from '@mastra/core/error';\nimport {\n AgentsStorage,\n calculatePagination,\n normalizePerPage,\n TABLE_AGENTS,\n TABLE_AGENT_VERSIONS,\n TABLE_SCHEMAS,\n} from '@mastra/core/storage';\nimport type {\n AgentInstructionBlock,\n StorageAgentType,\n StorageCreateAgentInput,\n StorageListAgentsInput,\n StorageListAgentsOutput,\n StorageUpdateAgentInput,\n} from '@mastra/core/storage';\nimport type {\n AgentVersion,\n CreateVersionInput,\n ListVersionsInput,\n ListVersionsOutput,\n} from '@mastra/core/storage/domains/agents';\n\nimport { clobBind, jsonBind, nullableClobBind, nullableJsonBind, safeJsonValue } from '../../../shared/connection';\nimport { assertJsonPath, indexNameForTable, qualifyName } from '../../../vector/identifiers';\nimport { OracleDB, createOracleIndex, filterIndexesForTables, parseOracleJson } from '../../db';\nimport type { OracleCreateIndexOptions, OracleTxClient } from '../../db';\nimport { createOracleStorageError, parseOptionalJson, parseOptionalJsonObject, toDate } from '../../domain-utils';\nimport type { OracleDomainConfig } from '../../types';\n\n// Agents are versioned registry records: the parent row supports listing and lifecycle state while version rows preserve editable snapshots.\nconst STORE_NAME = 'ORACLEDB';\nconst AGENT_ACTIVE_VERSION_ID = '\"activeVersionId\"';\nconst AGENT_AUTHOR_ID = '\"authorId\"';\nconst AGENT_FAVORITE_COUNT = '\"favoriteCount\"';\nconst AGENT_CREATED_AT = '\"createdAt\"';\nconst AGENT_UPDATED_AT = '\"updatedAt\"';\n\nconst VERSION_AGENT_ID = '\"agentId\"';\nconst VERSION_VERSION_NUMBER = '\"versionNumber\"';\nconst VERSION_DEFAULT_OPTIONS = '\"defaultOptions\"';\nconst VERSION_INTEGRATION_TOOLS = '\"integrationTools\"';\nconst VERSION_INPUT_PROCESSORS = '\"inputProcessors\"';\nconst VERSION_OUTPUT_PROCESSORS = '\"outputProcessors\"';\nconst VERSION_MCP_CLIENTS = '\"mcpClients\"';\nconst VERSION_REQUEST_CONTEXT_SCHEMA = '\"requestContextSchema\"';\nconst VERSION_CHANGED_FIELDS = '\"changedFields\"';\nconst VERSION_CHANGE_MESSAGE = '\"changeMessage\"';\nconst VERSION_CREATED_AT = '\"createdAt\"';\n\ntype AgentRow = {\n id: string;\n status: StorageAgentType['status'];\n activeVersionId?: string | null;\n authorId?: string | null;\n visibility?: StorageAgentType['visibility'] | null;\n metadata?: unknown;\n favoriteCount?: number | string | null;\n createdAt: Date | string;\n updatedAt: Date | string;\n};\n\ntype AgentVersionRow = {\n id: string;\n agentId: string;\n versionNumber: number | string;\n name: string;\n description?: string | null;\n instructions?: string | null;\n model: unknown;\n tools?: unknown;\n defaultOptions?: unknown;\n workflows?: unknown;\n agents?: unknown;\n integrationTools?: unknown;\n inputProcessors?: unknown;\n outputProcessors?: unknown;\n memory?: unknown;\n scorers?: unknown;\n mcpClients?: unknown;\n requestContextSchema?: unknown;\n browser?: unknown;\n changedFields?: unknown;\n changeMessage?: string | null;\n createdAt: Date | string;\n};\n\ntype VersionWriteClient = Pick<OracleTxClient, 'none'>;\n\nconst ORACLE_AGENT_VERSIONS_SCHEMA = Object.fromEntries(\n Object.entries(TABLE_SCHEMAS[TABLE_AGENT_VERSIONS]).filter(([column]) => {\n return column !== 'workspace' && !column.startsWith('skill');\n }),\n);\n\nexport { ORACLE_AGENT_VERSIONS_SCHEMA };\n\nexport class AgentsOracle extends AgentsStorage {\n // Agents use a parent row for lifecycle/status and a version row for each editable snapshot.\n static readonly MANAGED_TABLES = [TABLE_AGENTS, TABLE_AGENT_VERSIONS] as const;\n\n private readonly db: OracleDB;\n private readonly schemaName?: string;\n private readonly skipDefaultIndexes?: boolean;\n private readonly indexes: OracleCreateIndexOptions[];\n\n constructor(config: OracleDomainConfig) {\n super();\n this.db = new OracleDB(config);\n this.schemaName = config.schemaName;\n this.skipDefaultIndexes = config.skipDefaultIndexes;\n this.indexes = filterIndexesForTables(config.indexes, AgentsOracle.MANAGED_TABLES);\n }\n\n async init(): Promise<void> {\n await this.db.createTable({\n tableName: TABLE_AGENTS,\n schema: TABLE_SCHEMAS[TABLE_AGENTS],\n });\n await this.db.createTable({\n tableName: TABLE_AGENT_VERSIONS,\n schema: ORACLE_AGENT_VERSIONS_SCHEMA,\n });\n\n await this.db.alterTable({\n tableName: TABLE_AGENTS,\n schema: TABLE_SCHEMAS[TABLE_AGENTS],\n ifNotExists: ['activeVersionId', 'authorId', 'visibility', 'metadata', 'favoriteCount'],\n });\n await this.db.alterTable({\n tableName: TABLE_AGENT_VERSIONS,\n schema: ORACLE_AGENT_VERSIONS_SCHEMA,\n ifNotExists: [\n 'tools',\n 'mcpClients',\n 'requestContextSchema',\n 'browser',\n 'integrationTools',\n 'inputProcessors',\n 'outputProcessors',\n ],\n });\n\n // Keep init safe for existing schemas: additive columns are created above,\n // then legacy JSON shapes are normalized before indexes are used by queries.\n await this.migrateToolsToObjectFormat();\n await this.createIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.db.tx(async client => {\n await client.none(`DELETE FROM ${this.table(TABLE_AGENT_VERSIONS)}`);\n await client.none(`DELETE FROM ${this.table(TABLE_AGENTS)}`);\n });\n }\n\n getDefaultIndexDefinitions(): OracleCreateIndexOptions[] {\n return getDefaultAgentIndexDefinitions(this.indexName.bind(this));\n }\n\n async getById(id: string): Promise<StorageAgentType | null> {\n try {\n const row = await this.db.oneOrNone<AgentRow>(\n `${this.agentSelect()} FROM ${this.table(TABLE_AGENTS)} WHERE id = :id`,\n { id },\n );\n return row ? this.parseAgentRow(row) : null;\n } catch (error) {\n throw this.storageError('GET_AGENT_BY_ID', 'FAILED', { agentId: id }, error);\n }\n }\n\n async create(input: { agent: StorageCreateAgentInput }): Promise<StorageAgentType> {\n const { agent } = input;\n\n try {\n const now = new Date();\n const visibility = agent.visibility ?? (agent.authorId ? 'private' : undefined);\n\n await this.db.tx(async client => {\n const existing = await client.oneOrNone<{ id: string }>(\n `SELECT id AS \"id\" FROM ${this.table(TABLE_AGENTS)} WHERE id = :id`,\n { id: agent.id },\n );\n if (existing) {\n throw new Error(`Agent with id ${agent.id} already exists`);\n }\n\n await client.none(\n `INSERT INTO ${this.table(TABLE_AGENTS)} (\n id, status, ${AGENT_ACTIVE_VERSION_ID}, ${AGENT_AUTHOR_ID}, visibility, metadata,\n ${AGENT_FAVORITE_COUNT}, ${AGENT_CREATED_AT}, ${AGENT_UPDATED_AT}\n ) VALUES (\n :id, :status, :activeVersionId, :authorId, :visibility, :metadata,\n :favoriteCount, :createdAt, :updatedAt\n )`,\n {\n id: agent.id,\n status: 'draft',\n activeVersionId: null,\n authorId: agent.authorId ?? null,\n visibility: visibility ?? null,\n metadata: nullableJsonBind(agent.metadata),\n favoriteCount: 0,\n createdAt: now,\n updatedAt: now,\n },\n );\n\n // The initial version captures the runnable agent config while the parent row stays small and queryable.\n const { id: _id, authorId: _authorId, visibility: _visibility, metadata: _metadata, ...snapshotConfig } = agent;\n await this.insertVersion(client, {\n id: crypto.randomUUID(),\n agentId: agent.id,\n versionNumber: 1,\n ...snapshotConfig,\n changedFields: Object.keys(snapshotConfig),\n changeMessage: 'Initial version',\n });\n });\n\n return {\n id: agent.id,\n status: 'draft',\n activeVersionId: undefined,\n authorId: agent.authorId,\n visibility,\n metadata: agent.metadata,\n favoriteCount: 0,\n createdAt: now,\n updatedAt: now,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw this.storageError('CREATE_AGENT', 'FAILED', { agentId: agent.id }, error);\n }\n }\n\n async update(input: StorageUpdateAgentInput): Promise<StorageAgentType> {\n const { id, ...updates } = input;\n\n try {\n const existingAgent = await this.getById(id);\n if (!existingAgent) {\n throw new Error(`Agent with id ${id} not found`);\n }\n\n // Updating an agent only changes parent-row state. Runnable configuration\n // changes go through createVersion so historical versions stay immutable.\n const { authorId, activeVersionId, metadata, status, visibility } = updates;\n const setClauses: string[] = [];\n const binds: Record<string, unknown> = { id };\n\n if (authorId !== undefined) {\n setClauses.push(`${AGENT_AUTHOR_ID} = :authorId`);\n binds.authorId = authorId;\n }\n\n if (activeVersionId !== undefined) {\n setClauses.push(`${AGENT_ACTIVE_VERSION_ID} = :activeVersionId`);\n binds.activeVersionId = activeVersionId;\n }\n\n if (status !== undefined) {\n setClauses.push(`status = :status`);\n binds.status = status;\n }\n\n if (visibility !== undefined) {\n setClauses.push(`visibility = :visibility`);\n binds.visibility = visibility;\n }\n\n if (metadata !== undefined) {\n setClauses.push(`metadata = :metadata`);\n binds.metadata = jsonBind(metadata);\n }\n\n setClauses.push(`${AGENT_UPDATED_AT} = :updatedAt`);\n binds.updatedAt = new Date();\n\n await this.db.none(`UPDATE ${this.table(TABLE_AGENTS)} SET ${setClauses.join(', ')} WHERE id = :id`, binds);\n\n const updatedAgent = await this.getById(id);\n if (!updatedAgent) {\n throw new Error(`Agent with id ${id} not found after update`);\n }\n return updatedAgent;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw this.storageError('UPDATE_AGENT', 'FAILED', { agentId: id }, error);\n }\n }\n\n async delete(id: string): Promise<void> {\n try {\n await this.db.tx(async client => {\n await client.none(`DELETE FROM ${this.table(TABLE_AGENT_VERSIONS)} WHERE ${VERSION_AGENT_ID} = :id`, { id });\n await client.none(`DELETE FROM ${this.table(TABLE_AGENTS)} WHERE id = :id`, { id });\n });\n } catch (error) {\n throw this.storageError('DELETE_AGENT', 'FAILED', { agentId: id }, error);\n }\n }\n\n async list(args?: StorageListAgentsInput): Promise<StorageListAgentsOutput> {\n const {\n page = 0,\n perPage: perPageInput,\n orderBy,\n authorId,\n visibility,\n metadata,\n status,\n entityIds,\n favoritedOnly,\n } = args || {};\n\n try {\n this.validatePagination(page, perPageInput, 100);\n } catch (error) {\n throw this.storageError('LIST_AGENTS', 'INVALID_INPUT', { page }, error, ErrorCategory.USER);\n }\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n try {\n if (entityIds && entityIds.length === 0) {\n return {\n agents: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n const { field, direction } = this.parseOrderBy(orderBy);\n const { whereClause, binds } = this.agentWhereClause({\n status,\n authorId,\n visibility,\n metadata,\n entityIds,\n favoritedOnly,\n });\n\n const countRow = await this.db.oneOrNone<{ count: number | string }>(\n `SELECT COUNT(*) AS \"count\" FROM ${this.table(TABLE_AGENTS)} a ${whereClause}`,\n binds,\n );\n const total = Number(countRow?.count ?? 0);\n\n if (total === 0) {\n return {\n agents: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n if (perPage === 0) {\n return {\n agents: [],\n total,\n page,\n perPage: perPageForResponse,\n hasMore: total > 0,\n };\n }\n\n const limit = perPageInput === false ? total : perPage;\n const orderByParts: string[] = [];\n orderByParts.push(`a.${this.agentOrderColumn(field)} ${direction}`);\n orderByParts.push(`a.id ASC`);\n\n const rows = await this.db.manyOrNone<AgentRow>(\n `${this.agentSelect('a')} FROM ${this.table(TABLE_AGENTS)} a ${whereClause} ORDER BY ${orderByParts.join(\n ', ',\n )} OFFSET :offset ROWS FETCH NEXT :limit ROWS ONLY`,\n { ...binds, offset, limit },\n );\n\n const agents = rows.flatMap(row => {\n try {\n return [this.parseAgentRow(row)];\n } catch (error) {\n this.logger?.warn?.('[Oracle] Failed to map agent row, skipping', { id: row?.id, error });\n return [];\n }\n });\n\n return {\n agents,\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 this.storageError('LIST_AGENTS', 'FAILED', {}, error);\n }\n }\n\n async createVersion(input: CreateVersionInput): Promise<AgentVersion> {\n try {\n const existingById = await this.db.oneOrNone<{ id: string }>(\n `SELECT id AS \"id\" FROM ${this.table(TABLE_AGENT_VERSIONS)} WHERE id = :id`,\n { id: input.id },\n );\n if (existingById) {\n throw new Error(`Version with id ${input.id} already exists`);\n }\n\n const existingByNumber = await this.db.oneOrNone<{ id: string }>(\n `SELECT id AS \"id\" FROM ${this.table(\n TABLE_AGENT_VERSIONS,\n )} WHERE ${VERSION_AGENT_ID} = :agentId AND ${VERSION_VERSION_NUMBER} = :versionNumber`,\n { agentId: input.agentId, versionNumber: input.versionNumber },\n );\n if (existingByNumber) {\n throw new Error(`Version number ${input.versionNumber} already exists for agent ${input.agentId}`);\n }\n\n const createdAt = new Date();\n await this.insertVersion(this.db, input, createdAt);\n\n return this.toStoredVersion(input, createdAt);\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw this.storageError('CREATE_AGENT_VERSION', 'FAILED', { versionId: input.id, agentId: input.agentId }, error);\n }\n }\n\n async getVersion(id: string): Promise<AgentVersion | null> {\n try {\n const row = await this.db.oneOrNone<AgentVersionRow>(\n `${this.versionSelect()} FROM ${this.table(TABLE_AGENT_VERSIONS)} WHERE id = :id`,\n { id },\n );\n return row ? this.parseVersionRow(row) : null;\n } catch (error) {\n throw this.storageError('GET_AGENT_VERSION', 'FAILED', { versionId: id }, error);\n }\n }\n\n async getVersionByNumber(agentId: string, versionNumber: number): Promise<AgentVersion | null> {\n try {\n const row = await this.db.oneOrNone<AgentVersionRow>(\n `${this.versionSelect()} FROM ${this.table(\n TABLE_AGENT_VERSIONS,\n )} WHERE ${VERSION_AGENT_ID} = :agentId AND ${VERSION_VERSION_NUMBER} = :versionNumber`,\n { agentId, versionNumber },\n );\n return row ? this.parseVersionRow(row) : null;\n } catch (error) {\n throw this.storageError('GET_AGENT_VERSION_BY_NUMBER', 'FAILED', { agentId, versionNumber }, error);\n }\n }\n\n async getLatestVersion(agentId: string): Promise<AgentVersion | null> {\n try {\n const row = await this.db.oneOrNone<AgentVersionRow>(\n `${this.versionSelect()} FROM ${this.table(\n TABLE_AGENT_VERSIONS,\n )} WHERE ${VERSION_AGENT_ID} = :agentId ORDER BY ${VERSION_VERSION_NUMBER} DESC FETCH FIRST 1 ROWS ONLY`,\n { agentId },\n );\n return row ? this.parseVersionRow(row) : null;\n } catch (error) {\n throw this.storageError('GET_LATEST_AGENT_VERSION', 'FAILED', { agentId }, error);\n }\n }\n\n async listVersions(input: ListVersionsInput): Promise<ListVersionsOutput> {\n const { agentId, page = 0, perPage: perPageInput, orderBy } = input;\n\n try {\n this.validatePagination(page, perPageInput, 20);\n } catch (error) {\n throw this.storageError('LIST_AGENT_VERSIONS', 'INVALID_INPUT', { page, agentId }, error, ErrorCategory.USER);\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 const countRow = await this.db.oneOrNone<{ count: number | string }>(\n `SELECT COUNT(*) AS \"count\" FROM ${this.table(TABLE_AGENT_VERSIONS)} WHERE ${VERSION_AGENT_ID} = :agentId`,\n { agentId },\n );\n const total = Number(countRow?.count ?? 0);\n\n if (total === 0) {\n return {\n versions: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n if (perPage === 0) {\n return {\n versions: [],\n total,\n page,\n perPage: perPageForResponse,\n hasMore: total > 0,\n };\n }\n\n const limit = perPageInput === false ? total : perPage;\n // `id ASC` breaks ties between versions sharing the same order-by value so\n // pages stay stable instead of duplicating or dropping rows across pages.\n const rows = await this.db.manyOrNone<AgentVersionRow>(\n `${this.versionSelect()} FROM ${this.table(\n TABLE_AGENT_VERSIONS,\n )} WHERE ${VERSION_AGENT_ID} = :agentId ORDER BY ${this.versionOrderColumn(\n field,\n )} ${direction}, id ASC OFFSET :offset ROWS FETCH NEXT :limit ROWS ONLY`,\n { agentId, offset, limit },\n );\n\n const versions = rows.flatMap(row => {\n try {\n return [this.parseVersionRow(row)];\n } catch (error) {\n this.logger?.warn?.('[Oracle] Failed to map agent version row, skipping', { id: row?.id, error });\n return [];\n }\n });\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 this.storageError('LIST_AGENT_VERSIONS', 'FAILED', { agentId }, error);\n }\n }\n\n async deleteVersion(id: string): Promise<void> {\n try {\n await this.db.none(`DELETE FROM ${this.table(TABLE_AGENT_VERSIONS)} WHERE id = :id`, { id });\n } catch (error) {\n throw this.storageError('DELETE_AGENT_VERSION', 'FAILED', { versionId: id }, error);\n }\n }\n\n async deleteVersionsByParentId(entityId: string): Promise<void> {\n try {\n await this.db.none(`DELETE FROM ${this.table(TABLE_AGENT_VERSIONS)} WHERE ${VERSION_AGENT_ID} = :entityId`, {\n entityId,\n });\n } catch (error) {\n throw this.storageError('DELETE_AGENT_VERSIONS_BY_AGENT_ID', 'FAILED', { agentId: entityId }, error);\n }\n }\n\n async countVersions(agentId: string): Promise<number> {\n try {\n const row = await this.db.oneOrNone<{ count: number | string }>(\n `SELECT COUNT(*) AS \"count\" FROM ${this.table(TABLE_AGENT_VERSIONS)} WHERE ${VERSION_AGENT_ID} = :agentId`,\n { agentId },\n );\n return Number(row?.count ?? 0);\n } catch (error) {\n throw this.storageError('COUNT_AGENT_VERSIONS', 'FAILED', { agentId }, error);\n }\n }\n\n private toStoredVersion(input: CreateVersionInput, createdAt: Date): AgentVersion {\n return {\n id: input.id,\n agentId: input.agentId,\n versionNumber: input.versionNumber,\n name: input.name,\n description: input.description,\n instructions: input.instructions,\n model: input.model,\n tools: normalizeLegacyTools(input.tools) as AgentVersion['tools'],\n defaultOptions: input.defaultOptions,\n workflows: input.workflows,\n agents: input.agents,\n integrationTools: input.integrationTools,\n inputProcessors: input.inputProcessors,\n outputProcessors: input.outputProcessors,\n memory: input.memory,\n scorers: input.scorers,\n mcpClients: input.mcpClients,\n requestContextSchema: input.requestContextSchema,\n browser: input.browser,\n changedFields: input.changedFields,\n changeMessage: input.changeMessage,\n createdAt,\n };\n }\n\n private async createIndexes(): Promise<void> {\n await this.db.withConnection(async connection => {\n if (!this.skipDefaultIndexes) {\n for (const index of this.getDefaultIndexDefinitions()) {\n try {\n await createOracleIndex(connection, index, this.schemaName);\n } catch (error) {\n this.logger?.warn?.(`Failed to create Oracle default index ${index.name}:`, error);\n }\n }\n }\n\n for (const index of this.indexes) {\n try {\n await createOracleIndex(connection, index, this.schemaName);\n } catch (error) {\n this.logger?.warn?.(`Failed to create Oracle custom index ${index.name}:`, error);\n }\n }\n });\n }\n\n private async insertVersion(\n client: VersionWriteClient,\n input: CreateVersionInput,\n createdAt = new Date(),\n ): Promise<void> {\n // Version rows contain the full runnable snapshot. CLOB binds cover long\n // prompts/change messages, while JSON binds preserve structured tool config.\n await client.none(\n `INSERT INTO ${this.table(TABLE_AGENT_VERSIONS)} (\n id, ${VERSION_AGENT_ID}, ${VERSION_VERSION_NUMBER},\n name, description, instructions, model, tools,\n ${VERSION_DEFAULT_OPTIONS}, workflows, agents, ${VERSION_INTEGRATION_TOOLS},\n ${VERSION_INPUT_PROCESSORS}, ${VERSION_OUTPUT_PROCESSORS}, memory, scorers,\n ${VERSION_MCP_CLIENTS}, ${VERSION_REQUEST_CONTEXT_SCHEMA},\n browser, ${VERSION_CHANGED_FIELDS}, ${VERSION_CHANGE_MESSAGE}, ${VERSION_CREATED_AT}\n ) VALUES (\n :id, :agentId, :versionNumber,\n :name, :description, :instructions, :model, :tools,\n :defaultOptions, :workflows, :agents, :integrationTools,\n :inputProcessors, :outputProcessors, :memory, :scorers,\n :mcpClients, :requestContextSchema,\n :browser, :changedFields, :changeMessage, :createdAt\n )`,\n {\n id: input.id,\n agentId: input.agentId,\n versionNumber: input.versionNumber,\n name: input.name,\n description: nullableClobBind(input.description),\n instructions: clobBind(this.serializeInstructions(input.instructions)),\n model: jsonBind(input.model),\n tools: nullableJsonBind(normalizeLegacyTools(input.tools)),\n defaultOptions: nullableJsonBind(input.defaultOptions),\n workflows: nullableJsonBind(input.workflows),\n agents: nullableJsonBind(input.agents),\n integrationTools: nullableJsonBind(input.integrationTools),\n inputProcessors: nullableJsonBind(input.inputProcessors),\n outputProcessors: nullableJsonBind(input.outputProcessors),\n memory: nullableJsonBind(input.memory),\n scorers: nullableJsonBind(input.scorers),\n mcpClients: nullableJsonBind(input.mcpClients),\n requestContextSchema: nullableJsonBind(input.requestContextSchema),\n browser: nullableJsonBind(input.browser),\n changedFields: nullableJsonBind(input.changedFields),\n changeMessage: nullableClobBind(input.changeMessage),\n createdAt,\n },\n );\n }\n\n private agentWhereClause(args: {\n status?: StorageAgentType['status'];\n authorId?: string;\n visibility?: StorageAgentType['visibility'];\n metadata?: Record<string, unknown>;\n entityIds?: string[];\n favoritedOnly?: boolean;\n }): { whereClause: string; binds: Record<string, unknown> } {\n const conditions: string[] = [];\n const binds: Record<string, unknown> = {};\n\n if (args.status) {\n conditions.push(`a.status = :status`);\n binds.status = args.status;\n }\n\n if (args.authorId !== undefined) {\n conditions.push(`a.${AGENT_AUTHOR_ID} = :authorId`);\n binds.authorId = args.authorId;\n }\n\n if (args.visibility !== undefined) {\n conditions.push(`a.visibility = :visibility`);\n binds.visibility = args.visibility;\n }\n\n if (args.metadata && Object.keys(args.metadata).length > 0) {\n let index = 0;\n for (const [key, value] of Object.entries(args.metadata)) {\n const bindName = `metadata${index++}`;\n // Metadata filters are translated into JSON_VALUE predicates so Oracle\n // can use function-based indexes for common scalar fields.\n conditions.push(`${jsonValue('a.metadata', key, value)} = :${bindName}`);\n binds[bindName] = jsonComparableValue(value);\n }\n }\n\n if (args.entityIds && args.entityIds.length > 0) {\n const bindNames = args.entityIds.map((entityId, index) => {\n const bindName = `entityId${index}`;\n binds[bindName] = entityId;\n return `:${bindName}`;\n });\n conditions.push(`a.id IN (${bindNames.join(', ')})`);\n }\n\n if (args.favoritedOnly) {\n conditions.push('1 = 0');\n }\n\n return {\n whereClause: conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '',\n binds,\n };\n }\n\n private agentSelect(alias?: string): string {\n const prefix = alias ? `${alias}.` : '';\n return [\n `SELECT ${prefix}id AS \"id\"`,\n `${prefix}status AS \"status\"`,\n `${prefix}${AGENT_ACTIVE_VERSION_ID} AS \"activeVersionId\"`,\n `${prefix}${AGENT_AUTHOR_ID} AS \"authorId\"`,\n `${prefix}visibility AS \"visibility\"`,\n `${prefix}metadata AS \"metadata\"`,\n `${prefix}${AGENT_FAVORITE_COUNT} AS \"favoriteCount\"`,\n `${prefix}${AGENT_CREATED_AT} AS \"createdAt\"`,\n `${prefix}${AGENT_UPDATED_AT} AS \"updatedAt\"`,\n ].join(', ');\n }\n\n private versionSelect(): string {\n return [\n `SELECT id AS \"id\"`,\n `${VERSION_AGENT_ID} AS \"agentId\"`,\n `${VERSION_VERSION_NUMBER} AS \"versionNumber\"`,\n `name AS \"name\"`,\n `description AS \"description\"`,\n `instructions AS \"instructions\"`,\n `model AS \"model\"`,\n `tools AS \"tools\"`,\n `${VERSION_DEFAULT_OPTIONS} AS \"defaultOptions\"`,\n `workflows AS \"workflows\"`,\n `agents AS \"agents\"`,\n `${VERSION_INTEGRATION_TOOLS} AS \"integrationTools\"`,\n `${VERSION_INPUT_PROCESSORS} AS \"inputProcessors\"`,\n `${VERSION_OUTPUT_PROCESSORS} AS \"outputProcessors\"`,\n `memory AS \"memory\"`,\n `scorers AS \"scorers\"`,\n `${VERSION_MCP_CLIENTS} AS \"mcpClients\"`,\n `${VERSION_REQUEST_CONTEXT_SCHEMA} AS \"requestContextSchema\"`,\n `browser AS \"browser\"`,\n `${VERSION_CHANGED_FIELDS} AS \"changedFields\"`,\n `${VERSION_CHANGE_MESSAGE} AS \"changeMessage\"`,\n `${VERSION_CREATED_AT} AS \"createdAt\"`,\n ].join(', ');\n }\n\n private parseAgentRow(row: AgentRow): StorageAgentType {\n return {\n id: String(row.id),\n status: row.status,\n activeVersionId: optionalString(row.activeVersionId),\n authorId: optionalString(row.authorId),\n visibility: optionalVisibility(row.visibility),\n metadata: parseOptionalJsonObject(row.metadata),\n favoriteCount: row.favoriteCount === null || row.favoriteCount === undefined ? 0 : Number(row.favoriteCount),\n createdAt: toDate(row.createdAt),\n updatedAt: toDate(row.updatedAt),\n };\n }\n\n private parseVersionRow(row: AgentVersionRow): AgentVersion {\n // Oracle can return JSON columns as objects or serialized values depending\n // on fetch mode, so every structured field is normalized before returning.\n return {\n id: String(row.id),\n agentId: String(row.agentId),\n versionNumber: Number(row.versionNumber),\n name: String(row.name),\n description: optionalString(row.description),\n instructions: this.deserializeInstructions(row.instructions),\n model: parseOracleJson(row.model) as AgentVersion['model'],\n tools: normalizeLegacyTools(parseOptionalJson<AgentVersion['tools']>(row.tools)) as AgentVersion['tools'],\n defaultOptions: parseOptionalJson<AgentVersion['defaultOptions']>(row.defaultOptions),\n workflows: parseOptionalJson<AgentVersion['workflows']>(row.workflows),\n agents: parseOptionalJson<AgentVersion['agents']>(row.agents),\n integrationTools: parseOptionalJson<AgentVersion['integrationTools']>(row.integrationTools),\n inputProcessors: parseOptionalJson<AgentVersion['inputProcessors']>(row.inputProcessors),\n outputProcessors: parseOptionalJson<AgentVersion['outputProcessors']>(row.outputProcessors),\n memory: parseOptionalJson<AgentVersion['memory']>(row.memory),\n scorers: parseOptionalJson<AgentVersion['scorers']>(row.scorers),\n mcpClients: parseOptionalJson<AgentVersion['mcpClients']>(row.mcpClients),\n requestContextSchema: parseOptionalJson<AgentVersion['requestContextSchema']>(row.requestContextSchema),\n browser: parseOptionalJson<AgentVersion['browser']>(row.browser),\n changedFields: parseOptionalJson<AgentVersion['changedFields']>(row.changedFields),\n changeMessage: optionalString(row.changeMessage),\n createdAt: toDate(row.createdAt),\n };\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 | null | undefined): string | AgentInstructionBlock[] {\n if (!raw) return '';\n try {\n const parsed = JSON.parse(raw);\n if (Array.isArray(parsed)) return parsed as AgentInstructionBlock[];\n } catch {\n // Plain string instructions are the common case.\n }\n return raw;\n }\n\n private agentOrderColumn(field: string): string {\n return field === 'updatedAt' ? AGENT_UPDATED_AT : AGENT_CREATED_AT;\n }\n\n private versionOrderColumn(field: string): string {\n return field === 'createdAt' ? VERSION_CREATED_AT : VERSION_VERSION_NUMBER;\n }\n\n private validatePagination(page: number, perPageInput: number | false | undefined, defaultPerPage: number): void {\n if (page < 0) {\n throw new Error('page must be >= 0');\n }\n\n const perPage = normalizePerPage(perPageInput, defaultPerPage);\n const maxOffset = Number.MAX_SAFE_INTEGER / 2;\n if (perPageInput !== false && page * perPage > maxOffset) {\n throw new Error('page value too large');\n }\n }\n\n private async migrateToolsToObjectFormat(): Promise<void> {\n try {\n // Older rows may store tools as string arrays; the current API expects an\n // object map. Migrate lazily during init to avoid a hard breaking migration.\n const rows = await this.db.manyOrNone<{ id: string; tools?: unknown }>(\n `SELECT id AS \"id\", tools AS \"tools\" FROM ${this.table(TABLE_AGENT_VERSIONS)} WHERE tools IS NOT NULL`,\n );\n const updates = rows.flatMap(row => {\n const tools = parseOracleJson(row.tools);\n if (!isLegacyToolArray(tools)) return [];\n return [{ id: row.id, tools: Object.fromEntries(tools.map(toolName => [toolName, {}])) }];\n });\n\n if (updates.length === 0) return;\n\n await this.db.tx(async client => {\n for (const update of updates) {\n await client.none(`UPDATE ${this.table(TABLE_AGENT_VERSIONS)} SET tools = :tools WHERE id = :id`, {\n id: update.id,\n tools: jsonBind(update.tools),\n });\n }\n });\n\n this.logger?.info?.(`Migrated ${updates.length} agent version(s) tools from array to object format`);\n } catch (error) {\n this.logger?.warn?.('Failed to migrate agent tools to object format:', error);\n }\n }\n\n private table(tableName: string): string {\n return qualifyName(tableName, this.schemaName);\n }\n\n private indexName(indexName: string): string {\n return indexNameForTable(indexName, 'IDX');\n }\n\n private storageError(\n operation: string,\n reason: string,\n details: Record<string, string | number | boolean | undefined>,\n cause: unknown,\n category: ErrorCategory = ErrorCategory.THIRD_PARTY,\n ): MastraError {\n return createOracleStorageError({ storeName: STORE_NAME, operation, reason, details, cause, category });\n }\n}\n\nexport function getDefaultAgentIndexDefinitions(indexName: (name: string) => string): OracleCreateIndexOptions[] {\n return [\n {\n name: indexName('MASTRA_AGENTS_STATUS_CREATED'),\n table: TABLE_AGENTS,\n columns: ['status', 'createdAt'],\n },\n {\n name: indexName('MASTRA_AGENTS_AUTHOR_CREATED'),\n table: TABLE_AGENTS,\n columns: ['authorId', 'createdAt'],\n },\n {\n name: indexName('MASTRA_AGENTS_ACTIVE_VERSION'),\n table: TABLE_AGENTS,\n columns: ['activeVersionId'],\n },\n {\n name: indexName('MASTRA_AGENT_VERSIONS_AGENT_VERSION'),\n table: TABLE_AGENT_VERSIONS,\n columns: ['agentId', 'versionNumber'],\n unique: true,\n },\n ];\n}\n\nfunction optionalString(value: unknown): string | undefined {\n if (value === null || value === undefined) return undefined;\n return String(value);\n}\n\nfunction optionalVisibility(value: unknown): StorageAgentType['visibility'] | undefined {\n if (value === 'private' || value === 'public') return value;\n return undefined;\n}\n\nfunction normalizeLegacyTools(value: unknown): unknown {\n if (!isLegacyToolArray(value)) return value;\n return Object.fromEntries(value.map(toolName => [toolName, {}]));\n}\n\nfunction isLegacyToolArray(value: unknown): value is string[] {\n return Array.isArray(value) && value.every(item => typeof item === 'string');\n}\n\nfunction jsonValue(column: string, path: string, comparisonValue: unknown): string {\n const jsonPath = assertJsonPath(path);\n if (typeof comparisonValue === 'number') {\n return `JSON_VALUE(${column}, '${jsonPath}' RETURNING NUMBER NULL ON ERROR)`;\n }\n return `JSON_VALUE(${column}, '${jsonPath}' RETURNING VARCHAR2(4000) NULL ON ERROR)`;\n}\n\nfunction jsonComparableValue(value: unknown): unknown {\n if (value instanceof Date) return value.toISOString();\n if (typeof value === 'boolean') return String(value);\n if (value === null || value === undefined) return '';\n if (typeof value === 'object') return JSON.stringify(safeJsonValue(value));\n return value;\n}\n","import { ErrorCategory, MastraError } from '@mastra/core/error';\nimport {\n calculatePagination,\n MCPClientsStorage,\n normalizePerPage,\n TABLE_MCP_CLIENTS,\n TABLE_MCP_CLIENT_VERSIONS,\n TABLE_SCHEMAS,\n} from '@mastra/core/storage';\nimport type {\n StorageCreateMCPClientInput,\n StorageListMCPClientsInput,\n StorageListMCPClientsOutput,\n StorageMCPClientType,\n StorageUpdateMCPClientInput,\n} from '@mastra/core/storage';\nimport type {\n CreateMCPClientVersionInput,\n ListMCPClientVersionsInput,\n ListMCPClientVersionsOutput,\n MCPClientVersion,\n} from '@mastra/core/storage/domains/mcp-clients';\n\nimport { jsonBind, nullableJsonBind, safeJsonValue } from '../../../shared/connection';\nimport { assertJsonPath, indexNameForTable, qualifyName } from '../../../vector/identifiers';\nimport { OracleDB, createOracleIndex, filterIndexesForTables, parseOracleJson } from '../../db';\nimport type { OracleCreateIndexOptions, OracleTxClient } from '../../db';\nimport {\n createOracleStorageError,\n parseOptionalJsonObject,\n parseOptionalStringArray,\n toDate,\n} from '../../domain-utils';\nimport type { OracleDomainConfig } from '../../types';\n\n// MCP clients use the same registry/version pattern as agents: parent rows handle discovery while version rows snapshot server bindings.\nconst STORE_NAME = 'ORACLEDB';\nconst SNAPSHOT_FIELDS = ['name', 'description', 'servers'] as const;\n\nconst CLIENT_ACTIVE_VERSION_ID = '\"activeVersionId\"';\nconst CLIENT_AUTHOR_ID = '\"authorId\"';\nconst CLIENT_CREATED_AT = '\"createdAt\"';\nconst CLIENT_UPDATED_AT = '\"updatedAt\"';\nconst VERSION_MCP_CLIENT_ID = '\"mcpClientId\"';\nconst VERSION_VERSION_NUMBER = '\"versionNumber\"';\nconst VERSION_CHANGED_FIELDS = '\"changedFields\"';\nconst VERSION_CHANGE_MESSAGE = '\"changeMessage\"';\nconst VERSION_CREATED_AT = '\"createdAt\"';\n\ntype MCPClientRow = {\n id: string;\n status: StorageMCPClientType['status'];\n activeVersionId?: string | null;\n authorId?: string | null;\n metadata?: unknown;\n createdAt: Date | string;\n updatedAt: Date | string;\n};\n\ntype MCPClientVersionRow = {\n id: string;\n mcpClientId: string;\n versionNumber: number | string;\n name: string;\n description?: string | null;\n servers: unknown;\n changedFields?: unknown;\n changeMessage?: string | null;\n createdAt: Date | string;\n};\n\ntype VersionWriteClient = Pick<OracleTxClient, 'none'>;\n\nexport class MCPClientsOracle extends MCPClientsStorage {\n // MCP clients follow the registry pattern: parent lifecycle row plus versioned server config snapshots.\n static readonly MANAGED_TABLES = [TABLE_MCP_CLIENTS, TABLE_MCP_CLIENT_VERSIONS] as const;\n\n private readonly db: OracleDB;\n private readonly schemaName?: string;\n private readonly skipDefaultIndexes?: boolean;\n private readonly indexes: OracleCreateIndexOptions[];\n\n constructor(config: OracleDomainConfig) {\n super();\n this.db = new OracleDB(config);\n this.schemaName = config.schemaName;\n this.skipDefaultIndexes = config.skipDefaultIndexes;\n this.indexes = filterIndexesForTables(config.indexes, MCPClientsOracle.MANAGED_TABLES);\n }\n\n async init(): Promise<void> {\n await this.db.createTable({\n tableName: TABLE_MCP_CLIENTS,\n schema: TABLE_SCHEMAS[TABLE_MCP_CLIENTS],\n });\n await this.db.createTable({\n tableName: TABLE_MCP_CLIENT_VERSIONS,\n schema: TABLE_SCHEMAS[TABLE_MCP_CLIENT_VERSIONS],\n });\n await this.createIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.db.tx(async client => {\n await client.none(`DELETE FROM ${this.table(TABLE_MCP_CLIENT_VERSIONS)}`);\n await client.none(`DELETE FROM ${this.table(TABLE_MCP_CLIENTS)}`);\n });\n }\n\n getDefaultIndexDefinitions(): OracleCreateIndexOptions[] {\n return getDefaultMCPClientIndexDefinitions(this.indexName.bind(this));\n }\n\n async getById(id: string): Promise<StorageMCPClientType | null> {\n try {\n const row = await this.db.oneOrNone<MCPClientRow>(\n `${this.clientSelect()} FROM ${this.table(TABLE_MCP_CLIENTS)} WHERE id = :id`,\n { id },\n );\n return row ? this.parseMCPClientRow(row) : null;\n } catch (error) {\n throw this.storageError('GET_MCP_CLIENT_BY_ID', 'FAILED', { mcpClientId: id }, error);\n }\n }\n\n async create(input: { mcpClient: StorageCreateMCPClientInput }): Promise<StorageMCPClientType> {\n const { mcpClient } = input;\n\n try {\n const now = new Date();\n\n await this.db.tx(async client => {\n const existing = await client.oneOrNone<{ id: string }>(\n `SELECT id AS \"id\" FROM ${this.table(TABLE_MCP_CLIENTS)} WHERE id = :id`,\n { id: mcpClient.id },\n );\n if (existing) {\n throw new Error(`MCP client with id ${mcpClient.id} already exists`);\n }\n\n await client.none(\n `INSERT INTO ${this.table(TABLE_MCP_CLIENTS)} (\n id, status, ${CLIENT_ACTIVE_VERSION_ID}, ${CLIENT_AUTHOR_ID}, metadata,\n ${CLIENT_CREATED_AT}, ${CLIENT_UPDATED_AT}\n ) VALUES (\n :id, :status, :activeVersionId, :authorId, :metadata,\n :createdAt, :updatedAt\n )`,\n {\n id: mcpClient.id,\n status: 'draft',\n activeVersionId: null,\n authorId: mcpClient.authorId ?? null,\n metadata: nullableJsonBind(mcpClient.metadata),\n createdAt: now,\n updatedAt: now,\n },\n );\n\n // Store the editable server map in the version row so historical client configs remain inspectable.\n const { id: _id, authorId: _authorId, metadata: _metadata, ...snapshotConfig } = mcpClient;\n await this.insertVersion(client, {\n id: crypto.randomUUID(),\n mcpClientId: mcpClient.id,\n versionNumber: 1,\n ...snapshotConfig,\n changedFields: [...SNAPSHOT_FIELDS],\n changeMessage: 'Initial version',\n });\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 this.storageError('CREATE_MCP_CLIENT', 'FAILED', { mcpClientId: mcpClient.id }, error);\n }\n }\n\n async update(input: StorageUpdateMCPClientInput): Promise<StorageMCPClientType> {\n const { id, ...updates } = input;\n\n try {\n const existingClient = await this.getById(id);\n if (!existingClient) {\n throw new Error(`MCP client with id ${id} not found`);\n }\n\n const { authorId, activeVersionId, metadata, status } = updates;\n const setClauses: string[] = [];\n const binds: Record<string, unknown> = { id };\n\n if (authorId !== undefined) {\n setClauses.push(`${CLIENT_AUTHOR_ID} = :authorId`);\n binds.authorId = authorId;\n }\n\n if (activeVersionId !== undefined) {\n setClauses.push(`${CLIENT_ACTIVE_VERSION_ID} = :activeVersionId`);\n binds.activeVersionId = activeVersionId;\n }\n\n if (status !== undefined) {\n setClauses.push(`status = :status`);\n binds.status = status;\n }\n\n if (metadata !== undefined) {\n const mergedMetadata = { ...(existingClient.metadata ?? {}), ...metadata };\n // Client discovery metadata is mutable on the parent row; server\n // connection maps are kept in explicit version rows.\n setClauses.push(`metadata = :metadata`);\n binds.metadata = jsonBind(mergedMetadata);\n }\n\n setClauses.push(`${CLIENT_UPDATED_AT} = :updatedAt`);\n binds.updatedAt = new Date();\n\n await this.db.none(`UPDATE ${this.table(TABLE_MCP_CLIENTS)} SET ${setClauses.join(', ')} WHERE id = :id`, binds);\n\n const updatedClient = await this.getById(id);\n if (!updatedClient) {\n throw new Error(`MCP client with id ${id} not found after update`);\n }\n return updatedClient;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw this.storageError('UPDATE_MCP_CLIENT', 'FAILED', { mcpClientId: id }, error);\n }\n }\n\n async delete(id: string): Promise<void> {\n try {\n await this.db.tx(async client => {\n await client.none(`DELETE FROM ${this.table(TABLE_MCP_CLIENT_VERSIONS)} WHERE ${VERSION_MCP_CLIENT_ID} = :id`, {\n id,\n });\n await client.none(`DELETE FROM ${this.table(TABLE_MCP_CLIENTS)} WHERE id = :id`, { id });\n });\n } catch (error) {\n throw this.storageError('DELETE_MCP_CLIENT', 'FAILED', { mcpClientId: id }, error);\n }\n }\n\n async list(args?: StorageListMCPClientsInput): Promise<StorageListMCPClientsOutput> {\n const { page = 0, perPage: perPageInput, orderBy, authorId, metadata, status = 'published' } = args || {};\n\n try {\n this.validatePagination(page, perPageInput, 100);\n } catch (error) {\n throw this.storageError('LIST_MCP_CLIENTS', 'INVALID_INPUT', { page }, error, ErrorCategory.USER);\n }\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n try {\n const { field, direction } = this.parseOrderBy(orderBy);\n const { whereClause, binds } = this.clientWhereClause({ status, authorId, metadata });\n\n const countRow = await this.db.oneOrNone<{ count: number | string }>(\n `SELECT COUNT(*) AS \"count\" FROM ${this.table(TABLE_MCP_CLIENTS)} ${whereClause}`,\n binds,\n );\n const total = Number(countRow?.count ?? 0);\n\n if (total === 0) {\n return {\n mcpClients: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n if (perPage === 0) {\n return {\n mcpClients: [],\n total,\n page,\n perPage: perPageForResponse,\n hasMore: total > 0,\n };\n }\n\n const limit = perPageInput === false ? total : perPage;\n // `id ASC` breaks ties between rows sharing the same order-by value so\n // pages stay stable instead of duplicating or dropping rows across pages.\n const rows = await this.db.manyOrNone<MCPClientRow>(\n `${this.clientSelect()} FROM ${this.table(TABLE_MCP_CLIENTS)} ${whereClause} ORDER BY ${this.clientOrderColumn(\n field,\n )} ${direction}, id ASC OFFSET :offset ROWS FETCH NEXT :limit ROWS ONLY`,\n { ...binds, offset, limit },\n );\n\n return {\n mcpClients: rows.map(row => this.parseMCPClientRow(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 this.storageError('LIST_MCP_CLIENTS', 'FAILED', {}, error);\n }\n }\n\n async createVersion(input: CreateMCPClientVersionInput): Promise<MCPClientVersion> {\n try {\n const existingById = await this.db.oneOrNone<{ id: string }>(\n `SELECT id AS \"id\" FROM ${this.table(TABLE_MCP_CLIENT_VERSIONS)} WHERE id = :id`,\n { id: input.id },\n );\n if (existingById) {\n throw new Error(`Version with id ${input.id} already exists`);\n }\n\n const existingByNumber = await this.db.oneOrNone<{ id: string }>(\n `SELECT id AS \"id\" FROM ${this.table(\n TABLE_MCP_CLIENT_VERSIONS,\n )} WHERE ${VERSION_MCP_CLIENT_ID} = :mcpClientId AND ${VERSION_VERSION_NUMBER} = :versionNumber`,\n { mcpClientId: input.mcpClientId, versionNumber: input.versionNumber },\n );\n if (existingByNumber) {\n throw new Error(`Version number ${input.versionNumber} already exists for MCP client ${input.mcpClientId}`);\n }\n\n const createdAt = new Date();\n await this.insertVersion(this.db, input, createdAt);\n\n return {\n ...input,\n createdAt,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw this.storageError(\n 'CREATE_MCP_CLIENT_VERSION',\n 'FAILED',\n { versionId: input.id, mcpClientId: input.mcpClientId },\n error,\n );\n }\n }\n\n async getVersion(id: string): Promise<MCPClientVersion | null> {\n try {\n const row = await this.db.oneOrNone<MCPClientVersionRow>(\n `${this.versionSelect()} FROM ${this.table(TABLE_MCP_CLIENT_VERSIONS)} WHERE id = :id`,\n { id },\n );\n return row ? this.parseVersionRow(row) : null;\n } catch (error) {\n throw this.storageError('GET_MCP_CLIENT_VERSION', 'FAILED', { versionId: id }, error);\n }\n }\n\n async getVersionByNumber(mcpClientId: string, versionNumber: number): Promise<MCPClientVersion | null> {\n try {\n const row = await this.db.oneOrNone<MCPClientVersionRow>(\n `${this.versionSelect()} FROM ${this.table(\n TABLE_MCP_CLIENT_VERSIONS,\n )} WHERE ${VERSION_MCP_CLIENT_ID} = :mcpClientId AND ${VERSION_VERSION_NUMBER} = :versionNumber`,\n { mcpClientId, versionNumber },\n );\n return row ? this.parseVersionRow(row) : null;\n } catch (error) {\n throw this.storageError('GET_MCP_CLIENT_VERSION_BY_NUMBER', 'FAILED', { mcpClientId, versionNumber }, error);\n }\n }\n\n async getLatestVersion(mcpClientId: string): Promise<MCPClientVersion | null> {\n try {\n const row = await this.db.oneOrNone<MCPClientVersionRow>(\n `${this.versionSelect()} FROM ${this.table(\n TABLE_MCP_CLIENT_VERSIONS,\n )} WHERE ${VERSION_MCP_CLIENT_ID} = :mcpClientId ORDER BY ${VERSION_VERSION_NUMBER} DESC FETCH FIRST 1 ROWS ONLY`,\n { mcpClientId },\n );\n return row ? this.parseVersionRow(row) : null;\n } catch (error) {\n throw this.storageError('GET_LATEST_MCP_CLIENT_VERSION', 'FAILED', { mcpClientId }, error);\n }\n }\n\n async listVersions(input: ListMCPClientVersionsInput): Promise<ListMCPClientVersionsOutput> {\n const { mcpClientId, page = 0, perPage: perPageInput, orderBy } = input;\n\n try {\n this.validatePagination(page, perPageInput, 20);\n } catch (error) {\n throw this.storageError(\n 'LIST_MCP_CLIENT_VERSIONS',\n 'INVALID_INPUT',\n { page, mcpClientId },\n error,\n ErrorCategory.USER,\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 const countRow = await this.db.oneOrNone<{ count: number | string }>(\n `SELECT COUNT(*) AS \"count\" FROM ${this.table(TABLE_MCP_CLIENT_VERSIONS)} WHERE ${VERSION_MCP_CLIENT_ID} = :mcpClientId`,\n { mcpClientId },\n );\n const total = Number(countRow?.count ?? 0);\n\n if (total === 0) {\n return {\n versions: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n if (perPage === 0) {\n return {\n versions: [],\n total,\n page,\n perPage: perPageForResponse,\n hasMore: total > 0,\n };\n }\n\n const limit = perPageInput === false ? total : perPage;\n // `id ASC` breaks ties between versions sharing the same order-by value so\n // pages stay stable instead of duplicating or dropping rows across pages.\n const rows = await this.db.manyOrNone<MCPClientVersionRow>(\n `${this.versionSelect()} FROM ${this.table(\n TABLE_MCP_CLIENT_VERSIONS,\n )} WHERE ${VERSION_MCP_CLIENT_ID} = :mcpClientId ORDER BY ${this.versionOrderColumn(\n field,\n )} ${direction}, id ASC OFFSET :offset ROWS FETCH NEXT :limit ROWS ONLY`,\n { mcpClientId, offset, limit },\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 this.storageError('LIST_MCP_CLIENT_VERSIONS', 'FAILED', { mcpClientId }, error);\n }\n }\n\n async deleteVersion(id: string): Promise<void> {\n try {\n await this.db.none(`DELETE FROM ${this.table(TABLE_MCP_CLIENT_VERSIONS)} WHERE id = :id`, { id });\n } catch (error) {\n throw this.storageError('DELETE_MCP_CLIENT_VERSION', 'FAILED', { versionId: id }, error);\n }\n }\n\n async deleteVersionsByParentId(entityId: string): Promise<void> {\n try {\n await this.db.none(\n `DELETE FROM ${this.table(TABLE_MCP_CLIENT_VERSIONS)} WHERE ${VERSION_MCP_CLIENT_ID} = :entityId`,\n {\n entityId,\n },\n );\n } catch (error) {\n throw this.storageError(\n 'DELETE_MCP_CLIENT_VERSIONS_BY_MCP_CLIENT_ID',\n 'FAILED',\n { mcpClientId: entityId },\n error,\n );\n }\n }\n\n async countVersions(mcpClientId: string): Promise<number> {\n try {\n const row = await this.db.oneOrNone<{ count: number | string }>(\n `SELECT COUNT(*) AS \"count\" FROM ${this.table(TABLE_MCP_CLIENT_VERSIONS)} WHERE ${VERSION_MCP_CLIENT_ID} = :mcpClientId`,\n { mcpClientId },\n );\n return Number(row?.count ?? 0);\n } catch (error) {\n throw this.storageError('COUNT_MCP_CLIENT_VERSIONS', 'FAILED', { mcpClientId }, error);\n }\n }\n\n private async createIndexes(): Promise<void> {\n await this.db.withConnection(async connection => {\n if (!this.skipDefaultIndexes) {\n for (const index of this.getDefaultIndexDefinitions()) {\n try {\n await createOracleIndex(connection, index, this.schemaName);\n } catch (error) {\n this.logger?.warn?.(`Failed to create Oracle default index ${index.name}:`, error);\n }\n }\n }\n\n for (const index of this.indexes) {\n try {\n await createOracleIndex(connection, index, this.schemaName);\n } catch (error) {\n this.logger?.warn?.(`Failed to create Oracle custom index ${index.name}:`, error);\n }\n }\n });\n }\n\n private async insertVersion(\n client: VersionWriteClient,\n input: CreateMCPClientVersionInput,\n createdAt = new Date(),\n ): Promise<void> {\n // The server map is the important reproducible client config, so it is\n // stored as Oracle JSON on each version row.\n await client.none(\n `INSERT INTO ${this.table(TABLE_MCP_CLIENT_VERSIONS)} (\n id, ${VERSION_MCP_CLIENT_ID}, ${VERSION_VERSION_NUMBER},\n name, description, servers,\n ${VERSION_CHANGED_FIELDS}, ${VERSION_CHANGE_MESSAGE},\n ${VERSION_CREATED_AT}\n ) VALUES (\n :id, :mcpClientId, :versionNumber,\n :name, :description, :servers,\n :changedFields, :changeMessage,\n :createdAt\n )`,\n {\n id: input.id,\n mcpClientId: input.mcpClientId,\n versionNumber: input.versionNumber,\n name: input.name,\n description: input.description ?? null,\n servers: jsonBind(input.servers),\n changedFields: nullableJsonBind(input.changedFields),\n changeMessage: input.changeMessage ?? null,\n createdAt,\n },\n );\n }\n\n private clientWhereClause(args: {\n status: StorageMCPClientType['status'];\n authorId?: string;\n metadata?: Record<string, unknown>;\n }): { whereClause: string; binds: Record<string, unknown> } {\n const conditions = ['status = :status'];\n const binds: Record<string, unknown> = { status: args.status };\n\n if (args.authorId !== undefined) {\n conditions.push(`${CLIENT_AUTHOR_ID} = :authorId`);\n binds.authorId = args.authorId;\n }\n\n if (args.metadata && Object.keys(args.metadata).length > 0) {\n let index = 0;\n for (const [key, value] of Object.entries(args.metadata)) {\n const bindName = `metadata${index++}`;\n // Scalar metadata filters use JSON_VALUE so provider listings stay\n // indexable without loading every client row.\n conditions.push(`${jsonValue('metadata', key, value)} = :${bindName}`);\n binds[bindName] = jsonComparableValue(value);\n }\n }\n\n return { whereClause: `WHERE ${conditions.join(' AND ')}`, binds };\n }\n\n private clientSelect(): string {\n return [\n `SELECT id AS \"id\"`,\n `status AS \"status\"`,\n `${CLIENT_ACTIVE_VERSION_ID} AS \"activeVersionId\"`,\n `${CLIENT_AUTHOR_ID} AS \"authorId\"`,\n `metadata AS \"metadata\"`,\n `${CLIENT_CREATED_AT} AS \"createdAt\"`,\n `${CLIENT_UPDATED_AT} AS \"updatedAt\"`,\n ].join(', ');\n }\n\n private versionSelect(): string {\n return [\n `SELECT id AS \"id\"`,\n `${VERSION_MCP_CLIENT_ID} AS \"mcpClientId\"`,\n `${VERSION_VERSION_NUMBER} AS \"versionNumber\"`,\n `name AS \"name\"`,\n `description AS \"description\"`,\n `servers AS \"servers\"`,\n `${VERSION_CHANGED_FIELDS} AS \"changedFields\"`,\n `${VERSION_CHANGE_MESSAGE} AS \"changeMessage\"`,\n `${VERSION_CREATED_AT} AS \"createdAt\"`,\n ].join(', ');\n }\n\n private parseMCPClientRow(row: MCPClientRow): StorageMCPClientType {\n return {\n id: String(row.id),\n status: row.status,\n activeVersionId: optionalString(row.activeVersionId),\n authorId: optionalString(row.authorId),\n metadata: parseOptionalJsonObject(row.metadata),\n createdAt: toDate(row.createdAt),\n updatedAt: toDate(row.updatedAt),\n };\n }\n\n private parseVersionRow(row: MCPClientVersionRow): MCPClientVersion {\n // Normalize the JSON server map before returning it to Mastra core.\n return {\n id: String(row.id),\n mcpClientId: String(row.mcpClientId),\n versionNumber: Number(row.versionNumber),\n name: String(row.name),\n description: optionalString(row.description),\n servers: parseOracleJson(row.servers) as MCPClientVersion['servers'],\n changedFields: parseOptionalStringArray(row.changedFields),\n changeMessage: optionalString(row.changeMessage),\n createdAt: toDate(row.createdAt),\n };\n }\n\n private clientOrderColumn(field: string): string {\n return field === 'updatedAt' ? CLIENT_UPDATED_AT : CLIENT_CREATED_AT;\n }\n\n private versionOrderColumn(field: string): string {\n return field === 'createdAt' ? VERSION_CREATED_AT : VERSION_VERSION_NUMBER;\n }\n\n private validatePagination(page: number, perPageInput: number | false | undefined, defaultPerPage: number): void {\n if (page < 0) {\n throw new Error('page must be >= 0');\n }\n\n const perPage = normalizePerPage(perPageInput, defaultPerPage);\n const maxOffset = Number.MAX_SAFE_INTEGER / 2;\n if (perPageInput !== false && page * perPage > maxOffset) {\n throw new Error('page value too large');\n }\n }\n\n private table(tableName: string): string {\n return qualifyName(tableName, this.schemaName);\n }\n\n private indexName(indexName: string): string {\n return indexNameForTable(indexName, 'IDX');\n }\n\n private storageError(\n operation: string,\n reason: string,\n details: Record<string, string | number | boolean | undefined>,\n cause: unknown,\n category: ErrorCategory = ErrorCategory.THIRD_PARTY,\n ): MastraError {\n return createOracleStorageError({ storeName: STORE_NAME, operation, reason, details, cause, category });\n }\n}\n\nexport function getDefaultMCPClientIndexDefinitions(indexName: (name: string) => string): OracleCreateIndexOptions[] {\n return [\n {\n name: indexName('MASTRA_MCP_CLIENT_VERSIONS_CLIENT_VERSION'),\n table: TABLE_MCP_CLIENT_VERSIONS,\n columns: ['mcpClientId', 'versionNumber'],\n unique: true,\n },\n ];\n}\n\nfunction optionalString(value: unknown): string | undefined {\n if (value === null || value === undefined) return undefined;\n return String(value);\n}\n\nfunction jsonValue(column: string, path: string, comparisonValue: unknown): string {\n const jsonPath = assertJsonPath(path);\n if (typeof comparisonValue === 'number') {\n return `JSON_VALUE(${column}, '${jsonPath}' RETURNING NUMBER NULL ON ERROR)`;\n }\n return `JSON_VALUE(${column}, '${jsonPath}' RETURNING VARCHAR2(4000) NULL ON ERROR)`;\n}\n\nfunction jsonComparableValue(value: unknown): unknown {\n if (value instanceof Date) return value.toISOString();\n if (typeof value === 'boolean') return String(value);\n if (value === null || value === undefined) return '';\n if (typeof value === 'object') return JSON.stringify(safeJsonValue(value));\n return value;\n}\n","import { randomUUID } from 'node:crypto';\n\nimport type { MastraError } from '@mastra/core/error';\nimport { ErrorCategory } from '@mastra/core/error';\nimport type { IMastraLogger } from '@mastra/core/logger';\nimport type { MastraDBMessage, StorageThreadType } from '@mastra/core/memory';\nimport type {\n BufferedObservationChunk,\n StorageResourceType,\n ThreadOrderBy,\n ThreadSortDirection,\n StorageOrderBy,\n} from '@mastra/core/storage';\n\nimport { clobBind, isOracleErrorCode } from '../../../shared/connection';\nimport { qualifyName } from '../../../vector/identifiers';\nimport type { OracleDB, OracleCreateIndexOptions, OracleTxClient } from '../../db';\nimport { createOracleStorageError, parseJsonValue, toDate } from '../../domain-utils';\n\n// Shared helpers used across the memory domain modules (schema, threads, messages,\n// resources, observational memory). Kept together so binds/parsing stay consistent\n// no matter which sub-module reads or writes a row.\nconst STORE_NAME = 'ORACLEDB';\n\nexport const ORACLE_IN_LIMIT = 900;\nexport const EMPTY_STRING_SENTINEL = '__MASTRA_ORACLE_EMPTY_STRING__';\nexport const STRING_SENTINEL_ESCAPE_PREFIX = '__MASTRA_ORACLE_ESCAPED__';\n\n/**\n * Per-call context every memory sub-module function receives instead of `this`.\n * Built fresh by `MemoryOracle` on every public method call so mocked/replaced\n * fields (e.g. tests swapping `db`) are always picked up.\n */\nexport interface MemoryContext {\n db: OracleDB;\n schemaName?: string;\n messageBatchSize: number;\n vectorRegistryTableName: string;\n skipDefaultIndexes?: boolean;\n indexes: OracleCreateIndexOptions[];\n logger: IMastraLogger;\n validatePaginationInput(page: number, perPageInput: number | false): void;\n validateMetadataKeys(metadata: Record<string, unknown> | undefined): void;\n parseOrderBy(\n orderBy?: StorageOrderBy,\n defaultDirection?: ThreadSortDirection,\n ): { field: ThreadOrderBy; direction: ThreadSortDirection };\n deepMergeConfig(target: Record<string, unknown>, source: Record<string, unknown>): Record<string, unknown>;\n // Bound references to the *public* MemoryOracle methods of the same name.\n // Other public methods that historically called `this.xyz(...)` internally\n // (e.g. saveMessages validating threads via getThreadById, updateResource\n // reading-then-writing) go through these instead of importing the sibling\n // module directly, so an instance-level override/mock (tests, subclasses)\n // is still honored exactly like it was on the single monolithic class.\n getThreadById(args: { threadId: string; resourceId?: string }): Promise<StorageThreadType | null>;\n listMessagesById(args: { messageIds: string[] }): Promise<{ messages: MastraDBMessage[] }>;\n getResourceById(args: { resourceId: string }): Promise<StorageResourceType | null>;\n saveResource(args: { resource: StorageResourceType }): Promise<StorageResourceType>;\n}\n\nexport function table(ctx: Pick<MemoryContext, 'schemaName'>, tableName: string): string {\n return qualifyName(tableName, ctx.schemaName);\n}\n\nexport function storageError(\n operation: string,\n reason: string,\n details: Record<string, string | number | boolean | undefined>,\n cause: unknown,\n category: ErrorCategory = ErrorCategory.THIRD_PARTY,\n): MastraError {\n return createOracleStorageError({ storeName: STORE_NAME, operation, reason, details, cause, category });\n}\n\nexport function assertRowsAffected(rowsAffected: number | undefined, operation: string, id: string): void {\n if (rowsAffected && rowsAffected > 0) return;\n throw storageError(\n operation,\n 'NOT_FOUND',\n { id },\n new Error(`Observational memory record not found: ${id}`),\n ErrorCategory.THIRD_PARTY,\n );\n}\n\nexport function inClause(prefix: string, values: readonly string[]): { sql: string; binds: Record<string, unknown> } {\n const binds: Record<string, unknown> = {};\n const placeholders = values.map((value, index) => {\n const key = `${prefix}${index}`;\n binds[key] = value;\n return `:${key}`;\n });\n return { sql: placeholders.join(', '), binds };\n}\n\nexport function chunkValues<T>(values: T[], size = ORACLE_IN_LIMIT): T[][] {\n const chunks: T[][] = [];\n for (let index = 0; index < values.length; index += size) {\n chunks.push(values.slice(index, index + size));\n }\n return chunks;\n}\n\nexport function boolToNumber(value: boolean | undefined): number {\n return value ? 1 : 0;\n}\n\nexport function toBoolean(value: unknown): boolean {\n return value === true || value === 1 || value === '1' || value === 'true' || value === 'TRUE';\n}\n\nexport function numberOrZero(value: unknown): number {\n if (typeof value === 'number') return Number.isFinite(value) ? value : 0;\n if (value === null || value === undefined || value === '') return 0;\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : 0;\n}\n\nexport function optionalNumber(value: unknown): number | undefined {\n if (value === null || value === undefined || value === '') return undefined;\n return numberOrZero(value);\n}\n\nexport function stringOrEmpty(value: unknown): string {\n if (value === null || value === undefined) return '';\n return String(value);\n}\n\nexport function emptyToUndefined(value: unknown): string | undefined {\n const stringValue = stringOrEmpty(value);\n return stringValue.length === 0 ? undefined : stringValue;\n}\n\nexport function optionalStringBind(value: string | null | undefined): string | null {\n if (value === undefined || value === null) return null;\n if (value.length === 0) return EMPTY_STRING_SENTINEL;\n if (value.startsWith(EMPTY_STRING_SENTINEL) || value.startsWith(STRING_SENTINEL_ESCAPE_PREFIX)) {\n return `${STRING_SENTINEL_ESCAPE_PREFIX}${value}`;\n }\n return value;\n}\n\nexport function optionalClobStringBind(value: string | null | undefined) {\n const encoded = optionalStringBind(value);\n return encoded === null ? null : clobBind(encoded);\n}\n\nexport function parseOptionalString(value: unknown): string | undefined {\n if (value === null || value === undefined) return undefined;\n const stringValue = String(value);\n if (stringValue === EMPTY_STRING_SENTINEL) return '';\n if (stringValue.startsWith(STRING_SENTINEL_ESCAPE_PREFIX)) {\n return stringValue.slice(STRING_SENTINEL_ESCAPE_PREFIX.length);\n }\n return stringValue;\n}\n\nexport function parseJson(value: unknown): Record<string, unknown> {\n if (value === null || value === undefined) return {};\n if (typeof value === 'string') return JSON.parse(value) as Record<string, unknown>;\n if (Buffer.isBuffer(value)) return JSON.parse(value.toString('utf8')) as Record<string, unknown>;\n if (typeof value === 'object') return value as Record<string, unknown>;\n return {};\n}\n\nexport function paginationClause(perPageInput: number | false | undefined, perPage: number, offset: number): string {\n if (perPageInput === false) return '';\n return `OFFSET ${offset} ROWS FETCH NEXT ${perPage} ROWS ONLY`;\n}\n\n// Shared by observational.ts (row parsing) and observational-buffering.ts\n// (buffer chunk reads/writes) so both agree on the buffered-chunk shape.\nexport function parseBufferedChunks(value: unknown): BufferedObservationChunk[] {\n const parsed = parseJsonValue(value);\n if (!Array.isArray(parsed)) return [];\n return parsed.map(chunk => {\n const item = chunk as Partial<BufferedObservationChunk>;\n return {\n id: String(item.id ?? `ombuf-${randomUUID()}`),\n cycleId: String(item.cycleId ?? ''),\n observations: String(item.observations ?? ''),\n tokenCount: Math.round(numberOrZero(item.tokenCount)),\n messageIds: Array.isArray(item.messageIds) ? item.messageIds.map(id => String(id)) : [],\n messageTokens: Math.round(numberOrZero(item.messageTokens)),\n lastObservedAt: item.lastObservedAt ? toDate(item.lastObservedAt as Date | string) : new Date(),\n createdAt: item.createdAt ? toDate(item.createdAt as Date | string) : new Date(),\n suggestedContinuation: item.suggestedContinuation,\n currentTask: item.currentTask,\n threadTitle: item.threadTitle,\n extractedValues: item.extractedValues,\n extractionFailures: item.extractionFailures,\n };\n });\n}\n\nasync function semanticRecallVectorTables(\n ctx: Pick<MemoryContext, 'schemaName' | 'vectorRegistryTableName'>,\n client: OracleTxClient,\n): Promise<Array<{ tableName: string }>> {\n try {\n return await client.manyOrNone<{ tableName: string }>(\n `\n SELECT table_name AS \"tableName\"\n FROM ${qualifyName(ctx.vectorRegistryTableName, ctx.schemaName)}\n WHERE LOWER(index_name) = 'memory_messages'\n OR LOWER(index_name) LIKE 'memory_messages\\\\_%' ESCAPE '\\\\'\n OR LOWER(index_name) LIKE 'mastra_memory\\\\_%' ESCAPE '\\\\'`,\n );\n } catch (error) {\n if (isOracleErrorCode(error, [-942])) return [];\n throw error;\n }\n}\n\n// Semantic recall stores embeddings outside the threads/messages tables, so\n// deleting a thread or a set of messages must also sweep those vector rows.\nexport async function deleteSemanticRecallVectors(\n ctx: Pick<MemoryContext, 'schemaName' | 'vectorRegistryTableName'>,\n client: OracleTxClient,\n threadId: string,\n): Promise<void> {\n const vectorTables = await semanticRecallVectorTables(ctx, client);\n\n for (const { tableName } of vectorTables) {\n try {\n await client.none(\n `DELETE FROM ${qualifyName(tableName, ctx.schemaName)}\n WHERE JSON_VALUE(metadata, '$.thread_id' RETURNING VARCHAR2(512) NULL ON ERROR) = :threadId`,\n { threadId },\n );\n } catch (error) {\n if (!isOracleErrorCode(error, [-942])) throw error;\n }\n }\n}\n\nexport async function deleteSemanticRecallVectorsByMessageIds(\n ctx: Pick<MemoryContext, 'schemaName' | 'vectorRegistryTableName'>,\n client: OracleTxClient,\n messageIds: readonly string[],\n): Promise<void> {\n if (messageIds.length === 0) return;\n\n const vectorTables = await semanticRecallVectorTables(ctx, client);\n const { sql, binds } = inClause('semanticMessageId', messageIds);\n\n for (const { tableName } of vectorTables) {\n try {\n await client.none(\n `DELETE FROM ${qualifyName(tableName, ctx.schemaName)}\n WHERE JSON_VALUE(metadata, '$.message_id' RETURNING VARCHAR2(512) NULL ON ERROR) IN (${sql})`,\n binds,\n );\n } catch (error) {\n if (!isOracleErrorCode(error, [-942])) throw error;\n }\n }\n}\n","import { TABLE_MESSAGES, TABLE_OBSERVATIONAL_MEMORY, TABLE_RESOURCES, TABLE_THREADS } from '@mastra/core/storage';\nimport type { Connection } from 'oracledb';\n\nimport { executeDdl, asBindParameters, executeOptions, rows } from '../../../shared/connection';\nimport type { ObjectRow } from '../../../shared/connection';\nimport { indexNameForTable } from '../../../vector/identifiers';\nimport { createOracleIndex } from '../../db';\nimport type { OracleCreateIndexOptions } from '../../db';\nimport { table } from './utils';\nimport type { MemoryContext } from './utils';\n\n// DDL and quoted-column identifiers for every table the memory domain owns\n// (threads, messages, resources, observational memory). Column name constants\n// live here so threads.ts/messages.ts/resources.ts/observational*.ts all agree\n// on the physical schema.\nexport const THREAD_RESOURCE_ID = '\"resourceId\"';\nexport const THREAD_CREATED_AT = '\"createdAt\"';\nexport const THREAD_UPDATED_AT = '\"updatedAt\"';\nexport const MESSAGE_RESOURCE_ID = '\"resourceId\"';\nexport const MESSAGE_CREATED_AT = '\"createdAt\"';\nexport const RESOURCE_WORKING_MEMORY = '\"workingMemory\"';\nexport const RESOURCE_CREATED_AT = '\"createdAt\"';\nexport const RESOURCE_UPDATED_AT = '\"updatedAt\"';\nexport const OM_LOOKUP_KEY = '\"lookupKey\"';\nexport const OM_SCOPE = '\"scope\"';\nexport const OM_RESOURCE_ID = '\"resourceId\"';\nexport const OM_THREAD_ID = '\"threadId\"';\nexport const OM_ACTIVE_OBSERVATIONS = '\"activeObservations\"';\nexport const OM_ACTIVE_OBSERVATIONS_PENDING_UPDATE = '\"activeObservationsPendingUpdate\"';\nexport const OM_ORIGIN_TYPE = '\"originType\"';\nexport const OM_GENERATION_COUNT = '\"generationCount\"';\nexport const OM_LAST_OBSERVED_AT = '\"lastObservedAt\"';\nexport const OM_LAST_REFLECTION_AT = '\"lastReflectionAt\"';\nexport const OM_PENDING_MESSAGE_TOKENS = '\"pendingMessageTokens\"';\nexport const OM_TOTAL_TOKENS_OBSERVED = '\"totalTokensObserved\"';\nexport const OM_OBSERVATION_TOKEN_COUNT = '\"observationTokenCount\"';\nexport const OM_IS_OBSERVING = '\"isObserving\"';\nexport const OM_IS_REFLECTING = '\"isReflecting\"';\nexport const OM_OBSERVED_MESSAGE_IDS = '\"observedMessageIds\"';\nexport const OM_OBSERVED_TIMEZONE = '\"observedTimezone\"';\nexport const OM_BUFFERED_OBSERVATIONS = '\"bufferedObservations\"';\nexport const OM_BUFFERED_OBSERVATION_TOKENS = '\"bufferedObservationTokens\"';\nexport const OM_BUFFERED_MESSAGE_IDS = '\"bufferedMessageIds\"';\nexport const OM_BUFFERED_REFLECTION = '\"bufferedReflection\"';\nexport const OM_BUFFERED_REFLECTION_TOKENS = '\"bufferedReflectionTokens\"';\nexport const OM_BUFFERED_REFLECTION_INPUT_TOKENS = '\"bufferedReflectionInputTokens\"';\nexport const OM_REFLECTED_OBSERVATION_LINE_COUNT = '\"reflectedObservationLineCount\"';\nexport const OM_BUFFERED_OBSERVATION_CHUNKS = '\"bufferedObservationChunks\"';\nexport const OM_IS_BUFFERING_OBSERVATION = '\"isBufferingObservation\"';\nexport const OM_IS_BUFFERING_REFLECTION = '\"isBufferingReflection\"';\nexport const OM_LAST_BUFFERED_AT_TOKENS = '\"lastBufferedAtTokens\"';\nexport const OM_LAST_BUFFERED_AT_TIME = '\"lastBufferedAtTime\"';\nexport const OM_CREATED_AT = '\"createdAt\"';\nexport const OM_UPDATED_AT = '\"updatedAt\"';\n\nexport async function initMemorySchema(ctx: MemoryContext): Promise<void> {\n await ctx.db.withConnection(async connection => {\n // Use one connection for table, column, and index setup so schema-qualified\n // deployments see a consistent Oracle session throughout initialization.\n await createTables(ctx, connection);\n await createIndexes(ctx, connection);\n });\n}\n\nexport async function clearAllMemoryTables(ctx: MemoryContext): Promise<void> {\n await ctx.db.tx(async client => {\n await client.none(`DELETE FROM ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)}`);\n await client.none(`DELETE FROM ${table(ctx, TABLE_MESSAGES)}`);\n await client.none(`DELETE FROM ${table(ctx, TABLE_THREADS)}`);\n await client.none(`DELETE FROM ${table(ctx, TABLE_RESOURCES)}`);\n });\n}\n\nasync function createTables(ctx: MemoryContext, connection: Connection): Promise<void> {\n // Memory table DDL is kept manual instead of relying only on TABLE_SCHEMAS\n // because Oracle-specific CLOB/JSON choices are central to this provider.\n await executeDdl(\n connection,\n `\n CREATE TABLE ${table(ctx, TABLE_RESOURCES)} (\n id VARCHAR2(512) PRIMARY KEY,\n ${RESOURCE_WORKING_MEMORY} CLOB,\n metadata JSON,\n ${RESOURCE_CREATED_AT} TIMESTAMP WITH TIME ZONE NOT NULL,\n ${RESOURCE_UPDATED_AT} TIMESTAMP WITH TIME ZONE NOT NULL\n )`,\n [-955],\n );\n\n await executeDdl(\n connection,\n `\n CREATE TABLE ${table(ctx, TABLE_THREADS)} (\n id VARCHAR2(512) PRIMARY KEY,\n ${THREAD_RESOURCE_ID} VARCHAR2(512) NOT NULL,\n title VARCHAR2(1024),\n metadata JSON,\n ${THREAD_CREATED_AT} TIMESTAMP WITH TIME ZONE NOT NULL,\n ${THREAD_UPDATED_AT} TIMESTAMP WITH TIME ZONE NOT NULL\n )`,\n [-955],\n );\n\n await relaxThreadTitleNullability(ctx, connection);\n\n await executeDdl(\n connection,\n `\n CREATE TABLE ${table(ctx, TABLE_MESSAGES)} (\n id VARCHAR2(512) PRIMARY KEY,\n thread_id VARCHAR2(512) NOT NULL,\n content CLOB NOT NULL,\n role VARCHAR2(64) NOT NULL,\n type VARCHAR2(64) NOT NULL,\n ${MESSAGE_CREATED_AT} TIMESTAMP WITH TIME ZONE NOT NULL,\n ${MESSAGE_RESOURCE_ID} VARCHAR2(512)\n )`,\n [-955],\n );\n await executeDdl(\n connection,\n `ALTER TABLE ${table(ctx, TABLE_MESSAGES)} ADD (${MESSAGE_RESOURCE_ID} VARCHAR2(512))`,\n [-1430],\n );\n\n await executeDdl(\n connection,\n `\n CREATE TABLE ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)} (\n id VARCHAR2(512) PRIMARY KEY,\n ${OM_LOOKUP_KEY} VARCHAR2(1024) NOT NULL,\n ${OM_SCOPE} VARCHAR2(32) NOT NULL,\n ${OM_RESOURCE_ID} VARCHAR2(512) NOT NULL,\n ${OM_THREAD_ID} VARCHAR2(512),\n ${OM_ACTIVE_OBSERVATIONS} CLOB,\n ${OM_ACTIVE_OBSERVATIONS_PENDING_UPDATE} CLOB,\n ${OM_ORIGIN_TYPE} VARCHAR2(32) NOT NULL,\n config JSON NOT NULL,\n ${OM_GENERATION_COUNT} NUMBER(10) DEFAULT 0 NOT NULL,\n ${OM_LAST_OBSERVED_AT} TIMESTAMP WITH TIME ZONE,\n ${OM_LAST_REFLECTION_AT} TIMESTAMP WITH TIME ZONE,\n ${OM_PENDING_MESSAGE_TOKENS} NUMBER(20) DEFAULT 0 NOT NULL,\n ${OM_TOTAL_TOKENS_OBSERVED} NUMBER(20) DEFAULT 0 NOT NULL,\n ${OM_OBSERVATION_TOKEN_COUNT} NUMBER(20) DEFAULT 0 NOT NULL,\n ${OM_IS_OBSERVING} NUMBER(1) DEFAULT 0 NOT NULL,\n ${OM_IS_REFLECTING} NUMBER(1) DEFAULT 0 NOT NULL,\n ${OM_OBSERVED_MESSAGE_IDS} JSON,\n ${OM_OBSERVED_TIMEZONE} VARCHAR2(128),\n ${OM_BUFFERED_OBSERVATIONS} CLOB,\n ${OM_BUFFERED_OBSERVATION_TOKENS} NUMBER(20),\n ${OM_BUFFERED_MESSAGE_IDS} JSON,\n ${OM_BUFFERED_REFLECTION} CLOB,\n ${OM_BUFFERED_REFLECTION_TOKENS} NUMBER(20),\n ${OM_BUFFERED_REFLECTION_INPUT_TOKENS} NUMBER(20),\n ${OM_REFLECTED_OBSERVATION_LINE_COUNT} NUMBER(20),\n ${OM_BUFFERED_OBSERVATION_CHUNKS} JSON,\n ${OM_IS_BUFFERING_OBSERVATION} NUMBER(1) DEFAULT 0 NOT NULL,\n ${OM_IS_BUFFERING_REFLECTION} NUMBER(1) DEFAULT 0 NOT NULL,\n ${OM_LAST_BUFFERED_AT_TOKENS} NUMBER(20) DEFAULT 0 NOT NULL,\n ${OM_LAST_BUFFERED_AT_TIME} TIMESTAMP WITH TIME ZONE,\n metadata JSON,\n ${OM_CREATED_AT} TIMESTAMP WITH TIME ZONE NOT NULL,\n ${OM_UPDATED_AT} TIMESTAMP WITH TIME ZONE NOT NULL\n )`,\n [-955],\n );\n\n await ensureObservationalMemoryColumns(ctx, connection);\n await relaxObservationalMemoryNullability(ctx, connection);\n}\n\nasync function ensureObservationalMemoryColumns(ctx: MemoryContext, connection: Connection): Promise<void> {\n // Observational memory evolved after basic memory storage. This additive\n // pass lets older Oracle schemas upgrade in place without dropping data.\n const columns = [\n { name: OM_LOOKUP_KEY, type: 'VARCHAR2(1024)' },\n { name: OM_SCOPE, type: 'VARCHAR2(32)' },\n { name: OM_RESOURCE_ID, type: 'VARCHAR2(512)' },\n { name: OM_THREAD_ID, type: 'VARCHAR2(512)' },\n { name: OM_ACTIVE_OBSERVATIONS, type: 'CLOB' },\n { name: OM_ACTIVE_OBSERVATIONS_PENDING_UPDATE, type: 'CLOB' },\n { name: OM_ORIGIN_TYPE, type: 'VARCHAR2(32)' },\n { name: 'config', type: 'JSON' },\n { name: OM_GENERATION_COUNT, type: 'NUMBER(10) DEFAULT 0' },\n { name: OM_LAST_OBSERVED_AT, type: 'TIMESTAMP WITH TIME ZONE' },\n { name: OM_LAST_REFLECTION_AT, type: 'TIMESTAMP WITH TIME ZONE' },\n { name: OM_PENDING_MESSAGE_TOKENS, type: 'NUMBER(20) DEFAULT 0' },\n { name: OM_TOTAL_TOKENS_OBSERVED, type: 'NUMBER(20) DEFAULT 0' },\n { name: OM_OBSERVATION_TOKEN_COUNT, type: 'NUMBER(20) DEFAULT 0' },\n { name: OM_IS_OBSERVING, type: 'NUMBER(1) DEFAULT 0' },\n { name: OM_IS_REFLECTING, type: 'NUMBER(1) DEFAULT 0' },\n { name: OM_OBSERVED_MESSAGE_IDS, type: 'JSON' },\n { name: OM_OBSERVED_TIMEZONE, type: 'VARCHAR2(128)' },\n { name: OM_BUFFERED_OBSERVATIONS, type: 'CLOB' },\n { name: OM_BUFFERED_OBSERVATION_TOKENS, type: 'NUMBER(20)' },\n { name: OM_BUFFERED_MESSAGE_IDS, type: 'JSON' },\n { name: OM_BUFFERED_REFLECTION, type: 'CLOB' },\n { name: OM_BUFFERED_REFLECTION_TOKENS, type: 'NUMBER(20)' },\n { name: OM_BUFFERED_REFLECTION_INPUT_TOKENS, type: 'NUMBER(20)' },\n { name: OM_REFLECTED_OBSERVATION_LINE_COUNT, type: 'NUMBER(20)' },\n { name: OM_BUFFERED_OBSERVATION_CHUNKS, type: 'JSON' },\n { name: OM_IS_BUFFERING_OBSERVATION, type: 'NUMBER(1) DEFAULT 0' },\n { name: OM_IS_BUFFERING_REFLECTION, type: 'NUMBER(1) DEFAULT 0' },\n { name: OM_LAST_BUFFERED_AT_TOKENS, type: 'NUMBER(20) DEFAULT 0' },\n { name: OM_LAST_BUFFERED_AT_TIME, type: 'TIMESTAMP WITH TIME ZONE' },\n { name: 'metadata', type: 'JSON' },\n { name: OM_CREATED_AT, type: 'TIMESTAMP WITH TIME ZONE' },\n { name: OM_UPDATED_AT, type: 'TIMESTAMP WITH TIME ZONE' },\n ];\n\n for (const column of columns) {\n await executeDdl(\n connection,\n `ALTER TABLE ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)} ADD (${column.name} ${column.type})`,\n [-1430],\n );\n }\n}\n\nasync function relaxThreadTitleNullability(ctx: MemoryContext, connection: Connection): Promise<void> {\n const tableName = TABLE_THREADS.toUpperCase();\n const result = ctx.schemaName\n ? await connection.execute<ObjectRow>(\n `SELECT nullable AS \"nullable\" FROM all_tab_columns WHERE owner = :owner AND table_name = :tableName AND column_name = 'TITLE'`,\n asBindParameters({ owner: ctx.schemaName, tableName }),\n executeOptions(),\n )\n : await connection.execute<ObjectRow>(\n `SELECT nullable AS \"nullable\" FROM user_tab_columns WHERE table_name = :tableName AND column_name = 'TITLE'`,\n asBindParameters({ tableName }),\n executeOptions(),\n );\n\n if (String(rows(result)[0]?.nullable ?? 'Y').toUpperCase() !== 'N') return;\n\n await executeDdl(connection, `ALTER TABLE ${table(ctx, TABLE_THREADS)} MODIFY (title NULL)`, [-1451, -54]);\n}\n\nasync function relaxObservationalMemoryNullability(ctx: MemoryContext, connection: Connection): Promise<void> {\n await executeDdl(\n connection,\n `ALTER TABLE ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)} MODIFY (${OM_ACTIVE_OBSERVATIONS} NULL)`,\n [-1451, -54],\n );\n}\n\nasync function createIndexes(ctx: MemoryContext, connection: Connection): Promise<void> {\n if (!ctx.skipDefaultIndexes) {\n for (const index of defaultIndexes(ctx)) {\n try {\n await createOracleIndex(connection, index, ctx.schemaName);\n } catch (error) {\n ctx.logger?.warn?.(`Failed to create Oracle default index ${index.name}:`, error);\n }\n }\n }\n\n for (const index of ctx.indexes) {\n await createOracleIndex(connection, index, ctx.schemaName);\n }\n}\n\nfunction indexName(name: string): string {\n return indexNameForTable(name, 'IDX');\n}\n\nfunction defaultIndexes(_ctx: MemoryContext): OracleCreateIndexOptions[] {\n return [\n {\n name: indexName('MASTRA_THREADS_RESOURCE_CREATED_IDX'),\n table: TABLE_THREADS,\n columns: ['resourceId', 'createdAt'],\n },\n {\n name: indexName('MASTRA_MESSAGES_THREAD_CREATED_IDX'),\n table: TABLE_MESSAGES,\n columns: ['thread_id', 'createdAt'],\n },\n {\n name: indexName('MASTRA_MESSAGES_RESOURCE_CREATED_IDX'),\n table: TABLE_MESSAGES,\n columns: ['resourceId', 'createdAt'],\n },\n {\n name: indexName('MASTRA_OM_LOOKUP_GENERATION_IDX'),\n table: TABLE_OBSERVATIONAL_MEMORY,\n columns: ['lookupKey', 'generationCount'],\n },\n {\n name: indexName('MASTRA_OM_RESOURCE_CREATED_IDX'),\n table: TABLE_OBSERVATIONAL_MEMORY,\n columns: ['resourceId', 'createdAt'],\n },\n {\n name: indexName('MASTRA_OM_THREAD_CREATED_IDX'),\n table: TABLE_OBSERVATIONAL_MEMORY,\n columns: ['threadId', 'createdAt'],\n },\n ];\n}\n","import { MessageList } from '@mastra/core/agent';\nimport type { MastraMessageContentV2 } from '@mastra/core/agent';\nimport { ErrorCategory, MastraError } from '@mastra/core/error';\nimport type { MastraDBMessage, MastraMessageV1 } from '@mastra/core/memory';\nimport {\n calculatePagination,\n normalizePerPage,\n storageMessageMatchesMetadataFilter,\n TABLE_MESSAGES,\n TABLE_THREADS,\n validateStorageMetadataFilter,\n} from '@mastra/core/storage';\nimport type {\n StorageListMessagesByResourceIdInput,\n StorageListMessagesInput,\n StorageListMessagesOutput,\n} from '@mastra/core/storage';\nimport oracledb from 'oracledb';\nimport type { Connection } from 'oracledb';\n\nimport { asBindParameters, clobBind, executeOptions, rows } from '../../../shared/connection';\nimport type { ObjectRow } from '../../../shared/connection';\nimport { quoteIdentifier } from '../../../vector/identifiers';\nimport type { OracleTxClient } from '../../db';\nimport { toDate } from '../../domain-utils';\nimport { MESSAGE_CREATED_AT, MESSAGE_RESOURCE_ID, THREAD_UPDATED_AT } from './schema';\nimport {\n chunkValues,\n deleteSemanticRecallVectorsByMessageIds,\n inClause,\n paginationClause,\n storageError,\n table,\n} from './utils';\nimport type { MemoryContext } from './utils';\n\n// Message CRUD, pagination/include windows, and batched saves. Deleting\n// messages also sweeps their semantic-recall vectors (see utils.ts).\nconst MAX_MESSAGE_STRING_BIND_BYTES = 3900;\n\ntype MessageRow = {\n id: string;\n content: unknown;\n role: string;\n type?: string;\n createdAt: Date | string;\n threadId: string;\n resourceId?: string | null;\n};\n\ntype MessageSaveBind = {\n id: string;\n threadId: string;\n content: string;\n role: string;\n type: string;\n createdAt: Date;\n resourceId: string;\n};\n\nexport async function listMessagesById(\n ctx: MemoryContext,\n { messageIds }: { messageIds: string[] },\n): Promise<{ messages: MastraDBMessage[] }> {\n if (messageIds.length === 0) return { messages: [] };\n\n try {\n return await ctx.db.withConnection(async connection => {\n const messageRows: MastraDBMessage[] = [];\n for (const [chunkIndex, chunk] of chunkValues(messageIds).entries()) {\n // Large include lists can exceed Oracle's bind limits. Chunking keeps\n // semantic recall and message include paths safe for long histories.\n const { sql, binds } = inClause(`messageId${chunkIndex}`, chunk);\n const result = await connection.execute<ObjectRow>(\n `${messageSelect()} FROM ${table(ctx, TABLE_MESSAGES)} WHERE id IN (${sql}) ORDER BY ${MESSAGE_CREATED_AT} DESC, id DESC`,\n asBindParameters(binds),\n executeOptions(),\n );\n messageRows.push(...rows(result).map(row => parseMessage(row as MessageRow)));\n }\n const list = new MessageList().add(\n sortMessages(messageRows, 'createdAt', 'DESC') as (MastraMessageV1 | MastraDBMessage)[],\n 'memory',\n );\n return { messages: list.get.all.db() };\n });\n } catch (error) {\n throw storageError('LIST_MESSAGES_BY_ID', 'FAILED', { messageIds: messageIds.join(',') }, error);\n }\n}\n\nexport async function listMessages(\n ctx: MemoryContext,\n args: StorageListMessagesInput,\n): Promise<StorageListMessagesOutput> {\n const { threadId, resourceId, include, filter, perPage: perPageInput, page = 0, orderBy } = args;\n const threadIds = (Array.isArray(threadId) ? threadId : [threadId]).filter(\n (id): id is string => typeof id === 'string' && id.trim().length > 0,\n );\n\n if (threadIds.length === 0) {\n throw storageError(\n 'LIST_MESSAGES',\n 'INVALID_THREAD_ID',\n { threadId: String(threadId) },\n new Error('threadId must be a non-empty string or array of non-empty strings'),\n ErrorCategory.USER,\n );\n }\n\n return listMessagesWithWhere(ctx, {\n operation: 'LIST_MESSAGES',\n baseFilter: { threadIds, resourceId },\n include,\n filter,\n perPageInput,\n page,\n orderBy,\n });\n}\n\nexport async function listMessagesByResourceId(\n ctx: MemoryContext,\n args: StorageListMessagesByResourceIdInput,\n): Promise<StorageListMessagesOutput> {\n const { resourceId, include, filter, perPage: perPageInput, page = 0, orderBy } = args;\n if (!resourceId || !resourceId.trim()) {\n throw storageError(\n 'LIST_MESSAGES_BY_RESOURCE_ID',\n 'INVALID_QUERY',\n { resourceId: resourceId ?? '' },\n new Error('resourceId is required'),\n ErrorCategory.USER,\n );\n }\n\n return listMessagesWithWhere(ctx, {\n operation: 'LIST_MESSAGES_BY_RESOURCE_ID',\n baseFilter: { resourceId },\n include,\n filter,\n perPageInput,\n page,\n orderBy,\n });\n}\n\nexport async function saveMessages(\n ctx: MemoryContext,\n { messages }: { messages: MastraDBMessage[] },\n): Promise<{ messages: MastraDBMessage[] }> {\n if (messages.length === 0) return { messages: [] };\n\n const threadIds = new Set<string>();\n\n try {\n for (const message of messages) {\n if (!message.threadId || !message.resourceId) {\n throw storageError(\n 'SAVE_MESSAGES',\n 'FAILED',\n { messageId: message.id },\n new Error('Each message must include threadId and resourceId'),\n ErrorCategory.USER,\n );\n }\n threadIds.add(message.threadId);\n }\n\n for (const threadId of threadIds) {\n const thread = await ctx.getThreadById({ threadId });\n if (!thread) {\n throw storageError(\n 'SAVE_MESSAGES',\n 'FAILED',\n { threadId },\n new Error(`Thread ${threadId} not found`),\n ErrorCategory.USER,\n );\n }\n }\n\n await ctx.db.tx(async client => {\n await insertMessageBatch(ctx, client, messages);\n });\n\n const list = new MessageList().add(messages as (MastraMessageV1 | MastraDBMessage)[], 'memory');\n return { messages: list.get.all.db() };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError('SAVE_MESSAGES', 'FAILED', { threadIds: Array.from(threadIds).join(',') }, error);\n }\n}\n\n/**\n * Batch-inserts/merges message rows and touches their threads' updatedAt\n * against the given transactional client. Extracted out of `saveMessages` so\n * `cloneThread` (memory/index.ts) can run this in the SAME transaction as the\n * destination thread MERGE — a failure here must not leave an orphaned,\n * message-less cloned thread committed. Does not verify that the owning\n * thread exists; `saveMessages` checks that before opening its transaction.\n */\nexport async function insertMessageBatch(\n ctx: MemoryContext,\n client: OracleTxClient,\n messages: MastraDBMessage[],\n): Promise<void> {\n const threadIds = new Set<string>();\n const stringExecuteManyOptions: oracledb.ExecuteManyOptions = {\n bindDefs: {\n id: { type: oracledb.STRING, maxSize: 512 },\n threadId: { type: oracledb.STRING, maxSize: 512 },\n content: { type: oracledb.STRING, maxSize: 4000 },\n role: { type: oracledb.STRING, maxSize: 512 },\n type: { type: oracledb.STRING, maxSize: 64 },\n createdAt: { type: oracledb.DB_TYPE_TIMESTAMP_TZ },\n resourceId: { type: oracledb.STRING, maxSize: 512 },\n },\n };\n const clobExecuteManyOptions: oracledb.ExecuteManyOptions = {\n bindDefs: {\n ...stringExecuteManyOptions.bindDefs,\n content: { type: oracledb.DB_TYPE_CLOB },\n },\n };\n const stringMessageBinds: MessageSaveBind[] = [];\n const clobMessageBinds: MessageSaveBind[] = [];\n\n for (const message of messages) {\n const messageThreadId = message.threadId;\n const messageResourceId = message.resourceId;\n if (!messageThreadId || !messageResourceId) {\n throw new Error('Each message must include threadId and resourceId');\n }\n threadIds.add(messageThreadId);\n const content = serializeContent(message.content);\n const bind = {\n id: message.id,\n threadId: messageThreadId,\n content,\n role: message.role,\n type: message.type ?? 'v2',\n createdAt: message.createdAt ?? new Date(),\n resourceId: messageResourceId,\n };\n if (Buffer.byteLength(content, 'utf8') <= MAX_MESSAGE_STRING_BIND_BYTES) {\n stringMessageBinds.push(bind);\n } else {\n clobMessageBinds.push(bind);\n }\n }\n\n for (const chunk of chunkValues(stringMessageBinds, ctx.messageBatchSize)) {\n await client.executeMany(messageMergeSql(ctx), chunk, stringExecuteManyOptions);\n }\n // Large or multipart messages still use CLOB binds; small messages take\n // the cheaper string path above, which avoids CLOB allocation overhead.\n for (const chunk of chunkValues(clobMessageBinds, ctx.messageBatchSize)) {\n await client.executeMany(messageMergeSql(ctx), chunk, clobExecuteManyOptions);\n }\n\n const updatedAt = new Date();\n await client.executeMany(\n `UPDATE ${table(ctx, TABLE_THREADS)} SET ${THREAD_UPDATED_AT} = :updatedAt WHERE id = :threadId`,\n Array.from(threadIds, messageThreadId => ({ updatedAt, threadId: messageThreadId })),\n );\n}\n\nexport async function updateMessages(\n ctx: MemoryContext,\n {\n messages,\n }: {\n messages: (Partial<Omit<MastraDBMessage, 'createdAt'>> & {\n id: string;\n content?: { metadata?: MastraMessageContentV2['metadata']; content?: MastraMessageContentV2['content'] };\n })[];\n },\n): Promise<MastraDBMessage[]> {\n if (messages.length === 0) return [];\n\n const messageIds = messages.map(message => message.id);\n const existingMessages = (await ctx.listMessagesById({ messageIds })).messages;\n if (existingMessages.length === 0) return [];\n\n const existingById = new Map(existingMessages.map(message => [message.id, message]));\n const threadIdsToUpdate = new Set<string>();\n\n try {\n await ctx.db.tx(async client => {\n // Message ids whose content/threadId/resourceId actually changed. Those\n // fields feed semantic-recall embeddings/metadata, so the vectors for\n // these ids are stale once the update below commits.\n const semanticRecallMessageIds: string[] = [];\n\n for (const updatePayload of messages) {\n const existing = existingById.get(updatePayload.id);\n if (!existing) continue;\n\n const { id, ...fieldsToUpdate } = updatePayload;\n if (Object.keys(fieldsToUpdate).length === 0) continue;\n\n const setParts: string[] = [];\n const binds: Record<string, unknown> = { id };\n let invalidatesSemanticRecallVectors = false;\n\n threadIdsToUpdate.add(existing.threadId!);\n if (fieldsToUpdate.threadId && fieldsToUpdate.threadId !== existing.threadId) {\n threadIdsToUpdate.add(fieldsToUpdate.threadId);\n }\n\n if (fieldsToUpdate.content) {\n setParts.push('content = :content');\n // Partial content updates merge into the stored V2 envelope instead\n // of overwriting metadata/content subfields independently.\n binds.content = clobBind(serializeContent(mergeMessageContent(existing.content, fieldsToUpdate.content)));\n invalidatesSemanticRecallVectors = true;\n }\n if (fieldsToUpdate.threadId) {\n setParts.push('thread_id = :threadId');\n binds.threadId = fieldsToUpdate.threadId;\n invalidatesSemanticRecallVectors = true;\n }\n if (fieldsToUpdate.resourceId) {\n setParts.push(`${MESSAGE_RESOURCE_ID} = :resourceId`);\n binds.resourceId = fieldsToUpdate.resourceId;\n invalidatesSemanticRecallVectors = true;\n }\n if (fieldsToUpdate.role) {\n setParts.push('role = :role');\n binds.role = fieldsToUpdate.role;\n }\n if (fieldsToUpdate.type) {\n setParts.push('type = :type');\n binds.type = fieldsToUpdate.type;\n }\n\n if (setParts.length > 0) {\n await client.none(`UPDATE ${table(ctx, TABLE_MESSAGES)} SET ${setParts.join(', ')} WHERE id = :id`, binds);\n }\n\n if (invalidatesSemanticRecallVectors) {\n semanticRecallMessageIds.push(id);\n }\n }\n\n if (semanticRecallMessageIds.length > 0) {\n // Delete stale semantic-recall vectors in the same transaction as the\n // message update, so a subsequent retrieval never surfaces embeddings\n // for content/thread/resource state that no longer exists.\n await deleteSemanticRecallVectorsByMessageIds(ctx, client, semanticRecallMessageIds);\n }\n\n const updatedAt = new Date();\n await client.executeMany(\n `UPDATE ${table(ctx, TABLE_THREADS)} SET ${THREAD_UPDATED_AT} = :updatedAt WHERE id = :threadId`,\n Array.from(threadIdsToUpdate, updatedThreadId => ({ updatedAt, threadId: updatedThreadId })),\n );\n });\n\n return (await ctx.listMessagesById({ messageIds })).messages;\n } catch (error) {\n throw storageError('UPDATE_MESSAGES', 'FAILED', { messageIds: messageIds.join(',') }, error);\n }\n}\n\nexport async function deleteMessages(ctx: MemoryContext, messageIds: string[]): Promise<void> {\n if (!messageIds.length) return;\n\n try {\n await ctx.db.tx(async client => {\n const threadIds = new Set<string>();\n\n for (const [chunkIndex, chunk] of chunkValues(messageIds).entries()) {\n const { sql, binds } = inClause(`messageId${chunkIndex}`, chunk);\n const threadRows = await client.manyOrNone<ObjectRow>(\n `SELECT DISTINCT thread_id AS \"threadId\" FROM ${table(ctx, TABLE_MESSAGES)} WHERE id IN (${sql})`,\n binds,\n );\n for (const row of threadRows) {\n if (row.threadId) threadIds.add(String(row.threadId));\n }\n\n await client.none(`DELETE FROM ${table(ctx, TABLE_MESSAGES)} WHERE id IN (${sql})`, binds);\n await deleteSemanticRecallVectorsByMessageIds(ctx, client, chunk);\n }\n\n const updatedAt = new Date();\n await client.executeMany(\n `UPDATE ${table(ctx, TABLE_THREADS)} SET ${THREAD_UPDATED_AT} = :updatedAt WHERE id = :threadId`,\n Array.from(threadIds, updatedThreadId => ({ updatedAt, threadId: updatedThreadId })),\n );\n });\n } catch (error) {\n throw storageError('DELETE_MESSAGES', 'FAILED', { messageIds: messageIds.join(',') }, error);\n }\n}\n\nasync function listMessagesWithWhere(\n ctx: MemoryContext,\n {\n operation,\n baseFilter,\n include,\n filter,\n perPageInput,\n page,\n orderBy,\n }: {\n operation: string;\n baseFilter: { threadIds?: string[]; resourceId?: string };\n include?: StorageListMessagesInput['include'];\n filter?: StorageListMessagesInput['filter'];\n perPageInput?: number | false;\n page: number;\n orderBy?: StorageListMessagesInput['orderBy'];\n },\n): Promise<StorageListMessagesOutput> {\n const metadataFilter = validateStorageMetadataFilter(filter?.metadata);\n\n try {\n ctx.validatePaginationInput(page, perPageInput ?? 40);\n } catch (error) {\n throw storageError(operation, 'INVALID_PAGE', { page }, error, ErrorCategory.USER);\n }\n\n const perPage = normalizePerPage(perPageInput, 40);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n try {\n return await ctx.db.withConnection(async connection => {\n const { field, direction } = ctx.parseOrderBy(orderBy, 'ASC');\n const { whereClause, binds } = messageWhereClause(baseFilter, filter);\n\n if (perPage === 0 && (!include || include.length === 0)) {\n return { messages: [], total: 0, page, perPage: perPageForResponse, hasMore: false };\n }\n\n if (perPage === 0 && include && include.length > 0) {\n const includeMessages = await getIncludedMessages(ctx, connection, include, baseFilter.resourceId);\n const list = new MessageList().add(includeMessages as (MastraMessageV1 | MastraDBMessage)[], 'memory');\n return {\n messages: sortMessages(list.get.all.db(), field, direction),\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n let total: number;\n let messages: MastraDBMessage[];\n if (metadataFilter) {\n // Match the shared storage contract: metadata filtering happens before\n // pagination and uses strict scalar equality. Keeping the comparison in\n // the canonical core helper also avoids Oracle coercing JSON strings to\n // numbers when JSON_VALUE is asked to RETURN NUMBER.\n const result = await connection.execute<ObjectRow>(\n `${messageSelect()} FROM ${table(ctx, TABLE_MESSAGES)} ${whereClause} ORDER BY ${messageOrderColumn(field)} ${direction}, id ${direction}`,\n asBindParameters(binds),\n executeOptions(),\n );\n const filteredMessages = rows(result)\n .map(row => parseMessage(row as MessageRow))\n .filter(message => storageMessageMatchesMetadataFilter(message.content, metadataFilter));\n total = filteredMessages.length;\n messages =\n perPageInput === false ? filteredMessages : filteredMessages.slice(offset, offset + Math.max(0, perPage));\n } else {\n const countResult = await connection.execute<ObjectRow>(\n `SELECT COUNT(*) AS \"count\" FROM ${table(ctx, TABLE_MESSAGES)} ${whereClause}`,\n asBindParameters(binds),\n executeOptions(),\n );\n total = Number(rows(countResult)[0]?.count ?? 0);\n\n const pagination = paginationClause(perPageInput, perPage, offset);\n const result = await connection.execute<ObjectRow>(\n `${messageSelect()} FROM ${table(ctx, TABLE_MESSAGES)} ${whereClause} ORDER BY ${messageOrderColumn(field)} ${direction}, id ${direction} ${pagination}`,\n asBindParameters(binds),\n executeOptions(),\n );\n messages = rows(result).map(row => parseMessage(row as MessageRow));\n }\n const primaryPageCount = messages.length;\n\n const messageIds = new Set(messages.map(message => message.id));\n if (include && include.length > 0) {\n // Included messages may fall outside the paged query. Merge by id,\n // then let MessageList normalize ordering and provider shape.\n const includeMessages = await getIncludedMessages(ctx, connection, include, baseFilter.resourceId);\n for (const message of includeMessages) {\n if (!messageIds.has(message.id)) {\n messages.push(message);\n messageIds.add(message.id);\n }\n }\n }\n\n const list = new MessageList().add(messages as (MastraMessageV1 | MastraDBMessage)[], 'memory');\n const finalMessages = sortMessages(list.get.all.db(), field, direction);\n const baseThreadIds = new Set(baseFilter.threadIds ?? []);\n const returnedThreadMessageIds = new Set(\n finalMessages\n .filter(\n message =>\n baseThreadIds.size === 0 || (message.threadId !== undefined && baseThreadIds.has(message.threadId)),\n )\n .map(message => message.id),\n );\n const hasMore = metadataFilter\n ? perPageInput !== false && offset + primaryPageCount < total\n : perPageInput !== false && returnedThreadMessageIds.size < total && offset + perPage < total;\n\n return {\n messages: finalMessages,\n total,\n page,\n perPage: perPageForResponse,\n hasMore,\n };\n });\n } catch (error) {\n throw storageError(operation, 'FAILED', { page }, error);\n }\n}\n\nasync function getIncludedMessages(\n ctx: MemoryContext,\n connection: Connection,\n include: NonNullable<StorageListMessagesInput['include']>,\n resourceId?: string,\n): Promise<MastraDBMessage[]> {\n const targetIds = include.map(item => item.id).filter(Boolean);\n if (targetIds.length === 0) return [];\n\n const { sql, binds } = inClause('targetId', targetIds);\n const resourceCondition = resourceId ? ` AND ${MESSAGE_RESOURCE_ID} = :includeResourceId` : '';\n const targetResult = await connection.execute<ObjectRow>(\n `SELECT id AS \"id\", thread_id AS \"threadId\", ${MESSAGE_CREATED_AT} AS \"createdAt\" FROM ${table(ctx, TABLE_MESSAGES)} WHERE id IN (${sql})${resourceCondition}`,\n asBindParameters({ ...binds, ...(resourceId ? { includeResourceId: resourceId } : {}) }),\n executeOptions(),\n );\n const targetMap = new Map(rows(targetResult).map(row => [String(row.id), row]));\n const collected: MastraDBMessage[] = [];\n const seen = new Set<string>();\n\n for (let index = 0; index < include.length; index += 1) {\n const item = include[index]!;\n const target = targetMap.get(item.id);\n if (!target) continue;\n\n const previousLimit = Math.max(0, item.withPreviousMessages ?? 0) + 1;\n const previousRows = await queryMessageWindow(ctx, connection, {\n threadId: String(target.threadId),\n createdAt: target.createdAt as Date | string,\n operator: '<=',\n direction: 'DESC',\n limit: previousLimit,\n bindPrefix: `prev${index}`,\n resourceId,\n });\n\n for (const message of previousRows.reverse()) {\n if (!seen.has(message.id)) {\n collected.push(message);\n seen.add(message.id);\n }\n }\n\n const nextLimit = Math.max(0, item.withNextMessages ?? 0);\n if (nextLimit > 0) {\n const nextRows = await queryMessageWindow(ctx, connection, {\n threadId: String(target.threadId),\n createdAt: target.createdAt as Date | string,\n operator: '>',\n direction: 'ASC',\n limit: nextLimit,\n bindPrefix: `next${index}`,\n resourceId,\n });\n for (const message of nextRows) {\n if (!seen.has(message.id)) {\n collected.push(message);\n seen.add(message.id);\n }\n }\n }\n }\n\n return collected;\n}\n\nasync function queryMessageWindow(\n ctx: MemoryContext,\n connection: Connection,\n params: {\n threadId: string;\n createdAt: Date | string;\n operator: '<=' | '>';\n direction: 'ASC' | 'DESC';\n limit: number;\n bindPrefix: string;\n resourceId?: string;\n },\n): Promise<MastraDBMessage[]> {\n const resourceCondition = params.resourceId ? ` AND ${MESSAGE_RESOURCE_ID} = :${params.bindPrefix}_resourceId` : '';\n const result = await connection.execute<ObjectRow>(\n `${messageSelect()} FROM ${table(ctx, TABLE_MESSAGES)} WHERE thread_id = :${params.bindPrefix}_threadId${resourceCondition} AND ${MESSAGE_CREATED_AT} ${params.operator} :${params.bindPrefix}_createdAt ORDER BY ${MESSAGE_CREATED_AT} ${params.direction}, id ${params.direction} FETCH FIRST ${params.limit} ROWS ONLY`,\n asBindParameters({\n [`${params.bindPrefix}_threadId`]: params.threadId,\n [`${params.bindPrefix}_createdAt`]: params.createdAt,\n ...(params.resourceId ? { [`${params.bindPrefix}_resourceId`]: params.resourceId } : {}),\n }),\n executeOptions(),\n );\n return rows(result).map(row => parseMessage(row as MessageRow));\n}\n\nfunction messageWhereClause(\n baseFilter: { threadIds?: string[]; resourceId?: string },\n filter?: StorageListMessagesInput['filter'],\n): { whereClause: string; binds: Record<string, unknown> } {\n const conditions: string[] = [];\n const binds: Record<string, unknown> = {};\n\n if (baseFilter.threadIds?.length) {\n const threadClause = inClause('threadId', baseFilter.threadIds);\n conditions.push(`thread_id IN (${threadClause.sql})`);\n Object.assign(binds, threadClause.binds);\n }\n if (baseFilter.resourceId) {\n conditions.push(`${MESSAGE_RESOURCE_ID} = :resourceId`);\n binds.resourceId = baseFilter.resourceId;\n }\n if (filter?.dateRange?.start) {\n conditions.push(`${MESSAGE_CREATED_AT} ${filter.dateRange.startExclusive ? '>' : '>='} :startDate`);\n binds.startDate = toDate(filter.dateRange.start);\n }\n if (filter?.dateRange?.end) {\n conditions.push(`${MESSAGE_CREATED_AT} ${filter.dateRange.endExclusive ? '<' : '<='} :endDate`);\n binds.endDate = toDate(filter.dateRange.end);\n }\n\n return { whereClause: conditions.length ? `WHERE ${conditions.join(' AND ')}` : '', binds };\n}\n\nfunction sortMessages(messages: MastraDBMessage[], field: string, direction: string): MastraDBMessage[] {\n return messages.sort((a, b) => {\n const aValue = field === 'createdAt' ? new Date(a.createdAt).getTime() : (a as Record<string, unknown>)[field];\n const bValue = field === 'createdAt' ? new Date(b.createdAt).getTime() : (b as Record<string, unknown>)[field];\n if (aValue === bValue) return a.id.localeCompare(b.id);\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\nfunction parseMessage(row: MessageRow): MastraDBMessage {\n return {\n id: String(row.id),\n content: parseContent(row.content),\n role: String(row.role) as MastraDBMessage['role'],\n createdAt: toDate(row.createdAt),\n threadId: String(row.threadId),\n resourceId: row.resourceId === null || row.resourceId === undefined ? undefined : String(row.resourceId),\n ...(row.type && row.type !== 'v2' ? { type: String(row.type) } : {}),\n } satisfies MastraDBMessage;\n}\n\nfunction messageSelect(): string {\n return `SELECT id AS \"id\", content AS \"content\", role AS \"role\", type AS \"type\", ${MESSAGE_CREATED_AT} AS \"createdAt\", thread_id AS \"threadId\", ${MESSAGE_RESOURCE_ID} AS \"resourceId\"`;\n}\n\nfunction messageMergeSql(ctx: MemoryContext): string {\n return `\n MERGE INTO ${table(ctx, TABLE_MESSAGES)} target\n USING (\n SELECT\n :id AS id,\n :threadId AS thread_id,\n :content AS content,\n :role AS role,\n :type AS type,\n :createdAt AS created_at,\n :resourceId AS resource_id\n FROM dual\n ) source\n ON (target.id = source.id)\n WHEN MATCHED THEN UPDATE SET\n target.thread_id = source.thread_id,\n target.content = source.content,\n target.role = source.role,\n target.type = source.type,\n target.${MESSAGE_RESOURCE_ID} = source.resource_id\n WHEN NOT MATCHED THEN INSERT (\n id,\n thread_id,\n content,\n role,\n type,\n ${MESSAGE_CREATED_AT},\n ${MESSAGE_RESOURCE_ID}\n ) VALUES (\n source.id,\n source.thread_id,\n source.content,\n source.role,\n source.type,\n source.created_at,\n source.resource_id\n )`;\n}\n\nfunction messageOrderColumn(field: string): string {\n return field === 'createdAt' ? MESSAGE_CREATED_AT : quoteIdentifier(field, 'message order field');\n}\n\nfunction serializeContent(content: MastraDBMessage['content']): string {\n return typeof content === 'string' ? content : JSON.stringify(content);\n}\n\nfunction parseContent(value: unknown): MastraDBMessage['content'] {\n if (typeof value !== 'string') return value as MastraDBMessage['content'];\n try {\n return JSON.parse(value) as MastraDBMessage['content'];\n } catch {\n return value as unknown as MastraDBMessage['content'];\n }\n}\n\nfunction mergeMessageContent(\n existingContent: MastraDBMessage['content'],\n updateContent: { metadata?: MastraMessageContentV2['metadata']; content?: MastraMessageContentV2['content'] },\n): MastraDBMessage['content'] {\n if (typeof existingContent !== 'object' || existingContent === null || Array.isArray(existingContent)) {\n return updateContent as MastraDBMessage['content'];\n }\n\n return {\n ...existingContent,\n ...updateContent,\n ...('metadata' in existingContent && updateContent.metadata\n ? { metadata: { ...(existingContent.metadata ?? {}), ...updateContent.metadata } }\n : {}),\n } as MastraDBMessage['content'];\n}\n","import { randomUUID } from 'node:crypto';\n\nimport { ErrorCategory, MastraError } from '@mastra/core/error';\nimport { TABLE_OBSERVATIONAL_MEMORY } from '@mastra/core/storage';\nimport type {\n CreateObservationalMemoryInput,\n CreateReflectionGenerationInput,\n ObservationalMemoryHistoryOptions,\n ObservationalMemoryRecord,\n UpdateActiveObservationsInput,\n UpdateObservationalMemoryConfigInput,\n} from '@mastra/core/storage';\nimport type { Connection } from 'oracledb';\n\nimport {\n asBindParameters,\n executeOptions,\n jsonBind,\n nullableClobBind,\n nullableJsonBind,\n rows,\n} from '../../../shared/connection';\nimport type { ObjectRow } from '../../../shared/connection';\nimport { toDate, parseOptionalJsonObject, parseOptionalStringArray } from '../../domain-utils';\nimport {\n OM_ACTIVE_OBSERVATIONS,\n OM_ACTIVE_OBSERVATIONS_PENDING_UPDATE,\n OM_BUFFERED_MESSAGE_IDS,\n OM_BUFFERED_OBSERVATIONS,\n OM_BUFFERED_OBSERVATION_CHUNKS,\n OM_BUFFERED_OBSERVATION_TOKENS,\n OM_BUFFERED_REFLECTION,\n OM_BUFFERED_REFLECTION_INPUT_TOKENS,\n OM_BUFFERED_REFLECTION_TOKENS,\n OM_CREATED_AT,\n OM_GENERATION_COUNT,\n OM_IS_BUFFERING_OBSERVATION,\n OM_IS_BUFFERING_REFLECTION,\n OM_IS_OBSERVING,\n OM_IS_REFLECTING,\n OM_LAST_BUFFERED_AT_TIME,\n OM_LAST_BUFFERED_AT_TOKENS,\n OM_LAST_OBSERVED_AT,\n OM_LAST_REFLECTION_AT,\n OM_LOOKUP_KEY,\n OM_OBSERVATION_TOKEN_COUNT,\n OM_OBSERVED_MESSAGE_IDS,\n OM_OBSERVED_TIMEZONE,\n OM_ORIGIN_TYPE,\n OM_PENDING_MESSAGE_TOKENS,\n OM_REFLECTED_OBSERVATION_LINE_COUNT,\n OM_RESOURCE_ID,\n OM_SCOPE,\n OM_THREAD_ID,\n OM_TOTAL_TOKENS_OBSERVED,\n OM_UPDATED_AT,\n} from './schema';\nimport {\n assertRowsAffected,\n boolToNumber,\n emptyToUndefined,\n numberOrZero,\n optionalNumber,\n parseBufferedChunks,\n parseJson,\n storageError,\n stringOrEmpty,\n table,\n toBoolean,\n} from './utils';\nimport type { MemoryContext } from './utils';\n\n// Core observational memory: current record lookup/history, record creation,\n// active-observation updates, config merges, and simple state flags. The\n// async buffering/reflection-swap workflow lives in observational-buffering.ts.\n\nexport type ObservationalMemoryRow = {\n id: string;\n lookupKey: string;\n scope: 'thread' | 'resource';\n resourceId: string;\n threadId?: string | null;\n activeObservations?: unknown;\n activeObservationsPendingUpdate?: unknown;\n originType?: 'initial' | 'reflection';\n config?: unknown;\n generationCount?: number | string;\n lastObservedAt?: Date | string | null;\n lastReflectionAt?: Date | string | null;\n pendingMessageTokens?: number | string | null;\n totalTokensObserved?: number | string | null;\n observationTokenCount?: number | string | null;\n isObserving?: number | boolean | string | null;\n isReflecting?: number | boolean | string | null;\n observedMessageIds?: unknown;\n observedTimezone?: string | null;\n bufferedObservations?: unknown;\n bufferedObservationTokens?: number | string | null;\n bufferedMessageIds?: unknown;\n bufferedReflection?: unknown;\n bufferedReflectionTokens?: number | string | null;\n bufferedReflectionInputTokens?: number | string | null;\n reflectedObservationLineCount?: number | string | null;\n bufferedObservationChunks?: unknown;\n isBufferingObservation?: number | boolean | string | null;\n isBufferingReflection?: number | boolean | string | null;\n lastBufferedAtTokens?: number | string | null;\n lastBufferedAtTime?: Date | string | null;\n metadata?: unknown;\n createdAt: Date | string;\n updatedAt: Date | string;\n};\n\nexport async function getObservationalMemory(\n ctx: MemoryContext,\n threadId: string | null,\n resourceId: string,\n): Promise<ObservationalMemoryRecord | null> {\n try {\n const lookupKey = getOMKey(threadId, resourceId);\n // A resource can have global and thread-scoped observations. lookupKey\n // keeps those scopes independent while sharing one indexed table.\n return await ctx.db.withConnection(async connection => {\n const result = await connection.execute<ObjectRow>(\n `${omSelect()} FROM ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)}\n WHERE ${OM_LOOKUP_KEY} = :lookupKey\n ORDER BY ${OM_GENERATION_COUNT} DESC\n FETCH FIRST 1 ROWS ONLY`,\n asBindParameters({ lookupKey }),\n executeOptions(),\n );\n const row = rows(result)[0] as ObservationalMemoryRow | undefined;\n return row ? parseOMRow(row) : null;\n });\n } catch (error) {\n throw storageError('GET_OBSERVATIONAL_MEMORY', 'FAILED', { threadId: threadId ?? '', resourceId }, error);\n }\n}\n\nexport async function getObservationalMemoryHistory(\n ctx: MemoryContext,\n threadId: string | null,\n resourceId: string,\n limit = 10,\n options?: ObservationalMemoryHistoryOptions,\n): Promise<ObservationalMemoryRecord[]> {\n try {\n ctx.validatePaginationInput(options?.offset ?? 0, limit);\n } catch (error) {\n throw storageError(\n 'GET_OBSERVATIONAL_MEMORY_HISTORY',\n 'INVALID_INPUT',\n { resourceId, limit },\n error,\n ErrorCategory.USER,\n );\n }\n\n try {\n const lookupKey = getOMKey(threadId, resourceId);\n const conditions = [`${OM_LOOKUP_KEY} = :lookupKey`];\n const binds: Record<string, unknown> = { lookupKey, limit };\n\n if (options?.from) {\n conditions.push(`${OM_CREATED_AT} >= :fromDate`);\n binds.fromDate = options.from;\n }\n if (options?.to) {\n conditions.push(`${OM_CREATED_AT} <= :toDate`);\n binds.toDate = options.to;\n }\n if (options?.offset !== undefined) {\n binds.offset = options.offset;\n }\n\n return await ctx.db.withConnection(async connection => {\n const result = await connection.execute<ObjectRow>(\n `${omSelect()} FROM ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)}\n WHERE ${conditions.join(' AND ')}\n ORDER BY ${OM_GENERATION_COUNT} DESC\n OFFSET :offset ROWS FETCH NEXT :limit ROWS ONLY`,\n asBindParameters({ offset: options?.offset ?? 0, ...binds }),\n executeOptions(),\n );\n return rows(result).map(row => parseOMRow(row as ObservationalMemoryRow));\n });\n } catch (error) {\n throw storageError(\n 'GET_OBSERVATIONAL_MEMORY_HISTORY',\n 'FAILED',\n { threadId: threadId ?? '', resourceId, limit },\n error,\n );\n }\n}\n\nexport async function initializeObservationalMemory(\n ctx: MemoryContext,\n input: CreateObservationalMemoryInput,\n): Promise<ObservationalMemoryRecord> {\n const now = new Date();\n // Start with empty active observations; later calls append observations and reflection output transactionally.\n const record: ObservationalMemoryRecord = {\n id: randomUUID(),\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 try {\n await ctx.db.tx(async (_client, connection) => {\n await insertOMRecord(ctx, connection, record);\n });\n return record;\n } catch (error) {\n throw storageError(\n 'INITIALIZE_OBSERVATIONAL_MEMORY',\n 'FAILED',\n { threadId: input.threadId ?? '', resourceId: input.resourceId },\n error,\n );\n }\n}\n\nexport async function insertObservationalMemoryRecord(\n ctx: MemoryContext,\n record: ObservationalMemoryRecord,\n): Promise<void> {\n try {\n await ctx.db.tx(async (_client, connection) => {\n await insertOMRecord(ctx, connection, record);\n });\n } catch (error) {\n throw storageError(\n 'INSERT_OBSERVATIONAL_MEMORY_RECORD',\n 'FAILED',\n { id: record.id, resourceId: record.resourceId },\n error,\n );\n }\n}\n\nexport async function updateActiveObservations(\n ctx: MemoryContext,\n input: UpdateActiveObservationsInput,\n): Promise<void> {\n try {\n await ctx.db.tx(async (_client, connection) => {\n const result = await connection.execute(\n `\n UPDATE ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)}\n SET ${OM_ACTIVE_OBSERVATIONS} = :activeObservations,\n ${OM_LAST_OBSERVED_AT} = :lastObservedAt,\n ${OM_PENDING_MESSAGE_TOKENS} = 0,\n ${OM_OBSERVATION_TOKEN_COUNT} = :tokenCount,\n ${OM_TOTAL_TOKENS_OBSERVED} = COALESCE(${OM_TOTAL_TOKENS_OBSERVED}, 0) + :tokenCount,\n ${OM_OBSERVED_MESSAGE_IDS} = :observedMessageIds,\n ${OM_OBSERVED_TIMEZONE} = COALESCE(:observedTimezone, ${OM_OBSERVED_TIMEZONE}),\n ${OM_UPDATED_AT} = :updatedAt\n WHERE id = :id`,\n {\n id: input.id,\n activeObservations: nullableClobBind(input.observations),\n lastObservedAt: input.lastObservedAt,\n // Moving observations to active memory consumes pending tokens and\n // advances the cumulative observed-token counter atomically.\n tokenCount: Math.round(input.tokenCount),\n observedMessageIds: nullableJsonBind(input.observedMessageIds),\n observedTimezone: input.observedTimezone ?? null,\n updatedAt: new Date(),\n },\n );\n assertRowsAffected(result.rowsAffected, 'UPDATE_ACTIVE_OBSERVATIONS', input.id);\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError('UPDATE_ACTIVE_OBSERVATIONS', 'FAILED', { id: input.id }, error);\n }\n}\n\nexport async function createReflectionGeneration(\n ctx: MemoryContext,\n input: CreateReflectionGenerationInput,\n): Promise<ObservationalMemoryRecord> {\n const now = new Date();\n const record: ObservationalMemoryRecord = {\n id: randomUUID(),\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: Math.round(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 try {\n await ctx.db.tx(async (_client, connection) => {\n await insertOMRecord(ctx, connection, record, now);\n });\n return record;\n } catch (error) {\n throw storageError('CREATE_REFLECTION_GENERATION', 'FAILED', { id: input.currentRecord.id }, error);\n }\n}\n\nexport async function setReflectingFlag(ctx: MemoryContext, id: string, isReflecting: boolean): Promise<void> {\n await updateOMFlag(ctx, id, OM_IS_REFLECTING, isReflecting, 'SET_REFLECTING_FLAG');\n}\n\nexport async function setObservingFlag(ctx: MemoryContext, id: string, isObserving: boolean): Promise<void> {\n await updateOMFlag(ctx, id, OM_IS_OBSERVING, isObserving, 'SET_OBSERVING_FLAG');\n}\n\nexport async function setBufferingObservationFlag(\n ctx: MemoryContext,\n id: string,\n isBuffering: boolean,\n lastBufferedAtTokens?: number,\n): Promise<void> {\n try {\n await ctx.db.tx(async (_client, connection) => {\n const setTokens =\n lastBufferedAtTokens !== undefined ? `, ${OM_LAST_BUFFERED_AT_TOKENS} = :lastBufferedAtTokens` : '';\n const binds: Record<string, unknown> = {\n id,\n isBuffering: boolToNumber(isBuffering),\n updatedAt: new Date(),\n };\n if (lastBufferedAtTokens !== undefined) {\n binds.lastBufferedAtTokens = Math.round(lastBufferedAtTokens);\n }\n\n const result = await connection.execute(\n `UPDATE ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)}\n SET ${OM_IS_BUFFERING_OBSERVATION} = :isBuffering,\n ${OM_UPDATED_AT} = :updatedAt\n ${setTokens}\n WHERE id = :id`,\n asBindParameters(binds),\n );\n assertRowsAffected(result.rowsAffected, 'SET_BUFFERING_OBSERVATION_FLAG', id);\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError('SET_BUFFERING_OBSERVATION_FLAG', 'FAILED', { id, isBuffering }, error);\n }\n}\n\nexport async function setBufferingReflectionFlag(ctx: MemoryContext, id: string, isBuffering: boolean): Promise<void> {\n await updateOMFlag(ctx, id, OM_IS_BUFFERING_REFLECTION, isBuffering, 'SET_BUFFERING_REFLECTION_FLAG');\n}\n\nexport async function clearObservationalMemory(\n ctx: MemoryContext,\n threadId: string | null,\n resourceId: string,\n): Promise<void> {\n try {\n const lookupKey = getOMKey(threadId, resourceId);\n await ctx.db.none(`DELETE FROM ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)} WHERE ${OM_LOOKUP_KEY} = :lookupKey`, {\n lookupKey,\n });\n } catch (error) {\n throw storageError('CLEAR_OBSERVATIONAL_MEMORY', 'FAILED', { threadId: threadId ?? '', resourceId }, error);\n }\n}\n\nexport async function setPendingMessageTokens(ctx: MemoryContext, id: string, tokenCount: number): Promise<void> {\n try {\n await updateOMColumns(ctx, id, 'SET_PENDING_MESSAGE_TOKENS', {\n [OM_PENDING_MESSAGE_TOKENS]: Math.round(tokenCount),\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError('SET_PENDING_MESSAGE_TOKENS', 'FAILED', { id, tokenCount }, error);\n }\n}\n\nexport async function updateObservationalMemoryConfig(\n ctx: MemoryContext,\n input: UpdateObservationalMemoryConfigInput,\n): Promise<void> {\n try {\n await ctx.db.tx(async (_client, connection) => {\n // Lock current config before deep-merging so concurrent observers do not\n // drop nested config keys written by another request.\n const result = await connection.execute<ObjectRow>(\n `SELECT config AS \"config\" FROM ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)} WHERE id = :id FOR UPDATE`,\n { id: input.id },\n executeOptions(),\n );\n const row = rows(result)[0];\n if (!row) {\n assertRowsAffected(0, 'UPDATE_OM_CONFIG', input.id);\n }\n\n const existing = parseJson(row?.config);\n const merged = ctx.deepMergeConfig(existing, input.config);\n const updateResult = await connection.execute(\n `UPDATE ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)}\n SET config = :config,\n ${OM_UPDATED_AT} = :updatedAt\n WHERE id = :id`,\n { id: input.id, config: jsonBind(merged), updatedAt: new Date() },\n );\n assertRowsAffected(updateResult.rowsAffected, 'UPDATE_OM_CONFIG', input.id);\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError('UPDATE_OM_CONFIG', 'FAILED', { id: input.id }, error);\n }\n}\n\nfunction getOMKey(threadId: string | null, resourceId: string): string {\n return threadId ? `thread:${threadId}` : `resource:${resourceId}`;\n}\n\nexport async function insertOMRecord(\n ctx: MemoryContext,\n connection: Connection,\n record: ObservationalMemoryRecord,\n timestamp = record.createdAt,\n): Promise<void> {\n // Store free-form observations/reflections as CLOBs while keeping config,\n // ids, chunks, and counters typed for runtime queries and state transitions.\n await connection.execute(\n `\n INSERT INTO ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)} (\n id,\n ${OM_LOOKUP_KEY},\n ${OM_SCOPE},\n ${OM_RESOURCE_ID},\n ${OM_THREAD_ID},\n ${OM_ACTIVE_OBSERVATIONS},\n ${OM_ACTIVE_OBSERVATIONS_PENDING_UPDATE},\n ${OM_ORIGIN_TYPE},\n config,\n ${OM_GENERATION_COUNT},\n ${OM_LAST_OBSERVED_AT},\n ${OM_LAST_REFLECTION_AT},\n ${OM_PENDING_MESSAGE_TOKENS},\n ${OM_TOTAL_TOKENS_OBSERVED},\n ${OM_OBSERVATION_TOKEN_COUNT},\n ${OM_OBSERVED_MESSAGE_IDS},\n ${OM_OBSERVED_TIMEZONE},\n ${OM_BUFFERED_OBSERVATIONS},\n ${OM_BUFFERED_OBSERVATION_TOKENS},\n ${OM_BUFFERED_MESSAGE_IDS},\n ${OM_BUFFERED_REFLECTION},\n ${OM_BUFFERED_REFLECTION_TOKENS},\n ${OM_BUFFERED_REFLECTION_INPUT_TOKENS},\n ${OM_REFLECTED_OBSERVATION_LINE_COUNT},\n ${OM_BUFFERED_OBSERVATION_CHUNKS},\n ${OM_IS_OBSERVING},\n ${OM_IS_REFLECTING},\n ${OM_IS_BUFFERING_OBSERVATION},\n ${OM_IS_BUFFERING_REFLECTION},\n ${OM_LAST_BUFFERED_AT_TOKENS},\n ${OM_LAST_BUFFERED_AT_TIME},\n metadata,\n ${OM_CREATED_AT},\n ${OM_UPDATED_AT}\n ) VALUES (\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 :observedMessageIds,\n :observedTimezone,\n :bufferedObservations,\n :bufferedObservationTokens,\n :bufferedMessageIds,\n :bufferedReflection,\n :bufferedReflectionTokens,\n :bufferedReflectionInputTokens,\n :reflectedObservationLineCount,\n :bufferedObservationChunks,\n :isObserving,\n :isReflecting,\n :isBufferingObservation,\n :isBufferingReflection,\n :lastBufferedAtTokens,\n :lastBufferedAtTime,\n :metadata,\n :createdAt,\n :updatedAt\n )`,\n {\n id: record.id,\n lookupKey: getOMKey(record.threadId, record.resourceId),\n scope: record.scope,\n resourceId: record.resourceId,\n threadId: record.threadId ?? null,\n activeObservations: nullableClobBind(record.activeObservations ?? ''),\n activeObservationsPendingUpdate: nullableClobBind(record.bufferedObservations),\n originType: record.originType ?? 'initial',\n config: jsonBind(record.config ?? {}),\n generationCount: record.generationCount ?? 0,\n lastObservedAt: record.lastObservedAt ?? null,\n lastReflectionAt: record.originType === 'reflection' ? timestamp : null,\n pendingMessageTokens: Math.round(record.pendingMessageTokens ?? 0),\n totalTokensObserved: Math.round(record.totalTokensObserved ?? 0),\n observationTokenCount: Math.round(record.observationTokenCount ?? 0),\n observedMessageIds: nullableJsonBind(record.observedMessageIds),\n observedTimezone: record.observedTimezone ?? null,\n bufferedObservations: nullableClobBind(record.bufferedObservations),\n bufferedObservationTokens: record.bufferedObservationTokens ?? null,\n bufferedMessageIds: nullableJsonBind(record.bufferedMessageIds),\n bufferedReflection: nullableClobBind(record.bufferedReflection),\n bufferedReflectionTokens: record.bufferedReflectionTokens ?? null,\n bufferedReflectionInputTokens: record.bufferedReflectionInputTokens ?? null,\n reflectedObservationLineCount: record.reflectedObservationLineCount ?? null,\n bufferedObservationChunks: nullableJsonBind(record.bufferedObservationChunks),\n isObserving: boolToNumber(record.isObserving),\n isReflecting: boolToNumber(record.isReflecting),\n isBufferingObservation: boolToNumber(record.isBufferingObservation),\n isBufferingReflection: boolToNumber(record.isBufferingReflection),\n lastBufferedAtTokens: Math.round(record.lastBufferedAtTokens ?? 0),\n lastBufferedAtTime: record.lastBufferedAtTime ?? null,\n metadata: nullableJsonBind(record.metadata),\n createdAt: record.createdAt,\n updatedAt: record.updatedAt,\n },\n );\n}\n\nasync function updateOMFlag(\n ctx: MemoryContext,\n id: string,\n column: string,\n value: boolean,\n operation: string,\n): Promise<void> {\n try {\n await updateOMColumns(ctx, id, operation, { [column]: boolToNumber(value) });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError(operation, 'FAILED', { id, value }, error);\n }\n}\n\nasync function updateOMColumns(\n ctx: MemoryContext,\n id: string,\n operation: string,\n columns: Record<string, unknown>,\n): Promise<void> {\n await ctx.db.tx(async (_client, connection) => {\n const setParts = Object.keys(columns).map((column, index) => `${column} = :value${index}`);\n const binds = Object.fromEntries(Object.values(columns).map((value, index) => [`value${index}`, value]));\n const result = await connection.execute(\n `UPDATE ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)}\n SET ${setParts.join(', ')},\n ${OM_UPDATED_AT} = :updatedAt\n WHERE id = :id`,\n { ...binds, id, updatedAt: new Date() },\n );\n assertRowsAffected(result.rowsAffected, operation, id);\n });\n}\n\nexport function omSelect(): string {\n return `SELECT\n id AS \"id\",\n ${OM_LOOKUP_KEY} AS \"lookupKey\",\n ${OM_SCOPE} AS \"scope\",\n ${OM_RESOURCE_ID} AS \"resourceId\",\n ${OM_THREAD_ID} AS \"threadId\",\n ${OM_ACTIVE_OBSERVATIONS} AS \"activeObservations\",\n ${OM_ACTIVE_OBSERVATIONS_PENDING_UPDATE} AS \"activeObservationsPendingUpdate\",\n ${OM_ORIGIN_TYPE} AS \"originType\",\n config AS \"config\",\n ${OM_GENERATION_COUNT} AS \"generationCount\",\n ${OM_LAST_OBSERVED_AT} AS \"lastObservedAt\",\n ${OM_LAST_REFLECTION_AT} AS \"lastReflectionAt\",\n ${OM_PENDING_MESSAGE_TOKENS} AS \"pendingMessageTokens\",\n ${OM_TOTAL_TOKENS_OBSERVED} AS \"totalTokensObserved\",\n ${OM_OBSERVATION_TOKEN_COUNT} AS \"observationTokenCount\",\n ${OM_IS_OBSERVING} AS \"isObserving\",\n ${OM_IS_REFLECTING} AS \"isReflecting\",\n ${OM_OBSERVED_MESSAGE_IDS} AS \"observedMessageIds\",\n ${OM_OBSERVED_TIMEZONE} AS \"observedTimezone\",\n ${OM_BUFFERED_OBSERVATIONS} AS \"bufferedObservations\",\n ${OM_BUFFERED_OBSERVATION_TOKENS} AS \"bufferedObservationTokens\",\n ${OM_BUFFERED_MESSAGE_IDS} AS \"bufferedMessageIds\",\n ${OM_BUFFERED_REFLECTION} AS \"bufferedReflection\",\n ${OM_BUFFERED_REFLECTION_TOKENS} AS \"bufferedReflectionTokens\",\n ${OM_BUFFERED_REFLECTION_INPUT_TOKENS} AS \"bufferedReflectionInputTokens\",\n ${OM_REFLECTED_OBSERVATION_LINE_COUNT} AS \"reflectedObservationLineCount\",\n ${OM_BUFFERED_OBSERVATION_CHUNKS} AS \"bufferedObservationChunks\",\n ${OM_IS_BUFFERING_OBSERVATION} AS \"isBufferingObservation\",\n ${OM_IS_BUFFERING_REFLECTION} AS \"isBufferingReflection\",\n ${OM_LAST_BUFFERED_AT_TOKENS} AS \"lastBufferedAtTokens\",\n ${OM_LAST_BUFFERED_AT_TIME} AS \"lastBufferedAtTime\",\n metadata AS \"metadata\",\n ${OM_CREATED_AT} AS \"createdAt\",\n ${OM_UPDATED_AT} AS \"updatedAt\"`;\n}\n\nexport function parseOMRow(row: ObservationalMemoryRow): ObservationalMemoryRecord {\n return {\n id: String(row.id),\n scope: row.scope,\n threadId: row.threadId === null || row.threadId === undefined ? null : String(row.threadId),\n resourceId: String(row.resourceId),\n createdAt: toDate(row.createdAt),\n updatedAt: toDate(row.updatedAt),\n lastObservedAt: row.lastObservedAt ? toDate(row.lastObservedAt) : undefined,\n originType: row.originType ?? 'initial',\n generationCount: numberOrZero(row.generationCount),\n activeObservations: stringOrEmpty(row.activeObservations),\n bufferedObservationChunks: parseBufferedChunks(row.bufferedObservationChunks),\n bufferedObservations: emptyToUndefined(row.bufferedObservations ?? row.activeObservationsPendingUpdate),\n bufferedObservationTokens: optionalNumber(row.bufferedObservationTokens),\n bufferedMessageIds: parseOptionalStringArray(row.bufferedMessageIds),\n bufferedReflection: emptyToUndefined(row.bufferedReflection),\n bufferedReflectionTokens: optionalNumber(row.bufferedReflectionTokens),\n bufferedReflectionInputTokens: optionalNumber(row.bufferedReflectionInputTokens),\n reflectedObservationLineCount: optionalNumber(row.reflectedObservationLineCount),\n totalTokensObserved: numberOrZero(row.totalTokensObserved),\n observationTokenCount: numberOrZero(row.observationTokenCount),\n pendingMessageTokens: numberOrZero(row.pendingMessageTokens),\n isReflecting: toBoolean(row.isReflecting),\n isObserving: toBoolean(row.isObserving),\n isBufferingObservation: toBoolean(row.isBufferingObservation),\n isBufferingReflection: toBoolean(row.isBufferingReflection),\n lastBufferedAtTokens: numberOrZero(row.lastBufferedAtTokens),\n lastBufferedAtTime: row.lastBufferedAtTime ? toDate(row.lastBufferedAtTime) : null,\n config: parseJson(row.config),\n metadata: parseOptionalJsonObject(row.metadata, { emptyObjectAsUndefined: true }),\n observedMessageIds: parseOptionalStringArray(row.observedMessageIds),\n observedTimezone: row.observedTimezone ? String(row.observedTimezone) : undefined,\n };\n}\n","import { randomUUID } from 'node:crypto';\n\nimport { ErrorCategory, MastraError } from '@mastra/core/error';\nimport { TABLE_OBSERVATIONAL_MEMORY } from '@mastra/core/storage';\nimport type {\n BufferedObservationChunk,\n ObservationalMemoryRecord,\n SwapBufferedReflectionToActiveInput,\n SwapBufferedToActiveInput,\n SwapBufferedToActiveResult,\n UpdateBufferedObservationsInput,\n UpdateBufferedReflectionInput,\n} from '@mastra/core/storage';\nimport type { Connection } from 'oracledb';\n\nimport { asBindParameters, executeOptions, nullableClobBind, nullableJsonBind, rows } from '../../../shared/connection';\nimport type { ObjectRow } from '../../../shared/connection';\nimport { toDate } from '../../domain-utils';\nimport { insertOMRecord, omSelect, parseOMRow } from './observational';\nimport type { ObservationalMemoryRow } from './observational';\nimport {\n OM_ACTIVE_OBSERVATIONS,\n OM_BUFFERED_OBSERVATION_CHUNKS,\n OM_BUFFERED_REFLECTION,\n OM_BUFFERED_REFLECTION_INPUT_TOKENS,\n OM_BUFFERED_REFLECTION_TOKENS,\n OM_LAST_BUFFERED_AT_TIME,\n OM_LAST_OBSERVED_AT,\n OM_OBSERVATION_TOKEN_COUNT,\n OM_PENDING_MESSAGE_TOKENS,\n OM_REFLECTED_OBSERVATION_LINE_COUNT,\n OM_UPDATED_AT,\n} from './schema';\nimport { assertRowsAffected, numberOrZero, parseBufferedChunks, storageError, stringOrEmpty, table } from './utils';\nimport type { MemoryContext } from './utils';\n\n// Async buffering/reflection workflow: observations and reflections generated\n// off the hot path accumulate here before being swapped into active state.\n// Depends on observational.ts for the row shape, SELECT clause, and insert helper.\n\nexport async function updateBufferedObservations(\n ctx: MemoryContext,\n input: UpdateBufferedObservationsInput,\n): Promise<void> {\n try {\n await ctx.db.tx(async (_client, connection) => {\n const row = await lockOMRow(ctx, connection, input.id, 'UPDATE_BUFFERED_OBSERVATIONS');\n const existingChunks = parseBufferedChunks(row.bufferedObservationChunks);\n // Buffer chunks let long observation cycles append safely without\n // rewriting the active observation CLOB on every small update.\n const newChunk: BufferedObservationChunk = {\n id: `ombuf-${randomUUID()}`,\n cycleId: input.chunk.cycleId,\n observations: input.chunk.observations,\n tokenCount: Math.round(input.chunk.tokenCount),\n messageIds: input.chunk.messageIds,\n messageTokens: Math.round(input.chunk.messageTokens ?? 0),\n lastObservedAt: input.chunk.lastObservedAt,\n createdAt: new Date(),\n suggestedContinuation: input.chunk.suggestedContinuation,\n currentTask: input.chunk.currentTask,\n threadTitle: input.chunk.threadTitle,\n extractedValues: input.chunk.extractedValues,\n extractionFailures: input.chunk.extractionFailures,\n };\n const updatedChunks = [...existingChunks, newChunk];\n const lastBufferedAtTimeSql =\n input.lastBufferedAtTime === undefined || input.lastBufferedAtTime === null\n ? ''\n : `,\\n ${OM_LAST_BUFFERED_AT_TIME} = :lastBufferedAtTime`;\n const binds: Record<string, unknown> = {\n id: input.id,\n bufferedObservationChunks: nullableJsonBind(updatedChunks),\n updatedAt: new Date(),\n };\n if (input.lastBufferedAtTime !== undefined && input.lastBufferedAtTime !== null) {\n binds.lastBufferedAtTime = toDate(input.lastBufferedAtTime);\n }\n\n const result = await connection.execute(\n `UPDATE ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)}\n SET ${OM_BUFFERED_OBSERVATION_CHUNKS} = :bufferedObservationChunks,\n ${OM_UPDATED_AT} = :updatedAt${lastBufferedAtTimeSql}\n WHERE id = :id`,\n asBindParameters(binds),\n );\n assertRowsAffected(result.rowsAffected, 'UPDATE_BUFFERED_OBSERVATIONS', input.id);\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError('UPDATE_BUFFERED_OBSERVATIONS', 'FAILED', { id: input.id }, error);\n }\n}\n\nexport async function swapBufferedToActive(\n ctx: MemoryContext,\n input: SwapBufferedToActiveInput,\n): Promise<SwapBufferedToActiveResult> {\n try {\n return await ctx.db.tx(async (_client, connection) => {\n const row = await lockOMRow(ctx, connection, input.id, 'SWAP_BUFFERED_TO_ACTIVE');\n const chunks = input.bufferedChunks?.length\n ? input.bufferedChunks\n : parseBufferedChunks(row.bufferedObservationChunks);\n\n if (chunks.length === 0) {\n return emptySwapResult();\n }\n\n const activation = calculateBufferedActivation(chunks, input);\n const lastObservedAt =\n input.lastObservedAt ??\n (activation.activatedChunks.at(-1)?.lastObservedAt\n ? toDate(activation.activatedChunks.at(-1)!.lastObservedAt)\n : new Date());\n const boundary = `\\n\\n--- message boundary (${lastObservedAt.toISOString()}) ---\\n\\n`;\n // Keep each activated chunk readable inside one CLOB while preserving the observation timestamp boundary.\n const existingActive = stringOrEmpty(row.activeObservations);\n const newActive = existingActive\n ? `${existingActive}${boundary}${activation.activatedContent}`\n : activation.activatedContent;\n const pendingTokens = Math.max(0, numberOrZero(row.pendingMessageTokens) - activation.activatedMessageTokens);\n\n const result = await connection.execute(\n `UPDATE ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)}\n SET ${OM_ACTIVE_OBSERVATIONS} = :activeObservations,\n ${OM_OBSERVATION_TOKEN_COUNT} = COALESCE(${OM_OBSERVATION_TOKEN_COUNT}, 0) + :observationTokens,\n ${OM_PENDING_MESSAGE_TOKENS} = :pendingMessageTokens,\n ${OM_BUFFERED_OBSERVATION_CHUNKS} = :bufferedObservationChunks,\n ${OM_LAST_OBSERVED_AT} = :lastObservedAt,\n ${OM_UPDATED_AT} = :updatedAt\n WHERE id = :id`,\n {\n id: input.id,\n activeObservations: nullableClobBind(newActive),\n observationTokens: activation.activatedTokens,\n pendingMessageTokens: pendingTokens,\n bufferedObservationChunks: nullableJsonBind(\n activation.remainingChunks.length > 0 ? activation.remainingChunks : null,\n ),\n lastObservedAt,\n updatedAt: new Date(),\n },\n );\n assertRowsAffected(result.rowsAffected, 'SWAP_BUFFERED_TO_ACTIVE', input.id);\n\n return activation.result;\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError('SWAP_BUFFERED_TO_ACTIVE', 'FAILED', { id: input.id }, error);\n }\n}\n\nexport async function updateBufferedReflection(\n ctx: MemoryContext,\n input: UpdateBufferedReflectionInput,\n): Promise<void> {\n try {\n await ctx.db.tx(async (_client, connection) => {\n const result = await connection.execute(\n `UPDATE ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)}\n SET ${OM_BUFFERED_REFLECTION} = CASE\n WHEN ${OM_BUFFERED_REFLECTION} IS NOT NULL AND DBMS_LOB.GETLENGTH(${OM_BUFFERED_REFLECTION}) > 0\n THEN ${OM_BUFFERED_REFLECTION} || CHR(10) || CHR(10) || :reflection\n ELSE :reflection\n END,\n ${OM_BUFFERED_REFLECTION_TOKENS} = COALESCE(${OM_BUFFERED_REFLECTION_TOKENS}, 0) + :tokenCount,\n ${OM_BUFFERED_REFLECTION_INPUT_TOKENS} = COALESCE(${OM_BUFFERED_REFLECTION_INPUT_TOKENS}, 0) + :inputTokenCount,\n ${OM_REFLECTED_OBSERVATION_LINE_COUNT} = :reflectedObservationLineCount,\n ${OM_UPDATED_AT} = :updatedAt\n WHERE id = :id`,\n {\n id: input.id,\n reflection: nullableClobBind(input.reflection),\n tokenCount: Math.round(input.tokenCount),\n inputTokenCount: Math.round(input.inputTokenCount),\n reflectedObservationLineCount: Math.round(input.reflectedObservationLineCount),\n updatedAt: new Date(),\n },\n );\n assertRowsAffected(result.rowsAffected, 'UPDATE_BUFFERED_REFLECTION', input.id);\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError('UPDATE_BUFFERED_REFLECTION', 'FAILED', { id: input.id }, error);\n }\n}\n\nexport async function swapBufferedReflectionToActive(\n ctx: MemoryContext,\n input: SwapBufferedReflectionToActiveInput,\n): Promise<ObservationalMemoryRecord> {\n try {\n return await ctx.db.tx(async (_client, connection) => {\n const row = await lockOMRow(ctx, connection, input.currentRecord.id, 'SWAP_BUFFERED_REFLECTION_TO_ACTIVE');\n const bufferedReflection = stringOrEmpty(row.bufferedReflection);\n if (!bufferedReflection) {\n throw storageError(\n 'SWAP_BUFFERED_REFLECTION_TO_ACTIVE',\n 'NO_CONTENT',\n { id: input.currentRecord.id },\n new Error('No buffered reflection to swap'),\n ErrorCategory.USER,\n );\n }\n\n const reflectedLineCount = numberOrZero(row.reflectedObservationLineCount);\n const currentObservations = stringOrEmpty(row.activeObservations);\n // The buffered reflection replaces the lines it summarized, but any\n // observations added after reflection started are preserved below it.\n const unreflectedContent = currentObservations.split('\\n').slice(reflectedLineCount).join('\\n').trim();\n const newObservations = unreflectedContent\n ? `${bufferedReflection}\\n\\n${unreflectedContent}`\n : bufferedReflection;\n const now = new Date();\n // Derive the carried-over fields from the row we just locked (FOR UPDATE\n // above) instead of input.currentRecord, which can be stale if another\n // writer updated generationCount/config/metadata/etc. concurrently.\n const lockedRecord = parseOMRow(row);\n const newRecord: ObservationalMemoryRecord = {\n id: randomUUID(),\n scope: lockedRecord.scope,\n threadId: lockedRecord.threadId,\n resourceId: lockedRecord.resourceId,\n createdAt: now,\n updatedAt: now,\n lastObservedAt: lockedRecord.lastObservedAt,\n originType: 'reflection',\n generationCount: lockedRecord.generationCount + 1,\n activeObservations: newObservations,\n totalTokensObserved: lockedRecord.totalTokensObserved,\n observationTokenCount: Math.round(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: lockedRecord.config,\n metadata: lockedRecord.metadata,\n observedTimezone: lockedRecord.observedTimezone,\n };\n\n await insertOMRecord(ctx, connection, newRecord, now);\n const updateResult = await connection.execute(\n `UPDATE ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)}\n SET ${OM_BUFFERED_REFLECTION} = NULL,\n ${OM_BUFFERED_REFLECTION_TOKENS} = NULL,\n ${OM_BUFFERED_REFLECTION_INPUT_TOKENS} = NULL,\n ${OM_REFLECTED_OBSERVATION_LINE_COUNT} = NULL,\n ${OM_UPDATED_AT} = :updatedAt\n WHERE id = :id`,\n { id: input.currentRecord.id, updatedAt: now },\n );\n assertRowsAffected(updateResult.rowsAffected, 'SWAP_BUFFERED_REFLECTION_TO_ACTIVE', input.currentRecord.id);\n\n return newRecord;\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError('SWAP_BUFFERED_REFLECTION_TO_ACTIVE', 'FAILED', { id: input.currentRecord.id }, error);\n }\n}\n\nasync function lockOMRow(\n ctx: MemoryContext,\n connection: Connection,\n id: string,\n operation: string,\n): Promise<ObservationalMemoryRow> {\n // Observational memory updates are incremental and order-sensitive, so\n // mutating paths derive their next state from a locked row.\n const result = await connection.execute<ObjectRow>(\n `${omSelect()} FROM ${table(ctx, TABLE_OBSERVATIONAL_MEMORY)} WHERE id = :id FOR UPDATE`,\n { id },\n executeOptions(),\n );\n const row = rows(result)[0] as ObservationalMemoryRow | undefined;\n if (!row) {\n assertRowsAffected(0, operation, id);\n throw new Error(`Observational memory record not found: ${id}`);\n }\n return row;\n}\n\nfunction emptySwapResult(): SwapBufferedToActiveResult {\n return {\n chunksActivated: 0,\n messageTokensActivated: 0,\n observationTokensActivated: 0,\n messagesActivated: 0,\n activatedCycleIds: [],\n activatedMessageIds: [],\n };\n}\n\nfunction calculateBufferedActivation(\n chunks: BufferedObservationChunk[],\n input: SwapBufferedToActiveInput,\n): {\n activatedChunks: BufferedObservationChunk[];\n remainingChunks: BufferedObservationChunk[];\n activatedContent: string;\n activatedTokens: number;\n activatedMessageTokens: number;\n result: SwapBufferedToActiveResult;\n} {\n const retentionFloor = input.messageTokensThreshold * (1 - input.activationRatio);\n const targetMessageTokens = Math.max(0, input.currentPendingTokens - retentionFloor);\n\n let cumulativeMessageTokens = 0;\n let bestOverBoundary = 0;\n let bestOverTokens = 0;\n let bestUnderBoundary = 0;\n let bestUnderTokens = 0;\n\n for (let index = 0; index < chunks.length; index += 1) {\n cumulativeMessageTokens += chunks[index]?.messageTokens ?? 0;\n const boundary = index + 1;\n\n if (cumulativeMessageTokens >= targetMessageTokens) {\n if (bestOverBoundary === 0 || cumulativeMessageTokens < bestOverTokens) {\n bestOverBoundary = boundary;\n bestOverTokens = cumulativeMessageTokens;\n }\n } else if (cumulativeMessageTokens > bestUnderTokens) {\n bestUnderBoundary = boundary;\n bestUnderTokens = cumulativeMessageTokens;\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 const activatedChunks = chunks.slice(0, chunksToActivate);\n const remainingChunks = chunks.slice(chunksToActivate);\n const activatedContent = activatedChunks.map(chunk => chunk.observations).join('\\n\\n');\n const activatedTokens = Math.round(activatedChunks.reduce((sum, chunk) => sum + chunk.tokenCount, 0));\n const activatedMessageTokens = Math.round(\n activatedChunks.reduce((sum, chunk) => sum + (chunk.messageTokens ?? 0), 0),\n );\n const activatedMessageIds = activatedChunks.flatMap(chunk => chunk.messageIds ?? []);\n const latestChunkHints = activatedChunks.at(-1);\n\n return {\n activatedChunks,\n remainingChunks,\n activatedContent,\n activatedTokens,\n activatedMessageTokens,\n result: {\n chunksActivated: activatedChunks.length,\n messageTokensActivated: activatedMessageTokens,\n observationTokensActivated: activatedTokens,\n messagesActivated: activatedChunks.reduce((sum, chunk) => sum + (chunk.messageIds?.length ?? 0), 0),\n activatedCycleIds: activatedChunks.map(chunk => chunk.cycleId).filter(Boolean),\n activatedMessageIds,\n observations: activatedContent,\n perChunk: activatedChunks.map(chunk => ({\n cycleId: chunk.cycleId ?? '',\n messageTokens: chunk.messageTokens ?? 0,\n observationTokens: chunk.tokenCount,\n messageCount: chunk.messageIds?.length ?? 0,\n observations: chunk.observations,\n })),\n suggestedContinuation: latestChunkHints?.suggestedContinuation,\n currentTask: latestChunkHints?.currentTask,\n },\n };\n}\n","import { MastraError } from '@mastra/core/error';\nimport type { StorageResourceType } from '@mastra/core/storage';\nimport { TABLE_RESOURCES } from '@mastra/core/storage';\nimport type { Connection } from 'oracledb';\n\nimport { executeOptions, jsonBind, rows } from '../../../shared/connection';\nimport type { ObjectRow } from '../../../shared/connection';\nimport { toDate } from '../../domain-utils';\nimport { RESOURCE_CREATED_AT, RESOURCE_UPDATED_AT, RESOURCE_WORKING_MEMORY } from './schema';\nimport { optionalClobStringBind, parseJson, parseOptionalString, storageError, table } from './utils';\nimport type { MemoryContext } from './utils';\n\n// Resource working memory: one row per resourceId, upserted the same way\n// threads are (title/metadata may not be known until after the first message).\n\ntype ResourceRow = {\n id: string;\n workingMemory?: unknown;\n metadata?: unknown;\n createdAt: Date | string;\n updatedAt: Date | string;\n};\n\nexport async function getResourceById(\n ctx: MemoryContext,\n { resourceId }: { resourceId: string },\n): Promise<StorageResourceType | null> {\n try {\n return await ctx.db.withConnection(async connection => {\n const result = await connection.execute<ObjectRow>(\n `${resourceSelect()} FROM ${table(ctx, TABLE_RESOURCES)} WHERE id = :resourceId`,\n { resourceId },\n executeOptions(),\n );\n const row = rows(result)[0] as ResourceRow | undefined;\n return row ? parseResource(row) : null;\n });\n } catch (error) {\n throw storageError('GET_RESOURCE_BY_ID', 'FAILED', { resourceId }, error);\n }\n}\n\nexport async function saveResource(\n ctx: MemoryContext,\n { resource }: { resource: StorageResourceType },\n): Promise<StorageResourceType> {\n try {\n await ctx.db.none(\n `\n MERGE INTO ${table(ctx, TABLE_RESOURCES)} target\n USING (\n SELECT\n :id AS id,\n :workingMemory AS working_memory,\n :metadata AS metadata,\n :createdAt AS created_at,\n :updatedAt AS updated_at\n FROM dual\n ) source\n ON (target.id = source.id)\n WHEN MATCHED THEN UPDATE SET\n target.${RESOURCE_WORKING_MEMORY} = source.working_memory,\n target.metadata = source.metadata,\n target.${RESOURCE_UPDATED_AT} = source.updated_at\n WHEN NOT MATCHED THEN INSERT (\n id,\n ${RESOURCE_WORKING_MEMORY},\n metadata,\n ${RESOURCE_CREATED_AT},\n ${RESOURCE_UPDATED_AT}\n ) VALUES (\n source.id,\n source.working_memory,\n source.metadata,\n source.created_at,\n source.updated_at\n )`,\n {\n id: resource.id,\n workingMemory: optionalClobStringBind(resource.workingMemory),\n metadata: jsonBind(resource.metadata ?? {}),\n createdAt: resource.createdAt ?? new Date(),\n updatedAt: resource.updatedAt ?? new Date(),\n },\n );\n return resource;\n } catch (error) {\n throw storageError('SAVE_RESOURCE', 'FAILED', { resourceId: resource.id }, error);\n }\n}\n\nexport async function updateResource(\n ctx: MemoryContext,\n {\n resourceId,\n workingMemory,\n metadata,\n }: {\n resourceId: string;\n workingMemory?: string;\n metadata?: Record<string, unknown>;\n },\n): Promise<StorageResourceType> {\n const existing = await ctx.getResourceById({ resourceId });\n if (!existing) {\n const resource: StorageResourceType = {\n id: resourceId,\n workingMemory,\n metadata: metadata ?? {},\n createdAt: new Date(),\n updatedAt: new Date(),\n };\n return ctx.saveResource({ resource });\n }\n\n try {\n return await ctx.db.tx(async (_client, connection) => {\n // Re-read under FOR UPDATE so a concurrent updateResource on the same id\n // cannot interleave between this lock and the MERGE below, which would\n // otherwise let one writer's workingMemory/metadata clobber the other's.\n const result = await connection.execute<ObjectRow>(\n `${resourceSelect()} FROM ${table(ctx, TABLE_RESOURCES)} WHERE id = :resourceId FOR UPDATE`,\n { resourceId },\n executeOptions(),\n );\n const row = rows(result)[0] as ResourceRow | undefined;\n const locked = row ? parseResource(row) : existing;\n\n const updated: StorageResourceType = {\n ...locked,\n workingMemory: workingMemory !== undefined ? workingMemory : locked.workingMemory,\n metadata: metadata ? { ...(locked.metadata ?? {}), ...metadata } : locked.metadata,\n updatedAt: new Date(),\n };\n\n await mergeResourceRow(ctx, connection, updated);\n return updated;\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError('UPDATE_RESOURCE', 'FAILED', { resourceId }, error);\n }\n}\n\n/**\n * Upserts one resource row against the given raw connection. Shared by\n * `saveResource` (auto-commit) and `updateResource`, which runs this inside\n * the SAME transaction as the FOR UPDATE lock above, so the merge sees and\n * replaces exactly the row it locked.\n */\nasync function mergeResourceRow(\n ctx: Pick<MemoryContext, 'schemaName'>,\n connection: Connection,\n resource: StorageResourceType,\n): Promise<void> {\n await connection.execute(\n `\n MERGE INTO ${table(ctx, TABLE_RESOURCES)} target\n USING (\n SELECT\n :id AS id,\n :workingMemory AS working_memory,\n :metadata AS metadata,\n :createdAt AS created_at,\n :updatedAt AS updated_at\n FROM dual\n ) source\n ON (target.id = source.id)\n WHEN MATCHED THEN UPDATE SET\n target.${RESOURCE_WORKING_MEMORY} = source.working_memory,\n target.metadata = source.metadata,\n target.${RESOURCE_UPDATED_AT} = source.updated_at\n WHEN NOT MATCHED THEN INSERT (\n id,\n ${RESOURCE_WORKING_MEMORY},\n metadata,\n ${RESOURCE_CREATED_AT},\n ${RESOURCE_UPDATED_AT}\n ) VALUES (\n source.id,\n source.working_memory,\n source.metadata,\n source.created_at,\n source.updated_at\n )`,\n {\n id: resource.id,\n workingMemory: optionalClobStringBind(resource.workingMemory),\n metadata: jsonBind(resource.metadata ?? {}),\n createdAt: resource.createdAt ?? new Date(),\n updatedAt: resource.updatedAt ?? new Date(),\n },\n );\n}\n\nfunction parseResource(row: ResourceRow): StorageResourceType {\n const workingMemory = parseOptionalString(row.workingMemory);\n return {\n id: String(row.id),\n workingMemory,\n metadata: parseJson(row.metadata),\n createdAt: toDate(row.createdAt),\n updatedAt: toDate(row.updatedAt),\n };\n}\n\nfunction resourceSelect(): string {\n return `SELECT id AS \"id\", ${RESOURCE_WORKING_MEMORY} AS \"workingMemory\", metadata AS \"metadata\", ${RESOURCE_CREATED_AT} AS \"createdAt\", ${RESOURCE_UPDATED_AT} AS \"updatedAt\"`;\n}\n","import { ErrorCategory, MastraError } from '@mastra/core/error';\nimport type { StorageThreadType } from '@mastra/core/memory';\nimport { calculatePagination, normalizePerPage, TABLE_MESSAGES, TABLE_THREADS } from '@mastra/core/storage';\nimport type { StorageListThreadsInput, StorageListThreadsOutput } from '@mastra/core/storage';\n\nimport { asBindParameters, executeOptions, jsonBind, rows } from '../../../shared/connection';\nimport type { ObjectRow } from '../../../shared/connection';\nimport { assertJsonPath } from '../../../vector/identifiers';\nimport type { OracleTxClient } from '../../db';\nimport { toDate } from '../../domain-utils';\nimport { THREAD_CREATED_AT, THREAD_RESOURCE_ID, THREAD_UPDATED_AT } from './schema';\nimport {\n deleteSemanticRecallVectors,\n optionalStringBind,\n paginationClause,\n parseJson,\n parseOptionalString,\n storageError,\n table,\n} from './utils';\nimport type { MemoryContext } from './utils';\n\n// Thread CRUD + listing. Thread deletion also sweeps semantic-recall vectors\n// and messages belonging to the thread (see utils.ts for the vector cleanup).\n\ntype ThreadRow = {\n id: string;\n resourceId: string;\n title?: string | null;\n metadata?: unknown;\n createdAt: Date | string;\n updatedAt: Date | string;\n};\n\nexport async function getThreadById(\n ctx: MemoryContext,\n { threadId, resourceId }: { threadId: string; resourceId?: string },\n): Promise<StorageThreadType | null> {\n try {\n return await ctx.db.withConnection(async connection => {\n const binds: Record<string, unknown> = { threadId };\n const conditions = ['id = :threadId'];\n if (resourceId !== undefined) {\n conditions.push(`${THREAD_RESOURCE_ID} = :resourceId`);\n binds.resourceId = resourceId;\n }\n\n const result = await connection.execute<ObjectRow>(\n `${threadSelect()} FROM ${table(ctx, TABLE_THREADS)} WHERE ${conditions.join(' AND ')}`,\n asBindParameters(binds),\n executeOptions(),\n );\n const row = rows(result)[0] as ThreadRow | undefined;\n return row ? parseThread(row) : null;\n });\n } catch (error) {\n throw storageError('GET_THREAD_BY_ID', 'FAILED', { threadId }, error);\n }\n}\n\nexport async function saveThread(\n ctx: MemoryContext,\n { thread }: { thread: StorageThreadType },\n): Promise<StorageThreadType> {\n try {\n await mergeThreadRow(ctx, ctx.db, thread);\n return thread;\n } catch (error) {\n throw storageError('SAVE_THREAD', 'FAILED', { threadId: thread.id }, error);\n }\n}\n\n/**\n * Upserts one thread row against the given client. Only `saveThread` may\n * upsert; `cloneThread` (memory/index.ts) uses the insert-only\n * `insertThreadRow` below so a concurrent clone can never overwrite an\n * existing destination thread.\n */\nexport async function mergeThreadRow(\n ctx: Pick<MemoryContext, 'schemaName'>,\n client: Pick<OracleTxClient, 'none'>,\n thread: StorageThreadType,\n): Promise<void> {\n // Upsert threads because titles and metadata are often produced after the\n // first message, while the thread id must remain stable for memory lookups.\n await client.none(\n `\n MERGE INTO ${table(ctx, TABLE_THREADS)} target\n USING (\n SELECT\n :id AS id,\n :resourceId AS resource_id,\n :title AS title,\n :metadata AS metadata,\n :createdAt AS created_at,\n :updatedAt AS updated_at\n FROM dual\n ) source\n ON (target.id = source.id)\n WHEN MATCHED THEN UPDATE SET\n target.${THREAD_RESOURCE_ID} = source.resource_id,\n target.title = source.title,\n target.metadata = source.metadata,\n target.${THREAD_UPDATED_AT} = source.updated_at\n WHEN NOT MATCHED THEN INSERT (\n id,\n ${THREAD_RESOURCE_ID},\n title,\n metadata,\n ${THREAD_CREATED_AT},\n ${THREAD_UPDATED_AT}\n ) VALUES (\n source.id,\n source.resource_id,\n source.title,\n source.metadata,\n source.created_at,\n source.updated_at\n )`,\n {\n id: thread.id,\n resourceId: thread.resourceId,\n title: optionalStringBind(thread.title),\n metadata: jsonBind(thread.metadata ?? {}),\n createdAt: thread.createdAt ?? new Date(),\n updatedAt: thread.updatedAt ?? new Date(),\n },\n );\n}\n\n/**\n * Insert-only variant of `mergeThreadRow` for `cloneThread` (memory/index.ts).\n * The clone destination must be brand new, so an existing row has to fail the\n * INSERT (ORA-00001) — which the caller translates to DESTINATION_EXISTS —\n * instead of being silently updated by a MERGE. Runs against the caller's\n * transaction client, alongside the cloned-messages insert, so a failure\n * partway through rolls back the whole clone.\n */\nexport async function insertThreadRow(\n ctx: Pick<MemoryContext, 'schemaName'>,\n client: Pick<OracleTxClient, 'none'>,\n thread: StorageThreadType,\n): Promise<void> {\n await client.none(\n `\n INSERT INTO ${table(ctx, TABLE_THREADS)} (\n id,\n ${THREAD_RESOURCE_ID},\n title,\n metadata,\n ${THREAD_CREATED_AT},\n ${THREAD_UPDATED_AT}\n ) VALUES (\n :id,\n :resourceId,\n :title,\n :metadata,\n :createdAt,\n :updatedAt\n )`,\n {\n id: thread.id,\n resourceId: thread.resourceId,\n title: optionalStringBind(thread.title),\n metadata: jsonBind(thread.metadata ?? {}),\n createdAt: thread.createdAt ?? new Date(),\n updatedAt: thread.updatedAt ?? new Date(),\n },\n );\n}\n\nexport async function updateThread(\n ctx: MemoryContext,\n {\n id,\n title,\n metadata,\n }: {\n id: string;\n title?: string;\n metadata?: Record<string, unknown>;\n },\n): Promise<StorageThreadType> {\n const existingThread = await ctx.getThreadById({ threadId: id });\n if (!existingThread) {\n throw storageError(\n 'UPDATE_THREAD',\n 'FAILED',\n { threadId: id, title },\n new Error(`Thread ${id} not found`),\n ErrorCategory.USER,\n );\n }\n\n const mergedMetadata = { ...(existingThread.metadata ?? {}), ...metadata };\n const updatedAt = new Date();\n\n try {\n await ctx.db.none(\n `\n UPDATE ${table(ctx, TABLE_THREADS)}\n SET title = COALESCE(:title, title),\n metadata = :metadata,\n ${THREAD_UPDATED_AT} = :updatedAt\n WHERE id = :id`,\n {\n id,\n title: optionalStringBind(title),\n metadata: jsonBind(mergedMetadata),\n updatedAt,\n },\n );\n\n const updatedThread = await ctx.getThreadById({ threadId: id });\n if (!updatedThread) {\n throw storageError(\n 'UPDATE_THREAD',\n 'FAILED',\n { threadId: id, title },\n new Error(`Thread ${id} not found after update`),\n );\n }\n return updatedThread;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError('UPDATE_THREAD', 'FAILED', { threadId: id, title }, error);\n }\n}\n\nexport async function deleteThread(ctx: MemoryContext, { threadId }: { threadId: string }): Promise<void> {\n try {\n await ctx.db.tx(async client => {\n await client.none(`DELETE FROM ${table(ctx, TABLE_MESSAGES)} WHERE thread_id = :threadId`, { threadId });\n // Semantic recall stores embeddings outside the messages table; delete\n // those vector rows in the same transaction as thread/message cleanup.\n await deleteSemanticRecallVectors(ctx, client, threadId);\n await client.none(`DELETE FROM ${table(ctx, TABLE_THREADS)} WHERE id = :threadId`, { threadId });\n });\n } catch (error) {\n throw storageError('DELETE_THREAD', 'FAILED', { threadId }, error);\n }\n}\n\nexport async function listThreads(\n ctx: MemoryContext,\n args: StorageListThreadsInput,\n): Promise<StorageListThreadsOutput> {\n const { page = 0, perPage: perPageInput, orderBy, filter } = args;\n\n try {\n ctx.validatePaginationInput(page, perPageInput ?? 100);\n ctx.validateMetadataKeys(filter?.metadata);\n } catch (error) {\n throw storageError('LIST_THREADS', 'INVALID_INPUT', { page }, error, ErrorCategory.USER);\n }\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n try {\n return await ctx.db.withConnection(async connection => {\n const { field, direction } = ctx.parseOrderBy(orderBy);\n const { sql: whereClause, binds } = threadWhereClause(filter);\n const baseQuery = `FROM ${table(ctx, TABLE_THREADS)} ${whereClause}`;\n // Count before fetching rows so the response can match Mastra's\n // pagination contract even when this page is empty.\n const countResult = await connection.execute<ObjectRow>(\n `SELECT COUNT(*) AS \"count\" ${baseQuery}`,\n asBindParameters(binds),\n executeOptions(),\n );\n const total = Number(rows(countResult)[0]?.count ?? 0);\n\n if (total === 0 || perPage === 0) {\n return { threads: [], total, page, perPage: perPageForResponse, hasMore: false };\n }\n\n const pagination = paginationClause(perPageInput, perPage, offset);\n const result = await connection.execute<ObjectRow>(\n `${threadSelect()} ${baseQuery} ORDER BY ${threadOrderColumn(field)} ${direction} ${pagination}`,\n asBindParameters(binds),\n executeOptions(),\n );\n const threads = rows(result).map(row => parseThread(row as ThreadRow));\n\n return {\n threads,\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n });\n } catch (error) {\n throw storageError('LIST_THREADS', 'FAILED', { page }, error);\n }\n}\n\nfunction threadWhereClause(filter?: StorageListThreadsInput['filter']): {\n sql: string;\n binds: Record<string, unknown>;\n} {\n const conditions: string[] = [];\n const binds: Record<string, unknown> = {};\n if (filter?.resourceId) {\n conditions.push(`${THREAD_RESOURCE_ID} = :resourceId`);\n binds.resourceId = filter.resourceId;\n }\n if (filter?.metadata) {\n let index = 0;\n for (const [key, value] of Object.entries(filter.metadata)) {\n const bindName = `metadata${index++}`;\n conditions.push(`${jsonValue('metadata', key, value)} = :${bindName}`);\n binds[bindName] = normalizeMetadataBind(value);\n }\n }\n return { sql: conditions.length ? `WHERE ${conditions.join(' AND ')}` : '', binds };\n}\n\nfunction jsonValue(column: string, path: string, comparisonValue: unknown): string {\n const jsonPath = assertJsonPath(path);\n if (typeof comparisonValue === 'number') {\n return `JSON_VALUE(${column}, '${jsonPath}' RETURNING NUMBER NULL ON ERROR)`;\n }\n return `JSON_VALUE(${column}, '${jsonPath}' RETURNING VARCHAR2(4000) NULL ON ERROR)`;\n}\n\nfunction normalizeMetadataBind(value: unknown): unknown {\n if (value instanceof Date) return value.toISOString();\n if (typeof value === 'boolean') return String(value);\n return value;\n}\n\nfunction parseThread(row: ThreadRow): StorageThreadType {\n return {\n id: String(row.id),\n resourceId: String(row.resourceId),\n title: parseOptionalString(row.title),\n metadata: parseJson(row.metadata),\n createdAt: toDate(row.createdAt),\n updatedAt: toDate(row.updatedAt),\n };\n}\n\nfunction threadSelect(): string {\n return `SELECT id AS \"id\", ${THREAD_RESOURCE_ID} AS \"resourceId\", title AS \"title\", metadata AS \"metadata\", ${THREAD_CREATED_AT} AS \"createdAt\", ${THREAD_UPDATED_AT} AS \"updatedAt\"`;\n}\n\nfunction threadOrderColumn(field: string): string {\n return field === 'updatedAt' ? THREAD_UPDATED_AT : THREAD_CREATED_AT;\n}\n","import { randomUUID } from 'node:crypto';\n\nimport type { MastraMessageContentV2 } from '@mastra/core/agent';\nimport { ErrorCategory, MastraError } from '@mastra/core/error';\nimport type { MastraDBMessage, StorageThreadType } from '@mastra/core/memory';\nimport {\n MemoryStorage,\n TABLE_MESSAGES,\n TABLE_OBSERVATIONAL_MEMORY,\n TABLE_RESOURCES,\n TABLE_THREADS,\n} from '@mastra/core/storage';\nimport type {\n CreateObservationalMemoryInput,\n CreateReflectionGenerationInput,\n ObservationalMemoryHistoryOptions,\n ObservationalMemoryRecord,\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 UpdateActiveObservationsInput,\n UpdateBufferedObservationsInput,\n UpdateBufferedReflectionInput,\n UpdateObservationalMemoryConfigInput,\n} from '@mastra/core/storage';\n\nimport { isOracleErrorCode, normalizeBatchSize } from '../../../shared/connection';\nimport { normalizeIdentifier } from '../../../vector/identifiers';\nimport { filterIndexesForTables, OracleDB } from '../../db';\nimport type { OracleCreateIndexOptions } from '../../db';\nimport type { OracleDomainConfig } from '../../types';\nimport {\n deleteMessages,\n insertMessageBatch,\n listMessages,\n listMessagesByResourceId,\n listMessagesById,\n saveMessages,\n updateMessages,\n} from './messages';\nimport {\n clearObservationalMemory,\n createReflectionGeneration,\n getObservationalMemory,\n getObservationalMemoryHistory,\n initializeObservationalMemory,\n insertObservationalMemoryRecord,\n setBufferingObservationFlag,\n setBufferingReflectionFlag,\n setObservingFlag,\n setPendingMessageTokens,\n setReflectingFlag,\n updateActiveObservations,\n updateObservationalMemoryConfig,\n} from './observational';\nimport {\n swapBufferedReflectionToActive,\n swapBufferedToActive,\n updateBufferedObservations,\n updateBufferedReflection,\n} from './observational-buffering';\nimport { getResourceById, saveResource, updateResource } from './resources';\nimport { clearAllMemoryTables, initMemorySchema } from './schema';\nimport { deleteThread, getThreadById, insertThreadRow, listThreads, saveThread, updateThread } from './threads';\nimport { storageError } from './utils';\nimport type { MemoryContext } from './utils';\n\n// Memory is the highest-traffic storage domain. It owns conversation threads,\n// messages, resources/working memory, and observational memory state. This\n// file is a thin facade: `MemoryOracle` builds the shared `MemoryContext` and\n// delegates to schema.ts / threads.ts / messages.ts / resources.ts /\n// observational.ts / observational-buffering.ts, which hold the actual SQL.\nconst DEFAULT_MESSAGE_SAVE_BATCH_SIZE = 200;\nconst DEFAULT_VECTOR_REGISTRY_TABLE = 'MASTRA_VECTOR_INDEXES';\n\nexport class MemoryOracle extends MemoryStorage {\n override readonly supportsPartialThreadUpdate = true;\n readonly supportsObservationalMemory = true;\n // Memory owns all tables needed for normal message history plus observational memory state.\n static readonly MANAGED_TABLES = [\n TABLE_THREADS,\n TABLE_MESSAGES,\n TABLE_RESOURCES,\n TABLE_OBSERVATIONAL_MEMORY,\n ] as const;\n\n private readonly db: OracleDB;\n private readonly schemaName?: string;\n private readonly messageBatchSize: number;\n private readonly skipDefaultIndexes?: boolean;\n private readonly indexes: OracleCreateIndexOptions[];\n private readonly vectorRegistryTableName: string;\n\n constructor(config: OracleDomainConfig) {\n super();\n this.db = new OracleDB(config);\n this.schemaName = config.schemaName;\n this.messageBatchSize = normalizeBatchSize(\n config.messageBatchSize,\n 'messageBatchSize',\n DEFAULT_MESSAGE_SAVE_BATCH_SIZE,\n );\n this.skipDefaultIndexes = config.skipDefaultIndexes;\n this.indexes = filterIndexesForTables(config.indexes, MemoryOracle.MANAGED_TABLES);\n this.vectorRegistryTableName = config.vectorRegistryTableName\n ? normalizeIdentifier(config.vectorRegistryTableName, 'vector registry table name')\n : DEFAULT_VECTOR_REGISTRY_TABLE;\n }\n\n // Built fresh on every call (not cached) so tests/callers that swap `db`\n // after construction, or a later `__setLogger`, are always honored.\n private get ctx(): MemoryContext {\n return {\n db: this.db,\n schemaName: this.schemaName,\n messageBatchSize: this.messageBatchSize,\n vectorRegistryTableName: this.vectorRegistryTableName,\n skipDefaultIndexes: this.skipDefaultIndexes,\n indexes: this.indexes,\n logger: this.logger,\n validatePaginationInput: this.validatePaginationInput.bind(this),\n validateMetadataKeys: this.validateMetadataKeys.bind(this),\n parseOrderBy: this.parseOrderBy.bind(this),\n deepMergeConfig: this.deepMergeConfig.bind(this),\n getThreadById: this.getThreadById.bind(this),\n listMessagesById: this.listMessagesById.bind(this),\n getResourceById: this.getResourceById.bind(this),\n saveResource: this.saveResource.bind(this),\n };\n }\n\n async init(): Promise<void> {\n await initMemorySchema(this.ctx);\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await clearAllMemoryTables(this.ctx);\n }\n\n async getThreadById(args: { threadId: string; resourceId?: string }): Promise<StorageThreadType | null> {\n return getThreadById(this.ctx, args);\n }\n\n async saveThread(args: { thread: StorageThreadType }): Promise<StorageThreadType> {\n return saveThread(this.ctx, args);\n }\n\n async updateThread(args: {\n id: string;\n title?: string;\n metadata?: Record<string, unknown>;\n }): Promise<StorageThreadType> {\n return updateThread(this.ctx, args);\n }\n\n async deleteThread(args: { threadId: string }): Promise<void> {\n return deleteThread(this.ctx, args);\n }\n\n async listThreads(args: StorageListThreadsInput): Promise<StorageListThreadsOutput> {\n return listThreads(this.ctx, args);\n }\n\n async listMessagesById(args: { messageIds: string[] }): Promise<{ messages: MastraDBMessage[] }> {\n return listMessagesById(this.ctx, args);\n }\n\n async listMessages(args: StorageListMessagesInput): Promise<StorageListMessagesOutput> {\n return listMessages(this.ctx, args);\n }\n\n async listMessagesByResourceId(args: StorageListMessagesByResourceIdInput): Promise<StorageListMessagesOutput> {\n return listMessagesByResourceId(this.ctx, args);\n }\n\n async saveMessages(args: { messages: MastraDBMessage[] }): Promise<{ messages: MastraDBMessage[] }> {\n return saveMessages(this.ctx, args);\n }\n\n async updateMessages(args: {\n messages: (Partial<Omit<MastraDBMessage, 'createdAt'>> & {\n id: string;\n content?: { metadata?: MastraMessageContentV2['metadata']; content?: MastraMessageContentV2['content'] };\n })[];\n }): Promise<MastraDBMessage[]> {\n return updateMessages(this.ctx, args);\n }\n\n async deleteMessages(messageIds: string[]): Promise<void> {\n return deleteMessages(this.ctx, messageIds);\n }\n\n async getResourceById(args: { resourceId: string }): Promise<StorageResourceType | null> {\n return getResourceById(this.ctx, args);\n }\n\n async saveResource(args: { resource: StorageResourceType }): Promise<StorageResourceType> {\n return saveResource(this.ctx, args);\n }\n\n async updateResource(args: {\n resourceId: string;\n workingMemory?: string;\n metadata?: Record<string, unknown>;\n }): Promise<StorageResourceType> {\n return updateResource(this.ctx, args);\n }\n\n async cloneThread(args: StorageCloneThreadInput): Promise<StorageCloneThreadOutput> {\n const sourceThread = await this.getThreadById({ threadId: args.sourceThreadId });\n if (!sourceThread) {\n throw storageError(\n 'CLONE_THREAD',\n 'FAILED',\n { threadId: args.sourceThreadId },\n new Error(`Thread ${args.sourceThreadId} not found`),\n ErrorCategory.USER,\n );\n }\n\n const sourceMessages = await this.messagesForClone(args);\n const newThreadId = args.newThreadId ?? randomUUID();\n const existingDestination = await this.getThreadById({ threadId: newThreadId });\n if (existingDestination) {\n throw storageError(\n 'CLONE_THREAD',\n 'DESTINATION_EXISTS',\n { threadId: newThreadId },\n new Error(`Thread ${newThreadId} already exists`),\n ErrorCategory.USER,\n );\n }\n const now = new Date();\n const cloneMetadata: ThreadCloneMetadata = {\n sourceThreadId: sourceThread.id,\n clonedAt: now,\n lastMessageId: sourceMessages.at(-1)?.id,\n };\n const thread: StorageThreadType = {\n id: newThreadId,\n resourceId: args.resourceId ?? sourceThread.resourceId,\n title: args.title ?? `${sourceThread.title ?? 'Thread'} (clone)`,\n metadata: { ...(sourceThread.metadata ?? {}), ...args.metadata, clone: cloneMetadata },\n createdAt: now,\n updatedAt: now,\n };\n\n const messageIdMap: Record<string, string> = {};\n // Preserve a source-to-clone id map so callers can reconnect tool calls,\n // UI selections, or traces to the cloned message ids.\n const clonedMessages = sourceMessages.map(message => {\n const newMessageId = randomUUID();\n messageIdMap[message.id] = newMessageId;\n return {\n ...message,\n id: newMessageId,\n threadId: newThreadId,\n resourceId: thread.resourceId,\n createdAt: new Date(message.createdAt),\n } satisfies MastraDBMessage;\n });\n\n try {\n // Insert the destination thread and its cloned messages in one\n // transaction: a failure partway through (e.g. a message insert error)\n // must not leave an orphaned, message-less clone of the thread committed.\n await this.db.tx(async client => {\n try {\n // Insert-only, never MERGE: the existence check above is only a\n // friendly fast path, so a concurrent clone that won the race must\n // surface here as a unique-key violation instead of silently\n // updating the winner's thread and mixing both message batches.\n await insertThreadRow(this.ctx, client, thread);\n } catch (error) {\n if (isOracleErrorCode(error, [-1])) {\n throw storageError(\n 'CLONE_THREAD',\n 'DESTINATION_EXISTS',\n { threadId: newThreadId },\n error,\n ErrorCategory.USER,\n );\n }\n throw error;\n }\n if (clonedMessages.length) await insertMessageBatch(this.ctx, client, clonedMessages);\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError('CLONE_THREAD', 'FAILED', { threadId: newThreadId }, error);\n }\n\n return { thread, clonedMessages, messageIdMap };\n }\n\n private async messagesForClone(args: StorageCloneThreadInput): Promise<MastraDBMessage[]> {\n const options = args.options;\n const messageIds = options?.messageFilter?.messageIds;\n if (messageIds?.length) {\n return (await this.listMessagesById({ messageIds })).messages.filter(\n message => message.threadId === args.sourceThreadId,\n );\n }\n\n const output = await this.listMessages({\n threadId: args.sourceThreadId,\n perPage: false,\n filter: {\n dateRange: {\n start: options?.messageFilter?.startDate,\n end: options?.messageFilter?.endDate,\n },\n },\n orderBy: { field: 'createdAt', direction: 'ASC' },\n });\n\n if (options?.messageLimit && options.messageLimit > 0) {\n return output.messages.slice(-options.messageLimit);\n }\n return output.messages;\n }\n\n // ============================================\n // Observational Memory\n // ============================================\n\n async getObservationalMemory(threadId: string | null, resourceId: string): Promise<ObservationalMemoryRecord | null> {\n return getObservationalMemory(this.ctx, threadId, resourceId);\n }\n\n async getObservationalMemoryHistory(\n threadId: string | null,\n resourceId: string,\n limit = 10,\n options?: ObservationalMemoryHistoryOptions,\n ): Promise<ObservationalMemoryRecord[]> {\n return getObservationalMemoryHistory(this.ctx, threadId, resourceId, limit, options);\n }\n\n async initializeObservationalMemory(input: CreateObservationalMemoryInput): Promise<ObservationalMemoryRecord> {\n return initializeObservationalMemory(this.ctx, input);\n }\n\n async insertObservationalMemoryRecord(record: ObservationalMemoryRecord): Promise<void> {\n return insertObservationalMemoryRecord(this.ctx, record);\n }\n\n async updateActiveObservations(input: UpdateActiveObservationsInput): Promise<void> {\n return updateActiveObservations(this.ctx, input);\n }\n\n async createReflectionGeneration(input: CreateReflectionGenerationInput): Promise<ObservationalMemoryRecord> {\n return createReflectionGeneration(this.ctx, input);\n }\n\n async setReflectingFlag(id: string, isReflecting: boolean): Promise<void> {\n return setReflectingFlag(this.ctx, id, isReflecting);\n }\n\n async setObservingFlag(id: string, isObserving: boolean): Promise<void> {\n return setObservingFlag(this.ctx, id, isObserving);\n }\n\n async setBufferingObservationFlag(id: string, isBuffering: boolean, lastBufferedAtTokens?: number): Promise<void> {\n return setBufferingObservationFlag(this.ctx, id, isBuffering, lastBufferedAtTokens);\n }\n\n async setBufferingReflectionFlag(id: string, isBuffering: boolean): Promise<void> {\n return setBufferingReflectionFlag(this.ctx, id, isBuffering);\n }\n\n async clearObservationalMemory(threadId: string | null, resourceId: string): Promise<void> {\n return clearObservationalMemory(this.ctx, threadId, resourceId);\n }\n\n async setPendingMessageTokens(id: string, tokenCount: number): Promise<void> {\n return setPendingMessageTokens(this.ctx, id, tokenCount);\n }\n\n async updateObservationalMemoryConfig(input: UpdateObservationalMemoryConfigInput): Promise<void> {\n return updateObservationalMemoryConfig(this.ctx, input);\n }\n\n async updateBufferedObservations(input: UpdateBufferedObservationsInput): Promise<void> {\n return updateBufferedObservations(this.ctx, input);\n }\n\n async swapBufferedToActive(input: SwapBufferedToActiveInput): Promise<SwapBufferedToActiveResult> {\n return swapBufferedToActive(this.ctx, input);\n }\n\n async updateBufferedReflection(input: UpdateBufferedReflectionInput): Promise<void> {\n return updateBufferedReflection(this.ctx, input);\n }\n\n async swapBufferedReflectionToActive(input: SwapBufferedReflectionToActiveInput): Promise<ObservationalMemoryRecord> {\n return swapBufferedReflectionToActive(this.ctx, input);\n }\n}\n","import { ErrorCategory } from '@mastra/core/error';\nimport type { MastraError } from '@mastra/core/error';\nimport { TABLE_SCHEMAS, TABLE_SCORERS, TABLE_SPANS } from '@mastra/core/storage';\n\nimport { safeJsonValue } from '../../../shared/connection';\nimport type { OracleCreateIndexOptions } from '../../db';\nimport { createOracleStorageError } from '../../domain-utils';\n\n// Observability persists spans and log events for Studio/API trace inspection,\n// keeping large structured payloads in Oracle JSON/CLOB-friendly columns.\nexport const STORE_NAME = 'ORACLEDB';\nexport const SPAN_SCHEMA = TABLE_SCHEMAS[TABLE_SPANS];\nexport const SCORE_SCHEMA = TABLE_SCHEMAS[TABLE_SCORERS];\nexport const LOG_EVENTS_TABLE = 'mastra_log_events';\nconst SIMPLE_IDENTIFIER = /^[A-Za-z][A-Za-z0-9_]*$/;\nconst LOWERCASE_SQL_IDENTIFIER = /^[a-z][a-z0-9_]*$/;\n\nexport type SpanColumn = keyof typeof SPAN_SCHEMA & string;\nexport type SpanRow = Record<string, unknown>;\nexport type LogColumn = (typeof LOG_COLUMNS)[number];\nexport type LogRow = Record<string, unknown>;\nexport type SharedContextColumn = 'entityType' | 'entityName' | 'serviceName' | 'environment';\nexport type ScoreRow = Record<string, unknown>;\n\nexport const SPAN_COLUMNS = Object.keys(SPAN_SCHEMA) as SpanColumn[];\nexport const SPAN_KEY_COLUMNS = new Set<SpanColumn>(['traceId', 'spanId']);\n// Column sets are derived once from Mastra schemas so mutation builders can bind each type correctly.\nexport const SPAN_JSON_COLUMNS = new Set(\n SPAN_COLUMNS.filter(columnName => SPAN_SCHEMA[columnName]?.type === 'jsonb'),\n) as ReadonlySet<SpanColumn>;\nexport const SPAN_TIMESTAMP_COLUMNS = new Set(\n SPAN_COLUMNS.filter(columnName => SPAN_SCHEMA[columnName]?.type === 'timestamp'),\n) as ReadonlySet<SpanColumn>;\nexport const SPAN_BOOLEAN_COLUMNS = new Set(\n SPAN_COLUMNS.filter(columnName => SPAN_SCHEMA[columnName]?.type === 'boolean'),\n) as ReadonlySet<SpanColumn>;\nexport const SPAN_NULLABLE_COLUMNS = SPAN_COLUMNS.filter(columnName => SPAN_SCHEMA[columnName]?.nullable);\n\nexport const LIGHT_SPAN_COLUMNS = [\n 'traceId',\n 'spanId',\n 'parentSpanId',\n 'name',\n 'entityType',\n 'entityId',\n 'entityName',\n 'spanType',\n 'error',\n 'isEvent',\n 'startedAt',\n 'endedAt',\n 'createdAt',\n 'updatedAt',\n] as const satisfies readonly SpanColumn[];\n\nexport const FILTER_TEXT_COLUMNS = [\n 'traceId',\n 'spanType',\n 'entityType',\n 'entityId',\n 'entityName',\n 'entityVersionId',\n 'parentEntityType',\n 'parentEntityId',\n 'parentEntityName',\n 'parentEntityVersionId',\n 'rootEntityType',\n 'rootEntityId',\n 'rootEntityName',\n 'rootEntityVersionId',\n 'experimentId',\n 'userId',\n 'organizationId',\n 'resourceId',\n 'runId',\n 'sessionId',\n 'threadId',\n 'requestId',\n 'environment',\n 'source',\n 'serviceName',\n] as const satisfies readonly SpanColumn[];\n\nexport const LOG_COLUMNS = [\n 'logId',\n 'timestamp',\n 'level',\n 'message',\n 'data',\n 'traceId',\n 'spanId',\n 'entityType',\n 'entityId',\n 'entityName',\n 'entityVersionId',\n 'parentEntityType',\n 'parentEntityId',\n 'parentEntityName',\n 'parentEntityVersionId',\n 'rootEntityType',\n 'rootEntityId',\n 'rootEntityName',\n 'rootEntityVersionId',\n 'userId',\n 'organizationId',\n 'resourceId',\n 'runId',\n 'sessionId',\n 'threadId',\n 'requestId',\n 'environment',\n 'executionSource',\n 'source',\n 'serviceName',\n 'experimentId',\n 'tags',\n 'metadata',\n 'scope',\n] as const;\n\nexport const LOG_JSON_COLUMNS = new Set<LogColumn>(['data', 'tags', 'metadata', 'scope']);\nexport const LOG_TEXT_FILTER_COLUMNS = [\n 'traceId',\n 'spanId',\n 'entityType',\n 'entityId',\n 'entityName',\n 'entityVersionId',\n 'parentEntityType',\n 'parentEntityId',\n 'parentEntityName',\n 'parentEntityVersionId',\n 'rootEntityType',\n 'rootEntityId',\n 'rootEntityName',\n 'rootEntityVersionId',\n 'experimentId',\n 'userId',\n 'organizationId',\n 'resourceId',\n 'runId',\n 'sessionId',\n 'threadId',\n 'requestId',\n 'environment',\n 'serviceName',\n] as const satisfies readonly LogColumn[];\n\nexport const SCORE_TEXT_FILTER_COLUMNS = [\n 'traceId',\n 'spanId',\n 'runId',\n 'entityType',\n 'entityId',\n 'resourceId',\n 'threadId',\n] as const;\n\nexport const SCORE_METADATA_FILTER_FIELDS = [\n 'entityName',\n 'entityVersionId',\n 'parentEntityType',\n 'parentEntityName',\n 'parentEntityVersionId',\n 'rootEntityType',\n 'rootEntityName',\n 'rootEntityVersionId',\n 'userId',\n 'organizationId',\n 'sessionId',\n 'requestId',\n 'environment',\n 'serviceName',\n 'executionSource',\n] as const;\n\nexport function col(columnName: SpanColumn): string {\n if (!SPAN_SCHEMA[columnName]) {\n throw new Error(`Unknown span column: ${columnName}`);\n }\n if (!SIMPLE_IDENTIFIER.test(columnName)) {\n throw new Error(`Invalid span column: ${columnName}`);\n }\n if (LOWERCASE_SQL_IDENTIFIER.test(columnName)) return columnName;\n return `\"${columnName}\"`;\n}\n\nexport function logCol(columnName: LogColumn): string {\n if (!LOG_COLUMNS.includes(columnName)) {\n throw new Error(`Unknown log column: ${columnName}`);\n }\n if (!SIMPLE_IDENTIFIER.test(columnName)) {\n throw new Error(`Invalid log column: ${columnName}`);\n }\n return `\"${columnName}\"`;\n}\n\nexport function scoreCol(columnName: string): string {\n if (!SCORE_SCHEMA[columnName]) {\n throw new Error(`Unknown score column: ${columnName}`);\n }\n if (!SIMPLE_IDENTIFIER.test(columnName)) {\n throw new Error(`Invalid score column: ${columnName}`);\n }\n if (LOWERCASE_SQL_IDENTIFIER.test(columnName)) return columnName;\n return `\"${columnName}\"`;\n}\n\nexport function qcol(tableAlias: string | undefined, columnName: SpanColumn): string {\n const column = col(columnName);\n return tableAlias ? `${tableAlias}.${column}` : column;\n}\n\nexport function logQcol(tableAlias: string | undefined, columnName: LogColumn): string {\n const column = logCol(columnName);\n return tableAlias ? `${tableAlias}.${column}` : column;\n}\n\nexport function scoreQcol(tableAlias: string | undefined, columnName: string): string {\n const column = scoreCol(columnName);\n return tableAlias ? `${tableAlias}.${column}` : column;\n}\n\nexport function getDefaultObservabilityIndexDefinitions(\n indexName: (name: string) => string,\n): OracleCreateIndexOptions[] {\n return [\n {\n name: indexName('MASTRA_AI_SPANS_TRACEID_STARTEDAT'),\n table: TABLE_SPANS,\n columns: ['traceId', 'startedAt DESC'],\n },\n {\n name: indexName('MASTRA_AI_SPANS_PARENTSPANID_STARTEDAT'),\n table: TABLE_SPANS,\n columns: ['parentSpanId', 'startedAt DESC'],\n },\n {\n name: indexName('MASTRA_AI_SPANS_NAME'),\n table: TABLE_SPANS,\n columns: ['name'],\n },\n {\n name: indexName('MASTRA_AI_SPANS_SPANTYPE_STARTEDAT'),\n table: TABLE_SPANS,\n columns: ['spanType', 'startedAt DESC'],\n },\n {\n name: indexName('MASTRA_AI_SPANS_ROOT_LOOKUP'),\n table: TABLE_SPANS,\n columns: ['traceId'],\n where: `${col('parentSpanId')} IS NULL`,\n },\n {\n name: indexName('MASTRA_AI_SPANS_ENTITYTYPE_ENTITYID'),\n table: TABLE_SPANS,\n columns: ['entityType', 'entityId'],\n },\n {\n name: indexName('MASTRA_AI_SPANS_ENTITYTYPE_ENTITYNAME'),\n table: TABLE_SPANS,\n columns: ['entityType', 'entityName'],\n },\n {\n name: indexName('MASTRA_AI_SPANS_ORGID_USERID'),\n table: TABLE_SPANS,\n columns: ['organizationId', 'userId'],\n },\n {\n name: indexName('MASTRA_LOG_EVENTS_TIMESTAMP'),\n table: LOG_EVENTS_TABLE,\n columns: ['\"timestamp\" DESC'],\n },\n {\n name: indexName('MASTRA_LOG_EVENTS_TRACE_SPAN_TS'),\n table: LOG_EVENTS_TABLE,\n columns: ['\"traceId\"', '\"spanId\"', '\"timestamp\" DESC'],\n },\n {\n name: indexName('MASTRA_LOG_EVENTS_LEVEL_TS'),\n table: LOG_EVENTS_TABLE,\n columns: ['\"level\"', '\"timestamp\" DESC'],\n },\n {\n name: indexName('MASTRA_LOG_EVENTS_ENTITY_ID'),\n table: LOG_EVENTS_TABLE,\n columns: ['\"entityType\"', '\"entityId\"'],\n },\n {\n name: indexName('MASTRA_LOG_EVENTS_ORG_USER'),\n table: LOG_EVENTS_TABLE,\n columns: ['\"organizationId\"', '\"userId\"'],\n },\n ];\n}\n\nexport function logEventsTableSql(tableName: string): string {\n return `CREATE TABLE ${tableName} (\n ${logCol('logId')} VARCHAR2(512) PRIMARY KEY,\n ${logCol('timestamp')} TIMESTAMP WITH TIME ZONE NOT NULL,\n ${logCol('level')} VARCHAR2(64) NOT NULL,\n ${logCol('message')} CLOB NOT NULL,\n ${logCol('data')} JSON,\n ${logCol('traceId')} VARCHAR2(512),\n ${logCol('spanId')} VARCHAR2(512),\n ${logCol('entityType')} VARCHAR2(512),\n ${logCol('entityId')} VARCHAR2(512),\n ${logCol('entityName')} VARCHAR2(512),\n ${logCol('entityVersionId')} VARCHAR2(512),\n ${logCol('parentEntityType')} VARCHAR2(512),\n ${logCol('parentEntityId')} VARCHAR2(512),\n ${logCol('parentEntityName')} VARCHAR2(512),\n ${logCol('parentEntityVersionId')} VARCHAR2(512),\n ${logCol('rootEntityType')} VARCHAR2(512),\n ${logCol('rootEntityId')} VARCHAR2(512),\n ${logCol('rootEntityName')} VARCHAR2(512),\n ${logCol('rootEntityVersionId')} VARCHAR2(512),\n ${logCol('userId')} VARCHAR2(512),\n ${logCol('organizationId')} VARCHAR2(512),\n ${logCol('resourceId')} VARCHAR2(512),\n ${logCol('runId')} VARCHAR2(512),\n ${logCol('sessionId')} VARCHAR2(512),\n ${logCol('threadId')} VARCHAR2(512),\n ${logCol('requestId')} VARCHAR2(512),\n ${logCol('environment')} VARCHAR2(512),\n ${logCol('executionSource')} VARCHAR2(512),\n ${logCol('source')} VARCHAR2(512),\n ${logCol('serviceName')} VARCHAR2(512),\n ${logCol('experimentId')} VARCHAR2(512),\n ${logCol('tags')} JSON,\n ${logCol('metadata')} JSON,\n ${logCol('scope')} JSON\n)`;\n}\n\n// Shared SQL-binding helpers reused by every filter builder across\n// spans.ts, logs.ts, and scores-bridge.ts.\nexport function addBind(binds: Record<string, unknown>, value: unknown): string {\n const name = `p${Object.keys(binds).length}`;\n binds[name] = value;\n return `:${name}`;\n}\n\nexport function jsonComparableValue(value: unknown): string {\n if (value === null || value === undefined) return '';\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n return JSON.stringify(safeJsonValue(value));\n}\n\n// Shared error helper so every split module (spans/logs/scores-bridge) reports\n// observability failures under the same store name and MastraError shape.\nexport function storageError(\n operation: string,\n reason: string,\n details: Record<string, string | number | boolean | undefined>,\n cause: unknown,\n category: ErrorCategory = ErrorCategory.THIRD_PARTY,\n): MastraError {\n return createOracleStorageError({ storeName: STORE_NAME, operation, reason, details, cause, category });\n}\n","import type { CreateSpanRecord, LogRecord } from '@mastra/core/storage';\nimport oracledb from 'oracledb';\n\nimport { jsonBindText } from '../../../shared/connection';\nimport { toDate } from '../../domain-utils';\nimport type { LogColumn, SpanColumn } from './schema';\nimport {\n LOG_COLUMNS,\n LOG_JSON_COLUMNS,\n SPAN_BOOLEAN_COLUMNS,\n SPAN_COLUMNS,\n SPAN_JSON_COLUMNS,\n SPAN_SCHEMA,\n SPAN_TIMESTAMP_COLUMNS,\n} from './schema';\n\nexport type SpanMutationRecord = CreateSpanRecord & { createdAt: Date; updatedAt: Date };\nexport type LogMutationRecord = LogRecord & { logId: string };\n\nexport function isIdentifierLikeColumn(columnName: string): boolean {\n return columnName === 'id' || columnName.endsWith('Id') || columnName.endsWith('_id');\n}\n\nexport function bindValue(columnName: SpanColumn, value: unknown): unknown {\n if (value === undefined) return null;\n if (SPAN_JSON_COLUMNS.has(columnName)) return jsonBindText(value ?? null);\n if (SPAN_BOOLEAN_COLUMNS.has(columnName)) return value ? 1 : 0;\n if (SPAN_TIMESTAMP_COLUMNS.has(columnName) && value != null) return toDate(value);\n return value ?? null;\n}\n\nexport function spanRecordBinds(record: SpanMutationRecord): Record<string, unknown> {\n return Object.fromEntries(\n SPAN_COLUMNS.map(columnName => [columnName, bindValue(columnName, record[columnName as keyof SpanMutationRecord])]),\n );\n}\n\nexport function bindDefsForColumns(\n columns: readonly SpanColumn[],\n): NonNullable<oracledb.ExecuteManyOptions['bindDefs']> {\n return Object.fromEntries(columns.map(columnName => [columnName, bindDefForColumn(columnName)])) as Record<\n string,\n oracledb.BindDefinition\n >;\n}\n\nexport function bindDefForColumn(columnName: SpanColumn): oracledb.BindDefinition {\n const column = SPAN_SCHEMA[columnName];\n\n switch (column?.type) {\n case 'jsonb':\n // Bound as JSON text (see jsonBindText): the server encodes the OSON\n // image so JDBC-based tools can read it back.\n return { type: oracledb.DB_TYPE_CLOB };\n case 'timestamp':\n return { type: oracledb.DB_TYPE_TIMESTAMP_TZ };\n case 'boolean':\n case 'integer':\n case 'bigint':\n case 'float':\n return { type: oracledb.NUMBER };\n case 'uuid':\n case 'text':\n default:\n return { type: oracledb.STRING, maxSize: isIdentifierLikeColumn(columnName) ? 512 : 4000 };\n }\n}\n\nexport function logBindValue(columnName: LogColumn, value: unknown): unknown {\n if (value === undefined) return null;\n if (LOG_JSON_COLUMNS.has(columnName)) return jsonBindText(value ?? null);\n if (columnName === 'timestamp') return toDate(value);\n return value ?? null;\n}\n\nexport function logRecordBinds(record: LogMutationRecord): Record<string, unknown> {\n return Object.fromEntries(\n LOG_COLUMNS.map(columnName => [\n logBindName(columnName),\n logBindValue(columnName, record[columnName as keyof LogMutationRecord]),\n ]),\n );\n}\n\nexport function logBindName(columnName: LogColumn): string {\n return `b_${columnName}`;\n}\n\nexport function bindDefsForLogColumns(\n columns: readonly LogColumn[],\n): NonNullable<oracledb.ExecuteManyOptions['bindDefs']> {\n return Object.fromEntries(\n columns.map(columnName => [logBindName(columnName), bindDefForLogColumn(columnName)]),\n ) as Record<string, oracledb.BindDefinition>;\n}\n\nexport function bindDefForLogColumn(columnName: LogColumn): oracledb.BindDefinition {\n if (LOG_JSON_COLUMNS.has(columnName)) return { type: oracledb.DB_TYPE_CLOB };\n if (columnName === 'timestamp') return { type: oracledb.DB_TYPE_TIMESTAMP_TZ };\n if (columnName === 'message') return { type: oracledb.DB_TYPE_CLOB };\n return { type: oracledb.STRING, maxSize: isIdentifierLikeColumn(columnName) ? 512 : 4000 };\n}\n","import { randomUUID } from 'node:crypto';\n\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { createStorageErrorId, listLogsArgsSchema } from '@mastra/core/storage';\nimport type { BatchCreateLogsArgs, ListLogsArgs, ListLogsResponse, LogRecord } from '@mastra/core/storage';\n\nimport { assertJsonPath, qualifyName } from '../../../vector/identifiers';\nimport type { OracleDB } from '../../db';\nimport { parseJsonValue, toDate } from '../../domain-utils';\nimport { bindDefsForLogColumns, logBindName, logRecordBinds } from './binds';\nimport type { LogColumn, LogRow } from './schema';\nimport {\n addBind,\n jsonComparableValue,\n LOG_COLUMNS,\n LOG_EVENTS_TABLE,\n LOG_JSON_COLUMNS,\n LOG_TEXT_FILTER_COLUMNS,\n logCol,\n logQcol,\n STORE_NAME,\n storageError,\n} from './schema';\n\nexport async function batchCreateLogs(\n db: OracleDB,\n schemaName: string | undefined,\n args: BatchCreateLogsArgs,\n): Promise<void> {\n if (args.logs.length === 0) return;\n\n try {\n const binds = args.logs.map(log =>\n logRecordBinds({\n ...log,\n logId: log.logId ?? randomUUID(),\n executionSource: log.executionSource ?? log.source ?? null,\n }),\n );\n\n await db.tx(async client => {\n // Logs can be retried by telemetry pipelines; MERGE by logId prevents\n // duplicate rows while preserving insert-only semantics.\n await client.executeMany(logMergeSql(schemaName), binds, {\n bindDefs: bindDefsForLogColumns(LOG_COLUMNS),\n });\n });\n } catch (error) {\n throw storageError('BATCH_CREATE_LOGS', 'FAILED', { count: args.logs.length }, error, ErrorCategory.USER);\n }\n}\n\nexport async function listLogs(\n db: OracleDB,\n schemaName: string | undefined,\n args: ListLogsArgs,\n): Promise<ListLogsResponse> {\n const { mode, filters, pagination, orderBy } = listLogsArgsSchema.parse(args);\n if (mode === 'delta') {\n throw new MastraError({\n id: createStorageErrorId(STORE_NAME, 'LIST_LOGS', 'DELTA_NOT_SUPPORTED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'Oracle observability logs do not support delta polling yet',\n });\n }\n\n const page = pagination.page;\n const perPage = pagination.perPage;\n const binds: Record<string, unknown> = {};\n const conditions: string[] = [];\n\n try {\n if (filters) {\n // Scalar filters use normal columns; metadata/scope/tags use JSON\n // predicates so logs remain flexible without a separate document store.\n const logFilters = filters as typeof filters & {\n metadata?: Record<string, unknown> | null;\n scope?: Record<string, unknown> | null;\n };\n addLogDateRangeFilter(conditions, binds, 'l', filters.timestamp);\n\n if (filters.level !== undefined) {\n const levels = Array.isArray(filters.level) ? filters.level : [filters.level];\n if (levels.length > 0) {\n conditions.push(`${logQcol('l', 'level')} IN (${levels.map(level => addBind(binds, level)).join(', ')})`);\n }\n }\n\n for (const columnName of LOG_TEXT_FILTER_COLUMNS) {\n const value = filters[columnName as keyof typeof filters];\n if (value !== undefined) {\n conditions.push(`${logQcol('l', columnName)} = ${addBind(binds, value)}`);\n }\n }\n\n const sourceFilter = filters.executionSource ?? filters.source;\n if (sourceFilter !== undefined) {\n conditions.push(\n `COALESCE(${logQcol('l', 'executionSource')}, ${logQcol('l', 'source')}) = ${addBind(binds, sourceFilter)}`,\n );\n }\n\n addLogJsonObjectFilter(conditions, binds, 'l', 'metadata', logFilters.metadata);\n addLogJsonObjectFilter(conditions, binds, 'l', 'scope', logFilters.scope);\n addLogTagsFilter(conditions, binds, 'l', filters.tags);\n }\n\n const whereClause = conditions.length ? `WHERE ${conditions.join(' AND ')}` : '';\n const countRow = await db.oneOrNone<{ count: number | string }>(\n `SELECT COUNT(*) AS \"count\" FROM ${qualifyName(LOG_EVENTS_TABLE, schemaName)} l ${whereClause}`,\n binds,\n );\n const total = Number(countRow?.count ?? 0);\n\n if (total === 0) {\n return { logs: [], pagination: { total: 0, page, perPage, hasMore: false } };\n }\n\n const offset = page * perPage;\n const logs = await db.manyOrNone<LogRow>(\n `${logSelect(LOG_COLUMNS, 'l')} FROM ${qualifyName(LOG_EVENTS_TABLE, schemaName)} l ${whereClause} ORDER BY ${logQcol(\n 'l',\n orderBy.field,\n )} ${orderBy.direction}, ${logQcol('l', 'logId')} ${orderBy.direction} OFFSET :offset ROWS FETCH NEXT :limit ROWS ONLY`,\n { ...binds, offset, limit: perPage },\n );\n\n return {\n logs: logs.map(row => transformLogRow(row)),\n pagination: {\n total,\n page,\n perPage,\n hasMore: offset + perPage < total,\n },\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError('LIST_LOGS', 'FAILED', {}, error, ErrorCategory.USER);\n }\n}\n\nfunction logMergeSql(schemaName: string | undefined): string {\n const sourceColumns = LOG_COLUMNS.map(columnName => `:${logBindName(columnName)} AS ${logCol(columnName)}`).join(\n ', ',\n );\n const insertColumns = LOG_COLUMNS.map(columnName => logCol(columnName)).join(', ');\n const insertValues = LOG_COLUMNS.map(columnName => `source.${logCol(columnName)}`).join(', ');\n\n return `\n MERGE INTO ${qualifyName(LOG_EVENTS_TABLE, schemaName)} target\n USING (SELECT ${sourceColumns} FROM dual) source\n ON (target.${logCol('logId')} = source.${logCol('logId')})\n WHEN NOT MATCHED THEN INSERT (${insertColumns}) VALUES (${insertValues})\n `;\n}\n\nfunction logSelect(columns: readonly LogColumn[], tableAlias?: string): string {\n return `SELECT ${columns.map(columnName => `${logQcol(tableAlias, columnName)} AS \"${columnName}\"`).join(', ')}`;\n}\n\nfunction transformLogRow(row: LogRow): LogRecord {\n const result: LogRow = {};\n\n for (const [key, value] of Object.entries(row)) {\n const columnName = key as LogColumn;\n if (LOG_JSON_COLUMNS.has(columnName)) {\n result[key] = parseJsonValue(value);\n } else if (columnName === 'timestamp') {\n result[key] = toDate(value);\n } else {\n result[key] = value;\n }\n }\n\n return result as LogRecord;\n}\n\nfunction addLogDateRangeFilter(\n conditions: string[],\n binds: Record<string, unknown>,\n tableAlias: string,\n range?: { start?: Date; end?: Date; startExclusive?: boolean; endExclusive?: boolean },\n): void {\n if (range?.start) {\n conditions.push(\n `${logQcol(tableAlias, 'timestamp')} ${range.startExclusive ? '>' : '>='} ${addBind(binds, range.start)}`,\n );\n }\n if (range?.end) {\n conditions.push(\n `${logQcol(tableAlias, 'timestamp')} ${range.endExclusive ? '<' : '<='} ${addBind(binds, range.end)}`,\n );\n }\n}\n\nfunction addLogJsonObjectFilter(\n conditions: string[],\n binds: Record<string, unknown>,\n tableAlias: string,\n columnName: 'scope' | 'metadata',\n filter?: Record<string, unknown> | null,\n): void {\n if (!filter) return;\n\n for (const [path, value] of Object.entries(filter)) {\n conditions.push(\n `JSON_VALUE(${logQcol(tableAlias, columnName)}, '${assertJsonPath(\n path,\n )}' RETURNING VARCHAR2(4000) NULL ON ERROR) = ${addBind(binds, jsonComparableValue(value))}`,\n );\n }\n}\n\nfunction addLogTagsFilter(\n conditions: string[],\n binds: Record<string, unknown>,\n tableAlias: string,\n tags?: string[] | null,\n): void {\n if (!tags?.length) return;\n\n for (const tag of tags) {\n conditions.push(\n `EXISTS (SELECT 1 FROM JSON_TABLE(${logQcol(\n tableAlias,\n 'tags',\n )}, '$[*]' COLUMNS (tag VARCHAR2(4000) PATH '$')) tag_filter WHERE tag_filter.tag = ${addBind(binds, tag)})`,\n );\n }\n}\n","import { randomUUID } from 'node:crypto';\n\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { createStorageErrorId, listScoresArgsSchema, TABLE_SCORERS } from '@mastra/core/storage';\nimport type {\n BatchCreateScoresArgs,\n CreateScoreArgs,\n ListScoresArgs,\n ListScoresResponse,\n ScoreRecord,\n} from '@mastra/core/storage';\n\nimport { safeJsonValue } from '../../../shared/connection';\nimport { qualifyName } from '../../../vector/identifiers';\nimport type { OracleDB } from '../../db';\nimport { parseJsonValue, toDate } from '../../domain-utils';\nimport type { ScoreRow } from './schema';\nimport {\n addBind,\n SCORE_METADATA_FILTER_FIELDS,\n SCORE_SCHEMA,\n SCORE_TEXT_FILTER_COLUMNS,\n scoreQcol,\n STORE_NAME,\n storageError,\n} from './schema';\n\nexport async function listScores(\n db: OracleDB,\n schemaName: string | undefined,\n args: ListScoresArgs,\n): Promise<ListScoresResponse> {\n const { mode, filters, pagination, orderBy } = listScoresArgsSchema.parse(args);\n if (mode === 'delta') {\n throw new MastraError({\n id: createStorageErrorId(STORE_NAME, 'LIST_SCORES', 'DELTA_NOT_SUPPORTED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: 'Oracle observability scores do not support delta polling yet',\n });\n }\n\n const page = pagination.page;\n const perPage = pagination.perPage;\n const binds: Record<string, unknown> = {};\n const conditions: string[] = [];\n\n try {\n addScoreFilters(conditions, binds, filters);\n\n const whereClause = conditions.length ? `WHERE ${conditions.join(' AND ')}` : '';\n const countRow = await db.oneOrNone<{ count: number | string }>(\n `SELECT COUNT(*) AS \"count\" FROM ${qualifyName(TABLE_SCORERS, schemaName)} s ${whereClause}`,\n binds,\n );\n const total = Number(countRow?.count ?? 0);\n\n if (total === 0) {\n return { scores: [], pagination: { total: 0, page, perPage, hasMore: false } };\n }\n\n const offset = page * perPage;\n const scoreOrderColumn = orderBy.field === 'score' ? scoreQcol('s', 'score') : scoreQcol('s', 'createdAt');\n const rows = await db.manyOrNone<ScoreRow>(\n `${scoreSelect('s')} FROM ${qualifyName(TABLE_SCORERS, schemaName)} s ${whereClause} ORDER BY ${scoreOrderColumn} ${\n orderBy.direction\n }, ${scoreQcol('s', 'id')} ${orderBy.direction} OFFSET :offset ROWS FETCH NEXT :limit ROWS ONLY`,\n { ...binds, offset, limit: perPage },\n );\n\n return {\n scores: rows.map(row => transformObservabilityScoreRow(row)),\n pagination: {\n total,\n page,\n perPage,\n hasMore: offset + perPage < total,\n },\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw storageError('LIST_SCORES', 'FAILED', {}, error, ErrorCategory.USER);\n }\n}\n\nexport async function createScore(db: OracleDB, schemaName: string | undefined, args: CreateScoreArgs): Promise<void> {\n await batchCreateScores(db, schemaName, { scores: [args.score] });\n}\n\nexport async function batchCreateScores(\n db: OracleDB,\n _schemaName: string | undefined,\n args: BatchCreateScoresArgs,\n): Promise<void> {\n if (args.scores.length === 0) return;\n\n try {\n // batchInsert wraps every insert in one transaction so a failure partway\n // through the batch leaves zero rows persisted instead of a partial write.\n await db.batchInsert({\n tableName: TABLE_SCORERS,\n schema: SCORE_SCHEMA,\n records: args.scores.map(scoreRecordToTableRecord),\n });\n } catch (error) {\n throw storageError('BATCH_CREATE_SCORES', 'FAILED', { count: args.scores.length }, error, ErrorCategory.USER);\n }\n}\n\nexport async function getScoreById(\n db: OracleDB,\n schemaName: string | undefined,\n scoreId: string,\n): Promise<ScoreRecord | null> {\n try {\n const row = await db.oneOrNone<ScoreRow>(\n `${scoreSelect('s')} FROM ${qualifyName(TABLE_SCORERS, schemaName)} s WHERE ${scoreQcol('s', 'id')} = :scoreId`,\n { scoreId },\n );\n return row ? transformObservabilityScoreRow(row) : null;\n } catch (error) {\n throw storageError('GET_SCORE_BY_ID', 'FAILED', { scoreId }, error, ErrorCategory.USER);\n }\n}\n\nfunction scoreSelect(tableAlias?: string): string {\n return `SELECT ${Object.keys(SCORE_SCHEMA)\n .map(columnName => `${scoreQcol(tableAlias, columnName)} AS \"${columnName}\"`)\n .join(', ')}`;\n}\n\nfunction transformObservabilityScoreRow(row: ScoreRow): ScoreRecord {\n const metadata = parseObjectValue(row.metadata);\n const scorer = parseObjectValue(row.scorer);\n const entity = parseObjectValue(row.entity);\n const requestContext = parseObjectValue(row.requestContext);\n const source = optionalString(row.source);\n\n // Legacy evaluator scores and new observability scores share one table in Mastra.\n // This adapter maps the evaluator row shape into the Studio-facing ScoreRecord\n // shape so /observability/scores can browse the same persisted data.\n return {\n scoreId: optionalString(row.id),\n timestamp: toDate(row.createdAt ?? row.updatedAt ?? new Date()),\n traceId: optionalString(row.traceId),\n spanId: optionalString(row.spanId),\n scorerId: optionalString(row.scorerId) ?? optionalString(scorer?.id) ?? 'unknown-scorer',\n scorerName: optionalString(scorer?.name) ?? optionalString(scorer?.scorerName),\n scorerVersion: optionalString(scorer?.version) ?? optionalString(scorer?.scorerVersion),\n scoreSource: source,\n source,\n score: Number(row.score ?? 0),\n reason: optionalString(row.reason),\n entityType: optionalEntityType(row.entityType),\n entityId: optionalString(row.entityId),\n entityName: optionalString(entity?.name) ?? optionalString(metadata?.entityName),\n parentEntityType: optionalEntityType(metadata?.parentEntityType),\n parentEntityId: optionalString(metadata?.parentEntityId),\n parentEntityName: optionalString(metadata?.parentEntityName),\n rootEntityType: optionalEntityType(metadata?.rootEntityType),\n rootEntityId: optionalString(metadata?.rootEntityId),\n rootEntityName: optionalString(metadata?.rootEntityName),\n userId: optionalString(metadata?.userId),\n organizationId: optionalString(metadata?.organizationId),\n resourceId: optionalString(row.resourceId),\n runId: optionalString(row.runId),\n sessionId: optionalString(metadata?.sessionId),\n threadId: optionalString(row.threadId),\n requestId: optionalString(metadata?.requestId),\n environment: optionalString(metadata?.environment),\n serviceName: optionalString(metadata?.serviceName),\n scope: parseObjectValue(metadata?.scope),\n entityVersionId: optionalString(metadata?.entityVersionId),\n parentEntityVersionId: optionalString(metadata?.parentEntityVersionId),\n rootEntityVersionId: optionalString(metadata?.rootEntityVersionId),\n experimentId: optionalString(metadata?.experimentId) ?? optionalString(requestContext?.experimentId),\n executionSource: optionalString(metadata?.executionSource),\n tags: parseStringArray(metadata?.tags),\n scoreTraceId: optionalString(metadata?.scoreTraceId) ?? optionalString(requestContext?.scoreTraceId),\n metadata,\n };\n}\n\nfunction scoreRecordToTableRecord(score: ScoreRecord): Record<string, unknown> {\n const id = score.scoreId ?? randomUUID();\n const timestamp = score.timestamp instanceof Date ? score.timestamp : new Date(score.timestamp ?? Date.now());\n const source = score.scoreSource ?? score.source ?? 'observability';\n // Filter out undefined contextual fields BEFORE merging over score.metadata.\n // Otherwise an undefined top-level field (e.g. score.entityName) would clobber\n // a value already present under the same key in the original metadata.\n const contextualMetadata = removeUndefined({\n entityName: score.entityName,\n entityVersionId: score.entityVersionId,\n parentEntityType: score.parentEntityType,\n parentEntityId: score.parentEntityId,\n parentEntityName: score.parentEntityName,\n parentEntityVersionId: score.parentEntityVersionId,\n rootEntityType: score.rootEntityType,\n rootEntityId: score.rootEntityId,\n rootEntityName: score.rootEntityName,\n rootEntityVersionId: score.rootEntityVersionId,\n userId: score.userId,\n organizationId: score.organizationId,\n sessionId: score.sessionId,\n requestId: score.requestId,\n environment: score.environment,\n serviceName: score.serviceName,\n executionSource: score.executionSource,\n experimentId: score.experimentId,\n tags: score.tags,\n scoreTraceId: score.scoreTraceId,\n scope: score.scope,\n });\n const metadata = { ...(score.metadata ?? {}), ...contextualMetadata };\n\n // Observability scores and evaluator scores share Mastra's scorer table.\n // Fields that do not exist as first-class scorer columns are folded into\n // metadata so the Studio score browser can still filter by context.\n return {\n id,\n scorerId: score.scorerId,\n traceId: score.traceId,\n spanId: score.spanId,\n runId: score.runId ?? score.traceId ?? id,\n scorer: safeJsonValue({\n id: score.scorerId,\n name: score.scorerName,\n version: score.scorerVersion,\n }),\n preprocessStepResult: null,\n extractStepResult: null,\n analyzeStepResult: null,\n score: score.score,\n reason: score.reason,\n metadata: safeJsonValue(removeUndefined(metadata)),\n preprocessPrompt: null,\n extractPrompt: null,\n generateScorePrompt: null,\n generateReasonPrompt: null,\n analyzePrompt: null,\n reasonPrompt: null,\n input: safeJsonValue({}),\n output: safeJsonValue({}),\n additionalContext: null,\n requestContext: safeJsonValue(\n removeUndefined({\n experimentId: score.experimentId,\n scoreTraceId: score.scoreTraceId,\n }),\n ),\n entityType: score.entityType,\n entity: safeJsonValue(removeUndefined({ id: score.entityId, name: score.entityName })),\n entityId: score.entityId,\n source,\n resourceId: score.resourceId,\n threadId: score.threadId,\n createdAt: timestamp,\n updatedAt: timestamp,\n };\n}\n\nfunction parseObjectValue(value: unknown): Record<string, unknown> | undefined {\n const parsed = parseJsonValue(value);\n return parsed !== null && typeof parsed === 'object' && !Array.isArray(parsed)\n ? (parsed as Record<string, unknown>)\n : undefined;\n}\n\nfunction parseStringArray(value: unknown): string[] | undefined {\n const parsed = parseJsonValue(value);\n if (!Array.isArray(parsed)) return undefined;\n return parsed.filter((item): item is string => typeof item === 'string');\n}\n\nfunction removeUndefined<T extends Record<string, unknown>>(record: T): Record<string, unknown> {\n return Object.fromEntries(Object.entries(record).filter(([, value]) => value !== undefined));\n}\n\nfunction optionalString(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\nfunction optionalEntityType(value: unknown): ScoreRecord['entityType'] {\n return optionalString(value) as ScoreRecord['entityType'];\n}\n\nfunction addScoreFilters(\n conditions: string[],\n binds: Record<string, unknown>,\n filters?: ListScoresArgs['filters'],\n): void {\n if (!filters) return;\n\n addScoreDateRangeFilter(conditions, binds, 's', filters.timestamp);\n\n for (const columnName of SCORE_TEXT_FILTER_COLUMNS) {\n const value = filters[columnName as keyof typeof filters];\n if (value !== undefined) {\n conditions.push(`${scoreQcol('s', columnName)} = ${addBind(binds, value)}`);\n }\n }\n\n if (filters.scorerId !== undefined) {\n const scorerIds = Array.isArray(filters.scorerId) ? filters.scorerId : [filters.scorerId];\n if (scorerIds.length > 0) {\n conditions.push(`${scoreQcol('s', 'scorerId')} IN (${scorerIds.map(id => addBind(binds, id)).join(', ')})`);\n }\n }\n\n const scoreSource = filters.scoreSource ?? filters.source;\n if (scoreSource !== undefined) {\n conditions.push(`${scoreQcol('s', 'source')} = ${addBind(binds, scoreSource)}`);\n }\n\n if (filters.experimentId !== undefined) {\n const experimentIdBind = addBind(binds, filters.experimentId);\n conditions.push(\n `(JSON_VALUE(${scoreQcol(\n 's',\n 'metadata',\n )}, '$.experimentId' RETURNING VARCHAR2(4000) NULL ON ERROR) = ${experimentIdBind} OR JSON_VALUE(${scoreQcol(\n 's',\n 'requestContext',\n )}, '$.experimentId' RETURNING VARCHAR2(4000) NULL ON ERROR) = ${experimentIdBind})`,\n );\n }\n\n for (const fieldName of SCORE_METADATA_FILTER_FIELDS) {\n const value = filters[fieldName as keyof typeof filters];\n if (value !== undefined) {\n conditions.push(\n `JSON_VALUE(${scoreQcol(\n 's',\n 'metadata',\n )}, '$.${fieldName}' RETURNING VARCHAR2(4000) NULL ON ERROR) = ${addBind(binds, value)}`,\n );\n }\n }\n\n addScoreMetadataTagsFilter(conditions, binds, 's', filters.tags);\n}\n\nfunction addScoreDateRangeFilter(\n conditions: string[],\n binds: Record<string, unknown>,\n tableAlias: string,\n range?: { start?: unknown; end?: unknown; startExclusive?: boolean; endExclusive?: boolean },\n): void {\n if (range?.start) {\n conditions.push(\n `${scoreQcol(tableAlias, 'createdAt')} ${range.startExclusive ? '>' : '>='} ${addBind(\n binds,\n toDate(range.start),\n )}`,\n );\n }\n if (range?.end) {\n conditions.push(\n `${scoreQcol(tableAlias, 'createdAt')} ${range.endExclusive ? '<' : '<='} ${addBind(binds, toDate(range.end))}`,\n );\n }\n}\n\nfunction addScoreMetadataTagsFilter(\n conditions: string[],\n binds: Record<string, unknown>,\n tableAlias: string,\n tags?: string[] | null,\n): void {\n if (!tags?.length) return;\n\n for (const tag of tags) {\n conditions.push(\n `EXISTS (SELECT 1 FROM JSON_TABLE(${scoreQcol(\n tableAlias,\n 'metadata',\n )}, '$.tags[*]' COLUMNS (tag VARCHAR2(4000) PATH '$')) tag_filter WHERE tag_filter.tag = ${addBind(binds, tag)})`,\n );\n }\n}\n","import { ErrorCategory } from '@mastra/core/error';\nimport { TABLE_SPANS, TraceStatus, listTracesArgsSchema, toTraceSpans } from '@mastra/core/storage';\nimport type {\n BatchCreateSpansArgs,\n BatchDeleteTracesArgs,\n BatchUpdateSpansArgs,\n CreateSpanArgs,\n CreateSpanRecord,\n GetEntityNamesArgs,\n GetEntityNamesResponse,\n GetEntityTypesArgs,\n GetEntityTypesResponse,\n GetEnvironmentsArgs,\n GetEnvironmentsResponse,\n GetRootSpanArgs,\n GetRootSpanResponse,\n GetServiceNamesArgs,\n GetServiceNamesResponse,\n GetSpanArgs,\n GetSpanResponse,\n GetTagsArgs,\n GetTagsResponse,\n GetTraceArgs,\n GetTraceLightResponse,\n GetTraceResponse,\n LightSpanRecord,\n ListTracesArgs,\n ListTracesResponse,\n SpanRecord,\n UpdateSpanArgs,\n} from '@mastra/core/storage';\nimport oracledb from 'oracledb';\n\nimport { assertJsonPath, qualifyName } from '../../../vector/identifiers';\nimport type { OracleDB } from '../../db';\nimport { parseJsonValue, toDate } from '../../domain-utils';\nimport { bindDefsForColumns, bindValue, spanRecordBinds } from './binds';\nimport type { LogColumn, SharedContextColumn, SpanColumn, SpanRow } from './schema';\nimport {\n addBind,\n col,\n FILTER_TEXT_COLUMNS,\n jsonComparableValue,\n LIGHT_SPAN_COLUMNS,\n LOG_EVENTS_TABLE,\n logCol,\n logQcol,\n qcol,\n SPAN_COLUMNS,\n SPAN_KEY_COLUMNS,\n SPAN_SCHEMA,\n storageError,\n} from './schema';\n\nexport async function createSpan(db: OracleDB, schemaName: string | undefined, args: CreateSpanArgs): Promise<void> {\n const { span } = args;\n try {\n await upsertSpans(db, schemaName, [span]);\n } catch (error) {\n throw storageError(\n 'CREATE_SPAN',\n 'FAILED',\n {\n spanId: span.spanId,\n traceId: span.traceId,\n spanType: span.spanType,\n name: span.name,\n },\n error,\n ErrorCategory.USER,\n );\n }\n}\n\nexport async function batchCreateSpans(\n db: OracleDB,\n schemaName: string | undefined,\n args: BatchCreateSpansArgs,\n): Promise<void> {\n if (args.records.length === 0) return;\n\n try {\n await upsertSpans(db, schemaName, args.records);\n } catch (error) {\n throw storageError('BATCH_CREATE_SPANS', 'FAILED', { count: args.records.length }, error, ErrorCategory.USER);\n }\n}\n\nexport async function getSpan(\n db: OracleDB,\n schemaName: string | undefined,\n args: GetSpanArgs,\n): Promise<GetSpanResponse | null> {\n const { traceId, spanId } = args;\n try {\n const row = await db.oneOrNone<SpanRow>(\n `${fullSpanSelect()} FROM ${qualifyName(TABLE_SPANS, schemaName)} WHERE ${col('traceId')} = :traceId AND ${col('spanId')} = :spanId`,\n { traceId, spanId },\n );\n\n return row ? { span: transformSpanRow<SpanRecord>(row) } : null;\n } catch (error) {\n throw storageError('GET_SPAN', 'FAILED', { traceId, spanId }, error, ErrorCategory.USER);\n }\n}\n\nexport async function getRootSpan(\n db: OracleDB,\n schemaName: string | undefined,\n args: GetRootSpanArgs,\n): Promise<GetRootSpanResponse | null> {\n const { traceId } = args;\n try {\n const row = await db.oneOrNone<SpanRow>(\n `${fullSpanSelect()} FROM ${qualifyName(TABLE_SPANS, schemaName)} WHERE ${col('traceId')} = :traceId AND ${col(\n 'parentSpanId',\n )} IS NULL FETCH FIRST 1 ROWS ONLY`,\n { traceId },\n );\n\n return row ? { span: transformSpanRow<SpanRecord>(row) } : null;\n } catch (error) {\n throw storageError('GET_ROOT_SPAN', 'FAILED', { traceId }, error, ErrorCategory.USER);\n }\n}\n\nexport async function getTrace(\n db: OracleDB,\n schemaName: string | undefined,\n args: GetTraceArgs,\n): Promise<GetTraceResponse | null> {\n const { traceId } = args;\n try {\n const spans = await db.manyOrNone<SpanRow>(\n `${fullSpanSelect()} FROM ${qualifyName(TABLE_SPANS, schemaName)} WHERE ${col('traceId')} = :traceId ORDER BY ${col(\n 'startedAt',\n )} ASC, ${col('spanId')} ASC`,\n { traceId },\n );\n\n if (spans.length === 0) return null;\n return {\n traceId,\n spans: spans.map(row => transformSpanRow<SpanRecord>(row)),\n };\n } catch (error) {\n throw storageError('GET_TRACE', 'FAILED', { traceId }, error, ErrorCategory.USER);\n }\n}\n\nexport async function getTraceLight(\n db: OracleDB,\n schemaName: string | undefined,\n args: GetTraceArgs,\n): Promise<GetTraceLightResponse | null> {\n const { traceId } = args;\n try {\n const spans = await db.manyOrNone<SpanRow>(\n `${lightSpanSelect()} FROM ${qualifyName(TABLE_SPANS, schemaName)} WHERE ${col('traceId')} = :traceId ORDER BY ${col(\n 'startedAt',\n )} ASC, ${col('spanId')} ASC`,\n { traceId },\n );\n\n if (spans.length === 0) return null;\n return {\n traceId,\n spans: spans.map(row => transformSpanRow<LightSpanRecord>(row)),\n };\n } catch (error) {\n throw storageError('GET_TRACE_LIGHT', 'FAILED', { traceId }, error, ErrorCategory.USER);\n }\n}\n\nexport async function updateSpan(db: OracleDB, schemaName: string | undefined, args: UpdateSpanArgs): Promise<void> {\n const { traceId, spanId } = args;\n try {\n await batchUpdateSpans(db, schemaName, { records: [args] });\n } catch (error) {\n throw storageError('UPDATE_SPAN', 'FAILED', { traceId, spanId }, error, ErrorCategory.USER);\n }\n}\n\nexport async function batchUpdateSpans(\n db: OracleDB,\n schemaName: string | undefined,\n args: BatchUpdateSpansArgs,\n): Promise<void> {\n if (args.records.length === 0) return;\n\n try {\n const now = new Date();\n const groups = new Map<string, { columns: SpanColumn[]; binds: Record<string, unknown>[] }>();\n\n for (const record of coalesceSpanUpdates(args.records)) {\n const columns = updateColumns(record.updates);\n const data = { ...record.updates, updatedAt: now } as Record<string, unknown>;\n const key = columns.join('\\0');\n const group = groups.get(key) ?? { columns, binds: [] };\n group.binds.push({\n traceId: record.traceId,\n spanId: record.spanId,\n ...Object.fromEntries(columns.map(columnName => [columnName, bindValue(columnName, data[columnName])])),\n });\n groups.set(key, group);\n }\n\n await db.tx(async client => {\n // Group updates by changed column set so executeMany can bind each\n // shape once instead of issuing one UPDATE per span.\n for (const group of groups.values()) {\n await client.executeMany(updateSql(schemaName, group.columns), group.binds, {\n bindDefs: bindDefsForColumns(['traceId', 'spanId', ...group.columns]),\n });\n }\n });\n } catch (error) {\n throw storageError('BATCH_UPDATE_SPANS', 'FAILED', { count: args.records.length }, error, ErrorCategory.USER);\n }\n}\n\nexport async function batchDeleteTraces(\n db: OracleDB,\n schemaName: string | undefined,\n args: BatchDeleteTracesArgs,\n): Promise<void> {\n if (args.traceIds.length === 0) return;\n\n try {\n await db.tx(async client => {\n await client.executeMany(\n `DELETE FROM ${qualifyName(TABLE_SPANS, schemaName)} WHERE ${col('traceId')} = :traceId`,\n args.traceIds.map(traceId => ({ traceId })),\n { bindDefs: { traceId: { type: oracledb.STRING, maxSize: 512 } } },\n );\n await client.executeMany(\n `DELETE FROM ${qualifyName(LOG_EVENTS_TABLE, schemaName)} WHERE ${logCol('traceId')} = :traceId`,\n args.traceIds.map(traceId => ({ traceId })),\n { bindDefs: { traceId: { type: oracledb.STRING, maxSize: 512 } } },\n );\n });\n } catch (error) {\n throw storageError('BATCH_DELETE_TRACES', 'FAILED', { count: args.traceIds.length }, error, ErrorCategory.USER);\n }\n}\n\nexport async function listTraces(\n db: OracleDB,\n schemaName: string | undefined,\n args: ListTracesArgs,\n): Promise<ListTracesResponse> {\n const { filters, pagination, orderBy } = listTracesArgsSchema.parse(args);\n const page = pagination.page;\n const perPage = pagination.perPage;\n const binds: Record<string, unknown> = {};\n const conditions = [`r.${col('parentSpanId')} IS NULL`];\n\n try {\n if (filters) {\n // Trace listings start from root spans. Child-error filters are expressed\n // with EXISTS so users can find failed traces without loading children.\n addDateRangeFilter(conditions, binds, 'r', 'startedAt', filters.startedAt);\n addDateRangeFilter(conditions, binds, 'r', 'endedAt', filters.endedAt);\n\n for (const columnName of FILTER_TEXT_COLUMNS) {\n const value = filters[columnName as keyof typeof filters];\n if (value !== undefined) {\n conditions.push(`${qcol('r', columnName)} = ${addBind(binds, value)}`);\n }\n }\n\n addJsonObjectFilter(conditions, binds, 'r', 'scope', filters.scope);\n addJsonObjectFilter(conditions, binds, 'r', 'metadata', filters.metadata);\n addTagsFilter(conditions, binds, 'r', filters.tags);\n addStatusFilter(conditions, 'r', filters.status);\n addChildErrorFilter(conditions, qualifyName(TABLE_SPANS, schemaName), filters.hasChildError);\n }\n\n const whereClause = `WHERE ${conditions.join(' AND ')}`;\n const orderClause = traceOrderClause(orderBy.field, orderBy.direction);\n const countRow = await db.oneOrNone<{ count: number | string }>(\n `SELECT COUNT(*) AS \"count\" FROM ${qualifyName(TABLE_SPANS, schemaName)} r ${whereClause}`,\n binds,\n );\n const total = Number(countRow?.count ?? 0);\n\n if (total === 0) {\n return {\n pagination: { total: 0, page, perPage, hasMore: false },\n spans: [],\n };\n }\n\n const offset = page * perPage;\n const spans = await db.manyOrNone<SpanRow>(\n `${spanSelect(SPAN_COLUMNS, 'r')} FROM ${qualifyName(TABLE_SPANS, schemaName)} r ${whereClause} ${orderClause} OFFSET :offset ROWS FETCH NEXT :limit ROWS ONLY`,\n { ...binds, offset, limit: perPage },\n );\n\n return {\n pagination: {\n total,\n page,\n perPage,\n hasMore: offset + perPage < total,\n },\n spans: toTraceSpans(spans.map(row => transformSpanRow<SpanRecord>(row))),\n };\n } catch (error) {\n throw storageError('LIST_TRACES', 'FAILED', {}, error, ErrorCategory.USER);\n }\n}\n\nexport async function getEntityTypes(\n db: OracleDB,\n schemaName: string | undefined,\n _args: GetEntityTypesArgs,\n): Promise<GetEntityTypesResponse> {\n try {\n return {\n entityTypes: (await distinctContextValues(db, schemaName, 'entityType')) as GetEntityTypesResponse['entityTypes'],\n };\n } catch (error) {\n throw storageError('GET_ENTITY_TYPES', 'FAILED', {}, error, ErrorCategory.USER);\n }\n}\n\nexport async function getEntityNames(\n db: OracleDB,\n schemaName: string | undefined,\n args: GetEntityNamesArgs,\n): Promise<GetEntityNamesResponse> {\n try {\n const binds: Record<string, unknown> = {};\n const entityTypeFilter = args.entityType ? addBind(binds, args.entityType) : undefined;\n const rows = await db.manyOrNone<{ value: string }>(\n `\n SELECT value AS \"value\"\n FROM (\n SELECT ${col('entityName')} AS value\n FROM ${qualifyName(TABLE_SPANS, schemaName)}\n WHERE ${col('entityName')} IS NOT NULL\n ${entityTypeFilter ? `AND ${col('entityType')} = ${entityTypeFilter}` : ''}\n UNION\n SELECT ${logCol('entityName')} AS value\n FROM ${qualifyName(LOG_EVENTS_TABLE, schemaName)}\n WHERE ${logCol('entityName')} IS NOT NULL\n ${entityTypeFilter ? `AND ${logCol('entityType')} = ${entityTypeFilter}` : ''}\n )\n ORDER BY value\n `,\n binds,\n );\n\n return { names: rows.map(row => row.value) };\n } catch (error) {\n throw storageError('GET_ENTITY_NAMES', 'FAILED', { entityType: args.entityType }, error, ErrorCategory.USER);\n }\n}\n\nexport async function getServiceNames(\n db: OracleDB,\n schemaName: string | undefined,\n _args: GetServiceNamesArgs,\n): Promise<GetServiceNamesResponse> {\n try {\n return { serviceNames: await distinctContextValues(db, schemaName, 'serviceName') };\n } catch (error) {\n throw storageError('GET_SERVICE_NAMES', 'FAILED', {}, error, ErrorCategory.USER);\n }\n}\n\nexport async function getEnvironments(\n db: OracleDB,\n schemaName: string | undefined,\n _args: GetEnvironmentsArgs,\n): Promise<GetEnvironmentsResponse> {\n try {\n return { environments: await distinctContextValues(db, schemaName, 'environment') };\n } catch (error) {\n throw storageError('GET_ENVIRONMENTS', 'FAILED', {}, error, ErrorCategory.USER);\n }\n}\n\nexport async function getTags(\n db: OracleDB,\n schemaName: string | undefined,\n args: GetTagsArgs,\n): Promise<GetTagsResponse> {\n try {\n const binds: Record<string, unknown> = {};\n const entityTypeFilter = args.entityType ? addBind(binds, args.entityType) : undefined;\n const rows = await db.manyOrNone<{ value: string }>(\n `\n SELECT value AS \"value\"\n FROM (\n SELECT span_tags.tag AS value\n FROM ${qualifyName(TABLE_SPANS, schemaName)} s,\n JSON_TABLE(${qcol('s', 'tags')}, '$[*]' COLUMNS (tag VARCHAR2(4000) PATH '$')) span_tags\n WHERE span_tags.tag IS NOT NULL\n ${entityTypeFilter ? `AND ${qcol('s', 'entityType')} = ${entityTypeFilter}` : ''}\n UNION\n SELECT log_tags.tag AS value\n FROM ${qualifyName(LOG_EVENTS_TABLE, schemaName)} l,\n JSON_TABLE(${logQcol('l', 'tags')}, '$[*]' COLUMNS (tag VARCHAR2(4000) PATH '$')) log_tags\n WHERE log_tags.tag IS NOT NULL\n ${entityTypeFilter ? `AND ${logQcol('l', 'entityType')} = ${entityTypeFilter}` : ''}\n )\n ORDER BY value\n `,\n binds,\n );\n\n return { tags: rows.map(row => row.value) };\n } catch (error) {\n throw storageError('GET_TAGS', 'FAILED', { entityType: args.entityType }, error, ErrorCategory.USER);\n }\n}\n\nasync function upsertSpans(db: OracleDB, schemaName: string | undefined, spans: CreateSpanRecord[]): Promise<void> {\n if (spans.length === 0) return;\n\n const now = new Date();\n const binds = spans.map(span => spanRecordBinds({ ...span, createdAt: now, updatedAt: now }));\n\n await db.tx(async client => {\n // MERGE supports both initial span creation and later span completion\n // updates through the same code path.\n await client.executeMany(upsertSql(schemaName), binds, {\n bindDefs: bindDefsForColumns(SPAN_COLUMNS),\n });\n });\n}\n\nfunction upsertSql(schemaName: string | undefined): string {\n const table = qualifyName(TABLE_SPANS, schemaName);\n const sourceColumns = SPAN_COLUMNS.map(columnName => `:${columnName} AS ${col(columnName)}`).join(', ');\n const updateAssignments = SPAN_COLUMNS.filter(\n columnName => !SPAN_KEY_COLUMNS.has(columnName) && columnName !== 'createdAt',\n )\n .map(columnName => `target.${col(columnName)} = source.${col(columnName)}`)\n .join(', ');\n const insertColumns = SPAN_COLUMNS.map(columnName => col(columnName)).join(', ');\n const insertValues = SPAN_COLUMNS.map(columnName => `source.${col(columnName)}`).join(', ');\n\n return `\n MERGE INTO ${table} target\n USING (SELECT ${sourceColumns} FROM dual) source\n ON (target.${col('traceId')} = source.${col('traceId')} AND target.${col('spanId')} = source.${col('spanId')})\n WHEN MATCHED THEN UPDATE SET ${updateAssignments}\n WHEN NOT MATCHED THEN INSERT (${insertColumns}) VALUES (${insertValues})\n `;\n}\n\nfunction updateSql(schemaName: string | undefined, columns: SpanColumn[]): string {\n const assignments = columns.map(columnName => `${col(columnName)} = :${columnName}`).join(', ');\n return `UPDATE ${qualifyName(TABLE_SPANS, schemaName)} SET ${assignments} WHERE ${col('traceId')} = :traceId AND ${col('spanId')} = :spanId`;\n}\n\nfunction fullSpanSelect(): string {\n return spanSelect(SPAN_COLUMNS);\n}\n\nfunction lightSpanSelect(): string {\n return spanSelect(LIGHT_SPAN_COLUMNS);\n}\n\nasync function distinctContextValues(\n db: OracleDB,\n schemaName: string | undefined,\n columnName: SharedContextColumn,\n): Promise<string[]> {\n // Studio discovery filters need values from both span rows and log rows.\n // UNION keeps the result distinct while allowing Oracle to use normal\n // scalar indexes on the shared observability context columns.\n const rows = await db.manyOrNone<{ value: string }>(\n `\n SELECT value AS \"value\"\n FROM (\n SELECT ${col(columnName as SpanColumn)} AS value\n FROM ${qualifyName(TABLE_SPANS, schemaName)}\n WHERE ${col(columnName as SpanColumn)} IS NOT NULL\n UNION\n SELECT ${logCol(columnName as LogColumn)} AS value\n FROM ${qualifyName(LOG_EVENTS_TABLE, schemaName)}\n WHERE ${logCol(columnName as LogColumn)} IS NOT NULL\n )\n ORDER BY value\n `,\n );\n\n return rows.map(row => row.value);\n}\n\ntype SpanUpdateRecord = BatchUpdateSpansArgs['records'][number];\n\nfunction coalesceSpanUpdates(records: SpanUpdateRecord[]): SpanUpdateRecord[] {\n // batchUpdateSpans groups records by changed-column shape so executeMany can\n // bind each shape once. That grouping reorders execution relative to the\n // batch's insertion order, so repeated updates to the same (traceId, spanId)\n // pair must be coalesced here first -- in insertion order, merging later\n // updates over earlier ones -- so only the last value for each field within\n // a batch ever reaches Oracle (see CR-10).\n const order: string[] = [];\n const merged = new Map<string, SpanUpdateRecord>();\n\n for (const record of records) {\n const key = `${record.traceId}\\0${record.spanId}`;\n const existing = merged.get(key);\n if (existing) {\n existing.updates = { ...existing.updates, ...record.updates };\n } else {\n order.push(key);\n merged.set(key, { traceId: record.traceId, spanId: record.spanId, updates: { ...record.updates } });\n }\n }\n\n return order.map(key => merged.get(key) as SpanUpdateRecord);\n}\n\nfunction updateColumns(updates: Record<string, unknown>): SpanColumn[] {\n const columns = SPAN_COLUMNS.filter(\n columnName =>\n !SPAN_KEY_COLUMNS.has(columnName) &&\n columnName !== 'createdAt' &&\n columnName !== 'updatedAt' &&\n Object.prototype.hasOwnProperty.call(updates, columnName) &&\n updates[columnName] !== undefined,\n );\n\n columns.push('updatedAt');\n return columns;\n}\n\nfunction spanSelect(columns: readonly SpanColumn[], tableAlias?: string): string {\n return `SELECT ${columns.map(columnName => `${qcol(tableAlias, columnName)} AS \"${columnName}\"`).join(', ')}`;\n}\n\nfunction transformSpanRow<T extends SpanRow>(row: SpanRow): T {\n const result: SpanRow = {};\n\n for (const [key, value] of Object.entries(row)) {\n const columnName = key as SpanColumn;\n const column = SPAN_SCHEMA[columnName];\n\n if (!column) {\n result[key] = value;\n } else if (column.type === 'jsonb') {\n result[key] = parseJsonValue(value);\n } else if (column.type === 'timestamp') {\n result[key] = value == null ? null : toDate(value);\n } else if (column.type === 'boolean') {\n result[key] = parseBoolean(value);\n } else {\n result[key] = value;\n }\n }\n\n return result as T;\n}\n\nfunction parseBoolean(value: unknown): boolean {\n if (typeof value === 'boolean') return value;\n if (typeof value === 'number') return value !== 0;\n if (typeof value === 'string') return value === '1' || value.toLowerCase() === 'true';\n return Boolean(value);\n}\n\nfunction addDateRangeFilter(\n conditions: string[],\n binds: Record<string, unknown>,\n tableAlias: string,\n columnName: 'startedAt' | 'endedAt',\n range?: { start?: Date; end?: Date },\n): void {\n if (range?.start) {\n conditions.push(`${qcol(tableAlias, columnName)} >= ${addBind(binds, range.start)}`);\n }\n if (range?.end) {\n conditions.push(`${qcol(tableAlias, columnName)} <= ${addBind(binds, range.end)}`);\n }\n}\n\nfunction addJsonObjectFilter(\n conditions: string[],\n binds: Record<string, unknown>,\n tableAlias: string,\n columnName: 'scope' | 'metadata',\n filter?: Record<string, unknown> | null,\n): void {\n if (!filter) return;\n\n for (const [path, value] of Object.entries(filter)) {\n conditions.push(\n `JSON_VALUE(${qcol(tableAlias, columnName)}, '${assertJsonPath(\n path,\n )}' RETURNING VARCHAR2(4000) NULL ON ERROR) = ${addBind(binds, jsonComparableValue(value))}`,\n );\n }\n}\n\nfunction addTagsFilter(\n conditions: string[],\n binds: Record<string, unknown>,\n tableAlias: string,\n tags?: string[] | null,\n): void {\n if (!tags?.length) return;\n\n for (const tag of tags) {\n conditions.push(\n `EXISTS (SELECT 1 FROM JSON_TABLE(${qcol(\n tableAlias,\n 'tags',\n )}, '$[*]' COLUMNS (tag VARCHAR2(4000) PATH '$')) tag_filter WHERE tag_filter.tag = ${addBind(binds, tag)})`,\n );\n }\n}\n\nfunction addStatusFilter(conditions: string[], tableAlias: string, status?: TraceStatus): void {\n if (status === undefined) return;\n\n switch (status) {\n case TraceStatus.ERROR:\n conditions.push(jsonValueIsPresent(qcol(tableAlias, 'error')));\n break;\n case TraceStatus.RUNNING:\n conditions.push(`${qcol(tableAlias, 'endedAt')} IS NULL AND ${jsonValueIsAbsent(qcol(tableAlias, 'error'))}`);\n break;\n case TraceStatus.SUCCESS:\n conditions.push(`${qcol(tableAlias, 'endedAt')} IS NOT NULL AND ${jsonValueIsAbsent(qcol(tableAlias, 'error'))}`);\n break;\n }\n}\n\nfunction addChildErrorFilter(conditions: string[], tableName: string, hasChildError?: boolean): void {\n if (hasChildError === undefined) return;\n\n const childErrorPredicate = `SELECT 1 FROM ${tableName} c WHERE c.${col('traceId')} = r.${col(\n 'traceId',\n )} AND ${jsonValueIsPresent(`c.${col('error')}`)}`;\n conditions.push(`${hasChildError ? 'EXISTS' : 'NOT EXISTS'} (${childErrorPredicate})`);\n}\n\nfunction jsonValueIsPresent(expression: string): string {\n return `${expression} IS NOT NULL AND JSON_EXISTS(${expression}, '$?(@ != null)')`;\n}\n\nfunction jsonValueIsAbsent(expression: string): string {\n return `(${expression} IS NULL OR NOT JSON_EXISTS(${expression}, '$?(@ != null)'))`;\n}\n\nfunction traceOrderClause(field: 'startedAt' | 'endedAt', direction: 'ASC' | 'DESC'): string {\n if (field === 'endedAt') {\n const nullsOrder = direction === 'DESC' ? 'NULLS FIRST' : 'NULLS LAST';\n return `ORDER BY r.${col('endedAt')} ${direction} ${nullsOrder}, r.${col('traceId')} ${direction}`;\n }\n\n return `ORDER BY r.${col('startedAt')} ${direction}, r.${col('traceId')} ${direction}`;\n}\n","import { ObservabilityStorage, TABLE_SPANS } from '@mastra/core/storage';\nimport type {\n BatchCreateLogsArgs,\n BatchCreateScoresArgs,\n BatchCreateSpansArgs,\n BatchDeleteTracesArgs,\n BatchUpdateSpansArgs,\n CreateScoreArgs,\n CreateSpanArgs,\n GetEntityNamesArgs,\n GetEntityNamesResponse,\n GetEntityTypesArgs,\n GetEntityTypesResponse,\n GetEnvironmentsArgs,\n GetEnvironmentsResponse,\n GetRootSpanArgs,\n GetRootSpanResponse,\n GetServiceNamesArgs,\n GetServiceNamesResponse,\n GetSpanArgs,\n GetSpanResponse,\n GetTagsArgs,\n GetTagsResponse,\n GetTraceArgs,\n GetTraceLightResponse,\n GetTraceResponse,\n ListLogsArgs,\n ListLogsResponse,\n ListScoresArgs,\n ListScoresResponse,\n ListTracesArgs,\n ListTracesResponse,\n ObservabilityStorageStrategy,\n ScoreRecord,\n TracingStorageStrategy,\n UpdateSpanArgs,\n} from '@mastra/core/storage';\n\nimport { indexNameForTable, qualifyName } from '../../../vector/identifiers';\nimport { createOracleIndex, filterIndexesForTables, OracleDB } from '../../db';\nimport type { OracleCreateIndexOptions } from '../../db';\nimport type { OracleDomainConfig } from '../../types';\nimport * as logsOps from './logs';\nimport {\n getDefaultObservabilityIndexDefinitions,\n LOG_EVENTS_TABLE,\n logEventsTableSql,\n SPAN_NULLABLE_COLUMNS,\n SPAN_SCHEMA,\n} from './schema';\nimport * as scoresOps from './scores-bridge';\nimport * as spansOps from './spans';\n\nexport { getDefaultObservabilityIndexDefinitions, LOG_EVENTS_TABLE, logEventsTableSql } from './schema';\n\nexport class ObservabilityOracle extends ObservabilityStorage {\n static readonly MANAGED_TABLES = [TABLE_SPANS, LOG_EVENTS_TABLE] as const;\n\n private readonly db: OracleDB;\n private readonly schemaName?: string;\n private readonly skipDefaultIndexes?: boolean;\n private readonly indexes: OracleCreateIndexOptions[];\n\n constructor(config: OracleDomainConfig) {\n super();\n this.db = new OracleDB(config);\n this.schemaName = config.schemaName;\n this.skipDefaultIndexes = config.skipDefaultIndexes;\n this.indexes = filterIndexesForTables(config.indexes, ObservabilityOracle.MANAGED_TABLES);\n }\n\n async init(): Promise<void> {\n await this.db.createTable({\n tableName: TABLE_SPANS,\n schema: SPAN_SCHEMA,\n // Spans are unique inside a trace; this composite key also makes MERGE\n // safe for insert/update observability strategies.\n compositePrimaryKey: ['traceId', 'spanId'],\n });\n await this.db.executeDdl(logEventsTableSql(this.table(LOG_EVENTS_TABLE)), [-955]);\n await this.db.alterTable({\n tableName: TABLE_SPANS,\n schema: SPAN_SCHEMA,\n ifNotExists: SPAN_NULLABLE_COLUMNS,\n });\n await this.createIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.db.tx(async client => {\n await client.none(`DELETE FROM ${this.table(LOG_EVENTS_TABLE)}`);\n await client.none(`DELETE FROM ${this.table(TABLE_SPANS)}`);\n });\n }\n\n public get observabilityStrategy(): {\n preferred: ObservabilityStorageStrategy;\n supported: ObservabilityStorageStrategy[];\n } {\n // Oracle supports efficient batch upserts, so prefer the strategy that lets\n // the runtime create spans early and update them as work completes.\n return {\n preferred: 'batch-with-updates',\n supported: ['batch-with-updates', 'insert-only'],\n };\n }\n\n public get tracingStrategy(): {\n preferred: TracingStorageStrategy;\n supported: TracingStorageStrategy[];\n } {\n return this.observabilityStrategy;\n }\n\n getDefaultIndexDefinitions(): OracleCreateIndexOptions[] {\n return getDefaultObservabilityIndexDefinitions(this.indexName.bind(this));\n }\n\n // Logs\n async batchCreateLogs(args: BatchCreateLogsArgs): Promise<void> {\n return logsOps.batchCreateLogs(this.db, this.schemaName, args);\n }\n\n async listLogs(args: ListLogsArgs): Promise<ListLogsResponse> {\n return logsOps.listLogs(this.db, this.schemaName, args);\n }\n\n // Scores\n async listScores(args: ListScoresArgs): Promise<ListScoresResponse> {\n return scoresOps.listScores(this.db, this.schemaName, args);\n }\n\n async createScore(args: CreateScoreArgs): Promise<void> {\n return scoresOps.createScore(this.db, this.schemaName, args);\n }\n\n async batchCreateScores(args: BatchCreateScoresArgs): Promise<void> {\n return scoresOps.batchCreateScores(this.db, this.schemaName, args);\n }\n\n async getScoreById(scoreId: string): Promise<ScoreRecord | null> {\n return scoresOps.getScoreById(this.db, this.schemaName, scoreId);\n }\n\n // Spans & traces\n async createSpan(args: CreateSpanArgs): Promise<void> {\n return spansOps.createSpan(this.db, this.schemaName, args);\n }\n\n async batchCreateSpans(args: BatchCreateSpansArgs): Promise<void> {\n return spansOps.batchCreateSpans(this.db, this.schemaName, args);\n }\n\n async getSpan(args: GetSpanArgs): Promise<GetSpanResponse | null> {\n return spansOps.getSpan(this.db, this.schemaName, args);\n }\n\n async getRootSpan(args: GetRootSpanArgs): Promise<GetRootSpanResponse | null> {\n return spansOps.getRootSpan(this.db, this.schemaName, args);\n }\n\n async getTrace(args: GetTraceArgs): Promise<GetTraceResponse | null> {\n return spansOps.getTrace(this.db, this.schemaName, args);\n }\n\n async getTraceLight(args: GetTraceArgs): Promise<GetTraceLightResponse | null> {\n return spansOps.getTraceLight(this.db, this.schemaName, args);\n }\n\n async updateSpan(args: UpdateSpanArgs): Promise<void> {\n return spansOps.updateSpan(this.db, this.schemaName, args);\n }\n\n async batchUpdateSpans(args: BatchUpdateSpansArgs): Promise<void> {\n return spansOps.batchUpdateSpans(this.db, this.schemaName, args);\n }\n\n async batchDeleteTraces(args: BatchDeleteTracesArgs): Promise<void> {\n return spansOps.batchDeleteTraces(this.db, this.schemaName, args);\n }\n\n async listTraces(args: ListTracesArgs): Promise<ListTracesResponse> {\n return spansOps.listTraces(this.db, this.schemaName, args);\n }\n\n // Discovery (spans + log events)\n async getEntityTypes(args: GetEntityTypesArgs): Promise<GetEntityTypesResponse> {\n return spansOps.getEntityTypes(this.db, this.schemaName, args);\n }\n\n async getEntityNames(args: GetEntityNamesArgs): Promise<GetEntityNamesResponse> {\n return spansOps.getEntityNames(this.db, this.schemaName, args);\n }\n\n async getServiceNames(args: GetServiceNamesArgs): Promise<GetServiceNamesResponse> {\n return spansOps.getServiceNames(this.db, this.schemaName, args);\n }\n\n async getEnvironments(args: GetEnvironmentsArgs): Promise<GetEnvironmentsResponse> {\n return spansOps.getEnvironments(this.db, this.schemaName, args);\n }\n\n async getTags(args: GetTagsArgs): Promise<GetTagsResponse> {\n return spansOps.getTags(this.db, this.schemaName, args);\n }\n\n private async createIndexes(): Promise<void> {\n await this.db.withConnection(async connection => {\n if (!this.skipDefaultIndexes) {\n for (const index of this.getDefaultIndexDefinitions()) {\n try {\n await createOracleIndex(connection, index, this.schemaName);\n } catch (error) {\n this.logger?.warn?.(`Failed to create Oracle default index ${index.name}:`, error);\n }\n }\n }\n\n for (const index of this.indexes) {\n try {\n await createOracleIndex(connection, index, this.schemaName);\n } catch (error) {\n this.logger?.warn?.(`Failed to create Oracle custom index ${index.name}:`, error);\n }\n }\n });\n }\n\n private table(tableName = TABLE_SPANS): string {\n return qualifyName(tableName, this.schemaName);\n }\n\n private indexName(indexName: string): string {\n return indexNameForTable(indexName, 'IDX');\n }\n}\n","import { ErrorCategory, MastraError } from '@mastra/core/error';\nimport {\n calculatePagination,\n normalizePerPage,\n ScorerDefinitionsStorage,\n TABLE_SCHEMAS,\n TABLE_SCORER_DEFINITION_VERSIONS,\n TABLE_SCORER_DEFINITIONS,\n} from '@mastra/core/storage';\nimport type {\n StorageCreateScorerDefinitionInput,\n StorageListScorerDefinitionsInput,\n StorageListScorerDefinitionsOutput,\n StorageScorerDefinitionType,\n StorageUpdateScorerDefinitionInput,\n} from '@mastra/core/storage';\nimport type {\n CreateScorerDefinitionVersionInput,\n ListScorerDefinitionVersionsInput,\n ListScorerDefinitionVersionsOutput,\n ScorerDefinitionVersion,\n} from '@mastra/core/storage/domains/scorer-definitions';\n\nimport { jsonBind, nullableClobBind, nullableJsonBind } from '../../../shared/connection';\nimport { assertJsonPath, indexNameForTable, qualifyName } from '../../../vector/identifiers';\nimport { OracleDB, createOracleIndex, filterIndexesForTables } from '../../db';\nimport type { OracleCreateIndexOptions, OracleTxClient } from '../../db';\nimport {\n createOracleStorageError,\n parseOptionalJson,\n parseOptionalJsonObject,\n parseOptionalStringArray,\n toDate,\n} from '../../domain-utils';\nimport type { OracleDomainConfig } from '../../types';\n\n// Scorer definitions are versioned scoring configurations. Parent rows cover\n// lifecycle/listing while version rows keep model, instructions, and ranges.\nconst STORE_NAME = 'ORACLEDB';\nconst SNAPSHOT_FIELDS = [\n 'name',\n 'description',\n 'type',\n 'model',\n 'instructions',\n 'scoreRange',\n 'presetConfig',\n 'defaultSampling',\n] as const;\n\nconst SCORER_ACTIVE_VERSION_ID = '\"activeVersionId\"';\nconst SCORER_AUTHOR_ID = '\"authorId\"';\nconst SCORER_CREATED_AT = '\"createdAt\"';\nconst SCORER_UPDATED_AT = '\"updatedAt\"';\n\nconst VERSION_SCORER_DEFINITION_ID = '\"scorerDefinitionId\"';\nconst VERSION_VERSION_NUMBER = '\"versionNumber\"';\nconst VERSION_SCORE_RANGE = '\"scoreRange\"';\nconst VERSION_PRESET_CONFIG = '\"presetConfig\"';\nconst VERSION_DEFAULT_SAMPLING = '\"defaultSampling\"';\nconst VERSION_CHANGED_FIELDS = '\"changedFields\"';\nconst VERSION_CHANGE_MESSAGE = '\"changeMessage\"';\nconst VERSION_CREATED_AT = '\"createdAt\"';\n\ntype ScorerDefinitionRow = {\n id: string;\n status: StorageScorerDefinitionType['status'];\n activeVersionId?: string | null;\n authorId?: string | null;\n metadata?: unknown;\n createdAt: Date | string;\n updatedAt: Date | string;\n};\n\ntype ScorerDefinitionVersionRow = {\n id: string;\n scorerDefinitionId: string;\n versionNumber: number | string;\n name: string;\n description?: string | null;\n type: ScorerDefinitionVersion['type'];\n model?: unknown;\n instructions?: string | null;\n scoreRange?: unknown;\n presetConfig?: unknown;\n defaultSampling?: unknown;\n changedFields?: unknown;\n changeMessage?: string | null;\n createdAt: Date | string;\n};\n\ntype VersionWriteClient = Pick<OracleTxClient, 'none'>;\n\nexport class ScorerDefinitionsOracle extends ScorerDefinitionsStorage {\n // Scorer definitions use a small parent row plus versioned scoring configuration.\n static readonly MANAGED_TABLES = [TABLE_SCORER_DEFINITIONS, TABLE_SCORER_DEFINITION_VERSIONS] as const;\n\n private readonly db: OracleDB;\n private readonly schemaName?: string;\n private readonly skipDefaultIndexes?: boolean;\n private readonly indexes: OracleCreateIndexOptions[];\n\n constructor(config: OracleDomainConfig) {\n super();\n this.db = new OracleDB(config);\n this.schemaName = config.schemaName;\n this.skipDefaultIndexes = config.skipDefaultIndexes;\n this.indexes = filterIndexesForTables(config.indexes, ScorerDefinitionsOracle.MANAGED_TABLES);\n }\n\n async init(): Promise<void> {\n await this.db.createTable({\n tableName: TABLE_SCORER_DEFINITIONS,\n schema: TABLE_SCHEMAS[TABLE_SCORER_DEFINITIONS],\n });\n await this.db.createTable({\n tableName: TABLE_SCORER_DEFINITION_VERSIONS,\n schema: TABLE_SCHEMAS[TABLE_SCORER_DEFINITION_VERSIONS],\n });\n await this.createIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.db.tx(async client => {\n await client.none(`DELETE FROM ${this.table(TABLE_SCORER_DEFINITION_VERSIONS)}`);\n await client.none(`DELETE FROM ${this.table(TABLE_SCORER_DEFINITIONS)}`);\n });\n }\n\n getDefaultIndexDefinitions(): OracleCreateIndexOptions[] {\n return getDefaultScorerDefinitionIndexDefinitions(this.indexName.bind(this));\n }\n\n async getById(id: string): Promise<StorageScorerDefinitionType | null> {\n try {\n const row = await this.db.oneOrNone<ScorerDefinitionRow>(\n `${this.scorerSelect()} FROM ${this.table(TABLE_SCORER_DEFINITIONS)} WHERE id = :id`,\n { id },\n );\n return row ? this.parseScorerDefinitionRow(row) : null;\n } catch (error) {\n throw this.storageError('GET_SCORER_DEFINITION_BY_ID', 'FAILED', { scorerDefinitionId: id }, error);\n }\n }\n\n async create(input: { scorerDefinition: StorageCreateScorerDefinitionInput }): Promise<StorageScorerDefinitionType> {\n const { scorerDefinition } = input;\n\n try {\n const now = new Date();\n\n await this.db.tx(async client => {\n const existing = await client.oneOrNone<{ id: string }>(\n `SELECT id AS \"id\" FROM ${this.table(TABLE_SCORER_DEFINITIONS)} WHERE id = :id`,\n { id: scorerDefinition.id },\n );\n if (existing) {\n throw new Error(`Scorer definition with id ${scorerDefinition.id} already exists`);\n }\n\n await client.none(\n `INSERT INTO ${this.table(TABLE_SCORER_DEFINITIONS)} (\n id, status, ${SCORER_ACTIVE_VERSION_ID}, ${SCORER_AUTHOR_ID}, metadata,\n ${SCORER_CREATED_AT}, ${SCORER_UPDATED_AT}\n ) VALUES (\n :id, :status, :activeVersionId, :authorId, :metadata,\n :createdAt, :updatedAt\n )`,\n {\n id: scorerDefinition.id,\n status: 'draft',\n activeVersionId: null,\n authorId: scorerDefinition.authorId ?? null,\n metadata: nullableJsonBind(scorerDefinition.metadata),\n createdAt: now,\n updatedAt: now,\n },\n );\n\n // Version rows keep scorer model, rubric, and sampling config reproducible across eval runs.\n const { id: _id, authorId: _authorId, metadata: _metadata, ...snapshotConfig } = scorerDefinition;\n await this.insertVersion(client, {\n id: crypto.randomUUID(),\n scorerDefinitionId: scorerDefinition.id,\n versionNumber: 1,\n ...snapshotConfig,\n changedFields: [...SNAPSHOT_FIELDS],\n changeMessage: 'Initial version',\n });\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 this.storageError('CREATE_SCORER_DEFINITION', 'FAILED', { scorerDefinitionId: scorerDefinition.id }, error);\n }\n }\n\n async update(input: StorageUpdateScorerDefinitionInput): Promise<StorageScorerDefinitionType> {\n const { id, ...updates } = input;\n\n try {\n const existingScorer = await this.getById(id);\n if (!existingScorer) {\n throw new Error(`Scorer definition with id ${id} not found`);\n }\n\n const { authorId, activeVersionId, metadata, status } = updates;\n const setClauses: string[] = [];\n const binds: Record<string, unknown> = { id };\n\n if (authorId !== undefined) {\n setClauses.push(`${SCORER_AUTHOR_ID} = :authorId`);\n binds.authorId = authorId;\n }\n\n if (activeVersionId !== undefined) {\n setClauses.push(`${SCORER_ACTIVE_VERSION_ID} = :activeVersionId`);\n binds.activeVersionId = activeVersionId;\n }\n\n if (status !== undefined) {\n setClauses.push(`status = :status`);\n binds.status = status;\n }\n\n if (metadata !== undefined) {\n const existingMetadata =\n existingScorer.metadata &&\n typeof existingScorer.metadata === 'object' &&\n !Array.isArray(existingScorer.metadata)\n ? existingScorer.metadata\n : {};\n // Discovery metadata is mutable on the parent row; scorer model/rubric\n // changes belong in explicit version rows.\n setClauses.push(`metadata = :metadata`);\n binds.metadata = jsonBind({ ...existingMetadata, ...metadata });\n }\n\n setClauses.push(`${SCORER_UPDATED_AT} = :updatedAt`);\n binds.updatedAt = new Date();\n\n await this.db.none(\n `UPDATE ${this.table(TABLE_SCORER_DEFINITIONS)} SET ${setClauses.join(', ')} WHERE id = :id`,\n binds,\n );\n\n const updatedScorer = await this.getById(id);\n if (!updatedScorer) {\n throw new Error(`Scorer definition with id ${id} not found after update`);\n }\n return updatedScorer;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw this.storageError('UPDATE_SCORER_DEFINITION', 'FAILED', { scorerDefinitionId: id }, error);\n }\n }\n\n async delete(id: string): Promise<void> {\n try {\n await this.db.tx(async client => {\n await client.none(\n `DELETE FROM ${this.table(TABLE_SCORER_DEFINITION_VERSIONS)} WHERE ${VERSION_SCORER_DEFINITION_ID} = :id`,\n { id },\n );\n await client.none(`DELETE FROM ${this.table(TABLE_SCORER_DEFINITIONS)} WHERE id = :id`, { id });\n });\n } catch (error) {\n throw this.storageError('DELETE_SCORER_DEFINITION', 'FAILED', { scorerDefinitionId: id }, error);\n }\n }\n\n async list(args?: StorageListScorerDefinitionsInput): Promise<StorageListScorerDefinitionsOutput> {\n const { page = 0, perPage: perPageInput, orderBy, authorId, metadata, status } = args || {};\n\n try {\n this.validatePagination(page, perPageInput, 100);\n } catch (error) {\n throw this.storageError('LIST_SCORER_DEFINITIONS', 'INVALID_INPUT', { page }, error, ErrorCategory.USER);\n }\n\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n try {\n const { field, direction } = this.parseOrderBy(orderBy);\n const { whereClause, binds } = this.scorerWhereClause({ status, authorId, metadata });\n\n const countRow = await this.db.oneOrNone<{ count: number | string }>(\n `SELECT COUNT(*) AS \"count\" FROM ${this.table(TABLE_SCORER_DEFINITIONS)} ${whereClause}`,\n binds,\n );\n const total = Number(countRow?.count ?? 0);\n\n if (total === 0) {\n return {\n scorerDefinitions: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n if (perPage === 0) {\n return {\n scorerDefinitions: [],\n total,\n page,\n perPage: perPageForResponse,\n hasMore: total > 0,\n };\n }\n\n const limit = perPageInput === false ? total : perPage;\n // `id ASC` breaks ties between rows sharing the same order-by value so\n // pages stay stable instead of duplicating or dropping rows across pages.\n const rows = await this.db.manyOrNone<ScorerDefinitionRow>(\n `${this.scorerSelect()} FROM ${this.table(\n TABLE_SCORER_DEFINITIONS,\n )} ${whereClause} ORDER BY ${this.scorerOrderColumn(\n field,\n )} ${direction}, id ASC OFFSET :offset ROWS FETCH NEXT :limit ROWS ONLY`,\n { ...binds, offset, limit },\n );\n\n const scorerDefinitions = rows.flatMap(row => {\n try {\n return [this.parseScorerDefinitionRow(row)];\n } catch (error) {\n this.logger?.warn?.('[Oracle] Failed to map scorer definition row, skipping', { id: row?.id, error });\n return [];\n }\n });\n\n return {\n scorerDefinitions,\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 this.storageError('LIST_SCORER_DEFINITIONS', 'FAILED', {}, error);\n }\n }\n\n async createVersion(input: CreateScorerDefinitionVersionInput): Promise<ScorerDefinitionVersion> {\n try {\n const existingById = await this.db.oneOrNone<{ id: string }>(\n `SELECT id AS \"id\" FROM ${this.table(TABLE_SCORER_DEFINITION_VERSIONS)} WHERE id = :id`,\n { id: input.id },\n );\n if (existingById) {\n throw new Error(`Version with id ${input.id} already exists`);\n }\n\n const existingByNumber = await this.db.oneOrNone<{ id: string }>(\n `SELECT id AS \"id\" FROM ${this.table(\n TABLE_SCORER_DEFINITION_VERSIONS,\n )} WHERE ${VERSION_SCORER_DEFINITION_ID} = :scorerDefinitionId AND ${VERSION_VERSION_NUMBER} = :versionNumber`,\n { scorerDefinitionId: input.scorerDefinitionId, versionNumber: input.versionNumber },\n );\n if (existingByNumber) {\n throw new Error(\n `Version number ${input.versionNumber} already exists for scorer definition ${input.scorerDefinitionId}`,\n );\n }\n\n const createdAt = new Date();\n await this.insertVersion(this.db, input, createdAt);\n\n return {\n ...input,\n createdAt,\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw this.storageError(\n 'CREATE_SCORER_DEFINITION_VERSION',\n 'FAILED',\n { versionId: input.id, scorerDefinitionId: input.scorerDefinitionId },\n error,\n );\n }\n }\n\n async getVersion(id: string): Promise<ScorerDefinitionVersion | null> {\n try {\n const row = await this.db.oneOrNone<ScorerDefinitionVersionRow>(\n `${this.versionSelect()} FROM ${this.table(TABLE_SCORER_DEFINITION_VERSIONS)} WHERE id = :id`,\n { id },\n );\n return row ? this.parseVersionRow(row) : null;\n } catch (error) {\n throw this.storageError('GET_SCORER_DEFINITION_VERSION', 'FAILED', { versionId: id }, error);\n }\n }\n\n async getVersionByNumber(scorerDefinitionId: string, versionNumber: number): Promise<ScorerDefinitionVersion | null> {\n try {\n const row = await this.db.oneOrNone<ScorerDefinitionVersionRow>(\n `${this.versionSelect()} FROM ${this.table(\n TABLE_SCORER_DEFINITION_VERSIONS,\n )} WHERE ${VERSION_SCORER_DEFINITION_ID} = :scorerDefinitionId AND ${VERSION_VERSION_NUMBER} = :versionNumber`,\n { scorerDefinitionId, versionNumber },\n );\n return row ? this.parseVersionRow(row) : null;\n } catch (error) {\n throw this.storageError(\n 'GET_SCORER_DEFINITION_VERSION_BY_NUMBER',\n 'FAILED',\n { scorerDefinitionId, versionNumber },\n error,\n );\n }\n }\n\n async getLatestVersion(scorerDefinitionId: string): Promise<ScorerDefinitionVersion | null> {\n try {\n const row = await this.db.oneOrNone<ScorerDefinitionVersionRow>(\n `${this.versionSelect()} FROM ${this.table(\n TABLE_SCORER_DEFINITION_VERSIONS,\n )} WHERE ${VERSION_SCORER_DEFINITION_ID} = :scorerDefinitionId ORDER BY ${VERSION_VERSION_NUMBER} DESC FETCH FIRST 1 ROWS ONLY`,\n { scorerDefinitionId },\n );\n return row ? this.parseVersionRow(row) : null;\n } catch (error) {\n throw this.storageError('GET_LATEST_SCORER_DEFINITION_VERSION', 'FAILED', { scorerDefinitionId }, error);\n }\n }\n\n async listVersions(input: ListScorerDefinitionVersionsInput): Promise<ListScorerDefinitionVersionsOutput> {\n const { scorerDefinitionId, page = 0, perPage: perPageInput, orderBy } = input;\n\n try {\n this.validatePagination(page, perPageInput, 20);\n } catch (error) {\n throw this.storageError(\n 'LIST_SCORER_DEFINITION_VERSIONS',\n 'INVALID_INPUT',\n { page, scorerDefinitionId },\n error,\n ErrorCategory.USER,\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 const countRow = await this.db.oneOrNone<{ count: number | string }>(\n `SELECT COUNT(*) AS \"count\" FROM ${this.table(\n TABLE_SCORER_DEFINITION_VERSIONS,\n )} WHERE ${VERSION_SCORER_DEFINITION_ID} = :scorerDefinitionId`,\n { scorerDefinitionId },\n );\n const total = Number(countRow?.count ?? 0);\n\n if (total === 0) {\n return {\n versions: [],\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n if (perPage === 0) {\n return {\n versions: [],\n total,\n page,\n perPage: perPageForResponse,\n hasMore: total > 0,\n };\n }\n\n const limit = perPageInput === false ? total : perPage;\n // `id ASC` breaks ties between versions sharing the same order-by value so\n // pages stay stable instead of duplicating or dropping rows across pages.\n const rows = await this.db.manyOrNone<ScorerDefinitionVersionRow>(\n `${this.versionSelect()} FROM ${this.table(\n TABLE_SCORER_DEFINITION_VERSIONS,\n )} WHERE ${VERSION_SCORER_DEFINITION_ID} = :scorerDefinitionId ORDER BY ${this.versionOrderColumn(\n field,\n )} ${direction}, id ASC OFFSET :offset ROWS FETCH NEXT :limit ROWS ONLY`,\n { scorerDefinitionId, offset, limit },\n );\n\n const versions = rows.flatMap(row => {\n try {\n return [this.parseVersionRow(row)];\n } catch (error) {\n this.logger?.warn?.('[Oracle] Failed to map scorer definition version row, skipping', {\n id: row?.id,\n error,\n });\n return [];\n }\n });\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 this.storageError('LIST_SCORER_DEFINITION_VERSIONS', 'FAILED', { scorerDefinitionId }, error);\n }\n }\n\n async deleteVersion(id: string): Promise<void> {\n try {\n await this.db.none(`DELETE FROM ${this.table(TABLE_SCORER_DEFINITION_VERSIONS)} WHERE id = :id`, { id });\n } catch (error) {\n throw this.storageError('DELETE_SCORER_DEFINITION_VERSION', 'FAILED', { versionId: id }, error);\n }\n }\n\n async deleteVersionsByParentId(entityId: string): Promise<void> {\n try {\n await this.db.none(\n `DELETE FROM ${this.table(TABLE_SCORER_DEFINITION_VERSIONS)} WHERE ${VERSION_SCORER_DEFINITION_ID} = :entityId`,\n { entityId },\n );\n } catch (error) {\n throw this.storageError(\n 'DELETE_SCORER_DEFINITION_VERSIONS_BY_SCORER_DEFINITION_ID',\n 'FAILED',\n { scorerDefinitionId: entityId },\n error,\n );\n }\n }\n\n async countVersions(scorerDefinitionId: string): Promise<number> {\n try {\n const row = await this.db.oneOrNone<{ count: number | string }>(\n `SELECT COUNT(*) AS \"count\" FROM ${this.table(\n TABLE_SCORER_DEFINITION_VERSIONS,\n )} WHERE ${VERSION_SCORER_DEFINITION_ID} = :scorerDefinitionId`,\n { scorerDefinitionId },\n );\n return Number(row?.count ?? 0);\n } catch (error) {\n throw this.storageError('COUNT_SCORER_DEFINITION_VERSIONS', 'FAILED', { scorerDefinitionId }, error);\n }\n }\n\n private async createIndexes(): Promise<void> {\n await this.db.withConnection(async connection => {\n if (!this.skipDefaultIndexes) {\n for (const index of this.getDefaultIndexDefinitions()) {\n try {\n await createOracleIndex(connection, index, this.schemaName);\n } catch (error) {\n this.logger?.warn?.(`Failed to create Oracle default index ${index.name}:`, error);\n }\n }\n }\n\n for (const index of this.indexes) {\n try {\n await createOracleIndex(connection, index, this.schemaName);\n } catch (error) {\n this.logger?.warn?.(`Failed to create Oracle custom index ${index.name}:`, error);\n }\n }\n });\n }\n\n private async insertVersion(\n client: VersionWriteClient,\n input: CreateScorerDefinitionVersionInput,\n createdAt = new Date(),\n ): Promise<void> {\n // Version rows keep evaluation behavior reproducible: model, instructions,\n // score range, presets, and sampling are all stored as one snapshot.\n await client.none(\n `INSERT INTO ${this.table(TABLE_SCORER_DEFINITION_VERSIONS)} (\n id, ${VERSION_SCORER_DEFINITION_ID}, ${VERSION_VERSION_NUMBER},\n name, description, type, model, instructions, ${VERSION_SCORE_RANGE}, ${VERSION_PRESET_CONFIG},\n ${VERSION_DEFAULT_SAMPLING}, ${VERSION_CHANGED_FIELDS}, ${VERSION_CHANGE_MESSAGE},\n ${VERSION_CREATED_AT}\n ) VALUES (\n :id, :scorerDefinitionId, :versionNumber,\n :name, :description, :type, :model, :instructions, :scoreRange, :presetConfig,\n :defaultSampling, :changedFields, :changeMessage,\n :createdAt\n )`,\n {\n id: input.id,\n scorerDefinitionId: input.scorerDefinitionId,\n versionNumber: input.versionNumber,\n name: input.name,\n description: nullableClobBind(input.description),\n type: input.type,\n model: nullableJsonBind(input.model),\n instructions: nullableClobBind(input.instructions),\n scoreRange: nullableJsonBind(input.scoreRange),\n presetConfig: nullableJsonBind(input.presetConfig),\n defaultSampling: nullableJsonBind(input.defaultSampling),\n changedFields: nullableJsonBind(input.changedFields),\n changeMessage: nullableClobBind(input.changeMessage),\n createdAt,\n },\n );\n }\n\n private scorerWhereClause(args: {\n status?: StorageScorerDefinitionType['status'];\n authorId?: string;\n metadata?: Record<string, unknown>;\n }): { whereClause: string; binds: Record<string, unknown> } {\n const conditions: string[] = [];\n const binds: Record<string, unknown> = {};\n\n if (args.status) {\n conditions.push(`status = :status`);\n binds.status = args.status;\n }\n\n if (args.authorId !== undefined) {\n conditions.push(`${SCORER_AUTHOR_ID} = :authorId`);\n binds.authorId = args.authorId;\n }\n\n if (args.metadata && Object.keys(args.metadata).length > 0) {\n let index = 0;\n for (const [key, value] of Object.entries(args.metadata)) {\n const bindName = `metadata${index++}`;\n // Use JSON containment-style predicates so nested scorer metadata\n // filters behave like PG JSONB containment where Oracle JSON allows it.\n conditions.push(metadataJsonEquals('metadata', key, bindName));\n binds[bindName] = jsonBind(value);\n }\n }\n\n return { whereClause: conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '', binds };\n }\n\n private scorerSelect(): string {\n return [\n `SELECT id AS \"id\"`,\n `status AS \"status\"`,\n `${SCORER_ACTIVE_VERSION_ID} AS \"activeVersionId\"`,\n `${SCORER_AUTHOR_ID} AS \"authorId\"`,\n `metadata AS \"metadata\"`,\n `${SCORER_CREATED_AT} AS \"createdAt\"`,\n `${SCORER_UPDATED_AT} AS \"updatedAt\"`,\n ].join(', ');\n }\n\n private versionSelect(): string {\n return [\n `SELECT id AS \"id\"`,\n `${VERSION_SCORER_DEFINITION_ID} AS \"scorerDefinitionId\"`,\n `${VERSION_VERSION_NUMBER} AS \"versionNumber\"`,\n `name AS \"name\"`,\n `description AS \"description\"`,\n `type AS \"type\"`,\n `model AS \"model\"`,\n `instructions AS \"instructions\"`,\n `${VERSION_SCORE_RANGE} AS \"scoreRange\"`,\n `${VERSION_PRESET_CONFIG} AS \"presetConfig\"`,\n `${VERSION_DEFAULT_SAMPLING} AS \"defaultSampling\"`,\n `${VERSION_CHANGED_FIELDS} AS \"changedFields\"`,\n `${VERSION_CHANGE_MESSAGE} AS \"changeMessage\"`,\n `${VERSION_CREATED_AT} AS \"createdAt\"`,\n ].join(', ');\n }\n\n private parseScorerDefinitionRow(row: ScorerDefinitionRow): StorageScorerDefinitionType {\n return {\n id: String(row.id),\n status: row.status,\n activeVersionId: optionalString(row.activeVersionId),\n authorId: optionalString(row.authorId),\n metadata: parseOptionalJsonObject(row.metadata),\n createdAt: toDate(row.createdAt),\n updatedAt: toDate(row.updatedAt),\n };\n }\n\n private parseVersionRow(row: ScorerDefinitionVersionRow): ScorerDefinitionVersion {\n // Normalize JSON config columns and CLOB text before returning the public\n // ScorerDefinitionVersion expected by core.\n return {\n id: String(row.id),\n scorerDefinitionId: String(row.scorerDefinitionId),\n versionNumber: Number(row.versionNumber),\n name: String(row.name),\n description: optionalString(row.description),\n type: row.type,\n model: parseOptionalJson<ScorerDefinitionVersion['model']>(row.model),\n instructions: optionalString(row.instructions),\n scoreRange: parseOptionalJson<ScorerDefinitionVersion['scoreRange']>(row.scoreRange),\n presetConfig: parseOptionalJson<ScorerDefinitionVersion['presetConfig']>(row.presetConfig),\n defaultSampling: parseOptionalJson<ScorerDefinitionVersion['defaultSampling']>(row.defaultSampling),\n changedFields: parseOptionalStringArray(row.changedFields),\n changeMessage: optionalString(row.changeMessage),\n createdAt: toDate(row.createdAt),\n };\n }\n\n private scorerOrderColumn(field: string): string {\n return field === 'updatedAt' ? SCORER_UPDATED_AT : SCORER_CREATED_AT;\n }\n\n private versionOrderColumn(field: string): string {\n return field === 'createdAt' ? VERSION_CREATED_AT : VERSION_VERSION_NUMBER;\n }\n\n private validatePagination(page: number, perPageInput: number | false | undefined, defaultPerPage: number): void {\n if (page < 0) {\n throw new Error('page must be >= 0');\n }\n\n const perPage = normalizePerPage(perPageInput, defaultPerPage);\n const maxOffset = Number.MAX_SAFE_INTEGER / 2;\n if (perPageInput !== false && page * perPage > maxOffset) {\n throw new Error('page value too large');\n }\n }\n\n private table(tableName: string): string {\n return qualifyName(tableName, this.schemaName);\n }\n\n private indexName(indexName: string): string {\n return indexNameForTable(indexName, 'IDX');\n }\n\n private storageError(\n operation: string,\n reason: string,\n details: Record<string, string | number | boolean | undefined>,\n cause: unknown,\n category: ErrorCategory = ErrorCategory.THIRD_PARTY,\n ): MastraError {\n return createOracleStorageError({ storeName: STORE_NAME, operation, reason, details, cause, category });\n }\n}\n\nexport function getDefaultScorerDefinitionIndexDefinitions(\n indexName: (name: string) => string,\n): OracleCreateIndexOptions[] {\n return [\n {\n name: indexName('MASTRA_SCORER_DEFINITION_VERSIONS_DEF_VERSION'),\n table: TABLE_SCORER_DEFINITION_VERSIONS,\n columns: ['scorerDefinitionId', 'versionNumber'],\n unique: true,\n },\n ];\n}\n\nfunction optionalString(value: unknown): string | undefined {\n if (value === null || value === undefined) return undefined;\n return String(value);\n}\n\nfunction metadataJsonEquals(column: string, path: string, bindName: string): string {\n const jsonPath = assertJsonPath(path);\n return `JSON_EXISTS(${column}, '${jsonPath}') AND JSON_EQUAL(JSON_QUERY(${column}, '${jsonPath}' RETURNING JSON NULL ON ERROR), :${bindName})`;\n}\n","import { randomUUID } from 'node:crypto';\n\nimport { ErrorCategory, MastraError } from '@mastra/core/error';\nimport type { ListScoresResponse, SaveScorePayload, ScoreRowData, ScoringSource } from '@mastra/core/evals';\nimport { saveScorePayloadSchema } from '@mastra/core/evals';\nimport {\n calculatePagination,\n normalizePerPage,\n ScoresStorage,\n TABLE_SCHEMAS,\n TABLE_SCORERS,\n transformScoreRow as coreTransformScoreRow,\n} from '@mastra/core/storage';\nimport type { ScoreTenancyFilters, StorageColumn, StoragePagination } from '@mastra/core/storage';\n\nimport { indexNameForTable, qualifyName } from '../../../vector/identifiers';\nimport { OracleDB, createOracleIndex, filterIndexesForTables } from '../../db';\nimport type { OracleCreateIndexOptions } from '../../db';\nimport { createOracleStorageError } from '../../domain-utils';\nimport type { OracleDomainConfig } from '../../types';\n\n// Scores are append-style evaluation outputs, indexed for scorer, trace/span,\n// entity, thread/resource, and run-level review queries.\nconst STORE_NAME = 'ORACLEDB';\n\nconst SCORE_CREATED_AT = '\"createdAt\"';\nconst SCORE_UPDATED_AT = '\"updatedAt\"';\nconst SCORE_SCORER_ID = '\"scorerId\"';\nconst SCORE_TRACE_ID = '\"traceId\"';\nconst SCORE_SPAN_ID = '\"spanId\"';\nconst SCORE_RUN_ID = '\"runId\"';\nconst SCORE_PREPROCESS_STEP_RESULT = '\"preprocessStepResult\"';\nconst SCORE_EXTRACT_STEP_RESULT = '\"extractStepResult\"';\nconst SCORE_ANALYZE_STEP_RESULT = '\"analyzeStepResult\"';\nconst SCORE_PREPROCESS_PROMPT = '\"preprocessPrompt\"';\nconst SCORE_EXTRACT_PROMPT = '\"extractPrompt\"';\nconst SCORE_GENERATE_SCORE_PROMPT = '\"generateScorePrompt\"';\nconst SCORE_GENERATE_REASON_PROMPT = '\"generateReasonPrompt\"';\nconst SCORE_ANALYZE_PROMPT = '\"analyzePrompt\"';\nconst SCORE_REASON_PROMPT = '\"reasonPrompt\"';\nconst SCORE_ADDITIONAL_CONTEXT = '\"additionalContext\"';\nconst SCORE_REQUEST_CONTEXT = '\"requestContext\"';\nconst SCORE_ENTITY_TYPE = '\"entityType\"';\nconst SCORE_ENTITY_ID = '\"entityId\"';\nconst SCORE_RESOURCE_ID = '\"resourceId\"';\nconst SCORE_THREAD_ID = '\"threadId\"';\nconst SCORE_ORGANIZATION_ID = '\"organizationId\"';\nconst SCORE_PROJECT_ID = '\"projectId\"';\nconst SCORE_BATCH_ID = '\"batchId\"';\nconst SCORE_DATASET_ID = '\"datasetId\"';\nconst SCORE_DATASET_ITEM_ID = '\"datasetItemId\"';\nconst SCORE_LONG_TEXT_COLUMNS = [\n 'reason',\n 'preprocessPrompt',\n 'extractPrompt',\n 'generateScorePrompt',\n 'generateReasonPrompt',\n 'analyzePrompt',\n 'reasonPrompt',\n] as const;\nconst SCORE_NULLABLE_JSON_COLUMNS = ['input', 'output'] as const;\nexport const ORACLE_SCORES_SCHEMA: Record<string, StorageColumn> = {\n ...TABLE_SCHEMAS[TABLE_SCORERS],\n // Experiment scorers can run against failed or suspended workflow runs, where\n // output is intentionally absent. PG stores that as a serialized null/empty\n // value; Oracle should accept the same runtime shape instead of rejecting it.\n input: { ...TABLE_SCHEMAS[TABLE_SCORERS].input!, nullable: true },\n output: { ...TABLE_SCHEMAS[TABLE_SCORERS].output!, nullable: true },\n};\n\ntype ScoreRow = Record<string, unknown>;\n\nfunction transformScoreRow(row: ScoreRow): ScoreRowData {\n // Reuse Mastra's shared score mapper so Oracle returns the same shape as other storage providers.\n return coreTransformScoreRow(row, { convertTimestamps: true });\n}\n\n/**\n * Appends multi-tenant scope conditions to a score query. Mutates `conditions`/`binds`.\n * Mirrors the PG scores domain so organizationId/projectId scoping behaves the same across stores.\n */\nfunction applyTenancyFilters(\n conditions: string[],\n binds: Record<string, unknown>,\n filters?: ScoreTenancyFilters,\n): void {\n if (filters?.organizationId !== undefined) {\n conditions.push(`${SCORE_ORGANIZATION_ID} = :organizationId`);\n binds.organizationId = filters.organizationId;\n }\n if (filters?.projectId !== undefined) {\n conditions.push(`${SCORE_PROJECT_ID} = :projectId`);\n binds.projectId = filters.projectId;\n }\n}\n\nexport class ScoresOracle extends ScoresStorage {\n // Scores are append-style eval records keyed for scorer, run, entity, trace, and span lookups.\n static readonly MANAGED_TABLES = [TABLE_SCORERS] as const;\n\n private readonly db: OracleDB;\n private readonly schemaName?: string;\n private readonly skipDefaultIndexes?: boolean;\n private readonly indexes: OracleCreateIndexOptions[];\n\n constructor(config: OracleDomainConfig) {\n super();\n this.db = new OracleDB(config);\n this.schemaName = config.schemaName;\n this.skipDefaultIndexes = config.skipDefaultIndexes;\n this.indexes = filterIndexesForTables(config.indexes, ScoresOracle.MANAGED_TABLES);\n }\n\n async init(): Promise<void> {\n await this.db.createTable({ tableName: TABLE_SCORERS, schema: ORACLE_SCORES_SCHEMA });\n await this.db.alterTable({\n tableName: TABLE_SCORERS,\n schema: ORACLE_SCORES_SCHEMA,\n ifNotExists: ['spanId', 'requestContext', 'organizationId', 'projectId', 'batchId', 'datasetId', 'datasetItemId'],\n });\n await this.ensureLongTextColumns();\n await this.ensureNullableJsonColumns();\n await this.createIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.db.clearTable(TABLE_SCORERS);\n }\n\n async getScoreById({ id }: { id: string }): Promise<ScoreRowData | null> {\n try {\n const row = await this.db.oneOrNone<ScoreRow>(`${this.selectScores()} FROM ${this.table()} WHERE id = :id`, {\n id,\n });\n return row ? transformScoreRow(row) : null;\n } catch (error) {\n throw this.storageError('GET_SCORE_BY_ID', 'FAILED', { id }, error);\n }\n }\n\n async saveScore(score: SaveScorePayload): Promise<{ score: ScoreRowData }> {\n let validatedScore: SaveScorePayload;\n try {\n validatedScore = saveScorePayloadSchema.parse(score);\n } catch (error) {\n throw this.storageError(\n 'SAVE_SCORE',\n 'VALIDATION_FAILED',\n {\n scorer: typeof score.scorer?.id === 'string' ? score.scorer.id : String(score.scorer?.id ?? 'unknown'),\n entityId: score.entityId ?? 'unknown',\n entityType: score.entityType ?? 'unknown',\n traceId: score.traceId ?? '',\n spanId: score.spanId ?? '',\n },\n error,\n ErrorCategory.USER,\n );\n }\n\n try {\n const id = randomUUID();\n const now = new Date();\n\n // Use the generic OracleDB insert path so JSON-heavy evaluator payloads\n // and long prompt fields follow the shared JSON/CLOB bind handling.\n await this.db.insert({\n tableName: TABLE_SCORERS,\n schema: ORACLE_SCORES_SCHEMA,\n record: {\n id,\n scorerId: validatedScore.scorerId,\n traceId: validatedScore.traceId,\n spanId: validatedScore.spanId,\n runId: validatedScore.runId,\n scorer: validatedScore.scorer,\n preprocessStepResult: validatedScore.preprocessStepResult,\n extractStepResult: validatedScore.extractStepResult,\n analyzeStepResult: validatedScore.analyzeStepResult,\n score: validatedScore.score,\n reason: validatedScore.reason,\n metadata: validatedScore.metadata,\n preprocessPrompt: validatedScore.preprocessPrompt,\n extractPrompt: validatedScore.extractPrompt,\n generateScorePrompt: validatedScore.generateScorePrompt,\n generateReasonPrompt: validatedScore.generateReasonPrompt,\n analyzePrompt: validatedScore.analyzePrompt,\n reasonPrompt: validatedScore.reasonPrompt,\n input: validatedScore.input,\n output: validatedScore.output,\n additionalContext: validatedScore.additionalContext,\n requestContext: validatedScore.requestContext,\n entityType: validatedScore.entityType,\n entity: validatedScore.entity,\n entityId: validatedScore.entityId,\n source: validatedScore.source,\n resourceId: validatedScore.resourceId,\n threadId: validatedScore.threadId,\n organizationId: validatedScore.organizationId,\n projectId: validatedScore.projectId,\n batchId: validatedScore.batchId,\n datasetId: validatedScore.datasetId,\n datasetItemId: validatedScore.datasetItemId,\n createdAt: now,\n updatedAt: now,\n },\n });\n\n return { score: { ...validatedScore, id, createdAt: now, updatedAt: now } };\n } catch (error) {\n throw this.storageError('SAVE_SCORE', 'FAILED', { scorerId: score.scorerId, runId: score.runId }, error);\n }\n }\n\n async listScoresByScorerId({\n scorerId,\n pagination,\n entityId,\n entityType,\n source,\n filters,\n }: {\n scorerId: string;\n pagination: StoragePagination;\n entityId?: string;\n entityType?: string;\n source?: ScoringSource;\n filters?: ScoreTenancyFilters;\n }): Promise<ListScoresResponse> {\n const conditions = [`${SCORE_SCORER_ID} = :scorerId`];\n const binds: Record<string, unknown> = { scorerId };\n\n if (entityId) {\n conditions.push(`${SCORE_ENTITY_ID} = :entityId`);\n binds.entityId = entityId;\n }\n if (entityType) {\n conditions.push(`${SCORE_ENTITY_TYPE} = :entityType`);\n binds.entityType = entityType;\n }\n if (source) {\n conditions.push(`source = :source`);\n binds.source = source;\n }\n applyTenancyFilters(conditions, binds, filters);\n\n try {\n return await this.listScores({\n whereClause: `WHERE ${conditions.join(' AND ')}`,\n binds,\n pagination,\n operation: 'LIST_SCORES_BY_SCORER_ID',\n details: { scorerId },\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw this.storageError('LIST_SCORES_BY_SCORER_ID', 'FAILED', { scorerId }, error);\n }\n }\n\n async listScoresByRunId({\n runId,\n pagination,\n filters,\n }: {\n runId: string;\n pagination: StoragePagination;\n filters?: ScoreTenancyFilters;\n }): Promise<ListScoresResponse> {\n try {\n const conditions = [`${SCORE_RUN_ID} = :runId`];\n const binds: Record<string, unknown> = { runId };\n applyTenancyFilters(conditions, binds, filters);\n\n return await this.listScores({\n whereClause: `WHERE ${conditions.join(' AND ')}`,\n binds,\n pagination,\n operation: 'LIST_SCORES_BY_RUN_ID',\n details: { runId },\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw this.storageError('LIST_SCORES_BY_RUN_ID', 'FAILED', { runId }, error);\n }\n }\n\n async listScoresByEntityId({\n entityId,\n entityType,\n pagination,\n filters,\n }: {\n pagination: StoragePagination;\n entityId: string;\n entityType: string;\n filters?: ScoreTenancyFilters;\n }): Promise<ListScoresResponse> {\n try {\n const conditions = [`${SCORE_ENTITY_ID} = :entityId`, `${SCORE_ENTITY_TYPE} = :entityType`];\n const binds: Record<string, unknown> = { entityId, entityType };\n applyTenancyFilters(conditions, binds, filters);\n\n return await this.listScores({\n whereClause: `WHERE ${conditions.join(' AND ')}`,\n binds,\n pagination,\n operation: 'LIST_SCORES_BY_ENTITY_ID',\n details: { entityId, entityType },\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw this.storageError('LIST_SCORES_BY_ENTITY_ID', 'FAILED', { entityId, entityType }, error);\n }\n }\n\n async listScoresBySpan({\n traceId,\n spanId,\n pagination,\n filters,\n }: {\n traceId: string;\n spanId: string;\n pagination: StoragePagination;\n filters?: ScoreTenancyFilters;\n }): Promise<ListScoresResponse> {\n try {\n const conditions = [`${SCORE_TRACE_ID} = :traceId`, `${SCORE_SPAN_ID} = :spanId`];\n const binds: Record<string, unknown> = { traceId, spanId };\n applyTenancyFilters(conditions, binds, filters);\n\n return await this.listScores({\n whereClause: `WHERE ${conditions.join(' AND ')}`,\n binds,\n pagination,\n operation: 'LIST_SCORES_BY_SPAN',\n details: { traceId, spanId },\n });\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw this.storageError('LIST_SCORES_BY_SPAN', 'FAILED', { traceId, spanId }, error);\n }\n }\n\n getDefaultIndexDefinitions(): OracleCreateIndexOptions[] {\n return defaultScoreIndexes(this.indexName.bind(this));\n }\n\n private async createIndexes(): Promise<void> {\n await this.db.withConnection(async connection => {\n if (!this.skipDefaultIndexes) {\n for (const index of this.getDefaultIndexDefinitions()) {\n try {\n await createOracleIndex(connection, index, this.schemaName);\n } catch (error) {\n this.logger?.warn?.(`Failed to create Oracle default index ${index.name}:`, error);\n }\n }\n }\n\n for (const index of this.indexes) {\n try {\n await createOracleIndex(connection, index, this.schemaName);\n } catch (error) {\n this.logger?.warn?.(`Failed to create Oracle custom index ${index.name}:`, error);\n }\n }\n });\n }\n\n private async ensureLongTextColumns(): Promise<void> {\n // LLM scorer prompts can exceed VARCHAR2(4000). Existing Oracle installs\n // may already have the old column shape, so migrate only columns that are\n // still character types and leave CLOB columns untouched.\n for (const columnName of SCORE_LONG_TEXT_COLUMNS) {\n const dataType = await this.scoreColumnDataType(columnName);\n if (dataType === 'CLOB' || dataType === 'NCLOB') continue;\n\n if (!dataType) {\n // The narrow column can be missing entirely because a previous\n // migration crashed between DROP and RENAME, leaving the CLOB copy\n // parked under its temporary name. Only skip when there is genuinely\n // nothing to repair; otherwise fall through so the migration resumes\n // instead of leaving the table permanently missing the column.\n const tempExists = await this.scoreColumnExists(scoreTempClobColumnName(columnName));\n if (!tempExists) continue;\n }\n\n await this.migrateScoreTextColumnToClob(columnName);\n }\n }\n\n private async ensureNullableJsonColumns(): Promise<void> {\n for (const columnName of SCORE_NULLABLE_JSON_COLUMNS) {\n const nullable = await this.scoreColumnNullable(columnName);\n if (nullable === 'N') {\n await this.db.executeDdl(`ALTER TABLE ${this.table()} MODIFY (${scoreColumnSql(columnName)} NULL)`);\n }\n }\n }\n\n private async scoreColumnDataType(columnName: string): Promise<string | undefined> {\n const binds: Record<string, string> = {\n tableName: TABLE_SCORERS,\n columnName,\n };\n const ownerPredicate = this.schemaName\n ? 'owner = UPPER(:schemaName)'\n : `owner = SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA')`;\n if (this.schemaName) binds.schemaName = this.schemaName;\n\n const row = await this.db.oneOrNone<{ dataType: string }>(\n `SELECT data_type AS \"dataType\" FROM all_tab_columns WHERE ${ownerPredicate} AND table_name = UPPER(:tableName) AND column_name IN (:columnName, UPPER(:columnName)) FETCH FIRST 1 ROW ONLY`,\n binds,\n );\n\n return row?.dataType?.toUpperCase();\n }\n\n private async scoreColumnNullable(columnName: string): Promise<string | undefined> {\n const binds: Record<string, string> = {\n tableName: TABLE_SCORERS,\n columnName,\n };\n const ownerPredicate = this.schemaName\n ? 'owner = UPPER(:schemaName)'\n : `owner = SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA')`;\n if (this.schemaName) binds.schemaName = this.schemaName;\n\n const row = await this.db.oneOrNone<{ nullable: string }>(\n `SELECT nullable AS \"nullable\" FROM all_tab_columns WHERE ${ownerPredicate} AND table_name = UPPER(:tableName) AND column_name IN (:columnName, UPPER(:columnName)) FETCH FIRST 1 ROW ONLY`,\n binds,\n );\n\n return row?.nullable;\n }\n\n private async scoreColumnExists(columnName: string): Promise<boolean> {\n // Variant of scoreColumnDataType that only checks presence, used to detect\n // an orphaned temp CLOB column (or a dropped original column) after a\n // partially-failed migration, without caring about its data type.\n const binds: Record<string, string> = {\n tableName: TABLE_SCORERS,\n columnName,\n };\n const ownerPredicate = this.schemaName\n ? 'owner = UPPER(:schemaName)'\n : `owner = SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA')`;\n if (this.schemaName) binds.schemaName = this.schemaName;\n\n const row = await this.db.oneOrNone<{ exists: number }>(\n `SELECT 1 AS \"exists\" FROM all_tab_columns WHERE ${ownerPredicate} AND table_name = UPPER(:tableName) AND column_name IN (:columnName, UPPER(:columnName)) FETCH FIRST 1 ROW ONLY`,\n binds,\n );\n\n return row !== null;\n }\n\n private async migrateScoreTextColumnToClob(columnName: (typeof SCORE_LONG_TEXT_COLUMNS)[number]): Promise<void> {\n const oldColumn = scoreColumnSql(columnName);\n const tempColumn = scoreTempClobColumnName(columnName);\n\n // Oracle commits each DDL statement immediately - ADD, DROP, and RENAME\n // are not wrapped in one transaction - so a previous call to this method\n // can crash partway through (e.g. after DROP but before RENAME, which\n // would otherwise leave the table missing the column forever). Resume\n // from the observable column state instead of blindly repeating the full\n // sequence. The temp column existing is NOT proof the copy ran: a crash\n // can land between ADD and UPDATE, so while the original column is still\n // present it stays the source of truth and the copy re-runs.\n const oldExists = await this.scoreColumnExists(columnName);\n const tempExists = await this.scoreColumnExists(tempColumn);\n\n if (!tempExists) {\n await this.db.executeDdl(`ALTER TABLE ${this.table()} ADD (${tempColumn} CLOB)`, [-1430]);\n }\n\n if (oldExists) {\n // The UPDATE is idempotent (it rewrites the temp CLOB from the original\n // column), so re-running it on every attempt that still has the\n // original column is safe - and required, or a retry after a failed\n // copy would DROP the only column holding the data and RENAME an\n // empty CLOB into its place.\n await this.db.none(\n `UPDATE ${this.table()} SET ${tempColumn} = TO_CLOB(${oldColumn}) WHERE ${oldColumn} IS NOT NULL`,\n );\n await this.db.executeDdl(`ALTER TABLE ${this.table()} DROP COLUMN ${oldColumn}`);\n }\n\n await this.db.executeDdl(`ALTER TABLE ${this.table()} RENAME COLUMN ${tempColumn} TO ${oldColumn}`);\n }\n\n private async listScores({\n whereClause,\n binds,\n pagination,\n operation,\n details,\n }: {\n whereClause: string;\n binds: Record<string, unknown>;\n pagination: StoragePagination;\n operation: string;\n details: Record<string, string | number | boolean | undefined>;\n }): Promise<ListScoresResponse> {\n try {\n // All score listing variants share the same pagination path so scorer,\n // run, entity, and trace views stay behaviorally identical.\n const countRow = await this.db.oneOrNone<{ count: number | string }>(\n `SELECT COUNT(*) AS \"count\" FROM ${this.table()} ${whereClause}`,\n binds,\n );\n const total = Number(countRow?.count ?? 0);\n const { page, perPage: perPageInput } = pagination;\n const perPage = normalizePerPage(perPageInput, 100);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n if (total === 0) {\n return {\n scores: [],\n pagination: {\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n },\n };\n }\n\n const limit = perPageInput === false ? total : perPage;\n const end = perPageInput === false ? total : offset + perPage;\n const rows = await this.db.execute<ScoreRow>(\n // `id ASC` breaks ties between rows with identical createdAt timestamps so\n // pages stay stable instead of duplicating or dropping rows across pages.\n `${this.selectScores()} FROM ${this.table()} ${whereClause} ORDER BY ${SCORE_CREATED_AT} DESC, id ASC OFFSET :offset ROWS FETCH NEXT :limit ROWS ONLY`,\n { ...binds, offset, limit },\n );\n\n return {\n scores: rows.map(row => transformScoreRow(row)),\n pagination: {\n total,\n page,\n perPage: perPageForResponse,\n hasMore: end < total,\n },\n };\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw this.storageError(operation, 'FAILED', details, error);\n }\n }\n\n private selectScores(): string {\n return `SELECT ${scoreSelectColumns()}`;\n }\n\n private table(): string {\n return qualifyName(TABLE_SCORERS, this.schemaName);\n }\n\n private indexName(indexName: string): string {\n return indexNameForTable(indexName, 'IDX');\n }\n\n private storageError(\n operation: string,\n reason: string,\n details: Record<string, string | number | boolean | undefined>,\n cause: unknown,\n category: ErrorCategory = ErrorCategory.THIRD_PARTY,\n ): MastraError {\n return createOracleStorageError({ storeName: STORE_NAME, operation, reason, details, cause, category });\n }\n}\n\nexport function getDefaultScoreIndexDefinitions(schemaIndexName: (name: string) => string): OracleCreateIndexOptions[] {\n return defaultScoreIndexes(schemaIndexName);\n}\n\nexport function scoreSelectColumns(): string {\n return [\n `id AS \"id\"`,\n `${SCORE_SCORER_ID} AS \"scorerId\"`,\n `${SCORE_TRACE_ID} AS \"traceId\"`,\n `${SCORE_SPAN_ID} AS \"spanId\"`,\n `${SCORE_RUN_ID} AS \"runId\"`,\n `scorer AS \"scorer\"`,\n `${SCORE_PREPROCESS_STEP_RESULT} AS \"preprocessStepResult\"`,\n `${SCORE_EXTRACT_STEP_RESULT} AS \"extractStepResult\"`,\n `${SCORE_ANALYZE_STEP_RESULT} AS \"analyzeStepResult\"`,\n `score AS \"score\"`,\n `reason AS \"reason\"`,\n `metadata AS \"metadata\"`,\n `${SCORE_PREPROCESS_PROMPT} AS \"preprocessPrompt\"`,\n `${SCORE_EXTRACT_PROMPT} AS \"extractPrompt\"`,\n `${SCORE_GENERATE_SCORE_PROMPT} AS \"generateScorePrompt\"`,\n `${SCORE_GENERATE_REASON_PROMPT} AS \"generateReasonPrompt\"`,\n `${SCORE_ANALYZE_PROMPT} AS \"analyzePrompt\"`,\n `${SCORE_REASON_PROMPT} AS \"reasonPrompt\"`,\n `input AS \"input\"`,\n `output AS \"output\"`,\n `${SCORE_ADDITIONAL_CONTEXT} AS \"additionalContext\"`,\n `${SCORE_REQUEST_CONTEXT} AS \"requestContext\"`,\n `${SCORE_ENTITY_TYPE} AS \"entityType\"`,\n `entity AS \"entity\"`,\n `${SCORE_ENTITY_ID} AS \"entityId\"`,\n `source AS \"source\"`,\n `${SCORE_RESOURCE_ID} AS \"resourceId\"`,\n `${SCORE_THREAD_ID} AS \"threadId\"`,\n `${SCORE_ORGANIZATION_ID} AS \"organizationId\"`,\n `${SCORE_PROJECT_ID} AS \"projectId\"`,\n `${SCORE_BATCH_ID} AS \"batchId\"`,\n `${SCORE_DATASET_ID} AS \"datasetId\"`,\n `${SCORE_DATASET_ITEM_ID} AS \"datasetItemId\"`,\n `${SCORE_CREATED_AT} AS \"createdAt\"`,\n `${SCORE_UPDATED_AT} AS \"updatedAt\"`,\n ].join(', ');\n}\n\nfunction defaultScoreIndexes(indexName: (name: string) => string): OracleCreateIndexOptions[] {\n return [\n {\n name: indexName('MASTRA_SCORES_SCORER_ID'),\n table: TABLE_SCORERS,\n columns: ['scorerId'],\n },\n {\n name: indexName('MASTRA_SCORES_RUN_ID'),\n table: TABLE_SCORERS,\n columns: ['runId'],\n },\n {\n name: indexName('MASTRA_SCORES_ENTITY_ID_TYPE'),\n table: TABLE_SCORERS,\n columns: ['entityId', 'entityType'],\n },\n {\n name: indexName('MASTRA_SCORES_TRACE_ID_SPAN_ID_CREATED_AT'),\n table: TABLE_SCORERS,\n columns: ['traceId', 'spanId', 'createdAt DESC'],\n },\n ];\n}\n\nfunction scoreColumnSql(columnName: string): string {\n return /^[a-z][a-z0-9_]*$/.test(columnName) ? columnName : `\"${columnName}\"`;\n}\n\nfunction scoreTempClobColumnName(columnName: string): string {\n return `ORACLE_TMP_${columnName.toUpperCase()}_CLOB`;\n}\n","import { ErrorCategory } from '@mastra/core/error';\nimport {\n normalizePerPage,\n TABLE_WORKFLOW_SNAPSHOT,\n WorkflowsStorage,\n matchesExpectedWorkflowStatus,\n} from '@mastra/core/storage';\nimport type {\n StorageListWorkflowRunsInput,\n UpdateWorkflowStateOptions,\n WorkflowRun,\n WorkflowRuns,\n} from '@mastra/core/storage';\nimport type { StepResult, WorkflowRunState } from '@mastra/core/workflows';\n\nimport { isOracleErrorCode, jsonBind } from '../../../shared/connection';\nimport { indexNameForTable, qualifyName } from '../../../vector/identifiers';\nimport { OracleDB, createOracleIndex, filterIndexesForTables } from '../../db';\nimport type { OracleCreateIndexOptions, OracleTxClient } from '../../db';\nimport { createOracleStorageError, toDate } from '../../domain-utils';\nimport type { OracleDomainConfig } from '../../types';\n\n// Workflows persist resumable run snapshots in Oracle JSON and lock rows before\n// patching step results so concurrent updates do not lose state.\nconst STORE_NAME = 'ORACLEDB';\n\nconst WORKFLOW_CREATED_AT = '\"createdAt\"';\nconst WORKFLOW_UPDATED_AT = '\"updatedAt\"';\nconst WORKFLOW_RESOURCE_ID = '\"resourceId\"';\n\ntype WorkflowRow = {\n workflowName: string;\n runId: string;\n resourceId?: string | null;\n snapshot: unknown;\n createdAt: Date | string;\n updatedAt: Date | string;\n};\n\nexport class WorkflowsOracle extends WorkflowsStorage {\n // Workflow state is a JSON snapshot keyed by workflow name + run id.\n static readonly MANAGED_TABLES = [TABLE_WORKFLOW_SNAPSHOT] as const;\n\n private readonly db: OracleDB;\n private readonly schemaName?: string;\n private readonly skipDefaultIndexes?: boolean;\n private readonly indexes: OracleCreateIndexOptions[];\n\n constructor(config: OracleDomainConfig) {\n super();\n this.db = new OracleDB(config);\n this.schemaName = config.schemaName;\n this.skipDefaultIndexes = config.skipDefaultIndexes;\n this.indexes = filterIndexesForTables(config.indexes, WorkflowsOracle.MANAGED_TABLES);\n }\n\n supportsConcurrentUpdates(): boolean {\n // Row-level locks protect JSON snapshot patches, so independent steps can\n // update the same workflow run without clobbering each other.\n return true;\n }\n\n async init(): Promise<void> {\n await this.createTables();\n await this.createIndexes();\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.db.clearTable(TABLE_WORKFLOW_SNAPSHOT);\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 try {\n return await this.db.tx(async client => {\n await this.ensureWorkflowRunRow(client, workflowName, runId);\n\n // Lock the row before patching the JSON snapshot so concurrent step updates do not overwrite each other.\n const existing = await client.one<{ snapshot: unknown; resourceId?: string | null }>(\n `SELECT snapshot AS \"snapshot\", ${WORKFLOW_RESOURCE_ID} AS \"resourceId\" FROM ${this.table()} WHERE workflow_name = :workflowName AND run_id = :runId FOR UPDATE`,\n { workflowName, runId },\n );\n\n const snapshot = parseSnapshot(existing.snapshot);\n snapshot.context[stepId] = result;\n snapshot.requestContext = { ...(snapshot.requestContext ?? {}), ...requestContext };\n\n await client.none(this.workflowMergeSql(), {\n workflowName,\n runId,\n resourceId: existing?.resourceId ?? null,\n snapshot: jsonBind(snapshot),\n createdAt: new Date(),\n updatedAt: new Date(),\n });\n\n return snapshot.context;\n });\n } catch (error) {\n throw this.storageError('UPDATE_WORKFLOW_RESULTS', 'FAILED', { workflowName, runId, stepId }, error);\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 try {\n return await this.db.tx(async client => {\n // State updates patch top-level snapshot fields and require a pre-existing\n // run row; result updates create a default row when needed.\n const existing = await client.oneOrNone<{ snapshot: unknown }>(\n `SELECT snapshot AS \"snapshot\" FROM ${this.table()} WHERE workflow_name = :workflowName AND run_id = :runId FOR UPDATE`,\n { workflowName, runId },\n );\n if (!existing) return undefined;\n\n const snapshot = parseSnapshot(existing.snapshot);\n if (!snapshot?.context) {\n throw new Error(`Snapshot not found for runId ${runId}`);\n }\n\n const { expectedStatus, ...state } = opts;\n if (!matchesExpectedWorkflowStatus(snapshot.status, expectedStatus)) {\n return undefined;\n }\n\n const updatedSnapshot = { ...snapshot, ...state };\n await client.none(\n `UPDATE ${this.table()} SET snapshot = :snapshot, ${WORKFLOW_UPDATED_AT} = :updatedAt WHERE workflow_name = :workflowName AND run_id = :runId`,\n { workflowName, runId, snapshot: jsonBind(updatedSnapshot), updatedAt: new Date() },\n );\n return updatedSnapshot;\n });\n } catch (error) {\n throw this.storageError('UPDATE_WORKFLOW_STATE', 'FAILED', { workflowName, runId }, error);\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 try {\n const now = new Date();\n // Persisting a snapshot is an upsert because workflows may suspend/resume\n // the same run multiple times.\n await this.db.none(this.workflowMergeSql(), {\n workflowName,\n runId,\n resourceId: resourceId ?? null,\n snapshot: jsonBind(snapshot),\n createdAt: createdAt ?? now,\n updatedAt: updatedAt ?? now,\n });\n } catch (error) {\n throw this.storageError('PERSIST_WORKFLOW_SNAPSHOT', 'FAILED', { workflowName, runId }, error);\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.db.oneOrNone<{ snapshot: unknown }>(\n `SELECT snapshot AS \"snapshot\" FROM ${this.table()} WHERE workflow_name = :workflowName AND run_id = :runId`,\n { workflowName, runId },\n );\n return row ? parseSnapshot(row.snapshot) : null;\n } catch (error) {\n throw this.storageError('LOAD_WORKFLOW_SNAPSHOT', 'FAILED', { workflowName, runId }, error);\n }\n }\n\n async listWorkflowRuns({\n workflowName,\n fromDate,\n toDate,\n perPage,\n page,\n resourceId,\n status,\n }: StorageListWorkflowRunsInput = {}): Promise<WorkflowRuns> {\n try {\n const { whereClause, binds } = this.workflowWhereClause({ workflowName, fromDate, toDate, resourceId, status });\n const usePagination = typeof perPage === 'number' && typeof page === 'number';\n const normalizedPerPage = usePagination ? normalizePerPage(perPage, Number.MAX_SAFE_INTEGER) : 0;\n const offset = usePagination ? page! * normalizedPerPage : 0;\n\n const count = usePagination\n ? Number(\n (\n await this.db.one<{ count: number }>(\n `SELECT COUNT(*) AS \"count\" FROM ${this.table()} ${whereClause}`,\n binds,\n )\n ).count ?? 0,\n )\n : 0;\n\n const rows = await this.db.manyOrNone<WorkflowRow>(\n `${this.workflowSelect()} FROM ${this.table()} ${whereClause} ORDER BY ${WORKFLOW_CREATED_AT} DESC ${\n usePagination ? 'OFFSET :offset ROWS FETCH NEXT :limit ROWS ONLY' : ''\n }`,\n usePagination ? { ...binds, offset, limit: normalizedPerPage } : binds,\n );\n\n const runs = rows.map(row => this.parseWorkflowRun(row));\n return { runs, total: usePagination ? count : runs.length };\n } catch (error) {\n throw this.storageError('LIST_WORKFLOW_RUNS', 'FAILED', { workflowName: workflowName ?? 'all' }, error);\n }\n }\n\n async getWorkflowRunById({\n runId,\n workflowName,\n }: {\n runId: string;\n workflowName?: string;\n }): Promise<WorkflowRun | null> {\n try {\n const conditions = ['run_id = :runId'];\n const binds: Record<string, unknown> = { runId };\n if (workflowName) {\n conditions.push('workflow_name = :workflowName');\n binds.workflowName = workflowName;\n }\n\n const rows = await this.db.manyOrNone<WorkflowRow>(\n `${this.workflowSelect()} FROM ${this.table()} WHERE ${conditions.join(' AND ')} ORDER BY ${WORKFLOW_CREATED_AT} DESC FETCH FIRST 1 ROWS ONLY`,\n binds,\n );\n return rows[0] ? this.parseWorkflowRun(rows[0]) : null;\n } catch (error) {\n throw this.storageError('GET_WORKFLOW_RUN_BY_ID', 'FAILED', { runId, workflowName: workflowName ?? '' }, error);\n }\n }\n\n async deleteWorkflowRunById({ runId, workflowName }: { runId: string; workflowName: string }): Promise<void> {\n try {\n await this.db.none(`DELETE FROM ${this.table()} WHERE workflow_name = :workflowName AND run_id = :runId`, {\n workflowName,\n runId,\n });\n } catch (error) {\n throw this.storageError('DELETE_WORKFLOW_RUN_BY_ID', 'FAILED', { runId, workflowName }, error);\n }\n }\n\n private async createTables(): Promise<void> {\n await this.db.executeDdl(\n `\n CREATE TABLE ${this.table()} (\n workflow_name VARCHAR2(512) NOT NULL,\n run_id VARCHAR2(512) NOT NULL,\n ${WORKFLOW_RESOURCE_ID} VARCHAR2(512),\n snapshot JSON NOT NULL,\n ${WORKFLOW_CREATED_AT} TIMESTAMP WITH TIME ZONE NOT NULL,\n ${WORKFLOW_UPDATED_AT} TIMESTAMP WITH TIME ZONE NOT NULL,\n CONSTRAINT ${this.constraint('MASTRA_WORKFLOW_SNAPSHOT_PK')} PRIMARY KEY (workflow_name, run_id)\n )`,\n [-955],\n );\n\n await this.db.executeDdl(`ALTER TABLE ${this.table()} ADD (${WORKFLOW_RESOURCE_ID} VARCHAR2(512))`, [-1430]);\n }\n\n private async createIndexes(): Promise<void> {\n await this.db.withConnection(async connection => {\n if (!this.skipDefaultIndexes) {\n for (const index of this.defaultIndexes()) {\n try {\n await createOracleIndex(connection, index, this.schemaName);\n } catch (error) {\n this.logger?.warn?.(`Failed to create Oracle default index ${index.name}:`, error);\n }\n }\n }\n\n for (const index of this.indexes) {\n await createOracleIndex(connection, index, this.schemaName);\n }\n });\n }\n\n private defaultIndexes(): OracleCreateIndexOptions[] {\n return [\n {\n name: this.indexName('MASTRA_WORKFLOW_NAME_CREATED_IDX'),\n table: TABLE_WORKFLOW_SNAPSHOT,\n columns: ['workflow_name', 'createdAt'],\n },\n {\n name: this.indexName('MASTRA_WORKFLOW_RESOURCE_CREATED_IDX'),\n table: TABLE_WORKFLOW_SNAPSHOT,\n columns: ['resourceId', 'createdAt'],\n },\n {\n name: this.indexName('MASTRA_WORKFLOW_STATUS_IDX'),\n table: TABLE_WORKFLOW_SNAPSHOT,\n columns: [\"JSON_VALUE(snapshot, '$.status' RETURNING VARCHAR2(64) NULL ON ERROR)\"],\n },\n ];\n }\n\n private workflowMergeSql(): string {\n return `\n MERGE INTO ${this.table()} target\n USING (\n SELECT\n :workflowName AS workflow_name,\n :runId AS run_id,\n :resourceId AS resource_id,\n :snapshot AS snapshot,\n :createdAt AS created_at,\n :updatedAt AS updated_at\n FROM dual\n ) source\n ON (target.workflow_name = source.workflow_name AND target.run_id = source.run_id)\n WHEN MATCHED THEN UPDATE SET\n target.${WORKFLOW_RESOURCE_ID} = source.resource_id,\n target.snapshot = source.snapshot,\n target.${WORKFLOW_UPDATED_AT} = source.updated_at\n WHEN NOT MATCHED THEN INSERT (\n workflow_name,\n run_id,\n ${WORKFLOW_RESOURCE_ID},\n snapshot,\n ${WORKFLOW_CREATED_AT},\n ${WORKFLOW_UPDATED_AT}\n ) VALUES (\n source.workflow_name,\n source.run_id,\n source.resource_id,\n source.snapshot,\n source.created_at,\n source.updated_at\n )`;\n }\n\n private async ensureWorkflowRunRow(client: OracleTxClient, workflowName: string, runId: string): Promise<void> {\n const now = new Date();\n try {\n // Step-result updates may arrive before a full snapshot is persisted.\n // Seed a minimal row so JSON patching always has a target.\n await client.none(\n `INSERT INTO ${this.table()} (\n workflow_name,\n run_id,\n ${WORKFLOW_RESOURCE_ID},\n snapshot,\n ${WORKFLOW_CREATED_AT},\n ${WORKFLOW_UPDATED_AT}\n ) VALUES (\n :workflowName,\n :runId,\n :resourceId,\n :snapshot,\n :createdAt,\n :updatedAt\n )`,\n {\n workflowName,\n runId,\n resourceId: null,\n snapshot: jsonBind(createDefaultSnapshot(runId)),\n createdAt: now,\n updatedAt: now,\n },\n );\n } catch (error) {\n if (!isOracleErrorCode(error, [-1])) throw error;\n }\n }\n\n private workflowWhereClause(args: {\n workflowName?: string;\n fromDate?: Date;\n toDate?: Date;\n resourceId?: string;\n status?: string;\n }): { whereClause: string; binds: Record<string, unknown> } {\n const conditions: string[] = [];\n const binds: Record<string, unknown> = {};\n // Status lives inside the JSON snapshot; identifiers/resource/time remain\n // scalar columns for the common workflow list filters.\n if (args.workflowName) {\n conditions.push('workflow_name = :workflowName');\n binds.workflowName = args.workflowName;\n }\n if (args.resourceId) {\n conditions.push(`${WORKFLOW_RESOURCE_ID} = :resourceId`);\n binds.resourceId = args.resourceId;\n }\n if (args.status) {\n conditions.push(`JSON_VALUE(snapshot, '$.status' RETURNING VARCHAR2(64) NULL ON ERROR) = :status`);\n binds.status = args.status;\n }\n if (args.fromDate) {\n conditions.push(`${WORKFLOW_CREATED_AT} >= :fromDate`);\n binds.fromDate = args.fromDate;\n }\n if (args.toDate) {\n conditions.push(`${WORKFLOW_CREATED_AT} <= :toDate`);\n binds.toDate = args.toDate;\n }\n\n return { whereClause: conditions.length ? `WHERE ${conditions.join(' AND ')}` : '', binds };\n }\n\n private workflowSelect(): string {\n return `SELECT workflow_name AS \"workflowName\", run_id AS \"runId\", ${WORKFLOW_RESOURCE_ID} AS \"resourceId\", snapshot AS \"snapshot\", ${WORKFLOW_CREATED_AT} AS \"createdAt\", ${WORKFLOW_UPDATED_AT} AS \"updatedAt\"`;\n }\n\n private parseWorkflowRun(row: WorkflowRow): WorkflowRun {\n return {\n workflowName: String(row.workflowName),\n runId: String(row.runId),\n resourceId: row.resourceId === null || row.resourceId === undefined ? undefined : String(row.resourceId),\n snapshot: parseSnapshot(row.snapshot),\n createdAt: toDate(row.createdAt),\n updatedAt: toDate(row.updatedAt),\n };\n }\n\n private table(): string {\n return qualifyName(TABLE_WORKFLOW_SNAPSHOT, this.schemaName);\n }\n\n private indexName(indexName: string): string {\n return indexNameForTable(indexName, 'IDX');\n }\n\n private constraint(name: string): string {\n return indexNameForTable(name, 'CONSTRAINT');\n }\n\n private storageError(\n operation: string,\n reason: string,\n details: Record<string, string | number | boolean | undefined>,\n cause: unknown,\n category: ErrorCategory = ErrorCategory.THIRD_PARTY,\n ) {\n return createOracleStorageError({ storeName: STORE_NAME, operation, reason, details, cause, category });\n }\n}\n\nfunction createDefaultSnapshot(runId: string): WorkflowRunState {\n return {\n context: {},\n activePaths: [],\n timestamp: Date.now(),\n suspendedPaths: {},\n activeStepsPath: {},\n resumeLabels: {},\n serializedStepGraph: [],\n status: 'pending',\n value: {},\n waitingPaths: {},\n runId,\n requestContext: {},\n } as WorkflowRunState;\n}\n\nfunction parseSnapshot(value: unknown): WorkflowRunState {\n if (typeof value === 'string') return JSON.parse(value) as WorkflowRunState;\n if (Buffer.isBuffer(value)) return JSON.parse(value.toString('utf8')) as WorkflowRunState;\n if (value && typeof value === 'object') return value as WorkflowRunState;\n throw new Error('Workflow snapshot is empty or invalid');\n}\n","import { createHash } from 'node:crypto';\n\nimport type { ObjectRow } from '../shared/connection';\nimport { normalizeIdentifier } from '../vector/identifiers';\nimport type { OracleQueryBinds, OracleTxClient } from './db';\n\nexport const DEFAULT_ORACLE_MIGRATIONS_TABLE = 'MASTRA_ORACLE_MIGRATIONS';\n\n// Versioned migrations protect one-time schema changes. Repeatable migrations\n// reconcile domain tables and indexes when checksums change or migrate() is forced.\nexport type OracleMigrationKind = 'versioned' | 'repeatable';\nexport type OracleMigrationStatus = 'applied' | 'reapplied' | 'skipped';\n\nexport interface OracleMigration {\n id: string;\n name: string;\n description?: string;\n kind?: OracleMigrationKind;\n checksum?: string;\n run(): Promise<void>;\n}\n\nexport interface OracleMigrationRecord {\n id: string;\n name: string;\n kind: OracleMigrationKind;\n checksum: string;\n description?: string | null;\n appliedAt?: unknown;\n updatedAt?: unknown;\n}\n\nexport interface OracleMigrationResult {\n id: string;\n name: string;\n kind: OracleMigrationKind;\n status: OracleMigrationStatus;\n checksum: string;\n}\n\nexport interface OracleMigrationRunOptions {\n forceRepeatable?: boolean;\n}\n\nexport interface OracleMigrationDatabase {\n table(tableName: string): string;\n executeDdl(sql: string, ignoredErrorCodes?: number[]): Promise<void>;\n manyOrNone<T extends ObjectRow = ObjectRow>(sql: string, binds?: OracleQueryBinds): Promise<T[]>;\n tx<T>(callback: (client: OracleTxClient) => Promise<T>): Promise<T>;\n}\n\nexport interface OracleMigrationRegistryConfig {\n db: OracleMigrationDatabase;\n tableName?: string;\n}\n\ntype OracleMigrationTableRow = {\n id: string;\n name: string;\n kind: OracleMigrationKind;\n checksum: string;\n description?: string | null;\n appliedAt?: unknown;\n updatedAt?: unknown;\n};\n\nconst MIGRATION_ID_PATTERN = /^[A-Za-z][A-Za-z0-9_.:-]*$/;\nconst MAX_MIGRATION_ID_LENGTH = 256;\nconst MAX_MIGRATION_NAME_LENGTH = 512;\nconst MAX_MIGRATION_DESCRIPTION_LENGTH = 4000;\n// Matches the ledger's checksum VARCHAR2(128) column so an oversized custom\n// checksum fails fast in normalizeMigration() instead of during record().\nconst MAX_MIGRATION_CHECKSUM_LENGTH = 128;\n\n// The ledger is intentionally small: it only records migration identity,\n// checksum, and timestamps, leaving domain code responsible for idempotent DDL.\nexport class OracleMigrationRegistry {\n private readonly db: OracleMigrationDatabase;\n private readonly tableName: string;\n\n constructor(config: OracleMigrationRegistryConfig) {\n this.db = config.db;\n this.tableName = normalizeIdentifier(config.tableName ?? DEFAULT_ORACLE_MIGRATIONS_TABLE, 'migration table name');\n }\n\n async init(): Promise<void> {\n await this.db.executeDdl(oracleMigrationTableSql(this.table()), [-955]);\n }\n\n async list(): Promise<OracleMigrationRecord[]> {\n await this.init();\n return this.readRecords();\n }\n\n async run(migrations: OracleMigration[], options: OracleMigrationRunOptions = {}): Promise<OracleMigrationResult[]> {\n await this.init();\n const applied = new Map((await this.readRecords()).map(record => [record.id, record]));\n const results: OracleMigrationResult[] = [];\n\n // Run migrations in the order provided by OracleStore. Normal init skips\n // unchanged repeatables; explicit migrate() can force reconciliation after upgrades.\n for (const migration of migrations) {\n const normalized = normalizeMigration(migration);\n const current = applied.get(normalized.id);\n\n if (current && current.kind !== normalized.kind) {\n throw new Error(\n `Oracle migration ${normalized.id} was already applied as ${current.kind} and cannot be changed to ${normalized.kind}.`,\n );\n }\n\n if (current && normalized.kind === 'versioned') {\n if (current.checksum !== normalized.checksum) {\n throw new Error(\n `Oracle migration ${normalized.id} was already applied with checksum ${current.checksum}, but the current definition has checksum ${normalized.checksum}. Add a new migration instead of changing an applied versioned migration.`,\n );\n }\n results.push({ ...normalized, status: 'skipped' });\n continue;\n }\n\n if (\n current &&\n normalized.kind === 'repeatable' &&\n current.checksum === normalized.checksum &&\n !options.forceRepeatable\n ) {\n results.push({ ...normalized, status: 'skipped' });\n continue;\n }\n\n await normalized.run();\n await this.record(normalized);\n applied.set(normalized.id, normalized);\n results.push({ ...normalized, status: current ? 'reapplied' : 'applied' });\n }\n\n return results;\n }\n\n private table(): string {\n return this.db.table(this.tableName);\n }\n\n private async readRecords(): Promise<OracleMigrationRecord[]> {\n return this.db.manyOrNone<OracleMigrationTableRow>(\n `SELECT\n id AS \"id\",\n name AS \"name\",\n kind AS \"kind\",\n checksum AS \"checksum\",\n description AS \"description\",\n applied_at AS \"appliedAt\",\n updated_at AS \"updatedAt\"\nFROM ${this.table()}\nORDER BY id`,\n );\n }\n\n private async record(migration: NormalizedOracleMigration): Promise<void> {\n await this.db.tx(async client => {\n // MERGE keeps the ledger accurate for both first application and repeatable re-application.\n await client.none(\n `MERGE INTO ${this.table()} target\nUSING (\n SELECT\n :id AS id,\n :name AS name,\n :kind AS kind,\n :checksum AS checksum,\n :description AS description\n FROM dual\n) source\nON (target.id = source.id)\nWHEN MATCHED THEN UPDATE SET\n target.name = source.name,\n target.kind = source.kind,\n target.checksum = source.checksum,\n target.description = source.description,\n target.updated_at = SYSTIMESTAMP\nWHEN NOT MATCHED THEN INSERT (id, name, kind, checksum, description, applied_at, updated_at)\nVALUES (source.id, source.name, source.kind, source.checksum, source.description, SYSTIMESTAMP, SYSTIMESTAMP)`,\n {\n id: migration.id,\n name: migration.name,\n kind: migration.kind,\n checksum: migration.checksum,\n description: migration.description ?? null,\n },\n );\n });\n }\n}\n\nexport function oracleMigrationTableSql(qualifiedTableName: string): string {\n return `CREATE TABLE ${qualifiedTableName} (\n id VARCHAR2(256) PRIMARY KEY,\n name VARCHAR2(512) NOT NULL,\n kind VARCHAR2(32) NOT NULL,\n checksum VARCHAR2(128) NOT NULL,\n description VARCHAR2(4000),\n applied_at TIMESTAMP WITH TIME ZONE DEFAULT SYSTIMESTAMP NOT NULL,\n updated_at TIMESTAMP WITH TIME ZONE DEFAULT SYSTIMESTAMP NOT NULL\n)`;\n}\n\ntype NormalizedOracleMigration = Omit<OracleMigration, 'kind' | 'description' | 'checksum'> & {\n kind: OracleMigrationKind;\n checksum: string;\n description?: string;\n};\n\nfunction normalizeMigration(migration: OracleMigration): NormalizedOracleMigration {\n // Normalize before checksum calculation so equivalent ids/names produce stable\n // ledger records across platforms and CI environments.\n const id = normalizeMigrationId(migration.id);\n const name = normalizeMigrationName(migration.name);\n const kind = migration.kind ?? 'versioned';\n const description = normalizeMigrationDescription(migration.description);\n const checksum = normalizeMigrationChecksum(migration.checksum) ?? checksumMigration({ id, name, kind, description });\n\n return {\n ...migration,\n id,\n name,\n kind,\n description,\n checksum,\n };\n}\n\nfunction normalizeMigrationId(value: string): string {\n const id = value.trim();\n if (!MIGRATION_ID_PATTERN.test(id)) {\n throw new Error('Oracle migration id must start with a letter and contain only letters, numbers, _, ., :, or -');\n }\n if (id.length > MAX_MIGRATION_ID_LENGTH) {\n throw new Error(`Oracle migration id must be ${MAX_MIGRATION_ID_LENGTH} characters or fewer`);\n }\n return id;\n}\n\nfunction normalizeMigrationName(value: string): string {\n const name = value.trim();\n if (!name) {\n throw new Error('Oracle migration name must be provided and cannot be empty');\n }\n if (name.length > MAX_MIGRATION_NAME_LENGTH) {\n throw new Error(`Oracle migration name must be ${MAX_MIGRATION_NAME_LENGTH} characters or fewer`);\n }\n return name;\n}\n\nfunction normalizeMigrationDescription(value: string | undefined): string | undefined {\n const description = value?.trim();\n if (!description) return undefined;\n if (description.length > MAX_MIGRATION_DESCRIPTION_LENGTH) {\n throw new Error(`Oracle migration description must be ${MAX_MIGRATION_DESCRIPTION_LENGTH} characters or fewer`);\n }\n return description;\n}\n\nfunction normalizeMigrationChecksum(value: string | undefined): string | undefined {\n const checksum = value?.trim();\n if (!checksum) return undefined;\n if (checksum.length > MAX_MIGRATION_CHECKSUM_LENGTH) {\n throw new Error(`Oracle migration checksum must be ${MAX_MIGRATION_CHECKSUM_LENGTH} characters or fewer`);\n }\n return checksum;\n}\n\nfunction checksumMigration(input: {\n id: string;\n name: string;\n kind: OracleMigrationKind;\n description?: string;\n}): string {\n // The checksum covers migration identity/description so accidental edits to\n // versioned migrations are caught before any DDL runs.\n return createHash('sha256').update(JSON.stringify(input)).digest('hex').toUpperCase();\n}\n","import { createHash } from 'node:crypto';\n\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { createStorageErrorId, MastraCompositeStore } from '@mastra/core/storage';\nimport type { StorageDomains } from '@mastra/core/storage';\nimport type { Pool } from 'oracledb';\n\nimport { OraclePoolManager } from '../shared/connection';\nimport { normalizeIdentifier } from '../vector/identifiers';\nimport { OracleDB, filterIndexesForTables } from './db';\nimport type { OracleCreateIndexOptions } from './db';\nimport { AgentsOracle } from './domains/agents';\nimport { MCPClientsOracle } from './domains/mcp-clients';\nimport { MemoryOracle } from './domains/memory';\nimport { ObservabilityOracle } from './domains/observability';\nimport { ScorerDefinitionsOracle } from './domains/scorer-definitions';\nimport { ScoresOracle } from './domains/scores';\nimport { WorkflowsOracle } from './domains/workflows';\nimport { OracleMigrationRegistry } from './migrations';\nimport type { OracleMigration, OracleMigrationRecord, OracleMigrationResult } from './migrations';\nimport type { OracleStoreConfig } from './types';\n\nconst STORE_NAME = 'ORACLEDB';\nconst DOMAIN_SCHEMA_VERSIONS: Record<string, number> = {\n R001_MEMORY_SCHEMA: 1,\n R002_WORKFLOWS_SCHEMA: 1,\n R003_OBSERVABILITY_SCHEMA: 1,\n R004_SCORES_SCHEMA: 1,\n R005_SCORER_DEFINITIONS_SCHEMA: 1,\n R006_MCP_CLIENTS_SCHEMA: 1,\n R007_AGENTS_SCHEMA: 1,\n};\n\nexport class OracleStore extends MastraCompositeStore {\n private readonly poolManager: OraclePoolManager;\n private readonly ownsPoolManager: boolean;\n private readonly schemaName?: string;\n private readonly skipDefaultIndexes?: boolean;\n private readonly indexes?: OracleCreateIndexOptions[];\n private readonly dbClient: OracleDB;\n private readonly migrationRegistry: OracleMigrationRegistry;\n private isInitialized = false;\n private initPromise?: Promise<void>;\n private migrationPromise?: Promise<OracleMigrationResult[]>;\n\n stores: StorageDomains;\n\n constructor(config: OracleStoreConfig) {\n try {\n super({ id: config.id, name: 'OracleStore', disableInit: config.disableInit });\n this.schemaName = config.schemaName ? normalizeIdentifier(config.schemaName, 'schema name') : undefined;\n this.skipDefaultIndexes = config.skipDefaultIndexes;\n this.indexes = config.indexes;\n this.poolManager = config.poolManager ?? new OraclePoolManager(config);\n this.ownsPoolManager = !config.poolManager;\n this.dbClient = new OracleDB({ poolManager: this.poolManager, schemaName: this.schemaName });\n this.migrationRegistry = new OracleMigrationRegistry({\n db: this.dbClient,\n tableName: config.migrationTableName,\n });\n\n const domainConfig = {\n poolManager: this.poolManager,\n schemaName: this.schemaName,\n messageBatchSize: config.messageBatchSize,\n skipDefaultIndexes: config.skipDefaultIndexes,\n indexes: config.indexes,\n vectorRegistryTableName: config.vectorRegistryTableName\n ? normalizeIdentifier(config.vectorRegistryTableName, 'vector registry table name')\n : undefined,\n };\n\n this.stores = {\n memory: new MemoryOracle(domainConfig),\n workflows: new WorkflowsOracle(domainConfig),\n observability: new ObservabilityOracle(domainConfig),\n scores: new ScoresOracle(domainConfig),\n scorerDefinitions: new ScorerDefinitionsOracle(domainConfig),\n mcpClients: new MCPClientsOracle(domainConfig),\n agents: new AgentsOracle(domainConfig),\n };\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId(STORE_NAME, 'INITIALIZATION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { schemaName: config.schemaName ?? '' },\n },\n error,\n );\n }\n }\n\n async init(): Promise<void> {\n if (this.isInitialized) return;\n if (this.initPromise) return this.initPromise;\n\n this.initPromise = this.runMigrationsOnce(false).then(() => undefined);\n return this.initPromise;\n }\n\n async migrate(): Promise<OracleMigrationResult[]> {\n // If an init() is already in flight, let it settle first so a concurrent\n // migrate() still gets its own forced (forceRepeatable: true) run instead\n // of coalescing into the unforced init promise. runMigrations()'s finally\n // block clears migrationPromise/initPromise on settle, so this always\n // starts a fresh forced run afterward.\n if (this.initPromise) {\n await this.initPromise;\n }\n return this.runMigrationsOnce(true);\n }\n\n private async runMigrationsOnce(forceRepeatable: boolean): Promise<OracleMigrationResult[]> {\n if (this.migrationPromise) return this.migrationPromise;\n\n this.migrationPromise = this.runMigrations(forceRepeatable);\n return this.migrationPromise;\n }\n\n async listMigrations(): Promise<OracleMigrationRecord[]> {\n return this.migrationRegistry.list();\n }\n\n private async runMigrations(forceRepeatable: boolean): Promise<OracleMigrationResult[]> {\n try {\n const results = await this.migrationRegistry.run(this.storageMigrations(), { forceRepeatable });\n this.isInitialized = true;\n return results;\n } catch (error) {\n if (error instanceof MastraError) throw error;\n throw new MastraError(\n {\n id: createStorageErrorId(STORE_NAME, 'MIGRATION', 'FAILED'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n } finally {\n this.migrationPromise = undefined;\n this.initPromise = undefined;\n }\n }\n\n private storageMigrations(): OracleMigration[] {\n const repeatable = (\n id: string,\n name: string,\n description: string,\n managedTables: readonly string[],\n run: () => Promise<void>,\n ): OracleMigration => ({\n id,\n name,\n kind: 'repeatable',\n description,\n checksum: this.domainMigrationChecksum({ id, name, description, managedTables }),\n run,\n });\n\n return [\n repeatable(\n 'R001_MEMORY_SCHEMA',\n 'Memory domain schema',\n 'Creates or updates Oracle tables and indexes for threads, messages, resources, working memory, and observational memory.',\n MemoryOracle.MANAGED_TABLES,\n async () => {\n await this.stores.memory?.init();\n },\n ),\n repeatable(\n 'R002_WORKFLOWS_SCHEMA',\n 'Workflow domain schema',\n 'Creates or updates Oracle workflow snapshot tables for durable workflow state.',\n WorkflowsOracle.MANAGED_TABLES,\n async () => {\n await this.stores.workflows?.init();\n },\n ),\n repeatable(\n 'R003_OBSERVABILITY_SCHEMA',\n 'Observability domain schema',\n 'Creates or updates Oracle spans and log event tables used by Mastra observability.',\n ObservabilityOracle.MANAGED_TABLES,\n async () => {\n await this.stores.observability?.init();\n },\n ),\n repeatable(\n 'R004_SCORES_SCHEMA',\n 'Scores domain schema',\n 'Creates or updates Oracle scoring and evaluation result tables.',\n ScoresOracle.MANAGED_TABLES,\n async () => {\n await this.stores.scores?.init();\n },\n ),\n repeatable(\n 'R005_SCORER_DEFINITIONS_SCHEMA',\n 'Scorer definitions domain schema',\n 'Creates or updates Oracle scorer definition registry tables and indexes.',\n ScorerDefinitionsOracle.MANAGED_TABLES,\n async () => {\n await this.stores.scorerDefinitions?.init();\n },\n ),\n repeatable(\n 'R006_MCP_CLIENTS_SCHEMA',\n 'MCP clients domain schema',\n 'Creates or updates Oracle MCP client registry tables and indexes.',\n MCPClientsOracle.MANAGED_TABLES,\n async () => {\n await this.stores.mcpClients?.init();\n },\n ),\n repeatable(\n 'R007_AGENTS_SCHEMA',\n 'Agents domain schema',\n 'Creates or updates Oracle agent registry tables and indexes.',\n AgentsOracle.MANAGED_TABLES,\n async () => {\n await this.stores.agents?.init();\n },\n ),\n ];\n }\n\n private domainMigrationChecksum(input: {\n id: string;\n name: string;\n description: string;\n managedTables: readonly string[];\n }): string {\n const indexes = filterIndexesForTables(this.indexes, input.managedTables);\n\n return createHash('sha256')\n .update(\n stableStringify({\n id: input.id,\n name: input.name,\n kind: 'repeatable',\n description: input.description,\n schemaVersion: DOMAIN_SCHEMA_VERSIONS[input.id] ?? 1,\n managedTables: [...input.managedTables],\n indexConfig: {\n skipDefaultIndexes: this.skipDefaultIndexes === true,\n indexes,\n },\n }),\n )\n .digest('hex')\n .toUpperCase();\n }\n\n async getPool(): Promise<Pool> {\n return this.poolManager.getPool();\n }\n\n getPoolManager(): OraclePoolManager {\n return this.poolManager;\n }\n\n get db(): OracleDB {\n return this.dbClient;\n }\n\n async disconnect(): Promise<void> {\n if (this.ownsPoolManager) {\n await this.poolManager.close();\n }\n }\n\n async close(): Promise<void> {\n await this.disconnect();\n }\n}\n\nexport { OracleDB } from './db';\nexport { AgentsOracle } from './domains/agents';\nexport { MCPClientsOracle } from './domains/mcp-clients';\nexport { MemoryOracle } from './domains/memory';\nexport { ObservabilityOracle } from './domains/observability';\nexport { ScorerDefinitionsOracle } from './domains/scorer-definitions';\nexport { ScoresOracle } from './domains/scores';\nexport { WorkflowsOracle } from './domains/workflows';\nexport { DEFAULT_ORACLE_MIGRATIONS_TABLE, OracleMigrationRegistry, oracleMigrationTableSql } from './migrations';\nexport type {\n OracleMigration,\n OracleMigrationRecord,\n OracleMigrationResult,\n OracleMigrationRunOptions,\n} from './migrations';\nexport type { OracleStoreConfig } from './types';\n\nfunction stableStringify(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(stableStringify).join(',')}]`;\n if (!value || typeof value !== 'object') return JSON.stringify(value);\n\n return `{${Object.keys(value)\n .sort()\n .map(key => `${JSON.stringify(key)}:${stableStringify((value as Record<string, unknown>)[key])}`)\n .join(',')}}`;\n}\n","import {\n TABLE_AGENTS,\n TABLE_AGENT_VERSIONS,\n TABLE_MCP_CLIENTS,\n TABLE_MCP_CLIENT_VERSIONS,\n TABLE_MESSAGES,\n TABLE_OBSERVATIONAL_MEMORY,\n TABLE_RESOURCES,\n TABLE_SCHEMAS,\n TABLE_SCORER_DEFINITION_VERSIONS,\n TABLE_SCORER_DEFINITIONS,\n TABLE_SCORERS,\n TABLE_SPANS,\n TABLE_THREADS,\n TABLE_WORKFLOW_SNAPSHOT,\n} from '@mastra/core/storage';\n\nimport { generateOracleIndexSQL, generateOracleTableSQL } from './storage/db';\nimport type { OracleCreateIndexOptions } from './storage/db';\nimport { getDefaultAgentIndexDefinitions, ORACLE_AGENT_VERSIONS_SCHEMA } from './storage/domains/agents';\nimport { getDefaultMCPClientIndexDefinitions } from './storage/domains/mcp-clients';\nimport {\n getDefaultObservabilityIndexDefinitions,\n logEventsTableSql,\n LOG_EVENTS_TABLE,\n} from './storage/domains/observability';\nimport { getDefaultScorerDefinitionIndexDefinitions } from './storage/domains/scorer-definitions';\nimport { getDefaultScoreIndexDefinitions, ORACLE_SCORES_SCHEMA } from './storage/domains/scores';\nimport { DEFAULT_ORACLE_MIGRATIONS_TABLE, oracleMigrationTableSql } from './storage/migrations';\nimport {\n assertJsonPath,\n indexNameForMetadataField,\n indexNameForTable,\n normalizeIdentifier,\n normalizeLogicalIndexName,\n qualifyName,\n tableNameForIndex,\n} from './vector/identifiers';\nimport {\n buildVectorIndexParameterClause,\n defaultMetricForFormat,\n metricToken,\n normalizeMetric,\n normalizeVectorFormat,\n validateAccuracy,\n validateDimension,\n validateMetricForFormat,\n validateVectorFormatDimension,\n vectorFormatToken,\n} from './vector/sql';\nimport type { OracleMetric, OracleVectorFormat, OracleVectorIndexConfig } from './vector/types';\n\n// Offline DDL export mirrors the runtime migrations so DBA-managed deployments\n// can review or apply the exact Oracle schema before initializing a Mastra app.\nexport type OracleSchemaDomain =\n | 'migrations'\n | 'memory'\n | 'workflows'\n | 'observability'\n | 'scores'\n | 'scorerDefinitions'\n | 'mcpClients'\n | 'agents'\n | 'vector';\n\nexport interface OracleVectorSchemaIndex {\n indexName: string;\n dimension: number;\n metric?: OracleMetric;\n vectorFormat?: OracleVectorFormat;\n indexConfig?: OracleVectorIndexConfig;\n buildIndex?: boolean;\n metadataIndexes?: string[];\n}\n\nexport interface ExportOracleSchemasOptions {\n schemaName?: string;\n domains?: OracleSchemaDomain[];\n skipDefaultIndexes?: boolean;\n indexes?: OracleCreateIndexOptions[];\n migrationTableName?: string;\n vector?: {\n tablePrefix?: string;\n registryTableName?: string;\n defaultMetadataIndexes?: string[];\n indexes?: OracleVectorSchemaIndex[];\n };\n}\n\nconst DEFAULT_DOMAINS: OracleSchemaDomain[] = [\n 'migrations',\n 'memory',\n 'workflows',\n 'observability',\n 'scores',\n 'scorerDefinitions',\n 'mcpClients',\n 'agents',\n 'vector',\n];\nconst DEFAULT_VECTOR_TABLE_PREFIX = 'MASTRA_VEC';\nconst DEFAULT_VECTOR_REGISTRY_TABLE = 'MASTRA_VECTOR_INDEXES';\nconst DEFAULT_VECTOR_METADATA_INDEXES = ['thread_id', 'resource_id', 'message_id', 'source_id'];\n\n// Keep domain ordering deterministic: shared metadata first, storage domains next,\n// and vector tables last so generated SQL reads like the runtime initialization path.\nexport function exportSchemas(options: ExportOracleSchemasOptions = {}): string {\n const schemaName = options.schemaName ? normalizeIdentifier(options.schemaName, 'schema name') : undefined;\n const domains = new Set(options.domains ?? DEFAULT_DOMAINS);\n const statements: string[] = [];\n\n if (needsMigrationTable(domains)) {\n statements.push(...migrationSchemaStatements(schemaName, options.migrationTableName));\n }\n\n if (domains.has('memory')) {\n statements.push(...memorySchemaStatements(schemaName));\n if (!options.skipDefaultIndexes) statements.push(...memoryDefaultIndexStatements(schemaName));\n statements.push(...customIndexStatements(options.indexes, MemorySchemaTables, schemaName));\n }\n\n if (domains.has('workflows')) {\n statements.push(...workflowSchemaStatements(schemaName));\n if (!options.skipDefaultIndexes) statements.push(...workflowDefaultIndexStatements(schemaName));\n statements.push(...customIndexStatements(options.indexes, WorkflowSchemaTables, schemaName));\n }\n\n if (domains.has('observability')) {\n statements.push(...observabilitySchemaStatements(schemaName));\n if (!options.skipDefaultIndexes) statements.push(...observabilityDefaultIndexStatements(schemaName));\n statements.push(...customIndexStatements(options.indexes, ObservabilitySchemaTables, schemaName));\n }\n\n if (domains.has('scores')) {\n statements.push(...scoreSchemaStatements(schemaName));\n if (!options.skipDefaultIndexes) statements.push(...scoreDefaultIndexStatements(schemaName));\n statements.push(...customIndexStatements(options.indexes, ScoreSchemaTables, schemaName));\n }\n\n if (domains.has('scorerDefinitions')) {\n statements.push(...scorerDefinitionSchemaStatements(schemaName));\n if (!options.skipDefaultIndexes) statements.push(...scorerDefinitionDefaultIndexStatements(schemaName));\n statements.push(...customIndexStatements(options.indexes, ScorerDefinitionSchemaTables, schemaName));\n }\n\n if (domains.has('mcpClients')) {\n statements.push(...mcpClientSchemaStatements(schemaName));\n if (!options.skipDefaultIndexes) statements.push(...mcpClientDefaultIndexStatements(schemaName));\n statements.push(...customIndexStatements(options.indexes, MCPClientSchemaTables, schemaName));\n }\n\n if (domains.has('agents')) {\n statements.push(...agentSchemaStatements(schemaName));\n if (!options.skipDefaultIndexes) statements.push(...agentDefaultIndexStatements(schemaName));\n statements.push(...customIndexStatements(options.indexes, AgentSchemaTables, schemaName));\n }\n\n if (domains.has('vector')) {\n statements.push(...vectorSchemaStatements(options.vector, schemaName));\n }\n\n return statements.map(statement => `${statement.trim()};`).join('\\n\\n');\n}\n\nconst MemorySchemaTables = [TABLE_THREADS, TABLE_MESSAGES, TABLE_RESOURCES, TABLE_OBSERVATIONAL_MEMORY] as const;\nconst WorkflowSchemaTables = [TABLE_WORKFLOW_SNAPSHOT] as const;\nconst ObservabilitySchemaTables = [TABLE_SPANS, LOG_EVENTS_TABLE] as const;\nconst ScoreSchemaTables = [TABLE_SCORERS] as const;\nconst ScorerDefinitionSchemaTables = [TABLE_SCORER_DEFINITIONS, TABLE_SCORER_DEFINITION_VERSIONS] as const;\nconst MCPClientSchemaTables = [TABLE_MCP_CLIENTS, TABLE_MCP_CLIENT_VERSIONS] as const;\nconst AgentSchemaTables = [TABLE_AGENTS, TABLE_AGENT_VERSIONS] as const;\n\nfunction needsMigrationTable(domains: Set<OracleSchemaDomain>): boolean {\n return (\n domains.has('migrations') ||\n domains.has('memory') ||\n domains.has('workflows') ||\n domains.has('observability') ||\n domains.has('scores') ||\n domains.has('scorerDefinitions') ||\n domains.has('mcpClients') ||\n domains.has('agents')\n );\n}\n\nfunction migrationSchemaStatements(schemaName?: string, tableName = DEFAULT_ORACLE_MIGRATIONS_TABLE): string[] {\n return [oracleMigrationTableSql(qualifyName(normalizeIdentifier(tableName, 'migration table name'), schemaName))];\n}\n\nfunction memorySchemaStatements(schemaName?: string): string[] {\n // Memory DDL is explicit because messages, working memory, and observations\n // need Oracle-specific CLOB choices in addition to native JSON columns.\n return [\n `CREATE TABLE ${qualifyName(TABLE_RESOURCES, schemaName)} (\n id VARCHAR2(512) PRIMARY KEY,\n \"workingMemory\" CLOB,\n metadata JSON,\n \"createdAt\" TIMESTAMP WITH TIME ZONE NOT NULL,\n \"updatedAt\" TIMESTAMP WITH TIME ZONE NOT NULL\n)`,\n `CREATE TABLE ${qualifyName(TABLE_THREADS, schemaName)} (\n id VARCHAR2(512) PRIMARY KEY,\n \"resourceId\" VARCHAR2(512) NOT NULL,\n title VARCHAR2(1024),\n metadata JSON,\n \"createdAt\" TIMESTAMP WITH TIME ZONE NOT NULL,\n \"updatedAt\" TIMESTAMP WITH TIME ZONE NOT NULL\n)`,\n `CREATE TABLE ${qualifyName(TABLE_MESSAGES, schemaName)} (\n id VARCHAR2(512) PRIMARY KEY,\n thread_id VARCHAR2(512) NOT NULL,\n content CLOB NOT NULL,\n role VARCHAR2(64) NOT NULL,\n type VARCHAR2(64) NOT NULL,\n \"createdAt\" TIMESTAMP WITH TIME ZONE NOT NULL,\n \"resourceId\" VARCHAR2(512)\n)`,\n `CREATE TABLE ${qualifyName(TABLE_OBSERVATIONAL_MEMORY, schemaName)} (\n id VARCHAR2(512) PRIMARY KEY,\n \"lookupKey\" VARCHAR2(1024) NOT NULL,\n \"scope\" VARCHAR2(32) NOT NULL,\n \"resourceId\" VARCHAR2(512) NOT NULL,\n \"threadId\" VARCHAR2(512),\n \"activeObservations\" CLOB,\n \"activeObservationsPendingUpdate\" CLOB,\n \"originType\" VARCHAR2(32) NOT NULL,\n config JSON NOT NULL,\n \"generationCount\" NUMBER(10) DEFAULT 0 NOT NULL,\n \"lastObservedAt\" TIMESTAMP WITH TIME ZONE,\n \"lastReflectionAt\" TIMESTAMP WITH TIME ZONE,\n \"pendingMessageTokens\" NUMBER(20) DEFAULT 0 NOT NULL,\n \"totalTokensObserved\" NUMBER(20) DEFAULT 0 NOT NULL,\n \"observationTokenCount\" NUMBER(20) DEFAULT 0 NOT NULL,\n \"isObserving\" NUMBER(1) DEFAULT 0 NOT NULL,\n \"isReflecting\" NUMBER(1) DEFAULT 0 NOT NULL,\n \"observedMessageIds\" JSON,\n \"observedTimezone\" VARCHAR2(128),\n \"bufferedObservations\" CLOB,\n \"bufferedObservationTokens\" NUMBER(20),\n \"bufferedMessageIds\" JSON,\n \"bufferedReflection\" CLOB,\n \"bufferedReflectionTokens\" NUMBER(20),\n \"bufferedReflectionInputTokens\" NUMBER(20),\n \"reflectedObservationLineCount\" NUMBER(20),\n \"bufferedObservationChunks\" JSON,\n \"isBufferingObservation\" NUMBER(1) DEFAULT 0 NOT NULL,\n \"isBufferingReflection\" NUMBER(1) DEFAULT 0 NOT NULL,\n \"lastBufferedAtTokens\" NUMBER(20) DEFAULT 0 NOT NULL,\n \"lastBufferedAtTime\" TIMESTAMP WITH TIME ZONE,\n metadata JSON,\n \"createdAt\" TIMESTAMP WITH TIME ZONE NOT NULL,\n \"updatedAt\" TIMESTAMP WITH TIME ZONE NOT NULL\n)`,\n ];\n}\n\nfunction workflowSchemaStatements(schemaName?: string): string[] {\n return [\n `CREATE TABLE ${qualifyName(TABLE_WORKFLOW_SNAPSHOT, schemaName)} (\n workflow_name VARCHAR2(512) NOT NULL,\n run_id VARCHAR2(512) NOT NULL,\n \"resourceId\" VARCHAR2(512),\n snapshot JSON NOT NULL,\n \"createdAt\" TIMESTAMP WITH TIME ZONE NOT NULL,\n \"updatedAt\" TIMESTAMP WITH TIME ZONE NOT NULL,\n CONSTRAINT ${storageConstraintName('MASTRA_WORKFLOW_SNAPSHOT_PK')} PRIMARY KEY (workflow_name, run_id)\n)`,\n ];\n}\n\nfunction scoreSchemaStatements(schemaName?: string): string[] {\n return [\n generateOracleTableSQL({\n tableName: TABLE_SCORERS,\n schema: ORACLE_SCORES_SCHEMA,\n schemaName,\n }),\n ];\n}\n\nfunction observabilitySchemaStatements(schemaName?: string): string[] {\n return [\n generateOracleTableSQL({\n tableName: TABLE_SPANS,\n schema: TABLE_SCHEMAS[TABLE_SPANS],\n schemaName,\n compositePrimaryKey: ['traceId', 'spanId'],\n }),\n logEventsTableSql(qualifyName(LOG_EVENTS_TABLE, schemaName)),\n ];\n}\n\nfunction agentSchemaStatements(schemaName?: string): string[] {\n return [\n generateOracleTableSQL({\n tableName: TABLE_AGENTS,\n schema: TABLE_SCHEMAS[TABLE_AGENTS],\n schemaName,\n }),\n generateOracleTableSQL({\n tableName: TABLE_AGENT_VERSIONS,\n schema: ORACLE_AGENT_VERSIONS_SCHEMA,\n schemaName,\n }),\n ];\n}\n\nfunction scorerDefinitionSchemaStatements(schemaName?: string): string[] {\n return [\n generateOracleTableSQL({\n tableName: TABLE_SCORER_DEFINITIONS,\n schema: TABLE_SCHEMAS[TABLE_SCORER_DEFINITIONS],\n schemaName,\n }),\n generateOracleTableSQL({\n tableName: TABLE_SCORER_DEFINITION_VERSIONS,\n schema: TABLE_SCHEMAS[TABLE_SCORER_DEFINITION_VERSIONS],\n schemaName,\n }),\n ];\n}\n\nfunction mcpClientSchemaStatements(schemaName?: string): string[] {\n return [\n generateOracleTableSQL({\n tableName: TABLE_MCP_CLIENTS,\n schema: TABLE_SCHEMAS[TABLE_MCP_CLIENTS],\n schemaName,\n }),\n generateOracleTableSQL({\n tableName: TABLE_MCP_CLIENT_VERSIONS,\n schema: TABLE_SCHEMAS[TABLE_MCP_CLIENT_VERSIONS],\n schemaName,\n }),\n ];\n}\n\nfunction vectorSchemaStatements(config: ExportOracleSchemasOptions['vector'], schemaName?: string): string[] {\n // Vector export creates the same registry + physical VECTOR tables used by\n // OracleVector at runtime, so DBAs can pre-provision indexes deterministically.\n const registryTableName = normalizeIdentifier(\n config?.registryTableName ?? DEFAULT_VECTOR_REGISTRY_TABLE,\n 'registry table name',\n );\n const tablePrefix = normalizeIdentifier(config?.tablePrefix ?? DEFAULT_VECTOR_TABLE_PREFIX, 'table prefix');\n const statements = [vectorRegistryTableStatement(registryTableName, schemaName)];\n\n for (const vectorIndex of config?.indexes ?? []) {\n statements.push(\n ...vectorIndexStatements(vectorIndex, tablePrefix, registryTableName, config?.defaultMetadataIndexes, schemaName),\n );\n }\n\n return statements;\n}\n\nfunction memoryDefaultIndexStatements(schemaName?: string): string[] {\n return [\n {\n name: storageIndexName('MASTRA_THREADS_RESOURCE_CREATED_IDX'),\n table: TABLE_THREADS,\n columns: ['resourceId', 'createdAt'],\n },\n {\n name: storageIndexName('MASTRA_MESSAGES_THREAD_CREATED_IDX'),\n table: TABLE_MESSAGES,\n columns: ['thread_id', 'createdAt'],\n },\n {\n name: storageIndexName('MASTRA_MESSAGES_RESOURCE_CREATED_IDX'),\n table: TABLE_MESSAGES,\n columns: ['resourceId', 'createdAt'],\n },\n {\n name: storageIndexName('MASTRA_OM_LOOKUP_GENERATION_IDX'),\n table: TABLE_OBSERVATIONAL_MEMORY,\n columns: ['lookupKey', 'generationCount'],\n },\n {\n name: storageIndexName('MASTRA_OM_RESOURCE_CREATED_IDX'),\n table: TABLE_OBSERVATIONAL_MEMORY,\n columns: ['resourceId', 'createdAt'],\n },\n {\n name: storageIndexName('MASTRA_OM_THREAD_CREATED_IDX'),\n table: TABLE_OBSERVATIONAL_MEMORY,\n columns: ['threadId', 'createdAt'],\n },\n ].map(index => generateOracleIndexSQL(index, schemaName));\n}\n\nfunction workflowDefaultIndexStatements(schemaName?: string): string[] {\n return [\n {\n name: storageIndexName('MASTRA_WORKFLOW_NAME_CREATED_IDX'),\n table: TABLE_WORKFLOW_SNAPSHOT,\n columns: ['workflow_name', 'createdAt'],\n },\n {\n name: storageIndexName('MASTRA_WORKFLOW_RESOURCE_CREATED_IDX'),\n table: TABLE_WORKFLOW_SNAPSHOT,\n columns: ['resourceId', 'createdAt'],\n },\n {\n name: storageIndexName('MASTRA_WORKFLOW_STATUS_IDX'),\n table: TABLE_WORKFLOW_SNAPSHOT,\n columns: [\"JSON_VALUE(snapshot, '$.status' RETURNING VARCHAR2(64) NULL ON ERROR)\"],\n },\n ].map(index => generateOracleIndexSQL(index, schemaName));\n}\n\nfunction scoreDefaultIndexStatements(schemaName?: string): string[] {\n return getDefaultScoreIndexDefinitions(indexName => storageIndexName(indexName)).map(index =>\n generateOracleIndexSQL(index, schemaName),\n );\n}\n\nfunction observabilityDefaultIndexStatements(schemaName?: string): string[] {\n return getDefaultObservabilityIndexDefinitions(indexName => storageIndexName(indexName)).map(index =>\n generateOracleIndexSQL(index, schemaName),\n );\n}\n\nfunction agentDefaultIndexStatements(schemaName?: string): string[] {\n return getDefaultAgentIndexDefinitions(indexName => storageIndexName(indexName)).map(index =>\n generateOracleIndexSQL(index, schemaName),\n );\n}\n\nfunction scorerDefinitionDefaultIndexStatements(schemaName?: string): string[] {\n return getDefaultScorerDefinitionIndexDefinitions(indexName => storageIndexName(indexName)).map(index =>\n generateOracleIndexSQL(index, schemaName),\n );\n}\n\nfunction mcpClientDefaultIndexStatements(schemaName?: string): string[] {\n return getDefaultMCPClientIndexDefinitions(indexName => storageIndexName(indexName)).map(index =>\n generateOracleIndexSQL(index, schemaName),\n );\n}\n\nfunction customIndexStatements(\n indexes: OracleCreateIndexOptions[] | undefined,\n tables: readonly string[],\n schemaName?: string,\n): string[] {\n // A single config can contain indexes for every domain; filter here so a\n // domain-specific export never emits DDL for tables it does not own.\n if (!indexes?.length) return [];\n const managedTables = new Set(tables.map(table => normalizeIdentifier(table, 'table name')));\n return indexes\n .filter(index => managedTables.has(normalizeIdentifier(index.table, 'table name')))\n .map(index => generateOracleIndexSQL(index, schemaName));\n}\n\nfunction vectorRegistryTableStatement(registryTableName: string, schemaName?: string): string {\n return `CREATE TABLE ${qualifyName(registryTableName, schemaName)} (\n index_name VARCHAR2(512) PRIMARY KEY,\n table_name VARCHAR2(128) NOT NULL,\n dimension NUMBER(10) NOT NULL,\n metric VARCHAR2(32) NOT NULL,\n index_type VARCHAR2(16) NOT NULL,\n vector_format VARCHAR2(16) DEFAULT 'vector' NOT NULL,\n accuracy NUMBER(3),\n created_at TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL,\n updated_at TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL\n)`;\n}\n\nfunction vectorIndexStatements(\n vectorIndex: OracleVectorSchemaIndex,\n tablePrefix: string,\n registryTableName: string,\n defaultMetadataIndexes: string[] | undefined,\n schemaName?: string,\n): string[] {\n // Logical index metadata is stored in the registry table; the data lives in a\n // dedicated VECTOR table so index names map cleanly to Mastra's API surface.\n const indexName = normalizeLogicalIndexName(vectorIndex.indexName);\n const dimension = validateDimension(vectorIndex.dimension);\n const vectorFormat = normalizeVectorFormat(vectorIndex.vectorFormat ?? 'vector');\n validateVectorFormatDimension(vectorFormat, dimension);\n const metric = normalizeMetric(vectorIndex.metric ?? defaultMetricForFormat(vectorFormat));\n const tableName = tableNameForIndex(indexName, tablePrefix);\n const indexConfig: OracleVectorIndexConfig = { type: 'none', accuracy: 95, ...vectorIndex.indexConfig };\n const registryIndexConfig: OracleVectorIndexConfig =\n vectorIndex.buildIndex === false ? { type: 'none', accuracy: 95 } : indexConfig;\n validateMetricForFormat(metric, vectorFormat, registryIndexConfig.type);\n const statements = [\n `CREATE TABLE ${qualifyName(tableName, schemaName)} (\n vector_id VARCHAR2(512) PRIMARY KEY,\n embedding VECTOR(${dimension}, ${vectorFormatToken(vectorFormat)}) NOT NULL,\n metadata JSON NOT NULL,\n created_at TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL,\n updated_at TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL\n)`,\n vectorRegistryMergeStatement({\n registryTableName,\n indexName,\n tableName,\n dimension,\n metric,\n indexType: registryIndexConfig.type ?? 'none',\n vectorFormat,\n accuracy: registryIndexConfig.accuracy ?? 95,\n schemaName,\n }),\n ];\n\n for (const field of vectorIndex.metadataIndexes ?? defaultMetadataIndexes ?? DEFAULT_VECTOR_METADATA_INDEXES) {\n // Metadata indexes are function-based JSON_VALUE indexes, matching the\n // provider's JSON filter path for common resource/thread/document fields.\n const metadataIndexName = indexNameForMetadataField(tableName, field);\n const jsonPath = assertJsonPath(field);\n statements.push(`CREATE INDEX ${qualifyName(metadataIndexName, schemaName)}\nON ${qualifyName(tableName, schemaName)} (\n JSON_VALUE(metadata, '${jsonPath}' RETURNING VARCHAR2(4000) NULL ON ERROR)\n)`);\n }\n\n if (vectorIndex.buildIndex !== false && indexConfig.type && indexConfig.type !== 'none') {\n statements.push(vectorPhysicalIndexStatement({ tableName, metric, indexConfig, schemaName }));\n }\n\n return statements;\n}\n\nfunction vectorRegistryMergeStatement({\n registryTableName,\n indexName,\n tableName,\n dimension,\n metric,\n indexType,\n vectorFormat,\n accuracy,\n schemaName,\n}: {\n registryTableName: string;\n indexName: string;\n tableName: string;\n dimension: number;\n metric: OracleMetric;\n indexType: string;\n vectorFormat: OracleVectorFormat;\n accuracy: number;\n schemaName?: string;\n}): string {\n // MERGE makes generated SQL re-runnable during review, local setup, or DBA\n // deployment without duplicate registry rows.\n return `MERGE INTO ${qualifyName(registryTableName, schemaName)} target\nUSING (\n SELECT\n '${escapeSqlLiteral(indexName)}' AS index_name,\n '${tableName}' AS table_name,\n ${dimension} AS dimension,\n '${metric}' AS metric,\n '${indexType}' AS index_type,\n '${vectorFormat}' AS vector_format,\n ${validateAccuracy(accuracy)} AS accuracy\n FROM dual\n) source\nON (target.index_name = source.index_name)\nWHEN MATCHED THEN UPDATE SET\n target.table_name = source.table_name,\n target.dimension = source.dimension,\n target.metric = source.metric,\n target.index_type = source.index_type,\n target.vector_format = source.vector_format,\n target.accuracy = source.accuracy,\n target.updated_at = SYSTIMESTAMP\nWHEN NOT MATCHED THEN INSERT (\n index_name,\n table_name,\n dimension,\n metric,\n index_type,\n vector_format,\n accuracy,\n created_at,\n updated_at\n) VALUES (\n source.index_name,\n source.table_name,\n source.dimension,\n source.metric,\n source.index_type,\n source.vector_format,\n source.accuracy,\n SYSTIMESTAMP,\n SYSTIMESTAMP\n)`;\n}\n\nfunction vectorPhysicalIndexStatement({\n tableName,\n metric,\n indexConfig,\n schemaName,\n}: {\n tableName: string;\n metric: OracleMetric;\n indexConfig: OracleVectorIndexConfig;\n schemaName?: string;\n}): string {\n // Physical HNSW/IVF indexes are optional. Exact VECTOR_DISTANCE search works\n // without them, while approximate indexes are added when buildIndex is enabled.\n const accuracy = validateAccuracy(indexConfig.accuracy ?? 95);\n const organization =\n indexConfig.type === 'ivf' ? 'ORGANIZATION NEIGHBOR PARTITIONS' : 'ORGANIZATION INMEMORY NEIGHBOR GRAPH';\n const parameters = buildVectorIndexParameterClause(indexConfig);\n\n return `CREATE VECTOR INDEX ${qualifyName(indexNameForTable(tableName, 'VECTOR_IDX'), schemaName)}\nON ${qualifyName(tableName, schemaName)} (embedding)\n${organization}\nDISTANCE ${metricToken(metric)}\nWITH TARGET ACCURACY ${accuracy}${parameters ? `\\n${parameters}` : ''}`;\n}\n\nfunction storageIndexName(indexName: string): string {\n return indexNameForTable(indexName, 'IDX');\n}\n\nfunction storageConstraintName(name: string): string {\n return indexNameForTable(name, 'CONSTRAINT');\n}\n\nfunction escapeSqlLiteral(value: string): string {\n return value.replace(/'/g, \"''\");\n}\n","/**\n * Vector store specific prompt that details supported Oracle JSON metadata filter operators and examples.\n * This prompt helps users construct valid filters for Oracle Database Vector Search.\n */\nexport const ORACLEDB_PROMPT = `When querying Oracle Database Vector Search, you can ONLY use the operators listed below. Any other operators will be rejected.\nImportant: Don't explain how to construct the filter - use the specified operators and fields to search the content and return relevant results.\nIf a user tries to give an explicit operator that is not supported, reject the filter entirely and let them know that the operator is not supported.\n\nOracle-specific behavior:\n- Metadata is stored as Oracle JSON.\n- Scalar comparisons are compiled to JSON_VALUE(metadata, ...).\n- Array, existence, and element-match checks are compiled to JSON_EXISTS(metadata, ...).\n- Regex filters are compiled to Oracle REGEXP_LIKE.\n- String contains filters are compiled to case-insensitive LIKE predicates.\n- User metadata values are always bound as parameters; do not generate raw SQL fragments inside filters.\n\nBasic Comparison Operators:\n- $eq: Exact match (default when using field: value)\n Example: { \"category\": \"electronics\" }\n- $ne: Not equal\n Example: { \"category\": { \"$ne\": \"electronics\" } }\n- $gt: Greater than\n Example: { \"price\": { \"$gt\": 100 } }\n- $gte: Greater than or equal\n Example: { \"price\": { \"$gte\": 100 } }\n- $lt: Less than\n Example: { \"price\": { \"$lt\": 100 } }\n- $lte: Less than or equal\n Example: { \"price\": { \"$lte\": 100 } }\n\nArray Operators:\n- $in: Match any value in an array or scalar field\n Example: { \"category\": { \"$in\": [\"electronics\", \"books\"] } }\n- $nin: Does not match any value in an array or scalar field\n Example: { \"category\": { \"$nin\": [\"electronics\", \"books\"] } }\n- $all: Match all values in an array field\n Example: { \"tags\": { \"$all\": [\"premium\", \"sale\"] } }\n- $elemMatch: Match array elements that meet all specified conditions\n Example: { \"items\": { \"$elemMatch\": { \"price\": { \"$gt\": 100 } } } }\n- $contains: For strings, perform case-insensitive substring matching. For arrays, require contained values.\n Example: { \"title\": { \"$contains\": \"oracle\" } }\n Example: { \"tags\": { \"$contains\": \"premium\" } }\n\nLogical Operators:\n- $and: Logical AND (implicit when using multiple conditions)\n Example: { \"$and\": [{ \"price\": { \"$gt\": 100 } }, { \"category\": \"electronics\" }] }\n- $or: Logical OR\n Example: { \"$or\": [{ \"price\": { \"$lt\": 50 } }, { \"category\": \"books\" }] }\n- $not: Logical NOT\n Example: { \"$not\": { \"category\": \"electronics\" } }\n- $nor: Logical NOR\n Example: { \"$nor\": [{ \"price\": { \"$lt\": 50 } }, { \"category\": \"books\" }] }\n\nElement Operators:\n- $exists: Check if a JSON metadata field exists\n Example: { \"rating\": { \"$exists\": true } }\n\nSpecial Operators:\n- $size: Array length check\n Example: { \"tags\": { \"$size\": 2 } }\n- $regex: Oracle regular expression match using REGEXP_LIKE\n Example: { \"source\": { \"$regex\": \"oracle.*database\" } }\n\nRestrictions:\n- Nested fields are supported using dot notation\n- Multiple conditions on the same field are supported with both implicit and explicit $and\n- Array operations should be used only on JSON array fields\n- Empty arrays in $in, $nin, and $all conditions are handled gracefully\n- Only logical operators ($and, $or, $not, $nor) can be used at the top level\n- All other operators must be used within a field condition\n Valid: { \"field\": { \"$gt\": 100 } }\n Valid: { \"$and\": [{ \"field\": { \"$gt\": 100 } }] }\n Invalid: { \"$gt\": 100 }\n Invalid: { \"$contains\": \"value\" }\n- Logical operators must contain field conditions, not direct operators\n Valid: { \"$and\": [{ \"field\": { \"$gt\": 100 } }] }\n Invalid: { \"$and\": [{ \"$gt\": 100 }] }\n- $not operator:\n - Must be a non-empty object\n - Can be used at field level or top level\n - Valid: { \"$not\": { \"field\": \"value\" } }\n - Valid: { \"field\": { \"$not\": { \"$eq\": \"value\" } } }\n- Other logical operators ($and, $or, $nor):\n - Can only be used at top level or nested within other logical operators\n - Can not be used on a field level, or be nested inside a field\n - Can not be used inside an operator\n - Valid: { \"$and\": [{ \"field\": { \"$gt\": 100 } }] }\n - Valid: { \"$or\": [{ \"$and\": [{ \"field\": { \"$gt\": 100 } }] }] }\n - Invalid: { \"field\": { \"$and\": [{ \"$gt\": 100 }] } }\n - Invalid: { \"field\": { \"$or\": [{ \"$gt\": 100 }] } }\n - Invalid: { \"field\": { \"$gt\": { \"$and\": [{...}] } } }\n- $elemMatch requires an object with conditions\n Valid: { \"array\": { \"$elemMatch\": { \"field\": \"value\" } } }\n Invalid: { \"array\": { \"$elemMatch\": \"value\" } }\n\nExample Complex Query:\n{\n \"$and\": [\n { \"resource_id\": \"docs\" },\n { \"thread_id\": { \"$exists\": true } },\n { \"score\": { \"$gte\": 0.75 } },\n { \"tags\": { \"$all\": [\"oracle\", \"mastra\"] } },\n { \"chunks\": { \"$elemMatch\": { \"page\": { \"$gte\": 2 }, \"kind\": \"reference\" } } },\n { \"$or\": [\n { \"source\": { \"$regex\": \"oracle.*database\" } },\n { \"title\": { \"$contains\": \"vector search\" } }\n ]}\n ]\n}`;\n"]}
|