agent-inspect 6.31.7 → 6.31.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +1 -1
  3. package/package.json +1 -1
  4. package/packages/cli/dist/{chunk-QV73NM25.mjs → chunk-6FE47XSF.mjs} +24 -11
  5. package/packages/cli/dist/chunk-6FE47XSF.mjs.map +1 -0
  6. package/packages/cli/dist/index.cjs +176 -42
  7. package/packages/cli/dist/index.cjs.map +1 -1
  8. package/packages/cli/dist/index.mjs +156 -36
  9. package/packages/cli/dist/index.mjs.map +1 -1
  10. package/packages/cli/dist/{src-KFOBXFPN.mjs → src-NXAYHG34.mjs} +3 -3
  11. package/packages/cli/dist/{src-KFOBXFPN.mjs.map → src-NXAYHG34.mjs.map} +1 -1
  12. package/packages/core/dist/advanced.cjs +22 -9
  13. package/packages/core/dist/advanced.cjs.map +1 -1
  14. package/packages/core/dist/advanced.mjs +5 -5
  15. package/packages/core/dist/checks.mjs +2 -2
  16. package/packages/core/dist/{chunk-LXYPM2ZO.mjs → chunk-2CCRUI42.mjs} +19 -318
  17. package/packages/core/dist/chunk-2CCRUI42.mjs.map +1 -0
  18. package/packages/core/dist/{chunk-QLYUWKK7.mjs → chunk-2IRRUNIN.mjs} +11 -5
  19. package/packages/core/dist/chunk-2IRRUNIN.mjs.map +1 -0
  20. package/packages/core/dist/{chunk-3RV3JILQ.mjs → chunk-IJJSPJXV.mjs} +20 -12
  21. package/packages/core/dist/chunk-IJJSPJXV.mjs.map +1 -0
  22. package/packages/core/dist/chunk-L5WLVBW4.mjs +355 -0
  23. package/packages/core/dist/chunk-L5WLVBW4.mjs.map +1 -0
  24. package/packages/core/dist/exporters.cjs +110 -18
  25. package/packages/core/dist/exporters.cjs.map +1 -1
  26. package/packages/core/dist/exporters.mjs +110 -18
  27. package/packages/core/dist/exporters.mjs.map +1 -1
  28. package/packages/core/dist/persisted.cjs +344 -9
  29. package/packages/core/dist/persisted.cjs.map +1 -1
  30. package/packages/core/dist/persisted.d.cts +8 -1
  31. package/packages/core/dist/persisted.d.ts +8 -1
  32. package/packages/core/dist/persisted.mjs +3 -2
  33. package/packages/core/dist/persisted.mjs.map +1 -1
  34. package/packages/core/dist/readers.cjs +377 -87
  35. package/packages/core/dist/readers.cjs.map +1 -1
  36. package/packages/core/dist/readers.mjs +3 -3
  37. package/packages/cli/dist/chunk-QV73NM25.mjs.map +0 -1
  38. package/packages/core/dist/chunk-3RV3JILQ.mjs.map +0 -1
  39. package/packages/core/dist/chunk-FWK3Q3OJ.mjs +0 -56
  40. package/packages/core/dist/chunk-FWK3Q3OJ.mjs.map +0 -1
  41. package/packages/core/dist/chunk-LXYPM2ZO.mjs.map +0 -1
  42. package/packages/core/dist/chunk-QLYUWKK7.mjs.map +0 -1
@@ -1,3 +1,4 @@
1
+ import { projectLogicalEvents } from './chunk-L5WLVBW4.mjs';
1
2
  import { extractCorrelationMetadata } from './chunk-S4YWKV4G.mjs';
2
3
  import { TreeBuilder } from './chunk-AK5EN4U2.mjs';
3
4
  import { isPersistedInspectEvent } from './chunk-EE5Z2GQ3.mjs';
@@ -430,17 +431,22 @@ function persistedInspectEventsToInspectEvents(events, options) {
430
431
  }
431
432
 
432
433
  // packages/core/src/persisted/tree-bridge.ts
