{"version":3,"sources":["../src/persisted/from-inspect-event.ts"],"names":[],"mappings":"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","file":"persisted.mjs","sourcesContent":["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"]}