{"version":3,"sources":["../src/types/inspect-event.ts","../src/types/persisted-inspect-event.ts","../src/correlation-metadata.ts","../src/persisted/token-usage.ts","../src/persisted/from-trace-event.ts","../src/persisted/from-inspect-event.ts","../src/persisted/to-inspect-event.ts","../src/persisted/to-trace-event.ts","../src/logs/tree-builder.ts","../src/persisted/tree-bridge.ts"],"names":["isNonEmptyString","isRecord","sanitizeIdPart","toIsoTimestamp","compactAttributes","parseIsoToMs"],"mappings":"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","file":"persisted.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 { 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 { EventSource, InspectEvent } from \"../types/inspect-event.js\";\nimport type {\n  PersistedEventSource,\n  PersistedEventSourceType,\n  PersistedInspectError,\n  PersistedInspectEvent,\n  PersistedTokenUsage,\n} from \"../types/persisted-inspect-event.js\";\nimport { normalizeTokenUsage } from \"./token-usage.js\";\n\nexport interface InspectEventToPersistedOptions {\n  /**\n   * Optional source name override.\n   * If omitted, derived from event.source.type.\n   */\n  sourceName?: string;\n\n  /**\n   * Optional source version override.\n   */\n  sourceVersion?: string;\n\n  /**\n   * Stable index for deterministic fallback IDs if needed.\n   */\n  eventIndex?: number;\n}\n\nfunction sanitizeIdPart(value: string): string {\n  return value.replace(/[^a-zA-Z0-9_-]/g, \"_\");\n}\n\nfunction createFallbackEventId(event: InspectEvent, eventIndex: number): string {\n  const runId = sanitizeIdPart(event.runId);\n  const kind = sanitizeIdPart(event.kind);\n  const name = sanitizeIdPart(event.name);\n  return `inspect:${runId}:${kind}:${name}:${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 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 mapInspectSourceToPersisted(\n  source: EventSource,\n  options?: InspectEventToPersistedOptions,\n): {\n  persistedSource: PersistedEventSource;\n  originalSourceType?: EventSource[\"type\"];\n} {\n  const name = options?.sourceName;\n  const version = options?.sourceVersion;\n\n  switch (source.type) {\n    case \"pino\":\n      return {\n        persistedSource: {\n          type: \"json-log\",\n          name: name ?? \"pino\",\n          version,\n        },\n        originalSourceType: \"pino\",\n      };\n    case \"winston\":\n      return {\n        persistedSource: {\n          type: \"json-log\",\n          name: name ?? \"winston\",\n          version,\n        },\n        originalSourceType: \"winston\",\n      };\n    case \"manual\":\n    case \"json-log\":\n    case \"log4js\":\n    case \"adapter\":\n      return {\n        persistedSource: {\n          type: source.type as PersistedEventSourceType,\n          name,\n          version,\n        },\n      };\n    default:\n      return {\n        persistedSource: {\n          type: \"json-log\",\n          name,\n          version,\n        },\n      };\n  }\n}\n\nfunction mapTokenUsageFromAttributes(\n  attributes: Record<string, unknown> | undefined,\n): PersistedTokenUsage | undefined {\n  return normalizeTokenUsage(attributes?.tokens);\n}\n\nfunction mapErrorFromAttributes(\n  event: InspectEvent,\n): PersistedInspectError | undefined {\n  if (event.status !== \"error\" || !event.attributes) {\n    return undefined;\n  }\n  const message = event.attributes.errorMessage;\n  if (typeof message !== \"string\" || message.length === 0) {\n    return undefined;\n  }\n  const err: PersistedInspectError = { message };\n  if (typeof event.attributes.errorName === \"string\") {\n    err.name = event.attributes.errorName;\n  }\n  return err;\n}\n\n/**\n * Maps one in-memory {@link InspectEvent} to a v0.2 {@link PersistedInspectEvent}.\n * Does not mutate `event`.\n */\nexport function inspectEventToPersistedInspectEvent(\n  event: InspectEvent,\n  options?: InspectEventToPersistedOptions,\n): PersistedInspectEvent {\n  const eventIndex = options?.eventIndex ?? 0;\n  const eventId =\n    typeof event.eventId === \"string\" && event.eventId.length > 0\n      ? event.eventId\n      : createFallbackEventId(event, eventIndex);\n\n  const ts = toIsoTimestamp(event.timestamp);\n  const { persistedSource, originalSourceType } = mapInspectSourceToPersisted(\n    event.source,\n    options,\n  );\n\n  const attrsBase =\n    event.attributes !== undefined ? { ...event.attributes } : {};\n\n  const attributes = compactAttributes({\n    ...attrsBase,\n    sourceFile: event.source.file,\n    sourceLine: event.source.line,\n    originalSourceType,\n    invalidTimestamp: ts.invalidTimestamp ? true : undefined,\n  });\n\n  const tokenUsage = mapTokenUsageFromAttributes(event.attributes);\n  const error = mapErrorFromAttributes(event);\n\n  const inputPreview = event.attributes?.inputPreview;\n  const outputPreview = event.attributes?.outputPreview;\n\n  const out: PersistedInspectEvent = {\n    schemaVersion: \"0.2\",\n    eventId,\n    runId: event.runId,\n    kind: event.kind,\n    name: event.name,\n    timestamp: ts.iso,\n    confidence: event.confidence,\n    source: persistedSource,\n    attributes,\n  };\n\n  if (event.parentId !== undefined) {\n    out.parentId = event.parentId;\n  }\n  if (event.status !== undefined) {\n    out.status = event.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 (tokenUsage !== undefined) {\n    out.tokenUsage = tokenUsage;\n  }\n  if (error !== undefined) {\n    out.error = error;\n  }\n  if (inputPreview !== undefined) {\n    out.inputSummary = inputPreview;\n  }\n  if (outputPreview !== undefined) {\n    out.outputSummary = outputPreview;\n  }\n\n  return out;\n}\n\n/**\n * Maps in-memory {@link InspectEvent} rows to persisted v0.2 events.\n */\nexport function inspectEventsToPersistedInspectEvents(\n  events: readonly InspectEvent[],\n  options?: Omit<InspectEventToPersistedOptions, \"eventIndex\">,\n): PersistedInspectEvent[] {\n  return events.map((event, index) =>\n    inspectEventToPersistedInspectEvent(event, { ...options, eventIndex: index }),\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 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 {\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 { 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"]}