434
+ function logicalToPersisted(event) {
435
+ const { sourceEventIds: _sourceEventIds, projection: _projection, ...rest } = event;
436
+ return rest;
437
+ }
433
438
  function persistedInspectEventsToRunTrees(events, options) {
434
- const inspectEvents = persistedInspectEventsToInspectEvents(events, {
439
+ const sourceEvents = options?.coalesceLifecycle === true ? projectLogicalEvents(events).logicalEvents.map(logicalToPersisted) : events;
440
+ const inspectEvents = persistedInspectEventsToInspectEvents(sourceEvents, {
435
441
  skipInvalid: options?.skipInvalid
436
442
  });
437
443
  return new TreeBuilder().build(inspectEvents);
438
444
  }
439
- function traceEventsToPersistedRunTrees(events) {
445
+ function traceEventsToPersistedRunTrees(events, options) {
440
446
  const persisted = traceEventsToPersistedInspectEvents(events);
441
- return persistedInspectEventsToRunTrees(persisted);
447
+ return persistedInspectEventsToRunTrees(persisted, options);
442
448
  }
443
449
 
444
450
  export { normalizeTokenUsage, persistedInspectEventToInspectEvent, persistedInspectEventsToInspectEvents, persistedInspectEventsToRunTrees, traceEventToPersistedInspectEvent, traceEventsToPersistedInspectEvents, traceEventsToPersistedRunTrees };
445
- //# sourceMappingURL=chunk-QLYUWKK7.mjs.map
446
- //# sourceMappingURL=chunk-QLYUWKK7.mjs.map
451
+ //# sourceMappingURL=chunk-2IRRUNIN.mjs.map
452
+ //# sourceMappingURL=chunk-2IRRUNIN.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/persisted/token-usage.ts","../src/persisted/from-trace-event.ts","../src/persisted/to-inspect-event.ts","../src/persisted/tree-bridge.ts"],"names":["compactAttributes"],"mappings":"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","file":"chunk-2IRRUNIN.mjs","sourcesContent":["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 {\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 {\n projectLogicalEvents,\n type LogicalTraceEvent,\n} from \"../checks/logical-events.js\";\nimport { 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 * When true, pair v0.1 start/complete lifecycle rows into logical events\n * before tree construction (CLI export fidelity). Schema 1.0 completed-only\n * rows are unchanged. Yields one RUN span per run when run_started+completed\n * pair, and one span per logical tool/step.\n */\n coalesceLifecycle?: boolean;\n}\n\nfunction logicalToPersisted(event: LogicalTraceEvent): PersistedInspectEvent {\n const { sourceEventIds: _sourceEventIds, projection: _projection, ...rest } =\n event;\n return rest;\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 sourceEvents =\n options?.coalesceLifecycle === true\n ? projectLogicalEvents(events).logicalEvents.map(logicalToPersisted)\n : events;\n const inspectEvents = persistedInspectEventsToInspectEvents(sourceEvents, {\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 options?: PersistedTreeBridgeOptions,\n): InspectRunTree[] {\n const persisted = traceEventsToPersistedInspectEvents(events);\n return persistedInspectEventsToRunTrees(persisted, options);\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { formatProgrammaticDiagnostic } from './chunk-FWK3Q3OJ.mjs';
2
- import { persistedInspectEventsToRunTrees, traceEventToPersistedInspectEvent, traceEventsToPersistedInspectEvents } from './chunk-QLYUWKK7.mjs';
1
+ import { persistedInspectEventsToRunTrees, traceEventToPersistedInspectEvent, traceEventsToPersistedInspectEvents } from './chunk-2IRRUNIN.mjs';
2
+ import { formatProgrammaticDiagnostic } from './chunk-L5WLVBW4.mjs';
3
3
  import { parseTraceJsonl } from './chunk-7DHSWDKB.mjs';
4
4
  import { readFile, readdir } from 'fs/promises';
5
5
  import path from 'path';
@@ -791,7 +791,7 @@ function mapOpenInferenceSpan(span, index, version) {
791
791
  const errorMessage = isRecord(span.status) && typeof span.status.message === "string" ? span.status.message : void 0;
792
792
  const event = {
793
793
  schemaVersion: "0.2",
794
- eventId: typeof rawAttributes["agent_inspect.event_id"] === "string" ? rawAttributes["agent_inspect.event_id"] : spanId,
794
+ eventId: typeof rawAttributes["agent_inspect.event_id"] === "string" ? rawAttributes["agent_inspect.event_id"] : `${traceId}:${spanId}`,
795
795
  runId: typeof rawAttributes["agent_inspect.run_id"] === "string" ? rawAttributes["agent_inspect.run_id"] : traceId,
796
796
  kind,
797
797
  name,
@@ -842,12 +842,16 @@ function mapOpenInferenceEvents(document) {
842
842
  const mapped = document.spans.map(
843
843
  (span, index) => mapOpenInferenceSpan(span, index, document.version)
844
844
  );
845
- const spanIdToEventId = new Map(
846
- mapped.map((span) => [span.spanId, span.event.eventId])
845
+ const spanKeyToEventId = new Map(
846
+ mapped.map((span) => {
847
+ const traceId = typeof span.event.trace?.traceId === "string" ? span.event.trace.traceId : "";
848
+ return [`${traceId}:${span.spanId}`, span.event.eventId];
849
+ })
847
850
  );
848
851
  for (const span of mapped) {
849
852
  if (span.parentSpanId === void 0) continue;
850
- span.event.parentId = spanIdToEventId.get(span.parentSpanId) ?? span.parentSpanId;
853
+ const traceId = typeof span.event.trace?.traceId === "string" ? span.event.trace.traceId : "";
854
+ span.event.parentId = spanKeyToEventId.get(`${traceId}:${span.parentSpanId}`) ?? span.parentSpanId;
851
855
  }
852
856
  return {
853
857
  events: mapped.map((span) => span.event),
@@ -1396,7 +1400,7 @@ function mapOtlpSpan(context) {
1396
1400
  const errorMessage = isRecord(span.status) && typeof span.status.message === "string" ? span.status.message : void 0;
1397
1401
  const event = {
1398
1402
  schemaVersion: "0.2",
1399
- eventId: typeof parsedSpanAttributes.attributes["agent_inspect.event_id"] === "string" ? parsedSpanAttributes.attributes["agent_inspect.event_id"] : spanId,
1403
+ eventId: typeof parsedSpanAttributes.attributes["agent_inspect.event_id"] === "string" ? parsedSpanAttributes.attributes["agent_inspect.event_id"] : `${traceId}:${spanId}`,
1400
1404
  runId: typeof parsedSpanAttributes.attributes["agent_inspect.run_id"] === "string" ? parsedSpanAttributes.attributes["agent_inspect.run_id"] : traceId,
1401
1405
  kind,
1402
1406
  name: readStringField(span, ["name"]) ?? spanId,
@@ -1445,12 +1449,16 @@ function mapOtlpSpan(context) {
1445
1449
  }
1446
1450
  function mapOtlpEventsToPersisted(document) {
1447
1451
  const mapped = document.spans.map((span) => mapOtlpSpan(span));
1448
- const spanIdToEventId = new Map(
1449
- mapped.map((span) => [span.spanId, span.event.eventId])
1452
+ const spanKeyToEventId = new Map(
1453
+ mapped.map((span) => {
1454
+ const traceId = typeof span.event.trace?.traceId === "string" ? span.event.trace.traceId : "";
1455
+ return [`${traceId}:${span.spanId}`, span.event.eventId];
1456
+ })
1450
1457
  );
1451
1458
  for (const span of mapped) {
1452
1459
  if (span.parentSpanId === void 0) continue;
1453
- span.event.parentId = spanIdToEventId.get(span.parentSpanId) ?? span.parentSpanId;
1460
+ const traceId = typeof span.event.trace?.traceId === "string" ? span.event.trace.traceId : "";
1461
+ span.event.parentId = spanKeyToEventId.get(`${traceId}:${span.parentSpanId}`) ?? span.parentSpanId;
1454
1462
  }
1455
1463
  return {
1456
1464
  events: mapped.map((span) => span.event),
@@ -1750,5 +1758,5 @@ function openTraceText(content, options = {}) {
1750
1758
  }
1751
1759
 
1752
1760
  export { BUILTIN_MAPPING_LEDGERS, DEFAULT_TRACE_READERS, OPENINFERENCE_MAPPING_LEDGER, OTLP_JSON_MAPPING_LEDGER, TraceReadError, agentInspectJsonlReader, assertTraceInput, detectTraceFormat, getMappingLedger, openInferenceJsonReader, openTrace, openTraceDirectory, openTraceFile, openTraceText, otlpJsonReader, readTrace };
1753
- //# sourceMappingURL=chunk-3RV3JILQ.mjs.map
1754
- //# sourceMappingURL=chunk-3RV3JILQ.mjs.map
1761
+ //# sourceMappingURL=chunk-IJJSPJXV.mjs.map
1762
+ //# sourceMappingURL=chunk-IJJSPJXV.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/readers/mapping-ledger.ts","../src/readers/index.ts"],"names":[],"mappings":"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","file":"chunk-IJJSPJXV.mjs","sourcesContent":["/**\n * Version-pinned reader/exporter mapping ledger (6.22).\n *\n * Records which external convention version was used and what was lost.\n * Does not bind persisted schema 1.0 to an unstable external convention.\n *\n * @experimental Available through `agent-inspect/readers`.\n */\n\nexport type MappingConfidence = \"explicit\" | \"correlated\" | \"heuristic\" | \"unknown\";\n\nexport type MappingLossKind =\n | \"none\"\n | \"dropped\"\n | \"bounded\"\n | \"privacy-redacted\"\n | \"kind-degraded\"\n | \"unsupported\";\n\n/**\n * One source→target mapping row.\n *\n * @experimental\n */\nexport interface MappingLedgerEntry {\n source: string;\n target: string;\n transformation: string;\n confidence: MappingConfidence;\n loss: MappingLossKind;\n privacyDecision?: string;\n}\n\n/**\n * Ledger published by a reader or exporter mapping.\n *\n * @experimental\n */\nexport interface MappingLedger {\n id: string;\n sourceFormat: string;\n targetFormat: string;\n /** External convention pin (e.g. OTel GenAI / OpenInference version). */\n convention?: {\n name: string;\n version: string;\n specUrl?: string;\n };\n entries: readonly MappingLedgerEntry[];\n knownLosses: readonly string[];\n}\n\n/** OpenInference → AgentInspect mapping ledger pin. */\nexport const OPENINFERENCE_MAPPING_LEDGER: MappingLedger = {\n id: \"openinference-to-agent-inspect\",\n sourceFormat: \"openinference-json\",\n targetFormat: \"agent-inspect-persisted-1.0\",\n convention: {\n name: \"OpenInference\",\n version: \"0.2.x\",\n specUrl: \"https://github.com/Arize-ai/openinference\",\n },\n entries: [\n {\n source: \"span.context.span_id\",\n target: \"eventId / trace.spanId\",\n transformation: \"hex identity when present\",\n confidence: \"explicit\",\n loss: \"none\",\n },\n {\n source: \"span.context.trace_id\",\n target: \"trace.traceId\",\n transformation: \"hex identity when present\",\n confidence: \"explicit\",\n loss: \"none\",\n },\n {\n source: \"span.parent_id\",\n target: \"parentId\",\n transformation: \"direct when resolvable in batch\",\n confidence: \"explicit\",\n loss: \"none\",\n },\n {\n source: \"attributes.openinference.span.kind\",\n target: \"kind\",\n transformation: \"enumerated kind map with degrade-to-LOGIC\",\n confidence: \"correlated\",\n loss: \"kind-degraded\",\n privacyDecision: \"unknown kinds preserved under bounds as attributes\",\n },\n {\n source: \"attributes.llm.input_messages / output_messages\",\n target: \"inputSummary / outputSummary\",\n transformation: \"bounded summaries only\",\n confidence: \"heuristic\",\n loss: \"privacy-redacted\",\n privacyDecision: \"raw message bodies are not required and may be omitted\",\n },\n ],\n knownLosses: [\n \"Chain-of-thought / private reasoning fields are never imported as raw content.\",\n \"Oversized attributes are bounded or marked unsupported.\",\n \"Unknown OpenInference kinds degrade to LOGIC with a warning.\",\n ],\n};\n\n/** OTLP JSON → AgentInspect mapping ledger pin. */\nexport const OTLP_JSON_MAPPING_LEDGER: MappingLedger = {\n id: \"otlp-json-to-agent-inspect\",\n sourceFormat: \"otlp-json\",\n targetFormat: \"agent-inspect-persisted-1.0\",\n convention: {\n name: \"OpenTelemetry GenAI semantic conventions\",\n version: \"1.36.0\",\n specUrl: \"https://opentelemetry.io/docs/specs/semconv/gen-ai/\",\n },\n entries: [\n {\n source: \"resourceSpans[].scopeSpans[].spans[]\",\n target: \"PersistedInspectEvent[]\",\n transformation: \"one span → one event when mappable\",\n confidence: \"explicit\",\n loss: \"none\",\n },\n {\n source: \"span.attributes[gen_ai.*]\",\n target: \"attributes / tokenUsage / kind\",\n transformation: \"pinned GenAI attribute family\",\n confidence: \"correlated\",\n loss: \"bounded\",\n },\n {\n source: \"span.attributes (unknown keys)\",\n target: \"attributes.* / unsupportedFields\",\n transformation: \"preserve under bounds or list as unsupported\",\n confidence: \"unknown\",\n loss: \"unsupported\",\n },\n ],\n knownLosses: [\n \"Schema 1.0 is not bound to Development-status OTel GenAI revisions.\",\n \"Status rewrite to fit a local narrative is forbidden.\",\n \"Payload bodies may be omitted; digests are optional application metadata.\",\n ],\n};\n\nexport const BUILTIN_MAPPING_LEDGERS: readonly MappingLedger[] = Object.freeze([\n OPENINFERENCE_MAPPING_LEDGER,\n OTLP_JSON_MAPPING_LEDGER,\n]);\n\nexport function getMappingLedger(id: string): MappingLedger | undefined {\n return BUILTIN_MAPPING_LEDGERS.find((ledger) => ledger.id === id);\n}\n","import { readdir, readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { parseTraceJsonl, type TraceJsonlFormat } from \"../read-trace.js\";\nimport {\n traceEventToPersistedInspectEvent,\n traceEventsToPersistedInspectEvents,\n} from \"../persisted/from-trace-event.js\";\nimport { persistedInspectEventsToRunTrees } from \"../persisted/tree-bridge.js\";\nimport type { InspectRunTree } from \"../types/inspect-event.js\";\nimport type {\n PersistedEventStatus,\n PersistedInspectEvent,\n PersistedTokenUsage,\n} from \"../types/persisted-inspect-event.js\";\nimport { formatProgrammaticDiagnostic } from \"../diagnostics/programmatic.js\";\n\nexport type TraceInput =\n | { type: \"file\"; path: string }\n | { type: \"directory\"; path: string }\n | { type: \"string\"; content: string }\n | { type: \"buffer\"; content: Buffer }\n | { type: \"stdin\" };\n\nexport type TraceReadWarningSeverity = \"info\" | \"warning\" | \"error\";\n\nexport interface TraceReadWarning {\n code: string;\n message: string;\n severity?: TraceReadWarningSeverity;\n sourceFile?: string;\n line?: number;\n field?: string;\n}\n\nexport interface TraceReadResult {\n format: string;\n events: PersistedInspectEvent[];\n runs: InspectRunTree[];\n warnings: TraceReadWarning[];\n unsupportedFields: string[];\n sourceFiles: string[];\n}\n\nexport interface TraceFormatCandidate {\n format: string;\n confidence: number;\n readerName?: string;\n description?: string;\n warnings?: TraceReadWarning[];\n}\n\nexport type TraceFormatDetectionStatus =\n | \"detected\"\n | \"ambiguous\"\n | \"unsupported\";\n\nexport interface TraceFormatDetectionResult {\n status: TraceFormatDetectionStatus;\n format?: string;\n candidates: TraceFormatCandidate[];\n warnings: TraceReadWarning[];\n}\n\nexport interface TraceReaderDetectOptions {\n format?: string;\n}\n\nexport interface TraceReaderReadOptions {\n format?: string;\n}\n\nexport interface TraceReader {\n readonly format: string;\n readonly name?: string;\n detect(\n input: TraceInput,\n options?: TraceReaderDetectOptions,\n ): TraceFormatCandidate | undefined | Promise<TraceFormatCandidate | undefined>;\n read(\n input: TraceInput,\n options?: TraceReaderReadOptions,\n ): TraceReadResult | Promise<TraceReadResult>;\n}\n\nexport interface TraceReadOptions {\n format?: string;\n readers?: readonly TraceReader[];\n}\n\ninterface ResolvedTraceInput {\n content: string;\n sourceFiles: string[];\n}\n\ninterface OpenInferenceDocument {\n spans: JsonRecord[];\n confidence: number;\n description: string;\n version?: string;\n warnings: TraceReadWarning[];\n unsupportedFields: string[];\n}\n\ninterface OpenInferenceMappedSpan {\n event: PersistedInspectEvent;\n warnings: TraceReadWarning[];\n unsupportedFields: string[];\n spanId: string;\n parentSpanId?: string;\n}\n\ninterface OtlpDocument {\n spans: OtlpSpanContext[];\n confidence: number;\n description: string;\n warnings: TraceReadWarning[];\n unsupportedFields: string[];\n}\n\ninterface OtlpSpanContext {\n span: JsonRecord;\n resourceAttributes: Record<string, unknown>;\n scopeAttributes: Record<string, unknown>;\n scopeName?: string;\n scopeVersion?: string;\n pathPrefix: string;\n}\n\ntype JsonRecord = Record<string, unknown>;\n\nconst DEFAULT_MAX_TRACE_INPUT_BYTES = 10 * 1024 * 1024;\nconst MIN_DETECTION_CONFIDENCE = 0.5;\nconst AMBIGUOUS_CONFIDENCE_DELTA = 0.05;\nconst resolvedInputCache = new WeakMap<TraceInput, Promise<ResolvedTraceInput | undefined>>();\nconst OPENINFERENCE_READER_FORMAT = \"openinference-json\";\nconst OTLP_READER_FORMAT = \"otlp-json\";\n\nconst OPENINFERENCE_SPAN_KEYS = new Set([\n \"trace_id\",\n \"traceId\",\n \"span_id\",\n \"spanId\",\n \"parent_span_id\",\n \"parentSpanId\",\n \"name\",\n \"start_time_unix_nano\",\n \"startTimeUnixNano\",\n \"end_time_unix_nano\",\n \"endTimeUnixNano\",\n \"start_time\",\n \"startTime\",\n \"end_time\",\n \"endTime\",\n \"attributes\",\n \"status\",\n \"kind\",\n \"span_kind\",\n \"spanKind\",\n]);\n\nconst OPENINFERENCE_SENSITIVE_ATTRIBUTE_KEYS = [\n \"input.value\",\n \"output.value\",\n \"input.mime_type\",\n \"output.mime_type\",\n \"llm.input_messages\",\n \"llm.output_messages\",\n \"llm.prompts\",\n \"llm.completions\",\n \"retrieval.documents\",\n \"reranker.input_documents\",\n \"reranker.output_documents\",\n \"document.content\",\n \"gen_ai.prompt\",\n \"gen_ai.completion\",\n \"gen_ai.input.messages\",\n \"gen_ai.output.messages\",\n];\n\nconst OTLP_SPAN_KEYS = new Set([\n \"traceId\",\n \"spanId\",\n \"parentSpanId\",\n \"name\",\n \"kind\",\n \"startTimeUnixNano\",\n \"endTimeUnixNano\",\n \"attributes\",\n \"events\",\n \"status\",\n \"droppedAttributesCount\",\n \"droppedEventsCount\",\n \"droppedLinksCount\",\n \"links\",\n \"flags\",\n]);\n\nexport type TraceReadErrorCode =\n | \"unsupported_format\"\n | \"ambiguous_format\"\n | \"reader_failed\"\n | \"invalid_input\";\n\nexport class TraceReadError extends Error {\n readonly code: TraceReadErrorCode;\n readonly warnings: TraceReadWarning[];\n\n constructor(\n code: TraceReadErrorCode,\n message: string,\n warnings: TraceReadWarning[] = [],\n ) {\n super(message);\n this.name = \"TraceReadError\";\n this.code = code;\n this.warnings = warnings;\n }\n}\n\nconst TRACE_INPUT_INVALID_MESSAGE = formatProgrammaticDiagnostic(\n \"AI_TRACE_INPUT_INVALID\",\n);\n\nfunction isTraceInput(input: unknown): input is TraceInput {\n if (typeof input !== \"object\" || input === null || Array.isArray(input)) {\n return false;\n }\n const record = input as { type?: unknown; path?: unknown; content?: unknown };\n switch (record.type) {\n case \"file\":\n case \"directory\":\n return typeof record.path === \"string\";\n case \"string\":\n return typeof record.content === \"string\";\n case \"buffer\":\n return Buffer.isBuffer(record.content);\n case \"stdin\":\n return true;\n default:\n return false;\n }\n}\n\n/**\n * Runtime guard for structured TraceInput. Never throws WeakMap key errors for bare strings.\n */\nexport function assertTraceInput(input: unknown): asserts input is TraceInput {\n if (isTraceInput(input)) return;\n throw new TraceReadError(\"invalid_input\", TRACE_INPUT_INVALID_MESSAGE, [\n {\n code: \"AI_TRACE_INPUT_INVALID\",\n message: TRACE_INPUT_INVALID_MESSAGE,\n severity: \"error\",\n },\n ]);\n}\n\nfunction normalizeCandidate(\n reader: TraceReader,\n candidate: TraceFormatCandidate,\n): TraceFormatCandidate {\n const confidence = Number.isFinite(candidate.confidence)\n ? Math.max(0, Math.min(1, candidate.confidence))\n : 0;\n\n return {\n ...candidate,\n format: candidate.format || reader.format,\n confidence,\n readerName: candidate.readerName ?? reader.name,\n };\n}\n\nfunction sortCandidates(\n candidates: readonly TraceFormatCandidate[],\n): TraceFormatCandidate[] {\n return [...candidates].sort((a, b) => {\n if (b.confidence !== a.confidence) return b.confidence - a.confidence;\n return a.format.localeCompare(b.format);\n });\n}\n\nfunction collectWarnings(\n candidates: readonly TraceFormatCandidate[],\n): TraceReadWarning[] {\n return candidates.flatMap((candidate) => candidate.warnings ?? []);\n}\n\nfunction dedupeWarnings(\n warnings: readonly TraceReadWarning[],\n): TraceReadWarning[] {\n const seen = new Set<string>();\n const out: TraceReadWarning[] = [];\n for (const warning of warnings) {\n const key = [\n warning.code,\n warning.message,\n warning.severity ?? \"\",\n warning.sourceFile ?? \"\",\n warning.line ?? \"\",\n warning.field ?? \"\",\n ].join(\"\\u0000\");\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(warning);\n }\n return out;\n}\n\nfunction attachSingleSourceFile(\n warnings: readonly TraceReadWarning[],\n resolved: ResolvedTraceInput,\n): TraceReadWarning[] {\n if (resolved.sourceFiles.length !== 1) return [...warnings];\n const [sourceFile] = resolved.sourceFiles;\n return warnings.map((warning) => ({\n ...warning,\n sourceFile: warning.sourceFile ?? sourceFile,\n }));\n}\n\nfunction findReaderByFormat(\n format: string,\n readers: readonly TraceReader[],\n): TraceReader | undefined {\n return readers.find((reader) => reader.format === format);\n}\n\nasync function jsonlFilesInDirectory(dirPath: string): Promise<string[]> {\n const entries = await readdir(dirPath, { withFileTypes: true });\n return entries\n .filter((entry) => entry.isFile() && entry.name.endsWith(\".jsonl\"))\n .map((entry) => path.join(dirPath, entry.name))\n .sort((a, b) => a.localeCompare(b));\n}\n\nasync function resolveInput(input: TraceInput): Promise<ResolvedTraceInput | undefined> {\n const cached = resolvedInputCache.get(input);\n if (cached) return cached;\n\n const promise = resolveInputUncached(input);\n resolvedInputCache.set(input, promise);\n return promise;\n}\n\nfunction assertInputWithinBounds(content: string, sourceFile?: string): void {\n const bytes = Buffer.byteLength(content, \"utf8\");\n if (bytes <= DEFAULT_MAX_TRACE_INPUT_BYTES) return;\n throw new TraceReadError(\"unsupported_format\", \"Trace input exceeds the local reader size limit.\", [\n {\n code: \"input_too_large\",\n message: `Trace input is ${bytes} bytes; max is ${DEFAULT_MAX_TRACE_INPUT_BYTES} bytes.`,\n severity: \"error\",\n ...(sourceFile !== undefined ? { sourceFile } : {}),\n },\n ]);\n}\n\nasync function resolveInputUncached(\n input: TraceInput,\n): Promise<ResolvedTraceInput | undefined> {\n if (input.type === \"string\") {\n assertInputWithinBounds(input.content);\n return { content: input.content, sourceFiles: [] };\n }\n if (input.type === \"buffer\") {\n const content = input.content.toString(\"utf-8\");\n assertInputWithinBounds(content);\n return { content, sourceFiles: [] };\n }\n if (input.type === \"file\") {\n const content = await readFile(input.path, \"utf-8\");\n assertInputWithinBounds(content, input.path);\n return { content, sourceFiles: [input.path] };\n }\n if (input.type === \"directory\") {\n const files = await jsonlFilesInDirectory(input.path);\n const parts = await Promise.all(\n files.map(async (file) => (await readFile(file, \"utf-8\")).trimEnd()),\n );\n const content = parts.filter((part) => part.trim() !== \"\").join(\"\\n\");\n assertInputWithinBounds(content, input.path);\n return {\n content,\n sourceFiles: files,\n };\n }\n return undefined;\n}\n\nfunction detectJsonlFormat(content: string): {\n format: TraceJsonlFormat;\n validRows: number;\n warnings: TraceReadWarning[];\n} {\n let saw01 = false;\n let saw02 = false;\n let saw10 = false;\n let validRows = 0;\n let invalidJsonRows = 0;\n let unknownSchemaRows = 0;\n let firstInvalidJsonLine: number | undefined;\n let firstUnknownSchemaLine: number | undefined;\n\n let lineNumber = 0;\n for (const line of content.split(/\\r?\\n/)) {\n lineNumber += 1;\n const trimmed = line.trim();\n if (trimmed === \"\") continue;\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(trimmed) as unknown;\n } catch {\n invalidJsonRows += 1;\n firstInvalidJsonLine ??= lineNumber;\n continue;\n }\n\n if (\n typeof parsed === \"object\" &&\n parsed !== null &&\n !Array.isArray(parsed) &&\n \"schemaVersion\" in parsed\n ) {\n const version = (parsed as { schemaVersion?: unknown }).schemaVersion;\n if (version === \"0.1\") {\n saw01 = true;\n validRows += 1;\n continue;\n }\n if (version === \"0.2\") {\n saw02 = true;\n validRows += 1;\n continue;\n }\n if (version === \"1.0\") {\n saw10 = true;\n validRows += 1;\n continue;\n }\n }\n\n unknownSchemaRows += 1;\n firstUnknownSchemaLine ??= lineNumber;\n }\n\n const warnings: TraceReadWarning[] = [];\n if (invalidJsonRows > 0) {\n warnings.push({\n code: \"invalid_jsonl_rows\",\n message: `Skipped ${invalidJsonRows} invalid JSONL row(s) during format detection.`,\n severity: \"warning\",\n ...(firstInvalidJsonLine !== undefined ? { line: firstInvalidJsonLine } : {}),\n });\n }\n if (unknownSchemaRows > 0) {\n warnings.push({\n code: \"unknown_schema_rows\",\n message: `Skipped ${unknownSchemaRows} row(s) with unknown schemaVersion during format detection.`,\n severity: \"warning\",\n ...(firstUnknownSchemaLine !== undefined ? { line: firstUnknownSchemaLine } : {}),\n });\n }\n\n let format: TraceJsonlFormat = \"empty\";\n const seenFormats = [saw01, saw02, saw10].filter(Boolean).length;\n if (seenFormats > 1) format = \"mixed\";\n else if (saw01) format = \"0.1\";\n else if (saw02) format = \"0.2\";\n else if (saw10) format = \"1.0\";\n\n return { format, validRows, warnings };\n}\n\nfunction agentInspectFormatLabel(format: TraceJsonlFormat): string {\n switch (format) {\n case \"0.1\":\n return \"agent-inspect-v0.1-jsonl\";\n case \"0.2\":\n return \"agent-inspect-v0.2-jsonl\";\n case \"1.0\":\n return \"agent-inspect-v1.0-jsonl\";\n case \"mixed\":\n return \"agent-inspect-mixed-jsonl\";\n default:\n return \"agent-inspect-jsonl\";\n }\n}\n\nfunction persistedEventsForParsedTrace(\n parsed: ReturnType<typeof parseTraceJsonl>,\n): PersistedInspectEvent[] {\n if (\n (parsed.format === \"0.2\" || parsed.format === \"1.0\") &&\n parsed.persisted.length > 0\n ) {\n return [...parsed.persisted];\n }\n if (parsed.format === \"mixed\" && parsed.rows.length > 0) {\n return parsed.rows.map((row, index) => {\n if (row.format === \"0.2\" || row.format === \"1.0\") return row.event;\n return traceEventToPersistedInspectEvent(row.event, {\n eventIndex: index,\n sourceName: \"agent-inspect-jsonl-reader\",\n });\n });\n }\n return traceEventsToPersistedInspectEvents(parsed.events, {\n sourceName: \"agent-inspect-jsonl-reader\",\n });\n}\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.trim() !== \"\";\n}\n\nfunction readStringField(\n record: JsonRecord,\n keys: readonly string[],\n): string | undefined {\n for (const key of keys) {\n const value = record[key];\n if (isNonEmptyString(value)) return value;\n }\n return undefined;\n}\n\nfunction readRecordField(\n record: JsonRecord,\n key: string,\n): JsonRecord | undefined {\n const value = record[key];\n return isRecord(value) ? value : undefined;\n}\n\nfunction parseJsonDocument(content: string): unknown {\n return JSON.parse(content) as unknown;\n}\n\nfunction looksLikeOpenInferenceSpan(value: unknown): value is JsonRecord {\n if (!isRecord(value)) return false;\n const attributes = readRecordField(value, \"attributes\");\n return (\n readStringField(value, [\"trace_id\", \"traceId\"]) !== undefined &&\n readStringField(value, [\"span_id\", \"spanId\"]) !== undefined &&\n (readStringField(value, [\"name\"]) !== undefined ||\n attributes?.[\"openinference.span.kind\"] !== undefined)\n );\n}\n\nfunction extractOpenInferenceDocument(root: unknown): OpenInferenceDocument | undefined {\n const warnings: TraceReadWarning[] = [];\n const unsupportedFields: string[] = [];\n\n if (Array.isArray(root)) {\n const spans = root.filter(looksLikeOpenInferenceSpan);\n if (spans.length === 0) return undefined;\n if (spans.length !== root.length) {\n warnings.push({\n code: \"openinference_skipped_items\",\n message: \"Skipped non-span item(s) in OpenInference span array.\",\n severity: \"warning\",\n });\n }\n return {\n spans,\n confidence: 0.82,\n description: \"OpenInference span array\",\n warnings,\n unsupportedFields,\n };\n }\n\n if (!isRecord(root)) return undefined;\n\n const rootFormat = root.format;\n const rootCompatibility = root.compatibility;\n const version =\n typeof root.version === \"string\" && root.version.trim() !== \"\"\n ? root.version\n : undefined;\n\n if (Array.isArray(root.spans)) {\n const spans = root.spans.filter(looksLikeOpenInferenceSpan);\n if (spans.length === 0 && (rootFormat === \"openinference\" || rootCompatibility === \"openinference-compatible\")) {\n warnings.push({\n code: \"openinference_no_valid_spans\",\n message: \"OpenInference document did not contain any valid spans.\",\n severity: \"error\",\n });\n return {\n spans,\n confidence: 0.7,\n description: \"Malformed OpenInference document\",\n version,\n warnings,\n unsupportedFields,\n };\n }\n if (spans.length === 0) return undefined;\n if (spans.length !== root.spans.length) {\n warnings.push({\n code: \"openinference_skipped_spans\",\n message: \"Skipped invalid OpenInference span item(s).\",\n severity: \"warning\",\n });\n }\n return {\n spans,\n confidence:\n rootFormat === \"openinference\" || rootCompatibility === \"openinference-compatible\"\n ? 0.9\n : 0.84,\n description:\n rootFormat === \"openinference\" || rootCompatibility === \"openinference-compatible\"\n ? \"OpenInference document\"\n : \"OpenInference spans document\",\n version,\n warnings,\n unsupportedFields,\n };\n }\n\n if (Array.isArray(root.data)) {\n const spans = root.data.filter(looksLikeOpenInferenceSpan);\n if (spans.length === 0) return undefined;\n if (spans.length !== root.data.length) {\n warnings.push({\n code: \"openinference_skipped_data_items\",\n message: \"Skipped non-span item(s) in OpenInference data array.\",\n severity: \"warning\",\n });\n }\n return {\n spans,\n confidence: 0.8,\n description: \"OpenInference data document\",\n version,\n warnings,\n unsupportedFields,\n };\n }\n\n if (looksLikeOpenInferenceSpan(root)) {\n return {\n spans: [root],\n confidence: 0.76,\n description: \"OpenInference single span\",\n version,\n warnings,\n unsupportedFields,\n };\n }\n\n if (rootFormat === \"openinference\" || rootCompatibility === \"openinference-compatible\") {\n warnings.push({\n code: \"openinference_missing_spans\",\n message: \"OpenInference document is missing a spans array.\",\n severity: \"error\",\n });\n return {\n spans: [],\n confidence: 0.7,\n description: \"Malformed OpenInference document\",\n version,\n warnings,\n unsupportedFields,\n };\n }\n\n return undefined;\n}\n\nfunction parseUnixNanoToIso(value: unknown): string | undefined {\n if (typeof value === \"bigint\" && value >= 0n) {\n return new Date(Number(value / 1_000_000n)).toISOString();\n }\n if (typeof value === \"number\" && Number.isFinite(value) && value >= 0) {\n return new Date(Math.floor(value / 1_000_000)).toISOString();\n }\n if (typeof value === \"string\" && /^\\d+$/.test(value)) {\n return new Date(Number(BigInt(value) / 1_000_000n)).toISOString();\n }\n return undefined;\n}\n\nfunction parseIsoTime(value: unknown): string | undefined {\n if (!isNonEmptyString(value)) return undefined;\n const ms = Date.parse(value);\n if (!Number.isFinite(ms)) return undefined;\n return new Date(ms).toISOString();\n}\n\nfunction readOpenInferenceTimestamp(\n span: JsonRecord,\n nanoKeys: readonly string[],\n isoKeys: readonly string[],\n): string | undefined {\n for (const key of nanoKeys) {\n const iso = parseUnixNanoToIso(span[key]);\n if (iso !== undefined) return iso;\n }\n for (const key of isoKeys) {\n const iso = parseIsoTime(span[key]);\n if (iso !== undefined) return iso;\n }\n return undefined;\n}\n\nfunction durationBetweenIso(startedAt?: string, endedAt?: string): number | undefined {\n if (startedAt === undefined || endedAt === undefined) return undefined;\n const startMs = Date.parse(startedAt);\n const endMs = Date.parse(endedAt);\n if (!Number.isFinite(startMs) || !Number.isFinite(endMs) || endMs < startMs) {\n return undefined;\n }\n return endMs - startMs;\n}\n\nfunction isSensitiveOpenInferenceAttribute(key: string): boolean {\n return OPENINFERENCE_SENSITIVE_ATTRIBUTE_KEYS.some(\n (sensitiveKey) =>\n key === sensitiveKey ||\n key.startsWith(`${sensitiveKey}.`) ||\n key.endsWith(\".message.content\") ||\n key.endsWith(\".document.content\"),\n );\n}\n\nfunction summarizeAttributeValue(value: unknown): Record<string, unknown> {\n if (typeof value === \"string\") {\n return { type: \"string\", length: value.length };\n }\n if (typeof value === \"number\") {\n return { type: \"number\", finite: Number.isFinite(value) };\n }\n if (typeof value === \"boolean\") {\n return { type: \"boolean\" };\n }\n if (Array.isArray(value)) {\n return { type: \"array\", length: value.length };\n }\n if (isRecord(value)) {\n return { type: \"object\", keyCount: Object.keys(value).length };\n }\n if (value === null) {\n return { type: \"null\" };\n }\n return { type: typeof value };\n}\n\nfunction sanitizeOpenInferenceAttributes(\n attributes: JsonRecord,\n pathPrefix: string,\n): {\n attributes: Record<string, unknown>;\n warnings: TraceReadWarning[];\n unsupportedFields: string[];\n} {\n const out: Record<string, unknown> = {};\n const warnings: TraceReadWarning[] = [];\n const unsupportedFields: string[] = [];\n const summarizedKeys: string[] = [];\n\n for (const [key, value] of Object.entries(attributes)) {\n if (isSensitiveOpenInferenceAttribute(key)) {\n summarizedKeys.push(key);\n out[`${key}.summary`] = summarizeAttributeValue(value);\n unsupportedFields.push(`${pathPrefix}.attributes.${key}`);\n continue;\n }\n out[key] = value;\n }\n\n if (summarizedKeys.length > 0) {\n out[\"openinference.summarized_attributes\"] = summarizedKeys;\n warnings.push({\n code: \"openinference_sensitive_attribute_summarized\",\n message:\n \"OpenInference prompt/output/document attribute(s) were summarized instead of copied verbatim.\",\n severity: \"warning\",\n });\n }\n\n return { attributes: out, warnings, unsupportedFields };\n}\n\nfunction mapOpenInferenceKind(\n span: JsonRecord,\n attributes: JsonRecord,\n pathPrefix: string,\n): { kind: PersistedInspectEvent[\"kind\"]; warnings: TraceReadWarning[] } {\n const warnings: TraceReadWarning[] = [];\n const agentInspectKind = attributes[\"agent_inspect.kind\"];\n if (\n agentInspectKind === \"RUN\" ||\n agentInspectKind === \"AGENT\" ||\n agentInspectKind === \"LLM\" ||\n agentInspectKind === \"TOOL\" ||\n agentInspectKind === \"CHAIN\" ||\n agentInspectKind === \"RETRIEVER\" ||\n agentInspectKind === \"DECISION\" ||\n agentInspectKind === \"RESULT\" ||\n agentInspectKind === \"ERROR\" ||\n agentInspectKind === \"LOGIC\" ||\n agentInspectKind === \"LOG\" ||\n agentInspectKind === \"OUTCOME\"\n ) {\n return { kind: agentInspectKind, warnings };\n }\n\n const rawKind =\n readStringField(span, [\"kind\", \"span_kind\", \"spanKind\"]) ??\n (typeof attributes[\"openinference.span.kind\"] === \"string\"\n ? attributes[\"openinference.span.kind\"]\n : undefined);\n const normalized = rawKind?.toUpperCase();\n\n switch (normalized) {\n case \"LLM\":\n return { kind: \"LLM\", warnings };\n case \"TOOL\":\n return { kind: \"TOOL\", warnings };\n case \"CHAIN\":\n return { kind: \"CHAIN\", warnings };\n case \"RETRIEVER\":\n return { kind: \"RETRIEVER\", warnings };\n case \"AGENT\":\n return { kind: \"AGENT\", warnings };\n case \"EMBEDDING\":\n warnings.push({\n code: \"openinference_kind_semantic_loss\",\n message: \"OpenInference EMBEDDING span kind mapped to AgentInspect LLM.\",\n severity: \"warning\",\n field: `${pathPrefix}.attributes.openinference.span.kind`,\n });\n return { kind: \"LLM\", warnings };\n case \"RERANKER\":\n warnings.push({\n code: \"openinference_kind_semantic_loss\",\n message: \"OpenInference RERANKER span kind mapped to AgentInspect RETRIEVER.\",\n severity: \"warning\",\n field: `${pathPrefix}.attributes.openinference.span.kind`,\n });\n return { kind: \"RETRIEVER\", warnings };\n case \"UNKNOWN\":\n case undefined:\n warnings.push({\n code: \"openinference_kind_unknown\",\n message: \"OpenInference span kind was missing or unknown; mapped to AgentInspect LOGIC.\",\n severity: \"warning\",\n field: `${pathPrefix}.attributes.openinference.span.kind`,\n });\n return { kind: \"LOGIC\", warnings };\n default:\n warnings.push({\n code: \"openinference_kind_unsupported\",\n message: `Unsupported OpenInference span kind \"${rawKind}\" mapped to AgentInspect LOGIC.`,\n severity: \"warning\",\n field: `${pathPrefix}.attributes.openinference.span.kind`,\n });\n return { kind: \"LOGIC\", warnings };\n }\n}\n\nfunction mapOpenInferenceStatus(status: unknown): PersistedEventStatus | undefined {\n if (!isRecord(status)) return undefined;\n const rawCode = status.code;\n if (typeof rawCode !== \"string\") return undefined;\n switch (rawCode.toUpperCase()) {\n case \"OK\":\n return \"ok\";\n case \"ERROR\":\n return \"error\";\n case \"UNSET\":\n return \"unknown\";\n default:\n return \"unknown\";\n }\n}\n\nfunction readOpenInferenceTokenUsage(\n attributes: JsonRecord,\n): PersistedTokenUsage | undefined {\n const prompt = attributes[\"llm.token_count.prompt\"];\n const completion = attributes[\"llm.token_count.completion\"];\n const total = attributes[\"llm.token_count.total\"];\n const cached = attributes[\"llm.token_count.prompt_details.cache_read\"];\n const cacheWrite =\n attributes[\"llm.token_count.prompt_details.cache_write\"] ??\n attributes[\"llm.token_count.prompt_details.cache_creation\"];\n const reasoning =\n attributes[\"llm.token_count.completion_details.reasoning\"] ??\n attributes[\"llm.token_count.completion_details.reasoning_tokens\"];\n const usage: PersistedTokenUsage = {};\n\n if (typeof prompt === \"number\" && Number.isFinite(prompt) && prompt >= 0) {\n usage.input = prompt;\n }\n if (\n typeof completion === \"number\" &&\n Number.isFinite(completion) &&\n completion >= 0\n ) {\n usage.output = completion;\n }\n if (typeof total === \"number\" && Number.isFinite(total) && total >= 0) {\n usage.total = total;\n }\n if (typeof cached === \"number\" && Number.isFinite(cached) && cached >= 0) {\n usage.cached = cached;\n }\n if (\n typeof cacheWrite === \"number\" &&\n Number.isFinite(cacheWrite) &&\n cacheWrite >= 0\n ) {\n usage.cacheWrite = cacheWrite;\n }\n if (\n typeof reasoning === \"number\" &&\n Number.isFinite(reasoning) &&\n reasoning >= 0\n ) {\n usage.reasoning = reasoning;\n }\n if (usage.total === undefined && usage.input !== undefined && usage.output !== undefined) {\n usage.total = usage.input + usage.output;\n }\n\n return Object.keys(usage).length > 0 ? usage : undefined;\n}\n\nfunction readOpenInferenceConfidence(\n attributes: JsonRecord,\n): PersistedInspectEvent[\"confidence\"] {\n const confidence = attributes[\"agent_inspect.confidence\"];\n if (\n confidence === \"explicit\" ||\n confidence === \"correlated\" ||\n confidence === \"heuristic\" ||\n confidence === \"unknown\"\n ) {\n return confidence;\n }\n return \"correlated\";\n}\n\nfunction mapOpenInferenceSpan(\n span: JsonRecord,\n index: number,\n version?: string,\n): OpenInferenceMappedSpan {\n const pathPrefix = `spans[${index}]`;\n const warnings: TraceReadWarning[] = [];\n const unsupportedFields: string[] = [];\n const rawAttributes = readRecordField(span, \"attributes\") ?? {};\n const sanitized = sanitizeOpenInferenceAttributes(rawAttributes, pathPrefix);\n warnings.push(...sanitized.warnings);\n unsupportedFields.push(...sanitized.unsupportedFields);\n\n const attributes: Record<string, unknown> = { ...sanitized.attributes };\n for (const [key, value] of Object.entries(span)) {\n if (OPENINFERENCE_SPAN_KEYS.has(key)) continue;\n unsupportedFields.push(`${pathPrefix}.${key}`);\n if (value === null || typeof value !== \"object\") {\n attributes[`openinference.${key}`] = value;\n } else {\n attributes[`openinference.${key}.summary`] = summarizeAttributeValue(value);\n warnings.push({\n code: \"openinference_unsupported_field_summarized\",\n message: `Unsupported OpenInference span field \"${key}\" was summarized.`,\n severity: \"warning\",\n field: `${pathPrefix}.${key}`,\n });\n }\n }\n\n const traceId = readStringField(span, [\"trace_id\", \"traceId\"]) ?? `trace-${index}`;\n const spanId = readStringField(span, [\"span_id\", \"spanId\"]) ?? `span-${index}`;\n const parentSpanId = readStringField(span, [\"parent_span_id\", \"parentSpanId\"]);\n const name = readStringField(span, [\"name\"]) ?? spanId;\n const startedAt = readOpenInferenceTimestamp(\n span,\n [\"start_time_unix_nano\", \"startTimeUnixNano\"],\n [\"start_time\", \"startTime\"],\n );\n const endedAt = readOpenInferenceTimestamp(\n span,\n [\"end_time_unix_nano\", \"endTimeUnixNano\"],\n [\"end_time\", \"endTime\"],\n );\n const timestamp = startedAt ?? \"1970-01-01T00:00:00.000Z\";\n\n if (startedAt === undefined) {\n warnings.push({\n code: \"openinference_missing_start_time\",\n message: \"OpenInference span is missing a valid start time; using Unix epoch.\",\n severity: \"warning\",\n field: `${pathPrefix}.start_time_unix_nano`,\n });\n unsupportedFields.push(`${pathPrefix}.start_time_unix_nano`);\n }\n\n const { kind, warnings: kindWarnings } = mapOpenInferenceKind(\n span,\n rawAttributes,\n pathPrefix,\n );\n warnings.push(...kindWarnings);\n const status = mapOpenInferenceStatus(span.status);\n const tokenUsage = readOpenInferenceTokenUsage(rawAttributes);\n const errorMessage =\n isRecord(span.status) && typeof span.status.message === \"string\"\n ? span.status.message\n : undefined;\n\n const event: PersistedInspectEvent = {\n schemaVersion: \"0.2\",\n eventId:\n typeof rawAttributes[\"agent_inspect.event_id\"] === \"string\"\n ? rawAttributes[\"agent_inspect.event_id\"]\n : `${traceId}:${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 spanKeyToEventId = new Map(\n mapped.map((span) => {\n const traceId =\n typeof span.event.trace?.traceId === \"string\" ? span.event.trace.traceId : \"\";\n return [`${traceId}:${span.spanId}`, span.event.eventId] as const;\n }),\n );\n for (const span of mapped) {\n if (span.parentSpanId === undefined) continue;\n const traceId =\n typeof span.event.trace?.traceId === \"string\" ? span.event.trace.traceId : \"\";\n span.event.parentId =\n spanKeyToEventId.get(`${traceId}:${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 : `${traceId}:${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 spanKeyToEventId = new Map(\n mapped.map((span) => {\n const traceId =\n typeof span.event.trace?.traceId === \"string\" ? span.event.trace.traceId : \"\";\n return [`${traceId}:${span.spanId}`, span.event.eventId] as const;\n }),\n );\n for (const span of mapped) {\n if (span.parentSpanId === undefined) continue;\n const traceId =\n typeof span.event.trace?.traceId === \"string\" ? span.event.trace.traceId : \"\";\n span.event.parentId =\n spanKeyToEventId.get(`${traceId}:${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"]}