{"version":3,"sources":["../src/redaction-profiles.ts","../src/safety/credential-value-patterns.ts","../src/trace-event-safety.ts","../src/storage.ts"],"names":["isPreviewKey","out","isRecord"],"mappings":"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","file":"chunk-DK3OW6UI.mjs","sourcesContent":["import type { RedactionProfile } from \"./types.js\";\n\n/** Extra keys redacted under the `share` profile (in addition to {@link DEFAULT_REDACT_KEYS}). */\nexport const SHARE_PROFILE_EXTRA_KEYS = [\n  \"userEmail\",\n  \"customerEmail\",\n  \"phone\",\n  \"phoneNumber\",\n  \"address\",\n  \"ip\",\n  \"ipAddress\",\n  \"sessionId\",\n  \"requestId\",\n  \"correlationId\",\n  \"decisionId\",\n  \"groupId\",\n  \"customerId\",\n  \"userId\",\n  \"accountId\",\n  \"tenantId\",\n  \"orgId\",\n  \"organizationId\",\n  \"traceId\",\n  \"spanId\",\n  \"parentSpanId\",\n] as const;\n\n/** Extra keys redacted under the `strict` profile (in addition to share keys). */\nexport const STRICT_PROFILE_EXTRA_KEYS = [\n  \"prompt\",\n  \"completion\",\n  \"input\",\n  \"output\",\n  \"inputPreview\",\n  \"outputPreview\",\n  \"message\",\n  \"messages\",\n  \"transcript\",\n  \"context\",\n  \"document\",\n  \"documents\",\n  \"chunk\",\n  \"chunks\",\n  \"retrieval\",\n  \"query\",\n] as const;\n\nexport interface ResolvedRedactionProfile {\n  profile: RedactionProfile;\n  extraKeys: readonly string[];\n  maxMetadataValueLengthCap?: number;\n  maxPreviewLengthCap?: number;\n}\n\n/** Resolves named profile behavior (keys + metadata string caps). */\nexport function resolveRedactionProfile(\n  profile: RedactionProfile = \"local\",\n): ResolvedRedactionProfile {\n  switch (profile) {\n    case \"local\":\n      return { profile: \"local\", extraKeys: [] };\n    case \"share\":\n      return {\n        profile: \"share\",\n        extraKeys: SHARE_PROFILE_EXTRA_KEYS,\n        maxMetadataValueLengthCap: 500,\n        maxPreviewLengthCap: 200,\n      };\n    case \"strict\":\n      return {\n        profile: \"strict\",\n        extraKeys: [...SHARE_PROFILE_EXTRA_KEYS, ...STRICT_PROFILE_EXTRA_KEYS],\n        maxMetadataValueLengthCap: 200,\n        maxPreviewLengthCap: 80,\n      };\n    default:\n      return { profile: \"local\", extraKeys: [] };\n  }\n}\n\nfunction isPreviewKey(key: string): boolean {\n  return key.toLowerCase().includes(\"preview\");\n}\n\n/**\n * Applies profile metadata string caps. User-provided lower limits are preserved.\n */\nexport function applyProfileMetadataCaps(\n  maxMetadataValueLength: number,\n  maxPreviewLength: number,\n  resolved: ResolvedRedactionProfile,\n): { maxMetadataValueLength: number; maxPreviewLength: number } {\n  let meta = maxMetadataValueLength;\n  let preview = maxPreviewLength;\n\n  if (resolved.maxMetadataValueLengthCap !== undefined) {\n    meta = Math.min(meta, resolved.maxMetadataValueLengthCap);\n  }\n  if (resolved.maxPreviewLengthCap !== undefined) {\n    preview = Math.min(preview, resolved.maxPreviewLengthCap);\n  }\n\n  return { maxMetadataValueLength: meta, maxPreviewLength: preview };\n}\n\nexport function truncateStringForProfile(\n  value: string,\n  key: string,\n  maxMetadataValueLength: number,\n  maxPreviewLength: number,\n): string {\n  const max = isPreviewKey(key) ? maxPreviewLength : maxMetadataValueLength;\n  if (max <= 0) return \"…\";\n  if (value.length <= max) return value;\n  return `${value.slice(0, max)}…`;\n}\n","/**\n * High-confidence free-text credential detectors for pre-disk error messages.\n *\n * Mirrors `@agent-inspect/redact` local-profile value detectors (keep in sync with\n * `packages/redact/src/index.ts` credentialDetectors + `key-value-secret.ts`).\n * Key-based redaction alone cannot protect secrets embedded in `error.message`.\n */\n\n/** Keep in sync with packages/redact/src/key-value-secret.ts. */\nconst KEY_VALUE_SECRET_PATTERN =\n  /\\b(?:api[_-]?key|internal[_-]?token|access[_-]?token|auth[_-]?token|password|secret|token)=(?!\\[(?:REDACTED(?::[^\\]]*)?|HASH:[0-9a-f]{8})\\](?![^\\s\"'\\\\&#?]))([^\\s\"'\\\\]{8,})/i;\n\n/**\n * Ordered high-confidence value patterns. A match replaces the whole string\n * with `[REDACTED]`, matching `@agent-inspect/redact` detector replace semantics.\n */\nconst HIGH_CONFIDENCE_CREDENTIAL_PATTERNS: readonly RegExp[] = [\n  /^(?:basic|bearer|digest|apikey)\\s+[a-z0-9._~+/=-]+$/i,\n  /\\bbearer\\s+[a-z0-9._~+/=-]{12,}\\b/i,\n  /\\b[a-z0-9_.-]+=[^;\\s]+(?:;\\s*[a-z0-9_.-]+=[^;\\s]+)+/i,\n  /\\beyJ[a-zA-Z0-9_-]{8,}\\.[a-zA-Z0-9_-]{8,}\\.[a-zA-Z0-9_-]{8,}\\b/,\n  /\\b(?:sk-(?:proj-)?[a-zA-Z0-9_-]{16,}|sk-ant-[a-zA-Z0-9_-]{16,}|AIza[0-9A-Za-z_-]{20,})\\b/,\n  /\\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9_]{20,}\\b/,\n  /\\b(?:AKIA|ASIA)[A-Z0-9]{16}\\b/,\n  /-----BEGIN [A-Z ]*PRIVATE KEY-----[\\s\\S]*-----END [A-Z ]*PRIVATE KEY-----/,\n  KEY_VALUE_SECRET_PATTERN,\n];\n\nexport function stringContainsHighConfidenceCredential(value: string): boolean {\n  for (const pattern of HIGH_CONFIDENCE_CREDENTIAL_PATTERNS) {\n    pattern.lastIndex = 0;\n    if (pattern.test(value)) {\n      pattern.lastIndex = 0;\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * When a free-text string matches a high-confidence credential detector,\n * replace the whole value (Redactor-compatible). Otherwise return unchanged.\n */\nexport function redactHighConfidenceCredentialsInString(\n  value: string,\n  replacement = \"[REDACTED]\",\n): string {\n  return stringContainsHighConfidenceCredential(value) ? replacement : value;\n}\n","import { Redactor } from \"./logs/redactor.js\";\nimport { redactHighConfidenceCredentialsInString } from \"./safety/credential-value-patterns.js\";\nimport {\n  applyProfileMetadataCaps,\n  resolveRedactionProfile,\n  type ResolvedRedactionProfile,\n} from \"./redaction-profiles.js\";\nimport { serializeEvent } from \"./storage.js\";\nimport type { RedactionRule } from \"./types/log-config.js\";\nimport {\n  isPersistedInspectEvent,\n  type PersistedInspectError,\n  type PersistedInspectEvent,\n  type PersistedTokenUsage,\n  type PersistedTraceContext,\n} from \"./types/persisted-inspect-event.js\";\nimport type {\n  InspectRunOptions,\n  RedactionProfile,\n  StepMetadata,\n  TraceEvent,\n} from \"./types.js\";\n\n/** Default max length for string metadata values (non-preview keys). */\nexport const DEFAULT_MAX_METADATA_VALUE_LENGTH = 2000;\n\n/** Default max length for preview-like metadata keys (contains `preview`, case-insensitive). */\nexport const DEFAULT_MAX_PREVIEW_LENGTH = 500;\n\n/** Default max serialized JSONL line size in bytes (UTF-8). */\nexport const DEFAULT_MAX_EVENT_BYTES = 65_536;\n\n/** Resolved trace safety settings used at write time. */\nexport interface TraceSafetyOptions {\n  redactEnabled: boolean;\n  redactionRules?: RedactionRule[];\n  redactionProfile: RedactionProfile;\n  profileExtraKeys: readonly string[];\n  maxMetadataValueLength: number;\n  maxPreviewLength: number;\n  maxEventBytes: number;\n}\n\nexport type { ResolvedRedactionProfile };\nexport { resolveRedactionProfile };\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nconst KNOWN_PERSISTED_EVENT_FIELDS = new Set([\n  \"schemaVersion\",\n  \"eventId\",\n  \"runId\",\n  \"kind\",\n  \"name\",\n  \"parentId\",\n  \"status\",\n  \"timestamp\",\n  \"startedAt\",\n  \"endedAt\",\n  \"durationMs\",\n  \"confidence\",\n  \"source\",\n  \"attributes\",\n  \"inputSummary\",\n  \"outputSummary\",\n  \"error\",\n  \"tokenUsage\",\n  \"trace\",\n]);\n\nfunction isSafeExtensionFieldName(key: string): boolean {\n  return key !== \"__proto__\" && key !== \"constructor\" && key !== \"prototype\";\n}\n\nfunction isPreviewKey(key: string): boolean {\n  return key.toLowerCase().includes(\"preview\");\n}\n\nfunction truncateString(value: string, maxLen: number): string {\n  if (maxLen <= 0) return \"…\";\n  if (value.length <= maxLen) return value;\n  return `${value.slice(0, maxLen)}…`;\n}\n\nfunction byteLength(text: string): number {\n  return Buffer.byteLength(text, \"utf8\");\n}\n\n/** Resolves {@link InspectRunOptions} trace safety fields with safe defaults. */\nexport function resolveTraceSafetyOptions(\n  options?: Pick<\n    InspectRunOptions,\n    | \"redact\"\n    | \"redactionProfile\"\n    | \"maxEventBytes\"\n    | \"maxMetadataValueLength\"\n    | \"maxPreviewLength\"\n  >,\n): TraceSafetyOptions {\n  const redact = options?.redact;\n  let redactEnabled = true;\n  let redactionRules: RedactionRule[] | undefined;\n\n  if (redact === false) {\n    redactEnabled = false;\n  } else if (redact === true || redact === undefined) {\n    redactEnabled = true;\n  } else if (isRecord(redact)) {\n    redactEnabled = true;\n    redactionRules = redact.rules;\n  }\n\n  const profile = options?.redactionProfile ?? \"local\";\n  const resolvedProfile = resolveRedactionProfile(profile);\n\n  const userMaxMetadata =\n    typeof options?.maxMetadataValueLength === \"number\" &&\n    Number.isFinite(options.maxMetadataValueLength) &&\n    options.maxMetadataValueLength >= 0\n      ? Math.floor(options.maxMetadataValueLength)\n      : undefined;\n  const userMaxPreview =\n    typeof options?.maxPreviewLength === \"number\" &&\n    Number.isFinite(options.maxPreviewLength) &&\n    options.maxPreviewLength >= 0\n      ? Math.floor(options.maxPreviewLength)\n      : undefined;\n\n  let maxMetadataValueLength = userMaxMetadata ?? DEFAULT_MAX_METADATA_VALUE_LENGTH;\n  let maxPreviewLength = userMaxPreview ?? DEFAULT_MAX_PREVIEW_LENGTH;\n\n  if (redactEnabled && profile !== \"local\") {\n    const capped = applyProfileMetadataCaps(\n      maxMetadataValueLength,\n      maxPreviewLength,\n      resolvedProfile,\n    );\n    maxMetadataValueLength = capped.maxMetadataValueLength;\n    maxPreviewLength = capped.maxPreviewLength;\n  }\n\n  return {\n    redactEnabled,\n    redactionRules,\n    redactionProfile: profile,\n    profileExtraKeys: redactEnabled ? resolvedProfile.extraKeys : [],\n    maxMetadataValueLength,\n    maxPreviewLength,\n    maxEventBytes:\n      typeof options?.maxEventBytes === \"number\" &&\n      Number.isFinite(options.maxEventBytes) &&\n      options.maxEventBytes > 0\n        ? Math.floor(options.maxEventBytes)\n        : DEFAULT_MAX_EVENT_BYTES,\n  };\n}\n\nfunction boundMetadataValue(\n  key: string,\n  value: unknown,\n  opts: TraceSafetyOptions,\n  seen: WeakSet<object>,\n  depth: number,\n): unknown {\n  if (depth > 32) return \"[MaxDepth]\";\n\n  if (typeof value === \"bigint\") {\n    return `${value.toString()}n`;\n  }\n  if (typeof value === \"function\") {\n    return \"[Function]\";\n  }\n  if (typeof value === \"symbol\") {\n    return \"[Symbol]\";\n  }\n  if (typeof value === \"number\" && !Number.isFinite(value)) {\n    return String(value);\n  }\n  if (value === undefined) {\n    return null;\n  }\n\n  if (value === null || typeof value !== \"object\") {\n    if (typeof value === \"string\") {\n      const max = isPreviewKey(key) ? opts.maxPreviewLength : opts.maxMetadataValueLength;\n      return truncateString(value, max);\n    }\n    return value;\n  }\n\n  if (seen.has(value)) return \"[Circular]\";\n  seen.add(value);\n\n  if (Array.isArray(value)) {\n    const maxItems = 50;\n    const out = value\n      .slice(0, maxItems)\n      .map((item, index) =>\n        boundMetadataValue(String(index), item, opts, seen, depth + 1),\n      );\n    if (value.length > maxItems) {\n      out.push(`…(+${value.length - maxItems} more)`);\n    }\n    return out;\n  }\n\n  const record = value as Record<string, unknown>;\n  const out: Record<string, unknown> = {};\n  try {\n    for (const [k, v] of Object.entries(record)) {\n      out[k] = boundMetadataValue(k, v, opts, seen, depth + 1);\n    }\n  } catch {\n    return { truncated: true, reason: \"metadataEnumerationFailed\" };\n  }\n  return out;\n}\n\nfunction redactMetadata(\n  metadata: Record<string, unknown>,\n  opts: TraceSafetyOptions,\n): Record<string, unknown> {\n  if (!opts.redactEnabled) return { ...metadata };\n  const redactor = new Redactor({\n    rules: opts.redactionRules,\n    extraKeys: opts.profileExtraKeys,\n  });\n  return redactor.redactRecord(metadata);\n}\n\n/** Redacts (when enabled) and truncates metadata values for disk persistence. */\nexport function prepareMetadataForDisk(\n  metadata: Record<string, unknown> | StepMetadata,\n  opts: TraceSafetyOptions,\n): Record<string, unknown> {\n  try {\n    const preBounded = boundMetadataValue(\n      \"metadata\",\n      metadata,\n      opts,\n      new WeakSet<object>(),\n      0,\n    );\n    const redacted = redactMetadata(\n      isRecord(preBounded) ? preBounded : {},\n      opts,\n    );\n    const bounded = boundMetadataValue(\n      \"metadata\",\n      redacted,\n      opts,\n      new WeakSet<object>(),\n      0,\n    );\n    return isRecord(bounded) ? bounded : {};\n  } catch {\n    return { truncated: true, reason: \"metadataPreparationFailed\" };\n  }\n}\n\nfunction truncateErrorStack(\n  event: TraceEvent,\n  maxLen: number,\n): TraceEvent {\n  if (event.event !== \"run_completed\" && event.event !== \"step_completed\") {\n    return event;\n  }\n  if (!event.error?.stack || typeof event.error.stack !== \"string\") {\n    return event;\n  }\n  return {\n    ...event,\n    error: {\n      ...event.error,\n      stack: truncateString(event.error.stack, maxLen),\n    },\n  };\n}\n\nfunction replaceMetadataWithTruncationMarker(\n  event: TraceEvent,\n  originalApproxBytes: number,\n): TraceEvent {\n  const marker = {\n    truncated: true,\n    reason: \"maxEventBytes\",\n    originalApproxBytes,\n  };\n  if (event.event === \"run_started\") {\n    return { ...event, metadata: marker };\n  }\n  if (event.event === \"step_started\") {\n    return { ...event, metadata: marker };\n  }\n  return event;\n}\n\nfunction shrinkMetadataLimits(\n  opts: TraceSafetyOptions,\n  factor: number,\n): TraceSafetyOptions {\n  return {\n    ...opts,\n    maxMetadataValueLength: Math.max(32, Math.floor(opts.maxMetadataValueLength * factor)),\n    maxPreviewLength: Math.max(16, Math.floor(opts.maxPreviewLength * factor)),\n  };\n}\n\nfunction applyMetadataToEvent(\n  event: TraceEvent,\n  metadata: Record<string, unknown>,\n): TraceEvent {\n  if (event.event === \"run_started\") {\n    return { ...event, metadata };\n  }\n  if (event.event === \"step_started\") {\n    return { ...event, metadata: metadata as StepMetadata };\n  }\n  return event;\n}\n\nfunction eventHasMetadata(event: TraceEvent): boolean {\n  return (\n    (event.event === \"run_started\" || event.event === \"step_started\") &&\n    event.metadata !== undefined\n  );\n}\n\nfunction getEventMetadata(event: TraceEvent): Record<string, unknown> | undefined {\n  if (event.event === \"run_started\" || event.event === \"step_started\") {\n    return event.metadata as Record<string, unknown> | undefined;\n  }\n  return undefined;\n}\n\n/**\n * Applies redaction, metadata truncation, and final serialized size bounds.\n * Never throws; returns a schema-valid event or a minimally truncated variant.\n */\nfunction prepareTraceEventErrorForDisk(\n  event: TraceEvent,\n  opts: TraceSafetyOptions,\n): TraceEvent {\n  if (\n    (event.event !== \"run_completed\" && event.event !== \"step_completed\") ||\n    !event.error\n  ) {\n    return event;\n  }\n  if (!opts.redactEnabled) return event;\n\n  const redactor = new Redactor({\n    rules: opts.redactionRules,\n    extraKeys: opts.profileExtraKeys,\n  });\n  const nextError = { ...event.error };\n  let changed = false;\n\n  if (typeof nextError.message === \"string\") {\n    const keyRedacted = redactor.redactValue(\"message\", nextError.message);\n    const message =\n      typeof keyRedacted === \"string\"\n        ? redactHighConfidenceCredentialsInString(keyRedacted)\n        : \"[REDACTED]\";\n    if (message !== nextError.message) {\n      nextError.message = message.length > 0 ? message : \"Unknown error\";\n      changed = true;\n    }\n  }\n\n  // Stack frames often echo error.message; scrub credential-bearing stacks too.\n  if (typeof nextError.stack === \"string\") {\n    const scrubbedStack = redactHighConfidenceCredentialsInString(nextError.stack);\n    if (scrubbedStack !== nextError.stack) {\n      nextError.stack = scrubbedStack;\n      changed = true;\n    }\n  }\n\n  if (!changed) return event;\n  return { ...event, error: nextError };\n}\n\nexport function prepareTraceEventForDisk(\n  event: TraceEvent,\n  opts: TraceSafetyOptions,\n): TraceEvent {\n  try {\n    let working: TraceEvent = prepareTraceEventErrorForDisk({ ...event }, opts);\n\n    const rawMetadata = getEventMetadata(working);\n    if (rawMetadata !== undefined) {\n      const safe = prepareMetadataForDisk(rawMetadata, opts);\n      working = applyMetadataToEvent(working, safe);\n    }\n\n    let serialized = serializeEvent(working);\n    if (serialized === \"\") {\n      return working;\n    }\n\n    let bytes = byteLength(serialized);\n    if (bytes <= opts.maxEventBytes) {\n      return working;\n    }\n\n    if (rawMetadata !== undefined) {\n      for (const factor of [0.5, 0.25, 0.1]) {\n        const tighter = shrinkMetadataLimits(opts, factor);\n        const shrunk = prepareMetadataForDisk(rawMetadata, tighter);\n        working = applyMetadataToEvent(working, shrunk);\n        serialized = serializeEvent(working);\n        if (serialized !== \"\" && byteLength(serialized) <= opts.maxEventBytes) {\n          return working;\n        }\n      }\n\n      working = replaceMetadataWithTruncationMarker(working, bytes);\n      serialized = serializeEvent(working);\n      if (serialized !== \"\" && byteLength(serialized) <= opts.maxEventBytes) {\n        return working;\n      }\n    }\n\n    working = truncateErrorStack(working, Math.min(opts.maxMetadataValueLength, 500));\n    serialized = serializeEvent(working);\n    if (serialized !== \"\" && byteLength(serialized) <= opts.maxEventBytes) {\n      return working;\n    }\n\n    if (eventHasMetadata(working)) {\n      working = replaceMetadataWithTruncationMarker(working, bytes);\n      serialized = serializeEvent(working);\n      if (serialized !== \"\" && byteLength(serialized) <= opts.maxEventBytes) {\n        return working;\n      }\n\n      if (working.event === \"run_started\") {\n        const { metadata: _meta, ...rest } = working;\n        working = rest;\n      } else if (working.event === \"step_started\") {\n        const { metadata: _meta, ...rest } = working;\n        working = rest;\n      }\n    }\n\n    return working;\n  } catch {\n    if (event.event === \"run_started\" || event.event === \"step_started\") {\n      return applyMetadataToEvent(event, {\n        truncated: true,\n        reason: \"prepareTraceEventFailed\",\n      });\n    }\n    return event;\n  }\n}\n\nfunction safeGet(record: Record<string, unknown>, key: string): unknown {\n  try {\n    return record[key];\n  } catch {\n    return undefined;\n  }\n}\n\nfunction optionalBoundedString(\n  value: unknown,\n  _key: string,\n  opts: TraceSafetyOptions,\n): string | undefined {\n  if (typeof value !== \"string\") return undefined;\n  return truncateString(value, opts.maxMetadataValueLength);\n}\n\nfunction requiredBoundedString(\n  value: unknown,\n  key: string,\n  opts: TraceSafetyOptions,\n): string | undefined {\n  const out = optionalBoundedString(value, key, opts);\n  return out && out.length > 0 ? out : undefined;\n}\n\nfunction preparePersistedSummaryForDisk(\n  key: \"input\" | \"output\",\n  value: unknown,\n  opts: TraceSafetyOptions,\n): unknown {\n  try {\n    const redactor = new Redactor({\n      rules: opts.redactionRules,\n      extraKeys: opts.profileExtraKeys,\n    });\n    const redacted = opts.redactEnabled ? redactor.redactValue(key, value) : value;\n    return boundMetadataValue(key, redacted, opts, new WeakSet<object>(), 0);\n  } catch {\n    return { truncated: true, reason: \"summaryPreparationFailed\" };\n  }\n}\n\nfunction preparePersistedErrorForDisk(\n  value: unknown,\n  opts: TraceSafetyOptions,\n): PersistedInspectError | undefined {\n  if (!isRecord(value)) return undefined;\n\n  try {\n    const redactor = new Redactor({\n      rules: opts.redactionRules,\n      extraKeys: opts.profileExtraKeys,\n    });\n    const rawMessage = safeGet(value, \"message\");\n    // Key-based redactValue(\"message\", ...) does not catch free-text secrets;\n    // apply the same high-confidence value detectors as @agent-inspect/redact.\n    let messageForBound: unknown = rawMessage;\n    if (opts.redactEnabled) {\n      const keyRedacted = redactor.redactValue(\"message\", rawMessage);\n      messageForBound =\n        typeof keyRedacted === \"string\"\n          ? redactHighConfidenceCredentialsInString(keyRedacted)\n          : keyRedacted;\n    }\n    const boundedMessage = boundMetadataValue(\n      \"message\",\n      messageForBound,\n      opts,\n      new WeakSet<object>(),\n      0,\n    );\n    const message =\n      typeof boundedMessage === \"string\" && boundedMessage.length > 0\n        ? boundedMessage\n        : \"Unknown error\";\n\n    const out: PersistedInspectError = { message };\n    const name = optionalBoundedString(safeGet(value, \"name\"), \"name\", opts);\n    const code = optionalBoundedString(safeGet(value, \"code\"), \"code\", opts);\n    if (name !== undefined) out.name = name;\n    if (code !== undefined) out.code = code;\n    return out;\n  } catch {\n    return { message: \"Error preparation failed\" };\n  }\n}\n\nfunction prepareTokenUsage(value: unknown): PersistedTokenUsage | undefined {\n  if (!isRecord(value)) return undefined;\n  const out: PersistedTokenUsage = {};\n  for (const key of [\n    \"input\",\n    \"output\",\n    \"total\",\n    \"cached\",\n    \"cacheWrite\",\n    \"reasoning\",\n  ] as const) {\n    const item = safeGet(value, key);\n    if (typeof item === \"number\" && Number.isFinite(item) && item >= 0) {\n      out[key] = item;\n    }\n  }\n  return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction prepareTraceContext(\n  value: unknown,\n  opts: TraceSafetyOptions,\n): PersistedTraceContext | undefined {\n  if (!isRecord(value)) return undefined;\n  const out: PersistedTraceContext = {};\n  const traceId = optionalBoundedString(safeGet(value, \"traceId\"), \"traceId\", opts);\n  const spanId = optionalBoundedString(safeGet(value, \"spanId\"), \"spanId\", opts);\n  const parentSpanId = optionalBoundedString(\n    safeGet(value, \"parentSpanId\"),\n    \"parentSpanId\",\n    opts,\n  );\n  if (traceId !== undefined) out.traceId = traceId;\n  if (spanId !== undefined) out.spanId = spanId;\n  if (parentSpanId !== undefined) out.parentSpanId = parentSpanId;\n  return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction preparePersistedExtensionFieldForDisk(\n  key: string,\n  value: unknown,\n  opts: TraceSafetyOptions,\n): unknown {\n  if (isRecord(value)) {\n    return prepareMetadataForDisk(value, opts);\n  }\n\n  const prepared = prepareMetadataForDisk({ [key]: value }, opts);\n  return Object.prototype.hasOwnProperty.call(prepared, key)\n    ? prepared[key]\n    : undefined;\n}\n\nfunction preserveV10ExtensionFields(\n  source: Record<string, unknown>,\n  candidate: PersistedInspectEvent,\n  opts: TraceSafetyOptions,\n): void {\n  if (candidate.schemaVersion !== \"1.0\") return;\n\n  for (const [key, value] of Object.entries(source)) {\n    if (\n      KNOWN_PERSISTED_EVENT_FIELDS.has(key) ||\n      !isSafeExtensionFieldName(key)\n    ) {\n      continue;\n    }\n\n    const prepared = preparePersistedExtensionFieldForDisk(key, value, opts);\n    if (prepared !== undefined) {\n      candidate[key] = prepared;\n    }\n  }\n}\n\nfunction serializedPersistedEvent(event: PersistedInspectEvent): string | undefined {\n  try {\n    return JSON.stringify(event);\n  } catch {\n    return undefined;\n  }\n}\n\nfunction persistedEventByteLength(event: PersistedInspectEvent): number | undefined {\n  const serialized = serializedPersistedEvent(event);\n  return serialized === undefined ? undefined : byteLength(serialized);\n}\n\nfunction minimalPersistedEvent(\n  event: PersistedInspectEvent,\n  opts: TraceSafetyOptions,\n  originalApproxBytes: number,\n): PersistedInspectEvent {\n  return {\n    schemaVersion: event.schemaVersion,\n    eventId: truncateString(event.eventId, 128),\n    runId: truncateString(event.runId, 128),\n    kind: event.kind,\n    name: truncateString(event.name, 128),\n    ...(event.status !== undefined ? { status: event.status } : {}),\n    timestamp: truncateString(event.timestamp, 128),\n    confidence: event.confidence,\n    source: {\n      type: event.source.type,\n      ...(event.source.name !== undefined\n        ? { name: truncateString(event.source.name, 128) }\n        : {}),\n      ...(event.source.version !== undefined\n        ? { version: truncateString(event.source.version, 128) }\n        : {}),\n    },\n    attributes: {\n      truncated: true,\n      reason: \"maxEventBytes\",\n      originalApproxBytes,\n      maxEventBytes: opts.maxEventBytes,\n    },\n  };\n}\n\nfunction tinyPersistedEvent(event: PersistedInspectEvent): PersistedInspectEvent {\n  return {\n    schemaVersion: event.schemaVersion,\n    eventId: truncateString(event.eventId, 32),\n    runId: truncateString(event.runId, 32),\n    kind: event.kind,\n    name: truncateString(event.name, 32),\n    timestamp: truncateString(event.timestamp, 32),\n    confidence: event.confidence,\n    source: { type: event.source.type },\n    attributes: { truncated: true, reason: \"maxEventBytes\" },\n  };\n}\n\nfunction enforcePersistedEventSize(\n  event: PersistedInspectEvent,\n  opts: TraceSafetyOptions,\n): PersistedInspectEvent | undefined {\n  const bytes = persistedEventByteLength(event);\n  if (bytes === undefined) return undefined;\n  if (bytes <= opts.maxEventBytes) return event;\n\n  const minimal = minimalPersistedEvent(event, opts, bytes);\n  const minimalBytes = persistedEventByteLength(minimal);\n  if (minimalBytes !== undefined && minimalBytes <= opts.maxEventBytes) {\n    return minimal;\n  }\n\n  const tiny = tinyPersistedEvent(event);\n  return isPersistedInspectEvent(tiny) ? tiny : undefined;\n}\n\n/**\n * Prepares persisted inspect events for built-in persistence.\n *\n * The helper is intentionally non-throwing: invalid required fields return\n * `undefined`; supported optional fields are redacted, bounded, JSON-safe, and\n * final serialized-size checked before a writer sees the event.\n */\nexport function preparePersistedInspectEventForWrite(\n  value: unknown,\n  opts: TraceSafetyOptions = resolveTraceSafetyOptions(),\n): PersistedInspectEvent | undefined {\n  try {\n    if (!isRecord(value)) return undefined;\n\n    const source = safeGet(value, \"source\");\n    if (!isRecord(source)) return undefined;\n\n    const candidate: PersistedInspectEvent = {\n      schemaVersion: safeGet(value, \"schemaVersion\") as PersistedInspectEvent[\"schemaVersion\"],\n      eventId: requiredBoundedString(safeGet(value, \"eventId\"), \"eventId\", opts) ?? \"\",\n      runId: requiredBoundedString(safeGet(value, \"runId\"), \"runId\", opts) ?? \"\",\n      kind: safeGet(value, \"kind\") as PersistedInspectEvent[\"kind\"],\n      name: requiredBoundedString(safeGet(value, \"name\"), \"name\", opts) ?? \"\",\n      timestamp: requiredBoundedString(safeGet(value, \"timestamp\"), \"timestamp\", opts) ?? \"\",\n      confidence: safeGet(value, \"confidence\") as PersistedInspectEvent[\"confidence\"],\n      source: {\n        type: safeGet(source, \"type\") as PersistedInspectEvent[\"source\"][\"type\"],\n      },\n    };\n\n    const parentId = requiredBoundedString(safeGet(value, \"parentId\"), \"parentId\", opts);\n    const status = safeGet(value, \"status\");\n    const startedAt = optionalBoundedString(safeGet(value, \"startedAt\"), \"startedAt\", opts);\n    const endedAt = optionalBoundedString(safeGet(value, \"endedAt\"), \"endedAt\", opts);\n    const durationMs = safeGet(value, \"durationMs\");\n    const sourceName = optionalBoundedString(safeGet(source, \"name\"), \"name\", opts);\n    const sourceVersion = optionalBoundedString(safeGet(source, \"version\"), \"version\", opts);\n\n    if (parentId !== undefined) candidate.parentId = parentId;\n    if (\n      status === \"running\" ||\n      status === \"ok\" ||\n      status === \"error\" ||\n      status === \"unknown\"\n    ) {\n      candidate.status = status;\n    }\n    if (startedAt !== undefined) candidate.startedAt = startedAt;\n    if (endedAt !== undefined) candidate.endedAt = endedAt;\n    if (\n      typeof durationMs === \"number\" &&\n      Number.isFinite(durationMs) &&\n      durationMs >= 0\n    ) {\n      candidate.durationMs = durationMs;\n    }\n    if (sourceName !== undefined) candidate.source.name = sourceName;\n    if (sourceVersion !== undefined) candidate.source.version = sourceVersion;\n\n    const attributes = safeGet(value, \"attributes\");\n    if (isRecord(attributes)) {\n      candidate.attributes = prepareMetadataForDisk(attributes, opts);\n    }\n\n    if (safeGet(value, \"inputSummary\") !== undefined) {\n      candidate.inputSummary = preparePersistedSummaryForDisk(\n        \"input\",\n        safeGet(value, \"inputSummary\"),\n        opts,\n      );\n    }\n    if (safeGet(value, \"outputSummary\") !== undefined) {\n      candidate.outputSummary = preparePersistedSummaryForDisk(\n        \"output\",\n        safeGet(value, \"outputSummary\"),\n        opts,\n      );\n    }\n\n    const error = preparePersistedErrorForDisk(safeGet(value, \"error\"), opts);\n    if (error !== undefined) candidate.error = error;\n\n    const tokenUsage = prepareTokenUsage(safeGet(value, \"tokenUsage\"));\n    if (tokenUsage !== undefined) candidate.tokenUsage = tokenUsage;\n\n    const trace = prepareTraceContext(safeGet(value, \"trace\"), opts);\n    if (trace !== undefined) candidate.trace = trace;\n\n    preserveV10ExtensionFields(value, candidate, opts);\n\n    if (!isPersistedInspectEvent(candidate)) return undefined;\n    return enforcePersistedEventSize(candidate, opts);\n  } catch {\n    return undefined;\n  }\n}\n","import { readdir, readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport type { TraceEvent } from \"./types.js\";\nimport { isStepType } from \"./types.js\";\nimport {\n  DEFAULT_MAX_EVENT_BYTES,\n  prepareTraceEventForDisk,\n  resolveTraceSafetyOptions,\n} from \"./trace-event-safety.js\";\nimport { parseTraceJsonl } from \"./read-trace.js\";\nimport { appendTraceFile, createEmptyTraceFile } from \"./trace-filesystem.js\";\nimport {\n  ensureTraceDir,\n  FALLBACK_TRACE_DIR,\n  getTraceFilePath,\n  warn,\n} from \"./utils.js\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction nonEmptyString(value: unknown): value is string {\n  return typeof value === \"string\" && value.trim() !== \"\";\n}\n\nfunction finiteNumber(value: unknown): value is number {\n  return typeof value === \"number\" && Number.isFinite(value);\n}\n\nfunction optionalErrorInfo(value: unknown): boolean {\n  if (value === undefined) return true;\n  if (!isRecord(value)) return false;\n  if (typeof value.message !== \"string\") return false;\n  if (\"stack\" in value && value.stack !== undefined) {\n    if (typeof value.stack !== \"string\") return false;\n  }\n  return true;\n}\n\n/**\n * Strict MVP validation before writing JSONL. Rejects empty ids, non-finite times, and malformed payloads.\n */\nexport function validateEvent(event: unknown): event is TraceEvent {\n  if (!isRecord(event)) return false;\n  if (event.schemaVersion !== \"0.1\") return false;\n  if (!finiteNumber(event.timestamp)) return false;\n  if (typeof event.event !== \"string\") return false;\n\n  switch (event.event) {\n    case \"run_started\": {\n      if (\n        !nonEmptyString(event.runId) ||\n        !nonEmptyString(event.name) ||\n        !finiteNumber(event.startTime)\n      ) {\n        return false;\n      }\n      if (event.metadata !== undefined && !isRecord(event.metadata)) {\n        return false;\n      }\n      return true;\n    }\n    case \"run_completed\": {\n      return (\n        nonEmptyString(event.runId) &&\n        (event.status === \"success\" || event.status === \"error\") &&\n        finiteNumber(event.endTime) &&\n        finiteNumber(event.durationMs) &&\n        optionalErrorInfo(event.error)\n      );\n    }\n    case \"step_started\": {\n      if (\n        !nonEmptyString(event.runId) ||\n        !nonEmptyString(event.stepId) ||\n        !nonEmptyString(event.name) ||\n        !isStepType(event.type) ||\n        !finiteNumber(event.startTime)\n      ) {\n        return false;\n      }\n      if (event.parentId !== undefined && typeof event.parentId !== \"string\") {\n        return false;\n      }\n      if (event.metadata !== undefined && !isRecord(event.metadata)) {\n        return false;\n      }\n      return true;\n    }\n    case \"step_completed\": {\n      return (\n        nonEmptyString(event.runId) &&\n        nonEmptyString(event.stepId) &&\n        (event.status === \"success\" || event.status === \"error\") &&\n        finiteNumber(event.endTime) &&\n        finiteNumber(event.durationMs) &&\n        optionalErrorInfo(event.error)\n      );\n    }\n    case \"outcome_observed\": {\n      return (\n        nonEmptyString(event.runId) &&\n        nonEmptyString(event.outcomeId) &&\n        nonEmptyString(event.name) &&\n        nonEmptyString(event.expectation) &&\n        (event.status === \"passed\" ||\n          event.status === \"failed\" ||\n          event.status === \"unknown\" ||\n          event.status === \"skipped\") &&\n        finiteNumber(event.observedAt)\n      );\n    }\n    default:\n      return false;\n  }\n}\n\n/** Serializes a trace line as compact JSON without a trailing newline. */\nexport function serializeEvent(event: TraceEvent): string {\n  try {\n    return JSON.stringify(event);\n  } catch {\n    return \"\";\n  }\n}\n\n/**\n * Creates (or truncates) an empty JSONL file for a run. Uses {@link ensureTraceDir} then {@link getTraceFilePath}.\n * On failure, retries once under {@link FALLBACK_TRACE_DIR}.\n */\nexport async function initializeTraceFile(\n  runId: string,\n  traceDir: string,\n): Promise<string | undefined> {\n  try {\n    const usable = await ensureTraceDir(traceDir);\n    const filePath = getTraceFilePath(runId, usable);\n    await createEmptyTraceFile(filePath);\n    return filePath;\n  } catch (e) {\n    warn(\"Failed to initialize trace file\", e);\n  }\n\n  try {\n    const usable = await ensureTraceDir(FALLBACK_TRACE_DIR);\n    const filePath = getTraceFilePath(runId, usable);\n    await createEmptyTraceFile(filePath);\n    return filePath;\n  } catch (e) {\n    warn(\"Failed to initialize trace file on fallback directory\", e);\n    return undefined;\n  }\n}\n\n/**\n * Appends one validated JSONL line for `event.runId`. Falls back to {@link FALLBACK_TRACE_DIR} on append failure.\n */\nfunction ensureEventWithinBounds(event: TraceEvent): TraceEvent {\n  const line = serializeEvent(event);\n  if (line === \"\") return event;\n  const bytes = Buffer.byteLength(line, \"utf8\");\n  if (bytes <= DEFAULT_MAX_EVENT_BYTES) return event;\n  return prepareTraceEventForDisk(event, resolveTraceSafetyOptions());\n}\n\nexport async function writeTraceEvent(\n  event: TraceEvent,\n  traceDir: string,\n): Promise<void> {\n  const bounded = ensureEventWithinBounds(event);\n\n  if (!validateEvent(bounded)) {\n    warn(\"Skipped invalid trace event (validation failed)\");\n    return;\n  }\n\n  const line = serializeEvent(bounded);\n  if (line === \"\") {\n    warn(\"Skipped trace event (serialization failed)\");\n    return;\n  }\n\n  const payload = `${line}\\n`;\n\n  const tryAppend = async (dir: string): Promise<boolean> => {\n    try {\n      const usable = await ensureTraceDir(dir);\n      const filePath = getTraceFilePath(event.runId, usable);\n      await appendTraceFile(filePath, payload);\n      return true;\n    } catch {\n      return false;\n    }\n  };\n\n  if (await tryAppend(traceDir)) {\n    return;\n  }\n\n  warn(`Failed to append trace event for run ${event.runId}`);\n\n  if (await tryAppend(FALLBACK_TRACE_DIR)) {\n    return;\n  }\n\n  warn(\"Failed to append trace event to fallback directory\");\n}\n\n/**\n * Reads raw JSONL file contents for a run, or `undefined` if missing or unreadable.\n */\nexport async function readTraceFile(\n  runId: string,\n  traceDir: string,\n): Promise<string | undefined> {\n  try {\n    const filePath = getTraceFilePath(runId, traceDir);\n    return await readFile(filePath, \"utf-8\");\n  } catch (e) {\n    if (e && typeof e === \"object\" && \"code\" in e && e.code === \"ENOENT\") {\n      return undefined;\n    }\n    warn(\"Unexpected error reading trace file\", e);\n    return undefined;\n  }\n}\n\n/**\n * Parses JSONL into validated {@link TraceEvent} rows (v0.1 native or v0.2 normalized).\n * Invalid lines are skipped with a warning.\n */\nexport async function readTraceEvents(\n  runId: string,\n  traceDir: string,\n): Promise<TraceEvent[]> {\n  try {\n    const filePath = getTraceFilePath(runId, traceDir);\n    return await readTraceEventsFromFile(filePath);\n  } catch (e) {\n    warn(\"Failed to read trace events\", e);\n    return [];\n  }\n}\n\n/**\n * Reads and normalizes trace events from an exact file path.\n * Used by directory scans where the embedded run id may differ from the basename.\n */\nexport async function readTraceEventsFromFile(\n  filePath: string,\n): Promise<TraceEvent[]> {\n  try {\n    const raw = await readFile(filePath, \"utf-8\");\n    return parseTraceJsonl(raw, { validate: validateEvent }).events;\n  } catch (e) {\n    if (e && typeof e === \"object\" && \"code\" in e && e.code === \"ENOENT\") {\n      return [];\n    }\n    warn(\"Failed to read trace events from file\", e);\n    return [];\n  }\n}\n\n/**\n * Lists `.jsonl` file names in `traceDir`, newest by mtime first (name sort as tie-breaker).\n */\nexport async function listTraceFiles(traceDir: string): Promise<string[]> {\n  try {\n    const usable = path.resolve(traceDir);\n    const names = await readdir(usable);\n    const jsonl = names.filter((n) => n.endsWith(\".jsonl\"));\n    const withStat = await Promise.all(\n      jsonl.map(async (name) => {\n        try {\n          const st = await stat(path.join(usable, name));\n          return { name, mtime: st.mtimeMs };\n        } catch {\n          return { name, mtime: 0 };\n        }\n      }),\n    );\n    withStat.sort((a, b) => {\n      if (b.mtime !== a.mtime) return b.mtime - a.mtime;\n      return a.name.localeCompare(b.name);\n    });\n    return withStat.map((x) => x.name);\n  } catch {\n    return [];\n  }\n}\n\n/** Maps a `.jsonl` file name to its run id (basename only; no traversal). */\nexport function getRunIdFromTraceFileName(fileName: string): string | undefined {\n  try {\n    const base = path.basename(fileName);\n    if (!base.endsWith(\".jsonl\")) return undefined;\n    const id = base.slice(0, -\".jsonl\".length);\n    return id === \"\" ? undefined : id;\n  } catch {\n    return undefined;\n  }\n}\n"]}