{"version":3,"sources":["../src/readers/mapping-ledger.ts","../src/readers/index.ts"],"names":[],"mappings":"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","file":"chunk-3RV3JILQ.mjs","sourcesContent":["/**\n * Version-pinned reader/exporter mapping ledger (6.22).\n *\n * Records which external convention version was used and what was lost.\n * Does not bind persisted schema 1.0 to an unstable external convention.\n *\n * @experimental Available through `agent-inspect/readers`.\n */\n\nexport type MappingConfidence = \"explicit\" | \"correlated\" | \"heuristic\" | \"unknown\";\n\nexport type MappingLossKind =\n  | \"none\"\n  | \"dropped\"\n  | \"bounded\"\n  | \"privacy-redacted\"\n  | \"kind-degraded\"\n  | \"unsupported\";\n\n/**\n * One source→target mapping row.\n *\n * @experimental\n */\nexport interface MappingLedgerEntry {\n  source: string;\n  target: string;\n  transformation: string;\n  confidence: MappingConfidence;\n  loss: MappingLossKind;\n  privacyDecision?: string;\n}\n\n/**\n * Ledger published by a reader or exporter mapping.\n *\n * @experimental\n */\nexport interface MappingLedger {\n  id: string;\n  sourceFormat: string;\n  targetFormat: string;\n  /** External convention pin (e.g. OTel GenAI / OpenInference version). */\n  convention?: {\n    name: string;\n    version: string;\n    specUrl?: string;\n  };\n  entries: readonly MappingLedgerEntry[];\n  knownLosses: readonly string[];\n}\n\n/** OpenInference → AgentInspect mapping ledger pin. */\nexport const OPENINFERENCE_MAPPING_LEDGER: MappingLedger = {\n  id: \"openinference-to-agent-inspect\",\n  sourceFormat: \"openinference-json\",\n  targetFormat: \"agent-inspect-persisted-1.0\",\n  convention: {\n    name: \"OpenInference\",\n    version: \"0.2.x\",\n    specUrl: \"https://github.com/Arize-ai/openinference\",\n  },\n  entries: [\n    {\n      source: \"span.context.span_id\",\n      target: \"eventId / trace.spanId\",\n      transformation: \"hex identity when present\",\n      confidence: \"explicit\",\n      loss: \"none\",\n    },\n    {\n      source: \"span.context.trace_id\",\n      target: \"trace.traceId\",\n      transformation: \"hex identity when present\",\n      confidence: \"explicit\",\n      loss: \"none\",\n    },\n    {\n      source: \"span.parent_id\",\n      target: \"parentId\",\n      transformation: \"direct when resolvable in batch\",\n      confidence: \"explicit\",\n      loss: \"none\",\n    },\n    {\n      source: \"attributes.openinference.span.kind\",\n      target: \"kind\",\n      transformation: \"enumerated kind map with degrade-to-LOGIC\",\n      confidence: \"correlated\",\n      loss: \"kind-degraded\",\n      privacyDecision: \"unknown kinds preserved under bounds as attributes\",\n    },\n    {\n      source: \"attributes.llm.input_messages / output_messages\",\n      target: \"inputSummary / outputSummary\",\n      transformation: \"bounded summaries only\",\n      confidence: \"heuristic\",\n      loss: \"privacy-redacted\",\n      privacyDecision: \"raw message bodies are not required and may be omitted\",\n    },\n  ],\n  knownLosses: [\n    \"Chain-of-thought / private reasoning fields are never imported as raw content.\",\n    \"Oversized attributes are bounded or marked unsupported.\",\n    \"Unknown OpenInference kinds degrade to LOGIC with a warning.\",\n  ],\n};\n\n/** OTLP JSON → AgentInspect mapping ledger pin. */\nexport const OTLP_JSON_MAPPING_LEDGER: MappingLedger = {\n  id: \"otlp-json-to-agent-inspect\",\n  sourceFormat: \"otlp-json\",\n  targetFormat: \"agent-inspect-persisted-1.0\",\n  convention: {\n    name: \"OpenTelemetry GenAI semantic conventions\",\n    version: \"1.36.0\",\n    specUrl: \"https://opentelemetry.io/docs/specs/semconv/gen-ai/\",\n  },\n  entries: [\n    {\n      source: \"resourceSpans[].scopeSpans[].spans[]\",\n      target: \"PersistedInspectEvent[]\",\n      transformation: \"one span → one event when mappable\",\n      confidence: \"explicit\",\n      loss: \"none\",\n    },\n    {\n      source: \"span.attributes[gen_ai.*]\",\n      target: \"attributes / tokenUsage / kind\",\n      transformation: \"pinned GenAI attribute family\",\n      confidence: \"correlated\",\n      loss: \"bounded\",\n    },\n    {\n      source: \"span.attributes (unknown keys)\",\n      target: \"attributes.* / unsupportedFields\",\n      transformation: \"preserve under bounds or list as unsupported\",\n      confidence: \"unknown\",\n      loss: \"unsupported\",\n    },\n  ],\n  knownLosses: [\n    \"Schema 1.0 is not bound to Development-status OTel GenAI revisions.\",\n    \"Status rewrite to fit a local narrative is forbidden.\",\n    \"Payload bodies may be omitted; digests are optional application metadata.\",\n  ],\n};\n\nexport const BUILTIN_MAPPING_LEDGERS: readonly MappingLedger[] = Object.freeze([\n  OPENINFERENCE_MAPPING_LEDGER,\n  OTLP_JSON_MAPPING_LEDGER,\n]);\n\nexport function getMappingLedger(id: string): MappingLedger | undefined {\n  return BUILTIN_MAPPING_LEDGERS.find((ledger) => ledger.id === id);\n}\n","import { readdir, readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { parseTraceJsonl, type TraceJsonlFormat } from \"../read-trace.js\";\nimport {\n  traceEventToPersistedInspectEvent,\n  traceEventsToPersistedInspectEvents,\n} from \"../persisted/from-trace-event.js\";\nimport { persistedInspectEventsToRunTrees } from \"../persisted/tree-bridge.js\";\nimport type { InspectRunTree } from \"../types/inspect-event.js\";\nimport type {\n  PersistedEventStatus,\n  PersistedInspectEvent,\n  PersistedTokenUsage,\n} from \"../types/persisted-inspect-event.js\";\nimport { formatProgrammaticDiagnostic } from \"../diagnostics/programmatic.js\";\n\nexport type TraceInput =\n  | { type: \"file\"; path: string }\n  | { type: \"directory\"; path: string }\n  | { type: \"string\"; content: string }\n  | { type: \"buffer\"; content: Buffer }\n  | { type: \"stdin\" };\n\nexport type TraceReadWarningSeverity = \"info\" | \"warning\" | \"error\";\n\nexport interface TraceReadWarning {\n  code: string;\n  message: string;\n  severity?: TraceReadWarningSeverity;\n  sourceFile?: string;\n  line?: number;\n  field?: string;\n}\n\nexport interface TraceReadResult {\n  format: string;\n  events: PersistedInspectEvent[];\n  runs: InspectRunTree[];\n  warnings: TraceReadWarning[];\n  unsupportedFields: string[];\n  sourceFiles: string[];\n}\n\nexport interface TraceFormatCandidate {\n  format: string;\n  confidence: number;\n  readerName?: string;\n  description?: string;\n  warnings?: TraceReadWarning[];\n}\n\nexport type TraceFormatDetectionStatus =\n  | \"detected\"\n  | \"ambiguous\"\n  | \"unsupported\";\n\nexport interface TraceFormatDetectionResult {\n  status: TraceFormatDetectionStatus;\n  format?: string;\n  candidates: TraceFormatCandidate[];\n  warnings: TraceReadWarning[];\n}\n\nexport interface TraceReaderDetectOptions {\n  format?: string;\n}\n\nexport interface TraceReaderReadOptions {\n  format?: string;\n}\n\nexport interface TraceReader {\n  readonly format: string;\n  readonly name?: string;\n  detect(\n    input: TraceInput,\n    options?: TraceReaderDetectOptions,\n  ): TraceFormatCandidate | undefined | Promise<TraceFormatCandidate | undefined>;\n  read(\n    input: TraceInput,\n    options?: TraceReaderReadOptions,\n  ): TraceReadResult | Promise<TraceReadResult>;\n}\n\nexport interface TraceReadOptions {\n  format?: string;\n  readers?: readonly TraceReader[];\n}\n\ninterface ResolvedTraceInput {\n  content: string;\n  sourceFiles: string[];\n}\n\ninterface OpenInferenceDocument {\n  spans: JsonRecord[];\n  confidence: number;\n  description: string;\n  version?: string;\n  warnings: TraceReadWarning[];\n  unsupportedFields: string[];\n}\n\ninterface OpenInferenceMappedSpan {\n  event: PersistedInspectEvent;\n  warnings: TraceReadWarning[];\n  unsupportedFields: string[];\n  spanId: string;\n  parentSpanId?: string;\n}\n\ninterface OtlpDocument {\n  spans: OtlpSpanContext[];\n  confidence: number;\n  description: string;\n  warnings: TraceReadWarning[];\n  unsupportedFields: string[];\n}\n\ninterface OtlpSpanContext {\n  span: JsonRecord;\n  resourceAttributes: Record<string, unknown>;\n  scopeAttributes: Record<string, unknown>;\n  scopeName?: string;\n  scopeVersion?: string;\n  pathPrefix: string;\n}\n\ntype JsonRecord = Record<string, unknown>;\n\nconst DEFAULT_MAX_TRACE_INPUT_BYTES = 10 * 1024 * 1024;\nconst MIN_DETECTION_CONFIDENCE = 0.5;\nconst AMBIGUOUS_CONFIDENCE_DELTA = 0.05;\nconst resolvedInputCache = new WeakMap<TraceInput, Promise<ResolvedTraceInput | undefined>>();\nconst OPENINFERENCE_READER_FORMAT = \"openinference-json\";\nconst OTLP_READER_FORMAT = \"otlp-json\";\n\nconst OPENINFERENCE_SPAN_KEYS = new Set([\n  \"trace_id\",\n  \"traceId\",\n  \"span_id\",\n  \"spanId\",\n  \"parent_span_id\",\n  \"parentSpanId\",\n  \"name\",\n  \"start_time_unix_nano\",\n  \"startTimeUnixNano\",\n  \"end_time_unix_nano\",\n  \"endTimeUnixNano\",\n  \"start_time\",\n  \"startTime\",\n  \"end_time\",\n  \"endTime\",\n  \"attributes\",\n  \"status\",\n  \"kind\",\n  \"span_kind\",\n  \"spanKind\",\n]);\n\nconst OPENINFERENCE_SENSITIVE_ATTRIBUTE_KEYS = [\n  \"input.value\",\n  \"output.value\",\n  \"input.mime_type\",\n  \"output.mime_type\",\n  \"llm.input_messages\",\n  \"llm.output_messages\",\n  \"llm.prompts\",\n  \"llm.completions\",\n  \"retrieval.documents\",\n  \"reranker.input_documents\",\n  \"reranker.output_documents\",\n  \"document.content\",\n  \"gen_ai.prompt\",\n  \"gen_ai.completion\",\n  \"gen_ai.input.messages\",\n  \"gen_ai.output.messages\",\n];\n\nconst OTLP_SPAN_KEYS = new Set([\n  \"traceId\",\n  \"spanId\",\n  \"parentSpanId\",\n  \"name\",\n  \"kind\",\n  \"startTimeUnixNano\",\n  \"endTimeUnixNano\",\n  \"attributes\",\n  \"events\",\n  \"status\",\n  \"droppedAttributesCount\",\n  \"droppedEventsCount\",\n  \"droppedLinksCount\",\n  \"links\",\n  \"flags\",\n]);\n\nexport type TraceReadErrorCode =\n  | \"unsupported_format\"\n  | \"ambiguous_format\"\n  | \"reader_failed\"\n  | \"invalid_input\";\n\nexport class TraceReadError extends Error {\n  readonly code: TraceReadErrorCode;\n  readonly warnings: TraceReadWarning[];\n\n  constructor(\n    code: TraceReadErrorCode,\n    message: string,\n    warnings: TraceReadWarning[] = [],\n  ) {\n    super(message);\n    this.name = \"TraceReadError\";\n    this.code = code;\n    this.warnings = warnings;\n  }\n}\n\nconst TRACE_INPUT_INVALID_MESSAGE = formatProgrammaticDiagnostic(\n  \"AI_TRACE_INPUT_INVALID\",\n);\n\nfunction isTraceInput(input: unknown): input is TraceInput {\n  if (typeof input !== \"object\" || input === null || Array.isArray(input)) {\n    return false;\n  }\n  const record = input as { type?: unknown; path?: unknown; content?: unknown };\n  switch (record.type) {\n    case \"file\":\n    case \"directory\":\n      return typeof record.path === \"string\";\n    case \"string\":\n      return typeof record.content === \"string\";\n    case \"buffer\":\n      return Buffer.isBuffer(record.content);\n    case \"stdin\":\n      return true;\n    default:\n      return false;\n  }\n}\n\n/**\n * Runtime guard for structured TraceInput. Never throws WeakMap key errors for bare strings.\n */\nexport function assertTraceInput(input: unknown): asserts input is TraceInput {\n  if (isTraceInput(input)) return;\n  throw new TraceReadError(\"invalid_input\", TRACE_INPUT_INVALID_MESSAGE, [\n    {\n      code: \"AI_TRACE_INPUT_INVALID\",\n      message: TRACE_INPUT_INVALID_MESSAGE,\n      severity: \"error\",\n    },\n  ]);\n}\n\nfunction normalizeCandidate(\n  reader: TraceReader,\n  candidate: TraceFormatCandidate,\n): TraceFormatCandidate {\n  const confidence = Number.isFinite(candidate.confidence)\n    ? Math.max(0, Math.min(1, candidate.confidence))\n    : 0;\n\n  return {\n    ...candidate,\n    format: candidate.format || reader.format,\n    confidence,\n    readerName: candidate.readerName ?? reader.name,\n  };\n}\n\nfunction sortCandidates(\n  candidates: readonly TraceFormatCandidate[],\n): TraceFormatCandidate[] {\n  return [...candidates].sort((a, b) => {\n    if (b.confidence !== a.confidence) return b.confidence - a.confidence;\n    return a.format.localeCompare(b.format);\n  });\n}\n\nfunction collectWarnings(\n  candidates: readonly TraceFormatCandidate[],\n): TraceReadWarning[] {\n  return candidates.flatMap((candidate) => candidate.warnings ?? []);\n}\n\nfunction dedupeWarnings(\n  warnings: readonly TraceReadWarning[],\n): TraceReadWarning[] {\n  const seen = new Set<string>();\n  const out: TraceReadWarning[] = [];\n  for (const warning of warnings) {\n    const key = [\n      warning.code,\n      warning.message,\n      warning.severity ?? \"\",\n      warning.sourceFile ?? \"\",\n      warning.line ?? \"\",\n      warning.field ?? \"\",\n    ].join(\"\\u0000\");\n    if (seen.has(key)) continue;\n    seen.add(key);\n    out.push(warning);\n  }\n  return out;\n}\n\nfunction attachSingleSourceFile(\n  warnings: readonly TraceReadWarning[],\n  resolved: ResolvedTraceInput,\n): TraceReadWarning[] {\n  if (resolved.sourceFiles.length !== 1) return [...warnings];\n  const [sourceFile] = resolved.sourceFiles;\n  return warnings.map((warning) => ({\n    ...warning,\n    sourceFile: warning.sourceFile ?? sourceFile,\n  }));\n}\n\nfunction findReaderByFormat(\n  format: string,\n  readers: readonly TraceReader[],\n): TraceReader | undefined {\n  return readers.find((reader) => reader.format === format);\n}\n\nasync function jsonlFilesInDirectory(dirPath: string): Promise<string[]> {\n  const entries = await readdir(dirPath, { withFileTypes: true });\n  return entries\n    .filter((entry) => entry.isFile() && entry.name.endsWith(\".jsonl\"))\n    .map((entry) => path.join(dirPath, entry.name))\n    .sort((a, b) => a.localeCompare(b));\n}\n\nasync function resolveInput(input: TraceInput): Promise<ResolvedTraceInput | undefined> {\n  const cached = resolvedInputCache.get(input);\n  if (cached) return cached;\n\n  const promise = resolveInputUncached(input);\n  resolvedInputCache.set(input, promise);\n  return promise;\n}\n\nfunction assertInputWithinBounds(content: string, sourceFile?: string): void {\n  const bytes = Buffer.byteLength(content, \"utf8\");\n  if (bytes <= DEFAULT_MAX_TRACE_INPUT_BYTES) return;\n  throw new TraceReadError(\"unsupported_format\", \"Trace input exceeds the local reader size limit.\", [\n    {\n      code: \"input_too_large\",\n      message: `Trace input is ${bytes} bytes; max is ${DEFAULT_MAX_TRACE_INPUT_BYTES} bytes.`,\n      severity: \"error\",\n      ...(sourceFile !== undefined ? { sourceFile } : {}),\n    },\n  ]);\n}\n\nasync function resolveInputUncached(\n  input: TraceInput,\n): Promise<ResolvedTraceInput | undefined> {\n  if (input.type === \"string\") {\n    assertInputWithinBounds(input.content);\n    return { content: input.content, sourceFiles: [] };\n  }\n  if (input.type === \"buffer\") {\n    const content = input.content.toString(\"utf-8\");\n    assertInputWithinBounds(content);\n    return { content, sourceFiles: [] };\n  }\n  if (input.type === \"file\") {\n    const content = await readFile(input.path, \"utf-8\");\n    assertInputWithinBounds(content, input.path);\n    return { content, sourceFiles: [input.path] };\n  }\n  if (input.type === \"directory\") {\n    const files = await jsonlFilesInDirectory(input.path);\n    const parts = await Promise.all(\n      files.map(async (file) => (await readFile(file, \"utf-8\")).trimEnd()),\n    );\n    const content = parts.filter((part) => part.trim() !== \"\").join(\"\\n\");\n    assertInputWithinBounds(content, input.path);\n    return {\n      content,\n      sourceFiles: files,\n    };\n  }\n  return undefined;\n}\n\nfunction detectJsonlFormat(content: string): {\n  format: TraceJsonlFormat;\n  validRows: number;\n  warnings: TraceReadWarning[];\n} {\n  let saw01 = false;\n  let saw02 = false;\n  let saw10 = false;\n  let validRows = 0;\n  let invalidJsonRows = 0;\n  let unknownSchemaRows = 0;\n  let firstInvalidJsonLine: number | undefined;\n  let firstUnknownSchemaLine: number | undefined;\n\n  let lineNumber = 0;\n  for (const line of content.split(/\\r?\\n/)) {\n    lineNumber += 1;\n    const trimmed = line.trim();\n    if (trimmed === \"\") continue;\n\n    let parsed: unknown;\n    try {\n      parsed = JSON.parse(trimmed) as unknown;\n    } catch {\n      invalidJsonRows += 1;\n      firstInvalidJsonLine ??= lineNumber;\n      continue;\n    }\n\n    if (\n      typeof parsed === \"object\" &&\n      parsed !== null &&\n      !Array.isArray(parsed) &&\n      \"schemaVersion\" in parsed\n    ) {\n      const version = (parsed as { schemaVersion?: unknown }).schemaVersion;\n      if (version === \"0.1\") {\n        saw01 = true;\n        validRows += 1;\n        continue;\n      }\n      if (version === \"0.2\") {\n        saw02 = true;\n        validRows += 1;\n        continue;\n      }\n      if (version === \"1.0\") {\n        saw10 = true;\n        validRows += 1;\n        continue;\n      }\n    }\n\n    unknownSchemaRows += 1;\n    firstUnknownSchemaLine ??= lineNumber;\n  }\n\n  const warnings: TraceReadWarning[] = [];\n  if (invalidJsonRows > 0) {\n    warnings.push({\n      code: \"invalid_jsonl_rows\",\n      message: `Skipped ${invalidJsonRows} invalid JSONL row(s) during format detection.`,\n      severity: \"warning\",\n      ...(firstInvalidJsonLine !== undefined ? { line: firstInvalidJsonLine } : {}),\n    });\n  }\n  if (unknownSchemaRows > 0) {\n    warnings.push({\n      code: \"unknown_schema_rows\",\n      message: `Skipped ${unknownSchemaRows} row(s) with unknown schemaVersion during format detection.`,\n      severity: \"warning\",\n      ...(firstUnknownSchemaLine !== undefined ? { line: firstUnknownSchemaLine } : {}),\n    });\n  }\n\n  let format: TraceJsonlFormat = \"empty\";\n  const seenFormats = [saw01, saw02, saw10].filter(Boolean).length;\n  if (seenFormats > 1) format = \"mixed\";\n  else if (saw01) format = \"0.1\";\n  else if (saw02) format = \"0.2\";\n  else if (saw10) format = \"1.0\";\n\n  return { format, validRows, warnings };\n}\n\nfunction agentInspectFormatLabel(format: TraceJsonlFormat): string {\n  switch (format) {\n    case \"0.1\":\n      return \"agent-inspect-v0.1-jsonl\";\n    case \"0.2\":\n      return \"agent-inspect-v0.2-jsonl\";\n    case \"1.0\":\n      return \"agent-inspect-v1.0-jsonl\";\n    case \"mixed\":\n      return \"agent-inspect-mixed-jsonl\";\n    default:\n      return \"agent-inspect-jsonl\";\n  }\n}\n\nfunction persistedEventsForParsedTrace(\n  parsed: ReturnType<typeof parseTraceJsonl>,\n): PersistedInspectEvent[] {\n  if (\n    (parsed.format === \"0.2\" || parsed.format === \"1.0\") &&\n    parsed.persisted.length > 0\n  ) {\n    return [...parsed.persisted];\n  }\n  if (parsed.format === \"mixed\" && parsed.rows.length > 0) {\n    return parsed.rows.map((row, index) => {\n      if (row.format === \"0.2\" || row.format === \"1.0\") return row.event;\n      return traceEventToPersistedInspectEvent(row.event, {\n        eventIndex: index,\n        sourceName: \"agent-inspect-jsonl-reader\",\n      });\n    });\n  }\n  return traceEventsToPersistedInspectEvents(parsed.events, {\n    sourceName: \"agent-inspect-jsonl-reader\",\n  });\n}\n\nfunction isRecord(value: unknown): value is JsonRecord {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n  return typeof value === \"string\" && value.trim() !== \"\";\n}\n\nfunction readStringField(\n  record: JsonRecord,\n  keys: readonly string[],\n): string | undefined {\n  for (const key of keys) {\n    const value = record[key];\n    if (isNonEmptyString(value)) return value;\n  }\n  return undefined;\n}\n\nfunction readRecordField(\n  record: JsonRecord,\n  key: string,\n): JsonRecord | undefined {\n  const value = record[key];\n  return isRecord(value) ? value : undefined;\n}\n\nfunction parseJsonDocument(content: string): unknown {\n  return JSON.parse(content) as unknown;\n}\n\nfunction looksLikeOpenInferenceSpan(value: unknown): value is JsonRecord {\n  if (!isRecord(value)) return false;\n  const attributes = readRecordField(value, \"attributes\");\n  return (\n    readStringField(value, [\"trace_id\", \"traceId\"]) !== undefined &&\n    readStringField(value, [\"span_id\", \"spanId\"]) !== undefined &&\n    (readStringField(value, [\"name\"]) !== undefined ||\n      attributes?.[\"openinference.span.kind\"] !== undefined)\n  );\n}\n\nfunction extractOpenInferenceDocument(root: unknown): OpenInferenceDocument | undefined {\n  const warnings: TraceReadWarning[] = [];\n  const unsupportedFields: string[] = [];\n\n  if (Array.isArray(root)) {\n    const spans = root.filter(looksLikeOpenInferenceSpan);\n    if (spans.length === 0) return undefined;\n    if (spans.length !== root.length) {\n      warnings.push({\n        code: \"openinference_skipped_items\",\n        message: \"Skipped non-span item(s) in OpenInference span array.\",\n        severity: \"warning\",\n      });\n    }\n    return {\n      spans,\n      confidence: 0.82,\n      description: \"OpenInference span array\",\n      warnings,\n      unsupportedFields,\n    };\n  }\n\n  if (!isRecord(root)) return undefined;\n\n  const rootFormat = root.format;\n  const rootCompatibility = root.compatibility;\n  const version =\n    typeof root.version === \"string\" && root.version.trim() !== \"\"\n      ? root.version\n      : undefined;\n\n  if (Array.isArray(root.spans)) {\n    const spans = root.spans.filter(looksLikeOpenInferenceSpan);\n    if (spans.length === 0 && (rootFormat === \"openinference\" || rootCompatibility === \"openinference-compatible\")) {\n      warnings.push({\n        code: \"openinference_no_valid_spans\",\n        message: \"OpenInference document did not contain any valid spans.\",\n        severity: \"error\",\n      });\n      return {\n        spans,\n        confidence: 0.7,\n        description: \"Malformed OpenInference document\",\n        version,\n        warnings,\n        unsupportedFields,\n      };\n    }\n    if (spans.length === 0) return undefined;\n    if (spans.length !== root.spans.length) {\n      warnings.push({\n        code: \"openinference_skipped_spans\",\n        message: \"Skipped invalid OpenInference span item(s).\",\n        severity: \"warning\",\n      });\n    }\n    return {\n      spans,\n      confidence:\n        rootFormat === \"openinference\" || rootCompatibility === \"openinference-compatible\"\n          ? 0.9\n          : 0.84,\n      description:\n        rootFormat === \"openinference\" || rootCompatibility === \"openinference-compatible\"\n          ? \"OpenInference document\"\n          : \"OpenInference spans document\",\n      version,\n      warnings,\n      unsupportedFields,\n    };\n  }\n\n  if (Array.isArray(root.data)) {\n    const spans = root.data.filter(looksLikeOpenInferenceSpan);\n    if (spans.length === 0) return undefined;\n    if (spans.length !== root.data.length) {\n      warnings.push({\n        code: \"openinference_skipped_data_items\",\n        message: \"Skipped non-span item(s) in OpenInference data array.\",\n        severity: \"warning\",\n      });\n    }\n    return {\n      spans,\n      confidence: 0.8,\n      description: \"OpenInference data document\",\n      version,\n      warnings,\n      unsupportedFields,\n    };\n  }\n\n  if (looksLikeOpenInferenceSpan(root)) {\n    return {\n      spans: [root],\n      confidence: 0.76,\n      description: \"OpenInference single span\",\n      version,\n      warnings,\n      unsupportedFields,\n    };\n  }\n\n  if (rootFormat === \"openinference\" || rootCompatibility === \"openinference-compatible\") {\n    warnings.push({\n      code: \"openinference_missing_spans\",\n      message: \"OpenInference document is missing a spans array.\",\n      severity: \"error\",\n    });\n    return {\n      spans: [],\n      confidence: 0.7,\n      description: \"Malformed OpenInference document\",\n      version,\n      warnings,\n      unsupportedFields,\n    };\n  }\n\n  return undefined;\n}\n\nfunction parseUnixNanoToIso(value: unknown): string | undefined {\n  if (typeof value === \"bigint\" && value >= 0n) {\n    return new Date(Number(value / 1_000_000n)).toISOString();\n  }\n  if (typeof value === \"number\" && Number.isFinite(value) && value >= 0) {\n    return new Date(Math.floor(value / 1_000_000)).toISOString();\n  }\n  if (typeof value === \"string\" && /^\\d+$/.test(value)) {\n    return new Date(Number(BigInt(value) / 1_000_000n)).toISOString();\n  }\n  return undefined;\n}\n\nfunction parseIsoTime(value: unknown): string | undefined {\n  if (!isNonEmptyString(value)) return undefined;\n  const ms = Date.parse(value);\n  if (!Number.isFinite(ms)) return undefined;\n  return new Date(ms).toISOString();\n}\n\nfunction readOpenInferenceTimestamp(\n  span: JsonRecord,\n  nanoKeys: readonly string[],\n  isoKeys: readonly string[],\n): string | undefined {\n  for (const key of nanoKeys) {\n    const iso = parseUnixNanoToIso(span[key]);\n    if (iso !== undefined) return iso;\n  }\n  for (const key of isoKeys) {\n    const iso = parseIsoTime(span[key]);\n    if (iso !== undefined) return iso;\n  }\n  return undefined;\n}\n\nfunction durationBetweenIso(startedAt?: string, endedAt?: string): number | undefined {\n  if (startedAt === undefined || endedAt === undefined) return undefined;\n  const startMs = Date.parse(startedAt);\n  const endMs = Date.parse(endedAt);\n  if (!Number.isFinite(startMs) || !Number.isFinite(endMs) || endMs < startMs) {\n    return undefined;\n  }\n  return endMs - startMs;\n}\n\nfunction isSensitiveOpenInferenceAttribute(key: string): boolean {\n  return OPENINFERENCE_SENSITIVE_ATTRIBUTE_KEYS.some(\n    (sensitiveKey) =>\n      key === sensitiveKey ||\n      key.startsWith(`${sensitiveKey}.`) ||\n      key.endsWith(\".message.content\") ||\n      key.endsWith(\".document.content\"),\n  );\n}\n\nfunction summarizeAttributeValue(value: unknown): Record<string, unknown> {\n  if (typeof value === \"string\") {\n    return { type: \"string\", length: value.length };\n  }\n  if (typeof value === \"number\") {\n    return { type: \"number\", finite: Number.isFinite(value) };\n  }\n  if (typeof value === \"boolean\") {\n    return { type: \"boolean\" };\n  }\n  if (Array.isArray(value)) {\n    return { type: \"array\", length: value.length };\n  }\n  if (isRecord(value)) {\n    return { type: \"object\", keyCount: Object.keys(value).length };\n  }\n  if (value === null) {\n    return { type: \"null\" };\n  }\n  return { type: typeof value };\n}\n\nfunction sanitizeOpenInferenceAttributes(\n  attributes: JsonRecord,\n  pathPrefix: string,\n): {\n  attributes: Record<string, unknown>;\n  warnings: TraceReadWarning[];\n  unsupportedFields: string[];\n} {\n  const out: Record<string, unknown> = {};\n  const warnings: TraceReadWarning[] = [];\n  const unsupportedFields: string[] = [];\n  const summarizedKeys: string[] = [];\n\n  for (const [key, value] of Object.entries(attributes)) {\n    if (isSensitiveOpenInferenceAttribute(key)) {\n      summarizedKeys.push(key);\n      out[`${key}.summary`] = summarizeAttributeValue(value);\n      unsupportedFields.push(`${pathPrefix}.attributes.${key}`);\n      continue;\n    }\n    out[key] = value;\n  }\n\n  if (summarizedKeys.length > 0) {\n    out[\"openinference.summarized_attributes\"] = summarizedKeys;\n    warnings.push({\n      code: \"openinference_sensitive_attribute_summarized\",\n      message:\n        \"OpenInference prompt/output/document attribute(s) were summarized instead of copied verbatim.\",\n      severity: \"warning\",\n    });\n  }\n\n  return { attributes: out, warnings, unsupportedFields };\n}\n\nfunction mapOpenInferenceKind(\n  span: JsonRecord,\n  attributes: JsonRecord,\n  pathPrefix: string,\n): { kind: PersistedInspectEvent[\"kind\"]; warnings: TraceReadWarning[] } {\n  const warnings: TraceReadWarning[] = [];\n  const agentInspectKind = attributes[\"agent_inspect.kind\"];\n  if (\n    agentInspectKind === \"RUN\" ||\n    agentInspectKind === \"AGENT\" ||\n    agentInspectKind === \"LLM\" ||\n    agentInspectKind === \"TOOL\" ||\n    agentInspectKind === \"CHAIN\" ||\n    agentInspectKind === \"RETRIEVER\" ||\n    agentInspectKind === \"DECISION\" ||\n    agentInspectKind === \"RESULT\" ||\n    agentInspectKind === \"ERROR\" ||\n    agentInspectKind === \"LOGIC\" ||\n    agentInspectKind === \"LOG\" ||\n    agentInspectKind === \"OUTCOME\"\n  ) {\n    return { kind: agentInspectKind, warnings };\n  }\n\n  const rawKind =\n    readStringField(span, [\"kind\", \"span_kind\", \"spanKind\"]) ??\n    (typeof attributes[\"openinference.span.kind\"] === \"string\"\n      ? attributes[\"openinference.span.kind\"]\n      : undefined);\n  const normalized = rawKind?.toUpperCase();\n\n  switch (normalized) {\n    case \"LLM\":\n      return { kind: \"LLM\", warnings };\n    case \"TOOL\":\n      return { kind: \"TOOL\", warnings };\n    case \"CHAIN\":\n      return { kind: \"CHAIN\", warnings };\n    case \"RETRIEVER\":\n      return { kind: \"RETRIEVER\", warnings };\n    case \"AGENT\":\n      return { kind: \"AGENT\", warnings };\n    case \"EMBEDDING\":\n      warnings.push({\n        code: \"openinference_kind_semantic_loss\",\n        message: \"OpenInference EMBEDDING span kind mapped to AgentInspect LLM.\",\n        severity: \"warning\",\n        field: `${pathPrefix}.attributes.openinference.span.kind`,\n      });\n      return { kind: \"LLM\", warnings };\n    case \"RERANKER\":\n      warnings.push({\n        code: \"openinference_kind_semantic_loss\",\n        message: \"OpenInference RERANKER span kind mapped to AgentInspect RETRIEVER.\",\n        severity: \"warning\",\n        field: `${pathPrefix}.attributes.openinference.span.kind`,\n      });\n      return { kind: \"RETRIEVER\", warnings };\n    case \"UNKNOWN\":\n    case undefined:\n      warnings.push({\n        code: \"openinference_kind_unknown\",\n        message: \"OpenInference span kind was missing or unknown; mapped to AgentInspect LOGIC.\",\n        severity: \"warning\",\n        field: `${pathPrefix}.attributes.openinference.span.kind`,\n      });\n      return { kind: \"LOGIC\", warnings };\n    default:\n      warnings.push({\n        code: \"openinference_kind_unsupported\",\n        message: `Unsupported OpenInference span kind \"${rawKind}\" mapped to AgentInspect LOGIC.`,\n        severity: \"warning\",\n        field: `${pathPrefix}.attributes.openinference.span.kind`,\n      });\n      return { kind: \"LOGIC\", warnings };\n  }\n}\n\nfunction mapOpenInferenceStatus(status: unknown): PersistedEventStatus | undefined {\n  if (!isRecord(status)) return undefined;\n  const rawCode = status.code;\n  if (typeof rawCode !== \"string\") return undefined;\n  switch (rawCode.toUpperCase()) {\n    case \"OK\":\n      return \"ok\";\n    case \"ERROR\":\n      return \"error\";\n    case \"UNSET\":\n      return \"unknown\";\n    default:\n      return \"unknown\";\n  }\n}\n\nfunction readOpenInferenceTokenUsage(\n  attributes: JsonRecord,\n): PersistedTokenUsage | undefined {\n  const prompt = attributes[\"llm.token_count.prompt\"];\n  const completion = attributes[\"llm.token_count.completion\"];\n  const total = attributes[\"llm.token_count.total\"];\n  const cached = attributes[\"llm.token_count.prompt_details.cache_read\"];\n  const cacheWrite =\n    attributes[\"llm.token_count.prompt_details.cache_write\"] ??\n    attributes[\"llm.token_count.prompt_details.cache_creation\"];\n  const reasoning =\n    attributes[\"llm.token_count.completion_details.reasoning\"] ??\n    attributes[\"llm.token_count.completion_details.reasoning_tokens\"];\n  const usage: PersistedTokenUsage = {};\n\n  if (typeof prompt === \"number\" && Number.isFinite(prompt) && prompt >= 0) {\n    usage.input = prompt;\n  }\n  if (\n    typeof completion === \"number\" &&\n    Number.isFinite(completion) &&\n    completion >= 0\n  ) {\n    usage.output = completion;\n  }\n  if (typeof total === \"number\" && Number.isFinite(total) && total >= 0) {\n    usage.total = total;\n  }\n  if (typeof cached === \"number\" && Number.isFinite(cached) && cached >= 0) {\n    usage.cached = cached;\n  }\n  if (\n    typeof cacheWrite === \"number\" &&\n    Number.isFinite(cacheWrite) &&\n    cacheWrite >= 0\n  ) {\n    usage.cacheWrite = cacheWrite;\n  }\n  if (\n    typeof reasoning === \"number\" &&\n    Number.isFinite(reasoning) &&\n    reasoning >= 0\n  ) {\n    usage.reasoning = reasoning;\n  }\n  if (usage.total === undefined && usage.input !== undefined && usage.output !== undefined) {\n    usage.total = usage.input + usage.output;\n  }\n\n  return Object.keys(usage).length > 0 ? usage : undefined;\n}\n\nfunction readOpenInferenceConfidence(\n  attributes: JsonRecord,\n): PersistedInspectEvent[\"confidence\"] {\n  const confidence = attributes[\"agent_inspect.confidence\"];\n  if (\n    confidence === \"explicit\" ||\n    confidence === \"correlated\" ||\n    confidence === \"heuristic\" ||\n    confidence === \"unknown\"\n  ) {\n    return confidence;\n  }\n  return \"correlated\";\n}\n\nfunction mapOpenInferenceSpan(\n  span: JsonRecord,\n  index: number,\n  version?: string,\n): OpenInferenceMappedSpan {\n  const pathPrefix = `spans[${index}]`;\n  const warnings: TraceReadWarning[] = [];\n  const unsupportedFields: string[] = [];\n  const rawAttributes = readRecordField(span, \"attributes\") ?? {};\n  const sanitized = sanitizeOpenInferenceAttributes(rawAttributes, pathPrefix);\n  warnings.push(...sanitized.warnings);\n  unsupportedFields.push(...sanitized.unsupportedFields);\n\n  const attributes: Record<string, unknown> = { ...sanitized.attributes };\n  for (const [key, value] of Object.entries(span)) {\n    if (OPENINFERENCE_SPAN_KEYS.has(key)) continue;\n    unsupportedFields.push(`${pathPrefix}.${key}`);\n    if (value === null || typeof value !== \"object\") {\n      attributes[`openinference.${key}`] = value;\n    } else {\n      attributes[`openinference.${key}.summary`] = summarizeAttributeValue(value);\n      warnings.push({\n        code: \"openinference_unsupported_field_summarized\",\n        message: `Unsupported OpenInference span field \"${key}\" was summarized.`,\n        severity: \"warning\",\n        field: `${pathPrefix}.${key}`,\n      });\n    }\n  }\n\n  const traceId = readStringField(span, [\"trace_id\", \"traceId\"]) ?? `trace-${index}`;\n  const spanId = readStringField(span, [\"span_id\", \"spanId\"]) ?? `span-${index}`;\n  const parentSpanId = readStringField(span, [\"parent_span_id\", \"parentSpanId\"]);\n  const name = readStringField(span, [\"name\"]) ?? spanId;\n  const startedAt = readOpenInferenceTimestamp(\n    span,\n    [\"start_time_unix_nano\", \"startTimeUnixNano\"],\n    [\"start_time\", \"startTime\"],\n  );\n  const endedAt = readOpenInferenceTimestamp(\n    span,\n    [\"end_time_unix_nano\", \"endTimeUnixNano\"],\n    [\"end_time\", \"endTime\"],\n  );\n  const timestamp = startedAt ?? \"1970-01-01T00:00:00.000Z\";\n\n  if (startedAt === undefined) {\n    warnings.push({\n      code: \"openinference_missing_start_time\",\n      message: \"OpenInference span is missing a valid start time; using Unix epoch.\",\n      severity: \"warning\",\n      field: `${pathPrefix}.start_time_unix_nano`,\n    });\n    unsupportedFields.push(`${pathPrefix}.start_time_unix_nano`);\n  }\n\n  const { kind, warnings: kindWarnings } = mapOpenInferenceKind(\n    span,\n    rawAttributes,\n    pathPrefix,\n  );\n  warnings.push(...kindWarnings);\n  const status = mapOpenInferenceStatus(span.status);\n  const tokenUsage = readOpenInferenceTokenUsage(rawAttributes);\n  const errorMessage =\n    isRecord(span.status) && typeof span.status.message === \"string\"\n      ? span.status.message\n      : undefined;\n\n  const event: PersistedInspectEvent = {\n    schemaVersion: \"0.2\",\n    eventId:\n      typeof rawAttributes[\"agent_inspect.event_id\"] === \"string\"\n        ? rawAttributes[\"agent_inspect.event_id\"]\n        : spanId,\n    runId:\n      typeof rawAttributes[\"agent_inspect.run_id\"] === \"string\"\n        ? rawAttributes[\"agent_inspect.run_id\"]\n        : traceId,\n    kind,\n    name,\n    timestamp,\n    confidence: readOpenInferenceConfidence(rawAttributes),\n    source: {\n      type: \"otel\",\n      name: \"openinference\",\n      ...(version !== undefined ? { version } : {}),\n    },\n    attributes,\n    trace: {\n      traceId,\n      spanId,\n      ...(parentSpanId !== undefined ? { parentSpanId } : {}),\n    },\n  };\n\n  if (status !== undefined) {\n    event.status = status;\n  }\n  if (startedAt !== undefined) {\n    event.startedAt = startedAt;\n  }\n  if (endedAt !== undefined) {\n    event.endedAt = endedAt;\n  }\n  const durationMs = durationBetweenIso(startedAt, endedAt);\n  if (durationMs !== undefined) {\n    event.durationMs = durationMs;\n  }\n  if (tokenUsage !== undefined) {\n    event.tokenUsage = tokenUsage;\n  }\n  if (status === \"error\") {\n    event.error = {\n      message: errorMessage !== undefined && errorMessage.trim() !== \"\" ? errorMessage : \"OpenInference span error\",\n    };\n  }\n\n  return {\n    event,\n    warnings,\n    unsupportedFields,\n    spanId,\n    ...(parentSpanId !== undefined ? { parentSpanId } : {}),\n  };\n}\n\nfunction mapOpenInferenceEvents(document: OpenInferenceDocument): {\n  events: PersistedInspectEvent[];\n  warnings: TraceReadWarning[];\n  unsupportedFields: string[];\n} {\n  const mapped = document.spans.map((span, index) =>\n    mapOpenInferenceSpan(span, index, document.version),\n  );\n  const spanIdToEventId = new Map(\n    mapped.map((span) => [span.spanId, span.event.eventId] as const),\n  );\n  for (const span of mapped) {\n    if (span.parentSpanId === undefined) continue;\n    span.event.parentId = spanIdToEventId.get(span.parentSpanId) ?? span.parentSpanId;\n  }\n\n  return {\n    events: mapped.map((span) => span.event),\n    warnings: mapped.flatMap((span) => span.warnings),\n    unsupportedFields: mapped.flatMap((span) => span.unsupportedFields),\n  };\n}\n\nexport const openInferenceJsonReader: TraceReader = {\n  format: OPENINFERENCE_READER_FORMAT,\n  name: \"OpenInference JSON\",\n  async detect(input) {\n    const resolved = await resolveInput(input);\n    if (!resolved) return undefined;\n\n    let parsed: unknown;\n    try {\n      parsed = parseJsonDocument(resolved.content);\n    } catch {\n      return undefined;\n    }\n\n    const document = extractOpenInferenceDocument(parsed);\n    if (!document) return undefined;\n\n    return {\n      format: OPENINFERENCE_READER_FORMAT,\n      confidence: document.confidence,\n      readerName: \"OpenInference JSON\",\n      description: document.description,\n      warnings: attachSingleSourceFile(document.warnings, resolved),\n    };\n  },\n  async read(input) {\n    const resolved = await resolveInput(input);\n    if (!resolved) {\n      throw new TraceReadError(\n        \"unsupported_format\",\n        \"OpenInference JSON reader requires file, string, or buffer input.\",\n      );\n    }\n\n    let parsed: unknown;\n    try {\n      parsed = parseJsonDocument(resolved.content);\n    } catch {\n      throw new TraceReadError(\"unsupported_format\", \"OpenInference JSON input is not valid JSON.\", [\n        {\n          code: \"openinference_invalid_json\",\n          message: \"OpenInference JSON reader could not parse the input as JSON.\",\n          severity: \"error\",\n        },\n      ]);\n    }\n\n    const document = extractOpenInferenceDocument(parsed);\n    if (!document || document.spans.length === 0) {\n      throw new TraceReadError(\n        \"unsupported_format\",\n        \"No valid OpenInference spans found.\",\n        attachSingleSourceFile(\n          document?.warnings ?? [\n            {\n              code: \"openinference_no_valid_spans\",\n              message: \"OpenInference JSON input did not contain valid spans.\",\n              severity: \"error\",\n            },\n          ],\n          resolved,\n        ),\n      );\n    }\n\n    const mapped = mapOpenInferenceEvents(document);\n    const warnings = attachSingleSourceFile(\n      [...document.warnings, ...mapped.warnings],\n      resolved,\n    );\n    const unsupportedFields = [\n      ...document.unsupportedFields,\n      ...mapped.unsupportedFields,\n    ].sort((a, b) => a.localeCompare(b));\n\n    return {\n      format: OPENINFERENCE_READER_FORMAT,\n      events: mapped.events,\n      runs: persistedInspectEventsToRunTrees(mapped.events, { skipInvalid: true }),\n      warnings,\n      unsupportedFields,\n      sourceFiles: resolved.sourceFiles,\n    };\n  },\n};\n\nfunction parseOtlpAnyValue(\n  value: unknown,\n  field: string,\n  warnings: TraceReadWarning[],\n  unsupportedFields: string[],\n): unknown {\n  if (!isRecord(value)) {\n    unsupportedFields.push(field);\n    warnings.push({\n      code: \"otlp_attribute_value_invalid\",\n      message: \"OTLP attribute value was not an AnyValue object.\",\n      severity: \"warning\",\n      field,\n    });\n    return undefined;\n  }\n  if (typeof value.stringValue === \"string\") return value.stringValue;\n  if (typeof value.boolValue === \"boolean\") return value.boolValue;\n  if (typeof value.intValue === \"number\" && Number.isFinite(value.intValue)) {\n    return value.intValue;\n  }\n  if (typeof value.intValue === \"string\" && value.intValue.trim() !== \"\") {\n    const n = Number(value.intValue);\n    if (Number.isFinite(n)) return n;\n  }\n  if (\n    typeof value.doubleValue === \"number\" &&\n    Number.isFinite(value.doubleValue)\n  ) {\n    return value.doubleValue;\n  }\n  if (isRecord(value.arrayValue) && Array.isArray(value.arrayValue.values)) {\n    return value.arrayValue.values.map((item, index) =>\n      parseOtlpAnyValue(item, `${field}.arrayValue.values[${index}]`, warnings, unsupportedFields),\n    );\n  }\n  if (isRecord(value.kvlistValue) && Array.isArray(value.kvlistValue.values)) {\n    const out: Record<string, unknown> = {};\n    for (const [index, item] of value.kvlistValue.values.entries()) {\n      if (!isRecord(item) || typeof item.key !== \"string\") {\n        unsupportedFields.push(`${field}.kvlistValue.values[${index}]`);\n        continue;\n      }\n      out[item.key] = parseOtlpAnyValue(\n        item.value,\n        `${field}.kvlistValue.values[${index}].value`,\n        warnings,\n        unsupportedFields,\n      );\n    }\n    return out;\n  }\n  if (typeof value.bytesValue === \"string\") {\n    unsupportedFields.push(field);\n    warnings.push({\n      code: \"otlp_bytes_value_summarized\",\n      message: \"OTLP bytesValue attribute was summarized instead of decoded.\",\n      severity: \"warning\",\n      field,\n    });\n    return { type: \"bytes\", length: value.bytesValue.length };\n  }\n\n  unsupportedFields.push(field);\n  warnings.push({\n    code: \"otlp_attribute_value_unsupported\",\n    message: \"OTLP attribute value used an unsupported AnyValue shape.\",\n    severity: \"warning\",\n    field,\n  });\n  return undefined;\n}\n\nfunction parseOtlpAttributes(\n  value: unknown,\n  pathPrefix: string,\n): {\n  attributes: Record<string, unknown>;\n  warnings: TraceReadWarning[];\n  unsupportedFields: string[];\n} {\n  const attributes: Record<string, unknown> = {};\n  const warnings: TraceReadWarning[] = [];\n  const unsupportedFields: string[] = [];\n\n  if (value === undefined) {\n    return { attributes, warnings, unsupportedFields };\n  }\n  if (!Array.isArray(value)) {\n    unsupportedFields.push(pathPrefix);\n    warnings.push({\n      code: \"otlp_attributes_invalid\",\n      message: \"OTLP attributes field was not an array.\",\n      severity: \"warning\",\n      field: pathPrefix,\n    });\n    return { attributes, warnings, unsupportedFields };\n  }\n\n  for (const [index, item] of value.entries()) {\n    const field = `${pathPrefix}[${index}]`;\n    if (!isRecord(item) || typeof item.key !== \"string\") {\n      unsupportedFields.push(field);\n      warnings.push({\n        code: \"otlp_attribute_invalid\",\n        message: \"Skipped OTLP attribute without a string key.\",\n        severity: \"warning\",\n        field,\n      });\n      continue;\n    }\n    const parsed = parseOtlpAnyValue(\n      item.value,\n      `${field}.value`,\n      warnings,\n      unsupportedFields,\n    );\n    if (parsed !== undefined) {\n      attributes[item.key] = parsed;\n    }\n  }\n\n  return { attributes, warnings, unsupportedFields };\n}\n\nfunction looksLikeOtlpSpan(value: unknown): value is JsonRecord {\n  return (\n    isRecord(value) &&\n    readStringField(value, [\"traceId\"]) !== undefined &&\n    readStringField(value, [\"spanId\"]) !== undefined &&\n    readStringField(value, [\"name\"]) !== undefined\n  );\n}\n\nfunction extractOtlpDocument(root: unknown): OtlpDocument | undefined {\n  if (!isRecord(root) || !Array.isArray(root.resourceSpans)) return undefined;\n\n  const spans: OtlpSpanContext[] = [];\n  const warnings: TraceReadWarning[] = [];\n  const unsupportedFields: string[] = [];\n\n  for (const [resourceIndex, resourceSpan] of root.resourceSpans.entries()) {\n    const resourcePath = `resourceSpans[${resourceIndex}]`;\n    if (!isRecord(resourceSpan)) {\n      unsupportedFields.push(resourcePath);\n      continue;\n    }\n\n    const resource = readRecordField(resourceSpan, \"resource\");\n    const resourceParsed = parseOtlpAttributes(\n      resource?.attributes,\n      `${resourcePath}.resource.attributes`,\n    );\n    warnings.push(...resourceParsed.warnings);\n    unsupportedFields.push(...resourceParsed.unsupportedFields);\n\n    if (!Array.isArray(resourceSpan.scopeSpans)) {\n      unsupportedFields.push(`${resourcePath}.scopeSpans`);\n      warnings.push({\n        code: \"otlp_scope_spans_missing\",\n        message: \"OTLP resourceSpans entry did not contain a scopeSpans array.\",\n        severity: \"warning\",\n        field: `${resourcePath}.scopeSpans`,\n      });\n      continue;\n    }\n\n    for (const [scopeIndex, scopeSpan] of resourceSpan.scopeSpans.entries()) {\n      const scopePath = `${resourcePath}.scopeSpans[${scopeIndex}]`;\n      if (!isRecord(scopeSpan)) {\n        unsupportedFields.push(scopePath);\n        continue;\n      }\n      const scope = readRecordField(scopeSpan, \"scope\");\n      const scopeParsed = parseOtlpAttributes(\n        scope?.attributes,\n        `${scopePath}.scope.attributes`,\n      );\n      warnings.push(...scopeParsed.warnings);\n      unsupportedFields.push(...scopeParsed.unsupportedFields);\n      if (!Array.isArray(scopeSpan.spans)) {\n        unsupportedFields.push(`${scopePath}.spans`);\n        warnings.push({\n          code: \"otlp_spans_missing\",\n          message: \"OTLP scopeSpans entry did not contain a spans array.\",\n          severity: \"warning\",\n          field: `${scopePath}.spans`,\n        });\n        continue;\n      }\n\n      for (const [spanIndex, span] of scopeSpan.spans.entries()) {\n        const spanPath = `${scopePath}.spans[${spanIndex}]`;\n        if (!looksLikeOtlpSpan(span)) {\n          unsupportedFields.push(spanPath);\n          warnings.push({\n            code: \"otlp_invalid_span\",\n            message: \"Skipped OTLP span without required traceId, spanId, or name.\",\n            severity: \"warning\",\n            field: spanPath,\n          });\n          continue;\n        }\n        spans.push({\n          span,\n          resourceAttributes: resourceParsed.attributes,\n          scopeAttributes: scopeParsed.attributes,\n          scopeName: readStringField(scope ?? {}, [\"name\"]),\n          scopeVersion: readStringField(scope ?? {}, [\"version\"]),\n          pathPrefix: spanPath,\n        });\n      }\n    }\n  }\n\n  if (spans.length === 0) {\n    warnings.push({\n      code: \"otlp_no_valid_spans\",\n      message: \"OTLP JSON payload did not contain any valid spans.\",\n      severity: \"error\",\n    });\n    return {\n      spans,\n      confidence: 0.7,\n      description: \"Malformed OTLP JSON trace payload\",\n      warnings,\n      unsupportedFields,\n    };\n  }\n\n  return {\n    spans,\n    confidence: 0.93,\n    description: \"OTLP JSON trace payload\",\n    warnings,\n    unsupportedFields,\n  };\n}\n\nfunction mapOtlpStatus(status: unknown): PersistedEventStatus | undefined {\n  if (!isRecord(status)) return undefined;\n  const rawCode = status.code;\n\n  if (typeof rawCode === \"number\" && Number.isFinite(rawCode)) {\n    switch (rawCode) {\n      case 0:\n        return \"unknown\";\n      case 1:\n        return \"ok\";\n      case 2:\n        return \"error\";\n      default:\n        return \"unknown\";\n    }\n  }\n\n  if (typeof rawCode === \"string\") {\n    const trimmed = rawCode.trim();\n    if (/^\\d+$/.test(trimmed)) {\n      return mapOtlpStatus({ code: Number(trimmed) });\n    }\n    switch (trimmed.toUpperCase()) {\n      case \"STATUS_CODE_OK\":\n      case \"OK\":\n        return \"ok\";\n      case \"STATUS_CODE_ERROR\":\n      case \"ERROR\":\n        return \"error\";\n      case \"STATUS_CODE_UNSET\":\n      case \"UNSET\":\n        return \"unknown\";\n      default:\n        return \"unknown\";\n    }\n  }\n\n  return undefined;\n}\n\nfunction readOtlpKind(\n  attributes: JsonRecord,\n  pathPrefix: string,\n): { kind: PersistedInspectEvent[\"kind\"]; warnings: TraceReadWarning[] } {\n  const warnings: TraceReadWarning[] = [];\n  const agentInspectKind = attributes[\"agent_inspect.kind\"];\n  if (\n    agentInspectKind === \"RUN\" ||\n    agentInspectKind === \"AGENT\" ||\n    agentInspectKind === \"LLM\" ||\n    agentInspectKind === \"TOOL\" ||\n    agentInspectKind === \"CHAIN\" ||\n    agentInspectKind === \"RETRIEVER\" ||\n    agentInspectKind === \"DECISION\" ||\n    agentInspectKind === \"RESULT\" ||\n    agentInspectKind === \"ERROR\" ||\n    agentInspectKind === \"LOGIC\" ||\n    agentInspectKind === \"LOG\" ||\n    agentInspectKind === \"OUTCOME\"\n  ) {\n    return { kind: agentInspectKind, warnings };\n  }\n\n  const operation = attributes[\"gen_ai.operation.name\"];\n  if (typeof operation === \"string\") {\n    switch (operation) {\n      case \"generate_content\":\n      case \"chat\":\n        return { kind: \"LLM\", warnings };\n      case \"execute_tool\":\n        return { kind: \"TOOL\", warnings };\n      case \"invoke_agent\":\n        return { kind: \"AGENT\", warnings };\n      default:\n        warnings.push({\n          code: \"otlp_gen_ai_operation_semantic_loss\",\n          message: `OTLP GenAI operation \"${operation}\" mapped to AgentInspect LOGIC.`,\n          severity: \"warning\",\n          field: `${pathPrefix}.attributes.gen_ai.operation.name`,\n        });\n        return { kind: \"LOGIC\", warnings };\n    }\n  }\n\n  warnings.push({\n    code: \"otlp_kind_unknown\",\n    message: \"OTLP span had no AgentInspect kind or GenAI operation; mapped to LOGIC.\",\n    severity: \"warning\",\n    field: `${pathPrefix}.attributes`,\n  });\n  return { kind: \"LOGIC\", warnings };\n}\n\nfunction readOtlpTokenUsage(attributes: JsonRecord): PersistedTokenUsage | undefined {\n  const input = attributes[\"gen_ai.usage.input_tokens\"];\n  const output = attributes[\"gen_ai.usage.output_tokens\"];\n  const usage: PersistedTokenUsage = {};\n  if (typeof input === \"number\" && Number.isFinite(input) && input >= 0) {\n    usage.input = input;\n  }\n  if (typeof output === \"number\" && Number.isFinite(output) && output >= 0) {\n    usage.output = output;\n  }\n  if (usage.input !== undefined && usage.output !== undefined) {\n    usage.total = usage.input + usage.output;\n  }\n  return Object.keys(usage).length > 0 ? usage : undefined;\n}\n\nfunction readOtlpConfidence(\n  attributes: JsonRecord,\n): PersistedInspectEvent[\"confidence\"] {\n  return readOpenInferenceConfidence(attributes);\n}\n\nfunction sanitizeOtlpAttributes(\n  attributes: JsonRecord,\n  pathPrefix: string,\n): {\n  attributes: Record<string, unknown>;\n  warnings: TraceReadWarning[];\n  unsupportedFields: string[];\n} {\n  const ownerPath = pathPrefix.endsWith(\".attributes\")\n    ? pathPrefix.slice(0, -\".attributes\".length)\n    : pathPrefix;\n  const sanitized = sanitizeOpenInferenceAttributes(attributes, ownerPath);\n  return {\n    ...sanitized,\n    warnings: sanitized.warnings.map((warning) =>\n      warning.code === \"openinference_sensitive_attribute_summarized\"\n        ? {\n            ...warning,\n            code: \"otlp_sensitive_attribute_summarized\",\n            message:\n              \"OTLP prompt/output/document attribute(s) were summarized instead of copied verbatim.\",\n          }\n        : warning,\n    ),\n  };\n}\n\nfunction mapOtlpEvents(\n  value: unknown,\n  pathPrefix: string,\n): {\n  events?: Record<string, unknown>[];\n  warnings: TraceReadWarning[];\n  unsupportedFields: string[];\n} {\n  const warnings: TraceReadWarning[] = [];\n  const unsupportedFields: string[] = [];\n  if (value === undefined) return { warnings, unsupportedFields };\n  if (!Array.isArray(value)) {\n    unsupportedFields.push(pathPrefix);\n    warnings.push({\n      code: \"otlp_events_invalid\",\n      message: \"OTLP events field was not an array.\",\n      severity: \"warning\",\n      field: pathPrefix,\n    });\n    return { warnings, unsupportedFields };\n  }\n\n  const events: Record<string, unknown>[] = [];\n  for (const [index, event] of value.entries()) {\n    const eventPath = `${pathPrefix}[${index}]`;\n    if (!isRecord(event)) {\n      unsupportedFields.push(eventPath);\n      continue;\n    }\n    const parsedAttributes = parseOtlpAttributes(\n      event.attributes,\n      `${eventPath}.attributes`,\n    );\n    warnings.push(...parsedAttributes.warnings);\n    unsupportedFields.push(...parsedAttributes.unsupportedFields);\n    const sanitized = sanitizeOtlpAttributes(\n      parsedAttributes.attributes,\n      `${eventPath}.attributes`,\n    );\n    warnings.push(...sanitized.warnings);\n    unsupportedFields.push(...sanitized.unsupportedFields);\n\n    const out: Record<string, unknown> = {};\n    const name = readStringField(event, [\"name\"]);\n    if (name !== undefined) {\n      out.name = name;\n    }\n    const timestamp = parseUnixNanoToIso(event.timeUnixNano);\n    if (timestamp !== undefined) {\n      out.timestamp = timestamp;\n    } else if (event.timeUnixNano !== undefined) {\n      unsupportedFields.push(`${eventPath}.timeUnixNano`);\n      warnings.push({\n        code: \"otlp_event_timestamp_invalid\",\n        message: \"OTLP event timeUnixNano could not be parsed.\",\n        severity: \"warning\",\n        field: `${eventPath}.timeUnixNano`,\n      });\n    }\n    if (Object.keys(sanitized.attributes).length > 0) {\n      out.attributes = sanitized.attributes;\n    }\n    events.push(out);\n  }\n\n  return {\n    events: events.length > 0 ? events : undefined,\n    warnings,\n    unsupportedFields,\n  };\n}\n\nfunction mapOtlpSpan(context: OtlpSpanContext): OpenInferenceMappedSpan {\n  const { span, pathPrefix } = context;\n  const warnings: TraceReadWarning[] = [];\n  const unsupportedFields: string[] = [];\n  const parsedSpanAttributes = parseOtlpAttributes(\n    span.attributes,\n    `${pathPrefix}.attributes`,\n  );\n  warnings.push(...parsedSpanAttributes.warnings);\n  unsupportedFields.push(...parsedSpanAttributes.unsupportedFields);\n\n  const sanitizedSpanAttributes = sanitizeOtlpAttributes(\n    parsedSpanAttributes.attributes,\n    `${pathPrefix}.attributes`,\n  );\n  warnings.push(...sanitizedSpanAttributes.warnings);\n  unsupportedFields.push(...sanitizedSpanAttributes.unsupportedFields);\n\n  const attributes: Record<string, unknown> = {\n    ...sanitizedSpanAttributes.attributes,\n  };\n  for (const [key, value] of Object.entries(context.resourceAttributes)) {\n    attributes[`resource.${key}`] = value;\n  }\n  for (const [key, value] of Object.entries(context.scopeAttributes)) {\n    attributes[`scope.${key}`] = value;\n  }\n  if (context.scopeName !== undefined) {\n    attributes[\"scope.name\"] = context.scopeName;\n  }\n  if (context.scopeVersion !== undefined) {\n    attributes[\"scope.version\"] = context.scopeVersion;\n  }\n\n  for (const [key, value] of Object.entries(span)) {\n    if (OTLP_SPAN_KEYS.has(key)) continue;\n    unsupportedFields.push(`${pathPrefix}.${key}`);\n    if (value === null || typeof value !== \"object\") {\n      attributes[`otlp.${key}`] = value;\n    } else {\n      attributes[`otlp.${key}.summary`] = summarizeAttributeValue(value);\n      warnings.push({\n        code: \"otlp_unsupported_field_summarized\",\n        message: `Unsupported OTLP span field \"${key}\" was summarized.`,\n        severity: \"warning\",\n        field: `${pathPrefix}.${key}`,\n      });\n    }\n  }\n\n  for (const key of [\n    \"droppedAttributesCount\",\n    \"droppedEventsCount\",\n    \"droppedLinksCount\",\n    \"links\",\n  ]) {\n    if (span[key] !== undefined) {\n      unsupportedFields.push(`${pathPrefix}.${key}`);\n      warnings.push({\n        code: \"otlp_span_field_not_mapped\",\n        message: `OTLP span field \"${key}\" is not represented in AgentInspect events.`,\n        severity: \"warning\",\n        field: `${pathPrefix}.${key}`,\n      });\n    }\n  }\n\n  const events = mapOtlpEvents(span.events, `${pathPrefix}.events`);\n  warnings.push(...events.warnings);\n  unsupportedFields.push(...events.unsupportedFields);\n  if (events.events !== undefined) {\n    attributes[\"otlp.events\"] = events.events;\n  }\n\n  const traceId = readStringField(span, [\"traceId\"]) ?? \"trace-unknown\";\n  const spanId = readStringField(span, [\"spanId\"]) ?? \"span-unknown\";\n  const parentSpanId = readStringField(span, [\"parentSpanId\"]);\n  const startedAt = readOpenInferenceTimestamp(\n    span,\n    [\"startTimeUnixNano\"],\n    [],\n  );\n  const endedAt = readOpenInferenceTimestamp(span, [\"endTimeUnixNano\"], []);\n  const timestamp = startedAt ?? \"1970-01-01T00:00:00.000Z\";\n  if (startedAt === undefined) {\n    unsupportedFields.push(`${pathPrefix}.startTimeUnixNano`);\n    warnings.push({\n      code: \"otlp_missing_start_time\",\n      message: \"OTLP span is missing a valid startTimeUnixNano; using Unix epoch.\",\n      severity: \"warning\",\n      field: `${pathPrefix}.startTimeUnixNano`,\n    });\n  }\n\n  const { kind, warnings: kindWarnings } = readOtlpKind(\n    parsedSpanAttributes.attributes,\n    pathPrefix,\n  );\n  warnings.push(...kindWarnings);\n  const status = mapOtlpStatus(span.status);\n  const tokenUsage = readOtlpTokenUsage(parsedSpanAttributes.attributes);\n  const errorMessage =\n    isRecord(span.status) && typeof span.status.message === \"string\"\n      ? span.status.message\n      : undefined;\n\n  const event: PersistedInspectEvent = {\n    schemaVersion: \"0.2\",\n    eventId:\n      typeof parsedSpanAttributes.attributes[\"agent_inspect.event_id\"] === \"string\"\n        ? parsedSpanAttributes.attributes[\"agent_inspect.event_id\"]\n        : spanId,\n    runId:\n      typeof parsedSpanAttributes.attributes[\"agent_inspect.run_id\"] === \"string\"\n        ? parsedSpanAttributes.attributes[\"agent_inspect.run_id\"]\n        : traceId,\n    kind,\n    name: readStringField(span, [\"name\"]) ?? spanId,\n    timestamp,\n    confidence: readOtlpConfidence(parsedSpanAttributes.attributes),\n    source: {\n      type: \"otel\",\n      name:\n        context.scopeName ??\n        (typeof context.resourceAttributes[\"service.name\"] === \"string\"\n          ? context.resourceAttributes[\"service.name\"]\n          : \"otlp-json\"),\n      ...(context.scopeVersion !== undefined\n        ? { version: context.scopeVersion }\n        : {}),\n    },\n    attributes,\n    trace: {\n      traceId,\n      spanId,\n      ...(parentSpanId !== undefined ? { parentSpanId } : {}),\n    },\n  };\n\n  if (status !== undefined) {\n    event.status = status;\n  }\n  if (startedAt !== undefined) {\n    event.startedAt = startedAt;\n  }\n  if (endedAt !== undefined) {\n    event.endedAt = endedAt;\n  }\n  const durationMs = durationBetweenIso(startedAt, endedAt);\n  if (durationMs !== undefined) {\n    event.durationMs = durationMs;\n  }\n  if (tokenUsage !== undefined) {\n    event.tokenUsage = tokenUsage;\n  }\n  if (status === \"error\") {\n    event.error = {\n      message: errorMessage !== undefined && errorMessage.trim() !== \"\" ? errorMessage : \"OTLP span error\",\n    };\n  }\n\n  return {\n    event,\n    warnings,\n    unsupportedFields,\n    spanId,\n    ...(parentSpanId !== undefined ? { parentSpanId } : {}),\n  };\n}\n\nfunction mapOtlpEventsToPersisted(document: OtlpDocument): {\n  events: PersistedInspectEvent[];\n  warnings: TraceReadWarning[];\n  unsupportedFields: string[];\n} {\n  const mapped = document.spans.map((span) => mapOtlpSpan(span));\n  const spanIdToEventId = new Map(\n    mapped.map((span) => [span.spanId, span.event.eventId] as const),\n  );\n  for (const span of mapped) {\n    if (span.parentSpanId === undefined) continue;\n    span.event.parentId = spanIdToEventId.get(span.parentSpanId) ?? span.parentSpanId;\n  }\n  return {\n    events: mapped.map((span) => span.event),\n    warnings: mapped.flatMap((span) => span.warnings),\n    unsupportedFields: mapped.flatMap((span) => span.unsupportedFields),\n  };\n}\n\nexport const otlpJsonReader: TraceReader = {\n  format: OTLP_READER_FORMAT,\n  name: \"OTLP JSON\",\n  async detect(input) {\n    const resolved = await resolveInput(input);\n    if (!resolved) return undefined;\n\n    let parsed: unknown;\n    try {\n      parsed = parseJsonDocument(resolved.content);\n    } catch {\n      return undefined;\n    }\n\n    const document = extractOtlpDocument(parsed);\n    if (!document) return undefined;\n\n    return {\n      format: OTLP_READER_FORMAT,\n      confidence: document.confidence,\n      readerName: \"OTLP JSON\",\n      description: document.description,\n      warnings: attachSingleSourceFile(document.warnings, resolved),\n    };\n  },\n  async read(input) {\n    const resolved = await resolveInput(input);\n    if (!resolved) {\n      throw new TraceReadError(\n        \"unsupported_format\",\n        \"OTLP JSON reader requires file, string, or buffer input.\",\n      );\n    }\n\n    let parsed: unknown;\n    try {\n      parsed = parseJsonDocument(resolved.content);\n    } catch {\n      throw new TraceReadError(\"unsupported_format\", \"OTLP JSON input is not valid JSON.\", [\n        {\n          code: \"otlp_invalid_json\",\n          message: \"OTLP JSON reader could not parse the input as JSON.\",\n          severity: \"error\",\n        },\n      ]);\n    }\n\n    const document = extractOtlpDocument(parsed);\n    if (!document || document.spans.length === 0) {\n      throw new TraceReadError(\n        \"unsupported_format\",\n        \"No valid OTLP spans found.\",\n        attachSingleSourceFile(\n          document?.warnings ?? [\n            {\n              code: \"otlp_no_valid_spans\",\n              message: \"OTLP JSON input did not contain valid spans.\",\n              severity: \"error\",\n            },\n          ],\n          resolved,\n        ),\n      );\n    }\n\n    const mapped = mapOtlpEventsToPersisted(document);\n    const warnings = attachSingleSourceFile(\n      [...document.warnings, ...mapped.warnings],\n      resolved,\n    );\n    const unsupportedFields = [\n      ...document.unsupportedFields,\n      ...mapped.unsupportedFields,\n    ].sort((a, b) => a.localeCompare(b));\n\n    return {\n      format: OTLP_READER_FORMAT,\n      events: mapped.events,\n      runs: persistedInspectEventsToRunTrees(mapped.events, { skipInvalid: true }),\n      warnings,\n      unsupportedFields,\n      sourceFiles: resolved.sourceFiles,\n    };\n  },\n};\n\nexport const agentInspectJsonlReader: TraceReader = {\n  format: \"agent-inspect-jsonl\",\n  name: \"AgentInspect JSONL\",\n  async detect(input) {\n    const resolved = await resolveInput(input);\n    if (!resolved) return undefined;\n    const detected = detectJsonlFormat(resolved.content);\n    if (detected.validRows === 0 || detected.format === \"empty\") {\n      return undefined;\n    }\n\n    return {\n      format: \"agent-inspect-jsonl\",\n      confidence: 0.95,\n      readerName: \"AgentInspect JSONL\",\n      description: agentInspectFormatLabel(detected.format),\n      warnings: attachSingleSourceFile(detected.warnings, resolved),\n    };\n  },\n  async read(input) {\n    const resolved = await resolveInput(input);\n    if (!resolved) {\n      throw new Error(\"AgentInspect JSONL reader requires file, directory, string, or buffer input.\");\n    }\n\n    const parsed = parseTraceJsonl(resolved.content, { warnings: false });\n    if (parsed.sourceEventCount === 0) {\n      throw new Error(\"No valid AgentInspect JSONL events found.\");\n    }\n\n    const events = persistedEventsForParsedTrace(parsed);\n    return {\n      format: agentInspectFormatLabel(parsed.format),\n      events,\n      runs: persistedInspectEventsToRunTrees(events, { skipInvalid: true }),\n      warnings:\n        parsed.format === \"mixed\"\n          ? attachSingleSourceFile(\n              [\n                {\n                  code: \"mixed_agent_inspect_jsonl\",\n                  message:\n                    \"Trace input mixes schemaVersion 0.1 and 0.2 rows; events were normalized for reading.\",\n                  severity: \"warning\",\n                },\n              ],\n              resolved,\n            )\n          : [],\n      unsupportedFields: [],\n      sourceFiles: resolved.sourceFiles,\n    };\n  },\n};\n\nexport const DEFAULT_TRACE_READERS: readonly TraceReader[] = [\n  agentInspectJsonlReader,\n  openInferenceJsonReader,\n  otlpJsonReader,\n];\n\nexport type {\n  MappingConfidence,\n  MappingLedger,\n  MappingLedgerEntry,\n  MappingLossKind,\n} from \"./mapping-ledger.js\";\nexport {\n  BUILTIN_MAPPING_LEDGERS,\n  OPENINFERENCE_MAPPING_LEDGER,\n  OTLP_JSON_MAPPING_LEDGER,\n  getMappingLedger,\n} from \"./mapping-ledger.js\";\n\nexport async function detectTraceFormat(\n  input: TraceInput,\n  options: TraceReadOptions = {},\n): Promise<TraceFormatDetectionResult> {\n  assertTraceInput(input);\n  const readers = options.readers ?? DEFAULT_TRACE_READERS;\n\n  if (options.format !== undefined) {\n    const reader = findReaderByFormat(options.format, readers);\n    if (!reader) {\n      return {\n        status: \"unsupported\",\n        candidates: [],\n        warnings: [\n          {\n            code: \"unsupported_format\",\n            message: `No trace reader is registered for format \"${options.format}\".`,\n            severity: \"error\",\n          },\n        ],\n      };\n    }\n\n    return {\n      status: \"detected\",\n      format: reader.format,\n      candidates: [\n        {\n          format: reader.format,\n          confidence: 1,\n          readerName: reader.name,\n          description: \"Explicit format override\",\n        },\n      ],\n      warnings: [],\n    };\n  }\n\n  const candidates: TraceFormatCandidate[] = [];\n  const warnings: TraceReadWarning[] = [];\n\n  for (const reader of readers) {\n    try {\n      const candidate = await reader.detect(input);\n      if (candidate !== undefined) {\n        candidates.push(normalizeCandidate(reader, candidate));\n      }\n    } catch (error) {\n      if (error instanceof TraceReadError) {\n        warnings.push(...error.warnings);\n        continue;\n      }\n      warnings.push({\n        code: \"reader_detect_failed\",\n        message:\n          error instanceof Error && error.message.trim() !== \"\"\n            ? error.message\n            : `Trace reader \"${reader.format}\" failed during detection.`,\n        severity: \"warning\",\n      });\n    }\n  }\n\n  const sorted = sortCandidates(\n    candidates.filter((candidate) => candidate.confidence >= MIN_DETECTION_CONFIDENCE),\n  );\n  const candidateWarnings = collectWarnings(sorted);\n  const lowConfidenceWarnings: TraceReadWarning[] =\n    candidates.length > sorted.length\n      ? [\n          {\n            code: \"low_confidence_candidates\",\n            message: `Ignored ${candidates.length - sorted.length} low-confidence format candidate(s).`,\n            severity: \"info\",\n          },\n        ]\n      : [];\n  const allWarnings = dedupeWarnings([\n    ...warnings,\n    ...candidateWarnings,\n    ...lowConfidenceWarnings,\n  ]);\n\n  if (sorted.length === 0) {\n    return {\n      status: \"unsupported\",\n      candidates: [],\n      warnings: allWarnings,\n    };\n  }\n\n  const [best, second] = sorted;\n  if (\n    second !== undefined &&\n    best.confidence - second.confidence <= AMBIGUOUS_CONFIDENCE_DELTA\n  ) {\n    return {\n      status: \"ambiguous\",\n      candidates: sorted,\n      warnings: [\n        ...allWarnings,\n        {\n          code: \"ambiguous_format_candidates\",\n          message: `Top trace format candidates are within ${AMBIGUOUS_CONFIDENCE_DELTA} confidence.`,\n          severity: \"warning\",\n        },\n      ],\n    };\n  }\n\n  return {\n    status: \"detected\",\n    format: best.format,\n    candidates: sorted,\n    warnings: allWarnings,\n  };\n}\n\nexport async function readTrace(\n  input: TraceInput,\n  options: TraceReadOptions = {},\n): Promise<TraceReadResult> {\n  assertTraceInput(input);\n  const readers = options.readers ?? DEFAULT_TRACE_READERS;\n  const detection = await detectTraceFormat(input, options);\n\n  if (detection.status === \"unsupported\" || detection.format === undefined) {\n    throw new TraceReadError(\n      \"unsupported_format\",\n      formatProgrammaticDiagnostic(\"AI_TRACE_FORMAT_UNSUPPORTED\"),\n      detection.warnings,\n    );\n  }\n  if (detection.status === \"ambiguous\") {\n    throw new TraceReadError(\n      \"ambiguous_format\",\n      formatProgrammaticDiagnostic(\"AI_TRACE_FORMAT_AMBIGUOUS\"),\n      detection.warnings,\n    );\n  }\n\n  const reader = findReaderByFormat(detection.format, readers);\n  if (!reader) {\n    throw new TraceReadError(\n      \"unsupported_format\",\n      formatProgrammaticDiagnostic(\n        \"AI_TRACE_FORMAT_UNSUPPORTED\",\n        `No trace reader is registered for format \"${detection.format}\".`,\n      ),\n      detection.warnings,\n    );\n  }\n\n  try {\n    const result = await reader.read(input, { format: detection.format });\n    return {\n      ...result,\n      format: result.format || detection.format,\n      warnings: [...detection.warnings, ...result.warnings],\n    };\n  } catch (error) {\n    if (error instanceof TraceReadError) {\n      throw new TraceReadError(\n        error.code,\n        error.message,\n        dedupeWarnings([...detection.warnings, ...error.warnings]),\n      );\n    }\n    throw new TraceReadError(\n      \"reader_failed\",\n      error instanceof Error && error.message.trim() !== \"\"\n        ? error.message\n        : `Trace reader \"${reader.format}\" failed.`,\n      detection.warnings,\n    );\n  }\n}\n\nexport function openTrace(\n  input: TraceInput,\n  options: TraceReadOptions = {},\n): Promise<TraceReadResult> {\n  return readTrace(input, options);\n}\n\n/**\n * Open a single local trace file. Prefer this over passing a bare path string to `openTrace`.\n *\n * @experimental Additive convenience over `openTrace({ type: \"file\", path })`.\n */\nexport function openTraceFile(\n  filePath: string,\n  options: TraceReadOptions = {},\n): Promise<TraceReadResult> {\n  return openTrace({ type: \"file\", path: filePath }, options);\n}\n\n/**\n * Open all `*.jsonl` files in a local directory (sorted, concatenated).\n *\n * @experimental Additive convenience over `openTrace({ type: \"directory\", path })`.\n */\nexport function openTraceDirectory(\n  dirPath: string,\n  options: TraceReadOptions = {},\n): Promise<TraceReadResult> {\n  return openTrace({ type: \"directory\", path: dirPath }, options);\n}\n\n/**\n * Open an in-memory JSONL / supported text payload.\n *\n * @experimental Additive convenience over `openTrace({ type: \"string\", content })`.\n */\nexport function openTraceText(\n  content: string,\n  options: TraceReadOptions = {},\n): Promise<TraceReadResult> {\n  return openTrace({ type: \"string\", content }, options);\n}\n"]}