{"version":3,"sources":["../src/datasets/experiment/executor.ts","../src/datasets/experiment/scorer.ts","../src/datasets/experiment/analytics/aggregate.ts","../src/datasets/experiment/analytics/compare.ts","../src/datasets/experiment/index.ts","../src/datasets/dataset.ts","../src/datasets/manager.ts"],"names":["RequestContext","isSupportedLanguageModel","EntityType","validateAndSaveScore","MastraError","completedAt","skippedCount","isZodType","zodToJsonSchema"],"mappings":"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","file":"chunk-JSSVLSPS.cjs","sourcesContent":["import type { Agent } from '../../agent';\nimport { isSupportedLanguageModel } from '../../agent';\nimport type { MessageListInput } from '../../agent/message-list';\nimport type { MastraScorer } from '../../evals/base';\nimport type { ScorerRunInputForAgent, ScorerRunOutputForAgent } from '../../evals/types';\nimport type { ScoringData } from '../../llm/model/base.types';\nimport { RequestContext } from '../../request-context';\nimport type { TargetType } from '../../storage/types';\nimport type { Workflow } from '../../workflows';\n\n/**\n * Common fields extracted from both FullOutput (v2/v3) and GenerateTextResult/GenerateObjectResult (v1).\n * Used to type the agent result uniformly without coupling to the full return types.\n */\ninterface AgentGenerateResult {\n  text?: string;\n  object?: unknown;\n  toolCalls?: unknown[];\n  toolResults?: unknown[];\n  sources?: unknown[];\n  files?: unknown[];\n  usage?: { promptTokens: number; completionTokens: number; totalTokens: number };\n  reasoningText?: string;\n  traceId?: string;\n  error?: Error;\n  scoringData?: ScoringData;\n}\n\n/**\n * Target types supported for dataset execution.\n * Agent and Workflow are Phase 2; scorer and processor are Phase 4.\n */\nexport type Target = Agent | Workflow | MastraScorer<any, any, any, any>;\n\n/**\n * Result from executing a target against a dataset item.\n */\nexport interface ExecutionResult {\n  /** Output from the target (null if failed) */\n  output: unknown;\n  /** Structured error if execution failed */\n  error: { message: string; stack?: string; code?: string } | null;\n  /** Trace ID from agent/workflow execution (null for scorers or errors) */\n  traceId: string | null;\n  /** Structured input for scorers (extracted from agent scoring data) */\n  scorerInput?: ScorerRunInputForAgent;\n  /** Structured output for scorers (extracted from agent scoring data) */\n  scorerOutput?: ScorerRunOutputForAgent;\n}\n\n/**\n * Execute a dataset item against a scorer (LLM-as-judge calibration).\n * item.input should contain exactly what the scorer expects - direct passthrough.\n * For calibration: item.input = { input, output, groundTruth } (user structures it)\n */\nasync function executeScorer(\n  scorer: MastraScorer<any, any, any, any>,\n  item: { input: unknown; groundTruth?: unknown },\n): Promise<ExecutionResult> {\n  try {\n    // Direct passthrough - scorer receives item.input exactly as provided\n    // User structures item.input to match scorer's expected shape (e.g., { input, output, groundTruth })\n    const result = await scorer.run(item.input as any);\n\n    // Validate score is a number\n    const score = typeof result.score === 'number' && !isNaN(result.score) ? result.score : null;\n\n    if (score === null && result.score !== undefined) {\n      console.warn(`Scorer ${scorer.id} returned invalid score: ${result.score}`);\n    }\n\n    return {\n      output: {\n        score,\n        reason: typeof result.reason === 'string' ? result.reason : null,\n      },\n      error: null,\n      traceId: null, // Scorers don't produce traces\n    };\n  } catch (error) {\n    return {\n      output: null,\n      error: {\n        message: error instanceof Error ? error.message : String(error),\n        stack: error instanceof Error ? error.stack : undefined,\n      },\n      traceId: null,\n    };\n  }\n}\n\n/**\n * Execute a dataset item against a target (agent, workflow, scorer, processor).\n * Phase 2: agent/workflow. Phase 4: scorer. Processor deferred.\n */\nexport async function executeTarget(\n  target: Target,\n  targetType: TargetType,\n  item: { input: unknown; groundTruth?: unknown },\n  options?: { signal?: AbortSignal; requestContext?: Record<string, unknown>; experimentId?: string },\n): Promise<ExecutionResult> {\n  try {\n    const signal = options?.signal;\n\n    // Check if already aborted before starting\n    if (signal?.aborted) {\n      throw signal.reason ?? new DOMException('The operation was aborted.', 'AbortError');\n    }\n\n    let executionPromise: Promise<ExecutionResult>;\n    switch (targetType) {\n      case 'agent':\n        executionPromise = executeAgent(target as Agent, item, signal, options?.requestContext, options?.experimentId);\n        break;\n      case 'workflow':\n        executionPromise = executeWorkflow(target as Workflow, item);\n        break;\n      case 'scorer':\n        executionPromise = executeScorer(target as MastraScorer<any, any, any, any>, item);\n        break;\n      case 'processor':\n        // Processor targets dropped from roadmap - not a core use case\n        throw new Error(`Target type '${targetType}' not yet supported.`);\n      default:\n        throw new Error(`Unknown target type: ${targetType}`);\n    }\n\n    // Race execution against signal abort (ensures timeout works even if target ignores signal)\n    if (signal) {\n      return await raceWithSignal(executionPromise, signal);\n    }\n\n    return await executionPromise;\n  } catch (error) {\n    return {\n      output: null,\n      error: {\n        message: error instanceof Error ? error.message : String(error),\n        stack: error instanceof Error ? error.stack : undefined,\n      },\n      traceId: null,\n    };\n  }\n}\n\n/**\n * Race a promise against an AbortSignal. Rejects with the signal's reason when aborted.\n */\nfunction raceWithSignal<T>(promise: Promise<T>, signal: AbortSignal): Promise<T> {\n  if (signal.aborted) {\n    return Promise.reject(signal.reason ?? new DOMException('The operation was aborted.', 'AbortError'));\n  }\n\n  return new Promise<T>((resolve, reject) => {\n    const onAbort = () => {\n      reject(signal.reason ?? new DOMException('The operation was aborted.', 'AbortError'));\n    };\n\n    signal.addEventListener('abort', onAbort, { once: true });\n\n    promise.then(\n      value => {\n        signal.removeEventListener('abort', onAbort);\n        resolve(value);\n      },\n      err => {\n        signal.removeEventListener('abort', onAbort);\n        reject(err);\n      },\n    );\n  });\n}\n\n/**\n * Execute a dataset item against an agent.\n * Uses generate() for both v1 and v2 models.\n */\nasync function executeAgent(\n  agent: Agent,\n  item: { input: unknown; groundTruth?: unknown },\n  signal?: AbortSignal,\n  requestContext?: Record<string, unknown>,\n  experimentId?: string,\n): Promise<ExecutionResult> {\n  const model = await agent.getModel();\n\n  // Both generate() and generateLegacy() return different types (FullOutput vs GenerateTextResult)\n  // but share the fields we extract. Cast input to MessageListInput at the boundary.\n  const input = item.input as MessageListInput;\n\n  const reqCtx: RequestContext | undefined = requestContext\n    ? new RequestContext(Object.entries(requestContext))\n    : undefined;\n\n  // Pass experimentId as tracing metadata so it appears on the AGENT_RUN span\n  const tracingOptions = experimentId ? { metadata: { experimentId } } : undefined;\n\n  const rawResult = isSupportedLanguageModel(model)\n    ? await agent.generate(input, {\n        scorers: {},\n        returnScorerData: true,\n        abortSignal: signal,\n        ...(reqCtx ? { requestContext: reqCtx } : {}),\n        ...(tracingOptions ? { tracingOptions } : {}),\n      })\n    : await agent.generateLegacy(input, {\n        scorers: {},\n        returnScorerData: true,\n        ...(reqCtx ? { requestContext: reqCtx } : {}),\n        ...(tracingOptions ? { tracingOptions } : {}),\n      });\n\n  // Narrow to the common fields we need — both v1 and v2 results share these\n  const result = rawResult as AgentGenerateResult;\n\n  const traceId = result.traceId ?? null;\n  const scoringData = result.scoringData;\n\n  // Only persist fields relevant to experiment evaluation — drop provider metadata,\n  // duplicate messages, steps trace, and other debugging internals\n  const trimmedOutput = {\n    text: result.text,\n    object: result.object,\n    toolCalls: result.toolCalls,\n    toolResults: result.toolResults,\n    sources: result.sources,\n    files: result.files,\n    usage: result.usage,\n    reasoningText: result.reasoningText,\n    traceId,\n    error: result.error ?? null,\n  };\n\n  return {\n    output: trimmedOutput,\n    error: null,\n    traceId,\n    scorerInput: scoringData?.input,\n    scorerOutput: scoringData?.output,\n  };\n}\n\n/**\n * Execute a dataset item against a workflow.\n * Creates a run with scorers disabled to avoid double-scoring.\n */\nasync function executeWorkflow(\n  workflow: Workflow,\n  item: { input: unknown; groundTruth?: unknown },\n): Promise<ExecutionResult> {\n  const run = await workflow.createRun({ disableScorers: true });\n  const result = await run.start({\n    inputData: item.input,\n  });\n\n  // TracingProperties is intersected on every WorkflowResult variant\n  const traceId = result.traceId ?? null;\n\n  if (result.status === 'success') {\n    return { output: result.result, error: null, traceId };\n  }\n\n  // Handle all non-success statuses (still include traceId for debugging)\n  if (result.status === 'failed') {\n    return {\n      output: null,\n      error: { message: result.error?.message ?? 'Workflow failed', stack: result.error?.stack },\n      traceId,\n    };\n  }\n\n  if (result.status === 'tripwire') {\n    return {\n      output: null,\n      error: { message: `Workflow tripwire: ${result.tripwire?.reason ?? 'Unknown reason'}` },\n      traceId,\n    };\n  }\n\n  if (result.status === 'suspended') {\n    return {\n      output: null,\n      error: { message: 'Workflow suspended - not yet supported in dataset experiments' },\n      traceId,\n    };\n  }\n\n  if (result.status === 'paused') {\n    return { output: null, error: { message: 'Workflow paused - not yet supported in dataset experiments' }, traceId };\n  }\n\n  // Exhaustive check - should never reach here\n  const _exhaustiveCheck: never = result;\n  return {\n    output: null,\n    error: { message: `Workflow ended with unexpected status: ${(_exhaustiveCheck as any).status}` },\n    traceId,\n  };\n}\n","import type { MastraScorer } from '../../evals/base';\nimport type { ScorerRunInputForAgent, ScorerRunOutputForAgent } from '../../evals/types';\nimport type { Mastra } from '../../mastra';\nimport { validateAndSaveScore } from '../../mastra/hooks';\nimport { EntityType } from '../../observability';\nimport type { CorrelationContext } from '../../observability';\nimport type { MastraCompositeStore } from '../../storage/base';\nimport type { TargetType } from '../../storage/types';\nimport type { ScorerResult } from './types';\n\nfunction toScorerTargetEntityType(targetType?: TargetType): EntityType | undefined {\n  switch (targetType) {\n    case 'agent':\n      return EntityType.AGENT;\n    case 'workflow':\n      return EntityType.WORKFLOW_RUN;\n    case 'scorer':\n      return EntityType.SCORER;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Resolve scorers from mixed array of instances and string IDs.\n * String IDs are looked up from Mastra's scorer registry.\n */\nexport function resolveScorers(\n  mastra: Mastra,\n  scorers?: (MastraScorer<any, any, any, any> | string)[],\n): MastraScorer<any, any, any, any>[] {\n  if (!scorers || scorers.length === 0) return [];\n\n  return scorers\n    .map(scorer => {\n      if (typeof scorer === 'string') {\n        const resolved = mastra.getScorerById(scorer);\n        if (!resolved) {\n          console.warn(`Scorer not found: ${scorer}`);\n          return null;\n        }\n        return resolved;\n      }\n      return scorer;\n    })\n    .filter((s): s is MastraScorer<any, any, any, any> => s !== null);\n}\n\n/**\n * Run all scorers for a single item result.\n * Errors are isolated per scorer - one failing scorer doesn't affect others.\n */\nexport async function runScorersForItem(\n  scorers: MastraScorer<any, any, any, any>[],\n  item: { input: unknown; groundTruth?: unknown; metadata?: Record<string, unknown> },\n  output: unknown,\n  storage: MastraCompositeStore | null,\n  runId: string,\n  targetType: TargetType,\n  targetId: string,\n  itemId: string,\n  scorerInput?: ScorerRunInputForAgent,\n  scorerOutput?: ScorerRunOutputForAgent,\n  traceId?: string,\n): Promise<ScorerResult[]> {\n  if (scorers.length === 0) return [];\n\n  // Build correlation context so scorers can emit scores with full experiment context\n  const targetCorrelationContext: CorrelationContext = {\n    ...(traceId ? { traceId } : {}),\n    entityType: toScorerTargetEntityType(targetType),\n    entityId: targetId,\n    entityName: targetId,\n    experimentId: runId,\n  };\n\n  const settled = await Promise.allSettled(\n    scorers.map(async scorer => {\n      const { result, promptMetadata } = await runScorerSafe(\n        scorer,\n        item,\n        output,\n        scorerInput,\n        scorerOutput,\n        targetType,\n        traceId,\n        targetCorrelationContext,\n      );\n\n      // Persist score if storage available and score was computed\n      if (storage && result.score !== null) {\n        try {\n          // Legacy score-store emission. This path is being deprecated.\n          await validateAndSaveScore(storage, {\n            scorerId: scorer.id,\n            score: result.score,\n            reason: result.reason ?? undefined,\n            input: item.input,\n            output,\n            additionalContext: item.metadata,\n            entityType: targetType.toUpperCase(),\n            entityId: itemId,\n            source: 'TEST',\n            runId,\n            traceId,\n            scorer: {\n              id: scorer.id,\n              name: scorer.name,\n              description: scorer.description ?? '',\n              hasJudge: !!scorer.judge,\n            },\n            entity: {\n              id: targetId,\n              name: targetId,\n            },\n            ...promptMetadata,\n          });\n        } catch (saveError) {\n          // TODO: Remove this warning path once the old scores storage is deprecated.\n          // Log but don't fail - score persistence is best-effort\n          console.warn(`Failed to save score for scorer ${scorer.id}:`, saveError);\n        }\n      }\n\n      return result;\n    }),\n  );\n\n  return settled.map((s, i) =>\n    s.status === 'fulfilled'\n      ? s.value\n      : { scorerId: scorers[i]!.id, scorerName: scorers[i]!.name, score: null, reason: null, error: String(s.reason) },\n  );\n}\n\n/** Prompt/step metadata returned by scorer.run() for DB persistence. */\ninterface ScorerPromptMetadata {\n  generateScorePrompt?: string;\n  generateReasonPrompt?: string;\n  preprocessStepResult?: Record<string, unknown>;\n  preprocessPrompt?: string;\n  analyzeStepResult?: Record<string, unknown>;\n  analyzePrompt?: string;\n}\n\n/**\n * Run a single scorer safely, catching any errors.\n * Returns both the ScorerResult and prompt metadata for DB persistence.\n */\nasync function runScorerSafe(\n  scorer: MastraScorer<any, any, any, any>,\n  item: { input: unknown; groundTruth?: unknown; metadata?: Record<string, unknown> },\n  output: unknown,\n  scorerInput?: ScorerRunInputForAgent,\n  scorerOutput?: ScorerRunOutputForAgent,\n  targetType?: TargetType,\n  targetTraceId?: string,\n  targetCorrelationContext?: CorrelationContext,\n): Promise<{ result: ScorerResult; promptMetadata: ScorerPromptMetadata }> {\n  try {\n    const scoreResult: unknown = await scorer.run({\n      input: scorerInput ?? item.input,\n      output: scorerOutput ?? output,\n      groundTruth: item.groundTruth,\n      scoreSource: 'experiment',\n      targetScope: 'span',\n      targetEntityType: toScorerTargetEntityType(targetType),\n      targetTraceId,\n      ...(targetCorrelationContext ? { targetCorrelationContext } : {}),\n    });\n\n    // Extract fields with typeof guards — scorer run result types use complex\n    // conditional generics that don't resolve cleanly with MastraScorer<any,…>.\n    if (typeof scoreResult !== 'object' || scoreResult === null) {\n      return {\n        result: {\n          scorerId: scorer.id,\n          scorerName: scorer.name,\n          score: null,\n          reason: null,\n          error: `Scorer ${scorer.name} (${scorer.id}) returned invalid result: expected object, got ${scoreResult === null ? 'null' : typeof scoreResult} (${String(scoreResult)})`,\n        },\n        promptMetadata: {},\n      };\n    }\n\n    const fields = scoreResult as Record<string, unknown>;\n    const score = typeof fields.score === 'number' ? fields.score : null;\n    const reason = typeof fields.reason === 'string' ? fields.reason : null;\n\n    const str = (key: string): string | undefined =>\n      typeof fields[key] === 'string' ? (fields[key] as string) : undefined;\n    const obj = (key: string): Record<string, unknown> | undefined => {\n      const val = fields[key];\n      return typeof val === 'object' && val !== null ? (val as Record<string, unknown>) : undefined;\n    };\n\n    return {\n      result: {\n        scorerId: scorer.id,\n        scorerName: scorer.name,\n        score,\n        reason,\n        error: null,\n      },\n      promptMetadata: {\n        generateScorePrompt: str('generateScorePrompt'),\n        generateReasonPrompt: str('generateReasonPrompt'),\n        preprocessStepResult: obj('preprocessStepResult'),\n        preprocessPrompt: str('preprocessPrompt'),\n        analyzeStepResult: obj('analyzeStepResult'),\n        analyzePrompt: str('analyzePrompt'),\n      },\n    };\n  } catch (error) {\n    return {\n      result: {\n        scorerId: scorer.id,\n        scorerName: scorer.name,\n        score: null,\n        reason: null,\n        error: error instanceof Error ? error.message : String(error),\n      },\n      promptMetadata: {},\n    };\n  }\n}\n","/**\n * Experiment Analytics Aggregation Helpers\n *\n * Pure functions for computing statistics from raw score data.\n * Used by compareExperiments to build ScorerStats and detect regressions.\n */\n\nimport type { ScoreRowData } from '../../../evals/types';\nimport type { ScorerStats } from './types';\n\n/**\n * Compute the arithmetic mean of an array of numbers.\n *\n * @param values - Array of numbers to average\n * @returns Mean value, or 0 if array is empty\n */\nexport function computeMean(values: number[]): number {\n  if (values.length === 0) {\n    return 0;\n  }\n  const sum = values.reduce((acc, val) => acc + val, 0);\n  return sum / values.length;\n}\n\n/**\n * Compute aggregate statistics for a set of scores.\n *\n * Metrics:\n * - errorRate: proportion of items with null scores (errors)\n * - passRate: proportion of scored items meeting threshold\n * - avgScore: mean of non-null scores\n *\n * @param scores - Score records from storage\n * @param passThreshold - Absolute threshold for pass (score >= threshold)\n * @returns ScorerStats with all computed metrics\n */\nexport function computeScorerStats(scores: ScoreRowData[], passThreshold: number = 0.5): ScorerStats {\n  const totalItems = scores.length;\n\n  if (totalItems === 0) {\n    return {\n      errorRate: 0,\n      errorCount: 0,\n      passRate: 0,\n      passCount: 0,\n      avgScore: 0,\n      scoreCount: 0,\n      totalItems: 0,\n    };\n  }\n\n  // Separate null scores (errors) from valid scores\n  const validScores: number[] = [];\n  let errorCount = 0;\n\n  for (const score of scores) {\n    if (score.score === null || score.score === undefined) {\n      errorCount++;\n    } else {\n      validScores.push(score.score);\n    }\n  }\n\n  const scoreCount = validScores.length;\n  const errorRate = errorCount / totalItems;\n\n  // Pass rate is computed over items with valid scores only\n  const passCount = validScores.filter(s => s >= passThreshold).length;\n  const passRate = scoreCount > 0 ? passCount / scoreCount : 0;\n\n  // Average score excludes errors\n  const avgScore = computeMean(validScores);\n\n  return {\n    errorRate,\n    errorCount,\n    passRate,\n    passCount,\n    avgScore,\n    scoreCount,\n    totalItems,\n  };\n}\n\n/**\n * Determine if a score delta represents a regression.\n *\n * @param delta - Score difference (experiment B - experiment A)\n * @param threshold - Absolute threshold for regression detection\n * @param direction - Score direction ('higher-is-better' or 'lower-is-better')\n * @returns True if delta represents a regression\n *\n * @example\n * // Higher is better (default): negative delta is bad\n * isRegression(-0.1, 0.05, 'higher-is-better') // true (dropped more than 0.05)\n * isRegression(-0.01, 0.05, 'higher-is-better') // false (within tolerance)\n *\n * // Lower is better: positive delta is bad\n * isRegression(0.1, 0.05, 'lower-is-better') // true (increased more than 0.05)\n */\nexport function isRegression(\n  delta: number,\n  threshold: number,\n  direction: 'higher-is-better' | 'lower-is-better' = 'higher-is-better',\n): boolean {\n  if (direction === 'higher-is-better') {\n    // Regression if score dropped below threshold\n    // delta < -threshold means score dropped by more than threshold\n    return delta < -threshold;\n  } else {\n    // Regression if score increased above threshold\n    // delta > threshold means score increased by more than threshold\n    return delta > threshold;\n  }\n}\n","/**\n * Experiment Comparison\n *\n * Compare two experiments to detect score regressions.\n * Returns per-scorer deltas and per-item score diffs.\n */\n\nimport type { ScoreRowData } from '../../../evals/types';\nimport type { Mastra } from '../../../mastra';\nimport { computeScorerStats, isRegression } from './aggregate';\nimport type {\n  CompareExperimentsConfig,\n  ComparisonResult,\n  ItemComparison,\n  ScorerComparison,\n  ScorerThreshold,\n} from './types';\n\n/**\n * Default threshold when not specified: no tolerance for regression.\n */\nconst DEFAULT_THRESHOLD: ScorerThreshold = {\n  value: 0,\n  direction: 'higher-is-better',\n};\n\n/**\n * Default pass threshold for computing pass rate.\n */\nconst DEFAULT_PASS_THRESHOLD = 0.5;\n\n/**\n * Compare two experiments to detect score regressions.\n *\n * @param mastra - Mastra instance for storage access\n * @param config - Comparison configuration\n * @returns ComparisonResult with per-scorer and per-item comparisons\n *\n * @example\n * ```typescript\n * const result = await compareExperiments(mastra, {\n *   experimentIdA: 'baseline-experiment-id',\n *   experimentIdB: 'candidate-experiment-id',\n *   thresholds: {\n *     'accuracy': { value: 0.05, direction: 'higher-is-better' },\n *     'latency': { value: 100, direction: 'lower-is-better' },\n *   },\n * });\n *\n * if (result.hasRegression) {\n *   console.log('Quality regression detected!');\n * }\n * ```\n */\nexport async function compareExperiments(mastra: Mastra, config: CompareExperimentsConfig): Promise<ComparisonResult> {\n  const { experimentIdA, experimentIdB, thresholds = {} } = config;\n  const warnings: string[] = [];\n\n  // 1. Get storage\n  const storage = mastra.getStorage();\n  if (!storage) {\n    throw new Error('Storage not configured. Configure storage in Mastra instance.');\n  }\n\n  const experimentsStore = await storage.getStore('experiments');\n  const scoresStore = await storage.getStore('scores');\n\n  if (!experimentsStore) {\n    throw new Error('ExperimentsStorage not configured.');\n  }\n  if (!scoresStore) {\n    throw new Error('ScoresStorage not configured.');\n  }\n\n  // 2. Load both experiments\n  const [experimentA, experimentB] = await Promise.all([\n    experimentsStore.getExperimentById({ id: experimentIdA }),\n    experimentsStore.getExperimentById({ id: experimentIdB }),\n  ]);\n\n  if (!experimentA) {\n    throw new Error(`Experiment not found: ${experimentIdA}`);\n  }\n  if (!experimentB) {\n    throw new Error(`Experiment not found: ${experimentIdB}`);\n  }\n\n  // 3. Check version mismatch\n  const versionMismatch = experimentA.datasetVersion !== experimentB.datasetVersion;\n  if (versionMismatch) {\n    warnings.push(\n      `Experiments have different dataset versions: ${experimentA.datasetVersion} vs ${experimentB.datasetVersion}`,\n    );\n  }\n\n  // 4. Load results for both experiments\n  const [resultsA, resultsB] = await Promise.all([\n    experimentsStore.listExperimentResults({ experimentId: experimentIdA, pagination: { page: 0, perPage: false } }),\n    experimentsStore.listExperimentResults({ experimentId: experimentIdB, pagination: { page: 0, perPage: false } }),\n  ]);\n\n  // 5. Load scores for both experiments\n  const [scoresA, scoresB] = await Promise.all([\n    scoresStore.listScoresByRunId({ runId: experimentIdA, pagination: { page: 0, perPage: false } }),\n    scoresStore.listScoresByRunId({ runId: experimentIdB, pagination: { page: 0, perPage: false } }),\n  ]);\n\n  // 6. Handle empty experiments\n  if (resultsA.results.length === 0 && resultsB.results.length === 0) {\n    warnings.push('Both experiments have no results.');\n    return buildEmptyResult(experimentA, experimentB, versionMismatch, warnings);\n  }\n  if (resultsA.results.length === 0) {\n    warnings.push('Experiment A has no results.');\n  }\n  if (resultsB.results.length === 0) {\n    warnings.push('Experiment B has no results.');\n  }\n\n  // 7. Find overlapping items\n  const itemIdsA = new Set(resultsA.results.map(r => r.itemId));\n  const itemIdsB = new Set(resultsB.results.map(r => r.itemId));\n  const overlappingItemIds = [...itemIdsA].filter(id => itemIdsB.has(id));\n\n  if (overlappingItemIds.length === 0) {\n    warnings.push('No overlapping items between experiments.');\n  }\n\n  // 8. Group scores by scorer and item\n  const scoresMapA = groupScoresByScorerAndItem(scoresA.scores);\n  const scoresMapB = groupScoresByScorerAndItem(scoresB.scores);\n\n  // 9. Find all unique scorers\n  const allScorerIds = new Set([...Object.keys(scoresMapA), ...Object.keys(scoresMapB)]);\n\n  // 10. Build per-scorer comparison\n  const scorers: Record<string, ScorerComparison> = {};\n  let hasRegression = false;\n\n  for (const scorerId of allScorerIds) {\n    const scorerScoresA = scoresMapA[scorerId] ?? {};\n    const scorerScoresB = scoresMapB[scorerId] ?? {};\n\n    // Get scores as arrays for stats computation\n    const scoresArrayA = Object.values(scorerScoresA);\n    const scoresArrayB = Object.values(scorerScoresB);\n\n    // Get threshold config for this scorer\n    const thresholdConfig = thresholds[scorerId] ?? DEFAULT_THRESHOLD;\n    const threshold = thresholdConfig.value;\n    const direction = thresholdConfig.direction ?? 'higher-is-better';\n\n    // Compute stats\n    const statsA = computeScorerStats(scoresArrayA, DEFAULT_PASS_THRESHOLD);\n    const statsB = computeScorerStats(scoresArrayB, DEFAULT_PASS_THRESHOLD);\n\n    // Compute delta and check regression\n    const delta = statsB.avgScore - statsA.avgScore;\n    const regressed = isRegression(delta, threshold, direction);\n\n    if (regressed) {\n      hasRegression = true;\n    }\n\n    scorers[scorerId] = {\n      statsA,\n      statsB,\n      delta,\n      regressed,\n      threshold,\n    };\n  }\n\n  // 11. Build per-item comparison\n  const allItemIds = new Set([...itemIdsA, ...itemIdsB]);\n  const items: ItemComparison[] = [];\n\n  for (const itemId of allItemIds) {\n    const inBothExperiments = itemIdsA.has(itemId) && itemIdsB.has(itemId);\n\n    // Build scores for this item\n    const itemScoresA: Record<string, number | null> = {};\n    const itemScoresB: Record<string, number | null> = {};\n\n    for (const scorerId of allScorerIds) {\n      const scoreA = scoresMapA[scorerId]?.[itemId];\n      const scoreB = scoresMapB[scorerId]?.[itemId];\n\n      itemScoresA[scorerId] = scoreA?.score ?? null;\n      itemScoresB[scorerId] = scoreB?.score ?? null;\n    }\n\n    items.push({\n      itemId,\n      inBothExperiments,\n      scoresA: itemScoresA,\n      scoresB: itemScoresB,\n    });\n  }\n\n  return {\n    experimentA: {\n      id: experimentA.id,\n      datasetVersion: experimentA.datasetVersion,\n    },\n    experimentB: {\n      id: experimentB.id,\n      datasetVersion: experimentB.datasetVersion,\n    },\n    versionMismatch,\n    hasRegression,\n    scorers,\n    items,\n    warnings,\n  };\n}\n\n/**\n * Group scores by scorer ID, then by item ID.\n */\nfunction groupScoresByScorerAndItem(scores: ScoreRowData[]): Record<string, Record<string, ScoreRowData>> {\n  const result: Record<string, Record<string, ScoreRowData>> = {};\n\n  for (const score of scores) {\n    const scorerId = score.scorerId;\n    const itemId = score.entityId; // entityId is the item ID for experiment scores\n\n    if (!result[scorerId]) {\n      result[scorerId] = {};\n    }\n    result[scorerId][itemId] = score;\n  }\n\n  return result;\n}\n\n/**\n * Build an empty comparison result for edge cases.\n */\nfunction buildEmptyResult(\n  experimentA: { id: string; datasetVersion: number | null },\n  experimentB: { id: string; datasetVersion: number | null },\n  versionMismatch: boolean,\n  warnings: string[],\n): ComparisonResult {\n  return {\n    experimentA: {\n      id: experimentA.id,\n      datasetVersion: experimentA.datasetVersion,\n    },\n    experimentB: {\n      id: experimentB.id,\n      datasetVersion: experimentB.datasetVersion,\n    },\n    versionMismatch,\n    hasRegression: false,\n    scorers: {},\n    items: [],\n    warnings,\n  };\n}\n","import { MastraError } from '../../error/index.js';\nimport type { Mastra } from '../../mastra';\n\n/** Unified item shape used within experiment execution (bridges inline + versioned data) */\ntype ExperimentItem = {\n  id: string; // item id (or generated for inline)\n  datasetVersion: number | null; // null for inline experiments\n  input: unknown;\n  groundTruth?: unknown;\n  requestContext?: Record<string, unknown>;\n  metadata?: Record<string, unknown>;\n};\nimport type { DatasetRecord } from '../../storage/types';\nimport { executeTarget } from './executor';\nimport type { Target, ExecutionResult } from './executor';\nimport { resolveScorers, runScorersForItem } from './scorer';\nimport type { ExperimentConfig, ExperimentSummary, ItemWithScores, ItemResult } from './types';\n\n// Re-export types and helpers\nexport type {\n  DataItem,\n  ExperimentConfig,\n  ExperimentSummary,\n  ItemWithScores,\n  ItemResult,\n  ScorerResult,\n  StartExperimentConfig,\n} from './types';\nexport { executeTarget, type Target, type ExecutionResult } from './executor';\nexport { resolveScorers, runScorersForItem } from './scorer';\n\n// Re-export analytics\nexport * from './analytics';\n\n/**\n * Run a dataset experiment against a target with optional scoring.\n *\n * Executes all items in the dataset concurrently (up to maxConcurrency) against\n * the specified target (agent or workflow). Optionally applies scorers to each\n * result and persists both results and scores to storage.\n *\n * @param mastra - Mastra instance for storage and target resolution\n * @param config - Experiment configuration\n * @returns ExperimentSummary with results and scores\n *\n * @example\n * ```typescript\n * const summary = await runExperiment(mastra, {\n *   datasetId: 'my-dataset',\n *   targetType: 'agent',\n *   targetId: 'my-agent',\n *   scorers: [accuracyScorer, latencyScorer],\n *   maxConcurrency: 10,\n * });\n * console.log(`${summary.succeededCount}/${summary.totalItems} succeeded`);\n * ```\n */\nexport async function runExperiment(mastra: Mastra, config: ExperimentConfig): Promise<ExperimentSummary> {\n  const {\n    datasetId,\n    targetType,\n    targetId,\n    scorers: scorerInput,\n    version,\n    maxConcurrency = 5,\n    signal,\n    itemTimeout,\n    maxRetries = 0,\n    experimentId: providedExperimentId,\n    name,\n    description,\n    metadata,\n    requestContext: globalRequestContext,\n    agentVersion,\n  } = config;\n\n  const startedAt = new Date();\n  // Use provided experimentId (async trigger) or generate new one\n  const experimentId = providedExperimentId ?? crypto.randomUUID();\n\n  // 1. Get storage and resolve components\n  const storage = mastra.getStorage();\n  const datasetsStore = await storage?.getStore('datasets');\n  const experimentsStore = await storage?.getStore('experiments');\n\n  // Helper: if the experiment record was pre-created (async path) and we fail\n  // during setup (Phase A/B), mark the experiment as failed so it doesn't stay stuck in 'pending'.\n  const markFailedOnSetupError = async (err: unknown) => {\n    if (providedExperimentId && experimentsStore) {\n      try {\n        await experimentsStore.updateExperiment({\n          id: experimentId,\n          status: 'failed',\n          completedAt: new Date(),\n        });\n      } catch (updateErr) {\n        mastra.getLogger()?.error(`Failed to mark experiment ${experimentId} as failed: ${updateErr}`);\n      }\n    }\n    throw err;\n  };\n\n  // Phase A — Resolve items\n  let items: ExperimentItem[];\n  let datasetVersion: number | null;\n  let datasetRecord: DatasetRecord | null | undefined;\n\n  try {\n    if (config.data) {\n      // Inline data path — array or factory function\n      const rawData = typeof config.data === 'function' ? await config.data() : config.data;\n      items = rawData.map(dataItem => {\n        const id = dataItem.id ?? crypto.randomUUID();\n        return {\n          id,\n          datasetVersion: null,\n          input: dataItem.input,\n          groundTruth: dataItem.groundTruth,\n          metadata: dataItem.metadata,\n        };\n      });\n      datasetVersion = null;\n    } else if (datasetId) {\n      // Storage-backed data path (existing)\n      if (!datasetsStore) {\n        throw new Error('DatasetsStorage not configured. Configure storage in Mastra instance.');\n      }\n\n      datasetRecord = await datasetsStore.getDatasetById({ id: datasetId });\n      if (!datasetRecord) {\n        throw new MastraError({\n          id: 'DATASET_NOT_FOUND',\n          text: `Dataset not found: ${datasetId}`,\n          domain: 'STORAGE',\n          category: 'USER',\n        });\n      }\n\n      datasetVersion = version ?? datasetRecord.version;\n      const versionItems = await datasetsStore.getItemsByVersion({\n        datasetId,\n        version: datasetVersion,\n      });\n\n      if (versionItems.length === 0) {\n        throw new MastraError({\n          id: 'EXPERIMENT_NO_ITEMS',\n          text: `No items in dataset ${datasetId} at version ${datasetVersion}`,\n          domain: 'STORAGE',\n          category: 'USER',\n        });\n      }\n\n      items = versionItems.map(v => ({\n        id: v.id,\n        datasetVersion: v.datasetVersion,\n        input: v.input,\n        groundTruth: v.groundTruth,\n        requestContext: v.requestContext,\n        metadata: v.metadata,\n      }));\n    } else {\n      throw new Error('No data source: provide datasetId or data');\n    }\n  } catch (err) {\n    await markFailedOnSetupError(err);\n    throw err; // unreachable, but satisfies TS control flow\n  }\n\n  // Phase B — Resolve task function\n  let execFn: (item: ExperimentItem, signal?: AbortSignal) => Promise<ExecutionResult>;\n\n  try {\n    if (config.task) {\n      // Inline task path\n      const taskFn = config.task;\n      execFn = async (item, itemSignal) => {\n        try {\n          const result = await taskFn({\n            input: item.input,\n            mastra,\n            groundTruth: item.groundTruth,\n            metadata: item.metadata,\n            signal: itemSignal,\n          });\n          return { output: result, error: null, traceId: null };\n        } catch (err: unknown) {\n          return {\n            output: null,\n            error: {\n              message: err instanceof Error ? err.message : String(err),\n              stack: err instanceof Error ? err.stack : undefined,\n            },\n            traceId: null,\n          };\n        }\n      };\n    } else if (targetType && targetId) {\n      // Registry-based target path (existing)\n      const target = await resolveTarget(mastra, targetType, targetId, agentVersion);\n      if (!target) {\n        throw new Error(`Target not found: ${targetType}/${targetId}`);\n      }\n      execFn = (item, itemSignal) => {\n        // Merge global request context with per-item request context (item takes precedence)\n        const mergedRequestContext =\n          globalRequestContext || item.requestContext ? { ...globalRequestContext, ...item.requestContext } : undefined;\n        return executeTarget(target, targetType, item, {\n          signal: itemSignal,\n          requestContext: mergedRequestContext,\n          experimentId,\n        });\n      };\n    } else {\n      throw new Error('No task: provide targetType+targetId or task');\n    }\n  } catch (err) {\n    await markFailedOnSetupError(err);\n    throw err; // unreachable, but satisfies TS control flow\n  }\n\n  // Merge dataset-attached scorers with explicitly provided scorers, then deduplicate\n  let mergedScorerInput = scorerInput;\n  const datasetScorerIds = datasetRecord?.scorerIds ?? [];\n  if (datasetScorerIds.length > 0) {\n    mergedScorerInput = [...(scorerInput ?? []), ...datasetScorerIds];\n  }\n  if (mergedScorerInput && mergedScorerInput.length > 0) {\n    const seen = new Set<string>();\n    mergedScorerInput = mergedScorerInput.filter(entry => {\n      if (typeof entry === 'string') {\n        if (seen.has(entry)) return false;\n        seen.add(entry);\n        return true;\n      }\n      // Keep all scorer instances — they are resolved by reference, not by ID\n      return true;\n    });\n  }\n\n  // Resolve scorers\n  const scorers = resolveScorers(mastra, mergedScorerInput);\n\n  // 5. Create experiment record (if storage available and not pre-created)\n  if (experimentsStore) {\n    if (!providedExperimentId) {\n      // Create new experiment record (sync trigger path)\n      await experimentsStore.createExperiment({\n        id: experimentId,\n        name,\n        description,\n        metadata,\n        datasetId: datasetId ?? null,\n        datasetVersion,\n        targetType: targetType ?? 'agent',\n        targetId: targetId ?? 'inline',\n        totalItems: items.length,\n        agentVersion,\n      });\n    }\n    // Update status to running (both sync and async paths)\n    // Also set totalItems — needed for the async path where the experiment\n    // was created with totalItems: 0 before items were resolved.\n    await experimentsStore.updateExperiment({\n      id: experimentId,\n      status: 'running',\n      totalItems: items.length,\n      startedAt,\n    });\n  }\n\n  // 6. Execute items with p-map\n  let succeededCount = 0;\n  let failedCount = 0;\n  // Pre-allocate for deterministic ordering (results[i] matches items[i])\n  const results: ItemWithScores[] = new Array(items.length);\n\n  // Throttled progress updates\n  const PROGRESS_UPDATE_INTERVAL = 2000;\n  let lastProgressUpdate = 0;\n\n  try {\n    const pMap = (await import('p-map')).default;\n\n    await pMap(\n      items.map((item, idx) => ({ item, idx })),\n      async ({ item, idx }) => {\n        // Check for cancellation\n        if (signal?.aborted) {\n          throw new DOMException('Aborted', 'AbortError');\n        }\n\n        const itemStartedAt = new Date();\n        // Compose per-item signal (timeout + run-level abort)\n        let itemSignal: AbortSignal | undefined = signal;\n        if (itemTimeout) {\n          const timeoutSignal = AbortSignal.timeout(itemTimeout);\n          itemSignal = signal ? AbortSignal.any([signal, timeoutSignal]) : timeoutSignal;\n        }\n\n        // Retry loop\n        let retryCount = 0;\n        let execResult = await execFn(item, itemSignal);\n\n        while (execResult.error && retryCount < maxRetries) {\n          // Don't retry abort errors\n          if (execResult.error.message.toLowerCase().includes('abort')) break;\n\n          retryCount++;\n          const delay = Math.min(1000 * Math.pow(2, retryCount - 1), 30000);\n          const jitter = delay * 0.2 * Math.random();\n          await new Promise(r => setTimeout(r, delay + jitter));\n\n          // Re-check cancellation before retry\n          if (signal?.aborted) {\n            throw new DOMException('Aborted', 'AbortError');\n          }\n\n          execResult = await execFn(item, itemSignal);\n        }\n\n        const itemCompletedAt = new Date();\n\n        // Track success/failure\n        if (execResult.error) {\n          failedCount++;\n        } else {\n          succeededCount++;\n        }\n\n        // Build item result\n        const itemResult: ItemResult = {\n          itemId: item.id,\n          itemVersion: item.datasetVersion ?? 0,\n          input: item.input,\n          output: execResult.output,\n          groundTruth: item.groundTruth ?? null,\n          error: execResult.error,\n          startedAt: itemStartedAt,\n          completedAt: itemCompletedAt,\n          retryCount,\n        };\n\n        // Run scorers (inline, after target completes)\n        const itemScores = await runScorersForItem(\n          scorers,\n          item,\n          execResult.output,\n          storage ?? null,\n          experimentId,\n          targetType ?? 'agent',\n          targetId ?? 'inline',\n          item.id,\n          execResult.scorerInput,\n          execResult.scorerOutput,\n          execResult.traceId ?? undefined,\n        );\n\n        // Persist result with scores (if storage available)\n        if (experimentsStore) {\n          try {\n            await experimentsStore.addExperimentResult({\n              experimentId,\n              itemId: item.id,\n              itemDatasetVersion: item.datasetVersion,\n              input: item.input,\n              output: execResult.output,\n              groundTruth: item.groundTruth ?? null,\n              error: execResult.error,\n              startedAt: itemStartedAt,\n              completedAt: itemCompletedAt,\n              retryCount,\n              traceId: execResult.traceId,\n            });\n          } catch (persistError) {\n            console.warn(`Failed to persist result for item ${item.id}:`, persistError);\n          }\n\n          // Throttled progress update\n          const now = Date.now();\n          if (now - lastProgressUpdate >= PROGRESS_UPDATE_INTERVAL) {\n            lastProgressUpdate = now;\n            try {\n              await experimentsStore.updateExperiment({\n                id: experimentId,\n                succeededCount,\n                failedCount,\n              });\n            } catch {\n              // Non-fatal — progress updates are best-effort\n            }\n          }\n        }\n\n        // Store at original index for deterministic ordering\n        results[idx] = {\n          ...itemResult,\n          scores: itemScores,\n        };\n      },\n      { concurrency: maxConcurrency },\n    );\n  } catch {\n    // Handle abort or other fatal errors — return partial summary instead of throwing\n    const completedAt = new Date();\n    const skippedCount = items.length - succeededCount - failedCount;\n\n    if (experimentsStore) {\n      await experimentsStore.updateExperiment({\n        id: experimentId,\n        status: 'failed',\n        succeededCount,\n        failedCount,\n        skippedCount,\n        completedAt,\n      });\n    }\n\n    return {\n      experimentId,\n      status: 'failed' as const,\n      totalItems: items.length,\n      succeededCount,\n      failedCount,\n      skippedCount,\n      completedWithErrors: false,\n      startedAt,\n      completedAt,\n      results: results.filter(Boolean),\n    };\n  }\n\n  // 7. Finalize experiment record\n  const completedAt = new Date();\n  const status = failedCount === items.length ? 'failed' : 'completed';\n  const completedWithErrors = status === 'completed' && failedCount > 0;\n\n  const skippedCount = items.length - succeededCount - failedCount;\n  if (experimentsStore) {\n    await experimentsStore.updateExperiment({\n      id: experimentId,\n      status,\n      succeededCount,\n      failedCount,\n      skippedCount,\n      completedAt,\n    });\n  }\n\n  return {\n    experimentId,\n    status,\n    totalItems: items.length,\n    succeededCount,\n    failedCount,\n    skippedCount,\n    completedWithErrors,\n    startedAt,\n    completedAt,\n    results,\n  };\n}\n\n/**\n * Resolve a target from Mastra's registries by type and ID.\n * When `agentVersion` is provided for an agent target, the returned agent\n * will have the versioned config applied (via `applyStoredOverrides`).\n */\nasync function resolveTarget(\n  mastra: Mastra,\n  targetType: string,\n  targetId: string,\n  agentVersion?: string,\n): Promise<Target | null> {\n  // NOTE: Workflow is thenable, so we must never return one directly from an\n  // async function — TypeScript would try to unwrap it.  We collect into a\n  // local variable and return once at the end.\n  let resolved: Target | null = null;\n\n  switch (targetType) {\n    case 'agent':\n      try {\n        if (agentVersion) {\n          resolved = await mastra.getAgentById(targetId, { versionId: agentVersion });\n        } else {\n          resolved = mastra.getAgentById(targetId);\n        }\n      } catch {\n        // Try by name if ID lookup fails\n        try {\n          if (agentVersion) {\n            resolved = await mastra.getAgent(targetId, { versionId: agentVersion });\n          } else {\n            resolved = mastra.getAgent(targetId);\n          }\n        } catch {\n          // leave null\n        }\n      }\n      break;\n    case 'workflow':\n      try {\n        resolved = mastra.getWorkflowById(targetId);\n      } catch {\n        // Try by name if ID lookup fails\n        try {\n          resolved = mastra.getWorkflow(targetId);\n        } catch {\n          // leave null\n        }\n      }\n      break;\n    case 'scorer':\n      try {\n        resolved = mastra.getScorerById(targetId) ?? null;\n      } catch {\n        // leave null\n      }\n      break;\n    case 'processor':\n      // Processors not yet in registry - Phase 4\n      break;\n    default:\n      break;\n  }\n\n  return resolved;\n}\n","import { isZodType } from '@mastra/schema-compat';\nimport { zodToJsonSchema } from '@mastra/schema-compat/zod-to-json';\nimport { MastraError } from '../error/index.js';\nimport type { Mastra } from '../mastra/index.js';\nimport type { DatasetsStorage } from '../storage/domains/datasets/base.js';\nimport type { ExperimentsStorage } from '../storage/domains/experiments/base.js';\nimport type {\n  DatasetRecord,\n  DatasetItem,\n  DatasetItemRow,\n  DatasetItemSource,\n  DatasetVersion,\n  TargetType,\n  UpdateExperimentResultInput,\n} from '../storage/types.js';\nimport { runExperiment } from './experiment/index.js';\nimport type { ExperimentConfig, StartExperimentConfig, ExperimentSummary } from './experiment/types.js';\n\n/**\n * Public API for interacting with a single dataset.\n *\n * Provides methods for item CRUD, versioning, and experiment management.\n * Obtained via `DatasetsManager.get()` or `DatasetsManager.create()`.\n */\nexport class Dataset {\n  readonly id: string;\n  #mastra: Mastra;\n  #datasetsStore?: DatasetsStorage;\n  #experimentsStore?: ExperimentsStorage;\n\n  constructor(id: string, mastra: Mastra) {\n    this.id = id;\n    this.#mastra = mastra;\n  }\n\n  // ---------------------------------------------------------------------------\n  // Lazy storage resolution\n  // ---------------------------------------------------------------------------\n\n  async #getDatasetsStore(): Promise<DatasetsStorage> {\n    if (this.#datasetsStore) return this.#datasetsStore;\n\n    const storage = this.#mastra.getStorage();\n    if (!storage) {\n      throw new MastraError({\n        id: 'DATASETS_STORAGE_NOT_CONFIGURED',\n        text: 'Storage not configured. Configure storage in Mastra instance.',\n        domain: 'STORAGE',\n        category: 'USER',\n      });\n    }\n\n    const store = await storage.getStore('datasets');\n    if (!store) {\n      throw new MastraError({\n        id: 'DATASETS_STORE_NOT_AVAILABLE',\n        text: 'Datasets store not available. Ensure your storage adapter provides a datasets domain.',\n        domain: 'STORAGE',\n        category: 'USER',\n      });\n    }\n\n    this.#datasetsStore = store;\n    return store;\n  }\n\n  async #getExperimentsStore(): Promise<ExperimentsStorage> {\n    if (this.#experimentsStore) return this.#experimentsStore;\n\n    const storage = this.#mastra.getStorage();\n    if (!storage) {\n      throw new MastraError({\n        id: 'DATASETS_STORAGE_NOT_CONFIGURED',\n        text: 'Storage not configured. Configure storage in Mastra instance.',\n        domain: 'STORAGE',\n        category: 'USER',\n      });\n    }\n\n    const store = await storage.getStore('experiments');\n    if (!store) {\n      throw new MastraError({\n        id: 'EXPERIMENTS_STORE_NOT_AVAILABLE',\n        text: 'Experiments store not available. Ensure your storage adapter provides an experiments domain.',\n        domain: 'STORAGE',\n        category: 'USER',\n      });\n    }\n\n    this.#experimentsStore = store;\n    return store;\n  }\n\n  // ---------------------------------------------------------------------------\n  // Dataset metadata\n  // ---------------------------------------------------------------------------\n\n  /**\n   * Get the full dataset record from storage.\n   */\n  async getDetails(): Promise<DatasetRecord> {\n    const store = await this.#getDatasetsStore();\n    const record = await store.getDatasetById({ id: this.id });\n    if (!record) {\n      throw new MastraError({\n        id: 'DATASET_NOT_FOUND',\n        text: `Dataset not found: ${this.id}`,\n        domain: 'STORAGE',\n        category: 'USER',\n      });\n    }\n    return record;\n  }\n\n  /**\n   * Update dataset metadata and/or schemas.\n   * Zod schemas are automatically converted to JSON Schema.\n   */\n  async update(input: {\n    name?: string;\n    description?: string;\n    metadata?: Record<string, unknown>;\n    inputSchema?: unknown;\n    groundTruthSchema?: unknown;\n    requestContextSchema?: Record<string, unknown> | null;\n    tags?: string[] | null;\n    targetType?: TargetType | null;\n    targetIds?: string[] | null;\n    scorerIds?: string[] | null;\n  }): Promise<DatasetRecord> {\n    const store = await this.#getDatasetsStore();\n\n    let { inputSchema, groundTruthSchema, ...rest } = input;\n\n    if (inputSchema !== undefined && inputSchema !== null && isZodType(inputSchema)) {\n      inputSchema = zodToJsonSchema(inputSchema);\n    }\n    if (groundTruthSchema !== undefined && groundTruthSchema !== null && isZodType(groundTruthSchema)) {\n      groundTruthSchema = zodToJsonSchema(groundTruthSchema);\n    }\n\n    return store.updateDataset({\n      id: this.id,\n      ...rest,\n      inputSchema: inputSchema as Record<string, unknown> | null | undefined,\n      groundTruthSchema: groundTruthSchema as Record<string, unknown> | null | undefined,\n    });\n  }\n\n  // ---------------------------------------------------------------------------\n  // Item CRUD\n  // ---------------------------------------------------------------------------\n\n  /**\n   * Add a single item to the dataset.\n   */\n  async addItem(input: {\n    input: unknown;\n    groundTruth?: unknown;\n    expectedTrajectory?: unknown;\n    requestContext?: Record<string, unknown>;\n    metadata?: Record<string, unknown>;\n    source?: DatasetItemSource;\n  }): Promise<DatasetItem> {\n    const store = await this.#getDatasetsStore();\n    return store.addItem({\n      datasetId: this.id,\n      input: input.input,\n      groundTruth: input.groundTruth,\n      expectedTrajectory: input.expectedTrajectory,\n      requestContext: input.requestContext,\n      metadata: input.metadata,\n      source: input.source,\n    });\n  }\n\n  /**\n   * Add multiple items to the dataset in bulk.\n   */\n  async addItems(input: {\n    items: Array<{\n      input: unknown;\n      groundTruth?: unknown;\n      expectedTrajectory?: unknown;\n      requestContext?: Record<string, unknown>;\n      metadata?: Record<string, unknown>;\n      source?: DatasetItemSource;\n    }>;\n  }): Promise<DatasetItem[]> {\n    const store = await this.#getDatasetsStore();\n    return store.batchInsertItems({\n      datasetId: this.id,\n      items: input.items,\n    });\n  }\n\n  /**\n   * Get a single item by ID, optionally at a specific version.\n   */\n  async getItem(args: { itemId: string; version?: number }): Promise<DatasetItem | null> {\n    const store = await this.#getDatasetsStore();\n    return store.getItemById({ id: args.itemId, datasetVersion: args.version });\n  }\n\n  /**\n   * List items in the dataset, optionally at a specific version.\n   */\n  async listItems(args?: {\n    version?: number;\n    page?: number;\n    perPage?: number;\n    search?: string;\n  }): Promise<\n    | DatasetItem[]\n    | { items: DatasetItem[]; pagination: { total: number; page: number; perPage: number | false; hasMore: boolean } }\n  > {\n    const store = await this.#getDatasetsStore();\n    if (args?.version) {\n      return store.getItemsByVersion({ datasetId: this.id, version: args.version });\n    }\n    return store.listItems({\n      datasetId: this.id,\n      search: args?.search,\n      pagination: { page: args?.page ?? 0, perPage: args?.perPage ?? 20 },\n    });\n  }\n\n  /**\n   * Update an existing item in the dataset.\n   */\n  async updateItem(input: {\n    itemId: string;\n    input?: unknown;\n    groundTruth?: unknown;\n    expectedTrajectory?: unknown;\n    requestContext?: Record<string, unknown>;\n    metadata?: Record<string, unknown>;\n  }): Promise<DatasetItem> {\n    const store = await this.#getDatasetsStore();\n    return store.updateItem({\n      id: input.itemId,\n      datasetId: this.id,\n      input: input.input,\n      groundTruth: input.groundTruth,\n      expectedTrajectory: input.expectedTrajectory,\n      requestContext: input.requestContext,\n      metadata: input.metadata,\n    });\n  }\n\n  /**\n   * Delete a single item from the dataset.\n   */\n  async deleteItem(args: { itemId: string }): Promise<void> {\n    const store = await this.#getDatasetsStore();\n    return store.deleteItem({ id: args.itemId, datasetId: this.id });\n  }\n\n  /**\n   * Delete multiple items from the dataset in bulk.\n   */\n  async deleteItems(args: { itemIds: string[] }): Promise<void> {\n    const store = await this.#getDatasetsStore();\n    return store.batchDeleteItems({ datasetId: this.id, itemIds: args.itemIds });\n  }\n\n  // ---------------------------------------------------------------------------\n  // Versioning\n  // ---------------------------------------------------------------------------\n\n  /**\n   * List all versions of this dataset.\n   */\n  async listVersions(args?: { page?: number; perPage?: number }): Promise<{\n    versions: DatasetVersion[];\n    pagination: { total: number; page: number; perPage: number | false; hasMore: boolean };\n  }> {\n    const store = await this.#getDatasetsStore();\n    return store.listDatasetVersions({\n      datasetId: this.id,\n      pagination: { page: args?.page ?? 0, perPage: args?.perPage ?? 20 },\n    });\n  }\n\n  /**\n   * Get full SCD-2 history of a specific item across all dataset versions.\n   */\n  async getItemHistory(args: { itemId: string }): Promise<DatasetItemRow[]> {\n    const store = await this.#getDatasetsStore();\n    return store.getItemHistory(args.itemId);\n  }\n\n  // ---------------------------------------------------------------------------\n  // Experiments\n  // ---------------------------------------------------------------------------\n\n  /**\n   * Run an experiment on this dataset and wait for completion.\n   */\n  async startExperiment<I = unknown, O = unknown, E = unknown>(\n    config: StartExperimentConfig<I, O, E>,\n  ): Promise<ExperimentSummary> {\n    return runExperiment(this.#mastra, { datasetId: this.id, ...config } as ExperimentConfig);\n  }\n\n  /**\n   * Start an experiment asynchronously (fire-and-forget).\n   * Returns immediately with the experiment ID and pending status.\n   */\n  async startExperimentAsync<I = unknown, O = unknown, E = unknown>(\n    config: StartExperimentConfig<I, O, E>,\n  ): Promise<{ experimentId: string; status: 'pending'; totalItems: number }> {\n    const experimentsStore = await this.#getExperimentsStore();\n    const datasetsStore = await this.#getDatasetsStore();\n\n    const dataset = await datasetsStore.getDatasetById({ id: this.id });\n    if (!dataset) {\n      throw new MastraError({\n        id: 'DATASET_NOT_FOUND',\n        text: `Dataset not found: ${this.id}`,\n        domain: 'STORAGE',\n        category: 'USER',\n      });\n    }\n\n    // Validate that dataset has items before creating experiment record\n    const targetVersion = config.version ?? dataset.version;\n    const items = await datasetsStore.getItemsByVersion({\n      datasetId: this.id,\n      version: targetVersion,\n    });\n    if (items.length === 0) {\n      throw new MastraError({\n        id: 'EXPERIMENT_NO_ITEMS',\n        text: `Cannot run experiment: dataset \"${this.id}\" has no items at version ${targetVersion}`,\n        domain: 'STORAGE',\n        category: 'USER',\n      });\n    }\n\n    const run = await experimentsStore.createExperiment({\n      datasetId: this.id,\n      datasetVersion: targetVersion,\n      targetType: config.targetType ?? 'agent',\n      targetId: config.targetId ?? 'inline',\n      totalItems: items.length,\n      name: config.name,\n      description: config.description,\n      metadata: config.metadata,\n      agentVersion: config.agentVersion,\n    });\n\n    const experimentId = run.id;\n\n    // Fire-and-forget — runExperiment merges dataset-attached scorers automatically\n    void runExperiment(this.#mastra, {\n      datasetId: this.id,\n      experimentId,\n      ...config,\n      version: targetVersion,\n    } as ExperimentConfig).catch(async err => {\n      await experimentsStore\n        .updateExperiment({\n          id: experimentId,\n          status: 'failed',\n          completedAt: new Date(),\n        })\n        .catch(() => {});\n      this.#mastra.getLogger()?.error(`Experiment ${experimentId} failed: ${err?.message ?? err}`);\n    });\n\n    return { experimentId, status: 'pending' as const, totalItems: items.length };\n  }\n\n  /**\n   * List all experiments (runs) for this dataset.\n   */\n  async listExperiments(args?: { page?: number; perPage?: number }) {\n    const experimentsStore = await this.#getExperimentsStore();\n    return experimentsStore.listExperiments({\n      datasetId: this.id,\n      pagination: { page: args?.page ?? 0, perPage: args?.perPage ?? 20 },\n    });\n  }\n\n  /**\n   * Get a specific experiment (run) by ID.\n   */\n  async getExperiment(args: { experimentId: string }) {\n    const experimentsStore = await this.#getExperimentsStore();\n    return experimentsStore.getExperimentById({ id: args.experimentId });\n  }\n\n  /**\n   * List results for a specific experiment.\n   */\n  async listExperimentResults(args: { experimentId: string; page?: number; perPage?: number }) {\n    const experimentsStore = await this.#getExperimentsStore();\n    return experimentsStore.listExperimentResults({\n      experimentId: args.experimentId,\n      pagination: { page: args?.page ?? 0, perPage: args?.perPage ?? 20 },\n    });\n  }\n\n  /**\n   * Delete an experiment (run) by ID.\n   */\n  /**\n   * Update an experiment result's status or tags.\n   */\n  async updateExperimentResult(input: UpdateExperimentResultInput) {\n    const experimentsStore = await this.#getExperimentsStore();\n    return experimentsStore.updateExperimentResult(input);\n  }\n\n  async deleteExperiment(args: { experimentId: string }) {\n    const experimentsStore = await this.#getExperimentsStore();\n    return experimentsStore.deleteExperiment({ id: args.experimentId });\n  }\n}\n","import { isZodType } from '@mastra/schema-compat';\nimport { zodToJsonSchema } from '@mastra/schema-compat/zod-to-json';\nimport { MastraError } from '../error/index.js';\nimport type { Mastra } from '../mastra/index.js';\nimport type { DatasetsStorage } from '../storage/domains/datasets/base.js';\nimport type { ExperimentsStorage } from '../storage/domains/experiments/base.js';\nimport type { TargetType } from '../storage/types.js';\nimport { Dataset } from './dataset.js';\nimport { compareExperiments as compareExperimentsInternal } from './experiment/analytics/compare.js';\n\n/**\n * Public API for managing datasets.\n *\n * Provides methods for dataset CRUD and cross-dataset experiment operations.\n * Typically accessed via `mastra.datasets` (Phase 4).\n */\nexport class DatasetsManager {\n  #mastra: Mastra;\n  #datasetsStore?: DatasetsStorage;\n  #experimentsStore?: ExperimentsStorage;\n\n  constructor(mastra: Mastra) {\n    this.#mastra = mastra;\n  }\n\n  // ---------------------------------------------------------------------------\n  // Lazy storage resolution\n  // ---------------------------------------------------------------------------\n\n  async #getDatasetsStore(): Promise<DatasetsStorage> {\n    if (this.#datasetsStore) return this.#datasetsStore;\n\n    const storage = this.#mastra.getStorage();\n    if (!storage) {\n      throw new MastraError({\n        id: 'DATASETS_STORAGE_NOT_CONFIGURED',\n        text: 'Storage not configured. Configure storage in Mastra instance.',\n        domain: 'STORAGE',\n        category: 'USER',\n      });\n    }\n\n    const store = await storage.getStore('datasets');\n    if (!store) {\n      throw new MastraError({\n        id: 'DATASETS_STORE_NOT_AVAILABLE',\n        text: 'Datasets store not available. Ensure your storage adapter provides a datasets domain.',\n        domain: 'STORAGE',\n        category: 'USER',\n      });\n    }\n\n    this.#datasetsStore = store;\n    return store;\n  }\n\n  async #getExperimentsStore(): Promise<ExperimentsStorage> {\n    if (this.#experimentsStore) return this.#experimentsStore;\n\n    const storage = this.#mastra.getStorage();\n    if (!storage) {\n      throw new MastraError({\n        id: 'DATASETS_STORAGE_NOT_CONFIGURED',\n        text: 'Storage not configured. Configure storage in Mastra instance.',\n        domain: 'STORAGE',\n        category: 'USER',\n      });\n    }\n\n    const store = await storage.getStore('experiments');\n    if (!store) {\n      throw new MastraError({\n        id: 'EXPERIMENTS_STORE_NOT_AVAILABLE',\n        text: 'Experiments store not available. Ensure your storage adapter provides an experiments domain.',\n        domain: 'STORAGE',\n        category: 'USER',\n      });\n    }\n\n    this.#experimentsStore = store;\n    return store;\n  }\n\n  // ---------------------------------------------------------------------------\n  // Dataset CRUD\n  // ---------------------------------------------------------------------------\n\n  /**\n   * Create a new dataset.\n   * Zod schemas are automatically converted to JSON Schema.\n   */\n  async create(input: {\n    name: string;\n    description?: string;\n    inputSchema?: unknown;\n    groundTruthSchema?: unknown;\n    requestContextSchema?: Record<string, unknown> | null;\n    metadata?: Record<string, unknown>;\n    targetType?: TargetType;\n    targetIds?: string[];\n    scorerIds?: string[];\n  }): Promise<Dataset> {\n    const store = await this.#getDatasetsStore();\n\n    let { inputSchema, groundTruthSchema, ...rest } = input;\n\n    if (inputSchema !== undefined && isZodType(inputSchema)) {\n      inputSchema = zodToJsonSchema(inputSchema);\n    }\n    if (groundTruthSchema !== undefined && isZodType(groundTruthSchema)) {\n      groundTruthSchema = zodToJsonSchema(groundTruthSchema);\n    }\n\n    const result = await store.createDataset({\n      ...rest,\n      inputSchema: inputSchema as Record<string, unknown> | undefined,\n      groundTruthSchema: groundTruthSchema as Record<string, unknown> | undefined,\n    });\n\n    return new Dataset(result.id, this.#mastra);\n  }\n\n  /**\n   * Get an existing dataset by ID.\n   * Throws if the dataset does not exist.\n   */\n  async get(args: { id: string }): Promise<Dataset> {\n    const store = await this.#getDatasetsStore();\n    const record = await store.getDatasetById({ id: args.id });\n    if (!record) {\n      throw new MastraError({\n        id: 'DATASET_NOT_FOUND',\n        text: 'Dataset not found',\n        domain: 'STORAGE',\n        category: 'USER',\n      });\n    }\n    return new Dataset(args.id, this.#mastra);\n  }\n\n  /**\n   * List all datasets with pagination.\n   */\n  async list(args?: { page?: number; perPage?: number }) {\n    const store = await this.#getDatasetsStore();\n    return store.listDatasets({\n      pagination: { page: args?.page ?? 0, perPage: args?.perPage ?? 20 },\n    });\n  }\n\n  /**\n   * Delete a dataset by ID.\n   */\n  async delete(args: { id: string }) {\n    const store = await this.#getDatasetsStore();\n    return store.deleteDataset({ id: args.id });\n  }\n\n  // ---------------------------------------------------------------------------\n  // Cross-dataset experiment operations\n  // ---------------------------------------------------------------------------\n\n  /**\n   * Get a specific experiment (run) by ID.\n   */\n  async getExperiment(args: { experimentId: string }) {\n    const experimentsStore = await this.#getExperimentsStore();\n    return experimentsStore.getExperimentById({ id: args.experimentId });\n  }\n\n  /**\n   * Compare two or more experiments.\n   *\n   * Uses the internal `compareExperiments` function for pairwise comparison,\n   * then enriches results with per-item input/groundTruth/output data.\n   */\n  async compareExperiments(args: { experimentIds: string[]; baselineId?: string }) {\n    const { experimentIds, baselineId } = args;\n\n    if (experimentIds.length < 2) {\n      throw new MastraError({\n        id: 'COMPARE_INVALID_INPUT',\n        text: 'compareExperiments requires at least 2 experiment IDs.',\n        domain: 'STORAGE',\n        category: 'USER',\n      });\n    }\n\n    const resolvedBaseline = baselineId ?? experimentIds[0]!;\n    const otherExperimentId = experimentIds.find(id => id !== resolvedBaseline) ?? experimentIds[1]!;\n\n    const internal = await compareExperimentsInternal(this.#mastra, {\n      experimentIdA: resolvedBaseline,\n      experimentIdB: otherExperimentId,\n    });\n\n    // Load results for both runs to get input/groundTruth/output\n    const experimentsStore = await this.#getExperimentsStore();\n    const [resultsA, resultsB] = await Promise.all([\n      experimentsStore.listExperimentResults({\n        experimentId: resolvedBaseline,\n        pagination: { page: 0, perPage: false },\n      }),\n      experimentsStore.listExperimentResults({\n        experimentId: otherExperimentId,\n        pagination: { page: 0, perPage: false },\n      }),\n    ]);\n\n    // Build results maps by itemId\n    const resultsMapA = new Map(resultsA.results.map(r => [r.itemId, r]));\n    const resultsMapB = new Map(resultsB.results.map(r => [r.itemId, r]));\n\n    // Transform internal items to MVP shape\n    const items = internal.items.map(item => {\n      const resultA = resultsMapA.get(item.itemId);\n      const resultB = resultsMapB.get(item.itemId);\n\n      return {\n        itemId: item.itemId,\n        input: resultA?.input ?? resultB?.input ?? null,\n        groundTruth: resultA?.groundTruth ?? resultB?.groundTruth ?? null,\n        results: {\n          [resolvedBaseline]: resultA ? { output: resultA.output, scores: item.scoresA } : null,\n          [otherExperimentId]: resultB ? { output: resultB.output, scores: item.scoresB } : null,\n        },\n      };\n    });\n\n    return {\n      baselineId: resolvedBaseline,\n      items,\n    };\n  }\n}\n"]}