{"version":3,"sources":["../src/types/inspect-event.ts","../src/types/persisted-inspect-event.ts","../src/persisted/to-trace-event.ts","../src/types.ts","../src/utils.ts","../src/read-trace.ts","../src/correlation-metadata.ts","../src/persisted/token-usage.ts","../src/persisted/from-trace-event.ts","../src/logs/tree-builder.ts","../src/persisted/to-inspect-event.ts","../src/persisted/tree-bridge.ts","../src/diagnostics/programmatic.ts","../src/readers/mapping-ledger.ts","../src/readers/index.ts"],"names":["isRecord","path","os","format","isNonEmptyString","compactAttributes","parseIsoToMs","readdir","readFile"],"mappings":"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","file":"readers.cjs","sourcesContent":["export type AttributionConfidence =\n  | \"explicit\"\n  | \"correlated\"\n  | \"heuristic\"\n  | \"unknown\";\n\n/** Canonical attribution-confidence literals (weakest → strongest order is rank-based). */\nexport const ATTRIBUTION_CONFIDENCES: readonly AttributionConfidence[] = [\n  \"unknown\",\n  \"heuristic\",\n  \"correlated\",\n  \"explicit\",\n] as const;\n\nexport function isAttributionConfidence(value: unknown): value is AttributionConfidence {\n  return (\n    typeof value === \"string\" &&\n    (ATTRIBUTION_CONFIDENCES as readonly string[]).includes(value)\n  );\n}\n\n/** Rank for threshold comparisons; unknown is weakest (0). */\nexport const ATTRIBUTION_CONFIDENCE_RANK: Record<AttributionConfidence, number> = {\n  unknown: 0,\n  heuristic: 1,\n  correlated: 2,\n  explicit: 3,\n};\n\nexport type InspectKind =\n  | \"RUN\"\n  | \"AGENT\"\n  | \"LLM\"\n  | \"TOOL\"\n  | \"CHAIN\"\n  | \"RETRIEVER\"\n  | \"DECISION\"\n  | \"RESULT\"\n  | \"ERROR\"\n  | \"LOGIC\"\n  | \"LOG\"\n  | \"OUTCOME\";\n\nexport interface EventSource {\n  type: \"manual\" | \"json-log\" | \"log4js\" | \"pino\" | \"winston\" | \"adapter\";\n  file?: string;\n  line?: number;\n}\n\nexport interface InspectEvent {\n  eventId: string;\n  runId: string;\n  parentId?: string;\n  name: string;\n  kind: InspectKind;\n  timestamp: number;\n  status?: \"running\" | \"ok\" | \"error\";\n  durationMs?: number;\n  attributes?: Record<string, unknown>;\n  confidence: AttributionConfidence;\n  source: EventSource;\n}\n\nexport interface InspectNode {\n  event: InspectEvent;\n  children: InspectNode[];\n  depth: number;\n}\n\n/** Bounded parent/cycle summary for visibility-first tree building (6.14.2+). */\nexport interface RelationshipSummary {\n  rootCount: number;\n  selfParentCount: number;\n  cycleCount: number;\n  unresolvedParentCount: number;\n  normalizedEdgeCount: number;\n}\n\nexport interface InspectRunTree {\n  runId: string;\n  name?: string;\n  status?: \"running\" | \"ok\" | \"error\";\n  startedAt?: number;\n  endedAt?: number;\n  durationMs?: number;\n  children: InspectNode[];\n  metadata: {\n    totalEvents: number;\n    confidenceBreakdown: Record<AttributionConfidence, number>;\n    kinds: Record<InspectKind, number>;\n    relationshipSummary?: RelationshipSummary;\n  };\n}\n\n","import type { AttributionConfidence, InspectKind } from \"./inspect-event.js\";\nimport { isAttributionConfidence } from \"./inspect-event.js\";\n\nexport type PersistedSchemaVersion = \"0.2\" | \"1.0\";\n\nexport type PersistedEventSourceType =\n  | \"manual\"\n  | \"json-log\"\n  | \"log4js\"\n  | \"adapter\"\n  | \"ai-sdk\"\n  | \"otel\";\n\nexport interface PersistedEventSource {\n  type: PersistedEventSourceType;\n  name?: string;\n  version?: string;\n}\n\nexport type PersistedEventStatus = \"running\" | \"ok\" | \"error\" | \"unknown\";\n\nexport interface PersistedInspectError {\n  name?: string;\n  message: string;\n  code?: string;\n}\n\nexport interface PersistedTokenUsage {\n  input?: number;\n  output?: number;\n  total?: number;\n  /** Cache-read tokens (informational; never added to total). */\n  cached?: number;\n  /** Cache-write / cache-creation tokens (informational; never added to total). */\n  cacheWrite?: number;\n  /** Reasoning / thinking tokens when providers report them separately. */\n  reasoning?: number;\n}\n\nexport interface PersistedTraceContext {\n  traceId?: string;\n  spanId?: string;\n  parentSpanId?: string;\n}\n\nexport interface PersistedInspectEventBase {\n  eventId: string;\n  runId: string;\n  parentId?: string;\n  kind: InspectKind;\n  name: string;\n  status?: PersistedEventStatus;\n  timestamp: string;\n  startedAt?: string;\n  endedAt?: string;\n  durationMs?: number;\n  confidence: AttributionConfidence;\n  source: PersistedEventSource;\n  attributes?: Record<string, unknown>;\n  inputSummary?: unknown;\n  outputSummary?: unknown;\n  error?: PersistedInspectError;\n  tokenUsage?: PersistedTokenUsage;\n  trace?: PersistedTraceContext;\n}\n\nexport interface PersistedInspectEventV02 extends PersistedInspectEventBase {\n  schemaVersion: \"0.2\";\n}\n\nexport interface PersistedInspectEventV10 extends PersistedInspectEventBase {\n  schemaVersion: \"1.0\";\n  [key: string]: unknown;\n}\n\nexport type PersistedInspectEvent =\n  | PersistedInspectEventV02\n  | PersistedInspectEventV10;\n\nconst INSPECT_KINDS: readonly InspectKind[] = [\n  \"RUN\",\n  \"AGENT\",\n  \"LLM\",\n  \"TOOL\",\n  \"CHAIN\",\n  \"RETRIEVER\",\n  \"DECISION\",\n  \"RESULT\",\n  \"ERROR\",\n  \"LOGIC\",\n  \"LOG\",\n  \"OUTCOME\",\n];\n\nconst PERSISTED_EVENT_SOURCE_TYPES: readonly PersistedEventSourceType[] = [\n  \"manual\",\n  \"json-log\",\n  \"log4js\",\n  \"adapter\",\n  \"ai-sdk\",\n  \"otel\",\n];\n\nconst PERSISTED_EVENT_STATUSES: readonly PersistedEventStatus[] = [\n  \"running\",\n  \"ok\",\n  \"error\",\n  \"unknown\",\n];\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isString(value: unknown): value is string {\n  return typeof value === \"string\";\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n  return typeof value === \"string\" && value.length > 0;\n}\n\nfunction isOptionalString(value: unknown): boolean {\n  return value === undefined || isString(value);\n}\n\nfunction isNonNegativeNumber(value: unknown): value is number {\n  return typeof value === \"number\" && Number.isFinite(value) && value >= 0;\n}\n\nfunction isOptionalNonNegativeNumber(value: unknown): boolean {\n  return value === undefined || isNonNegativeNumber(value);\n}\n\nfunction isInspectKind(value: unknown): value is InspectKind {\n  return (\n    typeof value === \"string\" &&\n    (INSPECT_KINDS as readonly string[]).includes(value)\n  );\n}\n\nfunction isPersistedEventSourceType(\n  value: unknown,\n): value is PersistedEventSourceType {\n  return (\n    typeof value === \"string\" &&\n    (PERSISTED_EVENT_SOURCE_TYPES as readonly string[]).includes(value)\n  );\n}\n\nfunction isPersistedEventStatus(value: unknown): value is PersistedEventStatus {\n  return (\n    typeof value === \"string\" &&\n    (PERSISTED_EVENT_STATUSES as readonly string[]).includes(value)\n  );\n}\n\nfunction isPersistedEventSource(value: unknown): value is PersistedEventSource {\n  if (!isRecord(value)) return false;\n  if (!isPersistedEventSourceType(value.type)) return false;\n  if (!isOptionalString(value.name)) return false;\n  if (!isOptionalString(value.version)) return false;\n  return true;\n}\n\nfunction isPersistedInspectError(value: unknown): value is PersistedInspectError {\n  if (!isRecord(value)) return false;\n  if (!isNonEmptyString(value.message)) return false;\n  if (!isOptionalString(value.name)) return false;\n  if (!isOptionalString(value.code)) return false;\n  return true;\n}\n\nfunction isPersistedTokenUsage(value: unknown): value is PersistedTokenUsage {\n  if (!isRecord(value)) return false;\n  if (!isOptionalNonNegativeNumber(value.input)) return false;\n  if (!isOptionalNonNegativeNumber(value.output)) return false;\n  if (!isOptionalNonNegativeNumber(value.total)) return false;\n  if (!isOptionalNonNegativeNumber(value.cached)) return false;\n  if (!isOptionalNonNegativeNumber(value.cacheWrite)) return false;\n  if (!isOptionalNonNegativeNumber(value.reasoning)) return false;\n  return true;\n}\n\nfunction isPersistedTraceContext(value: unknown): value is PersistedTraceContext {\n  if (!isRecord(value)) return false;\n  if (!isOptionalString(value.traceId)) return false;\n  if (!isOptionalString(value.spanId)) return false;\n  if (!isOptionalString(value.parentSpanId)) return false;\n  return true;\n}\n\n/**\n * Runtime guard for a v0.2 or v1.0 {@link PersistedInspectEvent} JSON object.\n *\n * Timestamp fields (`timestamp`, `startedAt`, `endedAt`) are validated as\n * non-empty strings only — stricter ISO-8601 parsing may be added later.\n */\nexport function isPersistedInspectEvent(\n  value: unknown,\n): value is PersistedInspectEvent {\n  if (!isRecord(value)) return false;\n  if (value.schemaVersion !== \"0.2\" && value.schemaVersion !== \"1.0\") {\n    return false;\n  }\n\n  if (!isNonEmptyString(value.eventId)) return false;\n  if (!isNonEmptyString(value.runId)) return false;\n  if (!isInspectKind(value.kind)) return false;\n  if (!isNonEmptyString(value.name)) return false;\n  // Non-empty string required; ISO format not validated in this PR.\n  if (!isNonEmptyString(value.timestamp)) return false;\n  if (!isAttributionConfidence(value.confidence)) return false;\n  if (!isPersistedEventSource(value.source)) return false;\n\n  if (value.parentId !== undefined && !isNonEmptyString(value.parentId)) {\n    return false;\n  }\n  if (value.status !== undefined && !isPersistedEventStatus(value.status)) {\n    return false;\n  }\n  if (!isOptionalString(value.startedAt)) return false;\n  if (!isOptionalString(value.endedAt)) return false;\n  if (value.durationMs !== undefined && !isNonNegativeNumber(value.durationMs)) {\n    return false;\n  }\n  if (value.attributes !== undefined && !isRecord(value.attributes)) {\n    return false;\n  }\n  if (value.error !== undefined && !isPersistedInspectError(value.error)) {\n    return false;\n  }\n  if (value.tokenUsage !== undefined && !isPersistedTokenUsage(value.tokenUsage)) {\n    return false;\n  }\n  if (value.trace !== undefined && !isPersistedTraceContext(value.trace)) {\n    return false;\n  }\n\n  return true;\n}\n\nexport function isPersistedInspectEventV02(\n  value: unknown,\n): value is PersistedInspectEventV02 {\n  return isPersistedInspectEvent(value) && value.schemaVersion === \"0.2\";\n}\n\nexport function isPersistedInspectEventV10(\n  value: unknown,\n): value is PersistedInspectEventV10 {\n  return isPersistedInspectEvent(value) && value.schemaVersion === \"1.0\";\n}\n","import type { InspectKind } from \"../types/inspect-event.js\";\nimport type {\n  ErrorInfo,\n  RunStatus,\n  StepMetadata,\n  StepStatus,\n  StepType,\n  TraceEvent,\n} from \"../types.js\";\nimport {\n  isPersistedInspectEvent,\n  type PersistedInspectEvent,\n  type PersistedTokenUsage,\n} from \"../types/persisted-inspect-event.js\";\n\nexport interface PersistedToTraceEventOptions {\n  /**\n   * Stable index within the source event list.\n   * Used for deterministic timestamps when only one instant is known.\n   */\n  eventIndex?: number;\n}\n\nfunction parseIsoToMs(iso: string): number {\n  const parsed = Date.parse(iso);\n  return Number.isFinite(parsed) ? parsed : 0;\n}\n\nfunction mapInspectKindToStepType(kind: InspectKind): StepType {\n  switch (kind) {\n    case \"LLM\":\n      return \"llm\";\n    case \"TOOL\":\n      return \"tool\";\n    case \"DECISION\":\n      return \"decision\";\n    case \"RUN\":\n      return \"run\";\n    default:\n      return \"logic\";\n  }\n}\n\nfunction mapPersistedStatusToStepStatus(\n  status: PersistedInspectEvent[\"status\"],\n): StepStatus | undefined {\n  switch (status) {\n    case \"ok\":\n      return \"success\";\n    case \"error\":\n      return \"error\";\n    case \"running\":\n      return \"running\";\n    default:\n      return undefined;\n  }\n}\n\nfunction mapPersistedStatusToRunStatus(\n  status: PersistedInspectEvent[\"status\"],\n): RunStatus | undefined {\n  switch (status) {\n    case \"ok\":\n      return \"success\";\n    case \"error\":\n      return \"error\";\n    case \"running\":\n      return \"running\";\n    default:\n      return undefined;\n  }\n}\n\nfunction mapPersistedError(\n  error: PersistedInspectEvent[\"error\"],\n  attributes: Record<string, unknown> | undefined,\n): ErrorInfo | undefined {\n  if (!error?.message) return undefined;\n  const out: ErrorInfo = { message: error.message };\n  const stack =\n    typeof attributes?.errorStack === \"string\" &&\n    attributes.errorStack.length > 0\n      ? attributes.errorStack\n      : undefined;\n  if (stack) {\n    out.stack = stack;\n  }\n  return out;\n}\n\nfunction mapTokenUsageToMetadata(\n  tokenUsage: PersistedTokenUsage | undefined,\n  attributes: Record<string, unknown> | undefined,\n): StepMetadata | undefined {\n  const metadata: StepMetadata = {};\n  if (attributes?.metadata && typeof attributes.metadata === \"object\") {\n    Object.assign(metadata, attributes.metadata as Record<string, unknown>);\n  }\n  if (tokenUsage) {\n    metadata.tokens = {\n      ...(tokenUsage.input !== undefined ? { input: tokenUsage.input } : {}),\n      ...(tokenUsage.output !== undefined ? { output: tokenUsage.output } : {}),\n      ...(tokenUsage.total !== undefined ? { total: tokenUsage.total } : {}),\n      ...(tokenUsage.cached !== undefined ? { cached: tokenUsage.cached } : {}),\n      ...(tokenUsage.cacheWrite !== undefined\n        ? { cacheWrite: tokenUsage.cacheWrite }\n        : {}),\n      ...(tokenUsage.reasoning !== undefined\n        ? { reasoning: tokenUsage.reasoning }\n        : {}),\n    };\n  }\n  return Object.keys(metadata).length > 0 ? metadata : undefined;\n}\n\nfunction pickRunMetadata(\n  attributes: Record<string, unknown> | undefined,\n): Record<string, unknown> | undefined {\n  if (!attributes) return undefined;\n  const metadata =\n    attributes.metadata && typeof attributes.metadata === \"object\"\n      ? { ...(attributes.metadata as Record<string, unknown>) }\n      : {};\n  for (const key of [\n    \"correlationId\",\n    \"requestId\",\n    \"decisionId\",\n    \"groupId\",\n  ] as const) {\n    const value = attributes[key];\n    if (typeof value === \"string\" && value.trim() !== \"\") {\n      metadata[key] = value;\n    }\n  }\n  return Object.keys(metadata).length > 0 ? metadata : undefined;\n}\n\nfunction resolveStepId(event: PersistedInspectEvent): string {\n  const attrs = event.attributes;\n  if (attrs && typeof attrs.stepId === \"string\" && attrs.stepId.trim() !== \"\") {\n    return attrs.stepId;\n  }\n  return event.eventId;\n}\n\nfunction resolveStepType(event: PersistedInspectEvent): StepType {\n  const attrs = event.attributes;\n  if (attrs && typeof attrs.stepType === \"string\") {\n    const t = attrs.stepType;\n    if (\n      t === \"run\" ||\n      t === \"llm\" ||\n      t === \"tool\" ||\n      t === \"decision\" ||\n      t === \"logic\" ||\n      t === \"state\" ||\n      t === \"custom\"\n    ) {\n      return t;\n    }\n  }\n  return mapInspectKindToStepType(event.kind);\n}\n\nfunction resolveTimes(event: PersistedInspectEvent): {\n  timestamp: number;\n  startTime: number;\n  endTime: number;\n} {\n  const timestamp = parseIsoToMs(event.timestamp);\n  const startTime =\n    event.startedAt !== undefined ? parseIsoToMs(event.startedAt) : timestamp;\n  let endTime =\n    event.endedAt !== undefined ? parseIsoToMs(event.endedAt) : timestamp;\n  if (\n    event.durationMs !== undefined &&\n    Number.isFinite(event.durationMs) &&\n    event.durationMs >= 0 &&\n    event.endedAt === undefined\n  ) {\n    endTime = startTime + event.durationMs;\n  }\n  return { timestamp, startTime, endTime };\n}\n\nfunction fromLegacyRunStarted(event: PersistedInspectEvent): TraceEvent {\n  const { timestamp, startTime } = resolveTimes(event);\n  const out: Extract<TraceEvent, { event: \"run_started\" }> = {\n    schemaVersion: \"0.1\",\n    event: \"run_started\",\n    timestamp,\n    runId: event.runId,\n    name: event.name,\n    startTime,\n  };\n  const metadata = pickRunMetadata(event.attributes);\n  if (metadata) out.metadata = metadata;\n  return out;\n}\n\nfunction fromLegacyRunCompleted(event: PersistedInspectEvent): TraceEvent {\n  const { timestamp, endTime } = resolveTimes(event);\n  const status = mapPersistedStatusToRunStatus(event.status) ?? \"success\";\n  const out: Extract<TraceEvent, { event: \"run_completed\" }> = {\n    schemaVersion: \"0.1\",\n    event: \"run_completed\",\n    timestamp,\n    runId: event.runId,\n    status: status === \"running\" ? \"success\" : status,\n    endTime,\n    durationMs: event.durationMs ?? Math.max(0, endTime - timestamp),\n  };\n  const error = mapPersistedError(event.error, event.attributes);\n  if (error) out.error = error;\n  return out;\n}\n\nfunction fromLegacyStepStarted(event: PersistedInspectEvent): TraceEvent {\n  const { timestamp, startTime } = resolveTimes(event);\n  const out: Extract<TraceEvent, { event: \"step_started\" }> = {\n    schemaVersion: \"0.1\",\n    event: \"step_started\",\n    timestamp,\n    runId: event.runId,\n    stepId: resolveStepId(event),\n    name: event.name,\n    type: resolveStepType(event),\n    startTime,\n  };\n  if (event.parentId !== undefined) out.parentId = event.parentId;\n  const metadata = mapTokenUsageToMetadata(event.tokenUsage, event.attributes);\n  if (metadata) out.metadata = metadata;\n  return out;\n}\n\nfunction fromLegacyStepCompleted(event: PersistedInspectEvent): TraceEvent {\n  const { timestamp, endTime } = resolveTimes(event);\n  const status = mapPersistedStatusToStepStatus(event.status) ?? \"success\";\n  const out: Extract<TraceEvent, { event: \"step_completed\" }> = {\n    schemaVersion: \"0.1\",\n    event: \"step_completed\",\n    timestamp,\n    runId: event.runId,\n    stepId: resolveStepId(event),\n    status: status === \"running\" ? \"success\" : status,\n    endTime,\n    durationMs: event.durationMs ?? Math.max(0, endTime - timestamp),\n  };\n  const error = mapPersistedError(event.error, event.attributes);\n  if (error) out.error = error;\n  return out;\n}\n\nfunction fromLegacyOutcomeObserved(event: PersistedInspectEvent): TraceEvent {\n  const attrs = event.attributes ?? {};\n  const observedAtRaw = attrs.observedAt;\n  const observedAt =\n    typeof observedAtRaw === \"string\"\n      ? Date.parse(observedAtRaw)\n      : typeof observedAtRaw === \"number\" && Number.isFinite(observedAtRaw)\n        ? observedAtRaw\n        : resolveTimes(event).timestamp;\n  const status = attrs.outcomeStatus;\n  const out: Extract<TraceEvent, { event: \"outcome_observed\" }> = {\n    schemaVersion: \"0.1\",\n    event: \"outcome_observed\",\n    timestamp: observedAt,\n    runId: event.runId,\n    outcomeId:\n      typeof attrs.outcomeId === \"string\" ? attrs.outcomeId : event.eventId,\n    name: event.name,\n    expectation:\n      typeof attrs.expectation === \"string\" ? attrs.expectation : event.name,\n    status:\n      status === \"passed\" ||\n      status === \"failed\" ||\n      status === \"unknown\" ||\n      status === \"skipped\"\n        ? status\n        : \"unknown\",\n    observedAt,\n  };\n  if (event.parentId !== undefined) out.parentId = event.parentId;\n  if (typeof attrs.method === \"string\") out.method = attrs.method as never;\n  if (attrs.actual !== undefined) out.actual = attrs.actual;\n  if (event.outputSummary !== undefined) out.actual = event.outputSummary;\n  if (attrs.evidence !== undefined) out.evidence = attrs.evidence;\n  return out;\n}\n\nfunction fromNativeOutcome(event: PersistedInspectEvent): TraceEvent[] {\n  return [fromLegacyOutcomeObserved(event)];\n}\n\nfunction fromNativeRun(event: PersistedInspectEvent): TraceEvent[] {\n  const { timestamp, startTime, endTime } = resolveTimes(event);\n  const runStatus = mapPersistedStatusToRunStatus(event.status);\n  const out: TraceEvent[] = [];\n\n  if (runStatus === \"running\" || event.startedAt !== undefined) {\n    const started: Extract<TraceEvent, { event: \"run_started\" }> = {\n      schemaVersion: \"0.1\",\n      event: \"run_started\",\n      timestamp,\n      runId: event.runId,\n      name: event.name,\n      startTime,\n    };\n    const metadata = pickRunMetadata(event.attributes);\n    if (metadata) started.metadata = metadata;\n    out.push(started);\n  }\n\n  if (runStatus === \"success\" || runStatus === \"error\" || event.endedAt !== undefined) {\n    const completed: Extract<TraceEvent, { event: \"run_completed\" }> = {\n      schemaVersion: \"0.1\",\n      event: \"run_completed\",\n      timestamp,\n      runId: event.runId,\n      status: runStatus === \"error\" ? \"error\" : \"success\",\n      endTime,\n      durationMs: event.durationMs ?? Math.max(0, endTime - startTime),\n    };\n    const error = mapPersistedError(event.error, event.attributes);\n    if (error) completed.error = error;\n    out.push(completed);\n  }\n\n  if (out.length === 0) {\n    out.push(fromLegacyRunStarted(event));\n  }\n\n  return out;\n}\n\nfunction fromNativeStep(event: PersistedInspectEvent): TraceEvent[] {\n  const { timestamp, startTime, endTime } = resolveTimes(event);\n  const stepStatus = mapPersistedStatusToStepStatus(event.status);\n  const stepId = resolveStepId(event);\n  const out: TraceEvent[] = [];\n\n  const shouldEmitStarted =\n    stepStatus === \"running\" ||\n    event.startedAt !== undefined ||\n    stepStatus === \"success\" ||\n    stepStatus === \"error\";\n\n  if (shouldEmitStarted) {\n    const started: Extract<TraceEvent, { event: \"step_started\" }> = {\n      schemaVersion: \"0.1\",\n      event: \"step_started\",\n      timestamp,\n      runId: event.runId,\n      stepId,\n      name: event.name,\n      type: resolveStepType(event),\n      startTime,\n    };\n    if (event.parentId !== undefined) started.parentId = event.parentId;\n    const metadata = mapTokenUsageToMetadata(event.tokenUsage, event.attributes);\n    if (metadata) started.metadata = metadata;\n    out.push(started);\n  }\n\n  if (\n    stepStatus === \"success\" ||\n    stepStatus === \"error\" ||\n    event.endedAt !== undefined ||\n    event.durationMs !== undefined\n  ) {\n    const completed: Extract<TraceEvent, { event: \"step_completed\" }> = {\n      schemaVersion: \"0.1\",\n      event: \"step_completed\",\n      timestamp,\n      runId: event.runId,\n      stepId,\n      status: stepStatus === \"error\" ? \"error\" : \"success\",\n      endTime,\n      durationMs: event.durationMs ?? Math.max(0, endTime - startTime),\n    };\n    const error = mapPersistedError(event.error, event.attributes);\n    if (error) completed.error = error;\n    out.push(completed);\n  }\n\n  if (out.length === 0) {\n    out.push(fromLegacyStepStarted(event));\n  }\n\n  return out;\n}\n\n/**\n * Maps one v0.2 {@link PersistedInspectEvent} to zero or more v0.1 {@link TraceEvent} rows\n * for inspection commands. Does not mutate `event`.\n */\nexport function persistedInspectEventToTraceEvents(\n  event: PersistedInspectEvent,\n): TraceEvent[] {\n  if (!isPersistedInspectEvent(event)) {\n    throw new Error(\"Invalid PersistedInspectEvent: failed isPersistedInspectEvent\");\n  }\n\n  const legacyEvent = event.attributes?.legacyEvent;\n  if (legacyEvent === \"run_started\") return [fromLegacyRunStarted(event)];\n  if (legacyEvent === \"run_completed\") return [fromLegacyRunCompleted(event)];\n  if (legacyEvent === \"step_started\") return [fromLegacyStepStarted(event)];\n  if (legacyEvent === \"step_completed\") return [fromLegacyStepCompleted(event)];\n  if (legacyEvent === \"outcome_observed\") return [fromLegacyOutcomeObserved(event)];\n\n  if (event.kind === \"RUN\") {\n    return fromNativeRun(event);\n  }\n\n  if (event.kind === \"OUTCOME\") {\n    return fromNativeOutcome(event);\n  }\n\n  return fromNativeStep(event);\n}\n\n/**\n * Maps persisted v0.2 events to v0.1 trace events for inspection.\n */\nexport function persistedInspectEventsToTraceEvents(\n  events: readonly PersistedInspectEvent[],\n  options?: PersistedToTraceEventOptions,\n): TraceEvent[] {\n  const out: TraceEvent[] = [];\n  events.forEach((event, index) => {\n    const rows = persistedInspectEventToTraceEvents(event);\n    if (rows.length === 0 && options?.eventIndex !== undefined) {\n      void options.eventIndex;\n      void index;\n    }\n    out.push(...rows);\n  });\n  return out;\n}\n","import type { RedactionRule } from \"./types/log-config.js\";\n\n/**\n * Discriminator for what kind of work a {@link Step} represents.\n * `\"decision\"` captures agent branching/choices; other values cover runs, LLM calls, tools, and user-defined steps.\n */\nexport type StepType =\n  | \"run\"\n  | \"llm\"\n  | \"tool\"\n  | \"decision\"\n  | \"logic\"\n  | \"state\"\n  | \"custom\";\n\n/** Lifecycle state of a single {@link Step}. */\nexport type StepStatus = \"running\" | \"success\" | \"error\";\n\n/** Lifecycle state of an entire {@link Run}. */\nexport type RunStatus = \"running\" | \"success\" | \"error\";\n\n/** Structured error attached to a run or step when status is `\"error\"`. */\nexport interface ErrorInfo {\n  message: string;\n  stack?: string;\n}\n\n/**\n * Optional token counts for a step (e.g. LLM usage).\n * Reserved for future roadmap; MVP does not compute or persist token usage.\n */\nexport interface TokenMetadata {\n  input?: number;\n  output?: number;\n  total?: number;\n  /** Cache-read tokens (informational; never added to total). */\n  cached?: number;\n  /** Cache-write / cache-creation tokens (informational). */\n  cacheWrite?: number;\n  /** Reasoning / thinking tokens when reported separately. */\n  reasoning?: number;\n}\n\n/** Arbitrary structured fields for a step; safe extensions use string keys. */\nexport interface StepMetadata {\n  model?: string;\n  toolName?: string;\n  tokens?: TokenMetadata;\n  retryCount?: number;\n  [key: string]: unknown;\n}\n\n/**\n * One traced agent run (root of an execution tree).\n * MVP intentionally omits `input` / `output` on the run to limit PII, secrets, and serialization risk.\n */\nexport interface Run {\n  id: string;\n  name: string;\n  status: RunStatus;\n  startTime: number;\n  endTime?: number;\n  durationMs?: number;\n  error?: ErrorInfo;\n  metadata?: Record<string, unknown>;\n}\n\n/**\n * One node in the execution tree under a {@link Run}.\n * MVP intentionally omits `input` / `output`; capture/redaction may come in a later version.\n */\nexport interface Step {\n  id: string;\n  runId: string;\n  parentId?: string;\n  name: string;\n  type: StepType;\n  status: StepStatus;\n  startTime: number;\n  endTime?: number;\n  durationMs?: number;\n  error?: ErrorInfo;\n  metadata?: StepMetadata;\n}\n\n/** Version of the JSONL trace line schema consumed by AgentInspect tooling. */\nexport type TraceSchemaVersion = \"0.1\";\n\n/**\n * Status for lightweight trace metadata extraction.\n * `\"unknown\"` means the file contained valid events but a run status could not be determined safely.\n */\nexport type TraceMetadataStatus = \"success\" | \"error\" | \"running\" | \"unknown\";\n\nexport interface TraceMetadata {\n  runId: string;\n  name?: string;\n  status: TraceMetadataStatus;\n  startedAt?: number;\n  endedAt?: number;\n  durationMs?: number;\n  eventCount: number;\n  filePath: string;\n  fileSize: number;\n  createdAt: Date;\n}\n\nexport interface RunSummary {\n  runId: string;\n  name?: string;\n  status: TraceMetadataStatus;\n  durationMs?: number;\n  totalSteps: number;\n  llmSteps: number;\n  toolSteps: number;\n  logicSteps: number;\n  errorSteps: number;\n  maxDepth: number;\n  longestStep?: {\n    name: string;\n    durationMs: number;\n    type: string;\n  };\n  totalTokens?: {\n    input: number;\n    output: number;\n    /** Present only when every token-bearing step has a supplied or derivable total. */\n    total?: number;\n    /** Sum of supplied cached counts; cached is not added to total. */\n    cached?: number;\n    /** Sum of cache-write / cache-creation counts; not added to total. */\n    cacheWrite?: number;\n    /** Sum of reasoning token counts; not added to total. */\n    reasoning?: number;\n  };\n}\n\n/** Fields shared by every persisted trace event line. */\nexport interface TraceEventBase {\n  schemaVersion: TraceSchemaVersion;\n  event: string;\n  timestamp: number;\n}\n\n/** Emitted when a run begins. */\nexport interface RunStartedEvent extends TraceEventBase {\n  event: \"run_started\";\n  runId: string;\n  name: string;\n  startTime: number;\n  metadata?: Record<string, unknown>;\n}\n\n/** Emitted when a run finishes successfully or with an error. */\nexport interface RunCompletedEvent extends TraceEventBase {\n  event: \"run_completed\";\n  runId: string;\n  status: \"success\" | \"error\";\n  endTime: number;\n  durationMs: number;\n  error?: ErrorInfo;\n}\n\n/** Emitted when a step begins (including nested steps under `parentId`). */\nexport interface StepStartedEvent extends TraceEventBase {\n  event: \"step_started\";\n  runId: string;\n  stepId: string;\n  parentId?: string;\n  name: string;\n  type: StepType;\n  startTime: number;\n  metadata?: StepMetadata;\n}\n\n/**\n * Emitted when a step finishes (success or failure).\n * Failures use `status: \"error\"` and optional {@link ErrorInfo}; there is no separate `step_failed` event in MVP.\n */\nexport interface StepCompletedEvent extends TraceEventBase {\n  event: \"step_completed\";\n  runId: string;\n  stepId: string;\n  status: \"success\" | \"error\";\n  endTime: number;\n  durationMs: number;\n  error?: ErrorInfo;\n}\n\n/** Emitted when an external-world outcome is observed (v4.4+). */\nexport interface OutcomeObservedEvent extends TraceEventBase {\n  event: \"outcome_observed\";\n  runId: string;\n  outcomeId: string;\n  parentId?: string;\n  name: string;\n  expectation: string;\n  status: \"passed\" | \"failed\" | \"unknown\" | \"skipped\";\n  method?:\n    | \"dom\"\n    | \"accessibility\"\n    | \"snapshot\"\n    | \"network\"\n    | \"storage\"\n    | \"filesystem\"\n    | \"database\"\n    | \"queue\"\n    | \"custom\";\n  actual?: unknown;\n  evidence?: unknown;\n  observedAt: number;\n}\n\n/** Discriminated union of all MVP trace events written as JSONL lines. */\nexport type TraceEvent =\n  | RunStartedEvent\n  | RunCompletedEvent\n  | StepStartedEvent\n  | StepCompletedEvent\n  | OutcomeObservedEvent;\n\n/** Named redaction presets for trace writing and share-safe exports (v1.3.0+). */\nexport type RedactionProfile = \"local\" | \"share\" | \"strict\";\n\n/** Optional correlation fields for grouping and cross-run tracing (v1.3.0+). */\nexport interface TraceCorrelationMetadata {\n  correlationId?: string;\n  requestId?: string;\n  decisionId?: string;\n  groupId?: string;\n}\n\n/** Options for `inspectRun()` and `maybeInspectRun()`. */\nexport interface InspectRunOptions extends TraceCorrelationMetadata {\n  traceDir?: string;\n  silent?: boolean;\n  metadata?: Record<string, unknown>;\n  /**\n   * When `false`, runs `fn` with no trace file, no execution context, and no terminal output.\n   * Omitted or `true` preserves default tracing behavior.\n   */\n  enabled?: boolean;\n  /**\n   * Redact sensitive metadata keys before writing JSONL. Default `true` (conservative keys).\n   * Pass `false` to persist metadata as-is (explicit opt-out).\n   */\n  redact?: boolean | { rules?: RedactionRule[] };\n  /**\n   * Redaction preset for trace metadata. Default `local` (same keys as default redaction).\n   * `share` and `strict` add extra key-based redaction and tighter string bounds.\n   * Ignored when `redact: false`.\n   */\n  redactionProfile?: RedactionProfile;\n  /** Max UTF-8 bytes for a serialized trace event line. Default 65536. */\n  maxEventBytes?: number;\n  /** Max length for string metadata values (non-preview keys). Default 2000. */\n  maxMetadataValueLength?: number;\n  /** Max length for preview-like metadata keys (contains `preview`). Default 500. */\n  maxPreviewLength?: number;\n}\n\n/** Options passed when opening a logical step (implemented in a later step). */\nexport interface StepOptions {\n  type?: StepType;\n  metadata?: StepMetadata;\n}\n\n/** Options for `observe()` — same surface as {@link InspectRunOptions} in MVP. */\nexport type ObserveOptions = InspectRunOptions;\n\n/**\n * Resolved settings for the active run while tracing is enabled.\n * Populated by runtime code in a later step; defined here for `context.ts`.\n */\nexport interface ExecutionContext {\n  runId: string;\n  runName: string;\n  traceDir: string;\n  silent: boolean;\n  metadata?: Record<string, unknown>;\n}\n\n/** Stack position of the step currently executing (used by future context tracking). */\nexport interface ActiveStepContext {\n  stepId: string;\n  parentId?: string;\n  depth: number;\n}\n\nconst STEP_TYPES: readonly StepType[] = [\n  \"run\",\n  \"llm\",\n  \"tool\",\n  \"decision\",\n  \"logic\",\n  \"state\",\n  \"custom\",\n] as const;\n\nconst STEP_STATUSES: readonly StepStatus[] = [\n  \"running\",\n  \"success\",\n  \"error\",\n] as const;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/** Returns true if `value` is one of the MVP {@link StepType} literals. */\nexport function isStepType(value: unknown): value is StepType {\n  return (\n    typeof value === \"string\" &&\n    (STEP_TYPES as readonly string[]).includes(value)\n  );\n}\n\n/** Returns true if `value` is one of the MVP {@link StepStatus} literals. */\nexport function isStepStatus(value: unknown): value is StepStatus {\n  return (\n    typeof value === \"string\" &&\n    (STEP_STATUSES as readonly string[]).includes(value)\n  );\n}\n\n/**\n * Narrowing guard for a {@link TraceEvent} object with required MVP fields.\n * Does not deeply validate optional `metadata` shapes.\n */\nexport function isTraceEvent(value: unknown): value is TraceEvent {\n  if (!isRecord(value)) return false;\n  if (value.schemaVersion !== \"0.1\") return false;\n  if (typeof value.timestamp !== \"number\") return false;\n  if (typeof value.event !== \"string\") return false;\n\n  switch (value.event) {\n    case \"run_started\": {\n      return (\n        typeof value.runId === \"string\" &&\n        typeof value.name === \"string\" &&\n        typeof value.startTime === \"number\"\n      );\n    }\n    case \"run_completed\": {\n      return (\n        typeof value.runId === \"string\" &&\n        (value.status === \"success\" || value.status === \"error\") &&\n        typeof value.endTime === \"number\" &&\n        typeof value.durationMs === \"number\"\n      );\n    }\n    case \"step_started\": {\n      return (\n        typeof value.runId === \"string\" &&\n        typeof value.stepId === \"string\" &&\n        typeof value.name === \"string\" &&\n        isStepType(value.type) &&\n        typeof value.startTime === \"number\"\n      );\n    }\n    case \"step_completed\": {\n      return (\n        typeof value.runId === \"string\" &&\n        typeof value.stepId === \"string\" &&\n        (value.status === \"success\" || value.status === \"error\") &&\n        typeof value.endTime === \"number\" &&\n        typeof value.durationMs === \"number\"\n      );\n    }\n    case \"outcome_observed\": {\n      return (\n        typeof value.runId === \"string\" &&\n        typeof value.outcomeId === \"string\" &&\n        typeof value.name === \"string\" &&\n        typeof value.expectation === \"string\" &&\n        (value.status === \"passed\" ||\n          value.status === \"failed\" ||\n          value.status === \"unknown\" ||\n          value.status === \"skipped\") &&\n        typeof value.observedAt === \"number\"\n      );\n    }\n    default:\n      return false;\n  }\n}\n","import os from \"node:os\";\nimport path from \"node:path\";\n\nimport { nanoid } from \"nanoid\";\n\nimport { mkdirTraceDir } from \"./trace-filesystem.js\";\nimport type { ErrorInfo } from \"./types.js\";\nimport { formatDuration as formatDurationV2 } from \"./utils/duration.js\";\n\n/** Default folder under the user home for AgentInspect data. */\nexport const DEFAULT_TRACE_DIR_NAME = \".agent-inspect\";\n\n/** Subfolder where JSONL run traces are stored. */\nexport const RUNS_DIR_NAME = \"runs\";\n\n/** Writable trace root when the default home path cannot be used. */\nexport const FALLBACK_TRACE_DIR = path.join(\n  os.tmpdir(),\n  \"agent-inspect\",\n  RUNS_DIR_NAME,\n);\n\n/** Maximum display length for run/step names before truncation. */\nexport const MAX_NAME_LENGTH = 100;\n\n/** Returns `run_` + a 10-character nanoid segment. */\nexport function createRunId(): string {\n  return `run_${nanoid(10)}`;\n}\n\n/** Returns `step_` + a 10-character nanoid segment. */\nexport function createStepId(): string {\n  return `step_${nanoid(10)}`;\n}\n\n/** Formats a duration for CLI display (v0.2 rules). */\nexport function formatDuration(ms: number): string {\n  return formatDurationV2(ms);\n}\n\n/**\n * Formats a Unix timestamp (ms) as local `YYYY-MM-DD HH:mm:ss`.\n * Invalid values yield `\"Invalid date\"` (no throw).\n */\nexport function formatTimestamp(timestamp: number): string {\n  if (!Number.isFinite(timestamp)) {\n    return \"Invalid date\";\n  }\n  const d = new Date(timestamp);\n  if (Number.isNaN(d.getTime())) {\n    return \"Invalid date\";\n  }\n  const y = d.getFullYear();\n  const mo = String(d.getMonth() + 1).padStart(2, \"0\");\n  const day = String(d.getDate()).padStart(2, \"0\");\n  const h = String(d.getHours()).padStart(2, \"0\");\n  const min = String(d.getMinutes()).padStart(2, \"0\");\n  const s = String(d.getSeconds()).padStart(2, \"0\");\n  return `${y}-${mo}-${day} ${h}:${min}:${s}`;\n}\n\n/**\n * Default directory for trace files: `~/DEFAULT_TRACE_DIR_NAME/RUNS_DIR_NAME`.\n * Falls back to {@link FALLBACK_TRACE_DIR} when home cannot be resolved.\n */\nexport function getDefaultTraceDir(): string {\n  const envDir = process.env.AGENT_INSPECT_TRACE_DIR;\n  if (typeof envDir === \"string\" && envDir.trim() !== \"\") {\n    return envDir.trim();\n  }\n  try {\n    const home = os.homedir();\n    if (typeof home !== \"string\" || home.trim() === \"\") {\n      return FALLBACK_TRACE_DIR;\n    }\n    return path.join(home, DEFAULT_TRACE_DIR_NAME, RUNS_DIR_NAME);\n  } catch {\n    return FALLBACK_TRACE_DIR;\n  }\n}\n\n/**\n * Full path to the JSONL trace file for a run.\n * `runId` is passed through `path.basename` to avoid traversal; empty ids become `run_unknown`.\n */\nexport function getTraceFilePath(runId: string, traceDir?: string): string {\n  const baseDir = traceDir ?? getDefaultTraceDir();\n  let safeId =\n    typeof runId === \"string\" && runId.trim() !== \"\" ? runId.trim() : \"run_unknown\";\n  safeId = path.basename(safeId);\n  if (safeId === \"\" || safeId === \".\" || safeId === \"..\") {\n    safeId = \"run_unknown\";\n  }\n  return path.join(baseDir, `${safeId}.jsonl`);\n}\n\n/**\n * Ensures a trace directory exists (recursive). Tries {@link FALLBACK_TRACE_DIR} on failure.\n * Returns the directory path that callers should prefer: primary, fallback, or original if both mkdir attempts fail.\n * Emits concise `[AgentInspect]` warnings on failure; never throws.\n */\nexport async function ensureTraceDir(traceDir: string): Promise<string> {\n  const primary = path.resolve(traceDir);\n  try {\n    await mkdirTraceDir(primary);\n    return primary;\n  } catch {\n    warn(`Failed to create trace directory: ${primary}`);\n    const fallback = path.resolve(FALLBACK_TRACE_DIR);\n    try {\n      await mkdirTraceDir(fallback);\n      return fallback;\n    } catch {\n      warn(`Failed to create fallback trace directory: ${fallback}`);\n      return primary;\n    }\n  }\n}\n\n/**\n * Normalizes any thrown/caught value into {@link ErrorInfo}.\n * Never throws (circular structures and non-JSON values fall back to a generic message).\n */\nexport function formatError(error: unknown): ErrorInfo {\n  if (error instanceof Error) {\n    const out: ErrorInfo = { message: error.message };\n    if (typeof error.stack === \"string\" && error.stack.length > 0) {\n      out.stack = error.stack;\n    }\n    return out;\n  }\n  if (typeof error === \"string\") {\n    return { message: error };\n  }\n  if (error === null) {\n    return { message: \"Unknown error: null\" };\n  }\n  if (error === undefined) {\n    return { message: \"Unknown error: undefined\" };\n  }\n  if (\n    typeof error === \"number\" ||\n    typeof error === \"boolean\" ||\n    typeof error === \"bigint\"\n  ) {\n    return { message: String(error) };\n  }\n  if (typeof error === \"object\") {\n    try {\n      return { message: JSON.stringify(error) };\n    } catch {\n      return { message: \"Unknown error\" };\n    }\n  }\n  return { message: \"Unknown error\" };\n}\n\n/**\n * Truncates a display name to `maxLength`, appending `\"...\"` when shortened.\n * Empty or non-string input becomes `\"unnamed\"`.\n */\nexport function truncateName(name: string, maxLength = MAX_NAME_LENGTH): string {\n  if (typeof name !== \"string\" || name.trim() === \"\") {\n    return \"unnamed\";\n  }\n  const trimmed = name.trim();\n  if (trimmed.length <= maxLength) {\n    return trimmed;\n  }\n  const ellipsis = \"...\";\n  const head = Math.max(0, maxLength - ellipsis.length);\n  return `${trimmed.slice(0, head)}${ellipsis}`;\n}\n\n/**\n * Instrumentation-only warning to stderr. Not a general-purpose logger.\n * Optional `error` is summarized via {@link formatError} (message only).\n */\nexport function warn(message: string, error?: unknown): void {\n  const base = `[AgentInspect] ${message}`;\n  if (error === undefined) {\n    console.warn(base);\n    return;\n  }\n  console.warn(`${base}: ${formatError(error).message}`);\n}\n","import { persistedInspectEventToTraceEvents } from \"./persisted/to-trace-event.js\";\nimport { isPersistedInspectEvent } from \"./types/persisted-inspect-event.js\";\nimport type { PersistedInspectEvent } from \"./types/persisted-inspect-event.js\";\nimport { isTraceEvent } from \"./types.js\";\nimport type { TraceEvent } from \"./types.js\";\nimport { warn } from \"./utils.js\";\n\nexport type TraceJsonlFormat = \"0.1\" | \"0.2\" | \"1.0\" | \"mixed\" | \"empty\";\n\nexport type ParsedTraceJsonlRow =\n  | { format: \"0.1\"; event: TraceEvent; sourceLine: number }\n  | { format: \"0.2\"; event: PersistedInspectEvent; sourceLine: number }\n  | { format: \"1.0\"; event: PersistedInspectEvent; sourceLine: number };\n\nexport interface ParseTraceJsonlResult {\n  format: TraceJsonlFormat;\n  /** Count of valid source JSONL rows before any one-to-many normalization. */\n  sourceEventCount: number;\n  events: TraceEvent[];\n  persisted: PersistedInspectEvent[];\n  /** Valid source rows in JSONL order, before cross-version normalization. */\n  rows: ParsedTraceJsonlRow[];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction detectLineFormat(parsed: unknown): \"0.1\" | \"0.2\" | \"1.0\" | \"unknown\" {\n  if (!isRecord(parsed)) return \"unknown\";\n  if (parsed.schemaVersion === \"0.1\") return \"0.1\";\n  if (parsed.schemaVersion === \"0.2\") return \"0.2\";\n  if (parsed.schemaVersion === \"1.0\") return \"1.0\";\n  return \"unknown\";\n}\n\nexport interface ParseTraceJsonlOptions {\n  validate?: (value: unknown) => value is TraceEvent;\n  /** Emit parse warnings through the standard AgentInspect warning channel (default true). */\n  warnings?: boolean;\n}\n\n/**\n * Parses JSONL content into normalized v0.1 {@link TraceEvent} rows.\n * Accepts homogenous v0.1, v0.2, or v1.0 files; mixed files are converted with a warning.\n */\nexport function parseTraceJsonl(\n  raw: string,\n  options: ParseTraceJsonlOptions = {},\n): ParseTraceJsonlResult {\n  const validate = options.validate ?? isTraceEvent;\n  const emitWarning = (message: string): void => {\n    if (options.warnings !== false) warn(message);\n  };\n  const persisted: PersistedInspectEvent[] = [];\n  const traceEvents: TraceEvent[] = [];\n  const rows: ParsedTraceJsonlRow[] = [];\n  let sourceEventCount = 0;\n  let saw01 = false;\n  let saw02 = false;\n  let saw10 = false;\n  let lineNumber = 0;\n\n  for (const line of raw.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      emitWarning(\"Skipped invalid JSON line in trace file\");\n      continue;\n    }\n\n    const format = detectLineFormat(parsed);\n    if (format === \"0.1\") {\n      saw01 = true;\n      if (validate(parsed)) {\n        sourceEventCount += 1;\n        traceEvents.push(parsed);\n        rows.push({ format: \"0.1\", event: parsed, sourceLine: lineNumber });\n      } else {\n        emitWarning(\"Skipped invalid trace event line in trace file\");\n      }\n      continue;\n    }\n\n    if (format === \"0.2\" || format === \"1.0\") {\n      if (format === \"0.2\") saw02 = true;\n      else saw10 = true;\n      if (isPersistedInspectEvent(parsed)) {\n        sourceEventCount += 1;\n        persisted.push(parsed);\n        rows.push({ format, event: parsed, sourceLine: lineNumber });\n        traceEvents.push(...persistedInspectEventToTraceEvents(parsed));\n      } else {\n        emitWarning(\"Skipped invalid persisted inspect event line in trace file\");\n      }\n      continue;\n    }\n\n    emitWarning(\"Skipped trace line with unknown schemaVersion\");\n  }\n\n  const seenFormats = [saw01, saw02, saw10].filter(Boolean).length;\n  if (seenFormats > 1) {\n    emitWarning(\n      \"Trace file mixes AgentInspect schemaVersion rows; normalizing all rows\",\n    );\n  }\n\n  let format: TraceJsonlFormat = \"empty\";\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, sourceEventCount, events: traceEvents, persisted, rows };\n}\n\n/**\n * Returns a user-facing message when a trace file uses an unsupported schema version.\n */\nexport function unknownTraceFormatMessage(): string {\n  return (\n    \"Unsupported trace format. Expected schemaVersion 0.1 (TraceEvent), 0.2 (PersistedInspectEvent), or 1.0 (PersistedInspectEvent).\"\n  );\n}\n","import type { InspectRunOptions, TraceCorrelationMetadata } from \"./types.js\";\n\nexport const TRACE_CORRELATION_KEYS = [\n  \"correlationId\",\n  \"requestId\",\n  \"decisionId\",\n  \"groupId\",\n] as const satisfies readonly (keyof TraceCorrelationMetadata)[];\n\nfunction isNonEmptyString(value: unknown): value is string {\n  return typeof value === \"string\" && value.length > 0;\n}\n\n/** Extracts known correlation keys from a metadata record. */\nexport function extractCorrelationMetadata(\n  record: Record<string, unknown> | undefined,\n): TraceCorrelationMetadata | undefined {\n  if (!record) {\n    return undefined;\n  }\n\n  const out: TraceCorrelationMetadata = {};\n  let found = false;\n\n  for (const key of TRACE_CORRELATION_KEYS) {\n    const value = record[key];\n    if (isNonEmptyString(value)) {\n      out[key] = value;\n      found = true;\n    }\n  }\n\n  return found ? out : undefined;\n}\n\n/**\n * Builds `run_started` metadata from optional run metadata and top-level correlation fields.\n * Top-level correlation options override the same keys in `options.metadata`.\n */\nexport function buildRunStartedMetadata(\n  options?: Pick<\n    InspectRunOptions,\n    | \"metadata\"\n    | \"correlationId\"\n    | \"requestId\"\n    | \"decisionId\"\n    | \"groupId\"\n  >,\n): Record<string, unknown> | undefined {\n  if (!options) {\n    return undefined;\n  }\n\n  const merged: Record<string, unknown> =\n    options.metadata !== undefined ? { ...options.metadata } : {};\n\n  if (isNonEmptyString(options.correlationId)) {\n    merged.correlationId = options.correlationId;\n  }\n  if (isNonEmptyString(options.requestId)) {\n    merged.requestId = options.requestId;\n  }\n  if (isNonEmptyString(options.decisionId)) {\n    merged.decisionId = options.decisionId;\n  }\n  if (isNonEmptyString(options.groupId)) {\n    merged.groupId = options.groupId;\n  }\n\n  return Object.keys(merged).length > 0 ? merged : undefined;\n}\n","import type { PersistedTokenUsage } from \"../types/persisted-inspect-event.js\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction nonNegativeFinite(value: unknown): number | undefined {\n  return typeof value === \"number\" && Number.isFinite(value) && value >= 0\n    ? value\n    : undefined;\n}\n\n/**\n * Keeps the approved token vocabulary and derives total only when it is absent.\n * Cached / cache-write / reasoning tokens are informational and are never added to total.\n */\nexport function normalizeTokenUsage(\n  value: unknown,\n): PersistedTokenUsage | undefined {\n  if (!isRecord(value)) return undefined;\n\n  const input = nonNegativeFinite(value.input);\n  const output = nonNegativeFinite(value.output);\n  const suppliedTotal = nonNegativeFinite(value.total);\n  const cached = nonNegativeFinite(value.cached);\n  const cacheWrite = nonNegativeFinite(value.cacheWrite);\n  const reasoning = nonNegativeFinite(value.reasoning);\n  const derivedTotal =\n    input !== undefined && output !== undefined && Number.isFinite(input + output)\n      ? input + output\n      : undefined;\n  const total = suppliedTotal ?? derivedTotal;\n\n  if (\n    input === undefined &&\n    output === undefined &&\n    total === undefined &&\n    cached === undefined &&\n    cacheWrite === undefined &&\n    reasoning === undefined\n  ) {\n    return undefined;\n  }\n\n  return {\n    ...(input !== undefined ? { input } : {}),\n    ...(output !== undefined ? { output } : {}),\n    ...(total !== undefined ? { total } : {}),\n    ...(cached !== undefined ? { cached } : {}),\n    ...(cacheWrite !== undefined ? { cacheWrite } : {}),\n    ...(reasoning !== undefined ? { reasoning } : {}),\n  };\n}\n","import { extractCorrelationMetadata } from \"../correlation-metadata.js\";\nimport type { InspectKind } from \"../types/inspect-event.js\";\nimport type {\n  ErrorInfo,\n  StepMetadata,\n  StepType,\n  TraceEvent,\n} from \"../types.js\";\nimport type {\n  PersistedEventSource,\n  PersistedEventStatus,\n  PersistedInspectError,\n  PersistedInspectEvent,\n  PersistedTokenUsage,\n} from \"../types/persisted-inspect-event.js\";\nimport { normalizeTokenUsage } from \"./token-usage.js\";\n\nexport interface TraceEventToPersistedOptions {\n  /**\n   * Stable index within the source event list.\n   * Used only to make synthetic eventId deterministic when v0.1 has no eventId.\n   */\n  eventIndex?: number;\n\n  /**\n   * Optional source name override.\n   * Default: \"trace-event\"\n   */\n  sourceName?: string;\n\n  /**\n   * Optional source version override.\n   * Default: \"0.1\"\n   */\n  sourceVersion?: string;\n}\n\nfunction sanitizeIdPart(value: string): string {\n  return value.replace(/[^a-zA-Z0-9_-]/g, \"_\");\n}\n\nfunction nodeIdForEvent(event: TraceEvent): string {\n  switch (event.event) {\n    case \"run_started\":\n    case \"run_completed\":\n      return event.runId;\n    case \"step_started\":\n    case \"step_completed\":\n      return event.stepId;\n    case \"outcome_observed\":\n      return event.outcomeId;\n    default:\n      return \"unknown\";\n  }\n}\n\nfunction createPersistedEventId(event: TraceEvent, eventIndex: number): string {\n  const runId = sanitizeIdPart(event.runId);\n  const ev = sanitizeIdPart(event.event);\n  const node = sanitizeIdPart(nodeIdForEvent(event));\n  return `manual:${runId}:${ev}:${node}:${eventIndex}`;\n}\n\nfunction toIsoTimestamp(\n  ms: number,\n): { iso: string; invalidTimestamp: boolean } {\n  if (typeof ms !== \"number\" || !Number.isFinite(ms)) {\n    return { iso: new Date(0).toISOString(), invalidTimestamp: true };\n  }\n  return { iso: new Date(ms).toISOString(), invalidTimestamp: false };\n}\n\nfunction buildSource(options?: TraceEventToPersistedOptions): PersistedEventSource {\n  return {\n    type: \"manual\",\n    name: options?.sourceName ?? \"trace-event\",\n    version: options?.sourceVersion ?? \"0.1\",\n  };\n}\n\nfunction mapStepTypeToInspectKind(type: StepType): InspectKind {\n  switch (type) {\n    case \"run\":\n      return \"RUN\";\n    case \"llm\":\n      return \"LLM\";\n    case \"tool\":\n      return \"TOOL\";\n    case \"decision\":\n      return \"DECISION\";\n    case \"logic\":\n    case \"state\":\n    case \"custom\":\n      return \"LOGIC\";\n    default:\n      return \"LOGIC\";\n  }\n}\n\nfunction mapRunOrStepStatus(\n  status: \"success\" | \"error\",\n): PersistedEventStatus {\n  return status === \"success\" ? \"ok\" : \"error\";\n}\n\nfunction mapErrorInfo(\n  error: ErrorInfo | undefined,\n): {\n  persisted?: PersistedInspectError;\n  errorStack?: string;\n} {\n  if (!error?.message) {\n    return {};\n  }\n  const out: {\n    persisted: PersistedInspectError;\n    errorStack?: string;\n  } = {\n    persisted: {\n      message: error.message,\n      name: \"Error\",\n    },\n  };\n  if (typeof error.stack === \"string\" && error.stack.length > 0) {\n    out.errorStack = error.stack;\n  }\n  return out;\n}\n\nfunction mapTokenUsageFromMetadata(\n  metadata: StepMetadata | undefined,\n): PersistedTokenUsage | undefined {\n  return normalizeTokenUsage(metadata?.tokens);\n}\n\nfunction compactAttributes(\n  entries: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n  const out: Record<string, unknown> = {};\n  for (const [key, value] of Object.entries(entries)) {\n    if (value !== undefined) {\n      out[key] = value;\n    }\n  }\n  return Object.keys(out).length > 0 ? out : undefined;\n}\n\n/**\n * Maps one v0.1 {@link TraceEvent} to a v0.2 {@link PersistedInspectEvent}.\n * Does not mutate `event`.\n */\nexport function traceEventToPersistedInspectEvent(\n  event: TraceEvent,\n  options?: TraceEventToPersistedOptions,\n): PersistedInspectEvent {\n  const eventIndex = options?.eventIndex ?? 0;\n  const eventId = createPersistedEventId(event, eventIndex);\n  const source = buildSource(options);\n  const tsMain = toIsoTimestamp(event.timestamp);\n\n  switch (event.event) {\n    case \"run_started\": {\n      const tsStart = toIsoTimestamp(event.startTime);\n      const correlation = extractCorrelationMetadata(event.metadata);\n      const attributes = compactAttributes({\n        legacyEvent: \"run_started\",\n        metadata:\n          event.metadata !== undefined ? { ...event.metadata } : undefined,\n        correlationId: correlation?.correlationId,\n        requestId: correlation?.requestId,\n        decisionId: correlation?.decisionId,\n        groupId: correlation?.groupId,\n        invalidTimestamp:\n          tsMain.invalidTimestamp || tsStart.invalidTimestamp ? true : undefined,\n      });\n\n      return {\n        schemaVersion: \"0.2\",\n        eventId,\n        runId: event.runId,\n        kind: \"RUN\",\n        name: event.name,\n        status: \"running\",\n        timestamp: tsMain.iso,\n        startedAt: tsStart.iso,\n        confidence: \"explicit\",\n        source,\n        attributes,\n      };\n    }\n\n    case \"run_completed\": {\n      const tsEnd = toIsoTimestamp(event.endTime);\n      const { persisted: error, errorStack } = mapErrorInfo(event.error);\n      const attributes = compactAttributes({\n        legacyEvent: \"run_completed\",\n        errorStack,\n        invalidTimestamp:\n          tsMain.invalidTimestamp || tsEnd.invalidTimestamp ? true : undefined,\n      });\n\n      return {\n        schemaVersion: \"0.2\",\n        eventId,\n        runId: event.runId,\n        kind: \"RUN\",\n        name: \"run\",\n        status: mapRunOrStepStatus(event.status),\n        timestamp: tsMain.iso,\n        endedAt: tsEnd.iso,\n        durationMs: event.durationMs,\n        confidence: \"explicit\",\n        source,\n        attributes,\n        error,\n      };\n    }\n\n    case \"step_started\": {\n      const tsStart = toIsoTimestamp(event.startTime);\n      const tokenUsage = mapTokenUsageFromMetadata(event.metadata);\n      const attributes = compactAttributes({\n        legacyEvent: \"step_started\",\n        stepId: event.stepId,\n        stepType: event.type,\n        metadata:\n          event.metadata !== undefined ? { ...event.metadata } : undefined,\n        invalidTimestamp:\n          tsMain.invalidTimestamp || tsStart.invalidTimestamp ? true : undefined,\n      });\n\n      const out: PersistedInspectEvent = {\n        schemaVersion: \"0.2\",\n        eventId,\n        runId: event.runId,\n        kind: mapStepTypeToInspectKind(event.type),\n        name: event.name,\n        status: \"running\",\n        timestamp: tsMain.iso,\n        startedAt: tsStart.iso,\n        confidence: \"explicit\",\n        source,\n        attributes,\n      };\n      if (event.parentId !== undefined) {\n        out.parentId = event.parentId;\n      }\n      if (tokenUsage !== undefined) {\n        out.tokenUsage = tokenUsage;\n      }\n      return out;\n    }\n\n    case \"step_completed\": {\n      const tsEnd = toIsoTimestamp(event.endTime);\n      const { persisted: error, errorStack } = mapErrorInfo(event.error);\n      const attributes = compactAttributes({\n        legacyEvent: \"step_completed\",\n        stepId: event.stepId,\n        errorStack,\n        invalidTimestamp:\n          tsMain.invalidTimestamp || tsEnd.invalidTimestamp ? true : undefined,\n      });\n\n      return {\n        schemaVersion: \"0.2\",\n        eventId,\n        runId: event.runId,\n        kind: \"LOGIC\",\n        name: event.stepId,\n        status: mapRunOrStepStatus(event.status),\n        timestamp: tsMain.iso,\n        endedAt: tsEnd.iso,\n        durationMs: event.durationMs,\n        confidence: \"explicit\",\n        source,\n        attributes,\n        error,\n      };\n    }\n\n    case \"outcome_observed\": {\n      const tsObserved = toIsoTimestamp(event.observedAt);\n      const attributes = compactAttributes({\n        legacyEvent: \"outcome_observed\",\n        outcomeId: event.outcomeId,\n        outcomeStatus: event.status,\n        expectation: event.expectation,\n        method: event.method,\n        actual: event.actual,\n        evidence: event.evidence,\n        observedAt: tsObserved.iso,\n        invalidTimestamp:\n          tsMain.invalidTimestamp || tsObserved.invalidTimestamp ? true : undefined,\n      });\n\n      const out: PersistedInspectEvent = {\n        schemaVersion: \"0.2\",\n        eventId,\n        runId: event.runId,\n        kind: \"OUTCOME\",\n        name: event.name,\n        status: event.status === \"failed\" ? \"error\" : \"ok\",\n        timestamp: tsMain.iso,\n        confidence: \"explicit\",\n        source,\n        attributes,\n      };\n      if (event.parentId !== undefined) {\n        out.parentId = event.parentId;\n      }\n      if (event.actual !== undefined) {\n        out.outputSummary = event.actual;\n      }\n      return out;\n    }\n\n    default: {\n      const _exhaustive: never = event;\n      throw new Error(`Unsupported trace event: ${(_exhaustive as TraceEvent).event}`);\n    }\n  }\n}\n\n/**\n * Maps a v0.1 trace event list to persisted v0.2 events (one output per input).\n */\nexport function traceEventsToPersistedInspectEvents(\n  events: readonly TraceEvent[],\n  options?: Omit<TraceEventToPersistedOptions, \"eventIndex\">,\n): PersistedInspectEvent[] {\n  return events.map((event, index) =>\n    traceEventToPersistedInspectEvent(event, { ...options, eventIndex: index }),\n  );\n}\n","import type {\n  InspectEvent,\n  InspectNode,\n  InspectRunTree,\n  RelationshipSummary,\n} from \"../types/inspect-event.js\";\nimport type { LogIngestConfig } from \"../types/log-config.js\";\n\nexport interface TreeBuilderOptions {\n  config?: LogIngestConfig;\n}\n\nfunction inc<T extends string>(map: Record<T, number>, key: T): void {\n  map[key] = (map[key] ?? 0) + 1;\n}\n\nfunction confidenceRank(confidence: InspectEvent[\"confidence\"]): number {\n  switch (confidence) {\n    case \"unknown\":\n      return 0;\n    case \"heuristic\":\n      return 1;\n    case \"correlated\":\n      return 2;\n    case \"explicit\":\n      return 3;\n    default:\n      return 0;\n  }\n}\n\nfunction computeRunStatus(events: InspectEvent[]): InspectRunTree[\"status\"] {\n  // Derive the run status from the RUN node lifecycle, matching\n  // manualTraceEventsToRunTree and extractMetadata: a run is \"running\" only\n  // until its RUN completion is recorded. The v0.1 bridge writes each node as a\n  // \"started\" event (status \"running\") followed by a \"completed\" event, so a\n  // finished run still carries \"running\" started rows; those must not force the\n  // whole run back to \"running\". Events arrive timestamp-sorted, so the last\n  // terminal RUN status wins.\n  let runTerminal: \"ok\" | \"error\" | undefined;\n  let sawRunEvent = false;\n  for (const e of events) {\n    if (e.kind !== \"RUN\") continue;\n    sawRunEvent = true;\n    if (e.status === \"ok\" || e.status === \"error\") {\n      runTerminal = e.status;\n    }\n  }\n  if (sawRunEvent) {\n    return runTerminal ?? \"running\";\n  }\n\n  // Fallback for traces with no RUN node (e.g. log-only ingestion).\n  let hasRunning = false;\n  for (const e of events) {\n    if (e.status === \"error\") return \"error\";\n    if (e.status === \"running\") hasRunning = true;\n  }\n  return hasRunning ? \"running\" : \"ok\";\n}\n\ninterface PendingEdge {\n  childId: string;\n  parentId: string;\n  childTimestamp: number;\n  childConfidence: InspectEvent[\"confidence\"];\n}\n\n/**\n * Link children to parents without self-edges or cycles. Broken edges become roots.\n */\nexport function linkNodesVisibilityFirst(\n  nodes: Map<string, InspectNode>,\n): { roots: InspectNode[]; summary: RelationshipSummary } {\n  let selfParentCount = 0;\n  let unresolvedParentCount = 0;\n  let normalizedEdgeCount = 0;\n  let cycleCount = 0;\n\n  const pending: PendingEdge[] = [];\n  for (const node of nodes.values()) {\n    const parentId = node.event.parentId;\n    if (!parentId) continue;\n    if (parentId === node.event.eventId) {\n      selfParentCount += 1;\n      normalizedEdgeCount += 1;\n      continue;\n    }\n    if (!nodes.has(parentId)) {\n      unresolvedParentCount += 1;\n      continue;\n    }\n    pending.push({\n      childId: node.event.eventId,\n      parentId,\n      childTimestamp: node.event.timestamp,\n      childConfidence: node.event.confidence,\n    });\n  }\n\n  // Prefer keeping higher-confidence / earlier edges; break the weakest last edge in a cycle.\n  pending.sort((a, b) => {\n    const conf = confidenceRank(b.childConfidence) - confidenceRank(a.childConfidence);\n    if (conf !== 0) return conf;\n    return a.childTimestamp - b.childTimestamp;\n  });\n\n  const parentOf = new Map<string, string>();\n  for (const edge of pending) {\n    parentOf.set(edge.childId, edge.parentId);\n    // Detect if accepting this edge creates a cycle (walk from parent toward roots).\n    let cursor: string | undefined = edge.parentId;\n    const seen = new Set<string>([edge.childId]);\n    let cyclic = false;\n    while (cursor) {\n      if (seen.has(cursor)) {\n        cyclic = true;\n        break;\n      }\n      seen.add(cursor);\n      cursor = parentOf.get(cursor);\n    }\n    if (cyclic) {\n      parentOf.delete(edge.childId);\n      cycleCount += 1;\n      normalizedEdgeCount += 1;\n    }\n  }\n\n  for (const [childId, parentId] of parentOf) {\n    nodes.get(parentId)!.children.push(nodes.get(childId)!);\n  }\n\n  const roots: InspectNode[] = [];\n  for (const node of nodes.values()) {\n    if (!parentOf.has(node.event.eventId)) {\n      roots.push(node);\n    }\n  }\n\n  const assignDepth = (n: InspectNode, depth: number, stack: Set<string>) => {\n    if (stack.has(n.event.eventId)) return;\n    n.depth = depth;\n    stack.add(n.event.eventId);\n    for (const c of n.children) assignDepth(c, depth + 1, stack);\n    stack.delete(n.event.eventId);\n  };\n  for (const r of roots) assignDepth(r, 0, new Set());\n\n  return {\n    roots,\n    summary: {\n      rootCount: roots.length,\n      selfParentCount,\n      cycleCount,\n      unresolvedParentCount,\n      normalizedEdgeCount,\n    },\n  };\n}\n\nexport class TreeBuilder {\n  constructor(options?: TreeBuilderOptions) {\n    void options?.config;\n  }\n\n  build(events: InspectEvent[]): InspectRunTree[] {\n    const byRun = new Map<string, InspectEvent[]>();\n    for (const e of events) {\n      if (!byRun.has(e.runId)) byRun.set(e.runId, []);\n      byRun.get(e.runId)!.push(e);\n    }\n\n    const out: InspectRunTree[] = [];\n    for (const [runId, runEvents] of byRun.entries()) {\n      const sorted = [...runEvents].sort((a, b) => a.timestamp - b.timestamp);\n\n      const nodes = new Map<string, InspectNode>();\n      for (const e of sorted) {\n        nodes.set(e.eventId, { event: e, children: [], depth: 0 });\n      }\n\n      const { roots, summary } = linkNodesVisibilityFirst(nodes);\n\n      // metadata\n      const confidenceBreakdown = {\n        explicit: 0,\n        correlated: 0,\n        heuristic: 0,\n        unknown: 0,\n      } as Record<InspectEvent[\"confidence\"], number>;\n      const kinds = {} as Record<InspectEvent[\"kind\"], number>;\n      for (const e of sorted) {\n        inc(confidenceBreakdown, e.confidence);\n        (kinds as any)[e.kind] = ((kinds as any)[e.kind] ?? 0) + 1;\n      }\n\n      const startedAt = sorted.length > 0 ? sorted[0]!.timestamp : undefined;\n      const endedAt = sorted.length > 0 ? sorted[sorted.length - 1]!.timestamp : undefined;\n      const status = computeRunStatus(sorted);\n      const durationMs =\n        startedAt !== undefined &&\n        endedAt !== undefined &&\n        Number.isFinite(startedAt) &&\n        Number.isFinite(endedAt) &&\n        endedAt >= startedAt &&\n        status !== \"running\"\n          ? endedAt - startedAt\n          : undefined;\n\n      const name = sorted.find((e) => e.kind === \"RUN\")?.name;\n\n      out.push({\n        runId,\n        name,\n        status,\n        startedAt,\n        endedAt: status === \"running\" ? undefined : endedAt,\n        durationMs,\n        children: roots,\n        metadata: {\n          totalEvents: sorted.length,\n          confidenceBreakdown,\n          kinds,\n          relationshipSummary: summary,\n        },\n      });\n    }\n\n    // newest first for stable display\n    out.sort((a, b) => (b.startedAt ?? 0) - (a.startedAt ?? 0));\n    return out;\n  }\n}\n","import type { EventSource, InspectEvent } from \"../types/inspect-event.js\";\nimport {\n  isPersistedInspectEvent,\n  type PersistedEventSourceType,\n  type PersistedInspectEvent,\n} from \"../types/persisted-inspect-event.js\";\n\nexport interface PersistedToInspectEventOptions {\n  /**\n   * If true, invalid persisted events are skipped by batch conversion.\n   * If false or omitted, invalid events throw.\n   */\n  skipInvalid?: boolean;\n}\n\nfunction compactAttributes(\n  entries: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n  const out: Record<string, unknown> = {};\n  for (const [key, value] of Object.entries(entries)) {\n    if (value !== undefined) {\n      out[key] = value;\n    }\n  }\n  return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction parseIsoToMs(iso: string): { ms: number; invalidTimestamp: boolean } {\n  const parsed = Date.parse(iso);\n  if (!Number.isFinite(parsed)) {\n    return { ms: 0, invalidTimestamp: true };\n  }\n  return { ms: parsed, invalidTimestamp: false };\n}\n\nfunction mapPersistedSourceToInspect(\n  event: PersistedInspectEvent,\n): EventSource {\n  const attrs = event.attributes ?? {};\n  const sourceName = event.source.name;\n\n  if (sourceName === \"pino\") {\n    return {\n      type: \"pino\",\n      file: typeof attrs.sourceFile === \"string\" ? attrs.sourceFile : undefined,\n      line: typeof attrs.sourceLine === \"number\" ? attrs.sourceLine : undefined,\n    };\n  }\n  if (sourceName === \"winston\") {\n    return {\n      type: \"winston\",\n      file: typeof attrs.sourceFile === \"string\" ? attrs.sourceFile : undefined,\n      line: typeof attrs.sourceLine === \"number\" ? attrs.sourceLine : undefined,\n    };\n  }\n\n  const mapType = (t: PersistedEventSourceType): EventSource[\"type\"] => {\n    switch (t) {\n      case \"manual\":\n        return \"manual\";\n      case \"json-log\":\n        return \"json-log\";\n      case \"log4js\":\n        return \"log4js\";\n      case \"adapter\":\n      case \"ai-sdk\":\n      case \"otel\":\n        return \"adapter\";\n      default:\n        return \"json-log\";\n    }\n  };\n\n  return {\n    type: mapType(event.source.type),\n    file: typeof attrs.sourceFile === \"string\" ? attrs.sourceFile : undefined,\n    line: typeof attrs.sourceLine === \"number\" ? attrs.sourceLine : undefined,\n  };\n}\n\nfunction buildInspectAttributes(event: PersistedInspectEvent): Record<string, unknown> {\n  const attrs =\n    event.attributes !== undefined ? { ...event.attributes } : {};\n\n  if (event.inputSummary !== undefined) {\n    attrs.inputSummary = event.inputSummary;\n  }\n  if (event.outputSummary !== undefined) {\n    attrs.outputSummary = event.outputSummary;\n  }\n\n  if (event.error) {\n    if (event.error.name !== undefined) {\n      attrs.errorName = event.error.name;\n    }\n    attrs.errorMessage = event.error.message;\n    if (event.error.code !== undefined) {\n      attrs.errorCode = event.error.code;\n    }\n  }\n\n  if (event.tokenUsage) {\n    attrs.tokens = { ...event.tokenUsage };\n  }\n\n  if (event.source.type === \"ai-sdk\" || event.source.type === \"otel\") {\n    attrs.originalSourceType = event.source.type;\n  }\n\n  if (event.source.name !== undefined) {\n    attrs.sourceName = event.source.name;\n  }\n  if (event.source.version !== undefined) {\n    attrs.sourceVersion = event.source.version;\n  }\n\n  return attrs;\n}\n\n/**\n * Maps one v0.2 {@link PersistedInspectEvent} to in-memory {@link InspectEvent}.\n * Throws if `event` fails {@link isPersistedInspectEvent}.\n */\nexport function persistedInspectEventToInspectEvent(\n  event: PersistedInspectEvent,\n): InspectEvent {\n  if (!isPersistedInspectEvent(event)) {\n    throw new Error(\"Invalid PersistedInspectEvent: failed isPersistedInspectEvent\");\n  }\n\n  const ts = parseIsoToMs(event.timestamp);\n  const attrs = buildInspectAttributes(event);\n  if (ts.invalidTimestamp) {\n    attrs.invalidTimestamp = true;\n  }\n\n  let status: InspectEvent[\"status\"] | undefined;\n  if (\n    event.status === \"running\" ||\n    event.status === \"ok\" ||\n    event.status === \"error\"\n  ) {\n    status = event.status;\n  } else if (event.status === \"unknown\") {\n    attrs.persistedStatus = \"unknown\";\n  }\n\n  const out: InspectEvent = {\n    eventId: event.eventId,\n    runId: event.runId,\n    name: event.name,\n    kind: event.kind,\n    timestamp: ts.ms,\n    confidence: event.confidence,\n    source: mapPersistedSourceToInspect(event),\n    attributes: compactAttributes(attrs),\n  };\n\n  if (event.parentId !== undefined) {\n    out.parentId = event.parentId;\n  }\n  if (status !== undefined) {\n    out.status = status;\n  }\n  if (\n    event.durationMs !== undefined &&\n    Number.isFinite(event.durationMs) &&\n    event.durationMs >= 0\n  ) {\n    out.durationMs = event.durationMs;\n  }\n  if (event.startedAt !== undefined) {\n    const started = parseIsoToMs(event.startedAt);\n    if (!started.invalidTimestamp) {\n      attrs.startedAtMs = started.ms;\n      // Prefer real start instant for span timing when timestamp alone is completion-skewed.\n      out.timestamp = started.ms;\n    }\n  }\n  if (event.endedAt !== undefined) {\n    const ended = parseIsoToMs(event.endedAt);\n    if (!ended.invalidTimestamp) {\n      attrs.endedAtMs = ended.ms;\n      if (\n        out.durationMs === undefined &&\n        typeof attrs.startedAtMs === \"number\" &&\n        ended.ms >= attrs.startedAtMs\n      ) {\n        out.durationMs = ended.ms - attrs.startedAtMs;\n      }\n    }\n  }\n  out.attributes = compactAttributes(attrs);\n\n  return out;\n}\n\n/**\n * Maps persisted v0.2 events to in-memory {@link InspectEvent} rows.\n */\nexport function persistedInspectEventsToInspectEvents(\n  events: readonly PersistedInspectEvent[],\n  options?: PersistedToInspectEventOptions,\n): InspectEvent[] {\n  const skipInvalid = options?.skipInvalid === true;\n  const out: InspectEvent[] = [];\n\n  for (const event of events) {\n    if (!isPersistedInspectEvent(event)) {\n      if (skipInvalid) {\n        continue;\n      }\n      throw new Error(\"Invalid PersistedInspectEvent: failed isPersistedInspectEvent\");\n    }\n    out.push(persistedInspectEventToInspectEvent(event));\n  }\n\n  return out;\n}\n","import { TreeBuilder } from \"../logs/tree-builder.js\";\nimport type { InspectRunTree } from \"../types/inspect-event.js\";\nimport type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport type { TraceEvent } from \"../types.js\";\n\nimport { traceEventsToPersistedInspectEvents } from \"./from-trace-event.js\";\nimport { persistedInspectEventsToInspectEvents } from \"./to-inspect-event.js\";\n\nexport interface PersistedTreeBridgeOptions {\n  /**\n   * If true, invalid persisted events are skipped.\n   * If false or omitted, invalid persisted events throw.\n   */\n  skipInvalid?: boolean;\n}\n\n/**\n * Builds {@link InspectRunTree} rows from v0.2 {@link PersistedInspectEvent} input.\n * Uses {@link TreeBuilder} as the canonical tree builder. Does not mutate `events`.\n */\nexport function persistedInspectEventsToRunTrees(\n  events: readonly PersistedInspectEvent[],\n  options?: PersistedTreeBridgeOptions,\n): InspectRunTree[] {\n  const inspectEvents = persistedInspectEventsToInspectEvents(events, {\n    skipInvalid: options?.skipInvalid,\n  });\n  return new TreeBuilder().build(inspectEvents);\n}\n\n/**\n * Builds {@link InspectRunTree} rows from legacy v0.1 {@link TraceEvent} input\n * via the persisted-event model. Does not mutate `events`.\n */\nexport function traceEventsToPersistedRunTrees(\n  events: readonly TraceEvent[],\n): InspectRunTree[] {\n  const persisted = traceEventsToPersistedInspectEvents(events);\n  return persistedInspectEventsToRunTrees(persisted);\n}\n","/**\n * Stable programmatic diagnostic codes for readers / TraceFacts / TraceContract.\n *\n * Lowercase `TraceReadError.code` values remain the published reader error codes.\n * These `AI_*` identifiers appear in messages and catalogs for actionable remediation.\n *\n * @experimental Additive in 6.15.0; do not replace published lowercase reader codes.\n */\n\nexport type ProgrammaticDiagnosticCode =\n  | \"AI_TRACE_INPUT_INVALID\"\n  | \"AI_TRACE_FORMAT_UNSUPPORTED\"\n  | \"AI_TRACE_FORMAT_AMBIGUOUS\"\n  | \"AI_TRACE_FACTS_INPUT_NOT_NORMALIZED\"\n  | \"AI_TRACE_CONTRACT_RUN_SELECTION_REQUIRED\"\n  | \"AI_TRACE_RELATIONSHIP_SELF_PARENT\"\n  | \"AI_TRACE_RELATIONSHIP_CYCLE\";\n\nexport interface ProgrammaticDiagnosticSpec {\n  readonly code: ProgrammaticDiagnosticCode;\n  /** Short problem statement (without the code prefix). */\n  readonly summary: string;\n  /** Actionable remediation hint (always included in formatted messages). */\n  readonly remediation: string;\n  /** Related published / capture codes that must remain valid. */\n  readonly relatedCodes?: readonly string[];\n}\n\nexport const PROGRAMMATIC_DIAGNOSTIC_SPECS: Readonly<\n  Record<ProgrammaticDiagnosticCode, ProgrammaticDiagnosticSpec>\n> = Object.freeze({\n  AI_TRACE_INPUT_INVALID: {\n    code: \"AI_TRACE_INPUT_INVALID\",\n    summary:\n      'Expected { type: \"file\", path }, { type: \"directory\", path }, { type: \"string\", content }, { type: \"buffer\", content }, or { type: \"stdin\" }.',\n    remediation: \"For a file path, use openTraceFile(path).\",\n    relatedCodes: [\"invalid_input\"],\n  },\n  AI_TRACE_FORMAT_UNSUPPORTED: {\n    code: \"AI_TRACE_FORMAT_UNSUPPORTED\",\n    summary: \"No trace reader could detect the input format.\",\n    remediation:\n      \"Pass an AgentInspect JSONL file via openTraceFile, or set options.format to a registered reader.\",\n    relatedCodes: [\"unsupported_format\"],\n  },\n  AI_TRACE_FORMAT_AMBIGUOUS: {\n    code: \"AI_TRACE_FORMAT_AMBIGUOUS\",\n    summary: \"Multiple trace readers matched the input with equal confidence.\",\n    remediation: \"Set options.format explicitly to disambiguate the reader.\",\n    relatedCodes: [\"ambiguous_format\"],\n  },\n  AI_TRACE_FACTS_INPUT_NOT_NORMALIZED: {\n    code: \"AI_TRACE_FACTS_INPUT_NOT_NORMALIZED\",\n    summary: \"TraceFacts requires TraceReadResult or PersistedInspectEvent[].\",\n    remediation: \"Use openTraceFile() to normalize a JSONL trace first.\",\n  },\n  AI_TRACE_CONTRACT_RUN_SELECTION_REQUIRED: {\n    code: \"AI_TRACE_CONTRACT_RUN_SELECTION_REQUIRED\",\n    summary: \"Multiple runs are available; select a run before executing checks.\",\n    remediation: \"Pass options.runId or TraceCheckInput.selectedRun.\",\n    relatedCodes: [\"AI_CHECK_RUN_SELECTION_REQUIRED\"],\n  },\n  AI_TRACE_RELATIONSHIP_SELF_PARENT: {\n    code: \"AI_TRACE_RELATIONSHIP_SELF_PARENT\",\n    summary: \"A parentId equals its own event/step id.\",\n    remediation:\n      \"Reject at capture (AI_LANGGRAPH_SELF_PARENT_REJECTED) or drop via logical projection; do not invent replacement parents.\",\n    relatedCodes: [\n      \"AI_LANGGRAPH_SELF_PARENT_REJECTED\",\n      \"AI_LOGICAL_SELF_PARENT_REMOVED\",\n    ],\n  },\n  AI_TRACE_RELATIONSHIP_CYCLE: {\n    code: \"AI_TRACE_RELATIONSHIP_CYCLE\",\n    summary: \"Trace contains a parentId cycle.\",\n    remediation:\n      \"Use visibility-first tree linking for legacy fixtures; prefer acyclic capture for new adapter output.\",\n    relatedCodes: [\"structure.cycle\"],\n  },\n});\n\n/**\n * Format `CODE: summary Remediation: …` for thrown errors and diagnostics.\n */\nexport function formatProgrammaticDiagnostic(\n  code: ProgrammaticDiagnosticCode,\n  detail?: string,\n): string {\n  const spec = PROGRAMMATIC_DIAGNOSTIC_SPECS[code];\n  const summary = detail?.trim() ? detail.trim() : spec.summary;\n  return `${code}: ${summary} Remediation: ${spec.remediation}`;\n}\n","/**\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"]}