{"version":3,"sources":["../src/exporters/types.ts","../src/safety/url-redaction.ts","../src/exporters/redact-export.ts","../src/exporters/html-exporter.ts","../src/exporters/markdown-exporter.ts","../src/exporters/openinference-exporter.ts","../src/exporters/otlp-json-exporter.ts","../src/exporters/validation.ts","../src/exporters/manual-trace-adapter.ts","../src/exporters/fixtures.ts","../src/exporters/semantic-validation.ts","../src/exporters/semconv.ts","../src/exporters/index.ts","../src/report.ts"],"names":["hexFrom","crypto","unixNano","isRecord","title"],"mappings":"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","file":"exporters.mjs","sourcesContent":["/**\n * v0.7 local export formats. No sinks — string output only.\n */\n\nimport type { InspectRunTree } from \"../types/inspect-event.js\";\nimport type { RedactionProfile } from \"../types.js\";\n\nexport type ExportFormat = \"markdown\" | \"html\" | \"openinference\" | \"otlp-json\";\n\nexport interface ExportOptions {\n  format: ExportFormat;\n  includeMetadata?: boolean;\n  includeAttributes?: boolean;\n  includeErrors?: boolean;\n  pretty?: boolean;\n  redacted?: boolean;\n  maxAttributeLength?: number;\n  /**\n   * Redaction preset for exported copies. Default `local`.\n   * `share` and `strict` apply stronger key-based redaction before rendering.\n   */\n  redactionProfile?: RedactionProfile;\n}\n\nexport interface ExportResult {\n  format: ExportFormat;\n  content: string;\n  contentType: string;\n  fileExtension: string;\n  warnings: string[];\n}\n\nexport interface ExportValidationResult {\n  ok: boolean;\n  format: ExportFormat;\n  errors: string[];\n  warnings: string[];\n}\n\nexport interface TraceExporter {\n  name: string;\n  format: ExportFormat;\n  export(tree: InspectRunTree, options?: Partial<ExportOptions>): ExportResult;\n  validate?(content: string): ExportValidationResult;\n}\n\n/** Library version string embedded in JSON exports (human-readable, not semver guarantee for formats). */\nexport const EXPORT_PAYLOAD_VERSION = \"0.1.2\";\n","/**\n * URL-aware redaction for http(s) and common connection-string schemes.\n *\n * Keeps scheme, host and path so two attempts of the same step stay\n * comparable, and removes credentials carried in userinfo, query params and\n * fragment params. Identifier-looking path segments are masked on http(s)\n * when the profile redacts identifiers. Connection URIs only strip userinfo\n * and sensitive params so database/queue paths stay intact.\n *\n * Mirrors `packages/redact/src/url-redaction.ts`. Keep both copies in sync.\n */\n\nimport { isCredentialSensitiveKey } from \"./sensitive-key.js\";\n\nexport interface UrlRedactionOptions {\n  /** Field names the active profile redacts, used for query and fragment params. */\n  sensitiveKeys: readonly string[];\n  /** Value-level credential check, usually the profile's detectors. */\n  isSensitiveValue: (value: string) => boolean;\n  replacement?: string;\n  /** Mask identifier-looking path segments (share and strict profiles, http(s) only). */\n  maskPathIds?: boolean;\n  idPlaceholder?: string;\n}\n\nexport interface UrlRedactionResult {\n  value: string;\n  credentialRedacted: boolean;\n  identifiersMasked: boolean;\n}\n\nconst HTTP_URL = /^https?:\\/\\/[^\\s]+$/i;\n\n/** Connection schemes common in agent tool attributes (DB, cache, queue). */\nconst CONNECTION_PROTOCOLS = new Set([\n  \"postgres:\",\n  \"postgresql:\",\n  \"mysql:\",\n  \"mariadb:\",\n  \"mongodb:\",\n  \"mongodb+srv:\",\n  \"redis:\",\n  \"rediss:\",\n  \"amqp:\",\n  \"amqps:\",\n]);\n\nconst CONNECTION_URI =\n  /^(?:postgres|postgresql|mysql|mariadb|mongodb(?:\\+srv)?|rediss?|amqps?):\\/\\/[^\\s]+$/i;\n\n/**\n * Connection strings are not always WHATWG URLs (multihost + IP-literal\n * authorities). When `new URL` fails, strip a clear userinfo@ authority\n * prefix so credentials never survive as unchanged SAFE text.\n * @see https://github.com/mongodb/specifications/blob/master/source/connection-string/connection-string-spec.md#host-information\n */\nconst CONNECTION_USERINFO =\n  /^(postgres|postgresql|mysql|mariadb|mongodb(?:\\+srv)?|rediss?|amqps?):\\/\\/([^@/?#]+)@(.+)$/i;\n\nconst CONNECTION_HAS_USERINFO =\n  /^(?:postgres|postgresql|mysql|mariadb|mongodb(?:\\+srv)?|rediss?|amqps?):\\/\\/[^@/?#]+@/i;\n\n\nconst UUID_SEGMENT = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\nconst HEX_SEGMENT = /^[0-9a-f]{12,}$/i;\nconst NUMERIC_SEGMENT = /^\\d{5,}$/;\nconst OPAQUE_SEGMENT = /^[A-Za-z0-9_-]{20,}$/;\n\n/** True when the whole string is a single http(s) URL. */\nexport function looksLikeHttpUrl(value: string): boolean {\n  return HTTP_URL.test(value.trim());\n}\n\n/** True when the whole string is a known connection URI with a scheme:// authority. */\nexport function looksLikeConnectionUri(value: string): boolean {\n  return CONNECTION_URI.test(value.trim());\n}\n\n/** True when the value is eligible for URL-aware rewrite (http(s) or connection URI). */\nexport function looksLikeUrlForRedaction(value: string): boolean {\n  return looksLikeHttpUrl(value) || looksLikeConnectionUri(value);\n}\n\nfunction parseRedactableUrl(value: string): URL | undefined {\n  try {\n    const url = new URL(value.trim());\n    if (url.protocol === \"http:\" || url.protocol === \"https:\") return url;\n    if (CONNECTION_PROTOCOLS.has(url.protocol)) return url;\n    return undefined;\n  } catch {\n    return undefined;\n  }\n}\n\n/**\n * Strip userinfo when the generic URL parser cannot handle a recognized\n * connection authority (e.g. comma-separated multihost lists).\n */\nfunction redactConnectionUserinfoFallback(\n  value: string,\n  replacement: string,\n): UrlRedactionResult | undefined {\n  const trimmed = value.trim();\n  const match = CONNECTION_USERINFO.exec(trimmed);\n  if (match) {\n    const [, scheme, , rest] = match;\n    if (scheme && rest && rest.length > 0) {\n      return {\n        value: `${scheme}://${rest}`,\n        credentialRedacted: true,\n        identifiersMasked: false,\n      };\n    }\n  }\n  // Recognized scheme with userinfo that still cannot be rewritten safely:\n  // withhold the whole value rather than leave credentials unchanged.\n  if (looksLikeConnectionUri(trimmed) && CONNECTION_HAS_USERINFO.test(trimmed)) {\n    return {\n      value: replacement,\n      credentialRedacted: true,\n      identifiersMasked: false,\n    };\n  }\n  return undefined;\n}\n\nfunction isHttpProtocol(protocol: string): boolean {\n  return protocol === \"http:\" || protocol === \"https:\";\n}\n\nfunction isIdentifierSegment(segment: string): boolean {\n  if (UUID_SEGMENT.test(segment)) return true;\n  if (HEX_SEGMENT.test(segment)) return true;\n  if (NUMERIC_SEGMENT.test(segment)) return true;\n  return OPAQUE_SEGMENT.test(segment) && /\\d/.test(segment) && /[A-Za-z]/.test(segment);\n}\n\nfunction decodeParam(value: string): string {\n  try {\n    return decodeURIComponent(value.replace(/\\+/g, \" \"));\n  } catch {\n    return value;\n  }\n}\n\nfunction redactParams(\n  raw: string,\n  options: UrlRedactionOptions,\n  replacement: string,\n): { value: string; redacted: boolean } {\n  let redacted = false;\n  const parts = raw.split(\"&\").map((part) => {\n    if (part.length === 0) return part;\n    const separator = part.indexOf(\"=\");\n    if (separator < 0) return part;\n    const rawKey = part.slice(0, separator);\n    const rawValue = part.slice(separator + 1);\n    const key = decodeParam(rawKey);\n    const value = decodeParam(rawValue);\n    if (\n      isCredentialSensitiveKey(key, options.sensitiveKeys) ||\n      options.isSensitiveValue(value)\n    ) {\n      redacted = true;\n      return `${rawKey}=${replacement}`;\n    }\n    return part;\n  });\n  return { value: parts.join(\"&\"), redacted };\n}\n\n/**\n * Redacts the sensitive parts of an http(s) or connection URI. Returns the\n * value unchanged when it is not a supported URL or has nothing to remove.\n */\nexport function redactUrlString(\n  value: string,\n  options: UrlRedactionOptions,\n): UrlRedactionResult {\n  const unchanged: UrlRedactionResult = {\n    value,\n    credentialRedacted: false,\n    identifiersMasked: false,\n  };\n  if (!looksLikeUrlForRedaction(value)) return unchanged;\n\n  const replacement = options.replacement ?? \"[REDACTED]\";\n  const url = parseRedactableUrl(value);\n  if (!url) {\n    return redactConnectionUserinfoFallback(value, replacement) ?? unchanged;\n  }\n\n  const idPlaceholder = options.idPlaceholder ?? \"[id]\";\n  const http = isHttpProtocol(url.protocol);\n\n  let credentialRedacted = url.username.length > 0 || url.password.length > 0;\n  let identifiersMasked = false;\n\n  let pathname = url.pathname;\n  if (http && options.maskPathIds === true) {\n    pathname = url.pathname\n      .split(\"/\")\n      .map((segment) => {\n        if (segment.length === 0 || !isIdentifierSegment(decodeParam(segment))) {\n          return segment;\n        }\n        identifiersMasked = true;\n        return idPlaceholder;\n      })\n      .join(\"/\");\n  }\n\n  let search = \"\";\n  if (url.search.length > 1) {\n    const params = redactParams(url.search.slice(1), options, replacement);\n    if (params.redacted) credentialRedacted = true;\n    search = `?${params.value}`;\n  } else if (url.search.length === 1) {\n    search = \"?\";\n  }\n\n  let hash = url.hash;\n  if (url.hash.includes(\"=\")) {\n    const params = redactParams(url.hash.slice(1), options, replacement);\n    if (params.redacted) credentialRedacted = true;\n    hash = `#${params.value}`;\n  }\n\n  if (!credentialRedacted && !identifiersMasked) return unchanged;\n\n  return {\n    value: `${url.protocol}//${url.host}${pathname}${search}${hash}`,\n    credentialRedacted,\n    identifiersMasked,\n  };\n}\n","import type { InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\nimport { Redactor, DEFAULT_REDACT_KEYS } from \"../logs/redactor.js\";\nimport { stringContainsHighConfidenceCredential } from \"../safety/credential-value-patterns.js\";\nimport { redactUrlString } from \"../safety/url-redaction.js\";\nimport {\n  applyProfileMetadataCaps,\n  resolveRedactionProfile,\n  truncateStringForProfile,\n} from \"../redaction-profiles.js\";\nimport type { ErrorInfo, RedactionProfile, TraceEvent } from \"../types.js\";\n\nexport interface RedactRunTreeForExportOptions {\n  redactionProfile?: RedactionProfile;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction deepClone<T>(value: T): T {\n  if (value === null || typeof value !== \"object\") {\n    return value;\n  }\n  if (Array.isArray(value)) {\n    return value.map((item) => deepClone(item)) as T;\n  }\n  const out: Record<string, unknown> = {};\n  for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n    out[k] = deepClone(v);\n  }\n  return out as T;\n}\n\nfunction boundAttributeValues(\n  record: Record<string, unknown>,\n  sensitiveKeys: readonly string[],\n  maxMetadataValueLength: number,\n  maxPreviewLength: number,\n  seen: WeakSet<object>,\n  depth: number,\n): Record<string, unknown> {\n  if (depth > 32) {\n    return { truncated: true, reason: \"maxDepth\" };\n  }\n\n  const out: Record<string, unknown> = {};\n  for (const [key, value] of Object.entries(record)) {\n    out[key] = boundValue(\n      value,\n      key,\n      sensitiveKeys,\n      maxMetadataValueLength,\n      maxPreviewLength,\n      seen,\n      depth,\n    );\n  }\n  return out;\n}\n\nfunction boundValue(\n  value: unknown,\n  key: string,\n  sensitiveKeys: readonly string[],\n  maxMetadataValueLength: number,\n  maxPreviewLength: number,\n  seen: WeakSet<object>,\n  depth: number,\n): unknown {\n  if (value === null || typeof value !== \"object\") {\n    if (typeof value === \"string\") {\n      const rewritten = redactUrlString(value, {\n        sensitiveKeys,\n        isSensitiveValue: stringContainsHighConfidenceCredential,\n        maskPathIds: true,\n      }).value;\n      return truncateStringForProfile(\n        stringContainsHighConfidenceCredential(rewritten) ? \"[REDACTED]\" : rewritten,\n        key,\n        maxMetadataValueLength,\n        maxPreviewLength,\n      );\n    }\n    return value;\n  }\n\n  if (seen.has(value)) return \"[Circular]\";\n  seen.add(value);\n\n  if (Array.isArray(value)) {\n    return value\n      .slice(0, 50)\n      .map((item, index) =>\n        boundValue(\n          item,\n          String(index),\n          sensitiveKeys,\n          maxMetadataValueLength,\n          maxPreviewLength,\n          seen,\n          depth + 1,\n        ),\n      );\n  }\n\n  return boundAttributeValues(\n    value as Record<string, unknown>,\n    sensitiveKeys,\n    maxMetadataValueLength,\n    maxPreviewLength,\n    seen,\n    depth + 1,\n  );\n}\n\nfunction redactEventAttributes(\n  attrs: Record<string, unknown> | undefined,\n  redactor: Redactor,\n  maxMetadataValueLength: number,\n  maxPreviewLength: number,\n): Record<string, unknown> | undefined {\n  if (!attrs || Object.keys(attrs).length === 0) {\n    return attrs;\n  }\n\n  const redacted = redactor.redactRecord(attrs);\n  const seen = new WeakSet<object>();\n  const bounded = boundAttributeValues(\n    redacted,\n    [...DEFAULT_REDACT_KEYS, ...redactor.sensitiveKeys],\n    maxMetadataValueLength,\n    maxPreviewLength,\n    seen,\n    0,\n  );\n\n  const err = bounded.error;\n  if (isRecord(err) && typeof err.message === \"string\") {\n    bounded.error = {\n      ...err,\n      message: truncateStringForProfile(\n        err.message,\n        \"message\",\n        maxMetadataValueLength,\n        maxPreviewLength,\n      ),\n      ...(typeof err.stack === \"string\"\n        ? {\n            stack: truncateStringForProfile(\n              err.stack,\n              \"stack\",\n              maxMetadataValueLength,\n              maxPreviewLength,\n            ),\n          }\n        : {}),\n    };\n  }\n\n  return bounded;\n}\n\nfunction redactErrorInfo(\n  error: ErrorInfo | undefined,\n  redactor: Redactor,\n  maxMetadataValueLength: number,\n  maxPreviewLength: number,\n): ErrorInfo | undefined {\n  if (error === undefined) return undefined;\n\n  const record = redactEventAttributes(\n    { error },\n    redactor,\n    maxMetadataValueLength,\n    maxPreviewLength,\n  );\n  const redacted = record?.error;\n  if (!isRecord(redacted) || typeof redacted.message !== \"string\") {\n    return undefined;\n  }\n\n  return {\n    message: redacted.message,\n    ...(typeof redacted.stack === \"string\" ? { stack: redacted.stack } : {}),\n  };\n}\n\n/**\n * Returns structured trace-event copies that are safe to use across every report section.\n * Profile redaction and bounds are applied before any human-readable rendering.\n */\nexport function redactTraceEventsForReport(\n  events: readonly TraceEvent[],\n  options?: RedactRunTreeForExportOptions,\n): TraceEvent[] {\n  const profile = options?.redactionProfile ?? \"local\";\n  if (profile === \"local\") {\n    return deepClone(events) as TraceEvent[];\n  }\n\n  const resolved = resolveRedactionProfile(profile);\n  const { maxMetadataValueLength, maxPreviewLength } = applyProfileMetadataCaps(\n    2000,\n    500,\n    resolved,\n  );\n  const redactor = new Redactor({ extraKeys: resolved.extraKeys });\n\n  return events.map((event): TraceEvent => {\n    switch (event.event) {\n      case \"run_started\":\n        return {\n          ...event,\n          name: truncateStringForProfile(\n            event.name,\n            \"name\",\n            maxMetadataValueLength,\n            maxPreviewLength,\n          ),\n          ...(event.metadata !== undefined\n            ? {\n                metadata: redactEventAttributes(\n                  event.metadata,\n                  redactor,\n                  maxMetadataValueLength,\n                  maxPreviewLength,\n                ),\n              }\n            : {}),\n        };\n      case \"step_started\":\n        return {\n          ...event,\n          name: truncateStringForProfile(\n            event.name,\n            \"name\",\n            maxMetadataValueLength,\n            maxPreviewLength,\n          ),\n          ...(event.metadata !== undefined\n            ? {\n                metadata: redactEventAttributes(\n                  event.metadata,\n                  redactor,\n                  maxMetadataValueLength,\n                  maxPreviewLength,\n                ),\n              }\n            : {}),\n        };\n      case \"run_completed\":\n      case \"step_completed\":\n        return {\n          ...event,\n          ...(event.error !== undefined\n            ? {\n                error: redactErrorInfo(\n                  event.error,\n                  redactor,\n                  maxMetadataValueLength,\n                  maxPreviewLength,\n                ),\n              }\n            : {}),\n        };\n      case \"outcome_observed\": {\n        const actualAttrs =\n          event.actual !== undefined\n            ? redactEventAttributes(\n                { value: event.actual },\n                redactor,\n                maxMetadataValueLength,\n                maxPreviewLength,\n              )\n            : undefined;\n        const redactedActual =\n          actualAttrs !== undefined && \"value\" in actualAttrs\n            ? actualAttrs.value\n            : undefined;\n        const redactedEvidence =\n          event.evidence !== undefined\n            ? redactEventAttributes(\n                isRecord(event.evidence) ? event.evidence : { value: event.evidence },\n                redactor,\n                maxMetadataValueLength,\n                maxPreviewLength,\n              )\n            : undefined;\n        return {\n          ...event,\n          name: truncateStringForProfile(\n            event.name,\n            \"name\",\n            maxMetadataValueLength,\n            maxPreviewLength,\n          ),\n          expectation: truncateStringForProfile(\n            event.expectation,\n            \"expectation\",\n            maxMetadataValueLength,\n            maxPreviewLength,\n          ),\n          ...(redactedActual !== undefined ? { actual: redactedActual } : {}),\n          ...(redactedEvidence !== undefined ? { evidence: redactedEvidence } : {}),\n        };\n      }\n      default:\n        return event;\n    }\n  });\n}\n\n/**\n * Returns a deep copy of `tree` with profile-based redaction applied to event attributes.\n * Does not mutate the input tree.\n */\nexport function redactRunTreeForExport(\n  tree: InspectRunTree,\n  options?: RedactRunTreeForExportOptions,\n): InspectRunTree {\n  const profile = options?.redactionProfile ?? \"local\";\n  if (profile === \"local\") {\n    return deepClone(tree);\n  }\n\n  const resolved = resolveRedactionProfile(profile);\n  const { maxMetadataValueLength, maxPreviewLength } = applyProfileMetadataCaps(\n    2000,\n    500,\n    resolved,\n  );\n  const redactor = new Redactor({ extraKeys: resolved.extraKeys });\n\n  const clone = deepClone(tree);\n\n  function walk(nodes: InspectNode[]): void {\n    for (const node of nodes) {\n      if (node.event.attributes !== undefined) {\n        node.event.attributes = redactEventAttributes(\n          node.event.attributes,\n          redactor,\n          maxMetadataValueLength,\n          maxPreviewLength,\n        );\n      }\n      if (node.children.length > 0) {\n        walk(node.children);\n      }\n    }\n  }\n\n  walk(clone.children);\n  return clone;\n}\n","import type { InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\n\nimport type { ExportOptions, ExportResult } from \"./types.js\";\nimport {\n  compactAttributes,\n  escapeHtml,\n  flattenTree,\n  safeString,\n  stableJson,\n} from \"./helpers.js\";\n\nfunction renderTreeHtml(nodes: InspectNode[], ulClass = \"tree\"): string {\n  if (nodes.length === 0) return \"\";\n  const parts: string[] = [`<ul class=\"${ulClass}\">`];\n  for (const n of nodes) {\n    const ev = n.event;\n    const status = ev.status ?? \"?\";\n    const dur =\n      ev.durationMs !== undefined && Number.isFinite(ev.durationMs)\n        ? `${ev.durationMs}ms`\n        : \"-\";\n    parts.push(\"<li>\");\n    parts.push(\n      `<span class=\"nm\">${escapeHtml(ev.name)}</span> <span class=\"meta\">[${escapeHtml(ev.kind)}] ${escapeHtml(status)} (${escapeHtml(dur)})</span>`,\n    );\n    if (n.children.length > 0) {\n      parts.push(renderTreeHtml(n.children, \"tree nested\"));\n    }\n    parts.push(\"</li>\");\n  }\n  parts.push(\"</ul>\");\n  return parts.join(\"\");\n}\n\nexport function exportHtml(tree: InspectRunTree, options?: Partial<ExportOptions>): ExportResult {\n  const warnings: string[] = [];\n  const includeMetadata = options?.includeMetadata ?? true;\n  const includeAttributes = options?.includeAttributes ?? false;\n  const includeErrors = options?.includeErrors ?? true;\n  const maxLen = options?.maxAttributeLength ?? 500;\n  const redacted = options?.redacted ?? true;\n\n  const titleName = escapeHtml(tree.name ?? tree.runId);\n\n  const summaryRows: string[] = [];\n  summaryRows.push(\n    `<tr><th scope=\"row\">runId</th><td><code>${escapeHtml(tree.runId)}</code></td></tr>`,\n  );\n  if (tree.name !== undefined) {\n    summaryRows.push(`<tr><th scope=\"row\">name</th><td>${escapeHtml(tree.name)}</td></tr>`);\n  }\n  summaryRows.push(\n    `<tr><th scope=\"row\">status</th><td>${escapeHtml(String(tree.status ?? \"unknown\"))}</td></tr>`,\n  );\n  summaryRows.push(\n    `<tr><th scope=\"row\">durationMs</th><td>${tree.durationMs !== undefined ? escapeHtml(String(tree.durationMs)) : \"—\"}</td></tr>`,\n  );\n  summaryRows.push(\n    `<tr><th scope=\"row\">startedAt</th><td>${tree.startedAt !== undefined ? escapeHtml(String(tree.startedAt)) : \"—\"}</td></tr>`,\n  );\n  summaryRows.push(\n    `<tr><th scope=\"row\">endedAt</th><td>${tree.endedAt !== undefined ? escapeHtml(String(tree.endedAt)) : \"—\"}</td></tr>`,\n  );\n  summaryRows.push(\n    `<tr><th scope=\"row\">totalEvents</th><td>${escapeHtml(String(tree.metadata.totalEvents))}</td></tr>`,\n  );\n\n  let confidenceHtml = \"\";\n  if (includeMetadata) {\n    const cb = tree.metadata.confidenceBreakdown;\n    confidenceHtml += \"<h3>Confidence breakdown</h3><table><thead><tr><th>bucket</th><th>count</th></tr></thead><tbody>\";\n    for (const k of Object.keys(cb).sort()) {\n      const key = k as keyof typeof cb;\n      confidenceHtml += `<tr><td>${escapeHtml(key)}</td><td>${cb[key]}</td></tr>`;\n    }\n    confidenceHtml += \"</tbody></table>\";\n\n    confidenceHtml += \"<h3>Kind breakdown</h3><table><thead><tr><th>kind</th><th>count</th></tr></thead><tbody>\";\n    for (const k of Object.keys(tree.metadata.kinds).sort()) {\n      const key = k as keyof typeof tree.metadata.kinds;\n      const c = tree.metadata.kinds[key];\n      if (c > 0) confidenceHtml += `<tr><td>${escapeHtml(key)}</td><td>${c}</td></tr>`;\n    }\n    confidenceHtml += \"</tbody></table>\";\n  }\n\n  const flat = flattenTree(tree);\n  const errors = flat.filter((n) => n.event.status === \"error\");\n  let errorsHtml = \"\";\n  if (includeErrors && errors.length > 0) {\n    errorsHtml += \"<h2>Errors</h2><ul>\";\n    for (const n of errors) {\n      const msg =\n        n.event.attributes && typeof n.event.attributes.error === \"object\"\n          ? safeString(\n              (n.event.attributes.error as { message?: string }).message,\n              maxLen,\n            )\n          : \"\";\n      errorsHtml += `<li><strong>${escapeHtml(n.event.name)}</strong> (${escapeHtml(n.event.eventId)}): ${escapeHtml(msg || \"error\")}</li>`;\n    }\n    errorsHtml += \"</ul>\";\n  }\n\n  let attrsHtml = \"\";\n  if (includeAttributes) {\n    attrsHtml += \"<h2>Attributes (bounded)</h2>\";\n    for (const n of flat) {\n      if (!n.event.attributes || Object.keys(n.event.attributes).length === 0) continue;\n      const compact = compactAttributes(n.event.attributes, {\n        maxLength: maxLen,\n        redacted,\n      });\n      attrsHtml += `<h3>${escapeHtml(n.event.name)}</h3><pre class=\"json\">${escapeHtml(stableJson(compact, true))}</pre>`;\n    }\n    warnings.push(\n      \"Attributes may still contain sensitive data; review exports before sharing.\",\n    );\n  }\n\n  const css = `\nbody{font-family:system-ui,sans-serif;line-height:1.5;margin:1.5rem;max-width:960px;color:#111}\nh1{font-size:1.35rem}\nh2{font-size:1.1rem;margin-top:1.5rem}\ntable{border-collapse:collapse;margin:0.75rem 0}\nth,td{border:1px solid #ccc;padding:0.35rem 0.6rem;text-align:left}\nth{background:#f5f5f5}\npre.json{background:#f8f8f8;padding:0.75rem;overflow:auto;font-size:0.85rem}\nul.tree{list-style:none;padding-left:1rem}\nul.tree.nested{padding-left:1.25rem;border-left:1px solid #ddd;margin:0.25rem 0}\n.nm{font-weight:600}\n.meta{color:#555;font-size:0.9rem}\nfooter{margin-top:2rem;font-size:0.85rem;color:#555}\n`.trim();\n\n  const html = `<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>${titleName}</title>\n<style>${css}</style>\n</head>\n<body>\n<header><h1>AgentInspect Run: ${titleName}</h1></header>\n<p class=\"note\">Generated locally by AgentInspect.</p>\n${includeMetadata ? `<section class=\"summary\"><h2>Summary</h2><table>${summaryRows.join(\"\")}</table>${confidenceHtml}</section>` : \"\"}\n<section class=\"tree\"><h2>Execution tree</h2>${tree.children.length > 0 ? renderTreeHtml(tree.children) : \"<p>No steps recorded.</p>\"}</section>\n${errorsHtml}\n${attrsHtml}\n<footer>Generated locally by AgentInspect. Review for sensitive data before sharing.</footer>\n</body>\n</html>`;\n\n  return {\n    format: \"html\",\n    content: html,\n    contentType: \"text/html\",\n    fileExtension: \".html\",\n    warnings,\n  };\n}\n","import type { InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\n\nimport type { ExportOptions, ExportResult } from \"./types.js\";\nimport {\n  compactAttributes,\n  escapeMarkdown,\n  flattenTree,\n  safeString,\n  stableJson,\n} from \"./helpers.js\";\n\nfunction renderTreeAscii(nodes: InspectNode[], indent = \"\"): string {\n  const lines: string[] = [];\n  for (let i = 0; i < nodes.length; i++) {\n    const n = nodes[i]!;\n    const last = i === nodes.length - 1;\n    const branch = last ? \"└─ \" : \"├─ \";\n    const ev = n.event;\n    const status = ev.status ?? \"?\";\n    const dur =\n      ev.durationMs !== undefined && Number.isFinite(ev.durationMs)\n        ? `${ev.durationMs}ms`\n        : \"-\";\n    lines.push(`${indent}${branch}${escapeMarkdown(ev.name)} [${ev.kind}] ${status} (${dur})`);\n    const nextIndent = indent + (last ? \"   \" : \"│  \");\n    if (n.children.length > 0) {\n      const childStr = renderTreeAscii(n.children, nextIndent);\n      if (childStr.length > 0) lines.push(childStr);\n    }\n  }\n  return lines.join(\"\\n\");\n}\n\nexport function exportMarkdown(\n  tree: InspectRunTree,\n  options?: Partial<ExportOptions>,\n): ExportResult {\n  const warnings: string[] = [];\n  const includeMetadata = options?.includeMetadata ?? true;\n  const includeAttributes = options?.includeAttributes ?? false;\n  const includeErrors = options?.includeErrors ?? true;\n  const maxLen = options?.maxAttributeLength ?? 500;\n  const redacted = options?.redacted ?? true;\n\n  const titleName = tree.name ?? tree.runId;\n  const lines: string[] = [];\n  lines.push(`# AgentInspect Run: ${escapeMarkdown(titleName)}`);\n  lines.push(\"\");\n  lines.push(\"Generated locally by AgentInspect. Review for sensitive data before sharing.\");\n  lines.push(\"\");\n\n  if (includeMetadata) {\n    lines.push(\"## Summary\");\n    lines.push(\"\");\n    lines.push(`- **runId**: ${escapeMarkdown(tree.runId)}`);\n    if (tree.name !== undefined) lines.push(`- **name**: ${escapeMarkdown(tree.name)}`);\n    lines.push(`- **status**: ${escapeMarkdown(String(tree.status ?? \"unknown\"))}`);\n    lines.push(\n      `- **durationMs**: ${tree.durationMs !== undefined ? escapeMarkdown(String(tree.durationMs)) : \"-\"}`,\n    );\n    lines.push(\n      `- **startedAt**: ${tree.startedAt !== undefined ? escapeMarkdown(String(tree.startedAt)) : \"-\"}`,\n    );\n    lines.push(\n      `- **endedAt**: ${tree.endedAt !== undefined ? escapeMarkdown(String(tree.endedAt)) : \"-\"}`,\n    );\n    lines.push(`- **totalEvents**: ${tree.metadata.totalEvents}`);\n    lines.push(\"\");\n    lines.push(\"### Confidence breakdown\");\n    lines.push(\"\");\n    lines.push(\"| bucket | count |\");\n    lines.push(\"| --- | --- |\");\n    for (const k of Object.keys(tree.metadata.confidenceBreakdown).sort()) {\n      const key = k as keyof typeof tree.metadata.confidenceBreakdown;\n      lines.push(\n        `| ${escapeMarkdown(key)} | ${tree.metadata.confidenceBreakdown[key]} |`,\n      );\n    }\n    lines.push(\"\");\n    lines.push(\"### Kind breakdown\");\n    lines.push(\"\");\n    lines.push(\"| kind | count |\");\n    lines.push(\"| --- | --- |\");\n    for (const k of Object.keys(tree.metadata.kinds).sort()) {\n      const key = k as keyof typeof tree.metadata.kinds;\n      const c = tree.metadata.kinds[key];\n      if (c > 0) lines.push(`| ${escapeMarkdown(key)} | ${c} |`);\n    }\n    lines.push(\"\");\n  }\n\n  lines.push(\"## Execution tree\");\n  lines.push(\"\");\n  lines.push(\"```text\");\n  lines.push(\n    tree.children.length > 0 ? renderTreeAscii(tree.children) : \"(no steps)\",\n  );\n  lines.push(\"```\");\n  lines.push(\"\");\n\n  const flat = flattenTree(tree);\n  const errors = flat.filter((n) => n.event.status === \"error\");\n  if (includeErrors && errors.length > 0) {\n    lines.push(\"## Errors\");\n    lines.push(\"\");\n    for (const n of errors) {\n      const msg =\n        n.event.attributes && typeof n.event.attributes.error === \"object\"\n          ? safeString(\n              (n.event.attributes.error as { message?: string }).message,\n              maxLen,\n            )\n          : \"\";\n      lines.push(\n        `- **${escapeMarkdown(n.event.name)}** (${escapeMarkdown(n.event.eventId)}): ${escapeMarkdown(msg || \"error\")}`,\n      );\n    }\n    lines.push(\"\");\n  }\n\n  if (includeAttributes) {\n    lines.push(\"## Attributes (bounded)\");\n    lines.push(\"\");\n    for (const n of flat) {\n      if (!n.event.attributes || Object.keys(n.event.attributes).length === 0) continue;\n      const compact = compactAttributes(n.event.attributes, {\n        maxLength: maxLen,\n        redacted,\n      });\n      lines.push(`### ${escapeMarkdown(n.event.name)}`);\n      lines.push(\"\");\n      lines.push(\"```json\");\n      lines.push(stableJson(compact, true));\n      lines.push(\"```\");\n      lines.push(\"\");\n    }\n    warnings.push(\n      \"Attributes may still contain sensitive data; review exports before sharing.\",\n    );\n  }\n\n  return {\n    format: \"markdown\",\n    content: lines.join(\"\\n\"),\n    contentType: \"text/markdown\",\n    fileExtension: \".md\",\n    warnings,\n  };\n}\n","import crypto from \"node:crypto\";\n\nimport type { InspectKind, InspectRunTree } from \"../types/inspect-event.js\";\n\nimport type { ExportOptions, ExportResult } from \"./types.js\";\nimport { EXPORT_PAYLOAD_VERSION } from \"./types.js\";\nimport { flattenTree } from \"./helpers.js\";\n\nexport interface OpenInferenceSpan {\n  trace_id: string;\n  span_id: string;\n  parent_span_id?: string;\n  name: string;\n  /** Decimal string: epoch-nanosecond values exceed Number.MAX_SAFE_INTEGER. */\n  start_time_unix_nano: string;\n  end_time_unix_nano?: string;\n  attributes: Record<string, unknown>;\n  status?: {\n    code: \"OK\" | \"ERROR\" | \"UNSET\";\n    message?: string;\n  };\n}\n\nexport interface OpenInferenceExport {\n  exporter: \"agent-inspect\";\n  format: \"openinference\";\n  compatibility: \"openinference-compatible\";\n  version: string;\n  trace_id: string;\n  spans: OpenInferenceSpan[];\n  warnings: string[];\n}\n\nfunction hexFrom(seed: string, byteLen: number): string {\n  return crypto.createHash(\"sha256\").update(seed, \"utf8\").digest(\"hex\").slice(0, byteLen * 2);\n}\n\n/**\n * Convert epoch milliseconds to exact epoch nanoseconds. Computed in BigInt\n * because realistic epochs exceed Number.MAX_SAFE_INTEGER once scaled to\n * nanoseconds (1.7e18 vs 9.0e15), which silently loses precision in doubles.\n */\nfunction unixNano(ms: number): bigint {\n  const whole = Math.trunc(ms);\n  const fractionNs = Math.round((ms - whole) * 1e6);\n  return BigInt(whole) * 1_000_000n + BigInt(fractionNs);\n}\n\nfunction mapInspectKindToOI(\n  kind: InspectKind,\n  warnings: string[],\n): { openInferenceKind: string; ambiguousNote?: string } {\n  switch (kind) {\n    case \"LLM\":\n      return { openInferenceKind: \"LLM\" };\n    case \"TOOL\":\n      return { openInferenceKind: \"TOOL\" };\n    case \"CHAIN\":\n      return { openInferenceKind: \"CHAIN\" };\n    case \"RETRIEVER\":\n      return { openInferenceKind: \"RETRIEVER\" };\n    case \"AGENT\":\n      return { openInferenceKind: \"AGENT\" };\n    case \"DECISION\":\n      warnings.push(\n        `Ambiguous kind DECISION mapped to CHAIN for span compatibility (${EXPORT_PAYLOAD_VERSION}).`,\n      );\n      return { openInferenceKind: \"CHAIN\" };\n    case \"RESULT\":\n      warnings.push(\n        `Ambiguous kind RESULT mapped to UNKNOWN for span compatibility (${EXPORT_PAYLOAD_VERSION}).`,\n      );\n      return { openInferenceKind: \"UNKNOWN\" };\n    case \"ERROR\":\n      warnings.push(`ERROR kind mapped to CHAIN for span compatibility.`);\n      return { openInferenceKind: \"CHAIN\" };\n    case \"LOG\":\n    case \"LOGIC\":\n    case \"RUN\":\n      warnings.push(`${kind} mapped to CHAIN for span compatibility.`);\n      return { openInferenceKind: \"CHAIN\" };\n    default:\n      warnings.push(`Unhandled InspectKind ${kind} mapped to UNKNOWN.`);\n      return { openInferenceKind: \"UNKNOWN\" };\n  }\n}\n\nexport function exportOpenInference(\n  tree: InspectRunTree,\n  options?: Partial<ExportOptions>,\n): ExportResult {\n  const warnings: string[] = [\n    \"OpenInference-compatible JSON export is experimental until verified against specific backends.\",\n    \"This file was generated locally and not sent anywhere.\",\n  ];\n\n  const traceId = hexFrom(`trace:${tree.runId}`, 16);\n  const includeAttributes = options?.includeAttributes ?? false;\n  const maxLen = options?.maxAttributeLength ?? 500;\n  const pretty = options?.pretty ?? true;\n\n  const spans: OpenInferenceSpan[] = [];\n\n  for (const n of flattenTree(tree)) {\n    const ev = n.event;\n    const spanId = hexFrom(`${tree.runId}:${ev.eventId}`, 8);\n    const parentSpanHex = ev.parentId\n      ? hexFrom(`${tree.runId}:${ev.parentId}`, 8)\n      : undefined;\n    const startNs = unixNano(ev.timestamp);\n    let endNs: bigint | undefined;\n    if (ev.durationMs !== undefined && Number.isFinite(ev.durationMs)) {\n      endNs = startNs + unixNano(ev.durationMs);\n    }\n\n    const { openInferenceKind } = mapInspectKindToOI(ev.kind, warnings);\n\n    const attrs: Record<string, unknown> = {\n      \"openinference.span.kind\": openInferenceKind,\n      \"agent_inspect.kind\": ev.kind,\n      \"agent_inspect.confidence\": ev.confidence,\n      \"agent_inspect.source.type\": ev.source.type,\n      \"agent_inspect.run_id\": tree.runId,\n      \"agent_inspect.event_id\": ev.eventId,\n      \"agent_inspect.status\": ev.status ?? \"unset\",\n    };\n    if (ev.durationMs !== undefined) {\n      attrs[\"agent_inspect.duration_ms\"] = ev.durationMs;\n    }\n\n    const meta = ev.attributes;\n    if (meta?.model !== undefined && typeof meta.model === \"string\") {\n      attrs[\"llm.model_name\"] = meta.model;\n    }\n    const tokens = meta?.tokens;\n    if (tokens && typeof tokens === \"object\" && tokens !== null) {\n      const inp = (tokens as { input?: number }).input;\n      const outp = (tokens as { output?: number }).output;\n      if (typeof inp === \"number\") attrs[\"llm.token_count.prompt\"] = inp;\n      if (typeof outp === \"number\") attrs[\"llm.token_count.completion\"] = outp;\n    }\n\n    if (includeAttributes && meta && typeof meta === \"object\") {\n      for (const [k, v] of Object.entries(meta)) {\n        if (k === \"tokens\" || k === \"model\") continue;\n        if (v !== undefined && v !== null && typeof v !== \"object\") {\n          attrs[`agent_inspect.preview.${k}`] =\n            typeof v === \"string\" ? v.slice(0, maxLen) : v;\n        }\n      }\n    }\n\n    let status: OpenInferenceSpan[\"status\"];\n    if (ev.status === \"error\") {\n      const msg =\n        meta && typeof meta.error === \"object\" && meta.error !== null\n          ? String((meta.error as { message?: string }).message ?? \"error\")\n          : \"error\";\n      status = { code: \"ERROR\", message: msg.slice(0, maxLen) };\n    } else if (ev.status === \"ok\") {\n      status = { code: \"OK\" };\n    } else {\n      status = { code: \"UNSET\" };\n    }\n\n    spans.push({\n      trace_id: traceId,\n      span_id: spanId,\n      parent_span_id: parentSpanHex,\n      name: ev.name,\n      start_time_unix_nano: startNs.toString(),\n      end_time_unix_nano: endNs?.toString(),\n      attributes: attrs,\n      status,\n    });\n  }\n\n  const payload: OpenInferenceExport = {\n    exporter: \"agent-inspect\",\n    format: \"openinference\",\n    compatibility: \"openinference-compatible\",\n    version: EXPORT_PAYLOAD_VERSION,\n    trace_id: traceId,\n    spans,\n    warnings,\n  };\n\n  return {\n    format: \"openinference\",\n    content: JSON.stringify(payload, null, pretty ? 2 : undefined),\n    contentType: \"application/json\",\n    fileExtension: \".openinference.json\",\n    warnings,\n  };\n}\n","import crypto from \"node:crypto\";\n\nimport type { InspectKind } from \"../types/inspect-event.js\";\nimport type { InspectRunTree } from \"../types/inspect-event.js\";\n\nimport type { ExportOptions, ExportResult } from \"./types.js\";\nimport { flattenTree } from \"./helpers.js\";\n\n/** OTLP StatusCode numeric enum (proto). */\nexport const OTLP_STATUS_CODE_UNSET = 0;\nexport const OTLP_STATUS_CODE_OK = 1;\nexport const OTLP_STATUS_CODE_ERROR = 2;\n\n/** OTLP SpanKind numeric enum — INTERNAL. */\nexport const OTLP_SPAN_KIND_INTERNAL = 1;\n\nfunction hexFrom(seed: string, byteLen: number): string {\n  return crypto.createHash(\"sha256\").update(seed, \"utf8\").digest(\"hex\").slice(0, byteLen * 2);\n}\n\n/**\n * Convert epoch milliseconds to exact epoch nanoseconds. Computed in BigInt\n * because realistic epochs exceed Number.MAX_SAFE_INTEGER once scaled to\n * nanoseconds (1.7e18 vs 9.0e15), which silently loses precision in doubles.\n */\nfunction unixNano(ms: number): bigint {\n  const whole = Math.trunc(ms);\n  const fractionNs = Math.round((ms - whole) * 1e6);\n  return BigInt(whole) * 1_000_000n + BigInt(fractionNs);\n}\n\nfunction stringAttr(key: string, value: string): { key: string; value: { stringValue: string } } {\n  return { key, value: { stringValue: value } };\n}\n\nfunction intAttr(key: string, value: number): { key: string; value: { intValue: string } } {\n  return { key, value: { intValue: String(Math.trunc(value)) } };\n}\n\nfunction doubleAttr(key: string, value: number): { key: string; value: { doubleValue: number } } {\n  return { key, value: { doubleValue: value } };\n}\n\nfunction boolAttr(key: string, value: boolean): { key: string; value: { boolValue: boolean } } {\n  return { key, value: { boolValue: value } };\n}\n\ntype OtlpAttr =\n  | ReturnType<typeof stringAttr>\n  | ReturnType<typeof intAttr>\n  | ReturnType<typeof doubleAttr>\n  | ReturnType<typeof boolAttr>;\n\nfunction numberAttr(key: string, value: number): OtlpAttr {\n  if (Number.isFinite(value) && !Number.isInteger(value)) {\n    return doubleAttr(key, value);\n  }\n  return intAttr(key, value);\n}\n\nfunction genAiOperationName(kind: InspectKind): string | undefined {\n  switch (kind) {\n    case \"LLM\":\n      return \"generate_content\";\n    case \"TOOL\":\n      return \"execute_tool\";\n    case \"AGENT\":\n      return \"invoke_agent\";\n    default:\n      return undefined;\n  }\n}\n\nfunction resolveSpanTimes(ev: {\n  timestamp: number;\n  durationMs?: number;\n  attributes?: Record<string, unknown>;\n}): { startNs: string; endNs?: string } {\n  const startedAtMs =\n    typeof ev.attributes?.startedAtMs === \"number\" &&\n    Number.isFinite(ev.attributes.startedAtMs)\n      ? ev.attributes.startedAtMs\n      : undefined;\n  const endedAtMs =\n    typeof ev.attributes?.endedAtMs === \"number\" &&\n    Number.isFinite(ev.attributes.endedAtMs)\n      ? ev.attributes.endedAtMs\n      : undefined;\n  const startMs = startedAtMs ?? ev.timestamp;\n  const startNs = String(unixNano(startMs));\n  if (endedAtMs !== undefined) {\n    return { startNs, endNs: String(unixNano(endedAtMs)) };\n  }\n  if (ev.durationMs !== undefined && Number.isFinite(ev.durationMs)) {\n    return {\n      startNs,\n      endNs: String(unixNano(startMs) + unixNano(ev.durationMs)),\n    };\n  }\n  return { startNs };\n}\n\nexport function exportOtlpJson(\n  tree: InspectRunTree,\n  options?: Partial<ExportOptions>,\n): ExportResult {\n  const warnings: string[] = [\n    \"OTLP JSON export uses OTel GenAI-aligned attributes where applicable; experimental until verified against specific collectors.\",\n    \"Not OTLP gRPC/protobuf — JSON mapping only. Generated locally; no network upload.\",\n    \"Status and span kind use OTLP numeric enums (StatusCode 0/1/2, SpanKind INTERNAL=1).\",\n  ];\n\n  const traceId = hexFrom(`trace:${tree.runId}`, 16);\n  const includeAttributes = options?.includeAttributes ?? false;\n  const maxLen = options?.maxAttributeLength ?? 500;\n  const pretty = options?.pretty ?? true;\n\n  const flat = flattenTree(tree);\n  const spans: Record<string, unknown>[] = [];\n\n  for (const n of flat) {\n    const ev = n.event;\n    const spanId = hexFrom(`${tree.runId}:${ev.eventId}`, 8);\n    const parentSpanId = ev.parentId\n      ? hexFrom(`${tree.runId}:${ev.parentId}`, 8)\n      : undefined;\n\n    const { startNs, endNs } = resolveSpanTimes(ev);\n\n    const attrs: OtlpAttr[] = [\n      stringAttr(\"agent_inspect.kind\", ev.kind),\n      stringAttr(\"agent_inspect.confidence\", ev.confidence),\n      stringAttr(\"agent_inspect.source.type\", ev.source.type),\n      stringAttr(\"agent_inspect.run_id\", tree.runId),\n      stringAttr(\"agent_inspect.event_id\", ev.eventId),\n      stringAttr(\"agent_inspect.status\", ev.status ?? \"unset\"),\n    ];\n\n    if (ev.durationMs !== undefined) {\n      attrs.push(intAttr(\"agent_inspect.duration_ms\", ev.durationMs));\n    }\n\n    const op = genAiOperationName(ev.kind);\n    if (op !== undefined) {\n      attrs.push(stringAttr(\"gen_ai.operation.name\", op));\n    }\n\n    const meta = ev.attributes;\n    if (meta?.model !== undefined && typeof meta.model === \"string\") {\n      attrs.push(stringAttr(\"gen_ai.request.model\", meta.model.slice(0, maxLen)));\n    }\n\n    const tokens = meta?.tokens;\n    if (tokens && typeof tokens === \"object\" && tokens !== null) {\n      const inp = (tokens as { input?: number }).input;\n      const outp = (tokens as { output?: number }).output;\n      if (typeof inp === \"number\") attrs.push(intAttr(\"gen_ai.usage.input_tokens\", inp));\n      if (typeof outp === \"number\") attrs.push(intAttr(\"gen_ai.usage.output_tokens\", outp));\n    }\n\n    if (includeAttributes && meta && typeof meta === \"object\") {\n      for (const [k, v] of Object.entries(meta)) {\n        if (k === \"tokens\" || k === \"model\") continue;\n        if (typeof v === \"string\") {\n          attrs.push(stringAttr(`agent_inspect.preview.${k}`, v.slice(0, maxLen)));\n        } else if (typeof v === \"number\" && Number.isFinite(v)) {\n          attrs.push(numberAttr(`agent_inspect.preview.${k}`, v));\n        } else if (typeof v === \"boolean\") {\n          attrs.push(boolAttr(`agent_inspect.preview.${k}`, v));\n        }\n      }\n    }\n\n    let statusCode: number = OTLP_STATUS_CODE_UNSET;\n    let statusMessage: string | undefined;\n    if (ev.status === \"error\") {\n      statusCode = OTLP_STATUS_CODE_ERROR;\n      statusMessage =\n        meta && typeof meta.error === \"object\" && meta.error !== null\n          ? String((meta.error as { message?: string }).message ?? \"error\").slice(0, maxLen)\n          : \"error\";\n    } else if (ev.status === \"ok\") {\n      statusCode = OTLP_STATUS_CODE_OK;\n    }\n\n    const spanJson: Record<string, unknown> = {\n      traceId,\n      spanId,\n      name: ev.name,\n      kind: OTLP_SPAN_KIND_INTERNAL,\n      startTimeUnixNano: startNs,\n      attributes: attrs,\n      status: {\n        code: statusCode,\n        ...(statusMessage !== undefined ? { message: statusMessage } : {}),\n      },\n    };\n\n    if (parentSpanId !== undefined) {\n      spanJson.parentSpanId = parentSpanId;\n    }\n    if (endNs !== undefined) {\n      spanJson.endTimeUnixNano = endNs;\n    }\n\n    spans.push(spanJson);\n  }\n\n  const payload = {\n    resourceSpans: [\n      {\n        resource: {\n          attributes: [stringAttr(\"service.name\", \"agent-inspect\")],\n        },\n        scopeSpans: [\n          {\n            scope: { name: \"agent-inspect\" },\n            spans,\n          },\n        ],\n      },\n    ],\n  };\n\n  return {\n    format: \"otlp-json\",\n    content: JSON.stringify(payload, null, pretty ? 2 : undefined),\n    contentType: \"application/json\",\n    fileExtension: \".otlp.json\",\n    warnings,\n  };\n}\n","import type { ExportFormat, ExportValidationResult } from \"./types.js\";\n\nconst EXPERIMENTAL =\n  \"Experimental compatibility export — verify against your target tooling before relying on it.\";\n\nfunction pushPath(\n  errors: string[],\n  path: string,\n  message: string,\n): void {\n  errors.push(`${path}: ${message}`);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction validateOtlpJson(content: string): ExportValidationResult {\n  const errors: string[] = [];\n  const warnings: string[] = [\n    EXPERIMENTAL,\n    \"OTLP JSON mapping uses OTel GenAI-aligned attributes where applicable; collectors may require transformation.\",\n    \"protocol-valid ≠ profile-complete ≠ fixture-complete — nested path diagnostics report protocol shape only.\",\n  ];\n\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(content) as unknown;\n  } catch {\n    pushPath(errors, \"$\", \"OTLP JSON export is not valid JSON\");\n    return { ok: false, format: \"otlp-json\", errors, warnings };\n  }\n\n  if (!isRecord(parsed)) {\n    pushPath(errors, \"$\", \"OTLP JSON export must be an object\");\n    return { ok: false, format: \"otlp-json\", errors, warnings };\n  }\n\n  if (!Array.isArray(parsed.resourceSpans)) {\n    pushPath(errors, \"$.resourceSpans\", \"must be an array\");\n    return { ok: false, format: \"otlp-json\", errors, warnings };\n  }\n\n  parsed.resourceSpans.forEach((resourceSpan, rsi) => {\n    const rsPath = `$.resourceSpans[${rsi}]`;\n    if (!isRecord(resourceSpan)) {\n      pushPath(errors, rsPath, \"must be an object\");\n      return;\n    }\n    if (!Array.isArray(resourceSpan.scopeSpans)) {\n      pushPath(errors, `${rsPath}.scopeSpans`, \"must be an array\");\n      return;\n    }\n    resourceSpan.scopeSpans.forEach((scopeSpan, ssi) => {\n      const ssPath = `${rsPath}.scopeSpans[${ssi}]`;\n      if (!isRecord(scopeSpan)) {\n        pushPath(errors, ssPath, \"must be an object\");\n        return;\n      }\n      if (!Array.isArray(scopeSpan.spans)) {\n        pushPath(errors, `${ssPath}.spans`, \"must be an array\");\n        return;\n      }\n      scopeSpan.spans.forEach((span, spi) => {\n        const spanPath = `${ssPath}.spans[${spi}]`;\n        if (!isRecord(span)) {\n          pushPath(errors, spanPath, \"must be an object\");\n          return;\n        }\n        if (typeof span.traceId !== \"string\" || span.traceId.length === 0) {\n          pushPath(errors, `${spanPath}.traceId`, \"must be a non-empty string\");\n        }\n        if (typeof span.spanId !== \"string\" || span.spanId.length === 0) {\n          pushPath(errors, `${spanPath}.spanId`, \"must be a non-empty string\");\n        }\n        if (typeof span.name !== \"string\") {\n          pushPath(errors, `${spanPath}.name`, \"must be a string\");\n        }\n        if (\n          typeof span.startTimeUnixNano !== \"string\" ||\n          !/^\\d+$/.test(span.startTimeUnixNano)\n        ) {\n          pushPath(\n            errors,\n            `${spanPath}.startTimeUnixNano`,\n            \"must be a decimal-string 64-bit integer\",\n          );\n        }\n        if (\n          span.endTimeUnixNano !== undefined &&\n          (typeof span.endTimeUnixNano !== \"string\" ||\n            !/^\\d+$/.test(span.endTimeUnixNano))\n        ) {\n          pushPath(\n            errors,\n            `${spanPath}.endTimeUnixNano`,\n            \"must be a decimal-string 64-bit integer when present\",\n          );\n        }\n\n        // SpanKind: numeric preferred; historical string enums remain protocol-valid.\n        if (typeof span.kind === \"number\") {\n          if (!Number.isInteger(span.kind)) {\n            pushPath(errors, `${spanPath}.kind`, \"must be an integer SpanKind enum\");\n          }\n        } else if (typeof span.kind === \"string\") {\n          warnings.push(\n            `${spanPath}.kind: string SpanKind enum is legacy; prefer numeric (INTERNAL=1)`,\n          );\n        } else if (span.kind !== undefined) {\n          pushPath(\n            errors,\n            `${spanPath}.kind`,\n            \"must be numeric SpanKind or historical string enum\",\n          );\n        }\n\n        if (!isRecord(span.status)) {\n          pushPath(errors, `${spanPath}.status`, \"must be an object\");\n        } else {\n          const code = span.status.code;\n          if (typeof code === \"number\") {\n            if (![0, 1, 2].includes(code)) {\n              pushPath(\n                errors,\n                `${spanPath}.status.code`,\n                \"must be numeric StatusCode 0 (UNSET), 1 (OK), or 2 (ERROR)\",\n              );\n            }\n          } else if (typeof code === \"string\") {\n            const upper = code.toUpperCase();\n            if (\n              upper !== \"STATUS_CODE_UNSET\" &&\n              upper !== \"STATUS_CODE_OK\" &&\n              upper !== \"STATUS_CODE_ERROR\" &&\n              upper !== \"UNSET\" &&\n              upper !== \"OK\" &&\n              upper !== \"ERROR\" &&\n              !/^[012]$/.test(code.trim())\n            ) {\n              pushPath(\n                errors,\n                `${spanPath}.status.code`,\n                \"unrecognized StatusCode string\",\n              );\n            } else {\n              warnings.push(\n                `${spanPath}.status.code: string StatusCode is legacy; prefer numeric 0/1/2`,\n              );\n            }\n          } else {\n            pushPath(\n              errors,\n              `${spanPath}.status.code`,\n              \"must be numeric StatusCode 0/1/2 or historical string enum\",\n            );\n          }\n        }\n      });\n    });\n  });\n\n  return { ok: errors.length === 0, format: \"otlp-json\", errors, warnings };\n}\n\nexport function validateExportContent(\n  format: ExportFormat,\n  content: string,\n): ExportValidationResult {\n  const errors: string[] = [];\n  const warnings: string[] = [EXPERIMENTAL];\n\n  if (format === \"markdown\") {\n    if (!content.startsWith(\"# AgentInspect Run\")) {\n      errors.push('Markdown export must start with \"# AgentInspect Run\"');\n    }\n    return { ok: errors.length === 0, format, errors, warnings };\n  }\n\n  if (format === \"html\") {\n    const lower = content.toLowerCase();\n    if (!lower.includes(\"<!doctype html\")) {\n      errors.push(\"HTML export must include <!doctype html>\");\n    }\n    if (/<\\s*script\\b/i.test(content)) {\n      errors.push(\"HTML export must not contain script tags\");\n    }\n    if (/<\\s*link\\b[^>]*href\\s*=/i.test(content)) {\n      warnings.push(\"HTML export contains link tags — ensure no external stylesheets.\");\n    }\n    return { ok: errors.length === 0, format, errors, warnings };\n  }\n\n  if (format === \"openinference\") {\n    let parsed: unknown;\n    try {\n      parsed = JSON.parse(content) as unknown;\n    } catch {\n      errors.push(\"OpenInference export is not valid JSON\");\n      return { ok: false, format, errors, warnings };\n    }\n    if (!parsed || typeof parsed !== \"object\") {\n      errors.push(\"OpenInference export JSON must be an object\");\n      return { ok: false, format, errors, warnings };\n    }\n    const o = parsed as Record<string, unknown>;\n    if (o.format !== \"openinference\") {\n      errors.push('OpenInference export must include format: \"openinference\"');\n    }\n    if (!Array.isArray(o.spans)) {\n      errors.push(\"OpenInference export must include a spans array\");\n    }\n    warnings.push(\"OpenInference-compatible JSON is not guaranteed for every backend.\");\n    return { ok: errors.length === 0, format, errors, warnings };\n  }\n\n  if (format === \"otlp-json\") {\n    return validateOtlpJson(content);\n  }\n\n  errors.push(`Unsupported export format`);\n  return { ok: false, format, errors, warnings };\n}\n","import type { InspectEvent, InspectKind, InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\nimport type {\n  StepStartedEvent,\n  StepType,\n  TraceEvent,\n} from \"../types.js\";\n\nimport { zeroKinds } from \"./helpers.js\";\n\nfunction stepTypeToInspectKind(t: StepType): InspectKind {\n  switch (t) {\n    case \"llm\":\n      return \"LLM\";\n    case \"tool\":\n      return \"TOOL\";\n    case \"decision\":\n      return \"DECISION\";\n    case \"run\":\n      return \"CHAIN\";\n    default:\n      return \"LOGIC\";\n  }\n}\n\nfunction mapStepStatus(\n  s: \"success\" | \"error\" | undefined,\n): InspectEvent[\"status\"] | undefined {\n  if (s === undefined) return \"running\";\n  if (s === \"success\") return \"ok\";\n  return \"error\";\n}\n\ntype StepAcc = {\n  id: string;\n  parentId?: string;\n  name: string;\n  type: StepType;\n  startTime: number;\n  timestamp: number;\n  metadata?: Record<string, unknown>;\n  status?: \"success\" | \"error\";\n  endTime?: number;\n  durationMs?: number;\n  error?: { message: string; stack?: string };\n};\n\n/**\n * Build an {@link InspectRunTree} from v0.1 JSONL {@link TraceEvent} rows (manual tracing).\n * Does not mutate the input array or event objects.\n */\nexport function manualTraceEventsToRunTree(events: TraceEvent[]): InspectRunTree {\n  const started = events.find((e) => e.event === \"run_started\");\n  if (!started || started.event !== \"run_started\") {\n    throw new Error(\"Invalid trace: missing run_started\");\n  }\n\n  const runId = started.runId;\n  const runName = started.name;\n\n  const completedAll = events.filter((e) => e.event === \"run_completed\");\n  const lastCompleted = completedAll[completedAll.length - 1];\n\n  let runStatus: InspectRunTree[\"status\"];\n  if (lastCompleted === undefined) {\n    runStatus = \"running\";\n  } else if (lastCompleted.status === \"success\") {\n    runStatus = \"ok\";\n  } else {\n    runStatus = \"error\";\n  }\n\n  const startedAt = started.startTime;\n  const endedAt =\n    lastCompleted !== undefined && runStatus !== \"running\" ? lastCompleted.endTime : undefined;\n  const durationMs =\n    lastCompleted !== undefined && Number.isFinite(lastCompleted.durationMs)\n      ? lastCompleted.durationMs\n      : undefined;\n\n  const steps = new Map<string, StepAcc>();\n\n  for (const e of events) {\n    if (e.event !== \"step_started\") continue;\n    const s = e as StepStartedEvent;\n    steps.set(s.stepId, {\n      id: s.stepId,\n      parentId: s.parentId,\n      name: s.name,\n      type: s.type,\n      startTime: s.startTime,\n      timestamp: s.timestamp,\n      metadata: s.metadata as Record<string, unknown> | undefined,\n    });\n  }\n\n  for (const e of events) {\n    if (e.event !== \"step_completed\") continue;\n    const acc = steps.get(e.stepId);\n    if (!acc) continue;\n    acc.status = e.status;\n    acc.endTime = e.endTime;\n    acc.durationMs = e.durationMs;\n    if (e.error?.message) {\n      acc.error = e.error;\n    }\n  }\n\n  const inspectNodes = new Map<string, InspectNode>();\n\n  for (const acc of steps.values()) {\n    const kind = stepTypeToInspectKind(acc.type);\n    const status = mapStepStatus(acc.status);\n    const attrs: Record<string, unknown> = { ...(acc.metadata ?? {}) };\n    if (acc.error?.message) {\n      attrs.error = acc.error;\n    }\n\n    const evt: InspectEvent = {\n      eventId: acc.id,\n      runId,\n      parentId: acc.parentId,\n      name: acc.name,\n      kind,\n      timestamp: acc.timestamp,\n      status,\n      durationMs: acc.durationMs,\n      attributes: Object.keys(attrs).length > 0 ? attrs : undefined,\n      confidence: \"explicit\",\n      source: { type: \"manual\" },\n    };\n\n    inspectNodes.set(acc.id, { event: evt, children: [], depth: 0 });\n  }\n\n  const roots: InspectNode[] = [];\n  const sortByStart = (a: InspectNode, b: InspectNode) =>\n    a.event.timestamp - b.event.timestamp;\n\n  for (const node of inspectNodes.values()) {\n    const pid = node.event.parentId;\n    if (pid !== undefined && inspectNodes.has(pid)) {\n      inspectNodes.get(pid)!.children.push(node);\n    } else {\n      roots.push(node);\n    }\n  }\n\n  roots.sort(sortByStart);\n  for (const n of inspectNodes.values()) {\n    n.children.sort(sortByStart);\n  }\n\n  const assignDepth = (n: InspectNode, depth: number) => {\n    n.depth = depth;\n    for (const c of n.children) assignDepth(c, depth + 1);\n  };\n  for (const r of roots) assignDepth(r, 0);\n\n  const confidenceBreakdown = {\n    explicit: 0,\n    correlated: 0,\n    heuristic: 0,\n    unknown: 0,\n  } as InspectRunTree[\"metadata\"][\"confidenceBreakdown\"];\n\n  const kinds = zeroKinds();\n\n  function countWalk(nodes: InspectNode[]): void {\n    for (const n of nodes) {\n      confidenceBreakdown[n.event.confidence] += 1;\n      kinds[n.event.kind] += 1;\n      if (n.children.length > 0) countWalk(n.children);\n    }\n  }\n  countWalk(roots);\n\n  return {\n    runId,\n    name: runName,\n    status: runStatus,\n    startedAt,\n    endedAt,\n    durationMs,\n    children: roots,\n    metadata: {\n      totalEvents: inspectNodes.size,\n      confidenceBreakdown,\n      kinds,\n    },\n  };\n}\n","import type { ExportValidationResult } from \"./types.js\";\nimport { validateExportContent } from \"./validation.js\";\n\n/** Validate committed or exported OpenInference-compatible JSON fixtures. */\nexport function validateOpenInferenceFixture(content: string): ExportValidationResult {\n  return validateExportContent(\"openinference\", content);\n}\n\n/** Validate committed or exported OTLP JSON fixtures. */\nexport function validateOtlpJsonFixture(content: string): ExportValidationResult {\n  return validateExportContent(\"otlp-json\", content);\n}\n","/**\n * Semantic field checks beyond shape validation for standards fixtures.\n */\nimport type { ExportValidationResult } from \"./types.js\";\nimport { validateOpenInferenceFixture, validateOtlpJsonFixture } from \"./fixtures.js\";\n\nconst SEMCONV_PIN = \"OTEL_GEN_AI_SEMCONV_PIN\";\n\nfunction semanticWarnings(format: \"openinference\" | \"otlp-json\", parsed: Record<string, unknown>): string[] {\n  const warnings: string[] = [];\n  if (format === \"openinference\") {\n    const spans = Array.isArray(parsed.spans) ? parsed.spans : [];\n    if (spans.length > 0) {\n      const first = spans[0] as Record<string, unknown>;\n      if (first.trace_id === undefined && first.traceId === undefined) {\n        warnings.push(\"OpenInference semantic: first span missing trace_id\");\n      }\n    }\n  }\n  if (format === \"otlp-json\") {\n    warnings.push(`OTLP semantic validation pinned to ${SEMCONV_PIN} mapping docs`);\n  }\n  return warnings;\n}\n\nexport function validateOpenInferenceSemanticFixture(content: string): ExportValidationResult {\n  const base = validateOpenInferenceFixture(content);\n  if (!base.ok) return base;\n  try {\n    const parsed = JSON.parse(content) as Record<string, unknown>;\n    return {\n      ...base,\n      warnings: [...base.warnings, ...semanticWarnings(\"openinference\", parsed)],\n    };\n  } catch {\n    return base;\n  }\n}\n\nexport function validateOtlpJsonSemanticFixture(content: string): ExportValidationResult {\n  const base = validateOtlpJsonFixture(content);\n  if (!base.ok) return base;\n  try {\n    const parsed = JSON.parse(content) as Record<string, unknown>;\n    return {\n      ...base,\n      warnings: [...base.warnings, ...semanticWarnings(\"otlp-json\", parsed)],\n    };\n  } catch {\n    return base;\n  }\n}\n","/**\n * Documented OpenTelemetry GenAI semantic convention reference for OTLP JSON exports.\n * Local mapping only — no OTel SDK dependency in core.\n *\n * Declared `attributes` must match keys the exporter can emit. Do not list\n * prompt/completion bodies here — AgentInspect never exports them on this path.\n */\nexport const OTEL_GEN_AI_SEMCONV_PIN = {\n  /** Human-readable pin label recorded in export metadata and docs. */\n  version: \"1.36.0\",\n  /** Public spec URL for maintainers validating attribute names. */\n  specUrl: \"https://opentelemetry.io/docs/specs/semconv/gen-ai/\",\n  /** GenAI attribute keys the AgentInspect OTLP JSON exporter may emit. */\n  attributes: [\n    \"gen_ai.operation.name\",\n    \"gen_ai.request.model\",\n    \"gen_ai.usage.input_tokens\",\n    \"gen_ai.usage.output_tokens\",\n  ],\n  /**\n   * Non-GenAI attribute key prefixes intentionally emitted alongside GenAI pins.\n   * Any other `gen_ai.*` key in export output is an undocumented extension.\n   */\n  documentedExtensionPrefixes: [\"agent_inspect.\"] as const,\n  /** Explicitly never emitted (safety + honesty). */\n  neverEmitted: [\"gen_ai.prompt\", \"gen_ai.completion\"] as const,\n} as const;\n","import type { InspectRunTree } from \"../types/inspect-event.js\";\n\nimport type { ExportOptions, ExportResult, ExportValidationResult } from \"./types.js\";\nimport { redactRunTreeForExport } from \"./redact-export.js\";\nimport { exportHtml } from \"./html-exporter.js\";\nimport { exportMarkdown } from \"./markdown-exporter.js\";\nimport { exportOpenInference } from \"./openinference-exporter.js\";\nimport { exportOtlpJson } from \"./otlp-json-exporter.js\";\nimport { validateExportContent } from \"./validation.js\";\n\nexport function mergeExportDefaults(options: ExportOptions): ExportOptions {\n  return {\n    format: options.format,\n    includeMetadata: options.includeMetadata ?? true,\n    includeAttributes: options.includeAttributes ?? false,\n    includeErrors: options.includeErrors ?? true,\n    pretty: options.pretty ?? true,\n    redacted: options.redacted ?? true,\n    maxAttributeLength: options.maxAttributeLength ?? 500,\n    redactionProfile: options.redactionProfile ?? \"local\",\n  };\n}\n\n/**\n * @experimental Compatibility-oriented export API. Exports are local-only and do not upload anywhere.\n * Subject to refinement before a future stability declaration.\n */\nexport function exportRunTree(tree: InspectRunTree, options: ExportOptions): ExportResult {\n  const opts = mergeExportDefaults(options);\n  const exportTree =\n    opts.redactionProfile === \"local\"\n      ? tree\n      : redactRunTreeForExport(tree, { redactionProfile: opts.redactionProfile });\n  switch (opts.format) {\n    case \"markdown\":\n      return exportMarkdown(exportTree, opts);\n    case \"html\":\n      return exportHtml(exportTree, opts);\n    case \"openinference\":\n      return exportOpenInference(exportTree, opts);\n    case \"otlp-json\":\n      return exportOtlpJson(exportTree, opts);\n    default: {\n      const _x: never = opts.format;\n      throw new Error(`Unsupported export format: ${String(_x)}`);\n    }\n  }\n}\n\nexport function validateExport(result: ExportResult): ExportValidationResult {\n  const base = validateExportContent(result.format, result.content);\n  return {\n    ok: base.ok,\n    format: base.format,\n    errors: base.errors,\n    warnings: [...result.warnings, ...base.warnings],\n  };\n}\n\nexport type {\n  ExportFormat,\n  ExportOptions,\n  ExportResult,\n  ExportValidationResult,\n  TraceExporter,\n} from \"./types.js\";\nexport { EXPORT_PAYLOAD_VERSION } from \"./types.js\";\nexport * from \"./helpers.js\";\nexport { manualTraceEventsToRunTree } from \"./manual-trace-adapter.js\";\nexport { exportMarkdown } from \"./markdown-exporter.js\";\nexport { exportHtml } from \"./html-exporter.js\";\nexport type { OpenInferenceExport, OpenInferenceSpan } from \"./openinference-exporter.js\";\nexport { exportOpenInference } from \"./openinference-exporter.js\";\nexport { exportOtlpJson } from \"./otlp-json-exporter.js\";\nexport { validateExportContent } from \"./validation.js\";\nexport {\n  validateOpenInferenceFixture,\n  validateOtlpJsonFixture,\n} from \"./fixtures.js\";\nexport {\n  validateOpenInferenceSemanticFixture,\n  validateOtlpJsonSemanticFixture,\n} from \"./semantic-validation.js\";\nexport { OTEL_GEN_AI_SEMCONV_PIN } from \"./semconv.js\";\nexport { redactRunTreeForExport } from \"./redact-export.js\";\n","import type { TraceEvent } from \"./types.js\";\nimport type { RedactionProfile } from \"./types.js\";\nimport type { InspectRunTree } from \"./types/inspect-event.js\";\nimport { exportHtml } from \"./exporters/html-exporter.js\";\nimport { exportMarkdown } from \"./exporters/markdown-exporter.js\";\nimport { escapeHtml, escapeMarkdown } from \"./exporters/helpers.js\";\nimport { manualTraceEventsToRunTree } from \"./exporters/manual-trace-adapter.js\";\nimport {\n  redactRunTreeForExport,\n  redactTraceEventsForReport,\n} from \"./exporters/redact-export.js\";\nimport { buildRunTimeline, renderTimeline } from \"./timeline.js\";\nimport { buildRunWhatSummary, renderRunWhat } from \"./what.js\";\nimport {\n  extractOutcomesFromTraceEvents,\n  renderObservedOutcomesHtml,\n  renderObservedOutcomesMarkdown,\n  summarizeObservedOutcomes,\n} from \"./outcomes/index.js\";\n\nexport type ReportFormat = \"markdown\" | \"html\";\nexport type ReportSection = \"all\" | \"observations\" | \"what\" | \"timeline\" | \"tree\";\n\nexport interface ReportOptions {\n  format: ReportFormat;\n  includeAttributes?: boolean;\n  includeErrors?: boolean;\n  redactionProfile?: RedactionProfile;\n  /** Include correlation ids in the what section (default true). */\n  correlation?: boolean;\n  /** Limit output to one section (`observations` shows observed outcomes only). */\n  section?: ReportSection;\n}\n\nexport interface ReportResult {\n  format: ReportFormat;\n  content: string;\n  contentType: string;\n  fileExtension: string;\n}\n\nfunction resolveTree(\n  events: TraceEvent[],\n  profile: RedactionProfile,\n): InspectRunTree {\n  const tree = manualTraceEventsToRunTree(events);\n  return profile === \"local\"\n    ? tree\n    : redactRunTreeForExport(tree, { redactionProfile: profile });\n}\n\nfunction tailMarkdownSection(content: string, heading: string): string {\n  const marker = `## ${heading}`;\n  const idx = content.indexOf(marker);\n  if (idx < 0) return \"\";\n  return content.slice(idx).trimEnd();\n}\n\nfunction extractHtmlFragment(content: string, start: string, end: string): string {\n  const startIdx = content.indexOf(start);\n  if (startIdx < 0) return \"\";\n  const endIdx = content.indexOf(end, startIdx + start.length);\n  if (endIdx < 0) return content.slice(startIdx);\n  return content.slice(startIdx, endIdx);\n}\n\nconst REPORT_HTML_CSS = `\nbody{font-family:system-ui,sans-serif;line-height:1.5;margin:1.5rem;max-width:960px;color:#111}\nh1{font-size:1.35rem}\nh2{font-size:1.1rem;margin-top:1.5rem}\npre{white-space:pre-wrap;background:#f8f8f8;padding:0.75rem;overflow:auto;font-size:0.9rem}\nul.tree{list-style:none;padding-left:1rem}\nul.tree.nested{padding-left:1.25rem;border-left:1px solid #ddd;margin:0.25rem 0}\n.nm{font-weight:600}\n.meta{color:#555;font-size:0.9rem}\nfooter{margin-top:2rem;font-size:0.85rem;color:#555}\n`.trim();\n\n/**\n * Build a local inspection report (markdown or HTML) from v0.1 trace events.\n * Composes `what`, timeline, and execution-tree sections.\n */\nexport function buildRunReport(\n  events: TraceEvent[],\n  options: ReportOptions,\n): ReportResult {\n  const profile = options.redactionProfile ?? \"local\";\n  const section = options.section ?? \"all\";\n  const safeEvents = redactTraceEventsForReport(events, {\n    redactionProfile: profile,\n  });\n  const outcomes = summarizeObservedOutcomes(\n    extractOutcomesFromTraceEvents(safeEvents),\n  );\n  const observationsMarkdown = renderObservedOutcomesMarkdown(outcomes);\n  const observationsHtml = renderObservedOutcomesHtml(outcomes);\n\n  if (section === \"observations\") {\n    if (options.format === \"markdown\") {\n      return {\n        format: \"markdown\",\n        content: `## Observed outcomes\\n\\n${observationsMarkdown}\\n`,\n        contentType: \"text/markdown\",\n        fileExtension: \".md\",\n      };\n    }\n    return {\n      format: \"html\",\n      content: `<!doctype html><html lang=\"en\"><head><meta charset=\"utf-8\"/><title>Observed outcomes</title><style>${REPORT_HTML_CSS}</style></head><body><h1>Observed outcomes</h1>${observationsHtml}</body></html>`,\n      contentType: \"text/html\",\n      fileExtension: \".html\",\n    };\n  }\n\n  const whatSummary = buildRunWhatSummary(safeEvents);\n  const whatText = renderRunWhat(whatSummary, {\n    correlation: options.correlation !== false,\n  });\n  const timelineText = renderTimeline(buildRunTimeline(safeEvents));\n  const tree = resolveTree(safeEvents, profile);\n\n  const exportOpts = {\n    includeMetadata: false,\n    includeAttributes: options.includeAttributes === true,\n    includeErrors: options.includeErrors !== false,\n    redacted: true,\n    redactionProfile: profile,\n    maxAttributeLength: 500,\n  };\n\n  if (options.format === \"markdown\") {\n    const treeMd = exportMarkdown(tree, exportOpts);\n    const tail = tailMarkdownSection(treeMd.content, \"Execution tree\");\n    const title = escapeMarkdown(whatSummary.name ?? whatSummary.runId);\n    const lines = [\n      `# AgentInspect Report: ${title}`,\n      \"\",\n      \"Generated locally by AgentInspect. Review for sensitive data before sharing.\",\n      \"\",\n      \"## What happened\",\n      \"\",\n      \"```text\",\n      whatText,\n      \"```\",\n      \"\",\n      \"## Timeline\",\n      \"\",\n      \"```text\",\n      timelineText,\n      \"```\",\n      \"\",\n      \"## Observed outcomes\",\n      \"\",\n      observationsMarkdown,\n      \"\",\n    ];\n    if (tail) {\n      lines.push(tail, \"\");\n    } else {\n      lines.push(\"## Execution tree\", \"\", \"(no steps)\", \"\");\n    }\n\n    return {\n      format: \"markdown\",\n      content: lines.join(\"\\n\"),\n      contentType: \"text/markdown\",\n      fileExtension: \".md\",\n    };\n  }\n\n  const treeHtml = exportHtml(tree, exportOpts);\n  const title = escapeHtml(whatSummary.name ?? whatSummary.runId);\n  const treeSection = extractHtmlFragment(\n    treeHtml.content,\n    '<section class=\"tree\">',\n    \"</section>\",\n  );\n  // The exporter emits Errors before Attributes, so the errors fragment must\n  // stop at the attributes heading when both sections are present; ending at\n  // <footer> would swallow the attributes section and duplicate it below.\n  const errorsSectionEnd = treeHtml.content.includes(\n    \"<h2>Attributes (bounded)</h2>\",\n  )\n    ? \"<h2>Attributes (bounded)</h2>\"\n    : \"<footer>\";\n  const errorsSection = treeHtml.content.includes(\"<h2>Errors</h2>\")\n    ? extractHtmlFragment(treeHtml.content, \"<h2>Errors</h2>\", errorsSectionEnd)\n    : \"\";\n  const attrsSection = treeHtml.content.includes(\"<h2>Attributes (bounded)</h2>\")\n    ? extractHtmlFragment(\n        treeHtml.content,\n        \"<h2>Attributes (bounded)</h2>\",\n        \"<footer>\",\n      )\n    : \"\";\n\n  const html = `<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>AgentInspect Report: ${title}</title>\n<style>${REPORT_HTML_CSS}</style>\n</head>\n<body>\n<header><h1>AgentInspect Report: ${title}</h1></header>\n<p class=\"note\">Generated locally by AgentInspect. Review for sensitive data before sharing.</p>\n<section class=\"what\"><h2>What happened</h2><pre>${escapeHtml(whatText)}</pre></section>\n<section class=\"timeline\"><h2>Timeline</h2><pre>${escapeHtml(timelineText)}</pre></section>\n<section class=\"observations\"><h2>Observed outcomes</h2>${observationsHtml}</section>\n${treeSection || \"<section class=\\\"tree\\\"><h2>Execution tree</h2><p>No steps recorded.</p></section>\"}\n${errorsSection}\n${attrsSection}\n<footer>Generated locally by AgentInspect. Review for sensitive data before sharing.</footer>\n</body>\n</html>`;\n\n  return {\n    format: \"html\",\n    content: html,\n    contentType: \"text/html\",\n    fileExtension: \".html\",\n  };\n}\n"]}